void UnhideTrigger::pollMouse()
{
    QPoint pos = QCursor::pos();
    for(int s = 0; s < QApplication::desktop()->numScreens(); s++)
    {
        QRect r = QApplication::desktop()->screenGeometry(s);
        if(pos.x() == r.left())
        {
            if(pos.y() == r.top())
            {
                emitTrigger(TopLeft, s);
            }
            else if(pos.y() == r.bottom())
            {
                emitTrigger(BottomLeft, s);
            }
            else
            {
                emitTrigger(Left, s);
            }
        }
        else if(pos.x() == r.right())
        {
            if(pos.y() == r.top())
            {
                emitTrigger(TopRight, s);
            }
            else if(pos.y() == r.bottom())
            {
                emitTrigger(BottomRight, s);
            }
            else
            {
                emitTrigger(Right, s);
            }
        }
        else if(pos.y() == r.top())
        {
            emitTrigger(Top, s);
        }
        else if(pos.y() == r.bottom())
        {
            emitTrigger(Bottom, s);
        }
        else if(_lastTrigger != None)
        {
            emitTrigger(None, -1);
        }
    }
}
void ProbabilityEstimator::step()
{
        m_delay -= GetGlobalDt();
        if (m_flag && m_delay <= 0.0) {
                double weight;
                int spike;
                if (fabs(m_tPrevSpike - m_tPrevStim) < PE_WNDW) // the spike arrived within the window time after the stimulation
                        spike = 1;
                else
                        spike = 0;
                weight = exp(-PE_T/PE_TAU);
                m_probability = (1-weight)*spike + weight*m_probability;
                emitTrigger();
                Logger(Important, "ProbabilityEstimator(%d): estimated probability: %g\n", id(), m_probability);
                m_flag = false;
        }
}
void FrequencyEstimator::handleEvent(const Event *event)
{
    double now = event->time();
    switch(event->type())
    {
    case SPIKE:
        if(m_tPrevSpike > 0 && m_state) {
            double isi, weight;
            isi = now - m_tPrevSpike;
            weight = exp(-isi/FE_TAU);
            m_frequency = (1-weight)/isi + weight*m_frequency;
            emitTrigger();
            Logger(Debug, "FrequencyEstimator(%d): Estimated frequency: %g\n", id(), m_frequency);
        }
        m_tPrevSpike = now; // Updates last spike also when TOGGLE is off.
        break;
    case TOGGLE:
        changeState();
        Logger(Debug, "FrequencyEstimator(%d): Toggled at %9.3f.\n", id(), GetGlobalTime());
        break;
    }
}