#The formulas below are taken from the CPI DOCUMENT: RADIO NETWORK KPI  120/1553-HSD 101 02/10
#0) More information on formula syntax: http://doc.itk.ericsson.se/binder/current/html/ItkViewGuide/07_FormulaFiles.html
#1) Any text starting with a '#' is treated as a comment and discarded
#2) Each formula is split into the formula result variable name (part before the '=' sign) and the formula expression (the part after the '=' sign).
#3) Any reference in the formula expression to a counter name of other formula name is replaced by a perl variable reference
#4) The special names sum_<countername>, sum_time_<countername> and sum_mo_<countername> are replaced by a perl reference to variable containing counter aggregates:
#      - sum_<countername>: Returns the sum of counter 'name' across the time and object domains. 
#      - sum_time_<countername>: Returns the sum of counter 'name' across the object domain for the current time. 
#      - sum_mo_<countername>:   Returns the sum of counter or field 'name' across the time domain for the current MO. 
#5) Each formula expression is then evaluated using perl 'eval'. This means that the syntax of the expressions is the same as that of perl - you can use any perl operators & functions.
#6) The order in which the formulas are defined does not have any importance, a formula can refer to other formulas defined further down in the file
#7) The formula names should not start with "pm"

########################
#MISCELLANEOUS
########################

MpLoad           = pmSumMeasuredLoad / pmSamplesMeasuredLoad
CcLoad           = pmSumMeasuredCcSpLoad / pmSamplesMeasuredCcSpLoad
DcLoad           = pmSumMeasuredDcSpLoad / pmSamplesMeasuredDcSpLoad
PdrLoad          = pmSumMeasuredPdrSpLoad / pmSamplesMeasuredPdrSpLoad
Availability     = 100 * (3600 - ( pmCellDowntimeAuto + pmCellDowntimeMan ) ) / 3600
UlRssi           = -112 + ((pmSumUlRssi / pmSamplesUlRssi) / 10) 
BLER             = 100 * (pmFaultyTransportBlocksAcUl / pmTransportBlocksAcUl)

#RAB failure causes 
ARABEstTot = pmNoRabEstablishAttemptAmrNb + pmNoRabEstablishAttemptCs57 + pmNoRabEstablishAttemptCs64 + pmNoRabEstablishAttemptPacketInteractive + pmNoRabEstablishAttemptPacketInteractiveEul + pmNoRabEstablishAttemptPacketInteractiveHs + pmNoRabEstablishAttemptPacketStream + pmNoRabEstablishAttemptPacketStream128 + pmNoRabEstablishAttemptSpeech
DlConnLimit = pmNoFailedRabEstAttemptExceedConnLimit + 0
DlAse = pmNoFailedRabEstAttemptLackDlAse + 0
DlChnlCode = pmNoFailedRabEstAttemptLackDlChnlCode + 0
DlHw = pmNoFailedRabEstAttemptLackDlHw + 0
DlHwBest = pmNoFailedRabEstAttemptLackDlHwBest + 0
DlPwr = pmNoFailedRabEstAttemptLackDlPwr + 0 
UlAse = pmNoFailedRabEstAttemptLackUlAse + 0
UlHw = pmNoFailedRabEstAttemptLackUlHw + 0
UlHwBest = pmNoFailedRabEstAttemptLackUlHwBest + 0

########################
#ACCESSIBILITY
########################

CS64NoRabEstAtt  = pmNoRabEstablishAttemptCs64 + 0
EUL_NumRabEstAtt = pmNoRabEstablishAttemptPacketInteractiveEul + 0
SpchNoRabEstAtt  = pmNoRabEstablishAttemptSpeech + 0
SpchNoRabRel     = pmNoSystemRabReleaseSpeech + pmNoNormalRabReleaseSpeech
SpchNoRabEstSucc = pmNoRabEstablishSuccessSpeech + 0
PSNoRabEstAtt    = pmNoRabEstablishAttemptPacketInteractive + 0
PSNoRabEstSucc   = pmNoRabEstablishSuccessPacketInteractive + 0

NoRrcConnReq     = pmTotNoRrcConnectReq + 0
NoRrcConnSuc     = pmTotNoRrcConnectReqSuccess + 0

SpchRrcReq       = pmTotNoRrcConnectReqCs + 0
SpchRrcLS        = pmNoLoadSharingRrcConnCs + 0
SpchRrcSuc       = pmTotNoRrcConnectReqCsSucc + 0
SpchRrcFail      = SpchRrcReq - SpchRrcLS - SpchRrcSuc

PSRrcReq         = pmTotNoRrcConnectReqPs + 0
PSRrcSuc         = pmTotNoRrcConnectReqPsSucc + 0
PSRrcLS          = pmNoLoadSharingRrcConnPs + 0
PSRrcFail        = PSRrcReq - PSRrcLS - PSRrcSuc

StdAloneSrbAtCallEst_CS = 100 * pmNoNormalNasSignReleaseCs / (pmNoNormalNasSignReleaseCs + pmNoSystemNasSignReleaseCs)
StdAloneSrbAtCallEst_PS = 100 * pmNoNormalNasSignReleasePs / (pmNoNormalNasSignReleasePs + pmNoSystemNasSignReleasePs)
CSIuSigSuc              = 100 * pmNoIuSigEstablishSuccessCs / pmNoIuSigEstablishAttemptCs
PSIuSigSuc              = 100 * pmNoIuSigEstablishSuccessPs / pmNoIuSigEstablishAttemptPs

RrcSuc         = 100 * pmTotNoRrcConnectReqSuccess / (pmTotNoRrcConnectReq   - pmNoLoadSharingRrcConn)
PSRrcSucRate   = 100 * pmTotNoRrcConnectReqPsSucc  / (pmTotNoRrcConnectReqPs - pmNoLoadSharingRrcConnPs)
SpchRrcSucRate = 100 * pmTotNoRrcConnectReqCsSucc  / (pmTotNoRrcConnectReqCs - pmNoLoadSharingRrcConnCs)

SpchRabSuc = 100 * pmNoRabEstablishSuccessSpeech / (pmNoRabEstablishAttemptSpeech - pmNoDirRetryAtt)
CS64RabSuc = 100 * pmNoRabEstablishSuccessCs64 / pmNoRabEstablishAttemptCs64
CS57RabSuc = 100 * pmNoRabEstablishSuccessCs57 / pmNoRabEstablishAttemptCs57
PSRabSucc  = 100 * pmNoRabEstablishSuccessPacketInteractive / pmNoRabEstablishAttemptPacketInteractive
EULRabSuc  = 100 * pmNoRabEstablishSuccessPacketInteractiveEul / pmNoRabEstablishAttemptPacketInteractiveEul
HSRabSuc   = 100 * pmNoRabEstablishSuccessPacketInteractiveHs / pmNoRabEstablishAttemptPacketInteractiveHs

SpchAccess = SpchRrcSucRate * SpchRabSuc * StdAloneSrbAtCallEst_CS / 10000 
CS64Access = SpchRrcSucRate * CS64RabSuc * StdAloneSrbAtCallEst_CS / 10000 
CS57Access = SpchRrcSucRate * CS57RabSuc * StdAloneSrbAtCallEst_CS / 10000 
PSAccess   = PSRrcSucRate   * PSRabSucc  * StdAloneSrbAtCallEst_PS / 10000 
HsAccess   = PSRrcSucRate   * HSRabSuc   * StdAloneSrbAtCallEst_PS / 10000  
EULAccess  = PSRrcSucRate   * EULRabSuc  * StdAloneSrbAtCallEst_PS / 10000  

RrcFailContrib  = 100 * (pmTotNoRrcConnectReq - pmTotNoRrcConnectReqSuccess - pmNoLoadSharingRrcConn ) / ( sum_time_pmTotNoRrcConnectReq - sum_time_pmTotNoRrcConnectReqSuccess - sum_time_pmNoLoadSharingRrcConn)
RrcFail         = 100 - RrcSuc
SpchAccFailRate = 100 * (1 - (SpchRrcSucRate * SpchRabSuc) / 10000)
PSAccFailRate   = 100 * (1 - (PSRrcSucRate * PSRabSucc) / 10000)

########################
#RETAINABILITY
########################

