def load_event(args): """ Load one event from a HepMC file """ filename, _, event_number = args.filename.partition(":") if event_number: try: event_number = int(event_number) except ValueError: log.fatal("Failed to convert filename part to an integer. Filename " "should have the form 'string[:int(event number)]'") raise FatalError() else: event_number = 0 with open(filename) as fd: data = try_decompress(fd.read()) match = HEPMC_TEXT.search(data) if not match: raise EventParseError("Not obviously hepmc data.") result = match.groupdict() #version = tuple(map(int, result.get("version", "0").split("."))) #if version != (2, 06, 01): #log.warning("Warning: Only tested with hepmc 2.06.01") lines = result["events"].split("\n") for i, event in izip(xrange(event_number+1), event_generator(lines)): # Load only one event pass return load_single_event(event, args)
def load_event(args): """ Load one event from a HepMC file """ filename, _, event_number = args.filename.partition(":") if event_number: try: event_number = int(event_number) except ValueError: log.fatal( "Failed to convert filename part to an integer. Filename " "should have the form 'string[:int(event number)]'") raise FatalError() else: event_number = 0 with open(filename) as fd: data = try_decompress(fd.read()) match = HEPMC_TEXT.search(data) if not match: raise EventParseError("Not obviously hepmc data.") result = match.groupdict() #version = tuple(map(int, result.get("version", "0").split("."))) #if version != (2, 06, 01): #log.warning("Warning: Only tested with hepmc 2.06.01") lines = result["events"].split("\n") for i, event in izip(xrange(event_number + 1), event_generator(lines)): # Load only one event pass return load_single_event(event, args)
def load_event(args): """ Parse a pythia event record from a log file. Numbers are converted to floats where possible. """ filename, _, event_number = args.filename.partition(":") if event_number: try: event_number = int(event_number) except ValueError: log.fatal( "Failed to convert filename part to an integer. Filename " "should have the form 'string[:int(event number)]'") raise FatalError() else: event_number = 0 with open(filename) as fd: lines = try_decompress(fd.read()).split("\n") lines = [line for line in (line.strip() for line in lines) if line] header = None if START_COMPLETE in lines: header = START_COMPLETE elif START_COMBINED in lines: header = START_COMBINED elif START_HARD in lines: header = START_HARD else: raise EventParseError("Failed to read pythia log file: " "no complete event listing found") first = 0 for i in range(event_number + 1): first = lines.index(header, first) + 2 last = first + lines[first:].index(END_LIST) - 1 def maybe_num(s): try: return float(s) except ValueError: return s records = [map(maybe_num, line.split()) for line in lines[first:last]] # insert blank name if name is not specified for particle in records: if len(particle) == 14: particle.insert(2, "") return make_pythia_graph(records)
def load_event(args): """ Parse a pythia event record from a log file. Numbers are converted to floats where possible. """ filename, _, event_number = args.filename.partition(":") if event_number: try: event_number = int(event_number) except ValueError: log.fatal("Failed to convert filename part to an integer. Filename " "should have the form 'string[:int(event number)]'") raise FatalError() else: event_number = 0 with open(filename) as fd: lines = try_decompress(fd.read()).split("\n") lines = [line for line in (line.strip() for line in lines) if line] header = None if START_COMPLETE in lines: header = START_COMPLETE elif START_COMBINED in lines: header = START_COMBINED elif START_HARD in lines: header = START_HARD else: raise EventParseError("Failed to read pythia log file: " "no complete event listing found") first = 0 for i in range(event_number+1): first = lines.index(header, first) + 2 last = first + lines[first:].index(END_LIST) - 1 def maybe_num(s): try: return float(s) except ValueError: return s records = [map(maybe_num, line.split()) for line in lines[first:last]] # insert blank name if name is not specified for particle in records: if len(particle) == 14: particle.insert(2,"") return make_pythia_graph(records)
def load_event(args): """ Load one event from a LHE file """ filename, _, event_number = args.filename.partition(":") if event_number: try: event_number = int(event_number) except ValueError: log.fatal( "Failed to convert filename part to an integer. Filename " "should have the form 'string[:int(event number)]'") raise FatalError() else: event_number = 0 with open(filename) as fd: data = try_decompress(fd.read()) match = LHE_TEXT.search(data) if not match: raise EventParseError("Failed to parse LHE data") result = match.groupdict() # Init block has the following format: LINIT = namedtuple( 'LINIT', 'IDBMUP1, IDBMUP2, EBMUP1, EBMUP2, PDFGUP1, PDFGUP2, PDFSUP1, PDFSUP2, IDWTUP, NPRUP' ) init = result['init'].splitlines()[0].split() init = [int(i) for i in init[:2]] + [float(i) for i in init[2:4] ] + [int(i) for i in init[4:10]] init = LINIT._make(init) # Followed by NPRUP lines of processes log.verbose("LHE init block:") for line in result['init'].splitlines(): log.verbose(line.strip()) for i, event in izip(xrange(event_number + 1), event_generator(result['events'])): # Load only one event pass return make_lhe_graph(event.splitlines(), init, args)
def load_event(args): """ Load one event from a LHE file """ filename, _, event_number = args.filename.partition(":") if event_number: try: event_number = int(event_number) except ValueError: log.fatal("Failed to convert filename part to an integer. Filename " "should have the form 'string[:int(event number)]'") raise FatalError() else: event_number = 0 with open(filename) as fd: data = try_decompress(fd.read()) match = LHE_TEXT.search(data) if not match: raise EventParseError("Failed to parse LHE data") result = match.groupdict() # Init block has the following format: LINIT = namedtuple('LINIT', 'IDBMUP1, IDBMUP2, EBMUP1, EBMUP2, PDFGUP1, PDFGUP2, PDFSUP1, PDFSUP2, IDWTUP, NPRUP') init = result['init'].splitlines()[0].split() init = [int(i) for i in init[:2] ] + [float(i) for i in init[2:4] ] + [int(i) for i in init[4:10] ] init = LINIT._make(init) # Followed by NPRUP lines of processes log.verbose("LHE init block:") for line in result['init'].splitlines(): log.verbose(line.strip()) for i, event in izip(xrange(event_number+1), event_generator(result['events']) ): # Load only one event pass return make_lhe_graph(event.splitlines(), init, args)