void TestPSD::testPSD() { Kst::VectorPtr vp = Kst::kst_cast<Kst::Vector>(_store.createObject<Kst::Vector>(Kst::ObjectTag::fromString("tempVector"))); Q_ASSERT(vp); vp->resize(10); for (int i = 0; i < 10; i++){ vp->value()[i] = i; } Kst::PSDPtr psd = new Kst::PSD(&_store, Kst::ObjectTag::fromString("psdTest"), vp, 0.0, false, 10, false, false, QString("vUnits"), QString("rUnits"), WindowUndefined, 0.0, PSDUndefined); QCOMPARE(psd->tag().tagString(), QLatin1String("psdTest")); QCOMPARE(psd->vTag(), QLatin1String("tempVector")); QCOMPARE(psd->output(), PSDUndefined); QVERIFY(!psd->apodize()); QVERIFY(!psd->removeMean()); QVERIFY(!psd->average()); QCOMPARE(psd->freq(), 0.0); QCOMPARE(psd->apodizeFxn(), WindowUndefined); QCOMPARE(psd->gaussianSigma(), 0.0); Kst::VectorPtr vpVX = psd->vX(); Kst::VectorPtr vpVY = psd->vY(); QCOMPARE(vpVX->length(), 1); QVERIFY(vpVX->value()[0] != vpVX->value()[0]); QCOMPARE(vpVY->length(), 1); QVERIFY(vpVY->value()[0] != vpVY->value()[0]); psd->writeLock(); QCOMPARE(psd->update(0), Kst::Object::UPDATE); psd->unlock(); for(int j = 0; j < vpVX->length(); j++){ QCOMPARE(vpVX->value()[j], 0.0); } psd->setOutput(PSDAmplitudeSpectralDensity); psd->setApodize(true); psd->setRemoveMean(true); psd->setAverage(true); psd->setFreq(0.1); psd->setApodizeFxn(WindowOriginal); psd->setGaussianSigma(0.2); QCOMPARE(psd->tag().tagString(), QLatin1String("psdTest")); QCOMPARE(psd->vTag(), QLatin1String("tempVector")); QCOMPARE(psd->output(), PSDAmplitudeSpectralDensity); QVERIFY(psd->apodize()); QVERIFY(psd->removeMean()); QVERIFY(psd->average()); QCOMPARE(psd->freq(), 0.1); QCOMPARE(psd->apodizeFxn(), WindowOriginal); QCOMPARE(psd->gaussianSigma(), 0.2); // doTest(psd->update(0) == Kst::Object::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(); Kst::PSDPtr psdDOM = new Kst::PSD(&_store, e); QCOMPARE(psdDOM->tag().tagString(), QLatin1String("psdDOMPsd")); QCOMPARE(psdDOM->output(), PSDAmplitudeSpectralDensity); QVERIFY(psdDOM->apodize()); QVERIFY(psdDOM->removeMean()); QVERIFY(psdDOM->average()); QCOMPARE(psdDOM->freq(), 128.0); QCOMPARE(psdDOM->apodizeFxn(), WindowOriginal); QCOMPARE(psdDOM->gaussianSigma(), 0.01); // Kst::VectorPtr vpVX = psdDOM->vX(); // for(int j = 0; j < vpVX->length(); j++){ // printf("[%d][%lf]", j, vpVX->value()[j]); // } // Kst::VectorPtr vpVY = psdDOM->vY(); }
void TestPSD::testPSD() { Kst::VectorPtr vp = Kst::kst_cast<Kst::Vector>(_store.createObject<Kst::Vector>()); Q_ASSERT(vp); vp->resize(10); vp->setDescriptiveName("tempVector"); for (int i = 0; i < 10; i++){ vp->value()[i] = i; } Kst::PSDPtr psd = Kst::kst_cast<Kst::PSD>(_store.createObject<Kst::PSD>()); psd->change(vp, 0.0, false, 10, false, false, QString("vUnits"), QString("rUnits"), WindowUndefined, 0.0, PSDUndefined); QCOMPARE(psd->vector()->descriptiveName(), QLatin1String("tempVector")); QCOMPARE(psd->output(), PSDUndefined); QVERIFY(!psd->apodize()); QVERIFY(!psd->removeMean()); QVERIFY(!psd->average()); QCOMPARE(psd->frequency(), 0.0); QCOMPARE(psd->apodizeFxn(), WindowUndefined); QCOMPARE(psd->gaussianSigma(), 0.0); Kst::VectorPtr vpVX = psd->vX(); Kst::VectorPtr vpVY = psd->vY(); QCOMPARE(vpVX->length(), 1); QVERIFY(vpVX->value()[0] != vpVX->value()[0]); QCOMPARE(vpVY->length(), 1); QVERIFY(vpVY->value()[0] != vpVY->value()[0]); for(int j = 0; j < vpVX->length(); j++){ QCOMPARE(vpVX->value()[j], 0.0); } psd->setOutput(PSDAmplitudeSpectralDensity); psd->setApodize(true); psd->setRemoveMean(true); psd->setAverage(true); psd->setFrequency(0.1); psd->setApodizeFxn(WindowOriginal); psd->setGaussianSigma(0.2); QCOMPARE(psd->vector()->descriptiveName(), QLatin1String("tempVector")); QCOMPARE(psd->output(), PSDAmplitudeSpectralDensity); QVERIFY(psd->apodize()); QVERIFY(psd->removeMean()); QVERIFY(psd->average()); QCOMPARE(psd->frequency(), 0.1); QCOMPARE(psd->apodizeFxn(), WindowOriginal); QCOMPARE(psd->gaussianSigma(), 0.2); // doTest(psd->update(0) == Kst::Object::UPDATE); // 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(); QXmlStreamWriter xml; xml.setDevice(&tf); xml.setAutoFormatting(true); psd->save(xml); QFile::remove(tf.fileName()); QDomNode n = makeDOMElement("psdDOMPsd", "psdDOMVector").firstChild(); QDomElement e = n.toElement(); //FIXME: should use factory, not this constructor. This constructor is no longer // used anywhere in kst. // Kst::PSDPtr psdDOM = new Kst::PSD(&_store, e); // QCOMPARE(psdDOM->tag().tagString(), QLatin1String("psdDOMPsd")); // QCOMPARE(psdDOM->output(), PSDAmplitudeSpectralDensity); // QVERIFY(psdDOM->apodize()); // QVERIFY(psdDOM->removeMean()); // QVERIFY(psdDOM->average()); // QCOMPARE(psdDOM->frequency(), 128.0); // QCOMPARE(psdDOM->apodizeFxn(), WindowOriginal); // QCOMPARE(psdDOM->gaussianSigma(), 0.01); // Kst::VectorPtr vpVX = psdDOM->vX(); // for(int j = 0; j < vpVX->length(); j++){ // printf("[%d][%lf]", j, vpVX->value()[j]); // } // Kst::VectorPtr vpVY = psdDOM->vY(); }
void TestEditableMatrix::testEditableMatrix() { bool ok = true; QDomNode n = makeDOMElement("amDOM", 0, 0, 0, 0, 1, 1, 9).firstChild(); QDomElement e = n.toElement(); //basic default constructor values Kst::EditableMatrixPtr am1 = Kst::kst_cast<Kst::EditableMatrix>(_store.createObject<Kst::EditableMatrix>(e)); QVERIFY(am1->tag().tagString().startsWith("amDOM")); QCOMPARE(am1->sampleCount(), 0); QCOMPARE(am1->minValue(), 0.0); QCOMPARE(am1->maxValue(), 0.0); QCOMPARE(am1->value(0, 0, &ok), 0.0); QVERIFY(!ok); QCOMPARE(am1->value(10, 10, &ok), 0.0); //should be outside the boundaries. QVERIFY(!ok); QCOMPARE(am1->sampleCount(), 0); QCOMPARE(am1->meanValue(), 0.0); //basic symmetrical matrix n = makeDOMElement("Symmetrical", 3, 3, 0, 0, 1, 1, 9).firstChild(); e = n.toElement(); //basic default constructor values Kst::EditableMatrixPtr am2 = Kst::kst_cast<Kst::EditableMatrix>(_store.createObject<Kst::EditableMatrix>(e)); QCOMPARE(am2->tag().tagString(), QLatin1String("Symmetrical")); QVERIFY(am2->resize(3, 3, true)); for(int i =0 ; i < 3; i++){ for(int j = 0; j < 3; j++){ QCOMPARE(am2->value(i, j, &ok), 1.1); QVERIFY(ok); } } QVERIFY(am2->editable()); QCOMPARE(am2->xNumSteps(), 3); QCOMPARE(am2->yNumSteps(), 3); QCOMPARE(am2->minX(), 0.0); QCOMPARE(am2->minY(), 0.0); QCOMPARE(am2->xStepSize(), 1.0); QCOMPARE(am2->yStepSize(), 1.0); QCOMPARE(am2->sampleCount(), 9); QVERIFY(am2->setValueRaw(1, 1, 5)); ok = true; QCOMPARE(am2->value(1, 1, &ok), 5.0); QVERIFY(ok); am2->blank(); am2->change(3, 3, 0, 0, 0, 0); //should not be legal QCOMPARE(am2->xNumSteps(), 3); QCOMPARE(am2->yNumSteps(), 3); QCOMPARE(am2->minX(), 0.0); QCOMPARE(am2->minY(), 0.0); QCOMPARE(am2->xStepSize(), 0.0); QCOMPARE(am2->yStepSize(), 0.0); QCOMPARE(am2->sampleCount(), 9); QVERIFY(!am2->setValue(0, 0, 1)); ok = true; QCOMPARE(am2->value(0, 0, &ok), 0.0); QVERIFY(!ok); QVERIFY(!am2->setValue(1, 1, 5.0)); QVERIFY(am2->value(1, 1) != 5.0); QVERIFY(am2->setValueRaw(2, 2, 6.0)); //fails Kst::EditableMatrixPtr um1 = Kst::kst_cast<Kst::EditableMatrix>(_store.createObject<Kst::EditableMatrix>(Kst::ObjectTag::fromString("Unity"))); Q_ASSERT(um1); um1->resize(3, 3, true); um1->setEditable(true); QVERIFY(um1->setValue(0, 0, 1)); QVERIFY(um1->setValue(1, 1, 1)); QVERIFY(um1->setValue(2, 2, 1)); QCOMPARE(um1->value(0, 0, &ok), 1.0); QVERIFY(ok); QCOMPARE(um1->value(0, 1, &ok), 0.0); QVERIFY(ok); QCOMPARE(um1->value(0, 2, &ok), 0.0); QVERIFY(ok); QCOMPARE(um1->value(1, 0, &ok), 0.0); QVERIFY(ok); QCOMPARE(um1->value(1, 1, &ok), 1.0); QVERIFY(ok); QCOMPARE(um1->value(1, 2, &ok), 0.0); QVERIFY(ok); QCOMPARE(um1->value(2, 0, &ok), 0.0); QVERIFY(ok); QCOMPARE(um1->value(2, 1, &ok), 0.0); QVERIFY(ok); QCOMPARE(um1->value(2, 2, &ok), 1.0); QVERIFY(ok); QVERIFY(um1->resize(3, 3, false)); um1->zero(); QCOMPARE(um1->value(0, 0, &ok), 0.0); QVERIFY(ok); QCOMPARE(um1->value(0, 1, &ok), 0.0); QVERIFY(ok); QCOMPARE(um1->value(0, 2, &ok), 0.0); QVERIFY(ok); QCOMPARE(um1->value(1, 0, &ok), 0.0); QVERIFY(ok); QCOMPARE(um1->value(1, 1, &ok), 0.0); QVERIFY(ok); QCOMPARE(um1->value(1, 2, &ok), 0.0); QVERIFY(ok); QCOMPARE(um1->value(2, 0, &ok), 0.0); QVERIFY(ok); QCOMPARE(um1->value(2, 1, &ok), 0.0); QVERIFY(ok); QCOMPARE(um1->value(2, 2, &ok), 0.0); QVERIFY(ok); QVERIFY(um1->setValue(0, 0, 1)); QVERIFY(um1->setValue(1, 1, 1)); QVERIFY(um1->setValue(2, 2, 1)); QVERIFY(um1->resize(2, 2, false)); QCOMPARE(um1->sampleCount(), 4); QCOMPARE(um1->value(0, 0, &ok), 1.0); QVERIFY(ok); QCOMPARE(um1->value(0, 1, &ok), 0.0); QVERIFY(ok); QCOMPARE(um1->value(0, 2, &ok), 0.0); QVERIFY(!ok); QCOMPARE(um1->value(1, 0, &ok), 0.0); QVERIFY(ok); QCOMPARE(um1->value(1, 1, &ok), 1.0); QVERIFY(ok); QCOMPARE(um1->value(1, 2, &ok), 0.0); QVERIFY(!ok); QVERIFY(um1->resize(4, 4, true)); QCOMPARE(um1->value(0, 0, &ok), 1.0); QVERIFY(ok); QCOMPARE(um1->value(0, 1, &ok), 0.0); QVERIFY(ok); QCOMPARE(um1->value(0, 2, &ok), 0.0); QVERIFY(ok); QCOMPARE(um1->value(0, 3, &ok), 0.0); QVERIFY(ok); QCOMPARE(um1->value(1, 0, &ok), 0.0); QVERIFY(ok); QCOMPARE(um1->value(1, 1, &ok), 1.0); QVERIFY(ok); QCOMPARE(um1->value(1, 2, &ok), 0.0); QVERIFY(ok); QCOMPARE(um1->value(1, 3, &ok), 0.0); QVERIFY(ok); QCOMPARE(um1->value(2, 0, &ok), 0.0); QVERIFY(ok); QCOMPARE(um1->value(2, 1, &ok), 0.0); QVERIFY(ok); QCOMPARE(um1->value(2, 2, &ok), 0.0); QVERIFY(ok); QCOMPARE(um1->value(2, 3, &ok), 0.0); QVERIFY(ok); QCOMPARE(um1->value(3, 0, &ok), 0.0); QVERIFY(ok); QCOMPARE(um1->value(3, 1, &ok), 0.0); QVERIFY(ok); QCOMPARE(um1->value(3, 2, &ok), 0.0); QVERIFY(ok); QCOMPARE(um1->value(3, 3, &ok), 0.0); QVERIFY(ok); QVERIFY(um1->resize(3, 3, false)); QVERIFY(um1->setValue(0, 0, 1.716299)); QVERIFY(um1->setValue(0, 1, -0.485527)); QVERIFY(um1->setValue(0, 2, -0.288690)); QVERIFY(um1->setValue(1, 0, 1.716299)); QVERIFY(um1->setValue(1, 1, NAN)); QVERIFY(um1->setValue(1, 2, -0.274957)); QVERIFY(um1->setValue(2, 0, 1.711721)); QVERIFY(um1->setValue(2, 1, -0.485527)); QVERIFY(um1->setValue(2, 2, -0.293267)); QCOMPARE(um1->value(0, 0), 1.716299); QCOMPARE(um1->value(0, 1), -0.485527); QCOMPARE(um1->value(0, 2), -0.288690); QCOMPARE(um1->value(1, 0), 1.716299); QCOMPARE(um1->value(1, 1), 0.0); QCOMPARE(um1->value(1, 2), -0.274957); QCOMPARE(um1->value(2, 0), 1.711721); QCOMPARE(um1->value(2, 1), -0.485527); QCOMPARE(um1->value(2, 2), -0.293267); QCOMPARE(um1->minValue(), 0.0); QCOMPARE(um1->maxValue(), 0.0); Kst::EditableMatrixPtr sm = Kst::kst_cast<Kst::EditableMatrix>(_store.createObject<Kst::EditableMatrix>(Kst::ObjectTag::fromString("Spike"))); Q_ASSERT(sm); sm->change(2, 2, 0.0, 0.0, 1.0, 1.0); sm->setEditable(true); QVERIFY(sm->resize(2, 2, false)); QCOMPARE(sm->xNumSteps(), 2); QCOMPARE(sm->yNumSteps(), 2); QVERIFY(sm->setValueRaw(0, 0, 0.0)); QVERIFY(sm->setValueRaw(0, 1, 0.1)); QVERIFY(sm->setValueRaw(1, 0, 1.0)); QVERIFY(sm->setValueRaw(1, 1, 1.1)); sm->calcNoSpikeRange(0); QCOMPARE(sm->minValueNoSpike(), 0.0); QCOMPARE(sm->maxValueNoSpike(), 0.0); sm->calcNoSpikeRange(-100); QCOMPARE(sm->minValueNoSpike(), 0.0); QCOMPARE(sm->maxValueNoSpike(), 0.0); sm->calcNoSpikeRange(0.9); QVERIFY(sm->minValueNoSpike() >= 1E+300 ); QVERIFY(sm->maxValueNoSpike() <= -1E+300); }
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(); }