#include <math.h>
#include <Types.h>
-ctx::num_t ctx::MahalModel::distance(const std::vector<num_t> &v1, const std::vector<num_t> &v2, const std::vector<num_t> &m)
+ctx::num_t ctx::MahalModel::__distance(const std::vector<num_t> &v1, const std::vector<num_t> &v2, const std::vector<num_t> &m)
{
size_t n = v1.size();
if (m.size() != n * n) {
ctx::num_t ctx::MahalModel::distance(const std::vector<ctx::num_t> &v)
{
- return distance(v, __mean, __sigma);
+ return __distance(v, __mean, __sigma);
}
private:
std::vector<num_t> __mean;
std::vector<num_t> __sigma; // represents square matrix row-wise
+ static num_t __distance(const std::vector<num_t> &v1, const std::vector<num_t> &v2, const std::vector<num_t> &m);
public:
- static num_t distance(const std::vector<num_t> &v1, const std::vector<num_t> &v2, const std::vector<num_t> &m);
MahalModel(std::vector<num_t> mean, std::vector<num_t> sigma) :
__mean(mean),
__sigma(sigma) { }
#include <algorithm>
#include <Types.h>
-void ctx::PlaceCateger::reduceOutliers(ctx::Visits &visits)
+void ctx::PlaceCateger::__reduceOutliers(ctx::Visits &visits)
{
int size = visits.size();
visits.erase(std::remove_if(
void ctx::PlaceCateger::categorize(ctx::Visits &visits, ctx::Place &place)
{
- reduceOutliers(visits);
+ __reduceOutliers(visits);
place.categId = PLACE_CATEG_ID_NONE;
place.categConfidence = 0.0;
num_t sumScore = 0.0;
num_t maxScore = 0.0;
for (PlaceCategId categId : categIds) {
- std::vector<num_t> categVector = categVectorFromVisits(visits, categId);
+ std::vector<num_t> categVector = __categVectorFromVisits(visits, categId);
num_t score = median(categVector);
sumScore += score;
if (score > maxScore) {
}
}
- place.name = categId2Name(place.categId);
+ place.name = __categId2Name(place.categId);
}
-std::vector<ctx::num_t> ctx::PlaceCateger::categVectorFromVisits(const ctx::Visits &visits, PlaceCategId categId)
+std::vector<ctx::num_t> ctx::PlaceCateger::__categVectorFromVisits(const ctx::Visits &visits, PlaceCategId categId)
{
std::vector<ctx::num_t> vec;
for (auto &visit : visits) {
return vec;
}
-std::string ctx::PlaceCateger::categId2Name(PlaceCategId categId) {
+std::string ctx::PlaceCateger::__categId2Name(PlaceCategId categId) {
switch (categId) {
case PLACE_CATEG_ID_HOME:
return "home";
private:
static bool __reduceCategory(const PlaceCategId &categId, const ctx::Visits &visits);
+ static void __reduceOutliers(Visits &visits);
+ static std::vector<ctx::num_t> __categVectorFromVisits(const ctx::Visits &visits, PlaceCategId categId);
+ static std::string __categId2Name(PlaceCategId categId);
public:
- static void reduceOutliers(Visits &visits); // TODO: move to private
- static std::vector<ctx::num_t> categVectorFromVisits(const ctx::Visits &visits, PlaceCategId categId); // TODO: move to private
static void categorize(ctx::Visits &visits, ctx::Place &place);
- static std::string categId2Name(PlaceCategId categId); // TODO: move to private
}; /* class PlaceCateger */
return places;
}
-void ctx::PlacesDetector::reduceOutliers(ctx::Visits &visits)
+void ctx::PlacesDetector::__reduceOutliers(ctx::Visits &visits)
{
int size = visits.size();
visits.erase(std::remove_if(
void ctx::PlacesDetector::__processVisits(ctx::Visits &visits)
{
- reduceOutliers(visits);
+ __reduceOutliers(visits);
_D("__testMode = %d", __testMode);
auto components = __mergeVisits(visits);
return place;
}
-void ctx::PlacesDetector::reduceOutliers(std::shared_ptr<ctx::graph::Components> &cc)
+void ctx::PlacesDetector::__reduceOutliers(std::shared_ptr<ctx::graph::Components> &cc)
{
int size = cc->size();
cc->erase(std::remove_if(cc->begin(),
{
auto graph = __graphFromVisits(visits);
auto cc = graph::connectedComponents(*graph);
- reduceOutliers(cc);
+ __reduceOutliers(cc);
return cc;
}
void __processVisits(Visits &visits);
static void __mergeLocation(const Visits &mergedVisits, Place &place);
std::shared_ptr<graph::Components> __mergeVisits(const std::vector<Visit> &visits);
+ static void __reduceOutliers(Visits &visits);
+ static void __reduceOutliers(std::shared_ptr<graph::Components> &cc);
bool onTimerExpired(int timerId);
public:
PlacesDetector(bool testMode = false);
- static void reduceOutliers(Visits &visits); // TODO: move to private
- static void reduceOutliers(std::shared_ptr<graph::Components> &cc); // TODO: move to private
std::vector<std::shared_ptr<Place>> getPlaces();
}; /* class PlacesDetector */
0.109386661911
});
-ctx::TimeFeatures ctx::VisitCateger::timeFeatures(const time_t &time)
+ctx::TimeFeatures ctx::VisitCateger::__timeFeatures(const time_t &time)
{
struct tm timeinfo;
struct tm *result;
};
}
-int ctx::VisitCateger::weeksScope(const TimeFeatures &startF, const Interval &interval)
+int ctx::VisitCateger::__weeksScope(const TimeFeatures &startF, const Interval &interval)
{
int durationMinutes = (interval.end - interval.start) / 60;
int scopeMinutes = startF.minutesSinceBeginingOfTheWeek + durationMinutes;
{
num_t ret = 0.0;
int minutes = 0;
- int ws = weeksScope(startF, interval);
+ int ws = __weeksScope(startF, interval);
for (int week = 1; week <= ws; week++) {
size_t startIndex = (week == 1)
? startF.minutesSinceBeginingOfTheWeek
return ret;
}
-ctx::Categs ctx::VisitCateger::weekModelFeatures(const Interval &interval, const TimeFeatures &startF, const TimeFeatures &endF)
+ctx::Categs ctx::VisitCateger::__weekModelFeatures(const Interval &interval, const TimeFeatures &startF, const TimeFeatures &endF)
{
ctx::Categs categs;
for (const auto &item : prob_features::weekModel) {
return categs;
}
-ctx::IntervalFeatures ctx::VisitCateger::intervalFeatures(const Interval &interval)
+ctx::IntervalFeatures ctx::VisitCateger::__intervalFeatures(const Interval &interval)
{
num_t durationMinutes = 1.0 * (interval.end - interval.start) / 60;
- TimeFeatures startFeatures = timeFeatures(interval.start);
- TimeFeatures endFeatures = timeFeatures(interval.end);
- Categs weekFeatures = weekModelFeatures(interval, startFeatures, endFeatures);
+ TimeFeatures startFeatures = __timeFeatures(interval.start);
+ TimeFeatures endFeatures = __timeFeatures(interval.end);
+ Categs weekFeatures = __weekModelFeatures(interval, startFeatures, endFeatures);
return {
durationMinutes,
(num_t) startFeatures.minutesSinceMidnight,
void ctx::VisitCateger::categorize(ctx::Visit &visit)
{
- IntervalFeatures features = intervalFeatures(visit.interval);
+ IntervalFeatures features = __intervalFeatures(visit.interval);
__normalize(features);
for (auto &modelPair : __models) {
static void __normalize(std::vector<num_t> &features);
static PiecewiseLin __chiApprox; // tabled chi function approximator
- public:
/**
* Function interpret time in timestamp input argument,
*
* @param time timestamp
* @return TimeFeatures structure with interpretations of timestamp
*/
- static TimeFeatures timeFeatures(const time_t &time);
+ static TimeFeatures __timeFeatures(const time_t &time);
- static int weeksScope(const TimeFeatures &startF, const Interval &interval);
+ static int __weeksScope(const TimeFeatures &startF, const Interval &interval);
/**
* Function interpret time interval input argument and calculates scores
* @param endF end time features
* @return Categs score that argument interval is home, work or other
*/
- static Categs weekModelFeatures(const Interval &interval, const TimeFeatures &startF,
+ static Categs __weekModelFeatures(const Interval &interval, const TimeFeatures &startF,
const TimeFeatures &endF);
/**
* @param interval time interval
* @return IntervalFeatures vector with interpretations of input time interval
*/
- static IntervalFeatures intervalFeatures(const Interval &interval);
+ static IntervalFeatures __intervalFeatures(const Interval &interval);
+
+ public:
/**
* Function categorize visit based on visits time interval and fill its categories values.
return macs2Shares;
}
-std::shared_ptr<ctx::Visits> ctx::VisitDetector::getVisits()
+std::shared_ptr<ctx::Visits> ctx::VisitDetector::__getVisits()
{
return __detectedVisits;
}
bool __protrudesFrom(const Macs2Counts &macs2Counts, const MacSet &macSet);
void __setPeriod(PlaceRecogMode mode);
void __processCurrentLogger();
+ std::shared_ptr<Visits> __getVisits();
/* DATABASE */
void __dbCreateTables();
VisitDetector(time_t startScan, PlaceRecogMode energyMode = PLACE_RECOG_HIGH_ACCURACY_MODE, bool testMode = false);
~VisitDetector();
- std::shared_ptr<Visits> getVisits(); // only used in test mode
void setMode(PlaceRecogMode energyMode);
}; /* class VisitDetector */