Esempio n. 1
0
 public virtual void Dispose()
 {
     if (this.SummeryTables != null)
     {
         SummeryTables.Dispose();
     }
     if (FloatValueTables != null)
     {
         FloatValueTables.Dispose();
     }
     if (IntValueTables != null)
     {
         IntValueTables.Dispose();
     }
     if (FractionValueTables != null)
     {
         FractionValueTables.Dispose();
     }
 }
Esempio n. 2
0
        /// <summary>
        /// 构建产品,前提是星间单差浮点解已经算出。
        /// </summary>
        public virtual void BuildProducts()
        {
            //统计参与计算情况
            this.TotalObsCount = FloatValueTables.GetCountOfNumeralCell();
            log.Info(BasePrn + " 可用计算数为:" + TotalObsCount);

            #region 浮点数、小数、整数 三剑客
            //修理浮点解
            this.FloatValueTables.RemoveEmptyRows();                                    //删除空行,减少计算量
            this.FloatValueTables.RemoveTableDataCountLessThan(MinEpoch, MinSiteCount); //清理卫星数量过少和测站数量过少的数据


            //修理小数部分
            this.FractionValueTables = FloatValueTables.GetPeriodPipeFilterTable(1, 0.5, true, "FractionOf" + ProductTypeMarker);//统一小数部分区间
            this.FractionValueTables.PipeFilterWithLastValues(MaxAllowedDiffer);
            this.FractionValueTables.RemoveColWithLastValOffCenter(MaxAllowedDiffer);
            this.FractionValueTables.RemoveTableDataCountLessThan(MinEpoch, MinSiteCount);
            this.FractionValueTables.OutputDirectory = this.OutputDirectory;//更新输出文件,否则将跑到PPP目录中去

            //同步浮点数表与小数表,删除多余
            this.FloatValueTables.SynchronizeTable(this.FractionValueTables);

            //获取整数部分,此处有待考虑部分跳跃情况的处理方式。
            this.IntValueTables = FloatValueTables.GetIntByMinusAndRound(FractionValueTables, "IntOf" + ProductTypeMarker, true);
            this.IntValueTables.RemoveMinorityValueOfEachCol();
            #endregion

            #region 统计与成果输出或更新
            //每个测站最后的数值结果,并进行平均保存到表
            var LastFraction = this.FractionValueTables.GetFractionOfLastValueOfAllCols(BasePrn + "", IngoreRowCountLessThan).Transpose("LastFractionOf" + ProductTypeMarker);
            LastFraction.GetAveragesWithStdDevAndAppendToTable();
            if (LastFraction.IsEmpty)
            {
                log.Error(BasePrn + " LastFractionOf" + ProductTypeMarker + " 为空, 退出计算"); return;
            }
            SummeryTables.Add(LastFraction);

            //统计每个测站每个卫星参与计算的数量,便于与RMS对比分析
            var ValueCountTable = FloatValueTables.GetValidDataCount(m => m > 0, BasePrn + "_EpochCountOf" + ProductTypeMarker).Transpose("", false);
            var sumDic          = ValueCountTable.GetAndAppendSumToTable();
            Dictionary <string, double[]> lastAveValues = FractionValueTables.GetAverageValsOfLastRow(IngoreRowCountLessThan);
            var vals = new Dictionary <string, double>();
            var rms  = new Dictionary <string, double>();
            foreach (var item in lastAveValues)
            {
                vals[item.Key] = item.Value[0];
                rms[item.Key]  = item.Value[1];
            }
            //表格数据的产品输出
            var epoch = (Time)FractionValueTables.GetOne().LastRow["Epoch"];
            AppendToProductTable(NameOfCountOfOriginalProduct, epoch, sumDic);              //参与计算的数量
            //AppendToProductTable(NameOfOriginalSDAmb, epoch, sumDic); //参与计算的数量
            AppendToProductTable(NameOfOriginalProductRms, epoch, rms);                     //产品输出RMS
            var OriginalProduct = AppendToProductTable(NameOfOriginalProduct, epoch, vals); //产品输出

            OriginalProduct.IndexColName = "BasePrn";
            var basesicPrnChain = ObjectTableStorage.GetBasicFractionCascadeTransTable(OriginalProduct, "BasePrn", ProductTypeMarker);

            if (!basesicPrnChain.IsEmpty)
            {
                var nodes        = Geo.Utils.ListUtil.GetNoRepeatList <string>(OriginalProduct.GetIndexStrings());
                var basePrnChain = ObjectTableStorage.GetCascadePlusTransferTable(basesicPrnChain, nodes, "CascadePlusOf" + ProductTypeMarker);
                this.SummeryTables.Add(basesicPrnChain);
                this.SummeryTables.Add(basePrnChain);
                //一行式输出,追加到表格
                BuildAndOutputProduct(basePrnChain, BasePrn + "", vals, epoch);
            }
            #endregion
        }