'Set the pen(s) used to draw the outline around each spot.
If a list or array is provided, then the pen for each spot will be set separately.
Otherwise, the arguments are passed to pg.mkPen and used as the default pen for
all spots which do not have a pen explicitly set.'

def setPen(self, *args, **kargs):

    update = kargs.pop('update', True)
    dataSet = kargs.pop('dataSet', self.data)
    if ((len(args) == 1) and (isinstance(args[0], np.ndarray) or isinstance(args[0], list))):
        pens = args[0]
        if (('mask' in kargs) and (kargs['mask'] is not None)):
            pens = pens[kargs['mask']]
        if (len(pens) != len(dataSet)):
            raise Exception(('Number    of    pens    does    not    match    number    of    points    (%d    !=    %d)' % (len(pens), len(dataSet))))
        dataSet['pen'] = pens
    else:
        self.opts['pen'] = fn.mkPen(*args, **kargs)
    dataSet['sourceRect'] = None
    if update:
        self.updateSpots(dataSet)
