Пример #1
0
        private void btnFilterSnapshotsBySunElevation_Click(object sender, EventArgs e)
        {
            theLogWindow = ServiceTools.LogAText(theLogWindow,
                                                 "=========== Processing started on " + DateTime.Now.ToString("s") + " ===========");

            if (bgwSnapshotsFilteringWithSunElevation == null)
            {
                bgwSnapshotsFilteringWithSunElevation = new BackgroundWorker();
                bgwSnapshotsFilteringWithSunElevation.WorkerSupportsCancellation = true;
                bgwSnapshotsFilteringWithSunElevation.WorkerReportsProgress      = true;
                bgwSnapshotsFilteringWithSunElevation.DoWork          += BgwSnapshotsFilteringWithSunElevation_DoWork;
                bgwSnapshotsFilteringWithSunElevation.ProgressChanged += BgwSnapshotsFilteringWithSunElevation_ProgressChanged;

                object[] args = new object[] { CopyImagesFrom_Path, ConcurrentDataXMLfilesPath, CopyImagesAndDataTo_Path };
                bgwSnapshotsFilteringWithSunElevation.RunWorkerAsync(args);
                ThreadSafeOperations.ToggleButtonState(btnFilterSnapshotsBySunElevation, true, "CANCEL", true);
            }
            else
            {
                if (bgwSnapshotsFilteringWithSunElevation.IsBusy)
                {
                    bgwSnapshotsFilteringWithSunElevation.CancelAsync();
                }
                else
                {
                    object[] args = new object[] { CopyImagesFrom_Path, ConcurrentDataXMLfilesPath, CopyImagesAndDataTo_Path };

                    bgwSnapshotsFilteringWithSunElevation.RunWorkerAsync(args);
                    ThreadSafeOperations.ToggleButtonState(btnFilterSnapshotsBySunElevation, true, "CANCEL", true);
                }
            }
        }
Пример #2
0
        private void btnToggleShowGraphs_Click(object sender, EventArgs e)
        {
            showGraphs = !showGraphs;
            ThreadSafeOperations.ToggleButtonState(btnToggleShowGraphs, true, showGraphs ? "ON" : "OFF", true);


            if (showGraphs)
            {
                if (timerGraphUpdate == null)
                {
                    TimerCallback tcbRenderAndShowGraph = RenderAndShowGraph;
                    timerGraphUpdate = new System.Threading.Timer(tcbRenderAndShowGraph, null, 0, graphsUpdatingPeriodSec * 1000);
                }
                else
                {
                    bgwGraphsPresenter.RunWorkerAsync();
                }
                //RenderAndShowGraph(null);
            }
            else
            {
                if (timerGraphUpdate != null)
                {
                    timerGraphUpdate.Dispose();
                }
            }
        }
Пример #3
0
        private void btnConvert_Click(object sender, EventArgs e)
        {
            if ((bgwConvert != null) && (bgwConvert.IsBusy))
            {
                bgwConvert.CancelAsync();
                return;
            }


            DoWorkEventHandler bgwConvert_DoWorkHandler = delegate(object currBGWsender, DoWorkEventArgs args)
            {
                BackgroundWorker selfWorker = currBGWsender as BackgroundWorker;

                DirectoryInfo dInfo = new DirectoryInfo(strLogFilesDirectory);

                FileInfo[] fInfoArr = dInfo.GetFiles("BcstLog-*.log");

                int fInfoCounter = 0;

                foreach (FileInfo fInfo in fInfoArr)
                {
                    if (selfWorker.CancellationPending)
                    {
                        break;
                    }

                    // считать данные, запихнуть в один timeseries
                }

                // записать данные в файлы
            };

            RunWorkerCompletedEventHandler bgwConvert_CompletedHandler = delegate(object currBGWCompletedSender, RunWorkerCompletedEventArgs args)
            {
                ThreadSafeOperations.ToggleButtonState(btnProcessAccelerationTimeSeries, true, "CONVERT", false);
            };

            ProgressChangedEventHandler bgwConvert_ProgressChanged = delegate(object bgwDataReaderSender, ProgressChangedEventArgs args)
            {
                ThreadSafeOperations.UpdateProgressBar(prbConvertionProgress, args.ProgressPercentage);
            };



            ThreadSafeOperations.ToggleButtonState(btnConvert, true, "STOP", true);

            bgwConvert = new BackgroundWorker();
            bgwConvert.WorkerSupportsCancellation = true;
            bgwConvert.WorkerReportsProgress      = true;
            bgwConvert.DoWork             += bgwConvert_DoWorkHandler;
            bgwConvert.RunWorkerCompleted += bgwConvert_CompletedHandler;
            bgwConvert.ProgressChanged    += bgwConvert_ProgressChanged;
            //object[] bgwCalculateArgs = new object[] { imagesRepresentingForm };
            object[] bgwConvertArgs = new object[] { };

            bgwConvert.RunWorkerAsync(bgwConvertArgs);
        }
