public RecaivedData GetDataFromString()
        {
            RecaivedData Data = new RecaivedData();

            //string[] lines = contextResponse.Split('\n');
            string [] lines = File.ReadAllLines(@"C:\Users\USER\Desktop\WriteLines.txt");

            int i = 0;

            foreach (var line in lines)
            {
                if (i == 1500)
                {
                    Data.time = (double.Parse(line)) / 1000;
                    i++;
                }
                else if (i < 1500)
                {
                    string[] measures = line.Split(',');
                    double   m1       = double.Parse(measures[0]);
                    double   m2       = double.Parse(measures[1]);
                    Data.bar[i]    = (m1 * 6.1) / 1000;//pzrelicznik na g
                    Data.hammer[i] = (m2 * 6.1) / 1000;
                    i++;
                }
            }
            return(Data);
        }
        public RecaivedData expFilter(RecaivedData Data, double lambda)
        {
            double[] exp = new double[Data.numberOfSamples];
            double   tp  = Data.time / Data.numberOfSamples;

            for (int i = 0; i < Data.numberOfSamples; i++)
            {
                exp[i]      = Math.Exp((-1) * lambda * (tp * i));
                Data.bar[i] = exp[i] * Data.bar[i];
            }
            return(Data);
        }
        public RecaivedData lowPassFilter(RecaivedData Data, double cutOff)
        {
            double tp = Data.time / Data.numberOfSamples;

            for (int i = 0; i < Data.numberOfSamples; i++)
            {
                if ((tp * i) > cutOff)
                {
                    Data.hammer[i] = 0;
                }
            }
            return(Data);
        }
        public IActionResult AnalizeData()
        {
            int numberOfPoints;

            if (HttpContext.Session.GetInt32("numberOfTestsPerPoint") == null)
            {
                int numberOfTestsPerPoint = Int32.Parse(HttpContext.Request.Form["numberOfTestsPerPoint"].ToString());
                HttpContext.Session.SetInt32("numberOfTestsPerPoint", numberOfTestsPerPoint);
            }
            if (HttpContext.Session.GetInt32("numberOfPoints") == null)
            {
                numberOfPoints = Int32.Parse(HttpContext.Request.Form["numberOfPoints"].ToString());
                HttpContext.Session.SetInt32("numberOfPoints", numberOfPoints);
            }
            else
            {
                numberOfPoints = (int)HttpContext.Session.GetInt32("numberOfPoints");
            }
            // HttpContext.Session.SetInt32("numberOfPoints", numberOfPoints);
            int[] indexOfMounting = new int[2];
            if (HttpContext.Session.GetString("indexOfMounting") == null)
            {
                indexOfMounting[0] = Int32.Parse(HttpContext.Request.Form["firstMounting"].ToString());
                indexOfMounting[1] = Int32.Parse(HttpContext.Request.Form["secondMounting"].ToString());
                HttpContext.Session.SetString("indexOfMounting", JsonConvert.SerializeObject(indexOfMounting));
            }
            RecaivedData recaivedDatas  = new RecaivedData();
            var          currentMeasure = (int)HttpContext.Session.GetInt32("currentMeasure");

            currentMeasure++;
            DateTime centuryBegin = new DateTime(2019, 11, 14);
            DateTime currentDate  = DateTime.Now;
            long     elapsedTicks = currentDate.Ticks - centuryBegin.Ticks;
            TimeSpan elapsedSpan  = new TimeSpan(elapsedTicks);

            HttpContext.Session.SetInt32("currentMeasure", currentMeasure);
            string  filename   = "myFile_" + (int)elapsedSpan.TotalSeconds + ".txt";
            string  str        = "{'filename': '" + filename + "'}";
            JObject configJson = JObject.Parse(str);

            // ConnectionService.HandleConnection(configJson).Wait();
            recaivedDatas = ConnectionService.GetDataFromString();
            string filenameB = "bar" + DateTime.Now.ToString("HH_mm_ss");
            string filenameH = "hammer" + DateTime.Now.ToString("HH_mm_ss");

            ConnectionService.SaveToFile(filenameB, recaivedDatas.bar, recaivedDatas.time);
            ConnectionService.SaveToFile(filenameH, recaivedDatas.hammer, recaivedDatas.time);
            double[] bar_raw    = recaivedDatas.bar;
            double[] hammer_raw = recaivedDatas.hammer;
            double[] bar        = MathOperations.normalization(bar_raw, recaivedDatas.numberOfSamples);
            double[] hammer     = MathOperations.normalization(hammer_raw, recaivedDatas.numberOfSamples);
            recaivedDatas.bar    = bar;
            recaivedDatas.hammer = hammer;
            HttpContext.Session.SetString("recaivedDatas", JsonConvert.SerializeObject(recaivedDatas));
            List <DataPoint> pointsListBar    = Graph.fillDataPoints(bar, recaivedDatas.numberOfSamples, (float)recaivedDatas.time);
            List <DataPoint> pointsListHammer = Graph.fillDataPoints(hammer, recaivedDatas.numberOfSamples, (float)recaivedDatas.time);

            ViewBag.TimeBar    = JsonConvert.SerializeObject(pointsListBar);
            ViewBag.TimeHammer = JsonConvert.SerializeObject(pointsListHammer);
            if (HttpContext.Session.GetString("lambda") == null)
            {
                ViewBag.isLambdaSet = 0;
            }
            else
            {
                ViewBag.isLambdaSet = 1;
            }
            return(View("DataTime"));
        }
        public IActionResult Filtration()
        {
            var          currentMeasure = (int)HttpContext.Session.GetInt32("currentMeasure");
            RecaivedData recaivedDatas  = JsonConvert.DeserializeObject <RecaivedData>(HttpContext.Session.GetString("recaivedDatas"));

            double[] bar    = recaivedDatas.bar;
            double[] hammer = recaivedDatas.bar;
            double   lambda;

            if (HttpContext.Session.GetString("lambda") == null)
            {
                lambda = double.Parse(HttpContext.Request.Form["lambda"].ToString());
                HttpContext.Session.SetString("lambda", lambda.ToString());
            }
            else
            {
                lambda = double.Parse(HttpContext.Session.GetString("lambda"));
            }

            double cutOff = double.Parse(HttpContext.Request.Form["cutOff"].ToString());
            double offset = double.Parse(HttpContext.Request.Form["offset"].ToString());

            recaivedDatas        = MathOperations.lowPassFilter(recaivedDatas, cutOff);
            recaivedDatas.bar    = MathOperations.offset(recaivedDatas.bar, recaivedDatas.time, offset);
            recaivedDatas.hammer = MathOperations.offset(recaivedDatas.hammer, recaivedDatas.time, offset);
            recaivedDatas        = MathOperations.expFilter(recaivedDatas, lambda);
            List <DataPoint> filtredBar    = Graph.fillDataPoints(recaivedDatas.bar, recaivedDatas.numberOfSamples, (float)recaivedDatas.time);
            List <DataPoint> filtredHammer = Graph.fillDataPoints(recaivedDatas.hammer, recaivedDatas.numberOfSamples, (float)recaivedDatas.time);

            ViewBag.FiltredBar    = JsonConvert.SerializeObject(filtredBar);
            ViewBag.FiltredHammer = JsonConvert.SerializeObject(filtredHammer);
            System.Numerics.Complex[] bufferBar    = MathOperations.FFTImp(recaivedDatas.bar, (float)recaivedDatas.time, recaivedDatas.numberOfSamples);
            System.Numerics.Complex[] bufferHammer = MathOperations.FFTImp(recaivedDatas.hammer, (float)recaivedDatas.time, recaivedDatas.numberOfSamples);
            double[] fftBar    = MathOperations.absComplexToDouble(bufferBar, recaivedDatas.numberOfSamples);
            double[] fftHammer = MathOperations.absComplexToDouble(bufferHammer, recaivedDatas.numberOfSamples);
            float    freq      = recaivedDatas.numberOfSamples / (float)recaivedDatas.time;

            //float freq = fp * recaivedDatas.numberOfSamples;
            HttpContext.Session.SetString("freq", JsonConvert.SerializeObject(freq));
            List <DataPoint> freqPointsBar = Graph.fillDataPoints(fftBar, (recaivedDatas.numberOfSamples / 2), freq);

            ViewBag.FreqBar = JsonConvert.SerializeObject(freqPointsBar);
            List <DataPoint> freqPointsHammer = Graph.fillDataPoints(fftHammer, (recaivedDatas.numberOfSamples / 2), freq);

            ViewBag.FreqHammer = JsonConvert.SerializeObject(freqPointsHammer);
            System.Numerics.Complex[] frf       = MathOperations.FRF(bufferBar, bufferHammer, recaivedDatas.numberOfSamples);
            double[]         frfMagnitude       = MathOperations.absComplexToDouble(frf, recaivedDatas.numberOfSamples);
            List <DataPoint> frfMagnitudePoints = Graph.fillDataPoints(frfMagnitude, recaivedDatas.numberOfSamples / 2, freq);

            ViewBag.FrfMagitude = JsonConvert.SerializeObject(frfMagnitudePoints);
            double[]         frfReal       = MathOperations.getRealValues(frf, recaivedDatas.numberOfSamples);
            List <DataPoint> frfRealPoints = Graph.fillDataPoints(frfReal, recaivedDatas.numberOfSamples / 2, freq);

            ViewBag.FrfReal = JsonConvert.SerializeObject(frfRealPoints);
            double[]         frfImaginary       = MathOperations.getImaginaryValues(frf, recaivedDatas.numberOfSamples);
            List <DataPoint> frfImaginaryPoints = Graph.fillDataPoints(frfImaginary, recaivedDatas.numberOfSamples / 2, freq);

            ViewBag.FrfImaginary = JsonConvert.SerializeObject(frfImaginaryPoints);
            HttpContext.Session.SetString("frfCurrent", JsonConvert.SerializeObject(frf));

            return(View("Filtred"));
        }