8 #ifdef DROPPINGTHISINRPACKAGE
12 #include <Eigen/Dense>
38 template<
size_t nparts,
size_t dimnss,
size_t dimss,
size_t dimy,
typename resamp_t,
typename float_t,
bool debug=false>
44 using sssv = Eigen::Matrix<float_t,dimss,1>;
46 using nsssv = Eigen::Matrix<float_t,dimnss,1>;
48 using osv = Eigen::Matrix<float_t,dimy,1>;
50 using nsssMat = Eigen::Matrix<float_t,dimnss,dimnss>;
52 using Mat = Eigen::Matrix<float_t,Eigen::Dynamic,Eigen::Dynamic>;
67 rbpf_hmm(
const unsigned int &resamp_sched=1);
83 const std::vector<std::function<
const Mat(
const nsssv &x1tLogProbs,
const sssv &x2t)> >& fs
84 = std::vector<std::function<
const Mat(
const nsssv&,
const sssv&)> >());
208 template<
size_t nparts,
size_t dimnss,
size_t dimss,
size_t dimy,
typename resamp_t,
typename float_t,
bool debug>
211 , m_lastLogCondLike(0.0)
218 template<
size_t nparts,
size_t dimnss,
size_t dimss,
size_t dimy,
typename resamp_t,
typename float_t,
bool debug>
222 template<
size_t nparts,
size_t dimnss,
size_t dimss,
size_t dimy,
typename resamp_t,
typename float_t,
bool debug>
231 float_t sumexpdenom(0.0);
232 float_t m1(-std::numeric_limits<float_t>::infinity());
233 float_t m2 = *std::max_element(m_logUnNormWeights.begin(), m_logUnNormWeights.end());
234 for(
size_t ii = 0; ii < nparts; ++ii){
236 newX2Samp = qSamp(m_p_samps[ii], data);
237 updateHMM(m_p_innerMods[ii], data, newX2Samp);
238 sumexpdenom += std::exp(m_logUnNormWeights[ii] - m2);
240 m_logUnNormWeights[ii] += m_p_innerMods[ii].getLogCondLike()
241 + logFEv(newX2Samp, m_p_samps[ii])
242 - logQEv(newX2Samp, m_p_samps[ii], data);
245 if(m_logUnNormWeights[ii] > m1)
246 m1 = m_logUnNormWeights[ii];
249 #ifndef DROPPINGTHISINRPACKAGE
251 std::cout <<
"time: " << m_now <<
", transposed x2 sample: " << newX2Samp.transpose() <<
", log unnorm weight: " << m_logUnNormWeights[ii] <<
"\n";
254 m_p_samps[ii] = newX2Samp;
258 float_t sumexpnumer(0.0);
259 for(
size_t p = 0; p < nparts; ++p)
260 sumexpnumer += std::exp(m_logUnNormWeights[p] - m1);
261 m_lastLogCondLike = m1 + std::log(sumexpnumer) - m2 - std::log(sumexpdenom);
268 Mat testOutput = h(m_p_innerMods[0].getFilterVecLogProbs(), m_p_samps[0]);
269 unsigned int rows = testOutput.rows();
270 unsigned int cols = testOutput.cols();
271 Mat numer = Mat::Zero(rows,cols);
273 for(
size_t prtcl = 0; prtcl < nparts; ++prtcl){
274 numer += h(m_p_innerMods[prtcl].getFilterVecLogProbs(), m_p_samps[prtcl]) * std::exp(m_logUnNormWeights[prtcl] - m1);
275 denom += std::exp( m_logUnNormWeights[prtcl] - m1 );
277 m_expectations[fId] = numer/denom;
280 #ifndef DROPPINGTHISINRPACKAGE
282 std::cout <<
"transposed expec " << fId <<
": " << m_expectations[fId].transpose() <<
"\n";
289 if( (m_now+1) % m_rs == 0)
290 m_resampler.resampLogWts(m_p_innerMods, m_p_samps, m_logUnNormWeights);
301 float_t m1(-std::numeric_limits<float_t>::infinity());
302 for(
size_t ii = 0; ii < nparts; ++ii){
304 m_p_samps[ii] = q1Samp(data);
305 tmpLogProbs = initHMMLogProbVec(m_p_samps[ii]);
306 tmpLogTransMat = initHMMLogTransMat(m_p_samps[ii]);
307 m_p_innerMods[ii] =
cfModType(tmpLogProbs, tmpLogTransMat);
308 this->updateHMM(m_p_innerMods[ii], data, m_p_samps[ii]);
309 m_logUnNormWeights[ii] = m_p_innerMods[ii].getLogCondLike() + logMuEv(m_p_samps[ii]) - logQ1Ev(m_p_samps[ii], data);
312 #ifndef DROPPINGTHISINRPACKAGE
314 std::cout <<
"time: " << m_now <<
", transposed x2 sample: " << m_p_samps[ii].transpose() <<
", log unnorm weight: " << m_logUnNormWeights[ii] <<
"\n";
318 if(m_logUnNormWeights[ii] > m1)
319 m1 = m_logUnNormWeights[ii];
324 for(
size_t p = 0; p < nparts; ++p)
325 sumexp += std::exp(m_logUnNormWeights[p] - m1);
326 m_lastLogCondLike = m1 + std::log(sumexp) - std::log(
static_cast<float_t
>(nparts));
329 m_expectations.resize(fs.size());
334 Mat testOutput = h(m_p_innerMods[0].getFilterVecLogProbs(), m_p_samps[0]);
335 unsigned int rows = testOutput.rows();
336 unsigned int cols = testOutput.cols();
337 Mat numer = Mat::Zero(rows,cols);
339 for(
size_t prtcl = 0; prtcl < nparts; ++prtcl){
340 numer += h(m_p_innerMods[prtcl].getFilterVecLogProbs(), m_p_samps[prtcl]) * std::exp(m_logUnNormWeights[prtcl] - m1);
341 denom += std::exp(m_logUnNormWeights[prtcl] - m1);
343 m_expectations[fId] = numer/denom;
346 #ifndef DROPPINGTHISINRPACKAGE
348 std::cout <<
"transposed expec " << fId <<
": " << m_expectations[fId].transpose() <<
"\n";
355 if( (m_now+1) % m_rs == 0)
356 m_resampler.resampLogWts(m_p_innerMods, m_p_samps, m_logUnNormWeights);
365 template<
size_t nparts,
size_t dimnss,
size_t dimss,
size_t dimy,
typename resamp_t,
typename float_t,
bool debug>
368 return m_lastLogCondLike;
372 template<
size_t nparts,
size_t dimnss,
size_t dimss,
size_t dimy,
typename resamp_t,
typename float_t,
bool debug>
375 return m_expectations;
391 template<
size_t nparts,
size_t dimnss,
size_t dimss,
size_t dimy,
typename resamp_t,
typename float_t,
bool debug = false>
397 using sssv = Eigen::Matrix<float_t,dimss,1>;
399 using nsssv = Eigen::Matrix<float_t,dimnss,1>;
401 using osv = Eigen::Matrix<float_t,dimy,1>;
403 using nsssMat = Eigen::Matrix<float_t,dimnss,dimnss>;
405 using Mat = Eigen::Matrix<float_t,Eigen::Dynamic,Eigen::Dynamic>;
437 const std::vector<std::function<
const Mat(
const nsssv &x1tLogProbs,
const sssv &x2t)> >& fs
438 = std::vector<std::function<
const Mat(
const nsssv&,
const sssv&)> >());
521 template<
size_t nparts,
size_t dimnss,
size_t dimss,
size_t dimy,
typename resamp_t,
typename float_t,
bool debug>
524 , m_lastLogCondLike(0.0)
531 template<
size_t nparts,
size_t dimnss,
size_t dimss,
size_t dimy,
typename resamp_t,
typename float_t,
bool debug>
535 template<
size_t nparts,
size_t dimnss,
size_t dimss,
size_t dimy,
typename resamp_t,
typename float_t,
bool debug>
543 float_t sumexpdenom(0.0);
544 float_t m1(-std::numeric_limits<float_t>::infinity());
545 float_t m2 = *std::max_element(m_logUnNormWeights.begin(), m_logUnNormWeights.end());
546 for(
size_t ii = 0; ii < nparts; ++ii){
548 newX2Samp = fSamp(m_p_samps[ii]);
549 updateHMM(m_p_innerMods[ii], data, newX2Samp);
550 sumexpdenom += std::exp(m_logUnNormWeights[ii] - m2);
552 m_logUnNormWeights[ii] += m_p_innerMods[ii].getLogCondLike();
555 #ifndef DROPPINGTHISINRPACKAGE
557 std::cout <<
"time: " << m_now <<
", transposed x2 sample: " << newX2Samp.transpose() <<
", log unnorm weight: " << m_logUnNormWeights[ii] <<
"\n";
561 if(m_logUnNormWeights[ii] > m1)
562 m1 = m_logUnNormWeights[ii];
564 m_p_samps[ii] = newX2Samp;
568 float_t sumexpnumer(0.0);
569 for(
size_t p = 0; p < nparts; ++p)
570 sumexpnumer += std::exp(m_logUnNormWeights[p] - m1);
571 m_lastLogCondLike = m1 + std::log(sumexpnumer) - m2 - std::log(sumexpdenom);
578 Mat testOutput = h(m_p_innerMods[0].getFilterVecLogProbs(), m_p_samps[0]);
579 unsigned int rows = testOutput.rows();
580 unsigned int cols = testOutput.cols();
581 Mat numer = Mat::Zero(rows,cols);
583 for(
size_t prtcl = 0; prtcl < nparts; ++prtcl){
584 numer += h(m_p_innerMods[prtcl].getFilterVecLogProbs(), m_p_samps[prtcl])*std::exp(m_logUnNormWeights[prtcl] - m1);
585 denom += std::exp( m_logUnNormWeights[prtcl] - m1 );
587 m_expectations[fId] = numer/denom;
590 #ifndef DROPPINGTHISINRPACKAGE
592 std::cout <<
"transposed expec " << fId <<
": " << m_expectations[fId].transpose() <<
"\n";
599 if( (m_now+1) % m_rs == 0)
600 m_resampler.resampLogWts(m_p_innerMods, m_p_samps, m_logUnNormWeights);
610 float_t m1(-std::numeric_limits<float_t>::infinity());
611 for(
size_t ii = 0; ii < nparts; ++ii){
613 m_p_samps[ii] = muSamp();
614 tmpLogProbs = initHMMLogProbVec(m_p_samps[ii]);
615 tmpLogTransMat = initHMMLogTransMat(m_p_samps[ii]);
616 m_p_innerMods[ii] =
cfModType(tmpLogProbs, tmpLogTransMat);
617 this->updateHMM(m_p_innerMods[ii], data, m_p_samps[ii]);
618 m_logUnNormWeights[ii] = m_p_innerMods[ii].getLogCondLike();
621 #ifndef DROPPINGTHISINRPACKAGE
623 std::cout <<
"time: " << m_now <<
", transposed x2 sample: " << m_p_samps[ii].transpose() <<
", log unnorm weight: " << m_logUnNormWeights[ii] <<
"\n";
628 if(m_logUnNormWeights[ii] > m1)
629 m1 = m_logUnNormWeights[ii];
634 for(
size_t p = 0; p < nparts; ++p)
635 sumexp += std::exp(m_logUnNormWeights[p] - m1);
636 m_lastLogCondLike = m1 + std::log(sumexp) - std::log(
static_cast<float_t
>(nparts));
639 m_expectations.resize(fs.size());
644 Mat testOutput = h(m_p_innerMods[0].getFilterVecLogProbs(), m_p_samps[0]);
645 unsigned int rows = testOutput.rows();
646 unsigned int cols = testOutput.cols();
647 Mat numer = Mat::Zero(rows,cols);
649 for(
size_t prtcl = 0; prtcl < nparts; ++prtcl){
650 numer += h(m_p_innerMods[prtcl].getFilterVecLogProbs(), m_p_samps[prtcl]) * std::exp(m_logUnNormWeights[prtcl] - m1);
651 denom += std::exp( m_logUnNormWeights[prtcl] - m1 );
653 m_expectations[fId] = numer/denom;
656 #ifndef DROPPINGTHISINRPACKAGE
658 std::cout <<
"transposed expec " << fId <<
": " << m_expectations[fId].transpose() <<
"\n";
665 if( (m_now+1) % m_rs == 0)
666 m_resampler.resampLogWts(m_p_innerMods, m_p_samps, m_logUnNormWeights);
675 template<
size_t nparts,
size_t dimnss,
size_t dimss,
size_t dimy,
typename resamp_t,
typename float_t,
bool debug>
678 return m_lastLogCondLike;
682 template<
size_t nparts,
size_t dimnss,
size_t dimss,
size_t dimy,
typename resamp_t,
typename float_t,
bool debug>
685 return m_expectations;
701 template<
size_t nparts,
size_t dimnss,
size_t dimss,
size_t dimy,
typename resamp_t,
typename float_t,
bool debug = false>
708 using sssv = Eigen::Matrix<float_t,dimss,1>;
710 using nsssv = Eigen::Matrix<float_t,dimnss,1>;
712 using osv = Eigen::Matrix<float_t,dimy,1>;
714 using Mat = Eigen::Matrix<float_t,Eigen::Dynamic,Eigen::Dynamic>;
716 using nsssMat = Eigen::Matrix<float_t,dimnss,dimnss>;
745 void filter(
const osv &data,
const std::vector<std::function<
const Mat(
const nsssv &x1t,
const sssv &x2t)> >& fs
746 = std::vector<std::function<
const Mat(
const nsssv &x1t,
const sssv &x2t)> >() );
870 template<
size_t nparts,
size_t dimnss,
size_t dimss,
size_t dimy,
typename resamp_t,
typename float_t,
bool debug>
873 , m_lastLogCondLike(0.0)
880 template<
size_t nparts,
size_t dimnss,
size_t dimss,
size_t dimy,
typename resamp_t,
typename float_t,
bool debug>
884 template<
size_t nparts,
size_t dimnss,
size_t dimss,
size_t dimy,
typename resamp_t,
typename float_t,
bool debug>
893 float_t m1(-std::numeric_limits<float_t>::infinity());
894 float_t m2 = *std::max_element(m_logUnNormWeights.begin(), m_logUnNormWeights.end());
895 float_t sumexpdenom(0.0);
896 for(
size_t ii = 0; ii < nparts; ++ii){
897 newX2Samp = qSamp(m_p_samps[ii], data);
898 this->updateKalman(m_p_innerMods[ii], data, newX2Samp);
901 sumexpdenom += std::exp(m_logUnNormWeights[ii] - m2);
904 m_logUnNormWeights[ii] += m_p_innerMods[ii].getLogCondLike() + logFEv(newX2Samp, m_p_samps[ii]) - logQEv(newX2Samp, m_p_samps[ii], data);
907 #ifndef DROPPINGTHISINRPACKAGE
909 std::cout <<
"time: " << m_now <<
", transposed x2 sample: " << newX2Samp.transpose() <<
", log unnorm weight: " << m_logUnNormWeights[ii] <<
"\n";
913 if(m_logUnNormWeights[ii] > m1)
914 m1 = m_logUnNormWeights[ii];
916 m_p_samps[ii] = newX2Samp;
920 float_t sumexpnumer(0.0);
921 for(
size_t p = 0; p < nparts; ++p)
922 sumexpnumer += std::exp(m_logUnNormWeights[p] - m1);
923 m_lastLogCondLike = m1 + std::log(sumexpnumer) - m2 - std::log(sumexpdenom);
930 Mat testOutput = h(m_p_innerMods[0].getFilterVec(), m_p_samps[0]);
931 unsigned int rows = testOutput.rows();
932 unsigned int cols = testOutput.cols();
933 Mat numer = Mat::Zero(rows,cols);
935 for(
size_t prtcl = 0; prtcl < nparts; ++prtcl){
936 numer += h(m_p_innerMods[prtcl].getFilterVec(), m_p_samps[prtcl]) * std::exp(m_logUnNormWeights[prtcl] - m1);
937 denom += std::exp( m_logUnNormWeights[prtcl] - m1 );
939 m_expectations[fId] = numer/denom;
942 #ifndef DROPPINGTHISINRPACKAGE
944 std::cout <<
"transposed expec " << fId <<
": " << m_expectations[fId].transpose() <<
"\n";
951 if( (m_now+1)%m_rs == 0)
952 m_resampler.resampLogWts(m_p_innerMods, m_p_samps, m_logUnNormWeights);
962 float_t m1(-std::numeric_limits<float_t>::infinity());
963 for(
size_t ii = 0; ii < nparts; ++ii){
964 m_p_samps[ii] = q1Samp(data);
965 tmpMean = initKalmanMean(m_p_samps[ii]);
966 tmpVar = initKalmanVar(m_p_samps[ii]);
967 m_p_innerMods[ii] =
cfModType(tmpMean, tmpVar);
968 this->updateKalman(m_p_innerMods[ii], data, m_p_samps[ii]);
970 m_logUnNormWeights[ii] = m_p_innerMods[ii].getLogCondLike() + logMuEv(m_p_samps[ii]) - logQ1Ev(m_p_samps[ii], data);
973 #ifndef DROPPINGTHISINRPACKAGE
975 std::cout <<
"time: " << m_now <<
", transposed x2 sample: " << m_p_samps[ii].transpose() <<
", log unnorm weight: " << m_logUnNormWeights[ii] <<
"\n";
979 if(m_logUnNormWeights[ii] > m1)
980 m1 = m_logUnNormWeights[ii];
985 for(
size_t p = 0; p < nparts; ++p)
986 sumexp += std::exp(m_logUnNormWeights[p] - m1);
987 m_lastLogCondLike = m1 + std::log(sumexp) - std::log(
static_cast<float_t
>(nparts));
990 m_expectations.resize(fs.size());
995 Mat testOutput = h(m_p_innerMods[0].getFilterVec(), m_p_samps[0]);
996 unsigned int rows = testOutput.rows();
997 unsigned int cols = testOutput.cols();
998 Mat numer = Mat::Zero(rows,cols);
1000 for(
size_t prtcl = 0; prtcl < nparts; ++prtcl){
1001 numer += h(m_p_innerMods[prtcl].getFilterVec(), m_p_samps[prtcl]) * std::exp(m_logUnNormWeights[prtcl] - m1);
1002 denom += std::exp( m_logUnNormWeights[prtcl] - m1 );
1004 m_expectations[fId] = numer/denom;
1007 #ifndef DROPPINGTHISINRPACKAGE
1009 std::cout <<
"transposed expec " << fId <<
": " << m_expectations[fId].transpose() <<
"\n";
1016 if( (m_now+1)%m_rs == 0)
1017 m_resampler.resampLogWts(m_p_innerMods, m_p_samps, m_logUnNormWeights);
1026 template<
size_t nparts,
size_t dimnss,
size_t dimss,
size_t dimy,
typename resamp_t,
typename float_t,
bool debug>
1029 return m_lastLogCondLike;
1033 template<
size_t nparts,
size_t dimnss,
size_t dimss,
size_t dimy,
typename resamp_t,
typename float_t,
bool debug>
1036 return m_expectations;
1053 template<
size_t nparts,
size_t dimnss,
size_t dimss,
size_t dimy,
typename resamp_t,
typename float_t,
bool debug = false>
1060 using sssv = Eigen::Matrix<float_t,dimss,1>;
1062 using nsssv = Eigen::Matrix<float_t,dimnss,1>;
1064 using osv = Eigen::Matrix<float_t,dimy,1>;
1066 using Mat = Eigen::Matrix<float_t,Eigen::Dynamic,Eigen::Dynamic>;
1068 using nsssMat = Eigen::Matrix<float_t,dimnss,dimnss>;
1097 void filter(
const osv &data,
const std::vector<std::function<
const Mat(
const nsssv &x1t,
const sssv &x2t)> >& fs
1098 = std::vector<std::function<
const Mat(
const nsssv &x1t,
const sssv &x2t)> >() );
1180 template<
size_t nparts,
size_t dimnss,
size_t dimss,
size_t dimy,
typename resamp_t,
typename float_t,
bool debug>
1183 , m_lastLogCondLike(0.0)
1184 , m_rs(resamp_sched)
1190 template<
size_t nparts,
size_t dimnss,
size_t dimss,
size_t dimy,
typename resamp_t,
typename float_t,
bool debug>
1194 template<
size_t nparts,
size_t dimnss,
size_t dimss,
size_t dimy,
typename resamp_t,
typename float_t,
bool debug>
1203 float_t m1(-std::numeric_limits<float_t>::infinity());
1204 float_t m2 = *std::max_element(m_logUnNormWeights.begin(), m_logUnNormWeights.end());
1205 float_t sumexpdenom(0.0);
1206 for(
size_t ii = 0; ii < nparts; ++ii){
1208 newX2Samp = fSamp(m_p_samps[ii], data);
1209 this->updateKalman(m_p_innerMods[ii], data, newX2Samp);
1212 sumexpdenom += std::exp(m_logUnNormWeights[ii] - m2);
1215 m_logUnNormWeights[ii] += m_p_innerMods[ii].getLogCondLike();
1218 #ifndef DROPPINGTHISINRPACKAGE
1220 std::cout <<
"time: " << m_now <<
", transposed x2 sample: " << newX2Samp.transpose() <<
", log unnorm weight: " << m_logUnNormWeights[ii] <<
"\n";
1224 if(m_logUnNormWeights[ii] > m1)
1225 m1 = m_logUnNormWeights[ii];
1227 m_p_samps[ii] = newX2Samp;
1231 float_t sumexpnumer(0.0);
1232 for(
size_t p = 0; p < nparts; ++p)
1233 sumexpnumer += std::exp(m_logUnNormWeights[p] - m1);
1234 m_lastLogCondLike = m1 + std::log(sumexpnumer) - m2 - std::log(sumexpdenom);
1237 unsigned int fId(0);
1241 Mat testOutput = h(m_p_innerMods[0].getFilterVec(), m_p_samps[0]);
1242 unsigned int rows = testOutput.rows();
1243 unsigned int cols = testOutput.cols();
1244 Mat numer = Mat::Zero(rows,cols);
1246 for(
size_t prtcl = 0; prtcl < nparts; ++prtcl){
1247 numer += h(m_p_innerMods[prtcl].getFilterVec(), m_p_samps[prtcl]) * std::exp(m_logUnNormWeights[prtcl] - m1);
1248 denom += std::exp( m_logUnNormWeights[prtcl] - m1 );
1250 m_expectations[fId] = numer/denom;
1253 #ifndef DROPPINGTHISINRPACKAGE
1255 std::cout <<
"transposed expec " << fId <<
": " << m_expectations[fId].transpose() <<
"\n";
1262 if( (m_now+1)%m_rs == 0)
1263 m_resampler.resampLogWts(m_p_innerMods, m_p_samps, m_logUnNormWeights);
1273 float_t m1(-std::numeric_limits<float_t>::infinity());
1274 for(
size_t ii = 0; ii < nparts; ++ii){
1275 m_p_samps[ii] = muSamp(data);
1276 tmpMean = initKalmanMean(m_p_samps[ii]);
1277 tmpVar = initKalmanVar(m_p_samps[ii]);
1278 m_p_innerMods[ii] =
cfModType(tmpMean, tmpVar);
1279 this->updateKalman(m_p_innerMods[ii], data, m_p_samps[ii]);
1281 m_logUnNormWeights[ii] = m_p_innerMods[ii].getLogCondLike();
1284 #ifndef DROPPINGTHISINRPACKAGE
1286 std::cout <<
"time: " << m_now <<
", transposed x2 sample: " << m_p_samps[ii].transpose() <<
", log unnorm weight: " << m_logUnNormWeights[ii] <<
"\n";
1290 if(m_logUnNormWeights[ii] > m1)
1291 m1 = m_logUnNormWeights[ii];
1295 float_t sumexp(0.0);
1296 for(
size_t p = 0; p < nparts; ++p)
1297 sumexp += std::exp(m_logUnNormWeights[p] - m1);
1298 m_lastLogCondLike = m1 + std::log(sumexp) - std::log(
static_cast<float_t
>(nparts));
1301 m_expectations.resize(fs.size());
1302 unsigned int fId(0);
1306 Mat testOutput = h(m_p_innerMods[0].getFilterVec(), m_p_samps[0]);
1307 unsigned int rows = testOutput.rows();
1308 unsigned int cols = testOutput.cols();
1309 Mat numer = Mat::Zero(rows,cols);
1311 for(
size_t prtcl = 0; prtcl < nparts; ++prtcl){
1312 numer += h(m_p_innerMods[prtcl].getFilterVec(), m_p_samps[prtcl])*std::exp(m_logUnNormWeights[prtcl] - m1);
1313 denom += std::exp( m_logUnNormWeights[prtcl] - m1 );
1315 m_expectations[fId] = numer/denom;
1318 #ifndef DROPPINGTHISINRPACKAGE
1320 std::cout <<
"transposed expec " << fId <<
": " << m_expectations[fId].transpose() <<
"\n";
1327 if( (m_now+1)%m_rs == 0)
1328 m_resampler.resampLogWts(m_p_innerMods, m_p_samps, m_logUnNormWeights);
1337 template<
size_t nparts,
size_t dimnss,
size_t dimss,
size_t dimy,
typename resamp_t,
typename float_t,
bool debug>
1340 return m_lastLogCondLike;
1344 template<
size_t nparts,
size_t dimnss,
size_t dimss,
size_t dimy,
typename resamp_t,
typename float_t,
bool debug>
1347 return m_expectations;