@startuml

scale 600 width
title Available event filters in dv::processing
left to right direction

namespace dv {

EventFilterBase <|-- EventRegionFilter
EventFilterBase <|-- EventPolarityFilter
EventFilterBase <|-- EventFilterChain
EventFilterBase <|-- BaseFrequencyFilter
BaseFrequencyFilter <|-- dv.noise.LowPassFilter
BaseFrequencyFilter <|-- dv.noise.HighPassFilter
BaseFrequencyFilter <|-- dv.noise.BandPassFilter
BaseFrequencyFilter <|-- dv.noise.BandCutFilter
EventFilterBase <|-- EventMaskFilter
EventFilterBase <|-- dv.noise.BackgroundActivityNoiseFilter
EventFilterBase <|-- dv.noise.FastDecayNoiseFilter

class EventFilterBase {
    + accept(events)
    + generateEvents()
    {abstract} +retain(event)
    + getNumIncomingEvents()
    + getNumOutgoingEvents()
    + getReductionFactor()
}

class EventRegionFilter {
    + EventRegionFilter(roi)
    + retain()
}

class EventPolarityFilter {
    + EventPolarityFilter(polarity)
    + retain()
}

class EventFilterChain {
    + addFilter(filter)
    + retain()
}


class EventMaskFilter {
    + EventMaskFilter(mask)
    + retain()
    + getMask()
    + setMaks(mask)
}

namespace noise {

    class BaseFrequencyFilter {
        + BaseFrequencyFilter(resolution, lowerCutOffFrequency, upperCutOffFrequency, filterType)
        + retain()
    }

    class LowPassFilter{
        + LowPassFilter(resolution, cutOffFrequency)
        + getCutOffFrequency()
        + setCutOffFrequency(frequency)
    }

    class HighPassFilter{
        + HighPassFilter(resolution, cutOffFrequency)
        + getCutOffFrequency()
        + setCutOffFrequency(frequency)
    }

    class BandPassFilter{
        + BandPassFilter(resolution, lowerCutOffFrequency, upperCutOffFrequency)
        + getLowerCutOffFrequency()
        + getUpperCutOffFrequency()
        + setLowerCutOffFrequency(frequency)
        + setUpperCutOffFrequency(frequency)
    }

    class BandCutFilter{
        + BandCutFilter(resolution, lowerCutOffFrequency, upperCutOffFrequency)
        + getLowerCutOffFrequency()
        + getUpperCutOffFrequency()
        + setLowerCutOffFrequency(frequency)
        + setUpperCutOffFrequency(frequency)
    }

    class BackgroundActivityNoiseFilter {
        + BackgroundActivityNoiseFilter(resolution, backgroundActivityDuration)
        + retain()
        + getBackgroundActivityDuration()
        + setBackgroundActivityDuration(backgroundActivityDuration)
    }

    class FastDecayNoiseFilter {
        + FastDecayNoiseFilter(resolution, halfLife, subdivisionFactor, noiseThreshold)
        + retain()
        + getNoiseThreshold()
        + setNoiseThreshold(noiseThreshold)
        + getHalfLife()
        + setHalfLife(halfLife)
    }

}

}
@enduml
