Exemplo n.º 1
0
void Calibrator::announceCalibrationUpdate() {
    Datum announceData(M_DICTIONARY, 2);
    announceData.addElement(CALIBRATOR_NAME,uniqueCalibratorName);        // char
    announceData.addElement(CALIBRATOR_ACTION,CALIBRATOR_ACTION_UPDATE_PARAMS);
    // TODO announce parameters in base class ?? too messy.
    announce(announceData);    // announce things here using method from Announcable
}
Exemplo n.º 2
0
void Calibrator::initialize() {

    pUncalibratedData = new Datum(M_LIST, this->getNumInputs() );
    pSampledData = new Datum(M_LIST, this->getNumInputs() );
    
    pCalibratedData = new Datum(M_LIST, this->getNumOutputs() );
    fitableFunctions = new ExpandableList<FitableFunction>( this->getNumOutputs() );
    
    // set vectors to 0 as defaults
    for (int i = 0; i < this->getNumInputs(); i++) {
        pUncalibratedData->setElement(i, (double)0);
        pSampledData->setElement(i, (double)0);
    }
    for (int i = 0; i < this->getNumOutputs(); i++) {
        pCalibratedData->setElement(i, (double)0);
    }
    
    // create an averager for each input line (also feeds off the input variable)
    averagers = new ExpandableList<Averager>( this->getNumInputs() );
    shared_ptr<Variable> inputVariable;
    for (int inputIndex=0;inputIndex<this->getNumInputs();inputIndex++) { 
        if (this->getInputVariable(inputIndex, &inputVariable)) {
            shared_ptr<Averager> averager(new Averager(inputVariable)); 
            averagers->addReference(inputIndex, averager);
        }
    }
    
    // announce the presence of the calibrator
    Datum announceData(M_DICTIONARY, 2);
    announceData.addElement(CALIBRATOR_NAME,uniqueCalibratorName);    // char
    announceData.addElement(CALIBRATOR_ACTION,CALIBRATOR_ACTION_IDENTIFY_SELF);    
    announce(announceData);    // announce things here using method from Announcable

    initialized = true;
}
Datum StandardDynamicStimulus::getCurrentAnnounceDrawData() {
    Datum announceData(M_DICTIONARY, 5);
    announceData.addElement(STIM_NAME, tag);
    announceData.addElement(STIM_ACTION, STIM_ACTION_DRAW);
    announceData.addElement(STIM_TYPE, "standard_dynamic_stimulus");  
    announceData.addElement("start_time", getStartTime());  
    return announceData;
}
// override of base class to provide more info
Datum DisplayBitCodeStimulus::getCurrentAnnounceDrawData() {
    
    
    Datum announceData(M_DICTIONARY, 2);
    announceData.addElement(STIM_NAME, getTag());        // char
    announceData.addElement("bit_code",Datum((long)(*code_variable))); 

    return (announceData);
}
Exemplo n.º 5
0
// method to announce details about each sample that is acquired for calibration  
void Calibrator::announceCalibrationSample(int outputIndex, Datum SampledData, 
                     Datum DesiredOutputData, Datum CalibratedOutputData, MWTime timeOfSampleUS) {
    
    Datum announceData(M_DICTIONARY, 3);
    announceData.addElement(CALIBRATOR_NAME,uniqueCalibratorName);    // char
    announceData.addElement(CALIBRATOR_ACTION,CALIBRATOR_ACTION_SAMPLE);
    announceData.addElement("outputIndex",(long)outputIndex);
    
    if (VERBOSE_EYE_CALIBRATORS) mprintf("mCalibrator::announceCalibrationSample  Announcing now");
    announce(announceData);    // announce things here using method from Announcable
}
Exemplo n.º 6
0
// method to announce details about each sample that is acquired for calibration  
void EyeCalibrator::announceCalibrationSample(int outputIndex, Datum SampledData, 
                    Datum DesiredOutputData, Datum CalibratedOutputData, MWTime timeOfSampleUS) {
    
    // this method expects the H sample to arrive first and then the V sample
    if (outputIndex == outputIndexH) {  // store data and wait for v (announce as pair)
        desiredH = DesiredOutputData;
        calibratedH = CalibratedOutputData;
        sampledH = (&SampledData)->getElement(inputIndexH);
        HsampleTime = timeOfSampleUS;
        return;
    }
    if (outputIndex == outputIndexV) {  // store data and wait for v (announce as pair)
        desiredV = DesiredOutputData;
        calibratedV = CalibratedOutputData;
        sampledV = (&SampledData)->getElement(inputIndexV);
        if ( (std::abs(timeOfSampleUS-HsampleTime)) > 10000) {
            mwarning(M_SYSTEM_MESSAGE_DOMAIN,
            "Calibrator sample announce detected large time differential between h and v samples.  Values likely inaccurate.");
        }
    }
    
    
    Datum announceData(M_DICTIONARY, 5);
    announceData.addElement(CALIBRATOR_NAME,uniqueCalibratorName);    // char
    announceData.addElement(CALIBRATOR_ACTION,CALIBRATOR_ACTION_SAMPLE);
    
    {
        Datum temp(M_LIST, 2);
        temp.setElement(0,sampledH);
        temp.setElement(1,sampledV);
        announceData.addElement(CALIBRATOR_SAMPLE_SAMPLED_HV,temp);    // input values
    }
    
    {
        Datum temp(M_LIST, 2);
        temp.setElement(0,desiredH);
        temp.setElement(1,desiredV);
        announceData.addElement(CALIBRATOR_SAMPLE_DESIRED_HV,temp);    // gold standard values
    }
    
    {
        Datum temp(M_LIST, 2);
        temp.setElement(0,calibratedH);
        temp.setElement(1,calibratedV);
        announceData.addElement(CALIBRATOR_SAMPLE_CALIBRATED_HV,temp); // values produced from input values using current calibration
    }
    
    //announceData.addElement("JJDtest",desiredH); // values produced from input values using current calibration
    
    if (VERBOSE_EYE_CALIBRATORS) mprintf("mCalibrator::announceCalibrationSample  Announcing now");
    announce(announceData);    // announce things here using method from Announcable

}
Exemplo n.º 7
0
Datum CircularFixationPoint::getCurrentAnnounceDrawData() {
    Datum announceData(CircleStimulus::getCurrentAnnounceDrawData());
    
    announceData.addElement(STIM_TYPE, "circular_fixation_point");
    
    // CircularRegionTrigger parameters
    announceData.addElement("center_x", centerx->getValue().getFloat());
    announceData.addElement("center_y", centery->getValue().getFloat());
    announceData.addElement("width", width->getValue().getFloat());
    
    return announceData;
}
Exemplo n.º 8
0
void EyeCalibrator::announceCalibrationUpdate() {

    Datum announceData(M_DICTIONARY, 4);
    announceData.addElement(CALIBRATOR_NAME,uniqueCalibratorName);
    announceData.addElement(CALIBRATOR_ACTION,CALIBRATOR_ACTION_UPDATE_PARAMS);
    
    Datum paramsH = (fitableFunctions->getElement(HfunctionIndex))->getParameters();
    announceData.addElement(CALIBRATOR_PARAMS_H,paramsH);   // M_LIST
    
    Datum paramsV = (fitableFunctions->getElement(VfunctionIndex))->getParameters();
    announceData.addElement(CALIBRATOR_PARAMS_V,paramsV);   // M_LIST
    
    announce(announceData);    // announce things here using method from Announcable (will set values in announce variable)

}