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_MixtureFileReaderRaw_cpp)
00056 #define ALIZE_MixtureFileReaderRaw_cpp
00057
00058 #include <new>
00059 #include "MixtureFileReaderRaw.h"
00060 #include "MixtureGD.h"
00061 #include "MixtureGF.h"
00062 #include "DistribGD.h"
00063 #include "DistribGF.h"
00064 #include "Exception.h"
00065 #include "Config.h"
00066 #include "FileReader.h"
00067
00068 using namespace alize;
00069 typedef MixtureFileReaderRaw R;
00070
00071
00072 R::MixtureFileReaderRaw(const FileName& f, const Config& c, BigEndian be)
00073 :MixtureFileReaderAbstract(&FileReader::create(f, getPath(f, c),
00074 getExt(f, c), getBigEndian(c, be)), c) {}
00075
00076 R& R::create(const FileName& f, const Config& c, BigEndian be)
00077 {
00078 R* p = new (std::nothrow) R(f, c, be);
00079 assertMemoryIsAllocated(p, __FILE__, __LINE__);
00080 return *p;
00081 }
00082
00083 const Mixture& R::readMixture()
00084 {
00085 if (_config.existsParam_distribType)
00086 {
00087 switch (_config.getParam_distribType())
00088 {
00089 case DistribType_GD:
00090 return readMixtureGD();
00091 case DistribType_GF:
00092 return readMixtureGD();
00093 }
00094 }
00095 throw Exception("Don't know how to read this king of mixture",
00096 __FILE__, __LINE__);
00097 }
00098
00099 const MixtureGD& R::readMixtureGD()
00100 {
00101 unsigned long c, v;
00102 assert(_pReader != NULL);
00103
00104
00105 unsigned long distribCount = _pReader->readInt4();
00106
00107
00108 unsigned long vectSize = _pReader->readInt4();
00109
00110 _pMixture = &MixtureGD::create(K::k, _pReader->getFileName(),
00111 vectSize, distribCount);
00112
00113
00114 for (c=0; c<distribCount; c++)
00115 { _pMixture->weight(c) = _pReader->readDouble(); }
00116
00117 for (c=0; c<distribCount; c++)
00118 {
00119 DistribGD& d = static_cast<DistribGD&>(_pMixture->getDistrib(c));
00120
00121
00122 d.setCst(K::k, _pReader->readDouble());
00123
00124
00125 d.setDet(K::k, _pReader->readDouble());
00126
00127
00128 if (_pReader->readChar() == (char)1)
00129 for (v = 0; v < vectSize; v++)
00130 { d.setCov(_pReader->readDouble(), v); }
00131
00132
00133 for (v = 0; v < vectSize; v++)
00134 { d.getCovInvVect()[v] = _pReader->readDouble(); }
00135
00136
00137 for (v = 0; v < vectSize; v++)
00138 { d.setMean(_pReader->readDouble(), v); }
00139 }
00140 _pReader->close();
00141 return *static_cast<MixtureGD*>(_pMixture);
00142 }
00143
00144 const MixtureGF& R::readMixtureGF()
00145 {
00146 unsigned long c, v, vv;
00147 assert(_pReader != NULL);
00148
00149
00150 unsigned long distribCount = _pReader->readInt4();
00151
00152
00153 unsigned long vectSize = _pReader->readInt4();
00154
00155 _pMixture = &MixtureGF::create(K::k, _pReader->getFileName(),
00156 vectSize, distribCount);
00157
00158
00159 for (c=0; c<distribCount; c++)
00160 { _pMixture->weight(c) = _pReader->readDouble(); }
00161
00162 for (c=0; c<distribCount; c++)
00163 {
00164 DistribGF& d = static_cast<DistribGF&>(_pMixture->getDistrib(c));
00165
00166
00167 d.setCst(K::k, _pReader->readDouble());
00168
00169
00170 d.setDet(K::k, _pReader->readDouble());
00171
00172
00173 if (_pReader->readChar() == (char)1)
00174 for (v = 0; v < vectSize; v++)
00175 for (vv = 0; vv < vectSize; vv++)
00176 d.setCov(_pReader->readDouble(), v, vv);
00177
00178
00179 for (v = 0; v < vectSize; v++)
00180 for (vv = 0; vv < vectSize; vv++)
00181 d.setCovInv(K::k, _pReader->readDouble(), v, vv);
00182
00183
00184 for (v = 0; v < vectSize; v++)
00185 d.setMean(_pReader->readDouble(), v);
00186 }
00187 _pReader->close();
00188 return *static_cast<MixtureGF*>(_pMixture);
00189 }
00190
00191 String R::getClassName() const { return "MixtureFileReaderRaw"; }
00192
00193 R::~MixtureFileReaderRaw() {}
00194
00195
00196 #endif // !defined(ALIZE_MixtureFileReaderRaw_cpp)
00197