public IntervalSnapshots CalculateSnapshots(Person person)
        {
            if (person.IsSnapshotsKnown)
            {
                return(person.Snapshots);
            }

            //start on first day at 00:00:00
            if (person.StartFrom == new DateTime())
            {
                DateTime d = person.ActivePalEvents.ToList().First().Date;
                person.StartFrom = new DateTime(d.Year, d.Month, d.Day);
            }

            //end on the last day at 00:00:00
            if (person.StopAt == new DateTime())
            {
                DateTime d = person.ActivePalEvents.ToList().Last().Date;
                person.StopAt = new DateTime(d.Year, d.Month, d.Day);
            }

            //IRecordConverter converter = new PalRecordsConverter(CheckpointRate);
            IntervalSnapshots result = recordConverter
                                       .ToCheckpointRecords(
                person.ActivePalEvents,
                person.StartFrom,
                person.StopAt,
                person.CheckpointRate);

            person.Snapshots = result;

            person.IsSnapshotsKnown = true;

            return(person.Snapshots);
        }
Example #2
0
        public string Save(IntervalSnapshots snapshots,
                           string toFilePath,
                           bool asOneLineString    = false,
                           bool saveJustEventCodes = false,
                           bool shoulAppend        = false,
                           string separator        = ", ")
        {
            IEnumerable <int> activityCodes = snapshots.Data.Select(
                record =>
                (int)record.ActivityCode);

            csvWriter.Separator = separator;

            if (asOneLineString)
            {
                csvWriter.WriteData(activityCodes, toFilePath, true);
            }
            else
            {
                if (saveJustEventCodes)
                {
                    csvWriter.WriteData(activityCodes, toFilePath);
                }
                else
                {
                    csvWriter.WriteData(snapshots.Data, toFilePath);
                }
            }

            return(Path.GetFullPath(toFilePath));
        }
        private EntropyResult CalculateEntropy(DateTime start, DateTime stop, TimeSpan interval)
        {
            recordConverter.ActivityCheck = interval;
            var events = GetEvents(subjectFile);
            IntervalSnapshots checkpoints = recordConverter.ToCheckpointRecords(
                events,
                start,
                stop,
                interval);
            var entropy = new Entropy();

            return(entropy.CalculateShannonEntropy(checkpoints, alphabet.GetAlphabet()));
        }
Example #4
0
        public string SaveSnapshots(Person person, string toFilePath,
                                    bool asOneLineString    = false,
                                    bool saveJustEventCodes = false,
                                    string separator        = ", ")
        {
            if (String.IsNullOrEmpty(toFilePath))
            {
                toFilePath = String.Concat(person.Id, "outputSnapshots.csv");
            }

            IntervalSnapshots snapshots = calculationService.CalculateSnapshots(person);
            string            output    = snapService.Save(snapshots, toFilePath, asOneLineString,
                                                           saveJustEventCodes, separator: separator);

            return(output);
        }
        public double CalculateCompressionRate(Person person, CompressionType compressionType
                                               = CompressionType.Gzip)
        {
            if (person.CompressionRate != null)
            {
                return((double)person.CompressionRate);
            }

            IntervalSnapshots snapshots          = CalculateSnapshots(person);
            string            suffix             = ConfigurationManager.AppSettings["snapshotTextOutput"];
            string            toUncompressedPath = String.Concat(person.Id, suffix);
            double            rate = GetCompressionRate(toUncompressedPath, snapshots.Data, compressionType);

            person.CompressionRate = rate;

            return(rate);
        }
        public IEnumerable <IntervalSnapshots> CalculateDailySnapshots(
            Person person,
            TimeSpan startTime,
            TimeSpan stopTime,
            int skipFirsDays = 0,
            int skipLastDay  = 0)
        {
            var daysSnapshots = new List <IntervalSnapshots>();

            //first record date
            DateTime date      = person.ActivePalEvents.ToList().First().Date.AddDays(skipFirsDays);
            var      startDate = new DateTime(date.Year, date.Month, date.Day,
                                              startTime.Hours, startTime.Minutes,
                                              startTime.Seconds, startTime.Milliseconds);

            var stopDate = new DateTime(date.Year, date.Month, date.Day,
                                        stopTime.Hours, stopTime.Minutes,
                                        stopTime.Seconds, stopTime.Milliseconds);

            //last date record
            date = person.ActivePalEvents.ToList().Last().Date;
            var fullStopDate = new DateTime(date.Year, date.Month, date.Day - skipLastDay);

            while (stopDate < fullStopDate)
            {
                //IRecordConverter converter = new PalRecordsConverter(CheckpointRate);
                IntervalSnapshots daySnap = recordConverter
                                            .ToCheckpointRecords(
                    person.ActivePalEvents,
                    startDate,
                    stopDate,
                    person.CheckpointRate);
                daysSnapshots.Add(daySnap);

                startDate = startDate.AddDays(1);
                stopDate  = stopDate.AddDays(1);
            }

            return(daysSnapshots);
        }
        public override IntervalSnapshots ToCheckpointRecords(IEnumerable <EventRecord> events,
                                                              DateTime start, DateTime stop, TimeSpan activityCheck)
        {
            var           snapshots = new IntervalSnapshots();
            List <Record> data      = snapshots.Data.ToList();

            //create a list of checkpoints from the start date to the final record
            ICheckpointFactory factory = new CheckpointFactory();
            var defaultCheckpoints     = factory.CreateRecords(start, stop, activityCheck);

            //TODO can be improved by trimming the whole list from sides
            List <EventRecord> palEvents = events.ToList();

            int         pointer             = 0;
            int         palEventCount       = events.Count();
            EventRecord firstIntervalRecord = null;
            EventRecord lastIntervalRecord  = null;

            //for every default blunt checkpoint
            defaultCheckpoints.ToList().ForEach(
                checkPoint
                =>
            {
                //get currentRecord date
                DateTime checkPointDate = checkPoint.Date;

                //while pointer is less the count
                while (pointer < palEventCount)
                {
                    EventRecord palEvent = palEvents[pointer];
                    DateTime end         = palEvent.Date + palEvent.Duration;

                    //if event date stretches thoough the checkpoint
                    if (end > checkPointDate)
                    {
                        //set first record in the interval
                        if (firstIntervalRecord == null)
                        {
                            firstIntervalRecord = palEvent;
                        }

                        //will leave the last record after looping
                        lastIntervalRecord = palEvent;

                        //remember activity code
                        checkPoint.ActivityCode = palEvent.ActivityCode;
                        data.Add(checkPoint);
                        break;
                    }

                    pointer += 1;
                }
            }
                );

            snapshots.Data       = data;
            snapshots.StartDate  = start;
            snapshots.FinishDate = stop;

            if (lastIntervalRecord != null && firstIntervalRecord != null)
            {
                snapshots.CumulativeStepCount = lastIntervalRecord.CumulativeStepCount -
                                                firstIntervalRecord.CumulativeStepCount;
            }

            return(snapshots);
        }