コード例 #1
0
ファイル: MesoWindController.cs プロジェクト: OffWind/offwind
        public JsonResult CurrentDataJson(VDataImport imported, VPointPage vpp)
        {
            var model = PopModel();

            if (model.SelectedPoint == null)
            {
                _log.WarnFormat("CurrentFile is not set");
                var dataEmpty = new { sEcho = 0, iTotalRecords = 0, iTotalDisplayRecords = 0, aaData = new List <decimal[]>() };
                return(Json(dataEmpty, JsonRequestBehavior.AllowGet));
            }

            //string DbDir = WebConfigurationManager.AppSettings["MesoWindTabDir" + Settings.DbType];
            //var imported = ImportFile(DbDir, model.SelectedPoint.Text);

            var final = new List <string[]>();
            var n     = imported.NDirs + 1;

            var freqs = new string[n];

            freqs[0] = "Frequencies";
            for (var i = 0; i < imported.FreqByDirs.Count; i++)
            {
                freqs[i + 1] = imported.FreqByDirs[i].ToString();
            }
            final.Add(freqs);

            for (var bIndex = 0; bIndex < imported.FreqByBins.Count; bIndex++)
            {
                var bin       = imported.FreqByBins[bIndex];
                var binWith13 = new string[n];
                binWith13[0] = (bIndex + 1).ToString();
                for (var i = 0; i < bin.Length; i++)
                {
                    binWith13[i + 1] = bin[i].ToString();
                }
                final.Add(binWith13);
            }

            var mean = new string[n];

            mean[0] = "Mean Vel.";
            for (var i = 0; i < imported.MeanVelocityPerDir.Count; i++)
            {
                mean[i + 1] = imported.MeanVelocityPerDir[i].ToString();
            }
            final.Add(mean);

            var data = new { sEcho = 0, iTotalRecords = imported.NBins, iTotalDisplayRecords = imported.NBins, aaData = final };

            vpp.iTotalRecords        = imported.NBins;
            vpp.iTotalDisplayRecords = imported.NBins;
            vpp.Data = final;
            return(Json(data, JsonRequestBehavior.AllowGet));
        }
コード例 #2
0
        private VDataImport ImportFile(string dir, string fileName)
        {
            var model = new VDataImport();
            var path  = System.IO.Path.Combine(dir, fileName);

            using (var f = new StreamReader(path))
            {
                var lineN = 0;
                while (!f.EndOfStream)
                {
                    var line = f.ReadLine();
                    lineN++;
                    Trace.WriteLine(line);
                    switch (lineN)
                    {
                    case 1:
                        break;

                    case 2:
                        var line2 = line.Trim().Split("\t ".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
                        model.NBins = ParseInt(line2[2]);
                        break;

                    case 3:
                        var line3 = line.Trim().Split("\t ".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
                        model.NDirs = ParseInt(line3[0]);
                        break;

                    case 4:
                        var line4 = line.Trim().Split("\t ".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
                        foreach (var s in line4)
                        {
                            model.FreqByDirs.Add(ParseDecimal(s));
                        }
                        break;

                    default:
                        var line5N = line.Trim().Split("\t ".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
                        Debug.Assert(line5N.Length == model.NDirs + 1);     // 1st cell contains bin number
                        var tmp = new decimal[model.NDirs];
                        for (var i = 0; i < model.NDirs; i++)
                        {
                            tmp[i] = ParseDecimal(line5N[i + 1]);
                        }
                        model.FreqByBins.Add(tmp);
                        break;
                    }
                }
            }

            // MeanVelocityPerDir
            model.MeanVelocityPerDir.AddRange(new decimal[model.NDirs]);
            for (var binIdx = 0; binIdx < model.NBins; binIdx++)
            {
                for (var dirIdx = 0; dirIdx < model.NDirs; dirIdx++)
                {
                    var velocity = binIdx + 1;
                    model.MeanVelocityPerDir[dirIdx] += (decimal)(velocity * (double)model.FreqByBins[binIdx][dirIdx] / 1000);
                }
            }

            // Velocity frequencies
            model.VelocityFreq.Clear();
            for (int binIdx = 0; binIdx < model.NBins; binIdx++)
            {
                decimal freq = 0;
                for (int dirIdx = 0; dirIdx < model.NDirs; dirIdx++)
                {
                    freq += model.FreqByBins[binIdx][dirIdx] / 1000 * model.FreqByDirs[dirIdx];
                }
                model.VelocityFreq.Add(new HPoint(binIdx, 0, freq));
            }
            return(model);
        }
コード例 #3
0
ファイル: MesoWindController.cs プロジェクト: OffWind/offwind
        private VDataImport ImportFile(string dir, string fileName)
        {
            var model = new VDataImport();

            using (var f = new StringReader(fileName))
            {
                var lineN = 0;
                while (true)
                {
                    var line = f.ReadLine();
                    if (line == null)
                    {
                        break;
                    }
                    lineN++;
                    switch (lineN)
                    {
                    case 1:
                        break;

                    case 2:
                        var line2 = line.Trim().Split("\t ".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
                        _log.InfoFormat("NBins parsing: [{0}]", line);
                        model.NBins = ParseInt(line2[2]);
                        _log.InfoFormat("NBins: {0}", model.NBins);
                        break;

                    case 3:
                        var line3 = line.Trim().Split("\t ".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
                        model.NDirs = ParseInt(line3[0]);
                        _log.InfoFormat("NDirs: {0}", model.NDirs);
                        break;

                    case 4:
                        var line4 = line.Trim().Split("\t ".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
                        foreach (var s in line4)
                        {
                            model.FreqByDirs.Add(ParseDecimal(s));
                        }
                        break;

                    default:
                        var line5N = line.Trim().Split("\t ".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
                        Debug.Assert(line5N.Length == model.NDirs + 1);     // 1st cell contains bin number
                        var tmp = new decimal[model.NDirs];
                        for (var i = 0; i < model.NDirs; i++)
                        {
                            tmp[i] = ParseDecimal(line5N[i + 1]);
                        }
                        model.FreqByBins.Add(tmp);
                        break;
                    }
                }
            }
            _log.Info("File import complete. Calculating...");

            // MeanVelocityPerDir
            model.MeanVelocityPerDir.AddRange(new decimal[model.NDirs]);
            for (var binIdx = 0; binIdx < model.NBins; binIdx++)
            {
                for (var dirIdx = 0; dirIdx < model.NDirs; dirIdx++)
                {
                    var velocity = binIdx + 1;
                    model.MeanVelocityPerDir[dirIdx] += (decimal)(velocity * (double)model.FreqByBins[binIdx][dirIdx] / 1000);
                }
            }

            // Velocity frequencies
            model.VelocityFreq.Clear();
            for (int binIdx = 0; binIdx < model.NBins; binIdx++)
            {
                decimal freq = 0;
                for (int dirIdx = 0; dirIdx < model.NDirs; dirIdx++)
                {
                    freq += model.FreqByBins[binIdx][dirIdx] / 1000 * model.FreqByDirs[dirIdx];
                }
                model.VelocityFreq.Add(new HPoint(binIdx, 0, freq));
            }
            _log.Info("Import&Calculations complete.");

            return(model);
        }