Commit Graph

522 Commits (02524f42e7893fc7b3232f85f8077fb6c20bf45c)

Author SHA1 Message Date
Richard Roberts d7767188b3 Merged from branch 'trunk' 2013-07-01 13:11:15 +00:00
Richard Roberts 77a1e9a485 Added ISAM2::marginalCovariance function. 2013-06-29 02:19:03 +00:00
Richard Roberts 123657e3d0 Merged from branch 'trunk' 2013-06-24 15:28:16 +00:00
Richard Roberts 14a71aeedc Put header-implemented unit test functions in anonymous namespaces to avoid duplicate symbols in SINGLE_TEST_EXE mode 2013-06-20 16:05:24 +00:00
Richard Roberts 8f4688fd5b Compiling serialization unit tests with /bigobj on windows 2013-06-20 16:05:21 +00:00
Richard Roberts 400e20420c Adding headers to list of sources in top-level unit tests so that they show up in visual studio 2013-06-20 16:05:20 +00:00
Richard Roberts 8f9d5ec2e2 Merge branch 'trunk' 2013-06-17 21:15:57 +00:00
Alex Cunningham 19f7da62dd Refactored existing serialization functionality, added exposed interface for serialization 2013-06-12 19:30:20 +00:00
Alex Cunningham 2196953188 Removed reference to nonexistant test_lib 2013-06-11 20:26:34 +00:00
Alex Cunningham 0c7182b713 Removed unnecessary using statements 2013-06-11 14:36:50 +00:00
Alex Cunningham 37f936d41c Cleanup, whitespace 2013-06-11 14:36:50 +00:00
Alex Cunningham 7b79cfc38c Removed all non-test/timing cpp files from tests folder, small example now is header-only 2013-06-11 14:35:22 +00:00
Richard Roberts d5e721a1d0 Continued work on unordered classes and elimination algorithm 2013-06-06 15:36:11 +00:00
Alex Cunningham 9c61d15fb1 Caught corner case in summarization causing ccolamd to segfault 2013-05-23 18:12:00 +00:00
Frank Dellaert d05560687b Avoid segfault on linking 2013-05-20 22:23:04 +00:00
Stephen Williams 07c4c95f18 Added serialization unit tests for binary files 2013-05-08 13:23:46 +00:00
Alex Cunningham 4e0dbbc2b1 Added tests for each summarization mode 2013-05-08 10:14:19 +00:00
Alex Cunningham c74de0136c Changed interface to allow for different modes 2013-05-08 10:14:10 +00:00
Alex Cunningham acd6e629e8 Moved older functions back to gtsam_unstable, cleanup. All tests pass. Rearranged summarization wrap interfaces. 2013-05-08 10:13:57 +00:00
Alex Cunningham 81f63bcc0e Rearranging summarization, now with unit test in gtsam 2013-05-08 10:11:45 +00:00
Richard Roberts 547323cc79 Fixed a bunch of compiler warnings 2013-04-05 21:34:04 +00:00
Richard Roberts f773a34834 Renamed experimentalMarginalizeLeaves to marginalizeLeaves and added comment 2013-03-26 20:46:08 +00:00
Richard Roberts e2aca2039e Further fix in iSAM2 marginalization 2013-03-20 13:48:16 +00:00
Richard Roberts 596c5cdae8 Revamped ISAM2::marginalizeLeaves again, more tree algorithm instead of relying on sorted keys, hopefully correct this time. 2013-03-18 19:28:02 +00:00
Richard Roberts 6111c099ab Improved build of shared vs static GTSAM libraries - now possible to build either one or both, executables link to the shared if it is being build, or otherwise to the static. Also removed separate shared/static CMake flags for gtsam_unstable, now uses the same GTSAM_BUILD_SHARED and GTSAM_BUILD_STATIC as gtsam. 2013-03-13 18:17:39 +00:00
Richard Roberts 72db4793c5 Fixed bugs in iSAM2 leaf marginalization found in HMF testing - set of factors to remove, adding new leaf clique from remaining variables. Also relies on bug fix in BayesTree::removeClique a couple of commits ago. 2013-03-05 05:47:27 +00:00
Richard Roberts cd300bfeff First pass at marginalization of leaves in iSAM2 - passes unit tests but needs to be tested on real data 2013-02-24 19:09:54 +00:00
Alex Cunningham 7aa45115a1 Replaced depreciated boost::shared_dynamic_cast with boost::dynamic_pointer_cast to work with boost 1.53 2013-02-11 20:24:53 +00:00
Duy-Nguyen Ta 6eafc9420e update namespace mEstimator for unittests 2013-02-08 00:47:52 +00:00
Richard Roberts 013705232c Maintain reverse-lookup inside of Ordering, to allow fast partial permutations, and modified iSAM2 to use partial permutations on Ordering. Removed InvertedOrdering and updated other GTSAM code and unit tests to use the Ordering reverse-lookup function "key" instead of calculating and inverse ordering. 2013-01-08 23:31:06 +00:00
Richard Roberts c42bccbb3e Increased chain length in timeiSAM2Chain 2012-12-18 14:21:49 +00:00
Richard Roberts 4e7393cc08 Added timing test for a long chain in iSAM2 2012-12-18 14:21:12 +00:00
Richard Roberts 7309aa0ffa Unit tests pass with piecewise VectorValues implementation (for fast permutations) 2012-12-18 14:21:02 +00:00
Richard Roberts bd285fbb52 Merge remote-tracking branch 'svn/trunk' into isam2-chain-optimization
Conflicts:
	gtsam/linear/HessianFactor.cpp
	gtsam/linear/VectorValues.cpp