Пример #4
0
        //private void tbBcstListeningPort_TextChanged(object sender, EventArgs e)
        //{
        //    portBcstRecvng = Convert.ToInt32(tbBcstListeningPort.Text);
        //}



        private void btnStartStopBdcstListening_Click(object sender, EventArgs e)
        {
            if (udpCatchingJob.IsBusy)
            {
                udpCatchingJob.CancelAsync();
            }
            else
            {
                udpCatchingJob.RunWorkerAsync();
                StartUDPmessagesParser();
                ThreadSafeOperations.ToggleButtonState(btnStartStopBdcstListening, true, "Stop listening", true);
            }
        }
Пример #5
0
        private void bgwCopier_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
        {
            if (e.Error != null)
            {
                theLogWindow = ServiceTools.LogAText(theLogWindow,
                                                     "ERROR has been caught: " + Environment.NewLine + e.Error.Message + Environment.NewLine);
                //ThreadSafeOperations.SetTextTB(tbLog, "ERROR has been caught: " + Environment.NewLine, true);
                //ThreadSafeOperations.SetTextTB(tbLog, e.Error.Message + Environment.NewLine, true);
            }


            //ThreadSafeOperations.SetTextTB(tbLog, "#007" + Environment.NewLine, true);
            ThreadSafeOperations.UpdateProgressBar(prbUniversalProgress, 0);
            theLogWindow = ServiceTools.LogAText(theLogWindow, "Finished work" + Environment.NewLine);
            //ThreadSafeOperations.SetTextTB(tbLog, "Finished work" + Environment.NewLine, true);
            ThreadSafeOperations.ToggleButtonState(btnDoWork, true, "SELECT", false);
        }
Пример #6
0
        private void btnDoWork_Click(object sender, EventArgs e)
        {
            theLogWindow = ServiceTools.LogAText(theLogWindow,
                                                 "=========== Processing started on " + DateTime.Now.ToString("s") + " ===========");

            if (bgwCopier.IsBusy)
            {
                bgwCopier.CancelAsync();
            }
            else
            {
                object[] args = new object[] { CopyImagesFrom_Path, rtbConcurrentDataDir.Text, rtbToPath.Text, rtbGrIxYRGBstatsDir.Text };

                bgwCopier.RunWorkerAsync(args);
                ThreadSafeOperations.ToggleButtonState(btnDoWork, true, "CANCEL", true);
            }
        }
