File indexing completed on 2024-05-19 04:34:09

0001 /***************************************************************************
0002  *                                                                         *
0003  *   copyright : (C) 2007 The University of Toronto                        *
0004  *                                                                         *
0005  *   This program is free software; you can redistribute it and/or modify  *
0006  *   it under the terms of the GNU General Public License as published by  *
0007  *   the Free Software Foundation; either version 2 of the License, or     *
0008  *   (at your option) any later version.                                   *
0009  *                                                                         *
0010  ***************************************************************************/
0011 
0012 #include "testpsd.h"
0013 
0014 #include <QtTest>
0015 
0016 #include <QDir>
0017 #include <QFile>
0018 #include <QTemporaryFile>
0019 #include <QXmlStreamWriter>
0020 
0021 
0022 #include "psd.h"
0023 #include "ksttest.h"
0024 
0025 #include "datacollection.h"
0026 #include "objectstore.h"
0027 
0028 static Kst::ObjectStore _store;
0029 
0030 void TestPSD::cleanupTestCase() {
0031   _store.clear();
0032 }
0033 
0034 
0035 QDomDocument TestPSD::makeDOMElement(const QString& tag, const QString& val) {
0036 // Should be some boundary checking in the constructor.
0037   QDomDocument psdDOM("psddocument");
0038   QDomElement psdElement, child;
0039   QDomText text;
0040 
0041   psdElement = psdDOM.createElement("psdDOMTest");
0042 
0043   child = psdDOM.createElement("tag");
0044   text = psdDOM.createTextNode(tag);
0045   child.appendChild(text);
0046   psdElement.appendChild(child);
0047 
0048   child = psdDOM.createElement("vector");
0049   text = psdDOM.createTextNode(val);
0050   child.appendChild(text);
0051   psdElement.appendChild(child);
0052 
0053   child = psdDOM.createElement("samplerate");
0054   text = psdDOM.createTextNode("128");
0055   child.appendChild(text);
0056   psdElement.appendChild(child);
0057 
0058   child = psdDOM.createElement("average");
0059   text = psdDOM.createTextNode("1");
0060   child.appendChild(text);
0061   psdElement.appendChild(child);
0062 
0063   child = psdDOM.createElement("fftlength");
0064   text = psdDOM.createTextNode("5");
0065   child.appendChild(text);
0066   psdElement.appendChild(child);
0067 
0068   child = psdDOM.createElement("apodize");
0069   text = psdDOM.createTextNode("1");
0070   child.appendChild(text);
0071   psdElement.appendChild(child);
0072 
0073   child = psdDOM.createElement("apodizefunction");
0074   text = psdDOM.createTextNode("WindowOriginal");
0075   child.appendChild(text);
0076   psdElement.appendChild(child);
0077 
0078   child = psdDOM.createElement("gaussiansigma");
0079   text = psdDOM.createTextNode("0.01");
0080   child.appendChild(text);
0081   psdElement.appendChild(child);
0082 
0083   child = psdDOM.createElement("removemean");
0084   text = psdDOM.createTextNode("1");
0085   child.appendChild(text);
0086   psdElement.appendChild(child);
0087 
0088   child = psdDOM.createElement("vectorunits");
0089   text = psdDOM.createTextNode("vUnits");
0090   child.appendChild(text);
0091   psdElement.appendChild(child);
0092 
0093   child = psdDOM.createElement("rateunits");
0094   text = psdDOM.createTextNode("rUnits");
0095   child.appendChild(text);
0096   psdElement.appendChild(child);
0097 
0098   child = psdDOM.createElement("outputtype");
0099   text = psdDOM.createTextNode("PSDAmplitudeSpectralDensity");
0100   child.appendChild(text);
0101   psdElement.appendChild(child);
0102 
0103   child = psdDOM.createElement("interpolateholes");
0104   text = psdDOM.createTextNode("1");
0105   child.appendChild(text);
0106   psdElement.appendChild(child);
0107 
0108   psdDOM.appendChild(psdElement);
0109 
0110   return psdDOM;
0111 }
0112 
0113 void TestPSD::testPSD() {
0114 
0115   Kst::VectorPtr vp = Kst::kst_cast<Kst::Vector>(_store.createObject<Kst::Vector>());
0116   Q_ASSERT(vp);
0117   vp->resize(10);
0118   vp->setDescriptiveName("tempVector");
0119   for (int i = 0; i < 10; i++){
0120     vp->value()[i] = i;
0121   }
0122 
0123   Kst::PSDPtr psd = Kst::kst_cast<Kst::PSD>(_store.createObject<Kst::PSD>());
0124   psd->change(vp, 0.0, false, 10, false, false, QString("vUnits"), QString("rUnits"), WindowUndefined, 0.0, PSDUndefined);
0125   QCOMPARE(psd->vector()->descriptiveName(), QLatin1String("tempVector"));
0126   QCOMPARE(psd->output(), PSDUndefined);
0127   QVERIFY(!psd->apodize());
0128   QVERIFY(!psd->removeMean());
0129   QVERIFY(!psd->average());
0130   QCOMPARE(psd->frequency(), 0.0);
0131   QCOMPARE(psd->apodizeFxn(), WindowUndefined);
0132   QCOMPARE(psd->gaussianSigma(), 0.0);
0133   Kst::VectorPtr vpVX = psd->vX();
0134   Kst::VectorPtr vpVY = psd->vY();
0135 
0136   QCOMPARE(vpVX->length(), 1);
0137   QVERIFY(vpVX->value()[0] != vpVX->value()[0]);
0138   QCOMPARE(vpVY->length(), 1);
0139   QVERIFY(vpVY->value()[0] != vpVY->value()[0]);
0140 
0141   for(int j = 0; j < vpVX->length(); j++){
0142       QCOMPARE(vpVX->value()[j], &Kst::NOPOINT);
0143   }
0144 
0145   psd->setOutput(PSDAmplitudeSpectralDensity);
0146   psd->setApodize(true);
0147   psd->setRemoveMean(true);
0148   psd->setAverage(true);
0149   psd->setFrequency(0.1);
0150   psd->setApodizeFxn(WindowOriginal);
0151   psd->setGaussianSigma(0.2);
0152 
0153   QCOMPARE(psd->vector()->descriptiveName(), QLatin1String("tempVector"));
0154   QCOMPARE(psd->output(), PSDAmplitudeSpectralDensity);
0155   QVERIFY(psd->apodize());
0156   QVERIFY(psd->removeMean());
0157   QVERIFY(psd->average());
0158   QCOMPARE(psd->frequency(), 0.1);
0159   QCOMPARE(psd->apodizeFxn(), WindowOriginal);
0160   QCOMPARE(psd->gaussianSigma(), 0.2);
0161 
0162 //   doTest(psd->update(0) == Kst::Object::UPDATE);
0163 //   doTest(psd->propertyString() == ps);
0164 //    doTest(!psd->curveHints().curveName() == "");
0165 //   printf("Curve name [%s]", kstCHL[0].curveName());
0166 //   printf("X Vector name [%s]", kstCHL[0].xVectorName());
0167 //   printf("Y Vector name [%s]", kstCHL[0].yVectorName());
0168 
0169   QTemporaryFile tf;
0170   tf.open();
0171   QXmlStreamWriter xml;
0172   xml.setDevice(&tf);
0173   xml.setAutoFormatting(true);
0174   psd->save(xml);
0175   QFile::remove(tf.fileName());
0176 
0177   QDomNode n = makeDOMElement("psdDOMPsd", "psdDOMVector").firstChild();
0178   QDomElement e = n.toElement();
0179 
0180   //FIXME: should use factory, not this constructor.  This constructor is no longer
0181   // used anywhere in kst.
0182 //   Kst::PSDPtr psdDOM = new Kst::PSD(&_store, e);
0183 
0184 //   QCOMPARE(psdDOM->tag().tagString(), QLatin1String("psdDOMPsd"));
0185 //   QCOMPARE(psdDOM->output(), PSDAmplitudeSpectralDensity);
0186 //   QVERIFY(psdDOM->apodize());
0187 //   QVERIFY(psdDOM->removeMean());
0188 //   QVERIFY(psdDOM->average());
0189 //   QCOMPARE(psdDOM->frequency(), 128.0);
0190 //   QCOMPARE(psdDOM->apodizeFxn(), WindowOriginal);
0191 //   QCOMPARE(psdDOM->gaussianSigma(), 0.01);
0192 
0193 //   Kst::VectorPtr vpVX = psdDOM->vX();
0194 //   for(int j = 0; j < vpVX->length(); j++){
0195 //       printf("[%d][%lf]", j, vpVX->value()[j]);
0196 //   }
0197 //   Kst::VectorPtr vpVY = psdDOM->vY();
0198 }
0199 
0200 #ifdef KST_USE_QTEST_MAIN
0201 QTEST_MAIN(TestPSD)
0202 #endif
0203 
0204 // vim: ts=2 sw=2 et