Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055 #if !defined(ALIZE_MixtureServerFileReaderRaw_cpp)
00056 #define ALIZE_MixtureServerFileReaderRaw_cpp
00057
00058 #include <new>
00059 #include "MixtureServerFileReaderRaw.h"
00060 #include "MixtureServer.h"
00061 #include "MixtureGD.h"
00062 #include "DistribGD.h"
00063 #include "Exception.h"
00064 #include "Config.h"
00065 #include "FileReader.h"
00066
00067 using namespace alize;
00068 typedef MixtureServerFileReaderRaw R;
00069
00070
00071 R::MixtureServerFileReaderRaw(const FileName& f, const Config& c)
00072 :MixtureServerFileReaderAbstract(&FileReader::create(f, getPath(f, c),
00073 getExt(f, c), false)) {}
00074
00075 R& R::create(const FileName& f, const Config& c)
00076 {
00077 R* p = new (std::nothrow) R(f, c);
00078 assertMemoryIsAllocated(p, __FILE__, __LINE__);
00079 return *p;
00080 }
00081
00082 void R::readMixtureServer(MixtureServer& ms)
00083 {
00084 unsigned long i, j, k, dictIdx;
00085 ms.reset();
00086 assert(_pReader != NULL);
00087 if (_pReader->readString(13) != "MixtureServer")
00088 error("does not contain mixture server data");
00089 ms.setServerName(_pReader->readString(_pReader->readUInt4()));
00090 unsigned long vectSize = _pReader->readUInt4();
00091 unsigned long mixtureCount = _pReader->readUInt4();
00092 unsigned long distribCount = _pReader->readUInt4();
00093 for (i = 0; i<distribCount; i++)
00094 {
00095 const String type = _pReader->readString(2);
00096 if (type == "GD")
00097 {
00098 DistribGD& d = static_cast<DistribGD&>
00099 (ms.createDistrib(DistribType_GD, vectSize));
00100 if (_pReader->readString(1) == "t")
00101 for (j=0; j<vectSize; j++)
00102 d.setCov(_pReader->readDouble(), j);
00103 for (j=0; j<vectSize; j++)
00104 d.setCovInv(K::k, _pReader->readDouble(), j);
00105 for (j=0; j<vectSize; j++)
00106 d.setMean(_pReader->readDouble(), j);
00107 }
00108 else if (type == "GF")
00109 {
00110 DistribGF& d = static_cast<DistribGF&>
00111 (ms.createDistrib(DistribType_GF, vectSize));
00112 if (_pReader->readString(1) == "t")
00113 for (j=0; j<vectSize; j++)
00114 for (k=0; k<vectSize; k++)
00115 d.setCov(_pReader->readDouble(), j, k);
00116 for (j=0; j<vectSize; j++)
00117 for (k=0; k<vectSize; k++)
00118 d.setCovInv(K::k, _pReader->readDouble(), j, k);
00119 for (j=0; j<vectSize; j++)
00120 d.setMean(_pReader->readDouble(), j);
00121 }
00122 else
00123 error("Don't know how to read a distrib");
00124 }
00125 for (i = 0; i<mixtureCount; i++)
00126 {
00127 const String type = _pReader->readString(2);
00128 if (type == "GD")
00129 {
00130 MixtureGD& m = ms.createMixtureGD(0);
00131 ms.setMixtureId(m, _pReader->readString(_pReader->readUInt4()));
00132 unsigned long n = _pReader->readUInt4();
00133 for (j=0; j<n; j++)
00134 {
00135 dictIdx = _pReader->readUInt4();
00136 m.addDistrib(K::k, ms.getDistrib(dictIdx), _pReader->readDouble());
00137 }
00138 }
00139 else if (type == "GF")
00140 {
00141 MixtureGF& m = ms.createMixtureGF(0);
00142 ms.setMixtureId(m, _pReader->readString(_pReader->readUInt4()));
00143 unsigned long n = _pReader->readUInt4();
00144 for (j=0; j<n; j++)
00145 {
00146 dictIdx = _pReader->readUInt4();
00147 m.addDistrib(K::k, ms.getDistrib(dictIdx), _pReader->readDouble());
00148 }
00149 }
00150 else
00151 error("Don't know how to read a mixture");
00152 }
00153 _pReader->close();
00154 }
00155
00156 void R::error(const String& msg)
00157 {
00158 assert(_pReader != NULL);
00159 _pReader->close();
00160 throw InvalidDataException(msg, __FILE__, __LINE__,
00161 _pReader->getFullFileName());
00162 }
00163
00164 String R::getClassName() const { return "MixtureServerFileReaderRaw"; }
00165
00166 R::~MixtureServerFileReaderRaw() {}
00167
00168
00169 #endif // !defined(ALIZE_MixtureServerFileReaderRaw_cpp)
00170