2012-12-18 14:20:31 +00:00
Richard Roberts 5b9271cb97 VV work 2012-11-23 23:22:53 +00:00
Richard Roberts aba48e4492 Commented out serialization in timeIncremental 2012-11-14 00:55:31 +00:00
Richard Roberts 0c3761a2a9 Reverted r14178, r14179, r14195, r14196 (isam2 chain optimizations) to move them to a branch 2012-11-11 20:51:03 +00:00
Yong-Dian Jian 43778a6ed3 --update the distance() of robust noise model
--add a nonlinear optimization unit test using robust noise model
2012-11-06 22:42:01 +00:00
Richard Roberts 43f08ce806 Increased chain length in timeiSAM2Chain 2012-11-05 01:04:16 +00:00
Richard Roberts 10f69cfca0 Added timing test for a long chain in iSAM2 2012-11-02 22:07:30 +00:00
Richard Roberts 46c1d0c512 Added joint marginal timing to timeIncremental script 2012-10-31 22:27:36 +00:00
Richard Roberts 4d4e17c2a7 Joint marginals using lowest-common-ancestor shortcuts. As part of this commit, caching of shortcuts is removed, the BayesTreeCliqueBase::marginal function computing single-variable shortcut marginals is removed, and the factor/frontal size checks in symbolic and discrete elimination are modified to permit eliminating empty factors or zero frontal variables. 2012-10-28 06:21:21 +00:00
Richard Roberts 279738c56f Renamed unit tests to match file name 2012-10-28 06:21:17 +00:00
Richard Roberts 920bb52453 Moved eliminate and eliminateOne from inference to FactorGraph 2012-10-22 17:49:41 +00:00
Richard Roberts 656080ad2f Fixed warning 2012-10-08 23:58:57 +00:00
Richard Roberts 3218a7bca4 Added missing main function 2012-10-08 23:03:02 +00:00
Richard Roberts 9793f8b7f7 Finalized batch and incremental timing scripts 2012-10-08 22:40:47 +00:00
Richard Roberts f3a2887af1 Moved GaussianBayesTree tests into their own file, out of testGaussianISAM 2012-10-08 22:40:40 +00:00
Richard Roberts b60189104c Added checks for proper noise model dimension 2012-10-05 23:23:40 +00:00
Alex Cunningham 054c326e3c Added tests related to determining why non-unit sigmas were occurring in bayes tree - solution: Vector_() is dangerous 2012-10-04 20:23:45 +00:00
Richard Roberts 89b50e7679 Renamed tic -> gttic and toc -> gttoc to avoid conflict with PCL tic/toc 2012-10-02 20:18:41 +00:00
Richard Roberts c44f8f7f80 Fixed examples from timing statement change (missed) 2012-10-02 18:49:48 +00:00
Richard Roberts 4876cc7ff7 Revamped timing statements - much easier to use, exception-safe (see email to frankcvs list) 2012-10-02 18:36:39 +00:00
Chris Beall 4297d24c96 changed tabs to spaces for consistent indentation in all of GTSAM 2012-10-02 14:40:07 +00:00
Richard Roberts 96ce28625b Timing marginals in timeIncremental 2012-10-01 16:12:43 +00:00
Richard Roberts 784e9f5755 Added overall timing scripts for batch and incremental (ISAM2) solving 2012-09-28 17:48:49 +00:00
Frank Dellaert aeb43bc8fc Used technique described in http://gcc.gnu.org/onlinedocs/gcc/Diagnostic-Pragmas.html to turn off excessive warnings generated by boost lambda headers 2012-09-16 18:07:50 +00:00
Frank Dellaert 89cd600165 avoid warnings 2012-09-16 17:54:43 +00:00
Frank Dellaert 7266293a61 Cleaned up some remaining JacobinaFactorGraph remnants 2012-09-05 03:52:01 +00:00
Frank Dellaert c4c5dec9a3 Fixed testIterative unit tests 2012-09-05 03:06:22 +00:00
Richard Roberts b0508cc1a8 Removed JacobianFactorGraph - moved its linear algebra interface to GaussianFactorGraph and redirected all uses of it to GaussianFactorGraph 2012-09-04 22:42:09 +00:00
Frank Dellaert c55f4be0d1 Comments added 2012-09-04 22:20:40 +00:00
Richard Roberts 73f8c0830b Created new dense matrix functions in GaussianFactorGraph returning pair<Matrix,Vector> for easier access, and renamed functions to augmentedJacobian, augmentedHessian, jacobian, hessian 2012-09-04 15:05:57 +00:00
Richard Roberts abd07e553e Made new global functions in unit tests static to avoid duplicate symbols 2012-09-04 15:05:55 +00:00
Yong-Dian Jian af652b0e04 remove simpleSPCG
reorg SubgraphSolver
add unit test for SubgraphSolver
2012-09-03 19:43:08 +00:00
Richard Roberts 9497a233ce Cleaned up all remaining commented-out unit tests from the old linear rewrite - removed or reenabled as needed. 2012-09-03 18:36:05 +00:00
Frank Dellaert 35d188e36d Moved testIterative.cpp back to GTSAM, made the first test compile/run 2012-09-03 18:01:24 +00:00
Richard Roberts b6150bd27e Removed deprecated unit tests from testGaussianFactorGraphB and moved SPCG-specific ones to testGraph and testJacobianFactorGraph 2012-09-03 18:00:26 +00:00
Frank Dellaert ab7594e8f0 Made SPCG unit tests compile again, needed several fixes in iterative.h 2012-09-03 00:06:13 +00:00
Richard Roberts 3e93c488e5 Removed extra code that was sometimes maintaining a staircase pattern in JacobianFactor by sorting rows - a holdover from the staircase optimization that is no longer done now that we are using Eigen's QR 2012-08-27 22:29:56 +00:00
Richard Roberts af48d086ed Fixed missing renames 2012-07-27 19:15:58 +00:00
Richard Roberts 5177f31a5d Merge remote-tracking branch 'svn/trunk' into remove_slam_namespaces
Conflicts:
	gtsam/nonlinear/SuccessiveLinearizationOptimizer.h
	matlab/examples/Pose2SLAMExample_circle.m
	matlab/examples/Pose2SLAMExample_graph.m
	matlab/examples/StereoVOExample_large.m
	tests/testGradientDescentOptimizer.cpp
2012-07-27 19:01:43 +00:00
Stephen Williams 7fc6a622bf Added additional factors to the serialization unit test 2012-07-25 22:13:22 +00:00
Yong-Dian Jian 168ddf5457 add Cal3DS2.calibrate() with fixed point iteration
reorg nonlinear conjugate gradient solvers
wrapper for the linear solvers
2012-07-24 21:06:33 +00:00
Stephen Williams 592fa95d66 Fixed serialization for LieVector and LieMatrix 2012-07-24 14:50:01 +00:00
Stephen Williams c2daf40c5d Removed SLAM namespaces from testSerializationSLAM. Instead of testing each SLAM namespace individually, a single test was created that instanciates all variable-factor combinations. However, there is currently an issue with LieVector that should be resolved. 2012-07-23 22:50:21 +00:00
Stephen Williams 01bcd9e939 Removed SLAM namespace from testNonlinearOptimizer 2012-07-23 22:47:31 +00:00
Stephen Williams 7a0030070c Removed SLAM namespace from testNonlinearISAM 2012-07-23 22:46:55 +00:00
Stephen Williams c8f3356af5 Removed SLAM namespace from testNonlinearEquality 2012-07-23 22:46:21 +00:00
Stephen Williams 0e6762e5c9 Removed SLAM namespace from testInferenceB 2012-07-23 22:45:46 +00:00
Stephen Williams 2de44904ad Removed SLAM namespace from testGraph 2012-07-23 22:45:07 +00:00
Stephen Williams a641f599f6 Removed SLAM namespace from testGradientDescentOptimizer 2012-07-23 22:44:02 +00:00
Stephen Williams fb33b8a609 removed SLAM namespace from testGaussianJunctionTreeB 2012-07-23 22:43:17 +00:00
Stephen Williams 0863b4148d Removed SLAM namespace from testGaussianISAM2 2012-07-23 22:42:42 +00:00
Stephen Williams f56d9c18e5 Removed SLAM namespace from testDoglegOptimizer 2012-07-23 22:41:53 +00:00
Richard Roberts c32d1c7e02 Fixed dimensions bug in Marginals and added unit test 2012-07-23 19:29:52 +00:00
Richard Roberts d397139fa9 Fixed dimensions bug in Marginals and added unit test 2012-07-23 19:20:53 +00:00
Alex Cunningham 6266a2c56d Removed SimpleString from CppUnitLite - now just uses std::string and boost::lexical_cast 2012-07-18 15:43:54 +00:00
Alex Cunningham af52b6811f Fixing small warnings 2012-07-10 18:35:57 +00:00
Richard Roberts 96fc5991db Automatic removal of unused variables in iSAM2 working in unit tests! 2012-06-30 22:32:49 +00:00
Richard Roberts 86f19362ab Return FastSet instead of std::set from NonlinearFactorGraph::keys() 2012-06-30 22:32:46 +00:00
Richard Roberts f06c7ad2e9 Lots of code de-duplication and cleanup in testGaussianISAM2 2012-06-30 22:32:42 +00:00
Richard Roberts abd6795f5b In progress removing variables from iSAM2 2012-06-30 19:17:54 +00:00
Richard Roberts 57ca7d77db Removed Permuted views to simplify a lot of code - all objects that need to be permuted now have their data rearranged instead of using the "Permuted" indirection class. 2012-06-30 01:45:21 +00:00
Richard Roberts c443ccbedd More adding of static to avoid naming conflicts in unit tests 2012-06-30 01:44:00 +00:00
Stephen Williams c7ff913f64 Added yet another configuration parameter to iSAM2. 'enablePartialRelinearizationCheck' checks variables for relinearization by descending the Bayes tree. Once a variable does not need to be relinearized, we stop checking that branch. A full check is still the default. 2012-06-28 20:46:53 +00:00
Alex Cunningham 4e2aae0121 formatting of comments, added parent() interface for Bayes Tree cliques 2012-06-26 18:49:30 +00:00
Frank Dellaert 1bf3ae51a9 Fixed make check compile error 2012-06-24 14:49:52 +00:00
Frank Dellaert 2d0ce1c3ca Streamlining of SLAM namespaces:
planarSLAM Values and Graph now derive from Pose3SLAM. 
visualSLAM Values and Graph now derive from pose3SLAM.
Several methods have been renamed to make them consistent through these 4 namespaces:
addPrior -> addPosePrior
addHardConstraint -> addPoseConstraint
addOdometry/addConstraint -> addRelativePose
All gtsam and matlab examples/tests run.
PS: please don't use the deprecated typedefs in these namespaces.
2012-06-24 02:48:12 +00:00
Frank Dellaert 0fe2d527f9 Fixed warnings due to discrete. GTSAM now Wall-safe? 2012-06-22 21:45:36 +00:00
Duy-Nguyen Ta 6f1ea87a00 clean up noise model: Remove Shared[NoiseModel] classes and headers, typedef for backward compatibility in NoiseModel.h. Fix all tests and examples to create shared noise models through static functions in noise model classes. Fix MATLAB wrapper and examples as well. Add tests for MATLAB examples 2012-06-22 19:36:49 +00:00
Stephen Williams 94a769a447 Created derived classes for SymbolicSequentialSolver and SymbolicMultifrontalSolver. This simplifies calling eliminate, mimics the Gaussian versions, and makes matlab wrapping possible. 2012-06-21 22:31:41 +00:00
Alex Cunningham 8789201822 Added mechanism to create a constrained ordering directly from a NonlinearFactorGraph 2012-06-20 01:35:42 +00:00
Yong-Dian Jian 9cb903fe08 1. remove a redundant constructor of PinholeCamera
2. remove a "backproject_from_camera" function from PinholeCamera, please use "backproject" directly
2012-06-19 15:28:22 +00:00
Richard Roberts d57fc32e74 To simplify FactorGraph, removed convertCastFactors and dynamicCastFactors from FactorGraph - replaced their calls with in-place code to do the needed conversions 2012-06-18 14:55:30 +00:00
Yong-Dian Jian cee80c1938 add a generic nonlinear cg solver 2012-06-13 01:21:10 +00:00
Yong-Dian Jian 8687e1293c disable error msg 2012-06-12 14:20:08 +00:00
Yong-Dian Jian 6fd2ac7f86 move iterative.* back to stable. add a template-style nonlinear iterative solver 2012-06-12 14:19:01 +00:00
Yong-Dian Jian 83dc580220 add a nonlinear gradient-descent optimizer, and a unit test.
todo: 1. test wolfe condition or armijo rule, 2. use iterative.h
2012-06-11 22:10:23 +00:00
Richard Roberts 3be4be9039 Moved "bigobj" MSVC compile flag to affect testSerializationSLAM 2012-06-11 14:50:22 +00:00
Frank Dellaert 80e2179a8d Cleaned up typedefs in FactorGraph.h (and removed FactorizationResult), and also made sure ::shared_ptr was never assumed to exist for a FACTOR template argument. Should it exist, ever? 2012-06-09 21:33:10 +00:00
Alex Cunningham b602e75a99 Removed the use of the ADD_CLONE_NONLINEAR_FACTOR macro, documented instances of clone() in factors 2012-06-09 21:06:06 +00:00
Alex Cunningham 3d2c3aff05 Moved all Simulated* example domains and smallExample to the tests folder so they are no longer installed 2012-06-09 20:15:44 +00:00
Alex Cunningham f45c236585 Isolated exception case for use of Symbol.key(), removed use of Symbol in several tests. Removed "using namespace xxx" in header 2012-06-09 19:17:15 +00:00
Frank Dellaert dc879fe280 Moved testSubgraphPreconditioner from experimental back to linear/tests, though most of it is commented out, mostly because of JacobianFactorGraph - GaussianFactorGraph distinction 2012-06-09 18:54:47 +00:00
Frank Dellaert 54bfe722ad Returning ordering from planarGraph is obsolete since Index change 2012-06-09 18:52:22 +00:00
Alex Cunningham d70622abe0 Rearranged matlab folders to avoid calling utility functions "examples" 2012-06-07 20:09:54 +00:00
Alex Cunningham 8bfe8571bc Removed template argument from NonlinearISAM, now just uses NonlinearFactorGraph 2012-06-07 17:45:05 +00:00
Yong-Dian Jian a9c36fc172 move linear algebra functions for jacobian factor graph to a new file 2012-06-07 01:24:19 +00:00
Alex Cunningham ad3b431c4d Moved building of wrap libraries to a cmake macro and moved install for matlab components to the appropriate folder 2012-06-05 18:05:00 +00:00
Richard Roberts bef45d5b7b Merged from branch 'branches/windows' 2012-06-05 14:09:58 +00:00
Frank Dellaert 10d6157d1d formatting/naming only 2012-06-05 13:29:04 +00:00
Richard Roberts 6b1e862688 Fix errors 2012-06-04 18:46:05 +00:00
Richard Roberts 9c8377f476 Merge remote-tracking branch 'svn/trunk' into windows
Conflicts:
	examples/Pose2SLAMExample.cpp
	examples/vSLAMexample/CMakeLists.txt
	examples/vSLAMexample/vISAMexample.cpp
	gtsam/nonlinear/ISAM2-impl.cpp
	gtsam/slam/pose2SLAM.cpp
	gtsam/slam/tests/testGeneralSFMFactor.cpp
	gtsam/slam/tests/testGeneralSFMFactor_Cal3Bundler.cpp
	gtsam/slam/tests/testPlanarSLAM.cpp
	gtsam/slam/tests/testPose2SLAM.cpp
	tests/testDoglegOptimizer.cpp
	tests/testGraph.cpp
2012-06-04 14:13:37 +00:00
Frank Dellaert f924d01bc3 Synchronized mixed case naming 2012-06-03 05:25:05 +00:00
Frank Dellaert 8440939f27 Using symbol_shorthand instead of redundant kx, kl functions 2012-06-02 19:28:21 +00:00
Frank Dellaert a2512475c9 Symbol.h is now included just in time, no longer by default everywhere. 2012-06-02 19:05:38 +00:00
Frank Dellaert 5160c2eb50 Significant API change in slam (GTSAM 2.0.1 or 2.1): to eliminate confusion and give the user more freedom in creating their own Keys, the different slam variants no longer create Symbol keys themselves. Instead, all interaction is done via Keys (which are just unordered, unsigned ints). All PoseSLAM unit tests and examples now just use sequential keys. However, a user can still create Keys using the Symbol constructor, which is illustrated in the landmark-based unit tests and examples. 2012-06-02 16:18:40 +00:00
Richard Roberts 1ca9e7049e Merge remote-tracking branch 'svn/trunk' into windows
Conflicts:
	gtsam/linear/HessianFactor.h
	gtsam/nonlinear/Marginals.cpp
2012-05-28 12:22:36 +00:00
Yong-Dian Jian ace4327897 reorg the nonlinear/linear parameters to accommodate the iterative solvers 2012-05-25 15:26:30 +00:00
Alex Cunningham 47830cd56f Added clone and rekey facilities to nonlinear factor graph 2012-05-24 16:05:01 +00:00
Richard Roberts bcfe39f4ae Merge remote-tracking branch 'svn/trunk' into windows
Conflicts:
	gtsam/nonlinear/Marginals.h
2012-05-23 18:55:18 +00:00
Richard Roberts c2c9c4a982 Almost everything compiles and passes in windows 2012-05-23 18:51:49 +00:00
bpeasle 3264bd5a39 Reverted testOccupancyGrid.cpp back so that it does not break make check. 2012-05-23 15:57:12 +00:00
Alex Cunningham c3ca8175e9 removed old SPCG test 2012-05-22 15:05:15 +00:00
Frank Dellaert 18e23c20df Added missing header 2012-05-22 12:27:34 +00:00
Alex Cunningham 2bd7a0ed43 Added generic re-key function to nonlinear factor 2012-05-21 20:54:42 +00:00
Alex Cunningham 54f6f3629c Added clone() functionality to nonlinear factors 2012-05-21 20:54:40 +00:00
Alex Cunningham b66dc3586d Small change to merge in compatibility patch 2012-05-21 19:44:25 +00:00
bpeasle d4a70b66d9 Added code to run MCMC with real data. 2012-05-21 19:06:26 +00:00
bpeasle ba6439dbb1 Implemented a very slow Metropolis algorithm 2012-05-18 22:09:20 +00:00
bpeasle 9682745b81 Added ray tracing and implemented LaserFactor::operator()(const Values &) 2012-05-18 20:12:08 +00:00
Alex Cunningham c50b972dd1 Added discrete to convenience libraries dependencies 2012-05-17 16:33:51 +00:00
bpeasle d0218cf512 2012-05-16 18:09:59 +00:00
Richard Roberts 1ce95c1d89 Removed LDL in favor of Cholesky 2012-05-15 15:49:14 +00:00
Richard Roberts 68467448a7 Fixed small LM bug (solving original instead of damped system) and added unit test 2012-05-15 13:23:43 +00:00
Richard Roberts 9e0996296a Added Cholesky/LDL switch in NonlinearOptimizer, preparing to remove
LDL, remove dependency of NonlinearOptimizer on linear solvers.
2012-05-15 05:08:57 +00:00
Richard Roberts 516e1610a1 Added joint marginals and unit tests 2012-05-15 00:01:38 +00:00
Stephen Williams 754e289737 Fixed errors in unit tests from updated NonlinearOptimizers 2012-05-14 22:31:42 +00:00
Richard Roberts 51d38f4b5d Added Marginals unit test and class 2012-05-14 21:33:03 +00:00