Пример #7
0
        private void btnFindArduino_Click(object sender, EventArgs e)
        {
            if (arduinoBoardSearchingWorker.IsBusy)
            {
                arduinoBoardSearchingWorker.CancelAsync();
            }
            else
            {
                if (sender == btnFindArduino1)
                {
                    needsToDiscoverArduinoBoardID1 = true;
                }
                else if (sender == btnFindArduino2)
                {
                    needsToDiscoverArduinoBoardID2 = true;
                }

                ThreadSafeOperations.ToggleButtonState(btnFindArduino1, true, "CANCEL", true);
                ThreadSafeOperations.ToggleButtonState(btnFindArduino2, true, "CANCEL", true);

                arduinoBoardSearchingWorker.RunWorkerAsync();
            }
        }
        private void button1_Click(object sender, EventArgs e)
        {
            if (bgwPlayingPresenter != null && bgwPlayingPresenter.IsBusy)
            {
                bgwPlayingPresenter.CancelAsync();
                return;
            }

            if (accDeviationMagnitudeRenderer.verticalMarkersIndexesUsingXSpace.Count == 0)
            {
                return;
            }
            int currentDateTimeIndex = accDeviationMagnitudeRenderer.verticalMarkersIndexesUsingXSpace[0];

            ThreadSafeOperations.ToggleButtonState(btnPlayStopAccAnimation, true, "STOP", true);

            DoWorkEventHandler currDoWorkHandler = delegate(object currBGWsender, DoWorkEventArgs args)
            {
                BackgroundWorker       selfworker        = currBGWsender as BackgroundWorker;
                SimpleVectorGraphics2D frontViewRenderer = new SimpleVectorGraphics2D(pbAccSideVisualization.Size);
                frontViewRenderer.presentAxes              = false;
                frontViewRenderer.ptLeftTopSpaceCorner     = new PointD(-5.0d, 0.0d);
                frontViewRenderer.ptRightBottomSpaceCorner = new PointD(5.0d, -10.0d);

                //frontViewRenderer.listVectorsToDraw.Add(DenseVector.OfEnumerable(new double[] {1.0d, -9.0d}));
                //frontViewRenderer.listVectorsShift.Add(DenseVector.OfEnumerable(new double[] {0.0d, 0.0d}));
                //frontViewRenderer.listVectColors.Add(new Bgr(Color.Blue));

                //frontViewRenderer.Represent();
                //ThreadSafeOperations.UpdatePictureBox(pbAccSideVisualization, frontViewRenderer.TheImage.Bitmap, false);

                for (int i = currentDateTimeIndex; i < accDeviationMagnitudeRenderer.dvScatterXSpace[0].Count - 1; i++)
                {
                    if (selfworker.CancellationPending)
                    {
                        break;
                    }

                    DateTime dtStartCalculate = DateTime.Now;

                    accDeviationMagnitudeRenderer.verticalMarkersList.Clear();
                    accDeviationMagnitudeRenderer.verticalMarkersList.Add(accDeviationMagnitudeRenderer.dvScatterXSpace[0][i]);
                    accDeviationMagnitudeRenderer.verticalMarkersIndexesUsingXSpace.Clear();
                    accDeviationMagnitudeRenderer.verticalMarkersIndexesUsingXSpace.Add(i);
                    accDeviationMagnitudeRenderer.RepresentMarkers();
                    ThreadSafeOperations.UpdatePictureBox(pbRepresentingDevMagnitude,
                                                          accDeviationMagnitudeRenderer.TheImage.Bitmap, false);

                    accDeviationAngleRenderer.verticalMarkersList.Clear();
                    accDeviationAngleRenderer.verticalMarkersList.Add(accDeviationAngleRenderer.dvScatterXSpace[0][i]);
                    accDeviationAngleRenderer.verticalMarkersIndexesUsingXSpace.Clear();
                    accDeviationAngleRenderer.verticalMarkersIndexesUsingXSpace.Add(i);
                    accDeviationAngleRenderer.RepresentMarkers();
                    ThreadSafeOperations.UpdatePictureBox(pbRepresentingDevAngle, accDeviationAngleRenderer.TheImage.Bitmap,
                                                          false);

                    accDeviationDirectionRenderer.verticalMarkersList.Clear();
                    accDeviationDirectionRenderer.verticalMarkersList.Add(accDeviationDirectionRenderer.dvScatterXSpace[0][i]);
                    accDeviationDirectionRenderer.verticalMarkersIndexesUsingXSpace.Clear();
                    accDeviationDirectionRenderer.verticalMarkersIndexesUsingXSpace.Add(i);
                    accDeviationDirectionRenderer.RepresentMarkers();
                    ThreadSafeOperations.UpdatePictureBox(pbRepresentingDevDirection, accDeviationDirectionRenderer.TheImage.Bitmap,
                                                          false);

                    frontViewRenderer.listVectorsToDraw.Clear();
                    frontViewRenderer.listVectorsShift.Clear();
                    frontViewRenderer.listVectColors.Clear();

                    //int globalArrayIndex = sensorsHistoryRepresentingScale + i-1;
                    DenseVector       zeroValuesVect  = DenseVector.OfEnumerable(new double[] { 0.0d, 0.0d });
                    DenseVector       dvAccCalibrated = DenseVector.Create(3, idx => dmAccData[i, idx + 3]);
                    DenseVector       dvAccCurrent    = DenseVector.Create(3, idx => dmAccData[i, idx]);
                    AccelerometerData accCalibrated   = new AccelerometerData(dvAccCalibrated);
                    accCalibrated.AccDoubleZ = -accCalibrated.AccDoubleZ;
                    AccelerometerData currAcc = new AccelerometerData(dvAccCurrent);
                    currAcc.AccDoubleZ = -currAcc.AccDoubleZ;
                    double koeffToRealGravity = 9.81d / accCalibrated.AccMagnitude;
                    accCalibrated = accCalibrated * koeffToRealGravity;
                    currAcc       = currAcc * koeffToRealGravity;
                    AccelerometerData dAccCalibration = accCalibrated - (new AccelerometerData(0.0d, 0.0d, -9.81d));
                    currAcc       = currAcc - dAccCalibration;
                    accCalibrated = accCalibrated - dAccCalibration;

                    frontViewRenderer.listVectorsToDraw.Add(DenseVector.OfEnumerable(new double[] { accCalibrated.xyProjectionMagnitude(), accCalibrated.AccDoubleZ }));
                    frontViewRenderer.listVectorsShift.Add(zeroValuesVect);
                    frontViewRenderer.listVectColors.Add(new Bgr(Color.Blue));

                    frontViewRenderer.listVectorsToDraw.Add(DenseVector.OfEnumerable(new double[] { currAcc.xyProjectionMagnitude(), currAcc.AccDoubleZ }));
                    frontViewRenderer.listVectorsShift.Add(zeroValuesVect);
                    frontViewRenderer.listVectColors.Add(new Bgr(Color.Red));

                    frontViewRenderer.Represent();
                    ThreadSafeOperations.UpdatePictureBox(pbAccSideVisualization, frontViewRenderer.TheImage.Bitmap, false);


                    TimeSpan dtCalculationTime = DateTime.Now - dtStartCalculate;

                    double timeToWait = (accDeviationDirectionRenderer.dvScatterXSpace[0][i + 1] -
                                         accDeviationDirectionRenderer.dvScatterXSpace[0][i]) * 1000.0d
                                        - (double)(dtCalculationTime.TotalMilliseconds);


                    if (timeToWait > 0)
                    {
                        //System.Windows.Forms.Application.DoEvents();
                        Thread.Sleep(Convert.ToInt32(timeToWait));
                    }
                }
            };


            RunWorkerCompletedEventHandler currWorkCompletedHandler =
                delegate(object currBGWCompletedSender, RunWorkerCompletedEventArgs args)
            {
                ThreadSafeOperations.ToggleButtonState(btnPlayStopAccAnimation, true, "PLAY", true);
            };

            bgwPlayingPresenter = new BackgroundWorker();
            bgwPlayingPresenter.WorkerSupportsCancellation = true;
            bgwPlayingPresenter.DoWork             += currDoWorkHandler;
            bgwPlayingPresenter.RunWorkerCompleted += currWorkCompletedHandler;
            object[] BGWargs = new object[] { "", "" };
            bgwPlayingPresenter.RunWorkerAsync(BGWargs);
        }
