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