Brief description of class still missing. More...
#include <RealTimeArrayManager.h>
Brief description of class still missing.
Full description of class still missing
Description of constructor still missing
References RealTimeArrayProcess, GeopsyCore::TimeRange::setEnd(), RealTimeArrayProcess::setFrequencyBands(), GeopsyCore::TimeRange::setStart(), and QGpCoreTools::Thread::start().
{ printf("RealTimeArrayManager %p\n",this); // Create as many processes as the number of processors //int maximumThreads=Thread::idealThreadCount(); int maximumThreads=1; if(maximumThreads<1) maximumThreads=1; // _threads is never modified in thread, only in main thread, hence no need for mutex for(int i=0; i<maximumThreads; i++) { RealTimeArrayProcess * t=new RealTimeArrayProcess(this, array); t->setObjectName(QString("arrayprocess%1").arg(i+1)); _threads.append(t); t->setFrequencyBands(&_bands); t->start(); } _array=array; // Get the minimum starting time double minTime=-1e99; for(ArrayStations::iterator it=_array->begin();it!=_array->end();it++) { double t=(*it)->minTime(); if(t>minTime) minTime=t; } _globalRange.setStart(minTime); _globalRange.setEnd(minTime); _active=false; }
Description of destructor still missing
{ clearTasks(); for(QList<RealTimeArrayProcess *>::iterator it=_threads.begin(); it!=_threads.end(); it++) { (*it)->terminate(); } _event.wakeAll(); for(QList<RealTimeArrayProcess *>::iterator it=_threads.begin(); it!=_threads.end(); it++) { (*it)->wait(); } printf("~RealTimeArrayManager %p\n",this); }
void RealTimeArrayManager::createTasks | ( | ) |
References GeopsyCore::TimeRangeList::add(), GeopsyCore::TimeRangeList::begin(), ArrayCore::FrequencyBand::center(), GeopsyCore::TimeRange::end(), GeopsyCore::TimeRangeList::end(), GeopsyCore::SparseKeepSignal::initValues(), GeopsyCore::SparseTimeRange::intersection(), GeopsyCore::TimeRangeList::isEmpty(), GeopsyCore::SparseTimeRange::printDebug(), ArrayCore::FrequencyBand::setCenter(), ArrayCore::FrequencyBand::setRelativeWidth(), GeopsyCore::TimeRangeList::timeRange(), and QGpCoreTools::SamplingParameters::value().
Referenced by start().
{ if( !_active || _lastFrequencyTimes.isEmpty()) return; // Get minimum lastFrequency time double minLastFrequencyTime=_globalRange.end(); for(int i=_lastFrequencyTimes.count()-1;i>=0;i--) { if(_lastFrequencyTimes[i]<minLastFrequencyTime) { minLastFrequencyTime=_lastFrequencyTimes[i]; } } // Get the minimum end time (to skip gap computation at the end of signals) double minEndTime=_globalRange.end(); for(ArrayStations::iterator it=_array->begin();it!=_array->end();it++) { double t=(*it)->maxTime(); if(t<minEndTime) minEndTime=t; } // Get gaps between minLastFrequencyTime and minEndTime // Horizontal components are ignored for now TimeRange globalProcessRange(minLastFrequencyTime, minEndTime); SparseTimeRange globalSparseRange(globalProcessRange); //printf("############################################\n"); //printf("**** global\n"); printf("From %lf to %lf\n",minLastFrequencyTime, globalProcessRange.end()); for(int i=_array->count()-1;i>=0;i--) { globalSparseRange=globalSparseRange.intersection(_array->at(i)->timeRange(globalProcessRange)); } globalSparseRange.printDebug(); SparseKeepSignal keep(globalSparseRange); // Adjust range taking sampling of all stations into account for(int i=_array->count()-1;i>=0;i--) { _array->at(i)->setSampling(&keep); } // Set values of keep keep.initValues(1); for(int i=_array->count()-1;i>=0;i--) { _array->at(i)->setKeep(&keep, _windowingParameters, i); } // Calculate time windows for each frequency FrequencyBand fb; fb.setRelativeWidth(_frequencyBandWidth); for(int i=_lastFrequencyTimes.count()-1;i>=0;i--) { TimeRangeList wList; fb.setCenter(_samplingParameters.value(i)); wList.add(fb.center(), _windowingParameters, keep, TimeRange(_lastFrequencyTimes[i], _globalRange.end()), 0); if(!wList.isEmpty()) { //printf("Enqueue...\n"); for(TimeRangeList::iterator it=wList.begin();it!=wList.end();it++) { addTask(new ArrayTask(i, fb, **it) ); } _lastFrequencyTimes[i]=wList.timeRange().end(); } } }
void RealTimeArrayManager::createTasks | ( | ) |
IrregularGrid2D RealTimeArrayManager::fkDispersion | ( | ) | const [inline] |
{return _fkDispersion;}
IrregularGrid2D RealTimeArrayManager::fkDispersion | ( | ) | const [inline] |
{return _fkDispersion;}
IrregularGrid2D RealTimeArrayManager::hrfkDispersion | ( | ) | const [inline] |
{return _hrfkDispersion;}
IrregularGrid2D RealTimeArrayManager::hrfkDispersion | ( | ) | const [inline] |
{return _hrfkDispersion;}
bool RealTimeArrayManager::isActive | ( | ) | const [inline] |
{return _active;}
bool RealTimeArrayManager::isActive | ( | ) | const [inline] |
{return _active;}
double RealTimeArrayManager::maximumTime | ( | ) | const [inline] |
References GeopsyCore::TimeRange::end().
{return _globalRange.end();}
double RealTimeArrayManager::maximumTime | ( | ) | const [inline] |
References GeopsyCore::TimeRange::end().
{return _globalRange.end();}
void RealTimeArrayManager::queueChanged | ( | int | size | ) | [signal] |
void RealTimeArrayManager::queueChanged | ( | int | size | ) | [signal] |
void RealTimeArrayManager::setFrequencyBandWidth | ( | double | fbw | ) |
void RealTimeArrayManager::setFrequencyBandWidth | ( | double | fbw | ) |
void RealTimeArrayManager::setKmax | ( | double | k | ) |
void RealTimeArrayManager::setKmin | ( | double | k | ) |
void RealTimeArrayManager::setMaximumSlowness | ( | double | s | ) |
void RealTimeArrayManager::setMaximumTime | ( | double | t | ) |
void RealTimeArrayManager::setMaximumTime | ( | double | t | ) |
References GeopsyCore::TimeRange::end(), and GeopsyCore::TimeRange::setEnd().
void RealTimeArrayManager::setSamplingParameters | ( | const SamplingParameters & | p | ) |
References QGpCoreTools::SamplingParameters::count(), RealTimeHistogram::init(), QGpCoreTools::LinearScale, and start().
{ bool wasActive=_active; if(wasActive) clearTasks(); _samplingParameters=p; _lastFrequencyTimes.resize(_samplingParameters.count()); _fkDispersion.init(p, 200, 0.0005, 0.01, LinearScale); _hrfkDispersion.init(p, 200, 0.0005, 0.01, LinearScale); _spacDispersion.init(p, 200, 0.0005, 0.01, LinearScale); _bands.resize(_samplingParameters.count()); if(wasActive) start(); }
void RealTimeArrayManager::setSamplingParameters | ( | const SamplingParameters & | p | ) |
void RealTimeArrayManager::setWavenumberRange | ( | double | kmin, |
double | kmax | ||
) |
void RealTimeArrayManager::setWindowLenght | ( | double | l | ) |
void RealTimeArrayManager::setWindowLenght | ( | double | l | ) |
References GeopsyCore::WindowingParameters::setPeriodCount(), and start().
Referenced by ProcessUnit::setArrayWindowLength().
{ bool wasActive=_active; if(wasActive) clearTasks(); _windowingParameters.setPeriodCount(l); if(wasActive) start(); }
IrregularGrid2D RealTimeArrayManager::spacDispersion | ( | ) | const [inline] |
{return _spacDispersion;}
IrregularGrid2D RealTimeArrayManager::spacDispersion | ( | ) | const [inline] |
{return _spacDispersion;}
void RealTimeArrayManager::start | ( | ) |
References ArrayCore::FrequencyBand::center(), RealTimeHistogram::clear(), QGpCoreTools::SamplingParameters::count(), createTasks(), GeopsyCore::WindowingParameters::periodCount(), ArrayCore::FrequencyBand::setCenter(), ArrayCore::FrequencyBand::setRelativeWidth(), GeopsyCore::TimeRange::start(), and QGpCoreTools::SamplingParameters::value().
Referenced by setFrequencyBandWidth(), setKmax(), setKmin(), setMaximumSlowness(), setSamplingParameters(), setWavenumberRange(), and setWindowLenght().
{ // Clean result grids _fkDispersion.clear(); _hrfkDispersion.clear(); _spacDispersion.clear(); // Reset starting times for each frequency band for(int i=_lastFrequencyTimes.count()-1;i>=0;i--) { _lastFrequencyTimes[i]=_globalRange.start(); } // Cache frequency bands for each process int n=_samplingParameters.count(); for(int i=0; i<n; i++) { FrequencyBand fb; fb.setRelativeWidth(_frequencyBandWidth); fb.setCenter(_samplingParameters.value(i)); _bands[i].calculate(fb, _windowingParameters.periodCount()/fb.center()); } _active=true; createTasks(); }
void RealTimeArrayManager::start | ( | ) |
void RealTimeArrayManager::stop | ( | ) |
void RealTimeArrayManager::stop | ( | ) |
{ if(_active) { _active=false; clearTasks(); } }
RealTimeArrayProcess [friend] |
Referenced by RealTimeArrayManager().