void KstBindPowerSpectrum::setFrequency(KJS::ExecState *exec, const KJS::Value& value) { if (value.type() != KJS::NumberType) { KJS::Object eobj = KJS::Error::create(exec, KJS::TypeError); exec->setException(eobj); return; } KstPSDPtr d = makePSD(_d); if (d) { KstWriteLocker wl(d); d->setFreq(value.toNumber(exec)); } }
bool KstPsdDialog::editSingleObject(KstPSDPtr psPtr) { psPtr->writeLock(); KST::vectorList.lock().readLock(); KstVectorPtr v = *KST::vectorList.findTag(_w->_vector->selectedVector()); KST::vectorList.lock().unlock(); if (v) { // Can be null if edit multiple and it wasn't changed psPtr->setVector(v); } // get the values that need to be checked for consistency double pSampRate; int pFFTLen; if (_sampRateDirty) { pSampRate = _w->_kstFFTOptions->SampRate->text().toDouble(); } else { pSampRate = psPtr->freq(); } if (_fFTLenDirty) { pFFTLen = _w->_kstFFTOptions->FFTLen->text().toInt(); } else { pFFTLen = psPtr->len(); } if (!_w->_kstFFTOptions->checkGivenValues(pSampRate, pFFTLen)) { psPtr->unlock(); return false; } if (_sampRateDirty) { psPtr->setFreq(_w->_kstFFTOptions->SampRate->text().toDouble()); } if (_fFTLenDirty) { psPtr->setLen(_w->_kstFFTOptions->FFTLen->text().toInt()); } if (_vectorUnitsDirty) { psPtr->setVUnits(_w->_kstFFTOptions->VectorUnits->text()); } if (_rateUnitsDirty) { psPtr->setRUnits(_w->_kstFFTOptions->RateUnits->text()); } if (_apodizeDirty) { psPtr->setApodize(_w->_kstFFTOptions->Apodize->isChecked()); } if (_apodizeFxnDirty) { if (_editMultipleMode) { psPtr->setApodizeFxn(ApodizeFunction(_w->_kstFFTOptions->ApodizeFxn->currentIndex()-1)); } else { psPtr->setApodizeFxn(ApodizeFunction(_w->_kstFFTOptions->ApodizeFxn->currentIndex())); } } if (_gaussianSigmaDirty) { psPtr->setGaussianSigma(_editMultipleMode ? _w->_kstFFTOptions->Sigma->value() - 1 : _w->_kstFFTOptions->Sigma->value()); } if (_removeMeanDirty) { psPtr->setRemoveMean(_w->_kstFFTOptions->RemoveMean->isChecked()); } if (_interleavedDirty) { psPtr->setAverage(_w->_kstFFTOptions->Interleaved->isChecked()); } if (_outputDirty) { if (_editMultipleMode) { psPtr->setOutput(PSDType(_w->_kstFFTOptions->Output->currentIndex()-1)); } else { psPtr->setOutput(PSDType(_w->_kstFFTOptions->Output->currentIndex())); } } if (_interpolateHolesDirty) { psPtr->setInterpolateHoles(_w->_kstFFTOptions->InterpolateHoles->isChecked()); } psPtr->setRecursed(false); if (psPtr->recursion()) { psPtr->setRecursed(true); psPtr->unlock(); QMessageBox::critical(this, QObject::tr("Kst"), QObject::tr("There is a recursion resulting from the spectrum you entered.")); return false; } psPtr->unlock(); return true; }
void doTests() { KstVectorPtr vp = new KstVector(KstObjectTag("tempVector"), 10); for (int i = 0; i < 10; i++){ vp->value()[i] = i; } KstPSDPtr psd = new KstPSD(QString("psdTest"), vp, 0.0, false, 10, false, false, QString("vUnits"), QString("rUnits"), WindowUndefined, 0.0, PSDUndefined); doTest(psd->tagName() == "psdTest"); doTest(psd->vTag() == "tempVector"); doTest(psd->output() == PSDUndefined); doTest(!psd->apodize()); doTest(!psd->removeMean()); doTest(!psd->average()); doTest(psd->freq() == 0.0); doTest(psd->apodizeFxn() == WindowUndefined); doTest(psd->gaussianSigma() == 0); KstVectorPtr vpVX = psd->vX(); KstVectorPtr vpVY = psd->vY(); // until we call update the x and y vectors will be uninitialised and // and so they should be of length 1 and the value of vpVX[0] and // vpVX[0] should be NAN... doTestV(QString("vpVX->length()"), vpVX->length(), 1); doTestV(QString("vpVY->length()"), vpVY->length(), 1); doTestV(QString("vpVX->length()"), isnan(vpVX->value()[0]), 1); doTestV(QString("vpVY->length()"), isnan(vpVY->value()[0]), 1); doTest(psd->update(0) == KstObject::UPDATE); for(int j = 0; j < vpVX->length(); j++){ doTest(vpVX->value()[j] == 0); } psd->setOutput(PSDAmplitudeSpectralDensity); psd->setApodize(true); psd->setRemoveMean(true); psd->setAverage(true); psd->setFreq(0.1); psd->setApodizeFxn(WindowOriginal); psd->setGaussianSigma(0.2); doTest(psd->tagName() == "psdTest"); doTest(psd->vTag() == "tempVector"); doTest(psd->output() == PSDAmplitudeSpectralDensity); doTest(psd->apodize()); doTest(psd->removeMean()); doTest(psd->average()); doTest(psd->freq() == 0.1); doTest(psd->apodizeFxn() == WindowOriginal); doTest(psd->gaussianSigma() == 0.2); // doTest(psd->update(0) == KstObject::UPDATE); // QString ps = "PSD: " + psd->vTag(); // doTest(psd->propertyString() == ps); // doTest(!psd->curveHints().curveName() == ""); // printf("Curve name [%s]", kstCHL[0].curveName()); // printf("X Vector name [%s]", kstCHL[0].xVectorName()); // printf("Y Vector name [%s]", kstCHL[0].yVectorName()); KTempFile tf(locateLocal("tmp", "kst-csd"), "txt"); QFile *qf = tf.file(); QTextStream ts(qf); psd->save(ts, ""); QFile::remove(tf.name()); QDomNode n = makeDOMElement("psdDOMPsd", "psdDOMVector").firstChild(); QDomElement e = n.toElement(); KstPSDPtr psdDOM = new KstPSD(e); doTest(psdDOM->tagName() == "psdDOMPsd"); doTest(psdDOM->output() == PSDAmplitudeSpectralDensity); doTest(psdDOM->apodize()); doTest(psdDOM->removeMean()); doTest(psdDOM->average()); doTest(psdDOM->freq() == 128); doTest(psdDOM->apodizeFxn() == WindowOriginal); doTest(psdDOM->gaussianSigma() == 0.01); // KstVectorPtr vpVX = psdDOM->vX(); // for(int j = 0; j < vpVX->length(); j++){ // printf("[%d][%lf]", j, vpVX->value()[j]); // } // KstVectorPtr vpVY = psdDOM->vY(); }
void doTests() { KstVectorPtr vp = new KstVector(KstObjectTag::fromString("tempVector"), 10); for (int i = 0; i < 10; i++){ vp->value()[i] = i; } KstPSDPtr psd = new KstPSD(QString("psdTest"), vp, 0.0, false, 10, false, false, QString("vUnits"), QString("rUnits"), WindowUndefined, 0.0, PSDUndefined); doTest(psd->tagName() == "psdTest"); doTest(psd->vTag() == "tempVector"); doTest(psd->output() == PSDUndefined); doTest(!psd->apodize()); doTest(!psd->removeMean()); doTest(!psd->average()); doTest(psd->freq() == 0.0); doTest(psd->apodizeFxn() == WindowUndefined); doTest(psd->gaussianSigma() == 0); KstVectorPtr vpVX = psd->vX(); KstVectorPtr vpVY = psd->vY(); doTest(vpVX->length() == 1); doTest(vpVX->value()[0] != vpVX->value()[0]); doTest(vpVY->length() == 1); doTest(vpVY->value()[0] != vpVY->value()[0]); psd->writeLock(); doTest(psd->update(0) == KstObject::UPDATE); psd->unlock(); for(int j = 0; j < vpVX->length(); j++){ doTest(vpVX->value()[j] == 0); } psd->setOutput(PSDAmplitudeSpectralDensity); psd->setApodize(true); psd->setRemoveMean(true); psd->setAverage(true); psd->setFreq(0.1); psd->setApodizeFxn(WindowOriginal); psd->setGaussianSigma(0.2); doTest(psd->tagName() == "psdTest"); doTest(psd->vTag() == "tempVector"); doTest(psd->output() == PSDAmplitudeSpectralDensity); doTest(psd->apodize()); doTest(psd->removeMean()); doTest(psd->average()); doTest(psd->freq() == 0.1); doTest(psd->apodizeFxn() == WindowOriginal); doTest(psd->gaussianSigma() == 0.2); // doTest(psd->update(0) == KstObject::UPDATE); // QString ps = "PSD: " + psd->vTag(); // doTest(psd->propertyString() == ps); // doTest(!psd->curveHints().curveName() == ""); // printf("Curve name [%s]", kstCHL[0].curveName()); // printf("X Vector name [%s]", kstCHL[0].xVectorName()); // printf("Y Vector name [%s]", kstCHL[0].yVectorName()); QTemporaryFile tf; tf.open(); QTextStream ts(&tf); psd->save(ts, ""); QFile::remove(tf.fileName()); QDomNode n = makeDOMElement("psdDOMPsd", "psdDOMVector").firstChild(); QDomElement e = n.toElement(); KstPSDPtr psdDOM = new KstPSD(e); doTest(psdDOM->tagName() == "psdDOMPsd"); doTest(psdDOM->output() == PSDAmplitudeSpectralDensity); doTest(psdDOM->apodize()); doTest(psdDOM->removeMean()); doTest(psdDOM->average()); doTest(psdDOM->freq() == 128); doTest(psdDOM->apodizeFxn() == WindowOriginal); doTest(psdDOM->gaussianSigma() == 0.01); // KstVectorPtr vpVX = psdDOM->vX(); // for(int j = 0; j < vpVX->length(); j++){ // printf("[%d][%lf]", j, vpVX->value()[j]); // } // KstVectorPtr vpVY = psdDOM->vY(); }