CS64Drop    = 100 * pmNoSystemRabReleaseCs64 / (pmNoNormalRabReleaseCs64 + pmNoSystemRabReleaseCs64)
SpchDrop    = 100 * pmNoSystemRabReleaseSpeech / (pmNoNormalRabReleaseSpeech + pmNoSystemRabReleaseSpeech)
TotalPSRabs = pmNoNormalRabReleasePacket + pmNoSystemRabReleasePacket - pmNoNormalRabReleasePacketUra - pmNoSystemRabReleasePacketUra + pmChSwitchSuccFachUra - pmNoSystemRbReleaseHs - pmNoNormalRbReleaseHs + pmNoSuccRbReconfOrigPsIntDch + pmUpswitchFachHsSuccess
PSDrop      = 100 * (pmNoSystemRabReleasePacket - pmNoSystemRabReleasePacketUra) / (pmNoSystemRabReleasePacket - pmNoSystemRabReleasePacketUra + pmNoNormalRabReleasePacket - pmNoNormalRabReleasePacketUra + pmChSwitchSuccFachUra )
CS57Drop    = 100 * pmNoSystemRabReleaseCsStream / (pmNoNormalRabReleaseCsStream + pmNoSystemRabReleaseCsStream)
HsDrop      = 100 * (pmNoSystemRbReleaseHs) / (pmNoSystemRbReleaseHs + pmNoNormalRbReleaseHs + pmNoSuccRbReconfOrigPsIntDch + pmPsIntHsToFachSucc)

#SpchRabSucContrib =  100 * (pmNoRabEstablishSuccessSpeech / sum_time_pmNoRabEstablishSuccessSpeech)
SpchDropContrib    =  100 * pmNoSystemRabReleaseSpeech / sum_time_pmNoSystemRabReleaseSpeech
CS64DropContrib    =  100 * pmNoSystemRabReleaseCs64 / sum_time_pmNoSystemRabReleaseCs64
PSDropContrib      =  100 * (pmNoSystemRabReleasePacket - pmNoSystemRabReleasePacketUra) / (sum_time_pmNoSystemRabReleasePacket - sum_time_pmNoSystemRabReleasePacketUra)
HsDropContrib      =  100 * pmNoSystemRbReleaseHs / sum_time_pmNoSystemRbReleaseHs

SHOFailContrib     =  100 * pmNoTimesCellFailAddToActSet / sum_time_pmNoTimesCellFailAddToActSet

SpeechRABFail        = pmNoRabEstablishAttemptSpeech - pmNoRabEstablishSuccessSpeech- pmNoDirRetryAtt
SpeechRABFail_RNC    = sum_time_pmNoRabEstablishAttemptSpeech - sum_time_pmNoRabEstablishSuccessSpeech - sum_time_pmNoDirRetryAtt
SpeechRABFailContrib = 100 * ((pmNoRabEstablishAttemptSpeech - pmNoRabEstablishSuccessSpeech)/(sum_time_pmNoRabEstablishAttemptSpeech - sum_time_pmNoRabEstablishSuccessSpeech))

PSRABFail          = pmNoRabEstablishAttemptPacketInteractive - pmNoRabEstablishSuccessPacketInteractive
PSRABFail_RNC      = sum_time_pmNoRabEstablishAttemptPacketInteractive - sum_time_pmNoRabEstablishSuccessPacketInteractive
PSRABFailContrib   = 100 * ((pmNoRabEstablishAttemptPacketInteractive - pmNoRabEstablishSuccessPacketInteractive)/(sum_time_pmNoRabEstablishAttemptPacketInteractive - sum_time_pmNoRabEstablishSuccessPacketInteractive))

PsNoRabRel = pmNoSystemRabReleasePacket + pmNoNormalRabReleasePacket
CS64NoRabRel = pmNoSystemRabReleaseCs64 + pmNoNormalRabReleaseCs64

