def __init__(self, wiring_map): self.mp = {} self.mp_inv = {} for k in wiring_map.keys(): wm = wiring_map[k] board_id = get_physical_id(wm.board_serial, wm.crate_serial, wm.board_slot) self.mp[wm.board_serial] = board_id self.mp_inv[board_id] = wm.board_serial
def __call__(self, frame): if frame.type == core.G3FrameType.Wiring: wiring_map = frame['WiringMap'] squid_ids = [] for k in wiring_map.keys(): wm = wiring_map[k] squid_ids.append( get_physical_id(wm.board_serial, wm.crate_serial, wm.board_slot, wm.module + 1) ) squid_ids = uniquifyList(squid_ids) self.init_squids(squid_ids) self.serial_mapper = IdSerialMapper(frame['WiringMap']) elif frame.type == core.G3FrameType.Housekeeping: if self.squids_list is None: return #do update if not frame is None: hk_data = frame['DfMuxHousekeeping'] else: hk_data = None self.stdscr.clear() y, x = self.stdscr.getmaxyx() if y < self.screen_size_y or x < self.screen_size_x: screen = self.stdscr.subwin(0, x, 0, 0) screen.addstr(0,0, 'Terminal is too small %d %d'%(y,x), curses.color_pair(1)) screen.refresh() return screen = self.stdscr.subwin(0, self.screen_size_x, 0, 0) screen.clear() #screen.box() #CNDTV6F if not hk_data is None: add_timestamp_info(screen, 0,2, hk_data[hk_data.keys()[0]].timestamp, 5) for i, s in enumerate(self.str_id_lst): offset = 4 screen.addstr(i+1, offset, s, curses.color_pair(2)) screen.addstr(i+1, offset + self.highlight_index[i], s[self.highlight_index[i]], curses.color_pair(3)) screen.hline(len(self.str_id_lst) + 1, 0, '-', self.squid_col_width) screen.vline(0, self.squid_col_width-1, '|', len(self.str_id_lst)+1) for i, s in enumerate(self.squids_list): p = self.pos_map[s] load_squid_info_from_hk( screen, p[1], p[0], hk_data, s, s, self.sq_label_size, self.squid_col_width, self.serial_mapper) screen.refresh() elif frame.type == core.G3FrameType.EndProcessing: if not self.squids_list is None: self.stdscr.keypad(0) curses.echo() curses.nocbreak() curses.endwin()
def send_off(self, frame): if not self.wiring_map is None and self.bolo_props is None: #faking the frame data self.bolo_props = calibration.BolometerPropertiesMap() n_chans = 0 squids = {} for k in self.wiring_map.keys(): wm = self.wiring_map[k] c = wm.channel + 1 if c > n_chans: n_chans = c sq = get_physical_id(wm.board_serial, wm.crate_serial, wm.board_slot, wm.module + 1) squids[sq] = 1 n_squids = len(squids.keys()) sq_layout = make_square_block(n_squids) ch_layout = make_square_block(n_chans) sq_x_sep = ch_layout[0] + 1 sq_y_sep = ch_layout[1] + 1 ch_x_sep = 1 ch_y_sep = 1 for i, sq in enumerate( sorted(squids.keys()) ): x = i % sq_layout[0] y = i // sq_layout[0] squids[sq] = (1.2 * x * ch_layout[0], 1.2* y * ch_layout[1]) #need nsquids #need nbolos per squid for k in self.wiring_map.keys(): wm = self.wiring_map[k] sq_id = get_physical_id(wm.board_serial, wm.crate_serial, wm.board_slot, wm.module + 1) w_id = get_physical_id(wm.board_serial, wm.crate_serial, wm.board_slot) sql = squids[sq_id] x = sql[0] + ((wm.channel) % ch_layout[0]) * ch_x_sep y = sql[1] + ((wm.channel) // ch_layout[0]) * ch_y_sep bp = calibration.BolometerProperties() bp.physical_name = k bp.band = 0 bp.pol_angle = 0 bp.pol_efficiency = 0 bp.wafer_id = w_id bp.squid_id = sq_id bp.x_offset = float(x) bp.y_offset = float(y) self.bolo_props[k] = bp out_frame = core.G3Frame(core.G3FrameType.Calibration) out_frame['BolometerProperties'] = self.bolo_props out_frame['DfMuxTransferFunction'] = self.default_tf return [out_frame, frame] else: return frame