50{
51
52
53template<class DataHandler> class DiagGaussianMixtureManager;
54
55namespace hidden
56{
59template <class DataHandler_>
60struct MixtureManagerTraits<DiagGaussianMixtureManager<DataHandler_> >
61{
63 typedef DataHandler_ DataHandler;
67 typedef std::vector< std::pair<int,int> > MissingIndexes;
69 typedef std::vector< std::pair<std::pair<int,int>, Type > > MissingValues;
70
71
72
73
76 typedef typename DataHandlerTraits<DataHandler, Type>::Data Data;
77
79 typedef DataBridge<Data> DataBridgeType;
80};
81
82}
83
93template<class DataHandler>
94class DiagGaussianMixtureManager: public IMixtureManager<DiagGaussianMixtureManager<DataHandler> >
95{
96 public:
97 typedef typename hidden::MixtureManagerTraits< DiagGaussianMixtureManager >::Type Type;
98 typedef typename hidden::MixtureManagerTraits< DiagGaussianMixtureManager >::MissingIndexes MissingIndexes;
99 typedef typename hidden::MixtureManagerTraits< DiagGaussianMixtureManager >::MissingValues MissingValues;
100 typedef typename hidden::MixtureManagerTraits< DiagGaussianMixtureManager >::Data Data;
101 typedef typename hidden::MixtureManagerTraits< DiagGaussianMixtureManager >::DataBridgeType DataBridgeType;
102
103 typedef IMixtureManager< DiagGaussianMixtureManager > Base;
104 using Base::registerDataBridge;
105 using Base::getDataBridge;
106 using Base::getIdModel;
107 using Base::p_handler;
108
109
110 typedef DiagGaussianBridge<Clust::Gaussian_sjk_, Data> MixtureBridge_sjk;
111 typedef DiagGaussianBridge<Clust::Gaussian_sk_, Data> MixtureBridge_sk;
112 typedef DiagGaussianBridge<Clust::Gaussian_sj_, Data> MixtureBridge_sj;
113 typedef DiagGaussianBridge<Clust::Gaussian_sjsk_, Data> MixtureBridge_sjsk;
114 typedef DiagGaussianBridge<Clust::Gaussian_s_, Data> MixtureBridge_s;
115
117 DiagGaussianMixtureManager(DataHandler const& handler): Base(&handler) {}
119 ~DiagGaussianMixtureManager() {}
120
125 void getMissingValuesImpl(IMixture* p_mixture, MissingValues& missing) const
126 {
127 Clust::Mixture idModel = getIdModel(p_mixture->idData());
128 if (idModel == Clust::unknown_mixture_) return;
129
130 switch (idModel)
131 {
132 case Clust::Gaussian_sjk_:
133 { static_cast<MixtureBridge_sjk*>(p_mixture)->getMissingValues(missing);}
134 break;
135 case Clust::Gaussian_sk_:
136 { static_cast<MixtureBridge_sk*>(p_mixture)->getMissingValues(missing);}
137 break;
138 case Clust::Gaussian_sj_:
139 { static_cast<MixtureBridge_sj*>(p_mixture)->getMissingValues(missing);}
140 break;
141 case Clust::Gaussian_sjsk_:
142 { static_cast<MixtureBridge_sjsk*>(p_mixture)->getMissingValues(missing);}
143 break;
144 case Clust::Gaussian_s_:
145 { static_cast<MixtureBridge_s*>(p_mixture)->getMissingValues(missing);}
146 break;
147 default:
148 break;
149 }
150 }
155 void getParametersImpl(IMixture* p_mixture, ArrayXX& param) const
156 {
157 Clust::Mixture idModel = getIdModel(p_mixture->idData());
158 if (idModel == Clust::unknown_mixture_) return;
159
160 switch (idModel)
161 {
162
163 case Clust::Gaussian_sjk_:
164 { static_cast<MixtureBridge_sjk*>(p_mixture)->getParameters(param);}
165 break;
166 case Clust::Gaussian_sk_:
167 { static_cast<MixtureBridge_sk*>(p_mixture)->getParameters(param);}
168 break;
169 case Clust::Gaussian_sj_:
170 { static_cast<MixtureBridge_sj*>(p_mixture)->getParameters(param);}
171 break;
172 case Clust::Gaussian_sjsk_:
173 { static_cast<MixtureBridge_sjsk*>(p_mixture)->getParameters(param);}
174 break;
175 case Clust::Gaussian_s_:
176 { static_cast<MixtureBridge_s*>(p_mixture)->getParameters(param);}
177 break;
178 default:
179 break;
180 }
181 }
186 void setParametersImpl(IMixture* p_mixture, ArrayXX const& param) const
187 {
188 Clust::Mixture idModel = getIdModel(p_mixture->idData());
189 if (idModel == Clust::unknown_mixture_) return;
190
191 switch (idModel)
192 {
193
194 case Clust::Gaussian_sjk_:
195 { static_cast<MixtureBridge_sjk*>(p_mixture)->setParameters(param);}
196 break;
197 case Clust::Gaussian_sk_:
198 { static_cast<MixtureBridge_sk*>(p_mixture)->setParameters(param);}
199 break;
200 case Clust::Gaussian_sj_:
201 { static_cast<MixtureBridge_sj*>(p_mixture)->setParameters(param);}
202 break;
203 case Clust::Gaussian_sjsk_:
204 { static_cast<MixtureBridge_sjsk*>(p_mixture)->setParameters(param);}
205 break;
206 case Clust::Gaussian_s_:
207 { static_cast<MixtureBridge_s*>(p_mixture)->setParameters(param);}
208 break;
209 default:
210 break;
211 }
212 }
218 IMixture* createMixtureImpl(String const& modelName, String const& idData, int nbCluster)
219 { return createMixtureImpl(Clust::stringToMixture(modelName), idData, nbCluster);}
220
221
222 private:
228 IMixture* createMixtureImpl(Clust::Mixture idModel, String const& idData, int nbCluster)
229 {
230 switch (idModel)
231 {
232
233 case Clust::Gaussian_sjk_:
235 break;
236 case Clust::Gaussian_sk_:
238 break;
239 case Clust::Gaussian_sj_:
241 break;
242 case Clust::Gaussian_sjsk_:
244 break;
245 case Clust::Gaussian_s_:
247 break;
248 default:
249 return 0;
250 break;
251 }
252 return 0;
253 }
254};
255
256}
257
258#undef STK_CREATE_MIXTURE
259
260#endif
#define STK_CREATE_MIXTURE(Data, Bridge)
double Real
STK fundamental type of Real values.