Beispiel #1
0
    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()
Beispiel #2
0
    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()
Beispiel #3
0
    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()
Beispiel #4
0
    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)
Beispiel #5
0
    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)
Beispiel #6
0
    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)
Beispiel #7
0
    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)