#PsDCHFACHRabSucc = 100 * ((pmNoRabEstablishSuccessPacketInteractive - pmNoRabEstablishSuccessPacketInteractiveHs)/(pmNoRabEstablishAttemptPacketInteractive-pmNoRabEstablishAttemptPacketInteractiveHs))
#changed formula for PS R99 Rab Establish Success, PLM Info 449
PsDCHFACHRabSucc = 100* ((pmNoRabEstablishSuccessPacketInteractive  - pmNoRabEstablishSuccessPacketInteractiveHs) / (pmNoRabEstablishAttemptPacketInteractive- pmNoRabEstablishAttemptPacketInteractiveHs + pmNoOfNonHoReqDeniedHs + pmNoRabEstBlockTnPsIntHsBest)) 
PsDCHFACHDropRate = 100 * (pmNoSystemRabReleasePacket - pmNoSystemRabReleasePacketUra - pmNoSystemRbReleaseHs) / TotalPSRabs
PSDCHRetransRate = 100 - 100 * (pmSentPacketData1 + pmSentPacketData2 + pmSentPacketData3 + pmSentPacketData4) / (pmSentPacketDataInclRetrans1 + pmSentPacketDataInclRetrans2 + pmSentPacketDataInclRetrans3 + pmSentPacketDataInclRetrans4)
DCHMinperDrop = 15 * (pmSumBestDchPsIntRabEstablish / 180) / (pmNoSystemRabReleasePacket - pmNoSystemRbReleaseHs - pmNoSystemRabReleasePacketUra)
FACHMinperDrop = 15 * (pmSumFachPsIntRabEstablish / 180) / (pmNoSystemRabReleasePacket - pmNoSystemRbReleaseHs - pmNoSystemRabReleasePacketUra)
CellFACHDrop =  pmNoCellFachDisconnectAbnorm * 100 / (pmNoCellFachDisconnectAbnorm + pmNoCellFachDisconnectNormal)

HsCellChSuccRate = 100 * (pmNoHsCcSuccess / pmNoHsCcAttempt)
HsCellChAttempt  = pmNoHsCcAttempt + 0

NoHsRel         = pmNoSystemRbReleaseHs + pmNoNormalRbReleaseHs
NoAbnormalHsRel = pmNoSystemRbReleaseHs + 0

HSMinperDrop    = 15 * (pmSumBestPsHsAdchRabEstablish / 180) / pmNoSystemRbReleaseHs 
EULMinperDrop   = 15 * (pmSumBestPsEulRabEstablish / 180) / pmNoSystemRbReleaseEul 

########################
#CALL COMPLETION
########################

SpchCCSR   =       SpchAccess * (100 - SpchDrop) / 100
CS64CCSR   =       CS64Access * (100 - CS64Drop) / 100
PSCCSR     =       PSAccess   * (100 - PSDrop)   / 100


########################
#THROUGHPUT, TRAFFIC VOLUME
########################

AvgSpeechErlang = (pmSumBestCs12Establish + pmSumBestAmr12200RabEstablish + pmSumBestAmr7950RabEstablish + pmSumBestAmr5900RabEstablish + pmSumBestAmr4750RabEstablish + pmSumBestAmrNbMmRabEstablish + pmSumBestAmrWbRabEstablish) / (180 * pmRopCounter)

PSDlDchTputTot  = pmSumDchDlRlcTotPacketThp / pmSamplesDchDlRlcTotPacketThp
PSUlDchTputTot  = pmSumDchUlRlcTotPacketThp / pmSamplesDchUlRlcTotPacketThp
PSDlDchTputUser = pmSumDchDlRlcUserPacketThp / pmSamplesDchDlRlcUserPacketThp
PSUlDchTputUser = pmSumDchUlRlcUserPacketThp / pmSamplesDchUlRlcUserPacketThp

PSHsTputTot   = pmSumHsDlRlcTotPacketThp / pmSamplesHsDlRlcTotPacketThp 
PSEulTputTot  = pmSumEulRlcTotPacketThp / pmSamplesEulRlcTotPacketThp 
PSHsTputUser  = pmSumHsDlRlcUserPacketThp / pmSamplesHsDlRlcUserPacketThp 
PSEulTputUser = pmSumEulRlcUserPacketThp / pmSamplesEulRlcUserPacketThp

