# Changing settings The Pixie16 has many settings, some are straight forward, e.g. the trigger threshold of a channel is just a single number, but other are more complex, e.g. certain bits in a 32 bit number to set the number of coincidences. Pypixie16 provides access to the settings as they are defined in the manual, but on top of that pypixie16 also provides some shortcuts for complex settings, so that one can, for example, just set a flag to `True` or `False` without having to remember which bit needs to change. This makes setting the correct value easier and it also makes reading the code that changes settings easier. To change settings, use the `pixie16.control.change_setting_from_dict` function. The function takes a dictionar of settings names and values. Additonally one needs to define a list of channels for which settings are defined, so that one does not need to define always all 16 cannel for each module. Channels are defined as a python tuple of `module` and `channel`, for example `(0,9)` to address channel 9 in module 0. Values in the dictionary are set in order as they appear. For this reason it is recommended to use an `Ordereddict` as the dictionary. This allows to, for example, set module parameters that are defined as bit values to `0` and then afterwards settings individual bits to certain values. Alternatively, `pixie16.control.load_dsp_parameters_from_file(Path())` provides a way to load existing settings. ## Example Here is an example on how to change settings: channels = [(0, 1), (0, 2), (0, 3), (0, 4), (0, 5), (0, 6), (0, 7)] settings = OrderedDict( { "channels": channels, "SLOW_FILTER_RANGE": 1, "ENERGY_RISETIME": [1, 2, 3, 4, 5, 6, 7], "ENERGY_FLATTOP": [1, 2, 3, 4, 5, 6, 7], "FAST_FILTER_RANGE": 0, "TRIGGER_RISETIME": [1, 2, 3, 4, 5, 6, 7], "TRIGGER_FLATTOP": [1, 2, 3, 4, 5, 6, 7], "TRIGGER_THRESHOLD": [ 1_000, 4_000, 12_000, 24_000, 40_000, 60_000, 65_534, ], # in ADC units "TRACE_LENGTH": [ 1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, ], "TRACE_DELAY": [0.2, 0.3, 0.35, 0.4, 0.45, 0.5, 0.550], "MultiplicityMaskL": 0, "MultiplicityMaskH": 0, "ChanCSRa": 0, "ChanCSRb": 0, "TrigConfig0": 0, "TrigConfig1": 0, "TrigConfig2": 0, "TrigConfig3": 0, "ChanTrigStretch": [0.11, 0.12, 0.13, 0.14, 0.15, 0.16, 0.17], "VetoStretch": [0.21, 0.22, 0.23, 0.24, 0.25, 0.26, 0.27], "FastTrigBackLen": [0.31, 0.32, 0.33, 0.34, 0.35, 0.36, 0.37], "ExternDelayLen": [0.41, 0.42, 0.43, 0.44, 0.45, 0.46, 0.47], "ExtTrigStretch": [0.51, 0.52, 0.53, 0.54, 0.55, 0.56, 0.57], "TriggerDelay": [0.11, 0.22, 0.33, 0.44, 0.55, 0.66, 0.77], "VOFFSET": [ -0.1, -0.1, -0.15, -0.20, 0.25, 0.30, 0.40, ], # in units of 1.5V/32768 with 0V = 32768 "Gain": [2.5, 0.625, 0.625, 0.625, 2.5, 2.5, 2.5], "Polarity": [ "positive", "positive", "positive", "positive", "negative", "negative", "negative", ], "CaptureTrace": [False, False, True, True, True, True, False], "CaptureSums": [False, True, True, True, True, True, False], "RejectPileup": [False, True, True, True, True, True, False], "FastTrigSelect": [ "external", "group", "group", "external", "external", "group", "group", ], "RejectIfFull": [False, True, True, True, True, True, False], "EnableCFD": [False, True, True, True, True, True, False], "BLcut": [10, 20, 30, 40, 50, 60, 70], "BaselinePercent": [10, 20, 30, 40, 50, 60, 70], "Log2Bweight": [1, 2, 3, 4, 5, 6, 7], "EnergyLow": [10, 20, 30, 40, 50, 60, 70], "Log2Ebin": [1, 2, -3, 1, -2, 3, -1], "PreampTau": [0.03, 0.04, 0.50, 0.6, 0.7, 0.8, 0.9], "CFDDelay": [10, 20, 30, 40, 50, 60, 70], "CFDScale": [1, 2, 3, 1, 2, 3, 1], "CFDThresh": [10, 20, 30, 40, 50, 60, 70], } ) pixie16.control.change_setting_from_dict(settings, call_pixie=call_pixie) Notes: * The dictionary needs a entry called 'channels' * For settings that have a value for each channel, one can either give a list of values (same length as the number of channels) or a single value that will be used for all channels. * Most settings names come directly from the programming manual of the pixie16. * Some settings are custom to pypixie16. These set certain bit values (see below for a list of them) ## Setting up coincidences One can direclty set `MultiplicityMaskH` and `MultiplicityMaskL`. However, since this involves settings single bits, pypixie16 provides the following settings to make this easier: ### MultiplicityLeft, MultiplicitySelf, MultiplicityRight A list of channel numbers (no module, just channels) that should be used in the coincidence calculation. Left, Self, and Right refer to the different modules that can be used for this. ### ChannelValidationSource This can be either 'multiplicity', 'coincidence', or 'group/external'. To distinguish between the three different coincidene modes the Pixie16 provides. ### NrOfMultiplicities Defines the number of coincidences for mode 'multiplicity'. ### NrOfCoincidencesLeft, NrOfCoincidencesSelf, NrOfCoincidencesRight Defines the number of coincidene 'coincidence' for each of the 3 modules that are used. ### Example This set coincidences fo 7 channels: "MultiplicitySelf": [ [4, 5, 9], [4, 9], [5, 9], [4, 5, 9], [4, 5, 9], [4, 5, 9], [4, 5, 9], ], "NrOfCoincidencesSelf": 2, "ChannelValidationSource": "coincidence", ## Bit parameters For `MODULE_CSRB` the following settings area available: | Name | bit | possible value | |----------------------|-----|----------------| | BackplanePullup | 0 | True/False | | Director | 4 | True/False | | ChassisMaster | 6 | True/False | | GlobalFastTrigger | 7 | True/False | | ExternalTrigger | 8 | True/False | | ExternalInhibit | 10 | True/False | | DistributeClocks | 11 | True/False | | SortEvents | 12 | True/False | | ConnectFastTriggerBP | 13 | True/False | For `MODULE_CSRA` the following settings area available: | Name | bit | possible value | |-------------------|--------|---------------------------------------------------------------------------------------| | FastTrigSelect | 0 | external(=True)/group(=False) | | ModValSignal | 1 | modgate(=True)/global(=False) | | GoodChannel | 2 | True/False | | ChanValSignal | 3 | channelgate(=True)/channelvalidation(=False) | | RejectIfFull | 4 | True/False | | Polarity | 5 | positive(=True)/negative(=False) | | EnableVeto | 6 | True/False | | CaptureHistogram | 7 | True/False | | CaptureTrace | 8 | True/False | | EnableQDC | 9 | True/False | | EnableCFD | 10 | True/False | | EnableModVal | 11 | True/False | | CaptureSums | 12 | True/False | | EnableChannelVal | 13 | True/False | | Gain | 14 | 2.5(=True)/0.625(=False) | | RejectPileup | 15, 16 | single(b15=1, b16=0)/pileup-only(b15=1, b16=1)/pileup(b15=0, b16=1)/all(b15=0, b16=0) | | SkipLargePulses | 17 | True/False | | GroupTrigSignal | 18 | external(=True)/local(=False) | | ChannelVetoSignal | 19 | channel(=True)/front(=False) | | ModVetoSignal | 20 | channel(=True)/front(=False) | | ExtTimestamps | 21 | True/False |