示例#1
0
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 TestCSD::testCSD() {

  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::CSDPtr csd = Kst::kst_cast<Kst::CSD>(_store.createObject<Kst::CSD>());
  csd->change(vp, 1.0, false, false, false, WindowUndefined, 0, 0, 0.0, PSDUndefined, QString::null, QString::null);

  QCOMPARE(csd->vector()->descriptiveName(), QLatin1String("tempVector"));
  QCOMPARE(csd->output(), PSDUndefined);
  QVERIFY(!csd->apodize());
  QVERIFY(!csd->removeMean());
  QVERIFY(!csd->average());
  QCOMPARE(csd->frequency(), 1.0);
  QCOMPARE(csd->apodizeFxn(), WindowUndefined);
  QCOMPARE(csd->length(), 0);
  QCOMPARE(csd->windowSize(), 0);
  QCOMPARE(csd->gaussianSigma(), 0.0);
  QVERIFY(csd->vectorUnits().isEmpty());
  QVERIFY(csd->rateUnits().isEmpty());

  csd->setOutput(PSDAmplitudeSpectralDensity);
  csd->setApodize(true);
  csd->setRemoveMean(true);
  csd->setAverage(true);
  csd->setFrequency(0.1);
  csd->setApodizeFxn(WindowOriginal);
  csd->setLength(3);
  csd->setWindowSize(50);
  csd->setGaussianSigma(0.2);

  QCOMPARE(csd->vector()->descriptiveName(), QLatin1String("tempVector"));
  QCOMPARE(csd->output(), PSDAmplitudeSpectralDensity);
  QVERIFY(csd->apodize());
  QVERIFY(csd->removeMean());
  QVERIFY(csd->average());
  QCOMPARE(csd->frequency(), 0.1);
  QCOMPARE(csd->windowSize(), 50);
  QCOMPARE(csd->apodizeFxn(), WindowOriginal);
  QCOMPARE(csd->gaussianSigma(), 0.2);

//   KTempFile tf(locateLocal("tmp", "kst-csd"), "txt");
//   QFile *qf = tf.file();
//   QTextStream ts(qf);
//   csd->save(ts, "");

// the constructor used here is no longer used in kst: use the factory instead
//   QDomNode n = makeDOMElement("csdDOMCsd", "csdDOMVector").firstChild();
//   QDomElement e = n.toElement();
//   Kst::CSDPtr csdDOM = new Kst::CSD(&_store, e);
// 
//   QCOMPARE(csdDOM->output(), PSDPowerSpectralDensity);
//   QVERIFY(csdDOM->apodize());
//   QVERIFY(csdDOM->removeMean());
//   QVERIFY(csdDOM->average());
//   QCOMPARE(csdDOM->frequency(), 1.0);
//   QCOMPARE(csdDOM->apodizeFxn(), WindowOriginal);
//   QCOMPARE(csdDOM->gaussianSigma(), 0.01);
//   QCOMPARE(csdDOM->windowSize(), 5000);

//   Kst::VectorPtr vp2 = Kst::kst_cast<Kst::Vector>(_store.createObject<Kst::Vector>());
//   Q_ASSERT(vp2);
//   vp2->resize(10);
//   for (int i = 0; i < 10; i++){
//     vp2->value()[i] = i;
//   }
//   csdDOM->setVector(vp2);
//   QCOMPARE(csdDOM->vector()->descriptiveName(), QLatin1String("tempVector2"));
//   csdDOM->setWindowSize(9);
//   Kst::MatrixPtr outMatrix = csdDOM->outputMatrix();
// 
//   QVERIFY(outMatrix->resize(3, 3, false)); // very odd thing to do?
//   QVERIFY(outMatrix->setValue(0, 0, 1.716299));
//   QVERIFY(outMatrix->setValue(0, 1, -0.485527));
//   QVERIFY(outMatrix->setValue(0, 2, -0.288690));
//   QVERIFY(outMatrix->setValue(1, 0, 1.716299));
//   QVERIFY(outMatrix->setValue(1, 1, NAN));
//   QVERIFY(outMatrix->setValue(1, 2, -0.274957));
//   QVERIFY(outMatrix->setValue(2, 0, 1.711721));
//   QVERIFY(outMatrix->setValue(2, 1, -0.485527));
//   QVERIFY(outMatrix->setValue(2, 2, -0.293267));
// 
//   QCOMPARE(outMatrix->sampleCount(), 9);
//   QCOMPARE(outMatrix->value(0, 0), 1.716299);
//   QCOMPARE(outMatrix->value(0, 1),  -0.485527);
//   QCOMPARE(outMatrix->value(0, 2), -0.288690);
//   QCOMPARE(outMatrix->value(1, 0), 1.716299);
//   QCOMPARE(outMatrix->value(1, 1), 0.0);
//   QCOMPARE(outMatrix->value(1, 2), -0.274957);
//   QCOMPARE(outMatrix->value(2, 0), 1.711721);
//   QCOMPARE(outMatrix->value(2, 1), -0.485527);
//   QCOMPARE(outMatrix->value(2, 2), -0.293267);
// 
//   csdDOM->writeLock();
//   QCOMPARE(csdDOM->update(), Kst::Object::UPDATE);
//   csdDOM->unlock();
// 
//   outMatrix = csdDOM->outputMatrix();
//   QEXPECT_FAIL("", "This has always failed", Continue);
//   QCOMPARE(outMatrix->sampleCount(), 128);
// 
//   csdDOM->setWindowSize(11);
//   QEXPECT_FAIL("", "This has always failed", Continue);
//   QCOMPARE(outMatrix->sampleCount(), 128);
// 
//   QEXPECT_FAIL("", "This has always failed", Continue);
//   QCOMPARE(outMatrix->value(0, 0), 1.716299);
//   QEXPECT_FAIL("", "This has always failed", Continue);
//   QCOMPARE(outMatrix->value(0, 1),  -0.485527);
//   QEXPECT_FAIL("", "This has always failed", Continue);
//   QCOMPARE(outMatrix->value(0, 2), -0.288690);
//   QEXPECT_FAIL("", "This has always failed", Continue);
//   QCOMPARE(outMatrix->value(1, 0), 1.716299);
//   QCOMPARE(outMatrix->value(1, 1), 0.0);
//   QEXPECT_FAIL("", "This has always failed", Continue);
//   QCOMPARE(outMatrix->value(1, 2), -0.274957);
//   QEXPECT_FAIL("", "This has always failed", Continue);
//   QCOMPARE(outMatrix->value(2, 0), 1.711721);
//   QEXPECT_FAIL("", "This has always failed", Continue);
//   QCOMPARE(outMatrix->value(2, 1), -0.485527);
//   QEXPECT_FAIL("", "This has always failed", Continue);
//   QCOMPARE(outMatrix->value(2, 2), -0.293267);

}
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();
}