QStringList KstIfaceImpl::createPowerSpectrum(const QString& name, const QString& vector, bool appodize, bool removeMean, int fftLength, const QString& rateUnits, double sampleRate, const QString& vectorUnits) { //get the vector KST::vectorList.lock().readLock(); KstVectorList::Iterator iter = KST::vectorList.findTag(vector); KST::vectorList.lock().unlock(); if (iter == KST::vectorList.end()) { return QStringList(); } //suggest a name if not supplied QString pstag_end; if (name.isEmpty()) pstag_end = vector; else pstag_end = name; //count number of power spectra and make a unique name KstPSDList pslist = kstObjectSubList<KstDataObject,KstPSD>(KST::dataObjectList); int i = pslist.count() + 1; QString stringnum = QString::number(i); QString pstag = stringnum + "-" + pstag_end; while (KstData::self()->dataTagNameNotUnique(pstag, false)) { stringnum.setNum(++i); pstag = stringnum + "-" + pstag_end; } KstPSDPtr powerspectrum = new KstPSD(pstag, *iter, sampleRate, true, fftLength, appodize, removeMean, vectorUnits, rateUnits, WindowOriginal); KST::dataObjectList.lock().writeLock(); KST::dataObjectList.append(KstDataObjectPtr(powerspectrum)); KST::dataObjectList.lock().unlock(); QStringList returnList; returnList.push_back(powerspectrum->tagName()); returnList.push_back(powerspectrum->xVTag()); returnList.push_back(powerspectrum->yVTag()); _doc->forceUpdate(); _doc->setModified(); return returnList; }
void KstPsdDialog::fillFieldsForEdit() { KstPSDPtr pp; pp = kst_cast<KstPSD>(_dp); if (pp) { pp->readLock(); _tagName->setText(pp->tagName()); _w->_vector->setSelection(pp->vTag()); // set sample rate, Units, FFT len, and vector units _w->_kstFFTOptions->FFTLen->setValue(pp->len()); _w->_kstFFTOptions->SampRate->setText(QString::number(pp->freq())); _w->_kstFFTOptions->VectorUnits->setText(pp->vUnits()); _w->_kstFFTOptions->RateUnits->setText(pp->rUnits()); _w->_kstFFTOptions->Apodize->setChecked(pp->apodize()); _w->_kstFFTOptions->ApodizeFxn->setCurrentIndex(pp->apodizeFxn()); _w->_kstFFTOptions->Sigma->setValue(pp->gaussianSigma()); _w->_kstFFTOptions->RemoveMean->setChecked(pp->removeMean()); _w->_kstFFTOptions->Interleaved->setChecked(pp->average()); _w->_kstFFTOptions->Output->setCurrentIndex(pp->output()); _w->_kstFFTOptions->InterpolateHoles->setChecked(pp->interpolateHoles()); _w->_kstFFTOptions->synch(); pp->unlock(); _w->_curveAppearance->hide(); _w->_curvePlacement->hide(); _legendText->hide(); _legendLabel->hide(); adjustSize(); resize(minimumSizeHint()); setFixedHeight(height()); } }
bool KstPsdDialog::editObject() { KstPSDList psList; // // if the user selected no vector, treat it as non-dirty... // _vectorDirty = _w->_vector->_vector->currentIndex() != 0; _apodizeFxnDirty = _w->_kstFFTOptions->ApodizeFxn->currentIndex() != 0; _fFTLenDirty = _w->_kstFFTOptions->FFTLen->text() != " "; _sampRateDirty = !_w->_kstFFTOptions->SampRate->text().isEmpty(); _vectorUnitsDirty = !_w->_kstFFTOptions->VectorUnits->text().isEmpty(); _rateUnitsDirty = !_w->_kstFFTOptions->RateUnits->text().isEmpty(); _outputDirty = _w->_kstFFTOptions->Output->currentIndex() != 0; psList = kstObjectSubList<KstDataObject,KstPSD>(KST::dataObjectList); if (_editMultipleMode) { bool didEdit = false; int i; for (i = 0; i < _editMultipleWidget->_objectList->count(); i++) { if (_editMultipleWidget->_objectList->item(i)->isSelected()) { KstPSDList::Iterator psIter; KstPSDPtr psPtr; psIter = psList.findTag(_editMultipleWidget->_objectList->item(i)->text()); if (psIter == psList.end()) { return false; } psPtr = *psIter; if (!editSingleObject(psPtr)) { return false; } didEdit = true; } } if (!didEdit) { QMessageBox::warning(this, QObject::tr("Kst"), QObject::tr("Select one or more objects to edit.")); return false; } } else { KstPSDPtr pp; QString tag_name; pp = kst_cast<KstPSD>(_dp); tag_name = _tagName->text(); if (!pp || (tag_name != pp->tagName() && KstData::self()->dataTagNameNotUnique(tag_name))) { _tagName->setFocus(); return false; } pp->writeLock(); pp->setTagName(tag_name); pp->unlock(); // then edit the object _vectorDirty = true; _apodizeDirty = true; _apodizeFxnDirty = true; _gaussianSigmaDirty = true; _removeMeanDirty = true; _interleavedDirty = true; _sampRateDirty = true; _vectorUnitsDirty = true; _rateUnitsDirty = true; _fFTLenDirty = true; _outputDirty = true; _interpolateHolesDirty = true; if (!editSingleObject(pp)) { return false; } } emit modified(); return true; }
// returns true if succesful bool KstPsdDialogI::editObject() { // if the user selected no vector, treat it as non-dirty _vectorDirty = _w->_vector->_vector->currentItem() != 0; _apodizeDirty = _w->_kstFFTOptions->ApodizeFxn->currentItem() != 0; _fFTLenDirty = _w->_kstFFTOptions->FFTLen->text() != " "; _sampRateDirty = !_w->_kstFFTOptions->SampRate->text().isEmpty(); _vectorUnitsDirty = !_w->_kstFFTOptions->VectorUnits->text().isEmpty(); _rateUnitsDirty = !_w->_kstFFTOptions->RateUnits->text().isEmpty(); _outputDirty = !_w->_kstFFTOptions->Output->currentItem() != 0; KstPSDList psList = kstObjectSubList<KstDataObject,KstPSD>(KST::dataObjectList); // if editing multiple objects, edit each one if (_editMultipleMode) { bool didEdit = false; for (uint i = 0; i < _editMultipleWidget->_objectList->count(); i++) { if (_editMultipleWidget->_objectList->isSelected(i)) { // get the pointer to the object KstPSDList::Iterator psIter = psList.findTag(_editMultipleWidget->_objectList->text(i)); if (psIter == psList.end()) { return false; } KstPSDPtr psPtr = *psIter; if (!editSingleObject(psPtr)) { return false; } didEdit = true; } } if (!didEdit) { KMessageBox::sorry(this, i18n("Select one or more objects to edit.")); return false; } } else { KstPSDPtr pp = kst_cast<KstPSD>(_dp); // verify that the name is unique QString tag_name = _tagName->text(); if (!pp || (tag_name != pp->tagName() && KstData::self()->dataTagNameNotUnique(tag_name))) { _tagName->setFocus(); return false; } pp->writeLock(); pp->setTagName(KstObjectTag(tag_name, pp->tag().context())); // FIXME: doesn't allow changing tag context pp->unlock(); // then edit the object _vectorDirty = true; _apodizeDirty = true; _apodizeFxnDirty = true; _gaussianSigmaDirty = true; _removeMeanDirty = true; _interleavedDirty = true; _sampRateDirty = true; _vectorUnitsDirty = true; _rateUnitsDirty = true; _fFTLenDirty = true; _outputDirty = true; _interpolateHolesDirty = true; if (!editSingleObject(pp)) { return false; } } emit modified(); 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(); }