svcore  1.9
FFTDataServer Class Reference

#include <FFTDataServer.h>

Collaboration diagram for FFTDataServer:

Classes

struct  CacheBlock
 
class  FillThread
 

Public Member Functions

const DenseTimeValueModelgetModel () const
 
int getChannel () const
 
WindowType getWindowType () const
 
int getWindowSize () const
 
int getWindowIncrement () const
 
int getFFTSize () const
 
bool getPolar () const
 
int getWidth () const
 
int getHeight () const
 
float getMagnitudeAt (int x, int y)
 
float getNormalizedMagnitudeAt (int x, int y)
 
float getMaximumMagnitudeAt (int x)
 
float getPhaseAt (int x, int y)
 
void getValuesAt (int x, int y, float &real, float &imaginary)
 
bool isColumnReady (int x)
 
bool getMagnitudesAt (int x, float *values, int minbin=0, int count=0, int step=1)
 
bool getNormalizedMagnitudesAt (int x, float *values, int minbin=0, int count=0, int step=1)
 
bool getPhasesAt (int x, float *values, int minbin=0, int count=0, int step=1)
 
bool getValuesAt (int x, float *reals, float *imaginaries, int minbin=0, int count=0, int step=1)
 
void suspend ()
 
void suspendWrites ()
 
void resume ()
 
bool isLocalPeak (int x, int y)
 
bool isOverThreshold (int x, int y, float threshold)
 
QString getError () const
 
int getFillCompletion () const
 
int getFillExtent () const
 

Static Public Member Functions

static FFTDataServergetInstance (const DenseTimeValueModel *model, int channel, WindowType windowType, int windowSize, int windowIncrement, int fftSize, bool polar, StorageAdviser::Criteria criteria=StorageAdviser::NoCriteria, int fillFromColumn=0)
 
static FFTDataServergetFuzzyInstance (const DenseTimeValueModel *model, int channel, WindowType windowType, int windowSize, int windowIncrement, int fftSize, bool polar, StorageAdviser::Criteria criteria=StorageAdviser::NoCriteria, int fillFromColumn=0)
 
static void claimInstance (FFTDataServer *)
 
static void releaseInstance (FFTDataServer *)
 
static void modelAboutToBeDeleted (Model *)
 

Private Types

typedef float fftsample
 
typedef std::vector< CacheBlock * > CacheVector
 
typedef std::pair< FFTDataServer *, int > ServerCountPair
 
typedef std::map< QString, ServerCountPairServerMap
 
typedef std::deque< FFTDataServer * > ServerQueue
 

Private Member Functions

 FFTDataServer (QString fileBaseName, const DenseTimeValueModel *model, int channel, WindowType windowType, int windowSize, int windowIncrement, int fftSize, bool polar, StorageAdviser::Criteria criteria, int fillFromColumn=0)
 
virtual ~FFTDataServer ()
 
 FFTDataServer (const FFTDataServer &)
 
FFTDataServeroperator= (const FFTDataServer &)
 
FFTCacheReadergetCacheReader (int x, int &col)
 
FFTCacheWritergetCacheWriter (int x, int &col)
 
bool haveCache (int x)
 
bool makeCache (int c)
 
bool makeCacheReader (int c)
 
void getStorageAdvice (int w, int h, bool &memory, bool &compact)
 
void deleteProcessingData ()
 
void fillColumn (int x)
 
void fillComplete ()
 
QString generateFileBasename () const
 

Static Private Member Functions

static QString generateFileBasename (const DenseTimeValueModel *model, int channel, WindowType windowType, int windowSize, int windowIncrement, int fftSize, bool polar)
 
static FFTDataServerfindServer (QString)
 
static void purgeLimbo (int maxSize=3)
 
static void claimInstance (FFTDataServer *, bool needLock)
 
static void releaseInstance (FFTDataServer *, bool needLock)
 

Private Attributes

QString m_fileBaseName
 
const DenseTimeValueModelm_model
 
int m_channel
 
Window< fftsamplem_windower
 
int m_windowSize
 
