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;