public static DataCleaner<Track<NopHit>> simpleSmoothing() {

        NopEncoder nopEncoder = new NopEncoder();

        DataCleaner<Track<NopHit>> cleaner = coreSmoothing();
        ToStringFunction<Track<NopHit>> toString = track -> nopEncoder.asRawNop(track);
        ExceptionHandler exceptionHandler = new SequentialFileWriter("trackCleaningExceptions");

        return new ExceptionCatchingCleaner<>(cleaner, toString, exceptionHandler);
    }
@Test
    public void testSimultaneousSmoothing() {
        /*
         * The file: starsTrackWithCoastedPoints.txt contains...
         *
         * 2 Coasted Points
         *
         * 1 Dropped Point
         *
         * 1 artifically added vertical outlier (the 43rd point had its altitude set to 000)
         *
         * 1 possible vertical outlier that wasn't fixed (the very first point)
         *
         * This test verifies that (A) the coasted and dropped points are removed, (B) the vertical
         * outlier is fixed.
         */

        Track<NopHit> unSmoothedTrack = Tracks.createTrackFromResource(
            Track.class,
            "starsTrackWithCoastedPoints.txt"
        );

        VerticalOutlierDetector<NopHit> vod = new VerticalOutlierDetector<>();

        int sizeBeforeSmoothing = unSmoothedTrack.size();
        int numVerticalOutliersBeforeSmoothing = vod.getOutliers(unSmoothedTrack).size();

        Track<NopHit> smoothedTrack = (simpleSmoothing()).clean(unSmoothedTrack).get();

        int sizeAfterSmoothing = smoothedTrack.size();
        int numVerticalOutliersAfterSmoothing = vod.getOutliers(smoothedTrack).size();

        //accounts for the DownSampler that removes poitns that occur within 3.5 sec
        int pointsDroppedDueToBeingToCloseInTime = 16;

        int numPointsRemoved = sizeBeforeSmoothing - sizeAfterSmoothing;
        int numVerticalOutliersCorrected = numVerticalOutliersBeforeSmoothing - numVerticalOutliersAfterSmoothing;

        assertEquals(
            3 + pointsDroppedDueToBeingToCloseInTime, numPointsRemoved,
            "Exactly 3 points should be been removed (2 coasted and 1 dropped)"
        );

        assertEquals(
            1,  numVerticalOutliersCorrected,
            "Exactly 1 poitn should have had its altitude corrected (the 1st point)"
        );
    }