public List<StatSimuCarrierResult> Statistic(int beginStaTime, int endStaTime, List<ISimulationCarrier> simulationCarrierList, OtherSubSysInterface subSysInterface) { List<StatSimuCarrierResult> list = new List<StatSimuCarrierResult>(); StaSimulationUser statisticProcessor = new StaSimulationUser(); foreach (SimulationCarrier carrier in simulationCarrierList) { int num = (endStaTime - beginStaTime) + 1; StatSimuCarrierResult staSimulationCarrierResult = new StatSimuCarrierResult(); staSimulationCarrierResult.TxPower = SimulationTools.ConvertLineTodB(this.CalculateAvgTxPower(beginStaTime, endStaTime, carrier)); staSimulationCarrierResult.UlScheduleUserNum = ((float) carrier.UlWarmupTotalScheduleUserNum) / ((float) ((endStaTime - beginStaTime) + 1)); staSimulationCarrierResult.UlAvgVMIMOUsedRbRate = (((float) carrier.UlWarmupTotalVMIMOUsedRB) / ((float) num)) / ((float) carrier.PuschRbNum); staSimulationCarrierResult.UlIoT = carrier.UlIoT; staSimulationCarrierResult.UlAvgUsedRbNum = this.CalculateUlAvgUsedRbNum(beginStaTime, endStaTime, carrier); staSimulationCarrierResult.DlAvgUsedRbNum = this.CalculateDlAvgUsedRbNum(beginStaTime, endStaTime, carrier); staSimulationCarrierResult.UlAvgLoad = this.CalculateUlAvgLoad(beginStaTime, endStaTime, carrier); staSimulationCarrierResult.DlAvgLoad = this.CalculateDlAvgLoad(beginStaTime, endStaTime, carrier); staSimulationCarrierResult.UlAvgThroughput = this.CalculateUlCarrierAvgThroughput(beginStaTime, endStaTime, carrier); staSimulationCarrierResult.DlAvgThroughput = this.CalculateDlCarrierThroughput(beginStaTime, endStaTime, carrier); staSimulationCarrierResult.UlAppAvgThroughput = carrier.WarmupTotalTh.UlAppThroughput / ((float) num); staSimulationCarrierResult.DlAppAvgThroughput = carrier.WarmupTotalTh.DlAppThroughput / ((float) num); staSimulationCarrierResult.DlPeakThroughput = carrier.CarrierPeakThr.DlMacThroughput; staSimulationCarrierResult.UlPeakThroughput = carrier.CarrierPeakThr.UlMacThroughput; staSimulationCarrierResult.DlPeakAplThroughput = carrier.CarrierPeakThr.DlAppThroughput; staSimulationCarrierResult.UlPeakAplThroughput = carrier.CarrierPeakThr.UlAppThroughput; staSimulationCarrierResult.ServicePeakThDic = carrier.ServicePeakThDic; staSimulationCarrierResult.ServiceAvgThDic.Clear(); foreach (string str in carrier.ServiceWarmUpTotalThDic.Keys) { float ulmac = carrier.ServiceWarmUpTotalThDic[str].UlMacThroughput / ((float) num); float dlmac = carrier.ServiceWarmUpTotalThDic[str].DlMacThroughput / ((float) num); float ulapl = carrier.ServiceWarmUpTotalThDic[str].UlAppThroughput / ((float) num); float dlapl = carrier.ServiceWarmUpTotalThDic[str].DlAppThroughput / ((float) num); ThroughputGroup group = new ThroughputGroup(ulmac, dlmac, ulapl, dlapl); staSimulationCarrierResult.ServiceAvgThDic.Add(str, group); } staSimulationCarrierResult.UlScheduleTh = (carrier.UlScheduleTh * 1000f) / ((float) ((endStaTime - beginStaTime) + 1)); staSimulationCarrierResult.CarrierID = carrier.Carrier.ID; staSimulationCarrierResult.CellName = SimulationTools.GetTransName(carrier); staSimulationCarrierResult.CarrierName = carrier.Carrier.Name; List<StatSimuUserResult> userResult = new List<StatSimuUserResult>(); this.UpdateUserFailReason(carrier.DlUserList); this.UpdateUserFailReason(carrier.UlUserList); this.StatisticUsers(carrier.DlUserList, userResult, statisticProcessor, beginStaTime, endStaTime, subSysInterface); this.StatisticUsers(carrier.UlUserList, userResult, statisticProcessor, beginStaTime, endStaTime, subSysInterface); this.StatisticUsers(carrier.FailUserList, userResult, statisticProcessor, beginStaTime, endStaTime, subSysInterface); this.StatisticUsers(carrier.UlRsSinrFailUserList, userResult, statisticProcessor, beginStaTime, endStaTime, subSysInterface); staSimulationCarrierResult.StatSimuUserResultList = userResult; this.StatisticStateUserNum(userResult, staSimulationCarrierResult); carrier.count = count; list.Add(staSimulationCarrierResult); } return list; }
private void CalcPeakThPerSite(Dictionary<string, ThroughputGroup> SitePeakThDic, Dictionary<string, Dictionary<string, ThroughputGroup>> SiteServicePeakTh, Dictionary<string, ThroughputGroup> sitePeakThDicTmp, Dictionary<string, Dictionary<string, ThroughputGroup>> siteServicePeakThDicTmp) { if (this.m_CurTTI >= this.m_SnapshotInfo.TtiWarmup) { ThroughputGroup group; foreach (KeyValuePair<string, ThroughputGroup> pair in sitePeakThDicTmp) { group = null; if (!SitePeakThDic.TryGetValue(pair.Key, out group)) { group = new ThroughputGroup(); SitePeakThDic.Add(pair.Key, group); } group.UlMacThroughput = Math.Max(group.UlMacThroughput, pair.Value.UlMacThroughput); group.UlAppThroughput = Math.Max(group.UlAppThroughput, pair.Value.UlAppThroughput); group.DlMacThroughput = Math.Max(group.DlMacThroughput, pair.Value.DlMacThroughput); group.DlAppThroughput = Math.Max(group.DlAppThroughput, pair.Value.DlAppThroughput); } foreach (KeyValuePair<string, Dictionary<string, ThroughputGroup>> pair2 in siteServicePeakThDicTmp) { Dictionary<string, ThroughputGroup> dictionary = null; if (!SiteServicePeakTh.TryGetValue(pair2.Key, out dictionary)) { dictionary = new Dictionary<string, ThroughputGroup>(); SiteServicePeakTh.Add(pair2.Key, dictionary); } foreach (KeyValuePair<string, ThroughputGroup> pair3 in pair2.Value) { group = null; if (!dictionary.TryGetValue(pair3.Key, out group)) { group = new ThroughputGroup(); dictionary.Add(pair3.Key, group); } group.UlMacThroughput = Math.Max(group.UlMacThroughput, pair3.Value.UlMacThroughput); group.UlAppThroughput = Math.Max(group.UlAppThroughput, pair3.Value.UlAppThroughput); group.DlMacThroughput = Math.Max(group.DlMacThroughput, pair3.Value.DlMacThroughput); group.DlAppThroughput = Math.Max(group.DlAppThroughput, pair3.Value.DlAppThroughput); } } } }
private void UpdateUserTotalThroughput(SimulationUser user, Dictionary<string, ThroughputGroup> ServiceThDic) { ThroughputGroup group = null; if (!ServiceThDic.TryGetValue(user.LTEUser.Service.Name, out group)) { group = new ThroughputGroup(); ServiceThDic.Add(user.LTEUser.Service.Name, group); } user.MacPeakThroughput = Math.Max(user.MacPeakThroughput, user.MacTBS * 1000f); user.AppPeakThroughput = Math.Max(user.AppPeakThroughput, user.AplTBS * 1000f); if (user.LTEUser.LinkType == LinkType.Uplink) { user.UserUlTotalThroughput += user.MacTBS * 1000f; user.UserUlAppTotalThroughput += user.AplTBS * 1000f; group.UlAppThroughput += user.AplTBS * 1000f; group.UlMacThroughput += user.MacTBS * 1000f; } else { user.UserDlTotalThroughput += user.MacTBS * 1000f; user.UserDlAppTotalThroughput += user.AplTBS * 1000f; group.DlAppThroughput += user.AplTBS * 1000f; group.DlMacThroughput += user.MacTBS * 1000f; } }
private void UpdateCarrierServicesTh(SimulationCarrier carrier, Dictionary<string, ThroughputGroup> ServiceThDic) { foreach (KeyValuePair<string, ThroughputGroup> pair in ServiceThDic) { ThroughputGroup group = null; if (!carrier.ServiceWarmUpTotalThDic.TryGetValue(pair.Key, out group)) { group = new ThroughputGroup(); carrier.ServiceWarmUpTotalThDic.Add(pair.Key, group); } group.DlAppThroughput += pair.Value.DlAppThroughput; group.DlMacThroughput += pair.Value.DlMacThroughput; group.UlAppThroughput += pair.Value.UlAppThroughput; group.UlMacThroughput += pair.Value.UlMacThroughput; ThroughputGroup group2 = null; if (!carrier.ServicePeakThDic.TryGetValue(pair.Key, out group2)) { group2 = new ThroughputGroup(); carrier.ServicePeakThDic.Add(pair.Key, group2); } if (pair.Value.UlMacThroughput > group2.UlMacThroughput) { group2.UlMacThroughput = pair.Value.UlMacThroughput; group2.UlAppThroughput = pair.Value.UlAppThroughput; } if (pair.Value.DlMacThroughput > group2.DlMacThroughput) { group2.DlMacThroughput = pair.Value.DlMacThroughput; group2.DlAppThroughput = pair.Value.DlAppThroughput; } } }
private void GetThrPerSite(SimulationCarrier carrier, Dictionary<string, ThroughputGroup> sitePeakThDicTmp, Dictionary<string, Dictionary<string, ThroughputGroup>> siteServicePeakThDicTmp, Dictionary<string, ThroughputGroup> serviceThDic) { string name = SimulationTools.GetSiteName(carrier); ThroughputGroup group = null; if (!sitePeakThDicTmp.TryGetValue(name, out group)) { group = new ThroughputGroup(); sitePeakThDicTmp.Add(name, group); } group.DlAppThroughput += carrier.DlActualAppTh; group.DlMacThroughput += carrier.DlActualTh; group.UlAppThroughput += carrier.UlActualAppTh; group.UlMacThroughput += carrier.UlActualTh; Dictionary<string, ThroughputGroup> dictionary = null; if (!siteServicePeakThDicTmp.TryGetValue(name, out dictionary)) { dictionary = new Dictionary<string, ThroughputGroup>(); siteServicePeakThDicTmp.Add(name, dictionary); } foreach (KeyValuePair<string, ThroughputGroup> pair in serviceThDic) { ThroughputGroup group2 = null; if (!dictionary.TryGetValue(pair.Key, out group2)) { group2 = new ThroughputGroup(); dictionary.Add(pair.Key, group2); } group2.DlAppThroughput += pair.Value.DlAppThroughput; group2.DlMacThroughput += pair.Value.DlMacThroughput; group2.UlAppThroughput += pair.Value.UlAppThroughput; group2.UlMacThroughput += pair.Value.UlMacThroughput; } }