def analyse(self, filecnt): eventstart = filecnt*160 print "emulator", self.emufname emu_parser = OutputBufferParser(self.emufname, self.vhdcfg, self.emuversion) hw_parser = OutputBufferParser(self.hwfname, self.vhdcfg, self.hwversion) emuout = emu_parser.get_output_muons() print "HW", self.hwfname hwout = hw_parser.get_output_muons() self.event_ctr += len(emuout)/8 mucntr = 0 # running index muon_nonzero_ctr = 0 # counts how many non-zero for emu, hw in zip(emuout, hwout): event = mucntr/8+eventstart if (emu.bitword != 0): muon_nonzero_ctr += 1 if emu.bitword != hw.bitword: if not event in self.errors: self.errors.append(event) self.pt_errors[event] = 0 self.phi_errors[event] = 0 self.iso_errors[event] = 0 self.eta_errors[event] = 0 self.chrg_errors[event] = 0 self.qual_errors[event] = 0 if emu.ptBits != hw.ptBits: self.pt_errors[event] += 1 if emu.phiBits != hw.phiBits: self.phi_errors[event] += 1 if emu.etaBits != hw.etaBits: self.eta_errors[event] += 1 if emu.Iso != hw.Iso: self.iso_errors[event] += 1 if emu.Sysign != hw.Sysign: self.chrg_errors[event] += 1 if emu.qualityBits != hw.qualityBits: self.qual_errors[event] += 1 mucntr += 1 if mucntr%8 == 0: # for every event check self.mu_cntr += muon_nonzero_ctr if muon_nonzero_ctr > 1: self.event_nontrivial_cntr += 1 muon_nonzero_ctr = 0
def analyse(self, filecnt): eventstart = filecnt * 160 print "emulator", self.emufname emu_parser = OutputBufferParser(self.emufname, self.vhdcfg, self.emuversion) hw_parser = OutputBufferParser(self.hwfname, self.vhdcfg, self.hwversion) emuout = emu_parser.get_output_muons() print "HW", self.hwfname hwout = hw_parser.get_output_muons() self.event_ctr += len(emuout) / 8 mucntr = 0 # running index muon_nonzero_ctr = 0 # counts how many non-zero for emu, hw in zip(emuout, hwout): event = mucntr / 8 + eventstart if (emu.bitword != 0): muon_nonzero_ctr += 1 if emu.bitword != hw.bitword: if not event in self.errors: self.errors.append(event) self.pt_errors[event] = 0 self.phi_errors[event] = 0 self.iso_errors[event] = 0 self.eta_errors[event] = 0 self.chrg_errors[event] = 0 self.qual_errors[event] = 0 if emu.ptBits != hw.ptBits: self.pt_errors[event] += 1 if emu.phiBits != hw.phiBits: self.phi_errors[event] += 1 if emu.etaBits != hw.etaBits: self.eta_errors[event] += 1 if emu.Iso != hw.Iso: self.iso_errors[event] += 1 if emu.Sysign != hw.Sysign: self.chrg_errors[event] += 1 if emu.qualityBits != hw.qualityBits: self.qual_errors[event] += 1 mucntr += 1 if mucntr % 8 == 0: # for every event check self.mu_cntr += muon_nonzero_ctr if muon_nonzero_ctr > 1: self.event_nontrivial_cntr += 1 muon_nonzero_ctr = 0
return in_match_dict, imd_match_dict if __name__ == "__main__": vhdl_dict = VHDLConstantsParser.parse_vhdl_file("data/ugmt_constants.vhd") options = parse_options() file_dict = discover_files(options) for pattern, fnames in file_dict.iteritems(): version = Version.from_filename(fnames['rx']) print "+"*30, pattern, "+"*30 # Reading and processing the hardware data input_parser = InputBufferParser(fnames['rx'], vhdl_dict) output_parser = OutputBufferParser(fnames['tx'], vhdl_dict, version) in_muons = input_parser.get_input_muons() out_muons = output_parser.get_output_muons() imd_muons = output_parser.get_intermediate_muons() imd_ranks = output_parser.get_ranks() in_mu_non_zero = [ in_mu for in_mu in in_muons if in_mu.bitword != 0 ] out_mu_non_zero = [ out_mu for out_mu in out_muons if out_mu.bitword != 0 ] imd_mu_non_zero = [imd_mu for imd_mu in imd_muons if imd_mu.bitword != 0 ] imd_ranks_non_zero = [imd_rank for imd_rank in imd_ranks if imd_rank != 0] # get closest matches: in_matches, imd_matches = get_closest_matches(in_mu_non_zero, out_mu_non_zero, imd_mu_non_zero)
return in_match_dict, imd_match_dict if __name__ == "__main__": vhdl_dict = VHDLConstantsParser.parse_vhdl_file("data/ugmt_constants.vhd") options = parse_options() file_dict = discover_files(options) for pattern, fnames in file_dict.iteritems(): version = Version.from_filename(fnames['rx']) print "+" * 30, pattern, "+" * 30 # Reading and processing the hardware data input_parser = InputBufferParser(fnames['rx'], vhdl_dict) output_parser = OutputBufferParser(fnames['tx'], vhdl_dict, version) in_muons = input_parser.get_input_muons() out_muons = output_parser.get_output_muons() imd_muons = output_parser.get_intermediate_muons() imd_ranks = output_parser.get_ranks() in_mu_non_zero = [in_mu for in_mu in in_muons if in_mu.bitword != 0] out_mu_non_zero = [ out_mu for out_mu in out_muons if out_mu.bitword != 0 ] imd_mu_non_zero = [ imd_mu for imd_mu in imd_muons if imd_mu.bitword != 0 ] imd_ranks_non_zero = [ imd_rank for imd_rank in imd_ranks if imd_rank != 0
} phys_patterns = ["ZMM", "WM", "TTbar", "MinBias", "SingleMuPt100"] for pattern, fnames in file_dict.iteritems(): version = Version.from_filename(fnames['base']) _log.info("{patt:+^90}".format(patt=pattern)) emu_version = Version("99_99_99") # so workarounds are not applied for this # Reading and initilaising the Emulator data emu_out_list = [] emu_imd_list = [] # Reading and processing the hardware data _log.info("{info:>90}".format(info="EMU PARSING")) emu_output_parser = OutputBufferParser(fnames["emu_tx"], vhdl_dict, emu_version) emu_input_parser = InputBufferParser(fnames["emu_rx"], vhdl_dict) emu_out_list = emu_output_parser.get_output_muons() emu_imd_list = emu_output_parser.get_intermediate_muons() emu_in_list = emu_input_parser.get_input_muons() _log.info("{info:>90}".format(info="HW PARSING")) # Reading and processing the hardware data input_parser = InputBufferParser(fnames["rx"], vhdl_dict) output_parser = OutputBufferParser(fnames["tx"], vhdl_dict, version) in_muons = input_parser.get_input_muons() skip = 0 if pattern in phys_patterns:
512] #(eta_high-eta_low)/eta_unit, eta_low, eta_high] } phys_patterns = ["ZMM", "WM", "TTbar", "MinBias", "SingleMuPt100"] for pattern, fnames in file_dict.iteritems(): _log.info("{patt:+^90}".format(patt=pattern)) version = Version.from_filename(fnames['tx']) emu_version = Version( "99_99_99") # so workarounds are not applied for this # Reading and initilaising the Emulator data emu_out_list = [] emu_imd_list = [] # Reading and processing the hardware data print "--- Emulator parsing:" emu_output_parser = OutputBufferParser(fnames["emu_tx"], vhdl_dict, emu_version) emu_out_list = emu_output_parser.get_output_muons() emu_imd_list = emu_output_parser.get_intermediate_muons() # Reading and processing the hardware data print "--- HW parsing:" input_parser = InputBufferParser(fnames["rx"], vhdl_dict) output_parser = OutputBufferParser(fnames["tx"], vhdl_dict, version) skip = 0 if pattern in phys_patterns: skip = 60 in_muons = input_parser.get_input_muons() out_muons = output_parser.get_output_muons(skip) if pattern in phys_patterns: _log.info("Dropping the last {n} muons from the emulator".format(
from tools.muon_helpers import print_out_word from helpers.options import parse_options, discover_files from tools.vhdl import VHDLConstantsParser if __name__ == "__main__": vhdl_dict = VHDLConstantsParser.parse_vhdl_file("data/ugmt_constants.vhd") options = parse_options() file_dict = discover_files(options) for pattern, fnames in file_dict.iteritems(): version = Version.from_filename(fnames['base']) print "+"*30, "version detected:", version, "+"*30 print "+"*30, pattern, "+"*30 # Reading and processing the hardware data output_parser = OutputBufferParser(fnames["tx"], vhdl_dict, version) out_muons = output_parser.get_output_muons() imd_muons = output_parser.get_intermediate_muons() non_zero = [mu for mu in out_muons if mu.bitword != 0] out_muons_emu = None if "emu_tx" in fnames.keys(): output_parser_emu = OutputBufferParser(fnames["emu_tx"], vhdl_dict, version) imd_muons_emu = output_parser_emu.get_intermediate_muons() out_muons_emu = output_parser_emu.get_output_muons() non_zero_emu = [mu for mu in out_muons_emu if mu.bitword != 0] if out_muons_emu != None: mu_to_print = {} imd_to_print = zip(imd_muons, imd_muons_emu)