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(<filename>)) 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