int m_windowIncrement
 
int m_fftSize
 
bool m_polar
 
int m_width
 
int m_height
 
int m_cacheWidth
 
int m_cacheWidthPower
 
int m_cacheWidthMask
 
CacheVector m_caches
 
QReadWriteLock m_cacheVectorLock
 
QMutex m_cacheCreationMutex
 
StorageAdviser::Criteria m_criteria
 
QMutex m_fftBuffersLock
 
QWaitCondition m_condition
 
fftsamplem_fftInput
 
fftf_complexm_fftOutput
 
float * m_workbuffer
 
fftf_plan m_fftPlan
 
bool m_exiting
 
bool m_suspended
 
FillThreadm_fillThread
 
QString m_error
 

Static Private Attributes

static ServerMap m_servers
 
static ServerQueue m_releasedServers
 
static QMutex m_serverMapMutex
 

Detailed Description

Definition at line 40 of file FFTDataServer.h.

Member Typedef Documentation

◆ fftsample

typedef float FFTDataServer::fftsample
private

Definition at line 130 of file FFTDataServer.h.

◆ CacheVector

typedef std::vector<CacheBlock *> FFTDataServer::CacheVector
private

Definition at line 165 of file FFTDataServer.h.

◆ ServerCountPair

typedef std::pair<FFTDataServer *, int> FFTDataServer::ServerCountPair
private

Definition at line 279 of file FFTDataServer.h.

◆ ServerMap

typedef std::map<QString, ServerCountPair> FFTDataServer::ServerMap
private

Definition at line 280 of file FFTDataServer.h.

◆ ServerQueue

typedef std::deque<FFTDataServer *> FFTDataServer::ServerQueue
private

Definition at line 281 of file FFTDataServer.h.

Constructor & Destructor Documentation

◆ FFTDataServer() [1/2]

FFTDataServer::FFTDataServer ( QString  fileBaseName,
const DenseTimeValueModel model,
int  channel,
WindowType  windowType,
int  windowSize,
int  windowIncrement,
int  fftSize,
bool  polar,
StorageAdviser::Criteria  criteria,
int  fillFromColumn = 0 
)
private

◆ ~FFTDataServer()

FFTDataServer::~FFTDataServer ( )
privatevirtual

◆ FFTDataServer() [2/2]

FFTDataServer::FFTDataServer ( const FFTDataServer )
private

Member Function Documentation

◆ getInstance()

FFTDataServer * FFTDataServer::getInstance ( const DenseTimeValueModel model,
int  channel,
WindowType  windowType,
int  windowSize,
int  windowIncrement,
int  fftSize,
bool  polar,
StorageAdviser::Criteria  criteria = StorageAdviser::NoCriteria,
int  fillFromColumn = 0 
)
static

◆ getFuzzyInstance()

FFTDataServer * FFTDataServer::getFuzzyInstance ( const DenseTimeValueModel model,
int  channel,
WindowType  windowType,
int  windowSize,
int  windowIncrement,
int  fftSize,
bool  polar,
StorageAdviser::Criteria  criteria = StorageAdviser::NoCriteria,
int  fillFromColumn = 0 
)
static

◆ claimInstance() [1/2]

void FFTDataServer::claimInstance ( FFTDataServer server)
static

Definition at line 255 of file FFTDataServer.cpp.

Referenced by FFTModel::FFTModel(), findServer(), and getFuzzyInstance().

◆ releaseInstance() [1/2]

void FFTDataServer::releaseInstance ( FFTDataServer server)
static

◆ modelAboutToBeDeleted()

void FFTDataServer::modelAboutToBeDeleted ( Model model)
static

◆ getModel()

const DenseTimeValueModel* FFTDataServer::getModel ( ) const
inline

◆ getChannel()

int FFTDataServer::getChannel ( ) const
inline

Definition at line 71 of file FFTDataServer.h.

References m_channel.

Referenced by getFuzzyInstance().

◆ getWindowType()

WindowType FFTDataServer::getWindowType ( ) const
inline

Definition at line 72 of file FFTDataServer.h.

