public FeatureBasedDCM(string name,
            IEnumerable<string> incidentTypes,
            Area trainingArea,
            DateTime trainingStart,
            DateTime trainingEnd,
            IEnumerable<Smoother> smoothers,
            int trainingPointSpacing,
            int featureDistanceThreshold,
            int negativePointStandoff,
            PTL.ATT.Classifiers.Classifier classifier,
            IEnumerable<Feature> features)
            : base(name, incidentTypes, trainingArea, trainingStart, trainingEnd, smoothers)
        {
            _trainingPointSpacing = trainingPointSpacing;
            _featureDistanceThreshold = featureDistanceThreshold;
            _negativePointStandoff = negativePointStandoff;
            _classifier = classifier;
            _classifier.Model = this;

            Construct(); // initializes feature lookups

            if (features != null)
                Features = new List<Feature>(features); // saves features and fills feature lookups

            Update();
        }
        public TimeSliceDCM(string name,
            IEnumerable<string> incidentTypes,
            Area trainingArea,
            DateTime trainingStart,
            DateTime trainingEnd,
            IEnumerable<Smoother> smoothers,
            int trainingPointSpacing,
            int featureDistanceThreshold,
            int negativePointStandoff,
            PTL.ATT.Classifiers.Classifier classifier,
            IEnumerable<Feature> features,
            int timeSliceHours,
            int periodTimeSlices)
            : base(name, incidentTypes, trainingArea, trainingStart, trainingEnd, smoothers, trainingPointSpacing, featureDistanceThreshold, negativePointStandoff, classifier, features)
        {
            _timeSliceHours = timeSliceHours;
            _periodTimeSlices = periodTimeSlices;
            _timeSliceTicks = new TimeSpan(_timeSliceHours, 0, 0).Ticks;

            Update();
        }