Пример #9
0
 private void arduinoBoardSearchingWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
 {
     ThreadSafeOperations.ToggleButtonState(btnFindArduino1, true, "search for board (ID=1)", false);
     ThreadSafeOperations.ToggleButtonState(btnFindArduino2, true, "search for board (ID=2)", false);
 }
Пример #10
0
 private void udpCatchingJob_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
 {
     ThreadSafeOperations.ToggleButtonState(btnStartStopBdcstListening, true, "Start listening", false);
     bgwUDPmessagesParser.CancelAsync();
 }
Пример #11
0
        private void btnProcessAccelerationTimeSeries_Click(object sender, EventArgs e)
        {
            if ((bgwCalculate != null) && (bgwCalculate.IsBusy))
            {
                bgwCalculate.CancelAsync();
                return;
            }

            //simpleMultipleImagesShow imagesRepresentingForm = new simpleMultipleImagesShow();
            //imagesRepresentingForm.Show();



            DoWorkEventHandler bgwCalculate_DoWorkHandler = delegate(object currBGWsender, DoWorkEventArgs args)
            {
                BackgroundWorker selfWorker = currBGWsender as BackgroundWorker;

                //simpleMultipleImagesShow multImagesRepresentingForm = (simpleMultipleImagesShow)((args.Argument as object[])[0]);
                //Type theShowImagesType = multImagesRepresentingForm.GetType();
                //MethodInfo thePicturePlacingMethodInfo = theShowImagesType.GetMethod("PlaceAPicture");

                int imageRepresentingCounter = 0;

                DateTime dbgDT = new DateTime(2014, 7, 9, 9, 0, 0);
                dbgDT = dbgDT.AddMinutes(33);
                DateTime dtSeriesStart = accSubseries[0].StartTime;
                double   tsOverallSeriesDurationMillisec = (accSubseries[accSubseries.Count - 1].EndTime - accSubseries[0].StartTime).TotalMilliseconds;

                string strToWrite = " fileName ; lat ; lon ; date ; time ; time(s) since start ; period(s) ; spectrum amplitude";
                ServiceTools.logToTextFile(strOutputDirectory + "\\100sData-spectra-maximums.dat", strToWrite + Environment.NewLine, true);

                foreach (TimeSeries <double> accSubseria in accSubseries)
                {
                    if (selfWorker.CancellationPending)
                    {
                        break;
                    }

                    int startindex = 0;
                    while (true)
                    {
                        int endIndex;

                        if (selfWorker.CancellationPending)
                        {
                            break;
                        }

                        TimeSeries <double> currTimeSeria = accSubseria.SubSeria(startindex, new TimeSpan(1000000000),
                                                                                 out endIndex); //100s
                        currTimeSeria = currTimeSeria.InterpolateSeria(new TimeSpan(500000));
                        currTimeSeria = currTimeSeria.ExtractDataDeviationValues();

                        //обработать и оценить наличие выраженных периодов
                        Complex[] sourceSignalArray = currTimeSeria.DataRealValuesComplexArray();
                        Fourier.Forward(sourceSignalArray);
                        //Transform.FourierForward(sourceSignalArray);
                        List <Complex> FourierTransformedSignal           = new List <Complex>(sourceSignalArray);
                        List <double>  FourierTransformedSignalAmplitudes =
                            FourierTransformedSignal.ConvertAll <double>(
                                cVal =>
                                ((double.IsNaN(cVal.Magnitude)) || (double.IsInfinity(cVal.Magnitude)))
                                        ? (0.0d)
                                        : (cVal.Magnitude));
                        List <double> FourierTransformedSignalPeriods = new List <double>();
                        for (int ind = 0; ind < FourierTransformedSignalAmplitudes.Count; ind++)
                        {
                            FourierTransformedSignalPeriods.Add(currTimeSeria.TotalSeriaDuration.TotalSeconds /
                                                                (double)ind);
                        }

                        FourierTransformedSignalAmplitudes =
                            new List <double>(
                                FourierTransformedSignalAmplitudes.Zip <double, double, double>(
                                    FourierTransformedSignalPeriods,
                                    (amp, periodSec) =>
                                    ((double.IsNaN(periodSec)) || (double.IsInfinity(periodSec))) ? (0.0d) : (amp)));
                        FourierTransformedSignalPeriods =
                            FourierTransformedSignalPeriods.ConvertAll <double>(
                                dval => ((double.IsNaN(dval)) || (double.IsInfinity(dval))) ? (0.0d) : (dval));


                        //проанализируем этот участок - есть ли выраженные пики по амплитуде конкретных частот

                        //найти максимум в спектре и выдать данные об этом максимуме в файл

                        // сначала отфильтруем периоды меньше 1с - для данных по динамике судна они несущественны
                        FourierTransformedSignalAmplitudes =
                            new List <double>(
                                FourierTransformedSignalAmplitudes.Zip <double, double, double>(
                                    FourierTransformedSignalPeriods,
                                    (amp, periodSec) => (periodSec <= 1.0d) ? (0.0d) : (amp)));
                        FourierTransformedSignalPeriods =
                            FourierTransformedSignalPeriods.ConvertAll <double>(dVal => (dVal <= 1.0d) ? (0.0d) : (dVal));


                        DescriptiveStatistics currAmpsStat =
                            new DescriptiveStatistics(FourierTransformedSignalAmplitudes);
                        List <double> lAmpsOutstanding = FourierTransformedSignalAmplitudes.ConvertAll <double>(dVal =>
                        {
                            if (dVal / currAmpsStat.Mean >= 100.0d)
                            {
                                return(dVal);
                            }
                            return(0.0d);
                        });
                        List <double> lPeriodsOutstanding =
                            new List <double>(FourierTransformedSignalPeriods.Zip <double, double, double>(lAmpsOutstanding,
                                                                                                           (per, amp) => (amp == 0.0d) ? (0.0d) : (per)));


                        if (lAmpsOutstanding.Sum() > 0.0d)
                        {
                            MultipleScatterAndFunctionsRepresentation renderer =
                                new MultipleScatterAndFunctionsRepresentation(2048, 1536);

                            renderer.dvScatterXSpace.Add(currTimeSeria.TimeStampsValuesSeconds);
                            renderer.dvScatterFuncValues.Add(currTimeSeria.dvDoubleDataValues);
                            renderer.scatterLineColors.Add(new Bgr(255, 50, 50));
                            renderer.scatterDrawingVariants.Add(SequencesDrawingVariants.polyline);

                            renderer.dvScatterXSpace.Add(DenseVector.OfEnumerable(FourierTransformedSignalPeriods));
                            renderer.dvScatterFuncValues.Add(DenseVector.OfEnumerable(FourierTransformedSignalAmplitudes));
                            renderer.scatterLineColors.Add(new Bgr(50, 255, 50));
                            renderer.scatterDrawingVariants.Add(SequencesDrawingVariants.squares);

                            renderer.dvScatterXSpace.Add(DenseVector.OfEnumerable(lPeriodsOutstanding));
                            renderer.dvScatterFuncValues.Add(DenseVector.OfEnumerable(lAmpsOutstanding));
                            renderer.scatterLineColors.Add(new Bgr(50, 50, 255));
                            renderer.scatterDrawingVariants.Add(SequencesDrawingVariants.circles);

                            renderer.Represent();

                            if (strOutputDirectory != "")
                            {
                                double maxAmp       = lAmpsOutstanding.Max();
                                int    idx          = lAmpsOutstanding.FindIndex(dval => dval == maxAmp);
                                double maxAmpPeriod = lPeriodsOutstanding[idx];

                                GPSdata gpsMark = gpsSeriaData.GetMostClose(currTimeSeria.StartTime).Item2;

                                string fName = currTimeSeria.StartTime.ToString("s").Replace(":", "-") +
                                               "-100sData-spectrum.jpg";
                                renderer.SaveToImage(strOutputDirectory + "\\" + fName, true);

                                strToWrite  = "" + fName + " ; ";
                                strToWrite += gpsMark.LatDec + " ; ";
                                strToWrite += gpsMark.LonDec + " ; ";
                                strToWrite += currTimeSeria.StartTime.Date.ToString("yyyy-MM-dd") + " ; ";
                                strToWrite += currTimeSeria.StartTime.ToString("HH-mm-ss") + " ; ";
                                strToWrite += (currTimeSeria.StartTime - dtSeriesStart).TotalSeconds + " ; ";
                                strToWrite += maxAmpPeriod.ToString() + " ; ";
                                strToWrite += maxAmp.ToString() + " ; ";
                                ServiceTools.logToTextFile(strOutputDirectory + "\\100sData-spectra-maximums.dat", strToWrite + Environment.NewLine, true);

                                ThreadSafeOperations.SetText(lblStatusString, "processing: " + currTimeSeria.StartTime.ToString("s"), false);
                            }
                        }

                        if ((currTimeSeria.StartTime >= dbgDT) || (currTimeSeria.EndTime >= dbgDT))
                        {
                            startindex++;
                            startindex--;
                        }

                        if (endIndex == accSubseria.Count - 1)
                        {
                            break;
                        }

                        Application.DoEvents();

                        selfWorker.ReportProgress(Convert.ToInt32(100.0d * (currTimeSeria.EndTime - dtSeriesStart).TotalMilliseconds / tsOverallSeriesDurationMillisec));

                        startindex += Convert.ToInt32((endIndex - startindex) / 2.0d);
                    }
                }
            };

            RunWorkerCompletedEventHandler bgwCalculate_CompletedHandler = delegate(object currBGWCompletedSender, RunWorkerCompletedEventArgs args)
            {
                ThreadSafeOperations.ToggleButtonState(btnProcessAccelerationTimeSeries, true, "Process acceleration timeseries", false);
            };

            ProgressChangedEventHandler bgwCalculate_ProgressChanged = delegate(object bgwDataReaderSender, ProgressChangedEventArgs args)
            {
                ThreadSafeOperations.UpdateProgressBar(prbReadingProcessingData, args.ProgressPercentage);
            };



            ThreadSafeOperations.ToggleButtonState(btnProcessAccelerationTimeSeries, true, "STOP", true);

            bgwCalculate = new BackgroundWorker();
            bgwCalculate.WorkerSupportsCancellation = true;
            bgwCalculate.WorkerReportsProgress      = true;
            bgwCalculate.DoWork             += bgwCalculate_DoWorkHandler;
            bgwCalculate.RunWorkerCompleted += bgwCalculate_CompletedHandler;
            bgwCalculate.ProgressChanged    += bgwCalculate_ProgressChanged;
            //object[] bgwCalculateArgs = new object[] { imagesRepresentingForm };
            object[] bgwCalculateArgs = new object[] {  };

            bgwCalculate.RunWorkerAsync(bgwCalculateArgs);
        }