References Window< T >::getType(), and m_windower.

Referenced by getFuzzyInstance().

◆ getWindowSize()

int FFTDataServer::getWindowSize ( ) const
inline

Definition at line 73 of file FFTDataServer.h.

References m_windowSize.

Referenced by getFuzzyInstance().

◆ getWindowIncrement()

int FFTDataServer::getWindowIncrement ( ) const
inline

◆ getFFTSize()

◆ getPolar()

bool FFTDataServer::getPolar ( ) const
inline

Definition at line 76 of file FFTDataServer.h.

References m_polar.

Referenced by getFuzzyInstance().

◆ getWidth()

int FFTDataServer::getWidth ( ) const
inline

Definition at line 78 of file FFTDataServer.h.

References m_width.

Referenced by FFTFuzzyAdapter::getWidth(), and FFTModel::getWidth().

◆ getHeight()

int FFTDataServer::getHeight ( ) const
inline

Definition at line 79 of file FFTDataServer.h.

References m_height.

Referenced by FFTFuzzyAdapter::getHeight(), FFTModel::getHeight(), and isLocalPeak().

◆ getMagnitudeAt()

◆ getNormalizedMagnitudeAt()

float FFTDataServer::getNormalizedMagnitudeAt ( int  x,
int  y 
)

◆ getMaximumMagnitudeAt()

◆ getPhaseAt()

float FFTDataServer::getPhaseAt ( int  x,
int  y 
)

◆ getValuesAt() [1/2]

void FFTDataServer::getValuesAt ( int  x,
int  y,
float &  real,
float &  imaginary 
)

◆ isColumnReady()

bool FFTDataServer::isColumnReady ( int  x)

!! if (m_lastUsedCache == -1) { if (m_suspended) { std::cerr << "FFTDataServer::isColumnReady(" << x << "): no cache, calling resume" << std::endl; resume(); } m_fillThread->start(); }

Definition at line 1182 of file FFTDataServer.cpp.

References getCacheReader(), haveCache(), FFTCacheReader::haveSetColumnAt(), m_error, and m_width.

Referenced by FFTModel::isColumnAvailable(), and FFTFuzzyAdapter::isColumnReady().

◆ getMagnitudesAt()

bool FFTDataServer::getMagnitudesAt ( int  x,
float *  values,
int  minbin = 0,
int  count = 0,
int  step = 1 
)

◆ getNormalizedMagnitudesAt()

bool FFTDataServer::getNormalizedMagnitudesAt ( int  x,
float *  values,
int  minbin = 0,
int  count = 0,
int  step = 1 
)

◆ getPhasesAt()

bool FFTDataServer::getPhasesAt ( int  x,
float *  values,
int  minbin = 0,
int  count = 0,
int  step = 1 
)

◆ getValuesAt() [2/2]

bool FFTDataServer::getValuesAt ( int  x,
float *  reals,
float *  imaginaries,
int  minbin = 0,
int  count = 0,
int  step = 1 
)

◆ suspend()

void FFTDataServer::suspend ( )

Definition at line 636 of file FFTDataServer.cpp.

References m_fftBuffersLock, and m_suspended.

Referenced by releaseInstance(), and FFTModel::suspend().

◆ suspendWrites()

void FFTDataServer::suspendWrites ( )

Definition at line 648 of file FFTDataServer.cpp.

References m_suspended.

Referenced by modelAboutToBeDeleted(), and FFTModel::suspendWrites().

◆ resume()

void FFTDataServer::resume ( )

◆ isLocalPeak()

bool FFTDataServer::isLocalPeak ( int  x,
int  y 
)
inline

Definition at line 99 of file FFTDataServer.h.

References getHeight(), and getMagnitudeAt().

◆ isOverThreshold()

bool FFTDataServer::isOverThreshold ( int  x,
int  y,
float  threshold 
)
inline

Definition at line 105 of file FFTDataServer.h.

References getMagnitudeAt().

◆ getError()

QString FFTDataServer::getError ( ) const

Definition at line 1393 of file FFTDataServer.cpp.

