Brief description of class still missing. More...
#include <WaveformConsole.h>
Public Slots | |
| void | agc () |
| void | convolution () |
| void | correlations () |
| void | cut () |
| void | decimateAmplitude () |
| void | decimateTime () |
| void | filter () |
| void | merge () |
| void | multiply () |
| void | normalizedCorrelations () |
| void | overSample () |
| void | revert () |
| void | rotate () |
| void | shift () |
| void | stalta () |
| void | stddevClip () |
| void | subtractSignals () |
| void | subtractValue () |
| void | taper () |
| void | waveletTransform () |
| void | whiten () |
Public Member Functions | |
| void | addActions (QMenu *m) |
| SubPoolWindow * | currentSubPool () const |
| void | setCurrentSubPool (SubPoolWindow *w) |
| WaveformConsole (QWidget *parent=0, Qt::WindowFlags f=0) | |
| ~WaveformConsole () | |
Brief description of class still missing.
Full description of class still missing
| WaveformConsole::WaveformConsole | ( | QWidget * | parent = 0, |
| Qt::WindowFlags | f = 0 |
||
| ) |
Description of constructor still missing
References TRACE.
: QWidget(parent, f)
{
TRACE;
setupUi(this);
commandHistory->setFontFamily("Monospace");
_subPoolWin=0;
stepBut->setMenu(new QMenu(this));
runBut->setEnabled(false);
stepBut->setEnabled(false);
Settings::splitter(splitter, "WaveformConsole::splitter");
Settings::getWidget(this, "WaveformConsole", false);
}
| void WaveformConsole::addActions | ( | QMenu * | m | ) |
References agc(), convolution(), correlations(), cut(), decimateAmplitude(), decimateTime(), filter(), merge(), multiply(), normalizedCorrelations(), overSample(), revert(), rotate(), shift(), stalta(), stddevClip(), subtractSignals(), subtractValue(), taper(), QGpCoreTools::tr(), TRACE, waveletTransform(), and whiten().
{
TRACE;
QAction * a;
a=new QAction(tr("&Subtract value"), this);
a->setObjectName("SubtractValue");
a->setShortcut(tr("Ctrl+Alt+S"));
a->setStatusTip(tr("Subtraction by a constant, use for DC removal"));
connect(a, SIGNAL(triggered()), this, SLOT(subtractValue()));
m->addAction(a);
a=new QAction(tr("Subtract signals"), this);
a->setObjectName("S&ubtractSignals");
a->setShortcut(tr("Ctrl+Alt+Shift+S"));
a->setStatusTip(tr("Subtract signals by other signals"));
connect(a, SIGNAL(triggered()), this, SLOT(subtractSignals()));
m->addAction(a);
a=new QAction(tr("Multipl&y"), this);
a->setObjectName("Multiply");
a->setShortcut(tr("Ctrl+Alt+Y"));
a->setStatusTip(tr("Multiply amplitudes by a constant"));
connect(a, SIGNAL(triggered()), this, SLOT(multiply()));
m->addAction(a);
a=new QAction(tr("&Filter"), this);
a->setObjectName("Filter");
a->setShortcut(tr("Ctrl+Alt+F"));
a->setStatusTip(tr("Frequency filters"));
connect(a, SIGNAL(triggered()), this, SLOT(filter()));
m->addAction(a);
a=new QAction(tr("A&GC"), this);
a->setObjectName("AGC");
a->setShortcut(tr("Ctrl+Alt+A"));
a->setStatusTip(tr("Automatic gain control"));
connect(a, SIGNAL(triggered()), this, SLOT(agc()));
m->addAction(a);
a=new QAction(tr("&Whiten"), this);
a->setObjectName("Whiten");
a->setShortcut(tr("Ctrl+Alt+W"));
a->setStatusTip(tr("Whiten spectra"));
connect(a, SIGNAL(triggered()), this, SLOT(whiten()));
m->addAction(a);
a=new QAction(tr("Cl&ip"), this);
a->setObjectName("Clip");
a->setShortcut(tr("Ctrl+Alt+L"));
a->setStatusTip(tr("Clip all events with an amplitude over 3 standard deviations."));
connect(a, SIGNAL(triggered()), this, SLOT(stddevClip()));
m->addAction(a);
a=new QAction(tr("&Phase shift"), this);
a->setObjectName("Shift");
a->setShortcut(tr("Ctrl+Alt+P"));
a->setStatusTip(tr("Shift the signals by a fraction of the sampling period (Fourier interpolation)."));
connect(a, SIGNAL(triggered()), this, SLOT(shift()));
m->addAction(a);
a=new QAction(tr("&Over sample"), this);
a->setObjectName("OverSample");
a->setShortcut(tr("Ctrl+Alt+O"));
a->setStatusTip(tr("Multiply the sampling frequency by any factor greater than 1."));
connect(a, SIGNAL(triggered()), this, SLOT(overSample()));
m->addAction(a);
a=new QAction(tr("&Taper"), this);
a->setObjectName("Taper");
a->setShortcut(tr("Ctrl+Alt+T"));
a->setStatusTip(tr("Apply a taper to all signals of the current viewer (in time domain)"));
connect(a, SIGNAL(triggered()), this, SLOT(taper()));
m->addAction(a);
a=new QAction(tr("&Cut"), this);
a->setObjectName("Cut");
a->setShortcut(tr("Ctrl+Alt+C"));
a->setStatusTip(tr("Cut signals of the current viewer (in time domain)"));
connect(a, SIGNAL(triggered()), this, SLOT(cut()));
m->addAction(a);
a=new QAction(tr("&Merge"), this);
a->setObjectName("Merge");
a->setShortcut(tr("Ctrl+Alt+M"));
a->setStatusTip(tr("Merge signals of the current viewer (in time domain)"));
connect(a, SIGNAL(triggered()), this, SLOT(merge()));
m->addAction(a);
a=new QAction(tr("Decimate amplitu&de"), this);
a->setObjectName("DecimateAmplitude");
a->setShortcut(tr("Ctrl+Alt+I"));
a->setStatusTip(tr("Reduce amplitude sampling, may also binarize signals"));
connect(a, SIGNAL(triggered()), this, SLOT(decimateAmplitude()));
m->addAction(a);
a=new QAction(tr("Decimate tim&e"), this);
a->setObjectName("DecimateTime");
a->setShortcut(tr("Ctrl+Alt+E"));
a->setStatusTip(tr("Reduce frequency sampling (including anti-aliasing filter)"));
connect(a, SIGNAL(triggered()), this, SLOT(decimateTime()));
m->addAction(a);
m->addSeparator();
a=new QAction(tr("Wavelet tra&nsform"), this);
a->setObjectName("Wavelet");
a->setStatusTip(tr("Compute the convolution of the signals with the modified Morlet wavelet."));
connect(a, SIGNAL(triggered()), this, SLOT(waveletTransform()));
m->addAction(a);
a=new QAction(tr("STA/<A"), this);
a->setObjectName("STA_LTA");
a->setStatusTip(tr("Compute the Short Term Average over Long Term Average ratio (in time domain)"));
connect(a, SIGNAL(triggered()), this, SLOT(stalta()));
m->addAction(a);
m->addSeparator();
a=new QAction(tr("Rot&ate components"), this);
a->setObjectName("Rotate");
a->setStatusTip(tr("Rotate the components of the current viewer"));
connect(a, SIGNAL(triggered()), this, SLOT(rotate()));
m->addAction(a);
a=new QAction(tr("Co&rrelations"), this);
a->setObjectName("Correlations");
a->setStatusTip(tr("Compute all possible correlations (all pairs of signals or with one reference signal)."));
connect(a, SIGNAL(triggered()), this, SLOT(correlations()));
m->addAction(a);
a=new QAction(tr("Normali&zed correlations"), this);
a->setObjectName("NormalizedCorrelations");
a->setStatusTip(tr("Compute all possible normalized correlations (all pairs of signals or with one reference signal)."));
connect(a, SIGNAL(triggered()), this, SLOT(normalizedCorrelations()));
m->addAction(a);
a=new QAction(tr("Con&volution"), this);
a->setObjectName("Convolution");
a->setStatusTip(tr("Compute products of convolution (with one reference signal)."));
connect(a, SIGNAL(triggered()), this, SLOT(convolution()));
m->addAction(a);
m->addSeparator();
a=new QAction(tr("Revert to original"), this);
a->setObjectName("Revert");
a->setStatusTip(tr("Revert to original signals. To undo one single step use 'Waveform console'."));
connect(a, SIGNAL(triggered()), this, SLOT(revert()));
m->addAction(a);
}
| void WaveformConsole::agc | ( | ) | [slot] |
References GeopsyCore::SignalProcess::agc(), GeopsyGui::SubPoolWindow::signalProcess(), TRACE, and w.
Referenced by addActions().
| void WaveformConsole::convolution | ( | ) | [slot] |
References GeopsyCore::SignalProcess::convolution(), Convolution::setSubPool(), Convolution::signalIndex(), GeopsyGui::SubPoolWindow::signalProcess(), GeopsyGui::SubPoolWindow::subPool(), and TRACE.
Referenced by addActions().
{
TRACE;
if(!_subPoolWin) return;
Convolution * d=new Convolution(this);
Settings::getWidget(d);
SubSignalPool& subPool=_subPoolWin->subPool();
d->setSubPool(&subPool);
if(d->exec()==QDialog::Accepted) {
Settings::setWidget(d);
_subPoolWin->signalProcess()->convolution(d->signalIndex());
processUpdate();
}
delete d;
}
| void WaveformConsole::correlations | ( | ) | [slot] |
References GeopsyCore::SignalProcess::correlations(), Correlations::setSubPool(), GeopsyGui::SubPoolWindow::signalProcess(), GeopsyGui::SubPoolWindow::subPool(), and TRACE.
Referenced by addActions().
{
TRACE;
if(!_subPoolWin) return;
Correlations * d=new Correlations(this);
Settings::getWidget(d);
SubSignalPool& subPool=_subPoolWin->subPool();
d->setSubPool(&subPool);
if(d->exec()==QDialog::Accepted) {
Settings::setWidget(d);
double tw=d->maximumDelay->text().toDouble();
if(d->referenceSignal->isChecked()) {
_subPoolWin->signalProcess()->correlations(tw, d->signalList->currentIndex());
} else {
_subPoolWin->signalProcess()->correlations(tw);
}
processUpdate();
}
delete d;
}
| SubPoolWindow* WaveformConsole::currentSubPool | ( | ) | const [inline] |
{return _subPoolWin;}
| void WaveformConsole::cut | ( | ) | [slot] |
References GeopsyCore::SignalProcess::cut(), GeopsyGui::SubPoolWindow::signalProcess(), GeopsyGui::SubPoolWindow::subPool(), and TRACE.
Referenced by addActions().
{
TRACE;
if(!_subPoolWin) return ;
CutSignal * d=new CutSignal(this);
d->timeLimits->setPicks(&_subPoolWin->subPool());
Settings::getWidget(d);
d->timeLimits->updateAllFields();
if(d->exec()==QDialog::Accepted) {
Settings::setWidget(d);
TimeRangeParameters tlparam;
d->timeLimits->getParameters(tlparam);
_subPoolWin->signalProcess()->cut(tlparam);
processUpdate();
}
delete d;
}
| void WaveformConsole::decimateAmplitude | ( | ) | [slot] |
References GeopsyCore::SignalProcess::decimateAmplitude(), GeopsyGui::SubPoolWindow::signalProcess(), and TRACE.
Referenced by addActions().
{
TRACE;
if(!_subPoolWin) return ;
DecimateAmplitude * d=new DecimateAmplitude(this);
Settings::getWidget(d);
if(d->exec()==QDialog::Accepted) {
Settings::setWidget(d);
double maxRef;
if(d->maxType->currentIndex()==0)
maxRef=d->maxRef->text().toDouble();
else
maxRef=-1;
_subPoolWin->signalProcess()->decimateAmplitude(d->maxCount->text().toInt(), maxRef);
processUpdate();
}
delete d;
}
| void WaveformConsole::decimateTime | ( | ) | [slot] |
References GeopsyCore::SignalProcess::decimateTime(), MSG_ID, GeopsyGui::SubPoolWindow::signalProcess(), QGpCoreTools::tr(), and TRACE.
Referenced by addActions().
{
TRACE;
if(!_subPoolWin) return ;
bool ok;
QString text=Settings::getText(QApplication::activeWindow(),
tr("Decimate time"),
tr("Decimation factor (integer greater than 1, anti-aliasing filter included)"),
QLineEdit::Normal, "2", &ok);
if(!ok) return;
int nSamples=text.toInt(&ok);
if(!ok || nSamples<=1) {
Message::warning(MSG_ID, tr("Decimate time"), tr("Decimation factor must be an integer greater than 1"));
return;
}
_subPoolWin->signalProcess()->decimateTime(nSamples);
processUpdate();
}
| void WaveformConsole::filter | ( | ) | [slot] |
References GeopsyCore::SignalProcess::filter(), GeopsyGui::FilterParameterWidget::getParameters(), QGpGuiTools::Dialog::setMainWidget(), GeopsyGui::SubPoolWindow::signalProcess(), QGpCoreTools::tr(), TRACE, and GeopsyGui::FilterParameterWidget::updateAllFields().
Referenced by addActions().
{
TRACE;
if(!_subPoolWin) return;
Dialog * d=new Dialog(this);
d->setWindowTitle(tr("Frequency filter"));
FilterParameterWidget * dw=new FilterParameterWidget();
d->setMainWidget(dw);
Settings::getWidget(d, "FilterParameterWidget");
dw->updateAllFields();
if(d->exec()==QDialog::Accepted) {
Settings::setWidget(d, "FilterParameterWidget");
FilterParameters param;
dw->getParameters(param);
_subPoolWin->signalProcess()->filter(param);
processUpdate();
}
delete d;
return;
}
| void WaveformConsole::merge | ( | ) | [slot] |
References GeopsyCore::SignalProcess::merge(), GeopsyCore::SignalProcess::mergeStations(), MSG_ID, GeopsyGui::SubPoolWindow::signalProcess(), QGpCoreTools::tr(), and TRACE.
Referenced by addActions().
{
TRACE;
MessageContext mc;
if(!_subPoolWin) return ;
switch (Message::question(MSG_ID, tr("Merging signals"),
tr("Do you want to merge signals by station and component?"),
Message::yes(), Message::no(),
Message::cancel())) {
case Message::Answer0:
_subPoolWin->signalProcess()->mergeStations();
processUpdate();
break;
case Message::Answer1:
_subPoolWin->signalProcess()->merge();
processUpdate();
break;
default:
break;
}
}
| void WaveformConsole::multiply | ( | ) | [slot] |
References GeopsyCore::SignalProcess::multiply(), GeopsyGui::SubPoolWindow::signalProcess(), QGpCoreTools::tr(), and TRACE.
Referenced by addActions().
{
TRACE;
if(!_subPoolWin) return ;
bool ok;
QString text=Settings::getText(QApplication::activeWindow(),
tr("Multiply signals"),
tr("Multiplication factor"),
QLineEdit::Normal, "1.00", &ok);
if(!ok) return;
_subPoolWin->signalProcess()->multiply(text.toDouble());
processUpdate();
}
| void WaveformConsole::normalizedCorrelations | ( | ) | [slot] |
References GeopsyCore::SignalProcess::normalizedCorrelations(), Correlations::setSubPool(), GeopsyGui::SubPoolWindow::signalProcess(), GeopsyGui::SubPoolWindow::subPool(), and TRACE.
Referenced by addActions().
{
TRACE;
if(!_subPoolWin) return;
Correlations * d=new Correlations(this);
Settings::getWidget(d);
SubSignalPool& subPool=_subPoolWin->subPool();
d->setSubPool(&subPool);
if(d->exec()==QDialog::Accepted) {
Settings::setWidget(d);
double tw=d->maximumDelay->text().toDouble();
if(d->referenceSignal->isChecked()) {
_subPoolWin->signalProcess()->normalizedCorrelations(tw, d->signalList->currentIndex());
} else {
_subPoolWin->signalProcess()->normalizedCorrelations(tw);
}
processUpdate();
}
delete d;
}
| void WaveformConsole::overSample | ( | ) | [slot] |
References MSG_ID, GeopsyCore::SignalProcess::overSample(), GeopsyGui::SubPoolWindow::signalProcess(), QGpCoreTools::tr(), and TRACE.
Referenced by addActions().
{
TRACE;
if(!_subPoolWin) return ;
bool ok;
QString text=Settings::getText(QApplication::activeWindow(),
tr("Over sample"),
tr("Sampling frequency factor (greater than 1)"),
QLineEdit::Normal, "2.00", &ok);
if(!ok) return;
double factor= text.toDouble(&ok);
if(!ok || factor <=1) {
Message::warning(MSG_ID, tr("Over sample"), tr("Sampling factor must be greater than 1"));
return;
}
_subPoolWin->signalProcess()->overSample(factor);
processUpdate();
}
| void WaveformConsole::revert | ( | ) | [slot] |
References GeopsyCore::SignalProcess::restoreStep(), GeopsyGui::SubPoolWindow::signalProcess(), and TRACE.
Referenced by addActions().
{
TRACE;
if(!_subPoolWin) return;
_subPoolWin->signalProcess()->restoreStep(0);
processUpdate();
}
| void WaveformConsole::rotate | ( | ) | [slot] |
References GeopsyCore::SubSignalPool::associate3Components(), RotateComponents::parameters(), GeopsyCore::SignalProcess::rotateComponents(), GeopsyGui::SubPoolWindow::signalProcess(), GeopsyGui::SubPoolWindow::subPool(), GeopsyGui::SubPoolWindow::subPoolUpdate(), TRACE, and RotateComponents::updateAll().
Referenced by addActions().
{
TRACE;
if(!_subPoolWin) return ;
if(!_subPoolWin->subPool().associate3Components()) return ;
_subPoolWin->subPoolUpdate();
RotateComponents * d=new RotateComponents(this);
Settings::getWidget(d);
d->updateAll();
if(d->exec()==QDialog::Accepted) {
Settings::setWidget(d);
_subPoolWin->signalProcess()->rotateComponents(d->parameters());
processUpdate();
}
delete d;
}
| void WaveformConsole::setCurrentSubPool | ( | SubPoolWindow * | w | ) |
References GeopsyCore::SignalProcess::history(), GeopsyGui::SubPoolWindow::signalProcess(), GeopsyCore::SignalProcess::steps(), GeopsyGui::SubPoolWindow::tool(), and TRACE.
Referenced by GeopsyMainWindow::activeWindowChanged().
{
TRACE;
if(w && !w->tool()) {
runBut->setEnabled(true);
stepBut->setEnabled(true);
if(w->signalProcess()) {
commandHistory->setPlainText(w->signalProcess()->history());
setSteps(w->signalProcess()->steps());
}
} else {
commandHistory->clear();
runBut->setEnabled(false);
stepBut->setEnabled(false);
}
_subPoolWin=w;
}
| void WaveformConsole::shift | ( | ) | [slot] |
References GeopsyCore::SignalProcess::shift(), GeopsyGui::SubPoolWindow::signalProcess(), QGpCoreTools::tr(), and TRACE.
Referenced by addActions().
{
TRACE;
if(!_subPoolWin) return ;
bool ok;
QString text=Settings::getText(QApplication::activeWindow(),
tr("Phase shift"),
tr("Time delay (seconds), if positive, the signal is shifted in the past."),
QLineEdit::Normal, "0.001", &ok);
if(!ok) return;
_subPoolWin->signalProcess()->shift(text.toDouble());
processUpdate();
}
| void WaveformConsole::stalta | ( | ) | [slot] |
References GeopsyGui::SignalLayer::setOffset(), GraphicWindow::signalLayer(), GeopsyGui::SubPoolWindow::signalProcess(), GeopsyCore::SignalProcess::stalta(), TRACE, and w.
Referenced by addActions().
{
TRACE;
if(!_subPoolWin) return ;
StaLta * d=new StaLta(this);
Settings::getWidget(d);
if(d->exec()==QDialog::Accepted) {
Settings::setWidget(d);
_subPoolWin->signalProcess()->stalta(d->staLength->value(), d->ltaLength->value());
GraphicWindow * w=qobject_cast<GraphicWindow *>(_subPoolWin);
if(w) {
w->signalLayer()->setOffset(SignalLayer::NoOffset);
}
processUpdate();
}
delete d;
}
| void WaveformConsole::stddevClip | ( | ) | [slot] |
References GeopsyGui::SubPoolWindow::signalProcess(), GeopsyCore::SignalProcess::stddevClip(), QGpCoreTools::tr(), and TRACE.
Referenced by addActions().
{
TRACE;
if(!_subPoolWin) return;
bool ok;
QString text=Settings::getText(QApplication::activeWindow(),
tr("Clip signals"),
tr("Clip above standard deviation times"),
QLineEdit::Normal, "3.00", &ok);
if(!ok) return;
_subPoolWin->signalProcess()->stddevClip(text.toDouble());
processUpdate();
}
| void WaveformConsole::subtractSignals | ( | ) | [slot] |
References SubtractSignals::group(), MSG_ID, GeopsyCore::AbstractSignalGroup::pathName(), SubtractSignals::setSubPool(), GeopsyGui::SubPoolWindow::signalProcess(), GeopsyGui::SubPoolWindow::subPool(), GeopsyCore::SignalProcess::subtractSignal(), GeopsyCore::SignalProcess::subtractSignals(), QGpCoreTools::tr(), and TRACE.
Referenced by addActions().
{
TRACE;
if(!_subPoolWin) return;
SubtractSignals * d=new SubtractSignals(this);
Settings::getWidget(d);
SubSignalPool& subPool=_subPoolWin->subPool();
d->setSubPool(&subPool);
if(d->exec()==QDialog::Accepted) {
Settings::setWidget(d);
if(d->bySignal->isChecked()) {
_subPoolWin->signalProcess()->subtractSignal(d->signalList->currentIndex());
} else {
AbstractSignalGroup * g=d->group();
if(g) {
_subPoolWin->signalProcess()->subtractSignals(g->pathName());
} else {
Message::warning(MSG_ID, tr("Subtract signals"), tr("No group was selected, nothing subtracted."));
}
}
processUpdate();
}
delete d;
}
| void WaveformConsole::subtractValue | ( | ) | [slot] |
References GeopsyGui::SubPoolWindow::signalProcess(), GeopsyCore::SignalProcess::subtractValue(), and TRACE.
Referenced by addActions().
{
TRACE;
if(!_subPoolWin) return;
SubtractValue * d=new SubtractValue(this);
Settings::getWidget(d);
if(d->exec()==QDialog::Accepted) {
Settings::setWidget(d);
_subPoolWin->signalProcess()->subtractValue(d->meanBut->isChecked() ? 0.0 : d->valEdit->text().toDouble());
processUpdate();
}
delete d;
}
| void WaveformConsole::taper | ( | ) | [slot] |
References GeopsyGui::SubPoolWindow::signalProcess(), GeopsyGui::SubPoolWindow::subPool(), GeopsyCore::SignalProcess::taper(), and TRACE.
Referenced by addActions().
{
TRACE;
if(!_subPoolWin) return ;
Taper * d=new Taper(this);
Settings::getWidget(d);
d->windowShape->updateAllFields();
d->timeLimits->setPicks(&_subPoolWin->subPool());
if(d->exec()==QDialog::Accepted) {
Settings::setWidget(d);
TimeRangeParameters tlparam;
d->timeLimits->getParameters(tlparam);
TaperParameters taperparam;
d->windowShape->getParameters(taperparam);
_subPoolWin->signalProcess()->taper(tlparam, taperparam);
processUpdate();
}
delete d;
}
| void WaveformConsole::waveletTransform | ( | ) | [slot] |
References GeopsyGui::MorletParameterWidget::getParameters(), QGpGuiTools::Dialog::setMainWidget(), GeopsyGui::SubPoolWindow::signalProcess(), QGpCoreTools::tr(), TRACE, GeopsyGui::MorletParameterWidget::updateAllFields(), and GeopsyCore::SignalProcess::waveletTransform().
Referenced by addActions().
{
TRACE;
if(!_subPoolWin) return;
Dialog * d=new Dialog(this);
d->setWindowTitle(tr("Wavelet transform"));
MorletParameterWidget * dw=new MorletParameterWidget;
d->setMainWidget(dw);
Settings::getWidget(d, "MorletParamWidget");
dw->updateAllFields();
if(d->exec()==QDialog::Accepted) {
Settings::setWidget(d, "MorletParamWidget");
MorletParameters param;
dw->getParameters(param);
_subPoolWin->signalProcess()->waveletTransform(param);
processUpdate();
}
delete d;
}
| void WaveformConsole::whiten | ( | ) | [slot] |
References GeopsyGui::SubPoolWindow::signalProcess(), TRACE, and GeopsyCore::SignalProcess::whiten().
Referenced by addActions().
{
TRACE;
if(!_subPoolWin) return;
_subPoolWin->signalProcess()->whiten();
processUpdate();
}