def analyze(self): if self.global_iterations: GdacTuning.analyze(self) FeedbackTuning.analyze(self) if self.local_iterations: TdacTuning.analyze(self) FdacTuning.analyze(self) if self.make_plots: if self.local_iterations: plot_three_way(hist=self.tot_mean_best.transpose(), title="Mean ToT after last FDAC tuning", x_axis_title='Mean ToT', filename=self.plots_filename) plot_three_way( hist=self.register.get_pixel_register_value( "FDAC").transpose(), title="FDAC distribution after last FDAC tuning", x_axis_title='FDAC', filename=self.plots_filename, maximum=16) if self.local_iterations >= 0: plot_three_way(hist=self.occupancy_best.transpose(), title="Occupancy after tuning", x_axis_title='Occupancy', filename=self.plots_filename, maximum=100) plot_three_way(hist=self.register.get_pixel_register_value( "TDAC").transpose(), title="TDAC distribution after complete tuning", x_axis_title='TDAC', filename=self.plots_filename, maximum=32) self.plots_filename.close()
def analyze(self): if self.global_iterations > 0: FeedbackTuning.analyze(self) if self.global_iterations >= 0: GdacTuning.analyze(self) if self.local_iterations > 0: FdacTuning.analyze(self) if self.local_iterations >= 0: TdacTuning.analyze(self) # write configuration to avoid high current states commands = [] commands.extend(self.register.get_commands("ConfMode")) commands.extend(self.register.get_commands("WrRegister", name=["Vthin_AltCoarse", "Vthin_AltFine", "PrmpVbpf"])) commands.extend(self.register.get_commands("WrFrontEnd", same_mask_for_all_dc=False, name="TDAC")) commands.extend(self.register.get_commands("WrFrontEnd", same_mask_for_all_dc=False, name="FDAC")) self.register_utils.send_commands(commands) if self.local_iterations > 0: plot_three_way(hist=self.tot_mean_best.transpose(), title="Mean ToT after last FDAC tuning", x_axis_title='Mean ToT', filename=self.plots_filename, maximum=15) plot_three_way(hist=self.register.get_pixel_register_value("FDAC").transpose(), title="FDAC distribution after last FDAC tuning", x_axis_title='FDAC', filename=self.plots_filename, maximum=15) if self.local_iterations >= 0: plot_three_way(hist=self.occupancy_best.transpose(), title="Occupancy after last TDAC tuning", x_axis_title='Occupancy', filename=self.plots_filename, maximum=self.n_injections_tdac) plot_three_way(hist=self.register.get_pixel_register_value("TDAC").transpose(), title="TDAC distribution after last TDAC tuning", x_axis_title='TDAC', filename=self.plots_filename, maximum=31) self.plots_filename.close()
def analyze(self): if self.global_iterations: GdacTuning.analyze(self) FeedbackTuning.analyze(self) if self.local_iterations: TdacTuning.analyze(self) FdacTuning.analyze(self) if self.make_plots: if self.local_iterations: plotThreeWay(hist=self.tot_mean_best.transpose(), title="Mean ToT after last FDAC tuning", x_axis_title='Mean ToT', filename=self.plots_filename) plotThreeWay(hist=self.register.get_pixel_register_value("FDAC").transpose(), title="FDAC distribution after last FDAC tuning", x_axis_title='FDAC', filename=self.plots_filename, maximum=16) if self.local_iterations >= 0: plotThreeWay(hist=self.occupancy_best.transpose(), title="Occupancy after tuning", x_axis_title='Occupancy', filename=self.plots_filename, maximum=100) plotThreeWay(hist=self.register.get_pixel_register_value("TDAC").transpose(), title="TDAC distribution after complete tuning", x_axis_title='TDAC', filename=self.plots_filename, maximum=32) self.plots_filename.close()
def scan(self): '''Metascript that calls other scripts to tune the FE. Parameters ---------- cfg_name : string Name of the config to be created. This config holds the tuning results. target_threshold : int The target threshold value in PlsrDAC. target_charge : int The target charge in PlsrDAC value to tune to. target_tot : int The target tot value to tune to. global_iterations : int Defines how often global threshold/global feedback current tuning is repeated. -1: the global tuning is disabled 0: the global tuning consists of the global threshold tuning only 1: global threshold/global feedback current/global threshold tuning 2: global threshold/global feedback current/global threshold tuning/global feedback current/global threshold tuning ... local_iterations : int Defines how often local threshold (TDAC) / feedback current (FDAC) tuning is repeated. -1: the local tuning is disabled 0: the local tuning consists of the local threshold tuning only (TDAC) 1: TDAC/FDAC/TDAC 2: TDAC/FDAC/TDAC/FDAC/TDAC ... ''' if self.global_iterations < 0: self.global_iterations = 0 if self.local_iterations < 0: self.local_iterations = 0 difference_bit = 1 if self.make_plots: self.plots_filename = PdfPages(self.output_filename + '.pdf') else: self.plots_filename = None start_bit = 7 for iteration in range(0, self.global_iterations): # tune iteratively with decreasing range to save time logging.info("Global tuning step %d / %d" % (iteration + 1, self.global_iterations)) start_bit = 7 # - difference_bit * iteration self.set_scan_parameters(global_step=self.scan_parameters.global_step + 1) self.gdac_tune_bits = range(start_bit, -1, -1) GdacTuning.scan(self) self.set_scan_parameters(global_step=self.scan_parameters.global_step + 1) self.feedback_tune_bits = range(start_bit, -1, -1) FeedbackTuning.scan(self) if self.global_iterations >= 0: self.set_scan_parameters(global_step=self.scan_parameters.global_step + 1) self.gdac_tune_bits = range(start_bit, -1, -1) GdacTuning.scan(self) Vthin_AC = self.register.get_global_register_value("Vthin_AltCoarse") Vthin_AF = self.register.get_global_register_value("Vthin_AltFine") PrmpVbpf = self.register.get_global_register_value("PrmpVbpf") logging.info("Results of global threshold tuning: Vthin_AltCoarse / Vthin_AltFine = %d / %d" % (Vthin_AC, Vthin_AF)) logging.info("Results of global feedback tuning: PrmpVbpf = %d" % (PrmpVbpf,)) difference_bit = int(5 / (self.local_iterations if self.local_iterations > 0 else 1)) start_bit = 4 for iteration in range(0, self.local_iterations): logging.info("Local tuning step %d / %d" % (iteration + 1, self.local_iterations)) start_bit = 4 # - difference_bit * iteration self.tdac_tune_bits = range(start_bit, -1, -1) TdacTuning.scan(self) self.fdac_tune_bits = range(start_bit - 1, -1, -1) FdacTuning.scan(self) if self.local_iterations >= 0: self.tdac_tune_bits = range(start_bit, -1, -1) TdacTuning.scan(self)
def scan(self): '''Metascript that calls other scripts to tune the FE. Parameters ---------- cfg_name : string Name of the config to be created. This config holds the tuning results. target_threshold : int The target threshold value in PlsrDAC. target_charge : int The target charge in PlsrDAC value to tune to. target_tot : float The target tot value to tune to. global_iterations : int Defines how often global threshold/global feedback current tuning is repeated. -1: the global tuning is disabled 0: the global tuning consists of the global threshold tuning only 1: global threshold/global feedback current/global threshold tuning 2: global threshold/global feedback current/global threshold tuning/global feedback current/global threshold tuning ... local_iterations : int Defines how often local threshold (TDAC) / feedback current (FDAC) tuning is repeated. -1: the local tuning is disabled 0: the local tuning consists of the local threshold tuning only (TDAC) 1: TDAC/FDAC/TDAC 2: TDAC/FDAC/TDAC/FDAC/TDAC ... ''' if self.global_iterations < 0: self.global_iterations = 0 if self.local_iterations < 0: self.local_iterations = 0 # difference_bit = 1 if self.make_plots: self.plots_filename = PdfPages(self.output_filename + '.pdf') else: self.plots_filename = None start_bit = 7 for iteration in range(0, self.global_iterations): # tune iteratively with decreasing range to save time logging.info("Global tuning step %d / %d", iteration + 1, self.global_iterations) start_bit = 7 # - difference_bit * iteration self.set_scan_parameters(global_step=self.scan_parameters.global_step + 1) self.gdac_tune_bits = range(start_bit, -1, -1) GdacTuning.scan(self) self.set_scan_parameters(global_step=self.scan_parameters.global_step + 1) self.feedback_tune_bits = range(start_bit, -1, -1) FeedbackTuning.scan(self) if self.global_iterations >= 0: self.set_scan_parameters(global_step=self.scan_parameters.global_step + 1) self.gdac_tune_bits = range(start_bit, -1, -1) GdacTuning.scan(self) Vthin_AC = self.register.get_global_register_value("Vthin_AltCoarse") Vthin_AF = self.register.get_global_register_value("Vthin_AltFine") PrmpVbpf = self.register.get_global_register_value("PrmpVbpf") logging.info("Results of global threshold tuning: Vthin_AltCoarse / Vthin_AltFine = %d / %d", Vthin_AC, Vthin_AF) logging.info("Results of global feedback tuning: PrmpVbpf = %d", PrmpVbpf) # difference_bit = int(5 / (self.local_iterations if self.local_iterations > 0 else 1)) start_bit = 4 for iteration in range(0, self.local_iterations): logging.info("Local tuning step %d / %d", iteration + 1, self.local_iterations) start_bit = 4 # - difference_bit * iteration self.tdac_tune_bits = range(start_bit, -1, -1) TdacTuning.scan(self) self.fdac_tune_bits = range(start_bit - 1, -1, -1) FdacTuning.scan(self) if self.local_iterations >= 0: self.tdac_tune_bits = range(start_bit, -1, -1) TdacTuning.scan(self)
def scan(self): '''Metascript that calls other scripts to tune the FE. Parameters ---------- cfg_name : string Name of the config to be created. This config holds the tuning results. target_threshold : int The target threshold value in PlsrDAC. target_charge : int The target charge in PlsrDAC value to tune to. target_tot : float The target tot value to tune to. global_iterations : int Defines how often global threshold (GDAC) / global feedback (PrmpVbpf) current tuning is repeated. -1 or None: Global tuning is disabled 0: Only global threshold tuning 1: GDAC -> PrmpVbpf -> GDAC 2: GDAC -> PrmpVbpf -> GDAC -> PrmpVbpf -> GDAC ... local_iterations : int Defines how often local threshold (TDAC) / feedback current (FDAC) tuning is repeated. -1 or None: Local tuning is disabled 0: Only local threshold tuning 1: TDAC -> FDAC -> TDAC 2: TDAC -> FDAC -> TDAC -> FDAC -> TDAC ... ''' if self.global_iterations is None: self.global_iterations = -1 if self.local_iterations is None: self.local_iterations = -1 if self.make_plots: self.plots_filename = PdfPages(self.output_filename + '.pdf') else: self.plots_filename = None for iteration in range(0, self.global_iterations): # tune iteratively with decreasing range to save time logging.info("Global tuning step %d / %d", iteration + 1, self.global_iterations) self.set_scan_parameters(global_step=self.scan_parameters.global_step + 1) GdacTuning.scan(self) self.set_scan_parameters(global_step=self.scan_parameters.global_step + 1) FeedbackTuning.scan(self) if self.global_iterations >= 0: self.set_scan_parameters(global_step=self.scan_parameters.global_step + 1) GdacTuning.scan(self) Vthin_AC = self.register.get_global_register_value("Vthin_AltCoarse") Vthin_AF = self.register.get_global_register_value("Vthin_AltFine") PrmpVbpf = self.register.get_global_register_value("PrmpVbpf") logging.info("Results of global threshold tuning: Vthin_AltCoarse / Vthin_AltFine = %d / %d", Vthin_AC, Vthin_AF) logging.info("Results of global feedback tuning: PrmpVbpf = %d", PrmpVbpf) for iteration in range(0, self.local_iterations): logging.info("Local tuning step %d / %d", iteration + 1, self.local_iterations) self.set_scan_parameters(local_step=self.scan_parameters.local_step + 1) TdacTuning.scan(self) self.set_scan_parameters(local_step=self.scan_parameters.local_step + 1) FdacTuning.scan(self) if self.local_iterations >= 0: self.set_scan_parameters(local_step=self.scan_parameters.local_step + 1) TdacTuning.scan(self)
def scan(self): '''Metascript that calls other scripts to tune the FE. Parameters ---------- cfg_name : string Name of the config to be created. This config holds the tuning results. target_threshold : int The target threshold value in PlsrDAC. target_charge : int The target charge in PlsrDAC value to tune to. target_tot : float The target tot value to tune to. global_iterations : int Defines how often global threshold (GDAC) / global feedback (PrmpVbpf) current tuning is repeated. -1 or None: Global tuning is disabled 0: Only global threshold tuning 1: GDAC -> PrmpVbpf -> GDAC 2: GDAC -> PrmpVbpf -> GDAC -> PrmpVbpf -> GDAC ... local_iterations : int Defines how often local threshold (TDAC) / feedback current (FDAC) tuning is repeated. -1 or None: Local tuning is disabled 0: Only local threshold tuning 1: TDAC -> FDAC -> TDAC 2: TDAC -> FDAC -> TDAC -> FDAC -> TDAC ... ''' for iteration in range(0, self.global_iterations): # tune iteratively with decreasing range to save time if self.stop_run.is_set(): break logging.info("Global tuning step %d / %d", iteration + 1, self.global_iterations) self.set_scan_parameters(global_step=self.scan_parameters.global_step + 1) GdacTuning.scan(self) commands = [] commands.extend(self.register.get_commands("ConfMode")) commands.extend(self.register.get_commands("WrRegister", name=["Vthin_AltCoarse", "Vthin_AltFine"])) commands.extend(self.register.get_commands("RunMode")) self.register_utils.send_commands(commands) if self.stop_run.is_set(): break self.set_scan_parameters(global_step=self.scan_parameters.global_step + 1) FeedbackTuning.scan(self) commands = [] commands.extend(self.register.get_commands("ConfMode")) commands.extend(self.register.get_commands("WrRegister", name=["PrmpVbpf"])) commands.extend(self.register.get_commands("RunMode")) self.register_utils.send_commands(commands) if self.global_iterations >= 0 and not self.stop_run.is_set(): self.set_scan_parameters(global_step=self.scan_parameters.global_step + 1) GdacTuning.scan(self) commands = [] commands.extend(self.register.get_commands("ConfMode")) commands.extend(self.register.get_commands("WrRegister", name=["Vthin_AltCoarse", "Vthin_AltFine"])) commands.extend(self.register.get_commands("RunMode")) self.register_utils.send_commands(commands) Vthin_AC = self.register.get_global_register_value("Vthin_AltCoarse") Vthin_AF = self.register.get_global_register_value("Vthin_AltFine") PrmpVbpf = self.register.get_global_register_value("PrmpVbpf") logging.info("Results of global threshold tuning: Vthin_AltCoarse / Vthin_AltFine = %d / %d", Vthin_AC, Vthin_AF) logging.info("Results of global feedback tuning: PrmpVbpf = %d", PrmpVbpf) for iteration in range(0, self.local_iterations): if self.stop_run.is_set(): break logging.info("Local tuning step %d / %d", iteration + 1, self.local_iterations) self.set_scan_parameters(local_step=self.scan_parameters.local_step + 1) TdacTuning.scan(self) commands = [] commands.extend(self.register.get_commands("ConfMode")) commands.extend(self.register.get_commands("WrFrontEnd", same_mask_for_all_dc=False, name="TDAC")) commands.extend(self.register.get_commands("RunMode")) self.register_utils.send_commands(commands) if self.stop_run.is_set(): break self.set_scan_parameters(local_step=self.scan_parameters.local_step + 1) FdacTuning.scan(self) commands = [] commands.extend(self.register.get_commands("ConfMode")) commands.extend(self.register.get_commands("WrFrontEnd", same_mask_for_all_dc=False, name="FDAC")) commands.extend(self.register.get_commands("RunMode")) self.register_utils.send_commands(commands) if self.local_iterations >= 0 and not self.stop_run.is_set(): self.set_scan_parameters(local_step=self.scan_parameters.local_step + 1) TdacTuning.scan(self) commands = [] commands.extend(self.register.get_commands("ConfMode")) commands.extend(self.register.get_commands("WrFrontEnd", same_mask_for_all_dc=False, name="TDAC")) commands.extend(self.register.get_commands("RunMode")) self.register_utils.send_commands(commands)