References FFTDataServer::FillThread::getError(), m_error, and m_fillThread.

Referenced by FFTModel::getError().

◆ getFillCompletion()

int FFTDataServer::getFillCompletion ( ) const

◆ getFillExtent()

int FFTDataServer::getFillExtent ( ) const

◆ operator=()

FFTDataServer& FFTDataServer::operator= ( const FFTDataServer )
private

◆ getCacheReader()

◆ getCacheWriter()

FFTCacheWriter* FFTDataServer::getCacheWriter ( int  x,
int &  col 
)
inlineprivate

◆ haveCache()

bool FFTDataServer::haveCache ( int  x)
inlineprivate

Definition at line 221 of file FFTDataServer.h.

References m_caches, and m_cacheWidthPower.

Referenced by isColumnReady().

◆ makeCache()

◆ makeCacheReader()

bool FFTDataServer::makeCacheReader ( int  c)
private

◆ getStorageAdvice()

void FFTDataServer::getStorageAdvice ( int  w,
int  h,
bool &  memory,
bool &  compact 
)
private

◆ deleteProcessingData()

void FFTDataServer::deleteProcessingData ( )
private

Definition at line 621 of file FFTDataServer.cpp.

References fftf_destroy_plan, fftf_free, m_fftInput, m_fftOutput, m_fftPlan, and m_workbuffer.

Referenced by resume(), and ~FFTDataServer().

◆ fillColumn()

◆ fillComplete()

void FFTDataServer::fillComplete ( )
private

Definition at line 1379 of file FFTDataServer.cpp.

References m_caches.

Referenced by FFTDataServer::FillThread::run().

◆ generateFileBasename() [1/2]

QString FFTDataServer::generateFileBasename ( ) const
private

◆ generateFileBasename() [2/2]

QString FFTDataServer::generateFileBasename ( const DenseTimeValueModel model,
int  channel,
WindowType  windowType,
int  windowSize,
int  windowIncrement,
int  fftSize,
bool  polar 
)
staticprivate

Definition at line 1423 of file FFTDataServer.cpp.

References XmlExportable::getObjectExportId().

◆ findServer()

FFTDataServer * FFTDataServer::findServer ( QString  n)
staticprivate

Definition at line 228 of file FFTDataServer.cpp.

References claimInstance(), and m_servers.

Referenced by getInstance().

◆ purgeLimbo()

void FFTDataServer::purgeLimbo ( int  maxSize = 3)
staticprivate

Definition at line 378 of file FFTDataServer.cpp.

References m_releasedServers, and m_servers.

Referenced by getStorageAdvice(), and releaseInstance().

◆ claimInstance() [2/2]

void FFTDataServer::claimInstance ( FFTDataServer server,
bool  needLock 
)
staticprivate

Definition at line 261 of file FFTDataServer.cpp.

References m_releasedServers, m_serverMapMutex, and m_servers.

◆ releaseInstance() [2/2]

void FFTDataServer::releaseInstance ( FFTDataServer server,
bool  needLock 
)
staticprivate

!! if (server->m_lastUsedCache == -1) { // never used #ifdef DEBUG_FFT_SERVER std::cerr << "FFTDataServer::releaseInstance: instance " << server << " has never been used, erasing" << std::endl; #endif delete server; m_servers.erase(i); } else {

!! }

Definition at line 306 of file FFTDataServer.cpp.

References m_releasedServers, m_serverMapMutex, m_servers, purgeLimbo(), and suspend().

Member Data Documentation

◆ m_fileBaseName

QString FFTDataServer::m_fileBaseName
private

Definition at line 132 of file FFTDataServer.h.

Referenced by makeCache().

◆ m_model

const DenseTimeValueModel* FFTDataServer::m_model
private

◆ m_channel

int FFTDataServer::m_channel
private

Definition at line 134 of file FFTDataServer.h.

Referenced by fillColumn(), generateFileBasename(), and getChannel().

◆ m_windower

Window<fftsample> FFTDataServer::m_windower
private

Definition at line 136 of file FFTDataServer.h.

