File indexing completed on 2024-09-26 05:05:37
0001
0002
0003
0004
0005
0006 import gzip
0007 import logging
0008 import re
0009
0010 import Alignment.MillePedeAlignmentAlgorithm.mpsvalidate.classes as mpsv_classes
0011
0012
0013 def parse(path, config):
0014 logger = logging.getLogger("mpsvalidate")
0015
0016
0017
0018 pedeDump = mpsv_classes.PedeDumpData()
0019
0020
0021 warningBool = False
0022
0023
0024 try:
0025 with gzip.open(path) as gzipFile:
0026 dumpFile = [ l.decode() for l in gzipFile.readlines() ]
0027 except IOError:
0028 logger.error("PedeDump: {0} does not exist".format(path))
0029 return
0030
0031 for i, line in enumerate(dumpFile):
0032
0033 if ("Sum(Chi^2)/Sum(Ndf) =" in line):
0034 number = []
0035 number.append(list(map(float, re.findall(
0036 r"[-+]?\d*\.\d+", dumpFile[i]))))
0037 number.append(list(map(int, re.findall(r"[-+]?\d+", dumpFile[i + 1]))))
0038 number.append(list(map(float, re.findall(
0039 r"[-+]?\d*\.\d+", dumpFile[i + 2]))))
0040 pedeDump.sumSteps = "{0} / ( {1} - {2} )".format(
0041 number[0][0], number[1][0], number[1][1])
0042 pedeDump.sumValue = number[2][0]
0043
0044
0045 if ("Sum(W*Chi^2)/Sum(Ndf)/<W> =" in line):
0046 number = []
0047 number.append(list(map(float, re.findall(
0048 r"[-+]?\d*\.\d+", dumpFile[i]))))
0049 number.append(list(map(int, re.findall(r"[-+]?\d+", dumpFile[i + 1]))))
0050 number.append(list(map(float, re.findall(
0051 r"[-+]?\d*\.\d+", dumpFile[i + 2]))))
0052 number.append(list(map(float, re.findall(
0053 r"[-+]?\d*\.\d+", dumpFile[i + 3]))))
0054 pedeDump.sumSteps = "{0} / ( {1} - {2} ) / {3}".format(
0055 number[0][0], number[1][0], number[1][1], number[2][0])
0056 pedeDump.sumWValue = number[3][0]
0057
0058 if ("with correction for down-weighting" in line):
0059 number = list(map(float, re.findall(r"[-+]?\d*\.\d+", dumpFile[i])))
0060 pedeDump.correction = number[0]
0061
0062
0063 if ("Peak dynamic memory allocation:" in line):
0064 number = list(map(float, re.findall(r"[-+]?\d*\.\d+", dumpFile[i])))
0065 pedeDump.memory = number[0]
0066
0067
0068 if ("Iteration-end" in line):
0069 number = list(map(int, re.findall(r"\d+", dumpFile[i + 1])))
0070 pedeDump.time = number[:3]
0071
0072
0073 if ("WarningWarningWarningWarning" in line and warningBool == False):
0074 warningBool = True
0075 j = i + 8
0076 while ("Warning" not in dumpFile[j]):
0077 pedeDump.warning.append(dumpFile[j])
0078 j += 1
0079
0080
0081 if (" = number of records" in line):
0082 number = list(map(int, re.findall("\\d+", dumpFile[i])))
0083 pedeDump.nrec = number[0]
0084
0085
0086 if (" = total number of parameters" in line):
0087 number = list(map(int, re.findall("\\d+", dumpFile[i])))
0088 pedeDump.ntgb = number[0]
0089
0090
0091 if (" = number of variable parameters" in line):
0092 number = list(map(int, re.findall("\\d+", dumpFile[i])))
0093 pedeDump.nvgb = number[0]
0094
0095 return pedeDump