'**SUMMARY**
Creates a disk shaped notch filter of given diameter at given center.
**PARAMETERS**
* *dia1*       -  int - diameter of the disk shaped notch
- list - provide a list of three diameters to create
a 3 channel filter
* *dia2*       -  int - outer diameter of the disk shaped notch
used for bandpass filter
- list - provide a list of three diameters to create
a 3 channel filter
* *cen*        - tuple (x, y) center of the disk shaped notch
if not provided, it will be at the center of the
filter
* *size*       - size of the filter (width, height)
* *type*:      - lowpass or highpass filter
**RETURNS**
DFT notch filter
**EXAMPLE**
>>> notch = DFT.createNotchFilter(dia1=200, cen=(200, 200),
size=(512, 512), type="highpass")
>>> notch = DFT.createNotchFilter(dia1=200, dia2=300, cen=(200, 200),
size=(512, 512))
>>> img = Image(\'lenna\')
>>> notch.applyFilter(img).show()'

@classmethod
def createNotchFilter(self, dia1, dia2=None, cen=None, size=(64, 64), type='lowpass'):

    if isinstance(dia1, list):
        if ((len(dia1) != 3) and (len(dia1) != 1)):
            warnings.warn('diameter    list    must    be    of    size    1    or    3')
            return None
        if isinstance(dia2, list):
            if ((len(dia2) != 3) and (len(dia2) != 1)):
                warnings.warn('diameter    list    must    be    of    size    3    or    1')
                return None
            if (len(dia2) == 1):
                dia2 = ([dia2[0]] * len(dia1))
        else:
            dia2 = ([dia2] * len(dia1))
        if isinstance(cen, list):
            if ((len(cen) != 3) and (len(cen) != 1)):
                warnings.warn('center    list    must    be    of    size    3    or    1')
                return None
            if (len(cen) == 1):
                cen = ([cen[0]] * len(dia1))
        else:
            cen = ([cen] * len(dia1))
        stackedfilter = DFT()
        for (d1, d2, c) in zip(dia1, dia2, cen):
            stackedfilter = stackedfilter._stackFilters(self.createNotchFilter(d1, d2, c, size, type))
        image = Image(stackedfilter._numpy)
        retVal = DFT(numpyarray=stackedfilter._numpy, image=image, dia=(dia1 + dia2), channels=len(dia1), size=size, type=stackedfilter._type, frequency=stackedfilter._freqpass)
        return retVal
    (w, h) = size
    if (cen is None):
        cen = ((w / 2), (h / 2))
    (a, b) = cen
    (y, x) = np.ogrid[(- a):(w - a), (- b):(h - b)]
    r = (dia1 / 2)
    mask = (((x * x) + (y * y)) <= (r * r))
    flt = np.ones((w, h))
    flt[mask] = 255
    if (type == 'highpass'):
        flt = (255 - flt)
    if (dia2 is not None):
        (a, b) = cen
        (y, x) = np.ogrid[(- a):(w - a), (- b):(h - b)]
        r = (dia2 / 2)
        mask = (((x * x) + (y * y)) <= (r * r))
        flt1 = np.ones((w, h))
        flt1[mask] = 255
        flt1 = (255 - flt1)
        flt = (flt + flt1)
        np.clip(flt, 0, 255)
        type = 'bandpass'
    img = Image(flt)
    notchfilter = DFT(size=size, numpyarray=flt, image=img, dia=dia1, type='Notch', frequency=type)
    return notchfilter