Referenced by fillColumn(), generateFileBasename(), and getWindowType().

◆ m_windowSize

int FFTDataServer::m_windowSize
private

Definition at line 138 of file FFTDataServer.h.

Referenced by FFTDataServer(), fillColumn(), generateFileBasename(), and getWindowSize().

◆ m_windowIncrement

int FFTDataServer::m_windowIncrement
private

◆ m_fftSize

int FFTDataServer::m_fftSize
private

Definition at line 140 of file FFTDataServer.h.

Referenced by FFTDataServer(), fillColumn(), generateFileBasename(), and getFFTSize().

◆ m_polar

bool FFTDataServer::m_polar
private

◆ m_width

◆ m_height

◆ m_cacheWidth

int FFTDataServer::m_cacheWidth
private

Definition at line 145 of file FFTDataServer.h.

Referenced by FFTDataServer(), and makeCache().

◆ m_cacheWidthPower

int FFTDataServer::m_cacheWidthPower
private

Definition at line 146 of file FFTDataServer.h.

Referenced by FFTDataServer(), getCacheReader(), getCacheWriter(), and haveCache().

◆ m_cacheWidthMask

int FFTDataServer::m_cacheWidthMask
private

Definition at line 147 of file FFTDataServer.h.

Referenced by FFTDataServer(), fillColumn(), getCacheReader(), and getCacheWriter().

◆ m_caches

CacheVector FFTDataServer::m_caches
private

◆ m_cacheVectorLock

QReadWriteLock FFTDataServer::m_cacheVectorLock
private

◆ m_cacheCreationMutex

QMutex FFTDataServer::m_cacheCreationMutex
private

Definition at line 168 of file FFTDataServer.h.

Referenced by makeCache().

◆ m_criteria

StorageAdviser::Criteria FFTDataServer::m_criteria
private

Definition at line 229 of file FFTDataServer.h.

Referenced by FFTDataServer(), and getStorageAdvice().

◆ m_fftBuffersLock

QMutex FFTDataServer::m_fftBuffersLock
private

◆ m_condition

QWaitCondition FFTDataServer::m_condition
private

Definition at line 234 of file FFTDataServer.h.

Referenced by resume(), FFTDataServer::FillThread::run(), and ~FFTDataServer().

◆ m_fftInput

fftsample* FFTDataServer::m_fftInput
private

Definition at line 236 of file FFTDataServer.h.

Referenced by deleteProcessingData(), FFTDataServer(), and fillColumn().

◆ m_fftOutput

fftf_complex* FFTDataServer::m_fftOutput
private

Definition at line 237 of file FFTDataServer.h.

Referenced by deleteProcessingData(), FFTDataServer(), and fillColumn().

◆ m_workbuffer

float* FFTDataServer::m_workbuffer
private

Definition at line 238 of file FFTDataServer.h.

Referenced by deleteProcessingData(), FFTDataServer(), and fillColumn().

◆ m_fftPlan

fftf_plan FFTDataServer::m_fftPlan
private

Definition at line 239 of file FFTDataServer.h.

Referenced by deleteProcessingData(), FFTDataServer(), and fillColumn().

◆ m_exiting

bool FFTDataServer::m_exiting
private

Definition at line 261 of file FFTDataServer.h.

Referenced by FFTDataServer::FillThread::run(), and ~FFTDataServer().

◆ m_suspended

bool FFTDataServer::m_suspended
private

◆ m_fillThread

FillThread* FFTDataServer::m_fillThread
private

◆ m_error

◆ m_servers

FFTDataServer::ServerMap FFTDataServer::m_servers
staticprivate

◆ m_releasedServers

FFTDataServer::ServerQueue FFTDataServer::m_releasedServers
staticprivate

Definition at line 284 of file FFTDataServer.h.

Referenced by claimInstance(), modelAboutToBeDeleted(), purgeLimbo(), and releaseInstance().

◆ m_serverMapMutex

QMutex FFTDataServer::m_serverMapMutex
staticprivate

The documentation for this class was generated from the following files: