update GaussianMixture::likelihood to compute the logNormalizers
							parent
							
								
									79c7c6a8b6
								
							
						
					
					
						commit
						9a6d2cf323
					
				|  | @ -202,8 +202,25 @@ std::shared_ptr<GaussianMixtureFactor> GaussianMixture::likelihood( | |||
|         const auto likelihood_m = conditional->likelihood(given); | ||||
|         return likelihood_m; | ||||
|       }); | ||||
| 
 | ||||
|   // First compute all the sqrt(|2 pi Sigma|) terms
 | ||||
|   auto computeLogNormalizers = [](const GaussianFactor::shared_ptr &gf) { | ||||
|     auto jf = std::dynamic_pointer_cast<JacobianFactor>(gf); | ||||
|     // If we have, say, a Hessian factor, then no need to do anything
 | ||||
|     if (!jf) return 0.0; | ||||
| 
 | ||||
|     auto model = jf->get_model(); | ||||
|     // If there is no noise model, there is nothing to do.
 | ||||
|     if (!model) { | ||||
|       return 0.0; | ||||
|     } | ||||
|     return ComputeLogNormalizer(model); | ||||
|   }; | ||||
| 
 | ||||
|   AlgebraicDecisionTree<Key> log_normalizers = | ||||
|       DecisionTree<Key, double>(likelihoods, computeLogNormalizers); | ||||
|   return std::make_shared<GaussianMixtureFactor>( | ||||
|       continuousParentKeys, discreteParentKeys, likelihoods, true); | ||||
|       continuousParentKeys, discreteParentKeys, likelihoods, log_normalizers); | ||||
| } | ||||
| 
 | ||||
| /* ************************************************************************* */ | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue