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().