diff --git a/include/multigrid_pclomp/multigrid_ndt_omp.h b/include/multigrid_pclomp/multigrid_ndt_omp.h index 0eebf35b..b5b9fed2 100644 --- a/include/multigrid_pclomp/multigrid_ndt_omp.h +++ b/include/multigrid_pclomp/multigrid_ndt_omp.h @@ -302,13 +302,20 @@ class MultiGridNormalDistributionsTransform : public pcl::Registration &score_gradient, Eigen::Matrix &hessian, const Eigen::Matrix &point_gradient, const Eigen::Matrix &point_hessian, const Eigen::Vector3d &x_trans, const Eigen::Matrix3d &c_inv, bool compute_hessian = true) const; + double updateDerivatives(Eigen::Matrix &score_gradient, Eigen::Matrix &hessian, const Eigen::Matrix &point_gradient, const Eigen::Matrix &point_hessian, const Eigen::Vector3d &x_trans, const Eigen::Matrix3d &c_inv, bool compute_hessian = true) const; /** \brief Precompute angular components of derivatives. * \note Equation 6.19 and 6.21 [Magnusson 2009]. @@ -385,9 +392,7 @@ class MultiGridNormalDistributionsTransform : public pcl::Registration &point_gradient, Eigen::Matrix &point_hessian, bool compute_hessian = true) const; - - void computePointDerivatives(Eigen::Vector3d &x, Eigen::Matrix &point_gradient, Eigen::Matrix &point_hessian, bool compute_hessian = true) const; + void computePointDerivatives(Eigen::Vector3d &x, Eigen::Matrix &point_gradient, Eigen::Matrix &point_hessian, bool compute_hessian = true) const; /** \brief Compute hessian of probability function w.r.t. the transformation vector. * \note Equation 6.13 [Magnusson 2009]. @@ -403,7 +408,7 @@ class MultiGridNormalDistributionsTransform : public pcl::Registration &hessian, const Eigen::Matrix &point_gradient, const Eigen::Matrix &point_hessian, const Eigen::Vector3d &x_trans, const Eigen::Matrix3d &c_inv) const; + void updateHessian(Eigen::Matrix &hessian, const Eigen::Matrix &point_gradient, const Eigen::Matrix &point_hessian, const Eigen::Vector3d &x_trans, const Eigen::Matrix3d &c_inv) const; /** \brief Compute line search step length and update transform and probability derivatives using More-Thuente method. * \note Search Algorithm [More, Thuente 1994] @@ -496,17 +501,13 @@ class MultiGridNormalDistributionsTransform : public pcl::Registration j_ang; + Eigen::Matrix j_ang_; /** \brief Precomputed Angular Hessian * * The precomputed angular derivatives for the hessian of a transformation vector, Equation 6.19 [Magnusson 2009]. */ - Eigen::Vector3d h_ang_a2_, h_ang_a3_, h_ang_b2_, h_ang_b3_, h_ang_c2_, h_ang_c3_, h_ang_d1_, h_ang_d2_, h_ang_d3_, h_ang_e1_, h_ang_e2_, h_ang_e3_, h_ang_f1_, h_ang_f2_, h_ang_f3_; - - Eigen::Matrix h_ang; + Eigen::Matrix h_ang_; Eigen::Matrix hessian_; std::vector> transformation_array_; diff --git a/include/multigrid_pclomp/multigrid_ndt_omp_impl.hpp b/include/multigrid_pclomp/multigrid_ndt_omp_impl.hpp index f85600d9..e3322fba 100644 --- a/include/multigrid_pclomp/multigrid_ndt_omp_impl.hpp +++ b/include/multigrid_pclomp/multigrid_ndt_omp_impl.hpp @@ -66,7 +66,7 @@ MultiGridNormalDistributionsTransform::MultiGridNormal gauss_d2_ = other.gauss_d2_; gauss_d3_ = other.gauss_d3_; trans_probability_ = other.trans_probability_; - // No need to copy j_ang and h_ang, as those matrices are re-computed on every computeDerivatives() call + // No need to copy j_ang_ and h_ang_, as those matrices are re-computed on every computeDerivatives() call hessian_ = other.hessian_; transformation_array_ = other.transformation_array_; @@ -176,7 +176,7 @@ void MultiGridNormalDistributionsTransform::computeTra gauss_c2 = outlier_ratio_ / pow(params_.resolution, 3); gauss_d3_ = -log(gauss_c2); gauss_d1_ = -log(gauss_c1 + gauss_c2) - gauss_d3_; - gauss_d2_ = -2 * log((-log(gauss_c1 * exp(-0.5) + gauss_c2) - gauss_d3_) / gauss_d1_); + gauss_d2_ = -2.0 * log((-log(gauss_c1 * exp(-0.5) + gauss_c2) - gauss_d3_) / gauss_d1_); if(guess != Eigen::Matrix4f::Identity()) { // Initialise final transformation to the guessed one @@ -186,6 +186,7 @@ void MultiGridNormalDistributionsTransform::computeTra } Eigen::Transform eig_transformation; + eig_transformation.matrix() = final_transformation_; transformation_array_.clear(); transformation_array_.push_back(final_transformation_); @@ -194,6 +195,7 @@ void MultiGridNormalDistributionsTransform::computeTra Eigen::Matrix p, delta_p, score_gradient; Eigen::Vector3f init_translation = eig_transformation.translation(); Eigen::Vector3f init_rotation = eig_transformation.rotation().eulerAngles(0, 1, 2); + p << init_translation(0), init_translation(1), init_translation(2), init_rotation(0), init_rotation(1), init_rotation(2); Eigen::Matrix hessian; @@ -234,7 +236,7 @@ void MultiGridNormalDistributionsTransform::computeTra } delta_p.normalize(); - delta_p_norm = computeStepLengthMT(p, delta_p, delta_p_norm, params_.step_size, params_.trans_epsilon / 2, score, score_gradient, hessian, output); + delta_p_norm = computeStepLengthMT(p, delta_p, delta_p_norm, params_.step_size, params_.trans_epsilon / 2.0, score, score_gradient, hessian, output); delta_p *= delta_p_norm; transformation_ = (Eigen::Translation(static_cast(delta_p(0)), static_cast(delta_p(1)), static_cast(delta_p(2))) * Eigen::AngleAxis(static_cast(delta_p(3)), Eigen::Vector3f::UnitX()) * Eigen::AngleAxis(static_cast(delta_p(4)), Eigen::Vector3f::UnitY()) * Eigen::AngleAxis(static_cast(delta_p(5)), Eigen::Vector3f::UnitZ())) @@ -279,6 +281,7 @@ template double MultiGridNormalDistributionsTransform::computeDerivatives(Eigen::Matrix &score_gradient, Eigen::Matrix &hessian, PointCloudSource &trans_cloud, Eigen::Matrix &p, bool compute_hessian) { score_gradient.setZero(); hessian.setZero(); + double score = 0; int total_neighborhood_count = 0; double nearest_voxel_score = 0; @@ -292,8 +295,8 @@ double MultiGridNormalDistributionsTransform::computeD std::vector neighborhood_counts(num_threads_); // Pre-allocate thread-wise point derivative matrices to avoid reallocate too many times - std::vector> t_point_gradients(num_threads_); - std::vector> t_point_hessians(num_threads_); + std::vector> t_point_gradients(params_.num_threads); + std::vector> t_point_hessians(params_.num_threads); for(size_t i = 0; i < num_threads_; ++i) { scores[i] = 0; @@ -442,50 +445,52 @@ void MultiGridNormalDistributionsTransform::computeAng } // Precomputed angular gradiant components. Letters correspond to Equation 6.19 [Magnusson 2009] - j_ang.setZero(); - j_ang.row(0).noalias() = Eigen::Vector4f((-sx * sz + cx * sy * cz), (-sx * cz - cx * sy * sz), (-cx * cy), 0.0f); - j_ang.row(1).noalias() = Eigen::Vector4f((cx * sz + sx * sy * cz), (cx * cz - sx * sy * sz), (-sx * cy), 0.0f); - j_ang.row(2).noalias() = Eigen::Vector4f((-sy * cz), sy * sz, cy, 0.0f); - j_ang.row(3).noalias() = Eigen::Vector4f(sx * cy * cz, (-sx * cy * sz), sx * sy, 0.0f); - j_ang.row(4).noalias() = Eigen::Vector4f((-cx * cy * cz), cx * cy * sz, (-cx * sy), 0.0f); - j_ang.row(5).noalias() = Eigen::Vector4f((-cy * sz), (-cy * cz), 0, 0.0f); - j_ang.row(6).noalias() = Eigen::Vector4f((cx * cz - sx * sy * sz), (-cx * sz - sx * sy * cz), 0, 0.0f); - j_ang.row(7).noalias() = Eigen::Vector4f((sx * cz + cx * sy * sz), (cx * sy * cz - sx * sz), 0, 0.0f); + j_ang_.setZero(); + + j_ang_.row(0) << (-sx * sz + cx * sy * cz), (-sx * cz - cx * sy * sz), (-cx * cy), 0.0f; + j_ang_.row(1) << (cx * sz + sx * sy * cz), (cx * cz - sx * sy * sz), (-sx * cy), 0.0f; + j_ang_.row(2) << (-sy * cz), sy * sz, cy, 0.0f; + j_ang_.row(3) << sx * cy * cz, (-sx * cy * sz), sx * sy, 0.0f; + j_ang_.row(4) << (-cx * cy * cz), cx * cy * sz, (-cx * sy), 0.0f; + j_ang_.row(5) << (-cy * sz), (-cy * cz), 0.0f, 0.0f; + j_ang_.row(6) << (cx * cz - sx * sy * sz), (-cx * sz - sx * sy * cz), 0.0f, 0.0f; + j_ang_.row(7) << (sx * cz + cx * sy * sz), (cx * sy * cz - sx * sz), 0.0f, 0.0f; if(compute_hessian) { // Precomputed angular hessian components. Letters correspond to Equation 6.21 and numbers correspond to row index [Magnusson 2009] - h_ang.setZero(); - h_ang.row(0).noalias() = Eigen::Vector4f((-cx * sz - sx * sy * cz), (-cx * cz + sx * sy * sz), sx * cy, 0.0f); // a2 - h_ang.row(1).noalias() = Eigen::Vector4f((-sx * sz + cx * sy * cz), (-cx * sy * sz - sx * cz), (-cx * cy), 0.0f); // a3 + h_ang_.setZero(); + + h_ang_.row(0) << (-cx * sz - sx * sy * cz), (-cx * cz + sx * sy * sz), sx * cy, 0.0f; // a2 + h_ang_.row(1) << (-sx * sz + cx * sy * cz), (-cx * sy * sz - sx * cz), (-cx * cy), 0.0f; // a3 - h_ang.row(2).noalias() = Eigen::Vector4f((cx * cy * cz), (-cx * cy * sz), (cx * sy), 0.0f); // b2 - h_ang.row(3).noalias() = Eigen::Vector4f((sx * cy * cz), (-sx * cy * sz), (sx * sy), 0.0f); // b3 + h_ang_.row(2) << (cx * cy * cz), (-cx * cy * sz), (cx * sy), 0.0f; // b2 + h_ang_.row(3) << (sx * cy * cz), (-sx * cy * sz), (sx * sy), 0.0f; // b3 - h_ang.row(4).noalias() = Eigen::Vector4f((-sx * cz - cx * sy * sz), (sx * sz - cx * sy * cz), 0, 0.0f); // c2 - h_ang.row(5).noalias() = Eigen::Vector4f((cx * cz - sx * sy * sz), (-sx * sy * cz - cx * sz), 0, 0.0f); // c3 + h_ang_.row(4) << (-sx * cz - cx * sy * sz), (sx * sz - cx * sy * cz), 0.0f, 0.0f; // c2 + h_ang_.row(5) << (cx * cz - sx * sy * sz), (-sx * sy * cz - cx * sz), 0.0f, 0.0f; // c3 - h_ang.row(6).noalias() = Eigen::Vector4f((-cy * cz), (cy * sz), (sy), 0.0f); // d1 - h_ang.row(7).noalias() = Eigen::Vector4f((-sx * sy * cz), (sx * sy * sz), (sx * cy), 0.0f); // d2 - h_ang.row(8).noalias() = Eigen::Vector4f((cx * sy * cz), (-cx * sy * sz), (-cx * cy), 0.0f); // d3 + h_ang_.row(6) << (-cy * cz), (cy * sz), (sy), 0.0f; // d1 + h_ang_.row(7) << (-sx * sy * cz), (sx * sy * sz), (sx * cy), 0.0f; // d2 + h_ang_.row(8) << (cx * sy * cz), (-cx * sy * sz), (-cx * cy), 0.0f; // d3 - h_ang.row(9).noalias() = Eigen::Vector4f((sy * sz), (sy * cz), 0, 0.0f); // e1 - h_ang.row(10).noalias() = Eigen::Vector4f((-sx * cy * sz), (-sx * cy * cz), 0, 0.0f); // e2 - h_ang.row(11).noalias() = Eigen::Vector4f((cx * cy * sz), (cx * cy * cz), 0, 0.0f); // e3 + h_ang_.row(9) << (sy * sz), (sy * cz), 0.0f, 0.0f; // e1 + h_ang_.row(10) << (-sx * cy * sz), (-sx * cy * cz), 0.0f, 0.0f; // e2 + h_ang_.row(11) << (cx * cy * sz), (cx * cy * cz), 0.0f, 0.0f; // e3 - h_ang.row(12).noalias() = Eigen::Vector4f((-cy * cz), (cy * sz), 0, 0.0f); // f1 - h_ang.row(13).noalias() = Eigen::Vector4f((-cx * sz - sx * sy * cz), (-cx * cz + sx * sy * sz), 0, 0.0f); // f2 - h_ang.row(14).noalias() = Eigen::Vector4f((-sx * sz + cx * sy * cz), (-cx * sy * sz - sx * cz), 0, 0.0f); // f3 + h_ang_.row(12) << (-cy * cz), (cy * sz), 0.0f, 0.0f; // f1 + h_ang_.row(13) << (-cx * sz - sx * sy * cz), (-cx * cz + sx * sy * sz), 0.0f, 0.0f; // f2 + h_ang_.row(14) << (-sx * sz + cx * sy * cz), (-cx * sy * sz - sx * cz), 0.0f, 0.0f; // f3 } } ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// template -void MultiGridNormalDistributionsTransform::computePointDerivatives(Eigen::Vector3d &x, Eigen::Matrix &point_gradient, Eigen::Matrix &point_hessian, bool compute_hessian) const { - Eigen::Vector4f x4(x[0], x[1], x[2], 0.0f); +void MultiGridNormalDistributionsTransform::computePointDerivatives(Eigen::Vector3d &x, Eigen::Matrix &point_gradient, Eigen::Matrix &point_hessian, bool compute_hessian) const { + Eigen::Vector4d x4(x[0], x[1], x[2], 0.0f); // Calculate first derivative of Transformation Equation 6.17 w.r.t. transform vector p. // Derivative w.r.t. ith element of transform vector corresponds to column i, Equation 6.18 and 6.19 [Magnusson 2009] - Eigen::Matrix x_j_ang = j_ang * x4; + auto x_j_ang = j_ang_ * x4; point_gradient(1, 3) = x_j_ang[0]; point_gradient(2, 3) = x_j_ang[1]; @@ -497,84 +502,44 @@ void MultiGridNormalDistributionsTransform::computePoi point_gradient(2, 5) = x_j_ang[7]; if(compute_hessian) { - Eigen::Matrix x_h_ang = h_ang * x4; + auto x_h_ang = h_ang_ * x4; // Vectors from Equation 6.21 [Magnusson 2009] - Eigen::Vector4f a(0, x_h_ang[0], x_h_ang[1], 0.0f); - Eigen::Vector4f b(0, x_h_ang[2], x_h_ang[3], 0.0f); - Eigen::Vector4f c(0, x_h_ang[4], x_h_ang[5], 0.0f); - Eigen::Vector4f d(x_h_ang[6], x_h_ang[7], x_h_ang[8], 0.0f); - Eigen::Vector4f e(x_h_ang[9], x_h_ang[10], x_h_ang[11], 0.0f); - Eigen::Vector4f f(x_h_ang[12], x_h_ang[13], x_h_ang[14], 0.0f); + Eigen::Vector4d a(0.0f, x_h_ang[0], x_h_ang[1], 0.0f); + Eigen::Vector4d b(0.0f, x_h_ang[2], x_h_ang[3], 0.0f); + Eigen::Vector4d c(0.0f, x_h_ang[4], x_h_ang[5], 0.0f); + Eigen::Vector4d d(x_h_ang[6], x_h_ang[7], x_h_ang[8], 0.0f); + Eigen::Vector4d e(x_h_ang[9], x_h_ang[10], x_h_ang[11], 0.0f); + Eigen::Vector4d f(x_h_ang[12], x_h_ang[13], x_h_ang[14], 0.0f); // Calculate second derivative of Transformation Equation 6.17 w.r.t. transform vector p. // Derivative w.r.t. ith and jth elements of transform vector corresponds to the 3x1 block matrix starting at (3i,j), Equation 6.20 and 6.21 [Magnusson 2009] - point_hessian.block<4, 1>((9 / 3) * 4, 3) = a; - point_hessian.block<4, 1>((12 / 3) * 4, 3) = b; - point_hessian.block<4, 1>((15 / 3) * 4, 3) = c; - point_hessian.block<4, 1>((9 / 3) * 4, 4) = b; - point_hessian.block<4, 1>((12 / 3) * 4, 4) = d; - point_hessian.block<4, 1>((15 / 3) * 4, 4) = e; - point_hessian.block<4, 1>((9 / 3) * 4, 5) = c; - point_hessian.block<4, 1>((12 / 3) * 4, 5) = e; - point_hessian.block<4, 1>((15 / 3) * 4, 5) = f; + point_hessian.block<4, 1>(12, 3) = a; + point_hessian.block<4, 1>(16, 3) = b; + point_hessian.block<4, 1>(20, 3) = c; + point_hessian.block<4, 1>(12, 4) = b; + point_hessian.block<4, 1>(16, 4) = d; + point_hessian.block<4, 1>(20, 4) = e; + point_hessian.block<4, 1>(12, 5) = c; + point_hessian.block<4, 1>(16, 5) = e; + point_hessian.block<4, 1>(20, 5) = f; } } ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// template -void MultiGridNormalDistributionsTransform::computePointDerivatives(Eigen::Vector3d &x, Eigen::Matrix &point_gradient, Eigen::Matrix &point_hessian, bool compute_hessian) const { - // Calculate first derivative of Transformation Equation 6.17 w.r.t. transform vector p. - // Derivative w.r.t. ith element of transform vector corresponds to column i, Equation 6.18 and 6.19 [Magnusson 2009] - point_gradient(1, 3) = x.dot(j_ang_a_); - point_gradient(2, 3) = x.dot(j_ang_b_); - point_gradient(0, 4) = x.dot(j_ang_c_); - point_gradient(1, 4) = x.dot(j_ang_d_); - point_gradient(2, 4) = x.dot(j_ang_e_); - point_gradient(0, 5) = x.dot(j_ang_f_); - point_gradient(1, 5) = x.dot(j_ang_g_); - point_gradient(2, 5) = x.dot(j_ang_h_); - - if(compute_hessian) { - // Vectors from Equation 6.21 [Magnusson 2009] - Eigen::Vector3d a, b, c, d, e, f; +double MultiGridNormalDistributionsTransform::updateDerivatives(Eigen::Matrix &score_gradient, Eigen::Matrix &hessian, const Eigen::Matrix &point_gradient, const Eigen::Matrix &point_hessian, const Eigen::Vector3d &x_trans, const Eigen::Matrix3d &c_inv, bool compute_hessian) const { + Eigen::Matrix x_trans4(x_trans[0], x_trans[1], x_trans[2], 0.0f); + Eigen::Matrix4d c_inv4 = Eigen::Matrix4d::Zero(); - a << 0, x.dot(h_ang_a2_), x.dot(h_ang_a3_); - b << 0, x.dot(h_ang_b2_), x.dot(h_ang_b3_); - c << 0, x.dot(h_ang_c2_), x.dot(h_ang_c3_); - d << x.dot(h_ang_d1_), x.dot(h_ang_d2_), x.dot(h_ang_d3_); - e << x.dot(h_ang_e1_), x.dot(h_ang_e2_), x.dot(h_ang_e3_); - f << x.dot(h_ang_f1_), x.dot(h_ang_f2_), x.dot(h_ang_f3_); - - // Calculate second derivative of Transformation Equation 6.17 w.r.t. transform vector p. - // Derivative w.r.t. ith and jth elements of transform vector corresponds to the 3x1 block matrix starting at (3i,j), Equation 6.20 and 6.21 [Magnusson 2009] - point_hessian.block<3, 1>(9, 3) = a; - point_hessian.block<3, 1>(12, 3) = b; - point_hessian.block<3, 1>(15, 3) = c; - point_hessian.block<3, 1>(9, 4) = b; - point_hessian.block<3, 1>(12, 4) = d; - point_hessian.block<3, 1>(15, 4) = e; - point_hessian.block<3, 1>(9, 5) = c; - point_hessian.block<3, 1>(12, 5) = e; - point_hessian.block<3, 1>(15, 5) = f; - } -} - -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -template -double MultiGridNormalDistributionsTransform::updateDerivatives(Eigen::Matrix &score_gradient, Eigen::Matrix &hessian, const Eigen::Matrix &point_gradient4, const Eigen::Matrix &point_hessian, const Eigen::Vector3d &x_trans, const Eigen::Matrix3d &c_inv, bool compute_hessian) const { - Eigen::Matrix x_trans4(x_trans[0], x_trans[1], x_trans[2], 0.0f); - Eigen::Matrix4f c_inv4 = Eigen::Matrix4f::Zero(); - c_inv4.topLeftCorner(3, 3) = c_inv.cast(); - - float gauss_d2 = gauss_d2_; + c_inv4.topLeftCorner(3, 3) = c_inv; // e^(-d_2/2 * (x_k - mu_k)^T Sigma_k^-1 (x_k - mu_k)) Equation 6.9 [Magnusson 2009] - float e_x_cov_x = exp(-gauss_d2 * x_trans4.dot(x_trans4 * c_inv4) * 0.5f); + double e_x_cov_x = exp(-gauss_d2_ * x_trans4.dot(x_trans4 * c_inv4) * 0.5f); // Calculate probability of transformed points existence, Equation 6.9 [Magnusson 2009] - float score_inc = -gauss_d1_ * e_x_cov_x; + double score_inc = -gauss_d1_ * e_x_cov_x; - e_x_cov_x = gauss_d2 * e_x_cov_x; + e_x_cov_x = gauss_d2_ * e_x_cov_x; // Error checking for invalid values. if(e_x_cov_x > 1 || e_x_cov_x < 0 || e_x_cov_x != e_x_cov_x) return (0); @@ -582,24 +547,24 @@ double MultiGridNormalDistributionsTransform::updateDe // Reusable portion of Equation 6.12 and 6.13 [Magnusson 2009] e_x_cov_x *= gauss_d1_; - Eigen::Matrix c_inv4_x_point_gradient4 = c_inv4 * point_gradient4; - Eigen::Matrix x_trans4_dot_c_inv4_x_point_gradient4 = x_trans4 * c_inv4_x_point_gradient4; + Eigen::Matrix c_inv4_x_point_gradient4 = c_inv4 * point_gradient; + Eigen::Matrix x_trans4_dot_c_inv4_x_point_gradient4 = x_trans4 * c_inv4_x_point_gradient4; score_gradient.noalias() += (e_x_cov_x * x_trans4_dot_c_inv4_x_point_gradient4).cast(); if(compute_hessian) { - Eigen::Matrix x_trans4_x_c_inv4 = x_trans4 * c_inv4; - Eigen::Matrix point_gradient4_colj_dot_c_inv4_x_point_gradient4_col_i = point_gradient4.transpose() * c_inv4_x_point_gradient4; - Eigen::Matrix x_trans4_dot_c_inv4_x_ext_point_hessian4ij; + Eigen::Matrix x_trans4_x_c_inv4 = x_trans4 * c_inv4; + Eigen::Matrix point_gradient4_colj_dot_c_inv4_x_point_gradient4_col_i = point_gradient.transpose() * c_inv4_x_point_gradient4; + Eigen::Matrix x_trans4_dot_c_inv4_x_ext_point_hessian_4ij; - for(int i = 0; i < 6; i++) { + for(int i = 0; i < 6; ++i) { // Sigma_k^-1 d(T(x,p))/dpi, Reusable portion of Equation 6.12 and 6.13 [Magnusson 2009] // Update gradient, Equation 6.12 [Magnusson 2009] - x_trans4_dot_c_inv4_x_ext_point_hessian4ij.noalias() = x_trans4_x_c_inv4 * point_hessian.block<4, 6>(i * 4, 0); + x_trans4_dot_c_inv4_x_ext_point_hessian_4ij.noalias() = x_trans4_x_c_inv4 * point_hessian.block<4, 6>(i * 4, 0); for(int j = 0; j < hessian.cols(); j++) { // Update hessian, Equation 6.13 [Magnusson 2009] - hessian(i, j) += e_x_cov_x * (-gauss_d2 * x_trans4_dot_c_inv4_x_point_gradient4(i) * x_trans4_dot_c_inv4_x_point_gradient4(j) + x_trans4_dot_c_inv4_x_ext_point_hessian4ij(j) + point_gradient4_colj_dot_c_inv4_x_point_gradient4_col_i(j, i)); + hessian(i, j) += e_x_cov_x * (-gauss_d2_ * x_trans4_dot_c_inv4_x_point_gradient4(i) * x_trans4_dot_c_inv4_x_point_gradient4(j) + x_trans4_dot_c_inv4_x_ext_point_hessian_4ij(j) + point_gradient4_colj_dot_c_inv4_x_point_gradient4_col_i(j, i)); } } } @@ -612,8 +577,8 @@ template void MultiGridNormalDistributionsTransform::computeHessian(Eigen::Matrix &hessian, PointCloudSource &trans_cloud, Eigen::Matrix &) { // Initialize Point Gradient and Hessian // Pre-allocate thread-wise point gradients and point hessians - std::vector> t_point_gradients(params_.num_threads); - std::vector> t_point_hessians(params_.num_threads); + std::vector> t_point_gradients(params_.num_threads); + std::vector> t_point_hessians(params_.num_threads); std::vector> t_hessians(params_.num_threads); for(int i = 0; i < params_.num_threads; ++i) { @@ -670,7 +635,7 @@ void MultiGridNormalDistributionsTransform::computeHes ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// template -void MultiGridNormalDistributionsTransform::updateHessian(Eigen::Matrix &hessian, const Eigen::Matrix &point_gradient, const Eigen::Matrix &point_hessian, const Eigen::Vector3d &x_trans, const Eigen::Matrix3d &c_inv) const { +void MultiGridNormalDistributionsTransform::updateHessian(Eigen::Matrix &hessian, const Eigen::Matrix &point_gradient, const Eigen::Matrix &point_hessian, const Eigen::Vector3d &x_trans, const Eigen::Matrix3d &c_inv) const { Eigen::Vector3d cov_dxd_pi; // e^(-d_2/2 * (x_k - mu_k)^T Sigma_k^-1 (x_k - mu_k)) Equation 6.9 [Magnusson 2009] double e_x_cov_x = gauss_d2_ * exp(-gauss_d2_ * x_trans.dot(c_inv * x_trans) / 2); @@ -681,13 +646,15 @@ void MultiGridNormalDistributionsTransform::updateHess // Reusable portion of Equation 6.12 and 6.13 [Magnusson 2009] e_x_cov_x *= gauss_d1_; - for(int i = 0; i < 6; i++) { + for(int i = 0; i < 6; ++i) { // Sigma_k^-1 d(T(x,p))/dpi, Reusable portion of Equation 6.12 and 6.13 [Magnusson 2009] - cov_dxd_pi = c_inv * point_gradient.col(i); + cov_dxd_pi = c_inv * point_gradient.block<3, 1>(0, i); for(int j = 0; j < hessian.cols(); j++) { // Update hessian, Equation 6.13 [Magnusson 2009] - hessian(i, j) += e_x_cov_x * (-gauss_d2_ * x_trans.dot(cov_dxd_pi) * x_trans.dot(c_inv * point_gradient.col(j)) + x_trans.dot(c_inv * point_hessian.block<3, 1>(3 * i, j)) + point_gradient.col(j).dot(cov_dxd_pi)); + Eigen::Vector3d pg_col = point_gradient.block<3, 1>(0, j); + + hessian(i, j) += e_x_cov_x * (-gauss_d2_ * x_trans.dot(cov_dxd_pi) * x_trans.dot(c_inv * pg_col) + x_trans.dot(c_inv * point_hessian.block<3, 1>(3 * i, j)) + pg_col.dot(cov_dxd_pi)); } } } @@ -979,7 +946,7 @@ double MultiGridNormalDistributionsTransform::calculat // Calculate probability of transformed points existence, Equation 6.9 [Magnusson 2009] // e^(-d_2/2 * (x_k - mu_k)^T Sigma_k^-1 (x_k - mu_k)) Equation 6.9 [Magnusson 2009] - tmp_score -= gauss_d1_ * exp(-gauss_d2_ * x_trans.dot(cell->getInverseCov() * x_trans) / 2); + tmp_score -= gauss_d1_ * exp(-gauss_d2_ * x_trans.dot(cell->getInverseCov() * x_trans) / 2.0); } t_scores[tid] += tmp_score; @@ -1035,7 +1002,7 @@ double MultiGridNormalDistributionsTransform::calculat x_trans -= cell->getMean(); // e^(-d_2/2 * (x_k - mu_k)^T Sigma_k^-1 (x_k - mu_k)) Equation 6.9 [Magnusson 2009] - double e_x_cov_x = exp(-gauss_d2_ * x_trans.dot(cell->getInverseCov() * x_trans) / 2); + double e_x_cov_x = exp(-gauss_d2_ * x_trans.dot(cell->getInverseCov() * x_trans) / 2.0); // Calculate probability of transformed points existence, Equation 6.9 [Magnusson 2009] double score_inc = -gauss_d1_ * e_x_cov_x; diff --git a/regression_test_data/reference/result.csv b/regression_test_data/reference/result.csv index c1fd10f0..61399391 100644 --- a/regression_test_data/reference/result.csv +++ b/regression_test_data/reference/result.csv @@ -1,821 +1,821 @@ elapsed_milliseconds,nvtl_score,tp_score -850.780000,3.245870,6.492360 -19.747000,3.222864,6.484424 -19.870000,3.249374,6.525939 -20.098000,3.248322,6.554400 -20.659000,3.252779,6.502990 -20.028000,3.255168,6.474473 -20.059000,3.247790,6.476141 -19.756000,3.243610,6.491782 -20.060000,3.255556,6.512671 -19.946000,3.257430,6.512904 -20.175000,3.234557,6.522008 -19.858000,3.241737,6.518920 -20.115000,3.253259,6.543523 -20.217000,3.250165,6.534314 -19.946000,3.246945,6.493504 -19.942000,3.253799,6.521316 -20.184000,3.256378,6.533088 -19.890000,3.252417,6.509498 -20.064000,3.232975,6.469402 -20.006000,3.243297,6.484879 -20.058000,3.250781,6.482674 -19.935000,3.232783,6.433489 -19.923000,3.258463,6.496413 -19.970000,3.236224,6.489333 -20.103000,3.237388,6.446017 -19.969000,3.240678,6.485382 -19.839000,3.243151,6.476878 -20.038000,3.230074,6.445190 -20.538000,3.254585,6.507763 -23.667000,3.215736,6.529833 -20.150000,3.229013,6.507130 -19.857000,3.251286,6.511375 -19.967000,3.220569,6.412716 -19.911000,3.242460,6.498165 -21.571000,3.221624,6.465429 -19.767000,3.246821,6.466054 -20.028000,3.226278,6.446034 -19.756000,3.234816,6.429081 -20.109000,3.231081,6.482989 -20.279000,3.213994,6.480358 -20.470000,3.227602,6.451800 -19.978000,3.220359,6.490552 -19.886000,3.221915,6.462979 -19.949000,3.200609,6.457523 -20.215000,3.237824,6.491083 -20.449000,3.210199,6.417121 -19.886000,3.237875,6.436560 -19.746000,3.215740,6.464827 -19.788000,3.211383,6.487162 -19.942000,3.215194,6.451788 -20.021000,3.221160,6.452514 -19.754000,3.239883,6.427769 -20.783000,3.216802,6.425644 -20.206000,3.217967,6.452448 -19.905000,3.226955,6.412321 -19.910000,3.214815,6.435179 -22.926000,3.236367,6.468367 -19.789000,3.213379,6.394348 -19.938000,3.230376,6.433087 -19.737000,3.224482,6.428322 -20.195000,3.235578,6.483143 -20.033000,3.223849,6.437685 -19.633000,3.224664,6.435584 -20.004000,3.221666,6.440924 -19.930000,3.216949,6.462154 -19.790000,3.222113,6.440767 -19.986000,3.215269,6.458013 -19.761000,3.222891,6.504181 -19.907000,3.224055,6.502898 -19.652000,3.214677,6.432995 -19.930000,3.237418,6.453895 -19.672000,3.231851,6.456598 -19.879000,3.220834,6.450181 -20.266000,3.224436,6.495348 -19.882000,3.216241,6.451524 -19.603000,3.226130,6.435793 -20.064000,3.229545,6.439610 -19.912000,3.236891,6.464321 -20.412000,3.210586,6.487401 -19.814000,3.219099,6.488955 -20.621000,3.225016,6.450618 -20.046000,3.235362,6.477134 -19.928000,3.226618,6.491295 -20.979000,3.228073,6.482457 -19.991000,3.227334,6.457765 -19.853000,3.233847,6.501079 -19.979000,3.222840,6.451364 -19.828000,3.223138,6.457125 -20.130000,3.229250,6.478938 -19.932000,3.215070,6.492313 -20.180000,3.227537,6.483939 -19.952000,3.229826,6.426973 -19.959000,3.225619,6.453467 -20.359000,3.213266,6.438914 -19.856000,3.211013,6.468582 -20.082000,3.238318,6.459534 -19.982000,3.220748,6.449313 -19.988000,3.213647,6.463533 -20.003000,3.232504,6.464202 -20.011000,3.207409,6.456440 -19.980000,3.228306,6.513097 -20.199000,3.247901,6.470810 -19.766000,3.217279,6.463146 -22.097000,3.229575,6.478979 -19.866000,3.227585,6.396958 -19.932000,3.228789,6.484720 -20.034000,3.217364,6.458273 -20.085000,3.218010,6.387164 -19.927000,3.239641,6.493929 -19.876000,3.216979,6.454454 -19.847000,3.215391,6.440374 -19.728000,3.224018,6.447189 -19.822000,3.226758,6.420352 -19.783000,3.237657,6.496261 -19.888000,3.232743,6.493252 -19.685000,3.217339,6.469492 -20.130000,3.221442,6.434939 -19.658000,3.213149,6.438249 -19.749000,3.201816,6.440298 -20.217000,3.219703,6.467708 -19.713000,3.214140,6.394407 -19.862000,3.225317,6.389885 -19.948000,3.233878,6.369541 -19.744000,3.220452,6.392400 -19.662000,3.232119,6.393452 -20.230000,3.235717,6.388262 -20.077000,3.254787,6.413590 -19.767000,3.239691,6.387044 -19.942000,3.240180,6.374612 -19.897000,3.235515,6.387940 -19.915000,3.236610,6.423357 -21.802000,3.234131,6.489974 -20.445000,3.249444,6.417014 -20.236000,3.238616,6.492239 -20.327000,3.223271,6.552043 -20.695000,3.215336,6.470980 -20.682000,3.201763,6.488925 -20.355000,3.199736,6.455114 -20.357000,3.165695,6.428900 -20.394000,3.168650,6.480930 -20.429000,3.177754,6.500638 -20.369000,3.152015,6.449660 -20.855000,3.167865,6.381552 -21.002000,3.167947,6.387924 -20.717000,3.178342,6.479239 -21.133000,3.173616,6.481833 -21.253000,3.216360,6.573015 -20.832000,3.221381,6.656428 -20.854000,3.213370,6.614565 -21.798000,3.211385,6.587262 -21.015000,3.159408,6.686255 -21.175000,3.172098,6.782259 -21.266000,3.184641,6.767041 -20.677000,3.188401,6.691651 -20.916000,3.175215,6.655179 -20.787000,3.193806,6.603056 -21.586000,3.171443,6.605025 -21.318000,3.174152,6.652916 -21.917000,3.187466,6.616362 -22.297000,3.197817,6.625871 -22.250000,3.183987,6.650988 -21.806000,3.213161,6.664923 -21.907000,3.191915,6.668103 -22.091000,3.187396,6.733791 -22.335000,3.162282,6.710573 -22.281000,3.185888,6.716704 -22.127000,3.182896,6.830208 -22.052000,3.207463,6.787834 -22.498000,3.195000,6.757890 -21.730000,3.184506,6.714955 -22.011000,3.184112,6.769217 -22.118000,3.140024,6.676161 -22.259000,3.157585,6.679476 -22.331000,3.184279,6.680532 -22.803000,3.173522,6.673514 -22.854000,3.164513,6.546252 -22.674000,3.120558,6.607293 -23.642000,3.167606,6.620349 -23.224000,3.165127,6.640136 -22.690000,3.132892,6.587063 -22.330000,3.163505,6.601596 -22.412000,3.143338,6.532862 -22.933000,3.130707,6.504752 -22.674000,3.113928,6.462839 -23.588000,3.113903,6.400882 -23.093000,3.122460,6.413246 -22.813000,3.138514,6.448927 -23.204000,3.094769,6.480498 -23.701000,3.140355,6.549059 -23.583000,3.115705,6.575013 -59.909000,3.113883,6.586530 -23.770000,3.136290,6.594629 -23.735000,3.093489,6.609429 -23.965000,3.086977,6.558264 -24.000000,3.120662,6.595623 -24.923000,3.139350,6.640611 -25.126000,3.158308,6.646304 -24.538000,3.147442,6.700881 -24.624000,3.146539,6.654729 -25.124000,3.085533,6.655832 -24.608000,3.125901,6.629154 -25.317000,3.086477,6.505607 -26.203000,3.104795,6.601371 -25.647000,3.105804,6.545661 -26.481000,3.080916,6.531019 -26.786000,3.100029,6.525514 -26.625000,3.087990,6.550461 -27.235000,3.082087,6.613588 -26.750000,3.074604,6.654109 -26.864000,3.051656,6.555866 -26.930000,3.063939,6.561329 -26.822000,3.042289,6.571627 -26.836000,3.026720,6.431014 -27.493000,3.056258,6.533491 -28.298000,3.055404,6.558284 -33.347000,3.043946,6.573605 -29.519000,3.052730,6.610082 -29.045000,3.078860,6.500354 -30.070000,3.111348,6.510382 -29.957000,3.048791,6.392859 -31.228000,3.063871,6.398168 -31.634000,3.041925,6.500024 -32.462000,3.053401,6.543169 -32.271000,3.036736,6.464442 -31.429000,3.039394,6.517319 -32.024000,3.047023,6.503362 -32.501000,3.096243,6.555533 -33.207000,3.051067,6.491449 -33.226000,3.040591,6.483003 -32.170000,3.082663,6.431063 -32.579000,3.056329,6.434973 -33.829000,3.024428,6.534629 -36.009000,3.061312,6.397419 -35.390000,3.046906,6.495810 -35.187000,3.051963,6.369968 -35.370000,3.075438,6.424389 -35.233000,3.040300,6.414046 -36.266000,3.052213,6.338201 -36.486000,3.070597,6.375902 -35.897000,3.051660,6.402188 -37.784000,3.076042,6.394161 -37.235000,3.027133,6.353774 -35.209000,3.038694,6.404874 -35.034000,3.112056,6.297247 -40.580000,3.068998,6.209836 -33.815000,3.089133,6.197063 -32.362000,3.103303,6.314595 -33.769000,3.078201,6.370899 -31.238000,3.062738,6.236078 -29.699000,3.030329,6.319576 -29.874000,3.080947,6.235271 -29.035000,3.068178,6.233522 -28.239000,3.036300,6.015135 -27.646000,3.060276,6.145430 -26.451000,3.038363,6.267952 -26.790000,3.065849,6.311045 -30.073000,3.029998,6.311434 -31.693000,3.011101,6.192255 -32.366000,3.024111,6.199194 -32.700000,3.061893,6.240302 -33.206000,3.110944,6.167118 -34.126000,3.061475,6.070899 -35.038000,3.091313,6.137191 -37.503000,3.044048,6.071755 -38.340000,3.069029,6.188042 -39.286000,3.027250,6.105416 -39.091000,3.047531,5.973619 -38.874000,3.029154,5.921600 -38.489000,3.026989,5.980268 -39.310000,3.012459,6.023727 -43.297000,3.024295,6.079772 -38.761000,3.035244,6.026927 -39.448000,3.013011,5.912129 -44.727000,3.013872,5.978775 -41.070000,3.079155,5.995452 -39.135000,3.063087,6.008598 -39.041000,3.031951,6.048882 -38.367000,2.990250,5.931438 -38.290000,3.029248,6.050535 -37.389000,3.065115,5.920659 -37.774000,3.032235,5.968963 -37.148000,3.063373,6.075770 -35.559000,3.071885,6.047128 -35.658000,3.046958,6.001203 -37.919000,3.076967,5.941813 -35.786000,3.063217,5.966429 -34.948000,3.057240,5.958494 -35.012000,3.025872,6.051320 -33.103000,3.042034,5.968783 -33.952000,3.018401,6.130967 -34.700000,2.991242,5.994703 -33.658000,2.979350,5.995662 -32.691000,2.980084,6.032839 -32.143000,2.999111,5.996058 -33.155000,3.031168,6.044195 -31.833000,3.070516,6.101362 -31.905000,3.030050,5.943901 -31.518000,3.023279,5.907840 -32.329000,3.013146,5.878276 -32.128000,3.042394,5.846901 -35.987000,3.009649,5.796417 -30.639000,3.034602,5.833997 -31.206000,3.034584,5.771459 -32.112000,2.993727,5.534273 -32.581000,2.934711,5.488502 -32.390000,3.003512,5.627729 -33.235000,2.988660,5.453470 -33.356000,3.019091,5.571735 -33.774000,2.963985,5.529798 -33.085000,2.959839,5.542762 -32.746000,3.017382,5.612524 -32.876000,2.948756,5.647480 -30.869000,2.934889,5.593412 -32.062000,2.956937,5.591215 -30.742000,2.998367,5.518347 -30.847000,2.955484,5.504957 -31.580000,2.984176,5.459876 -31.326000,3.016494,5.526092 -31.597000,2.984836,5.603407 -31.747000,2.959146,5.476425 -31.249000,2.983517,5.517585 -31.703000,2.930043,5.406034 -31.790000,2.952834,5.520300 -32.030000,2.982339,5.354418 -30.998000,2.996343,5.414162 -30.883000,2.994343,5.521077 -32.125000,2.966464,5.466911 -30.876000,2.931489,5.384503 -30.793000,2.997236,5.530668 -30.630000,3.008632,5.451575 -30.432000,2.951321,5.309482 -35.028000,3.005531,5.475207 -28.765000,2.977978,5.452110 -29.377000,2.981941,5.476552 -30.028000,3.000306,5.520339 -29.201000,2.951851,5.254729 -27.951000,2.944483,5.177893 -29.003000,2.987930,5.284746 -28.059000,2.995559,5.242466 -27.801000,2.996981,5.252872 -28.306000,2.988240,5.334897 -28.448000,2.998001,5.245183 -28.249000,2.987833,5.341994 -29.377000,2.983063,5.189468 -29.244000,3.014136,5.247357 -29.388000,2.959789,5.145167 -29.505000,2.987510,5.092023 -28.263000,2.983496,5.131805 -27.867000,2.965296,5.187393 -29.116000,2.983001,5.169260 -29.312000,2.999937,5.107954 -29.733000,2.986610,5.246101 -30.470000,2.975321,5.200410 -29.450000,2.986836,5.427077 -30.477000,3.011506,5.478947 -29.389000,2.987751,5.329915 -30.824000,3.014070,5.444309 -30.191000,2.996712,5.430675 -30.431000,3.078124,5.456882 -30.797000,3.038115,5.350646 -31.009000,3.042104,5.216331 -31.215000,3.030892,5.256653 -31.366000,3.032086,5.200324 -29.718000,3.065774,5.204882 -34.983000,3.074614,5.168974 -30.421000,3.039113,5.075660 -30.169000,3.100556,5.224187 -29.463000,3.082232,5.221079 -28.761000,3.091272,5.214909 -29.624000,3.134884,5.194189 -29.555000,3.137703,5.277042 -29.597000,3.068617,5.309059 -28.689000,3.098446,5.193544 -29.010000,3.061140,5.103621 -28.724000,3.079597,5.258814 -28.226000,3.126950,5.366085 -27.933000,3.080458,5.259136 -27.122000,3.084457,5.502673 -27.455000,3.105607,5.438691 -27.400000,3.056019,5.502460 -27.289000,3.115389,5.303230 -26.887000,3.132673,5.296263 -27.663000,3.074995,5.334442 -27.769000,3.098267,5.438137 -28.068000,3.092544,5.462262 -28.968000,3.087550,5.299778 -28.487000,3.064135,5.316714 -28.169000,3.000735,5.309944 -28.204000,3.059872,5.189170 -27.751000,3.055239,5.210082 -27.701000,3.072886,5.323142 -27.420000,3.075531,5.324988 -27.365000,3.074851,5.378509 -27.771000,3.077558,5.397326 -26.312000,3.082415,5.513777 -26.339000,3.138646,5.630601 -26.082000,3.110358,5.690168 -24.249000,3.118530,5.604899 -24.535000,3.071965,5.534245 -29.586000,3.133126,5.662600 -24.292000,3.136790,5.715556 -25.341000,3.101078,5.594078 -25.521000,3.071476,5.534300 -25.170000,3.074173,5.550189 -25.808000,3.075405,5.345758 -25.362000,3.102062,5.525258 -26.594000,3.059359,5.452787 -26.091000,3.076270,5.458672 -26.064000,3.089699,5.511071 -26.681000,3.058402,5.499324 -36.313000,3.080683,5.538812 -26.827000,3.088925,5.572701 -26.385000,3.065062,5.604177 -28.207000,3.121951,5.625543 -26.456000,3.134823,5.533525 -26.432000,3.096528,5.306186 -26.212000,3.145955,5.447907 -26.921000,3.126529,5.242153 -26.740000,3.062274,5.326251 -26.755000,3.125819,5.352638 -27.506000,3.056045,5.414201 -27.757000,3.095418,5.528842 -27.718000,3.086146,5.463487 -28.178000,3.062712,5.373900 -28.767000,3.094184,5.311470 -28.412000,3.099163,5.373512 -28.104000,3.084735,5.340140 -28.247000,3.102289,5.356869 -28.535000,3.128202,5.410048 -28.601000,3.094154,5.416850 -27.887000,3.100971,5.402497 -27.220000,3.083865,5.565398 -27.717000,3.101918,5.450869 -28.242000,3.035887,5.385079 -33.334000,3.056791,5.384481 -29.208000,3.068326,5.375029 -28.165000,3.126340,5.405217 -32.098000,3.108920,5.595913 -27.778000,3.079360,5.448847 -27.173000,3.067842,5.521845 -27.831000,3.048535,5.755828 -26.940000,3.100663,5.820058 -26.311000,3.083968,5.721224 -26.318000,3.087040,5.734749 -26.792000,3.101439,5.608752 -26.064000,3.107772,5.700110 -26.959000,3.089736,5.692766 -26.232000,3.049959,5.602152 -26.905000,3.094072,5.689317 -27.007000,3.045348,5.693169 -27.540000,3.012053,5.713602 -26.786000,3.035433,5.729338 -27.077000,3.063450,5.905056 -26.841000,3.035800,5.945027 -27.956000,3.051416,5.910396 -28.477000,3.040277,5.810193 -28.582000,3.077977,5.823519 -29.833000,2.990358,5.628310 -30.036000,3.046810,5.551405 -29.990000,3.039090,5.600614 -30.385000,3.017341,5.791119 -30.925000,3.055471,5.775621 -30.636000,3.061433,5.830304 -31.628000,3.025640,5.942462 -33.503000,3.087849,5.938837 -31.835000,3.046278,5.894545 -31.667000,3.024004,5.869228 -32.402000,3.025634,5.815760 -37.594000,3.003371,5.914434 -32.572000,3.002474,5.853734 -33.287000,3.044322,5.731900 -33.939000,3.006226,5.875598 -32.882000,2.987864,5.813369 -33.635000,2.995907,5.745394 -32.726000,2.990973,5.814898 -33.143000,2.984500,5.719682 -32.862000,2.986712,5.752023 -32.762000,2.991612,5.738679 -32.808000,3.003987,5.748233 -33.767000,3.010101,5.755120 -32.762000,3.000284,5.734413 -34.140000,3.002259,5.772175 -34.544000,3.007559,5.803481 -33.807000,3.022669,5.827042 -33.641000,3.010679,5.794127 -34.520000,2.991025,5.708733 -34.830000,3.021904,5.662409 -34.588000,3.050134,5.686052 -34.170000,3.024338,5.747175 -34.848000,2.993454,5.622405 -34.861000,3.013813,5.652930 -34.302000,3.037750,5.708849 -35.180000,2.988231,5.689292 -35.872000,2.975165,5.683946 -35.903000,3.025068,5.484942 -36.211000,3.032174,5.592174 -36.091000,3.038214,5.525521 -39.923000,3.012430,5.511276 -35.606000,2.975759,5.438990 -35.677000,2.962559,5.520380 -36.065000,2.983875,5.702666 -36.210000,2.964378,5.654523 -36.275000,2.981789,5.640752 -36.306000,2.996150,5.750504 -36.385000,3.008975,5.765985 -38.520000,3.002789,5.841462 -37.325000,3.005509,5.843458 -37.398000,3.042357,5.848820 -36.680000,3.050542,5.940462 -37.356000,3.008524,5.929222 -36.912000,3.027696,5.902079 -37.053000,3.027959,5.913844 -38.916000,3.047812,5.851758 -38.322000,3.046250,5.920288 -38.707000,3.072537,5.883620 -39.963000,3.063510,5.944353 -39.561000,3.042562,5.909801 -39.779000,2.963471,5.931034 -39.856000,2.987038,5.860998 -41.945000,3.029212,5.888451 -40.899000,3.047477,5.882692 -40.084000,3.032479,5.857212 -41.563000,3.056923,5.870274 -46.340000,3.023167,5.929586 -41.961000,3.070182,5.932240 -42.216000,3.054961,5.997318 -43.143000,3.055362,5.952472 -43.624000,3.043058,5.857823 -43.564000,3.058707,5.996252 -44.317000,3.015283,5.880420 -44.634000,3.029642,5.774366 -44.730000,3.076815,5.919321 -45.539000,3.022696,5.898224 -45.587000,3.032225,5.997479 -69.104000,3.050496,5.939286 -44.386000,3.044674,5.996001 -43.500000,3.049845,5.977027 -44.001000,3.021177,5.954504 -45.217000,3.007835,5.971983 -44.423000,3.019222,6.003891 -45.341000,3.022928,5.983048 -45.839000,3.022413,5.934405 -44.703000,3.014984,5.940477 -45.139000,3.019120,5.892701 -44.683000,3.017341,5.898064 -48.571000,3.010120,5.857327 -44.392000,3.030030,5.891335 -44.355000,3.000480,5.884868 -44.454000,2.990424,5.954295 -43.892000,2.986807,5.946443 -44.533000,3.026266,5.963790 -44.448000,3.042131,5.904915 -44.377000,3.050544,5.871666 -43.490000,3.039392,5.889247 -49.887000,3.048308,5.936658 -58.424000,3.024124,5.914269 -94.438000,3.049278,5.897202 -44.098000,3.025029,5.862447 -43.543000,3.017858,5.857031 -41.703000,3.021738,5.833071 -42.911000,3.005608,5.819508 -42.663000,3.017315,5.814610 -48.252000,3.014325,5.796362 -52.888000,2.986021,5.786723 -41.560000,3.031310,5.723968 -45.654000,3.020483,5.838198 -41.309000,3.014298,5.853550 -40.934000,3.042063,5.809202 -41.583000,3.028769,5.820905 -42.188000,3.025032,5.750033 -41.963000,3.038922,5.737182 -40.905000,3.034579,5.710129 -40.673000,3.049758,5.787707 -41.614000,2.997922,5.692502 -40.099000,2.965581,5.734169 -40.132000,3.000506,5.741161 -39.588000,2.964564,5.650248 -39.735000,3.015016,5.712615 -39.572000,3.031678,5.620017 -39.831000,2.998023,5.650542 -39.029000,3.014342,5.611010 -38.107000,2.992757,5.643629 -38.977000,2.998623,5.603707 -39.395000,2.955454,5.597359 -39.387000,2.972473,5.666095 -40.137000,3.013752,5.651055 -39.554000,2.970988,5.617723 -38.528000,2.968113,5.502094 -38.907000,2.968966,5.407378 -39.107000,2.968816,5.480129 -44.568000,3.001628,5.535557 -39.704000,3.000990,5.583635 -39.396000,3.009979,5.471593 -38.269000,2.996144,5.453006 -38.366000,3.012971,5.416540 -38.909000,2.998979,5.392217 -38.435000,2.996780,5.346394 -39.208000,3.019434,5.359541 -38.504000,3.013591,5.322240 -38.281000,3.005878,5.250134 -38.231000,2.981938,5.255682 -38.019000,3.007713,5.375627 -37.723000,2.990648,5.252735 -37.848000,3.003234,5.242776 -38.555000,3.005974,5.309345 -37.964000,2.969601,5.166947 -38.360000,2.952958,5.173001 -37.792000,2.964145,5.302063 -37.993000,2.975461,5.253664 -37.610000,2.983181,5.268852 -37.632000,3.029596,5.339035 -37.735000,2.992144,5.262042 -37.975000,3.001095,5.212812 -37.180000,3.004713,5.226291 -37.359000,2.998117,5.330840 -41.970000,2.987525,5.317826 -36.636000,2.991614,5.258965 -36.450000,2.991520,5.212242 -36.384000,2.974902,5.155924 -34.163000,2.977290,5.199164 -30.567000,2.990908,5.067102 -29.428000,2.979229,5.016469 -29.302000,2.979261,5.007875 -29.304000,2.959907,5.061990 -29.984000,2.938619,5.073667 -29.690000,2.979967,5.066787 -30.009000,2.959343,5.043648 -29.892000,2.918538,4.941725 -32.127000,2.976529,5.072186 -29.146000,2.976708,5.041049 -29.556000,2.945420,4.994262 -29.561000,2.966609,5.068317 -29.589000,3.010547,5.108094 -29.919000,2.935920,5.033782 -29.033000,2.974259,4.960861 -29.614000,2.957550,4.997485 -29.862000,2.982240,5.108674 -30.140000,2.954630,4.898280 -31.147000,2.936459,4.970522 -30.487000,2.921295,4.856388 -31.752000,2.980173,4.951673 -30.232000,2.957467,4.932992 -30.323000,3.018971,4.948359 -30.229000,2.987816,4.926228 -30.588000,2.986440,4.948109 -30.976000,2.918326,4.870785 -30.217000,2.977430,4.888430 -33.775000,2.933988,4.885536 -30.321000,2.953997,4.915902 -30.255000,2.949264,4.889869 -30.809000,3.004853,5.022865 -31.686000,2.964290,5.045866 -30.987000,2.976432,4.914492 -29.957000,2.993934,4.994716 -31.146000,2.981564,4.890858 -29.912000,2.988023,4.890171 -31.000000,3.019011,5.009514 -30.233000,3.022251,5.002853 -29.905000,2.976339,5.064182 -29.700000,2.985020,5.090441 -29.922000,3.010392,5.141410 -30.778000,2.988250,5.121484 -30.677000,3.008901,5.150106 -30.492000,3.034113,5.192644 -30.729000,2.987517,5.081462 -30.222000,3.018745,5.179359 -31.389000,3.013698,5.173114 -30.536000,3.015764,5.267357 -30.718000,3.027750,5.396392 -29.982000,3.014856,5.419462 -30.283000,3.046633,5.410791 -30.558000,2.998800,5.323837 -30.858000,2.987938,5.351301 -29.456000,3.041659,5.480229 -30.719000,2.995630,5.411792 -30.908000,2.979115,5.328040 -30.084000,2.980137,5.286048 -29.473000,2.988323,5.419756 -34.166000,2.994114,5.366512 -28.600000,3.006698,5.530260 -29.496000,2.980598,5.597826 -29.690000,2.994025,5.631248 -29.502000,3.032896,5.733799 -29.444000,3.017018,5.742712 -28.131000,3.055716,5.656472 -28.732000,3.069800,5.676881 -28.799000,3.031780,5.575928 -28.290000,3.028277,5.605822 -29.099000,3.010748,5.633574 -28.281000,3.017305,5.584468 -28.810000,2.994990,5.551850 -28.937000,2.996701,5.445897 -28.552000,3.013026,5.506012 -29.123000,2.992778,5.436980 -28.931000,3.012607,5.349546 -29.255000,3.013925,5.474535 -29.034000,2.996397,5.475850 -28.574000,2.967620,5.395513 -28.623000,2.947569,5.404001 -28.791000,2.982782,5.291428 -29.709000,2.949782,5.207433 -29.875000,2.958317,5.343240 -30.162000,2.960579,5.293851 -29.877000,2.897187,5.210476 -29.968000,2.896733,5.234302 -30.209000,2.918557,5.266107 -29.823000,2.954859,5.288791 -30.026000,2.952168,5.241511 -29.716000,2.984346,5.389606 -30.417000,2.963696,5.453856 -29.538000,2.948127,5.374627 -33.678000,2.960536,5.359529 -29.976000,2.925221,5.332350 -29.032000,2.947516,5.506567 -29.561000,2.981065,5.408629 -28.735000,2.993186,5.494820 -29.071000,2.973660,5.386705 -29.162000,2.967885,5.386578 -28.373000,2.695167,4.875501 -28.029000,2.944858,5.398096 -28.113000,2.919176,5.489593 -28.746000,2.985861,5.542627 -27.863000,2.964739,5.529334 -28.927000,2.947876,5.518663 -28.142000,2.997217,5.604602 -28.145000,2.969922,5.518660 -28.789000,2.936145,5.620131 -28.615000,2.947115,5.617283 -28.518000,2.966608,5.540997 -27.750000,2.949235,5.528992 -28.408000,2.955768,5.592105 -28.612000,2.957880,5.555295 -28.388000,2.956200,5.581810 -28.392000,2.944777,5.556023 -28.084000,2.912540,5.554790 -28.122000,2.954671,5.598827 -28.276000,2.950264,5.587277 -28.253000,2.948953,5.540761 -28.778000,2.946050,5.527922 -27.232000,2.906190,5.433814 -28.023000,2.940654,5.517352 -28.633000,2.968641,5.566113 -28.495000,2.936796,5.521384 -27.930000,2.959449,5.533933 -29.198000,2.936059,5.529284 -33.554000,2.958739,5.478731 -29.563000,2.941541,5.517895 -30.499000,2.945935,5.625719 -30.377000,2.941269,5.529549 -29.770000,2.985834,5.484187 -30.246000,2.950767,5.514687 -29.721000,2.954589,5.449856 -29.687000,2.973587,5.585416 -29.453000,2.960138,5.537115 -30.938000,2.951445,5.536042 -30.003000,2.970228,5.472983 -29.746000,2.955733,5.487309 -29.606000,2.958274,5.503585 -29.763000,2.962622,5.513652 -30.046000,2.961771,5.542667 -29.754000,2.925126,5.384655 -29.524000,2.949415,5.399557 -29.622000,2.915995,5.405423 -29.834000,2.911210,5.461473 -29.984000,2.949614,5.515643 -29.984000,2.898362,5.430665 -29.907000,2.909737,5.512064 -29.791000,2.936112,5.513890 -29.894000,2.935212,5.478726 -29.759000,2.926894,5.473571 -30.293000,2.943468,5.485198 -30.723000,2.945440,5.467330 -30.116000,2.939065,5.486227 -29.912000,2.935135,5.480511 -30.833000,2.923352,5.473280 -31.565000,2.932744,5.525501 -32.351000,2.953635,5.610952 -32.427000,2.972464,5.645544 -36.947000,2.962495,5.625681 -32.198000,2.952129,5.579880 -32.952000,2.929344,5.571527 -33.048000,2.940758,5.567153 -32.966000,2.928254,5.519742 -31.895000,2.941896,5.541164 -32.318000,2.960030,5.556267 -35.384000,2.966673,5.516139 -32.396000,2.961527,5.513060 -32.669000,2.958002,5.526732 -32.085000,2.931676,5.491712 -32.233000,2.922858,5.468040 -32.804000,2.944237,5.512064 -32.232000,2.949143,5.503738 -33.057000,2.965092,5.531942 -32.762000,2.962521,5.508068 -32.900000,2.950557,5.468437 -33.185000,2.946687,5.475392 -32.962000,2.939843,5.478894 -32.500000,2.940288,5.491734 -32.779000,2.938135,5.481798 -33.230000,2.943023,5.495572 -33.696000,2.940645,5.500736 -33.122000,2.930639,5.482244 -32.841000,2.944746,5.498366 -32.785000,2.947620,5.498283 -33.012000,2.955365,5.512921 -32.645000,2.954052,5.503772 -33.486000,2.942127,5.506958 -37.841000,2.939863,5.481083 -32.824000,2.938754,5.447074 -32.905000,2.941927,5.468209 -32.741000,2.953485,5.479568 -32.949000,2.973896,5.524160 -32.373000,2.937435,5.462901 -32.587000,2.958512,5.521878 -32.811000,2.935524,5.476665 -33.254000,2.919356,5.484888 -32.558000,2.954223,5.500093 -32.613000,2.936539,5.468170 -32.594000,2.935486,5.466602 -36.476000,2.928851,5.468624 +829.859000,3.245870,6.492360 +21.123000,3.222864,6.484425 +21.020000,3.249374,6.525939 +22.711000,3.248340,6.554382 +23.425000,3.252779,6.502990 +21.464000,3.255168,6.474473 +21.431000,3.247790,6.476141 +21.156000,3.243610,6.491782 +21.293000,3.255556,6.512671 +21.226000,3.257430,6.512904 +22.285000,3.234558,6.522008 +21.452000,3.241737,6.518920 +21.590000,3.253259,6.543524 +28.336000,3.250166,6.534314 +21.304000,3.246945,6.493504 +21.152000,3.253799,6.521316 +21.323000,3.256378,6.533088 +21.094000,3.252417,6.509498 +21.044000,3.232991,6.469365 +21.306000,3.243297,6.484879 +20.889000,3.250781,6.482675 +21.142000,3.232783,6.433490 +21.146000,3.258464,6.496413 +20.879000,3.236224,6.489333 +21.439000,3.237388,6.446017 +21.379000,3.240678,6.485382 +20.797000,3.243151,6.476878 +21.198000,3.230074,6.445190 +20.832000,3.254585,6.507763 +21.078000,3.215732,6.529853 +21.382000,3.229013,6.507131 +21.322000,3.251286,6.511375 +21.202000,3.220569,6.412716 +21.100000,3.242460,6.498165 +28.143000,3.221624,6.465429 +21.212000,3.246821,6.466054 +21.419000,3.226278,6.446035 +21.123000,3.234816,6.429081 +20.729000,3.231081,6.482989 +21.153000,3.213994,6.480358 +21.713000,3.227602,6.451800 +20.868000,3.220359,6.490552 +20.404000,3.221915,6.462979 +20.695000,3.200609,6.457523 +20.747000,3.237825,6.491083 +20.980000,3.210199,6.417121 +20.648000,3.237875,6.436560 +20.375000,3.215740,6.464827 +21.114000,3.211383,6.487162 +21.415000,3.215194,6.451788 +21.373000,3.221160,6.452514 +21.151000,3.239883,6.427769 +21.344000,3.216802,6.425644 +21.749000,3.217967,6.452448 +20.247000,3.226955,6.412321 +20.886000,3.214815,6.435179 +21.403000,3.236367,6.468367 +20.884000,3.213379,6.394348 +20.908000,3.230376,6.433087 +21.484000,3.224482,6.428322 +21.295000,3.235579,6.483143 +21.556000,3.223849,6.437685 +20.956000,3.224664,6.435584 +56.904000,3.221666,6.440924 +21.503000,3.216949,6.462154 +21.103000,3.222113,6.440767 +20.775000,3.215269,6.458013 +20.282000,3.222891,6.504181 +20.761000,3.224055,6.502898 +20.698000,3.214677,6.432995 +21.165000,3.237418,6.453895 +20.350000,3.231851,6.456598 +20.884000,3.220834,6.450181 +21.351000,3.224436,6.495348 +21.345000,3.216241,6.451524 +20.959000,3.226130,6.435793 +21.431000,3.229545,6.439610 +21.056000,3.236891,6.464321 +21.689000,3.210586,6.487401 +21.309000,3.219111,6.488945 +21.257000,3.225016,6.450618 +21.191000,3.235362,6.477134 +21.239000,3.226618,6.491295 +21.336000,3.228073,6.482457 +21.286000,3.227334,6.457765 +21.174000,3.233846,6.501079 +21.422000,3.222840,6.451364 +21.418000,3.223138,6.457125 +21.648000,3.229250,6.478938 +21.539000,3.215019,6.492260 +21.583000,3.227537,6.483939 +21.510000,3.229827,6.426973 +21.372000,3.225619,6.453467 +21.713000,3.213266,6.438914 +21.038000,3.211014,6.468582 +20.717000,3.238318,6.459534 +20.485000,3.220753,6.449335 +20.703000,3.213647,6.463533 +20.660000,3.232504,6.464202 +20.721000,3.207409,6.456440 +21.086000,3.228306,6.513098 +24.682000,3.247901,6.470810 +20.894000,3.217280,6.463146 +21.042000,3.229575,6.478980 +20.737000,3.227585,6.396958 +21.317000,3.228731,6.486501 +21.464000,3.217365,6.458273 +21.605000,3.218010,6.387164 +21.205000,3.239642,6.493929 +21.235000,3.216979,6.454454 +21.074000,3.215391,6.440374 +21.568000,3.224018,6.447189 +21.407000,3.226758,6.420352 +21.371000,3.237657,6.496261 +21.507000,3.232743,6.493252 +21.254000,3.217340,6.469492 +21.806000,3.221442,6.434939 +21.272000,3.213149,6.438249 +21.448000,3.201816,6.440299 +21.446000,3.219703,6.467708 +21.325000,3.214140,6.394407 +21.572000,3.225317,6.389885 +21.432000,3.233878,6.369541 +21.545000,3.220452,6.392400 +21.245000,3.232119,6.393452 +21.158000,3.235717,6.388263 +21.448000,3.254787,6.413590 +21.173000,3.239691,6.387044 +21.460000,3.240180,6.374612 +21.321000,3.235515,6.387940 +21.193000,3.236610,6.423357 +21.613000,3.234131,6.489974 +21.536000,3.249444,6.417014 +21.652000,3.238616,6.492239 +21.755000,3.223271,6.552043 +21.993000,3.215336,6.470980 +21.877000,3.201763,6.488925 +21.451000,3.199736,6.455114 +21.703000,3.165695,6.428900 +21.469000,3.168650,6.480930 +20.847000,3.177754,6.500638 +21.100000,3.152015,6.449660 +21.223000,3.167865,6.381552 +21.344000,3.167947,6.387924 +21.993000,3.178342,6.479239 +22.929000,3.173616,6.481833 +22.615000,3.216360,6.573015 +25.786000,3.221381,6.656428 +22.681000,3.213370,6.614566 +23.115000,3.211385,6.587262 +22.780000,3.159415,6.686244 +23.003000,3.172098,6.782259 +23.194000,3.184641,6.767041 +22.094000,3.188401,6.691651 +22.330000,3.175215,6.655179 +23.021000,3.193806,6.603056 +29.410000,3.171443,6.605025 +26.820000,3.174152,6.652916 +38.096000,3.187466,6.616362 +24.050000,3.197824,6.625885 +23.957000,3.183987,6.650988 +68.978000,3.213161,6.664923 +23.878000,3.191915,6.668103 +24.151000,3.187396,6.733791 +24.152000,3.162282,6.710573 +24.222000,3.185889,6.716704 +24.066000,3.182896,6.830208 +23.946000,3.207463,6.787834 +24.380000,3.195000,6.757891 +23.551000,3.184506,6.714955 +23.706000,3.184112,6.769218 +23.777000,3.140012,6.677859 +23.765000,3.157585,6.679476 +24.347000,3.184279,6.680532 +25.754000,3.173522,6.673514 +24.463000,3.164513,6.546252 +24.352000,3.120558,6.607293 +23.113000,3.167642,6.620356 +24.133000,3.164795,6.641655 +23.489000,3.132892,6.587063 +23.125000,3.163505,6.601596 +23.831000,3.143337,6.532862 +24.653000,3.130707,6.504752 +24.354000,3.113928,6.462839 +24.821000,3.113903,6.400882 +27.436000,3.122460,6.413246 +24.003000,3.138514,6.448927 +24.255000,3.094744,6.480500 +25.616000,3.140355,6.549059 +25.511000,3.115705,6.575013 +25.609000,3.113883,6.586530 +25.460000,3.136291,6.594629 +25.640000,3.093489,6.609429 +28.195000,3.086977,6.558264 +25.898000,3.120662,6.595623 +26.768000,3.139350,6.640612 +26.815000,3.158308,6.646304 +26.423000,3.147442,6.700881 +26.455000,3.146539,6.654729 +26.991000,3.085533,6.655832 +26.591000,3.125901,6.629154 +27.309000,3.086477,6.505607 +28.402000,3.104795,6.601371 +27.426000,3.105804,6.545662 +28.383000,3.080916,6.531019 +29.035000,3.100029,6.525514 +28.818000,3.087990,6.550461 +29.236000,3.082084,6.613649 +28.324000,3.074604,6.654110 +28.861000,3.051656,6.555866 +28.856000,3.063939,6.561329 +29.209000,3.042289,6.571627 +28.782000,3.026720,6.431014 +29.600000,3.056258,6.533491 +30.229000,3.055404,6.558284 +30.711000,3.043946,6.573605 +31.946000,3.052730,6.610082 +31.474000,3.078860,6.500354 +32.021000,3.111369,6.510414 +31.521000,3.048791,6.392859 +36.888000,3.063871,6.398169 +33.738000,3.041925,6.500024 +33.883000,3.053401,6.543169 +34.540000,3.036736,6.464442 +33.782000,3.039394,6.517319 +34.500000,3.047023,6.503362 +34.949000,3.096243,6.555533 +35.408000,3.051067,6.491450 +35.693000,3.040591,6.483003 +34.565000,3.082663,6.431064 +35.047000,3.056329,6.434973 +35.894000,3.024428,6.534629 +38.519000,3.061327,6.397434 +37.354000,3.046906,6.495810 +37.259000,3.051963,6.369969 +38.132000,3.075438,6.424389 +37.999000,3.040300,6.414046 +38.900000,3.052213,6.338201 +37.783000,3.070597,6.375902 +38.747000,3.051660,6.402188 +40.089000,3.076042,6.394161 +39.741000,3.027133,6.353774 +37.844000,3.038694,6.404874 +39.711000,3.112056,6.297247 +37.650000,3.068998,6.209836 +36.263000,3.089133,6.197063 +34.795000,3.103303,6.314595 +39.477000,3.078200,6.370899 +33.666000,3.062738,6.236078 +32.068000,3.030329,6.319576 +32.355000,3.080947,6.235271 +31.500000,3.068178,6.233522 +29.993000,3.036300,6.015135 +29.915000,3.060276,6.145430 +28.434000,3.038363,6.267952 +28.899000,3.065849,6.311045 +31.602000,3.029998,6.311434 +33.574000,3.011101,6.192255 +34.416000,3.024111,6.199194 +35.058000,3.061893,6.240302 +35.264000,3.110944,6.167118 +36.665000,3.061475,6.070899 +37.701000,3.091313,6.137191 +40.714000,3.044048,6.071755 +41.136000,3.069029,6.188043 +42.180000,3.027250,6.105416 +41.449000,3.047531,5.973619 +41.668000,3.029154,5.921600 +41.164000,3.026989,5.980268 +41.197000,3.012459,6.023727 +42.178000,3.024295,6.079772 +41.598000,3.035244,6.026927 +42.180000,3.013011,5.912129 +42.911000,3.013872,5.978775 +46.946000,3.079158,5.995471 +41.043000,3.063087,6.008598 +41.396000,3.031951,6.048882 +40.997000,2.990250,5.931439 +40.941000,3.029248,6.050535 +40.559000,3.065115,5.920659 +40.614000,3.032235,5.968963 +39.521000,3.063381,6.075743 +37.128000,3.071885,6.047129 +37.809000,3.046958,6.001203 +37.656000,3.076967,5.941813 +37.334000,3.063217,5.966429 +36.253000,3.057240,5.958494 +37.641000,3.025872,6.051320 +35.628000,3.042034,5.968783 +36.406000,3.018401,6.130967 +37.156000,2.991242,5.994704 +36.299000,2.979350,5.995662 +35.403000,2.980084,6.032827 +34.397000,2.999111,5.996058 +35.545000,3.031168,6.044195 +34.053000,3.070516,6.101362 +33.376000,3.030050,5.943901 +33.568000,3.023279,5.907840 +33.985000,3.013146,5.878276 +34.540000,3.042394,5.846901 +33.014000,3.009649,5.796417 +36.358000,3.034602,5.833997 +33.302000,3.034584,5.771459 +34.198000,2.993727,5.534273 +34.940000,2.934711,5.488502 +34.149000,3.003512,5.627729 +35.201000,2.988660,5.453471 +35.988000,3.019091,5.571736 +36.279000,2.963985,5.529799 +35.207000,2.959839,5.542762 +35.105000,3.017382,5.612525 +34.837000,2.948756,5.647480 +33.012000,2.934889,5.593412 +34.250000,2.956937,5.591215 +33.058000,2.998367,5.518347 +33.202000,2.955484,5.504958 +34.098000,2.984176,5.459876 +33.753000,3.016494,5.526093 +33.621000,2.984836,5.603407 +33.293000,2.959146,5.476426 +33.321000,2.983517,5.517585 +33.372000,2.930043,5.406034 +34.187000,2.952834,5.520301 +34.039000,2.982339,5.354418 +32.721000,2.996343,5.414162 +32.659000,2.994343,5.521077 +33.110000,2.966435,5.466935 +33.037000,2.931489,5.384504 +33.192000,2.997236,5.530668 +37.482000,3.008632,5.451576 +32.962000,2.951321,5.309482 +32.730000,3.005531,5.475207 +31.093000,2.977978,5.452110 +31.720000,2.981941,5.476552 +32.322000,3.000306,5.520339 +31.199000,2.951851,5.254729 +30.179000,2.944483,5.177893 +30.913000,2.987942,5.284760 +30.168000,2.995559,5.242466 +29.715000,2.996981,5.252872 +30.166000,2.988240,5.334897 +29.843000,2.998001,5.245183 +30.120000,2.987833,5.341994 +31.197000,2.983063,5.189468 +31.405000,3.014136,5.247357 +31.073000,2.959789,5.145167 +31.765000,2.987510,5.092023 +30.196000,2.983496,5.131805 +29.925000,2.965296,5.187393 +31.169000,2.982998,5.169252 +31.459000,2.999937,5.107954 +32.444000,2.986610,5.246101 +32.580000,2.975321,5.200410 +31.662000,2.986836,5.427077 +32.709000,3.011506,5.478947 +31.547000,2.987751,5.329915 +33.070000,3.014070,5.444310 +32.479000,2.996712,5.430675 +32.484000,3.078124,5.456882 +32.445000,3.038115,5.350647 +37.023000,3.042104,5.216331 +33.665000,3.030892,5.256653 +33.641000,3.032086,5.200324 +31.804000,3.065774,5.204882 +32.560000,3.074614,5.168974 +32.746000,3.039113,5.075660 +32.611000,3.100556,5.224187 +31.665000,3.082232,5.221079 +30.785000,3.091272,5.214909 +32.149000,3.134884,5.194189 +31.832000,3.137703,5.277042 +31.602000,3.068617,5.309059 +30.685000,3.098446,5.193544 +31.055000,3.061140,5.103621 +30.605000,3.079597,5.258814 +29.441000,3.126950,5.366085 +29.226000,3.080436,5.259089 +28.642000,3.084457,5.502673 +29.165000,3.105607,5.438691 +29.111000,3.056019,5.502460 +29.149000,3.115389,5.303230 +28.678000,3.132673,5.296263 +29.778000,3.074995,5.334442 +29.547000,3.098267,5.438137 +29.803000,3.092544,5.462262 +30.856000,3.087550,5.299778 +30.246000,3.064135,5.316715 +29.777000,3.000735,5.309944 +29.709000,3.059872,5.189170 +29.668000,3.055239,5.210083 +29.479000,3.072886,5.323142 +29.299000,3.075531,5.324988 +32.960000,3.074851,5.378509 +28.962000,3.077558,5.397326 +27.961000,3.082428,5.513772 +28.152000,3.138646,5.630601 +27.852000,3.110358,5.690168 +25.956000,3.118530,5.604899 +28.237000,3.071965,5.534245 +26.526000,3.133126,5.662600 +25.937000,3.136790,5.715556 +27.007000,3.101078,5.594078 +27.296000,3.071476,5.534300 +26.972000,3.074173,5.550189 +27.637000,3.075405,5.345758 +27.224000,3.102062,5.525258 +28.217000,3.062424,5.450014 +27.853000,3.076270,5.458673 +27.775000,3.089699,5.511071 +28.798000,3.058402,5.499324 +27.814000,3.080683,5.538812 +28.753000,3.088925,5.572701 +28.053000,3.065062,5.604177 +28.781000,3.121951,5.625543 +28.109000,3.134823,5.533525 +28.210000,3.096528,5.306186 +28.245000,3.145955,5.447908 +28.743000,3.126529,5.242153 +28.387000,3.062274,5.326251 +28.505000,3.125812,5.352630 +29.125000,3.056045,5.414201 +29.741000,3.095418,5.528843 +31.900000,3.086146,5.463487 +30.016000,3.062712,5.373900 +30.258000,3.094184,5.311470 +31.266000,3.099163,5.373512 +29.832000,3.084735,5.340140 +33.878000,3.102289,5.356869 +30.338000,3.128202,5.410048 +30.275000,3.094154,5.416850 +29.497000,3.100971,5.402497 +29.231000,3.083865,5.565398 +29.755000,3.101918,5.450869 +30.258000,3.035887,5.385079 +34.111000,3.056791,5.384481 +31.630000,3.068326,5.375029 +30.447000,3.126340,5.405217 +31.069000,3.108920,5.595913 +29.868000,3.079360,5.448848 +29.366000,3.067842,5.521845 +34.454000,3.048535,5.755828 +29.602000,3.100663,5.820058 +28.908000,3.083968,5.721224 +28.997000,3.087040,5.734750 +29.073000,3.101439,5.608753 +28.424000,3.107772,5.700111 +28.878000,3.089736,5.692766 +28.789000,3.049959,5.602152 +29.681000,3.094072,5.689317 +29.867000,3.045348,5.693169 +45.477000,3.012053,5.713602 +29.300000,3.035433,5.729338 +29.503000,3.063450,5.905056 +29.568000,3.035800,5.945027 +30.407000,3.051416,5.910396 +31.111000,3.040278,5.810192 +31.160000,3.077977,5.823519 +32.487000,2.990358,5.628310 +32.889000,3.046810,5.551405 +36.862000,3.039090,5.600615 +33.332000,3.017341,5.791119 +33.710000,3.055471,5.775621 +33.283000,3.061433,5.830304 +34.380000,3.025640,5.942462 +35.335000,3.087849,5.938837 +35.448000,3.046278,5.894545 +34.790000,3.024004,5.869229 +35.482000,3.025634,5.815760 +36.214000,3.003371,5.914434 +35.721000,3.002475,5.853734 +36.182000,3.044328,5.731897 +37.170000,3.006226,5.875598 +36.152000,2.987863,5.813369 +36.962000,2.995907,5.745394 +35.609000,2.990973,5.814898 +36.374000,2.984500,5.719682 +35.842000,2.986712,5.752023 +36.138000,2.991612,5.738679 +35.875000,3.003987,5.748233 +41.346000,3.010101,5.755120 +35.965000,3.000284,5.734413 +35.856000,3.002259,5.772175 +36.178000,3.007559,5.803481 +37.147000,3.022669,5.827042 +36.818000,3.010671,5.794118 +37.999000,2.991025,5.708733 +47.391000,3.021904,5.662409 +37.895000,3.050134,5.686052 +37.605000,3.024338,5.747175 +38.017000,2.993454,5.622405 +38.394000,3.013813,5.652930 +37.908000,3.037750,5.708849 +38.566000,2.988231,5.689292 +37.916000,2.975165,5.683946 +39.444000,3.025068,5.484943 +39.531000,3.032174,5.592175 +39.468000,3.038214,5.525522 +38.648000,3.012430,5.511276 +38.977000,2.975759,5.438990 +38.970000,2.962560,5.520380 +39.263000,2.983875,5.702666 +39.691000,2.964378,5.654523 +39.697000,2.981789,5.640752 +39.991000,2.996150,5.750504 +39.646000,3.008975,5.765985 +39.712000,3.002789,5.841462 +40.329000,3.005509,5.843458 +41.038000,3.042357,5.848820 +40.106000,3.050542,5.940462 +40.916000,3.008524,5.929222 +40.603000,3.027696,5.902079 +40.849000,3.027959,5.913845 +46.661000,3.047812,5.851758 +41.640000,3.046250,5.920289 +41.841000,3.072537,5.883620 +43.968000,3.063510,5.944353 +43.109000,3.042562,5.909801 +43.426000,2.963471,5.931035 +43.249000,2.987038,5.860998 +45.454000,3.029212,5.888451 +44.301000,3.047477,5.882692 +43.827000,3.032479,5.857212 +45.741000,3.056923,5.870274 +45.993000,3.023167,5.929586 +45.189000,3.070182,5.932240 +45.831000,3.054961,5.997319 +47.046000,3.055362,5.952472 +47.534000,3.043058,5.857823 +47.428000,3.058707,5.996252 +48.392000,3.015283,5.880420 +48.184000,3.029642,5.774366 +47.225000,3.076815,5.919321 +49.392000,3.022696,5.898224 +53.465000,3.032225,5.997479 +50.192000,3.050496,5.939286 +48.608000,3.044674,5.996001 +47.551000,3.049845,5.977027 +48.281000,3.021177,5.954504 +49.645000,3.007835,5.971983 +48.658000,3.019222,6.003891 +49.441000,3.022928,5.983049 +49.457000,3.022413,5.934405 +48.867000,3.014984,5.940477 +52.224000,3.019120,5.892701 +118.856000,3.017341,5.898064 +48.704000,3.010120,5.857327 +48.157000,3.030030,5.891335 +47.373000,3.000480,5.884868 +47.972000,2.990424,5.954295 +47.802000,2.986807,5.946443 +48.359000,3.026266,5.963790 +47.953000,3.042131,5.904916 +52.957000,3.050544,5.871666 +47.326000,3.039392,5.889247 +48.390000,3.048308,5.936658 +48.077000,3.024124,5.914269 +48.344000,3.049278,5.897202 +47.356000,3.025029,5.862447 +46.409000,3.017858,5.857031 +44.769000,3.021738,5.833071 +45.374000,3.005608,5.819508 +45.201000,3.017315,5.814610 +44.811000,3.014325,5.796362 +46.251000,2.986021,5.786723 +44.504000,3.031310,5.723968 +44.411000,3.020483,5.838198 +44.672000,3.014298,5.853550 +50.821000,3.042063,5.809202 +44.749000,3.028769,5.820905 +49.193000,3.025032,5.750033 +47.507000,3.038922,5.737182 +45.854000,3.034579,5.710129 +47.414000,3.049758,5.787707 +162.558000,2.997922,5.692503 +101.918000,2.965581,5.734169 +96.069000,3.000506,5.741162 +42.663000,2.964564,5.650248 +42.733000,3.015020,5.712581 +42.402000,3.031678,5.620017 +44.487000,2.998023,5.650542 +41.782000,3.014342,5.611010 +51.274000,2.992757,5.643629 +41.887000,2.998623,5.603707 +42.984000,2.955454,5.597359 +44.328000,2.972473,5.666095 +42.617000,3.013752,5.651056 +42.299000,2.970988,5.617723 +41.427000,2.968113,5.502094 +41.808000,2.968966,5.407378 +42.228000,2.968816,5.480129 +45.414000,3.001628,5.535557 +47.675000,3.000990,5.583635 +41.902000,3.009979,5.471594 +40.562000,2.996144,5.453006 +41.241000,3.012971,5.416540 +41.835000,2.998979,5.392218 +41.033000,2.996780,5.346394 +41.356000,3.019434,5.359541 +41.178000,3.013591,5.322240 +40.830000,3.005878,5.250134 +40.633000,2.981938,5.255682 +40.605000,3.007713,5.375628 +40.466000,2.990648,5.252735 +40.370000,3.003234,5.242776 +41.005000,3.005974,5.309345 +40.660000,2.969601,5.166947 +41.308000,2.952958,5.173001 +41.018000,2.964145,5.302063 +40.643000,2.975461,5.253664 +40.457000,2.983181,5.268852 +39.467000,3.029596,5.339035 +40.362000,2.992144,5.262042 +40.146000,3.001095,5.212812 +39.698000,3.004713,5.226292 +39.911000,2.998117,5.330840 +40.023000,2.987525,5.317826 +42.831000,2.991614,5.258965 +39.248000,2.991520,5.212242 +38.523000,2.974901,5.156785 +36.166000,2.977290,5.199164 +31.790000,2.990908,5.067102 +31.317000,2.979229,5.016469 +31.050000,2.979261,5.007875 +31.138000,2.959907,5.061990 +31.034000,2.938619,5.073667 +30.078000,2.979967,5.066787 +31.811000,2.959343,5.043648 +32.206000,2.918538,4.941725 +30.985000,2.976529,5.072186 +30.500000,2.976708,5.041049 +29.935000,2.945420,4.994263 +30.440000,2.966609,5.068317 +30.065000,3.010547,5.108094 +31.648000,2.935920,5.033782 +31.028000,2.974259,4.960861 +31.212000,2.957550,4.997485 +31.687000,2.982240,5.108674 +32.336000,2.954630,4.898280 +32.119000,2.936459,4.970522 +31.138000,2.921295,4.856388 +32.236000,2.980173,4.951673 +31.472000,2.957467,4.932992 +31.635000,3.018971,4.948359 +31.606000,2.987816,4.926228 +31.401000,2.986440,4.948109 +33.085000,2.918326,4.870786 +35.862000,2.977430,4.888430 +32.635000,2.933988,4.885536 +32.817000,2.953997,4.915902 +32.706000,2.949264,4.889869 +35.756000,3.004853,5.022865 +33.949000,2.964290,5.045866 +33.230000,2.976432,4.914492 +32.218000,2.993934,4.994716 +33.434000,2.981564,4.890858 +32.456000,2.988023,4.890171 +32.729000,3.019011,5.009514 +32.415000,3.022252,5.002853 +32.134000,2.976340,5.064182 +31.948000,2.985020,5.090441 +32.057000,3.010392,5.141410 +33.164000,2.988250,5.121484 +32.768000,3.008901,5.150106 +32.640000,3.034113,5.192644 +32.548000,2.987517,5.081462 +33.162000,3.018745,5.179359 +33.599000,3.013698,5.173114 +32.833000,3.015764,5.267357 +32.855000,3.027750,5.396392 +31.303000,3.014856,5.419462 +32.360000,3.046633,5.410791 +31.802000,2.998800,5.323837 +31.176000,2.987938,5.351301 +31.069000,3.041659,5.480229 +32.305000,2.995630,5.411792 +33.254000,2.979115,5.328040 +32.298000,2.980137,5.286048 +35.408000,2.988323,5.419757 +32.208000,2.994114,5.366512 +30.800000,3.006698,5.530260 +32.126000,2.980598,5.597826 +32.324000,2.994025,5.631248 +31.754000,3.032896,5.733799 +30.752000,3.017018,5.742712 +28.918000,3.055716,5.656472 +29.466000,3.069800,5.676855 +28.932000,3.031760,5.575542 +30.252000,3.028278,5.605822 +30.677000,3.010748,5.633574 +28.924000,3.017305,5.584468 +30.453000,2.994990,5.551850 +30.331000,2.996701,5.445897 +29.713000,3.013026,5.506012 +30.145000,2.992779,5.436980 +29.741000,3.012607,5.349546 +30.600000,3.013925,5.474535 +30.199000,2.996397,5.475850 +29.517000,2.967620,5.395513 +29.201000,2.947569,5.404001 +29.586000,2.982782,5.291428 +31.171000,2.949782,5.207433 +31.849000,2.958317,5.343241 +31.024000,2.960562,5.293821 +30.873000,2.897187,5.210476 +31.131000,2.896733,5.234302 +31.158000,2.918557,5.266108 +31.060000,2.954859,5.288791 +32.444000,2.952168,5.241511 +32.019000,2.984346,5.389606 +36.169000,2.963696,5.453856 +31.888000,2.948127,5.374627 +31.432000,2.960536,5.359529 +32.680000,2.925221,5.332350 +31.581000,2.947516,5.506567 +32.300000,2.981065,5.408629 +31.125000,2.993157,5.494901 +31.320000,2.973660,5.386705 +31.508000,2.967885,5.386578 +30.775000,2.695171,4.875511 +29.903000,2.944858,5.398096 +29.668000,2.919176,5.489593 +29.593000,2.985861,5.542627 +30.113000,2.964739,5.529334 +31.004000,2.947876,5.518663 +30.442000,2.997217,5.604602 +30.282000,2.969922,5.518661 +29.953000,2.936145,5.620131 +30.850000,2.950772,5.618114 +31.030000,2.966608,5.540997 +30.491000,2.949235,5.528992 +31.098000,2.955768,5.592105 +31.123000,2.957880,5.555295 +30.251000,2.956200,5.581810 +30.301000,2.944777,5.556023 +29.355000,2.912540,5.554791 +32.917000,2.954671,5.598827 +30.628000,2.950264,5.587277 +30.793000,2.948953,5.540761 +30.972000,2.946050,5.527922 +29.196000,2.906190,5.433814 +29.537000,2.940654,5.517352 +34.840000,2.968641,5.566113 +30.890000,2.936796,5.521385 +30.491000,2.959449,5.533933 +31.708000,2.936059,5.529284 +31.889000,2.958739,5.478731 +31.914000,2.941541,5.517895 +32.674000,2.945935,5.625719 +31.741000,2.941269,5.529549 +32.179000,2.985834,5.484187 +32.928000,2.950767,5.514687 +32.652000,2.954590,5.449856 +32.274000,2.973587,5.585416 +32.251000,2.960138,5.537115 +32.856000,2.951445,5.536042 +33.006000,2.970228,5.472983 +32.304000,2.955733,5.487309 +32.270000,2.958274,5.503585 +32.408000,2.962622,5.513652 +31.675000,2.961771,5.542667 +31.525000,2.925126,5.384655 +31.372000,2.949415,5.399557 +31.438000,2.915995,5.405423 +32.052000,2.911175,5.461374 +32.839000,2.949614,5.515643 +32.871000,2.898362,5.430665 +32.662000,2.909737,5.512064 +32.633000,2.936112,5.513890 +32.911000,2.935212,5.478726 +31.971000,2.926894,5.473571 +33.062000,2.943468,5.485198 +36.975000,2.945440,5.467330 +32.117000,2.939066,5.486227 +30.806000,2.935135,5.480511 +32.191000,2.923352,5.473280 +32.887000,2.932744,5.525501 +33.859000,2.953635,5.610952 +33.594000,2.972464,5.645544 +34.385000,2.962495,5.625681 +33.331000,2.952129,5.579880 +35.752000,2.929344,5.571527 +35.641000,2.940758,5.567153 +35.167000,2.928254,5.519742 +34.639000,2.941896,5.541164 +35.277000,2.960030,5.556267 +35.297000,2.966673,5.516139 +35.023000,2.961527,5.513060 +35.201000,2.958002,5.526732 +34.839000,2.931676,5.491712 +34.703000,2.922858,5.468040 +35.388000,2.944237,5.512064 +34.420000,2.949143,5.503738 +34.818000,2.965092,5.531942 +36.057000,2.962521,5.508068 +36.093000,2.950557,5.468437 +36.267000,2.946687,5.475392 +35.996000,2.939843,5.478894 +34.458000,2.940288,5.491734 +35.144000,2.938135,5.481799 +35.851000,2.943023,5.495572 +39.729000,2.940645,5.500736 +35.784000,2.930639,5.482244 +35.064000,2.944746,5.498366 +36.108000,2.947620,5.498283 +35.492000,2.955365,5.512921 +35.171000,2.954052,5.503772 +35.819000,2.942127,5.506958 +33.886000,2.939863,5.481083 +34.665000,2.938754,5.447074 +35.233000,2.941927,5.468208 +34.886000,2.953485,5.479568 +35.193000,2.973896,5.524160 +34.490000,2.937435,5.462901 +34.229000,2.958512,5.521878 +33.909000,2.935524,5.476665 +33.909000,2.919356,5.484888 +33.944000,2.954223,5.500093 +33.955000,2.936539,5.468170 +34.022000,2.935486,5.466602 +34.522000,2.928851,5.468624