/** * Calculate by trackdata * @param \Runalyze\Model\Trackdata\Object $trackdata */ public function calculateByTrackdata(Trackdata\Object $trackdata) { if (!$trackdata->has(Trackdata\Object::HEARTRATE)) { return; } return $this->calculateByHeartrate(new TimeSeries($trackdata->get(Trackdata\Object::HEARTRATE), $trackdata->get(Trackdata\Object::TIME))); }
/** * Collect data */ protected function collectData() { $data = $this->Trackdata->get($this->IndexKey); $time = $this->Trackdata->get(Trackdata\Object::TIME); $rawdata = array(); foreach (array_merge($this->SumDifferencesKeys, $this->AvgValuesKeys) as $key) { $rawdata[$key] = $this->Trackdata->get($key); } foreach ($data as $i => $val) { if (!isset($this->Data[$val])) { $this->Data[$val] = array(); foreach (array_merge($this->SumDifferencesKeys, $this->AvgValuesKeys) as $key) { $this->Data[$val][$key] = 0; } } foreach ($this->SumDifferencesKeys as $key) { $prev = $i == 0 ? 0 : $rawdata[$key][$i - 1]; $this->Data[$val][$key] += $rawdata[$key][$i] - $prev; } $timeDiff = $i == 0 ? $time[0] : $time[$i] - $time[$i - 1]; foreach ($this->AvgValuesKeys as $key) { $this->Data[$val][$key] += $rawdata[$key][$i] * $timeDiff; } } $this->calculateAverages(); }
/** * @param enum $trackdataKey * @param enum $activityKey */ protected function removeFromActivityIfValueIsEqualToAverage($trackdataKey, $activityKey) { // TODO: this does not use a filter for low values as ParserAbstractSingle does $dataArray = $this->Trackdata->get($trackdataKey); $dataAverage = round(array_sum($dataArray) / count($dataArray)); if ($this->Activity->get($activityKey) == $dataAverage) { $this->Activity->set($activityKey, ''); } }
/** * Init data * @param \Runalyze\Model\Trackdata $trackdata * @param string $key */ protected function fillGaps(Trackdata $trackdata, $key) { $data = $trackdata->get($key); $last = $data[0]; foreach ($data as &$val) { if ($val == 0) { $val = $last; } $last = $val; } $trackdata->set($key, $data); }