HsTputAvg = 8 * (pmSentPacketDataHs3 + pmSentPacketDataHs4) / (pmTotalPacketDurationHs3 + pmTotalPacketDurationHs4)
HsTputGt100KbAvg = 8 * (pmSentPacketDataHs4) / (pmTotalPacketDurationHs4)
HsRetransmissionRate = 100 - 100 * ( pmSentPacketDataHs1 + pmSentPacketDataHs2 + pmSentPacketDataHs3 + pmSentPacketDataHs4 ) / ( pmSentPacketDataInclRetransHs1  + pmSentPacketDataInclRetransHs2 + pmSentPacketDataInclRetransHs3 + pmSentPacketDataInclRetransHs4 )

PsAvgNoUsers  = (pmSumBestDchPsIntRabEstablish / pmSamplesBestDchPsIntRabEstablish) + (pmSumBestPsHsAdchRabEstablish / pmSamplesBestPsHsAdchRabEstablish) + (pmSumFachPsIntRabEstablish / pmSamplesFachPsIntRabEstablish)
HsAvgNoUsers = pmSumBestPsHsAdchRabEstablish / pmSamplesBestPsHsAdchRabEstablish
HsTotNoUsers = pmSumBestPsHsAdchRabEstablish / ( 180 * pmRopCounter ) 

UsedCapacity   = pmSumCapacity / pmSamplesCapacity
IuPS_DLUL_kbps = (pmNoRoutedIpBytesDl + pmNoRoutedIpBytesUl) * 8 / (pmRopCounter * 900)
IuPS_DL_kbps   = pmNoRoutedIpBytesDl * 8 / (pmRopCounter * 900)
IuPS_UL_kbps   = pmNoRoutedIpBytesUl * 8 / (pmRopCounter * 900) 

AvgUlCredits   = WeightedAverage(pmUlCredits,[12.5,37.5,55,65,72.5,77.5,82.5,87.5,92.5,95])
AvgDlCredits   = WeightedAverage(pmDlCredits,[12.5,37.5,55,65,72.5,77.5,82.5,87.5,92.5,95])

########################
#IRAT, MOBILITY
########################

SpchIRATU2GHOSucc = 100 * (pmNoSuccessOutIratHoSpeech + pmNoSuccessOutSbHoSpeech) / (pmNoAttOutIratHoSpeech + pmNoAttOutSbHoSpeech)
CsIRATG2UHOSucc   = 100 * pmNoInCsIratHoSuccess / pmNoInCsIratHoAtt
PsIRATU2GCCSucc   = 100 * pmNoOutIratCcSuccess / pmNoOutIratCcAtt

SHOSuccess = 100 * pmNoTimesRlAddToActSet / (pmNoTimesRlAddToActSet + pmNoTimesCellFailAddToActSet)

########################
#PAGING 
########################

RrcSucc = RrcSuc + 0
RrcSuccTerm = 100 * sum_time_pmTotNoTermRrcConnectReqSucc / sum_time_pmTotNoTermRrcConnectReq
TotalPageAnswer = sum_time_pmTotNoTermRrcConnectReq + 0
TotalPageAnswerToCore = sum_time_pmTotNoTermRrcConnectReqSucc + 0
TotalPageDiscardCentralMpPLoad = pmNoPageDiscardCmpLoadC + 0
TotalPageRejectUtrancell = sum_time_pmNoPagingAttemptUtranRejected
TotalPageType1 = pmCnInitPagingToIdleUeLa + pmCnInitPagingToIdleUeRa + pmCnInitPagingToIdleUe + pmCnInitPagingToUraUe + pmUtranInitPagingToUraUe
TotalPageType2 = sum_time_pmNoPagingAttemptCnInitDcch + 0
TotalPageReqFromCore = TotalPageDiscardCentralMpPLoad + TotalPageType1 + TotalPageType2
PagingSuccessRate = 100 * TotalPageAnswer / (TotalPageDiscardCentralMpPLoad + TotalPageType1 - pmCnInitPagingToUraUe - pmUtranInitPagingToUraUe)
PagingSuccessRatePostRrc = 100 * TotalPageAnswerToCore / (TotalPageDiscardCentralMpPLoad + TotalPageType1 - pmCnInitPagingToUraUe - pmUtranInitPagingToUraUe)

########################
#MULTIRAB
########################
include $moshelldir/commonjars/pm/FORMULA_MULTIRAB_RNC.txt

########################
#CPP
########################

include $moshelldir/commonjars/pm/FORMULA_CPP_0.txt
