def ParseMEI(line, logObj): length = len(line) if 2 < length: NumberOfContextID = 0 if line[2] != '': NumberOfContextID = int(line[2]) logObj.event = "Measurement Event Information" logObj.msgType = ' ' logObj.time = line[1] measureSystems = '' measurementEvent = 0 if ((3 + NumberOfContextID) < length) and (line[3 + NumberOfContextID] != ''): measureSystems = int(line[3 + NumberOfContextID]) logObj.modeSystem = MeasureSysConverter(measureSystems) if logObj.modeSystem == 'UMTS FDD': if ((4 + NumberOfContextID) < length) and (line[4 + NumberOfContextID] != ''): measurementEvent = int(line[4 + NumberOfContextID]) #add logObj.MeasurementEvent = parseMEIUmtsFddParseMeasurementEvent( measurementEvent) #addd elif logObj.modeSystem == 'LTE FDD' or logObj.modeSystem == 'LTE TDD': if ((4 + NumberOfContextID) < length) and (line[4 + NumberOfContextID] != ''): measurementEvent = int(line[4 + NumberOfContextID]) #add logObj.MeasurementEvent = parseMEILteParseMeasurementEvent( measurementEvent) #addd return 1 else: return 0
def ParseMACRATEU(line, logObj): length = len(line) if 2 < length: NumberOfContextID = 0 if line[2] != '': NumberOfContextID = int(line[2]) logObj.event = "Parse MAC layer throughput uplink" logObj.msgType = '' logObj.time = line[1] if ((3 + NumberOfContextID) < length) and (line[3 + NumberOfContextID] != ''): logObj.modeSystem = MeasureSysConverter( int(line[3 + NumberOfContextID])) if logObj.modeSystem == 'LTE FDD' or logObj.modeSystem == 'LTE TDD': if ((4 + NumberOfContextID) < length) and (line[4 + NumberOfContextID] != ''): logObj.MACULBitRate = int(line[4 + NumberOfContextID]) if ((6 + NumberOfContextID) < length) and (line[6 + NumberOfContextID] != ''): logObj.MACULRetr = float(line[6 + NumberOfContextID]) return 1 else: dataOfTAU = "No of context id not found" return 0
def ParseGAA(line, logObj, dictionary): length = len(line) if 2 < length: contextID = 0 dataOfGAA = '' NumberOfContextID = 0 if line[2] != '': NumberOfContextID = int(line[2]) if NumberOfContextID != 0: if (3 < length) and (line[3] != ''): contextID = int(line[3]) if contextID in dictionary: attachment = dictionary[contextID] else: attachment = AttachmentEventInfo() dictionary[contextID] = attachment attachment = dictionary[contextID] attachment.Attempt = line[1] logObj.event = "Attach Attempt" logObj.msgType = "Setup" dataOfGAA += "Attach Context ID: " + str(contextID) measureSystem = MeasureSysConverter(int(line[3 + NumberOfContextID])) logObj.eventInfo = dataOfGAA logObj.modeSystem = measureSystem return 1
def ParseAMRS (line, logObj): length = len(line) if 2 < length: NumberOfContextID = 0 if line[2] != '': NumberOfContextID = int(line[2]) logObj.event = "AMR Status" logObj.msgType = '' logObj.time = line[1] chi = 0 if ((3 + NumberOfContextID) < length) and (line[3+NumberOfContextID] != '') : logObj.modeSystem = MeasureSysConverter(int(line[3 + NumberOfContextID])) if logObj.modeSystem == 'GSM': if ((4 + NumberOfContextID) < length) and (line[4+NumberOfContextID] != '') : logObj.AMRModeUL = ParseAMRCodec(int(line[4 + NumberOfContextID])) #add this if ((5 + NumberOfContextID) < length) and (line[5+NumberOfContextID] != '') : logObj.AMRModeDL = ParseAMRCodec(int(line[5 + NumberOfContextID])) if ((8 + NumberOfContextID) < length) and (line[8+NumberOfContextID] != '') : chi = int(line[8 + NumberOfContextID]) if chi == 1: logObj.AMRICMI = "Half rate" elif chi == 2: logObj.AMRICMI = "Full rate" elif chi == 3: logObj.AMRICMI = "Wideband rate" elif logObj.modeSystem == 'UMTS FDD' or logObj.modeSystem == 'UMTS TD-SCDMA' or logObj.modeSystem == 'LTE FDD' or logObj.modeSystem == 'LTE TDD': if ((4 + NumberOfContextID) < length) and (line[4+NumberOfContextID] != '') : logObj.AMRModeUL = ParseAMRCodec(int(line[4 + NumberOfContextID])) if ((5 + NumberOfContextID) < length) and (line[5+NumberOfContextID] != '') : logObj.AMRModeDL = ParseAMRCodec(int(line[5 + NumberOfContextID])) return 1 else: return 0
def ParseRABF(line, logObj): length = len(line) if 2 < length: NumberOfContextID = 0 if line[2] != '': NumberOfContextID = int(line[2]) dataOfRABF = '' numberOfRABRBs = 0 logObj.event = "RAB Allocation Failed" logObj.msgType = 'Setup Failed' logObj.time = line[1] rabContextID = 0 rabType = 0 rabFailType = 0 numberOfHeaderParam = 0 if (3 < length) and (line[3] != ''): rabContextID = int(line[3]) dataOfRABF = 'Context ID: ' + str(rabContextID) + ';' if ((3 + NumberOfContextID) < length) and (line[3 + NumberOfContextID] != ''): logObj.modeSystem = MeasureSysConverter( int(line[3 + NumberOfContextID])) dataOfRABF += ('Measure System: ' + logObj.modeSystem) + ';' if ((4 + NumberOfContextID) < length) and (line[4 + NumberOfContextID] != ''): numberOfHeaderParam = int(line[4 + NumberOfContextID]) if numberOfHeaderParam > 0: if ((5 + NumberOfContextID) < length) and (line[5 + NumberOfContextID] != ''): rabType = int(line[5 + NumberOfContextID]) if rabType == 1: logObj.rabType = 'CS' dataOfRABF += 'RAB Type: CS;' if rabType == 2: logObj.rabType = 'PS' dataOfRABF += 'RAB Type: PS;' if numberOfHeaderParam > 1: if ((6 + NumberOfContextID) < length) and (line[6 + NumberOfContextID] != ''): logObj.RABID = int(line[6 + NumberOfContextID]) if ((5 + NumberOfContextID + numberOfHeaderParam) < length) and ( line[5 + NumberOfContextID + numberOfHeaderParam] != ''): rabFailType = int(line[5 + NumberOfContextID + numberOfHeaderParam]) if rabFailType == 1: logObj.RABFailType = "LTE re-establishment cause" dataOfRABF += "Fail Type: LTE re-establishment cause; " elif rabFailType == 2: logObj.RABFailType = "UMTS failure cause" dataOfRABF += "Fail Type: UMTS failure cause; " elif rabFailType == 3: logObj.RABFailType = "UMTS ISHO failure cause" dataOfRABF += "Fail Type: UMTS ISHO failure cause; " elif rabFailType == 4: logObj.RABFailType = "GSM RR cause" dataOfRABF += "Fail Type: GSM RR cause; " logObj.eventInfo = dataOfRABF return 1 else: return 0
def ParseMACERATEV27(line, logObj): length = len(line) if 2 < length: NumberOfContextID = 0 if line[2] != '': NumberOfContextID = int(line[2]) logObj.event = "MAC-E layer throughput" logObj.msgType = '' logObj.time = line[1] measureSystems = '' if ((3 + NumberOfContextID) < length) and (line[3 + NumberOfContextID] != ''): measureSystems = int(line[3 + NumberOfContextID]) logObj.modeSystem = MeasureSysConverter(measureSystems) if logObj.modeSystem == 'UMTS FDD': if ((4 + NumberOfContextID) < length) and (line[4 + NumberOfContextID] != ''): logObj.MACEBitRate = int(line[4 + NumberOfContextID]) if ((4 + NumberOfContextID) < length) and (line[4 + NumberOfContextID] != ''): celltype = line[9 + NumberOfContextID] if celltype == '1': logObj.cellType = "Primary" elif celltype == '2': logObj.cellType = "Secondary" return 1 else: return 0
def ParseGAD (line, logObj,dictionary): length = len(line) if 2 < length: contextID = 0 dataOfGAD = '' if line[2] != '': NumberOfContextID = int(line[2]) if NumberOfContextID != 0: if(3 < length) and (line[3] != '') and NumberOfContextID == 1 : contextID = int(line[3]) if contextID in dictionary: attachment = dictionary[contextID] else: attachment = AttachmentEventInfo() dictionary[contextID] = attachment attachment = dictionary[contextID] attachmentDuration = 0 attachment.End = line[1] if attachment.End != '' and attachment.Established != '': tdelta = datetime.strptime(attachment.End.split('.', 1)[0], '%H:%M:%S') - datetime.strptime(attachment.Established.split('.', 1)[0], '%H:%M:%S') attachmentDuration = float(tdelta.seconds)*1000 #MilliSeconds logObj.event = "Detach" logObj.msgType = "Release" dataOfGAD += "Detach Context ID: " + str(contextID) measureSystem = MeasureSysConverter(int(line[3 + NumberOfContextID])) dataOfGAD += ";Measured System: " + measureSystem detachStatus = 'Unknown' if((4 + NumberOfContextID) < length) and (line[4 + NumberOfContextID] != '') : detachCheck = int(line[4 + NumberOfContextID]) if detachCheck == 1: detachStatus = 'User detach' elif detachCheck == 2: detachStatus = 'Network detach (GMM Cause)' elif detachCheck == 3: detachStatus = 'Mobile detach (GMM Cause)' elif detachCheck == 4: detachStatus = 'Test system failure' if attachmentDuration > 0: dataOfGAD += ";Attachemt Duration: " + str(attachmentDuration) + 'ms' dataOfGAD += ";Detach status: "+detachStatus disconnectionCause = "Unknown" if((5 + NumberOfContextID) < length) and (line[5 + NumberOfContextID] != '') : disconnectionCause = parseGADDisconnectionCause(int(line[5 + NumberOfContextID])) dataOfGAD += ";Disconnection Cause: " + disconnectionCause if((6 + NumberOfContextID) < length) and (line[6 + NumberOfContextID] != '') : dataOfGAD += ";Detach Time: "+line[6 + NumberOfContextID] logObj.eventInfo = dataOfGAD logObj.modeSystem = measureSystem return 1
def ParseMACI(line, listOfLogObj, PREVIOUS_LAT, PREVIOUS_LONG, PREVIOUS_MCC, PREVIOUS_MNC): dataOfMACI = "" length = len(line) if 2 < length: NumberOfContextID = 0 if line[2] != '': NumberOfContextID = int(line[2]) contextID = 'Unknown' measureSystem = 'Unknown' logDTObj = LogDT() logDTObj.lat = PREVIOUS_LAT logDTObj.longg = PREVIOUS_LONG logDTObj.mcc = PREVIOUS_MCC logDTObj.mnc = PREVIOUS_MNC logDTObj.event = 'Parse MAC layer info' if (3 < length) and (line[3] != ''): contextID = line[3] if ((3 + NumberOfContextID) < length) and (line[3 + NumberOfContextID] != ''): measureSystem = line[3 + NumberOfContextID] logDTObj.modeSystem = MeasureSysConverter(int(measureSystem)) numberOfCells = 0 if ((4 + NumberOfContextID) < length) and (line[4 + NumberOfContextID] != ''): numberOfCells = int(line[4 + NumberOfContextID]) if ((5 + NumberOfContextID) < length) and (line[5 + NumberOfContextID] != ''): numberOfParameterPerCell = int(line[5 + NumberOfContextID]) for cell in range(0, numberOfCells): currentLog = LogDT() currentLog = copy.deepcopy(logDTObj) for parameter in range(0, numberOfParameterPerCell): paramNumber = NumberOfContextID + 6 + ( cell * numberOfParameterPerCell) + parameter if ((paramNumber) < length) and (line[paramNumber] != ''): if parameter == 0: if currentLog.modeSystem == 'UMTS FDD': if line[paramNumber] == '2': currentLog.cellType = 'Secondary' elif currentLog.modeSystem == 'LTE FDD' or currentLog.modeSystem == 'LTE TDD': currentLog.cellType = ParseCellTypeJ( line[paramNumber], currentLog.modeSystem) elif parameter == 1: if line[paramNumber] == '0': currentLog.cellState = 'Deactivate' elif line[paramNumber] == '1': currentLog.cellState = 'Activate' listOfLogObj.append(currentLog) return 1 else: return 0
def ParseMACBLER(line, listOfLogObj, PREVIOUS_LAT, PREVIOUS_LONG, PREVIOUS_MCC, PREVIOUS_MNC): length = len(line) if 2 < length: NumberOfContextID = 0 if line[2] != '': NumberOfContextID = int(line[2]) logObj = LogDT() logObj.lat = PREVIOUS_LAT logObj.longg = PREVIOUS_LONG logObj.mcc = PREVIOUS_MCC logObj.mnc = PREVIOUS_MNC logObj.event = "Parse MAC layer Block Error Rate" logObj.msgType = '' logObj.time = line[1] headerParameters = 0 numberOfTrChs = 0 numberOfParamsPerTrCh = 0 cellType = 0 if ((3 + NumberOfContextID) < length) and (line[3 + NumberOfContextID] != ''): logObj.modeSystem = MeasureSysConverter( int(line[3 + NumberOfContextID])) if logObj.modeSystem == 'UMTS FDD': if ((4 + NumberOfContextID) < length) and (line[4 + NumberOfContextID] != ''): headerParameters = int(line[4 + NumberOfContextID]) if ((5 + NumberOfContextID) < length) and (line[5 + NumberOfContextID] != ''): numberOfTrChs = int(line[5 + NumberOfContextID]) if ((6 + NumberOfContextID) < length) and (line[6 + NumberOfContextID] != ''): numberOfParamsPerTrCh = int(line[6 + NumberOfContextID]) for c in range(0, numberOfTrChs): currentObj = LogDT() currentObj = copy.deepcopy(logObj) if ((7 + NumberOfContextID + headerParameters + (c * numberOfParamsPerTrCh) + 3) < length) and ( line[7 + NumberOfContextID + headerParameters + (c * numberOfParamsPerTrCh) + 3] != ''): currentObj.MAChsBLER = float( line[7 + NumberOfContextID + headerParameters + (c * numberOfParamsPerTrCh) + 3]) if ((7 + NumberOfContextID + headerParameters + (c * numberOfParamsPerTrCh) + 6) < length) and ( line[7 + NumberOfContextID + headerParameters + (c * numberOfParamsPerTrCh) + 6] != ''): cellType = int( line[7 + NumberOfContextID + headerParameters + (c * numberOfParamsPerTrCh) + 6]) if cellType == 1: currentObj.cellType = "Primary" else: currentObj.cellType = "Secondary" listOfLogObj.append(currentObj) return 1 else: return 0
def ParseRRA(line, logObj, dictionary): length = len(line) if 2 < length: dataOfRRA = '' rrcContextID = 0 NumberOfContextID = 0 if line[2] != '': NumberOfContextID = int(line[2]) if (3 < length) and (line[3] != ''): rrcContextID = int(line[3]) RRCContextIdValue = rrcContextID if rrcContextID in dictionary: RRAInfo = dictionary[rrcContextID] else: RRAInfo = RadioResourceInfo() dictionary[rrcContextID] = RRAInfo RRAInfo = dictionary[rrcContextID] cause = "Unknown" logObj.event = "Radio resource connection attempt" RRAInfo.ConnectionAttempt = line[1] dictionary[rrcContextID] = RRAInfo logObj.msgType = "Attempt" dataOfRRA = "RRC Context ID: " + str(rrcContextID) if ((3 + NumberOfContextID) < length) and (line[3 + NumberOfContextID] != ''): measureSystem = MeasureSysConverter( int(line[3 + NumberOfContextID])) establishmentCause = "Unknown" if measureSystem == 'UMTS FDD' or measureSystem == 'UMTS TDSCDMA': if ((4 + NumberOfContextID) < length) and (line[4 + NumberOfContextID] != ''): cause = int(line[4 + NumberOfContextID]) cause = parseRRAUMTSFDD(cause) elif measureSystem == 'LTE FDD' or measureSystem == 'LTE TDD': if ((4 + NumberOfContextID) < length) and (line[4 + NumberOfContextID] != ''): cause = int(line[4 + NumberOfContextID]) if cause == 0: cause = 'Emergency' elif cause == 1: cause = 'High priority access' elif cause == 2: cause = 'Mobile terminating access' elif cause == 3: cause = 'Mobile originating signaling' elif cause == 4: cause = 'Mobile originating data' dataOfRRA += ';RRC Establishment Cause: ' + str(cause) logObj.eventInfo = dataOfRRA logObj.modeSystem = measureSystem return 1
def ParseRRCSM(line, logObj): length = len(line) if 2 < length: dataOfRRCSM = '' RRCSMContextID = 0 NumberOfContextID = 0 if line[2] != '': NumberOfContextID = int(line[2]) if NumberOfContextID != 0: if (3 < length) and (line[3] != ''): RRCSMContextID = int(line[3]) logObj.direction = 'NA' if ((3 + NumberOfContextID) < length) and (line[3 + NumberOfContextID] != ''): measureSystem = MeasureSysConverter( int(line[3 + NumberOfContextID])) if ((4 + NumberOfContextID) < length) and (line[4 + NumberOfContextID] != ''): cause = line[4 + NumberOfContextID] if cause == '1': logObj.direction = 'UL' elif cause == '2': logObj.direction = 'DL' if ((5 + NumberOfContextID) < length) and (line[5 + NumberOfContextID] != ''): logObj.RRCMessage = line[5 + NumberOfContextID] if ((6 + NumberOfContextID) < length) and (line[6 + NumberOfContextID] != ''): logObj.SubChannel = line[6 + NumberOfContextID] if ((9 + NumberOfContextID) < length) and (line[9 + NumberOfContextID] != ''): logObj.RRCData = line[9 + NumberOfContextID] if logObj.event != '': logObj.event = logObj.RRCMessage if measureSystem == 'UMTS FDD' or measureSystem == 'UMTS TD-SCDMA': if ((7 + NumberOfContextID) < length) and (line[7 + NumberOfContextID] != ''): logObj.UARFCN = line[7 + NumberOfContextID] if ((8 + NumberOfContextID) < length) and (line[8 + NumberOfContextID] != ''): logObj.SC = line[8 + NumberOfContextID] if measureSystem == 'LTE FDD' or measureSystem == 'LTE TDD': if ((7 + NumberOfContextID) < length) and (line[7 + NumberOfContextID] != ''): logObj.EARFCN = line[7 + NumberOfContextID] if ((8 + NumberOfContextID) < length) and (line[8 + NumberOfContextID] != ''): logObj.PCI = line[8 + NumberOfContextID] logObj.modeSystem = measureSystem return 1
def ParseRABD(line, logObj): length = len(line) if 2 < length: NumberOfContextID = 0 if line[2] != '': NumberOfContextID = int(line[2]) dataOfRABD = '' numberOfRABRBs = 0 logObj.event = "RAB Release" logObj.msgType = 'Complete' logObj.time = line[1] rabContextID = 0 rabType = 0 rabFailType = 0 numberOfHeaderParam = 0 if (3 < length) and (line[3] != ''): rabContextID = int(line[3]) dataOfRABD = 'Context ID: ' + str(rabContextID) + ';' if ((3 + NumberOfContextID) < length) and (line[3 + NumberOfContextID] != ''): logObj.modeSystem = MeasureSysConverter( int(line[3 + NumberOfContextID])) dataOfRABD += ('Measure System: ' + logObj.modeSystem) + ';' if ((4 + NumberOfContextID) < length) and (line[4 + NumberOfContextID] != ''): numberOfHeaderParam = int(line[4 + NumberOfContextID]) if numberOfHeaderParam > 0: if ((5 + NumberOfContextID) < length) and (line[5 + NumberOfContextID] != ''): rabType = int(line[5 + NumberOfContextID]) if rabType == 1: logObj.rabType = 'CS' dataOfRABD += 'RAB Type: CS;' if rabType == 2: logObj.rabType = 'PS' dataOfRABD += 'RAB Type: PS;' if numberOfHeaderParam > 1: if ((6 + NumberOfContextID) < length) and (line[6 + NumberOfContextID] != ''): logObj.RABID = int(line[6 + NumberOfContextID]) if ((5 + NumberOfContextID + numberOfHeaderParam) < length) and ( line[5 + NumberOfContextID + numberOfHeaderParam] != ''): rabFailType = int(line[5 + NumberOfContextID + numberOfHeaderParam]) if rabFailType == 1: logObj.RABRelaseType = "Network Release" dataOfRABD += "Release Type: Network Release; " elif rabFailType == 2: logObj.RABRelaseType = "UE Release" dataOfRABD += "Release Type: UE Release; " logObj.eventInfo = dataOfRABD return 1 else: return 0
def ParseRRRE(line, logObj, dictionary): length = len(line) if 2 < length: dataOfRRRE = '' RRREContextID = 0 NumberOfContextID = 0 if line[2] != '': NumberOfContextID = int(line[2]) if NumberOfContextID != 0: if (3 < length) and (line[3] != ''): RRREContextID = int(line[3]) RRREContextIdValue = RRREContextID if RRREContextID in dictionary: RRREInfo = dictionary[RRREContextID] else: RRREInfo = RadioResourceInfo() dictionary[RRREContextID] = RRREInfo RRREInfo = dictionary[RRREContextID] logObj.event = "Radio Resource Connection Re-Establishment" RRREInfo.ConnectionEnd = line[1] dictionary[RRREContextID] = RRREInfo logObj.msgType = "Re-Establishment" dataOfRRRE = "RRRE Context ID: " + str(RRREContextID) if ((3 + NumberOfContextID) < length) and (line[3 + NumberOfContextID] != ''): measureSystem = MeasureSysConverter( int(line[3 + NumberOfContextID])) cause = "Unknown" if measureSystem == 'LTE FDD' or measureSystem == 'LTE TDD': if ((4 + NumberOfContextID) < length) and (line[4 + NumberOfContextID] != ''): cause = line[4 + NumberOfContextID] if cause == '1': dataOfRRRE += ";Re-Establishment Status: Succeeded; " elif cause == '2': dataOfRRRE += ";Re-Establishment Status: Failed; " elif cause == '3': dataOfRRRE += ";Re-Establishment Status: Rejected; " if ((5 + NumberOfContextID) < length) and (line[5 + NumberOfContextID] != ''): cause = line[5 + NumberOfContextID] if cause == '0': dataOfRRRE += ";Re-Establishment Cause: Reconfiguration failure" elif cause == '1': dataOfRRRE += ";Re-Establishment Cause: Handover failure; " elif cause == '2': dataOfRRRE += ";Re-Establishment Cause: Other Failure; " logObj.eventInfo = dataOfRRRE logObj.modeSystem = measureSystem return 1
def ParseAMRI(line, logObj): length = len(line) if 2 < length: NumberOfContextID = 0 if line[2] != '': NumberOfContextID = int(line[2]) logObj.event = "AMR Information" logObj.msgType = '' logObj.time = line[1] chi = 0 if ((3 + NumberOfContextID) < length) and (line[3 + NumberOfContextID] != ''): logObj.modeSystem = MeasureSysConverter( int(line[3 + NumberOfContextID])) if logObj.modeSystem == 'GSM': if ((4 + NumberOfContextID) < length) and (line[4 + NumberOfContextID] != ''): logObj.AMRInitMode = line[4 + NumberOfContextID] if ((5 + NumberOfContextID) < length) and (line[5 + NumberOfContextID] != ''): chi = int(line[5 + NumberOfContextID]) if chi == 0: logObj.AMRICMI = "Implicit rule" elif chi == 1: logObj.AMRICMI = "RATSCCH/L3" if ((6 + NumberOfContextID) < length) and (line[6 + NumberOfContextID] != ''): logObj.AMRTH1 = float(line[6 + NumberOfContextID]) if ((7 + NumberOfContextID) < length) and (line[7 + NumberOfContextID] != ''): logObj.AMRHYS1 = float(line[7 + NumberOfContextID]) if ((8 + NumberOfContextID) < length) and (line[8 + NumberOfContextID] != ''): logObj.AMRTH2 = float(line[8 + NumberOfContextID]) if ((9 + NumberOfContextID) < length) and (line[9 + NumberOfContextID] != ''): logObj.AMRHYS2 = float(line[9 + NumberOfContextID]) if ((10 + NumberOfContextID) < length) and (line[10 + NumberOfContextID] != ''): logObj.AMRTH3 = float(line[10 + NumberOfContextID]) if ((11 + NumberOfContextID) < length) and (line[11 + NumberOfContextID] != ''): logObj.AMRHYS3 = float(line[11 + NumberOfContextID]) if ((12 + NumberOfContextID) < length) and (line[12 + NumberOfContextID] != ''): logObj.ActiveAMRCodecCount = int(line[12 + NumberOfContextID]) if ((13 + NumberOfContextID) < length) and (line[13 + NumberOfContextID] != ''): logObj.AMRCodec = line[13 + NumberOfContextID] return 1 else: return 0
def ParseGAF(line, logObj, dictionary): length = len(line) if 2 < length: contextID = 0 dataOfGAF = '' if line[2] != '': NumberOfContextID = int(line[2]) if NumberOfContextID != 0: if (3 < length) and (line[3] != '') and NumberOfContextID == 1: contextID = int(line[3]) if contextID in dictionary: attachment = dictionary[contextID] else: attachment = AttachmentEventInfo() dictionary[contextID] = attachment attachment = dictionary[contextID] attachment.Failure = line[1] logObj.event = "Attach Failed" logObj.MessageType = "Failure" dataOfGAF += "Attach Context ID: " + str(contextID) measureSystem = MeasureSysConverter(int(line[3 + NumberOfContextID])) failState = 'Unknown' if ((4 + NumberOfContextID) < length) and (line[4 + NumberOfContextID] != ''): failCheck = int(line[4 + NumberOfContextID]) if failCheck == 1: failState = 'User abort' elif failCheck == 2: failState = 'Network reject' elif failCheck == 3: failState = 'Mobile reject' elif failCheck == 4: failState = 'Timeout' elif failCheck == 5: failState = 'PPP error' elif failCheck == 6: failState = 'Test system failure' dataOfGAF += ";Failure status: " + failState disconnectionCause = "Unknown" if ((5 + NumberOfContextID) < length) and (line[5 + NumberOfContextID] != ''): disconnectionCause = parseGADDisconnectionCause( int(line[5 + NumberOfContextID])) dataOfGAF += ";Disconnection Cause: " + disconnectionCause logObj.eventInfo = dataOfGAF logObj.modeSystem = measureSystem return 1
def ParseRRC(line, logObj, dictionary): length = len(line) if 2 < length: dataOfRRC = '' rrcContextID = 0 NumberOfContextID = 0 if line[2] != '': NumberOfContextID = int(line[2]) if NumberOfContextID != 0: if (3 < length) and (line[3] != ''): rrcContextID = int(line[3]) RRCContextIdValue = rrcContextID if rrcContextID in dictionary: RRCInfo = dictionary[rrcContextID] else: RRCInfo = RadioResourceInfo() dictionary[rrcContextID] = RRCInfo RRCInfo = dictionary[rrcContextID] logObj.event = "Radio Resource Connection Success" RRCInfo.ConnectionSetup = line[1] dictionary[rrcContextID] = RRCInfo logObj.msgType = "Success" dataOfRRC = "RRC Context ID: " + str(rrcContextID) if RRCInfo.ConnectionSetup != '' and RRCInfo.ConnectionAttempt != '': tdelta = datetime.strptime( RRCInfo.ConnectionSetup.split('.', 1)[0], '%H:%M:%S') - datetime.strptime( RRCInfo.ConnectionAttempt.split('.', 1)[0], '%H:%M:%S') setupTime = float(tdelta.seconds) * 1000 #MilliSeconds dataOfRRC += ";Setup Time: " + str(setupTime) if ((3 + NumberOfContextID) < length) and (line[3 + NumberOfContextID] != ''): measureSystem = MeasureSysConverter( int(line[3 + NumberOfContextID])) cause = "Unknown" if measureSystem == 'UMTS FDD' or measureSystem == 'UMTS TDSCDMA': if ((4 + NumberOfContextID) < length) and (line[4 + NumberOfContextID] != ''): cause = line[4 + NumberOfContextID] dataOfRRC += ';RRC Requests before connection: ' + cause logObj.eventInfo = dataOfRRC logObj.modeSystem = measureSystem return 1
def ParsePBD(line, logObj, dictionary): length = len(line) if 2 < length: dataOfPBD = '' PBDContextID = 0 NumberOfContextID = 0 if line[2] != '': NumberOfContextID = int(line[2]) if NumberOfContextID != 0: if (3 < length) and (line[3] != ''): PBDContextID = int(line[3]) if PBDContextID in dictionary: packet = dictionary[PBDContextID] else: packet = PacketBearerInfo() dictionary[PBDContextID] = packet packet = dictionary[PBDContextID] packet.ConnectionEnd = line[1] logObj.event = 'Packet Bearer Release' logObj.msgType = 'Release' dataOfPBD = "PB Context ID: " + str(PBDContextID) if packet.ConnectionEnd != '' and packet.ConnectionSetup != '': tdelta = datetime.strptime( packet.ConnectionEnd.split('.', 1)[0], '%H:%M:%S') - datetime.strptime( packet.ConnectionSetup.split('.', 1)[0], '%H:%M:%S') Time = float(tdelta.seconds) * 1000 #MilliSeconds dataOfPBD += ";PB Connection Failure duration: " + str(Time) if ((3 + NumberOfContextID) < length) and (line[3 + NumberOfContextID] != ''): measureSystem = MeasureSysConverter( int(line[3 + NumberOfContextID])) esmCause = 'Unknown' if measureSystem == 'LTE FDD' or measureSystem == 'LTE TDD': if ((4 + NumberOfContextID) < length) and (line[4 + NumberOfContextID] != ''): esmCause = line[4 + NumberOfContextID] esmCause = parsePBSEsmCause(int(esmCause)) dataOfPBD += ";ESM Cause: " + esmCause logObj.modeSystem = measureSystem logObj.eventInfo = dataOfPBD return 1
def ParseRXPC (line, logObj): length = len(line) if 2 < length: NumberOfContextID = 0 if line[2] != '': NumberOfContextID = int(line[2]) logObj.event = "RX power control" logObj.msgType = ' ' logObj.time = line[1] measureSystems='' bsDivState = 0 dpcMode = 0 if ((3 + NumberOfContextID) < length) and (line[3+NumberOfContextID] != '') : measureSystems = int(line[3 + NumberOfContextID]) logObj.modeSystem = MeasureSysConverter(measureSystems) if logObj.modeSystem == 'UMTS FDD': if ((4 + NumberOfContextID) < length) and (line[4+NumberOfContextID] != '') : logObj.SIRTarget = float(line[4+NumberOfContextID]) #add if ((5 + NumberOfContextID) < length) and (line[5+NumberOfContextID] != '') : logObj.SIR = float(line[5+NumberOfContextID]) #add if ((6 + NumberOfContextID) < length) and (line[6+NumberOfContextID] != '') : bsDivState = int(line[6+NumberOfContextID]) #add if bsDivState == 0: lobObj.BSDivState = "Not active"#add elif bsDivState == 1: lobObj.BSDivState = "Closed loop mode 1"#add elif bsDivState == 2: lobObj.BSDivState = "Closed loop mode 2"#add if ((7 + NumberOfContextID) < length) and (line[7+NumberOfContextID] != '') : logObj.DLPwrUpsNum = int(line[7+NumberOfContextID]) #add if ((8 + NumberOfContextID) < length) and (line[8+NumberOfContextID] != '') : logObj.DLPwrDownsNum = int(line[8+NumberOfContextID]) #add if ((9 + NumberOfContextID) < length) and (line[9+NumberOfContextID] != '') : logObj.DLPwrUpPercent = float(line[9+NumberOfContextID]) #add if ((10 + NumberOfContextID) < length) and (line[10+NumberOfContextID] != '') : dpcMode = int(line[10+NumberOfContextID]) #add if dpcMode == 0: lobObj.DpcMode = "Unique TPC command in each slot"#add else: lobObj.DpcMode = "Same TPC command repeated over three slots"#add return 1 else: return 0
def ParseSEI(line, logObj): dataOfSEI = "" length = len(line) if 2 < length: NumberOfContextID = 0 if line[2] != '': NumberOfContextID = int(line[2]) SEIType = 0 mmCause = 0 logObj.event = "Service Information" logObj.msgType = '' logObj.time = line[1] if ((3 + NumberOfContextID) < length) and (line[3 + NumberOfContextID] != ''): logObj.modeSystem = MeasureSysConverter( int(line[3 + NumberOfContextID])) if ((4 + NumberOfContextID) < length) and (line[4 + NumberOfContextID] != ''): SEIType = int(line[4 + NumberOfContextID]) #add if SEIType == 1: dataOfSEI = 'Service received' elif SEIType == 2: dataOfSEI = 'Service dropped' if logObj.modeSystem == 'GSM' or logObj.modeSystem == 'UMTS FDD' or logObj.modeSystem == 'UMTS TD-SCDMA' or logObj.modeSystem == 'LTE FDD' or logObj.modeSystem == 'LTE TDD': if ((5 + NumberOfContextID) < length) and (line[5 + NumberOfContextID] != ''): logObj.LAC = int(line[5 + NumberOfContextID]) #add if ((6 + NumberOfContextID) < length) and (line[6 + NumberOfContextID] != ''): logObj.mcc = line[6 + NumberOfContextID] #add if ((7 + NumberOfContextID) < length) and (line[7 + NumberOfContextID] != ''): logObj.mnc = int(line[7 + NumberOfContextID]) #add if ((8 + NumberOfContextID) < length) and (line[8 + NumberOfContextID] != ''): logObj.TMSI = line[8 + NumberOfContextID] #add logObj.eventInfo = dataOfSEI return 1 else: dataOfSEI = "No of context id not found" return 0
def ParseVCHI(line, logObj): dataOfVCHI = "" callContextIDCount = 0 logObj.event = "Voice Channel Information" if line[2] != '': callContextIDCount = line[2] if callContextIDCount == 1 and line[3] != '': callContextID = line[3] dataOfVCHI += "Call Context ID: " + callContextID if ((3 + callContextIDCount) < length) and (line[3 + callContextIDCount] != ''): logObj.modeSystem = MeasureSysConverter( int(line[3 + callContextIDCount])) dataOfVCHI += ";Measured System: " + logObj.modeSystem
def ParseRLCBLER(line, logObj): length = len(line) if 2 < length: contextID = 0 NumberOfContextID = 0 if line[2] != '': NumberOfContextID = int(line[2]) if NumberOfContextID != 0: if (3 < length) and (line[3] != ''): contextID = int(line[3]) if ((3 + NumberOfContextID) < length) and (line[3 + NumberOfContextID] != ''): logObj.modeSystem = MeasureSysConverter( int(line[3 + NumberOfContextID])) if ((4 + NumberOfContextID) < length) and (line[4 + NumberOfContextID] != ''): logObj.BLER = float(line[4 + NumberOfContextID]) return 1
def ParseTXPC (line, logObj): length = len(line) if 2 < length: NumberOfContextID = 0 if line[2] != '': NumberOfContextID = int(line[2]) logObj.event = "TX power control" logObj.msgType = ' ' logObj.time = line[1] measureSystems='' if ((3 + NumberOfContextID) < length) and (line[3+NumberOfContextID] != '') : measureSystems = int(line[3 + NumberOfContextID]) logObj.modeSystem = MeasureSysConverter(measureSystems) if logObj.modeSystem == 'GSM': if ((4 + NumberOfContextID) < length) and (line[4+NumberOfContextID] != '') : logObj.TXPower = float(line[4+NumberOfContextID]) #add if ((5 + NumberOfContextID) < length) and (line[5+NumberOfContextID] != '') : if int((line[5+NumberOfContextID])) == 0: lobObj.TXPwrCtrlAlgo = "Power control algorithm 0"#add else: lobObj.TXPwrCtrlAlgo = "Power control algorithm 1"#add if ((6 + NumberOfContextID) < length) and (line[6+NumberOfContextID] != '') : logObj.TXPwrCtrlStep = float(line[6+NumberOfContextID]) #add if ((7 + NumberOfContextID) < length) and (line[7+NumberOfContextID] != '') : if int((line[7+NumberOfContextID])) == 0: lobObj.CompressMode = "No Compressed mode"#add else: lobObj.CompressMode = "Compressed mode"#add if ((8 + NumberOfContextID) < length) and (line[8+NumberOfContextID] != '') : logObj.ULPwrUpsNum = int(line[8+NumberOfContextID]) #add if ((9 + NumberOfContextID) < length) and (line[9+NumberOfContextID] != '') : logObj.ULPwrDownsNum = int(line[9+NumberOfContextID]) #add if ((10 + NumberOfContextID) < length) and (line[10+NumberOfContextID] != '') : logObj.ULPwrUpPercent = float(line[10+NumberOfContextID]) #add elif logObj.modeSystem == 'LTE FDD' or logObj.modeSystem == 'LTE TDD': if ((4 + NumberOfContextID) < length) and (line[4+NumberOfContextID] != '') : logObj.PUSCHTXPower = float(line[4+NumberOfContextID]) #add return 1 else: return 0
def ParsePBA (line, logObj,dictionary): length = len(line) if 2 < length: dataOfPBA = '' PBAContextID = 0 NumberOfContextID = 0 if line[2] != '': NumberOfContextID = int(line[2]) if NumberOfContextID != 0: if(3 < length) and (line[3] != '') : PBAContextID = int(line[3]) if PBAContextID in dictionary: packet = dictionary[PBAContextID] else: packet = PacketBearerInfo() dictionary[PBAContextID] = packet packet = dictionary[PBAContextID] packet.ConnectionAttempt = line[1] logObj.event = 'Packet Bearer Allocation Attempt' logObj.msgType = 'Attempt' dataOfPBA = "PB Context ID: " + str(PBAContextID) if((3 + NumberOfContextID) < length) and (line[3 + NumberOfContextID] != '') : measureSystem = MeasureSysConverter (int(line[3 + NumberOfContextID])) pbType = 'Unknown' if measureSystem == 'LTE FDD' or measureSystem == 'LTE TDD': if((4 + NumberOfContextID) < length) and (line[4 + NumberOfContextID] != '') : pbType = int(line[4 + NumberOfContextID]) if pbType == 1: pbType = "Default" elif pbType == 2: pbType = "Dedicated" dataOfPBA += ";PB Type: "+pbType logObj.modeSystem = measureSystem logObj.eventInfo = dataOfPBA return 1
def ParseGAC(line, logObj, dictionary): length = len(line) if 2 < length: contextID = 0 dataOfGAC = '' if line[2] != '': NumberOfContextID = int(line[2]) if NumberOfContextID != 0: if (3 < length) and (line[3] != '') and NumberOfContextID == 1: contextID = int(line[3]) if contextID in dictionary: attachment = dictionary[contextID] else: attachment = AttachmentEventInfo() dictionary[contextID] = attachment attachment = dictionary[contextID] setupTime = 0 attachment.Established = line[1] if attachment.Setup != '' and attachment.Established != '': tdelta = datetime.strptime( attachment.Setup.split('.', 1)[0], '%H:%M:%S') - datetime.strptime( attachment.Established.split('.', 1)[0], '%H:%M:%S') setupTime = float(tdelta.seconds) * 1000 #MilliSeconds logObj.event = "Attach Conneted" logObj.msgType = "Connect" dataOfGAC += "Attach Context ID: " + str(contextID) measureSystem = MeasureSysConverter(int(line[3 + NumberOfContextID])) dataOfGAC += ";Measured System: " + measureSystem if setupTime > 0: dataOfGAC += ";Setup time: " + setupTime + "ms" logObj.eventInfo = dataOfGAC logObj.modeSystem = measureSystem return 1
def ParseTAD (line, logObj): length = len(line) if 2 < length: NumberOfContextID = 0 if line[2] != '': NumberOfContextID = int(line[2]) logObj.event = "Timing Advance" logObj.msgType = ' ' logObj.time = line[1] measureSystems='' if ((3 + NumberOfContextID) < length) and (line[3+NumberOfContextID] != '') : measureSystems = int(line[3 + NumberOfContextID]) logObj.modeSystem = MeasureSysConverter(measureSystems) if logObj.modeSystem == 'GSM' or logObj.modeSystem == 'UMTS TD-SCDMA' or logObj.modeSystem == 'LTE FDD' or logObj.modeSystem == 'LTE TDD': if ((4 + NumberOfContextID) < length) and (line[4+NumberOfContextID] != '') : logObj.TA = int(line[4+NumberOfContextID]) #add return 1 else: return 0
def ParseFER(line, logObj): length = len(line) if 2 < length: NumberOfContextID = 0 if line[2] != '': NumberOfContextID = int(line[2]) logObj.event = "Frame Error Rate" logObj.msgType = ' ' logObj.time = line[1] measureSystems = '' if ((3 + NumberOfContextID) < length) and (line[3 + NumberOfContextID] != ''): measureSystems = int(line[3 + NumberOfContextID]) logObj.modeSystem = MeasureSysConverter(measureSystems) if logObj.modeSystem == 'GSM': if ((4 + NumberOfContextID) < length) and (line[4 + NumberOfContextID] != ''): logObj.FERFull = float(line[4 + NumberOfContextID]) #add if ((5 + NumberOfContextID) < length) and (line[5 + NumberOfContextID] != ''): logObj.FERSub = float(line[5 + NumberOfContextID]) #add if ((6 + NumberOfContextID) < length) and (line[6 + NumberOfContextID] != ''): logObj.FERTCH = float(line[6 + NumberOfContextID]) #add if ((7 + NumberOfContextID) < length) and (line[7 + NumberOfContextID] != ''): logObj.DTXDL = int(line[7 + NumberOfContextID]) #add elif logObj.modeSystem == 'UMTS FDD': if ((4 + NumberOfContextID) < length) and (line[4 + NumberOfContextID] != ''): logObj.FER = float(line[4 + NumberOfContextID]) #add return 1 else: return 0
def ParseLLCRATE(line, logObj): length = len(line) if 2 < length: contextID = 0 if line[2] != '': NumberOfContextID = int(line[2]) if NumberOfContextID != 0: if (3 < length) and (line[3] != ''): contextID = int(line[3]) if ((3 + NumberOfContextID) < length) and (line[3 + NumberOfContextID] != ''): logObj.modeSystem = MeasureSysConverter(line[3 + NumberOfContextID]) if logObj.modeSystem == 'GSM': if ((4 + NumberOfContextID) < length) and (line[4 + NumberOfContextID] != ''): logObj.LLCRateUL = int(line[4 + NumberOfContextID]) if ((5 + NumberOfContextID) < length) and (line[5 + NumberOfContextID] != ''): logObj.LLCRateDL = int(line[5 + NumberOfContextID]) return 1
def ParseRXQ (line, logObj): length = len(line) if 2 < length: NumberOfContextID = 0 if line[2] != '': NumberOfContextID = int(line[2]) logObj.event = "RX Quality" logObj.msgType = ' ' logObj.time = line[1] measureSystems='' if ((3 + NumberOfContextID) < length) and (line[3+NumberOfContextID] != '') : measureSystems = int(line[3 + NumberOfContextID]) logObj.modeSystem = MeasureSysConverter(measureSystems) if logObj.modeSystem == 'GSM': if ((4 + NumberOfContextID) < length) and (line[4+NumberOfContextID] != '') : logObj.rxQualityFull = float(line[4+NumberOfContextID]) #add if ((5 + NumberOfContextID) < length) and (line[5+NumberOfContextID] != '') : logObj.rxQualitySub = float(line[5+NumberOfContextID]) #add return 1 else: return 0
def ParseRRF(line, logObj, dictionary): length = len(line) if 2 < length: dataOfRRF = '' RRFContextID = 0 NumberOfContextID = 0 if line[2] != '': NumberOfContextID = int(line[2]) if NumberOfContextID != 0: if (3 < length) and (line[3] != ''): RRFContextID = int(line[3]) RRFContextIdValue = RRFContextID if RRFContextID in dictionary: RRFInfo = dictionary[RRFContextID] else: RRFInfo = RadioResourceInfo() dictionary[RRFContextID] = RRFInfo RRFInfo = dictionary[RRFContextID] logObj.event = "Radio Resource Connection Failure" RRFInfo.ConnectionFailure = line[1] dictionary[RRFContextID] = RRFInfo logObj.msgType = "Failure" dataOfRRF = "RRF Context ID: " + str(RRFContextID) if RRFInfo.ConnectionFailure != '' and RRFInfo.ConnectionAttempt != '': tdelta = datetime.strptime( RRFInfo.ConnectionFailure.split('.', 1)[0], '%H:%M:%S') - datetime.strptime( RRFInfo.ConnectionAttempt.split('.', 1)[0], '%H:%M:%S') setupTime = float(tdelta.seconds) * 1000 #MilliSeconds dataOfRRF += ";Failure Time: " + str(setupTime) if ((3 + NumberOfContextID) < length) and (line[3 + NumberOfContextID] != ''): measureSystem = MeasureSysConverter(line[3 + NumberOfContextID]) cause = "Unknown" if measureSystem == 'UMTS FDD' or measureSystem == 'UMTS TDSCDMA': if ((4 + NumberOfContextID) < length) and (line[4 + NumberOfContextID] != ''): dataOfRRF += "RRC Requests before connection: " + line[ 4 + NumberOfContextID] if ((5 + NumberOfContextID) < length) and (line[5 + NumberOfContextID] != ''): cause = line[5 + NumberOfContextID] if cause == '1': dataOfRRF += "Rejection Status: Network Reject" if ((6 + NumberOfContextID) < length) and (line[6 + NumberOfContextID] != ''): cause = line[6 + NumberOfContextID] if cause == '1': dataOfRRF += "Rejection Cause: Congestion" elif cause == '2': dataOfRRF += "Rejection Cause: Unspecified" elif measureSystem == 'LTE FDD' or measureSystem == 'LTE TDD': if ((4 + NumberOfContextID) < length) and (line[4 + NumberOfContextID] != ''): cause = line[4 + NumberOfContextID] if cause == '1': dataOfRRF += "Rejection Status: Network Reject" dataOfRRF += ';RRF Requests before connection: ' + cause logObj.eventInfo = dataOfRRF logObj.modeSystem = measureSystem return 1
def ParsePILOTSCAN(line, listOfLogObj, PREVIOUS_LAT, PREVIOUS_LONG, PREVIOUS_MCC, PREVIOUS_MNC): length = len(line) if 2 < length: NumberOfContextID = 0 if line[2] != '': NumberOfContextID = int(line[2]) logObj = LogDT() logObj.lat = PREVIOUS_LAT logObj.longg = PREVIOUS_LONG logObj.mcc = PREVIOUS_MCC logObj.mnc = PREVIOUS_MNC logObj.event = "Pilot Scanning results" logObj.msgType = '' logObj.time = line[1] numberOfHeaderParameters = 0 channelType = -1 numberOfCells = 0 parameterPerCell = 0 if ((3 + NumberOfContextID) < length) and (line[3 + NumberOfContextID] != ''): logObj.modeSystem = MeasureSysConverter( int(line[3 + NumberOfContextID])) if logObj.modeSystem == "UMTS FDD": if ((4 + NumberOfContextID) < length) and (line[4 + NumberOfContextID] != ''): numberOfHeaderParameters = int(line[4 + NumberOfContextID]) if numberOfHeaderParameters > 0: if ((5 + NumberOfContextID) < length) and (line[5 + NumberOfContextID] != ''): logObj.ChannelNum = int(line[5 + NumberOfContextID]) #add if numberOfHeaderParameters > 1: if ((6 + NumberOfContextID) < length) and (line[6 + NumberOfContextID] != ''): channelType = int(line[6 + NumberOfContextID]) #add if channelType == 1: logObj.channelType = 'CPICH' elif channelType == 2: logObj.channelType = 'P SCH' elif channelType == 3: logObj.channelType = 'S SCH' elif channelType == 4: logObj.channelType = 'CPICH (TX diversity)' elif channelType == 5: logObj.channelType = 'PPCH' if numberOfHeaderParameters > 2: if ((7 + NumberOfContextID) < length) and (line[7 + NumberOfContextID] != ''): logObj.RSSI = float(line[7 + NumberOfContextID]) #add if numberOfHeaderParameters > 3: if ((8 + NumberOfContextID) < length) and (line[8 + NumberOfContextID] != ''): logObj.Band = parseCellMeasuresParseBand( int(line[8 + NumberOfContextID])) #add if ((5 + NumberOfContextID + numberOfHeaderParameters) < length) and (line[5 + NumberOfContextID + numberOfHeaderParameters] != ''): numberOfCells = int(line[5 + NumberOfContextID + numberOfHeaderParameters]) if ((6 + NumberOfContextID + numberOfHeaderParameters) < length) and (line[6 + NumberOfContextID + numberOfHeaderParameters] != ''): parameterPerCell = int(line[6 + NumberOfContextID + numberOfHeaderParameters]) if numberOfCells == 0: listOfLogObj.append(logObj) for i in range(0, numberOfCells): currentObj = LogDT() currentObj = copy.deepcopy(logObj) if ( (7 + NumberOfContextID + numberOfHeaderParameters + (i * parameterPerCell) + 0) < length ) and (line[7 + NumberOfContextID + numberOfHeaderParameters + (i * parameterPerCell) + 0] != ''): currentObj.scramblingCode = float( line[7 + NumberOfContextID + numberOfHeaderParameters + (i * parameterPerCell) + 0]) if ( (7 + NumberOfContextID + numberOfHeaderParameters + (i * parameterPerCell) + 1) < length ) and (line[7 + NumberOfContextID + numberOfHeaderParameters + (i * parameterPerCell) + 1] != ''): currentObj.ServingCPICHEcNo = float( line[7 + NumberOfContextID + numberOfHeaderParameters + (i * parameterPerCell) + 1]) if ( (7 + NumberOfContextID + numberOfHeaderParameters + (i * parameterPerCell) + 2) < length ) and (line[7 + NumberOfContextID + numberOfHeaderParameters + (i * parameterPerCell) + 2] != ''): currentObj.ServingCPICHRSCP = float( line[7 + NumberOfContextID + numberOfHeaderParameters + (i * parameterPerCell) + 2]) if ( (7 + NumberOfContextID + numberOfHeaderParameters + (i * parameterPerCell) + 3) < length ) and (line[7 + NumberOfContextID + numberOfHeaderParameters + (i * parameterPerCell) + 3] != ''): currentObj.SIR = float( line[7 + NumberOfContextID + numberOfHeaderParameters + (i * parameterPerCell) + 3]) listOfLogObj.append(currentObj) return 1 else: return 0