Пример #12
0
        private void btnReadData_Click(object sender, EventArgs e)
        {
            strLogFilesDirectory = tbLogFilesPath.Text;

            if (bgwDataReader != null && bgwDataReader.IsBusy)
            {
                bgwDataReader.CancelAsync();
                return;
            }

            ThreadSafeOperations.ToggleButtonState(btnReadData, true, "CANCEL", true);


            DoWorkEventHandler currDoWorkHandler = delegate(object currBGWsender, DoWorkEventArgs args)
            {
                BackgroundWorker selfworker = currBGWsender as BackgroundWorker;

                List <double>   lTotalDataToAdd = new List <double>();
                List <DateTime> lDateTimeList   = new List <DateTime>();


                DirectoryInfo dInfo = new DirectoryInfo(strLogFilesDirectory);

                FileInfo[] fInfoArr = dInfo.GetFiles("*AccelerometerDataLog*.nc");

                int fInfoCounter = 0;

                foreach (FileInfo fInfo in fInfoArr)
                {
                    if (selfworker.CancellationPending)
                    {
                        break;
                    }
                    fInfoCounter++;
                    selfworker.ReportProgress(Convert.ToInt32((double)(fInfoCounter - 1) / (double)fInfoArr.Length));

                    ThreadSafeOperations.SetText(lblStatusString, "reading " + fInfo.FullName, false);


                    Dictionary <string, object> dictDataLoaded = NetCDFoperations.ReadDataFromFile(fInfo.FullName);

                    string varNameDateTime = "DateTime";
                    if (dictDataLoaded.Keys.Contains("DateTime"))
                    {
                        varNameDateTime = "DateTime";
                    }
                    else if (dictDataLoaded.Keys.Contains("Datetime"))
                    {
                        varNameDateTime = "Datetime";
                    }
                    List <long>     currFileDateTimeLongTicksList = new List <long>((dictDataLoaded[varNameDateTime] as long[]));
                    List <DateTime> currFileDateTimeList          = currFileDateTimeLongTicksList.ConvertAll(longVal => new DateTime(longVal));

                    string varNameAccData                  = "AccelerometerData";
                    List <AccelerometerData> lAccData      = AccelerometerData.OfDenseMatrix(dictDataLoaded[varNameAccData] as DenseMatrix);
                    List <double>            lAccDataToAdd = lAccData.ConvertAll <double>(acc => acc.AccMagnitude);

                    lTotalDataToAdd.AddRange(lAccDataToAdd);
                    lDateTimeList.AddRange(currFileDateTimeList);

                    selfworker.ReportProgress(Convert.ToInt32((double)(fInfoCounter) / (double)fInfoArr.Length));
                }

                accSeriaData.AddSubseriaData(lTotalDataToAdd, lDateTimeList);



                //теперь обработаем считанные данные
                ThreadSafeOperations.SetText(lblStatusString, "basic acceleration data processing...", false);

                accSubseries = accSeriaData.SplitWithTimeSpanCondition(dt => dt.TotalMilliseconds >= 1200);
                accSubseries.RemoveAll(theSeria => theSeria.TotalSeriaDuration.TotalSeconds < 100);

                List <double> listSeriesStats =
                    accSubseries.ConvertAll(timeseria => timeseria.TotalSeriaDuration.TotalSeconds);
                DescriptiveStatistics stats = new DescriptiveStatistics(listSeriesStats);
                string strToShow            = "Acceleration data start time: " + accSubseries[0].StartTime.ToString("s") + Environment.NewLine;
                strToShow += "Acceleration data end time: " + accSubseries[accSubseries.Count - 1].EndTime.ToString("s") + Environment.NewLine;
                strToShow += "total chunks count: " + accSubseries.Count + Environment.NewLine;
                strToShow += "mean chunk duration: " + stats.Mean.ToString("0.##e-00") + " s" + Environment.NewLine;
                strToShow += "min chunk duration: " + stats.Minimum.ToString("0.##e-00") + " s" + Environment.NewLine;
                strToShow += "max chunk duration: " + stats.Maximum.ToString("0.##e-00") + " s" + Environment.NewLine;
                strToShow += "StdDev of chunk duration: " + stats.StandardDeviation.ToString("0.##e-00") + " s" + Environment.NewLine;

                ThreadSafeOperations.SetTextTB(tbReportLog, strToShow, true);



                List <GPSdata>  lTotalGPSDataToAdd = new List <GPSdata>();
                List <DateTime> lGPSDateTimeList   = new List <DateTime>();


                dInfo = new DirectoryInfo(strLogFilesDirectory);

                fInfoArr = dInfo.GetFiles("*GPSDataLog*.nc");

                fInfoCounter = 0;

                foreach (FileInfo fInfo in fInfoArr)
                {
                    if (selfworker.CancellationPending)
                    {
                        break;
                    }
                    fInfoCounter++;
                    selfworker.ReportProgress(Convert.ToInt32((double)(fInfoCounter - 1) / (double)fInfoArr.Length));

                    ThreadSafeOperations.SetText(lblStatusString, "reading " + fInfo.FullName, false);


                    Dictionary <string, object> dictDataLoaded = NetCDFoperations.ReadDataFromFile(fInfo.FullName);

                    string varNameDateTime = "DateTime";
                    if (dictDataLoaded.Keys.Contains("DateTime"))
                    {
                        varNameDateTime = "DateTime";
                    }
                    else if (dictDataLoaded.Keys.Contains("Datetime"))
                    {
                        varNameDateTime = "Datetime";
                    }
                    List <long>     currFileDateTimeLongTicksList = new List <long>((dictDataLoaded[varNameDateTime] as long[]));
                    List <DateTime> currFileDateTimeList          = currFileDateTimeLongTicksList.ConvertAll(longVal => new DateTime(longVal));

                    string         varNameGPSData = "GPSdata";
                    List <GPSdata> lGPSData       = GPSdata.OfDenseMatrix(dictDataLoaded[varNameGPSData] as DenseMatrix);
                    //List<double> lGPSDataToAdd = lGPSData.ConvertAll<double>(acc => acc.AccMagnitude);

                    lTotalGPSDataToAdd.AddRange(lGPSData);
                    lGPSDateTimeList.AddRange(currFileDateTimeList);

                    selfworker.ReportProgress(Convert.ToInt32((double)(fInfoCounter) / (double)fInfoArr.Length));
                }

                gpsSeriaData.AddSubseriaData(lTotalGPSDataToAdd, lGPSDateTimeList);

                //теперь обработаем считанные данные
                ThreadSafeOperations.SetText(lblStatusString, "basic GPS data processing...", false);

                gpsSeriaData.RemoveValues(gpsDatum => ((gpsDatum.lat == 0.0d) && (gpsDatum.lon == 0.0d)));

                gpsSeriaData.RemoveDuplicatedTimeStamps();

                strToShow  = Environment.NewLine + "GPS data start time: " + gpsSeriaData.StartTime.ToString("s") + Environment.NewLine;
                strToShow += "GPS data end time: " + gpsSeriaData.EndTime.ToString("s") + Environment.NewLine;

                ThreadSafeOperations.SetTextTB(tbReportLog, strToShow, true);
            };

            RunWorkerCompletedEventHandler currWorkCompletedHandler = delegate(object currBGWCompletedSender, RunWorkerCompletedEventArgs args)
            {
                ThreadSafeOperations.ToggleButtonState(btnReadData, true, "Read data", true);
            };


            ProgressChangedEventHandler bgwDataReader_ProgressChanged = delegate(object bgwDataReaderSender, ProgressChangedEventArgs args)
            {
                ThreadSafeOperations.UpdateProgressBar(prbReadingProcessingData, args.ProgressPercentage);
            };



            bgwDataReader = new BackgroundWorker();
            bgwDataReader.WorkerSupportsCancellation = true;
            bgwDataReader.WorkerReportsProgress      = true;
            bgwDataReader.DoWork             += currDoWorkHandler;
            bgwDataReader.RunWorkerCompleted += currWorkCompletedHandler;
            bgwDataReader.ProgressChanged    += bgwDataReader_ProgressChanged;
            object[] BGWargs = new object[] { "", "" };
            bgwDataReader.RunWorkerAsync(BGWargs);
        }