Exemplo n.º 1
0
/**
 * @brief updateStimulus
 */
void updateStimulus()
{
    double stimSize = parameters.get("StimulusSize");
	double stimPeriod = parameters.get("StimulusPeriod");
	double zWidth = trial.getCurrent().at("ZWidth");
	int nStimulusPoints = (int)(stimSize*stimSize*parameters.get("StimulusDensity"));
	// Generate the plane stimulus
    if (parameters.find("StimulusType")=="Plane")
    {
        stimulus.setDimensions(stimSize,stimSize,0.001);
        stimulus.setNpoints(nStimulusPoints);
        stimulus.setFluffiness(0.001);
        stimulus.compute();
    }
    else if (parameters.find("StimulusType")=="Sinusoid")
    {
        stimulus.setDimensions(stimSize,stimSize,0.001);
        stimulus.setNpoints(nStimulusPoints);
        stimulus.setFluffiness(0.001);
        for (PointsRandIterator iter = stimulus.pointsRand.begin(); iter!=stimulus.pointsRand.end();++iter)
        {
            (*iter)->x = mathcommon::unifRand(-stimSize/2,stimSize/2);
            (*iter)->y = mathcommon::unifRand(-stimSize/2,stimSize/2);
            (*iter)->z = 0.5*zWidth*sin(((*iter)->x)/stimPeriod*M_PI);
        }
    }
    else
    {
        throw std::runtime_error("Wrong argument! Must be Sinusoid or Plane");
    }

    // Generate the front stimulus
    stimDrawer.setSpheres(false);
    stimDrawer.setStimulus(&stimulus);
    stimDrawer.initList(&stimulus,glRed,parameters.get("PointsSize"));
}