void RecordHandler::handle(StationData* stationData, Record* record) { RecordPtr recordAutoPtr(record); if ( stationData->gmGain == 0 ) return; if ( !record->data() ) return; int dataSize = record->data()->size(); if ( dataSize <= 0 ) return; ArrayPtr array = record->data()->copy(Array::DOUBLE); double* data = static_cast<double*>(const_cast<void*>(array->data())); if ( !data ) return; stationData->gmFilter->setSamplingFrequency(record->samplingFrequency()); stationData->gmFilter->apply(dataSize, data); double* begin = data; double* maximumSample = std::max_element(begin, data + dataSize, std::ptr_fun(RecordHandlerCompare)); *maximumSample = fabs(*maximumSample); if ( stationData->gmMaximumSample < *maximumSample || Core::Time::GMT() - stationData->gmSampleReceiveTime > _sampleLifespan ) { stationData->gmSampleReceiveTime = Core::Time::GMT(); stationData->gmMaximumSample= *maximumSample; } try { stationData->gmRecordReceiveTime = record->endTime(); } catch ( Core::ValueException& ) { stationData->gmRecordReceiveTime = Core::Time::GMT(); } double velocity = stationData->gmMaximumSample / stationData->gmGain * 1E9; stationData->gmColor = calculateColorFromVelocity(velocity); }