From 21f75c35ae6e155cc9c0acb6a6fdb62bb6f060b7 Mon Sep 17 00:00:00 2001 From: Tom Close Date: Sat, 30 Jun 2012 12:13:32 +0900 Subject: [PATCH] added files --- Doxyfile | 1287 + algorithm_outline.txt | 32 + bash/add_base_intensity | 25 + bash/add_density | 25 + bash/create_fibres | 30 + bash/edit_fibres | 28 + bash/metropolis | 1 + bash/process_collections | 43 + bash/process_neighbourhoods | 79 + bash/rename_frr | 24 + bash/test_bed | 1 + build | 16 + build_debug | 26 + cmd/add_encodings.cpp | 88 + cmd/average_fibres.cpp | 245 + cmd/cluster_strands.cpp | 369 + cmd/combine_fibres.cpp | 170 + cmd/display_fibres.cpp | 238 + cmd/dummy.cpp | 84 + cmd/echo_parameters.cpp | 1278 + cmd/export_fibres.cpp | 160 + cmd/fibre_info.cpp | 95 + cmd/generate_image.cpp | 278 + cmd/hamiltonian.cpp | 552 + cmd/import_fibres.cpp | 249 + cmd/init_fibres.cpp | 408 + cmd/map_colours.cpp | 373 + cmd/maxb0.cpp | 81 + cmd/merge_fibres.cpp | 400 + cmd/metropolis.cpp | 571 + cmd/new_fibres.cpp | 253 + cmd/noisify_image.cpp | 138 + cmd/offset_strands.cpp | 109 + cmd/peel_fibres.cpp | 203 + cmd/perturb_fibres.cpp | 226 + cmd/project_strands.cpp | 120 + cmd/random_fibres.cpp | 175 + cmd/random_landscape.cpp | 176 + cmd/random_miscs.cpp | 246 + cmd/random_short_strands.cpp | 139 + cmd/redegree_fibres.cpp | 154 + cmd/remove_fibres.cpp | 175 + cmd/remove_isotropic.cpp | 106 + cmd/remove_short_tracks.cpp | 94 + cmd/resample_tcks.cpp | 173 + cmd/reset_indices.cpp | 132 + cmd/riemannian.cpp | 588 + cmd/rotate_strand.cpp | 165 + cmd/scale_fibres.cpp | 151 + cmd/scan.cpp | 907 + cmd/select_fibres.cpp | 679 + cmd/select_image.cpp | 125 + cmd/set_properties.cpp | 166 + cmd/shortest_distance.cpp | 132 + cmd/simple_phantoms.cpp | 318 + cmd/stats_fibres.cpp | 290 + cmd/stress_tester.cpp | 717 + cmd/subdiv_strands.cpp | 173 + cmd/subtract_fibres.cpp | 175 + cmd/subtract_images.cpp | 96 + cmd/summarise_strands.cpp | 193 + cmd/svd_fibres.cpp | 207 + cmd/test_bed.cpp | 506 + cmd/test_gradient.cpp | 1734 + cmd/test_scan.cpp | 173 + cmd/thesis_merge.cpp | 119 + cmd/trim_fibres.cpp | 304 + gdb_printers/python/bts/__init__.py | 1 + gdb_printers/python/bts/fibre/__init__.py | 1 + gdb_printers/python/bts/fibre/__init__.pyc | Bin 0 -> 159 bytes gdb_printers/python/bts/fibre/printers.py | 360 + gdb_printers/python/bts/fibre/printers.pyc | Bin 0 -> 14345 bytes gdb_printers/python/bts/image/__init__.py | 1 + gdb_printers/python/bts/image/__init__.pyc | Bin 0 -> 159 bytes gdb_printers/python/bts/image/printers.py | 337 + gdb_printers/python/bts/image/printers.pyc | Bin 0 -> 20204 bytes gdb_printers/python/bts/mcmc/__init__.py | 1 + gdb_printers/python/bts/mcmc/printers.py | 110 + gdb_printers/python/mr/__init__.py | 1 + gdb_printers/python/mr/math/__init__.py | 1 + gdb_printers/python/mr/math/printers.py | 170 + hessian_todo.txt | 7 + link/metropolis | 1 + matlab/CSD/SH2RH.m | 16 + matlab/CSD/SH2amp.m | 8 + matlab/CSD/amp2SH.m | 13 + matlab/CSD/c2s.m | 8 + matlab/CSD/csdeconv.m | 69 + matlab/CSD/dir300.txt | 300 + matlab/CSD/dir60.txt | 60 + matlab/CSD/equidistribute.m | 44 + matlab/CSD/eval_ALP.m | 15 + matlab/CSD/eval_DT.m | 35 + matlab/CSD/eval_SH.m | 14 + matlab/CSD/gen_delta.m | 13 + matlab/CSD/gen_scheme.m | 45 + matlab/CSD/lmax_for_SH.m | 7 + matlab/CSD/nSH_for_lmax.m | 8 + matlab/CSD/noisify.m | 11 + matlab/CSD/plot_RH.m | 8 + matlab/CSD/plot_SH.m | 12 + matlab/CSD/plot_amp.m | 78 + matlab/CSD/read_mrtrix.m | 154 + matlab/CSD/readme.txt | 77 + matlab/CSD/s2c.m | 8 + matlab/CSD/sconv.m | 16 + matlab/CSD/sdeconv.m | 17 + matlab/add_2d_vox_lines_to_plot.m | 43 + matlab/add_colour_key.m | 40 + matlab/add_isotropic_region_to_plot.m | 24 + matlab/add_lines_to_plot.m | 18 + matlab/add_sphere_to_plot.m | 56 + matlab/add_strands_to_plot.m | 7 + matlab/add_tcks_to_plot.m | 178 + matlab/add_tracts_to_plot.m | 78 + matlab/add_vox_lines_to_plot.m | 43 + matlab/btsplot.m | 25 + matlab/circle_stddev.m | 23 + matlab/concatenate_strands.m | 13 + matlab/concatenate_tracts.m | 13 + matlab/create_movie_of_samples.m | 99 + matlab/create_uniform_strands.m | 73 + matlab/diffusion_weight_example.m | 175 + matlab/display_reference_sphere.m | 24 + matlab/eval_response_coeffs.m | 20 + matlab/example_tract.m | 198 + matlab/fourier2tck.m | 30 + matlab/fourier_descr_matrix.m | 20 + matlab/get_num_section_properties.m | 33 + matlab/get_obs_img_dims.m | 46 + matlab/get_observed_dims.m | 62 + matlab/get_observed_properties.m | 69 + matlab/get_properties.m | 53 + matlab/grad_scheme.mat | Bin 0 -> 23231 bytes matlab/gradient_calc_validation.m | 523 + matlab/imaging_gradient_demo.m | 37 + matlab/interp_integration.m | 41 + matlab/legendre_coefficients.m | 31 + matlab/lhist.m | 8 + matlab/load_extended_props.m | 32 + matlab/load_image.m | 134 + matlab/load_param_evolution.m | 72 + matlab/load_strand_sections.m | 21 + matlab/load_strand_sets.m | 55 + matlab/load_strands.m | 20 + matlab/load_tck_sets.m | 55 + matlab/load_tcks.m | 20 + matlab/load_tensor.m | 49 + matlab/load_tract_sections.m | 13 + matlab/load_tract_sets.m | 29 + matlab/load_tracts.m | 20 + matlab/load_triples.m | 5 + matlab/load_unzip_image.m | 8 + matlab/load_unzip_mcmc.m | 11 + matlab/load_unzip_mcmc_state.m | 13 + matlab/load_unzip_strand_sections.m | 6 + matlab/load_unzip_strand_sets.m | 6 + matlab/load_unzip_strands.m | 6 + matlab/load_unzip_tensor.m | 7 + matlab/load_unzip_tract_sections.m | 6 + matlab/load_unzip_tract_sets.m | 6 + matlab/load_unzip_tracts.m | 6 + matlab/load_unzip_triples.m | 11 + matlab/nfg_strands_format.m | 68 + matlab/old/bacth_curve_prior_est.m | 41 + matlab/old/batch_curve_prior_est.m | 41 + matlab/old/batch_fourier_est.m | 42 + matlab/old/f_descript_orig.m | 24 + matlab/old/fernando_partial_track.m | 82 + matlab/old/fourier_angles_and_lengths.m | 21 + matlab/old/fourier_prior.m | 32 + matlab/old/fr_descript.m | 49 + matlab/old/mex_load_mrtrix_strands.cpp | 116 + matlab/old/mex_oad_mrtrix_strands.mexmac | Bin 0 -> 20128 bytes matlab/old/p.mat | Bin 0 -> 641 bytes matlab/old/p2_scheme.mat | Bin 0 -> 3119134 bytes matlab/old/plot_centre_voxel.m | 17 + matlab/old/plot_param_evolution.m | 63 + matlab/old/plot_parameter_evolution.m | 82 + matlab/old/prior_estimation.m | 41 + matlab/old2/d_fourier_descr_matrix.m | 20 + matlab/old2/f_descript.m | 82 + matlab/old2/get_m0_coeffs.m | 24 + matlab/old2/get_response_coeffs.m | 66 + matlab/old2/inv_f_descript.m | 77 + matlab/old2/load_fourier.m | 43 + matlab/old2/load_fourier_coeff.m | 127 + matlab/old2/load_mrtrix_strands.m | 132 + matlab/old2/load_samples.m | 238 + matlab/old2/load_strand_samples.m | 231 + matlab/old2/p_descript.m | 91 + matlab/old2/p_scheme.mat | Bin 0 -> 3068650 bytes matlab/old2/plot_neighbourhood.m | 97 + matlab/old2/plot_strand_samples.m | 258 + matlab/old2/plot_vox_lines.m | 38 + matlab/old2/plot_voxel_signal.m | 17 + matlab/old2/rand_f_descript.m | 106 + matlab/parse_properties_row.m | 15 + matlab/parse_strand_sections.m | 5 + matlab/parse_strands.m | 5 + matlab/parse_tcks.m | 5 + matlab/parse_tract_sections.m | 5 + matlab/parse_tracts.m | 26 + matlab/pf.m | 23 + matlab/plot_evolution.m | 240 + matlab/plot_explore_stats.m | 71 + matlab/plot_extend_elem_properties.m | 102 + matlab/plot_extend_properties.m | 63 + matlab/plot_extracted_features.m | 48 + matlab/plot_features.m | 276 + matlab/plot_fibres.m | 25 + matlab/plot_fisher_gradient.m | 200 + matlab/plot_gradient.m | 163 + matlab/plot_hessian.m | 148 + matlab/plot_image.m | 252 + matlab/plot_peaks.m | 75 + matlab/plot_rank3_hessian.m | 189 + matlab/plot_samples.m | 233 + matlab/plot_scan.m | 415 + matlab/plot_spikes.m | 57 + matlab/plot_strand_sets.m | 330 + matlab/plot_strands.m | 251 + matlab/plot_tck_sets.m | 328 + matlab/plot_tcks.m | 239 + matlab/plot_test.m | 166 + matlab/plot_test_bed.m | 231 + matlab/plot_test_gradient.m | 635 + matlab/plot_test_peaks.m | 195 + matlab/plot_test_scan.m | 237 + matlab/plot_tract_sets.m | 436 + matlab/plot_tracts.m | 300 + matlab/plotbts.m | 25 + matlab/read_element_properties.m | 48 + matlab/read_element_property_keys.m | 54 + matlab/read_extracted_features.m | 36 + matlab/read_fibres.m | 113 + matlab/read_image.m | 132 + matlab/read_properties.m | 36 + matlab/read_set_element_properties.m | 63 + matlab/save_evo_for_talk.m | 42 + matlab/save_figure_for_talk.m | 43 + matlab/save_samples_for_report.m | 45 + matlab/save_samples_for_talk.m | 67 + matlab/set_bundle_colours.m | 14 + matlab/split_at_file_seperator.m | 44 + matlab/strands2tcks.m | 13 + matlab/test_gaussian_log_prob.m | 13 + matlab/test_odr.m | 24 + matlab/test_peak_log_prob.m | 44 + matlab/tracts2strands.m | 80 + matlab/unzip_image.m | 5 + matlab/unzip_strand_sections.m | 31 + matlab/unzip_strand_sets.m | 71 + matlab/unzip_strands.m | 49 + matlab/unzip_tensor.m | 34 + matlab/unzip_tract_sections.m | 36 + matlab/unzip_tract_sets.m | 72 + matlab/unzip_tracts.m | 53 + matlab/unzip_triples.m | 0 profiles/callgrind.out.16487 | 33910 ++++++++++++++ profiles/callgrind.out.16517 | 0 profiles/callgrind.out.3008 | 37718 ++++++++++++++++ python/fibre/__init__.py | 0 python/fibre/base/__init__.py | 0 python/fibre/base/object.py | 34 + python/fibre/base/set.py | 539 + python/fibre/base/test/__init__.py | 0 python/fibre/base/test/output/cpp_output.txt | 4273 ++ .../fibre/base/test/output/python_output.txt | 4273 ++ .../fibre/base/test/stress_test_generator.py | 1191 + python/fibre/base/test/stress_tester.py | 501 + python/scan.py | 284 + src/NFG_links | 21 + src/blossom5/CHANGES.TXT | 32 + src/blossom5/CheckPerfectMatching.cpp | 172 + src/blossom5/CheckPerfectMatching.h | 20 + src/blossom5/GEOM/GPMinit.cpp | 200 + src/blossom5/GEOM/GPMinterface.cpp | 84 + src/blossom5/GEOM/GPMkdtree.cpp | 688 + src/blossom5/GEOM/GPMkdtree.h | 105 + src/blossom5/GEOM/GPMmain.cpp | 148 + src/blossom5/GEOM/GeomPerfectMatching.h | 177 + src/blossom5/GRAPH1.TXT | 10 + src/blossom5/GRAPH2.TXT | 11 + src/blossom5/LCA.h | 297 + src/blossom5/LICENSE.TXT | 22 + src/blossom5/Makefile | 21 + src/blossom5/MinCost/MinCost.cpp | 287 + src/blossom5/MinCost/MinCost.h | 504 + src/blossom5/MinCost/instances.inc | 12 + src/blossom5/PMduals.cpp | 441 + src/blossom5/PMexpand.cpp | 303 + src/blossom5/PMimplementation.h | 356 + src/blossom5/PMinit.cpp | 544 + src/blossom5/PMinterface.cpp | 270 + src/blossom5/PMmain.cpp | 694 + src/blossom5/PMrepair.cpp | 431 + src/blossom5/PMshrink.cpp | 318 + src/blossom5/PQ.h | 396 + src/blossom5/PerfectMatching.cpp | 3018 ++ src/blossom5/PerfectMatching.h | 232 + src/blossom5/README.TXT | 78 + src/blossom5/USAGE.TXT | 31 + src/blossom5/block.h | 268 + src/blossom5/example.cpp | 285 + src/blossom5/timer.h | 98 + .../analysis/fisher_gradient_matrix_tester.h | 121 + src/bts/analysis/fisher_gradient_tester.h | 122 + src/bts/analysis/gradient_tester.h | 112 + src/bts/analysis/hessian_tester.h | 124 + src/bts/analysis/image_gradient_tester.h | 149 + src/bts/analysis/image_hessian_tester.h | 152 + src/bts/analysis/inline_functions.h | 28 + src/bts/analysis/rank3_hessian_tester.h | 134 + src/bts/analysis/scan.h | 373 + src/bts/cmd.h | 84 + src/bts/common.cpp | 187 + src/bts/common.h | 354 + src/bts/coord.cpp | 156 + src/bts/coord.h | 240 + src/bts/coord/tensor.h | 120 + src/bts/diffusion/encoding.h | 171 + src/bts/diffusion/encoding/set.cpp | 70 + src/bts/diffusion/encoding/set.h | 98 + src/bts/diffusion/inline_functions.h | 28 + src/bts/diffusion/model.cpp | 338 + src/bts/diffusion/model.h | 245 + src/bts/diffusion/response.cpp | 204 + src/bts/diffusion/response.h | 152 + src/bts/fibre/base/object.cpp | 443 + src/bts/fibre/base/object.h | 795 + src/bts/fibre/base/properties_old.h | 70 + src/bts/fibre/base/reader.cpp.h | 353 + src/bts/fibre/base/reader.h | 175 + src/bts/fibre/base/set.cpp.h | 1935 + src/bts/fibre/base/set.h | 731 + src/bts/fibre/base/set/tensor.h | 160 + src/bts/fibre/base/set_reader.cpp.h | 184 + src/bts/fibre/base/set_reader.h | 128 + src/bts/fibre/base/set_writer.cpp.h | 119 + src/bts/fibre/base/set_writer.h | 202 + src/bts/fibre/base/tensor.cpp.h | 54 + src/bts/fibre/base/tensor.h | 168 + src/bts/fibre/base/tensor/writer2.cpp.h | 74 + src/bts/fibre/base/tensor/writer2.h | 79 + src/bts/fibre/base/tensor_writer.cpp.h | 149 + src/bts/fibre/base/tensor_writer.h | 93 + src/bts/fibre/base/writer.cpp.h | 341 + src/bts/fibre/base/writer.h | 242 + src/bts/fibre/properties/extended.cpp | 322 + src/bts/fibre/properties/extended.h | 210 + src/bts/fibre/properties/header.cpp.h | 52 + src/bts/fibre/properties/header.h | 59 + src/bts/fibre/strand.cpp | 753 + src/bts/fibre/strand.h | 294 + src/bts/fibre/strand/basic_section.cpp | 51 + src/bts/fibre/strand/basic_section.h | 196 + src/bts/fibre/strand/basic_section/tensor.cpp | 49 + .../fibre/strand/basic_section/tensor.cpp.h | 120 + src/bts/fibre/strand/basic_section/tensor.h | 97 + src/bts/fibre/strand/section.cpp | 40 + src/bts/fibre/strand/section.h | 233 + src/bts/fibre/strand/set.cpp | 794 + src/bts/fibre/strand/set.h | 293 + src/bts/fibre/strand/set/momentum.cpp | 73 + src/bts/fibre/strand/set/momentum.h | 90 + src/bts/fibre/strand/set/tensor.cpp | 36 + src/bts/fibre/strand/set/tensor.h | 237 + src/bts/fibre/strand/set/walker.cpp | 95 + src/bts/fibre/strand/set/walker.h | 78 + src/bts/fibre/strand/tensor.cpp | 72 + src/bts/fibre/strand/tensor.h | 119 + src/bts/fibre/strand/walker.h | 56 + src/bts/fibre/track.cpp | 106 + src/bts/fibre/track.h | 174 + src/bts/fibre/track/set.cpp | 326 + src/bts/fibre/track/set.h | 231 + src/bts/fibre/tractlet.cpp | 637 + src/bts/fibre/tractlet.h | 318 + src/bts/fibre/tractlet/section.cpp | 51 + src/bts/fibre/tractlet/section.h | 170 + src/bts/fibre/tractlet/section/tensor.cpp | 65 + src/bts/fibre/tractlet/section/tensor.h | 157 + src/bts/fibre/tractlet/set.cpp | 675 + src/bts/fibre/tractlet/set.h | 268 + src/bts/fibre/tractlet/set/momentum.cpp | 72 + src/bts/fibre/tractlet/set/momentum.h | 90 + src/bts/fibre/tractlet/set/tensor.cpp | 45 + src/bts/fibre/tractlet/set/tensor.h | 214 + src/bts/fibre/tractlet/set/walker.cpp | 103 + src/bts/fibre/tractlet/set/walker.h | 74 + src/bts/fibre/tractlet/tensor.cpp | 165 + src/bts/fibre/tractlet/tensor.h | 137 + src/bts/fibre/tractlet/walker.h | 56 + src/bts/file.cpp | 124 + src/bts/file.h | 177 + src/bts/image/buffer.cpp.h | 346 + src/bts/image/buffer.h | 359 + src/bts/image/container/buffer.h | 150 + src/bts/image/container/voxel.h | 128 + src/bts/image/expected/buffer.cpp | 255 + src/bts/image/expected/buffer.h | 600 + src/bts/image/expected/buffer_tpl.cpp.h | 536 + src/bts/image/expected/buffer_tpl.h | 284 + src/bts/image/expected/direction.cpp.h | 327 + src/bts/image/expected/direction.h | 149 + src/bts/image/expected/gaussian/buffer.cpp | 74 + src/bts/image/expected/gaussian/buffer.h | 95 + src/bts/image/expected/gaussian/voxel.cpp | 84 + src/bts/image/expected/gaussian/voxel.h | 102 + src/bts/image/expected/quartic/buffer.cpp | 83 + src/bts/image/expected/quartic/buffer.h | 87 + src/bts/image/expected/quartic/voxel.cpp | 249 + src/bts/image/expected/quartic/voxel.h | 115 + src/bts/image/expected/realistic/buffer.cpp | 82 + src/bts/image/expected/realistic/buffer.h | 85 + src/bts/image/expected/realistic/voxel.cpp | 89 + src/bts/image/expected/realistic/voxel.h | 94 + .../image/expected/reverse_sqrt/buffer.cpp | 82 + src/bts/image/expected/reverse_sqrt/buffer.h | 85 + src/bts/image/expected/reverse_sqrt/voxel.cpp | 73 + src/bts/image/expected/reverse_sqrt/voxel.h | 94 + src/bts/image/expected/sinc/buffer.cpp | 82 + src/bts/image/expected/sinc/buffer.h | 85 + src/bts/image/expected/sinc/voxel.cpp | 83 + src/bts/image/expected/sinc/voxel.h | 100 + src/bts/image/expected/top_hat/buffer.cpp | 81 + src/bts/image/expected/top_hat/buffer.h | 84 + src/bts/image/expected/top_hat/voxel.cpp | 62 + src/bts/image/expected/top_hat/voxel.h | 98 + src/bts/image/expected/trilinear/buffer.cpp | 83 + src/bts/image/expected/trilinear/buffer.h | 85 + src/bts/image/expected/trilinear/voxel.cpp | 105 + src/bts/image/expected/trilinear/voxel.h | 94 + src/bts/image/expected/voxel.cpp | 161 + src/bts/image/expected/voxel.h | 181 + src/bts/image/index.cpp | 83 + src/bts/image/index.h | 139 + src/bts/image/inline_functions.h | 53 + src/bts/image/noise.cpp | 63 + src/bts/image/noise.h | 141 + src/bts/image/noise/gaussian.cpp | 57 + src/bts/image/noise/gaussian.h | 65 + src/bts/image/noise/rician.cpp | 65 + src/bts/image/noise/rician.h | 65 + src/bts/image/observed/buffer.cpp | 158 + src/bts/image/observed/buffer.cpp.h | 223 + src/bts/image/observed/buffer.h | 370 + src/bts/image/observed/voxel.cpp | 204 + src/bts/image/observed/voxel.h | 159 + src/bts/image/properties.h | 56 + src/bts/image/reference/buffer.h | 114 + src/bts/image/voxel.h | 194 + src/bts/inline_functions.h | 56 + src/bts/math/blossom.cpp | 229 + src/bts/math/blossom.h | 60 + src/bts/math/blossom/edge.h | 71 + src/bts/math/common.cpp | 139 + src/bts/math/common.h | 91 + src/bts/math/kmeans.cpp | 72 + src/bts/math/kmeans.h | 497 + src/bts/math/munkres.h | 568 + src/bts/math/odr.h | 110 + src/bts/math/polygon_intersect.h | 132 + src/bts/math/svd.h | 103 + src/bts/mcmc/annealer.cpp | 55 + src/bts/mcmc/annealer.h | 61 + src/bts/mcmc/common.h | 47 + src/bts/mcmc/hamiltonian.h | 345 + src/bts/mcmc/inline_functions.h | 46 + src/bts/mcmc/metropolis.h | 295 + src/bts/mcmc/naninf_exception.h | 53 + src/bts/mcmc/proposal/distribution.cpp | 65 + src/bts/mcmc/proposal/distribution.h | 146 + .../mcmc/proposal/distribution/gaussian.cpp | 50 + src/bts/mcmc/proposal/distribution/gaussian.h | 72 + src/bts/mcmc/proposal/momentum.cpp | 114 + src/bts/mcmc/proposal/momentum.cpp.h | 106 + src/bts/mcmc/proposal/momentum.h | 215 + src/bts/mcmc/proposal/momentum/weighted.cpp | 122 + src/bts/mcmc/proposal/momentum/weighted.cpp.h | 81 + src/bts/mcmc/proposal/momentum/weighted.h | 110 + .../momentum/weighted/non_separable.cpp | 71 + .../momentum/weighted/non_separable.cpp.h | 82 + .../momentum/weighted/non_separable.h | 174 + src/bts/mcmc/proposal/walker.cpp | 62 + src/bts/mcmc/proposal/walker.h | 176 + src/bts/mcmc/riemannian.h | 449 + src/bts/mcmc/state.cpp | 35 + src/bts/mcmc/state.h | 175 + src/bts/mcmc/state/tensor.cpp | 58 + src/bts/mcmc/state/tensor.h | 77 + src/bts/mcmc/state/tensor/writer.cpp | 59 + src/bts/mcmc/state/tensor/writer.h | 78 + src/bts/prob/inline_functions.h | 40 + src/bts/prob/likelihood.cpp | 220 + src/bts/prob/likelihood.cpp.h | 268 + src/bts/prob/likelihood.h | 294 + src/bts/prob/likelihood/gaussian.cpp.h | 436 + src/bts/prob/likelihood/gaussian.h | 163 + src/bts/prob/likelihood/one_sided_gaussian.h | 141 + src/bts/prob/likelihood/rician.h | 157 + src/bts/prob/posterior.h | 59 + src/bts/prob/prior.cpp | 111 + src/bts/prob/prior.cpp.h | 50 + src/bts/prob/prior.h | 289 + src/bts/prob/prior_component/acs.cpp | 67 + src/bts/prob/prior_component/acs.h | 83 + src/bts/prob/prior_component/density.cpp | 66 + src/bts/prob/prior_component/density.h | 95 + src/bts/prob/prior_component/hook.cpp | 88 + src/bts/prob/prior_component/hook.h | 85 + src/bts/prob/prior_component/length.cpp | 68 + src/bts/prob/prior_component/length.h | 83 + src/bts/prob/prior_component/magnitude.cpp | 260 + src/bts/prob/prior_component/magnitude.h | 92 + src/bts/prob/prob.h | 40 + src/bts/prob/test/bayes_log_regression.cpp | 176 + src/bts/prob/test/bayes_log_regression.h | 95 + src/bts/prob/test/gaussian.cpp | 76 + src/bts/prob/test/gaussian.h | 100 + src/bts/prob/test/landscape.cpp | 350 + src/bts/prob/test/landscape.h | 189 + src/bts/prob/test/landscape/peak.cpp | 233 + src/bts/prob/test/landscape/peak.h | 102 + src/bts/prob/test/landscape/peak/reader.h | 91 + src/bts/prob/test/landscape/peak/writer.h | 76 + src/bts/prob/uniform.cpp | 40 + src/bts/prob/uniform.h | 133 + src/bts/triple.cpp | 50 + src/bts/triple.h | 461 + src/bts/utilities/common.h | 43 + src/bts/utilities/inline_functions.h | 40 + src/bts/utilities/reader.cpp.h | 81 + src/bts/utilities/reader.h | 74 + src/bts/utilities/writer.cpp.h | 65 + src/bts/utilities/writer.h | 108 + src/bts/version.h | 93 + src/k_means/KCtree.cpp | 832 + src/k_means/KCtree.h | 315 + src/k_means/KCutil.cpp | 240 + src/k_means/KCutil.h | 70 + src/k_means/KM_ANN.cpp | 191 + src/k_means/KM_ANN.h | 416 + src/k_means/KMcenters.cpp | 61 + src/k_means/KMcenters.h | 77 + src/k_means/KMdata.cpp | 101 + src/k_means/KMdata.h | 107 + src/k_means/KMeans.cpp | 114 + src/k_means/KMeans.h | 145 + src/k_means/KMfilterCenters.cpp | 237 + src/k_means/KMfilterCenters.h | 185 + src/k_means/KMlocal.cpp | 57 + src/k_means/KMlocal.h | 846 + src/k_means/KMrand.cpp | 609 + src/k_means/KMrand.h | 113 + src/k_means/KMterm.cpp | 70 + src/k_means/KMterm.h | 158 + src/phantom/draw_rois/draw_rois.cpp | 1 + src/phantom/draw_rois/draw_rois.h | 1 + src/phantom/interface.cpp | 211 + src/phantom/interface.h | 48 + .../mri_sim/isotropic_region_register.cpp | 1 + .../mri_sim/isotropic_region_register.h | 1 + src/phantom/mri_sim/mri_sim.cpp | 1 + src/phantom/mri_sim/mri_sim.h | 1 + src/phantom/mri_sim/overlap_strands.cpp | 1 + src/phantom/mri_sim/overlap_strands.h | 1 + src/phantom/mri_sim/segment_register.cpp | 1 + src/phantom/mri_sim/segment_register.h | 1 + src/phantom/mri_sim/segment_stats.cpp | 1 + src/phantom/mri_sim/segment_stats.h | 1 + src/phantom/mri_sim/sim_voxel_intensities.cpp | 1 + src/phantom/mri_sim/sim_voxel_intensities.h | 1 + .../mri_sim/strand_collection_stats.cpp | 1 + src/phantom/mri_sim/strand_collection_stats.h | 1 + src/phantom/mri_sim/subvoxel.cpp | 1 + src/phantom/mri_sim/subvoxel.h | 1 + src/phantom/mri_sim/voxel.cpp | 1 + src/phantom/mri_sim/voxel.h | 1 + src/phantom/noisify/noisify.cpp | 1 + src/phantom/noisify/noisify.h | 1 + src/phantom/optimise/cost_function.cpp | 1 + src/phantom/optimise/cost_function.h | 1 + src/phantom/optimise/optimise.cpp | 1 + src/phantom/optimise/optimise.h | 1 + src/phantom/optimise/reference_block.cpp | 1 + src/phantom/optimise/reference_block.h | 1 + src/phantom/optimise/sample.cpp | 1 + src/phantom/optimise/sample.h | 1 + src/phantom/optimise/sample_block.cpp | 1 + src/phantom/optimise/sample_block.h | 1 + src/phantom/rand_init/rand_init.cpp | 1 + src/phantom/rand_init/rand_init.h | 1 + src/phantom/resample/resample.cpp | 1 + src/phantom/resample/resample.h | 1 + src/phantom/shared/bundle.cpp | 1 + src/phantom/shared/bundle.h | 1 + src/phantom/shared/control_point.cpp | 1 + src/phantom/shared/control_point.h | 1 + src/phantom/shared/isotropic_region.cpp | 1 + src/phantom/shared/isotropic_region.h | 1 + src/phantom/shared/segment.cpp | 1 + src/phantom/shared/segment.h | 1 + src/phantom/shared/shared.cpp | 1 + src/phantom/shared/shared.h | 1 + src/phantom/shared/strand.cpp | 1 + src/phantom/shared/strand.h | 1 + src/phantom/shared/strand_collection.cpp | 1 + src/phantom/shared/strand_collection.h | 1 + src/phantom/subdiv/subdiv.cpp | 1 + src/phantom/subdiv/subdiv.h | 1 + src/phantom/trim/strand_section.cpp | 1 + src/phantom/trim/strand_section.h | 1 + src/phantom/trim/trim.cpp | 1 + src/phantom/trim/trim.h | 1 + sysconf/__init__.py | 0 sysconf/common.py | 24 + sysconf/darwin.py | 42 + sysconf/linux.py | 42 + sysconf/windows.py | 38 + sysconf/xmingw.py | 39 + test_output/cpp_output.txt | 19 + test_output/python_output.txt | 55 + 624 files changed, 169940 insertions(+) create mode 100644 Doxyfile create mode 100644 algorithm_outline.txt create mode 100755 bash/add_base_intensity create mode 100755 bash/add_density create mode 100755 bash/create_fibres create mode 100755 bash/edit_fibres create mode 120000 bash/metropolis create mode 100755 bash/process_collections create mode 100755 bash/process_neighbourhoods create mode 100755 bash/rename_frr create mode 120000 bash/test_bed create mode 100755 build create mode 100755 build_debug create mode 100644 cmd/add_encodings.cpp create mode 100644 cmd/average_fibres.cpp create mode 100644 cmd/cluster_strands.cpp create mode 100644 cmd/combine_fibres.cpp create mode 100644 cmd/display_fibres.cpp create mode 100644 cmd/dummy.cpp create mode 100644 cmd/echo_parameters.cpp create mode 100644 cmd/export_fibres.cpp create mode 100644 cmd/fibre_info.cpp create mode 100644 cmd/generate_image.cpp create mode 100644 cmd/hamiltonian.cpp create mode 100644 cmd/import_fibres.cpp create mode 100644 cmd/init_fibres.cpp create mode 100644 cmd/map_colours.cpp create mode 100644 cmd/maxb0.cpp create mode 100644 cmd/merge_fibres.cpp create mode 100644 cmd/metropolis.cpp create mode 100644 cmd/new_fibres.cpp create mode 100644 cmd/noisify_image.cpp create mode 100644 cmd/offset_strands.cpp create mode 100644 cmd/peel_fibres.cpp create mode 100644 cmd/perturb_fibres.cpp create mode 100644 cmd/project_strands.cpp create mode 100644 cmd/random_fibres.cpp create mode 100644 cmd/random_landscape.cpp create mode 100644 cmd/random_miscs.cpp create mode 100644 cmd/random_short_strands.cpp create mode 100644 cmd/redegree_fibres.cpp create mode 100644 cmd/remove_fibres.cpp create mode 100644 cmd/remove_isotropic.cpp create mode 100644 cmd/remove_short_tracks.cpp create mode 100644 cmd/resample_tcks.cpp create mode 100644 cmd/reset_indices.cpp create mode 100644 cmd/riemannian.cpp create mode 100644 cmd/rotate_strand.cpp create mode 100644 cmd/scale_fibres.cpp create mode 100644 cmd/scan.cpp create mode 100644 cmd/select_fibres.cpp create mode 100644 cmd/select_image.cpp create mode 100644 cmd/set_properties.cpp create mode 100644 cmd/shortest_distance.cpp create mode 100644 cmd/simple_phantoms.cpp create mode 100644 cmd/stats_fibres.cpp create mode 100644 cmd/stress_tester.cpp create mode 100644 cmd/subdiv_strands.cpp create mode 100644 cmd/subtract_fibres.cpp create mode 100644 cmd/subtract_images.cpp create mode 100644 cmd/summarise_strands.cpp create mode 100644 cmd/svd_fibres.cpp create mode 100644 cmd/test_bed.cpp create mode 100644 cmd/test_gradient.cpp create mode 100644 cmd/test_scan.cpp create mode 100644 cmd/thesis_merge.cpp create mode 100644 cmd/trim_fibres.cpp create mode 100644 gdb_printers/python/bts/__init__.py create mode 100644 gdb_printers/python/bts/fibre/__init__.py create mode 100644 gdb_printers/python/bts/fibre/__init__.pyc create mode 100644 gdb_printers/python/bts/fibre/printers.py create mode 100644 gdb_printers/python/bts/fibre/printers.pyc create mode 100644 gdb_printers/python/bts/image/__init__.py create mode 100644 gdb_printers/python/bts/image/__init__.pyc create mode 100644 gdb_printers/python/bts/image/printers.py create mode 100644 gdb_printers/python/bts/image/printers.pyc create mode 100644 gdb_printers/python/bts/mcmc/__init__.py create mode 100644 gdb_printers/python/bts/mcmc/printers.py create mode 100644 gdb_printers/python/mr/__init__.py create mode 100644 gdb_printers/python/mr/math/__init__.py create mode 100644 gdb_printers/python/mr/math/printers.py create mode 100644 hessian_todo.txt create mode 120000 link/metropolis create mode 100644 matlab/CSD/SH2RH.m create mode 100644 matlab/CSD/SH2amp.m create mode 100644 matlab/CSD/amp2SH.m create mode 100644 matlab/CSD/c2s.m create mode 100644 matlab/CSD/csdeconv.m create mode 100644 matlab/CSD/dir300.txt create mode 100644 matlab/CSD/dir60.txt create mode 100644 matlab/CSD/equidistribute.m create mode 100644 matlab/CSD/eval_ALP.m create mode 100644 matlab/CSD/eval_DT.m create mode 100644 matlab/CSD/eval_SH.m create mode 100644 matlab/CSD/gen_delta.m create mode 100644 matlab/CSD/gen_scheme.m create mode 100644 matlab/CSD/lmax_for_SH.m create mode 100644 matlab/CSD/nSH_for_lmax.m create mode 100644 matlab/CSD/noisify.m create mode 100644 matlab/CSD/plot_RH.m create mode 100644 matlab/CSD/plot_SH.m create mode 100644 matlab/CSD/plot_amp.m create mode 100644 matlab/CSD/read_mrtrix.m create mode 100644 matlab/CSD/readme.txt create mode 100644 matlab/CSD/s2c.m create mode 100644 matlab/CSD/sconv.m create mode 100644 matlab/CSD/sdeconv.m create mode 100644 matlab/add_2d_vox_lines_to_plot.m create mode 100644 matlab/add_colour_key.m create mode 100644 matlab/add_isotropic_region_to_plot.m create mode 100644 matlab/add_lines_to_plot.m create mode 100644 matlab/add_sphere_to_plot.m create mode 100644 matlab/add_strands_to_plot.m create mode 100644 matlab/add_tcks_to_plot.m create mode 100644 matlab/add_tracts_to_plot.m create mode 100644 matlab/add_vox_lines_to_plot.m create mode 100644 matlab/btsplot.m create mode 100644 matlab/circle_stddev.m create mode 100644 matlab/concatenate_strands.m create mode 100644 matlab/concatenate_tracts.m create mode 100644 matlab/create_movie_of_samples.m create mode 100644 matlab/create_uniform_strands.m create mode 100644 matlab/diffusion_weight_example.m create mode 100644 matlab/display_reference_sphere.m create mode 100644 matlab/eval_response_coeffs.m create mode 100644 matlab/example_tract.m create mode 100644 matlab/fourier2tck.m create mode 100644 matlab/fourier_descr_matrix.m create mode 100644 matlab/get_num_section_properties.m create mode 100644 matlab/get_obs_img_dims.m create mode 100644 matlab/get_observed_dims.m create mode 100644 matlab/get_observed_properties.m create mode 100644 matlab/get_properties.m create mode 100644 matlab/grad_scheme.mat create mode 100644 matlab/gradient_calc_validation.m create mode 100644 matlab/imaging_gradient_demo.m create mode 100644 matlab/interp_integration.m create mode 100644 matlab/legendre_coefficients.m create mode 100644 matlab/lhist.m create mode 100644 matlab/load_extended_props.m create mode 100644 matlab/load_image.m create mode 100644 matlab/load_param_evolution.m create mode 100644 matlab/load_strand_sections.m create mode 100644 matlab/load_strand_sets.m create mode 100644 matlab/load_strands.m create mode 100644 matlab/load_tck_sets.m create mode 100644 matlab/load_tcks.m create mode 100644 matlab/load_tensor.m create mode 100644 matlab/load_tract_sections.m create mode 100644 matlab/load_tract_sets.m create mode 100644 matlab/load_tracts.m create mode 100644 matlab/load_triples.m create mode 100644 matlab/load_unzip_image.m create mode 100644 matlab/load_unzip_mcmc.m create mode 100644 matlab/load_unzip_mcmc_state.m create mode 100644 matlab/load_unzip_strand_sections.m create mode 100644 matlab/load_unzip_strand_sets.m create mode 100644 matlab/load_unzip_strands.m create mode 100644 matlab/load_unzip_tensor.m create mode 100644 matlab/load_unzip_tract_sections.m create mode 100644 matlab/load_unzip_tract_sets.m create mode 100644 matlab/load_unzip_tracts.m create mode 100644 matlab/load_unzip_triples.m create mode 100644 matlab/nfg_strands_format.m create mode 100644 matlab/old/bacth_curve_prior_est.m create mode 100644 matlab/old/batch_curve_prior_est.m create mode 100644 matlab/old/batch_fourier_est.m create mode 100644 matlab/old/f_descript_orig.m create mode 100644 matlab/old/fernando_partial_track.m create mode 100644 matlab/old/fourier_angles_and_lengths.m create mode 100644 matlab/old/fourier_prior.m create mode 100644 matlab/old/fr_descript.m create mode 100644 matlab/old/mex_load_mrtrix_strands.cpp create mode 100755 matlab/old/mex_oad_mrtrix_strands.mexmac create mode 100644 matlab/old/p.mat create mode 100644 matlab/old/p2_scheme.mat create mode 100644 matlab/old/plot_centre_voxel.m create mode 100644 matlab/old/plot_param_evolution.m create mode 100644 matlab/old/plot_parameter_evolution.m create mode 100644 matlab/old/prior_estimation.m create mode 100644 matlab/old2/d_fourier_descr_matrix.m create mode 100644 matlab/old2/f_descript.m create mode 100644 matlab/old2/get_m0_coeffs.m create mode 100644 matlab/old2/get_response_coeffs.m create mode 100644 matlab/old2/inv_f_descript.m create mode 100644 matlab/old2/load_fourier.m create mode 100644 matlab/old2/load_fourier_coeff.m create mode 100644 matlab/old2/load_mrtrix_strands.m create mode 100644 matlab/old2/load_samples.m create mode 100644 matlab/old2/load_strand_samples.m create mode 100644 matlab/old2/p_descript.m create mode 100644 matlab/old2/p_scheme.mat create mode 100644 matlab/old2/plot_neighbourhood.m create mode 100644 matlab/old2/plot_strand_samples.m create mode 100644 matlab/old2/plot_vox_lines.m create mode 100644 matlab/old2/plot_voxel_signal.m create mode 100644 matlab/old2/rand_f_descript.m create mode 100644 matlab/parse_properties_row.m create mode 100644 matlab/parse_strand_sections.m create mode 100644 matlab/parse_strands.m create mode 100644 matlab/parse_tcks.m create mode 100644 matlab/parse_tract_sections.m create mode 100644 matlab/parse_tracts.m create mode 100644 matlab/pf.m create mode 100644 matlab/plot_evolution.m create mode 100644 matlab/plot_explore_stats.m create mode 100644 matlab/plot_extend_elem_properties.m create mode 100644 matlab/plot_extend_properties.m create mode 100644 matlab/plot_extracted_features.m create mode 100644 matlab/plot_features.m create mode 100644 matlab/plot_fibres.m create mode 100644 matlab/plot_fisher_gradient.m create mode 100644 matlab/plot_gradient.m create mode 100644 matlab/plot_hessian.m create mode 100644 matlab/plot_image.m create mode 100644 matlab/plot_peaks.m create mode 100644 matlab/plot_rank3_hessian.m create mode 100644 matlab/plot_samples.m create mode 100644 matlab/plot_scan.m create mode 100644 matlab/plot_spikes.m create mode 100644 matlab/plot_strand_sets.m create mode 100644 matlab/plot_strands.m create mode 100644 matlab/plot_tck_sets.m create mode 100644 matlab/plot_tcks.m create mode 100644 matlab/plot_test.m create mode 100644 matlab/plot_test_bed.m create mode 100644 matlab/plot_test_gradient.m create mode 100644 matlab/plot_test_peaks.m create mode 100644 matlab/plot_test_scan.m create mode 100644 matlab/plot_tract_sets.m create mode 100644 matlab/plot_tracts.m create mode 100644 matlab/plotbts.m create mode 100644 matlab/read_element_properties.m create mode 100644 matlab/read_element_property_keys.m create mode 100644 matlab/read_extracted_features.m create mode 100644 matlab/read_fibres.m create mode 100644 matlab/read_image.m create mode 100644 matlab/read_properties.m create mode 100644 matlab/read_set_element_properties.m create mode 100644 matlab/save_evo_for_talk.m create mode 100644 matlab/save_figure_for_talk.m create mode 100644 matlab/save_samples_for_report.m create mode 100644 matlab/save_samples_for_talk.m create mode 100644 matlab/set_bundle_colours.m create mode 100644 matlab/split_at_file_seperator.m create mode 100644 matlab/strands2tcks.m create mode 100644 matlab/test_gaussian_log_prob.m create mode 100644 matlab/test_odr.m create mode 100644 matlab/test_peak_log_prob.m create mode 100644 matlab/tracts2strands.m create mode 100644 matlab/unzip_image.m create mode 100644 matlab/unzip_strand_sections.m create mode 100644 matlab/unzip_strand_sets.m create mode 100644 matlab/unzip_strands.m create mode 100644 matlab/unzip_tensor.m create mode 100644 matlab/unzip_tract_sections.m create mode 100644 matlab/unzip_tract_sets.m create mode 100644 matlab/unzip_tracts.m create mode 100644 matlab/unzip_triples.m create mode 100755 profiles/callgrind.out.16487 create mode 100755 profiles/callgrind.out.16517 create mode 100755 profiles/callgrind.out.3008 create mode 100644 python/fibre/__init__.py create mode 100644 python/fibre/base/__init__.py create mode 100644 python/fibre/base/object.py create mode 100644 python/fibre/base/set.py create mode 100644 python/fibre/base/test/__init__.py create mode 100644 python/fibre/base/test/output/cpp_output.txt create mode 100644 python/fibre/base/test/output/python_output.txt create mode 100644 python/fibre/base/test/stress_test_generator.py create mode 100644 python/fibre/base/test/stress_tester.py create mode 100644 python/scan.py create mode 100755 src/NFG_links create mode 100644 src/blossom5/CHANGES.TXT create mode 100644 src/blossom5/CheckPerfectMatching.cpp create mode 100644 src/blossom5/CheckPerfectMatching.h create mode 100644 src/blossom5/GEOM/GPMinit.cpp create mode 100644 src/blossom5/GEOM/GPMinterface.cpp create mode 100644 src/blossom5/GEOM/GPMkdtree.cpp create mode 100644 src/blossom5/GEOM/GPMkdtree.h create mode 100644 src/blossom5/GEOM/GPMmain.cpp create mode 100644 src/blossom5/GEOM/GeomPerfectMatching.h create mode 100644 src/blossom5/GRAPH1.TXT create mode 100644 src/blossom5/GRAPH2.TXT create mode 100644 src/blossom5/LCA.h create mode 100644 src/blossom5/LICENSE.TXT create mode 100644 src/blossom5/Makefile create mode 100644 src/blossom5/MinCost/MinCost.cpp create mode 100644 src/blossom5/MinCost/MinCost.h create mode 100644 src/blossom5/MinCost/instances.inc create mode 100644 src/blossom5/PMduals.cpp create mode 100644 src/blossom5/PMexpand.cpp create mode 100644 src/blossom5/PMimplementation.h create mode 100644 src/blossom5/PMinit.cpp create mode 100644 src/blossom5/PMinterface.cpp create mode 100644 src/blossom5/PMmain.cpp create mode 100644 src/blossom5/PMrepair.cpp create mode 100644 src/blossom5/PMshrink.cpp create mode 100644 src/blossom5/PQ.h create mode 100644 src/blossom5/PerfectMatching.cpp create mode 100644 src/blossom5/PerfectMatching.h create mode 100644 src/blossom5/README.TXT create mode 100644 src/blossom5/USAGE.TXT create mode 100644 src/blossom5/block.h create mode 100644 src/blossom5/example.cpp create mode 100644 src/blossom5/timer.h create mode 100644 src/bts/analysis/fisher_gradient_matrix_tester.h create mode 100644 src/bts/analysis/fisher_gradient_tester.h create mode 100644 src/bts/analysis/gradient_tester.h create mode 100644 src/bts/analysis/hessian_tester.h create mode 100644 src/bts/analysis/image_gradient_tester.h create mode 100644 src/bts/analysis/image_hessian_tester.h create mode 100644 src/bts/analysis/inline_functions.h create mode 100644 src/bts/analysis/rank3_hessian_tester.h create mode 100644 src/bts/analysis/scan.h create mode 100644 src/bts/cmd.h create mode 100644 src/bts/common.cpp create mode 100644 src/bts/common.h create mode 100644 src/bts/coord.cpp create mode 100644 src/bts/coord.h create mode 100644 src/bts/coord/tensor.h create mode 100644 src/bts/diffusion/encoding.h create mode 100644 src/bts/diffusion/encoding/set.cpp create mode 100644 src/bts/diffusion/encoding/set.h create mode 100644 src/bts/diffusion/inline_functions.h create mode 100644 src/bts/diffusion/model.cpp create mode 100644 src/bts/diffusion/model.h create mode 100644 src/bts/diffusion/response.cpp create mode 100644 src/bts/diffusion/response.h create mode 100644 src/bts/fibre/base/object.cpp create mode 100644 src/bts/fibre/base/object.h create mode 100644 src/bts/fibre/base/properties_old.h create mode 100644 src/bts/fibre/base/reader.cpp.h create mode 100644 src/bts/fibre/base/reader.h create mode 100644 src/bts/fibre/base/set.cpp.h create mode 100644 src/bts/fibre/base/set.h create mode 100644 src/bts/fibre/base/set/tensor.h create mode 100644 src/bts/fibre/base/set_reader.cpp.h create mode 100644 src/bts/fibre/base/set_reader.h create mode 100644 src/bts/fibre/base/set_writer.cpp.h create mode 100644 src/bts/fibre/base/set_writer.h create mode 100644 src/bts/fibre/base/tensor.cpp.h create mode 100644 src/bts/fibre/base/tensor.h create mode 100644 src/bts/fibre/base/tensor/writer2.cpp.h create mode 100644 src/bts/fibre/base/tensor/writer2.h create mode 100644 src/bts/fibre/base/tensor_writer.cpp.h create mode 100644 src/bts/fibre/base/tensor_writer.h create mode 100644 src/bts/fibre/base/writer.cpp.h create mode 100644 src/bts/fibre/base/writer.h create mode 100644 src/bts/fibre/properties/extended.cpp create mode 100644 src/bts/fibre/properties/extended.h create mode 100644 src/bts/fibre/properties/header.cpp.h create mode 100644 src/bts/fibre/properties/header.h create mode 100644 src/bts/fibre/strand.cpp create mode 100644 src/bts/fibre/strand.h create mode 100644 src/bts/fibre/strand/basic_section.cpp create mode 100644 src/bts/fibre/strand/basic_section.h create mode 100644 src/bts/fibre/strand/basic_section/tensor.cpp create mode 100644 src/bts/fibre/strand/basic_section/tensor.cpp.h create mode 100644 src/bts/fibre/strand/basic_section/tensor.h create mode 100644 src/bts/fibre/strand/section.cpp create mode 100644 src/bts/fibre/strand/section.h create mode 100644 src/bts/fibre/strand/set.cpp create mode 100644 src/bts/fibre/strand/set.h create mode 100644 src/bts/fibre/strand/set/momentum.cpp create mode 100644 src/bts/fibre/strand/set/momentum.h create mode 100644 src/bts/fibre/strand/set/tensor.cpp create mode 100644 src/bts/fibre/strand/set/tensor.h create mode 100644 src/bts/fibre/strand/set/walker.cpp create mode 100644 src/bts/fibre/strand/set/walker.h create mode 100644 src/bts/fibre/strand/tensor.cpp create mode 100644 src/bts/fibre/strand/tensor.h create mode 100644 src/bts/fibre/strand/walker.h create mode 100644 src/bts/fibre/track.cpp create mode 100644 src/bts/fibre/track.h create mode 100644 src/bts/fibre/track/set.cpp create mode 100644 src/bts/fibre/track/set.h create mode 100644 src/bts/fibre/tractlet.cpp create mode 100644 src/bts/fibre/tractlet.h create mode 100644 src/bts/fibre/tractlet/section.cpp create mode 100644 src/bts/fibre/tractlet/section.h create mode 100644 src/bts/fibre/tractlet/section/tensor.cpp create mode 100644 src/bts/fibre/tractlet/section/tensor.h create mode 100644 src/bts/fibre/tractlet/set.cpp create mode 100644 src/bts/fibre/tractlet/set.h create mode 100644 src/bts/fibre/tractlet/set/momentum.cpp create mode 100644 src/bts/fibre/tractlet/set/momentum.h create mode 100644 src/bts/fibre/tractlet/set/tensor.cpp create mode 100644 src/bts/fibre/tractlet/set/tensor.h create mode 100644 src/bts/fibre/tractlet/set/walker.cpp create mode 100644 src/bts/fibre/tractlet/set/walker.h create mode 100644 src/bts/fibre/tractlet/tensor.cpp create mode 100644 src/bts/fibre/tractlet/tensor.h create mode 100644 src/bts/fibre/tractlet/walker.h create mode 100644 src/bts/file.cpp create mode 100644 src/bts/file.h create mode 100644 src/bts/image/buffer.cpp.h create mode 100644 src/bts/image/buffer.h create mode 100644 src/bts/image/container/buffer.h create mode 100644 src/bts/image/container/voxel.h create mode 100644 src/bts/image/expected/buffer.cpp create mode 100644 src/bts/image/expected/buffer.h create mode 100644 src/bts/image/expected/buffer_tpl.cpp.h create mode 100644 src/bts/image/expected/buffer_tpl.h create mode 100644 src/bts/image/expected/direction.cpp.h create mode 100644 src/bts/image/expected/direction.h create mode 100644 src/bts/image/expected/gaussian/buffer.cpp create mode 100644 src/bts/image/expected/gaussian/buffer.h create mode 100644 src/bts/image/expected/gaussian/voxel.cpp create mode 100644 src/bts/image/expected/gaussian/voxel.h create mode 100644 src/bts/image/expected/quartic/buffer.cpp create mode 100644 src/bts/image/expected/quartic/buffer.h create mode 100644 src/bts/image/expected/quartic/voxel.cpp create mode 100644 src/bts/image/expected/quartic/voxel.h create mode 100644 src/bts/image/expected/realistic/buffer.cpp create mode 100644 src/bts/image/expected/realistic/buffer.h create mode 100644 src/bts/image/expected/realistic/voxel.cpp create mode 100644 src/bts/image/expected/realistic/voxel.h create mode 100644 src/bts/image/expected/reverse_sqrt/buffer.cpp create mode 100644 src/bts/image/expected/reverse_sqrt/buffer.h create mode 100644 src/bts/image/expected/reverse_sqrt/voxel.cpp create mode 100644 src/bts/image/expected/reverse_sqrt/voxel.h create mode 100644 src/bts/image/expected/sinc/buffer.cpp create mode 100644 src/bts/image/expected/sinc/buffer.h create mode 100644 src/bts/image/expected/sinc/voxel.cpp create mode 100644 src/bts/image/expected/sinc/voxel.h create mode 100644 src/bts/image/expected/top_hat/buffer.cpp create mode 100644 src/bts/image/expected/top_hat/buffer.h create mode 100644 src/bts/image/expected/top_hat/voxel.cpp create mode 100644 src/bts/image/expected/top_hat/voxel.h create mode 100644 src/bts/image/expected/trilinear/buffer.cpp create mode 100644 src/bts/image/expected/trilinear/buffer.h create mode 100644 src/bts/image/expected/trilinear/voxel.cpp create mode 100644 src/bts/image/expected/trilinear/voxel.h create mode 100644 src/bts/image/expected/voxel.cpp create mode 100644 src/bts/image/expected/voxel.h create mode 100644 src/bts/image/index.cpp create mode 100644 src/bts/image/index.h create mode 100644 src/bts/image/inline_functions.h create mode 100644 src/bts/image/noise.cpp create mode 100644 src/bts/image/noise.h create mode 100644 src/bts/image/noise/gaussian.cpp create mode 100644 src/bts/image/noise/gaussian.h create mode 100644 src/bts/image/noise/rician.cpp create mode 100644 src/bts/image/noise/rician.h create mode 100644 src/bts/image/observed/buffer.cpp create mode 100644 src/bts/image/observed/buffer.cpp.h create mode 100644 src/bts/image/observed/buffer.h create mode 100644 src/bts/image/observed/voxel.cpp create mode 100644 src/bts/image/observed/voxel.h create mode 100644 src/bts/image/properties.h create mode 100644 src/bts/image/reference/buffer.h create mode 100644 src/bts/image/voxel.h create mode 100644 src/bts/inline_functions.h create mode 100644 src/bts/math/blossom.cpp create mode 100644 src/bts/math/blossom.h create mode 100644 src/bts/math/blossom/edge.h create mode 100644 src/bts/math/common.cpp create mode 100644 src/bts/math/common.h create mode 100644 src/bts/math/kmeans.cpp create mode 100644 src/bts/math/kmeans.h create mode 100644 src/bts/math/munkres.h create mode 100644 src/bts/math/odr.h create mode 100644 src/bts/math/polygon_intersect.h create mode 100644 src/bts/math/svd.h create mode 100644 src/bts/mcmc/annealer.cpp create mode 100644 src/bts/mcmc/annealer.h create mode 100644 src/bts/mcmc/common.h create mode 100644 src/bts/mcmc/hamiltonian.h create mode 100644 src/bts/mcmc/inline_functions.h create mode 100644 src/bts/mcmc/metropolis.h create mode 100644 src/bts/mcmc/naninf_exception.h create mode 100644 src/bts/mcmc/proposal/distribution.cpp create mode 100644 src/bts/mcmc/proposal/distribution.h create mode 100644 src/bts/mcmc/proposal/distribution/gaussian.cpp create mode 100644 src/bts/mcmc/proposal/distribution/gaussian.h create mode 100644 src/bts/mcmc/proposal/momentum.cpp create mode 100644 src/bts/mcmc/proposal/momentum.cpp.h create mode 100644 src/bts/mcmc/proposal/momentum.h create mode 100644 src/bts/mcmc/proposal/momentum/weighted.cpp create mode 100644 src/bts/mcmc/proposal/momentum/weighted.cpp.h create mode 100644 src/bts/mcmc/proposal/momentum/weighted.h create mode 100644 src/bts/mcmc/proposal/momentum/weighted/non_separable.cpp create mode 100644 src/bts/mcmc/proposal/momentum/weighted/non_separable.cpp.h create mode 100644 src/bts/mcmc/proposal/momentum/weighted/non_separable.h create mode 100644 src/bts/mcmc/proposal/walker.cpp create mode 100644 src/bts/mcmc/proposal/walker.h create mode 100644 src/bts/mcmc/riemannian.h create mode 100644 src/bts/mcmc/state.cpp create mode 100644 src/bts/mcmc/state.h create mode 100644 src/bts/mcmc/state/tensor.cpp create mode 100644 src/bts/mcmc/state/tensor.h create mode 100644 src/bts/mcmc/state/tensor/writer.cpp create mode 100644 src/bts/mcmc/state/tensor/writer.h create mode 100644 src/bts/prob/inline_functions.h create mode 100644 src/bts/prob/likelihood.cpp create mode 100644 src/bts/prob/likelihood.cpp.h create mode 100644 src/bts/prob/likelihood.h create mode 100644 src/bts/prob/likelihood/gaussian.cpp.h create mode 100644 src/bts/prob/likelihood/gaussian.h create mode 100644 src/bts/prob/likelihood/one_sided_gaussian.h create mode 100644 src/bts/prob/likelihood/rician.h create mode 100644 src/bts/prob/posterior.h create mode 100644 src/bts/prob/prior.cpp create mode 100644 src/bts/prob/prior.cpp.h create mode 100644 src/bts/prob/prior.h create mode 100644 src/bts/prob/prior_component/acs.cpp create mode 100644 src/bts/prob/prior_component/acs.h create mode 100644 src/bts/prob/prior_component/density.cpp create mode 100644 src/bts/prob/prior_component/density.h create mode 100644 src/bts/prob/prior_component/hook.cpp create mode 100644 src/bts/prob/prior_component/hook.h create mode 100644 src/bts/prob/prior_component/length.cpp create mode 100644 src/bts/prob/prior_component/length.h create mode 100644 src/bts/prob/prior_component/magnitude.cpp create mode 100644 src/bts/prob/prior_component/magnitude.h create mode 100644 src/bts/prob/prob.h create mode 100644 src/bts/prob/test/bayes_log_regression.cpp create mode 100644 src/bts/prob/test/bayes_log_regression.h create mode 100644 src/bts/prob/test/gaussian.cpp create mode 100644 src/bts/prob/test/gaussian.h create mode 100644 src/bts/prob/test/landscape.cpp create mode 100644 src/bts/prob/test/landscape.h create mode 100644 src/bts/prob/test/landscape/peak.cpp create mode 100644 src/bts/prob/test/landscape/peak.h create mode 100644 src/bts/prob/test/landscape/peak/reader.h create mode 100644 src/bts/prob/test/landscape/peak/writer.h create mode 100644 src/bts/prob/uniform.cpp create mode 100644 src/bts/prob/uniform.h create mode 100644 src/bts/triple.cpp create mode 100644 src/bts/triple.h create mode 100644 src/bts/utilities/common.h create mode 100644 src/bts/utilities/inline_functions.h create mode 100644 src/bts/utilities/reader.cpp.h create mode 100644 src/bts/utilities/reader.h create mode 100644 src/bts/utilities/writer.cpp.h create mode 100644 src/bts/utilities/writer.h create mode 100644 src/bts/version.h create mode 100644 src/k_means/KCtree.cpp create mode 100644 src/k_means/KCtree.h create mode 100644 src/k_means/KCutil.cpp create mode 100644 src/k_means/KCutil.h create mode 100644 src/k_means/KM_ANN.cpp create mode 100644 src/k_means/KM_ANN.h create mode 100644 src/k_means/KMcenters.cpp create mode 100644 src/k_means/KMcenters.h create mode 100644 src/k_means/KMdata.cpp create mode 100644 src/k_means/KMdata.h create mode 100644 src/k_means/KMeans.cpp create mode 100644 src/k_means/KMeans.h create mode 100644 src/k_means/KMfilterCenters.cpp create mode 100644 src/k_means/KMfilterCenters.h create mode 100644 src/k_means/KMlocal.cpp create mode 100644 src/k_means/KMlocal.h create mode 100644 src/k_means/KMrand.cpp create mode 100644 src/k_means/KMrand.h create mode 100644 src/k_means/KMterm.cpp create mode 100644 src/k_means/KMterm.h create mode 120000 src/phantom/draw_rois/draw_rois.cpp create mode 120000 src/phantom/draw_rois/draw_rois.h create mode 100644 src/phantom/interface.cpp create mode 100644 src/phantom/interface.h create mode 120000 src/phantom/mri_sim/isotropic_region_register.cpp create mode 120000 src/phantom/mri_sim/isotropic_region_register.h create mode 120000 src/phantom/mri_sim/mri_sim.cpp create mode 120000 src/phantom/mri_sim/mri_sim.h create mode 120000 src/phantom/mri_sim/overlap_strands.cpp create mode 120000 src/phantom/mri_sim/overlap_strands.h create mode 120000 src/phantom/mri_sim/segment_register.cpp create mode 120000 src/phantom/mri_sim/segment_register.h create mode 120000 src/phantom/mri_sim/segment_stats.cpp create mode 120000 src/phantom/mri_sim/segment_stats.h create mode 120000 src/phantom/mri_sim/sim_voxel_intensities.cpp create mode 120000 src/phantom/mri_sim/sim_voxel_intensities.h create mode 120000 src/phantom/mri_sim/strand_collection_stats.cpp create mode 120000 src/phantom/mri_sim/strand_collection_stats.h create mode 120000 src/phantom/mri_sim/subvoxel.cpp create mode 120000 src/phantom/mri_sim/subvoxel.h create mode 120000 src/phantom/mri_sim/voxel.cpp create mode 120000 src/phantom/mri_sim/voxel.h create mode 120000 src/phantom/noisify/noisify.cpp create mode 120000 src/phantom/noisify/noisify.h create mode 120000 src/phantom/optimise/cost_function.cpp create mode 120000 src/phantom/optimise/cost_function.h create mode 120000 src/phantom/optimise/optimise.cpp create mode 120000 src/phantom/optimise/optimise.h create mode 120000 src/phantom/optimise/reference_block.cpp create mode 120000 src/phantom/optimise/reference_block.h create mode 120000 src/phantom/optimise/sample.cpp create mode 120000 src/phantom/optimise/sample.h create mode 120000 src/phantom/optimise/sample_block.cpp create mode 120000 src/phantom/optimise/sample_block.h create mode 120000 src/phantom/rand_init/rand_init.cpp create mode 120000 src/phantom/rand_init/rand_init.h create mode 120000 src/phantom/resample/resample.cpp create mode 120000 src/phantom/resample/resample.h create mode 120000 src/phantom/shared/bundle.cpp create mode 120000 src/phantom/shared/bundle.h create mode 120000 src/phantom/shared/control_point.cpp create mode 120000 src/phantom/shared/control_point.h create mode 120000 src/phantom/shared/isotropic_region.cpp create mode 120000 src/phantom/shared/isotropic_region.h create mode 120000 src/phantom/shared/segment.cpp create mode 120000 src/phantom/shared/segment.h create mode 120000 src/phantom/shared/shared.cpp create mode 120000 src/phantom/shared/shared.h create mode 120000 src/phantom/shared/strand.cpp create mode 120000 src/phantom/shared/strand.h create mode 120000 src/phantom/shared/strand_collection.cpp create mode 120000 src/phantom/shared/strand_collection.h create mode 120000 src/phantom/subdiv/subdiv.cpp create mode 120000 src/phantom/subdiv/subdiv.h create mode 120000 src/phantom/trim/strand_section.cpp create mode 120000 src/phantom/trim/strand_section.h create mode 120000 src/phantom/trim/trim.cpp create mode 120000 src/phantom/trim/trim.h create mode 100644 sysconf/__init__.py create mode 100644 sysconf/common.py create mode 100644 sysconf/darwin.py create mode 100644 sysconf/linux.py create mode 100644 sysconf/windows.py create mode 100644 sysconf/xmingw.py create mode 100644 test_output/cpp_output.txt create mode 100644 test_output/python_output.txt diff --git a/Doxyfile b/Doxyfile new file mode 100644 index 0000000..260780a --- /dev/null +++ b/Doxyfile @@ -0,0 +1,1287 @@ +# Doxyfile 1.5.3 + +# This file describes the settings to be used by the documentation system +# doxygen (www.doxygen.org) for a project +# +# All text after a hash (#) is considered a comment and will be ignored +# The format is: +# TAG = value [value, ...] +# For lists items can also be appended using: +# TAG += value [value, ...] +# Values that contain spaces should be placed between quotes (" ") + +#--------------------------------------------------------------------------- +# Project related configuration options +#--------------------------------------------------------------------------- + +# This tag specifies the encoding used for all characters in the config file that +# follow. The default is UTF-8 which is also the encoding used for all text before +# the first occurrence of this tag. Doxygen uses libiconv (or the iconv built into +# libc) for the transcoding. See http://www.gnu.org/software/libiconv for the list of +# possible encodings. + +DOXYFILE_ENCODING = UTF-8 + +# The PROJECT_NAME tag is a single word (or a sequence of words surrounded +# by quotes) that should identify the project. + +PROJECT_NAME = BTS + +# The PROJECT_NUMBER tag can be used to enter a project or revision number. +# This could be handy for archiving the generated documentation or +# if some version control system is used. + +PROJECT_NUMBER = 0.1 + +# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) +# base path where the generated documentation will be put. +# If a relative path is entered, it will be relative to the location +# where doxygen was started. If left blank the current directory will be used. + +OUTPUT_DIRECTORY = doc + +# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create +# 4096 sub-directories (in 2 levels) under the output directory of each output +# format and will distribute the generated files over these directories. +# Enabling this option can be useful when feeding doxygen a huge amount of +# source files, where putting all generated files in the same directory would +# otherwise cause performance problems for the file system. + +CREATE_SUBDIRS = NO + +# The OUTPUT_LANGUAGE tag is used to specify the language in which all +# documentation generated by doxygen is written. Doxygen will use this +# information to generate all constant output in the proper language. +# The default language is English, other supported languages are: +# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, +# Croatian, Czech, Danish, Dutch, Finnish, French, German, Greek, Hungarian, +# Italian, Japanese, Japanese-en (Japanese with English messages), Korean, +# Korean-en, Lithuanian, Norwegian, Polish, Portuguese, Romanian, Russian, +# Serbian, Slovak, Slovene, Spanish, Swedish, and Ukrainian. + +OUTPUT_LANGUAGE = English + +# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will +# include brief member descriptions after the members that are listed in +# the file and class documentation (similar to JavaDoc). +# Set to NO to disable this. + +BRIEF_MEMBER_DESC = YES + +# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend +# the brief description of a member or function before the detailed description. +# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the +# brief descriptions will be completely suppressed. + +REPEAT_BRIEF = YES + +# This tag implements a quasi-intelligent brief description abbreviator +# that is used to form the text in various listings. Each string +# in this list, if found as the leading text of the brief description, will be +# stripped from the text and the result after processing the whole list, is +# used as the annotated text. Otherwise, the brief description is used as-is. +# If left blank, the following values are used ("$name" is automatically +# replaced with the name of the entity): "The $name class" "The $name widget" +# "The $name file" "is" "provides" "specifies" "contains" +# "represents" "a" "an" "the" + +ABBREVIATE_BRIEF = "The $name class " "The $name widget " "The $name file " is provides specifies contains represents a an the + +# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then +# Doxygen will generate a detailed section even if there is only a brief +# description. + +ALWAYS_DETAILED_SEC = NO + +# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all +# inherited members of a class in the documentation of that class as if those +# members were ordinary class members. Constructors, destructors and assignment +# operators of the base classes will not be shown. + +INLINE_INHERITED_MEMB = NO + +# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full +# path before files name in the file list and in the header files. If set +# to NO the shortest path that makes the file name unique will be used. + +FULL_PATH_NAMES = YES + +# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag +# can be used to strip a user-defined part of the path. Stripping is +# only done if one of the specified strings matches the left-hand part of +# the path. The tag can be used to show relative paths in the file list. +# If left blank the directory from which doxygen is run is used as the +# path to strip. + +STRIP_FROM_PATH = + +# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of +# the path mentioned in the documentation of a class, which tells +# the reader which header file to include in order to use a class. +# If left blank only the name of the header file containing the class +# definition is used. Otherwise one should specify the include paths that +# are normally passed to the compiler using the -I flag. + +STRIP_FROM_INC_PATH = lib src cmd + +# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter +# (but less readable) file names. This can be useful is your file systems +# doesn't support long names like on DOS, Mac, or CD-ROM. + +SHORT_NAMES = NO + +# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen +# will interpret the first line (until the first dot) of a JavaDoc-style +# comment as the brief description. If set to NO, the JavaDoc +# comments will behave just like regular Qt-style comments +# (thus requiring an explicit @brief command for a brief description.) + +JAVADOC_AUTOBRIEF = NO + +# If the QT_AUTOBRIEF tag is set to YES then Doxygen will +# interpret the first line (until the first dot) of a Qt-style +# comment as the brief description. If set to NO, the comments +# will behave just like regular Qt-style comments (thus requiring +# an explicit \brief command for a brief description.) + +QT_AUTOBRIEF = NO + +# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen +# treat a multi-line C++ special comment block (i.e. a block of //! or /// +# comments) as a brief description. This used to be the default behaviour. +# The new default is to treat a multi-line C++ comment block as a detailed +# description. Set this tag to YES if you prefer the old behaviour instead. + +MULTILINE_CPP_IS_BRIEF = NO + +# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented +# member inherits the documentation from any documented member that it +# re-implements. + +INHERIT_DOCS = YES + +# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce +# a new page for each member. If set to NO, the documentation of a member will +# be part of the file/class/namespace that contains it. + +SEPARATE_MEMBER_PAGES = NO + +# The TAB_SIZE tag can be used to set the number of spaces in a tab. +# Doxygen uses this value to replace tabs by spaces in code fragments. + +TAB_SIZE = 8 + +# This tag can be used to specify a number of aliases that acts +# as commands in the documentation. An alias has the form "name=value". +# For example adding "sideeffect=\par Side Effects:\n" will allow you to +# put the command \sideeffect (or @sideeffect) in the documentation, which +# will result in a user-defined paragraph with heading "Side Effects:". +# You can put \n's in the value part of an alias to insert newlines. + +ALIASES = + +# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C +# sources only. Doxygen will then generate output that is more tailored for C. +# For instance, some of the names that are used will be different. The list +# of all members will be omitted, etc. + +OPTIMIZE_OUTPUT_FOR_C = NO + +# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java +# sources only. Doxygen will then generate output that is more tailored for Java. +# For instance, namespaces will be presented as packages, qualified scopes +# will look different, etc. + +OPTIMIZE_OUTPUT_JAVA = NO + +# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want to +# include (a tag file for) the STL sources as input, then you should +# set this tag to YES in order to let doxygen match functions declarations and +# definitions whose arguments contain STL classes (e.g. func(std::string); v.s. +# func(std::string) {}). This also make the inheritance and collaboration +# diagrams that involve STL classes more complete and accurate. + +BUILTIN_STL_SUPPORT = NO + +# If you use Microsoft's C++/CLI language, you should set this option to YES to +# enable parsing support. + +CPP_CLI_SUPPORT = NO + +# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC +# tag is set to YES, then doxygen will reuse the documentation of the first +# member in the group (if any) for the other members of the group. By default +# all members of a group must be documented explicitly. + +DISTRIBUTE_GROUP_DOC = NO + +# Set the SUBGROUPING tag to YES (the default) to allow class member groups of +# the same type (for instance a group of public functions) to be put as a +# subgroup of that type (e.g. under the Public Functions section). Set it to +# NO to prevent subgrouping. Alternatively, this can be done per class using +# the \nosubgrouping command. + +SUBGROUPING = YES + +#--------------------------------------------------------------------------- +# Build related configuration options +#--------------------------------------------------------------------------- + +# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in +# documentation are documented, even if no documentation was available. +# Private class members and static file members will be hidden unless +# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES + +EXTRACT_ALL = YES + +# If the EXTRACT_PRIVATE tag is set to YES all private members of a class +# will be included in the documentation. + +EXTRACT_PRIVATE = NO + +# If the EXTRACT_STATIC tag is set to YES all static members of a file +# will be included in the documentation. + +EXTRACT_STATIC = NO + +# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) +# defined locally in source files will be included in the documentation. +# If set to NO only classes defined in header files are included. + +EXTRACT_LOCAL_CLASSES = NO + +# This flag is only useful for Objective-C code. When set to YES local +# methods, which are defined in the implementation section but not in +# the interface are included in the documentation. +# If set to NO (the default) only methods in the interface are included. + +EXTRACT_LOCAL_METHODS = NO + +# If this flag is set to YES, the members of anonymous namespaces will be extracted +# and appear in the documentation as a namespace called 'anonymous_namespace{file}', +# where file will be replaced with the base name of the file that contains the anonymous +# namespace. By default anonymous namespace are hidden. + +EXTRACT_ANON_NSPACES = NO + +# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all +# undocumented members of documented classes, files or namespaces. +# If set to NO (the default) these members will be included in the +# various overviews, but no documentation section is generated. +# This option has no effect if EXTRACT_ALL is enabled. + +HIDE_UNDOC_MEMBERS = NO + +# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all +# undocumented classes that are normally visible in the class hierarchy. +# If set to NO (the default) these classes will be included in the various +# overviews. This option has no effect if EXTRACT_ALL is enabled. + +HIDE_UNDOC_CLASSES = NO + +# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all +# friend (class|struct|union) declarations. +# If set to NO (the default) these declarations will be included in the +# documentation. + +HIDE_FRIEND_COMPOUNDS = NO + +# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any +# documentation blocks found inside the body of a function. +# If set to NO (the default) these blocks will be appended to the +# function's detailed documentation block. + +HIDE_IN_BODY_DOCS = NO + +# The INTERNAL_DOCS tag determines if documentation +# that is typed after a \internal command is included. If the tag is set +# to NO (the default) then the documentation will be excluded. +# Set it to YES to include the internal documentation. + +INTERNAL_DOCS = NO + +# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate +# file names in lower-case letters. If set to YES upper-case letters are also +# allowed. This is useful if you have classes or files whose names only differ +# in case and if your file system supports case sensitive file names. Windows +# and Mac users are advised to set this option to NO. + +CASE_SENSE_NAMES = NO + +# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen +# will show members with their full class and namespace scopes in the +# documentation. If set to YES the scope will be hidden. + +HIDE_SCOPE_NAMES = YES + +# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen +# will put a list of the files that are included by a file in the documentation +# of that file. + +SHOW_INCLUDE_FILES = YES + +# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] +# is inserted in the documentation for inline members. + +INLINE_INFO = YES + +# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen +# will sort the (detailed) documentation of file and class members +# alphabetically by member name. If set to NO the members will appear in +# declaration order. + +SORT_MEMBER_DOCS = YES + +# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the +# brief documentation of file, namespace and class members alphabetically +# by member name. If set to NO (the default) the members will appear in +# declaration order. + +SORT_BRIEF_DOCS = NO + +# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be +# sorted by fully-qualified names, including namespaces. If set to +# NO (the default), the class list will be sorted only by class name, +# not including the namespace part. +# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. +# Note: This option applies only to the class list, not to the +# alphabetical list. + +SORT_BY_SCOPE_NAME = YES + +# The GENERATE_TODOLIST tag can be used to enable (YES) or +# disable (NO) the todo list. This list is created by putting \todo +# commands in the documentation. + +GENERATE_TODOLIST = YES + +# The GENERATE_TESTLIST tag can be used to enable (YES) or +# disable (NO) the test list. This list is created by putting \test +# commands in the documentation. + +GENERATE_TESTLIST = YES + +# The GENERATE_BUGLIST tag can be used to enable (YES) or +# disable (NO) the bug list. This list is created by putting \bug +# commands in the documentation. + +GENERATE_BUGLIST = YES + +# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or +# disable (NO) the deprecated list. This list is created by putting +# \deprecated commands in the documentation. + +GENERATE_DEPRECATEDLIST = YES + +# The ENABLED_SECTIONS tag can be used to enable conditional +# documentation sections, marked by \if sectionname ... \endif. + +ENABLED_SECTIONS = + +# The MAX_INITIALIZER_LINES tag determines the maximum number of lines +# the initial value of a variable or define consists of for it to appear in +# the documentation. If the initializer consists of more lines than specified +# here it will be hidden. Use a value of 0 to hide initializers completely. +# The appearance of the initializer of individual variables and defines in the +# documentation can be controlled using \showinitializer or \hideinitializer +# command in the documentation regardless of this setting. + +MAX_INITIALIZER_LINES = 30 + +# Set the SHOW_USED_FILES tag to NO to disable the list of files generated +# at the bottom of the documentation of classes and structs. If set to YES the +# list will mention the files that were used to generate the documentation. + +SHOW_USED_FILES = YES + +# If the sources in your project are distributed over multiple directories +# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy +# in the documentation. The default is NO. + +SHOW_DIRECTORIES = YES + +# The FILE_VERSION_FILTER tag can be used to specify a program or script that +# doxygen should invoke to get the current version for each file (typically from the +# version control system). Doxygen will invoke the program by executing (via +# popen()) the command , where is the value of +# the FILE_VERSION_FILTER tag, and is the name of an input file +# provided by doxygen. Whatever the program writes to standard output +# is used as the file version. See the manual for examples. + +FILE_VERSION_FILTER = + +#--------------------------------------------------------------------------- +# configuration options related to warning and progress messages +#--------------------------------------------------------------------------- + +# The QUIET tag can be used to turn on/off the messages that are generated +# by doxygen. Possible values are YES and NO. If left blank NO is used. + +QUIET = YES + +# The WARNINGS tag can be used to turn on/off the warning messages that are +# generated by doxygen. Possible values are YES and NO. If left blank +# NO is used. + +WARNINGS = YES + +# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings +# for undocumented members. If EXTRACT_ALL is set to YES then this flag will +# automatically be disabled. + +WARN_IF_UNDOCUMENTED = NO + +# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for +# potential errors in the documentation, such as not documenting some +# parameters in a documented function, or documenting parameters that +# don't exist or using markup commands wrongly. + +WARN_IF_DOC_ERROR = YES + +# This WARN_NO_PARAMDOC option can be abled to get warnings for +# functions that are documented, but have no documentation for their parameters +# or return value. If set to NO (the default) doxygen will only warn about +# wrong or incomplete parameter documentation, but not about the absence of +# documentation. + +WARN_NO_PARAMDOC = NO + +# The WARN_FORMAT tag determines the format of the warning messages that +# doxygen can produce. The string should contain the $file, $line, and $text +# tags, which will be replaced by the file and line number from which the +# warning originated and the warning text. Optionally the format may contain +# $version, which will be replaced by the version of the file (if it could +# be obtained via FILE_VERSION_FILTER) + +WARN_FORMAT = "$file:$line: $text " + +# The WARN_LOGFILE tag can be used to specify a file to which warning +# and error messages should be written. If left blank the output is written +# to stderr. + +WARN_LOGFILE = + +#--------------------------------------------------------------------------- +# configuration options related to the input files +#--------------------------------------------------------------------------- + +# The INPUT tag can be used to specify the files and/or directories that contain +# documented source files. You may enter file names like "myfile.cpp" or +# directories like "/usr/src/myproject". Separate the files or directories +# with spaces. + +INPUT = src cmd + +# This tag can be used to specify the character encoding of the source files that +# doxygen parses. Internally doxygen uses the UTF-8 encoding, which is also the default +# input encoding. Doxygen uses libiconv (or the iconv built into libc) for the transcoding. +# See http://www.gnu.org/software/libiconv for the list of possible encodings. + +INPUT_ENCODING = UTF-8 + +# If the value of the INPUT tag contains directories, you can use the +# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp +# and *.h) to filter out the source-files in the directories. If left +# blank the following patterns are tested: +# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx +# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py + +FILE_PATTERNS = *.h + +# The RECURSIVE tag can be used to turn specify whether or not subdirectories +# should be searched for input files as well. Possible values are YES and NO. +# If left blank NO is used. + +RECURSIVE = YES + +# The EXCLUDE tag can be used to specify files and/or directories that should +# excluded from the INPUT source files. This way you can easily exclude a +# subdirectory from a directory tree whose root is specified with the INPUT tag. + +EXCLUDE = lib/file/nifti1.h + +# The EXCLUDE_SYMLINKS tag can be used select whether or not files or +# directories that are symbolic links (a Unix filesystem feature) are excluded +# from the input. + +EXCLUDE_SYMLINKS = NO + +# If the value of the INPUT tag contains directories, you can use the +# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude +# certain files from those directories. Note that the wildcards are matched +# against the file with absolute path, so to exclude all test directories +# for example use the pattern */test/* + +EXCLUDE_PATTERNS = + +# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names +# (namespaces, classes, functions, etc.) that should be excluded from the output. +# The symbol name can be a fully qualified name, a word, or if the wildcard * is used, +# a substring. Examples: ANamespace, AClass, AClass::ANamespace, ANamespace::*Test + +EXCLUDE_SYMBOLS = + +# The EXAMPLE_PATH tag can be used to specify one or more files or +# directories that contain example code fragments that are included (see +# the \include command). + +EXAMPLE_PATH = + +# If the value of the EXAMPLE_PATH tag contains directories, you can use the +# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp +# and *.h) to filter out the source-files in the directories. If left +# blank all files are included. + +EXAMPLE_PATTERNS = * + +# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be +# searched for input files to be used with the \include or \dontinclude +# commands irrespective of the value of the RECURSIVE tag. +# Possible values are YES and NO. If left blank NO is used. + +EXAMPLE_RECURSIVE = NO + +# The IMAGE_PATH tag can be used to specify one or more files or +# directories that contain image that are included in the documentation (see +# the \image command). + +IMAGE_PATH = + +# The INPUT_FILTER tag can be used to specify a program that doxygen should +# invoke to filter for each input file. Doxygen will invoke the filter program +# by executing (via popen()) the command , where +# is the value of the INPUT_FILTER tag, and is the name of an +# input file. Doxygen will then use the output that the filter program writes +# to standard output. If FILTER_PATTERNS is specified, this tag will be +# ignored. + +INPUT_FILTER = + +# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern +# basis. Doxygen will compare the file name with each pattern and apply the +# filter if there is a match. The filters are a list of the form: +# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further +# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER +# is applied to all files. + +FILTER_PATTERNS = + +# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using +# INPUT_FILTER) will be used to filter the input files when producing source +# files to browse (i.e. when SOURCE_BROWSER is set to YES). + +FILTER_SOURCE_FILES = NO + +#--------------------------------------------------------------------------- +# configuration options related to source browsing +#--------------------------------------------------------------------------- + +# If the SOURCE_BROWSER tag is set to YES then a list of source files will +# be generated. Documented entities will be cross-referenced with these sources. +# Note: To get rid of all source code in the generated output, make sure also +# VERBATIM_HEADERS is set to NO. If you have enabled CALL_GRAPH or CALLER_GRAPH +# then you must also enable this option. If you don't then doxygen will produce +# a warning and turn it on anyway + +SOURCE_BROWSER = YES + +# Setting the INLINE_SOURCES tag to YES will include the body +# of functions and classes directly in the documentation. + +INLINE_SOURCES = NO + +# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct +# doxygen to hide any special comment blocks from generated source code +# fragments. Normal C and C++ comments will always remain visible. + +STRIP_CODE_COMMENTS = YES + +# If the REFERENCED_BY_RELATION tag is set to YES (the default) +# then for each documented function all documented +# functions referencing it will be listed. + +REFERENCED_BY_RELATION = NO + +# If the REFERENCES_RELATION tag is set to YES (the default) +# then for each documented function all documented entities +# called/used by that function will be listed. + +REFERENCES_RELATION = NO + +# If the REFERENCES_LINK_SOURCE tag is set to YES (the default) +# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from +# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will +# link to the source code. Otherwise they will link to the documentstion. + +REFERENCES_LINK_SOURCE = YES + +# If the USE_HTAGS tag is set to YES then the references to source code +# will point to the HTML generated by the htags(1) tool instead of doxygen +# built-in source browser. The htags tool is part of GNU's global source +# tagging system (see http://www.gnu.org/software/global/global.html). You +# will need version 4.8.6 or higher. + +USE_HTAGS = NO + +# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen +# will generate a verbatim copy of the header file for each class for +# which an include is specified. Set to NO to disable this. + +VERBATIM_HEADERS = YES + +#--------------------------------------------------------------------------- +# configuration options related to the alphabetical class index +#--------------------------------------------------------------------------- + +# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index +# of all compounds will be generated. Enable this if the project +# contains a lot of classes, structs, unions or interfaces. + +ALPHABETICAL_INDEX = YES + +# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then +# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns +# in which this list will be split (can be a number in the range [1..20]) + +COLS_IN_ALPHA_INDEX = 5 + +# In case all classes in a project start with a common prefix, all +# classes will be put under the same header in the alphabetical index. +# The IGNORE_PREFIX tag can be used to specify one or more prefixes that +# should be ignored while generating the index headers. + +IGNORE_PREFIX = + +#--------------------------------------------------------------------------- +# configuration options related to the HTML output +#--------------------------------------------------------------------------- + +# If the GENERATE_HTML tag is set to YES (the default) Doxygen will +# generate HTML output. + +GENERATE_HTML = YES + +# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `html' will be used as the default path. + +HTML_OUTPUT = html + +# The HTML_FILE_EXTENSION tag can be used to specify the file extension for +# each generated HTML page (for example: .htm,.php,.asp). If it is left blank +# doxygen will generate files with .html extension. + +HTML_FILE_EXTENSION = .html + +# The HTML_HEADER tag can be used to specify a personal HTML header for +# each generated HTML page. If it is left blank doxygen will generate a +# standard header. + +HTML_HEADER = + +# The HTML_FOOTER tag can be used to specify a personal HTML footer for +# each generated HTML page. If it is left blank doxygen will generate a +# standard footer. + +HTML_FOOTER = + +# The HTML_STYLESHEET tag can be used to specify a user-defined cascading +# style sheet that is used by each HTML page. It can be used to +# fine-tune the look of the HTML output. If the tag is left blank doxygen +# will generate a default style sheet. Note that doxygen will try to copy +# the style sheet file to the HTML output directory, so don't put your own +# stylesheet in the HTML output directory as well, or it will be erased! + +HTML_STYLESHEET = + +# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, +# files or namespaces will be aligned in HTML using tables. If set to +# NO a bullet list will be used. + +HTML_ALIGN_MEMBERS = YES + +# If the GENERATE_HTMLHELP tag is set to YES, additional index files +# will be generated that can be used as input for tools like the +# Microsoft HTML help workshop to generate a compressed HTML help file (.chm) +# of the generated HTML documentation. + +GENERATE_HTMLHELP = NO + +# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML +# documentation will contain sections that can be hidden and shown after the +# page has loaded. For this to work a browser that supports +# JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox +# Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari). + +HTML_DYNAMIC_SECTIONS = NO + +# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can +# be used to specify the file name of the resulting .chm file. You +# can add a path in front of the file if the result should not be +# written to the html output directory. + +CHM_FILE = + +# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can +# be used to specify the location (absolute path including file name) of +# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run +# the HTML help compiler on the generated index.hhp. + +HHC_LOCATION = + +# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag +# controls if a separate .chi index file is generated (YES) or that +# it should be included in the master .chm file (NO). + +GENERATE_CHI = NO + +# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag +# controls whether a binary table of contents is generated (YES) or a +# normal table of contents (NO) in the .chm file. + +BINARY_TOC = NO + +# The TOC_EXPAND flag can be set to YES to add extra items for group members +# to the contents of the HTML help documentation and to the tree view. + +TOC_EXPAND = NO + +# The DISABLE_INDEX tag can be used to turn on/off the condensed index at +# top of each HTML page. The value NO (the default) enables the index and +# the value YES disables it. + +DISABLE_INDEX = NO + +# This tag can be used to set the number of enum values (range [1..20]) +# that doxygen will group on one line in the generated HTML documentation. + +ENUM_VALUES_PER_LINE = 4 + +# If the GENERATE_TREEVIEW tag is set to YES, a side panel will be +# generated containing a tree-like index structure (just like the one that +# is generated for HTML Help). For this to work a browser that supports +# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, +# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are +# probably better off using the HTML help feature. + +GENERATE_TREEVIEW = YES + +# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be +# used to set the initial width (in pixels) of the frame in which the tree +# is shown. + +TREEVIEW_WIDTH = 250 + +#--------------------------------------------------------------------------- +# configuration options related to the LaTeX output +#--------------------------------------------------------------------------- + +# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will +# generate Latex output. + +GENERATE_LATEX = NO + +# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `latex' will be used as the default path. + +LATEX_OUTPUT = latex + +# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be +# invoked. If left blank `latex' will be used as the default command name. + +LATEX_CMD_NAME = latex + +# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to +# generate index for LaTeX. If left blank `makeindex' will be used as the +# default command name. + +MAKEINDEX_CMD_NAME = makeindex + +# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact +# LaTeX documents. This may be useful for small projects and may help to +# save some trees in general. + +COMPACT_LATEX = NO + +# The PAPER_TYPE tag can be used to set the paper type that is used +# by the printer. Possible values are: a4, a4wide, letter, legal and +# executive. If left blank a4wide will be used. + +PAPER_TYPE = a4wide + +# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX +# packages that should be included in the LaTeX output. + +EXTRA_PACKAGES = + +# The LATEX_HEADER tag can be used to specify a personal LaTeX header for +# the generated latex document. The header should contain everything until +# the first chapter. If it is left blank doxygen will generate a +# standard header. Notice: only use this tag if you know what you are doing! + +LATEX_HEADER = + +# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated +# is prepared for conversion to pdf (using ps2pdf). The pdf file will +# contain links (just like the HTML output) instead of page references +# This makes the output suitable for online browsing using a pdf viewer. + +PDF_HYPERLINKS = NO + +# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of +# plain latex in the generated Makefile. Set this option to YES to get a +# higher quality PDF documentation. + +USE_PDFLATEX = NO + +# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. +# command to the generated LaTeX files. This will instruct LaTeX to keep +# running if errors occur, instead of asking the user for help. +# This option is also used when generating formulas in HTML. + +LATEX_BATCHMODE = NO + +# If LATEX_HIDE_INDICES is set to YES then doxygen will not +# include the index chapters (such as File Index, Compound Index, etc.) +# in the output. + +LATEX_HIDE_INDICES = NO + +#--------------------------------------------------------------------------- +# configuration options related to the RTF output +#--------------------------------------------------------------------------- + +# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output +# The RTF output is optimized for Word 97 and may not look very pretty with +# other RTF readers or editors. + +GENERATE_RTF = NO + +# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `rtf' will be used as the default path. + +RTF_OUTPUT = rtf + +# If the COMPACT_RTF tag is set to YES Doxygen generates more compact +# RTF documents. This may be useful for small projects and may help to +# save some trees in general. + +COMPACT_RTF = NO + +# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated +# will contain hyperlink fields. The RTF file will +# contain links (just like the HTML output) instead of page references. +# This makes the output suitable for online browsing using WORD or other +# programs which support those fields. +# Note: wordpad (write) and others do not support links. + +RTF_HYPERLINKS = NO + +# Load stylesheet definitions from file. Syntax is similar to doxygen's +# config file, i.e. a series of assignments. You only have to provide +# replacements, missing definitions are set to their default value. + +RTF_STYLESHEET_FILE = + +# Set optional variables used in the generation of an rtf document. +# Syntax is similar to doxygen's config file. + +RTF_EXTENSIONS_FILE = + +#--------------------------------------------------------------------------- +# configuration options related to the man page output +#--------------------------------------------------------------------------- + +# If the GENERATE_MAN tag is set to YES (the default) Doxygen will +# generate man pages + +GENERATE_MAN = NO + +# The MAN_OUTPUT tag is used to specify where the man pages will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `man' will be used as the default path. + +MAN_OUTPUT = man + +# The MAN_EXTENSION tag determines the extension that is added to +# the generated man pages (default is the subroutine's section .3) + +MAN_EXTENSION = .3 + +# If the MAN_LINKS tag is set to YES and Doxygen generates man output, +# then it will generate one additional man file for each entity +# documented in the real man page(s). These additional files +# only source the real man page, but without them the man command +# would be unable to find the correct page. The default is NO. + +MAN_LINKS = NO + +#--------------------------------------------------------------------------- +# configuration options related to the XML output +#--------------------------------------------------------------------------- + +# If the GENERATE_XML tag is set to YES Doxygen will +# generate an XML file that captures the structure of +# the code including all documentation. + +GENERATE_XML = NO + +# The XML_OUTPUT tag is used to specify where the XML pages will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `xml' will be used as the default path. + +XML_OUTPUT = xml + +# The XML_SCHEMA tag can be used to specify an XML schema, +# which can be used by a validating XML parser to check the +# syntax of the XML files. + +XML_SCHEMA = + +# The XML_DTD tag can be used to specify an XML DTD, +# which can be used by a validating XML parser to check the +# syntax of the XML files. + +XML_DTD = + +# If the XML_PROGRAMLISTING tag is set to YES Doxygen will +# dump the program listings (including syntax highlighting +# and cross-referencing information) to the XML output. Note that +# enabling this will significantly increase the size of the XML output. + +XML_PROGRAMLISTING = YES + +#--------------------------------------------------------------------------- +# configuration options for the AutoGen Definitions output +#--------------------------------------------------------------------------- + +# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will +# generate an AutoGen Definitions (see autogen.sf.net) file +# that captures the structure of the code including all +# documentation. Note that this feature is still experimental +# and incomplete at the moment. + +GENERATE_AUTOGEN_DEF = NO + +#--------------------------------------------------------------------------- +# configuration options related to the Perl module output +#--------------------------------------------------------------------------- + +# If the GENERATE_PERLMOD tag is set to YES Doxygen will +# generate a Perl module file that captures the structure of +# the code including all documentation. Note that this +# feature is still experimental and incomplete at the +# moment. + +GENERATE_PERLMOD = NO + +# If the PERLMOD_LATEX tag is set to YES Doxygen will generate +# the necessary Makefile rules, Perl scripts and LaTeX code to be able +# to generate PDF and DVI output from the Perl module output. + +PERLMOD_LATEX = NO + +# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be +# nicely formatted so it can be parsed by a human reader. This is useful +# if you want to understand what is going on. On the other hand, if this +# tag is set to NO the size of the Perl module output will be much smaller +# and Perl will parse it just the same. + +PERLMOD_PRETTY = YES + +# The names of the make variables in the generated doxyrules.make file +# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. +# This is useful so different doxyrules.make files included by the same +# Makefile don't overwrite each other's variables. + +PERLMOD_MAKEVAR_PREFIX = + +#--------------------------------------------------------------------------- +# Configuration options related to the preprocessor +#--------------------------------------------------------------------------- + +# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will +# evaluate all C-preprocessor directives found in the sources and include +# files. + +ENABLE_PREPROCESSING = YES + +# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro +# names in the source code. If set to NO (the default) only conditional +# compilation will be performed. Macro expansion can be done in a controlled +# way by setting EXPAND_ONLY_PREDEF to YES. + +MACRO_EXPANSION = YES + +# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES +# then the macro expansion is limited to the macros specified with the +# PREDEFINED and EXPAND_AS_DEFINED tags. + +EXPAND_ONLY_PREDEF = NO + +# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files +# in the INCLUDE_PATH (see below) will be search if a #include is found. + +SEARCH_INCLUDES = YES + +# The INCLUDE_PATH tag can be used to specify one or more directories that +# contain include files that are not input files but should be processed by +# the preprocessor. + +INCLUDE_PATH = + +# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard +# patterns (like *.h and *.hpp) to filter out the header-files in the +# directories. If left blank, the patterns specified with FILE_PATTERNS will +# be used. + +INCLUDE_FILE_PATTERNS = + +# The PREDEFINED tag can be used to specify one or more macro names that +# are defined before the preprocessor is started (similar to the -D option of +# gcc). The argument of the tag is a list of macros of the form: name +# or name=definition (no spaces). If the definition and the = are +# omitted =1 is assumed. To prevent a macro definition from being +# undefined via #undef or recursively expanded use the := operator +# instead of the = operator. + +PREDEFINED = + +# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then +# this tag can be used to specify a list of macro names that should be expanded. +# The macro definition that is found in the sources will be used. +# Use the PREDEFINED tag if you want to use a different macro definition. + +EXPAND_AS_DEFINED = + +# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then +# doxygen's preprocessor will remove all function-like macros that are alone +# on a line, have an all uppercase name, and do not end with a semicolon. Such +# function macros are typically used for boiler-plate code, and will confuse +# the parser if not removed. + +SKIP_FUNCTION_MACROS = YES + +#--------------------------------------------------------------------------- +# Configuration::additions related to external references +#--------------------------------------------------------------------------- + +# The TAGFILES option can be used to specify one or more tagfiles. +# Optionally an initial location of the external documentation +# can be added for each tagfile. The format of a tag file without +# this location is as follows: +# TAGFILES = file1 file2 ... +# Adding location for the tag files is done as follows: +# TAGFILES = file1=loc1 "file2 = loc2" ... +# where "loc1" and "loc2" can be relative or absolute paths or +# URLs. If a location is present for each tag, the installdox tool +# does not have to be run to correct the links. +# Note that each tag file must have a unique name +# (where the name does NOT include the path) +# If a tag file is not located in the directory in which doxygen +# is run, you must also specify the path to the tagfile here. + +TAGFILES = + +# When a file name is specified after GENERATE_TAGFILE, doxygen will create +# a tag file that is based on the input files it reads. + +GENERATE_TAGFILE = + +# If the ALLEXTERNALS tag is set to YES all external classes will be listed +# in the class index. If set to NO only the inherited external classes +# will be listed. + +ALLEXTERNALS = NO + +# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed +# in the modules index. If set to NO, only the current project's groups will +# be listed. + +EXTERNAL_GROUPS = YES + +# The PERL_PATH should be the absolute path and name of the perl script +# interpreter (i.e. the result of `which perl'). + +PERL_PATH = /usr/bin/perl + +#--------------------------------------------------------------------------- +# Configuration options related to the dot tool +#--------------------------------------------------------------------------- + +# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will +# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base +# or super classes. Setting the tag to NO turns the diagrams off. Note that +# this option is superseded by the HAVE_DOT option below. This is only a +# fallback. It is recommended to install and use dot, since it yields more +# powerful graphs. + +CLASS_DIAGRAMS = NO + +# You can define message sequence charts within doxygen comments using the \msc +# command. Doxygen will then run the mscgen tool (see http://www.mcternan.me.uk/mscgen/) to +# produce the chart and insert it in the documentation. The MSCGEN_PATH tag allows you to +# specify the directory where the mscgen tool resides. If left empty the tool is assumed to +# be found in the default search path. + +MSCGEN_PATH = + +# If set to YES, the inheritance and collaboration graphs will hide +# inheritance and usage relations if the target is undocumented +# or is not a class. + +HIDE_UNDOC_RELATIONS = YES + +# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is +# available from the path. This tool is part of Graphviz, a graph visualization +# toolkit from AT&T and Lucent Bell Labs. The other options in this section +# have no effect if this option is set to NO (the default) + +HAVE_DOT = NO + +# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for each documented class showing the direct and +# indirect inheritance relations. Setting this tag to YES will force the +# the CLASS_DIAGRAMS tag to NO. + +CLASS_GRAPH = YES + +# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for each documented class showing the direct and +# indirect implementation dependencies (inheritance, containment, and +# class references variables) of the class with other documented classes. + +COLLABORATION_GRAPH = YES + +# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for groups, showing the direct groups dependencies + +GROUP_GRAPHS = YES + +# If the UML_LOOK tag is set to YES doxygen will generate inheritance and +# collaboration diagrams in a style similar to the OMG's Unified Modeling +# Language. + +UML_LOOK = NO + +# If set to YES, the inheritance and collaboration graphs will show the +# relations between templates and their instances. + +TEMPLATE_RELATIONS = NO + +# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT +# tags are set to YES then doxygen will generate a graph for each documented +# file showing the direct and indirect include dependencies of the file with +# other documented files. + +INCLUDE_GRAPH = YES + +# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and +# HAVE_DOT tags are set to YES then doxygen will generate a graph for each +# documented header file showing the documented files that directly or +# indirectly include this file. + +INCLUDED_BY_GRAPH = YES + +# If the CALL_GRAPH, SOURCE_BROWSER and HAVE_DOT tags are set to YES then doxygen will +# generate a call dependency graph for every global function or class method. +# Note that enabling this option will significantly increase the time of a run. +# So in most cases it will be better to enable call graphs for selected +# functions only using the \callgraph command. + +CALL_GRAPH = NO + +# If the CALLER_GRAPH, SOURCE_BROWSER and HAVE_DOT tags are set to YES then doxygen will +# generate a caller dependency graph for every global function or class method. +# Note that enabling this option will significantly increase the time of a run. +# So in most cases it will be better to enable caller graphs for selected +# functions only using the \callergraph command. + +CALLER_GRAPH = NO + +# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen +# will graphical hierarchy of all classes instead of a textual one. + +GRAPHICAL_HIERARCHY = YES + +# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES +# then doxygen will show the dependencies a directory has on other directories +# in a graphical way. The dependency relations are determined by the #include +# relations between the files in the directories. + +DIRECTORY_GRAPH = YES + +# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images +# generated by dot. Possible values are png, jpg, or gif +# If left blank png will be used. + +DOT_IMAGE_FORMAT = png + +# The tag DOT_PATH can be used to specify the path where the dot tool can be +# found. If left blank, it is assumed the dot tool can be found in the path. + +DOT_PATH = + +# The DOTFILE_DIRS tag can be used to specify one or more directories that +# contain dot files that are included in the documentation (see the +# \dotfile command). + +DOTFILE_DIRS = + +# The MAX_DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of +# nodes that will be shown in the graph. If the number of nodes in a graph +# becomes larger than this value, doxygen will truncate the graph, which is +# visualized by representing a node as a red box. Note that doxygen if the number +# of direct children of the root node in a graph is already larger than +# MAX_DOT_GRAPH_NOTES then the graph will not be shown at all. Also note +# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH. + +DOT_GRAPH_MAX_NODES = 50 + +# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the +# graphs generated by dot. A depth value of 3 means that only nodes reachable +# from the root by following a path via at most 3 edges will be shown. Nodes +# that lay further from the root node will be omitted. Note that setting this +# option to 1 or 2 may greatly reduce the computation time needed for large +# code bases. Also note that the size of a graph can be further restricted by +# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction. + +MAX_DOT_GRAPH_DEPTH = 1000 + +# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent +# background. This is disabled by default, which results in a white background. +# Warning: Depending on the platform used, enabling this option may lead to +# badly anti-aliased labels on the edges of a graph (i.e. they become hard to +# read). + +DOT_TRANSPARENT = NO + +# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output +# files in one run (i.e. multiple -o and -T options on the command line). This +# makes dot run faster, but since only newer versions of dot (>1.8.10) +# support this, this feature is disabled by default. + +DOT_MULTI_TARGETS = NO + +# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will +# generate a legend page explaining the meaning of the various boxes and +# arrows in the dot generated graphs. + +GENERATE_LEGEND = YES + +# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will +# remove the intermediate dot files that are used to generate +# the various graphs. + +DOT_CLEANUP = YES + +#--------------------------------------------------------------------------- +# Configuration::additions related to the search engine +#--------------------------------------------------------------------------- + +# The SEARCHENGINE tag specifies whether or not a search engine should be +# used. If set to NO the values of all tags below this one will be ignored. + +SEARCHENGINE = NO diff --git a/algorithm_outline.txt b/algorithm_outline.txt new file mode 100644 index 0000000..1a0d37c --- /dev/null +++ b/algorithm_outline.txt @@ -0,0 +1,32 @@ +MR::Math::Matrix(points, point_conv, strand.matrix()) +MR::Math::Matrix(tang, tang_conv, strand.matrix()) + +(VoxelSize, ResponseFunction, parameters to Image class) + +BTS::Image::Neighbourhood::reserve() --set initially to some reasonable number +BTS::Image::Neighbourhood::add_section(points.row(x), tang.row(x), *strand, point_conv.row(x), tang_conv.row(x)) (maybe include pointers to intermediately generated structures as well) + +BTS::Image::Neighbourhood::calculate_intensities() + internally store points in a Nx3 matrix and tangents in a Nx3 matrices + have the list of voxel centres as Lx3 matrix and dw orientations as a 3xQ matrix + Then should have a LxNx3 distance array, Nx1 length vector, and a NxQ angle matrix. + + response_functions as a NxQ matrix (will need to to column-wise multiplication and collecting on angle matrix) to produce another NxQ response matrix. + + columnwise multiplication of length_vector and angle matrix produces another NxQ matrix (probably could be incorporated into response function step I think) + + interpolation function operates on LxNx3 to produce LxN interpolation intensities + + matrix multiplication produces LxQ intensity matrix. + +BTS::Image::collate_neighbourhoods(Neighbourhood) + + takes LxQ matrices from neighbourhoods and collates them into L'xQ image data matrix. + +BTS::Image::Neighbourood::calculate_gradients_hessians + Then take collated intensities and put them back into the calculate the gradient + Hessian + reusing the precalculated interpolation and response matrices. + + + BTS::Image::collate_gradients_hessians(Neighbourhood) + this is done per neighbourhood calculation to prevent large memory allocation problems diff --git a/bash/add_base_intensity b/bash/add_base_intensity new file mode 100755 index 0000000..17ea959 --- /dev/null +++ b/bash/add_base_intensity @@ -0,0 +1,25 @@ +#!/bin/bash + +DIR=$1 + +if [ "${#DIR}" = 0 ]; then + DIR='.' +fi + +for f in `ls $DIR/*.tck`; do + + if [ -h $f ]; then + file=`readlink $f` + else + file=$f + fi + + file_strip=${file##*/} + + select_fibres $file /tmp/$file_strip.txt + + sed -i 's/base_intensity: 0/base_intensity: 1/g' /tmp/$file_strip.txt + + select_fibres /tmp/$file_strip.txt $file + +done diff --git a/bash/add_density b/bash/add_density new file mode 100755 index 0000000..ac118d2 --- /dev/null +++ b/bash/add_density @@ -0,0 +1,25 @@ +#!/bin/bash + +DIR=$1 + +if [ "${#DIR}" = 0 ]; then + DIR='.' +fi + +for f in `ls $DIR/*.tckx`; do + + if [ -h $f ]; then + file=`readlink $f` + else + file=$f + fi + + if [ `grep -c "density" $file` = 0 ]; then + + sed -i 's/^/1\t/g' $file + + sed -i 's/1\t%%% Extended Properties File %%% - keys: /%%% Extended Properties File %%% - keys: density\t/g' $file + + fi + +done diff --git a/bash/create_fibres b/bash/create_fibres new file mode 100755 index 0000000..39c8f62 --- /dev/null +++ b/bash/create_fibres @@ -0,0 +1,30 @@ +#!/bin/bash + +#if [ $# -le 1 ]; then +# echo "At least 1 argument need to be supplied to $0 ($# supplied)." +# exit -1 +#fi + +if [ ${1##*.} == 'txt' ]; then + + new_fibres $1 ${@:2} + + vi $1 + +else + + TEMP_TXT_FILE=/tmp/${1##*/}.txt + + #Export fibres file to a temporary text equivalent. + new_fibres $TEMP_TXT_FILE ${@:2} + + #Edit with vi + vi $TEMP_TXT_FILE + + #Import fibres back to output location + select_fibres $TEMP_TXT_FILE $1 + + #Cleanup temporary file + rm $TEMP_TXT_FILE + +fi diff --git a/bash/edit_fibres b/bash/edit_fibres new file mode 100755 index 0000000..041426b --- /dev/null +++ b/bash/edit_fibres @@ -0,0 +1,28 @@ +#!/bin/bash + +if [ $# == 0 ]; then + echo "No arguments supplied to $0 (at least 1 required)." + exit -1 +elif [ $# == 1 ]; then + OUTPUT_LOCATION=$1 +elif [ $# == 2 ]; then + OUTPUT_LOCATION=$2 +else + echo "Too many arguments ($#) supplied to $0 (max 2, input and output locations)." + exit -1 +fi + + +TEMP_TXT_FILE=/tmp/${1##*/}.txt + +#Export fibres file to a temporary text equivalent. +select_fibres $1 $TEMP_TXT_FILE + +#Edit with vi +vi $TEMP_TXT_FILE + +#Import fibres back to output location +select_fibres $TEMP_TXT_FILE $OUTPUT_LOCATION + +#Cleanup temporary file +rm $TEMP_TXT_FILE diff --git a/bash/metropolis b/bash/metropolis new file mode 120000 index 0000000..baa5aae --- /dev/null +++ b/bash/metropolis @@ -0,0 +1 @@ +../metropolis_release/tractography \ No newline at end of file diff --git a/bash/process_collections b/bash/process_collections new file mode 100755 index 0000000..779d952 --- /dev/null +++ b/bash/process_collections @@ -0,0 +1,43 @@ +#!/bin/bash + +export neigh_count=0 + +neigh_size=3 +vox_size=0.15 +extent=3 +neigh_bounds=0.61 +cube_size=1.05 + +input_dir=/data/home/tclose/Data/Fifty_phantoms/ +output_dir=/data/home/tclose/Data/Tractography/chunked + +for collection_path in `ls $input_dir`; do + + extension=${collection_path##*.} + + if [ $extension = "tck" ]; then + coll_name=${collection_path##*/} + coll_name=${coll_name%.*} + + echo "--$coll_name--" + +# rm -r $output_dir/${coll_name}/vox_${vox_size} +# mkdir $output_dir/${coll_name}/vox_${vox_size} + +# chunk_strands $input_dir/$collection_path $output_dir/${coll_name}/vox_${vox_size}/cube_${cube_size}.tck -extent $extent -voxel_size $vox_size -map_to_origin -save_separate -half_offset -neigh_bounds $neigh_bounds + +# rm -r $output_dir/${coll_name}/vox_${vox_size}/ball_combined +# mkdir $output_dir/${coll_name}/vox_${vox_size}/ball_combined + + process_neighbourhoods $output_dir/${coll_name}/vox_${vox_size}/cube_${cube_size} $output_dir/${coll_name}/vox_${vox_size} + +# ls $output_dir/${coll_name}/vox_${vox_size}/prepared_strands $output_dir/prepared_strands/${coll_name}.frr + + #combine_strands $output_dir/${coll_name}/vox_${vox_size}/ball_combined $output_dir/ball_combined/${coll_name}.frr + + fi + +done + + +#combine_strands $output_dir/ball_combined/ $output_dir/ball_combined.frr diff --git a/bash/process_neighbourhoods b/bash/process_neighbourhoods new file mode 100755 index 0000000..bf8f6c3 --- /dev/null +++ b/bash/process_neighbourhoods @@ -0,0 +1,79 @@ +#!/bin/bash + +new_sphere_r=0.34 +length_reject_threshold=0.005 +inclusion_radius=0.13 +perturb=0.0075 +degree=3 +ref_image_degree=20 +neigh_size=3 +vox_size=0.15 + +new_sphere_d=0.78 +inclusion_diameter=0.26 + + +neigh_pattern=${1##*/} +base_path=${1%/$neigh_pattern} +output_path=$2 + +for neigh_path in `ls $1*`; do + + neigh_file=${neigh_path##*/} + + neigh=${neigh_file:$(( ${#neigh_pattern} + 1 )):$(( ${#neigh_file} - 5 - ${#neigh_pattern} ))} + echo $neigh + + + +# rm -r $base_path/$neigh + +# mkdir $base_path/$neigh +# mkdir $base_path/$neigh/images +# mkdir $base_path/$neigh/metropolis_hastings +# mkdir $base_path/$neigh/strands + + +# mkdir $base_path/$neigh/metropolis_hastings/A + + +# cp $base_path/$neigh_file $base_path/$neigh/strands/cube.tck + + +# trim_tcks $base_path/$neigh/strands/cube.tck $base_path/$neigh/strands/ball.tck -new_sphere_r ${new_sphere_r} -length_reject_threshold ${length_reject_threshold} + +# peel_tcks $base_path/$neigh/strands/ball.tck $base_path/$neigh/strands/peeled.tck -inclusion_radius $inclusion_radius + +# tck2fourier $base_path/$neigh/strands/peeled.tck $base_path/$neigh/strands/peeled.frr -degree ${degree} + +# perturb_fouriers $base_path/$neigh/strands/peeled.frr $base_path/$neigh/metropolis_hastings/A/initial.frr -perturb $perturb + +# rm $base_path/$neigh/images/tophat.mif + +# tck2fourier $base_path/$neigh/strands/$neigh_pattern.tck $base_path/$neigh/strands/cube_for_ref.frr -degree $ref_image_degree + +# expected_image $base_path/$neigh/strands/cube_for_ref.frr /data/home/tclose/Data/Gradient_directions/encoding_60.b $base_path/$neigh/images/tophat.mif -vox_size ${vox_size} -num_voxels 3 -points 100 + +# tck2fourier $base_path/$neigh/strands/sphere_0.78.tck $base_path/$neigh/strands/ball.frr -degree 3 + +# cp $base_path/$neigh/strands/ball.frr $output_path/ball_combined/$neigh.frr + +#echo $neigh_count + +#mv $base_path/$neigh/strands/cube_1.05.tck $base_path/$neigh/strands/cube.tck + +#mv $base_path/$neigh/strands/sphere_0.78.tck $base_path/$neigh/strands/ball.tck + +#rm $base_path/$neigh/strands/cube_1.05-frr_20.frr + +#rm $base_path/$neigh/strands/sphere_0.78* + +#tcks2fouriers $base_path/$neigh/strands/ball.tck $base_path/$neigh/strands/ball.frr -degree 3 + +ln -s $base_path/$neigh/strands /data/home/tclose/Data/Tractography/chunked/vox_0.15/strands/$neigh_count + +#ls $base_path/$neigh/strands + +#neigh_count=$(( $neigh_count + 1 )) + +done diff --git a/bash/rename_frr b/bash/rename_frr new file mode 100755 index 0000000..fe3ac97 --- /dev/null +++ b/bash/rename_frr @@ -0,0 +1,24 @@ +#!/bin/bash + +directory_name=$1 + +for file in `ls $directory_name/*.frr`; do + + svn move $file ${file/%.frr/.str}; + +done + +for file in `ls $directory_name/*.frrx`; do + + svn move $file ${file/%.frrx/.strx}; + +done + +for file in `ls $directory_name/*.frrxx`; do + + svn move $file ${file/%.frrxx/.strxx}; + +done + + +svn commit -m "renaming '.frr' to '.str' in directory $directory_name" \ No newline at end of file diff --git a/bash/test_bed b/bash/test_bed new file mode 120000 index 0000000..4d6ecd0 --- /dev/null +++ b/bash/test_bed @@ -0,0 +1 @@ +../test_bed/tractography \ No newline at end of file diff --git a/build b/build new file mode 100755 index 0000000..d65b38c --- /dev/null +++ b/build @@ -0,0 +1,16 @@ +#!/bin/bash + +#TARGET='src/bts/fibre/base.o' +#TARGET='bin/stress_tester' + +if [ ${#TARGET} -gt 0 ]; then + + echo + echo "WARNING!! Only building for target $TARGET" + echo + + +fi + +/home/tclose/Code/MRtrix/build $TARGET $@ + diff --git a/build_debug b/build_debug new file mode 100755 index 0000000..315d0f7 --- /dev/null +++ b/build_debug @@ -0,0 +1,26 @@ +#!/bin/bash + +#CMD_TARGET='dummy' +#OBJ_TARGET='fibre/tractlet/set/walker' + +if [ ${#CMD_TARGET} -gt 0 ]; then + + echo + echo "WARNING!! Only building for target $CMD_TARGET" + echo + + TARGET=bin/${CMD_TARGET}__debug + +elif [ ${#OBJ_TARGET} -gt 0 ]; then + + echo + echo "WARNING!! Only building for target $OBJ_TARGET" + echo + + TARGET=src/bts/${OBJ_TARGET}__debug.o + +fi + +echo $TARGET + +/home/tclose/Code/MRtrix/build debug $TARGET $@ diff --git a/cmd/add_encodings.cpp b/cmd/add_encodings.cpp new file mode 100644 index 0000000..9b0b3f5 --- /dev/null +++ b/cmd/add_encodings.cpp @@ -0,0 +1,88 @@ +/* + Copyright 2009 Brain Research Institute, Melbourne, Australia + + Created by Tom Close on 13/03/09. + + This file is part of Bayesian Tractlet Sampling (BTS). + + BTS is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + BTS is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with BTS. If not, see . + + */ + + +extern "C" { +#include +#include +} + + +#include "bts/cmd.h" +#include "progressbar.h" + +#include "bts/common.h" +#include "bts/image/expected/buffer.h" +#include "bts/image/observed/buffer.h" + +#include "bts/image/noise.h" +#include "bts/image/noise/gaussian.h" + + + +#include "bts/inline_functions.h" + +using namespace BTS; + +SET_VERSION_DEFAULT; +SET_AUTHOR ("Thomas G. Close"); +SET_COPYRIGHT (NULL); + +DESCRIPTION = { + "Adds encoding to an image.", + "", + NULL +}; + +ARGUMENTS = { + Argument ("image", "The image.").type_file(), + + Argument ("encodings", "The gradient encodings to be added to the image").type_file (), + + Argument() +}; + + +OPTIONS = { + +Option() + +}; + + + +EXECUTE { + + + std::string image_location = argument[0]; + std::string encodings_location = argument[1]; + + Image::Observed::Buffer image(image_location, Diffusion::Encoding::Set(encodings_location)); + + MR::ProgressBar progress_bar ("Adding gradient encodings to image file..."); + + image.save(image_location); + + +} + + diff --git a/cmd/average_fibres.cpp b/cmd/average_fibres.cpp new file mode 100644 index 0000000..e6dc50e --- /dev/null +++ b/cmd/average_fibres.cpp @@ -0,0 +1,245 @@ +/* + Copyright 2009 Brain Research Institute, Melbourne, Australia + + Written by Thomas G. Close, 04/03/2009. + + This file is part of Bayesian Tractlet Sampling (BTS). + + BTS is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + BTS is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with BTS. If not, see . + + */ + +#include "bts/cmd.h" +#include "point.h" +#include "progressbar.h" + +#include "bts/common.h" +#include "bts/file.h" + +#include "bts/fibre/strand/set.h" +#include "bts/fibre/track/set.h" +#include "bts/fibre/tractlet/set.h" +#include "bts/fibre/properties/extended.h" + +#include "bts/fibre/base/writer.h" + + + +#include "bts/image/expected/buffer.h" + + +#include "bts/inline_functions.h" + + +using namespace BTS; + + +const double MIN_ACS_DEFAULT = 0.001; + +template void average_fibres(const std::string& input_location, const std::string& output_location, + const std::vector& include, double min_acs); + +template double acs(const T& fibre); + +SET_VERSION_DEFAULT; +SET_AUTHOR ("Thomas G. Close"); +SET_COPYRIGHT (NULL); + +DESCRIPTION = { + "Average a set of fibres sets, inluding the option to remove thin tractlets.", + "", + NULL +}; + +ARGUMENTS = { + Argument ("input", "The fibres to be selected from.").type_file (), + Argument ("output", "The selected fibres.").type_file (), + Argument() +}; + + +OPTIONS = { + + Option ("include","The indices of the strands to include") + + Argument ("include",""), + + Option ("min_acs","Minimum area of tractlet to include") + + Argument ("include","").type_float (0,LARGE_FLOAT, MIN_ACS_DEFAULT), + + +Option() }; + + +EXECUTE { + + std::string input_location = argument[0]; + std::string output_location = argument[1]; + + std::vector include; + double min_acs; + + Options opt = get_options("include"); + if (opt.size()) + include = parse_sequence (opt[0][0]); + + + if (File::has_extension(input_location)) { + + if (get_options("min_acs").size()) + throw Exception("Cannot use min_acs option when averaging strand sets (because they have none)."); + + min_acs = -1; + + } else if (File::has_extension(input_location)) { + + opt = get_options("min_acs"); + if (opt.size()) + min_acs = opt[0][0]; + else + min_acs = MIN_ACS_DEFAULT; + + } else + throw Exception ("Unsupported extension of file '" + input_location + "'."); + + + + if (File::has_extension(input_location)) { + + average_fibres(input_location, output_location, include, min_acs); + + } else if (File::has_extension(input_location)) { + + average_fibres(input_location, output_location, include, min_acs); + + } else + throw Exception ("Unsupported extension of file '" + input_location + "'."); + + + } + + + + +template void average_fibres(const std::string& input_location, const std::string& output_location, + const std::vector& include, double min_acs) { + + + if (!File::has_extension(output_location)) + throw Exception ("Mismatching extension of output location '" + output_location + "' for input '" + input_location + "'."); + + + typename T::Set fibres, avg_fibres; + + typename T::Set::Reader reader(input_location); + + size_t set_count = to(reader.get_extend_props()["count"]); + + //Read first tractlets set from input file, save to avg_fibres to set correct size then rewind the reader back to the start. + if (!reader.next(avg_fibres)) + throw Exception ("No sets loaded from input location '" + input_location + "'."); + + avg_fibres.zero(); + reader.rewind(); + + std::vector avg_acss(avg_fibres.size()); + + //Variables to loop through tract sets with. + size_t set_i = 0; + std::vector includes_not_found = include; + + MR::ProgressBar avg_progress_bar("Generating average set...", set_count); + + while (reader.next(fibres)) { + + //Check to see if current set is listed in included list. + std::vector::iterator include_it = find(includes_not_found.begin(), includes_not_found.end(), set_i); + + bool include_set = true; + + if (include.size()) { + if (include_it == includes_not_found.end()) + include_set = false; + else + //Remove matched include from list. + includes_not_found.erase(include_it); + } + + if (include_set) { + + if (fibres.size() != avg_fibres.size()) + throw Exception ("Size of set " + str(set_i) + " (" + str(fibres.size()) + ") does not match that of initial set (" + str(avg_fibres.size()) + ")."); + + avg_fibres += fibres; + + for (size_t elem_i = 0; elem_i < fibres.size(); ++elem_i) + avg_acss[elem_i] += acs(fibres[elem_i]); + + } + + ++set_i; + ++avg_progress_bar; + + } + + if (includes_not_found.size() != 0) + throw Exception ("Indices, " + str(includes_not_found) + ", were outside the range of the number of loaded sets."); + + size_t num_included_sets; + + if (include.size()) + num_included_sets = include.size(); + else + num_included_sets = set_i; + + + avg_fibres /= (double)num_included_sets; + + typename T::Set output_set(std::vector(), reader.elem_prop_keys()); + + MR::ProgressBar min_vol_progress_bar ("Excluding fibres that are thinner than average acs...", avg_fibres.size()); + + for (size_t elem_i = 0; elem_i < avg_fibres.size(); ++elem_i) { + + avg_acss[elem_i] /= (double)num_included_sets; + + if (avg_acss[elem_i] >= min_acs) { + + output_set.push_back(avg_fibres[elem_i]); + + } + + + ++min_vol_progress_bar; + } + + + output_set.save(output_location); + +} + + +template <> double acs(const Fibre::Strand& fibre) { + + return 0.0; + +} + + +template <> double acs(const Fibre::Tractlet& fibre) { + + return fibre.acs(); + +} + + diff --git a/cmd/cluster_strands.cpp b/cmd/cluster_strands.cpp new file mode 100644 index 0000000..e36b67d --- /dev/null +++ b/cmd/cluster_strands.cpp @@ -0,0 +1,369 @@ +/* + Copyright 2009 Brain Research Institute, Melbourne, Australia + + Written by Thomas G. Close, 04/03/2009. + + This file is part of Bayesian Tractlet Sampling (BTS). + + BTS is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + BTS is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with BTS. If not, see . + +*/ + +#include + +#include "bts/cmd.h" + +#include "progressbar.h" + +#include "bts/common.h" + +#include "bts/fibre/strand/set.h" + +#include "k_means/KMlocal.h" // k-means algorithms + + + + +#include "bts/inline_functions.h" + + +using namespace BTS; + +SET_VERSION_DEFAULT; +SET_AUTHOR ("Thomas G. Close"); +SET_COPYRIGHT (NULL); + +DESCRIPTION = { + "Clusters strands together and returns the cluster centres as a new strand set.", + "", + NULL +}; + +ARGUMENTS = { + Argument ("input", "The strands to be merged.").type_file (), + Argument ("output", "The output merged strands").type_file(), + Argument() +}; + + +OPTIONS = { + + Option ("new_num_strands", "The number of strands ('k' in k-means) in the strands will be clustered into.") + + Argument ("new_num_strands", "The number of strands ('k' in k-means) in the strands will be clustered into.").type_integer (1, 1000, 20), + + Option ("save_clusters", "Save the generated clusters as seperate Strand sets in the directory provided.") + + Argument ("save_clusters", ""), + +//Consult the KML documentation for the following options. + + Option ("stages", "The number of stages the k-means clustering is run for.") + + Argument ("stages", "The number of stages the k-means clustering is run for.").type_integer (1, 1000, 20), + + Option ("max_accum_RDL","") + + Argument ("max_accum_RDL").type_float (0.0, 1.0, 0.1), + + Option ("min_accum_RDL","") + + Argument ("min_accum_RDL").type_float (0.0, 1.0, 0.1), + + Option ("max_run_stages","") + + Argument ("max_run_stages").type_integer (1, 100, 3), + + Option ("init_prob_acceptance","") + + Argument ("init_prob_acceptance").type_float (0.0, 1.0, 0.1), + + Option ("temp_run_length","") + + Argument ("temp_run_length").type_integer (1, 100, 10), + + Option ("temp_reduc_factor","") + + Argument ("temp_reduc_factor").type_float (0.0, 1.0, 0.95), + + Option ("num_points", "The number of points that will be generated along the strand location") + + Argument ("points").type_integer (1, 2000, 100), + + Option ("degree", "The degree of the Strand coefficients used to describe the strands") + + Argument ("degree").type_integer (1, 200, 3), + + +Option() }; + + +void printSummary( // print final summary + const KMlocal& theAlg, // the algorithm + const KMdata& dataPts, // the points + KMfilterCenters& ctrs); // the centers + +//void printPt( // print a point +// ostream& out, // output stream +// const KMpoint& p, +// size_t dim); // the point + + +EXECUTE { + + std::string input_location = argument[0]; + std::string output_location = argument[1]; + + + size_t new_num_strands = 20; + bool save_clusters = false; + std::string cluster_location = ""; + size_t num_stages = 100; + double max_accum_RDL = 0.1; + double min_accum_RDL = 0.1; + int max_run_stages = 3; + double init_prob_acceptance = 0.5; + int temp_run_length = 10; + double temp_reduc_factor = 0.95; + size_t degree = 0; + size_t num_points = 0; + + Options opt = get_options("new_num_strands"); + if (opt.size()) + new_num_strands = opt[0][0]; + + opt = get_options("cluster_location"); + if (opt.size()) { + save_clusters = true; + cluster_location = opt[0][0].c_str(); + } + + opt = get_options("num_stages"); + if (opt.size()) + num_stages = opt[0][0]; + + opt = get_options("max_accum_RDL"); + if (opt.size()) + max_accum_RDL = opt[0][0]; + + opt = get_options("min_accum_RDL"); + if (opt.size()) + min_accum_RDL = opt[0][0]; + + opt = get_options("max_run_stages"); + if (opt.size()) + max_run_stages = opt[0][0]; + + opt = get_options("init_prob_acceptance"); + if (opt.size()) + init_prob_acceptance = opt[0][0]; + + opt = get_options("temp_run_length"); + if (opt.size()) + temp_run_length = opt[0][0]; + + opt = get_options("temp_reduc_factor"); + if (opt.size()) + temp_reduc_factor = opt[0][0]; + + opt = get_options("num_points"); + if (opt.size()) + num_points = opt[0][0]; + + opt = get_options("degree"); + if (opt.size()) + degree = opt[0][0]; + + + Fibre::Strand::Set input_strands(input_location, degree); + + if (new_num_strands >= input_strands.size()) + throw Exception("New number of strands (" + str(new_num_strands) + ") must be less than the original number of strands (" + str(input_strands.size()) + ")"); + + + KMterm term(num_stages, 0, 0, 0, // run for 100 stages + min_accum_RDL, // min consec RDL + max_accum_RDL, // min accum RDL + max_run_stages, // max run stages + init_prob_acceptance, // init. prob. of acceptance + temp_run_length, // temp. run length + temp_reduc_factor); // temp. reduction factor + + + +//-------------------------// +// k-means cluster strands +//-------------------------// + + degree = input_strands[0].degree(); + + int ptDim = degree * 3; // dimension + + KMdata dataPts(ptDim, input_strands.size()); // allocate data storage + + for (size_t strand_i = 0; strand_i < input_strands.size(); strand_i++) { + for (size_t degree_i = 0; degree_i < input_strands[strand_i].degree(); degree_i++) { + dataPts[strand_i][degree_i * 3 + X] = input_strands[strand_i][degree_i][X]; + dataPts[strand_i][degree_i * 3 + Y] = input_strands[strand_i][degree_i][Y]; + dataPts[strand_i][degree_i * 3 + Z] = input_strands[strand_i][degree_i][Z]; + } + } + + + + dataPts.buildKcTree(); // build filtering structure + + KMfilterCenters ctrs(new_num_strands, dataPts); // allocate centers +// +// KMlocalLloyds kmLloyds(ctrs, term); // repeated Lloyd's +// ctrs = kmLloyds.execute(); // execute +// +// KMlocalSwap kmSwap(ctrs, term); // Swap heuristic +// ctrs = kmSwap.execute(); +// +// KMlocalEZ_Hybrid kmEZ_Hybrid(ctrs, term); // EZ-Hybrid heuristic +// ctrs = kmEZ_Hybrid.execute(); + + KMlocalHybrid kmHybrid(ctrs, term); // Hybrid heuristic + ctrs = kmHybrid.execute(); + +//--------------------------// +// Get cluster information +//--------------------------// + + + KMctrIdxArray closeCtr = new KMctrIdx[dataPts.getNPts()]; + double* sqDist = new double[dataPts.getNPts()]; + ctrs.getAssignments(closeCtr, sqDist); + + + + +//------------------------------// +// Print results of clustering +//------------------------------// + + for (int ctr_i = 0; ctr_i < ctrs.getK(); ctr_i++) { + + std::cout << "Centre: " << ctr_i << " ["; + + for (int pt_i = 0; pt_i < dataPts.getNPts(); pt_i++) { + if (closeCtr[pt_i] == ctr_i) + std::cout << pt_i << ","; + } + + std::cout << "] - ["; + + for (int pt_i = 0; pt_i < dataPts.getNPts(); pt_i++) { + if (closeCtr[pt_i] == ctr_i) + std::cout << setprecision(2) << sqDist[pt_i] << ","; + } + + std::cout << "]"; + + std::cout << std::endl; + } + + +//-----------------------------------// +// Save centre points as new strands +//-----------------------------------// + + Fibre::Strand::Set output_strands(input_strands.get_extend_props()); + + for (size_t ctr_i = 0; ctr_i < new_num_strands; ctr_i++) { + + Fibre::Strand strand(degree); + + for (size_t degree_i = 0; degree_i < input_strands[0].degree(); degree_i++) { + for (size_t dim_i = 0; dim_i < 3; dim_i++) + strand[degree_i][dim_i] = ctrs[ctr_i][degree_i * 3 + dim_i]; + } + + output_strands.push_back(strand); + + } + + output_strands.save(output_location, num_points); + + + +//----------------------------------------------// +// Save clusters in separate files if required +//----------------------------------------------// + + + if (save_clusters) { + + size_t num_cluster_dec_places = num_dec_places(new_num_strands); + + std::vector clusters; + + for (size_t ctr_i = 0; ctr_i < new_num_strands; ctr_i++) + clusters.push_back(Fibre::Strand::Set()); + + + for (size_t strand_i = 0; strand_i < input_strands.size(); strand_i++) + clusters[closeCtr[strand_i]].push_back(input_strands[strand_i]); + + + for (size_t ctr_i = 0; ctr_i < new_num_strands; ctr_i++) + clusters[ctr_i].save(File::join(cluster_location, "cluster_" + str(ctr_i, num_cluster_dec_places) + "." + Fibre::Strand::FILE_EXTENSION)); + + + } + + delete [] closeCtr; + delete [] sqDist; + + +} + + + + + + + +void printPt(ostream& out, const KMpoint& p, int dim) +{ + out << "(" << p[0]; + for (int i = 1; i < dim; i++) { + out << ", " << p[i]; + } + out << ")\n"; +} + +//------------------------------------------------------------------------ +// Print summary of execution +//------------------------------------------------------------------------ +void printSummary( + const KMlocal& theAlg, // the algorithm + const KMdata& dataPts, // the points + KMfilterCenters& ctrs) // the centers +{ + cout << "Number of stages: " << theAlg.getTotalStages() << "\n"; + cout << "Average distortion: " << + ctrs.getDist(false)/double(ctrs.getNPts()) << "\n"; + // print final center points + cout << "(Final Center Points:\n"; + ctrs.print(); + cout << ")\n"; + // get/print final cluster assignments + KMctrIdxArray closeCtr = new KMctrIdx[dataPts.getNPts()]; + double* sqDist = new double[dataPts.getNPts()]; + ctrs.getAssignments(closeCtr, sqDist); + + *kmOut << "(Cluster assignments:\n" + << " Point Center Squared Dist\n" + << " ----- ------ ------------\n"; + for (int i = 0; i < dataPts.getNPts(); i++) { + *kmOut << " " << setw(5) << i + << " " << setw(5) << closeCtr[i] + << " " << setw(10) << sqDist[i] + << "\n"; + } + *kmOut << ")\n"; + delete [] closeCtr; + delete [] sqDist; +} diff --git a/cmd/combine_fibres.cpp b/cmd/combine_fibres.cpp new file mode 100644 index 0000000..9ba6e59 --- /dev/null +++ b/cmd/combine_fibres.cpp @@ -0,0 +1,170 @@ +/* + Copyright 2009 Brain Research Institute, Melbourne, Australia + + Written by Thomas G. Close, 04/03/2009. + + This file is part of Bayesian Tractlet Sampling (BTS). + + BTS is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + BTS is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with BTS. If not, see . + +*/ + +#include "bts/cmd.h" + + +#include "bts/common.h" + + +#include "progressbar.h" + +#include "bts/fibre/strand/set.h" +#include "bts/fibre/track/set.h" +#include "bts/fibre/tractlet/set.h" + + + + +#include "bts/inline_functions.h" + +using namespace BTS; + +SET_VERSION_DEFAULT; +SET_AUTHOR ("Thomas G. Close"); +SET_COPYRIGHT (NULL); + +DESCRIPTION = { + "Merge multiple fibres files into one file.", + "", + NULL +}; + +ARGUMENTS = { + Argument ("input", "The input strands to be merged into the output file.").allow_multiple().type_file (), + Argument ("output", "The merged strands file in BTS format").type_file(), + Argument() +}; + + +OPTIONS = { + +Option() }; + + +template void combine_fibres(const std::vector& input_locations, const std::string& output_location, MR::ProgressBar& progress_bar); + +template void add_fibres(typename T::Writer& writer, const std::string& location, MR::ProgressBar& progress_bar); + + +EXECUTE { + + + std::vector input_locations; + + if (!argument.size()) + throw Exception ("No input_locations provided."); + + for (size_t arg_i = 0; arg_i < argument.size()-1; arg_i++) + input_locations.push_back(argument[arg_i]); + + std::string output_location = argument.back(); + + MR::ProgressBar progress_bar ("Combining fibres ..."); + + + + if (File::has_extension(output_location)) { + + combine_fibres(input_locations,output_location, progress_bar); + + } else if (File::has_extension(output_location)) { + + combine_fibres(input_locations,output_location, progress_bar); + + } else if (File::has_extension(output_location)) { + + combine_fibres(input_locations,output_location, progress_bar); + + } else if (File::has_extension(output_location)) { + + combine_fibres(input_locations,output_location, progress_bar); + + } else if (File::has_extension(output_location)) { + + combine_fibres(input_locations,output_location, progress_bar); + + } else if (File::has_extension(output_location)) { + + combine_fibres(input_locations,output_location, progress_bar); + + } else + throw Exception ("Unknown file extension in output file " + output_location + "."); + + + //MR::ProgressBar::done(); + +} + + +template void combine_fibres(const std::vector& input_locations, const std::string& output_location, MR::ProgressBar& progress_bar) { + + + std::map properties; + std::vector set_header, elem_header; + + typename T::Reader sneak_peek_reader(input_locations[0]); + + sneak_peek_reader.close(); + + typename T::Writer writer (output_location, sneak_peek_reader); + + for (typename std::vector::const_iterator input_it = input_locations.begin(); input_it != input_locations.end(); ++input_it) + add_fibres(writer, *input_it, progress_bar); + + +} + + +template void add_fibres (typename T::Writer& writer, const std::string& location, MR::ProgressBar& progress_bar) { + + + //If location is directory recursively enter and add all + if (File::is_dir(location)) { + + std::vector filenames = File::list_filenames(location, "", T::FILE_EXTENSION); + + for (size_t filename_i = 0; filename_i < filenames.size(); filename_i++) + add_fibres(writer, File::join(location,filenames[filename_i]), progress_bar); + + } else { + + if (!File::has_extension(location)) + throw Exception ("Incompatible file extension found at " + location + "."); + + std::map properties; + std::vector set_header, elem_header; + + typename T::Reader reader(location); + + T fibre; + std::map row; + + while (reader.next(fibre,row)) + writer.append(fibre,row); + + + progress_bar++; + + } + +} diff --git a/cmd/display_fibres.cpp b/cmd/display_fibres.cpp new file mode 100644 index 0000000..4ccebd3 --- /dev/null +++ b/cmd/display_fibres.cpp @@ -0,0 +1,238 @@ +/* + Copyright 2009 Brain Research Institute, Melbourne, Australia + + Written by Thomas G. Close, 04/03/2009. + + This file is part of Bayesian Tractlet Sampling (BTS). + + BTS is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + BTS is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with BTS. If not, see . + + */ + + +#include "bts/cmd.h" + +#include "bts/common.h" + + +#include "bts/fibre/strand/set.h" + + +#include "bts/fibre/strand/set.h" +#include "bts/fibre/track/set.h" +#include "bts/fibre/tractlet/set.h" +#include "bts/fibre/tractlet/section.h" +#include "bts/fibre/base/set_reader.h" +#include "bts/fibre/base/set_writer.h" + + +#include "bts/inline_functions.h" + +using namespace BTS; + +SET_VERSION_DEFAULT; +SET_AUTHOR ("Thomas G. Close"); +SET_COPYRIGHT (NULL); + +DESCRIPTION = { + "Print strands to screen", + "", + NULL +}; + +ARGUMENTS = { + Argument ("input", "The strands to be displayed.").allow_multiple().type_file (), + Argument() +}; + + +OPTIONS = { + +Option() }; + + + +EXECUTE { + + + for (size_t arg_i = 0; arg_i < argument.size(); ++arg_i) { + + std::string input_location = argument[arg_i]; + + if (input_location.at(input_location.length()-1) == 'x') + continue; + + if (File::has_extension(input_location)) { + + Fibre::Strand::Set s_set(input_location); + + std::cout << "\n\n\n**************************************\n"; + std::cout << "Strands at: '" << input_location << "'.\n"; + std::cout << "**************************************\n" << std::endl; + + std::cout << s_set; + + } else if (File::has_extension(input_location)) { + + Fibre::Track::Set k_set(input_location); + + std::cout << "\n\n\n**************************************\n"; + std::cout << "Tracks at: '" << input_location << "'.\n"; + std::cout << "**************************************\n" << std::endl; + + std::cout << k_set; + + } else if (File::has_extension(input_location)) { + + Fibre::Tractlet::Set t_set(input_location); + + std::cout << "\n\n\n**************************************\n"; + std::cout << "Tractlets at: '" << input_location << "'.\n"; + std::cout << "**************************************\n" << std::endl; + + std::cout << t_set; + + } else if (File::has_extension(input_location)) { + + Fibre::Strand::Set::Reader reader(input_location); + + Fibre::Strand::Set s_set; + + std::cout << "\n\n\n**************************************\n"; + std::cout << "Strand Sets at: '" << input_location << "'.\n"; + std::cout << "**************************************\n" << std::endl; + + + size_t count = 0; + + while (reader.next(s_set)) { + + std::cout << "**** STRAND SET " << str(count++) << " ***" << std::endl; + + std::map extend_props = s_set.get_extend_props(); + + for (std::map::iterator prop_it = extend_props.begin(); prop_it != extend_props.end(); ++prop_it) + std::cout << prop_it->first << ": " << prop_it->second << ", "; + + std::cout << std::endl << std::endl; + + + std::cout << std::endl << s_set << std::endl << std::endl; + + } + + } else if (File::has_extension(input_location)) { + + Fibre::Tractlet::Set::Reader reader(input_location); + + Fibre::Tractlet::Set t_set; + + std::cout << "\n\n\n**************************************\n"; + std::cout << "Tractlet Sets at: '" << input_location << "'.\n"; + std::cout << "**************************************\n" << std::endl; + + size_t count = 0; + + std::map prop_row; + + while (reader.next(t_set)) { + + std::cout << "**** TRACTLET SET " << str(count++) << " ***" << std::endl; + + std::cout << std::endl << std::endl; + + std::map extend_props = t_set.get_extend_props(); + + for (std::map::iterator prop_it = extend_props.begin(); prop_it != extend_props.end(); ++prop_it) + std::cout << prop_it->first << ": " << prop_it->second << ", "; + + std::cout << std::endl << std::endl; + + std::cout << t_set << std::endl << std::endl; + + } + + } else if (File::has_extension(input_location)) { + + Fibre::Track::Set::Reader reader(input_location); + + Fibre::Track::Set k_set; + + std::cout << "\n\n\n**************************************\n"; + std::cout << "Track Sets at: '" << input_location << "'.\n"; + std::cout << "**************************************\n" << std::endl; + + size_t count = 0; + + std::map prop_row; + + while (reader.next(k_set)) { + + std::cout << "**** TRACK SET " << str(count++) << " ***" << std::endl; + + std::cout << std::endl << std::endl; + + std::map extend_props = k_set.get_extend_props(); + + for (std::map::iterator prop_it = extend_props.begin(); prop_it != extend_props.end(); ++prop_it) + std::cout << prop_it->first << ": " << prop_it->second << ", "; + + std::cout << std::endl << std::endl; + + std::cout << k_set << std::endl << std::endl; + + } + + } else if (File::has_extension(input_location)) { + + Fibre::Strand::Section::Reader reader(input_location); + + Fibre::Strand::Section sec; + + std::cout << "\n\n\n**************************************\n"; + std::cout << "Strand Sections at: '" << input_location << "'.\n"; + std::cout << "**************************************\n" << std::endl; + + while (reader.next(sec)) { + + std::cout << sec << std::endl; + + } + + } else if (File::has_extension(input_location)) { + + Fibre::Tractlet::Section::Reader reader(input_location); + + Fibre::Tractlet::Section sec; + + std::cout << "\n\n\n**************************************\n"; + std::cout << "Tractlet Sections at: '" << input_location << "'.\n"; + std::cout << "**************************************\n" << std::endl; + + while (reader.next(sec)) { + + std::cout << sec << std::endl; + + } + + } else { + if (argument.size() == 1) + throw Exception ("Unrecognised file extension, \"" + File::extension(input_location) + "\", for input file " + input_location + "."); + else + std::cout << "Skipped '" << input_location << "'." << std::endl; + } + } + + +} diff --git a/cmd/dummy.cpp b/cmd/dummy.cpp new file mode 100644 index 0000000..3a49594 --- /dev/null +++ b/cmd/dummy.cpp @@ -0,0 +1,84 @@ +/* + Copyright 2009 Brain Research Institute, Melbourne, Australia + + Written by Thomas G. Close, 04/03/2009. + + This file is part of Bayesian Tractlet Sampling (BTS). + + BTS is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + BTS is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with BTS. If not, see . + + */ + + +#include "bts/cmd.h" + +#include "bts/common.h" + + +#include "bts/fibre/strand/set.h" + + +#include "bts/fibre/strand/set.h" +#include "bts/fibre/track/set.h" +#include "bts/fibre/tractlet/set.h" +#include "bts/fibre/tractlet/section.h" +#include "bts/fibre/base/set_reader.h" +#include "bts/fibre/base/set_writer.h" + + +#include "bts/inline_functions.h" + +using namespace BTS; + +SET_VERSION_DEFAULT; +SET_AUTHOR ("Thomas G. Close"); +SET_COPYRIGHT (NULL); + +DESCRIPTION = { + "Print strands to screen", + "", + NULL +}; + +ARGUMENTS = { + Argument() +}; + + +OPTIONS = { + +Option() }; + + + +EXECUTE { + + Fibre::Tractlet t(3); + + t(0,0) = Coord(0,0,0); + t(0,1) = Coord(.25,0,0); + t(0,2) = Coord(0,0,0); + t(1,0) = Coord(0,0.1,0); + t(1,1) = Coord(0,0,0); + t(1,2) = Coord(0,0,0); + t(2,0) = Coord(0,0,0.1); + t(2,1) = Coord(0,0,0); + t(2,2) = Coord(0,0,0); + + std::vector areas = t.cross_sectional_areas(100); + + for (size_t i = 0; i < areas.size(); ++i) + std::cout << areas[i] << std::endl; + +} diff --git a/cmd/echo_parameters.cpp b/cmd/echo_parameters.cpp new file mode 100644 index 0000000..6938a8e --- /dev/null +++ b/cmd/echo_parameters.cpp @@ -0,0 +1,1278 @@ +/* + Copyright 2008 Brain Research Institute, Melbourne, Australia + + Written by Thomas G Close, Jul 6, 2010. + + This file is part of MRtrix. + + MRtrix is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + MRtrix is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with MRtrix. If not, see . + +*/ +/* + +#include "bts/cmd.h" + +#include "bts/common.h" +#include "bts/fibre/tractlet/set.h" +#include "bts/fibre/strand/set.h" +#include "bts/image/observed/buffer.h" + +#include "bts/mcmc/riemannian.h" +#include "bts/mcmc/hamiltonian.h" +#include "bts/mcmc/metropolis.h" +#include "bts/analysis/scan.h" +#include "bts/analysis/gradient_tester.h" +#include "bts/image/expected/buffer.h" + +#include "bts/prob/likelihood.h" + +#include "bts/prob/prior.h" + + + + + +#include "bts/mcmc/proposal/momentum.h" +#include "bts/mcmc/proposal/distribution.h" +#include "bts/mcmc/proposal/distribution/gaussian.h" + +#include "bts/fibre/tractlet/set/momentum.h" +#include "bts/fibre/strand/set/momentum.h" +#include "bts/fibre/strand/set/walker.h" + +#include "bts/fibre/tractlet/set/walker.h" + + +#include "image/header.h" +#include "bts/image/observed/buffer.h" + + +#include "bts/inline_functions.h" + + +using namespace BTS; + + +void check_parameter(std::map& echo_options, + const std::string& key, + const std::string& default_value); + +void check_parameters_group ( std::map& echo_options, + const std::string& name, + std::vector< std::pair > key_default_value_pairs, + bool default_active); + + +template void load_and_check_parameters(std::map& echo_options, + const std::string& key, + const std::string& default_value_location = ""); + +void load_and_check_state_parameters ( std::map& echo_options, + const std::string& key, + const std::vector& default_value_locations = std::vector(3)); + +bool is_riemannian(const std::string& method) + { return method == "riemannian"; } + +bool is_hamiltonian(const std::string& method) + { return method == "hamiltonian"; } + +bool is_metropolis(const std::string& method) + { return method == "metropolis"; } + +bool is_scan(const std::string& method) + { return method == "scan" || method == "scan_batch"; } + +bool is_gradient_test(const std::string& method) + { return method == "test_gradient"; } + +bool is_mcmc(const std::string& method) + { return is_metropolis(method) || is_hamiltonian(method) || is_riemannian(method); } + +bool is_analysis(const std::string& method) + { return is_scan(method) || is_gradient_test(method); } + + + +SET_VERSION_DEFAULT; +SET_AUTHOR ("Thomas G. Close"); +SET_COPYRIGHT (NULL); + +DESCRIPTION = { + "Echo Parameters", + "Determine which parameters in a previous run need to be set to exactly copy the run", + NULL +}; + +ARGUMENTS = { + Argument ("template_location", "Template location", "Location of template file, from which to copy the parameters.").type_file (), + + Argument() +}; + + +OPTIONS = { + + Option ("method", "The output method", "The output method to print if not the original method.") + + Argument ("method", ""), + + Option ("output_location", "Output location", "Override the location of the output.") + + Argument ("output_location", ""), + + Option ("state_location", "New state location", "Override the location of the state.") + + Argument ("state_location", ""), + + Option ("seed_copy", "Copy seed", "Also copy the seed."), + + Option ("last_place_output", "Put the output location last", "Put the output location last for easy access to change the name."), + + Option ("origin_location", "New origin location", "Override the location of the origin.") + + Argument ("origin_location", ""), + + Option ("axis1_location", "Axis 1 location", "Pass the location for axis1 for use in mcmc -> scan echo's.") + + Argument ("axis1_location", ""), + + Option ("axis2_location", "Axis 2 location", "Pass the location for axis2 for use in mcmc -> scan echo's.") + + Argument ("axis2_location", ""), + + Option ("axis3_location", "Axis 3 location", "Pass the location for axis3 for use in mcmc -> scan echo's.") + + Argument ("axis3_location", ""), +Option() }; + + +EXECUTE { + + + std::vector echo_arguments; + std::map echo_options; + + + + + + +//------------------------------// +// Load the template echo_options. // +//------------------------------// + + std::string template_location = argument[0]; + + + if (File::has_extension(template_location)) { + + Fibre::Strand::Set::Reader reader(template_location); + + echo_options = reader.get_extend_props(); + + } else if (File::has_extension(template_location)) { + + Fibre::Tractlet::Set::Reader reader(template_location); + + echo_options = reader.get_extend_props(); + + } else if (File::has_extension(template_location)) { + + MR::Image::Header header; + + header.open(template_location); + + echo_options = header; + + } else + throw Exception ("Unrecognised extension '" + File::extension(template_location) + "'."); + + + + + //-----------------------// + // Legacy conversions. // + //-----------------------// + + if (echo_options.count("origin_state")) { + echo_options["origin"] = echo_options["origin_state"]; + echo_options.erase("origin_state"); + } + + if (echo_options.count("momen_rand_scales")) + echo_options.erase("momen_rand_scales"); + + if (echo_options.count("momen_step_sizes")) { + echo_options["momen_step"] = echo_options["momen_step_sizes"]; + echo_options.erase("momen_step_sizes"); + } + + + if (echo_options.count("leapfrog")) { + echo_options["momen_step"] = echo_options["leapfrog"]; + echo_options.erase("leapfrog"); + } + + echo_options.erase("momen_over_rand_scale"); + echo_options.erase("momen_rand_scales_location"); + echo_options.erase("momen_over_randomize"); + echo_options.erase("momen_randomize_location"); + echo_options.erase("momen_randomize"); + + if (echo_options.count("momen_over_step_size")) { + echo_options["momen_step_scale"] = echo_options["momen_over_step_size"]; + echo_options.erase("momen_over_step_size"); + } + + + if (echo_options.count("momen_step_sizes_location")) { + echo_options["momen_step_location"] = echo_options["momen_step_sizes_location"]; + echo_options.erase("momen_step_sizes_location"); + } + + + if (echo_options.count("leapfrog_scale")) { + echo_options["momen_step_scale"] = echo_options["leapfrog_scale"]; + echo_options.erase("leapfrog_scale"); + } + + + if (echo_options.count("leapfrog_location")) { + echo_options["momen_step_location"] = echo_options["leapfrog_location"]; + echo_options.erase("leapfrog_location"); + } + + + if (echo_options.count("reference_image")) { + echo_options["obs_image"] = echo_options["reference_image"]; + echo_options.erase("reference_image"); + } + + if (echo_options.count("ref_image")) { + echo_options["obs_image"] = echo_options["ref_image"]; + echo_options.erase("ref_image"); + } + +//---------------------------------------// +// Set the template and output method. // +//---------------------------------------// + + std::string loaded_method; + loaded_method = echo_options["method"]; + + + //Check for legacy names for methods. + if (loaded_method == "Hamiltonian") + loaded_method = "hamiltonian"; + + else if (loaded_method == "Metropolis Hastings") + loaded_method = "metropolis"; + + else if (loaded_method == "Scan") + loaded_method = "scan"; + + else if (loaded_method == "Container Test") + loaded_method = "test_gradient"; + + + std::string method = loaded_method; + + //Get the method. + Options opt = get_options("method"); + if (opt.size()) + method = opt[0][0]; + + + echo_options.erase("method"); + + + +//----------------------------// +// Get the Output location. // +//----------------------------// + + std::string output_location; + + //If it is the same method, default to overide previous file. + if (loaded_method == method) + output_location = template_location; + else + output_location = "__output_location_place_holder__"; + + opt = get_options("output_location"); + if (opt.size()) + output_location = opt[0][0]; + + + +//------------------------------------// +// Get the Observed Image location. // +//------------------------------------// + + std::string obs_image_location; + std::string origin_location; + + if (echo_options.count("obs_image")) { + obs_image_location = echo_options["obs_image"]; + echo_options.erase("obs_image"); + + } else + obs_image_location = "__obs_image_place_holder__"; + + + //Load the observed image to check the auto generated parameters. + Image::Observed::Buffer obs_image; + + if (obs_image_location != "__obs_image_place_holder__") { + + try { + + obs_image.load(obs_image_location); + origin_location = obs_image.properties()["state_location"]; + + } catch(...) { + + std::cout << "Warning!! Could not load image from observed image location." << std::endl; + + } + + } + + +//---------------------------// +// Get the state location. // +//---------------------------// + + std::string state_location, state_key; + bool overide_state_location = false; + + if (is_mcmc(loaded_method)) + state_key = "initial_state"; + else if (is_scan(loaded_method)) + state_key = "origin"; + + opt = get_options("overide_state_location"); + if (opt.size()) { + state_location = opt[0][0]; + overide_state_location = true; + echo_options.erase(state_key); + echo_options.erase(state_key + "_location"); + } else { + + state_location = echo_options[state_key + "_location"]; + + if (File::has_extension(state_location)) + load_and_check_parameters(echo_options, state_key); + else if (File::has_extension(state_location)) + load_and_check_parameters(echo_options, state_key); + + } + + +//------------------------------------// +// Set the random seed if required. // +//------------------------------------// + + bool seed_copy = false; + opt = get_options("seed_copy"); + if (opt.size()) + seed_copy = true; + + + if (echo_options.count("random_seed")) { + echo_options["seed"] = echo_options["random_seed"]; + echo_options.erase("random_seed"); + } + + if (seed_copy) { + + if (!echo_options.count("seed")) + echo_options["seed"] = "__seed_place_holder__"; + + } else + echo_options.erase("seed"); + + +//----------------------------------------------// +// Get the remaining options for this program // +//----------------------------------------------// + + bool set_output_last = 0; + std::string axis1_location; + std::string axis2_location; + std::string axis3_location; + + opt = get_options("last_place_output"); + if (opt.size()) + set_output_last = 1; + + opt = get_options("origin_location"); + if (opt.size()) + origin_location = opt[0][0]; + + opt = get_options("axis1_location"); + if (opt.size()) + axis1_location = opt[0][0]; + + opt = get_options("axis2_location"); + if (opt.size()) + axis2_location = opt[0][0]; + + opt = get_options("axis3_location"); + if (opt.size()) + axis3_location = opt[0][0]; +//-----------------------------------// +// Erase non-parameter properties. // +//-----------------------------------// + + echo_options.erase("datetime"); + echo_options.erase("count"); + echo_options.erase("total_count"); + echo_options.erase("method"); + echo_options.erase("software version"); + + +//-----------------------------------// +// Check base density parameter. // +//-----------------------------------// + + if (obs_image_location != "__obs_image_place_holder__" && state_location != "") { + + MR::Math::Matrix diff_encodings; + Image::Expected::Buffer::Buffer* exp_image; + MR::Math::Vector diff_response_SH; + bool can_check_base_intensity = true; + + + bool load_encodings = false; + + if (echo_options.count("diff_encodings")) + load_encodings = echo_options["diff_encodings"] == "from observed image" || echo_options["diff_encodings"] == "from reference image"; + else if (echo_options.count("diff_encodings_location")) + load_encodings = echo_options["diff_encodings_location"] == "from observed image" || echo_options["diff_encodings_location"] == "from reference image"; + + if (load_encodings) { + + try { + + MR::Image::Header header; + + header.open(obs_image_location); + + //If gradient scheme is included in reference image header, use that instead of default (NB: Will override any gradients passed to '-diff_encodings' option). + diff_encodings = header.get_DW_scheme(); + + } catch(...) { + + std::cout << "Warning!! Could not load image from observed image location." << std::endl; + + } + + } else if (echo_options.count("diff_encodings_location")) { + + diff_encodings.load(echo_options["diff_encodings_location"]); + + } else + can_check_base_intensity = false; + + + Diffusion::Model diffusion_model; + bool diff_isotropic = false; + + if (echo_options.count("diff_isotropic")) + diff_isotropic = to(echo_options["diff_isotropic"]); + + if (echo_options.count("diff_response_SH_location")) { + + try { + + diff_response_SH.load(echo_options["diff_response_SH_location"]); + + diffusion_model = Diffusion::Model (diff_encodings, diff_response_SH, diff_isotropic); + + } catch (Exception e) { + + std::cout << "WARNING!! Could not load diffusion responses from location '" << echo_options["diff_response_SH_location"] << "'." << std::endl; + can_check_base_intensity = false; + } + + } else if (echo_options.count("diff_adc") && echo_options.count("diff_fa") && echo_options.count("diff_b_value")) { + + diffusion_model = Diffusion::Model (diff_encodings, + to(echo_options["diff_adc"]), + to(echo_options["diff_fa"]), + diff_isotropic); + + } else + can_check_base_intensity = false; + + + if (can_check_base_intensity && state_location.size()) { + + + exp_image = Image::Expected::Buffer::Buffer::factory( echo_options["exp_type"], + obs_image, + diffusion_model, + to(echo_options["exp_num_length_sections"]), + to(echo_options["exp_num_width_sections"]), + to(echo_options["exp_interp_extent"]), + to(echo_options["exp_enforce_bounds"]), + to(echo_options["exp_half_width"])); + + double calc_exp_base_intensity = exp_image->base_intensity_default(obs_image, state_location); + + check_parameter(echo_options, "exp_base_intensity", str(calc_exp_base_intensity)); + + } + + } + +//-----------------------------// +// Check general parameters. // +//-----------------------------// + + //General image parameters. + check_parameter(echo_options, "img_dims", str(Image::Expected::Buffer::DIMS_DEFAULT)); + check_parameter(echo_options, "img_vox_lengths", str(Image::Expected::Buffer::VOX_LENGTHS_DEFAULT)); + check_parameter(echo_options, "img_offsets", str(- obs_image.vox_lengths() * obs_image.dims() * 0.5)); + + //Diffusion response parameters. + check_parameter(echo_options, "diff_encodings_location", "from observed image"); + check_parameter(echo_options, "diff_encodings_location", "from reference image"); + check_parameter(echo_options, "diff_isotropic", str(Diffusion::Model::ISOTROPIC_DEFAULT)); + + + if (echo_options.count("diff_response_SH_location")) + load_and_check_parameters< MR::Math::Vector >(echo_options, "diff_response_SH", ""); + else { + check_parameter(echo_options, "diff_adc", str(Diffusion::Model::ADC_DEFAULT)); + check_parameter(echo_options, "diff_fa", str(Diffusion::Model::FA_DEFAULT)); + } + + //Expected image parameters. + check_parameter(echo_options, "exp_num_length_sections", str(Image::Expected::Buffer::NUM_LENGTH_SECTIONS_DEFAULT)); + check_parameter(echo_options, "exp_num_width_sections", str(Image::Expected::Buffer::NUM_WIDTH_SECTIONS_DEFAULT)); + check_parameter(echo_options, "exp_type", str(Image::Expected::Buffer::TYPE_DEFAULT)); + check_parameter(echo_options, "exp_interp_extent", str(Image::Expected::Buffer::INTERP_EXTENT_DEFAULT)); + check_parameter(echo_options, "exp_enforce_bounds", str(Image::Expected::Buffer::ENFORCE_BOUNDS_DEFAULT)); + check_parameter(echo_options, "exp_half_width", str(Image::Expected::Buffer::HALF_WIDTH_DEFAULT)); + + + + //Legacy conversion. + if (echo_options["like_type"] == "strong") + echo_options["like_type"] = "gaussian"; + + //Likelihood parameters. + check_parameter(echo_options, "like_snr", str(Prob::Likelihood::SNR_DEFAULT)); + check_parameter(echo_options, "like_type", str(Prob::Likelihood::TYPE_DEFAULT)); + check_parameter(echo_options, "like_b0_include", str(Prob::Likelihood::B0_INCLUDE_DEFAULT)); + check_parameter(echo_options, "like_outside_scale", str(Prob::Likelihood::OUTSIDE_SCALE_DEFAULT)); + + //Proposal parameters. + if (File::has_extension(state_location)) { + check_parameter(echo_options, "walk_type", str(Fibre::Strand::Set::Walker::TYPE_DEFAULT)); + check_parameter(echo_options, "walk_scale", str(Fibre::Strand::Set::Walker::STEP_SCALE_DEFAULT)); + check_parameter(echo_options, "walk_intens_scale", str(Fibre::Strand::Walker::Constrained::INTENSITY_SCALE_DEFAULT)); + check_parameter(echo_options, "walk_base_intens_scale", str(Fibre::Strand::Set::Walker::Constrained::BASE_INTENSITY_SCALE_DEFAULT)); + } else if (File::has_extension(state_location)) { + check_parameter(echo_options, "walk_type", str(Fibre::Tractlet::Set::Walker::TYPE_DEFAULT)); + check_parameter(echo_options, "walk_scale", str(Fibre::Tractlet::Set::Walker::STEP_SCALE_DEFAULT)); + check_parameter(echo_options, "walk_intens_scale", str(Fibre::Tractlet::Walker::Constrained::INTENSITY_SCALE_DEFAULT)); + check_parameter(echo_options, "walk_base_intens_scale", str(Fibre::Tractlet::Set::Walker::Constrained::BASE_INTENSITY_SCALE_DEFAULT)); + } + + check_parameter(echo_options, "walk_midpoint_scale", str(Fibre::Strand::Walker::Constrained::MIDPOINT_SCALE_DEFAULT)); + check_parameter(echo_options, "walk_endpoint_scale", str(Fibre::Strand::Walker::Constrained::ENDPOINT_SCALE_DEFAULT)); + check_parameter(echo_options, "walk_sheer_scale", str(Fibre::Tractlet::Walker::Constrained::SHEER_SCALE_DEFAULT)); + check_parameter(echo_options, "walk_basewidth_scale", str(Fibre::Tractlet::Walker::Constrained::BASEWIDTH_SCALE_DEFAULT)); + check_parameter(echo_options, "prop_distr_type", str(MCMC::Proposal::Distribution::TYPE_DEFAULT)); + check_parameter(echo_options, "walk_sphere_radius", str(Fibre::Strand::Walker::Constrained::radius_default(obs_image))); + + + std::vector walk_step_sizes_defaults; + walk_step_sizes_defaults.push_back(str(Fibre::Strand::Set::Walker::STEP_LOCATION_DEFAULT)); + walk_step_sizes_defaults.push_back(str(Fibre::Tractlet::Set::Walker::STEP_LOCATION_DEFAULT)); + walk_step_sizes_defaults.push_back(""); + + load_and_check_state_parameters(echo_options, "walk_step", walk_step_sizes_defaults); + + std::vector momen_step_sizes_defaults; + momen_step_sizes_defaults.push_back(str(Fibre::Strand::Set::Momentum::STEP_LOCATION_DEFAULT)); + momen_step_sizes_defaults.push_back(str(Fibre::Tractlet::Set::Momentum::STEP_LOCATION_DEFAULT)); + momen_step_sizes_defaults.push_back(""); + + load_and_check_state_parameters(echo_options, "momen_step", momen_step_sizes_defaults); + + //Prior parameters. + check_parameter(echo_options, "prior_scale", str(Prob::Prior::SCALE_DEFAULT)); + check_parameter(echo_options, "prior_only", str(0)); + + + //-----------------------------------// + // Check general group parameters. // + //-----------------------------------// + + if (echo_options.count("prior_curv_scale")) { + + std::vector< std::pair > key_values; + + key_values.push_back(std::pair ("prior_curv_scale", str(Prob::Prior::Magnitude::SCALE_DEFAULT))); + + check_parameters_group(echo_options, "prior_curv", key_values, Prob::Prior::Magnitude::ACTIVE_DEFAULT); + + + } else if (Prob::Prior::Magnitude::ACTIVE_DEFAULT == Active) + echo_options["prior_curv"] = "0"; + + + if (echo_options.count("prior_sheer_scale")) { + + std::vector< std::pair > key_values; + + key_values.push_back(std::pair ("prior_sheer_scale", str(Prob::Prior::Sheer::SCALE_DEFAULT))); + + check_parameters_group(echo_options, "prior_sheer", key_values, Prob::Prior::Sheer::ACTIVE_DEFAULT); + + + } else if (Prob::Prior::Sheer::ACTIVE_DEFAULT == Active) + echo_options["prior_sheer"] = "0 1"; + + + if (echo_options.count("prior_end_in_sphere_scale")) { + + std::vector< std::pair > key_values; + + key_values.push_back(std::pair ("prior_end_in_sphere_scale", str(Prob::Prior::EndInSphere::SCALE_DEFAULT))); + key_values.push_back(std::pair ("prior_end_in_sphere_radius", str(Prob::Prior::EndInSphere::radius_default(obs_image)))); + + + check_parameters_group(echo_options, "prior_end_in_sphere", key_values, Prob::Prior::EndInSphere::ACTIVE_DEFAULT); + + + } else if (Prob::Prior::EndInSphere::ACTIVE_DEFAULT == Active) + echo_options["prior_end_in_sphere"] = "0 1"; + + + if (echo_options.count("prior_end_out_sphere_scale")) { + + std::vector< std::pair > key_values; + + key_values.push_back(std::pair ("prior_end_out_sphere_scale", str(Prob::Prior::EndOutSphere::SCALE_DEFAULT))); + key_values.push_back(std::pair ("prior_end_out_sphere_sd", str(Prob::Prior::EndOutSphere::STD_DEV_DEFAULT))); + key_values.push_back(std::pair ("prior_end_out_sphere_radius", str(Prob::Prior::EndOutSphere::radius_default(obs_image)))); + + + check_parameters_group(echo_options, "prior_end_out_sphere", key_values, Prob::Prior::EndOutSphere::ACTIVE_DEFAULT); + + + } else if (Prob::Prior::EndOutSphere::ACTIVE_DEFAULT == Active) + echo_options["prior_end_out_sphere"] = "0 1"; + + if (echo_options.count("prior_end_on_sphere_scale")) { + + std::vector< std::pair > key_values; + + key_values.push_back(std::pair ("prior_end_on_sphere_scale", str(Prob::Prior::EndOnSphere::SCALE_DEFAULT))); + key_values.push_back(std::pair ("prior_end_on_sphere_radius", str(Prob::Prior::EndOnSphere::radius_default(obs_image)))); + + + check_parameters_group(echo_options, "prior_end_on_sphere", key_values, Prob::Prior::EndOnSphere::ACTIVE_DEFAULT); + + + } else if (Prob::Prior::EndOnSphere::ACTIVE_DEFAULT == Active) + echo_options["prior_end_on_sphere"] = "0 1"; + + + if (echo_options.count("prior_mid_sphere_scale")) { + + std::vector< std::pair > key_values; + + key_values.push_back(std::pair ("prior_mid_sphere_scale", str(Prob::Prior::MidpointInSphere::SCALE_DEFAULT))); + key_values.push_back(std::pair ("prior_mid_sphere_sd", str(Prob::Prior::MidpointInSphere::STD_DEV_DEFAULT))); + key_values.push_back(std::pair ("prior_mid_sphere_radius", str(Prob::Prior::MidpointInSphere::radius_default(obs_image)))); + + + check_parameters_group(echo_options, "prior_mid_sphere", key_values, Prob::Prior::MidpointInSphere::ACTIVE_DEFAULT); + + + } else if (Prob::Prior::MidpointInSphere::ACTIVE_DEFAULT == Active) + echo_options["prior_mid_sphere"] = "0 1"; + + if (echo_options.count("prior_hook_scale")) { + + std::vector< std::pair > key_values; + + key_values.push_back(std::pair ("prior_hook_scale", str(Prob::Prior::Hook::SCALE_DEFAULT))); + key_values.push_back(std::pair ("prior_mid_cube_sd", str(Prob::Prior::Hook::STD_DEV_DEFAULT))); + key_values.push_back(std::pair ("prior_hook_num_points", str(Prob::Prior::Hook::side_length_default(obs_image)))); + + + check_parameters_group(echo_options, "prior_mid_cube", key_values, Prob::Prior::Hook::ACTIVE_DEFAULT); + + + } else if (Prob::Prior::Hook::ACTIVE_DEFAULT == Active) + echo_options["prior_mid_cube"] = "0 1"; + + + if (echo_options.count("prior_all_scale")) { + + std::vector< std::pair > key_values; + + key_values.push_back(std::pair ("prior_all_scale", str(Prob::Prior::AllInCube::SCALE_DEFAULT))); + key_values.push_back(std::pair ("prior_all_sd", str(Prob::Prior::AllInCube::STD_DEV_DEFAULT))); + key_values.push_back(std::pair ("prior_all_num_length_sections", str(Prob::Prior::AllInCube::NUM_LENGTH_SECTIONS_DEFAULT))); + key_values.push_back(std::pair ("prior_all_num_width_sections", str(Prob::Prior::AllInCube::NUM_WIDTH_SECTIONS_DEFAULT))); + + check_parameters_group(echo_options, "prior_all", key_values, Prob::Prior::Hook::ACTIVE_DEFAULT); + + + } else if (Prob::Prior::Hook::ACTIVE_DEFAULT == Active) + echo_options["prior_all"] = "0 1"; + + + if (echo_options.count("prior_tract_sheer_scale")) { + + std::vector< std::pair > key_values; + + key_values.push_back(std::pair ("prior_tract_sheer_scale", str(Prob::Prior::Sheer::SCALE_DEFAULT))); + + check_parameters_group(echo_options, "prior_tract_sheer", key_values, Prob::Prior::Sheer::ACTIVE_DEFAULT); + + + } else if (Prob::Prior::Sheer::ACTIVE_DEFAULT == Active) + echo_options["prior_tract_sheer"] = "0 1"; + + + if (echo_options.count("prior_prior_tract_mag_scale")) { + + std::vector< std::pair > key_values; + + key_values.push_back(std::pair ("prior_prior_tract_mag_scale", str(Prob::Prior::Magnitude::SCALE_DEFAULT))); + + check_parameters_group(echo_options, "prior_prior_tract_mag", key_values, Prob::Prior::Magnitude::ACTIVE_DEFAULT); + + + } else if (Prob::Prior::Magnitude::ACTIVE_DEFAULT == Active) + echo_options["prior_prior_tract_mag"] = "0 1"; + + + if (echo_options.count("prior_tract_avg_width_scale")) { + + std::vector< std::pair > key_values; + + key_values.push_back(std::pair ("prior_tract_avg_width_scale", str(Prob::Prior::BaseWidth::SCALE_DEFAULT))); + key_values.push_back(std::pair ("prior_tract_avg_width_sd", str(Prob::Prior::BaseWidth::STD_DEV_DEFAULT))); + key_values.push_back(std::pair ("prior_tract_avg_width_mean", str(Prob::Prior::BaseWidth::MEAN_DEFAULT))); + + check_parameters_group(echo_options, "prior_tract_basewidth", key_values, Prob::Prior::BaseWidth::ACTIVE_DEFAULT); + + + } else if (Prob::Prior::BaseWidth::ACTIVE_DEFAULT == Active) + echo_options["prior_tract_basewidth"] = "0 1"; + + + if (echo_options.count("prior_intens_gauss_scale")) { + + std::vector< std::pair > key_values; + + key_values.push_back(std::pair ("prior_intens_gauss_scale", str(Prob::Prior::GaussDensity::SCALE_DEFAULT))); + key_values.push_back(std::pair ("prior_intens_gauss_mean", str(Prob::Prior::GaussDensity::MEAN_DEFAULT))); + + check_parameters_group(echo_options, "prior_intens_gauss", key_values, Prob::Prior::GaussDensity::ACTIVE_DEFAULT); + + + } else if (Prob::Prior::GaussDensity::ACTIVE_DEFAULT == Active) + echo_options["prior_intens_gauss"] = "0 1"; + + + if (echo_options.count("prior_b_intens_gauss_scale")) { + + std::vector< std::pair > key_values; + + key_values.push_back(std::pair ("prior_b_intens_gauss_scale", str(Prob::Prior::BaseIntensity::SCALE_DEFAULT))); + key_values.push_back(std::pair ("prior_b_intens_gauss_sd_frac", str(Prob::Prior::BaseIntensity::STD_DEV_FRACTION_DEFAULT))); + + check_parameters_group(echo_options, "prior_b_intens_gauss", key_values, Prob::Prior::BaseIntensity::ACTIVE_DEFAULT); + + + } else if (Prob::Prior::BaseIntensity::ACTIVE_DEFAULT == Active) + echo_options["prior_b_intens_gauss"] = "0 1"; + + + if (echo_options.count("prior_intens_flattop_scale")) { + + std::vector< std::pair > key_values; + + key_values.push_back(std::pair ("prior_b_intens_flattop_scale", str(Prob::Prior::BaseIntensity::FlatTopQuadratic::SCALE_DEFAULT))); + key_values.push_back(std::pair ("prior_b_intens_flattop_sd", str(Prob::Prior::BaseIntensity::FlatTopQuadratic::STD_DEV_DEFAULT))); + key_values.push_back(std::pair ("prior_b_intens_flattop_low", str(Prob::Prior::BaseIntensity::FlatTopQuadratic::LOW_DEFAULT))); + key_values.push_back(std::pair ("prior_b_intens_flattop_high", str(Prob::Prior::BaseIntensity::FlatTopQuadratic::HIGH_DEFAULT))); + + check_parameters_group(echo_options, "prior_intens_flattop", key_values, Prob::Prior::BaseIntensity::FlatTopQuadratic::ACTIVE_DEFAULT); + + + } else if (Prob::Prior::BaseIntensity::FlatTopQuadratic::ACTIVE_DEFAULT == Active) + echo_options["prior_intens_flattop"] = "0 1"; + + + if (echo_options.count("prior_intens_log_scale")) { + + std::vector< std::pair > key_values; + + key_values.push_back(std::pair ("prior_b_intens_log_scale", str(Prob::Prior::BaseIntensity::Log::SCALE_DEFAULT))); + key_values.push_back(std::pair ("prior_b_intens_log_in_scale", str(Prob::Prior::BaseIntensity::Log::INPUT_SCALE_DEFAULT))); + + check_parameters_group(echo_options, "prior_intens_log", key_values, Prob::Prior::BaseIntensity::Log::ACTIVE_DEFAULT); + + + } else if (Prob::Prior::BaseIntensity::Log::ACTIVE_DEFAULT == Active) + echo_options["prior_intens_log"] = "0 1"; + + //------------------------------// + // Method Specific Paramters. // + //------------------------------// + + + if (is_mcmc(method)) { + + echo_arguments.push_back(obs_image_location); + + if (overide_state_location) { + echo_arguments.push_back(state_location); + echo_options.erase("initial_state"); + echo_options.erase("initial_state_location"); + + } else if (is_mcmc(loaded_method)) { + load_and_check_state_parameters(echo_options, "initial_state"); + echo_arguments.push_back(echo_options["initial_state_location"]); + echo_options.erase("initial_state_location"); + + } else + echo_arguments.push_back("__initial_state_location_place_holder__"); + + } else if (is_mcmc(loaded_method)) { + + echo_options.erase("initial_state"); + echo_options.erase("initial_state_location"); + echo_options.erase("sample_period"); + echo_options.erase("burn_sample_period"); + echo_options.erase("burn_snr"); + + } + + + if (is_analysis(method)) { + + if (obs_image_location != "__obs_image_place_holder__") + echo_options["obs_image"] = obs_image_location; + + } + + //Hamiltonian method + if (is_riemannian(method)) { + + check_parameter(echo_options,"num_samples", str(MCMC::Riemannian::NUM_SAMPLES_DEFAULT)); + check_parameter(echo_options,"num_leapfrog_steps", str(MCMC::Hamiltonian::NUM_LEAPFROG_STEPS_DEFAULT)); + check_parameter(echo_options,"num_newton_steps", str(MCMC::Riemannian::NUM_NEWTON_STEPS_DEFAULT)); + check_parameter(echo_options,"burn_num_samples", str(MCMC::Riemannian::BURN_NUM_SAMPLES_DEFAULT)); + check_parameter(echo_options,"burn_num_leapfrog_steps", str(MCMC::Riemannian::BURN_NUM_LEAPFROG_STEPS_DEFAULT)); + check_parameter(echo_options,"burn_num_newton_steps", str(MCMC::Riemannian::BURN_NUM_NEWTON_STEPS_DEFAULT)); + check_parameter(echo_options,"burn_snr", str(MCMC::Riemannian::BURN_SNR_DEFAULT)); + check_parameter(echo_options,"precondition", str(MCMC::Riemannian::PRECONDITION_DEFAULT)); + + std::vector leapfrog_defaults; + +// leapfrog_defaults.push_back(str(Fibre::Strand::Set::Momentum::STEP_LOCATION_DEFAULT)); +// leapfrog_defaults.push_back(str(Fibre::Tractlet::Set::Momentum::STEP_LOCATION_DEFAULT)); +// leapfrog_defaults.push_back(""); +// +// load_and_check_state_parameters (echo_options, "momen_step", leapfrog_defaults); + + + } else if (is_hamiltonian(loaded_method)) { + + echo_options.erase("num_samples"); + echo_options.erase("burn_num_samples"); + + echo_options.erase("leapfrog"); + echo_options.erase("leapfrog_location"); + echo_options.erase("leapfrog_scale"); + + } + + + //Hamiltonian method + if (is_hamiltonian(method)) { + + check_parameter(echo_options,"num_samples", str(MCMC::Hamiltonian::NUM_SAMPLES_DEFAULT)); + check_parameter(echo_options,"num_leapfrog_steps", str(MCMC::Hamiltonian::NUM_LEAPFROG_STEPS_DEFAULT)); + check_parameter(echo_options,"burn_num_samples", str(MCMC::Hamiltonian::BURN_NUM_SAMPLES_DEFAULT)); + check_parameter(echo_options,"burn_num_leapfrog_steps", str(MCMC::Hamiltonian::BURN_NUM_LEAPFROG_STEPS_DEFAULT)); + check_parameter(echo_options,"burn_snr", str(MCMC::Hamiltonian::BURN_SNR_DEFAULT)); + + std::vector leapfrog_defaults; + +// leapfrog_defaults.push_back(str(Fibre::Strand::Set::Momentum::STEP_LOCATION_DEFAULT)); +// leapfrog_defaults.push_back(str(Fibre::Tractlet::Set::Momentum::STEP_LOCATION_DEFAULT)); +// leapfrog_defaults.push_back(""); +// +// load_and_check_state_parameters (echo_options, "leapfrog", leapfrog_defaults); + + + } else if (is_hamiltonian(loaded_method)) { + + echo_options.erase("num_samples"); + echo_options.erase("burn_num_samples"); + + echo_options.erase("leapfrog"); + echo_options.erase("leapfrog_location"); + echo_options.erase("leapfrog_scale"); + + } + + + //Metropolis method + if (is_metropolis(method)) { + + check_parameter(echo_options,"num_iterations", str(MCMC::Metropolis::NUM_ITERATIONS_DEFAULT)); + check_parameter(echo_options,"sample_period", str(MCMC::Metropolis::SAMPLE_PERIOD_DEFAULT)); + check_parameter(echo_options,"burn_num_iterations", str(MCMC::Metropolis::BURN_NUM_ITERATIONS_DEFAULT)); + check_parameter(echo_options,"burn_sample_period", str(MCMC::Metropolis::BURN_SAMPLE_PERIOD_DEFAULT)); + check_parameter(echo_options,"burn_snr", str(MCMC::Metropolis::BURN_SNR_DEFAULT)); + + } else if (is_metropolis(loaded_method)) { + + echo_options.erase("num_iterations"); + echo_options.erase("burn_num_iterations"); + + } + + + + //Scan method + if (is_scan(method)) { + + check_parameter(echo_options, "only_first", "0"); + + //Append the origin location to the argument list. + if (origin_location.size()) + echo_arguments.push_back(origin_location); + + else if (is_scan(loaded_method)) { + + load_and_check_state_parameters(echo_options, "origin"); + echo_arguments.push_back(echo_options["origin_location"]); + + } else + echo_arguments.push_back("__origin_location_place_holder__"); + + + //Append the axes locations to the argument list. + if (axis1_location.size()) { + + echo_arguments.push_back(axis1_location); + + if (axis2_location.size()) { + + echo_arguments.push_back(axis2_location); + + if (axis3_location.size()) + echo_arguments.push_back(axis3_location); + + } + + } else { + + if (echo_options.count("axis1")) { + load_and_check_state_parameters(echo_options, "axis1"); + echo_arguments.push_back(echo_options["axis1_location"]); + } else + echo_arguments.push_back("__axes_place_holder__"); + + if (echo_options.count("axis2")) { + load_and_check_state_parameters(echo_options, "axis2"); + echo_arguments.push_back(echo_options["axis2_location"]); + } + + if (echo_options.count("axis3")) { + load_and_check_state_parameters(echo_options, "axis3"); + echo_arguments.push_back(echo_options["axis3_location"]); + } + + } + + + } else if (is_scan(loaded_method)) { + + echo_options.erase("only_first"); + + } + + echo_options.erase("origin"); + echo_options.erase("origin_location"); + echo_options.erase("axis1"); + echo_options.erase("axis1_scale"); + echo_options.erase("axis1_location"); + echo_options.erase("axis2"); + echo_options.erase("axis2_scale"); + echo_options.erase("axis2_location"); + echo_options.erase("axis3"); + echo_options.erase("axis3_scale"); + echo_options.erase("axis3_location"); + + + + + //Test gradient method + if (is_gradient_test(method)) { + + if (state_location.size()) + echo_arguments.push_back(state_location); + else if (is_gradient_test(loaded_method)) + echo_arguments.push_back(echo_options["state_location"]); + else + echo_arguments.push_back("__state_location_place_holder__"); + + echo_options["obs_image"] = obs_image_location; + + } else if (is_gradient_test(loaded_method)) { + + echo_options.erase("state_location"); + + } + + + + + //All methods + echo_arguments.push_back(output_location); + + + +//--------------------------------// +// Echo the required parameters // +//--------------------------------// + + + //Print preceding newlines. + std::cout << std::endl << std::endl; + + //print method name. + std::cout << method; + + //print echo_arguments. + for (size_t arg_i = 0; arg_i < echo_arguments.size() - set_output_last; arg_i++) + std::cout << " " << echo_arguments[arg_i]; + + //print echo_options. + for (std::map::iterator opt_it = echo_options.begin(); opt_it != echo_options.end(); ++opt_it) { + + //If option actuall has value (in the checking procedure empty values may be added). + if (opt_it->second.size()) + std::cout << " -" << opt_it->first << " " << opt_it->second; + + } + + //If output argument is to be printed last, then print it now. + if (set_output_last) + std::cout << " " << echo_arguments.back(); + + //print following newlines. + std::cout << std::endl << std::endl; + +} + + + +void check_parameter(std::map& echo_options, + const std::string& key, + const std::string& default_value) { + + if (echo_options.count(key)) { + + if (echo_options[key] == default_value) + echo_options.erase(key); + + } + +} + + +void check_parameters_group (std::map& echo_options, + const std::string& name, + std::vector< std::pair > key_default_value_pairs, + bool default_active) { + + int num_append = 0; + + for (size_t pair_i = 0; pair_i < key_default_value_pairs.size(); pair_i++) { + + if (echo_options.count(key_default_value_pairs[pair_i].first)) { + + if (echo_options[key_default_value_pairs[pair_i].first] != key_default_value_pairs[pair_i].second) { + key_default_value_pairs[pair_i].second = echo_options[key_default_value_pairs[pair_i].first]; + num_append = pair_i+1; + } + + echo_options.erase(key_default_value_pairs[pair_i].first); + + } + + } + + if (num_append || !default_active) { + + echo_options[name] = ""; + + for (size_t append_i = 0; append_i < key_default_value_pairs.size(); append_i++) // for (size_t append_i = 0; append_i < num_append; append_i++) + echo_options[name] += " " + key_default_value_pairs[append_i].second; + + } + +} + + +template void load_and_check_parameters ( std::map& echo_options, + const std::string& key, + const std::string& default_value_location = "") { + + + T default_value, scaled_default_value, loaded_value, scaled_loaded_value; + std::string value_str = echo_options[key]; + std::string place_holder = "\"__" + key + "(" + value_str + ")_place_holder__\""; + + if (value_str.size()) { + + double scale = 1.0; + bool matches_default = false; + + if (echo_options.count(key + "_scale")) + scale = to(echo_options[key + "_scale"]); + + std::string loaded_value_location = echo_options[key + "_location"]; + + echo_options.erase(key); + echo_options.erase(key+"_scale"); + echo_options.erase(key+"_location"); + + + //First, check to see if saved value matches default value or a scaled version of the defaul value + if (default_value_location.size()) { + + try { + + default_value.load (default_value_location); + scaled_default_value = default_value; + scaled_default_value *= scale; + + //Loaded value still matches saved value. + if (default_value.matlab_str() == value_str) + + //'loaded value' == 'Default_value' no paramters need to be set. + matches_default = true; + + else if (scaled_default_value.matlab_str() == value_str) { + + //'loaded value' == scaled version of 'Default_value' only scale parameter needs to be set. + echo_options[key+"_scale"] = str(scale); + matches_default = true; + + } + + } catch (Exception e) { + + std::cout << "WARNING!! Could not load default parameter from location '" + default_value_location + "'." << std::endl << std::endl; + + } + + } + + //If saved value does not equal default, check to see if it still matches the saved location + if (!matches_default) { + + if (!loaded_value_location.size()) { + echo_options[key] = place_holder; + + } else { + + //If it doesn't check the loaded value to see if that is still the same. + try { + + loaded_value.load(loaded_value_location); + scaled_loaded_value = loaded_value; + scaled_loaded_value *= scale; + + //Loaded value still matches saved value. + if (loaded_value.matlab_str() == value_str) + + echo_options[key+"_location"] = loaded_value_location; + + else if (scaled_loaded_value.matlab_str() == value_str) { + + //Scale is added back into the echo_options + echo_options[key+"_location"] = loaded_value_location; + echo_options[key+"_scale"] = str(scale); + + + } else + + echo_options[key] = place_holder; + + + } catch (Exception e) { + + std::cout << "WARNING!! Could not load parameter from location '" + loaded_value_location + "', skipping." << std::endl << std::endl; + + echo_options[key] = place_holder; + + } + + } + + } + + } + +} + + +void load_and_check_state_parameters ( std::map& echo_options, + const std::string& key, + const std::vector& default_value_locations) { + + + if (echo_options.count(key)) { + + std::string state_location = echo_options[key + "_location"]; + + if (File::has_extension(state_location)) + load_and_check_parameters(echo_options, key, default_value_locations[0]); + + else if (File::has_extension(state_location)) + load_and_check_parameters(echo_options, key, default_value_locations[1]); + + else if (File::has_extension(state_location)) + load_and_check_parameters(echo_options, key, default_value_locations[2]); + + else { + echo_options[key + "_location"] = "__" + key + "_place_holder_(" + echo_options[key] + ")__"; + echo_options.erase(key); + echo_options.erase(key+"_scale"); + } + + } + +} +*/ + +int main() { + + return 0; + +} diff --git a/cmd/export_fibres.cpp b/cmd/export_fibres.cpp new file mode 100644 index 0000000..759a4f6 --- /dev/null +++ b/cmd/export_fibres.cpp @@ -0,0 +1,160 @@ +/* + Copyright 2009 Brain Research Institute, Melbourne, Australia + + Written by Thomas G. Close, 04/03/2009. + + This file is part of MRtrix. + + MRtrix is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + MRtrix is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with MRtrix. If not, see . + + */ + +#include "progressbar.h" + +#include "bts/cmd.h" + + +#include "bts/triple.h" + +#include "bts/common.h" + +#include "bts/fibre/strand/set.h" +#include "bts/fibre/track/set.h" + +const double RADII_DEFAULT = 0.03; +const size_t NUM_LENGTH_SECTIONS_DEFAULT = 100; + +using namespace BTS; + +SET_VERSION_DEFAULT; +SET_AUTHOR ("Thomas G. Close"); +SET_COPYRIGHT (NULL); + +DESCRIPTION = { + "Export MRtrix tracks file to NFG format.", + "The output ascii files will consist of 3xN matrices, corresponding to the [ X Y Z ] coordinates of the N points making up the path. All paths will be written to the output folder.", + NULL +}; + +ARGUMENTS = { + Argument ("input", "The strands to be exported.").type_file (), + Argument ("output", "The output directory where the ASCII files will be written to.").type_file(), + Argument() +}; + + +OPTIONS = { + + Option ("radii","The radii of the exported tracks.") + + Argument ("radii","").type_float (SMALL_FLOAT, RADII_DEFAULT, LARGE_FLOAT), + + Option ("num_length_sections","Number of length sections to convert strands into tracks before exporting.") + + Argument ("num_length_sections","").type_integer (0,NUM_LENGTH_SECTIONS_DEFAULT,LARGE_INT), + + +Option() }; + + + +EXECUTE { + + std::string input_location = argument[0]; + std::string output_location = argument[1]; + + double radii = RADII_DEFAULT; + size_t num_length_sections = NUM_LENGTH_SECTIONS_DEFAULT; + + bool use_loaded_radii = true; + + Options opt = get_options("radii"); + if (opt.size()) { + radii = opt[0][0]; + use_loaded_radii = false; + } + + opt = get_options("num_length_sections"); + if (opt.size()) + num_length_sections = opt[0][0]; + + + + Fibre::Track::Set tcks(input_location, num_length_sections); + + MR::ProgressBar progress_bar ("Exporting MRtrix tracks file to NFG format...", tcks.size()); + + File::mkdir(output_location); + + size_t count = 0; + + size_t max_bundle_index = 0; + + if (tcks.has_extend_elem_prop(Fibre::Track::BUNDLE_INDEX_EPROP)) { + + for (size_t tck_i = 0; tck_i < tcks.size(); ++tck_i) { + + size_t bundle_index = to(tcks.get_extend_elem_prop(Fibre::Track::BUNDLE_INDEX_EPROP, tck_i)); + + if (bundle_index > max_bundle_index) + max_bundle_index = bundle_index; + + } + + } else + max_bundle_index = tcks.size(); + + size_t num_tck_i_dec_places = num_dec_places(tcks.size()); + size_t num_bundle_dec_places = num_dec_places(max_bundle_index); + + + for (size_t tck_i = 0; tck_i < tcks.size(); ++tck_i) { + + size_t bundle_index; + + if (tcks.has_extend_elem_prop(Fibre::Track::BUNDLE_INDEX_EPROP)) + bundle_index = to(tcks.get_extend_elem_prop(Fibre::Track::BUNDLE_INDEX_EPROP, tck_i)); + else + bundle_index = tck_i; + + double track_radius; + + if (tcks.has_extend_elem_prop(Fibre::Track::RADIUS_PROP) && use_loaded_radii) + track_radius = to(tcks.get_extend_elem_prop(Fibre::Track::RADIUS_PROP, tck_i)); + else + track_radius = radii; + + std::stringstream filename_stream; + + filename_stream << output_location << std::setfill('0') << "/strand_" << std::setw(num_tck_i_dec_places) << tck_i << "-" << std::setw(num_bundle_dec_places) << bundle_index << "-r" << track_radius << ".txt"; + std::string filename = filename_stream.str(); + + std::ofstream out (filename.c_str()); + + if (!out) { + throw Exception ("error opening ascii file \"" + filename + "\": " + strerror (errno)); + } + + for (size_t point_i = 0; point_i < tcks[tck_i].size(); ++point_i) + out << tcks[tck_i][point_i][X] << " " << tcks[tck_i][point_i][Y] << " " << tcks[tck_i][point_i][Z] << "\n"; + + + out.close(); + count++; + ++progress_bar; + + + } + + + +} diff --git a/cmd/fibre_info.cpp b/cmd/fibre_info.cpp new file mode 100644 index 0000000..e18ebeb --- /dev/null +++ b/cmd/fibre_info.cpp @@ -0,0 +1,95 @@ +/* + Copyright 2008 Brain Research Institute, Melbourne, Australia + + Written by J-Donald Tournier, 27/06/08. + + This file is part of MRtrix. + + MRtrix is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + MRtrix is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with MRtrix. If not, see . + +*/ + + +#include "bts/cmd.h" +#include "bts/common.h" + +#include "bts/inline_functions.h" +#include "bts/fibre/strand.h" + +using namespace BTS; + +SET_VERSION_DEFAULT; +SET_AUTHOR ("Thomas G. Close"); +SET_COPYRIGHT (NULL); + +DESCRIPTION = { + "Displays fibres file header.", + "", + NULL +}; + +ARGUMENTS = { + Argument ("fibres_file", "the input track file.").allow_multiple().type_file (), + Argument() +}; + + +OPTIONS = { + + Option ("property", "Print only the selected properties.") + + Argument ("property", "").allow_multiple(), + + + Option() +}; + +EXECUTE { + + std::vector selected_properties; + + Options opt = get_options("property"); + if (opt.size()) + for (size_t prop_i = 0; prop_i < opt.size(); ++prop_i) + selected_properties.push_back(opt[prop_i][0]); + + + for (std::vector::iterator arg = argument.begin(); arg != argument.end(); ++arg) { + Fibre::Strand::Reader reader; // Doesn't really matter if it is a Strand/Tractlet or Track + reader.open (arg->c_str()); + + + if (selected_properties.size()) { + + for (std::vector::iterator select_it = selected_properties.begin(); select_it != selected_properties.end(); ++select_it) + std::cout << reader.get_extend_props()[*select_it] << " "; + + std::cout << std::endl; + + + } else { + + std::cout << "***********************************\n"; + std::cout << " Fibre file: \"" << arg->c_str() << "\"\n"; + std::map extended_props = reader.get_extend_props(); + for (std::map::map::iterator i = extended_props.begin(); i != extended_props.end(); ++i) { + std::string str (i->first + ':'); + str.resize (40, ' '); + std::cout << " " << str << i->second << "\n"; + } + + } + + } + +} diff --git a/cmd/generate_image.cpp b/cmd/generate_image.cpp new file mode 100644 index 0000000..dd94d78 --- /dev/null +++ b/cmd/generate_image.cpp @@ -0,0 +1,278 @@ +/* + Copyright 2009 Brain Research Institute, Melbourne, Australia + + Created by Tom Close on 13/03/09. + + This file is part of Bayesian Tractlet Sampling (BTS). + + BTS is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + BTS is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with BTS. If not, see . + + */ + + + +extern "C" { +#include +#include +} + + +#include "bts/cmd.h" + +#include "bts/math/common.h" + +#include "image/header.h" +#include "image/header.h" +#include "dwi/gradient.h" +#include "progressbar.h" + +#include "bts/common.h" + +#include "bts/fibre/strand/set.h" +#include "bts/fibre/tractlet/set.h" + +#include "bts/image/observed/buffer.h" +#include "bts/image/expected/buffer.h" +#include "bts/image/expected/trilinear/buffer.h" +#include "bts/image/expected/gaussian/buffer.h" +#include "bts/image/expected/quartic/buffer.h" +#include "bts/diffusion/model.h" + +#include "bts/image/noise/gaussian.h" +#include "bts/image/noise/rician.h" + + + +#include "bts/inline_functions.h" + + +using namespace BTS; + +SET_VERSION_DEFAULT; +SET_AUTHOR ("Thomas G. Close"); +SET_COPYRIGHT (NULL); + +DESCRIPTION = { + "Generates a set of DW-BTS images from a given strand or tractlet configuration.", + "", + NULL +}; + +ARGUMENTS = { + Argument ("input", "The strands file the image set will be expected_image from.").type_file (), + Argument ("output", "The generated DW-MR image set").optional().type_image_out (), + Argument() +}; + + +OPTIONS = { + + Option ("clean", "No noise added to the image."), + + Option ("seed", "The random seed that is passed to the random generator") + + Argument ("seed", ""), + + Option ("degree", "Degree of strands when converted from tracks") + + Argument ("degree", "").type_integer (0, Fibre::Strand::DEFAULT_DEGREE, LARGE_INT), + + DIFFUSION_PARAMETERS, + + IMAGE_PARAMETERS, + + EXPECTED_IMAGE_PARAMETERS, + + NOISE_PARAMETERS, + + COMMON_PARAMETERS, + + +Option() }; + + + +EXECUTE { + + +//--------------// +// Get options // +//--------------// + + std::string input_location = argument[0]; + std::string output_location; + + if (argument.size() > 1) + output_location = argument[1].c_str(); + else + output_location = File::strip_extension (input_location) + ".mif"; + + bool clean = false; + size_t seed = time(0); + size_t degree = Fibre::Strand::DEFAULT_DEGREE; + + + Options opt = get_options("clean"); + if (opt.size()) + clean = true; + + opt = get_options("seed"); + if (opt.size()) { + std::string seed_str = opt[0][0]; + seed = to(seed_str); + } + + opt = get_options("degree"); + if (opt.size()) + degree = opt[0][0]; + + // Loads parameters to construct Diffusion::Model ('diff_' prefix) + SET_DIFFUSION_PARAMETERS; + + // Loads parameters to construct Image::Expected::*::Buffer that are inherited from Image::Observed::Buffer ('img_' prefix) + SET_IMAGE_PARAMETERS; + + // Loads extra parameters to construct Image::Expected::*::Buffer ('img_' prefix) + SET_EXPECTED_IMAGE_PARAMETERS; + + // Loads parameters to construct Image::Noise::* ('noise_' prefix) + SET_NOISE_PARAMETERS; + + // Loads parameters that are common to all commands. + SET_COMMON_PARAMETERS; + + +//----------------------------------------------------// +// Auto generate parameters if not set or irrelevant // +//----------------------------------------------------// + + if (!img_offsets.valid()) + img_offsets = Image::Observed::Buffer::default_corner_offset(img_dims, img_vox_lengths); + + + exp_enforce_bounds = true; + + if (!diff_isotropic && (noise_type == "rician")) + throw Exception ("Rician noise cannot be added to images with isotropic components removed."); + +//-------------------------// +// Set up diffusion model // +//-------------------------// + + Diffusion::Model diffusion_model = Diffusion::Model::factory (diff_encodings, + diff_response_SH, + diff_adc, + diff_fa, + diff_isotropic); + + +//----------------------------------// +// Initialize expected_image image // +//----------------------------------// + + + + Image::Expected::Buffer* image = Image::Expected::Buffer::factory(exp_type, + img_dims, + img_vox_lengths, + diffusion_model, + exp_num_length_sections, + exp_num_width_sections, + exp_interp_extent, + img_offsets, + exp_enforce_bounds, + exp_half_width); + + + +//-----------------// +// Fabricate image // +//-----------------// + + + MR::ProgressBar progress_bar ("Generating image from provided fibres..."); + + if (File::has_or_txt_extension(input_location) || File::has_or_txt_extension(input_location)) { + + Fibre::Strand::Set strands (input_location, degree); + + //exp_base_intensity is recorded in header so needs to be synchronised with base_intensity of strands + if (exp_base_intensity < 0) + exp_base_intensity = strands.base_intensity(); + else + strands.set_base_intensity(exp_base_intensity); + + image->expected_image(strands); + + } else if (File::has_or_txt_extension(input_location)) { + + Fibre::Tractlet::Set tractlets (input_location); + + //exp_base_intensity is recorded in header so needs to be synchronised with base_intensity of tractlets + if (exp_base_intensity < 0) + exp_base_intensity = tractlets.base_intensity(); + else + tractlets.set_base_intensity(exp_base_intensity); + + image->expected_image(tractlets); + + } else + throw Exception ("Unrecognised extension '" + input_location + "'."); + + image->properties()["type"] = "synthetic"; + image->properties()["method"] = "generate_image"; + image->properties()["state_location"] = input_location; + + image->properties()["software version"] = version_number_string(); + image->properties()["datetime"] = current_datetime(); + + + ADD_DIFFUSION_PROPERTIES(image->properties()); + + ADD_IMAGE_PROPERTIES(image->properties()); + + ADD_EXPECTED_IMAGE_PROPERTIES(image->properties()); + + ADD_COMMON_PROPERTIES(image->properties()); + + + //If '-clean' option is not selected noise is be added to the image. + if (!clean) { + + gsl_rng* rand_gen = gsl_rng_alloc(gsl_rng_taus); + gsl_rng_set(rand_gen, seed); + + if (isnan(noise_ref_signal)) + noise_ref_signal = image->max_b0(); + + Image::Noise* noise = Image::Noise::factory(rand_gen, noise_type, noise_snr, noise_ref_signal); + + noise->noisify(*image); + + ADD_NOISE_PROPERTIES(image->properties()); + } + + + //------------// + // Save image // + //------------// + + + image->save(output_location); + + + +} + + + + diff --git a/cmd/hamiltonian.cpp b/cmd/hamiltonian.cpp new file mode 100644 index 0000000..c1786de --- /dev/null +++ b/cmd/hamiltonian.cpp @@ -0,0 +1,552 @@ +/* + Copyright 2009 Brain Research Institute, Melbourne, Australia + + Created by Tom Close on 13/03/09. + + This file is part of Bayesian Tractlet Sampling (BTS). + + BTS is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + BTS is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with BTS. If not, see . + + */ + + + +extern "C" { +#include +#include +} + + +#include + +#include "bts/cmd.h" + +#include "math/matrix.h" + +#include "progressbar.h" + + +#include "bts/common.h" +#include "bts/file.h" + + +#include "bts/fibre/tractlet/set.h" +#include "bts/fibre/strand/set.h" + + + + +#include "bts/diffusion/model.h" +#include "bts/image/expected/trilinear/buffer.h" +#include "bts/image/expected/gaussian/buffer.h" +#include "bts/image/expected/quartic/buffer.h" + +#include "bts/image/observed/buffer.h" + +#include "bts/prob/uniform.h" +#include "bts/prob/prior.h" + +#include "bts/prob/likelihood.h" +#include "bts/prob/likelihood.h" +#include "bts/prob/likelihood/one_sided_gaussian.h" +#include "bts/prob/likelihood/gaussian.h" + +#include "bts/fibre/strand/set/momentum.h" +#include "bts/fibre/tractlet/set/momentum.h" +#include "bts/mcmc/proposal/distribution.h" +#include "bts/mcmc/proposal/distribution/gaussian.h" +#include "bts/mcmc/proposal/momentum/weighted.h" + +#include "bts/math/common.h" + +#include "bts/mcmc/hamiltonian.h" + +#include "bts/file.h" + + + +#include "bts/inline_functions.h" + +using namespace BTS; + + +SET_VERSION_DEFAULT; +SET_AUTHOR ("Thomas G. Close"); +SET_COPYRIGHT (NULL); + +DESCRIPTION = { + "Runs Hamiltonian MCMC sampling on a given image from a given starting configuration of tractlets or strands.", + "", + NULL +}; + +ARGUMENTS = { + Argument ("input_image", "The image the tractlets will be fit against.").type_image_in(), + + Argument ("inital tractlets", "A starting point for the MCMC algorithm.").type_file (), + + Argument ("samples location", "The location where the samples will be saved.").type_file (), + + Argument() +}; + + +OPTIONS = { + + + Option ("num_samples", "The Number of MCMC iterations to take of the prob distribution over the tractlets") + + Argument ("num_samples", "").type_integer (1, MCMC::Hamiltonian::NUM_SAMPLES_DEFAULT, LARGE_INT), + + Option ("num_leapfrog_steps", "The number of MCMC iterations that will be performed before a sample is saved") + + Argument ("num_leapfrog_steps", "").type_integer (1, MCMC::Hamiltonian::NUM_LEAPFROG_STEPS_DEFAULT, LARGE_INT), + + Option ("burn_num_samples", "The Number of MCMC iterations to take as part of the Burn-in.") + + Argument ("burn_num_samples", "").type_integer (0, MCMC::Hamiltonian::BURN_NUM_SAMPLES_DEFAULT, LARGE_INT), + + Option ("burn_num_leapfrog_steps", "The number of MCMC iterations that will be performed before a sample is saved in the Burn-in.") + + Argument ("burn_num_leapfrog_steps", "").type_integer (1, MCMC::Hamiltonian::BURN_NUM_LEAPFROG_STEPS_DEFAULT, LARGE_INT), + + Option ("burn_snr", "The Signal-to-noise ratio assumed for the burn-in period.") + + Argument ("burn_snr", "").type_float (SMALL_FLOAT, MCMC::Hamiltonian::BURN_SNR_DEFAULT, LARGE_FLOAT), + + Option ("seed", "The random seed that is passed to the random generator") + + Argument ("seed", ""), + + Option ("prior_only", "Only sample from the prior distribution."), + + Option ("save_iterations", "Save all iterations not just samples."), + + DIFFUSION_PARAMETERS, + + EXPECTED_IMAGE_PARAMETERS, + + LIKELIHOOD_PARAMETERS, + + PRIOR_PARAMETERS, + + PROPOSAL_DISTRIBUTION_PARAMETERS, + + PROPOSAL_MOMENTUM_PARAMETERS, + + COMMON_PARAMETERS, + +Option() }; + + +EXECUTE { + +//-----------------// +// Load Arguments // +//-----------------// + + std::string obs_image_location = argument[0]; + std::string initial_location = argument[1]; + std::string samples_location = argument[2]; + std::string burn_samples_location = File::strip_extension (samples_location) + ".burn." + File::extension(samples_location); + + MR::Image::Header header (argument[0]); + + if (header.ndim() != 4) + throw Exception ("dwi image should contain 4 dimensions"); + + + +//----------------------------------// +// Get and Set Optional Parameters // +//----------------------------------// + + + size_t num_samples = MCMC::Hamiltonian::NUM_SAMPLES_DEFAULT; + size_t num_leapfrog_steps = MCMC::Hamiltonian::NUM_LEAPFROG_STEPS_DEFAULT; + size_t burn_num_samples = MCMC::Hamiltonian::BURN_NUM_SAMPLES_DEFAULT; + size_t burn_num_leapfrog_steps = MCMC::Hamiltonian::BURN_NUM_LEAPFROG_STEPS_DEFAULT; + double burn_snr = MCMC::Hamiltonian::BURN_SNR_DEFAULT; + size_t seed = time(NULL); + bool prior_only = false; + bool save_iterations = true; + + + Options opt = get_options("num_samples"); + if (opt.size()) + num_samples = opt[0][0]; + + opt = get_options("num_leapfrog_steps"); + if (opt.size()) + num_leapfrog_steps = opt[0][0]; + + opt = get_options("burn_num_samples"); + if (opt.size()) + burn_num_samples = opt[0][0]; + + opt = get_options("burn_num_leapfrog_steps"); + if (opt.size()) + burn_num_leapfrog_steps = opt[0][0]; + + opt = get_options("burn_snr"); + if (opt.size()) + burn_snr = opt[0][0]; + + opt = get_options("seed"); + if (opt.size()) { + std::string seed_string = opt[0][0]; + seed = to(seed_string); + } else + std::cout << "No random seed supplied. Using timestamp: " << seed << std::endl; + + opt = get_options("prior_only"); + if (opt.size()) + prior_only = true; + + opt = get_options("save_iterations"); + if (opt.size()) + save_iterations = true; + + // Loads parameters to construct Diffusion::Model ('diff_' prefix) + SET_DIFFUSION_PARAMETERS; + + // Loads parameters to construct Image::Expected::*::Buffer ('img_' prefix) + SET_EXPECTED_IMAGE_PARAMETERS; + + // Loads parameters to construct Prob::Likelihood ('like_' prefix) + SET_LIKELIHOOD_PARAMETERS; + + // Loads parameters to construct Prob::Prior ('prior_' prefix) + SET_PRIOR_PARAMETERS; + + // Loads parameters to construct Proposal::Distribution (any variables with 'prop_' prefix) + SET_PROPOSAL_DISTRIBUTION_PARAMETERS; + + // Loads parameters to construct Proposal::Distribution ('prop_' prefix) + SET_PROPOSAL_MOMENTUM_PARAMETERS(initial_location); + + // Loads parameters that are common to all commands. + SET_COMMON_PARAMETERS; + + + //--------------------------------// + // Set up reference image buffer // + //--------------------------------// + + + Image::Observed::Buffer obs_image(obs_image_location, Diffusion::Encoding::Set(diff_encodings)); + + + //If gradient scheme is included in reference image header, use that instead of default (NB: Will override any gradients passed to '-diff_encodings' option). + if (header.get_DW_scheme().rows()) { + diff_encodings = header.get_DW_scheme(); + diff_encodings_location = "from observed image"; + } + + if ((header.count("diff_response_SH")) && (Math::matlab_str(diff_response_SH) != header["diff_response_SH"])) + std::cout << std::endl << "Warning! Diffusion response function harmonics (" << Math::matlab_str(diff_response_SH) << ") do not match reference image (" << header["diff_response_SH"] + ")!" << std::endl; + + + //----------------------------// + // Initialize Expected Image // + //----------------------------// + + + + Diffusion::Model diffusion_model = Diffusion::Model::factory (diff_encodings, + diff_response_SH, + diff_adc, + diff_fa, + diff_isotropic); + + Image::Expected::Buffer* exp_image = Image::Expected::Buffer::factory(exp_type, + obs_image, + diffusion_model, + exp_num_length_sections, + exp_num_width_sections, + exp_interp_extent, + exp_enforce_bounds, + exp_half_width); + + + + + //----------------------------------------------------------------// + // Auto-generate base intensity initial value/b_intens_gauss_mean // + //----------------------------------------------------------------// + + if (exp_base_intensity < 0) + exp_base_intensity = exp_image->base_intensity_default(obs_image, initial_location); + + //-----------------------// + // Initialize Likelihood // + //-----------------------// + + Prob::Likelihood* likelihood = Prob::Likelihood::factory(like_type, obs_image, exp_image, like_snr, like_b0_include, like_outside_scale, like_ref_b0, like_ref_signal); + + + + //----------------------------------// + // Initialize Proposal Distribution // + //----------------------------------// + + gsl_rng* rand_gen = gsl_rng_alloc(gsl_rng_taus); + gsl_rng_set(rand_gen, seed); + + MCMC::Proposal::Distribution* proposal_distribution = MCMC::Proposal::Distribution::factory(prop_distr_type, rand_gen); + + + +// Proposal::Intensity* intensity_proposer = Proposal::Intensity::factory(prop_intens_type, proposal_distribution, prop_intens_scale); +// +// Proposal::BaseIntensity* base_intensity_proposer = Proposal::BaseIntensity::factory(prop_base_intens_type, proposal_distribution, prop_base_intens_scale); + + + + //-------------------------// + // Set Output Properties // + //-------------------------// + + std::map run_properties; + + run_properties["Method"] = "hamiltonian"; + run_properties["num_leapfrog_steps"] = str(num_leapfrog_steps); + run_properties["seed"] = str(seed); + run_properties["num_samples"] = str(num_samples); + run_properties["burn_num_leapfrog_steps"] = str(burn_num_leapfrog_steps); + run_properties["burn_num_samples"] = str(burn_num_samples); + run_properties["burn_snr"] = str(burn_snr); + run_properties["obs_image"] = obs_image_location; + run_properties["initial_state"] = Fibre::Base::Object::load_matlab_str(initial_location); + run_properties["initial_state_location"]= initial_location; + + run_properties["prior_only"] = str(prior_only); + + ADD_DIFFUSION_PROPERTIES(run_properties); + + ADD_LIKELIHOOD_PROPERTIES(run_properties); + + ADD_EXPECTED_IMAGE_PROPERTIES(run_properties); + + ADD_PRIOR_PROPERTIES(run_properties); + + ADD_PROPOSAL_DISTRIBUTION_PROPERTIES(run_properties); + + ADD_PROPOSAL_MOMENTUM_PROPERTIES(run_properties); + + ADD_COMMON_PROPERTIES(run_properties); + + + //-------------------------// + // Sampling from Strands // + //-------------------------// + + //------------------// + // Initialize Prior // + //------------------// + + Prob::Prior prior (prior_scale, + prior_mag_scale, + prior_mag_aux_scale, + prior_hook_scale, + prior_hook_num_points, + prior_density_high_scale, + prior_density_low_scale, + prior_density_num_points, + prior_acs_scale, + prior_acs_mean, + prior_length_scale, + prior_length_mean); + + + if (File::has_extension(initial_location)) { + + + //------------------------// + // Load Initial Strands // + //------------------------// + + Fibre::Strand::Set strands (initial_location); + + strands.set_base_intensity(exp_base_intensity); + + + //---------------------// + // Initialize Momentum // + //---------------------// + + MCMC::Proposal::Momentum momentum = MCMC::Proposal::Momentum::factory ( strands, + momen_step_scale, + momen_step_location, + momen_weight_location, + proposal_distribution); + + + //------------------// + // Perform sampling // + //------------------// + + Fibre::Strand::Set burnt_strands; + + + + if (burn_num_samples) { + + likelihood->set_assumed_snr(burn_snr, like_ref_b0, like_ref_signal); + + burnt_strands = MCMC::hamiltonian < Fibre::Strand::Set, + Prob::Likelihood, + Prob::Prior> ( + strands, + *likelihood, + prior, + momentum, + burn_samples_location, + run_properties, + burn_num_samples, + burn_num_leapfrog_steps, + rand_gen, + prior_only, + save_iterations + ); + + likelihood->set_assumed_snr(like_snr, like_ref_b0, like_ref_signal); + + } else + burnt_strands = strands; + + + MCMC::hamiltonian < Fibre::Strand::Set, + Prob::Likelihood, + Prob::Prior> ( + burnt_strands, + *likelihood, + prior, + momentum, + samples_location, + run_properties, + num_samples, + num_leapfrog_steps, + rand_gen, + prior_only, + save_iterations + ); + + + + //------------------------// + // Sampling from Tractlets // + //------------------------// + + + } else if (File::has_extension(initial_location)) { + + + //-------------// + // Load Tractlets // + //-------------// + + Fibre::Tractlet::Set tractlets (initial_location); + + tractlets.set_base_intensity(exp_base_intensity); + + + //---------------------// + // Initialize Proposer // + //---------------------// + + + MCMC::Proposal::Momentum momentum = MCMC::Proposal::Momentum::factory ( tractlets, + momen_step_scale, + momen_step_location, + momen_weight_location, + proposal_distribution); + + + + + //------------------// + // Perform sampling // + //------------------// + + Fibre::Tractlet::Set burnt_tractlets; + + if (burn_num_samples) { + + likelihood->set_assumed_snr(burn_snr, like_ref_b0, like_ref_signal); + + burnt_tractlets = MCMC::hamiltonian ( + + tractlets, + *likelihood, + prior, + momentum, + burn_samples_location, + run_properties, + burn_num_samples, + burn_num_leapfrog_steps, + rand_gen, + prior_only, + save_iterations + ); + + likelihood->set_assumed_snr(like_snr, like_ref_b0, like_ref_signal); + + } else + burnt_tractlets = tractlets; + + + + MCMC::hamiltonian ( + + burnt_tractlets, + *likelihood, + prior, + momentum, + samples_location, + run_properties, + num_samples, + num_leapfrog_steps, + rand_gen, + prior_only, + save_iterations + ); + + + } else + throw Exception ("Unrecognised extension of initial state location, '" + initial_location + "'."); + + + std::cout << "MATLAB plot commands:\n\nplot_fibres " << samples_location << "\nscan.py " << samples_location << std::endl; + + + gsl_rng_free(rand_gen); + + delete exp_image; + delete proposal_distribution; + delete likelihood; + + +} + + + + + + + + + + + + + diff --git a/cmd/import_fibres.cpp b/cmd/import_fibres.cpp new file mode 100644 index 0000000..5857b60 --- /dev/null +++ b/cmd/import_fibres.cpp @@ -0,0 +1,249 @@ +/* + Copyright 2009 Brain Research Institute, Melbourne, Australia + + Written by Thomas G. Close, 04/03/2009. + + This file is part of Bayesian Tractlet Sampling (BTS). + + BTS is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + BTS is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with BTS. If not, see . + +*/ + +#include "bts/cmd.h" + +#include "progressbar.h" + +#include "bts/common.h" +#include "bts/file.h" + +#include "bts/fibre/track/set.h" +#include "bts/fibre/strand/set.h" + + + + +#include "bts/inline_functions.h" + +using namespace BTS; + +SET_VERSION_DEFAULT; +SET_AUTHOR ("Thomas G. Close"); +SET_COPYRIGHT (NULL); + +DESCRIPTION = { + "Import ascii path files into BTS format.", + "The input ascii files should consist of 3xN matrices, corresponding to the [ X Y Z ] coordinates of the N points making up the path. All the input paths will be included into the same output BTS path file.", + NULL +}; + +ARGUMENTS = { + Argument ("input", "The input strand text files to be imported into BTSTrix format.").allow_multiple().type_file (), + Argument ("output", "The output strands file in BTS format").type_file(), + Argument() +}; + + +OPTIONS = { + + Option ("prefix", "Match files in the input directory with the following prefix") + + Argument ("prefix", ""), + + + Option ("nfg_format", "Import the NFG format and save the extended track properties"), + + +Option() }; + + +void import(Fibre::Strand::Set& s_set, const std::string& location, const std::string& prefix, MR::ProgressBar& progress_bar); +void import(Fibre::Track::Set& t_set, const std::string& location, const std::string& prefix, bool nfg_format, MR::ProgressBar& progress_bar); + + +EXECUTE { + + + std::string input_location = argument[0]; + std::string output_location = argument.back(); + + bool nfg_format = false; + std::string prefix = ""; + + Options opt = get_options("prefix"); + if (opt.size()) + prefix = opt[0][0].c_str(); + + opt = get_options("nfg_format"); + + if (opt.size()) { + + nfg_format = true; + + if (File::has_extension(output_location)) + throw Exception ("'-nfg_format' can only be used with the '.tck' file format."); + + if (prefix.size()) + throw Exception ("'-prefix' option cannot be used in conjunction with '-nfg_format'."); + + prefix = "strand_"; + + } + + + if (!File::exists(input_location)) + throw Exception("Input location, " + input_location + ", does not exist"); + + + MR::ProgressBar progress_bar ("adding ASCII strand files"); + + if (File::has_extension(output_location)) { + + Fibre::Strand::Set s_set; + + std::string input_locations = ""; + for (size_t n = 0; n < argument.size()-1; n++) { + import(s_set, argument[n], prefix, progress_bar); + input_locations += argument[n].c_str(); + } + + std::map properties; + properties["import_dir"] = input_locations; + + s_set.save(output_location); + + } else if (File::has_extension(output_location)) { + + Fibre::Track::Set t_set; + + if (nfg_format) { + t_set.add_extend_elem_prop(Fibre::Track::BUNDLE_INDEX_EPROP, "0"); + + t_set.add_extend_elem_prop(Fibre::Track::RADIUS_PROP, "0.0"); + } + + std::string input_locations = ""; + for (size_t n = 0; n < argument.size()-1; n++) { + + input_locations += argument[n].c_str(); + import(t_set, argument[n], prefix, nfg_format, progress_bar); + + } + + t_set.set_extend_prop("import_dir", input_locations); + + t_set.save(output_location); + + } else + throw Exception ("Unknown file extension in output file " + output_location + "."); + + + //MR::ProgressBar::done(); +} + + + +void import(Fibre::Strand::Set& s_set, const std::string& location, const std::string& prefix, MR::ProgressBar& progress_bar) { + + if (location.length() >= 21) { + if (!location.substr(location.length() - 21).compare("isotropic_regions.txt")) + throw Exception ("Found 'isotropic_regions.txt' file, which is assumed to be from Numerical Fibre Generator (NFG) output, please use '-nfg_format' option to import these tracks, and use the '.tck' for the imported tracks file extension."); + } + + + + if (File::is_dir(location)) { + + std::vector filenames = File::list_filenames(location, prefix, "txt"); + + for (size_t filename_i = 0; filename_i < filenames.size(); filename_i++) + import(s_set, File::join(location,filenames[filename_i]), prefix, progress_bar); + + + } else { + + + MR::Math::Matrix M; + + M.load (location); + if (M.columns() != 3) + throw Exception ("WARNING: file \"" + location + "\" does not contain 3 columns - ignored"); + + + Fibre::Strand strand; + + for (size_t i = 0; i < M.rows(); i++) { + Triple d(M(i,0), M(i,1), M(i,2)); + strand.push_back(d); + } + s_set.push_back(strand); + + progress_bar++; + + } + + +} + + + +void import(Fibre::Track::Set& t_set, const std::string& location, const std::string& prefix, bool nfg_format, MR::ProgressBar& progress_bar) { + + if (location.length() >= 21) { + if (!location.substr(location.length() - 21).compare("isotropic_regions.txt") && !nfg_format) + throw Exception ("Found 'isotropic_regions.txt' file, which is assumed to be from Numerical Fibre Generator (NFG) output, please use '-nfg_format' option to import these tracks."); + } + + if (File::is_dir(location)) { + + + std::vector filenames = File::list_filenames(location, prefix, "txt"); + + for (size_t filename_i = 0; filename_i < filenames.size(); filename_i++) + import(t_set, File::join(location,filenames[filename_i]), prefix, nfg_format, progress_bar); + + + } else { + + MR::Math::Matrix M; + + M.load (location); + if (M.columns() != 3) + throw Exception ("WARNING: file \"" + location + "\" does not contain 3 columns - ignored"); + + Fibre::Track tck; + + for (size_t i = 0; i < M.rows(); i++) { + tck.push_back(Coord(M(i,0), M(i,1), M(i,2))); + } + + t_set.push_back(tck); + + if (nfg_format) { + + int bundle_index; + double track_radius; + + sscanf(File::basename(location).c_str(), "strand_%*d-%d-r%lf.txt", &bundle_index, &track_radius); + + t_set.set_extend_elem_prop(Fibre::Track::BUNDLE_INDEX_EPROP, str(bundle_index), t_set.size()-1); + + t_set.set_extend_elem_prop(Fibre::Track::RADIUS_PROP, str(track_radius), t_set.size()-1); + + } + + progress_bar++; + + } + + +} diff --git a/cmd/init_fibres.cpp b/cmd/init_fibres.cpp new file mode 100644 index 0000000..be480fd --- /dev/null +++ b/cmd/init_fibres.cpp @@ -0,0 +1,408 @@ +/* + Copyright 2008 Brain Research Institute, Melbourne, Australia + + Written by Thomas G Close, 18/06/2010. + + This file is part of MRtrix. + + MRtrix is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + MRtrix is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with MRtrix. If not, see . + +*/ + + +extern "C" { +#include +#include +} + +#include "progressbar.h" +#include "bts/cmd.h" + +#include "bts/common.h" + +#include "bts/image/expected/buffer.h" + +#include "bts/fibre/tractlet/set.h" +#include "bts/fibre/strand/set.h" +#include "bts/fibre/track/set.h" + + +#include "bts/inline_functions.h" + +using namespace BTS; + +const double ACS_DEFAULT =-1.0; +const double BASE_INTENSITY_DEFAULT = -1.0; +const size_t DEGREE_DEFAULT = 3; +const size_t NUM_FIBRES_DEFAULT = 5; +const float LENGTH_STDDEV_DEFAULT = 0.02; +const float WIDTH_MEAN_DEFAULT= 0.05; +const float WIDTH_STDDEV_DEFAULT= 0.005; +const float REJECT_RADIUS_DEFAULT = NAN; +const float DEFAULT_REJECT_RADIUS_SCALE = 1.5; +const double EDGE_BUFFER_DEFAULT = 0.075; +const size_t MAX_NUM_ATTEMPTS = 10000; + + +SET_VERSION_DEFAULT; +SET_AUTHOR ("Thomas G. Close"); +SET_COPYRIGHT (NULL); + +DESCRIPTION = { + "new_fibres", + "", + NULL +}; + +ARGUMENTS = { + Argument ("output","Output file location"), + Argument() +}; + + +OPTIONS = { + + Option("acs", "Intensity of the generated fibres.") + + Argument("acs","").type_float(SMALL_FLOAT,ACS_DEFAULT,LARGE_FLOAT), + + Option("base_intensity", "Base intensity of the generated fibres.") + + Argument("base_intensity","").type_float(SMALL_FLOAT,BASE_INTENSITY_DEFAULT,LARGE_FLOAT), + + Option("degree", "The degree of the generated fibres.") + + Argument("degree","").type_integer(0,DEGREE_DEFAULT,LARGE_INT), + + Option("num_fibres", "Size of the generated fibre sets.") + + Argument("num_fibres","").type_integer(0,NUM_FIBRES_DEFAULT,LARGE_INT), + + Option("length_stddev", "Standard deviation of the projection along each (i.e. x,y,z) axes.") + + Argument("length_stddev","").type_float(SMALL_FLOAT, LENGTH_STDDEV_DEFAULT,LARGE_FLOAT), + + Option("width_mean", "Mean width of the initialised fibres.") + + Argument("width_mean","").type_float(SMALL_FLOAT, WIDTH_MEAN_DEFAULT,LARGE_FLOAT), + + Option("width_stddev", "Standard deviation of width of the initialised fibres.") + + Argument("width_stddev","").type_float(SMALL_FLOAT, WIDTH_STDDEV_DEFAULT,LARGE_FLOAT), + + Option("reject_radius", "If a centre of a randomly generated fibre lies within the radius of a previously generated strand it is rejected.") + + Argument("reject_radius","").type_float(SMALL_FLOAT, REJECT_RADIUS_DEFAULT,LARGE_FLOAT), + + Option("edge_buffer", "Restrict the distributed_centres of the generated fibres to be within a certain distance from the edge of the ROI.") + + Argument("edge_buffer","").type_float(SMALL_FLOAT, EDGE_BUFFER_DEFAULT,LARGE_FLOAT), + + Option("curve_stddev", "The standard deviation of the curvature parameters.") + + Argument("curve_stddev", "").type_float(0, 0, LARGE_FLOAT), + + Option ("seed", "Seed for the random generation") + + Argument ("seed", ""), + + Option ("centre_radius", "Radius from origin that the fibre centres will be initiated on.") + + Argument("centre_radius","").type_float(SMALL_FLOAT, -1.0,LARGE_FLOAT), + + IMAGE_PARAMETERS, + + +Option() }; + + +std::vector< Triple > distributed_centres(const Triple& roi_extent, size_t num_fibres, gsl_rng* rand_gen, double reject_radius); + +std::vector< Triple > distant_centres(size_t num_fibres, double centre_radius, gsl_rng* rand_gen); + +std::vector< Triple > orientations(size_t num_fibres, gsl_rng* rand_gen, double length_stddev); + + +EXECUTE { + + + std::string output_location = argument[0]; + + + double acs = ACS_DEFAULT; + double base_intensity = BASE_INTENSITY_DEFAULT; + size_t degree = DEGREE_DEFAULT; + size_t num_fibres = NUM_FIBRES_DEFAULT; + double length_stddev = LENGTH_STDDEV_DEFAULT; + double width_mean = WIDTH_MEAN_DEFAULT; + double width_stddev = WIDTH_STDDEV_DEFAULT; + double reject_radius = REJECT_RADIUS_DEFAULT; + double edge_buffer = EDGE_BUFFER_DEFAULT; + double centre_radius = -1.0; + double curve_stddev = 0; + size_t seed = time(NULL); + + + Options opt; + + opt = get_options("acs"); + if (opt.size()) + acs = opt[0][0]; + + opt = get_options("base_intensity"); + if (opt.size()) + base_intensity = opt[0][0]; + + opt = get_options("degree"); + if (opt.size()) + degree = opt[0][0]; + + opt = get_options("num_fibres"); + if (opt.size()) + num_fibres = opt[0][0]; + + opt = get_options("length_stddev"); + if (opt.size()) + length_stddev = opt[0][0]; + + opt = get_options("width_mean"); + if (opt.size()) + width_mean = opt[0][0]; + + opt = get_options("width_stddev"); + if (opt.size()) + width_stddev = opt[0][0]; + + opt = get_options("reject_radius"); + if (opt.size()) + reject_radius = opt[0][0]; + + opt = get_options("edge_buffer"); + if (opt.size()) + edge_buffer = opt[0][0]; + + opt = get_options("centre_radius"); + if (opt.size()) + centre_radius = opt[0][0]; + + opt = get_options("curve_stddev"); + if (opt.size()) + curve_stddev = opt[0][0]; + + opt = get_options("seed"); + if (opt.size()) { + std::string seed_string = opt[0][0]; + seed = to(seed_string); + } else + std::cout << "No random seed provided, using: " << seed << std::endl; + + SET_IMAGE_PARAMETERS; + + Triple roi_extent = (img_vox_lengths * img_dims) / 2.0 - edge_buffer; + + if (isnan(reject_radius)) { + double vol = roi_extent[X] * roi_extent[Y] * roi_extent[Z] * 8.0; + + reject_radius = MR::Math::pow((3.0 * vol) / (4.0 * M_PI * (double)num_fibres), 1.0/3.0) * DEFAULT_REJECT_RADIUS_SCALE; + } + + + std::map properties; + + ADD_IMAGE_PROPERTIES(properties); + properties["length_stddev"] = str(length_stddev); + properties["width_stddev"] = str(width_stddev); + + if (centre_radius > 0) + properties["centre_radius"] = str(centre_radius); + else + properties["reject_radius"] = str(reject_radius); + + properties["edge_buffer"] = str(edge_buffer); + properties["seed"] = str(seed); + + + + //Initialise random number generator. + gsl_rng* rand_gen = gsl_rng_alloc(gsl_rng_taus); + gsl_rng_set(rand_gen, seed); + + + std::vector props; + if (base_intensity >= 0.0) + props.push_back(Fibre::Strand::Set::BASE_INTENSITY_PROP); + + + std::vector elem_props; + if (acs >= 0.0) + elem_props.push_back(Fibre::Base::Object::ACS_SQRT_PROP); + + + + + if (File::has_or_txt_extension(output_location)) { + + MR::ProgressBar progress_bar ("Initialising strands..."); + + Fibre::Strand::Set strands(num_fibres, degree, props, elem_props); + strands.zero(); + strands.set_extend_props(properties); + if (base_intensity >= 0.0) + strands.set_base_intensity(base_intensity); + + std::vector< Triple > centres; + if (centre_radius > 0) + centres = distant_centres(num_fibres, centre_radius, rand_gen); + else + centres = distributed_centres(roi_extent, num_fibres, rand_gen, reject_radius); + + std::vector< Triple > orients = orientations(num_fibres, rand_gen, length_stddev); + + for (size_t strand_i = 0; strand_i < strands.size(); ++strand_i) { + + strands[strand_i][0] = centres[strand_i]; + strands[strand_i][1] = orients[strand_i]; + + if (curve_stddev) + strands[strand_i][2] = rand_triple(curve_stddev,rand_gen); + + if (acs >= 0.0) + strands[strand_i].set_acs(acs); + + } + + + strands.save(output_location); + + } else if (File::has_or_txt_extension(output_location)) { + + MR::ProgressBar progress_bar ("Initialising tractlets..."); + + Fibre::Tractlet::Set tractlets(num_fibres, degree, props, elem_props); + tractlets.zero(); + tractlets.set_extend_props(properties); + if (base_intensity >= 0.0) + tractlets.set_base_intensity(base_intensity); + + std::vector< Triple > centres; + if (centre_radius > 0) + centres = distant_centres(num_fibres, centre_radius, rand_gen); + else + centres = distributed_centres(roi_extent, num_fibres, rand_gen, reject_radius); + + std::vector< Triple > orients = orientations(num_fibres, rand_gen, length_stddev); + + for (size_t tractlet_i = 0; tractlet_i < tractlets.size(); ++tractlet_i) { + + tractlets[tractlet_i][0][0] = centres[tractlet_i]; + tractlets[tractlet_i][0][1] = orients[tractlet_i]; + + if (curve_stddev) + tractlets[tractlet_i][0][2] = rand_triple(curve_stddev,rand_gen); + + //Get width axes perpendicular to the main orientation and each other. + Triple ax1 = orients[tractlet_i].cross(orients[tractlet_i].min_axis()).normalise(); + Triple ax2 = orients[tractlet_i].cross(ax1).normalise(); + + //Scale width axes by width parameter + tractlets[tractlet_i][1][0] = ax1 * (width_mean + gsl_ran_gaussian(rand_gen, width_stddev)); + tractlets[tractlet_i][2][0] = ax2 * (width_mean + gsl_ran_gaussian(rand_gen, width_stddev)); + + if (acs >= 0.0) + tractlets[tractlet_i].set_acs(acs); + + } + + tractlets.save(output_location); + + } else + throw Exception ("Unrecognised file extension '" + File::extension(output_location) + "'."); + +} + + +//Randomly generate centre points within the region of interest +std::vector< Triple > distributed_centres(const Triple& roi_extent, size_t num_fibres, gsl_rng* rand_gen, double reject_radius) { + + std::vector< Triple > points; + + for (size_t fibre_i = 0; fibre_i < num_fibres; ++fibre_i) { + + Triple centre; + + bool accept = false; + + for (size_t attempt_i = 0; attempt_i < MAX_NUM_ATTEMPTS; ++attempt_i) { + + for (size_t dim_i = 0; dim_i < 3; ++dim_i) + centre[dim_i] = gsl_ran_flat(rand_gen, -roi_extent[Z], roi_extent[Z]); + + bool reject = false; + + for (size_t point_i = 0; point_i < points.size(); ++point_i) + if (dist(centre,points[point_i]) < reject_radius) { + reject = true; + break; + } + + + if (!reject) { + accept = true; + break; + } + + } + + if (accept) + points.push_back(centre); + else + throw Exception ("Could not find centre position for fibre " + str(fibre_i) + + " that lies outside the rejection radius of previously generated fibre centres after " + + str(MAX_NUM_ATTEMPTS) + ". Suggest reducing the reject_radius (" + str(reject_radius) + ")."); + + } + + + return points; + +} + + +std::vector< Triple > distant_centres(size_t num_fibres, double centre_radius, gsl_rng* rand_gen) { + + std::vector< Triple > points; + + for (size_t fibre_i = 0; fibre_i < num_fibres; ++fibre_i) { + + Triple point = rand_triple(1.0,rand_gen); + + point.normalise(); + + point *= centre_radius; + + points.push_back(point); + + } + + return points; + +} + +//Randomly generate orientations +std::vector< Triple > orientations(size_t num_fibres, gsl_rng* rand_gen, double length_stddev) { + + std::vector< Triple > orients; + + for (size_t fibre_i = 0; fibre_i < num_fibres; ++fibre_i) { + + Triple orient; + + for (size_t dim_i = 0; dim_i < 3; ++dim_i) + orient[dim_i] = gsl_ran_gaussian(rand_gen, length_stddev); + + orients.push_back(orient); + + } + + return orients; + +} diff --git a/cmd/map_colours.cpp b/cmd/map_colours.cpp new file mode 100644 index 0000000..b0a8eef --- /dev/null +++ b/cmd/map_colours.cpp @@ -0,0 +1,373 @@ +/* + Copyright 2008 Brain Research Institute, Melbourne, Australia + + Written by Thomas G Close, Mar 14, 2011. + + This file is part of MRtrix. + + MRtrix is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + MRtrix is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with MRtrix. If not, see . + +*/ + + +#include "bts/cmd.h" + +#include "bts/common.h" + +#include "bts/fibre/tractlet/set.h" +#include "bts/fibre/strand/set.h" +#include "bts/fibre/track/set.h" + +#include "bts/inline_functions.h" + +using namespace BTS; + +SET_VERSION_DEFAULT; +SET_AUTHOR ("Thomas G. Close"); +SET_COPYRIGHT (NULL); + + +DESCRIPTION = { + "Map colours to reference set by switching bundle indices to closest match.", + "", + NULL +}; + +ARGUMENTS = { + Argument ("reference", "Reference fibres the match fibres will be mapped to.").type_file (), + Argument ("match", "Input fibres that will have their bundle indices mapped.").type_file (), + Argument ("output", "Output fibres (if not provided will be same as match fibres)").optional().type_file (), + Argument ("input", "Input fibres (if not provided will be same as match fibres)").optional().type_file (), + Argument() +}; + + +OPTIONS = { + + Option ("num_length_sections", "Number of samples to take along the strand path") + + Argument ("num_length_sections", "").type_integer (1, 100, 2000), + + Option ("degree", "The degree of the Strand coefficients used to describe the strands") + + Argument ("degree", "").type_integer (1, Fibre::Strand::DEFAULT_DEGREE, LARGE_INT), + +Option() }; + + +EXECUTE { + + std::string reference_location = argument[0]; + std::string match_location= argument[1]; + std::string output_location = match_location; + std::string input_location = match_location; + + if (argument.size() == 3) + output_location = argument[2].c_str(); + + if (argument.size() == 4) { + output_location = argument[2].c_str(); + input_location = argument[3].c_str(); + } + + size_t degree = Fibre::Strand::DEFAULT_DEGREE; +// size_t num_length_sections = 0; + + + Options opt = get_options("degree"); + if (opt.size()) + degree = opt[0][0]; + + // Options opt = get_options("num_length_sections"); + // if (opt.size()) + // num_length_sections = opt[0][0]; + + + + //TODO: Make this into a template function to avoid replication + + if (File::has_extension(match_location)) { + + Fibre::Tractlet::Set reference(reference_location, degree); + + if (!reference.size()) + throw Exception ("Reference set, loaded from '" + reference_location + "' does not contain any fibres."); + + if (!reference.has_extend_elem_prop(Fibre::Track::BUNDLE_INDEX_EPROP)) { + + std::cout << std::endl << "Warning! Reference set does not have bundle_index property, will use strand order." << std::endl; + + reference.add_extend_elem_prop(Fibre::Track::BUNDLE_INDEX_EPROP,"-1"); + for (size_t tract_i = 0; tract_i < reference.size(); ++tract_i) + reference.set_extend_elem_prop(Fibre::Track::BUNDLE_INDEX_EPROP,str(tract_i), tract_i); + + } + + std::vector bundle_indices; + + for (size_t ref_i = 0; ref_i < reference.size(); ++ref_i) + bundle_indices.push_back(to(reference.get_extend_elem_prop(Fibre::Track::BUNDLE_INDEX_EPROP, ref_i))); + + size_t new_bundle_index = *std::max_element(bundle_indices.begin(), bundle_indices.end()); + + //Check bundle indices are unique in reference set. + size_t num_bundles = bundle_indices.size(); + std::unique(bundle_indices.begin(), bundle_indices.end()); + if (bundle_indices.size() != num_bundles) + throw Exception ("Bundle indices were not unique in reference set '" + reference_location + "'."); + + + + Fibre::Tractlet::Set match(match_location); + + std::vector reference_match(match.size()); + + + if (reference.size() > match.size()) { + + MR::ProgressBar progress_bar("Getting closest match between match template and reference set..."); + + match.distance(reference, reference_match); + + } else { + + MR::ProgressBar progress_bar("Getting closest match between match template and reference set..."); + + std::vector inv_reference_match; + + reference.distance(match, inv_reference_match); + + size_t extra_index = reference.size(); + + for (size_t tract_i = 0; tract_i < match.size(); ++tract_i) { + + std::vector::iterator index = std::find(inv_reference_match.begin(), inv_reference_match.end(), tract_i); + + if (index != inv_reference_match.end()) + reference_match[tract_i] = index - inv_reference_match.begin(); + else { + reference_match[tract_i] = extra_index++; + bundle_indices.push_back(new_bundle_index++); + } + + } + + + } + + if (File::has_extension(input_location)) { + + MR::ProgressBar progress_bar("Mapping bundle indices to output set..."); + + Fibre::Tractlet::Set input; + + if (input_location != match_location) { + input.load(input_location); + if (input.size() != match.size()) + throw Exception ("Size of match set (" + str(match.size()) + ") and input set (" + str(input.size()) + ") do not match."); + } else + input = match; + + if (!match.has_extend_elem_prop(Fibre::Track::BUNDLE_INDEX_EPROP)) + input.add_extend_elem_prop(Fibre::Track::BUNDLE_INDEX_EPROP, "-1"); + + for (size_t tract_i = 0; tract_i < match.size(); ++tract_i) { + + input.set_extend_elem_prop(Fibre::Track::BUNDLE_INDEX_EPROP, str(bundle_indices[reference_match[tract_i]]), tract_i); + + ++progress_bar; + } + + input.save(output_location); + + + } else if (File::has_extension(input_location)) { + + MR::ProgressBar progress_bar("Mapping bundle indices to output set..."); + + if (input_location == output_location) + throw Exception ("Output location ('" + output_location + "') cannot be the same as input location ('" + input_location + "') for tractlet sets."); + + Fibre::Tractlet::Set::Reader reader(input_location); + + std::vector elem_header = reader.extend_elem_prop_keys(); + + if (std::find(elem_header.begin(), elem_header.end(), Fibre::Track::BUNDLE_INDEX_EPROP) == elem_header.end()) + elem_header.push_back(Fibre::Track::BUNDLE_INDEX_EPROP); + + Fibre::Tractlet::Set::Writer writer(output_location, reader, reader.extend_prop_keys(), elem_header, reader.get_extend_props()); + + Fibre::Tractlet::Set tractlets; + + size_t count = 0; + while (reader.next(tractlets)) { + + if (tractlets.size() != match.size()) + throw Exception ("Size of tractlet set " + str(count) + " (" + str(tractlets.size()) + ") does not match that of 'match' set (" + str(match.size()) + ")"); + + tractlets.add_extend_elem_prop(Fibre::Track::BUNDLE_INDEX_EPROP, "-1"); + + for (size_t tract_i = 0; tract_i < tractlets.size(); ++tract_i) + tractlets.set_extend_elem_prop(Fibre::Track::BUNDLE_INDEX_EPROP, str(bundle_indices[reference_match[tract_i]]), tract_i); + + writer.append(tractlets); + ++count; + ++progress_bar; + + } + + + } else + throw Exception ("Usupported output file type ('" + output_location + "') for match of type tractlet."); + + + + } else if (File::has_extension(match_location)) { + + Fibre::Strand::Set reference(reference_location, degree); + + if (!reference.size()) + throw Exception ("Reference set, loaded from '" + reference_location + "' does not contain any fibres."); + + if (!reference.has_extend_elem_prop(Fibre::Track::BUNDLE_INDEX_EPROP)) { + + std::cout << std::endl << "Warning! Reference set does not have bundle_index property, will use strand order." << std::endl; + + reference.add_extend_elem_prop(Fibre::Track::BUNDLE_INDEX_EPROP,"-1"); + for (size_t tract_i = 0; tract_i < reference.size(); ++tract_i) + reference.set_extend_elem_prop(Fibre::Track::BUNDLE_INDEX_EPROP,str(tract_i), tract_i); + + } + std::vector bundle_indices; + + for (size_t ref_i = 0; ref_i < reference.size(); ++ref_i) + bundle_indices.push_back(to(reference.get_extend_elem_prop(Fibre::Track::BUNDLE_INDEX_EPROP, ref_i))); + + size_t new_bundle_index = *std::max_element(bundle_indices.begin(), bundle_indices.end()); + + //Check bundle indices are unique in reference set. + size_t num_bundles = bundle_indices.size(); + std::unique(bundle_indices.begin(), bundle_indices.end()); + if (bundle_indices.size() != num_bundles) + throw Exception ("Bundle indices were not unique in reference set '" + reference_location + "'."); + + + + Fibre::Strand::Set match(match_location); + + std::vector reference_match(match.size()); + + + if (reference.size() > match.size()) { + + MR::ProgressBar progress_bar("Getting closest match between match template and reference set..."); + + match.distance(reference, reference_match); + + } else { + + MR::ProgressBar progress_bar("Getting closest match between match template and reference set..."); + + std::vector inv_reference_match; + + reference.distance(match, inv_reference_match); + + size_t extra_index = reference.size(); + + for (size_t tract_i = 0; tract_i < match.size(); ++tract_i) { + + std::vector::iterator index = std::find(inv_reference_match.begin(), inv_reference_match.end(), tract_i); + + if (index != inv_reference_match.end()) + reference_match[tract_i] = index - inv_reference_match.begin(); + else { + reference_match[tract_i] = extra_index++; + bundle_indices.push_back(new_bundle_index++); + } + + } + + + } + + if (File::has_extension(input_location)) { + + MR::ProgressBar progress_bar("Mapping bundle indices to output set..."); + + Fibre::Strand::Set input; + + if (input_location != match_location) { + input.load(input_location); + if (input.size() != match.size()) + throw Exception ("Size of match set (" + str(match.size()) + ") and input set (" + str(input.size()) + ") do not match."); + } else + input = match; + + if (!match.has_extend_elem_prop(Fibre::Track::BUNDLE_INDEX_EPROP)) + input.add_extend_elem_prop(Fibre::Track::BUNDLE_INDEX_EPROP, "-1"); + + for (size_t tract_i = 0; tract_i < match.size(); ++tract_i) { + + input.set_extend_elem_prop(Fibre::Track::BUNDLE_INDEX_EPROP, str(bundle_indices[reference_match[tract_i]]), tract_i); + + ++progress_bar; + } + + input.save(output_location); + + + } else if (File::has_extension(input_location)) { + + MR::ProgressBar progress_bar("Mapping bundle indices to output set..."); + + if (input_location == output_location) + throw Exception ("Output location ('" + output_location + "') cannot be the same as input location ('" + input_location + "') for tractlet sets."); + + Fibre::Strand::Set::Reader reader(input_location); + + std::vector elem_header = reader.extend_elem_prop_keys(); + + if (std::find(elem_header.begin(), elem_header.end(), Fibre::Track::BUNDLE_INDEX_EPROP) == elem_header.end()) + elem_header.push_back(Fibre::Track::BUNDLE_INDEX_EPROP); + + Fibre::Strand::Set::Writer writer(output_location, reader, reader.extend_prop_keys(), elem_header, reader.get_extend_props()); + + Fibre::Strand::Set tractlets; + + size_t count = 0; + while (reader.next(tractlets)) { + + if (tractlets.size() != match.size()) + throw Exception ("Size of tractlet set " + str(count) + " (" + str(tractlets.size()) + ") does not match that of 'match' set (" + str(match.size()) + ")"); + + tractlets.add_extend_elem_prop(Fibre::Track::BUNDLE_INDEX_EPROP, "-1"); + + for (size_t tract_i = 0; tract_i < tractlets.size(); ++tract_i) + tractlets.set_extend_elem_prop(Fibre::Track::BUNDLE_INDEX_EPROP, str(bundle_indices[reference_match[tract_i]]), tract_i); + + writer.append(tractlets); + ++count; + ++progress_bar; + + } + + + } else + throw Exception ("Usupported output file type ('" + output_location + "') for match of type tractlet."); + + + + } else + throw Exception ("Unsupported extension of match file '" + match_location+ "'."); + + +} diff --git a/cmd/maxb0.cpp b/cmd/maxb0.cpp new file mode 100644 index 0000000..249c4fa --- /dev/null +++ b/cmd/maxb0.cpp @@ -0,0 +1,81 @@ +/* + Copyright 2009 Brain Research Institute, Melbourne, Australia + + Created by Tom Close on 13/03/09. + + This file is part of Bayesian Tractlet Sampling (BTS). + + BTS is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + BTS is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with BTS. If not, see . + + */ + + +extern "C" { +#include +#include +} + + +#include "bts/cmd.h" +#include "progressbar.h" + +#include "bts/common.h" +#include "bts/image/expected/buffer.h" +#include "bts/image/observed/buffer.h" + +#include "bts/image/noise.h" +#include "bts/image/noise/gaussian.h" + + + +#include "bts/inline_functions.h" + +using namespace BTS; + +SET_VERSION_DEFAULT; +SET_AUTHOR ("Thomas G. Close"); +SET_COPYRIGHT (NULL); + +DESCRIPTION = { + "Finds the maximum b0 intensity of an image", + "", + NULL +}; + +ARGUMENTS = { + Argument ("image", "The image.").type_file(), + + Argument() +}; + + +OPTIONS = { + +Option() + +}; + + + +EXECUTE { + + std::string input_location = argument[0]; + + Image::Observed::Buffer image(input_location); + + std::cout << image.max_b0(); + +} + + diff --git a/cmd/merge_fibres.cpp b/cmd/merge_fibres.cpp new file mode 100644 index 0000000..8b980ec --- /dev/null +++ b/cmd/merge_fibres.cpp @@ -0,0 +1,400 @@ +/* + Copyright 2009 Brain Research Institute, Melbourne, Australia + + Written by Thomas G. Close, 04/03/2009. + + This file is part of Bayesian Tractlet Sampling (BTS). + + BTS is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + BTS is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with BTS. If not, see . + + */ + +#include "bts/cmd.h" +#include "point.h" +#include "progressbar.h" + +#include "bts/common.h" +#include "bts/file.h" + + +#include "bts/fibre/strand/set.h" +#include "bts/fibre/track/set.h" +#include "bts/fibre/tractlet/set.h" +#include "bts/fibre/properties/extended.h" + + +#include "bts/diffusion/model.h" +#include "bts/image/expected/trilinear/buffer.h" +#include "bts/image/expected/gaussian/buffer.h" +#include "bts/image/expected/quartic/buffer.h" + +#include "bts/prob/uniform.h" +#include "bts/prob/prior.h" + + + + +#include "bts/math/common.h" + +#include "bts/prob/likelihood.h" +#include "bts/prob/likelihood.h" +#include "bts/prob/likelihood/one_sided_gaussian.h" +#include "bts/prob/likelihood/gaussian.h" + +#include "bts/image/observed/buffer.h" + +#include "bts/image/expected/buffer.h" + +#include "bts/math/blossom.h" +#include "bts/math/blossom/edge.h" + + +#include "bts/inline_functions.h" + + +using namespace BTS; + +const double THRESHOLD_DEFAULT = -0.5; +const size_t NUM_LENGTH_SECTIONS_DEFAULT=5; + +SET_VERSION_DEFAULT; +SET_AUTHOR ("Thomas G. Close"); +SET_COPYRIGHT (NULL); + +DESCRIPTION = { + "Merge strands that can be better represented by a single strand", + "", + NULL +}; + +ARGUMENTS = { + Argument ("observed image", "The observed image the strands will be fit against.").type_image_in (), + Argument ("input", "The strands to be selected from.").type_file (), + Argument ("output", "The selected strands.").type_file (), + Argument() +}; + + +OPTIONS = { + + Option ("threshold","Threshold above which to strands will be merged together.") + + Argument ("","").type_float (-1, Fibre::Tractlet::STRANDS_PER_AREA_DEFAULT, LARGE_FLOAT), + + Option ("strands_per_acs","Basewidth of the imported tractlets.") + + Argument ("","").type_float (-1, THRESHOLD_DEFAULT, LARGE_FLOAT), + + Option ("num_tractlets", "Number of tractlets to convert the strands into if outputting tractlets (default to number of input tractlets") + + Argument ("num_tractlets", "").type_integer (0, 0, LARGE_INT), + + Option ("num_length_sections", "Number of samples to take along the strand path") + + Argument ("num_length_sections", "").type_integer (1, NUM_LENGTH_SECTIONS_DEFAULT, LARGE_INT), + + Option ("new_degree", "The degree the merged strands will have") + + Argument ("new_degree", "").type_integer (1, Fibre::Strand::DEFAULT_DEGREE, LARGE_INT), + + DIFFUSION_PARAMETERS, + + IMAGE_PARAMETERS, + + EXPECTED_IMAGE_PARAMETERS, + + LIKELIHOOD_PARAMETERS, + + PRIOR_PARAMETERS, + +Option() }; + + +EXECUTE { + + std::string obs_image_location = argument[0]; + std::string input_location = argument[1]; + std::string output_location = argument[2]; + + + + MR::Image::Header header (argument[0]); + + if (header.ndim() != 4) + throw Exception ("dwi image should contain 4 dimensions"); + + + float threshold = THRESHOLD_DEFAULT; + float strands_per_acs = Fibre::Tractlet::STRANDS_PER_AREA_DEFAULT; + size_t num_tractlets = 0; + size_t num_length_sections = NUM_LENGTH_SECTIONS_DEFAULT; + size_t new_degree = Fibre::Strand::DEFAULT_DEGREE; + + Options opt = get_options("threshold"); + if (opt.size()) + threshold = opt[0][0]; + + opt = get_options("strands_per_acs"); + if (opt.size()) + strands_per_acs = opt[0][0]; + + opt = get_options("num_tractlets"); + if (opt.size()) + num_tractlets = opt[0][0]; + + opt = get_options("num_length_sections"); + if (opt.size()) + num_length_sections = opt[0][0]; + + opt = get_options("new_degree"); + if (opt.size()) + new_degree = opt[0][0]; + + + // Loads parameters to construct Diffusion::Model ('diff_' prefix) + SET_DIFFUSION_PARAMETERS; + + // Loads parameters to construct Image::Expected::*::Buffer that are inherited from Image::Observed::Buffer ('img_' prefix) + SET_IMAGE_PARAMETERS; + + // Loads parameters to construct Image::Expected::*::Buffer ('img_' prefix) + SET_EXPECTED_IMAGE_PARAMETERS; + + // Loads parameters to construct Prob::Likelihood ('like_' prefix) + SET_LIKELIHOOD_PARAMETERS; + + // Loads parameters to construct Prob::Prior ('prior_' prefix) + SET_PRIOR_PARAMETERS; + + + + Image::Observed::Buffer obs_image(obs_image_location, Diffusion::Encoding::Set(diff_encodings)); + + if (obs_image.properties().count("diff_response_SH")) { + + if (Math::matlab_str(diff_response_SH) != obs_image.properties()["diff_response_SH"]) + std::cout << std::endl << "Warning! Diffusion response function harmonics (" << Math::matlab_str(diff_response_SH) << ") do not match reference image (" << obs_image.properties()["diff_response_SH"] + ")!" << std::endl; + + } + + + //If gradient scheme is included in reference image header, use that instead of default (NB: Will override any gradients passed to '-diff_encodings' option). + if (header.get_DW_scheme().rows()) { + diff_encodings = header.get_DW_scheme(); + diff_encodings_location = "From observed image"; + } + + + if ((header.count("diff_response_SH")) && (Math::matlab_str(diff_response_SH) != header["diff_response_SH"])) + std::cout << std::endl << "Warning! Diffusion response function harmonics (" << Math::matlab_str(diff_response_SH) << ") do not match reference image (" << header["diff_response_SH"] + ")!" << std::endl; + + + + //----------------------------// + // Initialize Expected Image // + //----------------------------// + + + Diffusion::Model diffusion_model = Diffusion::Model::factory (diff_encodings, + diff_response_SH, + diff_adc, + diff_fa, + diff_isotropic); + + + Image::Expected::Buffer& exp_image = *Image::Expected::Buffer::factory(exp_type, + obs_image, + diffusion_model, + exp_num_length_sections, + exp_num_width_sections, + exp_interp_extent, + exp_enforce_bounds, + exp_half_width); + + Image::Expected::Buffer& diff_image = *exp_image.clone(); + + //-----------------------// + // Initialize Likelihood // + //-----------------------// + + + Prob::Likelihood* likelihood = Prob::Likelihood::factory(like_type, obs_image, &exp_image, like_snr, like_b0_include, like_outside_scale, like_ref_b0, like_ref_signal); + + + + //------------------// + // Initialize Prior // + //------------------// + + Prob::Prior prior (prior_scale, + prior_mag_scale, + prior_mag_aux_scale, + prior_hook_scale, + prior_hook_num_points, + prior_density_high_scale, + prior_density_low_scale, + prior_density_num_points, + prior_acs_scale, + prior_acs_mean, + prior_length_scale, + prior_length_mean); + + + Fibre::Strand::Set strands(input_location,strands_per_acs); + + if (exp_base_intensity <= 0) + exp_base_intensity = exp_image.base_intensity_default(obs_image, strands); + + strands.save("/home/tclose/data/input_strands.str"); + + strands.set_base_intensity(exp_base_intensity); + + if ((num_tractlets == 0) && strands.has_extend_prop(Fibre::Strand::Set::ORIGINAL_NUM_TRACTLETS_PROP)) + num_tractlets = to(strands.get_extend_prop(Fibre::Strand::Set::ORIGINAL_NUM_TRACTLETS_PROP)); + + exp_image.expected_image(strands); + + + obs_image.save("/home/tclose/data/orig_observed.mif"); + exp_image.save("/home/tclose/data/orig_expected.mif"); + + double orig_like = likelihood->log_prob(strands); + + std::set edges; + + MR::ProgressBar progress_bar ("Calculating merge weights...", strands.size()); + + for (size_t row_i = 0; row_i < strands.size(); ++row_i) { + for (size_t col_i = row_i+1; col_i < strands.size(); ++col_i) { + + bool same_bundle = false; + + if (strands.has_extend_elem_prop(Fibre::Track::BUNDLE_INDEX_EPROP)) + if (to(strands.get_extend_elem_prop(Fibre::Track::BUNDLE_INDEX_EPROP,row_i)) == to(strands.get_extend_elem_prop(Fibre::Track::BUNDLE_INDEX_EPROP,col_i))) + same_bundle = true; + + if (!same_bundle) { + + Fibre::Strand row_strand = strands[row_i]; + Fibre::Strand col_strand = strands[col_i]; + + Fibre::Strand merged = row_strand.merge(col_strand, num_length_sections, new_degree); + + diff_image.zero(); + diff_image.part_image(row_strand); + + diff_image.part_image(col_strand); + + diff_image.negate(); + + diff_image.part_image(merged); + + exp_image += diff_image; + + //The distance measure. The original prior is averaged by number of strands, and the merged prior and likelihood + //are subtracted from it so that unlikely matches are assigned a large distance. + + double orig_prior = prior.log_prob(row_strand) + prior.log_prob(col_strand); + double merged_prior = prior.log_prob(merged); + double merged_like = likelihood->log_prob(exp_image); + +// exp_image.save("/home/tclose/data/merged_expected.mif"); + + double diff_lprob = (merged_prior - orig_prior) + (merged_like - orig_like); + + //If difference in log prob is greater than zero. i.e. if merging improves probability add to list of edges to + //find the best fit. + +// if (!(row_i == 3 && col_i == 8)) + if (diff_lprob > 0) + edges.insert(Math::Blossom::Edge(row_i,col_i,-diff_lprob)); + + exp_image -= diff_image; + + } + + + } + + ++progress_bar; + } + + + std::vector merge_list; + + for (std::set::iterator edge_it = edges.begin(); edge_it !=edges.end();) { + + merge_list.push_back(*edge_it); + + std::set::iterator edge_it2 = edge_it; + + ++edge_it2; + + while (edge_it2 != edges.end()) + if (edge_it2->has_node(edge_it->first) || edge_it2->has_node(edge_it->second)) + edges.erase(edge_it2++); + else + ++edge_it2; + + edges.erase(edge_it++); + } + + + std::set not_merge_list; + + for (size_t strand_i = 0; strand_i < strands.size(); ++strand_i) + not_merge_list.insert(strand_i); + + double expected_improvement = 0; + + std::cout << std::endl; + + for (std::vector::iterator merge_it = merge_list.begin(); merge_it != merge_list.end(); ++merge_it) { + not_merge_list.erase(merge_it->first); + not_merge_list.erase(merge_it->second); + expected_improvement -= merge_it->weight; + std::cout << merge_it->first << " " << merge_it->second << ": " << - merge_it->weight << std::endl; + } + + + Fibre::Strand::Set merged; + + for (std::vector::iterator merge_it = merge_list.begin(); merge_it != merge_list.end(); ++merge_it) { + merged.push_back(strands[merge_it->first].merge(strands[merge_it->second], num_length_sections, new_degree)); + } + + for (std::set::iterator not_merge_it = not_merge_list.begin(); not_merge_it != not_merge_list.end(); ++not_merge_it) { + Fibre::Strand strand = strands[*not_merge_it]; + strand.resize(new_degree,0.0); + merged.push_back(strand); + + } + + + double improvement = likelihood->log_prob(merged) + prior.log_prob(merged) - likelihood->log_prob(strands) - prior.log_prob(strands); + + merged.save("/home/tclose/data/merged.str"); + +// if (improvement > 0) { + merged.save(output_location,0,num_tractlets); + std::cout << "\n\nMerged " << merge_list.size() << " strand pairs for a combined improvement of the posterior of " << improvement << " (" << expected_improvement << " expected) over the original set." << std::endl; +// } else { +// strands.save(output_location,0,num_tractlets); +// std::cout << "\n\nNo improvement could be found from the original set." << std::endl; +// } + + + } + +//} + + + + + diff --git a/cmd/metropolis.cpp b/cmd/metropolis.cpp new file mode 100644 index 0000000..309e999 --- /dev/null +++ b/cmd/metropolis.cpp @@ -0,0 +1,571 @@ +/* + Copyright 2009 Brain Research Institute, Melbourne, Australia + + Created by Tom Close on 13/03/09. + + This file is part of Bayesian Tractlet Sampling (BTS). + + BTS is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + BTS is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with BTS. If not, see . + + */ + + +extern "C" { +#include +#include +} + + +#include + +#include "bts/cmd.h" + +#include "math/matrix.h" +#include "progressbar.h" + + +#include "bts/common.h" +#include "bts/file.h" + + +#include "bts/fibre/tractlet/set.h" +#include "bts/fibre/strand/set.h" + + +#include "bts/diffusion/model.h" +#include "bts/image/expected/trilinear/buffer.h" +#include "bts/image/expected/gaussian/buffer.h" +#include "bts/image/expected/quartic/buffer.h" + +#include "bts/image/observed/buffer.h" + +#include "bts/prob/uniform.h" +#include "bts/prob/prior.h" + + + + + +#include "bts/prob/likelihood.h" +#include "bts/prob/likelihood.h" +#include "bts/prob/likelihood/one_sided_gaussian.h" +#include "bts/prob/likelihood/gaussian.h" + +#include "bts/mcmc/proposal/walker.h" +#include "bts/mcmc/proposal/distribution.h" +#include "bts/mcmc/proposal/distribution/gaussian.h" + +#include "bts/mcmc/metropolis.h" + +#include "bts/fibre/strand/set/walker.h" +#include "bts/fibre/tractlet/set/walker.h" + +#include "bts/math/common.h" + + +#include "bts/inline_functions.h" + +using namespace BTS; + + + +SET_VERSION_DEFAULT; +SET_AUTHOR ("Thomas G. Close"); +SET_COPYRIGHT (NULL); + +DESCRIPTION = { + "Runs Metropolis-Hastings sampling on a given image from a given starting configuration of tractlets or strands.", + "", + NULL +}; + +ARGUMENTS = { + Argument ("input_image", "The image the tractlets will be fit against.").type_image_in(), + + Argument ("inital_tractlets", "A starting point for the MCMC algorithm.").type_file (), + + Argument ("samples_location", "The location where the samples will be saved.").type_file (), + + Argument() +}; + + +OPTIONS = { + + + Option ("num_iterations", "The Number of MCMC iterations to take of the prob distribution over the tractlets") + + Argument ("num_iterations", "").type_integer (1, MCMC::Metropolis::NUM_ITERATIONS_DEFAULT, LARGE_INT), + + Option ("sample_period", "The number of MCMC iterations that will be performed before a sample is saved") + + Argument ("sample_period", "").type_integer (1, MCMC::Metropolis::SAMPLE_PERIOD_DEFAULT, LARGE_INT), + + Option ("burn_num_iterations", "The Number of MCMC iterations to take as part of the Burn-in.") + + Argument ("burn_num_iterations", "").type_integer (0, MCMC::Metropolis::BURN_NUM_ITERATIONS_DEFAULT, LARGE_INT), + + Option ("burn_sample_period", "The number of MCMC iterations that will be performed before a sample is saved in the Burn-in.") + + Argument ("burn_sample_period", "").type_integer (1, MCMC::Metropolis::BURN_SAMPLE_PERIOD_DEFAULT, LARGE_INT), + + Option ("burn_enforce_bounds", "Enforce the image bounds during the burn-in period. Otherwise the signal outside the image expected, given the fibre configuration will be recorded and its likelihood compared with empty (isotropic) intensities."), + + Option("anneal_frac_start", "Over the burn-in period annealing can be simulated via linear linear cooling specified by a scalar fraction that begins a defined value and linearly increases to 1.0.") + + Argument("anneal_frac_start","").type_float(0.0, MCMC::Metropolis::ANNEAL_FRAC_START_DEFAULT, 1.0), + + Option ("seed", "The random seed that is passed to the random generator") + + Argument ("seed", ""), + + Option ("prior_only", "Only sample from the prior distribution."), + + Option ("unverbose", "Turn off verbose output of sampling."), + + Option ("save_images", "Save both observed and expected images for debugging."), + + DIFFUSION_PARAMETERS, + + EXPECTED_IMAGE_PARAMETERS, + + LIKELIHOOD_PARAMETERS, + + PRIOR_PARAMETERS, + + PROPOSAL_WALKER_PARAMETERS, + + PROPOSAL_DISTRIBUTION_PARAMETERS, + + COMMON_PARAMETERS, + +Option() }; + + + + +EXECUTE { + +//-----------------// +// Load Arguments // +//-----------------// + + std::string obs_image_location = argument[0]; + std::string initial_location = argument[1]; + std::string samples_location = argument[2]; + std::string burn_samples_location = File::strip_extension (samples_location) + ".burn." + File::extension(samples_location); + + + + MR::Image::Header header (argument[0]); + + if (header.ndim() != 4) + throw Exception ("dwi image should contain 4 dimensions"); + + + +//----------------------------------// +// Get and Set Optional Parameters // +//----------------------------------// + + size_t num_iterations = MCMC::Metropolis::NUM_ITERATIONS_DEFAULT; + size_t sample_period = MCMC::Metropolis::SAMPLE_PERIOD_DEFAULT; + size_t burn_num_iterations = MCMC::Metropolis::BURN_NUM_ITERATIONS_DEFAULT; + size_t burn_sample_period = MCMC::Metropolis::BURN_SAMPLE_PERIOD_DEFAULT; + bool burn_enforce_bounds = false; + double anneal_frac_start = MCMC::Metropolis::ANNEAL_FRAC_START_DEFAULT; + size_t seed = time(NULL); + bool prior_only = false; + bool verbose = true; + bool save_images = false; + + + + Options opt = get_options("num_iterations"); + if (opt.size()) + num_iterations = opt[0][0]; + + opt = get_options("sample_period"); + if (opt.size()) + sample_period = opt[0][0]; + + opt = get_options("burn_num_iterations"); + if (opt.size()) + burn_num_iterations = opt[0][0]; + + opt = get_options("burn_sample_period"); + if (opt.size()) + burn_sample_period = opt[0][0]; + + opt = get_options("burn_enforce_bounds"); + if (opt.size()) + burn_enforce_bounds = true; + + opt = get_options("anneal_frac_start"); + if (opt.size()) + anneal_frac_start = opt[0][0]; + + opt = get_options("seed"); + if (opt.size()) { + std::string seed_string = opt[0][0]; + seed = to(seed_string); + } else + std::cout << "No random seed supplied. Using timestamp: " << seed << std::endl; + + opt = get_options("prior_only"); + if (opt.size()) + prior_only = true; + + opt = get_options("unverbose"); + if (opt.size()) + verbose = false; + + opt = get_options("save_images"); + if (opt.size()) + save_images = true; + + // Loads parameters to construct Diffusion::Model ('diff_' prefix) + SET_DIFFUSION_PARAMETERS; + + // Loads parameters to construct Image::Expected::*::Buffer ('img_' prefix) + SET_EXPECTED_IMAGE_PARAMETERS; + + // Loads parameters to construct Prob::Likelihood ('like_' prefix) + SET_LIKELIHOOD_PARAMETERS; + + // Loads parameters to construct Prob::Prior ('prior_' prefix) + SET_PRIOR_PARAMETERS; + + // Loads parameters to construct Proposal::Distribution ('walk_' prefix) + SET_PROPOSAL_WALKER_PARAMETERS(initial_location); + + // Loads parameters to construct Proposal::Distribution ('walk_' prefix) + SET_PROPOSAL_DISTRIBUTION_PARAMETERS; + + // Loads parameters that are common to all commands. + SET_COMMON_PARAMETERS; + + + //--------------------------------// + // Set up reference image buffer // + //--------------------------------// + + Image::Observed::Buffer obs_image(obs_image_location, Diffusion::Encoding::Set(diff_encodings)); + + //If gradient scheme is included in reference image header, use that instead of default (NB: Will override any gradients passed to '-diff_encodings' option). + if (header.get_DW_scheme().rows()) { + diff_encodings = header.get_DW_scheme(); + diff_encodings_location = "From observed image"; + } + + + if ((header.count("diff_response_SH")) && (Math::matlab_str(diff_response_SH) != header["diff_response_SH"])) + std::cout << std::endl << "Warning! Diffusion response function harmonics (" << Math::matlab_str(diff_response_SH) << ") do not match reference image (" << header["diff_response_SH"] + ")!" << std::endl; + + + //----------------------------// + // Initialize Expected Image // + //----------------------------// + + + + Diffusion::Model diffusion_model = Diffusion::Model::factory (diff_encodings, + diff_response_SH, + diff_adc, + diff_fa, + diff_isotropic); + + Image::Expected::Buffer* exp_image = Image::Expected::Buffer::factory(exp_type, + obs_image, + diffusion_model, + exp_num_length_sections, + exp_num_width_sections, + exp_interp_extent, + exp_enforce_bounds, + exp_half_width); + + //----------------------------------------------------------------// + // Auto-generate base acs initial value/b_intens_gauss_mean // + //----------------------------------------------------------------// + + if (exp_base_intensity < 0) + exp_base_intensity = exp_image->base_intensity_default(obs_image, initial_location); + + + //-----------------------// + // Initialize Likelihood // + //-----------------------// + + Prob::Likelihood* likelihood = Prob::Likelihood::factory(like_type, obs_image, exp_image, like_snr, like_b0_include, like_outside_scale, like_ref_b0, like_ref_signal); + + + + //----------------------// + // Initialize Proposals // + //----------------------// + + gsl_rng* rand_gen = gsl_rng_alloc(gsl_rng_taus); + gsl_rng_set(rand_gen, seed); + + + MCMC::Proposal::Distribution *proposal_distribution = MCMC::Proposal::Distribution::factory(prop_distr_type, rand_gen); + +// +// Proposal::Intensity* acs_proposer = Proposal::Intensity::factory(walk_intens_type, proposal_distribution, walk_intens_scale); +// +// Proposal::BaseIntensity* base_intensity_proposer = Proposal::BaseIntensity::factory(walk_base_intens_type, proposal_distribution, walk_base_intens_scale); + + + + //-------------------------// + // Set Output Properties // + //-------------------------// + + std::map run_properties; + + run_properties["Method"] = "metropolis"; + run_properties["sample_period"] = str(sample_period); + run_properties["seed"] = str(seed); + run_properties["burn_sample_period"] = str(burn_sample_period); + run_properties["burn_num_iterations"] = str(burn_num_iterations); + run_properties["obs_image"] = obs_image_location; + run_properties["initial_state"] = Fibre::Base::Object::load_matlab_str(initial_location); + run_properties["initial_state_location"]= initial_location; + run_properties["prior_only"] = str(prior_only); + run_properties["num_iterations"] = str(num_iterations); + run_properties["burn_enforce_bounds"] = str(burn_enforce_bounds); + run_properties["anneal_frac_start"] = str(anneal_frac_start); + + + ADD_DIFFUSION_PROPERTIES(run_properties); + + ADD_LIKELIHOOD_PROPERTIES(run_properties); + + ADD_EXPECTED_IMAGE_PROPERTIES(run_properties); + + ADD_PRIOR_PROPERTIES(run_properties); + + ADD_PROPOSAL_WALKER_PROPERTIES(run_properties); + + ADD_PROPOSAL_DISTRIBUTION_PROPERTIES(run_properties); + + ADD_COMMON_PROPERTIES(run_properties); + + + Prob::Prior prior (prior_scale, + prior_mag_scale, + prior_mag_aux_scale, + prior_hook_scale, + prior_hook_num_points, + prior_density_high_scale, + prior_density_low_scale, + prior_density_num_points, + prior_acs_scale, + prior_acs_mean, + prior_length_scale, + prior_length_mean); + + + //-------------------------// + // Sampling from Strands // + //-------------------------// + + + if (File::has_extension(initial_location)) { + + + //------------------------// + // Load Initial Strands // + //------------------------// + + Fibre::Strand::Set strands (initial_location); + + strands.set_base_intensity(exp_base_intensity); + + //---------------------// + // Initialize Proposer // + //---------------------// + + Fibre::Strand::Set::Walker* walker = Fibre::Strand::Set::Walker::factory(strands, + walk_type, + walk_step_scale, + walk_step_location, + proposal_distribution, + walk_base_intens_scale); + + //------------------// + // Perform sampling // + //------------------// + + + Fibre::Strand::Set burnt_strands; + + if (burn_num_iterations) { + + + if (burn_enforce_bounds != exp_enforce_bounds) + likelihood->set_enforce_bounds(burn_enforce_bounds); + + burnt_strands = MCMC::metropolis + + ( strands, + *likelihood, + prior, + *walker, + burn_samples_location, + run_properties, + burn_num_iterations, + burn_sample_period, + rand_gen, + anneal_frac_start, + prior_only, + verbose, + save_images); + + + if (burn_enforce_bounds != exp_enforce_bounds) + likelihood->set_enforce_bounds(exp_enforce_bounds); + + + } else + burnt_strands = strands; + + + MCMC::metropolis + + (burnt_strands, + *likelihood, + prior, + *walker, + samples_location, + run_properties, + num_iterations, + sample_period, + rand_gen, + 1.0, + prior_only, + verbose, + save_images); + + + + //------------------------// + // Sampling from Tractlets // + //------------------------// + + } else if (File::has_extension(initial_location)) { + + + //-------------// + // Load Tractlets // + //-------------// + + Fibre::Tractlet::Set tractlets (initial_location); + + tractlets.set_base_intensity(exp_base_intensity); + + + //---------------------// + // Initialize Proposer // + //---------------------// + + Fibre::Tractlet::Set::Walker* walker = Fibre::Tractlet::Set::Walker::factory ( tractlets, + walk_type, + walk_step_scale, + walk_step_location, + proposal_distribution, + walk_base_intens_scale); + + + if (walk_type == "manifold") { + + Fibre::Tractlet::Set dummy (tractlets); + + //Ensures that tractlets lie on the manifold to begin with + walker->step(tractlets, dummy); + + tractlets = dummy; + + } + + + + //------------------// + // Perform sampling // + //------------------// + + Fibre::Tractlet::Set burnt_tractlets; + + if (burn_num_iterations) { + + if (burn_enforce_bounds != exp_enforce_bounds) + likelihood->set_enforce_bounds(burn_enforce_bounds); + + burnt_tractlets = MCMC::metropolis < Fibre::Tractlet::Set, + Prob::Likelihood, + Prob::Prior> ( + + tractlets, + *likelihood, + prior, + *walker, + burn_samples_location, + run_properties, + burn_num_iterations, + burn_sample_period, + rand_gen, + anneal_frac_start, + prior_only, + verbose, + save_images + ); + + if (burn_enforce_bounds != exp_enforce_bounds) + likelihood->set_enforce_bounds(exp_enforce_bounds); + + + } else + burnt_tractlets = tractlets; + + MCMC::metropolis ( + + burnt_tractlets, + *likelihood, + prior, + *walker, + samples_location, + run_properties, + num_iterations, + sample_period, + rand_gen, + 1.0, + prior_only, + verbose, + save_images + ); + + } + + + delete exp_image; + delete proposal_distribution; + delete likelihood; + + gsl_rng_free(rand_gen); + + + +} + + diff --git a/cmd/new_fibres.cpp b/cmd/new_fibres.cpp new file mode 100644 index 0000000..29ee4ba --- /dev/null +++ b/cmd/new_fibres.cpp @@ -0,0 +1,253 @@ +/* + Copyright 2008 Brain Research Institute, Melbourne, Australia + + Written by Thomas G Close, 18/06/2010. + + This file is part of MRtrix. + + MRtrix is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + MRtrix is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with MRtrix. If not, see . + +*/ + +#include "progressbar.h" +#include "bts/cmd.h" + +#include "bts/common.h" + +#include "bts/fibre/tractlet/set.h" +#include "bts/fibre/strand/set.h" +#include "bts/fibre/track/set.h" + + +#include "bts/inline_functions.h" + +using namespace BTS; + +const double ACS_DEFAULT = 1.0; +const double BASE_INTENSITY_DEFAULT = 0.0; +const size_t DEGREE_DEFAULT = 3; +const size_t NUM_LENGTH_SECTIONS_DEFAULT = 10; +const size_t SET_SIZE_DEFAULT = 1; +const size_t NUM_SETS_DEFAULT = 1; +const double INITIAL_VALUE_DEFAULT = 0.0; + +SET_VERSION_DEFAULT; +SET_AUTHOR ("Thomas G. Close"); +SET_COPYRIGHT (NULL); + +DESCRIPTION = { + "Generates new fibres [sets] of arbitrary size initialised to an arbitrary value", + "", + NULL +}; + +ARGUMENTS = { + Argument ("output","Output Location"), + Argument() +}; + + +OPTIONS = { + + Option("acs","Apparrent Connection Strength (ACS) of the generated fibres.") + + Argument("acs","").type_float(SMALL_FLOAT,ACS_DEFAULT,LARGE_FLOAT), + + Option("base_intensity","Base intensity of the generated fibres.") + + Argument("base_intensity","").type_float(SMALL_FLOAT,ACS_DEFAULT,LARGE_FLOAT), + + Option("degree","The degree of the generated fibres.") + + Argument("degree","").type_integer(0,DEGREE_DEFAULT,LARGE_INT), + + Option("num_points","The degree of the generated fibres.") + + Argument("degree","").type_integer(0,NUM_LENGTH_SECTIONS_DEFAULT,LARGE_INT), + + Option("set_size","Size of the generated fibre sets.") + + Argument("set_size","").type_integer(0,SET_SIZE_DEFAULT,LARGE_INT), + + Option("num_sets","Number of generated fibre sets.") + + Argument("num_sets","").type_integer(0,NUM_SETS_DEFAULT,LARGE_INT), + + Option("initial_value","Value all the elements will be initialized to.") + + Argument("initial_value","").type_float(-INFINITY,ACS_DEFAULT,INFINITY), + + +Option() }; + + +EXECUTE { + + + std::string output_location = argument[0]; + + + double acs = 1.0; + double base_intensity = 1.0; + size_t degree = DEGREE_DEFAULT; + size_t num_points = NUM_LENGTH_SECTIONS_DEFAULT; + size_t set_size = SET_SIZE_DEFAULT; + size_t num_sets = NUM_SETS_DEFAULT; + double initial_value = INITIAL_VALUE_DEFAULT; + + + Options opt; + + opt = get_options("acs"); + if (opt.size()) + acs = opt[0][0]; + + opt = get_options("base_intensity"); + if (opt.size()) + base_intensity = opt[0][0]; + + opt = get_options("degree"); + if (opt.size()) + degree = opt[0][0]; + + opt = get_options("num_points"); + if (opt.size()) + num_points = opt[0][0]; + + opt = get_options("set_size"); + if (opt.size()) + set_size = opt[0][0]; + + opt = get_options("num_sets"); + if (opt.size()) + num_sets = opt[0][0]; + + opt = get_options("initial_value"); + if (opt.size()) + initial_value = opt[0][0]; + + + MR::ProgressBar progress_bar ("Generating new fibres..."); + + std::vector props; + if (base_intensity >= 0.0) + props.push_back(Fibre::Strand::Set::BASE_INTENSITY_PROP); + + std::vector elem_props; + if (acs >= 0.0) + elem_props.push_back(Fibre::Strand::ACS_SQRT_PROP); + + + if (File::has_or_txt_extension(output_location) || File::has_extension(output_location) || File::has_txt_extension(output_location)) { + + Fibre::Strand::Set strands(set_size, degree, props, elem_props); + + strands = initial_value; + + if (base_intensity >= 0.0) + strands.set_base_intensity(base_intensity); + + if (acs >= 0.0) + for (size_t strand_i = 0; strand_i < strands.size(); ++strand_i) + strands[strand_i].set_acs(acs); + + if (File::has_or_txt_extension(output_location)) { + + strands.save(output_location); + + } else if (File::has_extension(output_location)) { + + Fibre::Strand::Set::Writer writer(output_location, strands); + + for (size_t set_i = 0; set_i < num_sets; set_i++) + writer.append(strands); + + } else if (File::has_txt_extension(output_location)) { + + Fibre::Strand::Set::TextWriter writer(output_location, strands); + + for (size_t set_i = 0; set_i < num_sets; set_i++) + writer.append(strands); + + } else + throw Exception ("should not be able to get here."); + + } else if (File::has_or_txt_extension(output_location) || File::has_extension(output_location) || File::has_txt_extension(output_location)) { + + Fibre::Tractlet::Set tractlets(set_size, degree, props, elem_props); + + tractlets = initial_value; + + if (base_intensity >= 0.0) + tractlets.set_base_intensity(base_intensity); + + if (acs >= 0.0) + for (size_t tractlet_i = 0; tractlet_i < tractlets.size(); ++tractlet_i) + tractlets[tractlet_i].set_acs(acs); + + if (File::has_or_txt_extension(output_location)) { + + tractlets.save(output_location); + + } else if (File::has_extension(output_location)) { + + Fibre::Tractlet::Set::Writer writer(output_location, tractlets); + + for (size_t set_i = 0; set_i < num_sets; set_i++) + writer.append(tractlets); + + } else if (File::has_txt_extension(output_location)) { + + Fibre::Tractlet::Set::TextWriter writer(output_location, tractlets); + + for (size_t set_i = 0; set_i < num_sets; set_i++) + writer.append(tractlets); + + } else + throw Exception ("should not be able to get here."); + + } else if (File::has_or_txt_extension(output_location) || File::has_extension(output_location) || File::has_txt_extension(output_location)) { + + Fibre::Track::Set tcks(set_size, num_points, props, elem_props); + + tcks = initial_value; + + if (base_intensity >= 0.0) + tcks.set_base_intensity(base_intensity); + + if (acs >= 0.0) + for (size_t track_i = 0; track_i < tcks.size(); ++track_i) + tcks[track_i].set_acs(acs); + + if (File::has_or_txt_extension(output_location)) { + + tcks.save(output_location); + + } else if (File::has_extension(output_location)) { + + Fibre::Track::Set::Writer writer(output_location, tcks); + + for (size_t set_i = 0; set_i < num_sets; set_i++) + writer.append(tcks); + + } else if (File::has_txt_extension(output_location)) { + + Fibre::Track::Set::TextWriter writer(output_location, tcks); + + for (size_t set_i = 0; set_i < num_sets; set_i++) + writer.append(tcks); + + } else + throw Exception ("should not be able to get here."); + + } else + throw Exception ("Unrecognised file extension '" + File::extension(output_location) + "'."); + + + //MR::ProgressBar::done(); + +} diff --git a/cmd/noisify_image.cpp b/cmd/noisify_image.cpp new file mode 100644 index 0000000..3fa74a7 --- /dev/null +++ b/cmd/noisify_image.cpp @@ -0,0 +1,138 @@ +/* + Copyright 2009 Brain Research Institute, Melbourne, Australia + + Created by Tom Close on 13/03/09. + + This file is part of Bayesian Tractlet Sampling (BTS). + + BTS is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + BTS is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with BTS. If not, see . + + */ + + +extern "C" { +#include +#include +} + + +#include "bts/cmd.h" +#include "progressbar.h" + +#include "bts/common.h" +#include "bts/image/expected/buffer.h" +#include "bts/image/observed/buffer.h" + +#include "bts/image/noise.h" +#include "bts/image/noise/gaussian.h" + + + +#include "bts/inline_functions.h" + +using namespace BTS; + +SET_VERSION_DEFAULT; +SET_AUTHOR ("Thomas G. Close"); +SET_COPYRIGHT (NULL); + +DESCRIPTION = { + "Selects a rectangular ROI from a larger image", + "", + NULL +}; + +ARGUMENTS = { + Argument ("initial", "The initial image the second image will be subtracted from.").type_file(), + + Argument ("output_image", "The resulting image").type_file (), + + Argument() +}; + + +OPTIONS = { + + NOISE_PARAMETERS, + + Option ("seed", "Random seed used to initialise the random generator.") + + Argument ("", "").type_float (1e-9, INFINITY, 0.1), + + +Option() + +}; + + + +EXECUTE { + + +//------------------------------// +// Load Input Image Buffer // +//------------------------------// + + + + size_t seed = time(NULL); + + Options opt; + + SET_NOISE_PARAMETERS; + + + opt = get_options("seed"); + if (opt.size()) + seed = opt[0][0]; + + +//--------------------------// +// Load Input Image Buffer // +//--------------------------// + + std::string input_location = argument[0]; + std::string output_location = argument[1]; + + Image::Observed::Buffer image(input_location); + +//------------// +// Add noise // +//------------// + + + gsl_rng* rand_gen = gsl_rng_alloc(gsl_rng_taus); + gsl_rng_set(rand_gen, seed); + + Image::Noise* noise = Image::Noise::factory(rand_gen, noise_type, noise_snr, noise_ref_signal); + + noise->noisify(image); + +//---------------------------// +// Add Properties to header // +//---------------------------// + + ADD_NOISE_PROPERTIES(image.properties()); + + image.properties()["seed"] = str(seed); + +//-------------// +// Save Image // +//-------------// + + image.save(output_location); + + +} + + diff --git a/cmd/offset_strands.cpp b/cmd/offset_strands.cpp new file mode 100644 index 0000000..22c1a78 --- /dev/null +++ b/cmd/offset_strands.cpp @@ -0,0 +1,109 @@ +/* + Copyright 2009 Brain Research Institute, Melbourne, Australia + + Created by Tom Close on 13/03/09. + + This file is part of Bayesian Tractlet Sampling (BTS). + + BTS is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + BTS is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with BTS. If not, see . + + */ + +#include "bts/common.h" + +#include "bts/cmd.h" +#include "progressbar.h" + +#include "bts/fibre/track.h" +#include "bts/fibre/track/set.h" + + + + +#include "bts/inline_functions.h" + + +using namespace BTS; + +SET_VERSION_DEFAULT; +SET_AUTHOR ("Thomas G. Close"); +SET_COPYRIGHT (NULL); + +DESCRIPTION = { + "Trims paths to a sphere of specified radius.", + "The sections of paths that lie outside the radius of the sphere are removed and sections that reenter are split into new paths.", + NULL +}; + +ARGUMENTS = { + Argument ("input", "The tracks to be offset.").type_file (), + Argument ("output", "The returned offset tracks.").optional().type_file(), + Argument() +}; + + +OPTIONS = { + Option ("num_points", "The number of points that will be generated along the strand location") + + Argument ("num_points", "The number of points that will be generated along the strand location").type_integer (1, 100, 2000), + + Option ("offset", "Offset that will be applied to the tracks") + + Argument ("offset", "Offset that will be applied to the tracks"), + +Option() }; + + +EXECUTE { + + + std::string input_location = argument[0]; + std::string output_location; + + if (argument.size() > 1) + output_location = argument[1].c_str(); + else + output_location = input_location; + + size_t num_points = 0; + Triple offset = Triple::Zeros; + + Options opt = get_options("num_points"); + if (opt.size()) + num_points = opt[0][0]; + + opt = get_options("offset"); + if (opt.size()) + offset = parse_triple(std::string(opt[0][0])); + + BTS::Fibre::Track::Set tcks(input_location, num_points); + + + for (size_t tck_i = 0; tck_i < tcks.size(); tck_i++) + for (size_t point_i = 0; point_i < tcks[tck_i].size(); point_i++) + tcks[tck_i][point_i] += offset; + + tcks.set_extend_prop("origin offset", str(-offset)); + + tcks.save(output_location); + + //MR::ProgressBar::done(); +} + + + + + + + + + diff --git a/cmd/peel_fibres.cpp b/cmd/peel_fibres.cpp new file mode 100644 index 0000000..4f55fd2 --- /dev/null +++ b/cmd/peel_fibres.cpp @@ -0,0 +1,203 @@ +/* + Copyright 2009 Brain Research Institute, Melbourne, Australia + + Created by Tom Close on 13/03/09. + + This file is part of Bayesian Tractlet Sampling (BTS). + + BTS is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + BTS is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with BTS. If not, see . + + */ + +#include "bts/cmd.h" + +#include "progressbar.h" + +#include "bts/common.h" + + +#include "bts/fibre/track/set.h" +#include "bts/fibre/strand/set.h" +#include "bts/fibre/tractlet/set.h" + + +#include "bts/inline_functions.h" + + +using namespace BTS; + +SET_VERSION_DEFAULT; +SET_AUTHOR ("Thomas G. Close"); +SET_COPYRIGHT (NULL); + +DESCRIPTION = { + "Peels fibres.", + "Removes all fibres that do not pass within an inner 'inclusion radius'.", + NULL +}; + +ARGUMENTS = { + Argument ("input", "The paths to be peeled.").type_file (), + Argument ("output", "The returned peeled paths.").optional().type_file(), + Argument() +}; + + +OPTIONS = { + Option ("distance", "The inner radius the paths must pass through to be included") + + Argument ("distance", "The inner radius the paths must pass through to be included").type_float (SMALL_FLOAT, 0.8, LARGE_FLOAT), + + Option ("num_length_sections", "The number of points that will be generated along the strand location if the loaded paths are strand descriptors") + + Argument ("num_length_sections", "").type_integer (1, 100, 2000), + + Option ("num_width_sections", "Number of width sections, only relevant for tractlet class.") + + Argument ("num_width_sections", "").type_integer (1, 3, 200), + + Option("cube", "Peel to cube instead of sphere."), + +Option() }; + + +EXECUTE { + + std::string input_location = argument[0]; + std::string output_location; + + if (argument.size() > 1) + output_location = argument[1].c_str(); + else + output_location = input_location; + + + double distance = 0.0; + bool cube = false; + size_t num_length_sections = 100; + size_t num_width_sections = 6; + + + Options opt = get_options("distance"); + if (opt.size()) + distance = opt[0][0]; + + opt = get_options("cube"); + if (opt.size()) + cube = true; + + opt = get_options("num_length_sections"); + if (opt.size()) + num_length_sections = opt[0][0]; + + + opt = get_options("num_width_sections"); + if (opt.size()) + num_width_sections = opt[0][0]; + + + if (File::extension(input_location) != File::extension(output_location)) + throw Exception ("Input ('" + input_location + "') and output_location ('" + output_location + "') extensions need to match."); + +//----------------------// +// Load original paths +//----------------------// + + if ( File::has_extension(input_location) || File::has_extension(input_location)) { + + Fibre::Track::Set all_tcks(input_location, num_length_sections); + + MR::ProgressBar progress_bar ("Removing tracks/strands that do not pass through centre of sphere..."); + + Fibre::Track::Set include_tcks; + + include_tcks = all_tcks.peel(distance, cube); + + include_tcks.save(output_location); + + //MR::ProgressBar::done(); + + } else if (File::has_extension(input_location)) { + + Fibre::Tractlet::Set all_tractlets(input_location); + + MR::ProgressBar progress_bar ("Removing tractlets that do not pass through centre of sphere..."); + + Fibre::Tractlet::Set include_tractlets; + + include_tractlets = all_tractlets.peel(distance, num_length_sections, num_width_sections, cube); + + include_tractlets.save(output_location); + + //MR::ProgressBar::done(); + + } else if (File::has_extension(input_location)) { + + Fibre::Strand::Set::Reader reader (input_location); + Fibre::Strand::Set::Writer writer (output_location, reader, reader.get_extend_props()); + + Fibre::Strand::Set all_strands; + std::map properties_row; + + MR::ProgressBar progress_bar ("Removing strands that do not pass through centre of sphere..."); + + while (reader.next(all_strands)) { + writer.append(all_strands.peel(distance, num_length_sections, cube)); + progress_bar++; + } + + reader.close(); + writer.close(); + + } else if (File::has_extension(input_location)) { + + Fibre::Tractlet::Set::Reader reader (input_location); + Fibre::Tractlet::Set::Writer writer (output_location, reader, reader.get_extend_props()); + + Fibre::Tractlet::Set all_tractlets; + std::map properties_row; + + MR::ProgressBar progress_bar ("Removing tractlets that do not pass through centre of sphere..."); + + while (reader.next(all_tractlets)) { + writer.append(all_tractlets.peel(distance, num_length_sections, num_width_sections, cube)); + progress_bar++; + } + + reader.close(); + writer.close(); + + } else if (File::has_extension(input_location)) { + + Fibre::Track::Set::Reader reader (input_location); + Fibre::Track::Set::Writer writer (output_location, reader, reader.get_extend_props()); + + Fibre::Track::Set all_tcks; + std::map properties_row; + + MR::ProgressBar progress_bar ("Removing tcks that do not pass through centre of sphere..."); + + while (reader.next(all_tcks)) { + writer.append(all_tcks.peel(distance, cube)); + progress_bar++; + } + + reader.close(); + writer.close(); + + } else + throw Exception ("Unrecognised extension '" + File::extension(input_location) + "'."); + +} + + + + diff --git a/cmd/perturb_fibres.cpp b/cmd/perturb_fibres.cpp new file mode 100644 index 0000000..681b13c --- /dev/null +++ b/cmd/perturb_fibres.cpp @@ -0,0 +1,226 @@ +/* + Copyright 2009 Brain Research Institute, Melbourne, Australia + + Created by Tom Close on 13/03/09. + + This file is part of Bayesian Tractlet Sampling (BTS). + + BTS is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + BTS is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with BTS. If not, see . + + */ + +#include +#include + +#include "bts/cmd.h" +#include "progressbar.h" + +#include "bts/common.h" + + +#include "bts/fibre/strand/set.h" +#include "bts/fibre/tractlet/set.h" +#include "bts/mcmc/proposal/distribution/gaussian.h" + + + + +#include "bts/inline_functions.h" + + +using namespace BTS; + +SET_VERSION_DEFAULT; +SET_AUTHOR ("Thomas G. Close"); +SET_COPYRIGHT (NULL); + +DESCRIPTION = { + "Perturbs fibres, useful for debugging.", + "", + NULL +}; + +ARGUMENTS = { + Argument ("input", "The paths to be perturbed.").type_file (), + Argument ("output", "The output perturbed paths.").optional().type_file(), + Argument() +}; + + +OPTIONS = { + + Option ("stdev", "The base standard deviation the parameters will be perturbed by.") + + Argument ("stdev", "").type_float (SMALL_FLOAT, 0.05, LARGE_FLOAT), + + Option ("scales_location", "The relative scales of the perturbations.") + + Argument ("scales_location", "").type_file (), + + Option ("seed", "The random seed that is passed to the random generator") + + Argument ("seed", ""), + + Option("flat_position", "Use a flat distribution for a position parameters."), + +Option() }; + + +template void perturb_fibres(const std::string& input_location, + const std::string& output_location, + double stdev, + const std::string& scale_location, + gsl_rng* rand_gen, + const MR::Math::Vector& flat_mask); + +EXECUTE { + + + std::string input_location = argument[0]; + std::string output_location; + + if (argument.size() > 1) + output_location = argument[1].c_str(); + else + output_location = input_location; + + double stdev = 0.05; + std::string scales_location; + size_t seed = time(NULL); + bool flat_position = false; + + Options opt = get_options("stdev"); + if (opt.size()) + stdev = opt[0][0]; + + opt = get_options("scales_location"); + if (opt.size()) + scales_location = opt[0][0].c_str(); + + opt = get_options("seed"); + if (opt.size()) { + std::string seed_string = opt[0][0]; + seed = to(seed_string); + } else + std::cout << "No random seed supplied. Using timestamp: " << seed << std::endl; + + + opt = get_options("flat_position"); + if (opt.size()) + flat_position = true; + + +//-------------------------------// +// Setup Random number Generator // +//-------------------------------// + + + gsl_rng *rand_gen; + rand_gen = gsl_rng_alloc(gsl_rng_taus); + gsl_rng_set(rand_gen, seed); + + +//----------------------------------------------// +// Loop through paths and perturb parameters // +//----------------------------------------------// + + + if (File::has_extension(input_location)) { + + Fibre::Strand::Set mask (input_location); + + mask.zero(); + + if (flat_position) + for (size_t strand_i = 0; strand_i < mask.size(); ++strand_i) + mask[strand_i][0].set(1,1,1); + + MR::Math::Vector& vector_mask = mask; + + perturb_fibres(input_location, output_location, stdev, scales_location, rand_gen, vector_mask); + + } else if (File::has_extension(input_location)) { + + Fibre::Tractlet::Set mask (input_location); + + mask.zero(); + + if (flat_position) + for (size_t tract_i = 0; tract_i < mask.size(); ++tract_i) + mask[tract_i][0][0].set(1,1,1); + + MR::Math::Vector& vector_mask = mask; + + perturb_fibres(input_location, output_location, stdev, scales_location, rand_gen, vector_mask); + + } else + throw Exception ("Unrecognised extension '" + File::extension(input_location) + "'."); + +} + + +template void perturb_fibres(const std::string& input_location, + const std::string& output_location, + double stdev, + const std::string& scales_location, + gsl_rng* rand_gen, + const MR::Math::Vector& flat_mask) { + + typename T::Set fibres(input_location); + typename T::Set scales; + + if (scales_location.size()) { + + scales.load(scales_location); + + if (scales.size() == 1) { + T tmpl_scale = scales[0]; + scales = fibres; + + for (size_t fibre_i = 0; fibre_i < fibres.size(); ++fibre_i) + scales[fibre_i] = tmpl_scale; + + } else if (scales.size() != fibres.size()) + throw Exception ("scales' size do not match fibres."); + + } else { + + scales = fibres; + scales.set(1.0); + + } + + scales *= stdev; + + MR::Math::Vector& fibres_vector = fibres; + MR::Math::Vector& scales_vector = scales; + + if (fibres_vector.size() != scales_vector.size()) + throw Exception ("Scales vector does not match fibre vector."); + + MR::ProgressBar progress_bar ("Perturbing strands ...", fibres_vector.size()); + + for (size_t elem_i = 0; elem_i < fibres_vector.size(); elem_i++) { + if (flat_mask[elem_i]) + fibres_vector[elem_i] += (double)gsl_ran_flat(rand_gen, -scales_vector[elem_i], scales_vector[elem_i]); + else + fibres_vector[elem_i] += (double)gsl_ran_gaussian(rand_gen, scales_vector[elem_i]); + progress_bar++; + } + + + fibres.save(output_location); + + +} + + + diff --git a/cmd/project_strands.cpp b/cmd/project_strands.cpp new file mode 100644 index 0000000..9cc8cca --- /dev/null +++ b/cmd/project_strands.cpp @@ -0,0 +1,120 @@ +/* + Copyright 2009 Brain Research Institute, Melbourne, Australia + + Created by Tom Close on 13/03/09. + + This file is part of Bayesian Tractlet Sampling (BTS). + + BTS is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + BTS is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with BTS. If not, see . + + */ + +#include "bts/cmd.h" + +#include "progressbar.h" + +#include "bts/common.h" + +#include "bts/fibre/strand/set.h" + + + + + +#include "bts/inline_functions.h" + + +using namespace BTS; + +SET_VERSION_DEFAULT; +SET_AUTHOR ("Thomas G. Close"); +SET_COPYRIGHT (NULL); + +DESCRIPTION = { + "Projects file locations to a sphere of supplied radius (defaults to 1.0).", + "Projects file locations to a sphere of supplied radius (defaults to 1.0).", + NULL +}; + +ARGUMENTS = { + Argument ("input", "The file locations to be projected.").type_file (), + Argument ("output", "The returned projected file locations.").optional().type_file(), + Argument() +}; + + +OPTIONS = { + Option ("sphere_radius", "The sphere radius the file locations will be projected onto") + + Argument ("sphere_radius", "The sphere radius the file locations will be projected onto").type_float (SMALL_FLOAT, 1.0, LARGE_FLOAT), + + + Option ("num_points", "The number of points that will be generated along the strand location") + + Argument ("points", "The number of points that will be generated along the strand location").type_integer (1, 100, 2000), + + Option ("degree", "The degree of the Strand coefficients used to describe the strands") + + Argument ("degree", "The degree of the outputted Strand coefficients").type_integer (1, 3, 200), + + + +Option() }; + + +EXECUTE { + + std::string input_location = argument[0]; + std::string output_location; + + if (argument.size() > 1) + output_location = argument[1].c_str(); + else + output_location = input_location; + + + double sphere_radius = 1.0; + size_t degree = 0; + size_t num_points = 0; + + Options opt = get_options("sphere_radius"); + if (opt.size()) + sphere_radius = opt[0][0]; + + opt = get_options("num_points"); + if (opt.size()) + num_points = opt[0][0]; + + opt = get_options("degree"); + if (opt.size()) + degree = opt[0][0]; + + + + +//----------------------// +// Load original file locations +//----------------------// + + + Fibre::Strand::Set strands(input_location, degree); + + MR::ProgressBar progress_bar ("Projecting strands onto a sphere of radius " + str (sphere_radius) + " ..."); + + strands.project_to_sphere(sphere_radius); + + strands.save(output_location, num_points); + + //MR::ProgressBar::done(); + + +} + diff --git a/cmd/random_fibres.cpp b/cmd/random_fibres.cpp new file mode 100644 index 0000000..1fb8764 --- /dev/null +++ b/cmd/random_fibres.cpp @@ -0,0 +1,175 @@ +/* + Copyright 2009 Brain Research Institute, Melbourne, Australia + + Created by Tom Close on 13/03/09. + + This file is part of Bayesian Tractlet Sampling (BTS). + + BTS is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + BTS is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with BTS. If not, see . + + */ + + +extern "C" { +#include +#include +} + + + +#include "bts/common.h" + +#include "bts/cmd.h" +#include "progressbar.h" + + +#include "phantom/interface.h" + +#include "phantom/rand_init/rand_init.h" +#include "bts/fibre/track.h" +#include "bts/fibre/track/set.h" + + + + +#include "bts/inline_functions.h" + +const size_t DEGREE_DEFAULT = 3; +const double SPHERE_RADIUS_DEFAULT = 0.225; +const double BASE_WIDTH_DEFAULT = 0.1; +const double STRAND_RADIUS_LBOUND_DEFAULT = 0.12; +const double STRAND_RADIUS_UBOUND_DEFAULT = 0.3; +const double CONTROL_POINT_FREQUENCY_DEFAULT = 50.0; +const double STRAND_RADIUS_BUFFER_RATIO_DEFAULT = 1.12; + + +using namespace BTS; + +SET_VERSION_DEFAULT; +SET_AUTHOR ("Thomas G. Close"); +SET_COPYRIGHT (NULL); + +DESCRIPTION = { + "Trims paths to a sphere of specified radius.", + "The sections of paths that lie outside the radius of the sphere are removed and sections that reenter are split into new paths.", + NULL +}; + +ARGUMENTS = { + Argument ("output", "Random strands").type_file(), + Argument() +}; + + +OPTIONS = { + + Option ("degree", "Limit the degree of the Strand coefficients used to describe the strands to the first - degrees") + + Argument ("degree", "").type_integer (1, DEGREE_DEFAULT, 200), + + Option ("sphere_r", "The radius of the sphere the strands will be trimmed to") + + Argument ("sphere_r", "").type_float (SMALL_FLOAT, SPHERE_RADIUS_DEFAULT, LARGE_FLOAT), + + Option ("control_point_freq", "The frequency of the control-points generated between the strand's end-points") + + Argument ("control_point_freq", "").type_float (SMALL_FLOAT, CONTROL_POINT_FREQUENCY_DEFAULT, LARGE_FLOAT), + + Option ("strand_r_lbound", "The minimum strand radius") + + Argument ("strand_r_lbound", "The minimum strand radius").type_float (SMALL_FLOAT, STRAND_RADIUS_LBOUND_DEFAULT, LARGE_FLOAT), + + Option ("strand_r_ubound", "The maximum strand radius") + + Argument ("strand_r_ubound", "The maximum strand radius").type_float (SMALL_FLOAT, STRAND_RADIUS_UBOUND_DEFAULT, LARGE_FLOAT), + + Option ("strand_r_buffer_ratio", "Scales the 'buffer radius' around the endpoints of each strand that other strands cannot overlap.") + + Argument ("strand_r_buffer_ratio", "").type_float (SMALL_FLOAT, STRAND_RADIUS_BUFFER_RATIO_DEFAULT, LARGE_FLOAT), + + Option ("max_attempts", "Max. attempts to add another strand") + + Argument ("max_attempts", "").type_integer (1, 1000000, LARGE_INT), + + Option ("seed", "Seed for the random generation") + + Argument ("seed", ""), + + +Option() }; + + +EXECUTE { + + + std::string output_location = argument[0]; + + size_t degree = DEGREE_DEFAULT; + double sphere_r = SPHERE_RADIUS_DEFAULT; + double control_point_freq = CONTROL_POINT_FREQUENCY_DEFAULT; + double strand_r_lbound = STRAND_RADIUS_LBOUND_DEFAULT; + double strand_r_ubound = STRAND_RADIUS_UBOUND_DEFAULT; + double strand_r_buffer_ratio = STRAND_RADIUS_BUFFER_RATIO_DEFAULT; + size_t max_attempts = 1000000; + size_t seed = time(NULL); + + Options opt = get_options("degree"); + if (opt.size()) + degree = opt[0][0]; + + opt = get_options("sphere_r"); + if (opt.size()) + sphere_r = opt[0][0]; + + opt = get_options("control_point_freq"); + if (opt.size()) + control_point_freq = opt[0][0]; + + opt = get_options("strand_r_lbound"); + if (opt.size()) + strand_r_lbound = opt[0][0]; + + opt = get_options("strand_r_ubound"); + if (opt.size()) + strand_r_ubound = opt[0][0]; + + opt = get_options("strand_r_buffer_ratio"); + if (opt.size()) + strand_r_buffer_ratio = opt[0][0]; + + opt = get_options("max_attempts"); + if (opt.size()) + max_attempts = opt[0][0]; + + opt = get_options("seed"); + if (opt.size()) { + std::string seed_str = opt[0][0]; + seed = to(seed_str); + } + + gsl_rng* rand_gen = gsl_rng_alloc(gsl_rng_taus); + gsl_rng_set(rand_gen, seed); + + MR::ProgressBar progress_bar ("Generating random strands..."); + + Strand_collection c; + + rand_init_collection(&c, sphere_r, control_point_freq, strand_r_lbound, strand_r_ubound, strand_r_buffer_ratio, rand_gen, max_attempts, 0, NULL); + + BTS::Fibre::Track::Set tcks; + std::vector > pre_points; + std::vector > post_points; + + convert_nfg_to_mr(tcks, pre_points, post_points, &c); + + tcks.save(output_location, degree); + + //MR::ProgressBar::done(); + + std::cout << "Generated " + str(tcks.size()) + " strands." << std::endl; +} + + diff --git a/cmd/random_landscape.cpp b/cmd/random_landscape.cpp new file mode 100644 index 0000000..5a76f67 --- /dev/null +++ b/cmd/random_landscape.cpp @@ -0,0 +1,176 @@ +/* + Copyright 2008 Brain Research Institute, Melbourne, Australia + + Written by Thomas G Close, 10/09/2010. + + This file is part of MRtrix. + + MRtrix is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + MRtrix is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with MRtrix. If not, see . + +*/ + + +#include "bts/cmd.h" + +#include "bts/common.h" +#include "bts/prob/test/landscape.h" +#include "bts/inline_functions.h" + +using namespace BTS; + +SET_VERSION_DEFAULT; +SET_AUTHOR ("Thomas G. Close"); +SET_COPYRIGHT (NULL); + +DESCRIPTION = { + "random_peaks", + "Generates a random probability landscape", + NULL +}; + +ARGUMENTS = { + Argument ("output_location", "Location of the output file.").type_file (), + Argument() +}; + + +OPTIONS = { + + Option ("location", "") + + Argument ("location", ""), + + Option ("num_dims", "") + + Argument ("num_dims", "").type_integer (1, Prob::Test::Landscape::NUM_DIMS_DEFAULT, LARGE_INT), + + Option ("num_peaks", "") + + Argument ("num_peaks", "").type_integer (1, Prob::Test::Landscape::NUM_PEAKS_DEFAULT, LARGE_INT), + + Option ("width_mu", "") + + Argument ("width_mu", "").type_float (SMALL_FLOAT, Prob::Test::Landscape::WIDTH_MU_DEFAULT, LARGE_FLOAT), + + Option ("width_sigma", "") + + Argument ("width_sigma", "").type_float (SMALL_FLOAT, Prob::Test::Landscape::WIDTH_SIGMA_DEFAULT, LARGE_FLOAT), + + Option ("width_min", "") + + Argument ("width_min", "").type_float (SMALL_FLOAT, Prob::Test::Landscape::WIDTH_MIN_DEFAULT, LARGE_FLOAT), + + Option ("height_var", "") + + Argument ("height_var", "").type_float (SMALL_FLOAT, Prob::Test::Landscape::HEIGHT_VAR_DEFAULT, LARGE_FLOAT), + + Option ("roi_radius", "") + + Argument ("roi_radius", "").type_float (SMALL_FLOAT, Prob::Test::Landscape::ROI_RADIUS_DEFAULT, LARGE_FLOAT), + + Option ("fraction_pyramid", "") + + Argument ("fraction_pyramid", "").type_float (SMALL_FLOAT, Prob::Test::Landscape::FRACTION_PYRAMID_DEFAULT, LARGE_FLOAT), + + Option ("barrier_rate", "") + + Argument ("barrier_rate", "").type_float (SMALL_FLOAT, Prob::Test::Landscape::BARRIER_RATE_DEFAULT, LARGE_FLOAT), + + Option ("seed", "The random seed that is passed to the random generator") + + Argument ("seed", ""), + +Option() }; + + +EXECUTE { + + std::string output_location = argument[0]; + + size_t seed = time(NULL); + + Options opt; + + size_t num_dims = Prob::Test::Landscape::NUM_DIMS_DEFAULT; + size_t num_peaks = Prob::Test::Landscape::NUM_PEAKS_DEFAULT; + double width_mu = Prob::Test::Landscape::WIDTH_MU_DEFAULT; + double width_sigma = Prob::Test::Landscape::WIDTH_SIGMA_DEFAULT; + double width_min = Prob::Test::Landscape::WIDTH_MIN_DEFAULT; + double height_var = Prob::Test::Landscape::HEIGHT_VAR_DEFAULT; + double roi_radius = Prob::Test::Landscape::ROI_RADIUS_DEFAULT; + double fraction_pyramid = Prob::Test::Landscape::FRACTION_PYRAMID_DEFAULT; + double barrier_rate = Prob::Test::Landscape::BARRIER_RATE_DEFAULT; + + opt = get_options("num_dims"); + if (opt.size()) + num_dims = opt[0][0]; + + opt = get_options("num_peaks"); + if (opt.size()) + num_peaks = opt[0][0]; + + opt = get_options("width_mu"); + if (opt.size()) + width_mu = opt[0][0]; + + opt = get_options("width_sigma"); + if (opt.size()) + width_sigma = opt[0][0]; + + opt = get_options("width_min"); + if (opt.size()) + width_min = opt[0][0]; + + opt = get_options("height_var"); + if (opt.size()) + height_var = opt[0][0]; + + opt = get_options("roi_radius"); + if (opt.size()) + roi_radius = opt[0][0]; + + opt = get_options("fraction_pyramid"); + if (opt.size()) + fraction_pyramid = opt[0][0]; + + opt = get_options("barrier_rate"); + if (opt.size()) + barrier_rate = opt[0][0]; + + opt = get_options("seed"); + if (opt.size()) { + std::string seed_string = opt[0][0]; + seed = to(seed_string); + } else + std::cout << "No random seed supplied. Using timestamp: " << seed << std::endl; + + + std::map properties; + + properties["num_dims"] = str(num_dims); + properties["barrier_rate"] = str(barrier_rate); + properties["roi_radius"] = str(roi_radius); + properties["num_peaks"] = str(num_peaks); + properties["width_mu"] = str(width_mu); + properties["width_sigma"] = str(width_sigma); + properties["width_min"] = str(width_min); + properties["height_var"] = str(height_var); + properties["fraction_pyramid"] = str(fraction_pyramid); + + + + Prob::Test::Landscape peaks = Prob::Test::Landscape::randomly_generate( num_dims, + num_peaks, + width_mu, + width_sigma, + width_min, + height_var, + roi_radius, + fraction_pyramid, + barrier_rate, seed); + + peaks.save(output_location); + + std::cout << "Generated " << num_peaks << " peaks." << std::endl; + +} diff --git a/cmd/random_miscs.cpp b/cmd/random_miscs.cpp new file mode 100644 index 0000000..55bd5c3 --- /dev/null +++ b/cmd/random_miscs.cpp @@ -0,0 +1,246 @@ +/* + Copyright 2009 Brain Research Institute, Melbourne, Australia + + Written by Thomas G. Close, 04/03/2009. + + This file is part of Bayesian Tractlet Sampling (BTS). + + BTS is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + BTS is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with BTS. If not, see . + +*/ + + +extern "C" { +#include +#include +} + + +#include "bts/cmd.h" +#include "progressbar.h" + +#include "bts/common.h" + +#include "bts/fibre/base/writer.h" + + +#include "bts/coord.h" +#include "bts/fibre/tractlet/section.h" + + +#include "bts/mcmc/state.h" +//#include "bts/mcmc/state/writer.h" + +#include "bts/fibre/properties/extended.h" +#include "bts/fibre/strand.h" + + +#include "bts/inline_functions.h" + +using namespace BTS; + +SET_VERSION_DEFAULT; +SET_AUTHOR ("Thomas G. Close"); +SET_COPYRIGHT (NULL); + +DESCRIPTION = { + "Generates random triples and saves them to file.", + "", + NULL +}; + +ARGUMENTS = { + Argument ("output", "Random triples").type_file(), + Argument() +}; + + +OPTIONS = { + + Option ("number", "The number of triples to generate") + + Argument ("number", "").type_integer (1, 100, 1e6), + + Option ("max", "Maximum value of the triple elements.") + + Argument ("max", "").type_float (-1e9, 1.0, 1e9), + + Option ("min", "Minimum value of the triple elements.") + + Argument ("min", "").type_float (-1e9, 1.0, 1e9), + + Option ("state_size", "The size MCMC states to generate") + + Argument ("state_size", "").type_integer (1, 2, 1e6), + + Option ("seed", "Seed for the random generation") + + Argument ("seed", ""), + + + +Option() }; + + + +EXECUTE { + + + + std::string output_location = argument[0]; + + size_t number = 100; + double max_value = 1.0; + double min_value = 0.0; + size_t state_size = 2; + size_t seed = time(NULL); + + + + + Options opt = get_options("number"); + if (opt.size()) + number = opt[0][0]; + + opt = get_options("max_value"); + if (opt.size()) + max_value = opt[0][0]; + + opt = get_options("min_value"); + if (opt.size()) + min_value = opt[0][0]; + + opt = get_options("seed"); + if (opt.size()) { + std::string seed_str = opt[0][0]; + seed = to(seed_str); + } + opt = get_options("state_size"); + if (opt.size()) + state_size = opt[0][0]; + + + gsl_rng* rand_gen = gsl_rng_alloc(gsl_rng_taus); + gsl_rng_set(rand_gen, seed); + + + + + if (File::has_extension< Coord >(output_location)) { + + MR::ProgressBar progress_bar ("Randomly generating " + str(number) + " Coord's...", number); + + Coord::Writer writer(output_location); + + for (size_t trip_i = 0; trip_i < number; ++trip_i) { + + Coord triple; + + for (size_t dim_i = 0; dim_i < 3; ++dim_i) + triple[dim_i] = (double)gsl_ran_flat(rand_gen, min_value, max_value); + + writer.append(triple); + progress_bar++; + + } + + //MR::ProgressBar::done(); + + } else if (File::has_extension(output_location)) { + +#ifdef CODE_TESTING + MR::ProgressBar progress_bar ("Randomly generating " + str(number) + " Fibre::Strand::Section's...", number); + + std::vector header; + header.push_back("intensity"); + + Fibre::Base::Writer writer(output_location); + + for (size_t section_i = 0; section_i < number; ++section_i) { + + Fibre::Strand::Section section; + + for (size_t dim_i = 0; dim_i < 3; ++dim_i) { + section.position()[dim_i] = (double)gsl_ran_flat(rand_gen, min_value, max_value); + section.tangent()[dim_i] = (double)gsl_ran_flat(rand_gen, min_value, max_value); + } + + section.intensity() = (double)gsl_ran_flat(rand_gen, min_value, max_value); + + writer.append(section); + progress_bar++; + + } + + //MR::ProgressBar::done(); +#else + throw Exception ("Macro CODE_TESTING needs to be defined to generate random Fibre::Strand::Sections"); +#endif /* CODE_TESTING */ + + } else if (File::has_extension(output_location)) { + +#ifdef CODE_TESTING + MR::ProgressBar progress_bar ("Randomly generating " + str(number) + " Fibre::Tractlet::Section's...", number); + + std::vector header; + header.push_back("intensity"); + + Fibre::Base::Writer writer(output_location); + + for (size_t section_i = 0; section_i < number; ++section_i) { + + Fibre::Tractlet::Section section; + + + for (size_t dim_i = 0; dim_i < 3; ++dim_i) { + section.position()[dim_i] = (double)gsl_ran_flat(rand_gen, min_value, max_value); + section.tangent()[dim_i] = (double)gsl_ran_flat(rand_gen, min_value, max_value); + section.width1()[dim_i] = (double)gsl_ran_flat(rand_gen, min_value, max_value); + section.width2()[dim_i] = (double)gsl_ran_flat(rand_gen, min_value, max_value); + } + + section.intensity() = (double)gsl_ran_flat(rand_gen, min_value, max_value); + + writer.append(section); + progress_bar++; + + } + + //MR::ProgressBar::done(); +#else + throw Exception ("Macro CODE_TESTING needs to be defined to generate random Fibre::Tractlet::Sections"); +#endif /* CODE_TESTING */ + + } else if (File::has_extension(output_location)) { + + MR::ProgressBar progress_bar ("Randomly generating " + str(number) + " MCMC::State's of size " + str(state_size) + "...", number); + + MCMC::State::Writer writer(output_location); + + for (size_t state_i = 0; state_i < number; ++state_i) { + + MCMC::State state(state_size); + + for (size_t elem_i = 0; elem_i < state_size; elem_i++) + state[elem_i] = (double)gsl_ran_flat(rand_gen, min_value, max_value); + + writer.append(state); + progress_bar++; + + } + + //MR::ProgressBar::done(); + + + } else + throw Exception ("Unrecognised file extension '" + File::extension(output_location) + "', can be '" + Coord::FILE_EXTENSION + "', '" + Fibre::Strand::Section::FILE_EXTENSION + "', '" + Fibre::Tractlet::Section::FILE_EXTENSION + "' or '" + MCMC::State::FILE_EXTENSION + "'."); + + + +} diff --git a/cmd/random_short_strands.cpp b/cmd/random_short_strands.cpp new file mode 100644 index 0000000..56c16e7 --- /dev/null +++ b/cmd/random_short_strands.cpp @@ -0,0 +1,139 @@ +/* + Copyright 2009 Brain Research Institute, Melbourne, Australia + + Created by Tom Close on 13/03/09. + + This file is part of Bayesian Tractlet Sampling (BTS). + + BTS is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + BTS is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with BTS. If not, see . + + */ + +extern "C" { +#include +#include +} + + +#include "bts/common.h" + +#include "bts/cmd.h" +#include "progressbar.h" + +#include "bts/fibre/strand/set.h" + + + + +#include "bts/inline_functions.h" + + +using namespace BTS; + +SET_VERSION_DEFAULT; +SET_AUTHOR ("Thomas G. Close"); +SET_COPYRIGHT (NULL); + +DESCRIPTION = { + "Trims paths to a sphere of specified radius.", + "The sections of paths that lie outside the radius of the sphere are removed and sections that reenter are split into new paths.", + NULL +}; + +ARGUMENTS = { + Argument ("output", "The returned trimmed paths.").type_file(), + Argument() +}; + + +OPTIONS = { + + Option ("degree", "Limit the degree of the Strand coefficients used to describe the strands to the first - degrees") + + Argument ("degree", "Limit the degree of the Strand coefficients used to describe the strands to the first - degrees").type_integer (1, 200, 3), + + Option ("sphere_r", "The radius of the sphere the strands will be trimmed to") + + Argument ("sphere_r", "").type_float (SMALL_FLOAT, 1.0, LARGE_FLOAT), + + Option ("num_strands", "The number of strands to be created") + + Argument ("num_strands", "").type_integer(1, 10, LARGE_INT), + + Option ("strand_length", "The length of the short strands") + + Argument ("strand_length", "").type_float (SMALL_FLOAT, 0.01, LARGE_FLOAT), + + Option ("num_points", "The number of points that will be generated along the strand location") + + Argument ("points", "The number of points that will be generated along the strand location").type_integer (1, 100, 2000), + +Option() }; + + +EXECUTE { + + + std::string output_location = argument[0];; + + + + size_t degree = 3; + double sphere_radius = 1.0; + size_t num_strands = 0.05; + double strand_length = 0.01; + size_t num_points = 0; + + + Options opt = get_options(0); + if (opt.size()) + degree = opt[0][0]; + + opt = get_options("sphere_radius"); + if (opt.size()) + sphere_radius = opt[0][0]; + + opt = get_options("num_strands"); + if (opt.size()) + num_strands = opt[0][0]; + + opt = get_options("strand_length"); + if (opt.size()) + strand_length = opt[0][0]; + + opt = get_options("num_points"); + if (opt.size()) + num_points = opt[0][0]; + + if (degree < 2) + throw Exception( "DegreeVector (" + str(degree) + ") must be greater than 2."); + + gsl_rng* rand_gen = gsl_rng_alloc(gsl_rng_taus); + gsl_rng_set(rand_gen, time(NULL)); + + Fibre::Strand::Set strands; + + MR::ProgressBar progress_bar ("Generating " + str(num_strands) + " short strands on sphere_surface..."); + + for (size_t strand_i = 0; strand_i < num_strands; strand_i++) { + Fibre::Strand strand(degree, 0.0); + + strand[0] = Triple((double)gsl_ran_gaussian(rand_gen, 1.0), (double)gsl_ran_gaussian(rand_gen, 1.0), (double)gsl_ran_gaussian(rand_gen, 1.0)).normalise() * sphere_radius; + + strand[1] = strand[0].cross(strand[0].min_axis()).normalise() * strand_length; + + strands.push_back(strand); + } + + strands.save(output_location, num_points); + + //MR::ProgressBar::done(); +} + + diff --git a/cmd/redegree_fibres.cpp b/cmd/redegree_fibres.cpp new file mode 100644 index 0000000..05fccee --- /dev/null +++ b/cmd/redegree_fibres.cpp @@ -0,0 +1,154 @@ +/* + Copyright 2008 Brain Research Institute, Melbourne, Australia + + Written by Thomas G Close, Jul 26, 2010. + + This file is part of MRtrix. + + MRtrix is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + MRtrix is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with MRtrix. If not, see . + +*/ + + +#include "bts/cmd.h" + +#include "bts/common.h" + +#include "bts/fibre/strand/set.h" +#include "bts/fibre/tractlet/set.h" + +#include "bts/file.h" + +#include "bts/math/svd.h" + + + +#include "bts/inline_functions.h" + +using namespace BTS; + +const size_t DEGREE_DEFAULT = 3; + +SET_VERSION_DEFAULT; +SET_AUTHOR ("Thomas G. Close"); +SET_COPYRIGHT (NULL); + + +DESCRIPTION = { + "redegree_fibres", + "Changes the degree of the fibres", + NULL +}; + +ARGUMENTS = { + Argument ("input location","").type_file (), + Argument ("output location","").optional().type_file (), + Argument() +}; + + +OPTIONS = { + + Option("degree", "The degree of the output fibres..") + + Argument("degree","").type_integer(0,DEGREE_DEFAULT,LARGE_INT), + +Option() }; + + +EXECUTE { + + + std::string input_location = argument[0]; + std::string output_location = input_location; + + if (argument.size() == 2) + output_location = argument[1].c_str(); + + size_t degree = DEGREE_DEFAULT; + + Options opt = get_options("degree"); + if (opt.size()) + degree = opt[0][0]; + + MR::ProgressBar progress_bar ("Redegreeing fibres to a degree of " + str(degree) + " ..."); + + if (File::has_extension(input_location)) { + + Fibre::Strand::Set strands (input_location); + + for (size_t strand_i = 0; strand_i < strands.size(); ++strand_i) + strands[strand_i].resize(degree,0.0); + + strands.save(output_location); + + } else if (File::has_extension(input_location)) { + + Fibre::Tractlet::Set tractlets (input_location); + + for (size_t tract_i = 0; tract_i < tractlets.size(); ++tract_i) + tractlets[tract_i].redegree(degree,0.0); + + tractlets.save(output_location); + + } else + throw Exception ("Unrecognised extension '" + File::extension(input_location) + "'."); + + +} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/cmd/remove_fibres.cpp b/cmd/remove_fibres.cpp new file mode 100644 index 0000000..b3e054a --- /dev/null +++ b/cmd/remove_fibres.cpp @@ -0,0 +1,175 @@ +/* + Copyright 2009 Brain Research Institute, Melbourne, Australia + + Created by Tom Close on 13/03/09. + + This file is part of Bayesian Tractlet Sampling (BTS). + + BTS is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + BTS is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with BTS. If not, see . + + */ + +extern "C" { +#include +#include +} + + +#include "bts/common.h" + +#include "bts/cmd.h" +#include "progressbar.h" + +#include "bts/fibre/track/set.h" +#include "bts/fibre/strand/set.h" +#include "bts/fibre/tractlet/set.h" + + + +#include "bts/inline_functions.h" + + +using namespace BTS; + +SET_VERSION_DEFAULT; +SET_AUTHOR ("Thomas G. Close"); +SET_COPYRIGHT (NULL); + +DESCRIPTION = { + "Trims paths to a sphere of specified radius.", + "The sections of paths that lie outside the radius of the sphere are removed and sections that reenter are split into new paths.", + NULL +}; + +ARGUMENTS = { + Argument ("input", "The input fibres.").type_file(), + Argument ("output", "The output fibres.").optional().type_file(), + Argument() +}; + + +OPTIONS = { + + Option ("degree", "Limit the degree of the Strand coefficients used to describe the strands to the first - degrees") + + Argument ("degree", "Limit the degree of the Strand coefficients used to describe the strands to the first - degrees").type_integer (1, 200, 3), + + Option ("min_length", "The length of the short strands") + + Argument ("min_length", "").type_float (-1, -1, LARGE_FLOAT), + + Option ("min_acs", "The minimum tract volume.") + + Argument ("min_acs", "").type_float (-1, -1, LARGE_FLOAT), + + Option ("num_length_sections", "The number of points that will be generated along the strand location") + + Argument ("points", "").type_integer (1, 100, 2000), + + Option ("num_width_sections", "The number of points that will be generated along the strand location") + + Argument ("points", "").type_integer (1, 100, 2000), + +Option() }; + + +EXECUTE { + + std::string input_location = argument[0]; + std::string output_location = input_location; + + if (argument.size() > 1) + output_location = argument[1].c_str(); + + +// size_t degree = 3; + double min_length = -1; + double min_acs = -1; +// size_t num_length_sections = 100; +// size_t num_width_sections = 6; + + Options opt = get_options("min_length"); + if (opt.size()) + min_length = opt[0][0]; + + opt = get_options("min_acs"); + if (opt.size()) + min_acs = opt[0][0]; + +// opt = get_options("degree"); +// if (opt.size()) +// degree = opt[0][0]; +// opt = get_options("num_length_sections"); +// if (opt.size()) +// num_length_sections = opt[0][0]; +// opt = get_options("num_width_sections"); +// if (opt.size()) +// num_width_sections = opt[0][0]; + + + if ((File::has_extension(input_location) || File::has_extension(input_location)) && (min_length > 0) ) { + Fibre::Track::Set in(input_location); + Fibre::Track::Set out(in.get_extend_props()); + out.add_extend_elem_props(in); + + MR::ProgressBar progress_bar("Removing short strands/tracks...."); + + for (size_t tck_i = 0; tck_i < in.size(); ++tck_i) { + + Fibre::Track tck = in[tck_i]; + + double length = 0.0; + + for (size_t point_i = 1; point_i < tck.size(); ++point_i) { + length += (tck[point_i] - tck[point_i - 1]).norm(); + } + + if (length > min_length) + out.push_back(tck, in.get_extend_elem_prop_row(tck_i)); + + ++progress_bar; + + } + + in = out; + + out.save(output_location); + + } + + + if (File::has_extension(input_location) && (min_acs > 0)) { + + Fibre::Tractlet::Set in(input_location); + Fibre::Tractlet::Set out(in.get_extend_props()); + out.add_extend_elem_props(in); + + + MR::ProgressBar progress_bar("Removing thin tractlets...."); + + for (size_t tract_i = 0; tract_i < in.size(); ++tract_i) { + + if (in[tract_i].acs() > min_acs) + out.push_back(in[tract_i], in.get_extend_elem_prop_row(tract_i)); + + ++progress_bar; + + } + + in = out; + + out.save(output_location); + + } + + + +} + + diff --git a/cmd/remove_isotropic.cpp b/cmd/remove_isotropic.cpp new file mode 100644 index 0000000..8b6847d --- /dev/null +++ b/cmd/remove_isotropic.cpp @@ -0,0 +1,106 @@ +/* + Copyright 2009 Brain Research Institute, Melbourne, Australia + + Created by Tom Close on 13/03/09. + + This file is part of Bayesian Tractlet Sampling (BTS). + + BTS is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + BTS is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with BTS. If not, see . + + */ + + +extern "C" { +#include +#include +} + + +#include "bts/cmd.h" +#include "progressbar.h" + +#include "bts/common.h" +#include "bts/image/expected/buffer.h" +#include "bts/image/observed/buffer.h" + +#include "bts/image/noise.h" +#include "bts/image/noise/gaussian.h" + + + +#include "bts/inline_functions.h" + +using namespace BTS; + +SET_VERSION_DEFAULT; +SET_AUTHOR ("Thomas G. Close"); +SET_COPYRIGHT (NULL); + +DESCRIPTION = { + "Subtracts the isotropic components from the image.", + "", + NULL +}; + +ARGUMENTS = { + Argument ("initial", "The initial image the second image will be subtracted from.").type_file(), + + Argument ("output_image", "The resulting image").optional().type_file (), + + Argument() +}; + + +OPTIONS = { + + Option ("dims", "The number of voxels along each dimension") + + Argument ("dims", "").type_text ("[3,3,3]"), + + Option ("offsets", "The offset of the centre of the image from the origin (0,0,0).") + + Argument ("offsets", "").type_text ("auto"), + + +Option() + +}; + + + +EXECUTE { + + std::string input_location = argument[0]; + std::string output_location = input_location; + + if (argument.size() > 1) + output_location = argument[1].c_str(); + + Image::Observed::Buffer image(input_location); + + MR::ProgressBar progress_bar ("Removing isotropic components from image..."); + + image.remove_isotropic(); + + image.properties()["istropic_removed"] = "1"; + + +//-------------// +// Save Image // +//-------------// + + image.save(output_location); + + +} + + diff --git a/cmd/remove_short_tracks.cpp b/cmd/remove_short_tracks.cpp new file mode 100644 index 0000000..4ac3553 --- /dev/null +++ b/cmd/remove_short_tracks.cpp @@ -0,0 +1,94 @@ +/* + Copyright 2008 Brain Research Institute, Melbourne, Australia + + Written by Thomas G Close, Sep 27, 2010. + + This file is part of MRtrix. + + MRtrix is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + MRtrix is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with MRtrix. If not, see . + +*/ + + +#include "bts/cmd.h" + +#include "bts/common.h" + +#include "bts/inline_functions.h" +#include "bts/fibre/track/set.h" + +using namespace BTS; + + +SET_VERSION_DEFAULT; +SET_AUTHOR ("Thomas G. Close"); +SET_COPYRIGHT (NULL); + +const size_t NUM_LENGTH_SECTIONS_DEFAULT = 4; + +DESCRIPTION = { + "remove_short_tracks", + "", + NULL +}; + +ARGUMENTS = { + Argument ("input_location","").type_file (), + Argument ("output_location", "").optional().type_file (), + Argument() +}; + + +OPTIONS = { + + Option("num_points","The number of points below which a track will be removed.") + + Argument("num_points","").type_integer(0,NUM_LENGTH_SECTIONS_DEFAULT,LARGE_INT), + +Option() }; + + +EXECUTE { + + + std::string input_location = argument[0]; + std::string output_location; + + if (argument.size() == 2) + output_location = argument[1].c_str(); + else + output_location = input_location; + + size_t num_points = NUM_LENGTH_SECTIONS_DEFAULT; + + + Options opt; + + opt = get_options("num_points"); + if (opt.size()) + num_points = opt[0][0]; + + + Fibre::Track::Set in_tracks(input_location); + Fibre::Track::Set out_tracks(in_tracks.get_extend_props()); + out_tracks.add_extend_elem_props(in_tracks); + + for (size_t tck_i = 0; tck_i < in_tracks.size(); ++tck_i) + if (in_tracks[tck_i].size() >= num_points) + out_tracks.push_back(in_tracks[tck_i], in_tracks.get_extend_elem_prop_row(tck_i)); + + out_tracks.save(output_location); + + + +} diff --git a/cmd/resample_tcks.cpp b/cmd/resample_tcks.cpp new file mode 100644 index 0000000..418b23d --- /dev/null +++ b/cmd/resample_tcks.cpp @@ -0,0 +1,173 @@ +/* + Copyright 2009 Brain Research Institute, Melbourne, Australia + + Created by Tom Close on 13/03/09. + + This file is part of Bayesian Tractlet Sampling (BTS). + + BTS is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + BTS is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with BTS. If not, see . + + */ + +#include "bts/cmd.h" +#include "progressbar.h" + +#include "bts/common.h" + +#include "bts/fibre/track/set.h" + +#include "phantom/interface.h" + +#include "phantom/shared/strand_collection.h" +#include "phantom/resample/resample.h" + + + + +#include "bts/inline_functions.h" + + +using namespace BTS; + +SET_VERSION_DEFAULT; +SET_AUTHOR ("Thomas G. Close"); +SET_COPYRIGHT (NULL); + +DESCRIPTION = { + "Resamples control points along tracks.", + "", + NULL +}; + +ARGUMENTS = { + Argument ("input", "The tracks to be resampled.").type_file (), + Argument ("output", "The returned resampled tracks.").optional().type_file(), + Argument() +}; + + +OPTIONS = { + + Option ("resample_length", "Defines the length of the new inter control-point intervals") + + Argument ("resample_length", "").type_float (0.00001, 0.02, 10000.0), + + Option ("double_back_angle_threshold", "The angle between successive segments above which the second segment is considered to have doubled back on itself") + + Argument ("double_back_angle_threshold", "").type_float (90.0, 150.0, 180.0), + + Option ("forward_angle_threshold", "The angle after a double back has been detected above which the subsequent segment is considered to have travelled back in a forward direction again.") + + Argument ("forward_angle_threshold","").type_float (5.0, 80.0, 180.0), + + Option ("num_points", "The number of points that will be generated along the strand path if the loaded tracks are fourier descriptors") + + Argument ("num_points", "").type_integer (1, 100, 2000), + + Option ("degree", "The degree of the Fourier coefficients used to describe the ") + + Argument ("degree", "").type_integer (1, 8, 200), + +Option() }; + + +EXECUTE { + + + std::string input_path = argument[0]; + std::string output_path; + + if (argument.size() > 1) + output_path = argument[1].c_str(); + else + output_path = input_path; + + + double resample_length = 0.02; + double double_back_angle_threshold = 150.0; + double forward_angle_threshold = 80.0; + size_t num_points = 0; + size_t degree = 0; + + + Options opt = get_options("resample_length"); + if (opt.size()) + resample_length = opt[0][0]; + + opt = get_options("double_back_angle_threshold"); + if (opt.size()) + double_back_angle_threshold = opt[0][0]; + + opt = get_options("forward_angle_threshold"); + if (opt.size()) + forward_angle_threshold = opt[0][0]; + + opt = get_options("num_points"); + if (opt.size()) + num_points = opt[0][0]; + + opt = get_options("degree"); + if (opt.size()) + degree = opt[0][0]; + + + BTS::Fibre::Track::Set tcks(input_path, num_points); + BTS::Fibre::Track::Set resampled_tcks(tcks.get_extend_props()); + + std::vector > pre_points; + std::vector > post_points; + + Strand_collection c, resampled_c; + + generate_pre_points(tcks, pre_points); + + generate_post_points(tcks, post_points); + + convert_mr_to_nfg(&c, tcks, pre_points, post_points); + + MR::ProgressBar progress_bar ("Resampling tracks..."); + resample_collection(&c, &resampled_c, resample_length, double_back_angle_threshold, forward_angle_threshold); + //MR::ProgressBar::done(); + + convert_nfg_to_mr(resampled_tcks, pre_points, post_points, &resampled_c); + + resampled_tcks.save(output_path, degree); + +} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/cmd/reset_indices.cpp b/cmd/reset_indices.cpp new file mode 100644 index 0000000..dfce128 --- /dev/null +++ b/cmd/reset_indices.cpp @@ -0,0 +1,132 @@ +/* + Copyright 2008 Brain Research Institute, Melbourne, Australia + + Written by J-Donald Tournier, 27/06/08. + + This file is part of MRtrix. + + MRtrix is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + MRtrix is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with MRtrix. If not, see . + +*/ + + +#include "bts/cmd.h" +#include "bts/common.h" + +#include "bts/fibre/strand/set.h" +#include "bts/fibre/tractlet/set.h" +#include "bts/fibre/track/set.h" + + +#include "bts/inline_functions.h" + +using namespace BTS; + +template void reset_indices(T& input_location); + +SET_VERSION_DEFAULT; +SET_AUTHOR ("Thomas G. Close"); +SET_COPYRIGHT (NULL); + +DESCRIPTION = { + "Resets bundle indices to a consecutive range", + "", + NULL +}; + +ARGUMENTS = { + Argument ("input file", "The input fibres file location.").type_file (), + Argument ("output file", "The output fibres file location.").optional().type_file (), + Argument() +}; + + +OPTIONS = { + + Option() +}; + +EXECUTE { + + std::string input_location = argument[0]; + std::string output_location = input_location; + + if (argument.size() > 1) + output_location = argument[1].c_str(); + + + if (File::has_extension(input_location)) { + + Fibre::Strand::Set strands (input_location); + + reset_indices(strands); + + strands.save(output_location); + + + } else if (File::has_extension(input_location)) { + + Fibre::Tractlet::Set tractlets (input_location); + + reset_indices(tractlets); + + tractlets.save(output_location); + + + } else if (File::has_extension(input_location)) { + + Fibre::Track::Set tcks (input_location); + + reset_indices(tcks); + + tcks.save(output_location); + + + } else + throw Exception ("Unrecognised extension of input file '" + input_location + "'."); + +} + + + +template void reset_indices(T& fibres) { + + + if (!fibres.has_extend_elem_prop(Fibre::Track::BUNDLE_INDEX_EPROP)) + fibres.add_extend_elem_prop(Fibre::Track::BUNDLE_INDEX_EPROP, "-1"); + + + std::map indices; + + size_t bundle_count = 0; + + for (size_t strand_i = 0; strand_i < fibres.size(); ++strand_i) { + + std::string bundle_index = fibres.get_extend_elem_prop(Fibre::Track::BUNDLE_INDEX_EPROP, strand_i); + + if (!indices.count(bundle_index)) + indices[bundle_index] = bundle_count++; + + } + + + for (size_t strand_i = 0; strand_i < fibres.size(); ++strand_i) { + + size_t reset_bundle_index = indices[fibres.get_extend_elem_prop(Fibre::Track::BUNDLE_INDEX_EPROP, strand_i)]; + + fibres.set_extend_elem_prop(Fibre::Track::BUNDLE_INDEX_EPROP, str(reset_bundle_index), strand_i); + + } + +} diff --git a/cmd/riemannian.cpp b/cmd/riemannian.cpp new file mode 100644 index 0000000..1a05018 --- /dev/null +++ b/cmd/riemannian.cpp @@ -0,0 +1,588 @@ +/* + Copyright 2009 Brain Research Institute, Melbourne, Australia + + Created by Tom Close on 13/03/09. + + This file is part of Bayesian Tractlet Sampling (BTS). + + BTS is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + BTS is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with BTS. If not, see . + + */ + + + +extern "C" { +#include +#include +} + + +#include + +#include "bts/cmd.h" + +#include "math/matrix.h" + +#include "progressbar.h" + + +#include "bts/common.h" +#include "bts/file.h" + + +#include "bts/fibre/tractlet/set.h" +#include "bts/fibre/strand/set.h" + + + + +#include "bts/diffusion/model.h" +#include "bts/image/expected/trilinear/buffer.h" +#include "bts/image/expected/gaussian/buffer.h" +#include "bts/image/expected/quartic/buffer.h" + +#include "bts/image/observed/buffer.h" + +#include "bts/prob/uniform.h" +#include "bts/prob/prior.h" + + + + + +#include "bts/prob/likelihood.h" +#include "bts/prob/likelihood.h" +#include "bts/prob/likelihood/one_sided_gaussian.h" +#include "bts/prob/likelihood/gaussian.h" + +#include "bts/fibre/strand/set/momentum.h" +#include "bts/fibre/tractlet/set/momentum.h" +#include "bts/mcmc/proposal/distribution.h" +#include "bts/mcmc/proposal/distribution/gaussian.h" +#include "bts/mcmc/proposal/momentum/weighted.h" + + +#include "bts/mcmc/riemannian.h" + +#include "bts/file.h" +#include "bts/math/common.h" + +#include "bts/fibre/base/tensor_writer.cpp.h" +#include "bts/prob/likelihood.cpp.h" +#include "bts/prob/likelihood/gaussian.cpp.h" + +#include "bts/inline_functions.h" + + +using namespace BTS; + + +SET_VERSION_DEFAULT; +SET_AUTHOR ("Thomas G. Close"); +SET_COPYRIGHT (NULL); + +DESCRIPTION = { + "Runs Riemannian MCMC sampling on a given image from a given starting configuration of tractlets or strands.", + "", + NULL +}; + +ARGUMENTS = { + Argument ("input_image", "The image the tractlets will be fit against.").type_image_in(), + + Argument ("inital tractlets", "A starting point for the MCMC algorithm.").type_file (), + + Argument ("samples location", "The location where the samples will be saved.").type_file (), + + Argument() +}; + + +OPTIONS = { + + + Option ("num_samples", "The Number of MCMC iterations to take of the prob distribution over the tractlets") + + Argument ("num_samples", "").type_integer (1, MCMC::Riemannian::NUM_SAMPLES_DEFAULT, LARGE_INT), + + Option ("num_leapfrog_steps", "The number of MCMC iterations that will be performed before a sample is saved") + + Argument ("num_leapfrog_steps", "").type_integer (1, MCMC::Riemannian::NUM_LEAPFROG_STEPS_DEFAULT, LARGE_INT), + + Option ("num_newton_steps", "The number steps to take in the Newton solution of the nonseparable Hamiltonian.") + + Argument ("num_newton_steps", "").type_integer (1, MCMC::Riemannian::NUM_NEWTON_STEPS_DEFAULT, LARGE_INT), + + Option ("burn_num_samples", "The Number of MCMC iterations to take as part of the Burn-in.") + + Argument ("burn_num_samples", "").type_integer (0, MCMC::Riemannian::BURN_NUM_SAMPLES_DEFAULT, LARGE_INT), + + Option ("burn_num_leapfrog_steps", "The number of MCMC iterations that will be performed before a sample is saved in the Burn-in.") + + Argument ("burn_num_leapfrog_steps", "").type_integer (1, MCMC::Riemannian::BURN_NUM_LEAPFROG_STEPS_DEFAULT, LARGE_INT), + + Option ("burn_num_newton_steps", "The number steps to take in the Newton solution of the nonseparable Hamiltonian in the burn-in.") + + Argument ("burn_num_newton_steps", "").type_integer (1, MCMC::Riemannian::BURN_NUM_NEWTON_STEPS_DEFAULT, LARGE_INT), + + Option ("burn_snr", "The Signal-to-noise ratio assumed for the burn-in period.") + + Argument ("burn_snr", "").type_float (SMALL_FLOAT, MCMC::Riemannian::BURN_SNR_DEFAULT, LARGE_FLOAT), + + Option ("precondition", "Preconditioning increment added to diagonal of Fisher Information matrix for stability of its inverse.") + + Argument ("precondition", "").type_float (0.0, MCMC::Riemannian::PRECONDITION_DEFAULT, LARGE_FLOAT), + + Option ("seed", "The random seed that is passed to the random generator") + + Argument ("seed", ""), + + Option ("prior_only", "Only sample from the prior distribution."), + + Option ("save_iterations", "Save all iterations not just samples."), + + DIFFUSION_PARAMETERS, + + EXPECTED_IMAGE_PARAMETERS, + + LIKELIHOOD_PARAMETERS, + + PRIOR_PARAMETERS, + + PROPOSAL_DISTRIBUTION_PARAMETERS, + + PROPOSAL_MOMENTUM_PARAMETERS, + + COMMON_PARAMETERS, + +Option() }; + + +EXECUTE { + + +//-----------------// +// Load Arguments // +//-----------------// + + std::string obs_image_location = argument[0]; + std::string initial_location = argument[1]; + std::string samples_location = argument[2]; + std::string burn_samples_location = File::strip_extension (samples_location) + ".burn." + File::extension(samples_location); + + MR::Image::Header header (argument[0]); + + if (header.ndim() != 4) + throw Exception ("dwi image should contain 4 dimensions"); + + + +//----------------------------------// +// Get and Set Optional Parameters // +//----------------------------------// + + + size_t num_samples = MCMC::Riemannian::NUM_SAMPLES_DEFAULT; + size_t num_leapfrog_steps = MCMC::Riemannian::NUM_LEAPFROG_STEPS_DEFAULT; + size_t num_newton_steps = MCMC::Riemannian::NUM_NEWTON_STEPS_DEFAULT; + size_t burn_num_samples = MCMC::Riemannian::BURN_NUM_SAMPLES_DEFAULT; + size_t burn_num_leapfrog_steps = MCMC::Riemannian::BURN_NUM_LEAPFROG_STEPS_DEFAULT; + size_t burn_num_newton_steps = MCMC::Riemannian::BURN_NUM_NEWTON_STEPS_DEFAULT; + double burn_snr = MCMC::Riemannian::BURN_SNR_DEFAULT; + double precondition = MCMC::Riemannian::PRECONDITION_DEFAULT; + size_t seed = time(NULL); + bool prior_only = false; + bool save_iterations = true; + + + + + Options opt = get_options("num_samples"); + if (opt.size()) + num_samples = opt[0][0]; + + opt = get_options("num_leapfrog_steps"); + if (opt.size()) + num_leapfrog_steps = opt[0][0]; + + opt = get_options("num_newton_steps"); + if (opt.size()) + num_newton_steps = opt[0][0]; + + opt = get_options("burn_num_samples"); + if (opt.size()) + burn_num_samples = opt[0][0]; + + opt = get_options("burn_num_leapfrog_steps"); + if (opt.size()) + burn_num_leapfrog_steps = opt[0][0]; + + opt = get_options("burn_num_newton_steps"); + if (opt.size()) + burn_num_newton_steps = opt[0][0]; + + opt = get_options("burn_snr"); + if (opt.size()) + burn_snr = opt[0][0]; + + opt = get_options("precondition"); + if (opt.size()) + precondition = opt[0][0]; + + opt = get_options("seed"); + if (opt.size()) { + std::string seed_string = opt[0][0]; + seed = to(seed_string); + } else + std::cout << "No random seed supplied. Using timestamp: " << seed << std::endl; + + opt = get_options("prior_only"); + if (opt.size()) + prior_only = true; + + opt = get_options("save_iterations"); + if (opt.size()) + save_iterations = true; + + // Loads parameters to construct Diffusion::Model ('diff_' prefix) + SET_DIFFUSION_PARAMETERS; + + // Loads parameters to construct Image::Expected::*::Buffer ('img_' prefix) + SET_EXPECTED_IMAGE_PARAMETERS; + + // Loads parameters to construct Prob::Likelihood ('like_' prefix) + SET_LIKELIHOOD_PARAMETERS; + + // Loads parameters to construct Prob::Prior ('prior_' prefix) + SET_PRIOR_PARAMETERS; + + // Loads parameters to construct Proposal::Distribution (any variables with 'prop_' prefix) + SET_PROPOSAL_DISTRIBUTION_PARAMETERS; + + // Loads parameters to construct Proposal::Distribution ('prop_' prefix) + SET_PROPOSAL_MOMENTUM_PARAMETERS(initial_location); + + // Loads parameters that are common to all commands. + SET_COMMON_PARAMETERS; + + + //--------------------------------// + // Set up reference image buffer // + //--------------------------------// + + + Image::Observed::Buffer obs_image(obs_image_location, Diffusion::Encoding::Set(diff_encodings)); + + + //If gradient scheme is included in reference image header, use that instead of default (NB: Will override any gradients passed to '-diff_encodings' option). + if (header.get_DW_scheme().rows()) { + diff_encodings = header.get_DW_scheme(); + diff_encodings_location = "from observed image"; + } + + if ((header.count("diff_response_SH")) && (Math::matlab_str(diff_response_SH) != header["diff_response_SH"])) + std::cout << std::endl << "Warning! Diffusion response function harmonics (" << Math::matlab_str(diff_response_SH) << ") do not match reference image (" << header["diff_response_SH"] + ")!" << std::endl; + + + //----------------------------// + // Initialize Expected Image // + //----------------------------// + + + + Diffusion::Model diffusion_model = Diffusion::Model::factory (diff_encodings, + diff_response_SH, + diff_adc, + diff_fa, + diff_isotropic); + + Image::Expected::Buffer* exp_image = Image::Expected::Buffer::factory(exp_type, + obs_image, + diffusion_model, + exp_num_length_sections, + exp_num_width_sections, + exp_interp_extent, + exp_enforce_bounds, + exp_half_width); + + + + //----------------------------------------------------------------// + // Auto-generate base intensity initial value/b_intens_gauss_mean // + //----------------------------------------------------------------// + + if (exp_base_intensity < 0) + exp_base_intensity = exp_image->base_intensity_default(obs_image, initial_location); + + + //-----------------------// + // Initialize Likelihood // + //-----------------------// + + Prob::Likelihood::Gaussian likelihood (obs_image, exp_image, like_snr, like_b0_include, like_outside_scale, like_ref_b0, like_ref_signal); + + //----------------------------------// + // Initialize Proposal Distribution // + //----------------------------------// + + gsl_rng* rand_gen = gsl_rng_alloc(gsl_rng_taus); + gsl_rng_set(rand_gen, seed); + + MCMC::Proposal::Distribution* proposal_distribution = MCMC::Proposal::Distribution::factory(prop_distr_type, rand_gen); + + + +// Proposal::Intensity* intensity_proposer = Proposal::Intensity::factory(prop_intens_type, proposal_distribution, prop_intens_scale); +// +// Proposal::BaseIntensity* base_intensity_proposer = Proposal::BaseIntensity::factory(prop_base_intens_type, proposal_distribution, prop_base_intens_scale); + + + + //-------------------------// + // Set Output Properties // + //-------------------------// + + std::map run_properties; + + run_properties["Method"] = "riemannian"; + run_properties["num_newton_steps"] = str(num_newton_steps); + run_properties["num_leapfrog_steps"] = str(num_leapfrog_steps); + run_properties["seed"] = str(seed); + run_properties["num_samples"] = str(num_samples); + run_properties["burn_num_leapfrog_steps"] = str(burn_num_leapfrog_steps); + run_properties["burn_num_newton_steps"] = str(burn_num_newton_steps); + run_properties["burn_num_samples"] = str(burn_num_samples); + run_properties["burn_snr"] = str(burn_snr); + run_properties["precondition"] = str(precondition); + run_properties["obs_image"] = obs_image_location; + run_properties["initial_state"] = Fibre::Base::Object::load_matlab_str(initial_location); + run_properties["initial_state_location"]= initial_location; + + run_properties["prior_only"] = str(prior_only); + + ADD_DIFFUSION_PROPERTIES(run_properties); + + ADD_LIKELIHOOD_PROPERTIES(run_properties); + + ADD_EXPECTED_IMAGE_PROPERTIES(run_properties); + + ADD_PRIOR_PROPERTIES(run_properties); + + ADD_PROPOSAL_DISTRIBUTION_PROPERTIES(run_properties); + + ADD_PROPOSAL_MOMENTUM_PROPERTIES(run_properties); + + ADD_COMMON_PROPERTIES(run_properties); + + //-------------------------// + // Sampling from Strands // + //-------------------------// + + Prob::Prior prior (prior_scale, + prior_mag_scale, + prior_mag_aux_scale, + prior_hook_scale, + prior_hook_num_points, + prior_density_high_scale, + prior_density_low_scale, + prior_density_num_points, + prior_acs_scale, + prior_acs_mean, + prior_length_scale, + prior_length_mean); + + if (File::has_extension(initial_location)) { + + + //------------------------// + // Load Initial Strands // + //------------------------// + + Fibre::Strand::Set strands (initial_location); + + strands.set_base_intensity(exp_base_intensity); +// strands[0].acs = 1.0; + + + //--------------------// + // Initialize Prior // + //--------------------// + + + //---------------------// + // Initialize Momentum // + //---------------------// + + MCMC::Proposal::Momentum::Weighted::NonSeparable momentum = MCMC::Proposal::Momentum::Weighted::NonSeparable::factory( strands, + momen_step_scale, + momen_step_location, + proposal_distribution, + num_newton_steps); + + + //------------------// + // Perform sampling // + //------------------// + + Fibre::Strand::Set burnt_strands; + + + + if (burn_num_samples) { + + likelihood.set_assumed_snr(burn_snr, like_ref_b0, like_ref_signal); + + burnt_strands = MCMC::riemannian ( + strands, + likelihood, + prior, + momentum, + burn_samples_location, + run_properties, + burn_num_samples, + burn_num_leapfrog_steps, + burn_num_newton_steps, + rand_gen, + precondition, + prior_only, + save_iterations + ); + + likelihood.set_assumed_snr(like_snr, like_ref_b0, like_ref_signal); + + } else + burnt_strands = strands; + + + MCMC::riemannian ( + burnt_strands, + likelihood, + prior, + momentum, + samples_location, + run_properties, + num_samples, + num_leapfrog_steps, + num_newton_steps, + rand_gen, + precondition, + prior_only, + save_iterations + ); + + + + //------------------------// + // Sampling from Tractlets // + //------------------------// + + + } else if (File::has_extension(initial_location)) { + + + //-------------// + // Load Tractlets // + //-------------// + + Fibre::Tractlet::Set tractlets (initial_location); + + tractlets.set_base_intensity(exp_base_intensity); + + + //------------------// + // Initialize Prior // + //------------------// + + //---------------------// + // Initialize Proposer // + //---------------------// + + + MCMC::Proposal::Momentum::Weighted::NonSeparable momentum = MCMC::Proposal::Momentum::Weighted::NonSeparable::factory ( tractlets, + momen_step_scale, + momen_step_location, + proposal_distribution, + num_newton_steps); + + + + + //------------------// + // Perform sampling // + //------------------// + + Fibre::Tractlet::Set burnt_tractlets; + + if (burn_num_samples) { + + likelihood.set_assumed_snr(burn_snr, like_ref_b0, like_ref_signal); + + burnt_tractlets = MCMC::riemannian ( + + tractlets, + likelihood, + prior, + momentum, + burn_samples_location, + run_properties, + burn_num_samples, + burn_num_leapfrog_steps, + burn_num_newton_steps, + rand_gen, + precondition, + prior_only, + save_iterations + ); + + likelihood.set_assumed_snr(like_snr, like_ref_b0, like_ref_signal); + + } else + burnt_tractlets = tractlets; + + + + MCMC::riemannian ( + + burnt_tractlets, + likelihood, + prior, + momentum, + samples_location, + run_properties, + num_samples, + num_leapfrog_steps, + num_newton_steps, + rand_gen, + precondition, + prior_only, + save_iterations + ); + + + } else + throw Exception ("Unrecognised extension of initial state location, '" + initial_location + "'."); + + + std::cout << "MATLAB plot commands:\n\nplot_fibres " << samples_location << "\nscan.py " << samples_location << std::endl; + + + gsl_rng_free(rand_gen); + + delete exp_image; + delete proposal_distribution; + + +} + + + diff --git a/cmd/rotate_strand.cpp b/cmd/rotate_strand.cpp new file mode 100644 index 0000000..68c4e9d --- /dev/null +++ b/cmd/rotate_strand.cpp @@ -0,0 +1,165 @@ +/* + Copyright 2008 Brain Research Institute, Melbourne, Australia + + Written by Thomas G Close, Jan 25, 2011. + + This file is part of MRtrix. + + MRtrix is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + MRtrix is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with MRtrix. If not, see . + +*/ + + +#include "bts/cmd.h" + +#include "bts/common.h" + +#include "bts/fibre/strand.h" +#include "bts/fibre/strand/set.h" + +#include "bts/inline_functions.h" + +using namespace BTS; + + +SET_VERSION_DEFAULT; +SET_AUTHOR ("Thomas G. Close"); +SET_COPYRIGHT (NULL); + + +const size_t NUM_STEPS_DEFAULT = 100; +const float ANGLE_DEFAULT = M_PI / 2.0; +const std::string AXIS_DEFAULT = "x"; + +DESCRIPTION = { + "rotate_strand", + "", + NULL +}; + +ARGUMENTS = { + Argument ("input_strand","").type_file (), + Argument ("output strand set","").type_file (), + Argument() +}; + + +OPTIONS = { + + Option("num_steps","") + + Argument("num_steps").type_integer(0,LARGE_INT,NUM_STEPS_DEFAULT), + + Option("angle","") + + Argument("angle").type_float(0, 2.0 * M_PI, ANGLE_DEFAULT), + + Option("axis","") + + Argument("axis").type_text(AXIS_DEFAULT.c_str()), + +Option() }; + + +EXECUTE { + + std::string input_location = argument[0]; + std::string output_location = argument[1]; + + size_t num_steps = NUM_STEPS_DEFAULT; + float angle = ANGLE_DEFAULT; + std::string axis = AXIS_DEFAULT; + + Options opt; + + opt = get_options("num_steps"); + if (opt.size()) + num_steps = opt[0][0]; + + opt = get_options("angle"); + if (opt.size()) + angle = opt[0][0]; + + opt = get_options("axis"); + if (opt.size()) + axis = opt[0][0].c_str(); + + Fibre::Strand::Set strands (input_location); + Fibre::Strand::Set rotated_strands(strands); + + std::map file_props; + file_props["method"] = "rotated_strand"; + + Fibre::Strand::Set::Writer writer(output_location, strands, file_props); + + MR::Math::Matrix rotation_matrix(3,3); + + MR::ProgressBar progress_bar ("Generating rotated strands...", num_steps); + + for (size_t step_i = 0; step_i < num_steps; ++step_i) { + + double current_angle = ((double)step_i / (double)(num_steps-1)) * angle; + double cos_angle = MR::Math::cos(current_angle); + double sin_angle = MR::Math::sin(current_angle); + + rotation_matrix = 0.0; + + if ((axis == "x") || (axis == "X")) { + + rotation_matrix(X,X) = 1.0; + rotation_matrix(Y,Y) = rotation_matrix(Z,Z) = cos_angle; + rotation_matrix(Y,Z) = -sin_angle; + rotation_matrix(Z,Y) = sin_angle; + + } else if ((axis == "y") || (axis == "Y")) { + + rotation_matrix(Y,Y) = 1.0; + rotation_matrix(X,X) = rotation_matrix(Z,Z) = cos_angle; + rotation_matrix(X,Z) = sin_angle; + rotation_matrix(Z,X) = -sin_angle; + + } else if ((axis == "z") || (axis == "Z")) { + + rotation_matrix(Z,Z) = 1.0; + rotation_matrix(Y,Y) = rotation_matrix(X,X) = cos_angle; + rotation_matrix(Y,X) = -sin_angle; + rotation_matrix(X,Y) = sin_angle; + + } else + throw Exception ("Value for axis (" + axis + ") is not valid (x, y or z)"); + + for (size_t strand_i = 0; strand_i < strands.size(); ++strand_i) { + + MR::Math::Vector vector(3), rotated_vector(3); + Fibre::Strand rotated_strand(3); + + vector[X] = strands[strand_i][1][X]; + vector[Y] = strands[strand_i][1][Y]; + vector[Z] = strands[strand_i][1][Z]; + + MR::Math::mult(rotated_vector, rotation_matrix, vector); + + rotated_strands[strand_i][1][X] = rotated_vector[X]; + rotated_strands[strand_i][1][Y] = rotated_vector[Y]; + rotated_strands[strand_i][1][Z] = rotated_vector[Z]; + + + } + + + writer.append(rotated_strands); + ++progress_bar; + + } + + + +} diff --git a/cmd/scale_fibres.cpp b/cmd/scale_fibres.cpp new file mode 100644 index 0000000..fe51ddc --- /dev/null +++ b/cmd/scale_fibres.cpp @@ -0,0 +1,151 @@ +/* + Copyright 2009 Brain Research Institute, Melbourne, Australia + + Written by Thomas G. Close, 04/03/2009. + + This file is part of Bayesian Tractlet Sampling (BTS). + + BTS is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + BTS is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with BTS. If not, see . + + */ + + +#include "bts/cmd.h" + +#include "bts/common.h" + + +#include "bts/fibre/strand/set.h" + + +#include "bts/fibre/strand/set.h" +#include "bts/fibre/track/set.h" +#include "bts/fibre/tractlet/set.h" +#include "bts/fibre/base/set_reader.h" +#include "bts/fibre/base/set_writer.h" + + +#include "bts/inline_functions.h" + +using namespace BTS; + +const double SCALE_DEFAULT=1.0; + +SET_VERSION_DEFAULT; +SET_AUTHOR ("Thomas G. Close"); +SET_COPYRIGHT (NULL); + +DESCRIPTION = { + "Scale the size of all fibres", + "", + NULL +}; + + +ARGUMENTS = { + Argument ("input", "The fibres to be trimmed.").type_file (), + Argument ("output", "The returned trimmed fibres.").optional().type_file(), + Argument() +}; + + +OPTIONS = { + + Option ("scale", "The scalar the fibres will be multiplied by.") + + Argument ("scale", "").type_float (SMALL_FLOAT, SCALE_DEFAULT, LARGE_FLOAT), + + Option ("include_acs", "Scale the acs and base intensities as well as the rest of the strand."), + +Option() }; + + +EXECUTE { + + + std::string input_location = argument[0]; + std::string output_location; + + if (argument.size() > 1) + output_location = argument[1].c_str(); + else + output_location = input_location; + + + double scale = SCALE_DEFAULT; + bool include_acs = false; + + Options opt = get_options("scale"); + if (opt.size()) + scale = opt[0][0]; + + opt = get_options("include_acs"); + if (opt.size()) + include_acs = true; + + + if (File::has_extension(input_location)) { + + Fibre::Strand::Set strands(input_location); + + Fibre::Strand::Set output = strands * scale; + + if (!include_acs) { + + output.set_base_intensity(strands.base_intensity()); + + for (size_t strand_i = 0; strand_i < strands.size(); ++strand_i) + output[strand_i].set_acs(strands[strand_i].acs()); + + } + + output.save(output_location); + + } else if (File::has_extension(input_location)) { + + Fibre::Track::Set tcks(input_location); + + Fibre::Track::Set output = tcks * scale; + + if (!include_acs) { + + output.set_base_intensity(tcks.base_intensity()); + + for (size_t tck_i = 0; tck_i < tcks.size(); ++tck_i) + output[tck_i].set_acs(tcks[tck_i].acs()); + + } + + output.save(output_location); + + } else if (File::has_extension(input_location)) { + + Fibre::Tractlet::Set tracts(input_location); + + Fibre::Tractlet::Set output = tracts * scale; + + if (!include_acs) { + + output.set_base_intensity(tracts.base_intensity()); + + for (size_t tract_i = 0; tract_i < tracts.size(); ++tract_i) + output[tract_i].set_acs(tracts[tract_i].acs()); + + } + + output.save(output_location); + + } else + throw Exception ("Unrecognised file extension of input file '" + input_location + "'."); + +} diff --git a/cmd/scan.cpp b/cmd/scan.cpp new file mode 100644 index 0000000..d704959 --- /dev/null +++ b/cmd/scan.cpp @@ -0,0 +1,907 @@ +/* + Copyright 2009 Brain Research Institute, Melbourne, Australia + + Created by Tom Close on 13/03/09. + + This file is part of Bayesian Tractlet Sampling (BTS). + + BTS is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + BTS is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with BTS. If not, see . + + */ + + + + +#include + +#include "bts/cmd.h" + +#include "math/matrix.h" + +#include "progressbar.h" + + +#include "bts/common.h" + +#include "bts/fibre/tractlet/set.h" +#include "bts/fibre/strand/set.h" + + +#include "bts/diffusion/model.h" +#include "bts/image/expected/trilinear/buffer.h" +#include "bts/image/expected/gaussian/buffer.h" +#include "bts/image/expected/quartic/buffer.h" + +#include "bts/image/observed/buffer.h" + +#include "bts/prob/uniform.h" +#include "bts/prob/prior.h" + + + + + +#include "bts/prob/likelihood.h" +#include "bts/prob/likelihood.h" +#include "bts/prob/likelihood/one_sided_gaussian.h" +#include "bts/prob/likelihood/gaussian.h" +#include "bts/analysis/scan.h" + +#include "bts/file.h" + +#include "bts/math/common.h" + + +#include "bts/inline_functions.h" + + +extern "C" { +#include +#include +} + +using namespace BTS; + +double NUM_STEPS_DEFAULT = 30; + +double AXIS_SCALE_DEFAULT = 1.0; + + +SET_VERSION_DEFAULT; +SET_AUTHOR ("Thomas G. Close"); +SET_COPYRIGHT (NULL); + +DESCRIPTION = { + "Runs Metropolis-Hastings sampling on a given image from a given starting configuration of tractlets or strands.", + "", + NULL +}; + +ARGUMENTS = { + + Argument ("start_fibres", "The starting point of the scan.").type_file (), + + Argument ("end_fibres", "The ending point of the scan.").optional().type_file (), + + Argument ("second_end_fibres", "The ending point of the scan.").optional().type_file (), + + Argument ("third_end_fibres", "The ending point of the scan.").optional().type_file (), + + Argument ("output", "The output file containing the function scan. Will be either a text file if it is a linear scan or an image file if it is multi-dimension scan.").optional().type_file (), + + Argument() +}; + + +OPTIONS = { + + + Option ("num_steps", "Number of taken along axis.") + + Argument ("num_steps", "").type_integer (1, NUM_STEPS_DEFAULT, LARGE_INT), + + + Option ("num_steps2", "Number of taken along second axis.") + + Argument ("num_steps", "").type_integer (1, NUM_STEPS_DEFAULT, LARGE_INT), + + + Option ("num_steps3", "Number of taken along third axis.") + + Argument ("num_steps", "").type_integer (1, NUM_STEPS_DEFAULT, LARGE_INT), + + + Option ("centred", "For 1D case (multi-D cases are automatically centred) first set is interpreted as origin of image second set is interpreted as a perturbation axes."), + + + Option ("axis1_scale", "Scale applied to axis1, used to quickly scale binary masks.") + + Argument ("axis1_scale", "").type_float (SMALL_FLOAT, AXIS_SCALE_DEFAULT, LARGE_FLOAT), + + + Option ("axis2_scale", "Scale applied to axis2, used to quickly scale binary masks.") + + Argument ("axis2_scale", "").type_float (SMALL_FLOAT, AXIS_SCALE_DEFAULT, LARGE_FLOAT), + + + Option ("axis3_scale", "Scale applied to axis3, used to quickly scale binary masks.") + + Argument ("axis3_scale", "").type_float (SMALL_FLOAT, AXIS_SCALE_DEFAULT, LARGE_FLOAT), + + + Option ("only_prob", "Only use the following probability (sets the rest to Prob::Uniform).") + + Argument("only_prob", "").type_text(), + + + Option ("no_prob", "Don't caculate probability, used to create a range of states."), + + Option ("save_gradient", "Save the gradient as well as the log probability for single axis scan."), + + Option ("only_first", "Use the first fibre in the input files instead of the whole set."), + + Option ("no_map", "Don't map the set to its smallest permutation before the scale."), + + DIFFUSION_PARAMETERS, + + IMAGE_PARAMETERS, + + EXPECTED_IMAGE_PARAMETERS, + + LIKELIHOOD_PARAMETERS, + + PRIOR_PARAMETERS, + + COMMON_PARAMETERS, + +// Option ("num_ref_sections", "Number of sections used to generate the reference images") +// + Argument ("num_ref_sections", "").type_integer (1, LARGE_INT, 1000), + + Option ("obs_image", "The location of the reference image that is to be set") + + Argument ("obs_image", "").type_image_in(), + +Option() }; + + + + + + +EXECUTE { + +//-----------------// +// Load Arguments // +//-----------------// + + std::string origin_location = argument[0]; + + std::string output_location, output_gradient_location, output_hessian_location; + std::string axis1_location, axis2_location, axis3_location; + + + int num_axes; + + if (argument.size() == 1) + num_axes = 0; + + else if (argument.size() == 2) { + num_axes = -1; + output_location = argument[1].c_str(); + + if (File::extension(origin_location) != File::extension(output_location)) + throw Exception ("Output location extension must match origin location extension (and must be a 'set' extension) when only two arguments are provided."); + + } else + num_axes = argument.size() - 2; + + if (num_axes > 3) + throw Exception ("Max number of axes is 3, " + str(num_axes) + " supplied."); + + if (num_axes >= 1) { + + axis1_location = argument[1].c_str(); + + output_location = argument[num_axes+1].c_str(); + output_gradient_location = File::strip_extension(output_location) + ".gradient." + File::extension(output_location); + + if (File::extension(origin_location) != File::extension(axis1_location)) + throw Exception ("Extension of axis1 location (2nd argument), '" + File::extension(axis1_location) + "', does not match extension of origin location (1st argument), '" + File::extension(origin_location) + "'."); + } + + if (num_axes >= 2) { + axis2_location = argument[2].c_str(); + + if (File::extension(origin_location) != File::extension(axis2_location)) + throw Exception ("Extension of second axis location (3rd argument), '" + File::extension(axis2_location) + "', does not match extension of origin location (1st argument), '" + File::extension(origin_location) + "'."); + } + + if (num_axes == 3) { + axis3_location = argument[3].c_str(); + + if (File::extension(origin_location) != File::extension(axis3_location)) + throw Exception ("Extension of third axis location (4th argument), '" + File::extension(axis3_location) + "', does not match extension of origin location (1st argument), '" + File::extension(origin_location) + "'."); + + } + + if ( (num_axes > 1) && !File::has_extension(output_location)) + throw Exception ("Output file must be a mrtrix image ('mif' extension) for more scans with multiple axes."); + + +//----------------------------------// +// Get and Set Optional Parameters // +//----------------------------------// + + + size_t num_steps = NUM_STEPS_DEFAULT; + size_t num_steps2; + size_t num_steps3; + bool centred = false; + double axis1_scale = AXIS_SCALE_DEFAULT; + double axis2_scale; + double axis3_scale; + std::string only_prob = ""; + bool no_prob = false; + bool save_gradient = false; + bool only_first = false; + std::string prior_b_intens_gauss_mean_type; + std::string obs_image_name; + bool no_map = false; + + + + + Options opt = get_options("num_steps"); + if (opt.size()) + num_steps = opt[0][0]; + + opt = get_options("num_steps2"); + if (opt.size()) + num_steps2 = opt[0][0]; + else + num_steps2 = num_steps; + + opt = get_options("num_steps3"); + if (opt.size()) + num_steps3 = opt[0][0]; + else + num_steps3 = num_steps; + + opt = get_options("centred"); + if (opt.size()) + centred = true; + + opt = get_options("axis1_scale"); + if (opt.size()) + axis1_scale = opt[0][0]; + + opt = get_options("axis2_scale"); + if (opt.size()) + axis2_scale = opt[0][0]; + else + axis2_scale = axis1_scale; + + opt = get_options("axis3_scale"); + if (opt.size()) + axis3_scale = opt[0][0]; + else + axis3_scale = axis1_scale; + + opt = get_options("only_prob"); + if (opt.size()) + only_prob = opt[0][0].c_str(); + + opt = get_options("no_prob"); + if (opt.size()) + no_prob = true; + + opt = get_options("save_gradient"); + if (opt.size()) + save_gradient = true; + + opt = get_options("only_first"); + if (opt.size()) + only_first = true; + + opt = get_options("no_map"); + if (opt.size()) + no_map = true; + + // Loads parameters to construct Diffusion::Model ('diff_' prefix) + SET_DIFFUSION_PARAMETERS; + + // Loads parameters to construct Image::Expected::*::Buffer that are inherited from Image::Observed::Buffer ('img_' prefix) + SET_IMAGE_PARAMETERS; + + // Loads parameters to construct Image::Expected::*::Buffer ('img_' prefix) + SET_EXPECTED_IMAGE_PARAMETERS; + + // Loads parameters to construct Prob::Likelihood ('like_' prefix) + SET_LIKELIHOOD_PARAMETERS; + + // Loads parameters to construct Prob::Prior ('prior_' prefix) + SET_PRIOR_PARAMETERS; + + // Loads parameters that are common to all commands. + SET_COMMON_PARAMETERS; + + +// size_t num_ref_sections = exp_num_length_sections; + +// opt = get_options("num_ref_sections"); +// if (opt.size()) +// num_ref_sections = opt[0][0]; + + + + if (num_axes > 1) { + + if (centred) + std::cout << "Warning: option '-centred' is not required with used with multi-dimension scans as non-centred scans are not available."; + + if (no_prob) + throw Exception ("The '-no_prob' option is meant to be used to generate a sequence of states can can't be used with multi-dimension scans."); + + } + + +//----------------------// +// Load observed image // +//----------------------// + + Image::Observed::Buffer obs_image; + + opt = get_options("obs_image"); + if (opt.size()) { + obs_image_name = opt[0][0].c_str(); + obs_image.load(obs_image_name); + + if (obs_image.properties().count("diff_response_SH")) { + + if (Math::matlab_str(diff_response_SH) != obs_image.properties()["diff_response_SH"]) + std::cout << std::endl << "Warning! Diffusion response function harmonics (" << Math::matlab_str(diff_response_SH) << ") do not match reference image (" << obs_image.properties()["diff_response_SH"] + ")!" << std::endl; + + } + + } + + + //----------------------------// + // Initialize Expected Image // + //----------------------------// + + + Diffusion::Model diffusion_model = Diffusion::Model::factory (diff_encodings, + diff_response_SH, + diff_adc, + diff_fa, + diff_isotropic); + + Image::Expected::Buffer* exp_image = Image::Expected::Buffer::factory(exp_type, + img_dims, + img_vox_lengths, + diffusion_model, + exp_num_length_sections, + exp_num_width_sections, + exp_interp_extent, + img_offsets, + exp_enforce_bounds, + exp_half_width); + + +//----------------------------------------------------------------// +// Auto-generate base intensity initial value/b_intens_gauss_mean // +//----------------------------------------------------------------// + + if ((exp_base_intensity < 0) && !no_prob && (!only_prob.size() || only_prob.substr(0,16) == "Prob::Likelihood")) + exp_base_intensity = exp_image->base_intensity_default(obs_image, origin_location); + + +//-----------------------// +// Initialize Likelihood // +//-----------------------// + + if (no_prob || (only_prob.size() && only_prob.substr(0,16) != "Prob::Likelihood")) + like_snr = 0.0; + + Prob::Likelihood* likelihood = Prob::Likelihood::factory(like_type, obs_image, exp_image, like_snr, like_b0_include, like_outside_scale, like_ref_b0, like_ref_signal); + + + +//------------------// +// Initialize Prior // +//------------------// + + if (no_prob || only_prob == "Prob::Likelihood") + prior_scale = 0.0; + + Prob::Prior prior (prior_scale, + prior_mag_scale, + prior_mag_aux_scale, + prior_hook_scale, + prior_hook_num_points, + prior_density_high_scale, + prior_density_low_scale, + prior_density_num_points, + prior_acs_scale, + prior_acs_mean, + prior_length_scale, + prior_length_mean); + +//----------------// +// Set Properties // +//----------------// + + std::map properties; + + + properties["method"] = "scan"; + properties["obs_image"] = obs_image_name; + if (num_axes != -1) + properties["origin"] = Fibre::Base::Object::load_matlab_str(origin_location); + properties["origin_location"] = origin_location; + + if (num_axes >= 1) { + properties["axis1"] = Fibre::Base::Object::load_matlab_str(axis1_location, axis1_scale); + properties["axis1_scale"] = str(axis1_scale); + properties["axis1_location"] = axis1_location; + properties["num_steps"] = str(num_steps); + } + + if (num_axes >= 2) { + properties["axis2"] = Fibre::Base::Object::load_matlab_str(axis2_location, axis2_scale); + properties["axis2_scale"] = str(axis2_scale); + properties["axis2_location"] = axis2_location; + properties["num_steps"] = str(num_steps); + } + + if (num_axes == 3) { + properties["axis3"] = Fibre::Base::Object::load_matlab_str(axis3_location, axis3_scale); + properties["axis3_scale"] = str(axis3_scale); + properties["axis3_location"] = axis3_location; + properties["num_steps"] = str(num_steps); + } + + properties["centred"] = str(centred); + properties["only_first"] = str(only_first); + + + if (no_prob) + properties["no_prob"] = str(no_prob); + + else { + + properties["only_prob"] = only_prob; + + ADD_DIFFUSION_PROPERTIES(properties); + + if (!obs_image.dim(X)) { + ADD_IMAGE_PROPERTIES(properties); + } + + ADD_EXPECTED_IMAGE_PROPERTIES(properties); + + ADD_LIKELIHOOD_PROPERTIES(properties); + + ADD_PRIOR_PROPERTIES(properties); + + ADD_COMMON_PROPERTIES(properties); + + } + + + +//----------------------------// +// Actually Perform the scans // +//----------------------------// + + + if (only_first) { + + if (File::has_extension(origin_location)) { + + Fibre::Strand::Set origin_set(origin_location); + Fibre::Strand origin(origin_set[0]); + + if (num_axes == 0) { + + Fibre::Strand prior_gradient; + prior_gradient = origin; + + double total_prior = prior.log_prob(origin, prior_gradient); + + std::cout << "Total Prior: " << total_prior << std::endl; + std::cout << "Total Prior Gradient:" << prior_gradient << std::endl << std::endl; + + std::map component_values = prior.get_component_values(origin); + + for (std::map::const_iterator comp_it = component_values.begin(); comp_it != component_values.end(); ++comp_it) + std::cout << "Prior " << comp_it->first << ": " << comp_it->second << std::endl; + + std::cout << std::endl; + + + + } else if (num_axes == 1) { + + Fibre::Strand::Set axis1_set(axis1_location); + Fibre::Strand axis1(axis1_set[0]); + + //Convert the 'start' and 'finish' sets into an origin and perturbation around this origin. + if (!centred) { + + Fibre::Strand::Set start_set(origin_location), end_set(axis1_location); + Fibre::Strand start(start_set[0]), end(end_set[0]); + + if (!no_map) + end = end.smallest_distance_set(start); + + axis1 = (end - start) / 2.0; + origin = start + axis1; + } + + axis1 *= axis1_scale; + + Analysis::scan(*likelihood, prior, origin, axis1, num_steps, output_location, properties, save_gradient); + + + } else if (num_axes == 2) { + + Fibre::Strand::Set axis1_set(axis1_location), axis2_set(axis2_location); + Fibre::Strand axis1(axis1_set[0]), axis2(axis2_set[0]); + + axis1 *= axis1_scale; + axis2 *= axis2_scale; + + + Analysis::scan(*likelihood, prior, origin, axis1, axis2, num_steps, num_steps2, output_location, properties); + + + } else if (num_axes == 3) { + + + Fibre::Strand::Set axis1_set(axis1_location), axis2_set(axis2_location), axis3_set(axis3_location); + Fibre::Strand axis1(axis1_set[0]),axis2(axis2_set[0]), axis3(axis3_set[0]); + + axis1 *= axis1_scale; + axis2 *= axis2_scale; + axis3 *= axis3_scale; + + Analysis::scan(*likelihood, prior, origin, axis1, axis2, axis3, num_steps, num_steps2, num_steps3, output_location, properties); + + + + } else if (num_axes == -1) + throw Exception ("Can't do pre-generated set (implied by 2 input arguments) for individual set."); + + + } else if (File::has_extension(origin_location)) { + + Fibre::Tractlet::Set origin_set(origin_location); + + Fibre::Tractlet origin(origin_set[0]); + + if (num_axes == 0) { + + + Fibre::Tractlet prior_gradient(origin); + + double total_prior = prior.log_prob(origin, prior_gradient); + + + std::cout << "Total Prior: " << total_prior << std::endl; + std::cout << "Total Prior Gradient:" << prior_gradient << std::endl << std::endl; + + std::map component_values = prior.get_component_values(origin); + + for (std::map::const_iterator comp_it = component_values.begin(); comp_it != component_values.end(); ++comp_it) + std::cout << "Prior " << comp_it->first << ": " << comp_it->second << std::endl; + + std::cout << std::endl; + + + + } else if (num_axes == 1) { + + Fibre::Tractlet::Set axis1_set(axis1_location); + Fibre::Tractlet axis1(axis1_set[0]); + + //Convert the 'start' and 'finish' sets into an origin and perturbation around this origin. + if (!centred) { + + Fibre::Tractlet::Set start_set(origin_location), end_set(axis1_location); + Fibre::Tractlet start(start_set[0]), end(end_set[0]); + + if (!no_map) + end = end.smallest_distance_set(start); + + axis1 = (end - start) / 2.0; + origin = start + axis1; + } + + axis1 *= axis1_scale; + + Analysis::scan(*likelihood, prior, origin, axis1, num_steps, output_location, properties, save_gradient); + + + } else if (num_axes == 2) { + + Fibre::Tractlet::Set axis1_set(axis1_location), axis2_set(axis2_location); + Fibre::Tractlet axis1(axis1_set[0]), axis2(axis2_set[0]); + + axis1 *= axis1_scale; + axis2 *= axis2_scale; + + Analysis::scan(*likelihood, prior, origin, axis1, axis2, num_steps, num_steps2, output_location, properties); + + + } else if (num_axes == 3) { + + + Fibre::Tractlet::Set axis1_set(axis1_location), axis2_set(axis2_location), axis3_set(axis3_location); + Fibre::Tractlet axis1(axis1_set[0]), axis2(axis2_set[0]), axis3(axis3_set[0]); + + axis1 *= axis1_scale; + axis2 *= axis2_scale; + axis3 *= axis3_scale; + + Analysis::scan(*likelihood, prior, origin, axis1, axis2, axis3, num_steps, num_steps2, num_steps3, output_location, properties); + + + + } else if (num_axes == -1) + throw Exception ("Can't do pre-generated set (implied by 2 input arguments) for individual set."); + + } else + throw Exception ("Unrecognised extension '" + File::extension(origin_location)); + + + +//******************************************** +// End only first +//********************************************* + + + + } else { + + if (File::has_extension(origin_location)) { + + Fibre::Strand::Set origin(origin_location); + + if (num_axes == 0) { + + + Fibre::Strand::Set prior_gradient(origin), likelihood_gradient(origin), gradient(origin); + Fibre::Strand::Set::Tensor likelihood_fisher(origin); //, prior_hessian(origin); + std::vector< MR::Math::Matrix > likelihood_fisher_gradient; + + double total_prior; + double likelihood_px; + + if (save_gradient) { + total_prior = prior.log_prob(origin, prior_gradient);//, prior_hessian); + likelihood_px = likelihood->log_prob_and_fisher(origin, likelihood_gradient, likelihood_fisher); + + gradient = prior_gradient; + gradient += likelihood_gradient; + + gradient.save(File::strip_extension(origin_location) + ".gradient." + File::extension(origin_location)); + prior_gradient.save(File::strip_extension(origin_location) + ".prior_gradient." + File::extension(origin_location)); + likelihood_gradient.save(File::strip_extension(origin_location) + ".likelihood_gradient." + File::extension(origin_location)); + likelihood_fisher.save(File::strip_extension(origin_location) + ".likelihood_hessian." + File::extension(origin_location) + ".tnr"); + + } else { + total_prior = prior.log_prob(origin);//, prior_hessian); + likelihood_px = likelihood->log_prob(origin); + } + + std::cout << "Total Prior: " << total_prior << std::endl; + std::cout << "Likelihood: " << likelihood_px << std::endl; + + std::map component_values = prior.get_component_values(origin); + + for (std::map::const_iterator comp_it = component_values.begin(); comp_it != component_values.end(); ++comp_it) + std::cout << "Prior " << comp_it->first << ": " << comp_it->second << std::endl; + + std::cout << std::endl; + + + std::cout << "Total Prior Gradient:" << prior_gradient << std::endl << std::endl; + + } else if (num_axes == 1) { + + + Fibre::Strand::Set axis1(axis1_location); + + //Convert the 'start' and 'finish' sets into an origin and perturbation around this origin. + if (!centred) { + + Fibre::Strand::Set start(origin_location), end(axis1_location); + + if (!no_map) + end = end.smallest_distance_set(start); + + axis1 = (end - start) / 2.0; + + origin = start + axis1; + } + + axis1 *= axis1_scale; + + Analysis::scan(*likelihood, prior, origin, axis1, num_steps, output_location, properties, save_gradient); + + + } else if (num_axes == 2) { + + Fibre::Strand::Set axis1(axis1_location), axis2(axis2_location); + + axis1 *= axis1_scale; + axis2 *= axis2_scale; + + Analysis::scan(*likelihood, prior, origin, axis1, axis2, num_steps, num_steps2, output_location, properties); + + } else if (num_axes == 3) { + + Fibre::Strand::Set axis1(axis1_location), axis2(axis2_location), axis3(axis3_location); + + axis1 *= axis1_scale; + axis2 *= axis2_scale; + axis3 *= axis3_scale; + + Analysis::scan(*likelihood, prior, origin, axis1, axis2, axis3, num_steps, num_steps2, num_steps3, output_location, properties); + + + } else if (num_axes == -1) + throw Exception ("Can't do pre-generated set (implied by 2 input arguments) for individual set."); + + + } else if (File::has_extension(origin_location)) { + + Fibre::Tractlet::Set origin(origin_location); + + if (num_axes == 0) { + + + Fibre::Tractlet::Set prior_gradient(origin), likelihood_gradient(origin), gradient(origin); + Fibre::Tractlet::Set::Tensor likelihood_fisher(origin); //prior_hessian(origin); + + double total_prior; + double likelihood_px; + + if (save_gradient) { + total_prior = prior.log_prob(origin, prior_gradient);//, prior_hessian); + likelihood_px = likelihood->log_prob_and_fisher(origin, likelihood_gradient, likelihood_fisher); + + gradient = prior_gradient; + gradient += likelihood_gradient; + + gradient.save(File::strip_extension(origin_location) + ".gradient." + File::extension(origin_location)); + prior_gradient.save(File::strip_extension(origin_location) + ".prior_gradient." + File::extension(origin_location)); + likelihood_gradient.save(File::strip_extension(origin_location) + ".likelihood_gradient." + File::extension(origin_location)); + likelihood_fisher.save(File::strip_extension(origin_location) + ".likelihood_hessian." + File::extension(origin_location) + ".tnr"); + + } else { + total_prior = prior.log_prob(origin);//, prior_hessian); + likelihood_px = likelihood->log_prob(origin); + } + + std::cout << "Total Prior: " << total_prior << std::endl; + std::cout << "Likelihood: " << likelihood_px << std::endl; + + std::map component_values = prior.get_component_values(origin); + + for (std::map::const_iterator comp_it = component_values.begin(); comp_it != component_values.end(); ++comp_it) + std::cout << "Prior " << comp_it->first << ": " << comp_it->second << std::endl; + + std::cout << std::endl; + + } else if (num_axes == 1) { + + Fibre::Tractlet::Set axis1(axis1_location); + + //Convert the 'start' and 'finish' sets into an origin and perturbation around this origin. + if (!centred) { + + Fibre::Tractlet::Set start(origin_location), end(axis1_location); + + if (!no_map) + end = end.smallest_distance_set(start); + + axis1 = (end - start) / 2.0; + origin = start + axis1; + } + + axis1 *= axis1_scale; + + Analysis::scan(*likelihood, prior, origin, axis1, num_steps, output_location, properties, save_gradient); + + + } else if (num_axes == 2) { + + Fibre::Tractlet::Set axis1(axis1_location), axis2(axis2_location); + + axis1 *= axis1_scale; + axis2 *= axis2_scale; + + Analysis::scan(*likelihood, prior, origin, axis1, axis2, num_steps, num_steps2, output_location, properties); + + } else if (num_axes == 3) { + + Fibre::Tractlet::Set axis1(axis1_location), axis2(axis2_location), axis3(axis3_location); + + axis1 *= axis1_scale; + axis2 *= axis2_scale; + axis3 *= axis3_scale; + + Analysis::scan(*likelihood, prior, origin, axis1, axis2, axis3, num_steps, num_steps2, num_steps3, output_location, properties); + + } else if (num_axes == -1) + throw Exception ("Can't do pre-generated set (implied by 2 input arguments) for individual set."); + + } else if (File::has_extension(origin_location)) { + + //Special case where the origin is actually a precalculated set of fibres + if (num_axes != -1) + throw Exception ("Set origin only allowed when exactly two arguments are provided."); + + +// Fibre::Strand::Set true_strands ("/home/tclose/data/fibre/strand/single/z.str"); + + std::vector writer_header; + writer_header.push_back("px"); + + Fibre::Strand::Set::Reader reader(origin_location); + Fibre::Strand::Set::Writer writer(output_location, reader, writer_header); + + Fibre::Strand::Set strands; + + MR::ProgressBar progress_bar ("Scanning through strand sets...", to(reader.get_extend_props()["count"])); + + while (reader.next(strands)) { + + strands.set_extend_prop("px", str(likelihood->log_prob(strands) + prior.log_prob(strands))); + writer.append(strands); + ++progress_bar; + } + + } else if (File::has_extension(origin_location)) { + + //Special case where the origin is actually a precalculated set of fibres + if (num_axes != -1) + throw Exception ("Set origin only allowed when exactly two arguments are provided."); + + std::vector writer_header; + writer_header.push_back("px"); + + Fibre::Tractlet::Set::Reader reader(origin_location); + Fibre::Tractlet::Set::Writer writer(output_location, reader, writer_header); + + Fibre::Tractlet::Set tractlets; + + MR::ProgressBar progress_bar ("Scanning through tractlet sets...", to(reader.get_extend_props()["count"])); + + while (reader.next(tractlets)) { + + tractlets.set_extend_prop("px", str(likelihood->log_prob(tractlets) + prior.log_prob(tractlets))); + writer.append(tractlets); + + ++progress_bar; + } + + + } else + throw Exception ("Unrecognised extension '" + File::extension(origin_location)); + + + } + + delete likelihood; + delete exp_image; + + +} + diff --git a/cmd/select_fibres.cpp b/cmd/select_fibres.cpp new file mode 100644 index 0000000..ac9da17 --- /dev/null +++ b/cmd/select_fibres.cpp @@ -0,0 +1,679 @@ +/* + Copyright 2009 Brain Research Institute, Melbourne, Australia + + Written by Thomas G. Close, 04/03/2009. + + This file is part of Bayesian Tractlet Sampling (BTS). + + BTS is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + BTS is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with BTS. If not, see . + + */ + +#include "bts/cmd.h" +#include "point.h" +#include "progressbar.h" + +#include "bts/common.h" +#include "bts/file.h" + +#include "bts/fibre/strand/set.h" +#include "bts/fibre/track/set.h" +#include "bts/fibre/tractlet/set.h" +#include "bts/fibre/properties/extended.h" + +#include "bts/fibre/base/writer.h" + + + +#include "bts/image/expected/buffer.h" + + +#include "bts/inline_functions.h" + + +#define ONE_TO_ONE(From,To) \ + (File::has_or_txt_extension(output_location)) { \ + one_to_one(input, input_location, output_location, include, degree, num_length_sections, num_tractlets, width_of_tractlet, strands_per_acs, num_width_sections); \ + } \ + +#define ONE_TO_SET(From,To) \ + (File::has_extension(output_location)) { \ + Fibre::To::Set::Writer writer(output_location, input); \ + one_to_set(input, input_location, output_location, writer, include, degree, num_length_sections, num_tractlets, width_of_tractlet, strands_per_acs, num_width_sections, separate_sets); \ + } + +#define ONE_TO_TXT_SET(From,To) \ + (File::has_txt_extension(output_location)) { \ + Fibre::Base::SetTextWriter writer(output_location, input); \ + one_to_set >(input, input_location, output_location, writer, include, degree, num_length_sections, num_tractlets, width_of_tractlet, strands_per_acs, num_width_sections, separate_sets); \ + } + +#define SET_TO_SET(From,To) \ + (File::has_extension(output_location)) { \ + add_extra_element_properties(elem_header); \ + Fibre::To::Set::Writer writer(output_location, reader, reader.extend_prop_keys(), elem_header, reader.get_extend_props()); \ + set_to_set(input_location, output_location, reader, writer, include, degree, num_length_sections, num_tractlets, width_of_tractlet, strands_per_acs, num_width_sections); \ + } + +#define SET_TO_ONE(From,To) \ + (File::has_or_txt_extension(output_location)) { \ + set_to_one(input_location, output_location, reader, include, degree, num_length_sections, num_tractlets, width_of_tractlet, strands_per_acs, num_width_sections); \ + } \ + +#define SET_TO_TXT_SET(From,To) \ + (File::has_txt_extension(output_location)) { \ + add_extra_element_properties(elem_header); \ + Fibre::Base::SetTextWriter writer(output_location, reader, reader.extend_prop_keys(), elem_header, reader.get_extend_props()); \ + set_to_set >(input_location, output_location, reader, writer, include, degree, num_length_sections, num_tractlets, width_of_tractlet, strands_per_acs, num_width_sections); \ + } + +#define TXT_SET_TO_ONE(From,To) \ + (File::has_or_txt_extension(output_location)) { \ + set_to_one >(input_location, output_location, reader, include, degree, num_length_sections, num_tractlets, width_of_tractlet, strands_per_acs, num_width_sections); \ + } + +#define TXT_SET_TO_SET(From,To) \ + (File::has_extension(output_location)) { \ + add_extra_element_properties(elem_header); \ + Fibre::To::Set::Writer writer(output_location, reader, reader.extend_prop_keys(), elem_header, reader.get_extend_props()); \ + set_to_set , Fibre::To::Set::Writer>(input_location, output_location, reader, writer, include, degree, num_length_sections, num_tractlets, width_of_tractlet, strands_per_acs, num_width_sections); \ + } + +#define TXT_SET_TO_TXT_SET(From,To) \ + (File::has_txt_extension(output_location)) { \ + add_extra_element_properties(elem_header); \ + Fibre::Base::SetTextWriter writer(output_location, reader, reader.extend_prop_keys(), elem_header, reader.get_extend_props()); \ + set_to_set , Fibre::Base::SetTextWriter >(input_location, output_location, reader, writer, include, degree, num_length_sections, num_tractlets, width_of_tractlet, strands_per_acs, num_width_sections); \ + } + +#define ONE_CONVERSIONS(From) \ + (File::has_or_txt_extension(input_location)) { \ + Fibre::From::Set input(input_location); \ +\ + if \ + ONE_TO_ONE(From,Strand) \ + else if \ + ONE_TO_ONE(From,Tractlet) \ + else if \ + ONE_TO_ONE(From,Track) \ + else if \ + ONE_TO_SET(From,Strand) \ + else if \ + ONE_TO_SET(From,Tractlet) \ + else if \ + ONE_TO_SET(From,Track) \ + else if \ + ONE_TO_TXT_SET(From,Strand) \ + else if \ + ONE_TO_TXT_SET(From,Tractlet) \ + else if \ + ONE_TO_TXT_SET(From,Track) \ + else \ + throw Exception ("Unsupported conversion from '" + File::extension(input_location) + "' to '" + File::extension(output_location) + "'."); \ + } + +#define SET_CONVERSIONS(From) \ + (File::has_extension(input_location)) { \ + Fibre::From::Set::Reader reader(input_location); \ + std::vector elem_header = reader.extend_elem_prop_keys(); \ +\ + if \ + SET_TO_ONE(From,Strand) \ + else if \ + SET_TO_ONE(From,Tractlet) \ + else if \ + SET_TO_ONE(From,Track) \ + else if \ + SET_TO_SET(From,Strand) \ + else if \ + SET_TO_SET(From,Tractlet) \ + else if \ + SET_TO_SET(From,Track) \ + else if \ + SET_TO_TXT_SET(From,Strand) \ + else if \ + SET_TO_TXT_SET(From,Tractlet) \ + else if \ + SET_TO_TXT_SET(From,Track) \ + else \ + throw Exception ("Unsupported conversion from '" + File::extension(input_location) + "' to '" + File::extension(output_location) + "'."); \ + } + +#define TXT_SET_CONVERSIONS(From) \ + (File::has_txt_extension(input_location)) { \ + Fibre::Base::SetTextReader reader(input_location); \ + std::vector elem_header = reader.extend_elem_prop_keys(); \ +\ + if \ + TXT_SET_TO_ONE(From,Strand) \ + else if \ + TXT_SET_TO_ONE(From,Tractlet) \ + else if \ + TXT_SET_TO_ONE(From,Track) \ + else if \ + TXT_SET_TO_SET(From,Strand) \ + else if \ + TXT_SET_TO_SET(From,Tractlet) \ + else if \ + TXT_SET_TO_SET(From,Track) \ + else if \ + TXT_SET_TO_TXT_SET(From,Strand) \ + else if \ + TXT_SET_TO_TXT_SET(From,Tractlet) \ + else if \ + TXT_SET_TO_TXT_SET(From,Track) \ + else \ + throw Exception ("Unsupported conversion from '" + File::extension(input_location) + "' to '" + File::extension(output_location) + "'."); \ + } + +using namespace BTS; + + +SET_VERSION_DEFAULT; +SET_AUTHOR ("Thomas G. Close"); +SET_COPYRIGHT (NULL); + +DESCRIPTION = { + "Select a subset of strands", + "", + NULL +}; + +ARGUMENTS = { + Argument ("input", "The strands to be selected from.").type_file (), + Argument ("output", "The selected strands.").type_file (), + Argument() +}; + + +OPTIONS = { + + Option ("include","The indices of the strands to include") + + Argument ("include","").type_text(), + + Option ("bundle_include","The indices of the strands to bundle_include") + + Argument ("bundle_include","").type_text(), + + Option ("num_length_sections", "Number of samples to take along the strand path") + + Argument ("num_length_sections", "").type_integer (1, 100, 2000), + + Option ("degree", "The degree of the Strand coefficients used to describe the strands") + + Argument ("degree", "").type_integer (1, Fibre::Strand::DEFAULT_DEGREE, LARGE_INT), + + Option ("num_tractlets", "Used when converting between strands and tractlets when the strands are to first clustered into bundles then converted tractlets.") + + Argument ("num_tractlets", "").type_integer (0, -1.0, LARGE_INT), + + Option ("width_of_tractlet","Used when converting between strands and tractlets when the strands are to represent the backbone of the converted tractlets.") + + Argument ("","").type_float (-1, -1, LARGE_FLOAT), + + Option ("strands_per_acs","Basewidth of the imported tractlets.") + + Argument ("","").type_float (-1, Fibre::Tractlet::STRANDS_PER_AREA_DEFAULT, LARGE_FLOAT), + + Option ("num_width_sections","Number of samples across the tractlet radius.") + + Argument ("num_width_sections","").type_integer (0, Image::Expected::Buffer::NUM_WIDTH_SECTIONS_DEFAULT, LARGE_INT), + + Option ("separate_sets","Separate selected strands into separate sets."), + + + + +Option() }; + +//FIXME: Move this into file.h once all the dependencies have been sorted out. + + std::string class_name(const std::string& location) { + + std::string name; + + if (File::has_or_txt_extension(location)) + name = "tractlet"; + else if (File::has_or_txt_extension(location)) + name = "strand"; + else if (File::has_or_txt_extension(location)) + name = "track"; + else if (File::has_or_txt_extension(location)) + name = "tractlet set"; + else if (File::has_or_txt_extension(location)) + name = "strand set"; + else if (File::has_or_txt_extension(location)) + name = "track set"; + else + throw Exception ("Unknown extension of file '" + location + "'."); + + return name; + + } + + +template OutputType& convert(const InputType& input, OutputType& output, size_t degree, size_t num_length_sections, size_t num_tractlets, double width_of_tractlet, double strands_per_acs, size_t num_width_sections); + + +template void add_extra_element_properties(std::vector& elem_header); + + +template <> Fibre::Strand::Set& convert(const Fibre::Track::Set& input, Fibre::Strand::Set& output, size_t degree, size_t num_length_sections, size_t num_tractlets, double width_of_tractlet, double strands_per_acs, size_t num_width_sections) { + + return output = input.to_strands(degree); + +} + +template <> Fibre::Track::Set& convert(const Fibre::Strand::Set& input, Fibre::Track::Set& output, size_t degree, size_t num_length_sections, size_t num_tractlets, double width_of_tractlet, double strands_per_acs, size_t num_width_sections) { + + return output = input.to_tracks(num_length_sections); + +} + +template <> Fibre::Tractlet::Set& convert(const Fibre::Strand::Set& input, Fibre::Tractlet::Set& output, size_t degree, size_t num_length_sections, size_t num_tractlets, double width_of_tractlet, double strands_per_acs, size_t num_width_sections) { + + if (num_tractlets) + output = input.to_tractlets(num_tractlets); + //Requires bundle index property to be present in strand set. + else if (width_of_tractlet > 0) + output = input.to_tractlets(width_of_tractlet); + //Each strand is treated as the primary strand of a tractlet with base width 'width_of_tractlet'. + else + output = input.to_tractlets(); + + + return output; + +} + +template <> Fibre::Strand::Set& convert(const Fibre::Tractlet::Set& input, Fibre::Strand::Set& output, size_t degree, size_t num_length_sections, size_t num_tractlets, double width_of_tractlet, double strands_per_acs, size_t num_width_sections) { + + if (strands_per_acs > 0) + output = input.to_strands(strands_per_acs); + else if (num_width_sections > 0) + output = input.to_strands(num_width_sections); + else + throw Exception ("either strands_per_acs or num_width_sections needs to be set."); + + return output; + +} + +template <> Fibre::Track::Set& convert(const Fibre::Tractlet::Set& input, Fibre::Track::Set& output, size_t degree, size_t num_length_sections, size_t num_tractlets, double width_of_tractlet, double strands_per_acs, size_t num_width_sections) { + + Fibre::Strand::Set strands; + + if (strands_per_acs > 0) + strands = input.to_strands(strands_per_acs); + else if (num_width_sections > 0) + strands = input.to_strands(num_width_sections); + else + throw Exception ("either strands_per_acs or num_width_sections needs to be set."); + + return output = strands.to_tracks(num_length_sections); + +} + +template <> Fibre::Tractlet::Set& convert(const Fibre::Track::Set& input, Fibre::Tractlet::Set& output, size_t degree, size_t num_length_sections, size_t num_tractlets, double width_of_tractlet, double strands_per_acs, size_t num_width_sections) { + + + if (num_tractlets) + output = input.to_tractlets(degree,num_tractlets); + //Requires bundle index property to be present in strand set. + else if (width_of_tractlet > 0) + output = input.to_tractlets(degree, width_of_tractlet); + //Each strand is treated as the primary strand of a tractlet with base width 'width_of_tractlet'. + else + output = input.to_tractlets(degree); + + return output; + +} + +template OutputType& convert(const InputType& input, OutputType& output, size_t degree, size_t num_length_sections, size_t num_tractlets, double width_of_tractlet, double strands_per_acs, size_t num_width_sections) { + + return output = OutputType(input); + +} + + + +template <> void add_extra_element_properties(std::vector& header) { + + if (std::find(header.begin(), header.end(), Fibre::Track::BUNDLE_INDEX_EPROP) == header.end()) + header.push_back(Fibre::Track::BUNDLE_INDEX_EPROP); + + std::vector::iterator prop_it = std::find(header.begin(), header.end(), str("tract_volume")); + + if (prop_it != header.end()) + header.erase(prop_it); + +} + + +template <> void add_extra_element_properties(std::vector& header) { + + if (std::find(header.begin(), header.end(), Fibre::Track::BUNDLE_INDEX_EPROP) == header.end()) + header.push_back(Fibre::Track::BUNDLE_INDEX_EPROP); + + std::vector::iterator prop_it = std::find(header.begin(), header.end(), str("tract_volume")); + + if (prop_it != header.end()) + header.erase(prop_it); + + + +} + +template void add_extra_element_properties(std::vector& elem_header) { /* do nothing */ } + + + +template + void one_to_one( + const typename InputType::Set& input, + const std::string& input_location, + const std::string& output_location, + std::vector& include, + size_t degree, + size_t num_length_sections, + size_t num_tractlets, + double width_of_tractlet, + double strands_per_acs, + size_t num_width_sections) { + + typename InputType::Set selected; + typename OutputType::Set output(input.get_extend_props()); + + if (include.size()) + input.select(selected, include); + else + selected = input; + + MR::ProgressBar progress_bar("Selecting from " + class_name(input_location) + " set and outputting to " + class_name(output_location) + " set..."); + + convert(selected, output, degree, num_length_sections, num_tractlets, width_of_tractlet, strands_per_acs, num_width_sections); + + output.save(output_location); + +} + +template + void set_to_set( const std::string& input_location, + const std::string& output_location, + ReaderType& reader, + WriterType& writer, + std::vector& include, + size_t degree, + size_t num_length_sections, + size_t num_tractlets, + double width_of_tractlet, + double strands_per_acs, + size_t num_width_sections) { + + InputType input_set; + + size_t index = 0; + + size_t num_included_sets; + + if (include.size()) + num_included_sets = include.size(); + else + num_included_sets = to(reader.get_extend_props()["count"]); + + MR::ProgressBar progress_bar("Selecting from set of " + class_name(input_location) + "s and outputting to set of " + class_name(output_location) + "s...", num_included_sets); + + while (reader.next(input_set)) { + + if (!include.size() || std::find(include.begin(), include.end(), index) != include.end()) { + + OutputType output_set; + + convert(input_set, output_set, degree, num_length_sections, num_tractlets, width_of_tractlet, strands_per_acs, num_width_sections); + + writer.append(output_set); + + progress_bar++; + } + + ++index; + } + +} + +template + void set_to_one( const std::string& input_location, + const std::string& output_location, + ReaderType& reader, + std::vector& include, + size_t degree, + size_t num_length_sections, + size_t num_tractlets, + double width_of_tractlet, + double strands_per_acs, + size_t num_width_sections) { + + InputType input_set; + + + if (!reader.next(input_set)) + throw Exception ("No sets found in file '" + input_location + "'."); + + reader.rewind(); + + std::map props = input_set.get_extend_props(); + + props["base_intensity"] = "1.0"; + + std::vector header; + + //Add extra element properties that might be generated in the conversion process. + add_extra_element_properties< typename InputType::Element, OutputType>(header); + + + Fibre::Base::Writer writer (output_location, Fibre::Base::Object::select_props(reader.elem_prop_keys()), header); + + size_t index = 0; + + size_t num_included_sets; + + if (include.size()) + num_included_sets = include.size(); + else + num_included_sets = to(reader.get_extend_props()["count"]); + + MR::ProgressBar progress_bar("Selecting from set of " + class_name(input_location) + "s and outputting to " + class_name(output_location) + " set...", num_included_sets); + + while (reader.next(input_set)) { + + if (!include.size() || std::find(include.begin(), include.end(), index) != include.end()) { + + typename OutputType::Set output_set; + + convert(input_set, output_set, degree, num_length_sections, num_tractlets, width_of_tractlet, strands_per_acs, num_width_sections); + + for (size_t fibre_i = 0; fibre_i < output_set.size(); ++fibre_i) + writer.append(output_set[fibre_i], output_set.get_extend_elem_prop_row(fibre_i)); + + progress_bar++; + } + + ++index; + } + +} + +template + void one_to_set( const typename InputType::Set& input, + const std::string& input_location, + const std::string& output_location, + WriterType& writer, + std::vector& include, + size_t degree, + size_t num_length_sections, + size_t num_tractlets, + double width_of_tractlet, + double strands_per_acs, + size_t num_width_sections, + bool separate_sets) { + + typename InputType::Set selected; + OutputType converted; + + if (include.size()) + input.select(selected, include); + else + selected = input; + + convert(selected, converted, degree, num_length_sections, num_tractlets, width_of_tractlet, strands_per_acs, num_width_sections); + + if (separate_sets) { + + MR::ProgressBar progress_bar("Selecting from " + class_name(input_location) + " set and outputting into set of " + class_name(output_location) + "s, with one fibre per set...",selected.size()); + + for (size_t elem_i = 0; elem_i < converted.size(); ++elem_i) { + + OutputType output_set; + + output_set.push_back(converted[elem_i]); + + writer.append(output_set); + + ++progress_bar; + + } + + } else { + + MR::ProgressBar progress_bar("Selecting from " + class_name(input_location) + " set and outputting into a singleton set of " + class_name(output_location) + "s..."); + + writer.append(converted); + + } +} + + +EXECUTE { + + std::string input_location = argument[0]; + std::string output_location = argument[1]; + + std::vector include; + std::vector bundle_include; + size_t degree = Fibre::Strand::DEFAULT_DEGREE; + size_t num_length_sections = Fibre::Track::NUM_LENGTH_SECTIONS_DEFAULT; + size_t num_tractlets = 0; + double width_of_tractlet = -1; + double strands_per_acs = Fibre::Tractlet::STRANDS_PER_AREA_DEFAULT; + size_t num_width_sections = 0; //Image::Expected::Buffer::NUM_WIDTH_SECTIONS_DEFAULT; + bool separate_sets = false; + + Options opt = get_options("include"); + if (opt.size()) + include = parse_sequence (opt[0][0]); + + opt = get_options("bundle_include"); + if (opt.size()) + bundle_include = parse_sequence (opt[0][0]); + + opt = get_options("num_length_sections"); + if (opt.size()) + num_length_sections = opt[0][0]; + + opt = get_options("degree"); + if (opt.size()) + degree = opt[0][0]; + + opt = get_options("num_tractlets"); + if (opt.size()) + num_tractlets = opt[0][0]; + + opt = get_options("width_of_tractlet"); + if (opt.size()) + width_of_tractlet = opt[0][0]; + + opt = get_options("num_width_sections"); + if (opt.size()) { + num_width_sections = opt[0][0]; + strands_per_acs = -1.0; + } + + opt = get_options("strands_per_acs"); + if (opt.size()) + strands_per_acs = opt[0][0]; + + opt = get_options("separate_sets"); + if (opt.size()) + separate_sets = true; + + + if (include.size() && bundle_include.size()) + throw Exception ("'-include' and '-bundle_include' cannot be used simultaneously."); + + //If bundle_include option provided get bundle_index property and map to individual fibres. + if (bundle_include.size()) { + if (File::has_or_txt_extension(input_location) || File::has_or_txt_extension(input_location)) { + + //Although the input could also be a Track set, they can be loaded temporarily as strands first. + Fibre::Strand::Set strands (input_location,(size_t)1); + + if (!strands.has_extend_elem_prop(Fibre::Track::BUNDLE_INDEX_EPROP)) + throw Exception ("'" + Fibre::Track::BUNDLE_INDEX_EPROP + "' was not found in input strand set."); + + for (size_t strand_i = 0; strand_i < strands.size(); ++strand_i) { + + size_t bundle_index = to(strands.get_extend_elem_prop(Fibre::Track::BUNDLE_INDEX_EPROP, strand_i)); + + if (std::find(bundle_include.begin(), bundle_include.end(), bundle_index) != bundle_include.end()) + include.push_back(strand_i); + + } + + } + + } + + if ((strands_per_acs > 0) && num_width_sections) + throw Exception ("'-num_width_sections' and '-strands_per_acs' option cannot be used in conjunction."); + + else if ((strands_per_acs <= 0.0) && !num_width_sections && (File::has_txt_or_set_extension(input_location) && (File::has_txt_or_set_extension(output_location) || File::has_txt_or_set_extension(output_location)))) + throw Exception ("Either '-num_width_sections' and '-strands_per_acs' must be supplied for conversion from tractlet to strand/track classes."); + + + + MR::ProgressBar progress_bar ("Selecting fibres ..."); + + if + ONE_CONVERSIONS(Strand) + else if + ONE_CONVERSIONS(Tractlet) + else if + ONE_CONVERSIONS(Track) + else if + SET_CONVERSIONS(Strand) + else if + SET_CONVERSIONS(Tractlet) + else if + SET_CONVERSIONS(Track) + else if + TXT_SET_CONVERSIONS(Strand) + else if + TXT_SET_CONVERSIONS(Tractlet) + else if + TXT_SET_CONVERSIONS(Track) + else + throw Exception ("Unsupported input file '" + File::extension(input_location) + "'."); + + } + + + + + + + diff --git a/cmd/select_image.cpp b/cmd/select_image.cpp new file mode 100644 index 0000000..a5607eb --- /dev/null +++ b/cmd/select_image.cpp @@ -0,0 +1,125 @@ +/* + Copyright 2009 Brain Research Institute, Melbourne, Australia + + Created by Tom Close on 13/03/09. + + This file is part of Bayesian Tractlet Sampling (BTS). + + BTS is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + BTS is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with BTS. If not, see . + + */ + + +extern "C" { +#include +#include +} + + +#include "bts/cmd.h" +#include "progressbar.h" + +#include "bts/common.h" +#include "bts/image/expected/buffer.h" +#include "bts/image/observed/buffer.h" + +#include "bts/image/noise.h" +#include "bts/image/noise/gaussian.h" + + + +#include "bts/inline_functions.h" + +using namespace BTS; + +SET_VERSION_DEFAULT; +SET_AUTHOR ("Thomas G. Close"); +SET_COPYRIGHT (NULL); + +DESCRIPTION = { + "Selects a rectangular region of interest from a larger image.", + "", + NULL +}; + +ARGUMENTS = { + Argument ("initial", "The initial image the second image will be subtracted from.").type_file(), + + Argument ("output_image", "The resulting image").type_file (), + + Argument() +}; + + +OPTIONS = { + + Option ("dims", "The number of voxels along each dimension") + + Argument ("dims", "").type_text ("[3,3,3]"), + + Option ("offsets", "The offset of the centre of the image from the origin (0,0,0).") + + Argument ("offsets", "").type_text ("auto"), + + +Option() + +}; + + + +EXECUTE { + + + Triple dims (3,3,3); + Triple offsets (0,0,0); + + Options opt = get_options("dims"); + if (opt.size()) + dims = parse_triple(std::string(opt[0][0])); + + opt = get_options("offsets"); + if (opt.size()) + offsets = parse_triple(std::string(opt[0][0])); + + + std::string input_location = argument[0]; + std::string output_location = argument[1]; + + Image::Observed::Buffer in(input_location); + + + Triple spatial_offset = in.vox_lengths() * offsets + in.offsets(); + + Image::Observed::Buffer out(dims, in.vox_lengths(), spatial_offset, in.get_encodings()); + + + for (size_t x = 0; x < dims[X]; ++x) + for (size_t y = 0; y < dims[Y]; ++y) + for (size_t z = 0; z < dims[Z]; ++z) + out(x,y,z) = in(x + offsets[X], y + offsets[Y], z + offsets[Z]); + + + out.properties()["original_image"] = input_location; + out.properties()["offsets"] = str(offsets); + + +//-------------// +// Save Image // +//-------------// + + out.save(output_location); + + +} + + diff --git a/cmd/set_properties.cpp b/cmd/set_properties.cpp new file mode 100644 index 0000000..550331a --- /dev/null +++ b/cmd/set_properties.cpp @@ -0,0 +1,166 @@ +/* + Copyright 2010 Brain Research Institute, Melbourne, Australia + + Written by Thomas G. Close, Apr 21, 2010. + + This file is part of MRtrix. + + MRtrix is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + MRtrix is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with MRtrix. If not, see . + +*/ + + +#include "bts/cmd.h" + +#include "bts/file.h" + +#include "progressbar.h" + +#include "bts/fibre/strand/set.h" +#include "bts/fibre/tractlet/set.h" +#include "bts/fibre/track/set.h" +#include "bts/fibre/base/set_reader.h" +#include "bts/fibre/base/set_writer.h" + + +#include "bts/inline_functions.h" + +using namespace BTS; + +SET_VERSION_DEFAULT; +SET_AUTHOR ("Thomas G. Close"); +SET_COPYRIGHT (NULL); + +DESCRIPTION = { + "set_extend_elem_prop.cpp", + "", + NULL +}; + +ARGUMENTS = { + + Argument ("input", "Input file location").type_file (), + Argument ("output", "Output file location").optional().type_file (), + +Argument()}; + + +OPTIONS = { + + Option ("set", "Set a property to a new value").allow_multiple() + + Argument ("name", "Name of property") + + Argument ("value", "Value the property will be set to."), + +Option() }; + + +template void set_properties(const std::string& input_location, const std::string& output_location, App::Options& opt) { + + typename T::Set fibres (input_location); + + for (size_t prop_i = 0; prop_i < opt.size(); ++prop_i) { + + std::string property_name = opt[prop_i][0]; + std::string property_value = opt[prop_i][1]; + + if (property_name == "base_intensity") + fibres.set_base_intensity(to(property_value)); + else + fibres.set_extend_prop(property_name, property_value); + + } + + fibres.save(output_location); + + +} + + + +template void set_set_properties(const std::string& input_location, const std::string& output_location, App::Options& opt) { + + if (input_location == output_location) + throw Exception ("Input and output locations cannot be the same for fibre sets."); + + typename T::Reader reader (input_location); + + std::map properties = reader.get_extend_props(); + + for (size_t prop_i = 0; prop_i < opt.size(); ++prop_i) { + + std::string property_name = opt[prop_i][0]; + std::string property_value = opt[prop_i][1]; + + properties[property_name] = property_value; + + } + + typename T::Writer writer(output_location, reader, properties); + + T strands; + + while (reader.next(strands)) + writer.append(strands); + +} + + +EXECUTE { + + std::string input_location = argument[0]; + std::string output_location; + + if (argument.size() > 1) + output_location = argument[1].c_str(); + else + output_location = input_location; + + MR::ProgressBar progress_bar ("Setting properties..."); + + Options opt = get_options("set"); + + if (File::has_or_txt_extension(input_location)) { + + set_properties(input_location, output_location, opt); + + } else if (File::has_or_txt_extension(input_location)) { + + set_properties(input_location, output_location, opt); + + } else if (File::has_or_txt_extension(input_location)) { + + set_properties(input_location, output_location, opt); + + } else if (File::has_extension(input_location)) { + + set_set_properties(input_location, output_location, opt); + + } else if (File::has_extension(input_location)) { + + set_set_properties(input_location, output_location, opt); + + } else if (File::has_extension(input_location)) { + + set_set_properties(input_location, output_location, opt); + + } else + throw Exception ("Unrecognised extension '" + File::extension(input_location) + "'."); + + //MR::ProgressBar::done(); + } + + + + + diff --git a/cmd/shortest_distance.cpp b/cmd/shortest_distance.cpp new file mode 100644 index 0000000..e0945a9 --- /dev/null +++ b/cmd/shortest_distance.cpp @@ -0,0 +1,132 @@ +/* + Copyright 2008 Brain Research Institute, Melbourne, Australia + + Written by Thomas G Close, Mar 14, 2011. + + This file is part of MRtrix. + + MRtrix is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + MRtrix is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with MRtrix. If not, see . + +*/ + + +#include "bts/cmd.h" + +#include "bts/common.h" + +#include "bts/fibre/tractlet/set.h" +#include "bts/fibre/strand/set.h" +#include "bts/fibre/track/set.h" + +#include "bts/inline_functions.h" + +using namespace BTS; + +SET_VERSION_DEFAULT; +SET_AUTHOR ("Thomas G. Close"); +SET_COPYRIGHT (NULL); + + +DESCRIPTION = { + "Map colours to reference set by switching bundle indices to closest match.", + "", + NULL +}; + +ARGUMENTS = { + Argument ("reference","Reference fibres the match fibres will be mapped to.").type_file (), + Argument ("samples","Fibre samples that stats will collected from.").type_file (), + Argument ("output","Output filename, if not provided will be same as samples with 'stat' extension.").optional().type_file (), + Argument() +}; + + +OPTIONS = { + +Option() }; + + +EXECUTE { + + std::string reference_location = argument[0]; + std::string samples_location = argument[1]; + std::string output_location = File::strip_extension(samples_location) + ".shrt." + File::extension(samples_location); + + if (argument.size() == 3) + output_location = argument[2].c_str(); + + + if (File::has_extension(reference_location)) { + + if (!File::has_extension(samples_location)) + throw Exception ("Samples location ('" + samples_location + "') does not match reference location ('" + reference_location + "')."); + + Fibre::Strand::Set reference(reference_location); + + Fibre::Strand::Set strands; + + Fibre::Strand::Set::Reader reader(samples_location); + Fibre::Strand::Set::Writer writer(output_location, reader, reader.get_extend_props()); + + MR::ProgressBar progress_bar("Calculating shortest distances...", to(reader.get_extend_props()["count"])); + + size_t count = 0; + while (reader.next(strands)) { + + if (strands.size() != reference.size()) + throw Exception ("Size of tractlet set " + str(count) + " (" + str(strands.size()) + ") does not match that of 'reference' set (" + str(reference.size()) + ")"); + + Fibre::Strand::Set shortest_dist = strands.smallest_distance_set(reference); + writer.append(shortest_dist); + + ++count; + ++progress_bar; + + } + + + } else if (File::has_extension(reference_location)) { + + if (!File::has_extension(samples_location)) + throw Exception ("Samples location ('" + samples_location + "') does not match reference location ('" + reference_location + "')."); + + Fibre::Tractlet::Set reference(reference_location); + + Fibre::Tractlet::Set tractlets; + + Fibre::Tractlet::Set::Reader reader(samples_location); + Fibre::Tractlet::Set::Writer writer(output_location, reader, reader.get_extend_props()); + + MR::ProgressBar progress_bar("Calculating shortest distances...", to(reader.get_extend_props()["count"])); + + size_t count = 0; + while (reader.next(tractlets)) { + + if (tractlets.size() != reference.size()) + throw Exception ("Size of tractlet set " + str(count) + " (" + str(tractlets.size()) + ") does not match that of 'reference' set (" + str(reference.size()) + ")"); + + Fibre::Tractlet::Set shortest_dist = tractlets.smallest_distance_set(reference); + writer.append(shortest_dist); + + ++count; + ++progress_bar; + + } + + + } else + throw Exception ("Usupported output file type ('" + output_location + "') for match of type tractlet."); + + +} diff --git a/cmd/simple_phantoms.cpp b/cmd/simple_phantoms.cpp new file mode 100644 index 0000000..be66e76 --- /dev/null +++ b/cmd/simple_phantoms.cpp @@ -0,0 +1,318 @@ +/* + Copyright 2009 Brain Research Institute, Melbourne, Australia + + Written by Thomas G. Close, 04/03/2009. + + This file is part of Bayesian Tractlet Sampling (BTS). + + BTS is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + BTS is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with BTS. If not, see . + +*/ + +extern "C" { +#include +#include +} + + +#include "bts/cmd.h" + +#include "bts/common.h" + +#include "bts/fibre/strand/set.h" +#include "bts/fibre/track/set.h" + + + +#include "bts/mcmc/proposal/distribution.h" +#include "bts/mcmc/proposal/distribution/gaussian.h" + +#include "bts/image/buffer.h" +#include "bts/image/expected/buffer.h" +#include "bts/diffusion/model.h" + + + +#include "bts/inline_functions.h" + +using namespace BTS; + +SET_VERSION_DEFAULT; +SET_AUTHOR ("Thomas G. Close"); +SET_COPYRIGHT (NULL); + +DESCRIPTION = { + "Generates a particular set of basic phantom configurations", + "", + NULL +}; + +ARGUMENTS = { + Argument ("", "").optional(), + Argument ("", "").optional(), + Argument() +}; + + +OPTIONS = { + + Option ("type", "Type of the basic configuration to generate. (0 - crossing, 1 - branching, 2 - kissing).") + + Argument ("type", "").type_integer (0, 2, 0), + + Option ("degree", "degree of the strands.") + + Argument ("degree", "").type_integer (1, 2000, 100), + + Option ("curve", "curve of the bends.") + + Argument ("curve", "").type_float (1e-9, INFINITY, 0.1), + + Option ("num_layers", "number of layers.") + + Argument ("num_layers", "").type_integer (1, 2000, 100), + + Option ("num_voxels", "number of voxels.") + + Argument ("num_voxels", "").type_integer (1, 2000, 100), + + Option ("voxel_size", "Size of the voxels.") + + Argument ("voxel_size", "").type_float (1e-9, INFINITY, 0.1), + + Option ("angle", "Angle of the branch (in degrees)") + + Argument ("angle", "").type_float (1e-9, INFINITY, 0.1), + + Option ("curv_angle", "Angle of the branch (in degrees)") + + Argument ("curv_angle", "").type_float (1e-9, INFINITY, 0.1), + +Option() }; + + + +EXECUTE { + + + const size_t CROSSING = 0; + const size_t BRANCHING = 1; + const size_t KISSING = 2; + + size_t type = CROSSING; + + size_t degree = 3; + double curve = 0.1; + size_t num_layers = 6; + double vox_size = 0.15; + size_t num_voxels = 3; + double angle = 30; + double curv_angle = 30; + + + + + Options opt = get_options("type"); + if (opt.size()) + type = opt[0][0]; + + opt = get_options("degree"); + if (opt.size()) + degree = opt[0][0]; + + + opt = get_options("curve"); + if (opt.size()) + curve = opt[0][0]; + + + opt = get_options("num_layers"); + if (opt.size()) + num_layers = opt[0][0]; + + + opt = get_options("num_voxels"); + if (opt.size()) + num_voxels = opt[0][0]; + + + opt = get_options("vox_size"); + if (opt.size()) + vox_size = opt[0][0]; + + + opt = get_options("angle"); + if (opt.size()) + angle = opt[0][0]; + + + opt = get_options("curv_angle"); + if (opt.size()) + curv_angle = opt[0][0]; + + + switch (type) { + + case CROSSING: { + + double extent = vox_size * (double)num_voxels / 2.0; + + double strand_diameter = 2.0 * extent / (double)num_layers; + + + Fibre::Strand straight (degree, 0.0); + + straight[1][1] = M_SQRT2 * extent; + + Fibre::Strand curved (degree, 0.0); + + curved[1][0] = M_SQRT2 * extent; + curved[2][1] = curve; + curved[0][1] = ((double)curve); + + Fibre::Strand::Set ismrm; + + ismrm.add_extend_elem_prop("bundle_index", "0"); + + + double layer_offset = - extent + strand_diameter/ 2.0; + double col_offset = - extent + strand_diameter/ 2.0; + + for (size_t layer_i = 0; layer_i < num_layers/2; layer_i++) { + + for (size_t col_i = 0; col_i < num_layers; col_i++) { + + Fibre::Strand straight_offset = straight; + Fibre::Strand curved_offset = curved; + + straight_offset[0][0] += strand_diameter * (double) col_i + col_offset; + straight_offset[0][2] += 2.0 * strand_diameter * (double) layer_i + layer_offset; + + curved_offset[0][1] += strand_diameter * (double) col_i + col_offset; + curved_offset[0][2] += 2.0 * strand_diameter * (double) layer_i + layer_offset + strand_diameter; + + ismrm.push_back(straight_offset); + ismrm.set_extend_elem_prop("bundle_index", "0", ismrm.size()-1); + + ismrm.push_back(curved_offset); + ismrm.set_extend_elem_prop("bundle_index", "1", ismrm.size()-1); + + } + + } + + ismrm.add_extend_elem_prop("track_radius", str(strand_diameter/2.0)); + + ismrm.save(PARAM_DIRECTORY + "ismrm_abstractlet/ismrm-crossing.frr"); + + break; + + } case BRANCHING: { + + + double extent = vox_size * (double)num_voxels / 2.0; + + double strand_diameter = 2.0 * extent / (double)num_layers; + + Fibre::Strand curve1 (degree, 0.0); + + double rad_angle = 2.0 * M_PI * (angle / 360.0); + + double curve_rad_angle = 2.0 * M_PI * (curv_angle / 360.0); + + + curve1[0][0] = -curve * cos(curve_rad_angle); + curve1[0][1] = 2*curve * sin(curve_rad_angle); + + curve1[1][0] = M_SQRT2 * extent * sin(rad_angle)*2; + curve1[1][1] = M_SQRT2 * extent * cos(rad_angle)*2; + + curve1[2][0] = curve * cos(curve_rad_angle); + curve1[2][1] = curve * sin(curve_rad_angle); + + Fibre::Strand curve2 = curve1; + for (size_t degree_i = 0; degree_i < degree; degree_i++) { + curve2[degree_i][1] *= -1; + + } + + + + std::cout << curve1 << std::endl; + std::cout << curve2 << std::endl; + + + Fibre::Strand::Set ismrm; + + ismrm.add_extend_elem_prop("bundle_index", "0"); + + + double layer_offset = - extent + strand_diameter/ 2.0; + double col_offset = - extent + strand_diameter/ 2.0; + + for (size_t layer_i = 0; layer_i < num_layers/2; layer_i++) { + + for (size_t col_i = 0; col_i < num_layers; col_i++) { + + Fibre::Strand curve2_offset = curve2; + Fibre::Strand curve1_offset = curve1; + + curve1_offset[0][0] += (strand_diameter * (double) col_i + col_offset) * sin(rad_angle); + curve1_offset[0][1] += -(strand_diameter * (double) col_i + col_offset) * cos(rad_angle); + + curve1_offset[0][2] += 2.0 * strand_diameter * (double) layer_i + layer_offset + strand_diameter; + + + curve2_offset[0][0] += (strand_diameter * (double) col_i + col_offset) * sin(rad_angle); + curve2_offset[0][1] += (strand_diameter * (double) col_i + col_offset) * cos(rad_angle); + + curve2_offset[0][2] += 2.0 * strand_diameter * (double) layer_i + layer_offset; + + + ismrm.push_back(curve2_offset); + ismrm.set_extend_elem_prop("bundle_index", "0", ismrm.size()-1); + + ismrm.push_back(curve1_offset); + ismrm.set_extend_elem_prop("bundle_index", "1", ismrm.size()-1); + + } + + } + + ismrm.add_extend_elem_prop("track_radius", str(strand_diameter/2.0)); + + ismrm.save(PARAM_DIRECTORY + "ismrm_abstractlet/ismrm-branching.frr"); + break; + + + } case KISSING: { + + break; + } + + } + + +} + + + + + + + + + + + + + + + + + + + diff --git a/cmd/stats_fibres.cpp b/cmd/stats_fibres.cpp new file mode 100644 index 0000000..a8f6087 --- /dev/null +++ b/cmd/stats_fibres.cpp @@ -0,0 +1,290 @@ +/* + Copyright 2008 Brain Research Institute, Melbourne, Australia + + Written by Thomas G Close, Mar 14, 2011. + + This file is part of MRtrix. + + MRtrix is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + MRtrix is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with MRtrix. If not, see . + +*/ + + +#include "bts/cmd.h" + +#include "bts/common.h" + +#include "bts/fibre/tractlet/set.h" +#include "bts/fibre/strand/set.h" +#include "bts/fibre/track/set.h" + +#include "bts/inline_functions.h" + +using namespace BTS; + +SET_VERSION_DEFAULT; +SET_AUTHOR ("Thomas G. Close"); +SET_COPYRIGHT (NULL); + + +DESCRIPTION = { + "Map colours to reference set by switching bundle indices to closest match.", + "", + NULL +}; + +ARGUMENTS = { + Argument ("reference","Reference fibres the match fibres will be mapped to.").type_file (), + Argument ("samples","Fibre samples that stats will collected from.").type_file (), + Argument ("output","Output filename, if not provided will be same as samples with 'stat' extension.").optional().type_file (), + Argument() +}; + + +OPTIONS = { + +Option() }; + + +EXECUTE { + + std::string reference_location = argument[0]; + std::string samples_location = argument[1]; + std::string output_location = samples_location; + + if (argument.size() == 3) + output_location = argument[2].c_str(); + + + if (File::has_extension(reference_location)) { + + if (!File::has_extension(samples_location)) + throw Exception ("Samples location ('" + samples_location + "') does not match reference location ('" + reference_location + "')."); + + Fibre::Strand::Set reference(reference_location); + + Fibre::Strand::Set strands; + + Fibre::Strand::Set::Reader reader(samples_location); + + size_t count = 0; + + Fibre::Strand::Set average(reference); + + average.zero(); + + MR::ProgressBar progress_bar("Calculating average...", to(reader.get_extend_props()["count"])); + + std::ofstream all_out((File::strip_extension(output_location) + ".dist.txt").c_str()); + std::ofstream strand_out((File::strip_extension(output_location) + ".strdist.txt").c_str()); + std::ofstream pos_out((File::strip_extension(output_location) + ".pos.txt").c_str()); + std::ofstream orient_out((File::strip_extension(output_location) + ".orient.txt").c_str()); + std::ofstream len_out((File::strip_extension(output_location) + ".len.txt").c_str()); + std::ofstream curv_out((File::strip_extension(output_location) + ".curv.txt").c_str()); + + + while (reader.next(strands)) { + + if (strands.size() != reference.size()) + throw Exception ("Size of tractlet set " + str(count) + " (" + str(strands.size()) + ") does not match that of 'reference' set (" + str(reference.size()) + ")"); + + strands = strands.smallest_distance_set(reference); + + average += strands; + + all_out << strands.distance(reference) << std::endl; + + for (size_t strand_i = 0; strand_i < strands.size(); ++ strand_i) { + + strand_out << strands[strand_i].distance(reference[strand_i]) << " "; + pos_out << (strands[strand_i][0] - reference[strand_i][0]).norm() << " "; + orient_out << strands[strand_i][1].angle(reference[strand_i][1]) << " "; + len_out << strands[strand_i][1].norm() - reference[strand_i][1].norm() << " "; + curv_out << (strands[strand_i][2] - reference[strand_i][2]).norm() * SQRT_2 << " "; + + + + } + + strand_out << std::endl; + pos_out << std::endl; + orient_out << std::endl; + len_out << std::endl; + curv_out << std::endl; + + + ++count; + ++progress_bar; + + } + + + average /= (double)count; + + average.save(File::strip_extension(output_location) + ".avg.str"); + + Fibre::Strand::Set variance(reference); + + variance.zero(); + + count = 0; + + reader.rewind(); + + while (reader.next(strands)) { + + if (strands.size() != reference.size()) + throw Exception ("Size of tractlet set " + str(count) + " (" + str(strands.size()) + ") does not match that of 'reference' set (" + str(reference.size()) + ")"); + + Fibre::Strand::Set deviation = strands.smallest_distance_set(reference); + + deviation -= average; + + deviation *= deviation; + + variance += deviation; + + ++count; + ++progress_bar; + + } + + variance /= (double)count; + + variance.save(File::strip_extension(output_location) + ".var.str"); + + } else if (File::has_extension(reference_location)) { + + if (!File::has_extension(samples_location)) + throw Exception ("Samples location ('" + samples_location + "') does not match reference location ('" + reference_location + "')."); + + Fibre::Tractlet::Set reference(reference_location); + + Fibre::Tractlet::Set tractlets; + + Fibre::Tractlet::Set::Reader reader(samples_location); + + size_t count = 0; + + Fibre::Tractlet::Set average(reference); + + average.zero(); + + MR::ProgressBar progress_bar("Calculating average...", to(reader.get_extend_props()["count"])); + + std::ofstream all_out((File::strip_extension(output_location) + ".dist.txt").c_str()); + std::ofstream tractlet_out((File::strip_extension(output_location) + ".tctdist.txt").c_str()); + std::ofstream pos_out((File::strip_extension(output_location) + ".pos.txt").c_str()); + std::ofstream perp_out((File::strip_extension(output_location) + ".perp.txt").c_str()); + std::ofstream orient_out((File::strip_extension(output_location) + ".orient.txt").c_str()); + std::ofstream len_out((File::strip_extension(output_location) + ".len.txt").c_str()); + std::ofstream curv_out((File::strip_extension(output_location) + ".curv.txt").c_str()); + + std::ofstream width1_out((File::strip_extension(output_location) + ".width1.txt").c_str()); + std::ofstream width2_out((File::strip_extension(output_location) + ".width2.txt").c_str()); + + std::ofstream acs_out((File::strip_extension(output_location) + ".area.txt").c_str()); + + std::ofstream rot_out((File::strip_extension(output_location) + ".rot.txt").c_str()); + + while (reader.next(tractlets)) { + + if (tractlets.size() != reference.size()) + throw Exception ("Size of tractlet set " + str(count) + " (" + str(tractlets.size()) + ") does not match that of 'reference' set (" + str(reference.size()) + ")"); + + tractlets = tractlets.smallest_distance_set(reference); + + average += tractlets; + + all_out << tractlets.distance(reference) << std::endl; + + for (size_t tractlet_i = 0; tractlet_i < tractlets.size(); ++ tractlet_i) { + + tractlet_out << tractlets[tractlet_i].distance(reference[tractlet_i]) << " "; + + pos_out << (tractlets[tractlet_i][0][0] - reference[tractlet_i][0][0]).norm() << " "; + perp_out << (tractlets[tractlet_i][0][0] - tractlets[tractlet_i][0][0].dot(tractlets[tractlet_i][0][1])/tractlets[tractlet_i][0][1].norm() + - reference[tractlet_i][0][0] + reference[tractlet_i][0][0].dot(reference[tractlet_i][0][1])/reference[tractlet_i][0][1].norm()).norm() << " "; + orient_out << tractlets[tractlet_i][0][1].angle(reference[tractlet_i][0][1]) << " "; + len_out << tractlets[tractlet_i][0][1].norm() - reference[tractlet_i][0][1].norm() << " "; + curv_out << (tractlets[tractlet_i][0][2] - reference[tractlet_i][0][2]).norm() * SQRT_2 << " "; + + width1_out << (tractlets[tractlet_i][1][0] - reference[tractlet_i][1][0]).norm() * SQRT_2 << " "; + width2_out << (tractlets[tractlet_i][2][0] - reference[tractlet_i][2][0]).norm() * SQRT_2 << " "; + + acs_out << tractlets[tractlet_i].acs() - reference[tractlet_i].acs() << " "; + + rot_out << tractlets[tractlet_i].rotation() << " "; + + } + + tractlet_out << std::endl; + pos_out << std::endl; + perp_out << std::endl; + orient_out << std::endl; + len_out << std::endl; + curv_out << std::endl; + + width1_out << std::endl; + width2_out << std::endl; + acs_out << std::endl; + + rot_out << std::endl; + + + ++count; + ++progress_bar; + + } + + + average /= (double)count; + + average.save(File::strip_extension(output_location) + ".avg.tct"); + + Fibre::Tractlet::Set variance(reference); + + variance.zero(); + + count = 0; + + reader.rewind(); + + while (reader.next(tractlets)) { + + if (tractlets.size() != reference.size()) + throw Exception ("Size of tractlet set " + str(count) + " (" + str(tractlets.size()) + ") does not match that of 'reference' set (" + str(reference.size()) + ")"); + + Fibre::Tractlet::Set deviation = tractlets.smallest_distance_set(reference); + + deviation -= average; + + deviation *= deviation; + + variance += deviation; + + ++count; + ++progress_bar; + + } + + variance /= (double)count; + + variance.save(File::strip_extension(output_location) + ".var.tct"); + + } else + throw Exception ("Usupported output file type ('" + output_location + "') for match of type tractlet."); + + +} diff --git a/cmd/stress_tester.cpp b/cmd/stress_tester.cpp new file mode 100644 index 0000000..f6af452 --- /dev/null +++ b/cmd/stress_tester.cpp @@ -0,0 +1,717 @@ + + +extern "C" { +#include +#include +} + +#include "math/matrix.h" +#include "exception.h" + +#include "bts/cmd.h" +#include "bts/common.h" +#include "bts/file.h" + +#include "bts/fibre/base/set.h" +#include "bts/fibre/track/set.h" + + +using namespace BTS; + + +std::vector< std::vector > recreate_objects(const std::vector& elem_props) { + + std::vector< std::vector > objects(10); + + for (size_t size_i = 0; size_i < 10; ++size_i) { + objects[size_i]; + for (size_t value_i = 0; value_i < 10; ++value_i) { + objects[size_i].push_back(Fibre::Base::Object(size_i, 3, elem_props)); + objects[size_i][value_i].set(value_i+1001); + } + } + + return objects; + +} + +std::vector< std::map > recreate_prop_row_maps(const std::vector& elem_props) { + + std::vector< std::map > prop_row_maps(10); + + for (size_t value_i = 0; value_i < 10; ++value_i) { + for (size_t key_i = 0; key_i < elem_props.size(); ++key_i) + prop_row_maps[value_i][elem_props[key_i]] = (double)(value_i+1) * 0.01 + (double)(key_i+1) * 0.1 + 0.001; + } + + return prop_row_maps; + +} + +std::vector< std::vector > recreate_prop_rows(const std::vector& elem_props) { + + std::vector< std::vector > prop_rows(10); + + for (size_t value_i = 0; value_i < 10; ++value_i) { + for (size_t key_i = 0; key_i < elem_props.size(); ++key_i) + prop_rows[value_i].push_back((double)(value_i+1) * 0.01 + (double)(key_i+1) * 0.1 + 0.001); + } + + return prop_rows; + +} + + +std::vector< std::map > create_ext_prop_row_maps() { + + std::vector< std::map > prop_rows(10); + + for (size_t value_i = 0; value_i < 10; ++value_i) { + for (size_t key_i = 1; key_i < 11; ++key_i) + prop_rows[value_i]["EXT_ELEM_PROP_" +str(key_i)] = str((double)(value_i+1) * 0.01 + (double)key_i * 1.1 + 0.001); + } + + return prop_rows; + +} + +void recreate_elem_prop_objects(const std::vector& elem_props, std::vector >& objects, std::vector< std::map >& prop_row_maps, std::vector< std::vector >& prop_rows) { + + objects = recreate_objects(elem_props); + prop_row_maps = recreate_prop_row_maps(elem_props); + prop_rows = recreate_prop_rows(elem_props); + +} + +SET_VERSION_DEFAULT; +SET_AUTHOR ("Thomas G. Close"); +SET_COPYRIGHT (NULL); + +DESCRIPTION = { + "Tests a random sequence of Fibre::Base::Set operations against those performed on a Python version.", + "", + NULL +}; + +ARGUMENTS = { + + + Argument() +}; + + +OPTIONS = { + +Option() }; + + +EXECUTE { + + size_t SET_SIZE = 5; + size_t OBJECT_SIZE = 5; + + const char* PROP_1 = "PROP_1"; + const char* PROP_2 = "PROP_2"; + const char* PROP_3 = "PROP_3"; + const char* PROP_4 = "PROP_4"; + const char* PROP_5 = "PROP_5"; + const char* PROP_6 = "PROP_6"; + const char* PROP_7 = "PROP_7"; + const char* PROP_8 = "PROP_8"; + const char* PROP_9 = "PROP_9"; + const char* PROP_10 = "PROP_10"; + + const char* ELEM_PROP_1 = "ELEM_PROP_1"; + const char* ELEM_PROP_2 = "ELEM_PROP_2"; + const char* ELEM_PROP_3 = "ELEM_PROP_3"; + const char* ELEM_PROP_4 = "ELEM_PROP_4"; + const char* ELEM_PROP_5 = "ELEM_PROP_5"; + const char* ELEM_PROP_6 = "ELEM_PROP_6"; + const char* ELEM_PROP_7 = "ELEM_PROP_7"; + const char* ELEM_PROP_8 = "ELEM_PROP_8"; + const char* ELEM_PROP_9 = "ELEM_PROP_9"; + const char* ELEM_PROP_10 = "ELEM_PROP_10"; + + std::string EXT_ELEM_PROP_1 = "EXT_ELEM_PROP_1"; + std::string EXT_ELEM_PROP_2 = "EXT_ELEM_PROP_2"; + std::string EXT_ELEM_PROP_3 = "EXT_ELEM_PROP_3"; + std::string EXT_ELEM_PROP_4 = "EXT_ELEM_PROP_4"; + std::string EXT_ELEM_PROP_5 = "EXT_ELEM_PROP_5"; + std::string EXT_ELEM_PROP_6 = "EXT_ELEM_PROP_6"; + std::string EXT_ELEM_PROP_7 = "EXT_ELEM_PROP_7"; + std::string EXT_ELEM_PROP_8 = "EXT_ELEM_PROP_8"; + std::string EXT_ELEM_PROP_9 = "EXT_ELEM_PROP_9"; + std::string EXT_ELEM_PROP_10 = "EXT_ELEM_PROP_10"; + + std::vector props; + + props.push_back(PROP_1); + props.push_back(PROP_2); + props.push_back(PROP_3); + props.push_back(PROP_4); + props.push_back(PROP_5); + + std::vector elem_props; + + elem_props.push_back(ELEM_PROP_1); + elem_props.push_back(ELEM_PROP_2); + elem_props.push_back(ELEM_PROP_3); + elem_props.push_back(ELEM_PROP_4); + elem_props.push_back(ELEM_PROP_5); + + + std::vector< std::vector > objects = recreate_objects(elem_props); + std::vector > prop_rows = recreate_prop_rows(elem_props); + std::vector< std::map > prop_row_maps = recreate_prop_row_maps(elem_props); + + std::vector< std::map > ext_prop_row_maps = create_ext_prop_row_maps(); + + + //Iniate set + Fibre::Base::Set set(SET_SIZE, OBJECT_SIZE, 3, props, elem_props); + + for (size_t elem_i = 0; elem_i < SET_SIZE; ++elem_i) { + Fibre::Base::Object ob = set[elem_i]; + for (size_t elem_elem_i = 0; elem_elem_i < OBJECT_SIZE; ++elem_elem_i) { + Coord t = ob[elem_elem_i]; + for (size_t elem_elem_elem_i = 0; elem_elem_elem_i < 3; ++elem_elem_elem_i) + t[elem_elem_elem_i] = elem_i * 100 + elem_elem_i * 10 + elem_elem_elem_i +1; + } + + for (size_t prop_i = 0; prop_i < 5; ++prop_i) + ob.prop(prop_i) = (double)elem_i * 100.0 + (double)(prop_i+1) * .1 + 0.001; + } + + for (size_t prop_i = 0; prop_i < 5; ++prop_i) + set.prop(prop_i) = (double)(prop_i+1) * 1.1 + 0.001; + + for (size_t eprop_i = 1; eprop_i < 6; ++eprop_i) { + set.add_extend_elem_prop("EXT_ELEM_PROP_" + str(eprop_i),"NaN"); + for (size_t row_i = 0; row_i < set.size(); ++row_i) + set.set_extend_elem_prop("EXT_ELEM_PROP_" + str(eprop_i), "Ooogle " + str(eprop_i) + "-" + str(row_i), row_i); + } + + + //Iniate set + Fibre::Base::Set set2(SET_SIZE, OBJECT_SIZE, 3, props, elem_props); + + for (size_t elem_i = 0; elem_i < SET_SIZE; ++elem_i) { + Fibre::Base::Object ob = set2[elem_i]; + for (size_t elem_elem_i = 0; elem_elem_i < OBJECT_SIZE; ++elem_elem_i) { + Coord t = ob[elem_elem_i]; + for (size_t elem_elem_elem_i = 0; elem_elem_elem_i < 3; ++elem_elem_elem_i) + t[elem_elem_elem_i] = -(double)(elem_i * 100 + elem_elem_i * 10 + elem_elem_elem_i + 1); + } + + for (size_t prop_i = 0; prop_i < 5; ++prop_i) + ob.prop(prop_i) = -(double)elem_i * 100.0 - (double)(prop_i+1) * .1 - 0.001; + } + + for (size_t prop_i = 0; prop_i < 5; ++prop_i) + set2.prop(prop_i) = -(double)(prop_i+1) * 1.1 - 0.001; + + for (size_t eprop_i = 6; eprop_i < 11; ++eprop_i) { + set2.add_extend_elem_prop("EXT_ELEM_PROP_" + str(eprop_i),"NaN"); + for (size_t row_i = 0; row_i < set2.size(); ++row_i) + set2.set_extend_elem_prop("EXT_ELEM_PROP_" + str(eprop_i), "Boogle " + str(eprop_i) + "-" + str(row_i), row_i); + } + + std::ofstream out; + + out.open("/home/tclose/Code/Tractography/python/fibre/base/test/output/cpp_output.txt"); + + +// +// //==================================================================================================================== +// // Test functions start here +// //==================================================================================================================== +// +// out << "\n\n-------------------------------------\n INITIAL SET \n-------------------------------------\n\n" << set << "\n\n"; +// out << "\n\n-------------------------------------\n SECOND SET \n-------------------------------------\n\n" << set2 << "\n\n"; +// set.insert(objects[5][8],1); +// out << "set.num_elem_props(): " << set.num_elem_props() << std::endl; +// out << "set.elem_prop_index(ELEM_PROP_4): " << set.elem_prop_index(ELEM_PROP_4) << std::endl; +// set.add_elem_prop(ELEM_PROP_2,669); +// elem_props = set.get_elem_prop_header(); recreate_elem_prop_objects(elem_props,objects,prop_row_maps,prop_rows); +// out << "set.has_extend_elem_prop(EXT_ELEM_PROP_7): " << set.has_extend_elem_prop(EXT_ELEM_PROP_7) << std::endl; +// set.add_prop(PROP_6,984); +// out << "set.num_props(): " << set.num_props() << std::endl; +// set.free_elem_degree(); +// set.remove_prop(PROP_3); +// out << "\n\n-------------------------------------\n 5 MODFICATIONS \n-------------------------------------\n\n" << set << "\n\n"; +// set.add_elem_prop(ELEM_PROP_4,463); +// elem_props = set.get_elem_prop_header(); recreate_elem_prop_objects(elem_props,objects,prop_row_maps,prop_rows); +// out << "set.bsize(): " << set.bsize() << std::endl; +// set.copy_extend_elem_prop_row(set2,3,2); +// set.copy_extend_elem_prop_row(set2,1,1); +// out << "set.size(): " << set.size() << std::endl; +// set.add_prop(PROP_9,419); +// out << "set.num_extend_elem_props(): " << set.num_extend_elem_props() << std::endl; +// out << "set.prop(PROP_9): " << set.prop(PROP_9) << std::endl; +// out << "set.elem_prop_keys(): " << set.elem_prop_keys() << std::endl; +// set.add_elem_prop(ELEM_PROP_5,661); +// out << "\n\n-------------------------------------\n 10 MODFICATIONS \n-------------------------------------\n\n" << set << "\n\n"; +// elem_props = set.get_elem_prop_header(); recreate_elem_prop_objects(elem_props,objects,prop_row_maps,prop_rows); +// set.push_back(objects[9][0], ext_prop_row_maps[3]); +// out << "set.prop_index(PROP_2): " << set.prop_index(PROP_2) << std::endl; +// out << "set.vsize(): " << set.vsize() << std::endl; +// out << "set.num_props(): " << set.num_props() << std::endl; +// set.erase(1); +// set.add_elem_prop(ELEM_PROP_4,815); +// elem_props = set.get_elem_prop_header(); recreate_elem_prop_objects(elem_props,objects,prop_row_maps,prop_rows); +// out << "set.num_extend_elem_props(): " << set.num_extend_elem_props() << std::endl; +// out << "set.prop_index(PROP_2): " << set.prop_index(PROP_2) << std::endl; +// set.add_prop(PROP_7,434); +// set.insert(objects[5][8],1); +// out << "\n\n-------------------------------------\n 15 MODFICATIONS \n-------------------------------------\n\n" << set << "\n\n"; +// out << "set.get_extend_elem_prop_header(): " << set.get_extend_elem_prop_header() << std::endl; +// out << "set.prop_keys(): " << set.prop_keys() << std::endl; +// set.free_elem_degree(); +// set.set_extend_elem_prop_row(ext_prop_row_maps[1],4); +// out << "set.prop_keys(): " << set.prop_keys() << std::endl; +// out << "set.elem_prop_keys(): " << set.elem_prop_keys() << std::endl; +// set.set_extend_elem_prop_row(ext_prop_row_maps[3],4); +// set.push_back(objects[5][6], ext_prop_row_maps[7]); +// set.erase(2); +// out << "\n\n-------------------------------------\n 20 MODFICATIONS \n-------------------------------------\n\n" << set << "\n\n"; +// set.insert(objects[1][5],5); +// set.push_back(objects[6][1]); +// out << "set.elem_prop_index(ELEM_PROP_4): " << set.elem_prop_index(ELEM_PROP_4) << std::endl; +// out << "set.elem_prop_index(ELEM_PROP_4): " << set.elem_prop_index(ELEM_PROP_4) << std::endl; +// set.resize(1,574,0); +// set.push_back(objects[0][2]); +// set.elem_resize(7,511); +// out << "\n\n-------------------------------------\n 25 MODFICATIONS \n-------------------------------------\n\n" << set << "\n\n"; +// set.push_back(objects[7][8]); +// out << "set.prop(PROP_4): " << set.prop(PROP_4) << std::endl; +// set.get_extend_elem_prop_row(1); +// set.elem_resize(8,886); +// set.add_extend_elem_props(set2); +// set.add_elem_prop(ELEM_PROP_4,734); +// out << "\n\n-------------------------------------\n 30 MODFICATIONS \n-------------------------------------\n\n" << set << "\n\n"; +// elem_props = set.get_elem_prop_header(); recreate_elem_prop_objects(elem_props,objects,prop_row_maps,prop_rows); +// out << "set.num_extend_elem_props(): " << set.num_extend_elem_props() << std::endl; +// set.freeze_elem_degree(); +// elem_props = set.get_elem_prop_header(); recreate_elem_prop_objects(elem_props,objects,prop_row_maps,prop_rows); +// out << "set.num_props(): " << set.num_props() << std::endl; +// set.insert(objects[8][4],1); +// set.remove_elem_prop(ELEM_PROP_3); +// elem_props = set.get_elem_prop_header(); recreate_elem_prop_objects(elem_props,objects,prop_row_maps,prop_rows); +// set.insert(objects[8][5],1); +// out << "set.num_extend_elem_props(): " << set.num_extend_elem_props() << std::endl; +// set.set_extend_elem_prop(EXT_ELEM_PROP_3,"733",0); +// out << "\n\n-------------------------------------\n 35 MODFICATIONS \n-------------------------------------\n\n" << set << "\n\n"; +// set.erase(2); +// set.erase(0); +// set.erase(1); +// out << "set.prop(PROP_7): " << set.prop(PROP_7) << std::endl; +// set.freeze_elem_degree(); +// elem_props = set.get_elem_prop_header(); recreate_elem_prop_objects(elem_props,objects,prop_row_maps,prop_rows); +// set.add_extend_elem_prop(EXT_ELEM_PROP_10,"-99"); +// out << "\n\n-------------------------------------\n 40 MODFICATIONS \n-------------------------------------\n\n" << set << "\n\n"; +// set.remove_extend_elem_prop(EXT_ELEM_PROP_1); +// set.free_elem_degree(); +// out << "set.num_props(): " << set.num_props() << std::endl; +// out << "set.get_extend_elem_prop(EXT_ELEM_PROP_9,0): " << set.get_extend_elem_prop(EXT_ELEM_PROP_9,0) << std::endl; +// out << "set.has_elem_prop(ELEM_PROP_9): " << set.has_elem_prop(ELEM_PROP_9) << std::endl; +// set.elem_resize(8,975); +// set.remove_elem_prop(ELEM_PROP_5); +// elem_props = set.get_elem_prop_header(); recreate_elem_prop_objects(elem_props,objects,prop_row_maps,prop_rows); +// set.remove_extend_elem_prop(EXT_ELEM_PROP_6); +// out << "\n\n-------------------------------------\n 45 MODFICATIONS \n-------------------------------------\n\n" << set << "\n\n"; +// out << "set.vsize(): " << set.vsize() << std::endl; +// set.remove_elem_prop(ELEM_PROP_1); +// elem_props = set.get_elem_prop_header(); recreate_elem_prop_objects(elem_props,objects,prop_row_maps,prop_rows); +// out << "set.elem_prop_index(ELEM_PROP_4): " << set.elem_prop_index(ELEM_PROP_4) << std::endl; +// out << "set.vsize(): " << set.vsize() << std::endl; +// set.prop_key(6); +// set.push_back(objects[8][7]); +// set.remove_extend_elem_prop(EXT_ELEM_PROP_2); +// set.remove_extend_elem_prop(EXT_ELEM_PROP_8); +// out << "\n\n-------------------------------------\n 50 MODFICATIONS \n-------------------------------------\n\n" << set << "\n\n"; +// set.add_elem_prop(ELEM_PROP_4,776); +// elem_props = set.get_elem_prop_header(); recreate_elem_prop_objects(elem_props,objects,prop_row_maps,prop_rows); +// set.copy_extend_elem_prop_row(set2,1,1); +// set.erase(2); +// set.push_back(objects[8][8], ext_prop_row_maps[2]); +// set.elem_resize(2,480); +// out << "\n\n-------------------------------------\n 55 MODFICATIONS \n-------------------------------------\n\n" << set << "\n\n"; +// set.add_extend_elem_prop(EXT_ELEM_PROP_8,"-99"); +// out << "set.size(): " << set.size() << std::endl; +// out << "set.num_props(): " << set.num_props() << std::endl; +// out << "set.num_extend_elem_props(): " << set.num_extend_elem_props() << std::endl; +// set.insert(objects[2][4],0); +// out << "set.has_elem_prop(ELEM_PROP_7): " << set.has_elem_prop(ELEM_PROP_7) << std::endl; +// set.set_extend_elem_prop_row(ext_prop_row_maps[0],0); +// set.freeze_elem_degree(); +// elem_props = set.get_elem_prop_header(); recreate_elem_prop_objects(elem_props,objects,prop_row_maps,prop_rows); +// set.push_back(objects[2][2]); +// out << "\n\n-------------------------------------\n 60 MODFICATIONS \n-------------------------------------\n\n" << set << "\n\n"; +// set.copy_extend_elem_prop_row(set2,0,2); +// out << "set.get_extend_elem_prop(EXT_ELEM_PROP_3,3): " << set.get_extend_elem_prop(EXT_ELEM_PROP_3,3) << std::endl; +// out << "set.num_elem_props(): " << set.num_elem_props() << std::endl; +// set.add_extend_elem_prop(EXT_ELEM_PROP_4,"-99"); +// set.remove_elem_prop(ELEM_PROP_2); +// elem_props = set.get_elem_prop_header(); recreate_elem_prop_objects(elem_props,objects,prop_row_maps,prop_rows); +// out << "set.vsize(): " << set.vsize() << std::endl; +// set.prop_key(2); +// set.remove_elem_prop(ELEM_PROP_4); +// out << "\n\n-------------------------------------\n 65 MODFICATIONS \n-------------------------------------\n\n" << set << "\n\n"; +// elem_props = set.get_elem_prop_header(); recreate_elem_prop_objects(elem_props,objects,prop_row_maps,prop_rows); +// out << "set.get_extend_elem_prop_header(): " << set.get_extend_elem_prop_header() << std::endl; +// set.set_extend_elem_prop_row(ext_prop_row_maps[0],1); +// set.prop_key(2); +// out << "set.prop_index(PROP_4): " << set.prop_index(PROP_4) << std::endl; +// out << "set.num_elem_props(): " << set.num_elem_props() << std::endl; +// out << "set.bsize(): " << set.bsize() << std::endl; +// out << "set.has_extend_elem_prop(EXT_ELEM_PROP_3): " << set.has_extend_elem_prop(EXT_ELEM_PROP_3) << std::endl; +// set.free_elem_degree(); +// set.remove_extend_elem_prop(EXT_ELEM_PROP_7); +// out << "set.num_extend_elem_props(): " << set.num_extend_elem_props() << std::endl; +// out << "set.num_props(): " << set.num_props() << std::endl; +// set.free_elem_degree(); +// out << "\n\n-------------------------------------\n 70 MODFICATIONS \n-------------------------------------\n\n" << set << "\n\n"; +// out << "set.has_extend_elem_prop(EXT_ELEM_PROP_8): " << set.has_extend_elem_prop(EXT_ELEM_PROP_8) << std::endl; +// set.add_extend_elem_props(set2); +// set.insert(objects[6][7],2); +// out << "set.vsize(): " << set.vsize() << std::endl; +// set.copy_extend_elem_prop_row(set2,3,5); +// set.copy_extend_elem_prop_row(set2,4,2); +// set.get_extend_elem_prop_row(4); +// out << "\n\n-------------------------------------\n 75 MODFICATIONS \n-------------------------------------\n\n" << set << "\n\n"; +// out << "set.num_props(): " << set.num_props() << std::endl; +// set.add_prop(PROP_8,140); +// set.set_extend_elem_prop(EXT_ELEM_PROP_4,"138",2); +// set.get_extend_elem_prop_row(3); +// set.get_extend_elem_prop_row(2); +// set.set_extend_elem_prop_row(ext_prop_row_maps[5],5); +// out << "\n\n-------------------------------------\n 80 MODFICATIONS \n-------------------------------------\n\n" << set << "\n\n"; +// out << "set.get_extend_elem_prop_header(): " << set.get_extend_elem_prop_header() << std::endl; +// set.set_extend_elem_prop(EXT_ELEM_PROP_5,"667",2); +// set.add_extend_elem_prop(EXT_ELEM_PROP_2,"-99"); +// set.insert(objects[1][2],2); +// set.add_extend_elem_prop(EXT_ELEM_PROP_8,"-99"); +// set.remove_prop(PROP_5); +// out << "\n\n-------------------------------------\n 85 MODFICATIONS \n-------------------------------------\n\n" << set << "\n\n"; +// set.remove_extend_elem_prop(EXT_ELEM_PROP_6); +// set.insert(objects[8][9],3); +// set.resize(1,277,5); +// out << "set.num_extend_elem_props(): " << set.num_extend_elem_props() << std::endl; +// set.add_extend_elem_prop(EXT_ELEM_PROP_6,"-99"); +// set.prop_key(0); +// out << "\n\n-------------------------------------\n 90 MODFICATIONS \n-------------------------------------\n\n" << set << "\n\n"; +// set.erase(0); +// set.prop_key(3); +// out << "set.elem_prop_keys(): " << set.elem_prop_keys() << std::endl; +// set.elem_resize(8,926); +// out << "set.get_extend_elem_prop_header(): " << set.get_extend_elem_prop_header() << std::endl; +// set.remove_extend_elem_prop(EXT_ELEM_PROP_9); +// set.remove_prop(PROP_4); +// out << "\n\n-------------------------------------\n 95 MODFICATIONS \n-------------------------------------\n\n" << set << "\n\n"; +// set.remove_extend_elem_prop(EXT_ELEM_PROP_5); +// set.add_prop(PROP_5,902); +// out << "set.num_extend_elem_props(): " << set.num_extend_elem_props() << std::endl; +// set.add_prop(PROP_10,182); +// set.push_back(objects[8][0], ext_prop_row_maps[2]); +// out << "set.vsize(): " << set.vsize() << std::endl; +// out << "set.prop_index(PROP_9): " << set.prop_index(PROP_9) << std::endl; +// out << "set.num_extend_elem_props(): " << set.num_extend_elem_props() << std::endl; +// set.add_prop(PROP_4,779); +// out << "\n\n-------------------------------------\n 100 MODFICATIONS \n-------------------------------------\n\n" << set << "\n\n"; +// out << "set.prop_keys(): " << set.prop_keys() << std::endl; +// out << "set.has_extend_elem_prop(EXT_ELEM_PROP_2): " << set.has_extend_elem_prop(EXT_ELEM_PROP_2) << std::endl; +// set.add_prop(PROP_3,22); +// set.resize(3,137,0); +// out << "set.num_elem_props(): " << set.num_elem_props() << std::endl; +// out << "set.has_extend_elem_prop(EXT_ELEM_PROP_10): " << set.has_extend_elem_prop(EXT_ELEM_PROP_10) << std::endl; +// set.set_extend_elem_prop(EXT_ELEM_PROP_8,"308",0); +// out << "set.num_props(): " << set.num_props() << std::endl; +// out << "set.get_extend_elem_prop(EXT_ELEM_PROP_10,2): " << set.get_extend_elem_prop(EXT_ELEM_PROP_10,2) << std::endl; +// set.erase(1); +// set.erase(1); +// out << "\n\n-------------------------------------\n 105 MODFICATIONS \n-------------------------------------\n\n" << set << "\n\n"; +// out << "set.get_extend_elem_prop(EXT_ELEM_PROP_3,0): " << set.get_extend_elem_prop(EXT_ELEM_PROP_3,0) << std::endl; +// set.push_back(objects[8][5], ext_prop_row_maps[4]); +// set.freeze_elem_degree(); +// elem_props = set.get_elem_prop_header(); recreate_elem_prop_objects(elem_props,objects,prop_row_maps,prop_rows); +// out << "set.prop_keys(): " << set.prop_keys() << std::endl; +// out << "set.size(): " << set.size() << std::endl; +// out << "set.num_extend_elem_props(): " << set.num_extend_elem_props() << std::endl; +// out << "set.prop(PROP_1): " << set.prop(PROP_1) << std::endl; +// out << "set.size(): " << set.size() << std::endl; +// set.freeze_elem_degree(); +// elem_props = set.get_elem_prop_header(); recreate_elem_prop_objects(elem_props,objects,prop_row_maps,prop_rows); +// set.get_extend_elem_prop_row(0); +// out << "set.bsize(): " << set.bsize() << std::endl; +// out << "set.elem_prop_keys(): " << set.elem_prop_keys() << std::endl; +// set.elem_resize(9,179); +// out << "\n\n-------------------------------------\n 110 MODFICATIONS \n-------------------------------------\n\n" << set << "\n\n"; +// out << "set.get_extend_elem_prop(EXT_ELEM_PROP_10,1): " << set.get_extend_elem_prop(EXT_ELEM_PROP_10,1) << std::endl; +// set.push_back(objects[9][1], ext_prop_row_maps[3]); +// set.erase(0); +// out << "set.bsize(): " << set.bsize() << std::endl; +// out << "set.prop(PROP_3): " << set.prop(PROP_3) << std::endl; +// out << "set.num_extend_elem_props(): " << set.num_extend_elem_props() << std::endl; +// set.push_back(objects[9][8]); +// out << "set.num_extend_elem_props(): " << set.num_extend_elem_props() << std::endl; +// out << "set.num_props(): " << set.num_props() << std::endl; +// set.remove_prop(PROP_2); +// set.get_extend_elem_prop_row(0); +// out << "\n\n-------------------------------------\n 115 MODFICATIONS \n-------------------------------------\n\n" << set << "\n\n"; +// set.add_extend_elem_prop(EXT_ELEM_PROP_5,"-99"); +// out << "set.elem_prop_keys(): " << set.elem_prop_keys() << std::endl; +// set.prop_key(2); +// set.prop_key(0); +// set.erase(0); +// set.copy_extend_elem_prop_row(set2,4,1); +// out << "\n\n-------------------------------------\n 120 MODFICATIONS \n-------------------------------------\n\n" << set << "\n\n"; +// set.free_elem_degree(); +// out << "set.num_elem_props(): " << set.num_elem_props() << std::endl; +// set.remove_prop(PROP_8); +// out << "set.prop_index(PROP_10): " << set.prop_index(PROP_10) << std::endl; +// set.free_elem_degree(); +// out << "set.size(): " << set.size() << std::endl; +// set.remove_extend_elem_prop(EXT_ELEM_PROP_7); +// set.add_extend_elem_prop(EXT_ELEM_PROP_1,"-99"); +// out << "\n\n-------------------------------------\n 125 MODFICATIONS \n-------------------------------------\n\n" << set << "\n\n"; +// set.elem_resize(4,873); +// set.remove_extend_elem_prop(EXT_ELEM_PROP_3); +// out << "set.size(): " << set.size() << std::endl; +// set.add_extend_elem_props(set2); +// set.free_elem_degree(); +// out << "set.get_extend_elem_prop(EXT_ELEM_PROP_2,0): " << set.get_extend_elem_prop(EXT_ELEM_PROP_2,0) << std::endl; +// set.insert(objects[5][3],1); +// out << "\n\n-------------------------------------\n 130 MODFICATIONS \n-------------------------------------\n\n" << set << "\n\n"; +// out << "set.num_elem_props(): " << set.num_elem_props() << std::endl; +// out << "set.size(): " << set.size() << std::endl; +// out << "set.num_elem_props(): " << set.num_elem_props() << std::endl; +// set.push_back(objects[4][7], ext_prop_row_maps[3]); +// out << "set.elem_prop_keys(): " << set.elem_prop_keys() << std::endl; +// set.push_back(objects[4][0], ext_prop_row_maps[7]); +// set.push_back(objects[6][6], ext_prop_row_maps[2]); +// set.elem_resize(7,192); +// set.insert(objects[7][9],1); +// out << "\n\n-------------------------------------\n 135 MODFICATIONS \n-------------------------------------\n\n" << set << "\n\n"; +// out << "set.prop(PROP_3): " << set.prop(PROP_3) << std::endl; +// out << "set.get_extend_elem_prop_header(): " << set.get_extend_elem_prop_header() << std::endl; +// out << "set.size(): " << set.size() << std::endl; +// set.insert(objects[7][1],0); +// set.add_extend_elem_prop(EXT_ELEM_PROP_6,"-99"); +// out << "set.has_elem_prop(ELEM_PROP_3): " << set.has_elem_prop(ELEM_PROP_3) << std::endl; +// out << "set.vsize(): " << set.vsize() << std::endl; +// out << "set.bsize(): " << set.bsize() << std::endl; +// set.free_elem_degree(); +// set.freeze_elem_degree(); +// elem_props = set.get_elem_prop_header(); recreate_elem_prop_objects(elem_props,objects,prop_row_maps,prop_rows); +// out << "set.prop(PROP_5): " << set.prop(PROP_5) << std::endl; +// out << "set.has_extend_elem_prop(EXT_ELEM_PROP_4): " << set.has_extend_elem_prop(EXT_ELEM_PROP_4) << std::endl; +// out << "set.bsize(): " << set.bsize() << std::endl; +// set.elem_resize(6,44); +// out << "\n\n-------------------------------------\n 140 MODFICATIONS \n-------------------------------------\n\n" << set << "\n\n"; +// out << "set.get_extend_elem_prop_header(): " << set.get_extend_elem_prop_header() << std::endl; +// out << "set.num_extend_elem_props(): " << set.num_extend_elem_props() << std::endl; +// set.get_extend_elem_prop_row(2); +// out << "set.elem_prop_keys(): " << set.elem_prop_keys() << std::endl; +// set.set_extend_elem_prop_row(ext_prop_row_maps[0],6); +// set.add_extend_elem_props(set2); +// set.resize(9,561,0); +// out << "set.prop_index(PROP_3): " << set.prop_index(PROP_3) << std::endl; +// set.push_back(objects[6][8]); +// out << "\n\n-------------------------------------\n 145 MODFICATIONS \n-------------------------------------\n\n" << set << "\n\n"; +// set.insert(objects[6][0],5); +// set.add_extend_elem_props(set2); +// set.push_back(objects[6][7]); +// out << "set.num_props(): " << set.num_props() << std::endl; +// set.prop_key(7); +// set.push_back(objects[6][1], ext_prop_row_maps[4]); +// out << "\n\n-------------------------------------\n 150 MODFICATIONS \n-------------------------------------\n\n" << set << "\n\n"; +// out << "set.elem_prop_keys(): " << set.elem_prop_keys() << std::endl; +// out << "set.has_elem_prop(ELEM_PROP_10): " << set.has_elem_prop(ELEM_PROP_10) << std::endl; +// out << "set.vsize(): " << set.vsize() << std::endl; +// set.resize(5,969,0); +// out << "set.has_prop(PROP_8): " << set.has_prop(PROP_8) << std::endl; +// set.elem_resize(2,367); +// set.add_prop(PROP_2,692); +// set.add_prop(PROP_8,147); +// set.resize(8,245,0); +// out << "\n\n-------------------------------------\n 155 MODFICATIONS \n-------------------------------------\n\n" << set << "\n\n"; +// out << "set.get_extend_elem_prop(EXT_ELEM_PROP_5,3): " << set.get_extend_elem_prop(EXT_ELEM_PROP_5,3) << std::endl; +// set.prop_key(6); +// set.remove_extend_elem_prop(EXT_ELEM_PROP_8); +// set.add_extend_elem_props(set2); +// set.get_extend_elem_prop_row(5); +// set.set_extend_elem_prop(EXT_ELEM_PROP_2,"640",0); +// out << "\n\n-------------------------------------\n 160 MODFICATIONS \n-------------------------------------\n\n" << set << "\n\n"; +// out << "set.num_props(): " << set.num_props() << std::endl; +// set.free_elem_degree(); +// set.get_extend_elem_prop_row(0); +// out << "set.has_extend_elem_prop(EXT_ELEM_PROP_9): " << set.has_extend_elem_prop(EXT_ELEM_PROP_9) << std::endl; +// out << "set.elem_prop_keys(): " << set.elem_prop_keys() << std::endl; +// out << "set.prop_keys(): " << set.prop_keys() << std::endl; +// set.remove_extend_elem_prop(EXT_ELEM_PROP_2); +// out << "set.prop(PROP_9): " << set.prop(PROP_9) << std::endl; +// out << "set.size(): " << set.size() << std::endl; +// set.free_elem_degree(); +// set.freeze_elem_degree(); +// out << "\n\n-------------------------------------\n 165 MODFICATIONS \n-------------------------------------\n\n" << set << "\n\n"; +// elem_props = set.get_elem_prop_header(); recreate_elem_prop_objects(elem_props,objects,prop_row_maps,prop_rows); +// set.freeze_elem_degree(); +// elem_props = set.get_elem_prop_header(); recreate_elem_prop_objects(elem_props,objects,prop_row_maps,prop_rows); +// set.remove_extend_elem_prop(EXT_ELEM_PROP_6); +// set.remove_prop(PROP_9); +// set.push_back(objects[2][6]); +// set.remove_prop(PROP_8); +// out << "\n\n-------------------------------------\n 170 MODFICATIONS \n-------------------------------------\n\n" << set << "\n\n"; +// set.resize(1,823,0); +// out << "set.num_props(): " << set.num_props() << std::endl; +// set.elem_resize(1,218); +// set.prop_key(4); +// out << "set.size(): " << set.size() << std::endl; +// set.copy_extend_elem_prop_row(set2,4,0); +// out << "set.prop_index(PROP_3): " << set.prop_index(PROP_3) << std::endl; +// out << "set.get_extend_elem_prop_header(): " << set.get_extend_elem_prop_header() << std::endl; +// set.erase(0); +// out << "\n\n-------------------------------------\n 175 MODFICATIONS \n-------------------------------------\n\n" << set << "\n\n"; +// set.remove_extend_elem_prop(EXT_ELEM_PROP_7); +// out << "set.num_extend_elem_props(): " << set.num_extend_elem_props() << std::endl; +// set.elem_resize(2,672); +// set.prop_key(0); +// set.prop_key(2); +// set.elem_resize(4,946); +// out << "\n\n-------------------------------------\n 180 MODFICATIONS \n-------------------------------------\n\n" << set << "\n\n"; +// out << "set.bsize(): " << set.bsize() << std::endl; +// set.prop_key(7); +// out << "set.elem_prop_keys(): " << set.elem_prop_keys() << std::endl; +// out << "set.bsize(): " << set.bsize() << std::endl; +// set.remove_extend_elem_prop(EXT_ELEM_PROP_4); +// out << "set.size(): " << set.size() << std::endl; +// out << "set.prop_keys(): " << set.prop_keys() << std::endl; +// out << "set.elem_prop_keys(): " << set.elem_prop_keys() << std::endl; +// set.add_prop(PROP_8,859); +// set.add_prop(PROP_9,835); +// out << "set.prop_keys(): " << set.prop_keys() << std::endl; +// set.add_extend_elem_prop(EXT_ELEM_PROP_10,"-99"); +// out << "\n\n-------------------------------------\n 185 MODFICATIONS \n-------------------------------------\n\n" << set << "\n\n"; +// out << "set.has_prop(PROP_9): " << set.has_prop(PROP_9) << std::endl; +// out << "set.get_extend_elem_prop_header(): " << set.get_extend_elem_prop_header() << std::endl; +// out << "set.has_prop(PROP_2): " << set.has_prop(PROP_2) << std::endl; +// out << "set.has_extend_elem_prop(EXT_ELEM_PROP_8): " << set.has_extend_elem_prop(EXT_ELEM_PROP_8) << std::endl; +// out << "set.has_extend_elem_prop(EXT_ELEM_PROP_3): " << set.has_extend_elem_prop(EXT_ELEM_PROP_3) << std::endl; +// out << "set.num_extend_elem_props(): " << set.num_extend_elem_props() << std::endl; +// out << "set.bsize(): " << set.bsize() << std::endl; +// set.freeze_elem_degree(); +// elem_props = set.get_elem_prop_header(); recreate_elem_prop_objects(elem_props,objects,prop_row_maps,prop_rows); +// set.resize(9,576,0); +// set.insert(objects[4][4],1); +// set.add_extend_elem_prop(EXT_ELEM_PROP_7,"-99"); +// out << "set.get_extend_elem_prop(EXT_ELEM_PROP_9,6): " << set.get_extend_elem_prop(EXT_ELEM_PROP_9,6) << std::endl; +// set.set_extend_elem_prop_row(ext_prop_row_maps[6],8); +// out << "\n\n-------------------------------------\n 190 MODFICATIONS \n-------------------------------------\n\n" << set << "\n\n"; +// set.remove_prop(PROP_6); +// set.set_extend_elem_prop(EXT_ELEM_PROP_7,"493",2); +// set.elem_resize(9,337); +// set.add_prop(PROP_6,153); +// out << "set.bsize(): " << set.bsize() << std::endl; +// out << "set.prop_keys(): " << set.prop_keys() << std::endl; +// set.free_elem_degree(); +// out << "\n\n-------------------------------------\n 195 MODFICATIONS \n-------------------------------------\n\n" << set << "\n\n"; +// out << "set.num_extend_elem_props(): " << set.num_extend_elem_props() << std::endl; +// out << "set.prop_index(PROP_3): " << set.prop_index(PROP_3) << std::endl; +// set.add_extend_elem_props(set2); +// set.erase(4); +// set.add_extend_elem_prop(EXT_ELEM_PROP_1,"-99"); +// out << "set.get_extend_elem_prop(EXT_ELEM_PROP_5,4): " << set.get_extend_elem_prop(EXT_ELEM_PROP_5,4) << std::endl; +// out << "set.prop_index(PROP_10): " << set.prop_index(PROP_10) << std::endl; +// set.erase(8); +// set.set_extend_elem_prop_row(ext_prop_row_maps[0],2); +// out << "\n\n-------------------------------------\n 200 MODFICATIONS \n-------------------------------------\n\n" << set << "\n\n"; +// out << "set.num_props(): " << set.num_props() << std::endl; +// out << "set.size(): " << set.size() << std::endl; +// out << "set.has_extend_elem_prop(EXT_ELEM_PROP_2): " << set.has_extend_elem_prop(EXT_ELEM_PROP_2) << std::endl; +// out << "set.has_extend_elem_prop(EXT_ELEM_PROP_1): " << set.has_extend_elem_prop(EXT_ELEM_PROP_1) << std::endl; +// out << "set.get_extend_elem_prop(EXT_ELEM_PROP_9,3): " << set.get_extend_elem_prop(EXT_ELEM_PROP_9,3) << std::endl; +// set.freeze_elem_degree(); +// elem_props = set.get_elem_prop_header(); recreate_elem_prop_objects(elem_props,objects,prop_row_maps,prop_rows); +// out << "set.get_extend_elem_prop_header(): " << set.get_extend_elem_prop_header() << std::endl; +// set.freeze_elem_degree(); +// elem_props = set.get_elem_prop_header(); recreate_elem_prop_objects(elem_props,objects,prop_row_maps,prop_rows); +// out << "set.has_prop(PROP_2): " << set.has_prop(PROP_2) << std::endl; +// out << "set.num_elem_props(): " << set.num_elem_props() << std::endl; +// out << "set.has_prop(PROP_1): " << set.has_prop(PROP_1) << std::endl; +// set.copy_extend_elem_prop_row(set2,0,1); +// out << "set.num_extend_elem_props(): " << set.num_extend_elem_props() << std::endl; +// out << "set.get_extend_elem_prop_header(): " << set.get_extend_elem_prop_header() << std::endl; +// set.get_extend_elem_prop_row(6); +// out << "set.num_props(): " << set.num_props() << std::endl; +// out << "set.elem_prop_keys(): " << set.elem_prop_keys() << std::endl; +// out << "set.num_elem_props(): " << set.num_elem_props() << std::endl; +// set.add_extend_elem_props(set2); +// out << "\n\n-------------------------------------\n 205 MODFICATIONS \n-------------------------------------\n\n" << set << "\n\n"; +// set.elem_resize(2,89); +// set.push_back(objects[2][6], ext_prop_row_maps[3]); +// set.elem_resize(5,359); +// set.free_elem_degree(); +// out << "set.num_elem_props(): " << set.num_elem_props() << std::endl; +// set.remove_extend_elem_prop(EXT_ELEM_PROP_10); +// out << "\n\n-------------------------------------\n 210 MODFICATIONS \n-------------------------------------\n\n" << set << "\n\n"; +// out << "set.bsize(): " << set.bsize() << std::endl; +// out << "set.vsize(): " << set.vsize() << std::endl; +// out << "set.has_extend_elem_prop(EXT_ELEM_PROP_1): " << set.has_extend_elem_prop(EXT_ELEM_PROP_1) << std::endl; +// out << "set.num_extend_elem_props(): " << set.num_extend_elem_props() << std::endl; +// out << "set.prop_index(PROP_7): " << set.prop_index(PROP_7) << std::endl; +// out << "set.num_extend_elem_props(): " << set.num_extend_elem_props() << std::endl; +// set.insert(objects[6][7],5); +// out << "set.num_elem_props(): " << set.num_elem_props() << std::endl; +// set.set_extend_elem_prop_row(ext_prop_row_maps[3],0); +// set.add_extend_elem_prop(EXT_ELEM_PROP_6,"-99"); +// set.remove_prop(PROP_4); +// out << "set.num_extend_elem_props(): " << set.num_extend_elem_props() << std::endl; +// set.add_extend_elem_props(set2); +// out << "\n\n-------------------------------------\n 215 MODFICATIONS \n-------------------------------------\n\n" << set << "\n\n"; +// out << "set.num_elem_props(): " << set.num_elem_props() << std::endl; +// set.add_extend_elem_prop(EXT_ELEM_PROP_5,"-99"); +// set.remove_prop(PROP_7); +// set.add_extend_elem_props(set2); +// set.elem_resize(5,955); +// set.resize(4,369,0); +// out << "\n\n-------------------------------------\n 220 MODFICATIONS \n-------------------------------------\n\n" << set << "\n\n"; +// set.add_prop(PROP_4,364); +// set.freeze_elem_degree(); +// elem_props = set.get_elem_prop_header(); recreate_elem_prop_objects(elem_props,objects,prop_row_maps,prop_rows); +// set.add_prop(PROP_7,495); +// set.free_elem_degree(); +// out << "set.size(): " << set.size() << std::endl; +// set.push_back(objects[6][6]); +// out << "\n\n-------------------------------------\n 225 MODFICATIONS \n-------------------------------------\n\n" << set << "\n\n"; +// out << "set.size(): " << set.size() << std::endl; +// set.free_elem_degree(); +// out << "set.vsize(): " << set.vsize() << std::endl; +// out << "set.get_extend_elem_prop(EXT_ELEM_PROP_5,3): " << set.get_extend_elem_prop(EXT_ELEM_PROP_5,3) << std::endl; +// set.append_extend_elem_props(set2); +// out << "set.prop_keys(): " << set.prop_keys() << std::endl; +// set.push_back(objects[0][4]); +// set.add_extend_elem_props(set2); +// out << "set.bsize(): " << set.bsize() << std::endl; +// out << "set.get_extend_elem_prop_header(): " << set.get_extend_elem_prop_header() << std::endl; +// out << "set.prop(PROP_10): " << set.prop(PROP_10) << std::endl; +// set.copy_extend_elem_prop_row(set2,3,4); +// out << "\n\n-------------------------------------\n 230 MODFICATIONS \n-------------------------------------\n\n" << set << "\n\n"; +// set.get_extend_elem_prop_row(1); +// out << "set.prop_index(PROP_10): " << set.prop_index(PROP_10) << std::endl; +// out << "set.has_elem_prop(ELEM_PROP_8): " << set.has_elem_prop(ELEM_PROP_8) << std::endl; +// set.set_extend_elem_prop(EXT_ELEM_PROP_10,"898",1); +// out << "set.bsize(): " << set.bsize() << std::endl; +// out << "set.bsize(): " << set.bsize() << std::endl; +// set.get_extend_elem_prop_row(1); + + + out << std::endl << std::endl << "-------------------------------------" << std::endl; + out << " FINAL PRINT " << std::endl; + out << "-------------------------------------\n" << std::endl; + + out << set << std::endl; + + std::cout << "Ran cpp test successfully" << std::endl; + + +} diff --git a/cmd/subdiv_strands.cpp b/cmd/subdiv_strands.cpp new file mode 100644 index 0000000..f889f0e --- /dev/null +++ b/cmd/subdiv_strands.cpp @@ -0,0 +1,173 @@ +/* + Copyright 2009 Brain Research Institute, Melbourne, Australia + + Created by Tom Close on 13/03/09. + + This file is part of Bayesian Tractlet Sampling (BTS). + + BTS is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + BTS is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with BTS. If not, see . + + */ + +#include "bts/cmd.h" + +#include "progressbar.h" + +#include "bts/common.h" + +#include "bts/fibre/track.h" +#include "bts/fibre/strand.h" +#include "bts/fibre/track/set.h" + + + + + +#include "bts/inline_functions.h" + +#include "phantom/subdiv/subdiv.h" + + +#include "phantom/interface.h" + + + +using namespace BTS; + +SET_VERSION_DEFAULT; +SET_AUTHOR ("Thomas G. Close"); +SET_COPYRIGHT (NULL); + +DESCRIPTION = { + "Subdivides thicker strands into more thinner strands", + "", + NULL +}; + +ARGUMENTS = { + Argument ("input", "The paths to be subdivided.").type_file (), + Argument ("output", "The subdivided paths.").optional().type_file(), + Argument() +}; + + +OPTIONS = { + Option ("num_points", "The number of points that will be generated along the strand location") + + Argument ("num_points", "").type_integer (1, 100, 2000), + + Option ("old_strand_r", "The old radius of the strands") + + Argument ("old_strand_r", "").type_float (SMALL_FLOAT, 1.0, LARGE_FLOAT), + + Option ("strands_per_acs", "Instead of specifying the radius of the subdivided strands, the strands per area can be specified instead.") + + Argument ("strands_per_acs", "").type_float (-1.0, -1.0, LARGE_FLOAT), + + Option ("new_strand_r", "The new radius of the strands") + + Argument ("new_strand_r", "").type_float (SMALL_FLOAT, 1.0, LARGE_FLOAT), + + Option ("degree", "DegreeVector of the output strands if converting from track to strand") + + Argument ("degree", "").type_integer (1, 100, 2000), + + +Option() }; + + +EXECUTE { + + std::string input_location = argument[0]; + std::string output_location; + + if (argument.size() > 1) + output_location = argument[1].c_str(); + else + output_location = input_location; + + + size_t num_points = 0; + size_t degree = 0; + double old_strand_r = 1.0; + double new_strand_r = 1.0; + double strands_per_acs = -1.0; + + Options opt = get_options("num_points"); + if (opt.size()) + num_points = opt[0][0]; + + opt = get_options("old_strand_r"); + if (opt.size()) + old_strand_r = opt[0][0]; + + opt = get_options("new_strand_r"); + if (opt.size()) + new_strand_r = opt[0][0]; + + opt = get_options("strands_per_acs"); + if (opt.size()) { + if (get_options("new_strand_r").size()) + throw Exception ("'-strands_per_acs' option cannot be used in conjunction with '-new_strand_r' option."); + + strands_per_acs = opt[0][0]; + + } + + opt = get_options("degree"); + if (opt.size()) + degree = opt[0][0]; + + + if (strands_per_acs > 0) + new_strand_r = old_strand_r / MR::Math::sqrt(strands_per_acs); + + + BTS::Fibre::Track::Set tcks(input_location, num_points); + BTS::Fibre::Track::Set subdivided_tcks(tcks.get_extend_props()); + + std::vector > pre_points; + std::vector > post_points; + + Strand_collection c, subdivided_c; + + generate_pre_points(tcks, pre_points); + + generate_post_points(tcks, post_points); + + MR::ProgressBar progress_bar ("Subdividing strands...", 0); + + tcks.add_extend_elem_prop(BTS::Fibre::Track::RADIUS_PROP, str(old_strand_r)); + + convert_mr_to_nfg(&c, tcks, pre_points, post_points); + progress_bar++; + + subdivide_collection(&subdivided_c, &c, new_strand_r); + + progress_bar++; + convert_nfg_to_mr(subdivided_tcks, pre_points, post_points, &subdivided_c); + + if (tcks.has_extend_elem_prop(BTS::Fibre::Track::Set::ORIGINAL_DEGREE_PROP)) { + + subdivided_tcks.add_extend_elem_prop(BTS::Fibre::Track::Set::ORIGINAL_DEGREE_PROP, str(BTS::Fibre::Strand::DEFAULT_DEGREE)); + + for (size_t tck_i = 0; tck_i < tcks.size(); ++tck_i) { + + size_t bundle_index = to(subdivided_tcks.get_extend_elem_prop(BTS::Fibre::Track::BUNDLE_INDEX_EPROP, tck_i)); + std::string original_degree = tcks.get_extend_elem_prop(BTS::Fibre::Track::Set::ORIGINAL_DEGREE_PROP, bundle_index); + subdivided_tcks.set_extend_elem_prop(BTS::Fibre::Track::Set::ORIGINAL_DEGREE_PROP, original_degree, tck_i); + + } + } + + progress_bar++; + subdivided_tcks.save(output_location, degree); + + //MR::ProgressBar::done(); +} diff --git a/cmd/subtract_fibres.cpp b/cmd/subtract_fibres.cpp new file mode 100644 index 0000000..8f966cb --- /dev/null +++ b/cmd/subtract_fibres.cpp @@ -0,0 +1,175 @@ +/* + Copyright 2009 Brain Research Institute, Melbourne, Australia + + Created by Tom Close on 13/03/09. + + This file is part of Bayesian Tractlet Sampling (BTS). + + BTS is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + BTS is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with BTS. If not, see . + + */ + +#include "bts/common.h" + +#include "bts/cmd.h" +#include "progressbar.h" + +#include "bts/fibre/strand/set.h" +#include "bts/fibre/tractlet/set.h" +#include "bts/fibre/track/set.h" + + +#include "bts/inline_functions.h" + + +using namespace BTS; + +SET_VERSION_DEFAULT; +SET_AUTHOR ("Thomas G. Close"); +SET_COPYRIGHT (NULL); + +DESCRIPTION = { + "Trims paths to a sphere of specified radius.", + "The sections of paths that lie outside the radius of the sphere are removed and sections that reenter are split into new paths.", + NULL +}; + +ARGUMENTS = { + Argument ("input", "The fibres to be subtracted from.").type_file (), + Argument ("subtract", "The fibres to subtract.").type_file (), + Argument ("output", "The resultant fibres.").optional().type_file(), + Argument() +}; + + +OPTIONS = { + + Option ("no_acs", "Don't acs in the subtraction."), + + +Option() }; + + + +EXECUTE { + + + std::string input_location = argument[0]; + std::string subtract_location = argument[1]; + std::string output_location; + + if (argument.size() > 2) + output_location = argument[2].c_str(); + else + output_location = input_location; + + if (File::extension(input_location) != File::extension(subtract_location)) + throw Exception ("Extensions of input files do not match ('" + File::extension(input_location) + "' and '" + File::extension(input_location) + "')."); + + + + if (File::has_extension(input_location)) { + + MR::ProgressBar progress_bar("Subtracting strands..."); + + BTS::Fibre::Strand::Set input(input_location); + BTS::Fibre::Strand::Set subtract(subtract_location); + + if (input.size() != subtract.size()) + throw Exception ("Number of points don't match."); + + double base_intensity = input.base_intensity(); + + for (size_t tck_i = 0; tck_i < input.size(); tck_i++) { + + if (input[tck_i].degree() != subtract[tck_i].degree()) + throw Exception ("Degrees don't match."); + + double acs = input[tck_i].acs(); + + input[tck_i] -= subtract[tck_i]; + + input[tck_i].set_acs(acs); + + + } + + input.set_base_intensity(base_intensity); + + input.save(output_location); + + } else if (File::has_extension(input_location)) { + + MR::ProgressBar progress_bar("Subtracting tractlets..."); + + BTS::Fibre::Tractlet::Set input(input_location); + BTS::Fibre::Tractlet::Set subtract(subtract_location); + + if (input.size() != subtract.size()) + throw Exception ("Number of points don't match."); + + double base_intensity = input.base_intensity(); + + + for (size_t tck_i = 0; tck_i < input.size(); tck_i++) { + + if (input[tck_i].degree() != subtract[tck_i].degree()) + throw Exception ("Degrees don't match."); + + double acs = input[tck_i].acs(); + + input[tck_i] -= subtract[tck_i]; + + input[tck_i].set_acs(acs); + + } + + input.set_base_intensity(base_intensity); + + + input.save(output_location); + + } else if (File::has_extension(input_location)) { + + MR::ProgressBar progress_bar("Subtracting tracks..."); + + BTS::Fibre::Track::Set input(input_location); + BTS::Fibre::Track::Set subtract(subtract_location); + + double base_intensity = input.base_intensity(); + + + if (input.size() != subtract.size()) + throw Exception ("Number of points don't match."); + + for (size_t tck_i = 0; tck_i < input.size(); tck_i++) { + + if (input[tck_i].num_points() != subtract[tck_i].num_points()) + throw Exception ("Number of points don't match."); + + input[tck_i] -= subtract[tck_i]; + + } + + input.set_base_intensity(base_intensity); + + + input.save(output_location); + + + } else + throw Exception ("Unrecognised extension ('" + File::extension(input_location)); + + +} diff --git a/cmd/subtract_images.cpp b/cmd/subtract_images.cpp new file mode 100644 index 0000000..138ae1f --- /dev/null +++ b/cmd/subtract_images.cpp @@ -0,0 +1,96 @@ +/* + Copyright 2009 Brain Research Institute, Melbourne, Australia + + Created by Tom Close on 13/03/09. + + This file is part of Bayesian Tractlet Sampling (BTS). + + BTS is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + BTS is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with BTS. If not, see . + + */ + + + + +#include "bts/cmd.h" +#include "progressbar.h" + +#include "bts/common.h" +#include "bts/image/expected/buffer.h" +#include "bts/image/observed/buffer.h" + + + + +#include "bts/inline_functions.h" + + +using namespace BTS; + +SET_VERSION_DEFAULT; +SET_AUTHOR ("Thomas G. Close"); +SET_COPYRIGHT (NULL); + +DESCRIPTION = { + "Subtractlets one image from another", + "", + NULL +}; + +ARGUMENTS = { + Argument ("initial", "The initial image the second image will be subtracted from.").type_image_in(), + + Argument ("subtract", "The image that will be subtracted from the initial image.").type_image_in(), + + Argument ("output_image", "The resulting image").type_image_out (), + + Argument() +}; + + +OPTIONS = { + +Option() + +}; + + + +EXECUTE { + + +//------------------------------// +// Load Input Image Buffer // +//------------------------------// + + + std::string image_location = argument[0]; + std::string subtract_image_location = argument[1]; + std::string output_location = argument[2]; + + Image::Observed::Buffer image(image_location); + Image::Observed::Buffer subtract_image (subtract_image_location); + + image -= subtract_image; + + image.save(output_location); + + +} + + + + + + diff --git a/cmd/summarise_strands.cpp b/cmd/summarise_strands.cpp new file mode 100644 index 0000000..20d8289 --- /dev/null +++ b/cmd/summarise_strands.cpp @@ -0,0 +1,193 @@ +/* + Copyright 2009 Brain Research Institute, Melbourne, Australia + + Written by Thomas G. Close, 04/03/2009. + + This file is part of Bayesian Tractlet Sampling (BTS). + + BTS is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + BTS is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with BTS. If not, see . + + */ + +#include "bts/cmd.h" +// + +#include "progressbar.h" + +#include "bts/common.h" + +#include "bts/fibre/strand.h" +#include "bts/fibre/strand/set.h" + + +#include "bts/inline_functions.h" + + +using namespace BTS; + +SET_VERSION_DEFAULT; +SET_AUTHOR ("Thomas G. Close"); +SET_COPYRIGHT (NULL); + +DESCRIPTION = { + "Extractlets salient features from a set of Strand descriptors", + "Features are extractleted from the strand descriptor representation of a collection of strands. These features can then be compared with priors on these features.", + NULL +}; + +ARGUMENTS = { + Argument ("input", "The strand coefficients to be analyzed.").allow_multiple().type_file (), + Argument ("output", "output directory where the feature files will be written").type_file(), + Argument() +}; + + +OPTIONS = { + + Option ("all", "Saves all the features. Overrides all other flags"), + + Option ("v0_norm", "Save the norm of the v0 vector"), + + Option ("v1_norm", "Save the norm of the v1 vector"), + + Option ("v2_norm", "Save the norm of the v2 vector"), + + Option ("dot_v1_v2", "Save the dot product of the v1 and v2 vectors"), + + Option ("angle_v1_v2", "Save the angle between the v1 and v2 vectors"), + + Option ("dot_v0_v1", "Save the dot product of the v0 and v1 vectors"), + + Option ("degree", "The degree of the Strand coefficients used to describe the strands") + + Argument ("degree", "").type_integer (1, 3, 200), + + +Option() }; + + + +EXECUTE { + + std::string input_location = argument[0]; + std::string output_dir = argument[1]; + + bool save_all = get_options("save_all").size(); + bool save_v0_norm = get_options("save_v0_norm").size() || save_all; + bool save_v1_norm = get_options("save_v1_norm").size() || save_all; + bool save_v2_norm = get_options("save_v2_norm").size() || save_all; + bool save_dot_v1_v2 = get_options("save_dot_v1_v2").size() || save_all; + bool save_angle_v1_v2 = get_options("save_angle_v1_v2").size() || save_all; + bool save_dot_v0_v1 = get_options("save_dot_v0_v1").size() || save_all; + size_t degree = 0; + + Options opt = get_options("degree"); + if (opt.size()) + degree = opt[0][0]; + + Fibre::Strand::Set strands (input_location, degree); + + int count = 0; + + if (!(save_all || save_v0_norm || save_v1_norm || save_v2_norm || save_dot_v0_v1 || save_dot_v1_v2 || save_angle_v1_v2)) + throw Exception("No options supplied, please select a feature to save"); + + + std::ofstream v0_norm_out, v1_norm_out, v2_norm_out, dot_v1_v2_out, angle_v1_v2_out, dot_v0_v1_out; + + + if (save_v0_norm) + v0_norm_out.open ((output_dir + "/v0_norm.txt").c_str(), std::ios::out); + + if (save_v1_norm) + v1_norm_out.open ((output_dir + "/v1_norm.txt").c_str(), std::ios::out); + + if (save_v2_norm) + v2_norm_out.open ((output_dir + "/v2_norm.txt").c_str(), std::ios::out); + + if (save_dot_v1_v2) + dot_v1_v2_out.open ((output_dir + "/dot_v1_v2.txt").c_str(), std::ios::out); + + if (save_angle_v1_v2) + angle_v1_v2_out.open ((output_dir + "/angle_v1_v2.txt").c_str(), std::ios::out); + + if (save_dot_v0_v1) + dot_v0_v1_out.open ((output_dir + "/dot_v0_v1.txt").c_str(), std::ios::out ); + + + + MR::ProgressBar progress_bar ("extractleting features from strand descriptors...", strands.size()); + + for (size_t strand_i = 0; strand_i < strands.size(); ++strand_i) { + + Fibre::Strand strand = strands[strand_i]; + + Coord v0 = strand[0]; + Coord v1 = strand[1]; + Coord v2 = strand[2]; + + double v0_norm = v0.norm(); + double v1_norm = v1.norm(); + double v2_norm = v2.norm(); + double dot_v1_v2 = v1.dot(v2) / (v1_norm * v2_norm); + double dot_v0_v1 = v0.dot(v1) / (v1_norm * v0_norm); + + + if (save_v0_norm) + v0_norm_out << v0_norm << std::endl; + + + if (save_v1_norm) + v1_norm_out << v1_norm << std::endl; + + + if (save_v2_norm) + v2_norm_out << v2_norm << std::endl; + + + if (save_dot_v1_v2) + dot_v1_v2_out << dot_v1_v2 << std::endl; + + + if (save_angle_v1_v2) + angle_v1_v2_out << acos(dot_v1_v2) * 180 / M_PI << std::endl; + + + if (save_dot_v0_v1) + dot_v0_v1_out << dot_v0_v1 << std::endl; + + count++; + progress_bar++; + + } + + if (save_v0_norm) + v0_norm_out.close(); + + if (save_v1_norm) + v1_norm_out.close(); + + if (save_v2_norm) + v2_norm_out.close(); + + if (save_dot_v1_v2) + dot_v1_v2_out.close(); + + if (save_angle_v1_v2) + angle_v1_v2_out.close(); + + if (save_dot_v0_v1) + dot_v0_v1_out.close(); + + +} diff --git a/cmd/svd_fibres.cpp b/cmd/svd_fibres.cpp new file mode 100644 index 0000000..53a37eb --- /dev/null +++ b/cmd/svd_fibres.cpp @@ -0,0 +1,207 @@ +/* + Copyright 2008 Brain Research Institute, Melbourne, Australia + + Written by Thomas G Close, Jul 26, 2010. + + This file is part of MRtrix. + + MRtrix is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + MRtrix is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with MRtrix. If not, see . + +*/ + + +#include "bts/cmd.h" + +#include "bts/common.h" + +#include "bts/fibre/strand/set.h" +#include "bts/fibre/tractlet/set.h" + +#include "bts/file.h" + +#include "bts/math/svd.h" + + + +#include "bts/inline_functions.h" + +using namespace BTS; + + +template void svd_fibres(const std::string& input_location, const std::string& output_location, size_t max_num_components); + + +SET_VERSION_DEFAULT; +SET_AUTHOR ("Thomas G. Close"); +SET_COPYRIGHT (NULL); + + +DESCRIPTION = { + "svd_fibres", + "", + NULL +}; + +ARGUMENTS = { + Argument ("input location","").type_file (), + Argument ("output location","").type_file (), + Argument() +}; + + +OPTIONS = { + + Option("max_num_components","The number of principle components to be returned..") + + Argument("max_num_components","").type_integer(0,UINT_MAX,UINT_MAX), + +Option() }; + + +EXECUTE { + + + std::string input_location = argument[0]; + std::string output_location = argument[1]; + + size_t max_num_components = UINT_MAX; + + Options opt = get_options("max_num_components"); + if (opt.size()) + max_num_components = opt[0][0]; + + if (File::extension(input_location) != File::extension(output_location)) + throw Exception ("Input location ('" + File::extension(input_location) + "') does not match output location ('" + File::extension(output_location) + "')."); + + MR::ProgressBar progress_bar ("Performing SVD on fibres ..."); + + if (File::has_extension(input_location)) { + + svd_fibres(input_location, output_location, max_num_components); + + } else if (File::has_extension(input_location)) { + + svd_fibres(input_location, output_location, max_num_components); + + } else + throw Exception ("Unrecognised extension '" + File::extension(input_location) + "'."); + + +} + +template void svd_fibres(const std::string& input_location, const std::string& output_location, size_t max_num_components) { + + typename T::Reader reader(input_location); + + T input_fibres, output_fibres; + + size_t num_cols = 0; + + std::vector< MR::Math::Vector > input_vectors; + + while (reader.next(input_fibres)) { + + MR::Math::Vector& input_vector = input_fibres; + + if (!num_cols) //First one. + num_cols = input_vector.size(); + else if (num_cols != input_vector.size()) + throw Exception ("Inconsistent lengths (" + str(num_cols) + " and " + str(input_vector.size()) + ") found in input location."); + + input_vectors.push_back(input_vector); + + //Save the input_fibres structure so that the usv matrix can be converted back into the right format. + if (!output_fibres.size()) + output_fibres = input_fibres; + + } + + size_t num_rows = input_vectors.size(); + + MR::Math::Matrix M (num_rows, num_cols); + + for (size_t row_i = 0; row_i < num_rows; row_i++) + M.row(row_i) = input_vectors[row_i]; + + + Math::USV usv = Math::svd(M); + + std::vector ext_header; + ext_header.push_back("singular_value"); + + std::map file_props; + file_props["method"] = "svd_fibres"; + + typename T::Writer writer(output_location, reader, ext_header, file_props); + + size_t num_components = min2(max_num_components, num_cols); + + for (size_t comp_i = 0; comp_i < num_components; comp_i++) { + + output_fibres = usv.v.column(comp_i); + + output_fibres.set_extend_prop("singular_value", str(usv.sigma[comp_i])); + + writer.append(output_fibres); + + } + +} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/cmd/test_bed.cpp b/cmd/test_bed.cpp new file mode 100644 index 0000000..d279d30 --- /dev/null +++ b/cmd/test_bed.cpp @@ -0,0 +1,506 @@ +/* + Copyright 2009 Brain Research Institute, Melbourne, Australia + + Written by Thomas G. Close, 04/03/2009. + + This file is part of Bayesian Tractlet Sampling (BTS). + + BTS is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + BTS is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with BTS. If not, see . + +*/ + + +extern "C" { +#include +#include +} + + +#include "bts/cmd.h" + +#include "bts/common.h" + +#include "bts/math/common.h" + +#include "bts/prob/test/gaussian.h" +#include "bts/prob/test/landscape.h" +#include "bts/prob/test/landscape/peak.h" +#include "bts/prob/test/bayes_log_regression.h" +#include "bts/prob/uniform.h" +#include "bts/mcmc/proposal/distribution.h" +#include "bts/mcmc/proposal/distribution/gaussian.h" +#include "bts/mcmc/proposal/walker.h" +#include "bts/mcmc/proposal/momentum.h" + +#include "bts/fibre/strand/set.h" +#include "bts/fibre/tractlet/set.h" + +#include "bts/mcmc/metropolis.h" +#include "bts/mcmc/hamiltonian.h" +#include "bts/mcmc/riemannian.h" + +#include "bts/triple.h" + + +#include "bts/mcmc/state.h" +//#include "bts/mcmc/state/writer.h" +#include "bts/mcmc/state/tensor/writer.h" +#include "bts/utilities/reader.h" + +#include "bts/fibre/strand/set/momentum.h" +#include "bts/fibre/tractlet/set/momentum.h" + +#include "bts/inline_functions.h" + +#include "bts/diffusion/response.h" + + + +using namespace BTS; + +const char* STEP_LOCATION_DEFAULT = "/home/tclose/Code/Tractography/params/test_bed/scaling.tes"; + +SET_VERSION_DEFAULT; +SET_AUTHOR ("Thomas G. Close"); +SET_COPYRIGHT (NULL); + +DESCRIPTION = { + "dummy program", + "", + NULL +}; + +ARGUMENTS = { + Argument ("initial location", "The location of the initial state.").type_file (), + Argument ("samples location", "The location where the samples will be saved.").type_file (), + Argument() +}; + + +const char* ALGORITHM_TYPE_DEFAULT = "metropolis"; +const char* PROB_TYPE_DEFAULT = "Prob::Test::Gaussian"; +const double STEP_SCALE_DEFAULT = 0.1; +const size_t NUM_ITERATIONS_DEFAULT = 10; +const size_t SAMPLE_PERIOD_DEFAULT = 1e2; +const size_t NUM_LEAPFROG_STEPS_DEFAULT = 30; +const size_t NUM_NEWTON_STEPS_DEFAULT = 6; +const char* WALKER_STEP_LOCATION_DEFAULT = "/home/tclose/data/mcmc/metropolis/params/walker/scaling.sta"; +const char* MOMENTUM_STEP_LOCATION_DEFAULT = "/home/tclose/data/mcmc/hamiltonian/params/momentum/scaling.sta"; +const char* AXIS_SCALES_DEFAULT_LOCATION_DEFAULT = "/home/tclose/data/prob/test/gaussian/axis_scales.sta"; + +OPTIONS = { + + Option ("algorithm", "Select the algorithm to use (either 'metropolis', 'hamiltonian' at this stage).") + + Argument ("algorithm", "").type_text(), + + Option ("prob_type", "Select the probability object (either 'Prob::Test::Gaussian' or 'Prob::Test::Peaks' at this stage.") + + Argument ("prob_type", ""), + + Option ("num_samples", "The Number of MCMC iterations to take of the prob distribution over the tractlets") + + Argument ("num_samples", "").type_integer (1, NUM_ITERATIONS_DEFAULT, LARGE_INT), + + Option ("sample_period", "The number of MCMC iterations that will be performed before a sample is saved") + + Argument ("sample_period", "").type_integer (1, SAMPLE_PERIOD_DEFAULT, LARGE_INT), + + Option ("num_leapfrog_steps", "The number of leapfrog steps to be performed in the 'hamiltonian' and 'riemannian' algorithms.") + + Argument ("num_leapfrog_steps", "").type_integer (1, NUM_LEAPFROG_STEPS_DEFAULT, LARGE_INT), + + Option ("num_newton_steps", "The number of Newton steps that will be performed in calculating the non-separable Hamiltonian in the 'riemannian' algorithm.") + + Argument ("num_newton_steps", "").type_integer (1, NUM_NEWTON_STEPS_DEFAULT, LARGE_INT), + + Option ("seed", "The random seed that is passed to the random generator") + + Argument ("seed", ""), + + Option ("axis_scales_location", "Location of the file containing the scales of the Gaussian axes") + + Argument ("axis_scales_location", ""), + + Option ("blr_location", "Location of the Bayesian log regression data.") + + Argument ("blr_location", "").type_text (Prob::Test::BayesLogRegression::DATA_LOCATION_DEFAULT), + + Option ("blr_poly_order", "Order of the polynomials used in the Bayesian Log Regression.") + + Argument ("blr_poly_order", "").type_integer (1, Prob::Test::BayesLogRegression::POLY_ORDER_DEFAULT, LARGE_INT), + + Option ("blr_prior_variance", "Variance of the prior used in the Bayesian Log Regression") + + Argument ("blr_prior_variance", "").type_float (SMALL_FLOAT, Prob::Test::BayesLogRegression::PRIOR_VARIANCE_DEFAULT, LARGE_FLOAT), + + Option ("step_scale", "Overall step scale.") + + Argument ("step_scale", "").type_float (SMALL_FLOAT, STEP_SCALE_DEFAULT, LARGE_FLOAT), + + Option ("step_location", "Name of the file containing the relative scales of the step sizes.") + + Argument ("step_location", ""), + + Option ("save_iterations", "Save every iteration in seperate file (with '.iter' inserted before the extension)."), + + Option ("suppress_stdout", "Don't print probability to standard out."), + + PROPOSAL_DISTRIBUTION_PARAMETERS, + + PROPOSAL_MOMENTUM_PARAMETERS, + + COMMON_PARAMETERS, + +Option() }; + + + +EXECUTE { + + std::string initial_location = argument[0]; + std::string samples_location = argument[1]; + + Options opt; + + std::string algorithm_type = ALGORITHM_TYPE_DEFAULT; + std::string prob_type = PROB_TYPE_DEFAULT; + size_t num_samples = NUM_ITERATIONS_DEFAULT; + size_t sample_period = SAMPLE_PERIOD_DEFAULT; + size_t num_leapfrog_steps = NUM_LEAPFROG_STEPS_DEFAULT; + size_t num_newton_steps = NUM_NEWTON_STEPS_DEFAULT; + size_t seed = time(NULL); + std::string axis_scales_location = AXIS_SCALES_DEFAULT_LOCATION_DEFAULT; + std::string blr_location = Prob::Test::BayesLogRegression::DATA_LOCATION_DEFAULT; + size_t blr_poly_order = Prob::Test::BayesLogRegression::POLY_ORDER_DEFAULT; + float blr_prior_variance = Prob::Test::BayesLogRegression::PRIOR_VARIANCE_DEFAULT; + double step_scale = STEP_SCALE_DEFAULT; + std::string step_location; + + bool save_iterations = true; + bool suppress_print = false; + + + opt = get_options("algorithm"); + if (opt.size()) + algorithm_type = opt[0][0].c_str(); //.get_string() + + opt = get_options("prob_type"); + if (opt.size()) + prob_type = opt[0][0].c_str(); + + opt = get_options("num_samples"); + if (opt.size()) + num_samples = opt[0][0]; + + opt = get_options("sample_period"); + if (opt.size()) + sample_period = opt[0][0]; + + opt = get_options("num_leapfrog_steps"); + if (opt.size()) + num_leapfrog_steps = opt[0][0]; + + opt = get_options("num_newton_steps"); + if (opt.size()) + num_newton_steps = opt[0][0]; + + opt = get_options("seed"); + if (opt.size()) { + std::string seed_string = opt[0][0]; + seed = to(seed_string); + } else + std::cout << "No random seed supplied. Using timestamp: " << seed << std::endl; + + opt = get_options("axis_scales_location"); + if (opt.size()) + axis_scales_location = opt[0][0].c_str(); + + + opt = get_options("blr_location"); + if (opt.size()) + blr_location = opt[0][0].c_str(); + + opt = get_options("blr_poly_order"); + if (opt.size()) + blr_poly_order = opt[0][0]; + + opt = get_options("blr_prior_variance"); + if (opt.size()) + blr_prior_variance = opt[0][0]; + + opt = get_options("step_scale"); + if (opt.size()) + step_scale = opt[0][0]; + + opt = get_options("save_iterations"); + if (opt.size()) + save_iterations = true; + + opt = get_options("suppress_print"); + if (opt.size()) + suppress_print = true; + + if (algorithm_type == "metropolis") + step_location = WALKER_STEP_LOCATION_DEFAULT; + + else + step_location = MOMENTUM_STEP_LOCATION_DEFAULT; + + + opt = get_options("step_location"); + if (opt.size()) + step_location = opt[0][0].c_str(); + + + // Loads parameters to construct Proposal::Distribution (any variables with 'prop_' prefix) + SET_PROPOSAL_DISTRIBUTION_PARAMETERS; + + // Loads parameters to construct Proposal::Distribution ('prop_' prefix) + SET_PROPOSAL_MOMENTUM_PARAMETERS(initial_location); + + // Loads parameters to construct Prob::Test::Peaks (any variables with 'test_gen_' prefix) + SET_TEST_LANDSCAPE_PARAMETERS; + + // Loads parameters that are common to all commands. + SET_COMMON_PARAMETERS; + + + //-------------------------------------// + // Initialize random number generator // + //-------------------------------------// + + + gsl_rng* rand_gen = gsl_rng_alloc(gsl_rng_taus); + gsl_rng_set(rand_gen, seed); + + + //---------------------------// + // Initialise the test state // + //---------------------------// + + MCMC::State state(initial_location); + + //-----------------------------------// + // Initialize Proposal::Distribution // + //-----------------------------------// + + MCMC::Proposal::Distribution *proposal_distribution = MCMC::Proposal::Distribution::factory(prop_distr_type, rand_gen); + + MCMC::State step (step_location); + + step *= step_scale; + + MCMC::Proposal::Walker walker (proposal_distribution, step); + MCMC::Proposal::Momentum momentum (proposal_distribution, step); + + //----------------------------------------------// + // Initialize SampleWriter and its Properties // + //----------------------------------------------// + + + // Set the 'run-wide' properties. + std::map run_properties; + + run_properties["algorithm"] = algorithm_type; + run_properties["prob_type"] = prob_type; + run_properties["sample_period"] = str(sample_period); + run_properties["num_leapfrog_steps"] = str(num_leapfrog_steps); + run_properties["num_newton_steps"] = str(num_newton_steps); + run_properties["num_samples"] = str(num_samples); + run_properties["seed"] = str(seed); + run_properties["step"] = Math::matlab_str(step); + run_properties["step_scale"] = str(step_scale); + run_properties["step_location"] = step_location; + + + ADD_PROPOSAL_DISTRIBUTION_PROPERTIES(run_properties); + + ADD_TEST_LANDSCAPE_PROPERTIES(run_properties); + + ADD_COMMON_PROPERTIES(run_properties); + + //-------------------// + // Run the algorithm // + //-------------------// + + if (prob_type == "Prob::Test::Landscape") { + + Prob::Test::Landscape test_peaks(lnd_location); + + if (algorithm_type == "metropolis") { + +// MCMC::metropolis ( +// state, +// test_peaks, +// test_peaks, +// walker, +// samples_location, +// run_properties, +// num_samples * sample_period, +// sample_period, +// rand_gen, +// true, +// suppress_print +// ); + + throw Exception ("removed for debugging."); + + } else if (!strcmp(algorithm_type.c_str(), "hamiltonian")) { + + MCMC::hamiltonian ( + state, + test_peaks, + test_peaks, + momentum, + samples_location, + run_properties, + num_samples, + num_leapfrog_steps, + rand_gen, + true, + save_iterations, + suppress_print + ); + + } else + throw Exception ("Unrecognised value for '-algorithm' option \"" + algorithm_type + "\", can be either \"metropolis\" or \"hamiltonian\"."); + + if (!lnd_location.size()) + test_peaks.save(samples_location + ".lnd"); + + } else if (prob_type == "Prob::Test::Gaussian") { + + run_properties["axis_scales_location"] = str(axis_scales_location); + + MCMC::State axis_scale (axis_scales_location); + Prob::Test::Gaussian test_gaussian(axis_scale); + + if (algorithm_type == "metropolis") { + +// MCMC::metropolis ( +// state, +// test_gaussian, +// test_gaussian, +// walker, +// samples_location, +// run_properties, +// num_samples * sample_period, +// sample_period, +// rand_gen, +// true, +// suppress_print +// ); + + throw Exception(""); + + } else if (!strcmp(algorithm_type.c_str(), "hamiltonian")) { + + MCMC::hamiltonian ( + state, + test_gaussian, + test_gaussian, + momentum, + samples_location, + run_properties, + num_samples, + num_leapfrog_steps, + rand_gen, + true, + save_iterations, + suppress_print + ); + + } else if (!strcmp(algorithm_type.c_str(), "riemannian")) { + + + MCMC::Proposal::Momentum::Weighted::NonSeparable nonseparable_momentum = MCMC::Proposal::Momentum::Weighted::NonSeparable::factory( state, + momen_step_scale, + momen_step_location, + proposal_distribution, + num_newton_steps); + + Prob::Uniform uniform; + + MCMC::riemannian ( + state, + test_gaussian, + uniform, + nonseparable_momentum, + samples_location, + run_properties, + num_samples, + num_leapfrog_steps, + num_newton_steps, + rand_gen, + true, + save_iterations, + suppress_print + ); + + } else + throw Exception ("Unrecognised value for '-algorithm' option \"" + algorithm_type + "\", can be either 'metropolis', 'hamiltonian' or 'riemannian'."); + + } else if (prob_type == "Prob::Test::BayesLogRegression") { + + Prob::Test::BayesLogRegression bayes_log_regression (blr_location, blr_poly_order, blr_prior_variance); + + if (!strcmp(algorithm_type.c_str(), "riemannian")) { + + + MCMC::Proposal::Momentum::Weighted::NonSeparable nonseparable_momentum = MCMC::Proposal::Momentum::Weighted::NonSeparable::factory( state, + momen_step_scale, + momen_step_location, + proposal_distribution, + num_newton_steps); + Prob::Uniform uniform; + + MCMC::riemannian ( + state, + bayes_log_regression, + uniform, + nonseparable_momentum, + samples_location, + run_properties, + num_samples, + num_leapfrog_steps, + num_newton_steps, + rand_gen, + true, + save_iterations, + suppress_print + ); + + } else + throw Exception ("Unrecognised value for '-algorithm' option \"" + algorithm_type + "\", can only be 'riemannian'."); + + } else + throw Exception ("Unrecognised probability type " + prob_type + "', can be either 'Prob::Test::Landscape' or 'Prob::Test::Gaussian'."); + + + std::ofstream prop_file; + + prop_file.open((samples_location + ".prp").c_str()); + + for (std::map::iterator prop_it = run_properties.begin(); prop_it != run_properties.end(); ++prop_it) + prop_file << prop_it->first << ": " << prop_it->second << std::endl; + + prop_file.close(); + + + if (prob_type == "Prob::Test::Landscape") { + std::cout << "\n\nMATLAB plot command:\n\nplot_test_scan " << lnd_location << " -state_filename " << samples_location; + + if (algorithm_type == "metropolis") + std::cout << " -mark 0"; + + } else { + + std::cout << "\n\nMATLAB plot command:\n\nplot_test_bed " << samples_location; + + std::cout << std::endl << std::endl; + } + + + +} + + diff --git a/cmd/test_gradient.cpp b/cmd/test_gradient.cpp new file mode 100644 index 0000000..e60b7b2 --- /dev/null +++ b/cmd/test_gradient.cpp @@ -0,0 +1,1734 @@ +/* + Copyright 2010 Brain Research Institute/National ICT Australia (NICTA), Melbourne, Australia + + Written by Tom G. Close, 4/03/10. + + This file is part of Bayesian Tractlet Sampling (BTS). + + BTS is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + BTS is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with BTS. If not, see . + +*/ + + +#include "bts/cmd.h" + +#include "bts/common.h" + +#include "math/matrix.h" + +#include "bts/prob/likelihood.h" +#include "bts/prob/likelihood/gaussian.h" +#include "bts/prob/likelihood/one_sided_gaussian.h" +#include "bts/prob/test/gaussian.h" +#include "bts/prob/test/landscape.h" +#include "bts/prob/test/landscape/peak.h" +#include "bts/diffusion/encoding.h" + +#include "bts/analysis/gradient_tester.h" +#include "bts/analysis/image_gradient_tester.h" +#include "bts/analysis/hessian_tester.h" +#include "bts/analysis/image_hessian_tester.h" +#include "bts/analysis/rank3_hessian_tester.h" +#include "bts/analysis/fisher_gradient_tester.h" +#include "bts/analysis/fisher_gradient_matrix_tester.h" + +#include "bts/fibre/tractlet/set.h" +#include "bts/fibre/strand/set.h" + +#include "bts/diffusion/model.h" +#include "bts/image/expected/trilinear/buffer.h" +#include "bts/image/expected/gaussian/buffer.h" +#include "bts/image/expected/quartic/buffer.h" + +#include "bts/image/observed/buffer.h" + +#include "bts/prob/uniform.h" +#include "bts/prob/prior.h" + + + + + +#include "bts/prob/likelihood.h" +#include "bts/prob/likelihood.h" +#include "bts/prob/likelihood/one_sided_gaussian.h" +#include "bts/prob/likelihood/gaussian.h" + +#include "bts/mcmc/state.h" +#include "bts/utilities/reader.h" +#include "bts/mcmc/state/tensor.h" +#include "bts/mcmc/state/tensor/writer.h" + +#include "bts/fibre/strand/basic_section/tensor.h" +#include "bts/fibre/tractlet/section/tensor.h" +#include "bts/math/common.h" + +#include "bts/fibre/base/tensor_writer.cpp.h" + + +#include "bts/inline_functions.h" + +#define TEST_GRADIENT(State, Object, function, object_instance) \ + State state; \ +\ + State::Reader reader(state_location); \ + State::Writer analytic_writer (analytic_output_location, reader, properties), numeric_writer (numeric_output_location, reader, properties); \ +\ + Analysis::GradientTester grad_tester (object_instance); \ + Analysis::GradientTester::Function test_function; \ +\ + test_function = &Object::function; \ +\ + while (reader.next(state)) { \ + State analytic_gradient(state), numeric_gradient(state); \ +\ + grad_tester.test(test_function, state, step_size, analytic_gradient, numeric_gradient); \ +\ + analytic_writer.append(analytic_gradient); \ + numeric_writer.append(numeric_gradient); \ +\ + } \ +\ + reader.close(); \ + analytic_writer.close(); \ + numeric_writer.close(); \ + + +#define TEST_ELEMENT_GRADIENT(State, Object, function, object_instance) \ + State state; \ +\ + State::Reader reader(state_location); \ + State::Writer analytic_writer (analytic_output_location, reader, properties), numeric_writer (numeric_output_location, reader, properties); \ +\ + Analysis::GradientTester grad_tester (object_instance); \ + Analysis::GradientTester::Function test_function; \ +\ + test_function = &Object::function; \ +\ + while (reader.next(state)) { \ + State analytic_gradient(state.size(), numeric_gradient(state.size()); \ +\ +\ for (size_t elem_i = 0; elem_i < state.size(); elem_i++) { \ + grad_tester.test(test_function, state[elem_i], step_size, analytic_gradient[elem_i], numeric_gradient[elem_i]); \ + } \ +\ + analytic_writer.append(analytic_gradient); \ + numeric_writer.append(numeric_gradient); \ +\ + } \ +\ + reader.close(); \ + analytic_writer.close(); \ + numeric_writer.close(); \ + + +#define TEST_SINGLE_GRADIENT(State, Object, function, object_instance) \ +\ + State state (state_location); \ + State analytic_gradient(state), numeric_gradient(state); \ +\ + Analysis::GradientTester grad_tester (object_instance); \ + Analysis::GradientTester::Function test_function; \ +\ + test_function = &Object::function; \ +\ + grad_tester.test(test_function, state, step_size, analytic_gradient, numeric_gradient); \ +\ + analytic_gradient.save(analytic_output_location, properties); \ + numeric_gradient.save(numeric_output_location, properties); \ + + +#define TEST_IMAGE_GRADIENT(State, Object, function, object_instance) \ + State state; \ +\ + State::Reader reader(state_location); \ + State::Writer analytic_writer (analytic_output_location, reader, properties), numeric_writer (numeric_output_location, reader, properties); \ +\ + Analysis::ImageGradientTester grad_tester (object_instance); \ + Analysis::ImageGradientTester::Function test_function; \ +\ + test_function = &Object::function; \ +\ + while (reader.next(state)) { \ +\ + object_instance.zero(); \ +\ + Image::Container::Buffer analytic_gradient(img_dims, object_instance.num_encodings()); \ + Image::Container::Buffer numeric_gradient(img_dims, object_instance.num_encodings()); \ +\ + grad_tester.test(test_function, state, step_size, analytic_gradient, numeric_gradient); \ +\ + for (size_t z = 0; z < object_instance.dim(Z); z++) { \ + for (size_t y = 0; y < object_instance.dim(Y); y++) { \ + for (size_t x = 0; x < object_instance.dim(X); x++) { \ + for (size_t encode_i = 0; encode_i < object_instance.num_encodings(); encode_i++) { \ + analytic_writer.append(analytic_gradient(x,y,z)[encode_i]); \ + numeric_writer.append(numeric_gradient(x,y,z)[encode_i]); \ + } \ + } \ + } \ + } \ + } \ +\ + reader.close(); \ + analytic_writer.close(); \ + numeric_writer.close(); \ + + +#define TEST_IMAGE_HESSIAN(State, Object, function, object_instance) \ + State state; \ + State::Reader reader (state_location); \ + if (!reader.next(state)) \ + throw Exception ("Did not find any states in file '" + state_location + "'."); \ + reader.close(); \ +\ + State::Tensor::Writer analytic_writer (analytic_output_location + ".tnr", state), numeric_writer (numeric_output_location + ".tnr", state); \ + reader.open(state_location); \ +\ + Analysis::ImageHessianTester hess_tester (object_instance); \ + Analysis::ImageHessianTester::Function test_function; \ +\ + test_function = &Object::function; \ +\ + while (reader.next(state)) { \ +\ + object_instance.zero(); \ +\ + Image::Container::Buffer analytic_hessian(img_dims, object_instance.num_encodings()); \ + Image::Container::Buffer numeric_hessian(img_dims, object_instance.num_encodings()); \ +\ + hess_tester.test(test_function, state, step_size, analytic_hessian, numeric_hessian); \ +\ + for (size_t z = 0; z < object_instance.dim(Z); z++) { \ + for (size_t y = 0; y < object_instance.dim(Y); y++) { \ + for (size_t x = 0; x < object_instance.dim(X); x++) { \ + for (size_t encode_i = 0; encode_i < object_instance.num_encodings(); encode_i++) { \ + analytic_writer.append(analytic_hessian(x,y,z)[encode_i]); \ + numeric_writer.append(numeric_hessian(x,y,z)[encode_i]); \ + } \ + } \ + } \ + } \ + } \ +\ + reader.close(); \ + analytic_writer.close(); \ + numeric_writer.close(); \ + + +#define TEST_OBJECT_ELEMENT_GRADIENT(State, Object, function, object_instance) \ + State state; \ +\ + State::Writer analytic_writer (analytic_output_location, properties), numeric_writer (numeric_output_location, properties); \ + State::Reader reader; \ +\ + for (size_t i = 0; i < object_instance.size(); ++i) { \ +\ + reader.open(state_location); \ +\ + Analysis::GradientTester grad_tester (object_instance[i]); \ + Analysis::GradientTester::Function test_function; \ +\ + test_function = &Object::function; \ +\ + while (reader.next(state)) { \ + State analytic_gradient(state), numeric_gradient(state); \ +\ + grad_tester.test(test_function, state, step_size, analytic_gradient, numeric_gradient); \ +\ + analytic_writer.append(analytic_gradient); \ + numeric_writer.append(numeric_gradient); \ +\ + } \ +\ + reader.close(); \ +\ + } \ +\ + analytic_writer.close(); \ + numeric_writer.close(); \ + + +#define TEST_OBJECT_ELEMENT_HESSIAN(State, Object, function, object_instance) \ + State state; \ + State::Reader reader (state_location); \ + if (!reader.next(state)) \ + throw Exception ("Did not find any states in file '" + state_location + "'."); \ + reader.close(); \ +\ + State::Tensor::Writer analytic_writer (analytic_output_location + ".tnr", state), numeric_writer (numeric_output_location + ".tnr", state); \ +\ + for (size_t i = 0; i < object_instance.size(); ++i) { \ +\ + reader.open(state_location); \ +\ + Analysis::HessianTester grad_tester (object_instance[i]); \ + Analysis::HessianTester::Function test_function; \ +\ + test_function = &Object::function; \ +\ + while (reader.next(state)) { \ + State::Tensor analytic_hessian(state), numeric_hessian(state); \ +\ + grad_tester.test(test_function, state, step_size, analytic_hessian, numeric_hessian); \ +\ + analytic_writer.append(analytic_hessian); \ + numeric_writer.append(numeric_hessian); \ + \ + } \ +\ + reader.close(); \ +\ + } \ +\ + analytic_writer.close(); \ + numeric_writer.close(); \ + + +#define TEST_WRITABLE_OBJECT_ELEMENT_GRADIENT(State, Object, function, object_instance) \ + State::Writable state; \ +\ + State::Writable::Writer analytic_writer (analytic_output_location, properties), numeric_writer (numeric_output_location, properties); \ + State::Writable::Reader reader(state_location); \ +\ + for (size_t i = 0; i < object_instance.size(); ++i) { \ +\ + Analysis::GradientTester grad_tester (object_instance[i]); \ + Analysis::GradientTester::Function test_function; \ +\ + test_function = &Object::function; \ +\ + while (reader.next(state)) { \ + State analytic_gradient(state.size(), numeric_gradient(state.size()); \ +\ + grad_tester.test(test_function, state, step_size, analytic_gradient, numeric_gradient); \ +\ + analytic_writer.append(analytic_gradient); \ + numeric_writer.append(numeric_gradient); \ +\ + } \ + } \ +\ + reader.close(); \ + analytic_writer.close(); \ + numeric_writer.close(); \ + + +#define TEST_VOXEL_GRADIENT(State, Object, function, image_instance) \ + State state; \ +\ + State::Writer analytic_writer (analytic_output_location, properties), numeric_writer (numeric_output_location, properties); \ +\ + for (size_t z = 0; z < image_instance.dim(Z); ++z) { \ + for (size_t y = 0; y < image_instance.dim(Y); ++y) { \ + for (size_t x = 0; x < image_instance.dim(X); ++x) { \ +\ + State::Reader reader(state_location); \ +\ + Analysis::GradientTester grad_tester (image_instance(x,y,z)); \ + Analysis::GradientTester::Function test_function; \ +\ + test_function = &Object::function; \ +\ + while (reader.next(state)) { \ + State analytic_gradient(state), numeric_gradient(state); \ +\ + grad_tester.test(test_function, state, step_size, analytic_gradient, numeric_gradient); \ +\ + analytic_writer.append(analytic_gradient); \ + numeric_writer.append(numeric_gradient); \ +\ + } \ +\ + reader.close(); \ +\ + } \ + } \ + } \ +\ + analytic_writer.close(); \ + numeric_writer.close(); \ + + +#define TEST_VOXEL_HESSIAN(State, Object, function, image_instance) \ + State state; \ + State::Reader reader (state_location); \ + if (!reader.next(state)) \ + throw Exception ("Did not find any states in file '" + state_location + "'."); \ + reader.close(); \ +\ + State::Tensor::Writer analytic_writer (analytic_output_location + ".tnr", state), numeric_writer (numeric_output_location + ".tnr", state); \ +\ + for (size_t z = 0; z < image_instance.dim(Z); ++z) { \ + for (size_t y = 0; y < image_instance.dim(Y); ++y) { \ + for (size_t x = 0; x < image_instance.dim(X); ++x) { \ +\ + State::Reader reader(state_location); \ +\ + Analysis::HessianTester grad_tester (image_instance(x,y,z)); \ + Analysis::HessianTester::Function test_function; \ +\ + test_function = &Object::function; \ +\ + while (reader.next(state)) { \ + State::Tensor analytic_hessian(state), numeric_hessian(state); \ +\ + grad_tester.test(test_function, state, step_size, analytic_hessian, numeric_hessian); \ +\ + analytic_writer.append(analytic_hessian); \ + numeric_writer.append(numeric_hessian); \ +\ + } \ +\ + reader.close(); \ +\ + } \ + } \ + } \ +\ + analytic_writer.close(); \ + numeric_writer.close(); \ + + +#define TEST_WRITABLE_VOXEL_GRADIENT(State, Object, function, image_instance) \ + State::Writable state; \ +\ + State::Writable::Writer analytic_writer (analytic_output_location, properties), numeric_writer (numeric_output_location, properties); \ +\ + for (size_t z = 0; z < image_instance.dim(Z); ++z) { \ + for (size_t y = 0; y < image_instance.dim(Y); ++y) { \ + for (size_t x = 0; x < image_instance.dim(X); ++x) { \ +\ + State::Writable::Reader reader(state_location); \ +\ + Analysis::GradientTester grad_tester (image_instance(x,y,z)); \ + Analysis::GradientTester::Function test_function; \ +\ + test_function = &Object::function; \ +\ + while (reader.next(state)) { \ + State analytic_gradient(state.size(), numeric_gradient(state.size()); \ +\ + grad_tester.test(test_function, state, step_size, analytic_gradient, numeric_gradient); \ +\ + analytic_writer.append(analytic_gradient); \ + numeric_writer.append(numeric_gradient); \ +\ + } \ +\ + reader.close(); \ +\ + } \ + } \ + } \ +\ + analytic_writer.close(); \ + numeric_writer.close(); \ + + +#define TEST_DIRECTION_GRADIENT(State, function, image_instance) \ + State state; \ + std::map read_properties; \ + std::vector row_properties_list; \ +\ + State::Writer analytic_writer (analytic_output_location, properties), numeric_writer (numeric_output_location, properties); \ +\ + for (size_t z = 0; z < image_instance.dim(Z); ++z) { \ + for (size_t y = 0; y < image_instance.dim(Y); ++y) { \ + for (size_t x = 0; x < image_instance.dim(X); ++x) { \ + for (size_t encode_i = 0; encode_i < image_instance.num_encodings(); encode_i++) { \ +\ + State::Reader reader(state_location); \ +\ + Analysis::GradientTester grad_tester (image_instance(x,y,z).direction(encode_i)); \ + Analysis::GradientTester::Function test_function; \ +\ + test_function = &Image::Expected::Direction::function; \ +\ + while (reader.next(state)) { \ + State analytic_gradient(state.size(), numeric_gradient(state.size()); \ +\ + grad_tester.test(test_function, state, step_size, analytic_gradient, numeric_gradient); \ +\ + analytic_writer.append(analytic_gradient); \ + numeric_writer.append(numeric_gradient); \ + } \ +\ + reader.close(); \ +\ + } \ + } \ + } \ + } \ +\ + analytic_writer.close(); \ + numeric_writer.close(); + + +#define TEST_DIRECTION_HESSIAN(State, function, image_instance) \ + State state; \ + State::Reader reader (state_location); \ + if (!reader.next(state)) \ + throw Exception ("Did not find any states in file '" + state_location + "'."); \ + reader.close(); \ +\ + State::Tensor::Writer analytic_writer (analytic_output_location + ".tnr", state), numeric_writer (numeric_output_location + ".tnr", state); \ +\ + for (size_t z = 0; z < image_instance.dim(Z); ++z) { \ + for (size_t y = 0; y < image_instance.dim(Y); ++y) { \ + for (size_t x = 0; x < image_instance.dim(X); ++x) { \ + for (size_t encode_i = 0; encode_i < image_instance.num_encodings(); encode_i++) { \ +\ + State::Reader reader(state_location); \ +\ + Analysis::HessianTester hess_tester (image_instance(x,y,z).direction(encode_i)); \ + Analysis::HessianTester::Function test_function; \ +\ + test_function = &Image::Expected::Direction::function; \ +\ + while (reader.next(state)) { \ + State::Tensor analytic_hessian(state.size(), numeric_hessian(state.size()); \ +\ + hess_tester.test(test_function, state, step_size, analytic_hessian, numeric_hessian); \ +\ + analytic_writer.append(analytic_hessian); \ + numeric_writer.append(numeric_hessian); \ + } \ +\ + reader.close(); \ +\ + } \ + } \ + } \ + } \ +\ + analytic_writer.close(); \ + numeric_writer.close(); + + +#define TEST_IMAGE_POINTER_GRADIENT(State, Object, function, object_instance, state) \ + State* analytic_gradient = state.clone(); \ + State* numeric_gradient = state.clone(); \ +\ + Analysis::PointerGradientTester grad_tester (object_instance); \ + Analysis::PointerGradientTester::Function test_function; \ +\ + test_function = &Object::function; \ +\ + grad_tester.test(test_function, state, step_size, *analytic_gradient, *numeric_gradient); \ +\ + analytic_gradient->save(analytic_output_location); \ + numeric_gradient->save(numeric_output_location); \ +\ + delete analytic_gradient; \ + delete numeric_gradient; \ + + +#define TEST_HESSIAN(State, Object, function, object_instance) \ + State state; \ + State::Reader reader (state_location); \ + if (!reader.next(state)) \ + throw Exception ("Did not find any states in file '" + state_location + "'."); \ +\ + State::Tensor::Writer analytic_writer (analytic_output_location + ".tnr", state), numeric_writer (numeric_output_location + ".tnr", state); \ +\ + reader.close(); \ + reader.open(state_location); \ +\ + Analysis::HessianTester grad_tester (object_instance); \ + Analysis::HessianTester::Function test_function; \ +\ + test_function = &Object::function; \ +\ + while (reader.next(state)) { \ + State::Tensor analytic_hessian(state), numeric_hessian(state); \ +\ + grad_tester.test(test_function, state, step_size, analytic_hessian, numeric_hessian); \ +\ + analytic_writer.append(analytic_hessian); \ + numeric_writer.append(numeric_hessian); \ +\ + } \ +\ + reader.close(); \ + analytic_writer.close(); \ + numeric_writer.close(); \ + + +#define TEST_RANK3_HESSIAN(State, Object, function, object_instance) \ + State state; \ + State::Reader reader (state_location); \ + if (!reader.next(state)) \ + throw Exception ("Did not find any states in file '" + state_location + "'."); \ +\ + State::Tensor::Writer analytic_writer (analytic_output_location + ".tnr3", state), numeric_writer (numeric_output_location + ".tnr3", state); \ +\ + reader.close(); \ + reader.open(state_location); \ +\ + Analysis::Rank3HessianTester grad_tester (object_instance); \ + Analysis::Rank3HessianTester::Function test_function; \ +\ + test_function = &Object::function; \ +\ + while (reader.next(state)) { \ + std::vector analytic_rank3_hessian, numeric_rank3_hessian; \ +\ + grad_tester.test(test_function, state, step_size, analytic_rank3_hessian, numeric_rank3_hessian); \ +\ + for (size_t dim_i = 0; dim_i < state.size(); dim_i++) { \ + analytic_writer.append(analytic_rank3_hessian[dim_i]); \ + numeric_writer.append(numeric_rank3_hessian[dim_i]); \ + } \ +\ + } \ +\ + reader.close(); \ + analytic_writer.close(); \ + numeric_writer.close(); \ + + +#define TEST_FISHER_GRADIENT(State, Object, function, object_instance) \ + State state; \ + State::Reader reader (state_location); \ + if (!reader.next(state)) \ + throw Exception ("Did not find any states in file '" + state_location + "'."); \ +\ + State::Tensor::Writer analytic_writer (analytic_output_location + ".tnr", state), numeric_writer (numeric_output_location + ".tnr", state); \ +\ + reader.close(); \ + reader.open(state_location); \ +\ + Analysis::FisherGradientTester grad_tester (object_instance); \ + Analysis::FisherGradientTester::Function test_function; \ +\ + test_function = &Object::function; \ +\ + while (reader.next(state)) { \ + std::vector analytic_fisher_gradient, numeric_fisher_gradient; \ +\ + grad_tester.test(test_function, state, step_size, analytic_fisher_gradient, numeric_fisher_gradient); \ +\ + if (analytic_fisher_gradient.size() != numeric_fisher_gradient.size()) \ + throw Exception ("Sizes of Fisher gradients do not match"); \ +\ + for (size_t i = 0; i < analytic_fisher_gradient.size(); i++) { \ + analytic_writer.append(analytic_fisher_gradient[i]); \ + numeric_writer.append(numeric_fisher_gradient[i]); \ + } \ +\ + } \ +\ + reader.close(); \ + analytic_writer.close(); \ + numeric_writer.close(); \ + + +#define TEST_FISHER_GRADIENT_MATRIX(State, Object, function, object_instance) \ + State state; \ + State::Reader reader (state_location); \ + if (!reader.next(state)) \ + throw Exception ("Did not find any states in file '" + state_location + "'."); \ +\ + State::Tensor::Writer analytic_writer (analytic_output_location + ".tnr", state), numeric_writer (numeric_output_location + ".tnr", state); \ +\ + reader.close(); \ + reader.open(state_location); \ +\ + Analysis::FisherGradientMatrixTester grad_tester (object_instance); \ + Analysis::FisherGradientMatrixTester::Function test_function; \ +\ + test_function = &Object::function; \ +\ + while (reader.next(state)) { \ + std::vector analytic_fisher_gradient, numeric_fisher_gradient; \ +\ + grad_tester.test(test_function, state, step_size, analytic_fisher_gradient, numeric_fisher_gradient); \ +\ + if (analytic_fisher_gradient.size() != numeric_fisher_gradient.size()) \ + throw Exception ("Sizes of Fisher gradients do not match"); \ +\ + for (size_t i = 0; i < analytic_fisher_gradient.size(); i++) { \ + analytic_writer.append(analytic_fisher_gradient[i]); \ + numeric_writer.append(numeric_fisher_gradient[i]); \ + } \ +\ + } \ +\ + reader.close(); \ + analytic_writer.close(); \ + numeric_writer.close(); \ + + +#define ONLY_ACTIVE_FUNCTIONS + +using namespace BTS; + +SET_VERSION_DEFAULT; +SET_AUTHOR ("Thomas G. Close"); +SET_COPYRIGHT (NULL); + +DESCRIPTION = { + "Compare analytically calculated gradients against numerical approximations.", + NULL +}; + +ARGUMENTS = { + Argument ("state", "State about which the gradient will be tested.").type_file (), + Argument ("output", "Output analysis file").type_file (), + Argument() +}; + +OPTIONS = { + + + Option ("object_type", "The object_type that the function belongs to.") + + Argument ("object_type", "").type_text(), + + Option ("state_type", "The state to pass to the test_function.") + + Argument ("state_type", "").type_text(), + + Option ("function_name", "The name of the function to test.") + + Argument ("function_name", "").type_text(), + + Option ("hessian", "Calculate Hessian instead of gradient."), + +// Option ("fisher_info", "Calculate gradient of the Fisher information gradient."), + + Option ("rank3_hessian", "Calculate 3rd order Hessian instead of gradient."), + + Option ("step_size", "The size of the steps used to build the numerical approximation.") + + Argument ("step_size", "").type_float (SMALL_FLOAT, 1e-4, LARGE_FLOAT), + + Option ("encoding_orientation", "Test encoding orientation.") + + Argument ("encoding_orientation", "").type_text(), + + Option ("axis_scales_location", "Location of the file containing the scales of the Gaussian axes") + + Argument ("axis_scales_location", "").type_text (Prob::Test::Gaussian::AXIS_SCALES_LOCATION_DEFAULT), + +// Option ("diff_encode_index", "Index of the diffusion encoding to use") +// + Argument ("diff_encode_index", "").type_integer (0, 1000, 1), + + Option ("element_index", "Index of the 'Object' element to use.") + + Argument("element_index", "").type_integer(0,0, LARGE_INT), + + DIFFUSION_PARAMETERS, + + IMAGE_PARAMETERS, + + EXPECTED_IMAGE_PARAMETERS, + + LIKELIHOOD_PARAMETERS, + + PRIOR_PARAMETERS, + + TEST_LANDSCAPE_PARAMETERS, + + COMMON_PARAMETERS, + + Option ("obs_image", "The location of the reference image that is to be set") + + Argument ("obs_image", "").type_image_in(), + + Option() +}; + + + + +EXECUTE { + + + + + //-----------------// + // Load Arguments // + //-----------------// + + std::string state_location = argument[0]; + std::string output_location = argument[1]; + + if (File::extension(state_location) != File::extension(output_location)) + throw Exception ("Extension of output, '" + File::extension(output_location) + ", does not match extension of input, '" + File::extension(state_location) + "'."); + + std::string analytic_output_location = File::strip_extension(output_location) + str(".analytic.") + File::extension(output_location); + std::string numeric_output_location = File::strip_extension(output_location) + str(".numeric.") + File::extension(output_location); + +// +// +// +// +// //----------------------------------// +// // Get and Set Optional Parameters // +// //----------------------------------// +// +// double step_size = 1e-4; +// Triple encoding_orientation (1.0, 0.0, 0.0); +// std::string axis_scales_location = Prob::Test::Gaussian::AXIS_SCALES_LOCATION_DEFAULT; +// std::string object_type = "Prob::Prior::Magnitude"; +// std::string function_name = "log_prob"; +// bool calculate_hessian = false; +// bool calculate_rank3_hessian = false; +//// bool calculate_fisher_gradient = false; +//// size_t diff_encode_index = 1; +// std::string prior_b_intens_gauss_mean_type; +// std::string obs_image_name; +// size_t element_index = 0; +// +// std::string state_type; +// if (File::has_extension(state_location)) +// state_type = "Fibre::Strand::Set"; +// +// else if (File::has_extension(state_location)) +// state_type = "Fibre::Tractlet::Set"; +// +// else if (File::has_extension(state_location)) +// state_type = "Fibre::Strand"; +// +// else if (File::has_extension(state_location)) +// state_type = "Fibre::Tractlet"; +// +// else if (File::has_extension< Triple >(state_location)) +// state_type = "Triple"; +// +// else if (File::has_extension(state_location)) +// state_type = "Fibre::Strand::Section"; +//// +//// else if (File::has_extension(state_location)) +//// state_type = "Image::Observed"; +// +// else if (File::has_extension(state_location)) +// state_type = "MCMC::State"; +// +// else +// throw Exception ("Unrecognised extension for state, '" + File::extension(state_location) + "'."); +// +// +// +// Options opt; +// +// opt = get_options("object_type"); +// if (opt.size()) +// object_type = (std::string)opt[0][0]; +// +// opt = get_options("state_type"); +// if (opt.size()) +// state_type = (std::string)opt[0][0]; +// +// opt = get_options("function_name"); +// if (opt.size()) +// function_name = (std::string)opt[0][0]; +// +// opt = get_options("hessian"); +// if (opt.size()) +// calculate_hessian = true; +// +//// opt = get_options("fisher_info"); +//// if (opt.size()) +//// calculate_fisher_gradient = true; +// +// opt = get_options("rank3_hessian"); +// if (opt.size()) +// calculate_rank3_hessian = true; +// +// opt = get_options("step_size"); +// if (opt.size()) +// step_size = opt[0][0]; +// +// opt = get_options("encoding_orientation"); +// if (opt.size()) +// encoding_orientation = parse_triple(opt[0][0]); +// +// opt = get_options("axis_scales_location"); +// if (opt.size()) +// axis_scales_location = (std::string)opt[0][0]; +// +//// opt = get_options("diff_encode_index"); +//// if (opt.size()) +//// diff_encode_index = opt[0][0]; +// +// opt = get_options("element_index"); +// if (opt.size()) +// element_index = opt[0][0]; +// +// // Loads parameters to construct Diffusion::Model ('diff_' prefix) +// SET_DIFFUSION_PARAMETERS; +// +// // Loads parameters to construct Image::Expected::*::Buffer that are inherited from Image::Observed::Buffer ('img_' prefix) +// SET_IMAGE_PARAMETERS; +// +// // Loads parameters to construct Image::Expected::*::Buffer ('img_' prefix) +// SET_EXPECTED_IMAGE_PARAMETERS; +// +// // Loads parameters to construct Prob::Likelihood('like_' prefix) +// SET_LIKELIHOOD_PARAMETERS; +// +// // Loads parameters to construct Prob::Prior('prior_' prefix) +// SET_PRIOR_PARAMETERS; +// +// // Loads parameters to construct Prob::Test::Landscape ('test_gen_' prefix) +// SET_TEST_LANDSCAPE_PARAMETERS; +// +// // Loads parameters that are common to all commands. +// SET_COMMON_PARAMETERS; +// +// +////----------------------// +//// Load observed image // +////----------------------// +// +// Image::Observed::Buffer obs_image; +// +// bool obs_image_provided = false; +// +// opt = get_options("obs_image"); +// if (opt.size()) { +// +// obs_image_name = (std::string)opt[0][0]; +// obs_image.load(obs_image_name); +// +// if ((obs_image.properties().count("diff_response_SH")) && (Math::matlab_str(diff_response_SH) != obs_image.properties()["diff_response_SH"])) +// std::cout << std::endl << "Warning! Diffusion response function harmonics (" << Math::matlab_str(diff_response_SH) << ") do not match reference image (" << obs_image.properties()["diff_response_SH"] + ")!" << std::endl; +// +// obs_image_provided = true; +// +// } else { +// +// if (object_type.substr(0,18) == "Prob::Likelihood::") +// throw Exception("Observed image location (-obs_image option) required for 'Prob::Likelihood::*' object types (" + object_type + ")."); +// +// obs_image.reset(img_dims, img_vox_lengths, img_offsets, Diffusion::Encoding::Set(diff_encodings)); +// +// } +// +// +// //----------------------------// +// // Initialize Expected Image // +// //----------------------------// +// +// +// Diffusion::Model diffusion_model = Diffusion::Model::factory (diff_encodings, +// diff_response_SH, +// diff_adc, +// diff_fa, +// diff_isotropic); +// +// Image::Expected::Buffer* exp_image = Image::Expected::Buffer::factory(exp_type, +// img_dims, +// img_vox_lengths, +// diffusion_model, +// exp_num_length_sections, +// exp_num_width_sections, +// exp_interp_extent, +// img_offsets, +// exp_enforce_bounds, +// exp_half_width); +// +// +// //----------------------------------------------------------------// +// // Auto-generate base intensity initial value/b_intens_gauss_mean // +// //----------------------------------------------------------------// +// +// if ((exp_base_intensity < 0) && obs_image_provided) +// exp_base_intensity = exp_image->base_intensity_default(obs_image, state_location); +// +// //-----------------------// +// // Initialize Likelihood // +// //-----------------------// +// +// Prob::Likelihood* likelihood = 0; +// +// if (obs_image_provided) +// likelihood = Prob::Likelihood::factory(like_type, obs_image, exp_image, like_snr, like_b0_include, like_outside_scale, like_ref_b0, like_ref_signal); +// +// +// //--------------------// +// //--- Prior ---// +// //--------------------// +// +// Prob::Prior prior (prior_scale, +// prior_mag_scale, +// prior_mag_aux_scale, +// prior_hook_scale, +// prior_hook_num_points, +// prior_density_high_scale, +// prior_density_low_scale, +// prior_density_num_points, +// prior_acs_scale, +// prior_acs_mean); +// +// +// +// MCMC::State axis_scale (axis_scales_location); +// Prob::Test::Gaussian test_gaussian(axis_scale); +// +// +// Prob::Test::Landscape test_landscape; +// +// if (lnd_location.size()) +// test_landscape = Prob::Test::Landscape(lnd_location, lnd_roi_radius, lnd_barrier_rate); +// +// +// +////-----------------// +//// Save properties // +////-----------------// +// +// std::map properties; +// +// properties["method"] = "test_gradient"; +// properties["object_type"] = object_type; +// properties["state_type"] = state_type; +// properties["state_location"] = state_location; +// properties["function_name"] = function_name; +// properties["step_size"] = str(step_size); +// +// if (state_type == "MCMC::State") +// properties["axis_scales_location"] = str(axis_scales_location); +// +// if (object_type == "Diffusion::Response") +// properties["diff_encode_index"] = str(obs_image_name); +// +// if (obs_image_name.size()) +// properties["obs_image"] = obs_image_name; +// +// if (object_type.substr(0,9) == "Diffusion") { +// ADD_DIFFUSION_PROPERTIES(properties); +// +// } else if (object_type.substr(0,17) == "Prob::Likelihood") { +// ADD_LIKELIHOOD_PROPERTIES(properties); +// +// ADD_EXPECTED_IMAGE_PROPERTIES(properties); +// +// ADD_DIFFUSION_PROPERTIES(properties); +// +//// ADD_DENSITY_IMAGE_PROPERTIES(properties); +// +// +// } else if (object_type.substr(0,5) == "Image") { +// ADD_IMAGE_PROPERTIES(properties); +// +// if (object_type.substr(7,8) == "Expected") { +// +// ADD_EXPECTED_IMAGE_PROPERTIES(properties); +// +// ADD_DIFFUSION_PROPERTIES(properties); +// +// } +//// } else if (object_type.substr(7,7) == "Density") { +//// +//// ADD_DENSITY_IMAGE_PROPERTIES(properties); +//// +//// } +// +// } else if (object_type.substr(0,11) == "Prob::Prior") { +// ADD_PRIOR_PROPERTIES(properties); +// +// } else if (object_type == "Prob::Test::Landscape") +// ADD_TEST_LANDSCAPE_PROPERTIES(properties); +// +// +// +// +// +// +// +////----------------------------------------------------------------------------------------------------------------// +////---------------------------------------- Select State, Object and Function -----------------------------------// +////----------------------------------------------------------------------------------------------------------------// +// +// +// +// +// +////----------------------------// +////------ Fibre::Strand -------// +////----------------------------// +// +// +// if (state_type == "Fibre::Strand") { +// +// //--- Prob::Prior ---// +// +// if (object_type == "Prob::Prior") { +// +// if (function_name == "log_prob") { +// +// if (calculate_hessian) { +// TEST_HESSIAN(Fibre::Strand, Prob::Prior, log_prob, prior); +// } else { +// TEST_GRADIENT(Fibre::Strand, Prob::Prior, log_prob, prior); +// } +// +// } else if (function_name == "log_prob_and_fisher") { +// +// TEST_FISHER_GRADIENT(Fibre::Strand, Prob::Prior, log_prob_and_fisher, prior); +// +// } else +// throw Exception ("Unrecognised function '" + object_type + "::" + function_name + "(const " + state_type + "&, " + state_type + "&)'."); +// +// +////--- Prob::Prior::Magnitude ---// +// +// } else if (object_type == "Prob::PriorComponent::Magnitude") { +// +// Prob::PriorComponent::Magnitude prior_curvature_magnitude (prior_mag_scale); +// +// if (function_name == "log_prob") { +// +// if (calculate_hessian) { +// TEST_HESSIAN(Fibre::Strand, Prob::PriorComponent::Magnitude, log_prob, prior_curvature_magnitude); +// } else { +// TEST_GRADIENT(Fibre::Strand, Prob::PriorComponent::Magnitude, log_prob, prior_curvature_magnitude); +// } +// +// } else if (function_name == "log_prob_and_fisher") { +// +// TEST_FISHER_GRADIENT(Fibre::Strand, Prob::PriorComponent::Magnitude, log_prob_and_fisher, prior_curvature_magnitude); +// +// } else +// throw Exception ("Unrecognised function '" + object_type + "::" + function_name + "(const " + state_type + "&, " + state_type + "&)'."); +// +////--- Prob::Prior::Hook ---// +// +// } else if (object_type == "Prob::Prior::Hook") { +// +// Prob::Prior::Hook prior_midpoint_insidecube (prior_hook_scale, prior_hook_num_points, prior_mid_cube_sd); +// +// if (function_name == "log_prob") { +// +// TEST_GRADIENT(Fibre::Strand, Prob::Prior::Hook, log_prob, prior_midpoint_insidecube); +// +// } else +// throw Exception ("Unrecognised function '" + object_type + "::" + function_name + "(const " + state_type + "&, " + state_type + "&)'."); +// } +////--- Image::Expected::Quartic::Buffer ---// +// +// } else if (object_type == "Image::Expected::Quartic::Buffer") { +// +// Image::Expected::Quartic::Buffer exp_image_quartic ( img_dims, +// img_vox_lengths, +// diffusion_model, +// exp_num_length_sections, +// exp_num_width_sections, +// exp_interp_extent, +// img_offsets, +// exp_enforce_bounds); +// +// if (function_name == "part_image") { +// +// if (calculate_hessian) { +// TEST_IMAGE_HESSIAN(Fibre::Strand, Image::Expected::Quartic::Buffer, part_image, exp_image_quartic); +// } else { +// TEST_IMAGE_GRADIENT(Fibre::Strand, Image::Expected::Quartic::Buffer, part_image, exp_image_quartic); +// } +// +// } else +// throw Exception ("Unrecognised function '" + object_type + "::" + function_name + "(const " + state_type + "&, " + state_type + "&)'."); +// +// +// } else +// throw Exception ("Unrecognised object_type, '" + object_type + "', for state type '" + state_type + "'."); +// +// +////----------------------------// +////------ Fibre::Tractlet -------// +////----------------------------// +// +// +// } else if (state_type == "Fibre::Tractlet") { +// +// if (object_type == "Prob::Prior::Density") { +// +// Prob::Prior::Density prior_density (prior_density_high_scale, prior_density_low_scale, prior_density_num_points); +// +// if (function_name == "log_prob") { +// +// if (calculate_hessian) { +// +// TEST_HESSIAN(Fibre::Tractlet, Prob::Prior::Density, log_prob, prior_density); +// +// } else { +// +// TEST_GRADIENT(Fibre::Tractlet, Prob::Prior::Density, log_prob, prior_density); +// +// } +// +// } else if (function_name == "log_prob_and_fisher") { +// +// TEST_FISHER_GRADIENT(Fibre::Tractlet, Prob::Prior::Density, log_prob_and_fisher, prior_density); +// +// } else +// throw Exception ("Unrecognised function '" + object_type + "::" + function_name + "(const " + state_type + "&, " + state_type + "&)'."); +// +// } else if (object_type == "Image::Expected::Quartic::Buffer") { +// +// Image::Expected::Quartic::Buffer exp_image_quartic ( img_dims, +// img_vox_lengths, +// diffusion_model, +// exp_num_length_sections, +// exp_num_width_sections, +// exp_interp_extent, +// img_offsets, +// exp_enforce_bounds); +// +// if (function_name == "part_image") { +// if (calculate_hessian) { +// +// Fibre::Tractlet state; +// Fibre::Tractlet::Reader reader (state_location); +// if (!reader.next(state)) +// throw Exception ("Did not find any states in file '" + state_location + "'."); +// reader.close(); +// +// Fibre::Tractlet::Tensor::Writer analytic_writer (analytic_output_location + ".tnr", state), numeric_writer (numeric_output_location + ".tnr", state); +// reader.open(state_location); +// +// Analysis::ImageHessianTester hess_tester (exp_image_quartic); +// Analysis::ImageHessianTester::Function test_function; +// +// test_function = &Image::Expected::Quartic::Buffer::part_image; +// +// while (reader.next(state)) { +// +// exp_image_quartic.zero(); +// +// Image::Container::Buffer analytic_hessian(img_dims, exp_image_quartic.num_encodings()); +// Image::Container::Buffer numeric_hessian(img_dims, exp_image_quartic.num_encodings()); +// +// hess_tester.test(test_function, state, step_size, analytic_hessian, numeric_hessian); +// +// for (size_t z = 0; z < exp_image_quartic.dim(Z); z++) { +// for (size_t y = 0; y < exp_image_quartic.dim(Y); y++) { +// for (size_t x = 0; x < exp_image_quartic.dim(X); x++) { +// for (size_t encode_i = 0; encode_i < exp_image_quartic.num_encodings(); encode_i++) { +// analytic_writer.append(analytic_hessian(x,y,z)[encode_i]); +// numeric_writer.append(numeric_hessian(x,y,z)[encode_i]); +// } +// } +// } +// } +// } +// +// reader.close(); +// analytic_writer.close(); +// numeric_writer.close(); +// +//// TEST_IMAGE_HESSIAN(Fibre::Tractlet, Image::Expected::Quartic::Buffer, part_image, exp_image_quartic); +// } else { +// TEST_IMAGE_GRADIENT(Fibre::Tractlet, Image::Expected::Quartic::Buffer, part_image, exp_image_quartic); +// } +// } else +// throw Exception ("Unrecognised function '" + object_type + "::" + function_name + "(const " + state_type + "&, " + state_type + "&)'."); +// +// +// } else +// throw Exception ("Unrecognised object_type, '" + object_type + "', for state type '" + state_type + "'."); +// +// +////----------------------------// +////----- Fibre::Strand::Set----// +////----------------------------// +// +// } else if (state_type == "Fibre::Strand::Set") { +// +////--- Prob::Likelihood::Gaussian ---// +// +// if (object_type == "Prob::Likelihood::Gaussian") { +// +// Prob::Likelihood::Gaussian likelihood_imagediff_gaussian (obs_image, exp_image, 1); +// +// if (function_name == "log_prob") { +// if (calculate_hessian) { +// TEST_HESSIAN(Fibre::Strand::Set, Prob::Likelihood::Gaussian, log_prob, likelihood_imagediff_gaussian); +// } else { +// TEST_GRADIENT(Fibre::Strand::Set, Prob::Likelihood::Gaussian, log_prob, likelihood_imagediff_gaussian); +// } +// } else if (function_name == "log_prob_and_fisher") { +// +// if (calculate_hessian) { +// +// std::cout << "WARNING!! Requires that observed image is equal to expected image for given strand set." << std::endl; +// +// TEST_HESSIAN(Fibre::Strand::Set, Prob::Likelihood::Gaussian, log_prob_and_fisher, likelihood_imagediff_gaussian); +// } else { +// TEST_FISHER_GRADIENT_MATRIX(Fibre::Strand::Set, Prob::Likelihood::Gaussian, log_prob_and_fisher, likelihood_imagediff_gaussian); +// } +// } else +// throw Exception ("Unrecognised function '" + object_type + "::" + function_name + "(const " + state_type + "&, " + state_type + "&)'."); +// +//#ifndef ONLY_ACTIVE_FUNCTIONS +////--- Prob::Likelihood::OneSidedGaussian ---// +// } else if (object_type == "Prob::Likelihood::OneSidedGaussian") { +// +// Prob::Likelihood::OneSidedGaussian likelihood_weak (&obs_image, exp_image, 1); +// +// if (function_name == "log_prob") { +// +// TEST_GRADIENT(Fibre::Strand::Set, Prob::Likelihood::OneSidedGaussian, log_prob, likelihood_weak); +// +// } else +// throw Exception ("Unrecognised function '" + object_type + "::" + function_name + "(const " + state_type + "&, " + state_type + "&)'."); +//#endif +// +////--- Prob::Likelihood::OneSidedGaussian ---// +// } else if (object_type == "Prob::Prior") { +// +// Prob::Prior prior_strand = *dynamic_cast(prior); +// +// if (function_name == "log_prob") { +// if (calculate_hessian) { +// TEST_HESSIAN(Fibre::Strand::Set, Prob::Prior, log_prob, prior_strand); +// } else { +// TEST_GRADIENT(Fibre::Strand::Set, Prob::Prior, log_prob, prior_strand); +// } +// +// } else if (function_name == "log_prob_and_fisher") { +// +// TEST_FISHER_GRADIENT_MATRIX(Fibre::Strand::Set, Prob::Prior, log_prob_and_fisher, prior_strand); +// +// } else +// throw Exception ("Unrecognised function '" + object_type + "::" + function_name + "(const " + state_type + "&, " + state_type + "&)'."); +// +// } else +// throw Exception ("Unrecognised object_type, '" + object_type + "', for state type '" + state_type + "'."); +// +// +// +////----------------------------// +////----- Fibre::Tractlet::Set ----// +////----------------------------// +// +// } else if (state_type == "Fibre::Tractlet::Set") { +// +// +////--- Prob::Likelihood::Gaussian ---// +// if (object_type == "Prob::Likelihood::Gaussian") { +// +// Prob::Likelihood::Gaussian likelihood_imagediff_gaussian (obs_image, exp_image, 1); +// +// if (function_name == "log_prob") { +// +// if (calculate_hessian) { +// TEST_HESSIAN(Fibre::Tractlet::Set, Prob::Likelihood::Gaussian, log_prob, likelihood_imagediff_gaussian); +// } else { +// TEST_GRADIENT(Fibre::Tractlet::Set, Prob::Likelihood::Gaussian, log_prob, likelihood_imagediff_gaussian); +// } +// +// } else if (function_name == "log_prob_and_fisher") { +// +// TEST_FISHER_GRADIENT_MATRIX(Fibre::Tractlet::Set, Prob::Likelihood::Gaussian, log_prob_and_fisher, likelihood_imagediff_gaussian); +// +// } else +// throw Exception ("Unrecognised function '" + object_type + "::" + function_name + "(const " + state_type + "&, " + state_type + "&)'."); +// +//#ifndef ONLY_ACTIVE_FUNCTIONS +////--- Prob::Likelihood::OneSidedGaussian ---// +// +// } else if (object_type == "Prob::Likelihood::OneSidedGaussian") { +// +// Prob::Likelihood::OneSidedGaussian likelihood_weak (&obs_image, exp_image, 1); +// +//// if (function_name == "log_prob") { +//// +//// TEST_GRADIENT(Fibre::Tractlet::Set, Prob::Likelihood::OneSidedGaussian, log_prob, likelihood_weak); +//// +//// } else +// throw Exception ("Unrecognised function '" + object_type + "::" + function_name + "(const " + state_type + "&, " + state_type + "&)'."); +//#endif +// +// } else +// throw Exception ("Unrecognised object_type, '" + object_type + "', for state type '" + state_type + "'."); +// +// +// +////-----------------// +////----- Triple ----// +////-----------------// +// +// } else if (state_type == "Triple") { +// +// if (object_type == "Diffusion::Response") { +// +// if (function_name == "weighting") { +// +// if (calculate_hessian) { +// TEST_OBJECT_ELEMENT_HESSIAN(Coord, Diffusion::Response, weighting, diffusion_model); +// } else { +// TEST_OBJECT_ELEMENT_GRADIENT(Coord, Diffusion::Response, weighting, diffusion_model); +// } +// +// } else +// throw Exception ("Unrecognised function '" + object_type + "::" + function_name + "(const " + state_type + "&, " + state_type + "&)'."); +// +//#ifndef ONLY_ACTIVE_FUNCTIONS +// } else if (object_type == "Image::Expected::Trilinear::Voxel") { +// +// +// Image::Expected::Trilinear::Buffer exp_image_trilinear ( img_dims, +// img_vox_lengths, +// diffusion_model, +// exp_num_length_sections, +// exp_num_width_sections, +// exp_interp_extent, +// img_offsets, +// exp_enforce_bounds); +// +// if (function_name == "interpolate") { +// +// TEST_VOXEL_GRADIENT(Triple, Image::Expected::Trilinear::Voxel, interpolate, exp_image_trilinear); +// +// } else +// throw Exception ("Unrecognised function '" + object_type + "::" + function_name + "(const " + state_type + "&, " + state_type + "&)'."); +//#endif +//#ifndef ONLY_ACTIVE_FUNCTIONS +// } else if (object_type == "Image::Expected::Gaussian::Voxel") { +// +// +// Image::Expected::Gaussian::Buffer exp_image_gaussian ( img_dims, +// img_vox_lengths, +// diffusion_model, +// exp_num_length_sections, +// exp_num_width_sections, +// exp_interp_extent, +// exp_half_width, +// img_offsets, +// exp_enforce_bounds); +// +// if (function_name == "interpolate") { +// +// TEST_VOXEL_GRADIENT(Triple, Image::Expected::Gaussian::Voxel, interpolate, exp_image_gaussian); +// +// } else +// throw Exception ("Unrecognised function '" + object_type + "::" + function_name + "(const " + state_type + "&, " + state_type + "&)'."); +//#endif +// } else if (object_type == "Image::Expected::Quartic::Voxel") { +// +// +// Image::Expected::Quartic::Buffer exp_image_quartic ( img_dims, +// img_vox_lengths, +// diffusion_model, +// exp_num_length_sections, +// exp_num_width_sections, +// exp_interp_extent, +// img_offsets, +// exp_enforce_bounds); +// +// if (function_name == "interpolate") { +// +// if (calculate_hessian) { +// TEST_VOXEL_HESSIAN(Coord, Image::Expected::Quartic::Voxel, interpolate, exp_image_quartic); +// } else { +// TEST_VOXEL_GRADIENT(Coord, Image::Expected::Quartic::Voxel, interpolate, exp_image_quartic); +// } +// +// } else +// throw Exception ("Unrecognised function '" + object_type + "::" + function_name + "(const " + state_type + "&, " + state_type + "&)'."); +// +// } else +// throw Exception ("Unrecognised -object_type '" + object_type + "' for state type '" + state_type + "'."); +// +// +////---------------------------------------// +////----- Fibre::Strand::Section ----// +////---------------------------------------// +// +// } else if (state_type == "Fibre::Strand::Section") { +// +//#ifdef CODE_TESTING +// +// if (object_type == "Image::Expected::Quartic::Voxel") { +// +// +// Image::Expected::Quartic::Buffer exp_image_quartic ( img_dims, +// img_vox_lengths, +// diffusion_model, +// exp_num_length_sections, +// exp_num_width_sections, +// exp_interp_extent, +// img_offsets, +// exp_enforce_bounds); +// +// if (function_name == "interpolate") { +// +// if (calculate_hessian) { +// TEST_VOXEL_HESSIAN(Fibre::Strand::Section, Image::Expected::Quartic::Voxel, interpolate, exp_image_quartic); +// } else { +// TEST_VOXEL_GRADIENT(Fibre::Strand::Section, Image::Expected::Quartic::Voxel, interpolate, exp_image_quartic); +// } +// +// } else +// throw Exception ("Unrecognised function '" + object_type + "::" + function_name + "(const " + state_type + "&, " + state_type + "&)'."); +// +// +//#ifndef ONLY_ACTIVE_FUNCTIONS +// } else if (object_type == "Image::Expected::Trilinear::Direction") { +// +// +// Image::Expected::Trilinear::Buffer exp_image_trilinear ( img_dims, +// img_vox_lengths, +// diffusion_model, +// exp_num_length_sections, +// exp_num_width_sections, +// exp_interp_extent, +// img_offsets, +// exp_enforce_bounds); +// +// if (function_name == "signal") { +// +// TEST_DIRECTION_GRADIENT(Fibre::Strand::Section, signal, exp_image_trilinear); +// +// } else +// throw Exception ("Unrecognised function '" + object_type + "::" + function_name + "(const " + state_type + "&, " + state_type + "&)'."); +// +//#endif +//#ifndef ONLY_ACTIVE_FUNCTIONS +// } else if (object_type == "Image::Expected::Gaussian::Direction") { +// +// +// Image::Expected::Gaussian::Buffer exp_image_gaussian ( img_dims, +// img_vox_lengths, +// diffusion_model, +// exp_num_length_sections, +// exp_num_width_sections, +// exp_interp_extent, +// exp_half_width, +// img_offsets, +// exp_enforce_bounds); +// +// if (function_name == "signal") { +// +// TEST_DIRECTION_GRADIENT(Fibre::Strand::Section, signal, exp_image_gaussian); +// +// } else +// throw Exception ("Unrecognised function '" + object_type + "::" + function_name + "(const " + state_type + "&, " + state_type + "&)'."); +// +//#endif +// } else if (object_type == "Image::Expected::Quartic::Direction") { +// +// +// Image::Expected::Quartic::Buffer exp_image_quartic ( img_dims, +// img_vox_lengths, +// diffusion_model, +// exp_num_length_sections, +// exp_num_width_sections, +// exp_interp_extent, +// img_offsets, +// exp_enforce_bounds); +// +// if (function_name == "signal") { +// if (calculate_hessian) { +// TEST_DIRECTION_HESSIAN(Fibre::Strand::Section, signal, exp_image_quartic); +// } else { +// TEST_DIRECTION_GRADIENT(Fibre::Strand::Section, signal, exp_image_quartic); +// } +// } else +// throw Exception ("Unrecognised function '" + object_type + "::" + function_name + "(const " + state_type + "&, " + state_type + "&)'."); +// +// +// +// } else +// throw Exception ("Unrecognised -object_type '" + object_type + "' for state type '" + state_type + "'."); +// +//#else +// +// throw Exception ("test_gradient must be compiled with CODE_TESTING macro to test Fibre::Strand::Sections."); +// +//#endif /* CODE_TESTING */ +// +// } else if (state_type == "Fibre::Tractlet::Section") { +// +//#ifdef CODE_TESTING +// +// if (object_type == "Image::Expected::Direction::Quartic") { +// +// Image::Expected::Quartic::Buffer exp_image_quartic ( img_dims, +// img_vox_lengths, +// diffusion_model, +// exp_num_length_sections, +// exp_num_width_sections, +// exp_interp_extent, +// img_offsets, +// exp_enforce_bounds); +// +// if (function_name == "signal") { +// +// TEST_DIRECTION_GRADIENT(Fibre::Tractlet::Section, signal, exp_image_quartic); +// +// } else +// throw Exception ("Unrecognised function '" + object_type + "::" + function_name + "(const " + state_type + "&, " + state_type + "&)'."); +// +//#ifndef ONLY_ACTIVE_FUNCTIONS +// } else if (object_type == "Image::Expected::Direction::Trilinear") { +// +// +// Image::Expected::Trilinear::Buffer exp_image_trilinear ( img_dims, +// img_vox_lengths, +// diffusion_model, +// exp_num_length_sections, +// exp_num_width_sections, +// exp_interp_extent, +// img_offsets, +// exp_enforce_bounds); +// +// if (function_name == "signal") { +// +// TEST_DIRECTION_GRADIENT(Fibre::Tractlet::Section, signal, exp_image_trilinear); +// +// } else +// throw Exception ("Unrecognised function '" + object_type + "::" + function_name + "(const " + state_type + "&, " + state_type + "&)'."); +// +//#endif +//#ifndef ONLY_ACTIVE_FUNCTIONS +// } else if (object_type == "Image::Expected::Direction::Gaussian") { +// +// +// Image::Expected::Gaussian::Buffer exp_image_gaussian ( img_dims, +// img_vox_lengths, +// diffusion_model, +// exp_num_length_sections, +// exp_num_width_sections, +// exp_interp_extent, +// exp_half_width, +// img_offsets, +// exp_enforce_bounds); +// +// if (function_name == "signal") { +// +// TEST_DIRECTION_GRADIENT(Fibre::Tractlet::Section, signal, exp_image_gaussian); +// +// } else +// throw Exception ("Unrecognised function '" + object_type + "::" + function_name + "(const " + state_type + "&, " + state_type + "&)'."); +// +//#endif +// } else +// throw Exception ("Unrecognised -object_type '" + object_type + "' for state type '" + state_type + "'."); +// +// +// +//#else +// +// throw Exception ("test_gradient must be compiled with CODE_TESTING macro to test Fibre::Tractlet::Sections."); +// +//#endif /* CODE_TESTING */ +// +// //---------------------------// +// //----- Image::Observed ----// +// //---------------------------// +// +// } else if (state_type == "Image::Observed") { +// +// +// Image::Observed::Buffer image (state_location); //, Diffusion::Encoding::Set(diff_encodings)); +// +// +//// if (object_type == "Image::Observed") { +//// +//// if (function_name == "sum_strong_difference") { +//// +//// TEST_IMAGE_POINTER_GRADIENT(Image::Observed, Image::Observed, sum_strong_difference, obs_image, image); +//// +//// } else if (function_name == "sum_weak_difference") { +//// +//// TEST_IMAGE_POINTER_GRADIENT(Image::Observed, Image::Observed, sum_weak_difference, obs_image, image); +//// +//// } else +//// throw Exception ("Unrecognised function '" + object_type + "::" + function_name + "(const " + state_type + "&, " + state_type + "&)'."); +//// } else +//// throw Exception ("Unrecognised -object_type '" + object_type + "' for state type '" + state_type + "'."); +//// +//// +// throw Exception ("deprecated."); +// +////----------------------// +////----- MCMC::State ----// +////----------------------// +// +// } else if (state_type == "MCMC::State") { +// +// if (object_type == "Prob::Test::Gaussian") { +// +// if (function_name == "log_prob") { +// +// if (calculate_hessian) { +// TEST_HESSIAN(MCMC::State, Prob::Test::Gaussian, log_prob, test_gaussian); +// } else { +// TEST_GRADIENT(MCMC::State, Prob::Test::Gaussian, log_prob, test_gaussian); +// } +// } else +// throw Exception ("Unrecognised function '" + object_type + "::" + function_name + "(const " + state_type + "&, " + state_type + "&)'."); +// +// } else if (object_type == "Prob::Test::Landscape") { +// +// if (function_name == "log_prob") { +// +// if (calculate_rank3_hessian) { +// TEST_RANK3_HESSIAN(MCMC::State, Prob::Test::Landscape, log_prob, test_landscape); +// } else if (calculate_hessian) { +// TEST_HESSIAN(MCMC::State, Prob::Test::Landscape, log_prob, test_landscape); +// } else { +// TEST_GRADIENT(MCMC::State, Prob::Test::Landscape, log_prob, test_landscape); +// } +// +// } else +// throw Exception ("Unrecognised function '" + object_type + "::" + function_name + "(const " + state_type + "&, " + state_type + "&)'."); +// +// +// } else if (object_type == "Prob::Test::Landscape::Peak") { +// +// if (function_name == "gaussian_log_prob") { +// +// +// if (calculate_rank3_hessian) { +// TEST_RANK3_HESSIAN(MCMC::State, Prob::Test::Landscape::Peak, gaussian_log_prob, test_landscape[element_index]); +// } else if (calculate_hessian) { +// TEST_HESSIAN(MCMC::State, Prob::Test::Landscape::Peak, gaussian_log_prob, test_landscape[element_index]); +// } else { +// TEST_GRADIENT(MCMC::State, Prob::Test::Landscape::Peak, gaussian_log_prob, test_landscape[element_index]); +// } +// +// } else +// throw Exception ("Unrecognised function '" + object_type + "::" + function_name + "(const " + state_type + "&, " + state_type + "&)'."); +// +// +// } else +// throw Exception ("Unrecognised -object_type '" + object_type + "' for state type '" + state_type + "'."); +// +// +// } else +// throw Exception ("Unrecognised state_type, '" + state_type + "'."); +// +// +// delete likelihood; +// delete exp_image; +// +// std::cout << std::endl << "Generated analytic and numerical gradients: " << std::endl; +// std::cout << " State: " << state_type << std::endl; +// std::cout << " Object: " << object_type << std::endl; +// std::cout << " Function: " + function_name << "\n" << std::endl; +// +// std::cout << "\nMATLAB Plot command:\n\nclose all; "; +// +// if (function_name == "log_prob_and_fisher") +// std::cout << "plot_fisher_gradient " + output_location << ".tnr\n\n" << std::endl; +// else if (calculate_rank3_hessian) +// std::cout << "plot_rank3_hessian " + output_location << ".tnr3\n\n" << std::endl; +// else if (calculate_hessian) +// std::cout << "plot_hessian " + output_location << ".tnr\n\n" << std::endl; +// else +// std::cout << "plot_gradient " + output_location << "\n\n" << std::endl; +//// + +} + + diff --git a/cmd/test_scan.cpp b/cmd/test_scan.cpp new file mode 100644 index 0000000..a690771 --- /dev/null +++ b/cmd/test_scan.cpp @@ -0,0 +1,173 @@ +/* + Copyright 2008 Brain Research Institute, Melbourne, Australia + + Written by Thomas G Close, 10/09/2010. + + This file is part of MRtrix. + + MRtrix is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + MRtrix is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with MRtrix. If not, see . + +*/ + + +#include "bts/cmd.h" + +#include "bts/common.h" +#include "bts/file.h" +#include "image/header.h" +#include "bts/prob/test/landscape.h" + +#include "bts/inline_functions.h" + +using namespace BTS; + +SET_VERSION_DEFAULT; +SET_AUTHOR ("Thomas G. Close"); +SET_COPYRIGHT (NULL); + +DESCRIPTION = { + "test_scan", + "", + NULL +}; + +ARGUMENTS = { + Argument ("input_peaks","Location of the input peaks file").type_file (), + Argument ("output_image","Location of the output image").optional().type_image_out (), + Argument() +}; + + +double NUM_STEPS_DEFAULT = 100; +double AXIS_SCALE_DEFAULT = 15.0; + +OPTIONS = { + + Option ("num_steps1", "Number of taken along axis.") + + Argument ("num_steps", "").type_integer (1, NUM_STEPS_DEFAULT, LARGE_INT), + + Option ("num_steps2", "Number of taken along second axis.") + + Argument ("num_steps", "").type_integer (1, NUM_STEPS_DEFAULT, LARGE_INT), + + Option ("axis1_scale", "Scale applied to axis1, used to quickly scale binary masks.") + + Argument ("axis1_scale", "").type_float (SMALL_FLOAT, AXIS_SCALE_DEFAULT, LARGE_FLOAT), + + Option ("axis2_scale", "Scale applied to axis2, used to quickly scale binary masks.") + + Argument ("axis2_scale", "").type_float (SMALL_FLOAT, AXIS_SCALE_DEFAULT, LARGE_FLOAT), + +Option() }; + + + +EXECUTE { + + + std::string input_location = argument[0]; + std::string output_location; + + if (argument.size() == 2) + output_location = argument[0].c_str(); + else + output_location = File::strip_extension(input_location) + ".mif"; + + size_t num_steps1 = NUM_STEPS_DEFAULT;; + size_t num_steps2; + + double axis1_scale = AXIS_SCALE_DEFAULT; + double axis2_scale; + + Options opt = get_options("num_steps1"); + if (opt.size()) + num_steps1 = opt[0][0]; + + opt = get_options("num_steps2"); + if (opt.size()) + num_steps2 = opt[0][0]; + else + num_steps2 = num_steps1; + + opt = get_options("axis1_scale"); + if (opt.size()) + axis1_scale = opt[0][0]; + + opt = get_options("axis2_scale"); + if (opt.size()) + axis2_scale = opt[0][0]; + else + axis2_scale = axis1_scale; + + + Prob::Test::Landscape peaks(input_location); + + if (peaks.num_dims() != 2) + throw Exception ("Can only produce scan image for peaks of dimension 2 (" + str(peaks.num_dims()) + " supplied)."); + + MCMC::State point(2); + + MR::Image::Header header; + + header.set_ndim(2); + + header.set_dim(0, num_steps1); + header.set_dim(1, num_steps2); + + header.set_description(0, File::basename("Axis 1")); + header.set_description(1, File::basename("Axis 2")); + + header.set_vox(0, 2.0 * axis1_scale / (double)num_steps1); + header.set_vox(1, 2.0 * axis2_scale / (double)num_steps2); + + + header["num_steps1"] = str(num_steps1); + header["num_steps2"] = str(num_steps2); + + header["axis1_scale"] = str(axis1_scale); + header["axis2_scale"] = str(axis2_scale); + + + File::clear_path(output_location); + + header.create(output_location); + + double inc1 = 2.0 / (double)(num_steps1 - 1); + double inc2 = 2.0 / (double)(num_steps2 - 1); + + MR::Image::Voxel pixel (header); + + //Nicety, makes sure the loop goes out of scope, and prints its close message before the MATLAB plot command is issued. + if (1) { + + MR::DataSet::Loop loop ("Scanning over 2 dimensions...", 0, 2); + loop.start(pixel); + + for (double frac1 = -1.0; frac1 <= 1.0 + inc1/2.0; frac1 += inc1) { // The +inc/2.0 safeguards against rounding errors. + + for (double frac2 = -1.0; frac2 <= 1.0 + inc2/2.0; frac2 += inc2) { + + point[0] = frac1 * axis1_scale; + point[1] = frac2 * axis2_scale; + + pixel.value() = peaks.log_prob(point); + + loop.next(pixel); + + } + + } + } + + std::cout << std::endl << "\nMATLAB plot command:\n\nplot_test_scan " << output_location << "\n" << std::endl; + + +} diff --git a/cmd/thesis_merge.cpp b/cmd/thesis_merge.cpp new file mode 100644 index 0000000..a8f061b --- /dev/null +++ b/cmd/thesis_merge.cpp @@ -0,0 +1,119 @@ +/* + Copyright 2009 Brain Research Institute, Melbourne, Australia + + Created by Tom Close on 13/03/09. + + This file is part of Bayesian Tractlet Sampling (BTS). + + BTS is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + BTS is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with BTS. If not, see . + + */ + +#include "bts/common.h" + +#include "bts/cmd.h" +#include "progressbar.h" + +#include "bts/fibre/track.h" +#include "bts/fibre/track/set.h" + +#include "bts/math/odr.h" + + +#include "bts/inline_functions.h" + + +using namespace BTS; + +SET_VERSION_DEFAULT; +SET_AUTHOR ("Thomas G. Close"); +SET_COPYRIGHT (NULL); + +DESCRIPTION = { + "Trims paths to a sphere of specified radius.", + "The sections of paths that lie outside the radius of the sphere are removed and sections that reenter are split into new paths.", + NULL +}; + +ARGUMENTS = { +// Argument ("input", "The tracks to be offset.").type_file (), +// Argument ("output", "The returned offset tracks.").optional().type_file(), + Argument() +}; + + +OPTIONS = { + + Option ("degree", "The degree of the merged strand.") + + Argument ("degree", "").type_integer (1, 4, LARGE_INT), + + +Option() }; + + +EXECUTE { + + +// std::string input_location = argument[0]; +// std::string output_location; +// +// if (argument.size() > 1) +// output_location = argument[1]; +// else +// output_location = input_location; + + size_t degree = 4; + + Options opt = get_options("degree"); + if (opt.size()) + degree = opt[0][0]; + + Fibre::Strand::Set strands("/home/tclose/thesis/MCMC/data/merge/both.str"); + Fibre::Strand::Set combined; + + MR::ProgressBar pb("Merging..."); + + Fibre::Strand merged = strands[0].merge(strands[1], 100, degree); + + combined.push_back(merged); + + combined.save("/home/tclose/thesis/MCMC/data/merge/merged.str"); + + + //Generate ODR line + Fibre::Track::Set tcks = strands.to_tracks(10); + + std::vector points; + + for (size_t tck_i = 0; tck_i < 2; tck_i++) + for (size_t point_i = 0; point_i < tcks[tck_i].size(); ++point_i) + points.push_back(tcks[tck_i][point_i]); + + Math::Line odr_line = Math::odr(points); + + std::ofstream fout ("/home/tclose/thesis/MCMC/data/merge/odr.txt"); + + fout << odr_line.centre[0] << " " << odr_line.centre[1] << " " << odr_line.centre[2] << " " << std::endl; + fout << odr_line.direction[0] << " " << odr_line.direction[1] << " " << odr_line.direction[2] << " " << std::endl; + +} + + + + + + + + + diff --git a/cmd/trim_fibres.cpp b/cmd/trim_fibres.cpp new file mode 100644 index 0000000..8b653ab --- /dev/null +++ b/cmd/trim_fibres.cpp @@ -0,0 +1,304 @@ +/* + Copyright 2009 Brain Research Institute, Melbourne, Australia + + Created by Tom Close on 13/03/09. + + This file is part of Bayesian Tractlet Sampling (BTS). + + BTS is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + BTS is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with BTS. If not, see . + + */ + +#include "bts/common.h" + +#include "bts/cmd.h" +#include "progressbar.h" + + +#include "phantom/interface.h" + +#include "phantom/trim/trim.h" +#include "bts/fibre/track.h" +#include "bts/fibre/track/set.h" +#include "bts/fibre/tractlet.h" +#include "bts/fibre/tractlet/set.h" + + + +#include "bts/inline_functions.h" + +const size_t NUM_LENGTH_SECTIONS_DEFAULT = 50; +const size_t NUM_WIDTH_SECTIONS_DEFAULT = 40; + +using namespace BTS; + +SET_VERSION_DEFAULT; +SET_AUTHOR ("Thomas G. Close"); +SET_COPYRIGHT (NULL); + +DESCRIPTION = { + "Trims paths to a sphere of specified radius.", + "The sections of paths that lie outside the radius of the sphere are removed and sections that reenter are split into new paths.", + NULL +}; + +ARGUMENTS = { + Argument ("input", "The fibres to be trimmed.").type_file (), + Argument ("output", "The returned trimmed fibres.").optional().type_file(), + Argument() +}; + + +OPTIONS = { + + Option ("degree", "Limit the degree of the Strand coefficients used to describe the strands to the first - degrees") + + Argument ("degree", "Limit the degree of the Strand coefficients used to describe the strands to the first - degrees").type_integer (1, 200, 3), + + Option ("distance", "The radius of the sphere the strands will be trimmed to") + + Argument ("new_sphere_r", "").type_float (SMALL_FLOAT, 1.0, LARGE_FLOAT), + + Option ("length_reject_threshold", "The length below which new strands will be rejected") + + Argument ("length_reject_threshold", "").type_float (SMALL_FLOAT, 1.0, LARGE_FLOAT), + + Option ("num_length_sections", "The number of length sections used in conversion between tractlets or strands and tracks.") + + Argument ("num_length_sections", "").type_integer (1, NUM_LENGTH_SECTIONS_DEFAULT, LARGE_INT), + + Option ("num_width_sections", "The number of width sections used in conversion between tractlets and tracks.") + + Argument ("num_width_sections", "").type_integer (1, NUM_WIDTH_SECTIONS_DEFAULT, LARGE_INT), + + Option ("cube", "Trim the set to a cube instead of the default sphere."), + +Option() }; + + +BTS::Fibre::Track::Set trim_tcks(BTS::Fibre::Track::Set& input_tcks, double sphere_r, double length_reject_threshold, bool trim_to_cube); + +BTS::Fibre::Tractlet::Set trim_tractlets(BTS::Fibre::Tractlet::Set& input_tractlets, double distance, double length_reject_threshold, bool trim_to_cube, size_t num_length_sections, size_t num_width_sections); + +EXECUTE { + + + std::string input_location = argument[0]; + std::string output_location; + + if (argument.size() > 1) + output_location = argument[1].c_str(); + else + output_location = input_location; + + size_t num_length_sections = NUM_LENGTH_SECTIONS_DEFAULT; + size_t num_width_sections = NUM_WIDTH_SECTIONS_DEFAULT; + size_t degree = 3; + double distance = 1.0; + double length_reject_threshold = 0.05; + bool cube = false; + + Options opt = get_options("num_length_sections"); + if (opt.size()) + num_length_sections = opt[0][0]; + + opt = get_options("num_width_sections"); + if (opt.size()) + num_width_sections = opt[0][0]; + + opt = get_options("degree"); + if (opt.size()) + degree = opt[0][0]; + + opt = get_options("distance"); + if (opt.size()) + distance = opt[0][0]; + + opt = get_options("length_reject_threshold"); + if (opt.size()) + length_reject_threshold = opt[0][0]; + + opt = get_options("cube"); + if (opt.size()) + cube = true; + + + if (File::has_or_txt_extension(input_location) || File::has_or_txt_extension(input_location)) { + + BTS::Fibre::Track::Set input(input_location, num_length_sections); + + MR::ProgressBar progress_bar("Trimming strands/tracks..."); + + BTS::Fibre::Track::Set output = trim_tcks(input, distance, length_reject_threshold, cube); + + output.save(output_location, degree); + + } else if (File::has_or_txt_extension(input_location)) { + + MR::ProgressBar progress_bar("Trimming tractlets..."); + + BTS::Fibre::Tractlet::Set input(input_location); + + BTS::Fibre::Tractlet::Set output = trim_tractlets(input, distance, length_reject_threshold, cube, num_length_sections, num_width_sections); + + output.save(output_location); + + } else if (File::has_or_txt_extension(input_location)) { + + MR::ProgressBar progress_bar("Trimming strand sets..."); + + BTS::Fibre::Strand::Set::Reader reader(input_location); + + + std::map props = reader.get_extend_props(); + + props["method"] = "trim"; + props["trim_dist"] = str(distance); + props["cube"] = str(cube); + + std::vector elem_header; + + elem_header.push_back(BTS::Fibre::Track::BUNDLE_INDEX_EPROP); + + BTS::Fibre::Strand::Set::Writer writer(output_location, reader, reader.extend_prop_keys(), elem_header, props); + + BTS::Fibre::Strand::Set strands; + + while (reader.next(strands)) { + + BTS::Fibre::Track::Set tcks = strands.to_tracks(num_length_sections); + + std::map props = strands.get_extend_props(); + + BTS::Fibre::Track::Set trimmed_tcks = trim_tcks(tcks, distance, length_reject_threshold, cube); + + //FIXME: Remove explicit as it should be handled by the "loaded_degree" property + strands = trimmed_tcks.to_strands(strands[0].degree()); + + strands.set_extend_props(props); + + writer.append(strands); + + ++progress_bar; + + } + + } else if (File::has_or_txt_extension(input_location)) { + + MR::ProgressBar progress_bar("Trimming track sets..."); + + BTS::Fibre::Track::Set::Reader reader(input_location); + BTS::Fibre::Track::Set::Writer writer(output_location, reader, reader.extend_prop_keys(), reader.extend_elem_prop_keys(), reader.get_extend_props()); + + BTS::Fibre::Track::Set tracks; + + while (reader.next(tracks)) { + writer.append(trim_tcks(tracks, distance, length_reject_threshold, cube)); + + ++progress_bar; + } + + } else if (File::has_or_txt_extension(input_location)) { + + MR::ProgressBar progress_bar("Trimming tractlet sets..."); + + BTS::Fibre::Tractlet::Set::Reader reader(input_location); + + std::map props = reader.get_extend_props(); + + props["method"] = "trim"; + props["trim_dist"] = str(distance); + props["cube"] = str(cube); + + std::vector elem_header; + + elem_header.push_back(BTS::Fibre::Track::BUNDLE_INDEX_EPROP); + + BTS::Fibre::Tractlet::Set::Writer writer(output_location, reader, reader.extend_prop_keys(), elem_header, props); + + BTS::Fibre::Tractlet::Set tractlets; + + while (reader.next(tractlets)) { + writer.append(trim_tractlets(tractlets, distance, length_reject_threshold, cube, num_length_sections, num_width_sections)); + ++progress_bar; + } + + + } else + throw Exception ("Unrecognised extension for input file '" + File::extension(input_location) + "'."); + + +} + + + + +BTS::Fibre::Track::Set trim_tcks(BTS::Fibre::Track::Set& input_tcks, double distance, double length_reject_threshold, bool trim_to_cube) { + + BTS::Fibre::Track::Set trimmed_tcks(input_tcks.get_extend_props()); + + std::vector > pre_points; + std::vector > post_points; + + Strand_collection c, trimmed_c; + + input_tcks.remove_short_tracks(3); + + generate_pre_points(input_tcks, pre_points); + + generate_post_points(input_tcks, post_points); + + convert_mr_to_nfg(&c, input_tcks, pre_points, post_points); + + trim(&trimmed_c, &c, distance, length_reject_threshold, 0, trim_to_cube); + + convert_nfg_to_mr(trimmed_tcks, pre_points, post_points, &trimmed_c); + + return trimmed_tcks; + +} + + +BTS::Fibre::Tractlet::Set trim_tractlets(BTS::Fibre::Tractlet::Set& input_tractlets, double distance, double length_reject_threshold, bool trim_to_cube, size_t num_length_sections, size_t num_width_sections) { + + //FIXME: Remove this as it should be handled by the "loaded_degree" property + size_t degree = input_tractlets[0].degree(); + + BTS::Fibre::Track::Set input_tcks = input_tractlets.to_tracks(num_length_sections, num_width_sections); + + BTS::Fibre::Track::Set trimmed_tcks = trim_tcks(input_tcks, distance, length_reject_threshold, trim_to_cube); + + BTS::Fibre::Tractlet::Set trimmed_tractlets = trimmed_tcks.to_tractlets(degree); + + trimmed_tractlets.set_extend_props(input_tractlets.get_extend_props()); + + return trimmed_tractlets; + +} + + + + + + + + + + + + + + + + + + + + + diff --git a/gdb_printers/python/bts/__init__.py b/gdb_printers/python/bts/__init__.py new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/gdb_printers/python/bts/__init__.py @@ -0,0 +1 @@ + diff --git a/gdb_printers/python/bts/fibre/__init__.py b/gdb_printers/python/bts/fibre/__init__.py new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/gdb_printers/python/bts/fibre/__init__.py @@ -0,0 +1 @@ + diff --git a/gdb_printers/python/bts/fibre/__init__.pyc b/gdb_printers/python/bts/fibre/__init__.pyc new file mode 100644 index 0000000000000000000000000000000000000000..bf02ca8008323e3078c75c3d076a1b313f590048 GIT binary patch literal 159 zcmZSn%*(ZV<~qM*1}I1X8Urs|g@=j0cs z>O1GBr0RzhB_@~Trxzs_WK`;>rzFJ}6lLa>q!tzH7gUyHc_`t d=4F<|$Lj%QIDm%P. + +import gdb +import itertools +import re + + + +class TriplePrinter: + "Print Triple" + + def __init__(self, val): + self.val = val + + def to_string(self): + return self.val['p'] + + def display_hint(self): + return 'array' + + +class CoordPrinter: + "Print Coord" + + def __init__(self, val): + self.val = val + + def to_string(self): + x = self.val['data'].dereference() + y = (self.val['data'] + self.val['stride']).dereference() + z = (self.val['data'] + 2 * self.val['stride']).dereference() + return "[%g, %g, %g]" % (x,y,z) + + def display_hint(self): + return 'array' + + +# +#class FibreTractletPrinter: +# "Print Fibre::Strand and Fibre::Track objects" +# +# class _iterator: +# def __init__ (self, size, degree, stride, data_ptr): +# self.size = size +# self.degree = degree +# self.stride = stride +# self.data_ptr = data_ptr +# self.count = 0 +# self.x1_offset = 0 +# self.y1_offset = stride +# self.z1_offset = stride * 2 +# self.x2_offset = stride * degree * 3 +# self.y2_offset = stride * (degree * 3 + 1) +# self.z2_offset = stride * (degree * 3 + 2) +# self.x3_offset = stride * (degree * 6) +# self.y3_offset = stride * (degree * 6 + 1) +# self.z3_offset = stride * (degree * 6 + 2) +# +# def __iter__(self): +# return self +# +# def next(self): +# if self.count == self.size: +# raise StopIteration +# count = self.count +# x1 = str((self.data_ptr + self.x1_offset).dereference()) +# y1 = str((self.data_ptr + self.y1_offset).dereference()) +# z1 = str((self.data_ptr + self.z1_offset).dereference()) +# x2 = str((self.data_ptr + self.x2_offset).dereference()) +# y2 = str((self.data_ptr + self.y2_offset).dereference()) +# z2 = str((self.data_ptr + self.z2_offset).dereference()) +# x3 = str((self.data_ptr + self.x3_offset).dereference()) +# y3 = str((self.data_ptr + self.y3_offset).dereference()) +# z3 = str((self.data_ptr + self.z3_offset).dereference()) +# self.data_ptr = self.data_ptr + self.stride * 3 +# self.count = self.count + 1 +# return ('[%d]' % count, gdb.Value(x1 + " " + y1 + " " + z1 + " | " + +# x2 + " " + y2 + " " + z2 + " | " + +# x3 + " " + y3 + " " + z3)) +# +# def __init__(self, typename, val): +# self.typename = typename +# self.val = val +# +# def children(self): +# return self._iterator(self.val['sze'], +# self.val['dgree'], +# self.val['stride'], +# self.val['data']) +# +# def to_string(self): +# return ("%s: size %d" % (self.typename, self.val['sze'])) + +#def get_element(): + +class FibreStrandTrackPrinter: + "Print Fibre::Strand and Fibre::Track objects" + + def __init__(self, typename, val): + self.typename = typename + self.val = val + self.stride = val['stride'] + self.data_ptr = val['data'] + self.size = self.val['sze'] + + def children(self): + for i in xrange(self.size): + x = self.next_elem() + y = self.next_elem() + z = self.next_elem() + yield '%d' % i, '[%g, %g, %g]' % (x,y,z) + + def to_string(self): + if self.typename == 'Fibre::Strand': + size_name = 'degree' + else: + size_name = 'size' + return ("%s (%s=%d):" % (self.typename, size_name, self.size)) + + def next_elem(self): + elem = self.data_ptr.dereference() + self.data_ptr = self.data_ptr + self.stride + return elem + + + +class FibreTractletPrinter: + "Print Fibre::Strand and Fibre::Track objects" + + def __init__(self, val): + self.val = val + self.stride = val['stride'] + self.data_ptr = val['data'] + self.size = self.val['sze'] + self.degree = self.val['dgree'] + + def children(self): + for i in xrange(self.degree): + yield '%d' % i, '[%g, %g, %g | %g, %g, %g | %g, %g, %g ]' % (self.get_elem(i, 0, 0), self.get_elem(i, 0, 1), self.get_elem(i, 0, 2), + self.get_elem(i, 1, 0), self.get_elem(i, 1, 1), self.get_elem(i, 1, 2), + self.get_elem(i, 2, 0), self.get_elem(i, 2, 1), self.get_elem(i, 2, 2)) + + def to_string(self): + return ("Fibre::Tractlet (degree=%d): " % self.degree) + + def get_elem(self, degree_i, ax_i, dim_i): + address = self.data_ptr + ((ax_i * self.degree + degree_i) * 3 + dim_i) * self.stride + return address.dereference() + + + +class FibreSectionPrinter: + "Print Fibre::Strand::Section" + + class _iterator: + def __init__ (self, section, stride, data): + self.field = 'position' + self.stride = stride + self.data = data + + def __iter__(self): + return self + + def next(self): + if self.field == 'end': + raise StopIteration + elif self.field == 'position': + self.field = 'tangent' + x = str(self.data_ptr.dereference()) + y = str((self.data_ptr + self.stride * 1).dereference()) + z = str((self.data_ptr + self.stride * 2).dereference()) + return ('position', gdb.Value("[" + x + ", " + y + ", " + z + "]")) + elif self.field == 'tangent': + self.field = 'intensity' + x = str((self.data_ptr + self.stride * 3).dereference()) + y = str((self.data_ptr + self.stride * 4).dereference()) + z = str((self.data_ptr + self.stride * 5).dereference()) + return ('tangent', gdb.Value("[" + x + ", " + y + ", " + z + "]")) + elif self.field == 'intensity': + self.field = 'end' + intensity = (self.data + 6 * self.stride).dereference() + return ('intensity', gdb.Value(intensity)) + + else: + raise StopIteration + + + def __init__(self, typename, val): + self.typename = typename + self.val = val + + def children(self): + return self._iterator(self.val['stride'], + self.val['data']) + + def to_string(self): + return "%s" % self.typename + + + class _iterator: + def __init__ (self, size, degree, stride, data_ptr): + self.size = size + self.degree = degree + self.stride = stride + self.data_ptr = data_ptr + self.count = 0 + self.x1_offset = 0 + self.y1_offset = stride + self.z1_offset = stride * 2 + self.x2_offset = stride * degree * 3 + self.y2_offset = stride * (degree * 3 + 1) + self.z2_offset = stride * (degree * 3 + 2) + self.x3_offset = stride * (degree * 6) + self.y3_offset = stride * (degree * 6 + 1) + self.z3_offset = stride * (degree * 6 + 2) + + def __iter__(self): + return self + + def next(self): + if self.count == self.size: + raise StopIteration + count = self.count + x1 = (self.data_ptr + self.x1_offset).dereference() + y1 = (self.data_ptr + self.y1_offset).dereference() + z1 = (self.data_ptr + self.z1_offset).dereference() + x2 = (self.data_ptr + self.x2_offset).dereference() + y2 = (self.data_ptr + self.y2_offset).dereference() + z2 = (self.data_ptr + self.z2_offset).dereference() + x3 = (self.data_ptr + self.x3_offset).dereference() + y3 = (self.data_ptr + self.y3_offset).dereference() + z3 = (self.data_ptr + self.z3_offset).dereference() + self.data_ptr = self.data_ptr + self.stride * 3 + self.count = self.count + 1 + return ('[%d]' % count, gdb.Value("%f.4 %f.4 %f.4 | %f.4 %f.4 %f.4 | %f.4 %f.4 %f.4 " % (x1, y1, z1, x2, y2, z2, x3, y3, z3))) + + def __init__(self, typename, val): + self.typename = typename + self.val = val + + + + def to_string(self): + return ("%s: size %d" % (self.typename, self.val['sze'])) + + +class FibreSetPrinter: + "Print Fibre::Set" + + class _iterator: + def __init__ (self, set, size): + self.set = set + self.size = size + self.count = 0 + + def __iter__(self): + return self + + def next(self): + if self.count == self.size: + raise StopIteration + count = self.count + self.count = self.count + 1 + elem = self.set['elem'](count) + return ('[%d]' % count, elem) + + def __init__(self, typename, val): + self.typename = typename + self.val = val + + def children(self): + return self._iterator(self.val, + self.val['sze']) + + def to_string(self): + return ("%s: size %d" % (self.typename, self.val['sze'])) + + + +def register_bts_fibre_printers (obj): + "Register Bayesian Tractlet Sampling (BTS) Fibre pretty-printers with objfile Obj." + + if obj == None: + obj = gdb + + obj.pretty_printers.append (lookup_function) + + +def lookup_function (val): + "Look-up and return a pretty-printer that can print val." + + # Get the type. + type = val.type + + # If it points to a reference, get the reference. + if type.code == gdb.TYPE_CODE_REF: + type = type.target () + + # Get the unqualified type, stripped of typedefs. + type = type.unqualified ().strip_typedefs () + + # Get the type name. + typename = type.tag + if typename == None: + return None + + # Iterate over local dictionary of types to determine + # if a printer is registered for that type. Return an + # instantiation of the printer if found. + for function in pretty_printers_dict: + if function.search (typename): + return pretty_printers_dict[function] (val) + + # Cannot find a pretty printer. Return None. + return None + +def build_bts_fibre_dictionary (): + # bts objects requiring pretty-printing. + # In order from: + pretty_printers_dict[re.compile('^CoordView$')] = lambda val: CoordViewPrinter(val) + pretty_printers_dict[re.compile('^BTS::Triple<.*>$')] = lambda val: TriplePrinter(val) + pretty_printers_dict[re.compile('^BTS::Coord$')] = lambda val: CoordPrinter(val) + pretty_printers_dict[re.compile('^BTS::Fibre::Strand$')] = lambda val: FibreStrandTrackPrinter("Fibre::Strand", val) + pretty_printers_dict[re.compile('^BTS::Fibre::Tractlet$')] = lambda val: FibreTractletPrinter(val) + pretty_printers_dict[re.compile('^BTS::Fibre::Track$')] = lambda val: FibreStrandTrackPrinter("Fibre::Track", val) +# pretty_printers_dict[re.compile('^BTS::Fibre::Strand::Set$')] = lambda val: FibreSetPrinter("Fibre::Strand::Set", val) +# pretty_printers_dict[re.compile('^BTS::Fibre::Tractlet::Set$')] = lambda val: FibreSetPrinter("Fibre::Tractlet::Set", val) +# pretty_printers_dict[re.compile('^BTS::Fibre::Set<.*>$')] = lambda val: FibreSetPrinter("Fibre::Set", val) +# pretty_printers_dict[re.compile('^BTS::Fibre::Track::Set$')] = lambda val: FibreSetPrinter("Fibre::Track::Set", val) +# pretty_printers_dict[re.compile('^BTS::Fibre::Strand::Tensor$')] = lambda val: FibreStrandPrinter("Fibre::Strand::Tensor", val) +# pretty_printers_dict[re.compile('^BTS::Fibre::Tractlet::Tensor$')] = lambda val: FibreTractletPrinter("Fibre::Tractlet::Tensor", val) +# pretty_printers_dict[re.compile('^BTS::Fibre::Track::Tensor$')] = lambda val: FibreTrackPrinter("Fibre::Track::Tensor", val) +# pretty_printers_dict[re.compile('^BTS::Fibre::Strand::Set::Tensor$')] = lambda val: FibreSetPrinter("Fibre::Strand::Set::Tensor", val) +# pretty_printers_dict[re.compile('^BTS::Fibre::Tractlet::Set::Tensor$')] = lambda val: FibreSetPrinter("Fibre::Tractlet::Set::Tensor", val) + pretty_printers_dict[re.compile('^BTS::Fibre::Tractlet::Section$')] = lambda val: FibreSectionPrinter("Fibre::Tractlet::Section", val) + pretty_printers_dict[re.compile('^BTS::Fibre::Strand::BasicSection$')] = lambda val: FibreSectionPrinter("Fibre::Strand::BasicSection", val) + pretty_printers_dict[re.compile('^BTS::Fibre::Strand::Section$')] = lambda val: FibreSectionPrinter("Fibre::Strand::Section", val) +# pretty_printers_dict[re.compile('^BTS::Fibre::Tractlet::Section::Tensor$')] = lambda val: FibreTractletSectionPrinter("Fibre::Tractlet::Section::Tensor", val) +# pretty_printers_dict[re.compile('^BTS::Fibre::Strand::Section::Tensor$')] = lambda val: FibreStrandSectionPrinter("Fibre::Strand::Section::Tensor", val) +# pretty_printers_dict[re.compile('^BTS::Fibre::Strand::BasicSection::Tensor$')] = lambda val: FibreStrandSectionPrinter("Fibre::Strand::BasicSection::Tensor", val) + + +pretty_printers_dict = {} + +build_bts_fibre_dictionary () diff --git a/gdb_printers/python/bts/fibre/printers.pyc b/gdb_printers/python/bts/fibre/printers.pyc new file mode 100644 index 0000000000000000000000000000000000000000..aefc75fbf604252b5107397c4bf514ab2dbcf649 GIT binary patch literal 14345 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 literal 0 HcmV?d00001 diff --git a/gdb_printers/python/bts/image/__init__.py b/gdb_printers/python/bts/image/__init__.py new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/gdb_printers/python/bts/image/__init__.py @@ -0,0 +1 @@ + diff --git a/gdb_printers/python/bts/image/__init__.pyc b/gdb_printers/python/bts/image/__init__.pyc new file mode 100644 index 0000000000000000000000000000000000000000..580b211fb8f0121a0101f7c36b1e6b730340acb7 GIT binary patch literal 159 zcmZSn%*(ZF<~qM*1}I1X8Urs|g@=j0cs z>O1GBr0RzhB_@~Trxzs_WK`;>rzFJ}6lLa>q!tzH7gUyHc_`t d=4F<|$Lj%QIDm%P. + +import gdb +import itertools +import re + + +class ImageVoxelPrinter: + "Print Image::*::Voxel" + + class _iterator: + def __init__ (self, start, finish): + self.item = start + self.finish = finish + self.count = 0 + + def __iter__(self): + return self + + def next(self): + if self.item == self.finish: + raise StopIteration + count = self.count + self.count = self.count + 1 + elt = self.item.dereference() + self.item = self.item + 1 + return ('[%d]' % count, elt) + + def __init__(self, typename, template_type, val): + self.typename = typename + self.template_type = template_type + self.base_val = val.cast(gdb.lookup_type('BTS::Image::Voxel<%s>' % template_type)) + + + def children(self): + return self._iterator(self.base_val['intensities']['_M_impl']['_M_start'], + self.base_val['intensities']['_M_impl']['_M_finish']) + + def to_string(self): + return self.typename + + def display_hint(self): + if self.template_type == 'double': + return 'array' + else: + return '' + + + +class ImageDensityVoxelPrinter: + "Print Image::Density::Voxel" + + class _iterator: + def __init__ (self, val): + self.field = 'coordinate' + self.val = val + + def __iter__(self): + return self + + def next(self): + if self.field == 'end': + raise StopIteration + elif self.field == 'coordinate': + self.field = 'centre_point' + return ('coordinate', self.val['coordinate']) + elif self.field == 'centre_point': + self.field = 'tangent' + return ('centre_point', self.val['centre_point']) + elif self.field == 'dens': + self.field = 'end' + return ('dens', self.val['dens']) + + + def __init__(self, val): + self.val = val + + def to_string(self): + return 'Image::Density::Voxel' + + + +class VoxelIterator: + def __init__(self, rbtree): + self.size = rbtree['_M_t']['_M_impl']['_M_node_count'] + self.node = rbtree['_M_t']['_M_impl']['_M_header']['_M_left'] + self.count = 0 + + def __iter__(self): + return self + + def __len__(self): + return int (self.size) + + def next(self): + if self.count == self.size: + raise StopIteration + result = self.node + self.count = self.count + 1 + if self.count < self.size: + # Compute the next node. + node = self.node + if node.dereference()['_M_right']: + node = node.dereference()['_M_right'] + while node.dereference()['_M_left']: + node = node.dereference()['_M_left'] + else: + parent = node.dereference()['_M_parent'] + while node == parent.dereference()['_M_right']: + node = parent + parent = parent.dereference()['_M_parent'] + if node.dereference()['_M_right'] != parent: + node = parent + self.node = node + return result + + + +class ImageBufferPrinter: + "Print Image::*::Buffer" + + # Turn an VoxelIterator into a pretty-print iterator. + class _iter: + def __init__(self, rbiter, type): + self.rbiter = rbiter + self.count = 0 + self.type = type + + def __iter__(self): + return self + + def next(self): + if self.count % 2 == 0: + n = self.rbiter.next() + n = n.cast(self.type).dereference()['_M_value_field'] + self.pair = n + item = n['first'] + else: + item = self.pair['second'] + result = ('[%d]' % self.count, item) + self.count = self.count + 1 + return result + + def __init__ (self, typename, val): + + self.val = val + + if typename == 'BTS::Image::Buffer': + self.typename = 'BTS::Image::Buffer' + self.voxel_typename = 'BTS::Image::Voxel' + if typename == 'BTS::Image::Density::Buffer': + self.typename = 'BTS::Image::Density::Buffer' + self.voxel_typename = 'BTS::Image::Density::Voxel' + elif typename == 'BTS::Image::Container::Buffer': + self.typename = 'BTS::Image::Container::Buffer< %s >' % val.type.template_argument(0) + self.voxel_typename = 'BTS::Image::Container::Voxel< %s >' % val.type.template_argument(0) + elif typename == 'BTS::Image::Expected::Buffer_tpl': + self.typename = 'BTS::Image::Expected::Buffer_tpl< %s >' % val.type.template_argument(0) + self.voxel_typename = '%s' % val.type.template_argument(0) + elif typename == 'BTS::Image::Observed::Buffer_tpl': + self.typename = 'BTS::Image::Observed::Buffer_tpl< %s >' % val.type.template_argument(0) + self.voxel_typename = '%s' % val.type.template_argument(0) + else: + self.typename = typename + self.voxel_typename = '%s::Voxel' % '::'.join(typename.split('::')[:-1]) + + + + + def to_string (self): + return '%s' % (self.typename) + + def children (self): + nodetype = gdb.lookup_type('std::_Rb_tree_node< std::pair< const BTS::Image::Coord, %s > >' % self.voxel_typename) + nodetype = nodetype.pointer() + return self._iter (VoxelIterator (self.val['voxels']), nodetype) + + def display_hint (self): + return 'map' + +class ImageReferencePrinter: + "Print Image::Reference" + + # Turn an VoxelIterator into a pretty-print iterator. + class _iter: + def __init__(self, rbiter, type): + self.rbiter = rbiter + self.count = 0 + self.type = type + + def __iter__(self): + return self + + def next(self): + if self.count % 2 == 0: + n = self.rbiter.next() + n = n.cast(self.type).dereference()['_M_value_field'] + self.pair = n + item = n['first'] + else: + item = self.pair['second'] + result = ('[%d]' % self.count, item) + self.count = self.count + 1 + return result + + def __init__ (self, typename, val): + + self.val = val + self.typename = typename + self.voxel_typename = 'std::__debug::vector<%s*, std::allocator<%s*> >' % (val.type.template_argument(0), val.type.template_argument(0)) + + def to_string (self): + return '%s' % (self.typename) + + def children (self): + nodetype = gdb.lookup_type('std::_Rb_tree_node< std::pair< const BTS::Image::Coord, %s > >' % self.voxel_typename) + nodetype = nodetype.pointer() + return self._iter (VoxelIterator (self.val['voxels']), nodetype) + + def display_hint (self): + return 'map' + + +class ImagePrinter: + "Print Image::Observed" + + def __init__(self, val): + self.val = val + + def to_string(self): + if self.val['type'].string() == 'trilinear': + return self.val.cast(gdb.lookup_type('BTS::Image::Expected::Trilinear::Buffer')) + + elif self.val['type'].string() == 'top_hat': + return self.val.cast(gdb.lookup_type('BTS::Image::Expected::TopHat::Buffer')) + + elif self.val['type'].string() == 'gaussian': + return self.val.cast(gdb.lookup_type('BTS::Image::Expected::Gaussian::Buffer')) + + elif self.val['type'].string() == 'quartic': + return self.val.cast(gdb.lookup_type('BTS::Image::Expected::Quartic::Buffer')) + + elif self.val['type'].string() == 'realistic': + return self.val.cast(gdb.lookup_type('BTS::Image::Expected::Realistic::Buffer')) + + elif self.val['type'].string() == 'sinc': + return self.val.cast(gdb.lookup_type('BTS::Image::Expected::Sinc::Buffer')) + + elif self.val['type'].string() == 'reverse_sqrt': + return self.val.cast(gdb.lookup_type('BTS::Image::Expected::ReverseSqrt::Buffer')) + + else: + return ("Unknown observed/expected image type '%s'." % self.val['type'].string()) + + +def register_bts_image_printers (obj): + "Register Bayesian Tractlet Sampling (BTS) Image pretty-printers with objfile Obj." + + if obj == None: + obj = gdb + + obj.pretty_printers.append (lookup_function) + +def lookup_function (val): + "Look-up and return a pretty-printer that can print val." + + # Get the type. + type = val.type + + # If it points to a reference, get the reference. + if type.code == gdb.TYPE_CODE_REF: + type = type.target () + + # Get the unqualified type, stripped of typedefs. + type = type.unqualified ().strip_typedefs () + + # Get the type name. + typename = type.tag + if typename == None: + return None + + # Iterate over local dictionary of types to determine + # if a printer is registered for that type. Return an + # instantiation of the printer if found. + for function in pretty_printers_dict: + if function.search (typename): + return pretty_printers_dict[function] (val) + + # Cannot find a pretty printer. Return None. + return None + +def build_bts_image_dictionary (): + # bts objects requiring pretty-printing. + # In order from: + pretty_printers_dict[re.compile('^BTS::Image::Buffer$')] = lambda val: ImageBufferPrinter("BTS::Image::Buffer", val) + pretty_printers_dict[re.compile('^BTS::Image::Expected::Quartic::Buffer$')] = lambda val: ImageBufferPrinter("BTS::Image::Expected::Quartic::Buffer", val) + pretty_printers_dict[re.compile('^BTS::Image::Expected::Gaussian::Buffer$')] = lambda val: ImageBufferPrinter("BTS::Image::Expected::Gaussian::Buffer", val) + pretty_printers_dict[re.compile('^BTS::Image::Expected::Trilinear::Buffer$')] = lambda val: ImageBufferPrinter("BTS::Image::Expected::Trilinear::Buffer", val) + pretty_printers_dict[re.compile('^BTS::Image::Observed::Buffer$')] = lambda val: ImageBufferPrinter("BTS::Image::Observed::Buffer", val) + pretty_printers_dict[re.compile('^BTS::Image::Density::Buffer$')] = lambda val: ImageBufferPrinter("BTS::Image::Density::Buffer", val) + pretty_printers_dict[re.compile('^BTS::Image::Container::Buffer<.*>$')] = lambda val: ImageBufferPrinter("BTS::Image::Container::Buffer", val) + pretty_printers_dict[re.compile('^BTS::Image::Reference::Buffer<.*>$')] = lambda val: ImageReferencePrinter("BTS::Image::Reference::Buffer", val) + pretty_printers_dict[re.compile('^BTS::Image::Expected::Buffer$')] = lambda val: ImagePrinter(val) + pretty_printers_dict[re.compile('^BTS::Image::Expected::Buffer_tpl<.*>$')] = lambda val: ImageBufferPrinter('BTS::Image::Expected::Buffer_tpl', val) + pretty_printers_dict[re.compile('^BTS::Image::Observed::Buffer_tpl<.*>$')] = lambda val: ImageBufferPrinter('BTS::Image::Observed::Buffer_tpl', val) + pretty_printers_dict[re.compile('^BTS::Image::Voxel$')] = lambda val: ImageVoxelPrinter("BTS::Image::Voxel", 'double', val) + pretty_printers_dict[re.compile('^BTS::Image::Expected::Quartic::Voxel$')] = lambda val: ImageVoxelPrinter("BTS::Image::Expected::Quartic::Voxel", 'double', val) + pretty_printers_dict[re.compile('^BTS::Image::Expected::Gaussian::Voxel$')] = lambda val: ImageVoxelPrinter("BTS::Image::Expected::Gaussian::Voxel", 'double', val) + pretty_printers_dict[re.compile('^BTS::Image::Expected::Trilinear::Voxel$')] = lambda val: ImageVoxelPrinter("BTS::Image::Expected::Trilinear::Voxel", 'double', val) + pretty_printers_dict[re.compile('^BTS::Image::Expected::TopHat::Voxel$')] = lambda val: ImageVoxelPrinter("BTS::Image::Expected::TopHat::Voxel",'double', val) + pretty_printers_dict[re.compile('^BTS::Image::Observed::Voxel$')] = lambda val: ImageVoxelPrinter("BTS::Image::Observed::Voxel", 'double', val) + pretty_printers_dict[re.compile('^BTS::Image::Container::Voxel$')] = lambda val: ImageVoxelPrinter("BTS::Image::Container::Voxel", 'BTS::Fibre::Strand', val) + pretty_printers_dict[re.compile('^BTS::Image::Container::Voxel$')] = lambda val: ImageVoxelPrinter("BTS::Image::Container::Voxel", 'BTS::Fibre::Tractlet', val) + pretty_printers_dict[re.compile('^BTS::Image::Container::Voxel$')] = lambda val: ImageVoxelPrinter("BTS::Image::Container::Voxel", 'BTS::Fibre::Strand::Tensor', val) + pretty_printers_dict[re.compile('^BTS::Image::Container::Voxel$')] = lambda val: ImageVoxelPrinter("BTS::Image::Container::Voxel", 'BTS::Fibre::Tractlet::Tensor', val) + pretty_printers_dict[re.compile('^BTS::Image::Container::Voxel< MR::Math::Vector >$')] = lambda val: ImageVoxelPrinter("BTS::Image::Container::Voxel>", ' MR::Math::Vector ', val) + pretty_printers_dict[re.compile('^BTS::Image::Container::Voxel< MR::Math::Matrix >$')] = lambda val: ImageVoxelPrinter("BTS::Image::Container::Voxel>", ' MR::Math::Matrix ', val) + pretty_printers_dict[re.compile('^BTS::Image::Density::Voxel$')] = lambda val: ImageDensityVoxelPrinter(val) + +pretty_printers_dict = {} + +build_bts_image_dictionary () \ No newline at end of file diff --git a/gdb_printers/python/bts/image/printers.pyc b/gdb_printers/python/bts/image/printers.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b43eb32b3510dd7eb115c8d38aa059d754cf7a9e GIT binary patch literal 20204 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. + +import gdb +import itertools +import re + +class ProposalMomentumPrinter: + "Print MCMC::Proposal::Momentum" + + class _iterator: + def __init__ (self, size, stride, data_ptr): + self.size = size + self.stride = stride + self.data_ptr = data_ptr + self.count = 0 + + def __iter__(self): + return self + + def next(self): + if self.count == self.size: + raise StopIteration + count = self.count + elt = self.data_ptr.dereference() + self.data_ptr = self.data_ptr + self.stride + self.count = self.count + 1 + return ('[%d]' % count, elt) + + def __init__(self, typename, val): + self.typename = typename + + if typename == 'MCMC::Proposal::Momentum': + self.val = val + else: + self.val = val.cast(gdb.lookup_type('BTS::MCMC::Proposal::Momentum')) + + def children(self): + return self._iterator(self.val['momen']['size'], + self.val['momen']['stride'], + self.val['momen']['data']) + + def to_string(self): + return ("%s: size %d" % (self.typename, self.val['momen']['size'])) + + + def display_hint(self): + return 'array' + + +def register_bts_mcmc_printers (obj): + "Register Bayesian Tract Sampling (BTS) MCMC pretty-printers with objfile Obj." + + if obj == None: + obj = gdb + + obj.pretty_printers.append (lookup_function) + +def lookup_function (val): + "Look-up and return a pretty-printer that can print val." + + # Get the type. + type = val.type + + # If it points to a reference, get the reference. + if type.code == gdb.TYPE_CODE_REF: + type = type.target () + + # Get the unqualified type, stripped of typedefs. + type = type.unqualified ().strip_typedefs () + + # Get the type name. + typename = type.tag + if typename == None: + return None + + # Iterate over local dictionary of types to determine + # if a printer is registered for that type. Return an + # instantiation of the printer if found. + for function in pretty_printers_dict: + if function.search (typename): + return pretty_printers_dict[function] (val) + + # Cannot find a pretty printer. Return None. + return None + +def build_bts_mcmc_dictionary (): + # bts objects requiring pretty-printing. + # In order from: + pretty_printers_dict[re.compile('^BTS::MCMC::Proposal::Momentum$')] = lambda val: ProposalMomentumPrinter("MCMC::Proposal::Momentum", val) + pretty_printers_dict[re.compile('^BTS::MCMC::Proposal::Momentum::Weighted$')] = lambda val: ProposalMomentumPrinter("MCMC::Proposal::Momentum::Weighted", val) + pretty_printers_dict[re.compile('^BTS::MCMC::Proposal::Momentum::Weighted::NonSeparable$')] = lambda val: ProposalMomentumPrinter("MCMC::Proposal::Momentum::Weighted::NonSeparable", val) + +pretty_printers_dict = {} + +build_bts_mcmc_dictionary () diff --git a/gdb_printers/python/mr/__init__.py b/gdb_printers/python/mr/__init__.py new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/gdb_printers/python/mr/__init__.py @@ -0,0 +1 @@ + diff --git a/gdb_printers/python/mr/math/__init__.py b/gdb_printers/python/mr/math/__init__.py new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/gdb_printers/python/mr/math/__init__.py @@ -0,0 +1 @@ + diff --git a/gdb_printers/python/mr/math/printers.py b/gdb_printers/python/mr/math/printers.py new file mode 100644 index 0000000..dac7c57 --- /dev/null +++ b/gdb_printers/python/mr/math/printers.py @@ -0,0 +1,170 @@ +# Pretty-printers for 'BTS::Fibre::*'. + +# Copyright (C) 2008, 2009 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +import gdb +import itertools +import re + + +class MathVectorPrinter: + "Print Math::Vector" + + class _iterator: + def __init__ (self, size, stride, data_ptr): + self.size = size + self.stride = stride + self.data_ptr = data_ptr + self.count = 0 + + def __iter__(self): + return self + + def next(self): + if self.count == self.size: + raise StopIteration + count = self.count + elt = self.data_ptr.dereference() + self.data_ptr = self.data_ptr + self.stride + self.count = self.count + 1 + return ('[%d]' % count, elt) + + def __init__(self, typename, val): + self.typename = typename + self.val = val + + def children(self): + return self._iterator(self.val['size'], + self.val['stride'], + self.val['data']) + + def to_string(self): + return ("%s: size %d" % (self.typename, self.val['size'])) + + + def display_hint(self): + return 'array' + +class RowPrinter: + + def __init__(self): + print 'done' + + +class MathMatrixPrinter: + "Print Math::Matrix" + + class _iterator: + def __init__ (self, num_rows, num_cols, row_size, data_ptr): + self.num_rows = num_rows + self.num_cols = num_cols + self.row_size = row_size + self.data_ptr = data_ptr + self.row_count = 0 + self.col_count = 0 + + def __iter__(self): + return self + + def next(self): + if self.row_count == self.num_rows: + raise StopIteration + + row_count = self.row_count + col_count = self.col_count + + if col_count == 0: + print '\n' + + elt = self.data_ptr.dereference() + + self.col_count += 1 + if self.col_count == self.num_cols: + self.row_count += 1 + self.col_count = 0 + self.data_ptr = self.data_ptr + (self.row_size - self.num_cols + 1) + else: + self.data_ptr = self.data_ptr + 1 + + return ('(%d,%d)' % (row_count, col_count), elt) + + def __init__(self, typename, val): + self.typename = typename + self.val = val + + def children(self): + return self._iterator(self.val['size1'], + self.val['size2'], + self.val['tda'], + self.val['data']) + + def to_string(self): + return ("%s: rows %d, cols %d" % (self.typename, self.val['size1'], self.val['size2'])) + + + def display_hint(self): + return 'array' + + +def register_mr_math_printers (obj): + "Register MRtrix (MR) Math pretty-printers with objfile Obj." + + if obj == None: + obj = gdb + + obj.pretty_printers.append (lookup_function) + +def lookup_function (val): + "Look-up and return a pretty-printer that can print val." + + # Get the type. + type = val.type + + # If it points to a reference, get the reference. + if type.code == gdb.TYPE_CODE_REF: + type = type.target () + + # Get the unqualified type, stripped of typedefs. + type = type.unqualified ().strip_typedefs () + + # Get the type name. + typename = type.tag + if typename == None: + return None + + # Iterate over local dictionary of types to determine + # if a printer is registered for that type. Return an + # instantiation of the printer if found. + for function in pretty_printers_dict: + if function.search (typename): + return pretty_printers_dict[function] (val) + + # Cannot find a pretty printer. Return None. + return None + +def build_mr_math_dictionary (): + # bts objects requiring pretty-printing. + # In order from: + pretty_printers_dict[re.compile('^MR::Math::Vector<.*>$')] = lambda val: MathVectorPrinter('MR::Math::Vector', val) + pretty_printers_dict[re.compile('^MR::Math::Matrix<.*>$')] = lambda val: MathMatrixPrinter('MR::Math::Matrix', val) + pretty_printers_dict[re.compile('^BTS::Fibre::Strand::Set::Tensor$')] = lambda val: MathMatrixPrinter('BTS::Fibre::Strand::Set::Tensor', val) + pretty_printers_dict[re.compile('^BTS::Fibre::Tract::Set::Tensor$')] = lambda val: MathMatrixPrinter('BTS::Fibre::Tract::Set::Tensor', val) + pretty_printers_dict[re.compile('^BTS::MCMC::State$')] = lambda val: MathVectorPrinter('BTS::MCMC::State', val) + pretty_printers_dict[re.compile('^BTS::MCMC::State::Tensor$')] = lambda val: MathMatrixPrinter('BTS::MCMC::State::Tensor', val) + +pretty_printers_dict = {} + +build_mr_math_dictionary () diff --git a/hessian_todo.txt b/hessian_todo.txt new file mode 100644 index 0000000..1a3e6b6 --- /dev/null +++ b/hessian_todo.txt @@ -0,0 +1,7 @@ +Implement tensor classes +Extend reader and writer classes. +Extend gradient tester to hessian tester +Extend unzip to flatten and zip to unflatten +implement hessian calculations. + + diff --git a/link/metropolis b/link/metropolis new file mode 120000 index 0000000..25f9586 --- /dev/null +++ b/link/metropolis @@ -0,0 +1 @@ +../bin/metropolis__nograd \ No newline at end of file diff --git a/matlab/CSD/SH2RH.m b/matlab/CSD/SH2RH.m new file mode 100644 index 0000000..f2d1294 --- /dev/null +++ b/matlab/CSD/SH2RH.m @@ -0,0 +1,16 @@ +function RH = SH2RH (SH) + +% function RH = SH2RH (SH) +% +% Calculate the rotational harmonic decomposition up to +% harmonic order 'lmax'for an axially and antipodally +% symmetric surface 'SH' (in SH coefficients). Note that +% all m~=0 coefficients will be ignored as axial symmetry +% is assumed. + +lmax = lmax_for_SH (SH); +D_SH = gen_delta (0, 0, lmax); +k = find (D_SH); +RH = SH(k)./D_SH(k); + + diff --git a/matlab/CSD/SH2amp.m b/matlab/CSD/SH2amp.m new file mode 100644 index 0000000..74b7283 --- /dev/null +++ b/matlab/CSD/SH2amp.m @@ -0,0 +1,8 @@ +function S = SH2amp (SH, scheme) + +% function S = SH2amp (SH, scheme) +% +% Maps SH coefficients 'SH' to amplitudes along directions +% in 'scheme' + +S = scheme.sh(:, 1:size(SH,1))*SH; diff --git a/matlab/CSD/amp2SH.m b/matlab/CSD/amp2SH.m new file mode 100644 index 0000000..12809a5 --- /dev/null +++ b/matlab/CSD/amp2SH.m @@ -0,0 +1,13 @@ +function SH = amp2SH (S, scheme); + +% function SH = amp2SH (S, scheme); +% +% Maps signals 'S' measured along directions in 'scheme' +% the corresponding even SH coefficients + +if ~isfield (scheme, 'shinv') + scheme.shinv = pinv(scheme.sh); +end + +SH = scheme.shinv * S; + diff --git a/matlab/CSD/c2s.m b/matlab/CSD/c2s.m new file mode 100644 index 0000000..f39f615 --- /dev/null +++ b/matlab/CSD/c2s.m @@ -0,0 +1,8 @@ +function S = c2s(X) + +% Convert cartesian coordinates to the equivalent spherical coordinates. +% Assumes X = [ X Y Z ], and returns S = [ el az r ]. + +S(:,3) = sqrt(sum(X.^2, 2)); +S(:,1) = acos(X(:,3)./S(:,3)); +S(:,2) = atan2(X(:,2), X(:,1)); diff --git a/matlab/CSD/csdeconv.m b/matlab/CSD/csdeconv.m new file mode 100644 index 0000000..40b64d6 --- /dev/null +++ b/matlab/CSD/csdeconv.m @@ -0,0 +1,69 @@ +function [ F_SH, num_it ] = csdeconv(R_RH, S_SH, scheme, lambda, tau) + +% function F_SH = SR_csdeconv(R_RH, S_SH, lambda, tau, scheme) +% +% Constrained spherical deconvolution: +% +% deconvolves the axially symmetric response function 'R_RH' +% (in RH coefficients) from the surface 'S_SH' (in SH +% coefficients) to give the surface 'F_SH' (in SH coefficients), +% by constraining the corresponding amplitudes of 'F_SH' +% calculated along the directions given by 'scheme') to be +% non-negative. The optional parameters 'lambda' and 'tau' +% correspond to the regularisation weight (1 by default) and the +% threshold on the FOD amplitude used to identify negative lobes +% (0.1 by default). + + + +if ~exist('lambda'), lambda = 1; end +if ~exist('tau'), tau = 0.1; end + + +% guess appropriate value of lmax (assuming no super-resolution): +lmax = lmax_for_SH (S_SH); +if scheme.lmax < lmax + lmax = scheme.lmax; + S_SH(nSH_for_lmax(lmax)+1:end,:) = []; +end + + +% build forward spherical convolution matrix up to lmax: +fconv = []; +for l = 0:2:lmax + fconv = [ fconv; R_RH(l/2+1)*ones(2*l+1,1) ]; +end +fconv = [ diag(fconv) zeros(size(fconv,1),size(scheme.sh,2)-size(fconv,1)) ]; + + +% generate initial FOD estimate, truncated at lmax = 4: +F_SH = fconv\S_SH; +F_SH (nSH_for_lmax(4)+1:end,1) = 0; + + +% set threshold on FOD amplitude used to identify 'negative' values: +threshold = tau*mean (scheme.sh*F_SH); + + +% scale lambda to account for differences in the number of +% SH coefficients and number of mapped directions; +lambda = lambda * size(fconv,1)*R_RH(1)/size(scheme.sh,1); + + +% main iteration loop: +k = []; +for num_it = 1:50 + A = scheme.sh*F_SH; + k2 = find (A < threshold); + if size(k2,1) + size (fconv,1) < size(scheme.sh,2) + disp ('too few negative directions identified - failed to converge'); + return; + end + if size(k) == size(k2), if k == k2, return; end; end + k = k2; + M = [ fconv; lambda*scheme.sh(k,:) ]; + S = [ S_SH; zeros(size(k,1),1) ]; + F_SH = M\S; +end + +disp ('maximum number of iterations exceeded - failed to converge'); diff --git a/matlab/CSD/dir300.txt b/matlab/CSD/dir300.txt new file mode 100644 index 0000000..a7d7421 --- /dev/null +++ b/matlab/CSD/dir300.txt @@ -0,0 +1,300 @@ + 0.0000000e+00 0.0000000e+00 1.0000000e+00 + -9.9987560e-01 -2.6532597e-06 -1.5773019e-02 + -6.8010937e-01 6.6563465e-01 3.0721615e-01 + -5.2889610e-01 2.9051096e-02 8.4818922e-01 + -6.6922575e-02 -6.4608458e-01 7.6032630e-01 + 9.8690777e-01 1.1303241e-01 1.1505099e-01 + -8.9625014e-01 3.3586072e-01 2.8971239e-01 + -9.9015526e-01 1.0606501e-01 9.1338844e-02 + -2.3383570e-01 1.8841521e-01 9.5384515e-01 + -6.5073275e-02 8.8710289e-01 4.5696164e-01 + 2.1098611e-01 -9.2461705e-01 3.1712486e-01 + -2.2451976e-01 9.7285312e-01 -5.6104198e-02 + 6.3308282e-01 -7.7230629e-01 5.2432273e-02 + -7.1113101e-02 9.7532153e-01 2.0902353e-01 + -7.7254497e-01 -3.5898443e-01 5.2374083e-01 + 4.1556590e-01 1.4201578e-01 8.9840776e-01 + 5.5003720e-01 -7.2319126e-01 4.1767628e-01 + 1.2457513e-01 -5.1299763e-01 8.4930234e-01 + 5.9189328e-01 7.3464224e-01 3.3160689e-01 + 2.1062288e-01 -2.1154906e-01 9.5440295e-01 + -4.5110365e-01 -7.8460181e-01 4.2532986e-01 + 7.7303521e-01 -3.8080569e-01 5.0734957e-01 + 9.2129162e-01 3.5854283e-01 1.5056160e-01 + -5.6108959e-01 7.5537652e-01 3.3850376e-01 + -4.6962489e-01 3.2253892e-01 8.2184007e-01 + 3.4697589e-01 -1.5204366e-01 9.2546769e-01 + 7.4613669e-01 6.6106615e-01 7.9193314e-02 + -8.9558399e-01 4.2077334e-01 -1.4449606e-01 + 5.9009479e-01 -6.1861083e-01 5.1875696e-01 + -2.4260958e-02 -9.0289669e-01 4.2917242e-01 + -3.5469146e-01 2.5983108e-01 8.9815465e-01 + 7.0112317e-01 6.2993034e-01 3.3408692e-01 + 6.4920411e-01 4.9868689e-01 5.7432170e-01 + -4.6875123e-01 -5.9128660e-01 6.5624115e-01 + -4.9906670e-01 8.4096928e-01 2.0905287e-01 + 6.3347818e-01 -7.1670442e-01 2.9161647e-01 + -9.6347278e-01 7.5538878e-02 2.5693204e-01 + 8.7480531e-02 6.8258209e-01 7.2555416e-01 + 1.8927853e-02 7.7696898e-01 6.2925427e-01 + 8.3754009e-01 -4.7362951e-01 2.7239985e-01 + 3.7844995e-03 9.9687975e-01 7.8844409e-02 + -6.4163194e-02 5.2045615e-01 8.5147430e-01 + 9.1397131e-01 1.9404277e-01 3.5637598e-01 + 7.5910686e-01 4.0238830e-01 5.1170346e-01 + -8.2045943e-01 4.5099565e-01 3.5135345e-01 + 6.8453960e-01 -5.0179064e-01 5.2878322e-01 + -7.8367408e-02 3.8647218e-01 9.1896562e-01 + -8.5350255e-01 -3.3736445e-01 3.9713805e-01 + 3.1088091e-01 8.9565992e-01 3.1803517e-01 + -9.3920299e-02 2.4392349e-01 9.6523588e-01 + -9.5779598e-01 2.1226440e-01 1.9383160e-01 + 4.3507720e-01 -8.8054517e-01 1.8801069e-01 + -4.3140148e-01 8.3365815e-01 3.4482874e-01 + -4.5929096e-01 -1.0370157e-01 8.8221188e-01 + 3.7014383e-01 -9.2721456e-01 5.7155163e-02 + 3.4095580e-01 6.3826340e-01 6.9019488e-01 + 9.5284581e-01 -2.8430713e-01 1.0608632e-01 + -9.4758086e-01 -6.3471393e-02 3.1314836e-01 + 7.2034271e-01 5.3155755e-01 4.4559280e-01 + 4.9977745e-01 -5.8898098e-01 6.3507787e-01 + 4.9469530e-01 8.6539488e-01 7.9801384e-02 + -7.7732006e-01 -4.6857582e-01 4.1977402e-01 + 7.8935132e-02 -7.4395652e-01 6.6354951e-01 + -2.1699526e-01 -7.6169167e-01 6.1052343e-01 + -6.4979398e-01 5.4160992e-01 5.3331648e-01 + 6.9663676e-02 -2.6707259e-01 9.6115514e-01 + 4.0231781e-01 -4.0199595e-01 8.2252030e-01 + -7.6664868e-01 6.4126049e-01 -3.2168123e-02 + -6.8327748e-01 1.3658237e-01 7.1727062e-01 + 2.1740663e-01 7.1787700e-01 6.6135238e-01 + -8.4357378e-01 3.2251507e-01 4.2938015e-01 + -7.6411358e-01 -5.6766123e-01 3.0641666e-01 + 1.5103686e-01 8.1203597e-01 5.6372462e-01 + 4.7718503e-02 2.9726674e-01 9.5360129e-01 + -8.1864737e-02 -9.9533545e-01 5.1044135e-02 + -7.1813042e-02 -7.5298409e-01 6.5410844e-01 + -2.0792770e-01 4.7153058e-01 8.5698599e-01 + -9.6278993e-01 -1.7253664e-01 2.0800639e-01 + 9.2157824e-01 -3.8819196e-01 7.4632673e-04 + 1.5962730e-01 -3.7846507e-01 9.1174740e-01 + -6.1252019e-01 6.5551610e-01 4.4172124e-01 + -2.5017014e-01 -3.2402069e-01 9.1237355e-01 + 1.5778142e-01 9.8429738e-01 7.9143471e-02 + -5.8579709e-01 -5.9553681e-01 5.4970690e-01 + 7.3218361e-01 -9.2384509e-03 6.8104464e-01 + 2.2566664e-01 -7.0846911e-01 6.6868983e-01 + 9.8564873e-01 -3.0269518e-02 1.6607330e-01 + -1.5797351e-01 7.1264829e-01 6.8350332e-01 + 4.2340502e-01 6.9792150e-01 5.7761039e-01 + -9.2188449e-01 -3.8745685e-01 -2.4836707e-03 + -3.4446997e-01 -7.7330789e-01 5.3229254e-01 + 9.1546684e-01 -3.1531313e-01 2.4999620e-01 + 9.4521362e-03 -3.9914848e-01 9.1683758e-01 + -5.5992158e-01 5.0794439e-01 6.5458408e-01 + 5.4101987e-01 1.7847143e-01 8.2185488e-01 + -5.7321139e-01 -6.9469748e-01 4.3453897e-01 + 7.7312490e-01 1.2334775e-01 6.2214405e-01 + 8.2160657e-01 -5.5231544e-01 1.4110384e-01 + -5.1009778e-02 6.4276720e-01 7.6436139e-01 + 6.0548499e-03 9.4218155e-01 3.3504814e-01 + 8.4613085e-01 3.0244822e-01 4.3884809e-01 + 4.1175173e-01 -7.9841749e-01 4.3930630e-01 + 3.8082029e-02 -8.3462061e-01 5.4950723e-01 + 2.9391993e-01 -9.3691772e-01 1.8919898e-01 + -7.0979827e-01 -1.1998845e-01 6.9411036e-01 + -4.5817610e-01 4.6128803e-01 7.5979472e-01 + -5.3066753e-01 6.2927212e-01 5.6781033e-01 + -8.2693917e-01 -5.3518132e-01 1.7248933e-01 + -3.4836048e-01 -9.3523428e-01 -6.3101721e-02 + -3.9654811e-01 4.8214914e-02 9.1674692e-01 + -4.8786435e-01 7.3654101e-01 4.6850369e-01 + 1.8798456e-01 3.4657361e-01 9.1899322e-01 + -2.9995445e-01 6.5903156e-01 6.8971352e-01 + -5.5190779e-01 -3.6967899e-01 7.4748594e-01 + -9.8759054e-01 -3.2713701e-02 1.5360577e-01 + 4.0320849e-01 8.9348108e-01 1.9777379e-01 + -2.2179533e-01 3.3373972e-01 9.1620120e-01 + 2.4137899e-02 1.5173608e-01 9.8812627e-01 + 5.7655616e-01 3.0951213e-01 7.5616482e-01 + -4.7212106e-01 1.6959413e-01 8.6506620e-01 + 6.8610717e-01 2.2543313e-01 6.9169130e-01 + -4.3618790e-01 -8.9817146e-01 5.5028517e-02 + -6.9702199e-01 -7.1504732e-01 5.3550699e-02 + -5.6889403e-01 8.1889973e-01 7.5913225e-02 + 6.4830669e-01 9.4920496e-02 7.5543930e-01 + -1.1663744e-01 9.6128428e-02 9.8851152e-01 + -5.4652008e-01 -7.7854067e-01 3.0852912e-01 + -3.2077146e-01 -9.2823883e-02 9.4259715e-01 + 8.4234898e-01 1.8644395e-02 5.3860986e-01 + -3.6873303e-01 -2.2947140e-01 9.0076569e-01 + -2.0412410e-01 -1.8845748e-01 9.6063371e-01 + -3.1829498e-01 -8.5509328e-01 4.0927227e-01 + 4.7029482e-01 8.2450781e-01 3.1465800e-01 + -4.3489629e-01 5.8973842e-01 6.8049527e-01 + 4.9084641e-01 -8.1335632e-01 3.1228400e-01 + -9.1573628e-01 -3.0837445e-01 2.5755050e-01 + -4.0013062e-01 7.0423229e-01 5.8647452e-01 + -8.1266652e-01 -5.8194170e-01 3.0281697e-02 + 7.0348340e-01 -6.9253675e-01 1.5969959e-01 + 5.6894509e-01 4.4539885e-01 6.9131856e-01 + -5.8201514e-01 2.3004000e-01 7.7996152e-01 + 4.6506226e-01 -7.0080224e-01 5.4091896e-01 + 6.2351680e-01 -5.0969352e-02 7.8014673e-01 + 6.2156980e-01 -4.3790363e-01 6.4953167e-01 + 4.5876725e-01 5.4643934e-01 7.0066872e-01 + -9.2558730e-01 3.5016235e-01 1.4378621e-01 + -2.4522706e-01 -9.6852955e-01 4.2593437e-02 + -2.5460069e-01 -9.2304929e-01 2.8837215e-01 + -9.8771476e-01 1.4244848e-01 -6.4249387e-02 + -8.8756343e-01 -8.2148963e-02 4.5330200e-01 + -5.0394286e-03 -9.8354916e-01 1.8057037e-01 + -8.9734056e-02 -9.4963285e-01 3.0024198e-01 + -3.5441191e-01 8.0669190e-01 4.7290631e-01 + 4.9750362e-01 -4.7176148e-01 7.2796378e-01 + 5.8347153e-01 -1.9525999e-01 7.8831117e-01 + 9.1412655e-01 -2.0347793e-01 3.5066990e-01 + 3.6642672e-01 -5.3790945e-01 7.5920016e-01 + 7.6942436e-01 -4.9406851e-01 4.0482398e-01 + -3.3235345e-01 -9.2956315e-01 1.5954164e-01 + -8.6019855e-01 4.8438633e-01 1.5946266e-01 + 5.0728527e-01 -8.5993872e-01 5.6276579e-02 + 5.0092258e-01 7.3737586e-01 4.5315938e-01 + 2.8077128e-01 1.0132112e-01 9.5441161e-01 + -3.9812605e-01 -8.7241002e-01 2.8354261e-01 + -3.2958602e-01 5.3650394e-01 7.7687617e-01 + -6.4059814e-01 -2.4980861e-01 7.2610584e-01 + -7.7129786e-01 3.0377497e-01 5.5930348e-01 + 2.9923150e-01 -3.2106234e-01 8.9854298e-01 + 5.4075794e-01 6.0319966e-01 5.8628578e-01 + -7.5004334e-01 -2.4166011e-01 6.1565849e-01 + -9.5630717e-01 -2.7598725e-01 9.6476036e-02 + -8.3975950e-01 -2.2283910e-01 4.9512294e-01 + -5.0303232e-01 -8.4533867e-01 1.7989167e-01 + -8.4956167e-01 -4.4171094e-01 2.8833385e-01 + -2.9217294e-01 8.9354391e-01 3.4090212e-01 + -5.0022643e-01 -2.5221460e-01 8.2834855e-01 + 2.1303264e-01 6.0692881e-01 7.6567259e-01 + 5.3017459e-01 -3.3505017e-01 7.7888143e-01 + 8.5411829e-01 4.6470453e-01 2.3352012e-01 + -8.4438370e-01 3.9159019e-02 5.3430584e-01 + 2.4851188e-01 -4.6668796e-02 9.6750394e-01 + -8.5254200e-01 5.2260722e-01 7.3362610e-03 + -6.2642474e-01 -7.5821528e-01 1.8083593e-01 + -2.5497214e-01 4.0345205e-02 9.6610635e-01 + -9.1450143e-01 5.7242495e-02 4.0051271e-01 + 6.1595611e-01 6.3986075e-01 4.5953922e-01 + -7.8251434e-01 5.6551560e-01 2.6050606e-01 + -9.6650091e-01 -2.5088228e-01 -5.4167150e-02 + 2.6656208e-01 -4.6304810e-01 8.4529942e-01 + 7.9936401e-01 -1.1653188e-01 5.8943830e-01 + 6.7764304e-01 7.0577999e-01 2.0657810e-01 + -4.7091713e-01 -6.9333452e-01 5.4545788e-01 + -1.7372231e-01 -8.9450003e-01 4.1193476e-01 + -6.2299641e-01 7.5580340e-01 2.0158544e-01 + -1.4908344e-01 9.8573262e-01 7.8136599e-02 + -4.3844964e-01 8.9557017e-01 7.5604116e-02 + 9.6199159e-01 -1.7440823e-01 2.1012844e-01 + -5.7819330e-01 -4.8670180e-01 6.5483881e-01 + -7.2554791e-01 5.5798332e-01 4.0278388e-01 + -1.1806859e-01 8.0971990e-01 5.7481605e-01 + 7.7687737e-01 2.6505428e-01 5.7114603e-01 + -2.2061733e-01 9.5302915e-01 2.0751730e-01 + -6.8277196e-01 -5.8870784e-01 4.3271876e-01 + 4.3746062e-01 2.8550001e-01 8.5271211e-01 + 8.2764081e-02 -6.3460483e-01 7.6839236e-01 + 8.1642844e-01 4.3769062e-01 3.7665836e-01 + -8.6027563e-01 1.7924856e-01 4.7727958e-01 + 2.2778643e-01 -5.9481304e-01 7.7091555e-01 + -6.6203048e-01 -6.8072893e-01 3.1356620e-01 + 2.9852101e-01 7.7882080e-01 5.5165512e-01 + 6.9950809e-01 -1.5553657e-01 6.9749323e-01 + 8.5129413e-02 8.8816882e-01 4.5156299e-01 + 1.4012595e-01 5.5467127e-02 9.8857884e-01 + 3.8789194e-01 -5.5861853e-03 9.2168793e-01 + -3.4450701e-01 -6.7781663e-01 6.4952255e-01 + -9.6785233e-01 2.4807440e-01 4.1484419e-02 + 8.4358126e-01 -2.4874428e-01 4.7591695e-01 + 8.8295758e-01 -1.0226035e-01 4.5817980e-01 + 5.6771878e-01 -8.0239785e-01 1.8399207e-01 + 8.6211742e-01 4.9927628e-01 8.6468212e-02 + 3.3565856e-01 5.1911431e-01 7.8603668e-01 + 3.7666781e-01 8.1994945e-01 4.3105020e-01 + 1.2565505e-01 -8.8994913e-01 4.3840775e-01 + -1.9321556e-01 5.9855530e-01 7.7743122e-01 + -5.7606130e-01 3.7477380e-01 7.2642823e-01 + -2.1184502e-01 -6.6010331e-01 7.2068391e-01 + -6.8742055e-01 -4.8358141e-01 5.4185054e-01 + -6.7321088e-01 -3.6980966e-01 6.4033423e-01 + -9.8942343e-01 -1.3804185e-01 4.4561566e-02 + 6.4252036e-02 4.3647698e-01 8.9741825e-01 + 8.5497051e-01 1.6167212e-01 4.9283623e-01 + -9.2006623e-01 1.9549221e-01 3.3950099e-01 + 5.1922924e-01 3.2249631e-02 8.5402632e-01 + -3.4338074e-01 4.0303748e-01 8.4832214e-01 + -3.1808519e-02 -1.5840157e-01 9.8686228e-01 + 3.2813101e-01 -7.6045724e-01 5.6038811e-01 + 9.4840757e-01 -6.1606786e-02 3.1101074e-01 + 3.6635607e-01 -6.5416429e-01 6.6170410e-01 + 9.5144071e-01 2.2362676e-01 2.1154584e-01 + 1.6692391e-01 2.0301334e-01 9.6484299e-01 + -5.8423790e-01 -1.3111487e-01 8.0092132e-01 + -6.7244964e-01 4.1564161e-01 6.1241615e-01 + 6.8163324e-01 3.6406555e-01 6.3469080e-01 + -9.0997675e-01 -2.0090322e-01 3.6273986e-01 + -1.7052709e-01 -5.5182734e-01 8.1633761e-01 + 3.2396891e-01 3.8807249e-01 8.6281162e-01 + -2.5084638e-02 -5.2944547e-01 8.4797303e-01 + -3.2717030e-01 -5.6886097e-01 7.5455735e-01 + 2.7188025e-01 -8.5417465e-01 4.4324576e-01 + 2.0284939e-01 4.8232839e-01 8.5218041e-01 + 9.1209127e-01 4.9932887e-02 4.0693515e-01 + 2.3348163e-01 8.6452524e-01 4.4506454e-01 + -4.4839453e-01 -4.7898550e-01 7.5466234e-01 + 1.8542359e-01 -8.0760188e-01 5.5981898e-01 + 6.1607721e-02 -9.4799215e-01 3.1227450e-01 + -7.8073085e-01 1.5944306e-01 6.0418312e-01 + 4.3293218e-01 -2.5840667e-01 8.6359465e-01 + -7.3462853e-01 -6.5280632e-01 1.8483732e-01 + 8.0908917e-02 9.7473364e-01 2.0820201e-01 + 7.7452513e-02 5.6591947e-01 8.2081439e-01 + -5.6837327e-01 -8.2144162e-01 4.6749282e-02 + 3.5504054e-01 -8.7910064e-01 3.1800672e-01 + -2.1296200e-01 8.5872417e-01 4.6609010e-01 + 1.4600890e-01 -9.7149605e-01 1.8675337e-01 + 3.0560075e-01 2.4762680e-01 9.1939608e-01 + -6.8103193e-01 2.8019046e-01 6.7652703e-01 + 8.9425906e-01 3.3355344e-01 2.9840046e-01 + -1.6852105e-01 -9.7041672e-01 1.7289317e-01 + 7.7804975e-01 5.9223223e-01 2.0952224e-01 + 8.5080189e-01 -3.6506473e-01 3.7797340e-01 + 9.6077719e-01 8.2204647e-02 2.6485768e-01 + 1.6300072e-01 9.3066173e-01 3.2756603e-01 + -1.3859895e-01 -4.2593405e-01 8.9407523e-01 + 4.5256145e-01 4.2082592e-01 7.8618934e-01 + 1.0969636e-01 -1.0382971e-01 9.8852724e-01 + -7.8596367e-01 6.0750385e-01 1.1489205e-01 + -1.4054462e-01 -5.4315342e-02 9.8858336e-01 + -2.8181020e-01 -4.5531714e-01 8.4455273e-01 + -2.6225973e-01 7.6625692e-01 5.8657495e-01 + -9.0142964e-01 -4.0776841e-01 1.4542876e-01 + -7.5605259e-01 4.3641027e-01 4.8778126e-01 + 6.7922834e-01 -6.1695319e-01 3.9751430e-01 + -1.1125695e-01 -8.3722522e-01 5.3542116e-01 + -9.3634650e-02 -2.9264787e-01 9.5162481e-01 + -6.9225216e-01 7.1782601e-01 7.4247939e-02 + -7.5516647e-01 1.8930439e-02 6.5525968e-01 + -6.4786322e-01 -1.4011059e-03 7.6175540e-01 + 4.8275911e-01 -1.1429693e-01 8.6826255e-01 + 6.5101165e-01 -2.9823361e-01 6.9802618e-01 + 7.5724424e-01 -2.6110475e-01 5.9866975e-01 + 5.6237478e-01 8.0261605e-01 1.9885194e-01 + 2.5866335e-01 9.4789350e-01 1.8598703e-01 + -4.0106683e-01 -3.6428226e-01 8.4050213e-01 + -2.9750629e-01 9.5168984e-01 7.6002965e-02 + -8.0786687e-01 -1.0198259e-01 5.8047453e-01 + -7.3734632e-02 9.9589560e-01 -5.2489540e-02 + 7.5399735e-01 -5.9978026e-01 2.6786496e-01 + -1.4519667e-01 9.3043639e-01 3.3646107e-01 + 6.3791183e-01 7.6649572e-01 7.4517191e-02 + -3.6421278e-01 9.0785255e-01 2.0773251e-01 diff --git a/matlab/CSD/dir60.txt b/matlab/CSD/dir60.txt new file mode 100644 index 0000000..36f6fee --- /dev/null +++ b/matlab/CSD/dir60.txt @@ -0,0 +1,60 @@ + 0.0000000e+00 0.0000000e+00 1.0000000e+00 + -9.7004112e-01 -2.5740912e-06 2.4294080e-01 + -8.4571568e-01 -5.2991791e-01 6.2864846e-02 + -6.1394875e-01 7.8236409e-01 1.0475379e-01 + 4.0015280e-01 1.4266285e-02 9.1633739e-01 + -7.0113183e-01 3.6790252e-01 6.1078793e-01 + 6.7177236e-01 6.6554687e-01 3.2522185e-01 + 9.7122843e-01 -2.3793627e-01 -1.0083502e-02 + 5.1039732e-01 -7.2183743e-01 4.6738132e-01 + 4.2077842e-01 8.8127892e-01 -2.1515806e-01 + 4.1396420e-01 8.7047469e-01 2.6628453e-01 + 6.3312871e-01 7.7390796e-01 1.4645803e-02 + -4.4750841e-01 8.0117811e-01 3.9730324e-01 + 8.5678598e-01 1.6604159e-01 4.8820895e-01 + 1.7729414e-01 6.2534035e-01 7.5994489e-01 + -8.8996732e-01 3.2243762e-01 3.2247814e-01 + -1.4406899e-01 2.9780156e-01 9.4369400e-01 + -2.0303787e-02 9.6378174e-01 2.6591823e-01 + -7.5305681e-01 -2.3756212e-01 6.1357125e-01 + 6.9182236e-01 4.4255356e-01 5.7055076e-01 + -8.3930460e-01 7.4246842e-02 5.3856773e-01 + -7.0982752e-01 5.9908498e-01 3.7046197e-01 + 8.7451093e-01 4.0953500e-01 2.5983017e-01 + 6.4554767e-01 1.6320186e-01 7.4607866e-01 + 8.4955423e-01 -1.6681307e-01 5.0043083e-01 + 2.0242088e-01 -8.8679494e-01 4.1547626e-01 + 2.0940392e-01 9.7753798e-01 2.3864061e-02 + -1.5379272e-01 5.9354358e-01 7.8997077e-01 + 7.0547055e-01 -6.7966368e-01 2.0091936e-01 + -3.7597172e-01 -7.6504580e-01 5.2282902e-01 + 4.3965934e-01 -4.3555616e-01 7.8548742e-01 + 9.4585905e-02 -9.8880799e-01 1.1537879e-01 + 4.3941563e-01 -8.7993373e-01 1.8063922e-01 + -6.6587629e-02 -7.6261776e-01 6.4341297e-01 + -3.1987386e-01 9.3930993e-01 1.2400629e-01 + -3.2952073e-01 1.9918247e-02 9.4393821e-01 + -6.6954126e-01 -6.7360360e-01 3.1300590e-01 + -4.5843826e-01 3.0962803e-01 8.3304553e-01 + -1.8082861e-01 -2.7832060e-01 9.4331260e-01 + -6.2109330e-01 2.1095873e-02 7.8345266e-01 + -1.5117089e-01 8.2334345e-01 5.4704015e-01 + 2.5542998e-01 -6.8932086e-01 6.7793235e-01 + 6.3411711e-01 -1.6864943e-01 7.5462100e-01 + 2.7399825e-02 -5.2135890e-01 8.5289750e-01 + -4.6075617e-01 5.9504794e-01 6.5849959e-01 + 4.5526589e-01 6.7747534e-01 5.7771977e-01 + 1.7833113e-01 8.4472563e-01 5.0461531e-01 + 9.7277754e-01 -1.0194304e-02 2.3151658e-01 + 2.0668467e-01 -2.5599243e-01 9.4432480e-01 + -2.9842819e-01 -5.5587085e-01 7.7585322e-01 + -5.9254346e-01 -5.2821377e-01 6.0817962e-01 + -8.4010355e-01 5.3800912e-01 6.9081263e-02 + 1.8761945e-01 2.7140254e-01 9.4400191e-01 + 4.4152002e-01 4.2237795e-01 7.9161666e-01 + -4.9317235e-01 -2.8615786e-01 8.2151976e-01 + 8.7665696e-01 -4.0134475e-01 2.6532051e-01 + -9.7357068e-01 -2.2837893e-01 1.7863258e-03 + -8.9226915e-01 -3.1901843e-01 3.1950430e-01 + -1.2446894e-01 -9.2516730e-01 3.5857070e-01 + 6.9118721e-01 -4.5559735e-01 5.6097353e-01 diff --git a/matlab/CSD/equidistribute.m b/matlab/CSD/equidistribute.m new file mode 100644 index 0000000..daba28a --- /dev/null +++ b/matlab/CSD/equidistribute.m @@ -0,0 +1,44 @@ +function X = equidistribute(N) +% X = equidistribute(N) +% uses the formula in [saff:dmp:1997] to generate equidistributed +% points on the sphere. +% INPUT: N is the number of points, default=12 +% +% OUTPUT: X is the set of points as a Nxd matrix, one point per row +% if no output is specified, the points are plotted using scatter3. +% REFERENCE +% @Article{saff:dmp:1997, +% author = {Saff, E. B. and Kuijlaars, A. B. J.}, +% title = {Distributing Many Points on a Sphere}, +% journal = {Math. Intell.}, +% year = {1997}, +% volume = {19}, +% number = {1}, +% pages = {5--11}, +%} + + +X = zeros(N,3); + +for k=1:N + h = -1 + 2*(k-1)/(N-1); + theta(k) = acos(h); + if k==1 | k==N + phi(k) = 0; + else + phi(k) = mod(phi(k-1) + 3.6/sqrt(N*(1-h^2)),2*pi); + end; + X(k,:) = [ cos(phi(k))*sin(theta(k)), ... + sin(phi(k))*sin(theta(k)), ... + cos(theta(k)) ]; +end; + +%if nargout == 0 + %Z = zeros(size(X)); + %[SX,SY,SZ] = sphere; + %scatter3(X(:,1),X(:,2),X(:,3),'filled') + %hold on + %sph2 = surf(SX,SY,SZ); + %set(sph2, 'FaceColor', [ 1 1 0 ]); + %axis vis3d +%end diff --git a/matlab/CSD/eval_ALP.m b/matlab/CSD/eval_ALP.m new file mode 100644 index 0000000..0800147 --- /dev/null +++ b/matlab/CSD/eval_ALP.m @@ -0,0 +1,15 @@ +function s = eval_ALP(l, el) + +% syntax: s = eval_ALP(l, el) +% +% evaluates the Associated Legendre Polynomial at elevations 'el' +% for harmonic order l. + + s = legendre(l, cos(el')); + for m = 0:l + s(m+1,:) = s(m+1,:).*sqrt((2*l+1)*factorial(l-m) / ((4*pi)*factorial(l+m))); + end + + if l + s = [ s(end:-1:2,:); s ]; + end diff --git a/matlab/CSD/eval_DT.m b/matlab/CSD/eval_DT.m new file mode 100644 index 0000000..29a0027 --- /dev/null +++ b/matlab/CSD/eval_DT.m @@ -0,0 +1,35 @@ +function S = eval_DT (FA, b, scheme, ev_el, ev_az) + +% function S = eval_DT (FA, b, scheme, ev_el, ev_az) +% +% Evaluate the signal amplitude along the directions specified +% in 'scheme', assuming a diffusion tensor model with the +% specified FA, using a b-value of 'b' x10^3 s/mm^2 and a +% mean ADC of 900 x10^6 mm^2/s. Optionally, the tensor can be +% oriented along the direction [ ev_el ev_az ]. + + +if ~exist('ev_el') + ev_el = 0; + ev_az = 0; +end + +a = FA/sqrt(3-2*FA^2); +D = 0.9*[ 1-a 0 0; 0 1-a 0; 0 0 1+2*a ]; +R_az = [ cos(ev_az) -sin(ev_az) 0 + sin(ev_az) cos(ev_az) 0 + 0 0 1 ]; +R_el = [ cos(ev_el) 0 sin(ev_el) + 0 1 0 + -sin(ev_el) 0 cos(ev_el) ]; + +D = R_az*R_el*D*R_el'*R_az'; + +C = s2c([ scheme.el scheme.az 1+0*scheme.az ]); +X = C(:,1); +Y = C(:,2); +Z = C(:,3); + +S = exp(-b*[X.^2 Y.^2 Z.^2 2.*X.*Y 2.*X.*Z 2.*Y.*Z] * ... + [ D(1,1) D(2,2) D(3,3) D(1,2) D(1,3) D(2,3) ]'); + diff --git a/matlab/CSD/eval_SH.m b/matlab/CSD/eval_SH.m new file mode 100644 index 0000000..aa3f36a --- /dev/null +++ b/matlab/CSD/eval_SH.m @@ -0,0 +1,14 @@ +function s = eval_SH(l, el, az) + +% syntax: s = eval_SH(l, el, az) +% +% Evaluates the lth order spherical harmonic coefficients at +% positions [ el az ]. + +s = ones(size(az,1),1); + +if l > 0 + s = [ sin(az*(l:-1:1)) s cos(az*(1:l)) ]; +end + +s = eval_ALP(l, el).*s'; diff --git a/matlab/CSD/gen_delta.m b/matlab/CSD/gen_delta.m new file mode 100644 index 0000000..b310157 --- /dev/null +++ b/matlab/CSD/gen_delta.m @@ -0,0 +1,13 @@ +function SH = gen_delta(el, az, lmax) + +% function SH = gen_delta(el, az, lmax) +% +% Generate the SH coefficients for a delta function pointing +% along [ el az ] up to harmonic order 'lmax'. + + +SH = []; + +for l = 0:2:lmax + SH = [ SH; eval_SH(l, el, az) ]; +end diff --git a/matlab/CSD/gen_scheme.m b/matlab/CSD/gen_scheme.m new file mode 100644 index 0000000..c27d449 --- /dev/null +++ b/matlab/CSD/gen_scheme.m @@ -0,0 +1,45 @@ +function scheme = gen_scheme(N, lmax) + +% function scheme = gen_scheme(N, lmax) +% +% Generate a set of orientations in the required format, along +% with the corresponding SH transform information up to +% harmonic order 'lmax'. +% +% If N is a string, it will attempt to load the specified +% file. +% +% If N is a number, a scheme with the specified number of +% directions will be generated using the equidistribute.m +% script (note that these are not perfectly uniformly +% distributed). +% +% If N is a nx3 matrix, it will assume that each row provides +% an [ x y z ] vector pointing along the desired direction. +% + +if ischar(N) + N = load(N); +end + +if size(N,1) == 1 & size(N,2) == 1 + P = c2s(equidistribute(N)); +elseif size(N,2) >= 3 + n = sqrt(sum(N(:,1:3).^2,2)); + k = find(n); + X = N(k,1:3)./repmat(n(k),1,3); + P = c2s(X); +end + +scheme.el = P(:,1); +scheme.az = P(:,2); + +scheme.sh = []; +scheme.lmax = lmax; + +for l = 0:2:lmax + scheme.sh = [ scheme.sh eval_SH(l, scheme.el, scheme.az)' ]; +end + +scheme.vert= s2c([ scheme.el scheme.az 1+0*scheme.az]); +scheme.mesh = convhulln(scheme.vert); diff --git a/matlab/CSD/lmax_for_SH.m b/matlab/CSD/lmax_for_SH.m new file mode 100644 index 0000000..a61ead0 --- /dev/null +++ b/matlab/CSD/lmax_for_SH.m @@ -0,0 +1,7 @@ +function lmax = lmax_for_SH (SH) + +% function lmax = lmax_for_SH (SH) +% +% returns lmax given 'SH', a vector of even SH coefficients + +lmax = 2*(floor(sqrt(1+8*size(SH,1))-3)/4); diff --git a/matlab/CSD/nSH_for_lmax.m b/matlab/CSD/nSH_for_lmax.m new file mode 100644 index 0000000..db8ca1d --- /dev/null +++ b/matlab/CSD/nSH_for_lmax.m @@ -0,0 +1,8 @@ +function n = nSH_for_lmax (lmax) + +% function n = nSH_for_lmax (lmax) +% +% returns the number of even SH coefficients for a +% given harmonic order 'lmax' + +n = (lmax+1)*(lmax+2)/2; diff --git a/matlab/CSD/noisify.m b/matlab/CSD/noisify.m new file mode 100644 index 0000000..70bf2a3 --- /dev/null +++ b/matlab/CSD/noisify.m @@ -0,0 +1,11 @@ +function S = noisify(S, noise) + +% function S = noisify(S, noise) +% +% Add quadrature noise to signals S, with standard deviation +% 'noise'. + +Nx = noise*randn(size(S,1),1); +Ny = noise*randn(size(S,1),1); +S = sqrt((S+Nx).^2 + Ny.^2); + diff --git a/matlab/CSD/plot_RH.m b/matlab/CSD/plot_RH.m new file mode 100644 index 0000000..2f0aea7 --- /dev/null +++ b/matlab/CSD/plot_RH.m @@ -0,0 +1,8 @@ +function plot_RH(RH, scheme) + +% function plot_RH(RH, scheme) +% +% plot surface given by RH coefficients supplied in 'RH' along +% the set of directions in 'scheme' + +plot_SH (sconv (RH, gen_delta(0, 0, 2*(size(RH,1)-1))), scheme); diff --git a/matlab/CSD/plot_SH.m b/matlab/CSD/plot_SH.m new file mode 100644 index 0000000..f4fcf37 --- /dev/null +++ b/matlab/CSD/plot_SH.m @@ -0,0 +1,12 @@ +function plot_SH (SH, scheme, varargin) + +% function plot_SH (SH, scheme) +% +% plot surface given by SH coefficients supplied in 'SH' along +% the set of directions in 'scheme' + +if (nargin < 3) + plot_amp (SH2amp (SH, scheme), scheme); +else + plot_amp (SH2amp (SH, scheme), scheme, [ 1 1 0 ], 1, varargin{1}); +end \ No newline at end of file diff --git a/matlab/CSD/plot_amp.m b/matlab/CSD/plot_amp.m new file mode 100644 index 0000000..adaa126 --- /dev/null +++ b/matlab/CSD/plot_amp.m @@ -0,0 +1,78 @@ +function plot_amp(S, scheme, colour, transparency, ax) + +% function plot_amp(S, scheme, transparency) +% +% Plot amplitudes 'S' for the set of directions given +% in 'scheme', with optional colour and transparency +% specified. + + +% %set(gcf, 'DefaultAxesCameraViewAngleMode', 'manual', ... +% 'DefaultAxesCameraViewAngle', 20, ... +% 'DefaultAxesCameraTarget', [ 0 0 0 ], ... +% 'DefaultAxesCameraPosition', 6*range*[0 0 1], ... +% 'DefaultAxesVisible', 'on', ... +% 'DefaultAxesBox', 'on', ... +% 'DefaultAxesXLim', [ -range range ], ... +% 'DefaultAxesYLim', [ -range range ], ... +% 'DefaultAxesZLim', [ -range range ]); + + +if ~exist('colour') + colour = [ 1 1 0 ]; +end + +if ~exist('transparency') + transparency = 1; +end + +if ~exist('ax') + main_fig = figure(); + + set(main_fig,'Units','normalized') + + set(main_fig, 'Position', [0.3 0.25 0.4 0.5]); + set(main_fig, 'DoubleBuffer', 'on'); + set(main_fig, 'Name', 'Amplitude plot'); + + cameratoolbar('Show'); + cameratoolbar('SetMode','orbit'); + clf + set(gcf, 'Color', [1 1 1]) +else + subplot(ax); + +end + +range = 1.5*max(S); +negcolour = [ 1 1 1 ]; + +S2 = -S; +S(find(S<0)) = 0; +S2(find(S2<0)) = 0; + +V = scheme.vert .* (S*[ 1 1 1 ]); +V2 = scheme.vert .* (S2*[ 1 1 1 ]); + + +h = patch('Vertices', V, 'Faces', scheme.mesh); +set(h, 'LineStyle', 'None', ... + 'FaceLighting', 'Phong', ... + 'FaceColor', colour, ... + 'FaceAlpha', transparency); + +h2 = patch('Vertices', V2, 'Faces', scheme.mesh); +set(h2, 'LineStyle', 'None', ... + 'FaceLighting', 'Phong', ... + 'FaceColor', negcolour, ... + 'FaceAlpha', transparency); + +light('position', [1 1 1]); + +ylabel('y'); +xlabel('x'); +zlabel('z'); + +if (~exist('ax')) + drawnow +end diff --git a/matlab/CSD/read_mrtrix.m b/matlab/CSD/read_mrtrix.m new file mode 100644 index 0000000..e2ae5b6 --- /dev/null +++ b/matlab/CSD/read_mrtrix.m @@ -0,0 +1,154 @@ +function image = read_mrtrix (filename) + +% function: image = read_mrtrix (filename) +% +% returns a structure containing the header information and data for the MRtrix +% format image 'filename' (i.e. files with the extension '.mif' or '.mih'). + +image.comments = {}; + +f = fopen (filename, 'r'); +if (f<1) + disp (['could not open file ' filename ]); + return +end +L = fgetl(f); +if ~strncmp(L, 'mrtrix image', 12) + fclose(f); + disp ([filename ' is not in MRtrix format']); + return +end + +transform = []; +DW_scheme = []; + +while 1 + L = fgetl(f); + if ~ischar(L), break, end; + L = strtrim(L); + if strcmp(L, 'END'), break, end; + d = strfind (L,':'); + if isempty(d) + disp (['invalid line in header: ''' L ''' - ignored']); + else + key = lower(strtrim(L(1:d(1)-1))); + value = strtrim(L(d(1)+1:end)); + if strcmp(key, 'dim') + image.dim = str2num(char(split_strings (value, ',')))'; + elseif strcmp(key, 'vox') + image.vox = str2num(char(split_strings (value, ',')))'; + elseif strcmp(key, 'layout') + image.layout = value; + elseif strcmp(key, 'datatype') + image.datatype = value; + elseif strcmp(key, 'labels') + image.labels = split_strings (value, '\'); + elseif strcmp(key, 'units') + image.units = split_strings (value, '\'); + elseif strcmp(key, 'offset') + image.offset = value; + elseif strcmp(key, 'transform') + transform(end+1,:) = str2num(char(split_strings (value, ',')))'; + elseif strcmp(key, 'comments') + image.comments{end+1} = value; + elseif strcmp(key, 'conv_type') + image.conv_type = value; + elseif strcmp(key, 'num_points') + image.num_points = value; + elseif strcmp(key, 'num_segments') + image.num_segments = value; + elseif strcmp(key, 'strands_file') + image.strands_file = value; + elseif strcmp(key, 'interpolation') + image.interpolation = value; + elseif strcmp(key, 'interpolation_extent') + image.interpolation_extent = value; + elseif strcmp(key, 'purpose') + image.purpose = value; + elseif strcmp(key, 'response_coeffs') + image.response_coeffs = value; + elseif strcmp(key, 'datetime') + image.datetime = value; + elseif strcmp(key, 'type') + image.type = value; + elseif strcmp(key, 'file') + file = value; + elseif strcmp(key, 'dw_scheme') + DW_scheme(end+1,:) = str2num(char(split_strings (value, ',')))'; + else + disp (['unknown key ''' key ''' - ignored']); + end + end +end +fclose(f); + + +if ~isempty(transform) + image.transform = transform; + image.transform(4,:) = [ 0 0 0 1 ]; +end + +if ~isempty(DW_scheme) + image.DW_scheme = DW_scheme; +end + +if ~isfield (image, 'dim') || ~exist ('file') || ... + ~isfield (image, 'layout') || ~isfield (image, 'datatype') + disp ('critical entries missing in header - not reading data') + return +end + +layout = split_strings(image.layout, ','); +order = (abs(str2num (char(layout)))+1)'; + +[ file, offset ] = strtok(file); +if isempty(offset), offset = 0; else offset = str2num(char(offset)); end +[f,g] = fileparts(filename); +if strcmp(file,'.'), file = filename; else file = fullfile (f, file); end + +datatype = lower(image.datatype); +byteorder = datatype(end-1:end); + +if strcmp(byteorder, 'le') + f = fopen (file, 'r', 'l'); + datatype = datatype(1:end-2); +elseif strcmp(byteorder, 'be') + f = fopen (file, 'r', 'b'); + datatype = datatype(1:end-2); +else + if strcmp(datatype, 'bit') + datatype = 'bit1'; + f = fopen(file, 'r', 'b'); + else + f = fopen(file, 'r'); + end +end + +if (f<1) + disp (['error opening ' filename ]); + return +end + +fseek (f, offset, -1); +image.data = fread (f, inf, datatype); +fclose (f); + +order(order)= 1:size(order,2); +image.data = reshape (image.data, image.dim(order)); +image.data = ipermute (image.data, order); +for i=1:size(order,2) + if layout{i}(1) == '-' + image.data = flipdim(image.data, i); + end +end + + + + +function S = split_strings (V, delim) + S = {}; + while size(V,2) > 0 + [R, V] = strtok(V,delim); + S{end+1} = R; + end + diff --git a/matlab/CSD/readme.txt b/matlab/CSD/readme.txt new file mode 100644 index 0000000..761e552 --- /dev/null +++ b/matlab/CSD/readme.txt @@ -0,0 +1,77 @@ +Here is a sample session to give you a feel for how things work. + +First, we need to generate 3 different sets of directions ('schemes'). + +The first one, 'pscheme', is used for plotting the surfaces, and is +generated at a pretty high resolution (8000 vertices here). We also +specify a value of 'lmax' which at least as high as we're going to use: +>> pscheme = gen_scheme (8000, 16); + +The second one is the actual DW scheme used, or that we're about to +simulate. In this case, it is read from file, and 'lmax' is set to +a value that makes sense for that scheme (in this case, lmax = 8 as +the number of parameters would be too high for lmax = 10): +>> DW_scheme = gen_scheme ('dir60.txt', 8); + +This last scheme is the one along which FOD values will be calculated, +so that negative values can be identified. It is used only with the +constrained version. The value of lmax in this case will instruct the +CSD method of the desired output harmonic order. Thus, setting lmax to +a value greater than can be reconstructed with 'standard' spherical +deconvolution will make the CSD method use super-resolution. +>> HR_scheme = gen_scheme ('dir300.txt', 8); + +Here, we simulate two diffusion tensors crossing at 45°, assuming each +has FA = 0.8, and a b-value of 3000. The DW signal is computed along the +directions of 'DW_scheme': +>> S = eval_DT (0.8, 3, DW_scheme, pi/2, 0) + eval_DT (0.8, 3, DW_scheme, pi/2, pi/4); + +Add quadrature noise (here, SNR = 20, sd = 0.05) to the simulated +DW signals and convert to SH coefficients: +>> S_SH = amp2SH (noisify (S, 0.05), DW_scheme); + +Create the SH coefficients for a response function computed from the +tensor model (FA = 0.8, b-value = 3000). Here, the high-resolution +'pscheme' direction set is used, as it should produce robust results. +In practice, this response function can/should be measured directly +from the data itself. +>> R_SH = amp2SH (eval_DT (0.8, 3, pscheme), pscheme); + +Convert the SH coefficients of the response function to RH coefficients: +>> R_RH = SH2RH (R_SH); + +Now we can perform the spherical deconvolution itself, and plot the +results in each case: + +First, 'standard' unfiltered spherical deconvolution: +>> F_SH_unfiltered = sdeconv (R_RH, S_SH); +>> plot_SH (F_SH_unfiltered, pscheme) + +Next, 'standard' filtered spherical deconvolution. Note that the +filtering coefficients are supplied as their reciprocals - the +filter coefficients here are actually [ 1 1 1 0.1 0.01 inf inf inf ] +(the last four correspond to lmax > 8 and are unused): +>> F_SH_filtered = sdeconv (R_RH.*[1 1 1 2 10 0 0 0 0 ]', S_SH); +>> plot_SH (F_SH_filtered, pscheme) + +Next, constrained spherical deconvolution. Here, we need to supply +a set of directions along which the FOD will be evaluated. This +function can also take two additional optional arguments to set +the value of lambda and tau (type 'help csdeconv' for more info). +The optional return variable 'num_it' gives the number of iterations +performed: +>> [ F_SH_csd, num_it ] = csdeconv (R_RH, S_SH, HR_scheme); +>> plot_SH (F_SH_csd, pscheme) + +Finally, super-resolved constrained spherical deconvolution. This is +the same as above, but this time we set the 'lmax' parameter for +'HR_scheme' to a value greater than can normally be handled with +'standard' spherical deconvolution: +>> HR_scheme = gen_scheme ('dir300.txt', 12); +>> [ F_SH_srcsd, num_it ] = csdeconv (R_RH, S_SH, HR_scheme); +>> plot_SH (F_SH_srcsd, pscheme) + +Have fun! +Cheers, + +Donald. diff --git a/matlab/CSD/s2c.m b/matlab/CSD/s2c.m new file mode 100644 index 0000000..0e214f1 --- /dev/null +++ b/matlab/CSD/s2c.m @@ -0,0 +1,8 @@ +function X = s2c(S) + +% Convert spherical coordinates to the equivalent cartesian coordinates. +% Assumes S = [ el az r ], and returns X = [ X Y Z ]. + +X = [ S(:,3).*cos(S(:,2)).*sin(S(:,1)), ... + S(:,3).*sin(S(:,2)).*sin(S(:,1)), ... + S(:,3).*cos(S(:,1)) ]; diff --git a/matlab/CSD/sconv.m b/matlab/CSD/sconv.m new file mode 100644 index 0000000..6247014 --- /dev/null +++ b/matlab/CSD/sconv.m @@ -0,0 +1,16 @@ +function S_SH = sconv (R_RH, F_SH) + +% function S_SH = sconv (R_RH, F_SH) +% +% convolves the axially symmetric response function 'R_RH' +% (in RH coefficients) with the surface 'F_SH' (in SH +% coefficients) to give the surface 'S_SH' (in SH coefficients). + +b = []; +lmax = lmax_for_SH (F_SH); + +for l = 0:2:lmax + b = [ b; R_RH(l/2+1)*ones(2*l+1,1) ]; +end + +S_SH = b.*F_SH; diff --git a/matlab/CSD/sdeconv.m b/matlab/CSD/sdeconv.m new file mode 100644 index 0000000..b1f56bf --- /dev/null +++ b/matlab/CSD/sdeconv.m @@ -0,0 +1,17 @@ +function F_SH = sdeconv(R_RH, S_SH) + +% function F_SH = sdeconv(R_RH, S_SH) +% +% deconvolves the axially symmetric response function 'R_RH' +% (in RH coefficients) from the surface 'S_SH' (in SH +% coefficients) to give the surface 'F_SH' (in SH coefficients). + +b = []; +lmax = lmax_for_SH (S_SH); + +for l = 0:2:lmax + b = [ b; ones(2*l+1,1)./R_RH(l/2+1) ]; +end + +F_SH = b.*S_SH; + diff --git a/matlab/add_2d_vox_lines_to_plot.m b/matlab/add_2d_vox_lines_to_plot.m new file mode 100644 index 0000000..5b299fc --- /dev/null +++ b/matlab/add_2d_vox_lines_to_plot.m @@ -0,0 +1,43 @@ +function add_2d_vox_lines_to_plot(vox_size, num_voxels, colour, offset) +% function plot_vox_lines(vox_size) + + if ~exist('vox_size','var') + vox_size = 0.15; + end + + if ~exist('num_voxels','var') + num_voxels = 3; + end + + if ~exist('colour','var') + colour = 'white'; + end + + if ~exist('offset','var') + offset = 0; + end + + half_vox_size = vox_size/2; + + hold on; + + start_edge = -half_vox_size*num_voxels; + end_edge = half_vox_size*num_voxels; + + for row_pos = start_edge:vox_size:end_edge + for col_pos = start_edge:vox_size:end_edge + + line_mat = [row_pos, col_pos, start_edge; row_pos, col_pos, end_edge] + offset; + + for dim_i = 0:1 + + plot(line_mat(:,mod(1+dim_i,3)+1),line_mat(:,mod(2+dim_i,3)+1), 'Color', colour); + + end + + end + end + + hold off; + +end \ No newline at end of file diff --git a/matlab/add_colour_key.m b/matlab/add_colour_key.m new file mode 100644 index 0000000..aafd124 --- /dev/null +++ b/matlab/add_colour_key.m @@ -0,0 +1,40 @@ +function add_colour_key(bundle_indices, colours) + +global colours_of_bundles + +if ~exist('bundle_indices','var') + bundle_indices=[0:size(colours_of_bundles,1)-1]; +end + +if isempty(bundle_indices) + return +end + +if exist('colours','var') + + if isempty(colours) || (max(bundle_indices) >= size(colours,1)) + set_bundle_colours(max(bundle_indices)); + colours = colours_of_bundles; + end + +else + colours = colours_of_bundles; +end + + +unique_indices = sort(unique(bundle_indices)); + +h = figure(); + +set(h,'Units','normalized'); +set(h, 'Position', [0.0 0.05 0.05 0.9]); +set(h, 'Name', 'Colour Key'); + +colours2 = reshape(colours, size(colours,1),1,3); + +image(1, [0:1:(length(unique_indices)-1)], colours2((unique_indices+1),:,:)); + +set(gca, 'YTick', [0:1:(length(unique_indices)-1)]); +set(gca, 'YTickLabel', unique_indices); +set(gca, 'XTick', []); +set(get(gca,'YLabel'),'String','Bundle Index'); \ No newline at end of file diff --git a/matlab/add_isotropic_region_to_plot.m b/matlab/add_isotropic_region_to_plot.m new file mode 100644 index 0000000..c2d9393 --- /dev/null +++ b/matlab/add_isotropic_region_to_plot.m @@ -0,0 +1,24 @@ +function add_isotropic_region_to_plot(isotropic_regions) + + for (isotropic_region_i = 1:size(isotropic_regions,1)) + + centre = isotropic_regions(isotropic_region_i, 1:3)'; + radius = isotropic_regions(isotropic_region_i, 4); + + num_faces = round(radius * 100); + + [X, Y, Z] = sphere(num_faces); + + X = X * radius + centre(1); + Y = Y * radius + centre(2); + Z = Z * radius + centre(3); + + h = surf(X, Y, Z); + + set(h,'facecolor', [0.5 0.5 0.5]); + set(h, 'FaceAlpha', 0.5); + end + + + +end \ No newline at end of file diff --git a/matlab/add_lines_to_plot.m b/matlab/add_lines_to_plot.m new file mode 100644 index 0000000..f0b540a --- /dev/null +++ b/matlab/add_lines_to_plot.m @@ -0,0 +1,18 @@ +function add_lines_to_plot(tcks, colours, bundle_indices) +% Adds lines to voxel plot. + + num_tcks = length(tcks); + + hold on; + + for tck_i = 1:num_tcks + + h = plot3(tcks{tck_i}(:,1), tcks{tck_i}(:,2), tcks{tck_i}(:,3)); + + set(h, 'Color', colours(bundle_indices(tck_i)+1,:)); + + end + + hold off; + +end diff --git a/matlab/add_sphere_to_plot.m b/matlab/add_sphere_to_plot.m new file mode 100644 index 0000000..94f7580 --- /dev/null +++ b/matlab/add_sphere_to_plot.m @@ -0,0 +1,56 @@ +function add_sphere_to_plot(sphere_radius, transparency, props, num_divisions, centre) + + if ~exist('num_divisions', 'var') + num_divisions = 100; + end + + if ~exist('centre', 'var') + centre = [0;0;0]; + end + + if ~exist('transparency','var') + transparency = 0.25; + end + + + if sphere_radius == -1 + + if exist('props', 'var') + + if isfield(props, 'prior_end_on_sphere_radius') + sphere_radius = str2double(props.prior_end_on_sphere_radius); + elseif isfield(props, 'prior_end_out_sphere_radius') + sphere_radius = str2double(props.prior_end_out_sphere_radius); + elseif isfield(props, 'prior_end_in_sphere_radius') + sphere_radius = str2double(props.prior_end_in_sphere_radius); + else + %Do nothing. + return; + end + end + end + + + if sphere_radius ~= 0 + + num_faces = round(sphere_radius * num_divisions); + + [X, Y, Z] = sphere(num_faces); + + X = X * sphere_radius + centre(1); + Y = Y * sphere_radius + centre(2); + Z = Z * sphere_radius + centre(3); + + hold on; + + h = surf(X, Y, Z); + + hold off; + + set(h,'facecolor', [0.5 0.5 0.5]); + set(h,'FaceAlpha', transparency); + set(h,'edgecolor', 'none'); + end + + +end \ No newline at end of file diff --git a/matlab/add_strands_to_plot.m b/matlab/add_strands_to_plot.m new file mode 100644 index 0000000..98b120b --- /dev/null +++ b/matlab/add_strands_to_plot.m @@ -0,0 +1,7 @@ +function add_strands_to_plot(strands, radii, colours, bundle_indices, varargin) + + tcks = strands2tcks(strands); + + add_tcks_to_plot(tcks, radii, colours, bundle_indices, varargin{:}); + +end \ No newline at end of file diff --git a/matlab/add_tcks_to_plot.m b/matlab/add_tcks_to_plot.m new file mode 100644 index 0000000..5d7a7f5 --- /dev/null +++ b/matlab/add_tcks_to_plot.m @@ -0,0 +1,178 @@ +function add_tcks_to_plot(tcks, radii, colours, bundle_indices, num_tube_corners) + + if ~exist('num_tube_corners','var') + num_tube_corners = 12; + end + + hold on; + + for tck_i = 1:length(tcks) + + tck = tcks{tck_i}; + + num_control_points = size(tck,1); + + segs = tck(2:num_control_points,:) - tck(1:num_control_points-1,:); + + norm_segs = zeros(size(segs)); + + length_segs = sqrt(dot(segs,segs,2)); + + zero_length_segs = find(length_segs == 0.0); + + if (size(zero_length_segs,1) >= 1) + length_segs(zero_length_segs) = 0.0001; + segs(zero_length_segs) = 0.0001; + tck(zero_length_segs) = tck(zero_length_segs) + 0.0001; + end + + norm_segs(:,1) = segs(:,1) ./ length_segs; + norm_segs(:,2) = segs(:,2) ./ length_segs; + norm_segs(:,3) = segs(:,3) ./ length_segs; + + consec_segs_align = dot(norm_segs(1:num_control_points-2,:), norm_segs(2:num_control_points-1,:),2); + + count = 0; + while (1) + + ref_vector = rand(1,3); + + [t,n,b] = frame( tck(:,1),tck(:,2),tck(:,3), ref_vector); + + if (all(~isnan(n))) + break; + end + + if (count > 100) + error(['likely nan values in tck ' num2str(tck_i-1) '!']); + end + + count = count + 1; + end + + + + X = zeros(num_control_points, num_tube_corners); + Y = zeros(num_control_points, num_tube_corners); + Z = zeros(num_control_points, num_tube_corners); + + theta = 0:(2*pi/(num_tube_corners-1)):(2*pi); + + count = 0; + + for point_i = 1:num_control_points + + if (point_i == 1) + w = tck(1, :) + n(1,:); + n_prime = n(1,:); + b_prime = b(1,:); + + else + + mu = dot(t(point_i,:), tck(point_i,:) - w, 2) / dot(t(point_i,:), segs(point_i-1,:),2); + + w_proj = w + mu * segs(point_i-1, :); + + n_prime = w_proj - tck(point_i,:); + + n_prime = n_prime ./ norm(n_prime); + + b_prime = cross( t(point_i,:), n_prime); + + b_prime = b_prime ./ norm(b_prime); + + w = tck(point_i,:) + n_prime; + + end + + X(point_i,:) = tck(point_i, 1) + radii(tck_i) * ( n_prime(1,1) * cos(theta) + b_prime(1,1) * sin(theta)); + Y(point_i,:) = tck(point_i, 2) + radii(tck_i) * ( n_prime(1,2) * cos(theta) + b_prime(1,2) * sin(theta)); + Z(point_i,:) = tck(point_i, 3) + radii(tck_i) * ( n_prime(1,3) * cos(theta) + b_prime(1,3) * sin(theta)); + + + end + + h = surf(X,Y,Z); + + set(h,'facecolor', colours(bundle_indices(tck_i)+1,:)); + set(h,'edgecolor', 'none'); + + if (mod(tck_i,25) == 0) + fprintf('.'); + end + + end + + hold off; + +end + + + +function [t,n,b]=frame(x,y,z,vec) + +% FRAME Calculate a Frenet-like frame for a polygonal space curve +% [t,n,b]=frame(x,y,z,v) returns the tangent unit vector, a normal +% and a binormal of the space curve x,y,z. The curve may be a row or +% column vector, the frame vectors are each row vectors. +% +% This function calculates the normal by taking the cross product +% of the tangent with the vector v; if v is chosen so that it is +% always far from t the frame will not twist unduly. +% +% If two points coincide, the previous tangent and normal will be used. +% +% Written by Anders Sandberg, asa@nada.kth.se, 2005 + + + N=size(x,1); + if (N==1) + x=x'; %' + y=y'; %' + z=z'; %' + N=size(x,1); + end + + t=zeros(N,3); + b=zeros(N,3); + n=zeros(N,3); + + p=[x y z]; + + for i=2:(N-1) + t(i,:)=(p(i+1,:)-p(i-1,:)); + tl=norm(t(i,:)); + if (tl>0) + t(i,:)=t(i,:)/tl; + else + t(i,:)=t(i-1,:); + end + end + + t(1,:)=p(2,:)-p(1,:); + t(1,:)=t(1,:)/norm(t(1,:)); + + t(N,:)=p(N,:)-p(N-1,:); + t(N,:)=t(N,:)/norm(t(N,:)); + + for i=2:(N-1) + n(i,:)=cross(t(i,:),vec); + nl=norm(n(i,:)); + if (nl>0) + n(i,:)=n(i,:)/nl; + else + n(i,:)=n(i-1,:); + end + end + + n(1,:)=cross(t(1,:),vec); + n(1,:)=n(1,:)/norm(n(1,:)); + + n(N,:)=cross(t(N,:),vec); + n(N,:)=n(N,:)/norm(n(N,:)); + + for i=1:N + b(i,:)=cross(t(i,:),n(i,:)); + b(i,:)=b(i,:)/norm(b(i,:)); + end +end \ No newline at end of file diff --git a/matlab/add_tracts_to_plot.m b/matlab/add_tracts_to_plot.m new file mode 100644 index 0000000..5958919 --- /dev/null +++ b/matlab/add_tracts_to_plot.m @@ -0,0 +1,78 @@ +function add_tracts_to_plot (tracts, colours, intensities, base_widths, tube_corners, num_length_sections, fixed_transparency, colour_indices ) + + + if ~exist('tube_corners', 'var') + tube_corners = 12; + end + + if tube_corners < 1 + error (['''tube_corners'' option must be greater than 1 (' num2str(tube_corners) ').']); + end + + if ~exist('num_length_sections', 'var') + num_length_sections = 100; + end + + if ~exist('fixed_transparency', 'var') + fixed_transparency = 1.0; + end + + if ~exist('colour_indices', 'var') + colour_indices = []; + end + + if isempty(colour_indices) + colour_indices = [0:1:(size(tracts,1)-1)]; + end + + + if nargin > 8 + error(['Incorrect number of arguments (' num2str(nargin) '). Cannot have more than 8']); + end + + num_tracts = size(tracts,1); + + hold on; + + for tract_i=1:num_tracts + + if base_widths(tract_i) == 0 + disp(['Warning!! Base width of tract ' num2str(tract_i) ' is zero.']); + end + + X = zeros(num_length_sections, tube_corners); + Y = zeros(num_length_sections, tube_corners); + Z = zeros(num_length_sections, tube_corners); + + theta = 0:(2*pi/(tube_corners-1)):(2*pi); + + backbone = fourier2tck(tracts{tract_i,1}, num_length_sections); + axis1 = fourier2tck(tracts{tract_i,2}, num_length_sections); + axis2 = fourier2tck(tracts{tract_i,3}, num_length_sections); + + count = 0; + + for point_i = 1:num_length_sections + + X(point_i,:) = backbone(point_i, 1) + base_widths(tract_i) * ( axis1(point_i,1) * cos(theta) + axis2(point_i,1) * sin(theta)); + Y(point_i,:) = backbone(point_i, 2) + base_widths(tract_i) * ( axis1(point_i,2) * cos(theta) + axis2(point_i,2) * sin(theta)); + Z(point_i,:) = backbone(point_i, 3) + base_widths(tract_i) * ( axis1(point_i,3) * cos(theta) + axis2(point_i,3) * sin(theta)); + + end + + h = surf(X,Y,Z); + + set(h,'facecolor', colours(colour_indices(tract_i)+1,:)); + set(h,'edgecolor', 'none'); + + if fixed_transparency ~= 0 + set(h, 'FaceAlpha', fixed_transparency); + else + set(h,'FaceAlpha', intensities(tract_i)); + end + + end + + hold off; + +end \ No newline at end of file diff --git a/matlab/add_vox_lines_to_plot.m b/matlab/add_vox_lines_to_plot.m new file mode 100644 index 0000000..265325e --- /dev/null +++ b/matlab/add_vox_lines_to_plot.m @@ -0,0 +1,43 @@ +function add_vox_lines_to_plot(vox_size, num_voxels, colourize) +% function plot_vox_lines(vox_size) + + if ~exist('colourize') + colourize = true; + end + + label_contrast = 0.8; + + half_vox_size = vox_size/2; + + hold on; + + start_edge = -half_vox_size*num_voxels; + end_edge = half_vox_size*num_voxels; + + base_colour = [.75,.75,.75]; + + for row_pos = start_edge:vox_size:end_edge + for col_pos = start_edge:vox_size:end_edge + + line_mat = [row_pos, col_pos, start_edge; row_pos, col_pos, end_edge]; + + for dim_i = 0:2 + + colour = base_colour; + + if colourize && (row_pos == start_edge) && (col_pos == start_edge) + colour = [0.5,0.5,0.5]; + colour(dim_i+1) = label_contrast; + end + + plot3(line_mat(:,mod(0+dim_i,3)+1),line_mat(:,mod(1+dim_i,3)+1),line_mat(:,mod(2+dim_i,3)+1), 'Color', colour); + + + end + + end + end + + hold off; + +end \ No newline at end of file diff --git a/matlab/btsplot.m b/matlab/btsplot.m new file mode 100644 index 0000000..fb06fc8 --- /dev/null +++ b/matlab/btsplot.m @@ -0,0 +1,25 @@ +function fig = btsplot(varargin) + + if nargin == 0 + error('No arguments supplied'); + end + + filename = varargin{1}; + + if file_extension(filename) == 'str' + fig = plot_strands(varargin{:}); + elseif file_extension(filename) == 'sst' + fig = plot_strand_sets(varargin{:}); + elseif file_extension(filename) == 'tct' + fig = plot_tracts(varargin{:}); + elseif file_extension(filename) == 'tst' + fig = plot_tract_sets(varargin{:}); + elseif file_extension(filename) == 'tck' + fig = plot_tcks(varargin{:}); + elseif file_extension(filename) == 'mif' + fig = plot_image(varargin{:}); + else + error(['Unrecognised extension, ''' file_extension(filename) '''.']); + end + +end \ No newline at end of file diff --git a/matlab/circle_stddev.m b/matlab/circle_stddev.m new file mode 100644 index 0000000..124b4ea --- /dev/null +++ b/matlab/circle_stddev.m @@ -0,0 +1,23 @@ + + +samp_period = 0.001; + +x = [-1:samp_period:1]'; +y = [-1:samp_period:1]'; + +[X,Y] = meshgrid(x,y); + +R = X.^2 + Y.^2; + +ind = find(R>1); + +X(ind) = []; + +x = X(:); + +% hist(x,100); + +std(x) + + + diff --git a/matlab/concatenate_strands.m b/matlab/concatenate_strands.m new file mode 100644 index 0000000..7f55a62 --- /dev/null +++ b/matlab/concatenate_strands.m @@ -0,0 +1,13 @@ +function concat_strands = concatenate_strands(strands) + + num_strands = size(strands,1); + + concat_strands = []; + + for strand_i = 1:num_strands + + concat_strands = [concat_strands; strands{strand_i}]; + + end + +end \ No newline at end of file diff --git a/matlab/concatenate_tracts.m b/matlab/concatenate_tracts.m new file mode 100644 index 0000000..1587c67 --- /dev/null +++ b/matlab/concatenate_tracts.m @@ -0,0 +1,13 @@ +function concat_tracts = concatenate_tracts(tracts) + + num_tracts = size(tracts,1); + + concat_tracts = []; + + for tract_i = 1:num_tracts + concat_tracts = [concat_tracts; tracts{tract_i,1}]; + concat_tracts = [concat_tracts; tracts{tract_i,2}]; + concat_tracts = [concat_tracts; tracts{tract_i,3}]; + end + +end \ No newline at end of file diff --git a/matlab/create_movie_of_samples.m b/matlab/create_movie_of_samples.m new file mode 100644 index 0000000..692fe52 --- /dev/null +++ b/matlab/create_movie_of_samples.m @@ -0,0 +1,99 @@ +function A = create_movie_of_samples(directory_name, varargin) + + + description = 'Creates a movie from a sample directory'; + + arguments = {'directory_name', 'The directory name which contains the samples'}; + + options = {... + ...% 'strand_radius ', 0.02, 'float', 'Radii of the plotted strands';... + }; + + supplied_options = parse_options(options, varargin); + + for option_i = 1:size(supplied_options,1) + if strcmp(supplied_options{option_i,3}, 'string') + eval([supplied_options{option_i,1} ' = ''' supplied_options{option_i,2} ''';']); + else + + if ~isstr(supplied_options{option_i,2}) + supplied_options{option_i,2} = mat2str(supplied_options{option_i,2}); + end + + eval([supplied_options{option_i,1} ' = ' supplied_options{option_i,2} ';']); + end + end + + + if help_display + display_help_message(description, arguments, options); + return; + end + + filenames = list_filenames(directory_name, '0000', '.frr'); + + + + plot_strands(cell2mat(filenames(1))); + + +% 2) Resize the figure window to size of movie required. +set(gcf,'Units','pixels') +winsize = get(gcf,'Position') + +% +% 3) Record the size of the plot window: +% + +% +% 4) Adjust size of this window to include the whole figure window (if you require the axes, title and axis labels +% in the movie): +% +% >> winsize(1:2) = [0 0]; +% +% 5) Set the number of frames: +% + + num_samples=length(filenames) + +% +% 6) Create the MATLAB movie matrix: +% + A=moviein(num_samples,gcf,winsize) +% +% 7) Fix the features of the plot window (ensures each frame of the movie is the same size): +% +% set(fig1,'NextPlot','replacechildren') + + +% +% 8) Within a loop, plot each picture and save to MATLAB movie matrix: +% + for sample_i=1:num_samples + + plot_strands(cell2mat(filenames(sample_i))); + + % add axis label, legends, titles, etc. in here + A(:,sample_i)=getframe(gcf,winsize); + + end +% +% This procedure creates a movie stored in a special format that is only readable in MATLAB. The first thing you will want to do is to play the movie: +% + movie(gcf,A,30,3,winsize) +% +% where fig1 is the figure handle, A is the movie matrix, 30 is the number of times to repeat movie, 3 is the number of frames per second and winsize is the size of the movie window. You can also save this movie to a file to be loaded another time or on another machine running MATLAB: +% + save([directory_name '.mat'],'A'); +% +% and to reload: +% +% >> load filename.mat +% +% +% +% + + + +end \ No newline at end of file diff --git a/matlab/create_uniform_strands.m b/matlab/create_uniform_strands.m new file mode 100644 index 0000000..1a6fd9e --- /dev/null +++ b/matlab/create_uniform_strands.m @@ -0,0 +1,73 @@ +function create_uniform_strands(output_dir, varargin) +% +% PURPOSE: Initialise a number of straight strands evenly distributed around a sphere. +% +% ARGUMENTS: +% +% output_directory The directory that the newly created strands will be saved to +% +% OPTIONS (name, description, type, default): +% +% -num_strands +% number of strands to be created +% int +% 16 +% +% -strand_length +% The v1 magnitude of the fourier descriptors of the strands +% float +% 0.053 + + + description = 'Initialise a number of straight strands evenly distributed around a sphere.'; + + arguments = {'output_directory', 'The directory that the newly created strands will be saved to'}; + + options = {... + 'num_strands ', 16, 'int', 'number of strands to be created';... + 'strand_length ', 0.2755, 'float', 'The v1 magnitude of the fourier descriptors of the strands';... + }; + + supplied_options = parse_options(options, varargin); + + for option_i = 1:size(supplied_options,1) + if strcmp(supplied_options{option_i,3}, 'string') + eval([supplied_options{option_i,1} ' = ''' supplied_options{option_i,2} ''';']); + else + + if ~isstr(supplied_options{option_i,2}) + supplied_options{option_i,2} = mat2str(supplied_options{option_i,2}); + end + + eval([supplied_options{option_i,1} ' = ' supplied_options{option_i,2} ';']); + end + end + + + if help_display + display_help_message(description, arguments, options); + return; + end + + + degree_1s = strand_length * equidistribute(num_strands*2); + + degree_1s_z = degree_1s(:,3); + + positive_degree_1s_z = find(degree_1s_z >= 0); + + degree_1s = degree_1s(positive_degree_1s_z,:); + + + for strand_i = 1:num_strands + + strand = [0 0 0; degree_1s(strand_i,:); 0 0 0]; + + + save([output_dir '/strand_' num2str(strand_i) '.frr.txt'], 'strand', '-ASCII'); + + end + + + +end \ No newline at end of file diff --git a/matlab/diffusion_weight_example.m b/matlab/diffusion_weight_example.m new file mode 100644 index 0000000..ec62ec7 --- /dev/null +++ b/matlab/diffusion_weight_example.m @@ -0,0 +1,175 @@ +N = 10000; +sigma_incr = 0.1; +sigma_N = 5; +output_path = '/data/home/tclose/Documents/Tractography/florey_student_talk/images/normal'; +resolution = 300; +container_size = 0.35; + + +close all; +fig_num = 1; + +x_limits = [-3.5*sigma_incr*sigma_N, 3.5*sigma_incr*sigma_N]; + +y_limits = [0, 1/(sigma_incr*sqrt(2*pi))]; + +background = [0 1 0]; + + + +%set(gca, 'visible', 'off'); + +% xlabel(''); +% +% colormap('gray'); +% caxis([-2 -1]); +background = [0 1 0]; +whitebg(background); +set(gcf, 'Color', background); +% set(gca,'XColor', [1 1 1]); +% set(gca,'YColor', [1 1 1]); +% set(gca,'ZColor', [1 1 1]); +% +% set(gca, 'FontSize', 18); + +set(gcf,'PaperUnits','centimeters'); + +set(gcf, 'PaperSize', [8 8]); +set(gcf, 'PaperPosition', [0 0 8 8]); + +%set(gca, 'visible', 'off'); +set(gca, 'Outerposition', [0 0 1 1]); +set(gca, 'Position', [0.1 0.15 .8 .8]); + +set(gcf,'InvertHardCopy','off'); + +count = 1; + +range = 3.5*sigma_incr*sigma_N; +incr = range/N; + +k = [-range:incr:range]; + +% k = [-k(end:-1:1), 0, k]; + +k_index = [0:1:N-1]; + +container_size_N = round(container_size * (N/range)); + +odd_index = k_index(find(mod(k_index ./ container_size_N, 2) >= 1))+1; + +even_index = k_index(find(mod(k_index ./ container_size_N, 2) < 1))+1; + +k_index(even_index) = mod(k_index(even_index), container_size_N); + +k_index(odd_index) = container_size_N - mod(k_index(odd_index), container_size_N)-1; + +k_index = k_index + 1; + +k_index = [-k_index(end:-1:1),0,k_index] + container_size_N+1; + +folded_k = [-container_size:incr:container_size]; + + +for sigma = sigma_incr:sigma_incr:(sigma_incr*sigma_N) + + gauss_kernel = 1/(sigma*sqrt(2*pi)) * exp(- (k.^2) / (2 *sigma^2)); + + folded_gauss_kernel = zeros(1,2*container_size_N+1); + + for i = 1:size(k_index,2) + folded_gauss_kernel(k_index(i)) = folded_gauss_kernel(k_index(i)) + gauss_kernel(i); + end + + +% figure(fig_num); fig_num = fig_num + 1; +% plot(k, gauss_kernel, 'color', [0.7383,0.6523,0.9570], 'LineWidth', 2); + plot(folded_k, folded_gauss_kernel, 'color', [0.7383,0.6523,0.9570], 'LineWidth', 2); + + xlim(x_limits); + ylim(y_limits); + + + axis('off'); + + path = [output_path '-' num2str(count)]; + + print(gcf, '-dpng', ['-r' num2str(resolution) ' '], path); + + cdata = imread([path '.png']); + % + imwrite(cdata, [path '.png'], 'png', 'BitDepth', 16, 'transparency', background) + + count = count + 1; + +end + + +return; + + +init_img = ones(N,N,3) * 0.5; + +figure(fig_num); fig_num = fig_num + 1; +image(init_img); +pause; + +b2w = -.5:(1/(N-1)):.5; +grad_img = repmat(b2w, N, 1); +grad_img = cat(3, grad_img, grad_img, grad_img); + +img = init_img + grad_img; + +figure(fig_num); fig_num = fig_num + 1; +image(img); +pause; + +img = init_img - grad_img; + +figure(fig_num); fig_num = fig_num + 1; +image(img); +pause; + + + + + + + + +for sigma = sigma_incr:sigma_incr:(sigma_incr*sigma_N) + + Sigma = sigma * N; + k = -3*Sigma:1:(3*Sigma+1); + + ext_b2w = (-.5 - 3.1 * sigma):(1/(N-1)):(.5 + 3.1 * sigma); + + gauss_kernel = 1/(Sigma*sqrt(2*pi)) * exp(- (k.^2) / (2 * Sigma^2)); + + diff_b2w = conv(gauss_kernel, ext_b2w); + + trim_N = (size(diff_b2w,2) - N)/2; + + diff_b2w = diff_b2w(floor(trim_N):(end-ceil(trim_N)-1)); + + diff_img = repmat(diff_b2w, N, 1); + diff_img = cat(3, diff_img, diff_img, diff_img); + + size(diff_img) + size(init_img) + img = init_img + diff_img; + + img(find(img > 1.0)) = 1.0; + img(find(img < 0)) = 0; + + + figure(fig_num); fig_num = fig_num + 1; + image(img); + pause; + +end + +img = diff_img - grad_img; + +figure(fig_num); fig_num = fig_num + 1; +image(diff_img); \ No newline at end of file diff --git a/matlab/display_reference_sphere.m b/matlab/display_reference_sphere.m new file mode 100644 index 0000000..3d1dbe6 --- /dev/null +++ b/matlab/display_reference_sphere.m @@ -0,0 +1,24 @@ +function display_reference_sphere(sphere_radius, face_alpha) + + centre = [0; 0; 0]; + + num_faces = round(sphere_radius * 100); + + [X, Y, Z] = sphere(num_faces); + + X = X * sphere_radius + centre(1); + Y = Y * sphere_radius + centre(2); + Z = Z * sphere_radius + centre(3); + + hold on; + + h = surf(X, Y, Z); + + hold off; + + set(h,'facecolor', [0.5 0.5 0.5]); + set(h, 'FaceAlpha', face_alpha); + set(h,'edgecolor', 'none') + + +end \ No newline at end of file diff --git a/matlab/eval_response_coeffs.m b/matlab/eval_response_coeffs.m new file mode 100644 index 0000000..9990cc6 --- /dev/null +++ b/matlab/eval_response_coeffs.m @@ -0,0 +1,20 @@ +function S = eval_response_coeffs(response_coeff, scheme, eig_v) + +%Normalise and ensure that eig_v is 3x1 +eig_v = reshape((eig_v ./ norm(eig_v)),3,1); + +%Convert gradient scheme to cartesian coordinates +grad_C = s2c([ scheme.el scheme.az 1+0*scheme.az ])'; + +%Tile eig_v to match gradient scheme size +eig_v = repmat(eig_v , 1, size(grad_C,2)); + +%Get the cosine(angle) between the gradients and the principle eigenvector +cos_angle = dot(grad_C, eig_v)'; + +%Evaluate the signal functions from the response coefficients and the +%cosine angles +S = response_coeff(1) + response_coeff(2) * cos_angle.^2 + ... + response_coeff(3) * cos_angle.^4 + response_coeff(4) * cos_angle.^6+... + response_coeff(5) * cos_angle.^8; + diff --git a/matlab/example_tract.m b/matlab/example_tract.m new file mode 100644 index 0000000..44bc025 --- /dev/null +++ b/matlab/example_tract.m @@ -0,0 +1,198 @@ +function example_tract + + + function prep_figure_for_save(cam_orbit, limits) + + xlim(limits(1,:)); + ylim(limits(2,:)); + zlim(limits(3,:)); + + daspect ([ 1 1 1 ]); + camorbit(cam_orbit(1),cam_orbit(2)); + + cameratoolbar('Show'); + cameratoolbar('SetMode','orbit'); + + light + lighting gouraud; + + end + + close all; + + +% Set defaults + + red_colour = [ 0.7, 0.2, 0.2]; + grey_colour = [0.7,0.7,0.7]; + green_colour = [0.2,0.7,0.2]; + blue_colour = [0.2,0.2,0.7]; + + num_width_sections = 6; + + strand_radii = 0.005; + + cam_orbit = [70, -65]; + + def_dlimit = .275; + + data_limits = [-def_dlimit, def_dlimit; -def_dlimit, def_dlimit; -def_dlimit, def_dlimit]; + + + +% Load data + + [tract, prop_keys, prop_value] = load_tracts('/home/tclose/Data/Tractography/poster/example/deform.tct'); + base_width = get_properties(prop_keys, prop_value, 'base_width', 0.01); + + backbone = load_strands('/home/tclose/Data/Tractography/poster/example/backbone.str'); + back_to_strand1 = load_strand_sets('poster/example/back_to_strand1.sst'); + back_to_strand2 = load_strand_sets('poster/example/back_to_strand2.sst'); + strand1_about_back = load_strand_sets('poster/example/str1_about_back.sst'); + strand2_about_back = load_strand_sets('poster/example/str2_about_back.sst'); + + +% Backbone + + back_fig = my_figure('Backbone'); + + add_strands_to_plot(backbone, strand_radii, red_colour , [0]); + + prep_figure_for_save(cam_orbit, data_limits); + + save_figure_for_poster('/home/tclose/Documents/Tractography/ismrm/images/backbone'); + + + + % Backbone to Strand1 + + back_to_str1_fig = my_figure('Backbone to Strand1'); + + add_strands_to_plot(backbone, strand_radii, red_colour , [0]); + + for set_i = 2:size(back_to_strand1,1) + add_strands_to_plot(back_to_strand1{set_i}, strand_radii, grey_colour , [0]); + end + + prep_figure_for_save(cam_orbit, data_limits); + + save_figure_for_poster('/home/tclose/Documents/Tractography/ismrm/images/back_to_str1'); + + + + % Backbone to Strand2 + + back_to_str2_fig = my_figure('Backbone to Strand2'); + + + add_strands_to_plot(backbone, strand_radii, red_colour , [0]); + + + for set_i = 2:size(back_to_strand2,1) + add_strands_to_plot(back_to_strand2{set_i}, strand_radii, grey_colour , [0]); + end + + prep_figure_for_save(cam_orbit, data_limits); + + + save_figure_for_poster('/home/tclose/Documents/Tractography/ismrm/images/back_to_str2'); + + + + +% Strand1 about Backbone + + num_strands = size(strand1_about_back,1); + + half = floor(num_strands / 2); + + str1_about_back_fig = my_figure('Strand1 about Backbone'); + + add_strands_to_plot(backbone, strand_radii, red_colour , [0]); + + for set_i = [1:half, (half+2):num_strands] + add_strands_to_plot(strand2_about_back{set_i}, strand_radii, grey_colour , [0]); + end + + prep_figure_for_save(cam_orbit, data_limits); + + save_figure_for_poster('/home/tclose/Documents/Tractography/ismrm/images/str1_about_back'); + + + +% Strand2 about Backbone + + num_strands = size(strand2_about_back,1); + + half = floor(num_strands / 2); + + str2_about_back_fig = my_figure('Strand2 about Backbone'); + + add_strands_to_plot(backbone, strand_radii, red_colour , [0]); + + for set_i = [1:half, (half+2):num_strands] + add_strands_to_plot(strand1_about_back{set_i}, strand_radii, grey_colour , [0]); + end + + prep_figure_for_save(cam_orbit, data_limits); + + + save_figure_for_poster('/home/tclose/Documents/Tractography/ismrm/images/str2_about_back'); + + + + +% Tract Strands + + + + [strands, bundle_indices] = tracts2strands(tract, base_width, num_width_sections); + + num_strands = length(strands); + + bundle_colours = repmat(grey_colour, num_strands,1); + + central_strand_index = (num_strands-1)/2+1; + + + for strand_i = 31:39 + bundle_colours(strand_i,:) = blue_colour; + end + + for strand_i = [3,9,17,26,44,53,61,67] + bundle_colours(strand_i,:) = green_colour; + end + + bundle_colours(central_strand_index,:) = red_colour; + + +% set_bundle_colours(num_strands); +% +% global colours_of_bundles; +% bundle_colours = colours_of_bundles; + + + tract_fig = my_figure('Tract Strands'); + + + add_strands_to_plot(strands, repmat(strand_radii, num_strands,1), bundle_colours, [0:1:num_strands-1]); + + + prep_figure_for_save(cam_orbit, data_limits); + + + save_figure_for_poster('/home/tclose/Documents/Tractography/ismrm/images/tract_strands'); + + + +% Whole Tract + + tract_fig = my_figure('Whole Tract'); + + add_tracts_to_plot(tract, grey_colour, 1.0, base_width,0,100,64); + + prep_figure_for_save(cam_orbit, data_limits); + + save_figure_for_poster('/home/tclose/Documents/Tractography/ismrm/images/whole_tract'); + +end \ No newline at end of file diff --git a/matlab/fourier2tck.m b/matlab/fourier2tck.m new file mode 100644 index 0000000..51443c1 --- /dev/null +++ b/matlab/fourier2tck.m @@ -0,0 +1,30 @@ +function tck = fourier2tck(fourier, varargin) +% function tck = fourier2tck(fourier, [num_points=50]) +% +% converts fourier descriptors into a track of num_points length. +% + +if (nargin == 2) + num_points = varargin{1}; +else + num_points = 100; +end + +degree = size(fourier,1); + +k = [0:1:(num_points-1)]'./(num_points-1); + + +if (degree < 1) + error('Fourier coefficients have degree of less than 1'); +end + +psi = ones(num_points,1); + +for (d = [1:(degree-1)]) + + psi = [psi, sqrt(2) * cos(pi * k * d)]; + +end + +tck = psi * fourier; \ No newline at end of file diff --git a/matlab/fourier_descr_matrix.m b/matlab/fourier_descr_matrix.m new file mode 100644 index 0000000..18468ec --- /dev/null +++ b/matlab/fourier_descr_matrix.m @@ -0,0 +1,20 @@ +function psi = fourier_descr_matrix(num_samples, degree, include_endpoints) + + + if include_endpoints + k = [0:1:(num_samples-1)]'./(num_samples-1); + else + k = [1:num_samples]'./(num_samples+1); + end + + if (degree >= 0) + psi = ones(num_samples,1); + end + + for (d = [1:(degree-1)]) + + psi = [psi, sqrt(2) * cos(pi * k * d)]; + + end + +end \ No newline at end of file diff --git a/matlab/get_num_section_properties.m b/matlab/get_num_section_properties.m new file mode 100644 index 0000000..f614f12 --- /dev/null +++ b/matlab/get_num_section_properties.m @@ -0,0 +1,33 @@ +function [num_length_sections, num_width_sections] = get_num_section_properties(properties, style) + + if isfield(properties, 'exp_num_segments') + num_length_sections = str2double(properties.exp_num_segments); + elseif isfield(properties, 'exp_num_length_sections') + num_length_sections = str2double(properties.exp_num_length_sections); + else + disp('Warning!! Did not find number of length samples, using defaults.'); + num_length_sections = 50; + end + + need_width_sections = false; + + if (strfind('lines', style) == 1) + need_width_sections = true; + elseif (strfind('tubes', style) == 1) + need_width_sections = true; + end + + if need_width_sections + if isfield(properties, 'exp_num_strands') + num_width_sections = str2double(properties.exp_num_strands); + elseif isfield(properties, 'exp_num_width_sections') + num_width_sections = str2double(properties.exp_num_width_sections); + else + disp('Warning!! Did not find number of width samples, using defaults.'); + num_width_sections = 2; + end + else + num_width_sections = []; + end + +end diff --git a/matlab/get_obs_img_dims.m b/matlab/get_obs_img_dims.m new file mode 100644 index 0000000..c347bb8 --- /dev/null +++ b/matlab/get_obs_img_dims.m @@ -0,0 +1,46 @@ +function [dim] = get_observed_dims(properties) + + if isfield(properties, 'exp_num_segments') + obs_image_location = properties.obs_image; + else + disp('Warning!! Did not observed image location field of using number of voxels default (3).'); + num_length_sections = 3; + end + + f = fopen (filename, 'r'); + if (f<1) + disp (['Warning!! could not open observed image file ''' filename ''' to determine number of voxels']); + return + end + L = fgetl(f); + if ~strncmp(L, 'mrtrix image', 12) + fclose(f); + disp ([filename ' is not in MRtrix format']); + return + end + + dim = []; + + while 1 + L = fgetl(f); + if ~ischar(L), break, end; + L = strtrim(L); + if strcmp(L, 'END'), break, end; + d = strfind (L,':'); + if ~isempty(d) + key = lower(strtrim(L(1:d(1)-1))); + value = strtrim(L(d(1)+1:end)); + if strcmp(key, 'dim') + dim = str2num(char(split_strings (value, ',')))'; + break; + end + end + + fclose(f); + + + if isempty(dim) + + + +end diff --git a/matlab/get_observed_dims.m b/matlab/get_observed_dims.m new file mode 100644 index 0000000..384a061 --- /dev/null +++ b/matlab/get_observed_dims.m @@ -0,0 +1,62 @@ +function [dims, true_location] = get_observed_properties(properties) + + if isfield(properties, 'obs_image') + obs_image_location = properties.obs_image; + else + disp('Warning!! Did not find observed image location field of using image dimensions default (3x3x3).'); + dims = [3 3 3]; + return; + end + + f = fopen (obs_image_location, 'r'); + if (f<1) + disp (['Warning!! could not open observed image file ''' obs_image_location ''' to determine image dimensions']); + dims = [3,3,3]; + return + end + L = fgetl(f); + if ~strncmp(L, 'mrtrix image', 12) + fclose(f); + disp (['Warning!! observed image file ''' obs_image_location ''' is not in MRtrix format, could not determine image dimensions.']); + dims = [3 3 3]; + return + end + + dims = []; + + while 1 + L = fgetl(f); + if ~ischar(L), break, end; + L = strtrim(L); + if strcmp(L, 'END'), break, end; + d = strfind (L,':'); + if ~isempty(d) + key = lower(strtrim(L(1:d(1)-1))); + value = strtrim(L(d(1)+1:end)); + if strcmp(key, 'dim') + dims = str2num(char(split_strings (value, ',')))'; + break; + end + end + end + + fclose(f); + + if isempty(dims) + disp('Warning!! Observed image location did not specifiy image dimensions.'); + dims = [3 3 3]; + end + + + +end + + + +function S = split_strings (V, delim) + S = {}; + while size(V,2) > 0 + [R, V] = strtok(V,delim); + S{end+1} = R; + end +end \ No newline at end of file diff --git a/matlab/get_observed_properties.m b/matlab/get_observed_properties.m new file mode 100644 index 0000000..1a1d7a6 --- /dev/null +++ b/matlab/get_observed_properties.m @@ -0,0 +1,69 @@ +function [dims, true_location] = get_observed_properties(properties) + + true_location = []; + + if isfield(properties, 'obs_image') + obs_image_location = properties.obs_image; + else + disp('Warning!! Did not find observed image location field of using image dimensions default (3x3x3).'); + dims = [3 3 3]; + return; + end + + f = fopen (obs_image_location, 'r'); + if (f<1) + disp (['Warning!! could not open observed image file ''' obs_image_location ''' to determine image dimensions']); + dims = [3,3,3]; + return + end + L = fgetl(f); + if ~strncmp(L, 'mrtrix image', 12) + fclose(f); + disp (['Warning!! observed image file ''' obs_image_location ''' is not in MRtrix format, could not determine image dimensions.']); + dims = [3 3 3]; + return + end + + dims = []; + + while 1 + L = fgetl(f); + if ~ischar(L), break, end; + L = strtrim(L); + if strcmp(L, 'END'), break, end; + d = strfind (L,':'); + if ~isempty(d) + key = lower(strtrim(L(1:d(1)-1))); + value = strtrim(L(d(1)+1:end)); + if strcmp(key, 'dim') + dims = str2num(char(split_strings (value, ',')))'; + elseif strcmp(key, 'state_location') + true_location = char(split_strings (value, ',')); + end + end + end + + fclose(f); + +% if isempty(dims) +% disp('Warning!! Observed image location did not specifiy image dimensions.'); +% dims = [3 3 3]; +% end +% +% if isempty(true_location) +% disp('Warning!! Observed image location did not specifiy inital location.'); +% end + + + +end + + + +function S = split_strings (V, delim) + S = {}; + while size(V,2) > 0 + [R, V] = strtok(V,delim); + S{end+1} = R; + end +end \ No newline at end of file diff --git a/matlab/get_properties.m b/matlab/get_properties.m new file mode 100644 index 0000000..ca213cf --- /dev/null +++ b/matlab/get_properties.m @@ -0,0 +1,53 @@ +function values = get_properties(keys, all_values, key, varargin) + + if nargin >= 4 + default_value = varargin{1}; + + else + default_value = []; + end + + if nargin >= 5 + num_rows = varargin{2}; + else + num_rows = 0; + end + + if nargin == 6 + datatype = varargin{3}; % Defaults to double but can also be 'string'. + else + datatype = 'double'; + end + + key_i = strmatch(key, keys, 'exact'); + + if ~isempty(key_i) + + if strcmp(datatype, 'double') + values = str2double(all_values(:, key_i)); + + elseif strcmp(datatype, 'string') + values = all_values(:, key_i); + + else + error(['Unrecognised dataype ''' datatype '''']); + + end + + else + + if size(default_value) == [1 1]; %If the default value is a scalar make a vector the size of the number of rows with each element equal to the default value + values = ones(num_rows,1) * default_value; + + elseif (size(default_value,1) == num_rows) || (size(keys,1) == 0) % Else if the default value + values = default_value; + + else + error(['Size of default value (' num2str(size(default_value,1)) ') does not match number of rows (' num2str(num_rows) '), and alternatively is not a scalar']); + + end + + end + + +end \ No newline at end of file diff --git a/matlab/grad_scheme.mat b/matlab/grad_scheme.mat new file mode 100644 index 0000000000000000000000000000000000000000..b38056eed0c07df91647e1fc68436fdf3c949548 GIT binary patch literal 23231 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 literal 0 HcmV?d00001 diff --git a/matlab/gradient_calc_validation.m b/matlab/gradient_calc_validation.m new file mode 100644 index 0000000..13da7ad --- /dev/null +++ b/matlab/gradient_calc_validation.m @@ -0,0 +1,523 @@ +function gradient_calc_validation + +%----------------------------------------------------% +%----------------------------------------------------% +% Constants % +%----------------------------------------------------% +%----------------------------------------------------% + +%Number of 'time' (free parameter of the strand parameterisation) samples. +T = 20 + +%Degree of Fourier Descriptors +D = 3 + +%DW sample orientations +U = [ 0.9413 -0.0407 -0.3351; + -0.8846 -0.3834 -0.2654; + -0.1714 -0.7779 0.6046; + 0.4040 -0.2802 -0.8708; + 0.1593 -0.7891 0.5932; + 0.1960 -0.3076 0.9311; + -0.0815 0.2989 0.9508; + 0.2384 0.7604 0.6042; + 0.6346 0.7660 -0.1025; + 0.9924 -0.1223 -0.0151; + 0.2629 -0.5636 -0.7831; + 0.1511 0.9332 0.3260; + -0.4723 -0.7962 -0.3783; + 0.3909 0 0.9204; + 0.6807 0.5251 0.5108; + 0.2602 -0.9654 -0.0149; + 0.5118 -0.2842 0.8107; + 0.6354 0.4318 -0.6402; + 0.5055 -0.8350 -0.2174; + 0.3404 -0.5611 0.7545; + -0.3686 -0.8923 0.2605; + -0.4293 -0.5237 -0.7358; + 0.7402 -0.0887 0.6665; + -0.7366 -0.5749 0.3561; + -0.6702 0.4612 -0.5815; + -0.8144 -0.2115 -0.5404; + 0.0739 0.9973 0; + -0.1919 0.9231 0.3332; + -0.7180 -0.6653 -0.2047; + 0.2784 -0.9094 0.3090; + -0.5392 0.8337 -0.1189; + -0.5836 -0.2303 -0.7787; + -0.0742 -0.5672 -0.8203; + -0.4803 0.7237 -0.4955; + -0.0686 0 -0.9976; + 0.6979 -0.6031 -0.3863; + -0.0887 0.7850 0.6131; + 0.6301 -0.0634 -0.7739; + -0.2544 -0.3018 -0.9188; + -0.9045 -0.2937 0.3093; + 0.9044 -0.4125 0.1089; + 0.4737 0.2298 -0.8502; + 0.2616 0.0001 -0.9652; + 0.3362 0.5345 -0.7754; + 0.9786 0.2057 0; + 0.1428 0.3091 -0.9402; + 0.5723 -0.4776 -0.6666; + -0.0492 -0.9405 0.3361; + 0.9566 0.0391 0.2889; + 0.7269 -0.6210 0.2932; + -0.0076 0.5804 -0.8143; + 0.8580 0.5109 -0.0530; + -0.3915 -0.9169 -0.0770; + 0.4133 -0.7417 -0.5283; + 0.7995 0.1435 -0.5833; + 0.8747 -0.2627 0.4072; + -0.4816 -0.7070 0.5179; + -0.7969 0.2592 0.5457; + 0.7540 -0.6540 -0.0621; + -0.8983 0.3722 0.2335]; + + %Pregenerated Fourier Descriptor basis set; + PSI = fourier_descr_matrix(T, D, 0); + + %Pregenerated derived Fourier Descriptor w.r.t 'time' basis set + dPSI = d_fourier_descr_matrix(T, D, 0); + + %Signal response model coefficients +% Resp = [0.3475; -1.6274; 3.2524; -3.0952; 1.1302]; + + Resp = [0.264387; -1.50073; 1.89986; -1.28088; 0.366885]; + + %Voxel centre + VOX = [0.0, 0.0, 0.0]; + + %Gaussian blur standard deviation + ALPHA = 1.0; + + + +%----------------------------------------------------% +%----------------------------------------------------% +% Default Indices % +%----------------------------------------------------% +%----------------------------------------------------% + + +% %Response coefficient index + j = 4; + +% %Strand free parameter, 'time', index. + t = 10 +% +% %Strand degree index + m = 2 +% +% %Strand spatial dimension index + d = 1 +% +% %DW Sample orientation index + i = 1 +% +% %Voxel index + n = 1 + + +%----------------------------------------------------% +%----------------------------------------------------% +% Primary Functions % +%----------------------------------------------------% +%----------------------------------------------------% + + %Point 't', along strand path. + function lambda_t = Lambda(V,t) + + lambda = PSI * V; + + lambda_t = lambda(t,:)'; + + end + + %Gradient w.r.t V(m,d) + function dlambda_t = dLambda(V,t,m) + + dlambda_t = PSI(t,m); + + end + + + %Tangent at point 't' along strand path + function glambda_t = GLambda(V,t) + + glambda = dPSI * V; + + glambda_t = glambda(t,:)'; + + end + + %Gradient w.r.t V(m,d) + function dglambda_t = dGLambda(V,t,m) + + dglambda_t = dPSI(t,m); + + end + + + + %Signal response model coefficient 'j' + function r = R(j) + + r = Resp(j+1); + + end + + %Voxel n + function x = X(n) + + x = VOX(n,:)'; + + end + + + %Gaussian smoothing kernel normalising scalar. + function scalar = ConvScalar + + scalar = 1/( sqrt(2) * pi * ALPHA ); + + end + + +%----------------------------------------------------% +%----------------------------------------------------% +% Secondary Functions % +%----------------------------------------------------% +%----------------------------------------------------% + + + % %tang_dw_dot% Dot product between strand tangent and DW-sample orientation 'i'. + function rho_ti = Rho(V, t, i) + + rho_ti = U(i,:) * GLambda(V,t); + + end + + + %Gradient w.r.t V(m,d) + function drho_ti = dRho(V, t, i, d, m) + + drho_ti = U(i,d) * dGLambda(V,t,m); + + end + + + % %param_speed2% (Parameterisation speed)^2 at point 't' along strand path + function zeta_t = Zeta(V, t) + + zeta_t = GLambda(V,t)' * GLambda(V,t); + + end + + %Gradient w.r.t V(m,d) + function dzeta_t = dZeta(V, t, d, m) + + gLambda_Vt = GLambda(V,t); + + dzeta_t = 2 * dGLambda(V,t,m) * gLambda_Vt(d); + + end + + % %strand_to_vox_disp% Displacement along dimension 'd', between voxel 'n' and point 't' along strand path, + %normalised by the standard deviation of the Gaussian smoothing kernel. + function delta_t = Delta(V, t, n, d) + + lambda_Vt = Lambda(V, t); + Xn = X(n); + delta_t = (lambda_Vt(d) - Xn(d))/ALPHA; + + end + + %Gradient w.r.t V(m,d) + function ddelta_t = dDelta(V, t, n, d, m) + + ddelta_t = dLambda(V,t,m)/ALPHA; + + end + + + +%----------------------------------------------------% +%----------------------------------------------------% +% Tertiary Functions % +%----------------------------------------------------% +%----------------------------------------------------% + + + + + %Dot product between strand tangent and DW-sample orientation 'i'. + function qrho_ti = QRho(V, t, i) + + qrho_ti = Rho(V,t,i) ^ (2*j); + + end + + + %Gradient w.r.t V(m,d) + function dqrho_ti = dQRho(V, t, i, d, m) + + dqrho_ti = dRho(V,t,i,d,m) * (2*j) * Rho(V,t,i) ^ (2*j-1); + + end + + + %(Parameterisation speed)^2 at point 't' along strand path + function qzeta_t = QZeta(V, t) + + qzeta_t = Zeta(V,t) ^ ( (1-2*j)/2 ); + + end + + %Gradient w.r.t V(m,d) + function dqzeta_t = dQZeta(V, t, d, m) + + dqzeta_t = dZeta(V,t,d,m) * ( (1-2*j)/2 ) * Zeta(V,t) ^ ( (-1-2*j)/2 ); + + end + + %Displacement along dimension 'd', between voxel 'n' and point 't' along strand path, + %normalised by the standard deviation of the Gaussian smoothing kernel. + function qdelta_t = QDelta(V, t, n, d) + + qdelta_t = exp(-Delta(V,t,n,d)^2); + + end + + %Gradient w.r.t V(m,d) + function dqdelta_t = dQDelta(V, t, n, d, m) + + dqdelta_t = -2 * dDelta(V,t,n,d,m) * Delta(V,t,n,d) * exp (-Delta(V,t,n,d)^2); + + end + + + + +%----------------------------------------------------% +%----------------------------------------------------% +% Partial Functions % +%----------------------------------------------------% +%----------------------------------------------------% + + + %Signal component due to the 'j'th response harmonic from a point 't' along the strand that shows up in + % the 'i'th DW-sample orientation, at a voxel 'n', displaced along dimension 'd' + function q = Q(V,t,j,i,n,d) + + q = R(j) * ConvScalar * QRho(V,t,i) * QZeta(V,t) * QDelta(V,t,n,d); + + end + + %Gradient w.r.t V(m,d) + function q = dQ(V,t,j,i,n,d,m) + + q = R(j) * ConvScalar * (dQRho(V,t,i,d,m) * QZeta(V,t) * QDelta(V,t,n,d) + QRho(V,t,i) * dQZeta(V,t,d,m) * QDelta(V,t,n,d) + QRho(V,t,i) * QZeta(V,t) * dQDelta(V,t,n,d,m)); + + end + + + %Signal component due to the 'j'th response harmonic from a point 't' along the strand that shows up in + % the 'i'th DW-sample orientation, at a voxel 'n', displaced along dimension 'd' + function q = seg_signal(V,t,j,i) + + + q = R(j) * QRho(V,t,i) * QZeta(V,t); + + end + + %Gradient w.r.t V(m,d) + function q = seq_gradient(V,t,j,i,n,d,m) + + q = dQRho(V,t,i,d,m) ;%* QZeta(V,t);%R(j) * ... + QRho(V,t,i) * dQZeta(V,t,d,m)); + + end + + + +%----------------------------------------------------% +%----------------------------------------------------% +% Partial Functions % +%----------------------------------------------------% +%----------------------------------------------------% + + + + +% function q_complete = Q_complete(V,i,n) +% +% q_complete = 0; +% +% for t = 1:T +% +% for j = 0:1:(size(Resp,1)-1) +% +% for d = 1:3 +% +% q_complete = q_complete + Q(V,t,j,i,n,d); +% +% end +% +% end +% +% end +% +% +% end +% +% +% function dq_complete = dQ_complete(V,i,n) +% +% dq_complete = zeros(size(V)); +% +% for m = 1:size(V,1) +% +% for d = 1:3 +% +% for t = 1:T +% +% for j = 0:1:(size(Resp,1)-1) +% +% dq_complete(m,d) = dq_complete(m,d) + dQ(V,t,j,i,n,d,m); +% +% end +% +% end +% +% end +% +% end +% +% end + +%----------------------------------------------------% +%----------------------------------------------------% +% Validation % +%----------------------------------------------------% +%----------------------------------------------------% + +% %small increment + h = 0.000001; + + + %Strand Fourier Descriptor (Chung, 2008) coefficients + V_INIT = [ -0.00957484, -0.00342075, -0.02118;... + -0.209237, 0.0614428, -0.0497531;... + 0.00225339, 0.00672736, 0.0199366 ] + + + + M = size(V_INIT,1) +% +% Q_complete_ = Q_complete(V_INIT,i,n) +% +% dQ_complete_ref = zeros(M,3); +% +% for m = 1:M +% for d = 1:3 +% +% Vh = V_INIT; +% Vh(m,d) = Vh(m,d) + h; +% +% dQ_complete_ref(m,d) = (Q_complete(Vh,i,n) - Q_complete(V_INIT,i,n))/h; +% +% end +% end +% +% dQ_complete_ref +% +% dQ_complete_ = dQ_complete(V_INIT,i,n) + + + + H = zeros(D,3); + H(m,d) = h; + Vh = V_INIT + H + + +disp('-------------- Response coeff ------------'); + + R(j) + +disp('-------------- Segment -----------------'); + + Lambda_Vt = Lambda(V_INIT,t) + + GLambda_Vt = GLambda(V_INIT,t) + + + +disp('------------- Complete Function ------------------'); + +% Evaluation of the signal component. + Q_Vtjind = Q(V_INIT,t,j,i,n,d) + +% Evalutation of the estimated gradient. + dQ_Vtjindm_ref = ( Q(Vh,t,j,i,n,d) - Q(V_INIT,t,j,i,n,d))/h + + +% Evaluation of the calculated gradient. + dQ_Vtjindm = dQ(V_INIT,t,j,i,n,d,m) + +disp('--------------- Rho ----------------'); + +% %Evaluation of the calculated gradient. + Rho_Vti = Rho(V_INIT,t,i) + + +% %Evalutation of the estimated gradient. +% dRho_Vtindm_ref = ( Rho(Vh,t,i) - Rho(V_INIT,t,i))/h + +% %Evaluation of the calculated gradient. + dRho_Vtindm = dRho(V_INIT,t,i,d,m) + + +disp('--------------- Zeta ----------------'); + + Zeta_Vt = Zeta(V_INIT,t) + +% %Evalutation of the estimated gradient. +% dZeta_Vt_ref = ( Zeta(Vh,t) - Zeta(V_INIT,t))/h +% +% %Evaluation of the calculated gradient. + dZeta_Vtdm = dZeta(V_INIT,t,d,m) +% + +disp('--------------- Delta ----------------'); + +% %Evalutation of the estimated gradient. +% dDelta_Vtnd_ref = ( Delta(Vh,t,n,d) - Delta(V_INIT,t,n,d))/h +% +% %Evaluation of the calculated gradient. + dDelta_Vtndm = dDelta(V_INIT,t,n,d,m) + +disp('--------------- Q Rho ----------------'); + + QRho_Vti = QRho(V_INIT, t,i) + +% %Evaluation of the calculated gradient. + dQRho_Vtindm = dQRho(V_INIT,t,i,d,m) + +disp('-------------- QZeta -----------------'); + + QZeta_Vt = QZeta(V_INIT,t) + +% %Evaluation of the calculated gradient. + dQZeta_Vtdm = dQZeta(V_INIT,t,d,m) + + +disp('-------------- Segment Gradient (minus interpolation)-----------'); + + seg_signal_Vtji = seg_signal(V_INIT,t,j,i) + + seg_gradient_Vtjindm = seq_gradient(V_INIT,t,j,i,n,d,m) + + seg_gradient_Vtjindm_ref = (seg_signal(Vh,t,j,i) - seg_signal(V_INIT,t,j,i))/h + + +end + diff --git a/matlab/imaging_gradient_demo.m b/matlab/imaging_gradient_demo.m new file mode 100644 index 0000000..0fbd889 --- /dev/null +++ b/matlab/imaging_gradient_demo.m @@ -0,0 +1,37 @@ +close all; + +N = 100; +sigma = 0.05 * N; + + +kernel_extent = 3; + +kernel_size = ceil(sigma * kernel_extent) + +gauss_kernel = zeros(2 * kernel_size + 1); + +for i = 1:size(gauss_kernel,1) + + ker_t = kernel_extent * (i - kernel_size - 1)/kernel_size; + + gauss_kernel(i) = 1/(sigma * sqrt(2) * pi ) * exp(- ker_t^2/(2 * sigma^2)); +end + + +plot(gauss_kernel); + +return; + +initial = [0:1/(N-1):1]; +final = [1:-1/(N-1):0]; + +% G = repmat(row, M, 1); + + +imagesc(initial); +colormap('gray'); +figure; +imagesc(final); +colormap('gray'); + + diff --git a/matlab/interp_integration.m b/matlab/interp_integration.m new file mode 100644 index 0000000..54f66ca --- /dev/null +++ b/matlab/interp_integration.m @@ -0,0 +1,41 @@ +%Calculates the integration of the quartic interpolation function +% x^4 - 2 x^2 + 1, over the interval a to b. + +full = 0 + +if full + syms x_1 p_1 m_1 x_2 p_2 m_2 x_3 p_3 m_3 t + + f = ((x_1 - (p_1 + m_1 * t)) ^ 4 - 2 * (x_1 - (p_1 + m_1 * t)) ^ 2 + 1) * ... + ((x_2 - (p_2 + m_2 * t)) ^ 4 - 2 * (x_2 - (p_2 + m_2 * t)) ^ 2 + 1) * ... + ((x_3 - (p_3 + m_3 * t)) ^ 4 - 2 * (x_3 - (p_3 + m_3 * t)) ^ 2 + 1); + + f_part = ((x_1 - (p_1 + m_1 * t)) ^ 4 - 2 * (x_1 - (p_1 + m_1 * t)) ^ 2 + 1); + + disp('f = '); + + pretty(f); + + f_int = int(f, t); + + % pretty(f_int); + + % disp('f_int_simplify = '); + % + f_int = simplify(f_int); + % + % pretty(f_int); +else + + syms a_1 b_1 c_1 d_1 e_1 a_2 b_2 c_2 d_2 e_2 a_3 b_3 c_3 d_3 e_3 t + + f = (a_1 * t^4 + b_1 * t^3 + c_1 * t^2 + d_1 * t + e_1) *... + (a_2 * t^4 + b_2 * t^3 + c_2 * t^2 + d_2 * t + e_2) *... + (a_3 * t^4 + b_3 * t^3 + c_3 * t^2 + d_3 * t + e_3); + + pretty(f); + + f = collect(expand(f),t) + + +end diff --git a/matlab/legendre_coefficients.m b/matlab/legendre_coefficients.m new file mode 100644 index 0000000..ba72f00 --- /dev/null +++ b/matlab/legendre_coefficients.m @@ -0,0 +1,31 @@ +function get_response_coeffs(R) +%Takes a vector of spherical harmonic coefficients (R) from a given response +%function and calculates the corresponding coefficients for the polynomial +%expansion used in the calculation of the instantaneous signal intensity. + +R = [1 1 1 1 1]; + +if (length(R) > 5) + error('Sorry only polynomials up to order 4 have been calculated.'); +end + +p{1} = [0 0 0 0 1]; %0th order Legendre polynomial +p{2} = 1/2 * [0 0 0 3 -1]; %2nd order Legendre polynomial +p{3} = 1/8 * [0 0 35 -30 3]; %4th order Legendre polynomial +p{4} = 1/16 * [0 231 -315 105 -5]; %6th order Legendre polynomial +p{5} = 1/128 * [6435 -12012 6930 -1260 35]; %8th order Legendre polynomial + + +for (i = 1:size(p,1)) + P = [P;p{1}]; +end +%[p0;p2;p4;p6;p8]; + +P = P * sqrt((4 * size(P,1)+1)/2); + +P = P * diag(R); + +q = sum(P)' + + + diff --git a/matlab/lhist.m b/matlab/lhist.m new file mode 100644 index 0000000..c21100e --- /dev/null +++ b/matlab/lhist.m @@ -0,0 +1,8 @@ +function histo = lhist(gamma, mean, num_samples, range, bins) + +samples = tan(pi*(rand(num_samples,1)-0.5)) * gamma + mean; + +samples = samples(find(abs(samples-mean) < range)); + +histo = hist(samples, [-range:2*range/bins:range]); + diff --git a/matlab/load_extended_props.m b/matlab/load_extended_props.m new file mode 100644 index 0000000..1f4ac8e --- /dev/null +++ b/matlab/load_extended_props.m @@ -0,0 +1,32 @@ +function [keys, values] = load_extend_elem_props(location) + + keys = cell(0); + values = []; + + if exist(location) + + ext_file = fopen(location, 'r'); + header_line = fgetl(ext_file); + fclose(ext_file); + + %Seperate the header tag from the key list. + [header, key_string] = strtok(header_line,':'); + + if ~strcmp(header, '%%% Extended Properties File %%% - keys') + error(['Extended properties header tag ''%%% Extended Properties File %%% - keys'' was not found at start of extended properties file ''' location '']); + end + + %String ': ' from start of keys and trailing tab from end. + key_string = deblank(key_string(3:end)); + keys = cell(0); + + while ~isempty(key_string) + [keys{end+1}, key_string] = strtok(key_string); + + end + + values = load(location); + + end + +end \ No newline at end of file diff --git a/matlab/load_image.m b/matlab/load_image.m new file mode 100644 index 0000000..c267afe --- /dev/null +++ b/matlab/load_image.m @@ -0,0 +1,134 @@ +function image = load_image (filename) + +% function: image = load_image (filename) +% +% returns a structure containing the header information and data for the MRtrix +% format image 'filename' (i.e. files with the extension '.mif' or '.mih'). + +image.comments = {}; + +f = fopen (filename, 'r'); +if (f<1) + disp (['could not open file ' filename ]); + return +end +L = fgetl(f); +if ~strncmp(L, 'mrtrix image', 12) + fclose(f); + disp ([filename ' is not in MRtrix format']); + return +end + +transform = []; +DW_scheme = []; + +while 1 + L = fgetl(f); + if ~ischar(L), break, end; + L = strtrim(L); + if strcmp(L, 'END'), break, end; + d = strfind (L,':'); + if isempty(d) + disp (['invalid line in header: ''' L ''' - ignored']); + else + key = lower(strtrim(L(1:d(1)-1))); + value = strtrim(L(d(1)+1:end)); + if strcmp(key, 'dim') + image.dim = str2num(char(split_strings (value, ',')))'; + elseif strcmp(key, 'vox') + image.vox = str2num(char(split_strings (value, ',')))'; + elseif strcmp(key, 'dw_scheme') + DW_scheme(end+1,:) = str2num(char(split_strings (value, ',')))'; + elseif strcmp(key, 'transform') + transform(end+1,:) = str2num(char(split_strings (value, ',')))'; + elseif strcmp(key, 'comments') + image.comments{end+1} = value; + elseif strcmp(key, 'labels') + image.labels = split_strings (value, '\'); + elseif strcmp(key, 'units') + image.units = split_strings (value, '\'); + elseif strcmp(key, 'file') + file = value; + + elseif strcmp(key, 'img_dims') %do nothing; + elseif strcmp(key, 'img_vox_lengths') %do nothing; + elseif strcmp(key, 'diff_encodings') %do nothing; + elseif strcmp(key, 'img_offsets') %do nothing; % image.offset = value; + else + key = strrep(key, ' ', '_'); + eval(['image.' key ' = value;']); + end + end +end +fclose(f); + + +if ~isempty(transform) + image.transform = transform; + image.transform(4,:) = [ 0 0 0 1 ]; +end + +if ~isempty(DW_scheme) + image.DW_scheme = DW_scheme; +end + +if ~isfield (image, 'dim') || ~exist ('file') || ... + ~isfield (image, 'layout') || ~isfield (image, 'datatype') + disp ('critical entries missing in header - not reading data') + return +end + +layout = split_strings(image.layout, ','); +order = (abs(str2num (char(layout)))+1)'; + +[ file, offset ] = strtok(file); +if isempty(offset), offset = 0; else offset = str2num(char(offset)); end +[f,g] = fileparts(filename); +if strcmp(file,'.'), file = filename; else file = fullfile (f, file); end + +datatype = lower(image.datatype); +byteorder = datatype(end-1:end); + +if strcmp(byteorder, 'le') + f = fopen (file, 'r', 'l'); + datatype = datatype(1:end-2); +elseif strcmp(byteorder, 'be') + f = fopen (file, 'r', 'b'); + datatype = datatype(1:end-2); +else + if strcmp(datatype, 'bit') + datatype = 'bit1'; + f = fopen(file, 'r', 'b'); + else + f = fopen(file, 'r'); + end +end + +if (f<1) + disp (['error opening ' filename ]); + return +end + +fseek (f, offset, -1); +image.data = fread (f, inf, datatype); +fclose (f); + +order(order)= 1:size(order,2); +image.data = reshape (image.data, image.dim(order)); +image.data = ipermute (image.data, order); +for i=1:size(order,2) + if layout{i}(1) == '-' + image.data = flipdim(image.data, i); + end +end + + + + +function S = split_strings (V, delim) + S = {}; + while size(V,2) > 0 + [R, V] = strtok(V,delim); + S{end+1} = R; + end + diff --git a/matlab/load_param_evolution.m b/matlab/load_param_evolution.m new file mode 100644 index 0000000..f43406f --- /dev/null +++ b/matlab/load_param_evolution.m @@ -0,0 +1,72 @@ +function params_evolution = load_param_evolution(dir_name, strand_i, degree_i, dim_i) + + if (dim_i > 2) + error('dim_i (4th argument) cannot be larger than 2'); + end + + + strand_i = strand_i + 1; + degree_i = degree_i + 1; + dim_i = dim_i + 1; + + + + files = dir(dir_name)'; %' + + if (size(files,2) == 0) + error(['Could not load any strands from directory ' dirname ]); + end + + sample_files = cell(0); + + for file = files + + if (~file.isdir) + + if (match_file_ext(file.name, 'frr' )) + + delimeters = [strfind(file.name, '_') strfind(file.name, '.frr')]; + + if (length(delimeters) == 2 && strmatch(file.name(1:delimeters(1)), 'sample_')) + sample_files{end+1} = file.name((delimeters(1)+1):(delimeters(2)-1)); %#ok + end + + end + end + end + + + sample_files = sort(sample_files)'; + + num_samples = size(sample_files,1); + + path = [ dir_name filesep 'sample_' sample_files{1} '.frr' ]; + + fouriers = load_strands(path); + + num_strands = size(fouriers,1); + degree = size(fouriers{1,1},1); + + params_evolution = zeros(num_samples,1); + + + for sample_i = 1:num_samples + + path = [dir_name, filesep, 'sample_', sample_files{sample_i}, '.frr']; + + fouriers = load_strands(path); + + fourier = fouriers{strand_i}; + + params_evolution(sample_i) = fourier(degree_i, dim_i); + + + end + + + plot(params_evolution); + title([ dir_name, ': strand ', num2str(strand_i), ', degree ', num2str(degree_i), ', dim ', num2str(dim_i) ]); + + +end + diff --git a/matlab/load_strand_sections.m b/matlab/load_strand_sections.m new file mode 100644 index 0000000..ebbe6c8 --- /dev/null +++ b/matlab/load_strand_sections.m @@ -0,0 +1,21 @@ +function [sections, prop_keys, prop_values] = load_strand_sections(filename) + + sections = parse_strand_sections(read_fibres(filename)); + + if exist([filename 'x'], 'file') + + [prop_keys, prop_values] = read_element_properties([filename 'x']); + + if size(prop_values,1) ~= size(sections,1) + error (['Number of loaded property values (' num2str(size(prop_values,1)) ') does not match number of loaded segments (' num2str(size(sections,1)) ').']); + end + + else + + prop_keys = []; + prop_values = []; + + end + + +end \ No newline at end of file diff --git a/matlab/load_strand_sets.m b/matlab/load_strand_sets.m new file mode 100644 index 0000000..f9d5ea8 --- /dev/null +++ b/matlab/load_strand_sets.m @@ -0,0 +1,55 @@ +function [strand_sets, props, set_prop_keys, set_prop_values, elem_prop_keys, elem_prop_values] = load_strand_sets(filename, include, load_ext_props) + + if ~exist('include') + include = []; + end + + if ~exist('load_ext_props') + load_ext_props = false; + end + + [elems, props] = read_fibres(filename); + + sets = split_at_file_seperator(elems, [-inf,nan,inf]); + + num_sets = length(sets); + + + if isempty(include) + include = 1:num_sets; + num_include = num_sets; + else + num_include = size(include(:),1); + end + + strand_sets = cell(num_include,1); + + for set_i = include + strand_sets{set_i} = parse_strands(sets{set_i}); + end + + if load_ext_props && exist([filename 'x']) + [set_prop_keys, set_prop_values] = read_element_properties([filename 'x']); + set_prop_values = set_prop_values(include',:); + + else + + set_prop_keys = cell(0); + set_prop_values = cell(0); + + + end + + + if load_ext_props && exist([filename 'xx']) + [elem_prop_keys, elem_prop_values] = read_set_element_properties([filename 'xx']); + elem_prop_values = elem_prop_values(include',:); + + else + + elem_prop_keys = cell(0); + elem_prop_values = cell(0); + + end + +end \ No newline at end of file diff --git a/matlab/load_strands.m b/matlab/load_strands.m new file mode 100644 index 0000000..0745d60 --- /dev/null +++ b/matlab/load_strands.m @@ -0,0 +1,20 @@ +function [strands, props, prop_keys, prop_values] = load_strands(filename) + + [elems, props] = read_fibres(filename); + + strands = parse_strands(elems); + + if exist([filename 'x']) == 2 + [prop_keys, prop_values] = read_element_properties([filename 'x']); + else + prop_keys = cell(0); + prop_values = cell(0); + end + + + if (size(prop_values,1) ~= size(strands,1)) && size(prop_values,1) ~= 0 + error (['Number of loaded property values (' num2str(size(prop_values,1)) ') does not match number of loaded strands (' num2str(size(strands,1)) ').']); + end + + +end \ No newline at end of file diff --git a/matlab/load_tck_sets.m b/matlab/load_tck_sets.m new file mode 100644 index 0000000..69ed5d0 --- /dev/null +++ b/matlab/load_tck_sets.m @@ -0,0 +1,55 @@ +function [tck_sets, props, set_prop_keys, set_prop_values, elem_prop_keys, elem_prop_values] = load_tck_sets(filename, include, load_ext_props) + + if ~exist('include') + include = []; + end + + if ~exist('load_ext_props') + load_ext_props = false; + end + + [elems, props] = read_fibres(filename); + + sets = split_at_file_seperator(elems, [-inf,nan,inf]); + + num_sets = length(sets); + + + if isempty(include) + include = 1:num_sets; + num_include = num_sets; + else + num_include = size(include(:),1); + end + + tck_sets = cell(num_include,1); + + for set_i = include + tck_sets{set_i} = parse_tcks(sets{set_i}); + end + + if load_ext_props && exist([filename 'x']) + [set_prop_keys, set_prop_values] = read_element_properties([filename 'x']); + set_prop_values = set_prop_values(include',:); + + else + + set_prop_keys = cell(0); + set_prop_values = cell(0); + + + end + + + if load_ext_props && exist([filename 'xx']) + [elem_prop_keys, elem_prop_values] = read_set_element_properties([filename 'xx']); + elem_prop_values = elem_prop_values(include',:); + + else + + elem_prop_keys = cell(0); + elem_prop_values = cell(0); + + end + +end \ No newline at end of file diff --git a/matlab/load_tcks.m b/matlab/load_tcks.m new file mode 100644 index 0000000..be714c8 --- /dev/null +++ b/matlab/load_tcks.m @@ -0,0 +1,20 @@ +function [tcks, props, prop_keys, prop_values] = load_tcks(filename) + + [elems, props] = read_fibres(filename); + + tcks = parse_strands(elems); + + if exist([filename 'x']) == 2 + [prop_keys, prop_values] = read_element_properties([filename 'x']); + else + prop_keys = cell(0); + prop_values = cell(0); + end + + + if (size(prop_values,1) ~= size(tcks,1)) && size(prop_values,1) ~= 0 + error (['Number of loaded property values (' num2str(size(prop_values,1)) ') does not match number of loaded tracks (' num2str(size(tcks,1)) ').']); + end + + +end \ No newline at end of file diff --git a/matlab/load_tensor.m b/matlab/load_tensor.m new file mode 100644 index 0000000..b48ac1d --- /dev/null +++ b/matlab/load_tensor.m @@ -0,0 +1,49 @@ +function [tensor_matrix, labels] = load_tensor(filename) + + file = fopen(filename, 'r'); + + if (file == -1) + error([ 'Could not open file ' filename '!' ]); + end + + header_line = fgetl(file); + + fclose(file); + + %Seperate the header tag from the key list. + [preamble, header] = strtok(header_line,':'); + + if ~strcmp(preamble, '%%% Keys %%%') + error(['Did not find tensor preamble at location ''' filename '']); + end + + header = deblank(header(2:end)); + + if isempty(header) + error('No keys found in tensor file.'); + elseif isempty(regexp(header,' ', 'once')) + labels{1} = line; + else + labels = regexp(header,' ','split'); + end + + tensor_matrix = load(filename)'; + + num_elements = size(tensor_matrix,1); + + num_objects = size(tensor_matrix,2)/num_elements; + + + if num_objects == 0 + error('No elements loaded from file.') + elseif floor(num_objects) ~= num_objects + error(['Number of elements (' num2str(num_elements) ') does not divide into number of rows (' num2str(size(tensor_matrix,2)) ').']); + end + + if num_elements ~= length(labels) + error(['Number of elements (' num2str(num_elements) ') does not match number of labels (' num2str(length(labels)) ').']); + end + + tensor_matrix = reshape(tensor_matrix, num_elements, num_elements, num_objects); + +end \ No newline at end of file diff --git a/matlab/load_tract_sections.m b/matlab/load_tract_sections.m new file mode 100644 index 0000000..03fabd7 --- /dev/null +++ b/matlab/load_tract_sections.m @@ -0,0 +1,13 @@ +function [sections, prop_keys, prop_values] = load_tract_sections(filename) + + sections = parse_tract_sections(read_fibres(filename)); + + + [prop_keys, prop_values] = read_element_properties([filename 'x']); + + if size(prop_values,1) ~= size(sections,1) + error (['Number of loaded property values (' num2str(size(prop_values,1)) ') does not match number of loaded segments (' num2str(size(sections,1)) ').']); + end + + +end \ No newline at end of file diff --git a/matlab/load_tract_sets.m b/matlab/load_tract_sets.m new file mode 100644 index 0000000..e42c678 --- /dev/null +++ b/matlab/load_tract_sets.m @@ -0,0 +1,29 @@ +function [tract_sets, properties, set_prop_keys, set_prop_values, elem_prop_keys, elem_prop_values] = load_tract_sets(filename, set_indices) + + [elems, properties] = read_fibres(filename); + + sets = split_at_file_seperator(elems, [-inf,nan,inf]); + + num_sets = length(sets); + + tract_sets = cell(num_sets,1); + + for set_i =1:num_sets + tract_sets{set_i} = parse_tracts(sets{set_i}); + end + + if exist([filename 'x'],'file') + [set_prop_keys, set_prop_values] = read_element_properties([filename 'x']); + else + set_prop_keys = []; + set_prop_values = []; + end + + if exist([filename 'xx'], 'file') + [elem_prop_keys, elem_prop_values] = read_set_element_properties([filename 'xx']); + else + elem_prop_keys = []; + elem_prop_values = cell(num_sets,1); + end + +end \ No newline at end of file diff --git a/matlab/load_tracts.m b/matlab/load_tracts.m new file mode 100644 index 0000000..39f8cb8 --- /dev/null +++ b/matlab/load_tracts.m @@ -0,0 +1,20 @@ +function [tracts, props, prop_keys, prop_values] = load_tracts(filename) + + [elems, props] = read_fibres(filename); + + tracts = parse_tracts(elems); + + if exist([filename 'x']) == 2 + [prop_keys, prop_values] = read_element_properties([filename 'x']); + + if size(prop_values,1) ~= size(tracts,1) + error (['Number of loaded property values (' num2str(size(prop_values,1)) ') does not match number of loaded tracts (' num2str(size(tracts,1)) ').']); + end + + else + prop_keys = cell(0); + prop_values = cell(0); + end + +end + diff --git a/matlab/load_triples.m b/matlab/load_triples.m new file mode 100644 index 0000000..02bea5a --- /dev/null +++ b/matlab/load_triples.m @@ -0,0 +1,5 @@ +function triples = load_triples(filename) + + triples = load(filename); + +end \ No newline at end of file diff --git a/matlab/load_unzip_image.m b/matlab/load_unzip_image.m new file mode 100644 index 0000000..c11a068 --- /dev/null +++ b/matlab/load_unzip_image.m @@ -0,0 +1,8 @@ +function [image_matrix, labels] = load_unzip_image(filename) + + image = read_image(filename); + + image_matrix = image.data(:)'; + labels{1} = 'All Voxel Directions'; + +end \ No newline at end of file diff --git a/matlab/load_unzip_mcmc.m b/matlab/load_unzip_mcmc.m new file mode 100644 index 0000000..2bb4c3a --- /dev/null +++ b/matlab/load_unzip_mcmc.m @@ -0,0 +1,11 @@ +function [mcmc_matrix, labels] = load_unzip_mcmc_state(filename) + + triples_matrix = load_triples(filename)'; + + labels = cell(3,1); + + labels{1} = 'Dim 0'; + labels{2} = 'Dim 1'; + labels{3} = 'Dim 2'; + +end \ No newline at end of file diff --git a/matlab/load_unzip_mcmc_state.m b/matlab/load_unzip_mcmc_state.m new file mode 100644 index 0000000..bb24c22 --- /dev/null +++ b/matlab/load_unzip_mcmc_state.m @@ -0,0 +1,13 @@ +function [mcmc_state_matrix, labels] = load_unzip_mcmc_state(filename) + + mcmc_state_matrix = load(filename)'; + + num_elems = size(mcmc_state_matrix,1); + + labels = cell(num_elems,1); + + for state_i = 1:num_elems + labels{state_i} = ['Elem ' num2str(state_i)]; + end + +end \ No newline at end of file diff --git a/matlab/load_unzip_strand_sections.m b/matlab/load_unzip_strand_sections.m new file mode 100644 index 0000000..2aed62c --- /dev/null +++ b/matlab/load_unzip_strand_sections.m @@ -0,0 +1,6 @@ +function [section_matrix, labels] = load_unzip_strand_sections(filename) + + [sections, prop_keys, prop_values] = load_strand_sections(filename); + [section_matrix, labels] = unzip_strand_sections(sections, prop_keys, prop_values); + +end \ No newline at end of file diff --git a/matlab/load_unzip_strand_sets.m b/matlab/load_unzip_strand_sets.m new file mode 100644 index 0000000..0254713 --- /dev/null +++ b/matlab/load_unzip_strand_sets.m @@ -0,0 +1,6 @@ +function [strand_sets_matrix, labels] = load_unzip_strand_sets(filename) + + [strand_sets, ~, set_prop_keys, set_prop_values, elem_prop_keys, elem_prop_values] = load_strand_sets(filename); + [strand_sets_matrix, labels] = unzip_strand_sets(strand_sets, set_prop_keys, set_prop_values, elem_prop_keys, elem_prop_values); + +end \ No newline at end of file diff --git a/matlab/load_unzip_strands.m b/matlab/load_unzip_strands.m new file mode 100644 index 0000000..38ecead --- /dev/null +++ b/matlab/load_unzip_strands.m @@ -0,0 +1,6 @@ +function [strand_matrix, labels] = load_unzip_strands(filename) + + [strands, props, prop_keys, prop_values] = load_strands(filename); + [strand_matrix, labels] = unzip_strands(strands, prop_keys, prop_values); + +end \ No newline at end of file diff --git a/matlab/load_unzip_tensor.m b/matlab/load_unzip_tensor.m new file mode 100644 index 0000000..3344eb0 --- /dev/null +++ b/matlab/load_unzip_tensor.m @@ -0,0 +1,7 @@ +function [tensor_matrix, labels] = load_unzip_tensor(filename) + + [tensor_array, row_labels] = load_tensor(filename); + + [tensor_matrix, labels] = unzip_tensor(tensor_array, row_labels); + +end \ No newline at end of file diff --git a/matlab/load_unzip_tract_sections.m b/matlab/load_unzip_tract_sections.m new file mode 100644 index 0000000..251ecd0 --- /dev/null +++ b/matlab/load_unzip_tract_sections.m @@ -0,0 +1,6 @@ +function [section_matrix, labels] = load_unzip_tract_sections(filename) + + [sections, prop_keys, prop_values] = load_tract_sections(filename); + [section_matrix, labels] = unzip_tract_sections(sections, prop_keys, prop_values); + +end \ No newline at end of file diff --git a/matlab/load_unzip_tract_sets.m b/matlab/load_unzip_tract_sets.m new file mode 100644 index 0000000..9ab0fd2 --- /dev/null +++ b/matlab/load_unzip_tract_sets.m @@ -0,0 +1,6 @@ +function [tract_sets_matrix, labels] = load_unzip_tract_sets(filename) + + [tract_sets, ~, set_prop_keys, set_prop_values, elem_prop_keys, elem_prop_values] = load_tract_sets(filename); + [tract_sets_matrix, labels] = unzip_tract_sets(tract_sets, set_prop_keys, set_prop_values, elem_prop_keys, elem_prop_values); + +end \ No newline at end of file diff --git a/matlab/load_unzip_tracts.m b/matlab/load_unzip_tracts.m new file mode 100644 index 0000000..382f8c7 --- /dev/null +++ b/matlab/load_unzip_tracts.m @@ -0,0 +1,6 @@ +function [tract_matrix, labels] = load_unzip_tracts(filename) + + [tracts, props, prop_keys, prop_values] = load_tracts(filename); + [tract_matrix, labels] = unzip_tracts(tracts, prop_keys, prop_values); + +end \ No newline at end of file diff --git a/matlab/load_unzip_triples.m b/matlab/load_unzip_triples.m new file mode 100644 index 0000000..890a5b3 --- /dev/null +++ b/matlab/load_unzip_triples.m @@ -0,0 +1,11 @@ +function [triples_matrix, labels] = load_unzip_triples(filename) + + triples_matrix = load_triples(filename)'; + + labels = cell(3,1); + + labels{1} = 'Dim 0'; + labels{2} = 'Dim 1'; + labels{3} = 'Dim 2'; + +end \ No newline at end of file diff --git a/matlab/nfg_strands_format.m b/matlab/nfg_strands_format.m new file mode 100644 index 0000000..538de40 --- /dev/null +++ b/matlab/nfg_strands_format.m @@ -0,0 +1,68 @@ +function nfg_strands = nfg_strands_format(strands, prop_keys, prop_values, filename, varargin) + + if (nargin > 6) + error(['Incorrect number of arguments ' nargin ' expecting no more than 4']); + end + + if (nargin >= 5) + num_points = varargin{1}; + else + num_points = 100; + end + + if (nargin == 6) + strand_radius = varargin{2}; + else + strand_radius = []; + end + + already_track = strcmp(file_extension(filename),'tck'); + + strand_radius_key_i = strmatch('track_radius', prop_keys, 'exact'); + bundle_index_key_i = strmatch('bundle_index', prop_keys, 'exact'); + + + num_strands = size(strands,1); + + nfg_strands = cell(num_strands, 4); + + strand_indices = [1:num_strands]'; + + if ~isempty(strand_radius) + + strand_radii = ones(num_strands,1) * strand_radius; + + else + + if isempty(strand_radius_key_i) + error(['No strand radii loaded from extended properties, so strand radius must be provided']); + end + for strand_i = 1:num_strands + strand_radii(strand_i) = str2num(prop_values{strand_i,strand_radius_key_i}); + end + end + + if ~isempty(bundle_index_key_i) + for strand_i = 1:num_strands + bundle_indices(strand_i) = str2num(prop_values{strand_i,bundle_index_key_i}); + end + else + bundle_indices = strand_indices; + end + + + for strand_i = 1:num_strands + + if ~already_track + nfg_strands{strand_i,1} = fourier2tck(strands{strand_i}); + else + nfg_strands{strand_i,1} = strands{strand_i}; + end + nfg_strands{strand_i,2} = strand_indices(strand_i); + nfg_strands{strand_i,3} = strand_radii(strand_i); + nfg_strands{strand_i,4} = bundle_indices(strand_i); + end + + nfg_strands{end+1,1} = strrep(filename, '_', ' '); + +end \ No newline at end of file diff --git a/matlab/old/bacth_curve_prior_est.m b/matlab/old/bacth_curve_prior_est.m new file mode 100644 index 0000000..1548666 --- /dev/null +++ b/matlab/old/bacth_curve_prior_est.m @@ -0,0 +1,41 @@ +function batch_curve_prior_est(dirname) +% function batch_curve_prior_est(collection_name) +% +% Estimates the prior distribution of Fourier coefficients for a given phantom +% collection +% +% +% dirname - directory name of the strand collection + + + collection_names = dir(dirname); + + stats = []; + + if (size(collection_names,1) < 1) + error(['Did not read any collection names from ' dirname]); + else + + for (coll_i =1:size(collection_names,1)) + + collection_name = collection_names(coll_i).name; + + if (collection_name(1,1) ~= '.') + + collection_dir = [dirname '/' collection_name]; + + if (isdir(collection_dir)) + + prior_estimation(collection_dir); + + + end + end + + + end + + end + + +end \ No newline at end of file diff --git a/matlab/old/batch_curve_prior_est.m b/matlab/old/batch_curve_prior_est.m new file mode 100644 index 0000000..df66103 --- /dev/null +++ b/matlab/old/batch_curve_prior_est.m @@ -0,0 +1,41 @@ +function batch_curve_prior_est(dirname) +% function batch_curve_prior_est(dirname) +% +% Estimates the prior distribution of Fourier coefficients for a given phantom +% collection +% +% +% dirname - directory name of the strand collection + + + collection_names = dir(dirname); + + stats = []; + + if (size(collection_names,1) < 1) + error(['Did not read any collection names from ' dirname]); + else + + for (coll_i =1:size(collection_names,1)) + + collection_name = collection_names(coll_i).name; + + if (collection_name(1,1) ~= '.') + + collection_dir = [dirname '/' collection_name]; + + if (isdir(collection_dir)) + + load_fourier_coeff(collection_dir); + + + end + end + + + end + + end + + +end \ No newline at end of file diff --git a/matlab/old/batch_fourier_est.m b/matlab/old/batch_fourier_est.m new file mode 100644 index 0000000..ee2848d --- /dev/null +++ b/matlab/old/batch_fourier_est.m @@ -0,0 +1,42 @@ +function batch_fourier_est(dirname,degree) +% function batch_fourier_est(dirname) +% +% Estimates the prior distribution of Fourier coefficients for a given phantom +% collection +% +% +% dirname - name of directory that holds the strand collections +% degree - Degree of the Fourier descriptors + + + collection_names = dir(dirname); + + stats = []; + + if (size(collection_names,1) < 1) + error(['Did not read any collection names from ' dirname]); + else + + for (coll_i =1:size(collection_names,1)) + + collection_name = collection_names(coll_i).name; + + if (collection_name(1,1) ~= '.') + + collection_dir = [dirname '/' collection_name]; + + if (isdir(collection_dir)) + + load_fourier_coeff(collection_dir,degree); + + + end + end + + + end + + end + + +end \ No newline at end of file diff --git a/matlab/old/f_descript_orig.m b/matlab/old/f_descript_orig.m new file mode 100644 index 0000000..aaae118 --- /dev/null +++ b/matlab/old/f_descript_orig.m @@ -0,0 +1,24 @@ +function samples = f_descript_orig(num_samples, coeff) + +if (size(coeff,2) ~= 3) + error(['The second dimension of the coefficient matrix must be 3, it was ' num2str(size(coeff,2))]); +end + + +k = [1:num_samples]'./num_samples; + +psi = ones(num_samples,1); + +for (degree = [1:(size(coeff,1)-1)]) + + psi = [psi; sqrt(2) * cos (pi * degree *k)]; + +end + + +samples = psi * coeff; + +plot3(samples(:,1), samples(:,2), samples(:,3), 'bx'); + +cameratoolbar('Show'); +cameratoolbar('SetMode','orbit'); diff --git a/matlab/old/fernando_partial_track.m b/matlab/old/fernando_partial_track.m new file mode 100644 index 0000000..16e7b4c --- /dev/null +++ b/matlab/old/fernando_partial_track.m @@ -0,0 +1,82 @@ +% partial_track.m +% Old file: smooth_tracks.m +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% This program reads the TCK file generated with MRTRIX and generates a file with smoothed +% versions of the tracks. +% The smoothing method used is MOVING and the SPAN window must be chosen. +% Modified to read a TCK and generate a new TCK file with part of the tracks +% contained (FC-31/10/08) +% Select: input and output files, Ntracks. +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +clear +%%%%%%%%%%%%%%%%% +% Parameters to select +%%%%%%%%%%%%%%%%% +% Ntracks = 10000; % Number of trakcs to be selected from the the TCK input +Ntracks = input('Number of tracks?= '); +%%%%%%%%%%%%%%%%% + +% Select TCK file to be smoothed +[fname,pname] = uigetfile('*.tck','Select TCK file'); +fidtck = fopen([pname fname],'r'); +% fidtck = fopen('/home/fercala/DWI150/150lisa/curvature/20K/wholebrain3.tck','r'); + +% Select OUTPUT file name for the smoothed TCK file +[fname2,pname2] = uiputfile('*.tck','Select OUTPUT file'); +fidout = fopen([pname2 fname2],'w'); +% fidout = fopen('/home/fercala/DWI150/150lisa/curvature/20K/wholebrain3sm.tck','w'); + +% Find file offset +temp ='abcd'; +i=1; +while 1 + temp = fgetl(fidtck); + if strcmp(temp(1:4),'file'); break; end; + i=i+1; +end; +[temp1 offset] = strtok(temp); +[temp1 offset] = strtok(offset); +offset = str2double(offset); + +% Copy header to output file +status1 = fseek(fidtck,0,-1); % rewind file +headerinfo = fread(fidtck,offset); % header info +fwrite(fidout,headerinfo); + +% Find coordinates of tracks (one at a time) +status = fseek(fidtck,offset,-1); + +ptemp = zeros(3,1); +% k = 1; + +% while (~isinf(sum(ptemp))) %repeat until Inf is found (i.e. EOF) +for k=1:Ntracks; + clear p + i=1; + while 1; + ptemp = fread(fidtck,3,'float32','ieee-le'); + if isinf(sum(ptemp)); + fwrite(fidout,ptemp,'float32','ieee-le'); % end file with Inf + fclose(fidout); + break; + elseif ~isfinite(sum(ptemp)); break; + end; + p(i,:) = ptemp; + i = i+1; + end; + if isinf(sum(ptemp)); break; end; +% figure(10), plot3(squeeze(p(:,1)),squeeze(p(:,2)),squeeze(p(:,3)),'-k'), grid on, hold on + fwrite(fidout,p','float32','ieee-le'); + fwrite(fidout,ptemp,'float32','ieee-le'); % add NaN at end of track + +% k=k+1; + disp(k); + +end; % end of TRACKS loop + +fclose('all') + + + + diff --git a/matlab/old/fourier_angles_and_lengths.m b/matlab/old/fourier_angles_and_lengths.m new file mode 100644 index 0000000..dd4f49f --- /dev/null +++ b/matlab/old/fourier_angles_and_lengths.m @@ -0,0 +1,21 @@ +filename = '../chunked_fourier_d4/090403192509-9-8-11.tck' + +strands = load_mrtrix_strands(filename); + +for (strand_i = 1:size(strands,1)) + strand = strands{strand_i,1}; + + f0 = strand(1,:)'; + f1 = strand(2,:)'; + f2 = strand(3,:)'; +% f3 = strand(4,:)'; + +% length_f0 = norm(f0) + length_f1 = norm(f1); + length_f2 = norm(f2); + + ang = 180/pi * acos(dot(f1,f2) / (length_f1 * length_f2)) - 90; + + disp(['f1 length = ' num2str(length_f1) ', f2_length = ' num2str(length_f2) ', f2/f1_length = ' num2str(length_f2/length_f1) ', f1/f2 angle = ' num2str(ang) ]); + +end \ No newline at end of file diff --git a/matlab/old/fourier_prior.m b/matlab/old/fourier_prior.m new file mode 100644 index 0000000..42dedff --- /dev/null +++ b/matlab/old/fourier_prior.m @@ -0,0 +1,32 @@ +function fourier_prior(collection_name,degree) +% function fourier_prior(dirname) +% +% Estimates the prior distribution of Fourier coefficients for a given phantom +% collection +% +% +% collection_name - name of directory that holds the strand collections +% degree - Degree of the Fourier descriptors + + + [coeffs, residuals, num_control_points]= load_fourier_coeff(collection_name, degree); + + num_strands = size(coeffs,3); + + flat_coeffs = reshape(coeffs, degree, (3 * num_strands)); + +% for (degree_i = 1:degree) +% +% figure(degree_i); +% +% hist(flat_coeffs(degree_i,:)') +% title(['Coeff ' num2str(degree_i)]); +% +% end + + figure(degree+1); + hist(residuals); + + + +end \ No newline at end of file diff --git a/matlab/old/fr_descript.m b/matlab/old/fr_descript.m new file mode 100644 index 0000000..eaae121 --- /dev/null +++ b/matlab/old/fr_descript.m @@ -0,0 +1,49 @@ +function samples = fr_descript(num_samples, coeff, varargin) +% samples = fr_descript(num_samples, coeff, [plot_type]) +% +% Args: +% +% samples - the samples, which are plotted +% num_samples - number of samples +% plot_type (optional - passed directly to plot3 (e.g. 'x' plots +% crosses instead of a line) + +if (nargin == 3) + plot_type = varargin{1}; +else + plot_type = '-'; +end + +if (size(coeff,2) ~= 3) + error('The second dimension of the coefficient matrix must be 3'); +end + +degree = size(coeff,1); + +k = [0:1:(num_samples-1)]'./(num_samples-1); + + +theta = 2 * pi * cos(k * pi) ; +phi = pi * cos(2 * k * pi); + +samples = zeros(num_samples,3); + +for (i=2:num_samples) + + samples(i,1) = (cos(theta(i)) + samples(i-1,1)); + samples(i,2) = (sin(theta(i)) + samples(i-1,2)); + samples(i,3) = (sin(phi(i)) + samples(i-1,3)); +end + + + +%figure; +plot3(samples(:,1), samples(:,2), samples(:,3), plot_type); + +cameratoolbar('Show'); +cameratoolbar('SetMode','orbit'); + +coeff +% xlim(plot_limits(1,:)); +% ylim(plot_limits(2,:)); +% zlim(plot_limits(3,:)); \ No newline at end of file diff --git a/matlab/old/mex_load_mrtrix_strands.cpp b/matlab/old/mex_load_mrtrix_strands.cpp new file mode 100644 index 0000000..10e0d49 --- /dev/null +++ b/matlab/old/mex_load_mrtrix_strands.cpp @@ -0,0 +1,116 @@ +/* + * A mex wrapper for the mrtrix load tracks function. + + Can be compiled with the following line: + + mex load_mrtrix_strands.cpp -I/data/home/tclose/Code/Tractography/mrtrix_bundle/src/mrtrix/lib -I/data/home/tclose/Code/Tractography/mrtrix_bundle/include -I/data/home/tclose/Code/Tractography/mrtrix_bundle/src/mrtrix/src -I/data/home/tclose/Code/Tractography/tractography/src -DMACOSX -DBYTE_ORDER_IS_BIG_ENDIAN -DDEBUG_EXTENSIONS + + */ + +#include +#include +#include "mex.h" +#include "app.h" +#include "math/matrix.h" +#include "math/least_squares.h" +#include "point.h" +#include "file/path.h" +#include "progressbar.h" +#include "shared.h" + + + +extern void _main(); + + +static int count_mrtrix_strands(char *filename) { + MR::DWI::Tractography::Properties properties; + std::vector tck; + + MR::DWI::Tractography::Reader reader; + + reader.open(filename, properties); + + int count = 0; + + while (reader.next(tck)) { + + if (tck.size()) { + count++; + + } + + } + + reader.close (); + + return count; +} + + +void mexFunction( + int nlhs, + mxArray *lhs[], + int nrhs, + const mxArray *prhs[] + ) +{ + double *vin1, *vin2; + + /* Check for proper number of arguments */ + + if (nrhs != 1) { + mexErrMsgTxt("MEXCPP requires one input argument (filename)."); + } + + char filename[500]; + + if (mxGetString(prhs[0], filename, 499)) { + mexErrMsgTxt("Input argument was not valid string."); + } + + int strand_count = count_mrtrix_strands(filename); + + lhs[0] = mxCreateCellMatrix(strand_count, 1); + + MR::DWI::Tractography::Properties properties; + std::vector tck; + + MR::DWI::Tractography::Reader reader; + + reader.open(filename, properties); + + int count = 0; + + while (reader.next(tck)) { + + if (tck.size()) { + + mxArray *tck_mxArray = mxCreateDoubleMatrix(3,(tck.size()), mxREAL); + + double *tck_matrix = mxGetPr(tck_mxArray); + + + for (size_t point_i = 0; point_i < tck.size(); point_i++) { + tck_matrix[point_i*3 + X] = tck[point_i][X]; + tck_matrix[point_i*3 + Y] = tck[point_i][Y]; + tck_matrix[point_i*3 + Z] = tck[point_i][Z]; + } + + mxSetCell(lhs[0], count, tck_mxArray); + + count++; + + } + + } + + reader.close (); + + + + + + + return; +} diff --git a/matlab/old/mex_oad_mrtrix_strands.mexmac b/matlab/old/mex_oad_mrtrix_strands.mexmac new file mode 100755 index 0000000000000000000000000000000000000000..7244baa9891325c03aca51d224738679fb15f60d GIT binary patch literal 20128 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 Y`+A0__ZvQ~claqTeZYia>U8050DhCtF8}}l literal 0 HcmV?d00001 diff --git a/matlab/old/p2_scheme.mat b/matlab/old/p2_scheme.mat new file mode 100644 index 0000000000000000000000000000000000000000..d5e0e95eae2a71f7f9fe65358272f6245b10ac45 GIT binary patch literal 3119134 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

q~hj)Xm>A2-ny&c64bvbgY`n2scPJ!z z3HO5?KS1)z$ssWQC?wA{&drPvakH!4yd!Ty^5|T-G8YBO1KYB)+FnR92Ra{JeF2iY zg%LfbHjvyoVm)|8BqX;?uZQRmkR-O9nl$?#BncS3dACickIXC}qgXF}+{5P&ikR03j(<%26Bq8H3PaRnT z$>C35yOw)EawsDE#!yke?}CZazIsT!TXo_iV{4o5FA0(dZKL_k=f@J5QNb~x9 zNZemm#!nRMUH7HB@f#p*{nz)Mwa(gWpLg&5Jo`EC zyUu&Sw@fXn`h6LEf}Pg3OcMC!lluLt$HCv6Q-9d35d4kKLn%+|z&D!CcVc`4UqAnw zwb2mx>s;SEQk=lonNeL^*$)2de5rz#81Pp*UrQ_w1%LTe{L_I%@Kv)`ylo2vU)gs1 z?FZW6FB%#iB&-8}!9(4Yr;EUsvlu;m;RyILJgfOzBEXl7(>$=<4tz2F+bb$pfG^Z} zRkH8cT-PM}%pW{j^YdVpNbq`3D0v1v1+Pn1Dr%=Yc;v#X zC426H*J=}8)GMgp$d@yojR3Fis=5Nv0=(+wuSI@t29NZvt4-4iyh@KtrmfN7y&ZWf zx^4q_6}R?`*u{fargf)Q^elMABTpobp$Lm$NcV zvZ4#TjJK^OcSzu+x)wZo{S~~20}`W=f_{?2zlllagO{Y}oPhn{-F~`hCr1UmII~>& zuqWVMZ%ewd=OcL64vSpKdkiQ16Z4=*~ zb-Vy?Yoy1mAwj=pQiSlmO5km}^VB$@4m@M!xKo`E!86GG_QQk>o}O0C!Dw^v*1T92 zzegNAEu*1T@;>0Ld}GdU-2tAug?L495xj6wWxlpG5mv zJ36=%P8Y6qlffNnIk%MkG74s4qUTQLYOxAMa=ZWg#K(?448 z%)q6W6&)2h4Q`(vrN6HM+^(m=mTGR`QdV5C4LA&L>tpd;l}+F_Da=V)KLfWe_JmHu zIJi}Fj_)^{gG)M>b^7ZGa6b$lnfpov_pNW1vXlU~yvyMPr5W5(yJP<)%7Xjy!_<9( zz%SCDYJM63?$ewADT`ci^A_3v+3X2!R!q8Uyr8eN$patzoxpv3Bx(F18{GTd8?w8< zgL~I%$N4jD;3kw+uM|=PH(sOEy;c$28;Nr7>i2+qZKhBBlYrlqV+!0=7r_nhs1ROy z72FG3>*q%c`af4_T|T`8+>nKaPwPK|donyWaa;@B<9r8Ilk?ynbqbr9Spe?g@&(Pu zR)g!iY_a_=fe!nxUQ>103GSY+`@Y|b19!Jm+F_a3;O;E7(GN@j*I8-bw4@cd_7{3i zeBBMMHT{EOqd;d%NR2Mb0T)@79<%D;nhWZdm5&;uj0CzapIBrI2mJAl7wn_(r+s%KeZcvrthV_6 zRdA+H5)wZpfHPTDot@bN&X{t+&$A`q44wG7cwHbkgQPp}_U#Af>%w~xrlsKU{3nE; zj)TK`{ffW-GB^w=O8svsaQgN-J9gQF(^aUgVCD%9`S<=(OGj{8t$&dVUxCw@%$V1@ z9GqH?ws2`aI92PLoo0N&Azo}w`1uQ*_qEywPtAezMuC1vwg#M6`v%wX&w}$`p1XH- zCpgc4F1jP12~MHOdY?vhaPq^m{2s)ElU;S(?A0A`GNj`pgu1~=aS^Q^KLE~ydz8XF zd2sIbOjVO~z)4gMd3mo0oOqw@bE03txsi3uDUk`zH8#i4I8BAU49QU1pOaUsF6^} z0LRDS9CgulaQ4NVe`4STj>pH^*@(yBxJ?~7`OFd=7yVtghXgzvj@%hkeE^P4x~fuK z5;&HW(JY-k;1HyiED1IP$J{(t_UI{aOix+KJh={zajsLYvmno)EBmnA0&w&s(X)IP zIBQIGZdrZ=XZ0~Jx#p+fXguuxeuoZ@T5amHVF7QI@d9d>pnoNee_}5hz)^HgDLw5C zj@-qFptN*wWbzA$hBv{HXjjp%r~^mjPn*rgDX`~OHr~cJuxA`(V%g(hPlY6qimkyO zd+hP~mN-E_r9|-0Tnbi;jrR5gf1!2ZuweCBS|nnijL_GuSyx zqv$CDoD74^--!#sPO+MFqY8LD*ca{hIUVe~C+(ih(dZ6#M2*w(W=pUycDmUusRR2wCyr$~40g!S_Dl* zufMzp`{+WyX#bmFA6C0RlerV@16orFSH{5h(vN-NnF_Y&CfmBUPO#m#ZgLzC0o!GV zdy!ra*ba8-t`O*MS+Xq`kQu+2O!udWs7u*owkdR!Xp4W2)X zhkk*r@98K1wH|C;57GI)g8k5TZ&c9x3bv-}o5=Gdu+<$~K9vb{R<)Hjf9?hLlI_QL zhuVU@&}{frm=oCY#wjBQ1UksB3oz4Z0b5dY-+wA@V2i4pEFnGvYfdgNYg84i8Ic)A z%XzRSC(qQCO@TG~O}5fe1*~7xs%4QbV0~|Tygh6HtS|3x$LE!S#d((L{$dcU{zokn zm;1q@URQ3~QVLdgNaT8J4X`LaLZRkXV71z&{vBNpR-@5Qm9xcQ)vBtmkW>Kcv#9t{ zjRLSLzl&O)dIHwlc4a9_7FgxwmNK5!V3j<+mabtlClZSy9uZk^XqX*L8acIU$N zwtTRnbr-J8cmUQFu@zgX!(d&aZ*J5{04ucYfJ{pSSZ8h~TCYh3E7+%jR4%{|+%UiL zUj;_wS#Dg8-H$=V8*;+v`R zEx*B%3w6-bTnmYX{B$0eABp3y60U<;p?T0WcPE%Hq6<7& z@nGh0>m8Cy!Av6%UH_W^^ImFvdNmo$xN+U1eCwmNQMLusS#zO+KLbpwY==X>;$qu$czf*Mb+GG0Y-*F@S(IP=Tvl~Ck zvv#82D28J{6NmmaQC`bBMbN+E;;tVF0{%-*wS;Z$L%*Eg=Zm=lp5h*cMQRJcn6*-_ ze4+=&nBloYtzBSzSGBS!`v3-8NyI}MTn4EbZ4MuCjPSJ-yz^Ezc_Pa00`w&xQ zq`3`@GT+5w3q!$pwyEJ{Vi_3O^ZG>=ih=Qv>FRK>3XFtewT`H2Fk-@YsF%(MBix!) za##e6Gjd51dgEXObd)}99s|So!AiQ~4KO@+Gk35>!EjdO6ILpKv7^Ok(?<<3%%ZE3 z?nQuMwE01CPz)G4g9X24C}60kOcmD8fT3h_#l)}}jCq1H*UJZ`a>!3F(I!1sQG zjiA4r+LH9y2lV`?oX@3lpr=W%xOIOI=yz|INZ2g|{igiRZTxo7BX9q6ESCZOymYy~ zmM-Wgu7>=mS_=B1-^S6a4M5*}eDc?~XwY4#uQl?IgKljTB1`QB-MnPg!yitdZ&=b) zq%aKnnoEAGZLff?PW#Swrhu-rdH<_Kfj{qFMX*XR=px_8X-Q3>{lOxl_Bqgo?kM)f zyaJ8S806J01C6eecK?_=Xp~bLDO;RCtA7=mw(BEkA16{F9vTxd$pr0GoMhk5F3^s=XcA7b z1Z{t-DLc#tG`B&g-tR`B*@;VR3;72cRDDj$=z(Uk-mOUXBxt%8%&n^hI2!gsN9^x` zw#2Q}D_sb*`JN*#zT%*X?tL4`_XYLO9*NFNv7ipQb>(|CfXcVm7<;4-D$Qb`MT!h6 zdA+9T=53(XEp0d6{TkFt(eH1UWPn=w?PNu12&e^3dlnO$LCq-4d951a^s!@6W%W zZtu*kHM1}cZcLvn;mWB(y{svWZyz=kkMWCwWoOvC#6jXUfr{~(zpo)#!z@Y_w z)5%^#%US6)Y-&B*Qk{B!8Du;2dZOD6h^GD<65=Fq48tC#96 zsH?W6_>7VOSMjRBzaJFzN!ECNd-NW?f5n#HohnD~=+;Q*uMX%PID6J#D+;~z{ND?- zHPB1$5Q`ceKyU5LJ*u!QdOxUV=_~v|ZwWNxL@%KC$-X6DUWuSL^;GDFb_Mj_xoYNC ztdHK9M4u&VuA%qh!#eyrVx-o5viI|d}9*E#MzC1XE&EiWat ze-PlB9)0{eU>Lo6&dpy>xS)5X;i`%Yg8U_NDgF}1=#?GN)=}PrUZHo@s}^*jXX57Z zpeysy^WA-+)W9fum`f_YC(WX#qsMu2w*z|WlRD-O-b7EO&DMIU?dU0)iWQDIjGiYs z1rD`N=t;GGWMYtyp2TmiTaF6iqND3;6*i#f!qRDj`>E&&Dxwp=m!s#x_QyJ@e})pP&QO?*(v(^`b? zvevz;b$!uYAf%)dRDtd^-NCnbgzh^#+vBAS(H(vIz3C5qbce;~Se+9?_leB#r5hE| z?fU|fr?Sz#>lNFwLJr-w6?+D6bfVk5Bu!}23Ec)yvH~q!(Y@-v*Q8HBx|J_iyM3@j z_q+pbi=MZkTgdG6E5!_SjVolw|7=Is0MotiM=!c)PcK)_7^AB#VA1B5L3CBEnr9H? zg070*eg2iA=z11279k9DWvpxZd$1T?NzJ`B$5){%=E%H^SY335{r1+p9)_+H*DAZj z^U&ohwK8Gk4Z7T8BBdw1(PceTOZ~nAU0aU-46$-VmmcMd>eXO$X>7=yjgv>$qT5Rs zFU~}lB-3oGf-yR0)=cY+#iR3Aklg`|a&)o_RkxY_ht5vMA&E0-=&YBKe^0AL=X-r6 z%MvO&UpgM$m0yg`?1SSMmNlX?Ik;F(aL??#aV~a;t~)v}o;j_$B?_HE0sH({Jw&Ik zr*W0>QFOYS59j9qoz_bu>|gIir|D2j<&QV$)cw%fBlaDg%cD+jULl6g1r~Wb8%NM7 zI^wxUDhM5uX%`%JHK60$*59MKb?Bh=R?|F3(a{>vw8wZII!GhaSFF3yQFfZ3*TO_c z{=m(@i>{*M(XJW?dkJ*Jy4^Q(&w zqQhFF`q`~D=rDDBlz@ft+`G_hjY}$oGBJ(cTpUO_?C?NlMKwf+D@FJbFATJ&DOmxiyS@u|xU9b<@XWG9f>WHEJhpvT? z)g`pkLl4G#C!oE#+#tY(i}nw^DCLYpXn!HTc2C9&w5Kl-S#>oW?YC7JFO5^setCY< zUTHzxiIL$~mNjVKU)y@_U_06!<7Y#*m7?8zn?tI!!0LX9AESRoyXvJ|2_6DmSs~S{ zbtlm_{#BN8nu)fKm->0TBhgmsW*VUui?%x*?~G@H(H3lE?YnI)+MI$;*gh^rn{M=* z?hJvI4z0NI`4L(NtbUr_^gwI%FOH|gI<)45D90xIpf$2h{&m$0w0ev0m7+4tI~|ih86*zCV{qjYUXvLbZHm4H$-F_M zx_9z74+}I*k`px!pG8BfMEPb~6dLkoXuHC_(Qv7_c`aE44Q?8?xoSVrpyMKWKusU@ z|2DnavG5q`JNkxZYHd(oXzUWyoQ3)bD=&k*N2qs~O&A%=N4<8;o~~`DP&ZSeTz~R1 z>e_Crw=BJay4)qj8LepumqUlX-Ie@Pz7(LgP+x~z_@ zh1w*GiQ)rBO+!XYPApO4MYOOHnN_VxvR9BEX`-6LeX zGEvpnsy24%KUC#~A6Vi&gsPK|BW@ObLY3)?*Wo|IQ6)TIi2orKpBwf{iN%uf`Oe(h z{pw}-?D;2H_*Nc1FW(lqz9kQzxb5lx4CU~tATv|HW(7W-ctY=-ox&&me%&`d5+IG5 zx4O6hq_VgE(|r*joweh*zBU7C1NWq|j17pq@iOhOU=V%9L@mBV;bU*#5$Ty)e01?t ze6wIbDy#P2`MWU%mBzIP6h3$3LvGNGFV4^KL0(%+>n{!OL#x`(Y`cqh3^|Ve;v&4; z+Vb*Hfh^vpeGF#*T8=l959gJP@4y>J(d(+qZ{l@Yo|xY&CMv$lcrk8dqe8EOF8)jh zobtNhdHMN8^X)-^MkD6$Que@p8mw;V#L>fSbQeiKUc4j+`3_rQOKZ4Z6v zH}KM7xWdfs7@p5NTflc*hQgE*7tW*to_x9cdYf?>a=WBtkL+E6EJJ&m(ZUiu_+rfQ z|9M^L{|`AKp=kqwl@Ls+|F!=!#Q(3aP7qk(|DFFcqy_Q+FB!AV&F%O6$poqU7VQTv z$dH76mSx9z_z=f;YqXo0R1z7@-r`ZB;~-zmEKV%ZlgV&td27tbelv;m8HP z5iCoB#Qab{y|T+B$$pmr(~~5UX!+6ZyMejHxf4N^*28?_)SLZx^LyqKhizp2zwSCm zhzWbiqGU3k@6h zD1wMu@6!{TJ`u#_14d_xZxbX(TF$;wxl59aP@vV5Y)N9T&s*FvA&`XsW&~~B?MeKX zS$WMwTaNh0%cS#SnFw)w-Sw2ZoJ!)a)y~ly2Hz8TD%M?v54RILj~w37K4L<=wXbr; zmDvPPytI>E|CI%&Xybiu#YX&)BJVcItHWq+`z%?a3RA`bTMn+@hM9`WO<}2p1fj(R z8^-5W5=87=Z2aUz31a6H^rm`-2omY3v-As-1gVeDYxmnPCP^L_>-^>WoFu+$f7{E{ zFp}tw)z^~pmXm}x8`EaYLx}&5)VvJ7_kuX>uUMnmKTVtrk_s7dZ6S_E9873h-$(pu z_{Lz&kV@o-g~+B)JtNYxhF$KC^NIER{mcO)9prV5-XvF7f*iXhGUT)iSi0+fZ+c6` zz%_Xdd*dejYE~@NG@Qnms9hmZGZ&MO&s41c7LRG2|7M<6mEdp5njlgPmmu^ws%mqk z2SLQsXx;N`RD#%o*A$A!VS;#r=2*lH7D4jz4Wpcz>m=#L;u7R236kWIYiwH9c9Qrz zhJ@T;0!d6!c*Lo#fFu&gONpJ-CJEJto^WWnO#J7vFVZmYCviq`^yLZ@262j(@v35V z5OKWFI=3X|Epg;hht<522I7w=`*k9@9O4(Bt3kc3jYO9EuR+SJD6yk+nEEbx7qN2a z^-fcNMU?6B)_h-j5@g{-|E-dnz|hKQXv}T_FFo|o*1&#z&pdRY{h=|29Uog?_^FFA zt7wP64R0~I<*K*C>dpA0o2$;_8DLgM8jjX9BG;FlJ zx2KfIz8Y(^RxOU$do}BpMwCCXdGW+Pp)~=-=R;q=@lWL9{Q_R(%+@H7m&G2qbVqRC zKJMz4;vx-B_iynpQ(+hws}c?sI*6aLkLHzxlw(AG`#`+?8;m`0+7%M0gUO|%`@&~@ z@jKm=?(kyCe6Ao!`WKunn_o?kO3kw_8SNoSojIIm=QTl+M5JNz?zbd~ zc{z@Da>*nyYU6h5R2)gPa6H&E{SZmy;_^)z#(pGW2P>JPjXy|2YDfGxi&hfKYCH`Q{)RNoT+Y*?vcx%C}!k||}Qf6atAeyiz*jhzZ{)cmLoFZeNWi1u<}?n@4F zaQix9UE^`$m*?9U+8t|&92H)V`SW-pO=;=*gmgb5dCosr|Ecl+0RRC1{|uM+Lk(OU z#_zs2EtNu&R|AzcF#r6@&vp`j%dkunNp6_O@t8EJ}=2Imx|B`s-c@4avL-fr*x z>H7zq=kqzwgNizKyPwr52bSiRdw)5t1;wgd?Ly-sP$x0^yTO+awDM>EQoFbhba6)B zF3g?){TK7(2QB2laF^~6w~gDtgyE|)Nqbc=)n=dGy`c@v3U}$wX?cNpjq3EbeHwu2 zwcQ}suL`gd$Pe$GxdS-W#`z}Q!hp+?+U$c~L&7r^hEdE9NPHV@5?H(qlJXA++ws*v z@~@qTtfE68rNdz+Lem6NCp&g@gq? z4%2D+#d$Kyn7T+#PTaQ@Q%2nuHwLpXx$~B}%N8R{`UBi$=67OZ#rw{)2X|ru{^}eZ zvH~ripK>eHQb0?#IaC#IKEyWozUFwg7g_{sH_>Jl(Za6mFWbQqnv)MZZJ(!sW+Xr6 z4p?}gDUp?@?p$y}<02=y->ZAjFo_k??S32eEeJQ?C%d7pu_rdYlU}H`YDi;Bx)IfX zzv7clkVijn_#MrD?uydqvTXk3$bk>j34@NDJ)rFDFZV*9B+wuq+KuD`HF z26S=P)ZQKL1bvgI)k1#ifuT-!6vbZw#;So)m%=|V**4+)*4_k6*S=$v?@|D>B}Y7S z)~*2axqoiAT`>gA_eQI2-5_8^=Tjxd`2pvFxYSoa8sJ`aP?*pkfCS|ei?7!zL*kYT zvFgEQkR;8plf6fUWHISA4kRk1(6inoJbwcz?Cka7i=))82|BV+ zEn&*S6KqTxX?bC@OA8a1qDL-MdNEPB=B##~2qwtfFn&V_MqGC=e77weah_e+V?gjk zto(bDCa!jf*%PGF^~f772)b`5PPIjI`*z>bxcCOmICL&Zd{~R7o?h5tcWx0)_!Ycc zv*95cX)>4lnxu#ZRWtUd<@loBh;L@cH-AK(%)5OKMv|x{my4>}`%wLDvp{Z7AS#Pr zqnmte5M|$W%M?uw1@R^l(yR~PK(SLIY5SgVP-EWEXkoU;?D$QKBIJ&;c77HFK$oKF9XwuN6Z5r6oFX^lbbiL z4(3Y11=qc)U?B*7E9V%4MIGPe*!QOZo9cCVxBYd%`Tq9#<)U?f8?ctxbJ+nBr2F*# zocRwDIRCa7%?U$d%hgvYdq|L!`*AxZOcRoyKQ?nL5Qh{`frxB|Go%`9JNJDGLE4rn zQ)9<0NT*m-F~lVxy~FWnAUXmW`Kt_UZDTPbGsNyZqYBgiJe$yJiNrMabff|^7Sm)> zJ0pxvW2)XaGwuNvrg$m@RYxDgm*|0knf@nKfpv$typek9472{ zEOT#6M%?nx;_{63XlcE{c%FzIVtYQ--dYra7E7;dG_P(!OeqoJI)QXF?`6>173qy; z%Xc;0E;U6n{}n2<4GN+upHabYKSR(&Qh>9{)G!(~^NQzO&__cnQdAXEPM|)#DRQ5u zI_kdCzqhn41^u)Ay?*ujB=ooDgkp@`Zd9v%BJ^Y08&q;FCTUJt5q)S``rbzt0f}d8 zb~uZ4gQAxdvOts*sE)q!r!4LR_*2d&?}p?-+u?Dc4qHXgWvhCtFhm;kM*eVI2)Pah zYGu}cFDV8ie8xgz8&beHJQ2C=i7l8cSjFGA<{Owcb@l$Y#T?8`D5{z(WP!Q+X3YE} z!(idRN$0&QZUN?(1;xU+lYnL9KD@N;7GMt?H}n*e1WPv(SXKlvuq@{ItklRG5=@S^ z>v2esDE*2r@2?&t4!)P3V~Io3M~`zE41P%V8_`(4BLFGdGGkZa0;CG9`YPHM3#pBm zdsv15X>psE2EC^s-C3VurzQm%J2ty|ZHk19d3??-gM=A@UB?1ec4PXtnoYDv986=9 zZZcnGV%jbrA-N_#Om*M+u;s}#ro2%~8+xmP$sMj+6STcBdF^0vb;=e@GD+D|FlK{^ zPtwgLb2latH(mo(^sc#ms)ker?0YDzw!Vm`L+M2$vZZvX_Ndq&sPo_ ze;1jO6a_(BQJ7!HZe`GAQ66BTe;M>1?`+jhT>}PmR(|NWTLFgmTlNh)3xcs7Uu~W` zuK<%Gv8*=Uoq9NO#O?NGFhl-HWodPR+3UL!dT2>tZdU2RuY<;5!97Ru)AABvc2`gK z2bu$x<+USxvAux(JNw02MLw{k9bn@6hz+>;9qsSMUqZs_!Q+#8%8*c}NGuFWg2doG z`y|zDAxUS&rWb#&LDKSj!kq>wNX`>smgN6}6ff<=w5D-LRnioC)pr(Bd-q^;E7DQ-`Hy6RZwns)}7(k8~uaT(9R`RO02L^txQ~;4CJuG~cY;u8K)kj(?cz z4`Jf#H{?y|F(yo`4%lhL^SfH1Ou4onTIQ4Yu9-ANOL3}dA-g{#&YqOL1rE;;t14i1 zt-K{#bjT0*@kJFau+60TN1V`n*var0>ow4v(#O!={X=NxhgadBvTJDCHViknm7~c8 z@gsj!O3=i{al$bdO`az_<#pL7(9ok#mg-X}sK4mb+=tpq)Wh^L-AK5Nx^|4!jgCJ< zZ8b+D3d2p%-@__<^)KEEe#4%%p54Su7dl-_CIQF)E5egUoLyqoxumJX^X!sPvPO+W+7*uCh+4$$Iv?#rn8A<)5=%6RFc1iA~eKygJH==0l< zVQsSq4DM@Dul{HThUdDjQ>@N{v5%?@iG5CBQgu{afi4H8o;#+*-YNjoQ+MOE?;C?z z!((S+jJaSgrBFSK*$WnE4VU1d9Kf^>KN+cc1uTADmQ6lz7qHigDp3@=0OwNmhqed5 zz*6;Y4rN6FSl*(2Vq*UjNPx>rEwR#&F!u2kW9L~&j8RX^^s(dRC+e8-zjKf@T^Xn8 zk_*YN8h)k<-hmYTPXl+TC6F@j`d_s4JftSfK7S%04`~KwjxC>$K^pV%$I?fGke(D9 z=lQ!0G7Rq=tr>`dj789tp8OCq;$<~DbBr;4?#r{2-7hfx=#}_E{nNZ0*&6uS#bD~f zIUliPM@%(%P3XKCfhn)aWologFq!ozBkp=TCL8a6o>yguNy%c?7A~WhxGdV^HK&b>6(ME#oi*R)A)s3*0!a-*d>>RNT$ zPxx#%YGZFw9;VNtzt!32Z*(=Fx+J$s)Vm5*Oh0W0xfKYqB;dvF#~AE@u#!DA0A@YxMw3$)?6P zYg>b9SC4}wXWPL{#$e%+Rt=b)l{V_xI{@a@gp}f>CBVXsFSn%gP6KA~`Wq60oq$C< zXts<*0b75~q4noX04F5F!ABq+EY&P8bn4ZEdj%v3RdEBDNsyG8veMf3CL|j<1w0M>4#|_tt{L9vAtm%`=N7svr0%Nbm)*z$AH0k@{m;z-Q_yA#ETnKd}sQ*3}1 zd_YJhy#&o4svmk#`W4Ml-?X|`JU}y5IqDaG>_XGeiS46|S~O+-DAvTt6HUsVFf#D= zL}QJqvBz9e(TKBBXJ*q$G{}@+C-BV|^*@Nb*hD$?I#*+IXXe-x)&+KONEUN$X>@$`znm=&!p zZK*H8B3s(@JT3ujC58XSH|qh873Z{6k|9`n7_}#QTOZ)&alUuTr-J1n#cfA#$wNZ$ zN_{?Gdq|YMD7a}IuTSM?Uz`grfh6Phpwm4^A!%^L4qi@#fL zqrf11U z6D>@2P}niED-~0Iu|D+;YGKO0ehtHtNlZ=}DSIZDfyu)B>au1RFv(Xd=(7RkV1TQc%8l9x?YN>m1l7h!#X{uCq(w<#RY_ed_KUH2WRz$UU?R z&BSiqt@2X@O<$=H9NYT`O&LYURUYJdQZc5g=A9rK=Zl$Cy)}$RzB%yyw9`XFmqOB5 zZ`f!+K{7t=U_R>Y;7c8yI)S>wts+RqnZ7II8Py zmT)1>qNnUrbO|&HXuDbLwgoNWQvafh3qZ&Ez5J5bM?hDd{x<(_fuL7B=H3U}pZTRF3ik zi`4@vXPq7c)>t#;egPYB1Y*sbpgmYp+O2cLau{&+Vuv0Yd3QTDJF0(H!7ZVIFTLs0}pyk`%dpCDwAg-HI_JcR# zXz7H&YQd)@#8H4}ElK4@c9kU(Hr*(MD4z9VaGaEz#t`J#MAG325BV z);^_(w>xDLYrz zo<#c7mV3+w>p>Q!S2v)j5EMzrM7Fw*gYvw4N!-_`K&`^dSsfGs{&+W&a)jnVbCJ(6 z_KrdDPry&+;l6IrrF3yf@9%lgV`OGV=|2woE{}14_kITh(fd~Pt>gnkUw0>*a-9Vu zojpV9tq6=$bofjxa>1ln`tv=6lVD0-{d-!^AXC zFy|_JeS^?HFn_J=rPwq-Sa_&gbj5laFk|AEw_ex<7E>Br1pO`mR(`iox8NJVuBf0n z5{v<-CHTytN6}zuSV39H)Btc7;~$;z{|gC}YoN6wnCEBVr$swNAW3zn8@JSs=-Z|(yfz=@Si}3R!R3HY6V({sjE*&8U_+DCG_^FWXV2E;VGQs5=#(Z|ES_;sUqMX2y8FT|yq@88Pa(0}70tWa zsiuqWLUX6hUoBl+M6>3XPFy$}j%EzA;P62{G_50Ib!OE;G<7iSaowLeV zG;YZe$*=N7qk2`gwyRUouv+J-M*9RbsJM4AYM~DGOV;ymmsdo+{8`?raxYL9r+$qK zB?Wb~T}YLc(MGKZt=oPz8~sgset3}I6xH7w@AaylL)Fc(cMpucN2RZw4^&6Fpu*0} z6HSCLlss!S%AS=4PmFX`oSWDn``8Z2J)Rpuv6(D?;j`PIB5<>d*xy)CYxykXbX6Ak zb5Y2UahL;|gXp_hao0fmiyPi_^Lo(PwC}xZR5j@C_PldW^(N>Ybv>(cH3js~|99bp zYB3mGjwsYQN(3W}DmS0lb6`xQDDvRJL@*(F|3 zK9FE930V)MAfZRmk6BU(iH=J0tIM?@u}?}<^L-&CIW4t2eA)_0{l8gO=ky@i`B?(> zg*YS+YBwFyyACNXLvNeP2OwqWrr7I(-;nA?miJhx1F6G4-Ao}rNOS8rNw?S!X(OuF z&Bt9K-TkIh;vR2EAITMuUgUY-z4O`l<;{>W!s^vGRK$$GlTo`rrD2Bo?87##@0i|1 z508AWgXtCuS=D+gF|Em}X_Oj@X%;UiXZAe8)TZHWiSfLiZF$5{;kqKGH0PYU4Ko$TTE)@K1@2Oi%B*)<5^V{Ol-d{Rr6yU6YY$JUT*8e zgpS=`vrXJF;q+$NujRadpxEeg@i#%l{c&MFO2ZW`m8N04x4gYqPAl0Jc8r~~ zB9^0>o?~YJuKhyO{bhtt*_LQ(__S@DxB;3R7e8}efDcXd{8}DeLqcOCDOL(A9-@&M zlxLgoj)piwRL5#{G)M{Gv?Z?#^$VJklQLPTSHd8$Bg`IkZ@Bq?LrcywfRqY0`>2q<+zu4@&NO)Gf*G2fs`V@1IM$0O~^Di#LB>2O50} zgFObeftFKe{}%kD|e7acG#vwqh{;iFre?5QBtmRM8387!7lknI9X9X+9{F&=>1IDEg#UluI? z`YWCu!Qk;?lAu5B3kmHXLe`(*@nW%j@{LCuBsM_S-ZiO^blf{gRxAdRDqeCv7r%pK z?OcZg06;SS@r`A@0aEsti0@9?2`QhyxGUK^@b>4c(si!`AvMiM38+ax+Gee|s?WTe zNZGRB+X(4WpDQOmVn~m)3F)?wh76IpON*+VkP#ek$7;eF^3e%Jii-@)D8A#(&7Q%G zBkLs ziz$=&x~&_YW6G8Mja8NVFqu;t9(nHvCg1LObzt5LlliEsMc;m4(v!Vb+aB?Hl=v0$ zqZNvn_@ZdrK(7ZT%B*QHDGJ7fwZgxGP}>4U4(5G!5LS~Z=97W2O(x18xm%(7Dw@gvQRco>W3 zd*)|+L~YUB)POx~utc-VlNt_5yelMf&yt{rW~7cP#)+Rn(~7Yh^RjNBDK)x-vZgVb z)P2ww*-(VW)ASB;1+36$d8RN$>;W1c(B2YoumufK`F-#@88jeE9Fx#gM12}tyn2th zp`KGW7s882P}fbWOTvc3s6*|lv#{?E)OuC(QR+Jf^f%{%q*nbLs-IaLmrkId8s(nu zXWO+VW2ih1E#+y0Dm;!)mP+rfM&vn22yZ6X!~m8xP00VbRPI)s^sDa zx+Q=0{9rbK9%keuDeW8RYgBpkH2Nc{mI^edERa=?U=c{8 zUzzC-1nGA|W{TG{A$?Im|11R<10IB-4Kr8?UK949ecAe zrNUmvfS<>isXpgZLKY@>9y*_P;29>nABZ{@C4x!w+TLm5`!FfMlGMNN3ML6$Js_S; z#Kg$>^_Gewf?M0RR6Km-izTZX1WsK1XJSP#RW7 zA<9ZUPl)K7LLva zCN+|_XmDa+Z`dbiG_bRL>oLL->N9BAq;+))_4u)q`v!+mSH|_OXZE6~qoPCAO3nhc z${jx86Q+flLdUypwDzOAxygT$17fK9oR(0X7Zp|9t7enPd4P&^^X8S5l2ESXvqwMF z4bXef*4aaKV!;3SOB;<|ef*+$<^3cC*TQpK%4~^b7X6otX-{Ptpleocy3y$gChq?*ZuR z3n(AUQ3V63!3w=+yur}j>lEiMO)#P@eBy5X1u({wvbD~Y3C90z^wh8Z1ttwYfEEiq zFr}O!U=bt*nA<*{6pcOtrimfLQ>~d`y8kjWf%zHCRP4C1nJ@!pzm#2O#0G)6aPxY@ zA$2f+r@JcGMi(qxFf^kmb%MnspKnj~d;?43^ZSlGOaRLp_B{IZXA4*!*AE$MNCqo4 z7ql|XQvfT=^mE3SXs{Xy>tDuv18ZJ5Cnx45032{GI{FxXMc|%e{*fv38 z!0ED02Nxl6f!lQG;eU{1jW1sExe7`DtXeVgBqX1pHl94Z5t0ic4UBL#q{xfwZ?xut zl-R_o@*C}tx_NsmGG{>Q{l~6y68exj%ZxT*JcTqXeN(5zB}i*}oAjM<5Ylyr!fhQt zKzg3k*6f@ckg>;Hqn?=w8PSh87T-2NHm)z8rxR~sM$z7lj$C&!!)V)afvv5W-pyOL zTw;ppj{GT;;l7wo*!BB&bO)wARoZVAR*GrcjXEOpv@rFPdj%XF$5i#?8Ktl)OsVKK zIr~u?Q_e|DJ@_$*$-_?Q{q!YFb}K1(K5zw-*~CZG>b)@Oye4=^$N zwuNPBGA3#-N%lvDVnRaz`-kW8m~d??+bhvgv^L@d^lx~gwGB8TAovVgmEOf&5MF~= zx?%6zd_vKRwSdW=<44eP&=*1Xkq2n$gGqnG*)FtLy6IcZgC}TVpyQFHl_Of97nlY% zZAA0CzX%-2v_x|{X~j2wccEFUUuOH-jL}TsXjMRXADaFkF5>)zg_xx`^~i=t(bQnY z5l#J9Xo^jhr1_7ECZ%!$1r!U=cz9UY$4Lz|THpLY&cFtZY|-eR(9=Uhrj-%Wr~S}C zTTxrt>QH$@25LD;c`mJO zj2h}rsZ2^9MYU(Ua#_1)P$hEO;4b?Cl~#Ntp7?8x3Y#4FxB*?1S>gMA?`0zt6V;=U z&aDkzOib{yTj+xH_N|wsczyxg5w>@-H3*bcK6&uu-YEE6ur_(J=pm?Sm@dKZgh7M8 zNcoMO^yB+1-f|!bglHhgPux?lQ*v>=zH+@j)lrK zFrano+QB(7Fu1y+BMmCS@V846{}rTwQRg_WyapdIzV`?F!z6hyF@SfM2ptBKRezP$ zhvdN2rxaJCU0#6s@OEv&=}s_hrD&46fdOVT+i7F_biwS-+x>MChG3ROSZPih1#``A z`VQ>rU_P_6i}tS;EQBiOva9ETMSIWof$vRVNiW@)a_Kl&mT21bD=q@8kVf^M-7x|y z?Gtsyr}_XZx4Re%NP*So#UgDg!eGtm`IKv97$of8v-M`ZEhI!xJd{&DLn5gzI*%;_ z5*?y^W9>{KvHkqsXS{xp^xx)KIr=Ijef!b5W782x-fcZbE`$?EJc?20*1cxEENzAqr*Bkr}$BgtaFTq|R%+R)% zyDl$+>CLD5Ki^_ty4}H8^F$X+Ta!IM(Hewlp;G*H7vwQbT;{jm^Zzh4N9nHXb`qu@ z*WI-%Z5UJ9ujY}JOfkhVKs!7$3R5Vlg@)#bG5JN0R0 zAgQ|DKm!wdmum*x?_=T};|$?ScT8l@cBbC+!GxGyoT9IeVS+;Fz18IHXzkIKP<6G7 zXf<8%Hy>XFVztP8czx0av4|%`dV~I=6-h58#>;PL`D8)cu7{au={EP~tB?uE}Aq7`tO+e5i~xpA>{JmI2zLlRXltD z3L1GyXwLE8goXy6P`F8PXi!!4LwoWM)c=rN@acFB>TMZSr;Hp#Ju=f8iS zM`FpSBP!d!%;W%S1$PPZ8;Vg=xBJM$&8JblfA#@k3ky^uC0DK@ACLaLDwDrlCXIe| zr3n1iNJ3beD(PuIh`#oHc1aA}gd)1wbUSI~f`CG^P@?{z>?l?&b+PH=p?^ z;~NLM(D#WLyK&HCM@=fLNdtWX@;!NiGN8ZcaN@nJ!(h-sc6q15AQ;|89FE=l6^xW* zdyy}QfidTk1)8Dz!Nm6R471!cFlouV|IJh*m{QAdnh;(DOdf5)@L(Ch>?_+#o)ZMq zd56+c<=Vka$h(glb|`^a%jKQkg`dIPL9NX`duqWvkJp1+PtC!6UvfaX!ga8aTgu(z z9t;+rHcIUt5&%mUjSb7f>R?&5T)3cqH(25NOsttu2P-{(ff2S!fR&?{e#KT7tUe|` z2tRNFtX=-h<)=6R30uWQHI}O&!QW13A&LVMCQ>GYho3^?+1^BP+aX9S;y*O{tq+o9 zVJ_qT7D#$&vF%OB4M-+=Th->}L9$&$bj8vMNN#wClTBS91t!;oEN_IAtYn$3;l>ipVaoiG$QZ@7HWkq9D!C;`Wl_QAqoK z3h9fV8Z3Xkg^a8A>2eNz3M;iEqBZHsGNa7L zXw|eXxTr1(u>y)4x3~$Sm5ieI#}@0+a(C5&>1j^1%rpE;TUr7wflZveKMK*}4eioW zdO2En9W-m{?~3Njnx4#9>!P`Z1J68t#L=8Y%p$v*F`6~rQkeAiF`Ds<8n||zg{HsC zT|1R|7BM?3)!ZHqAttwn`SjVxXzH+1O^s4LnzUPeDpO5G6Uy&JWLwS9ScGlTxrTM# zPV0T#>{^3{4YWiamy4jmFQ!!5h9xw>8E`!J`9aiY`*(bFTn6=&@9Xc%_C?*2Ut~J7 z*SQ<0owdJK4YgHFu9))sqm~Cj3$hD!s8PrG)bnpzsE%qpcZgYss(wCfZnon?736`Y zV-jVk$VcR0{=6Q_V?DTc^ztV3Y5EYqW@S9Ocl|&gvrq^mZV3rgjS~hroLVo8evX45 z0SluqLd!rIZBPX7^aGUv4jgc2C8#BpUJd6t1R6BNRSJxiL9>s3`0L%~pcQKc?5xWH z9c%P$Afp^~y{S-`;wOQgLyIbNCUKy*jr0ARo>0*5!3Z#6`vnGthFXJm`+}iwX=yK$ zc)*D1C5};cXD~W9Guz!R0LCL6oLh<>fl0w3oh|BIU~-5vQK+{JOy!81#Z}(`%s~0; zrj#>a`iyK%H`g{WBfc|wfXfQZ%uxTZXB2_iAMIDCkK6)t&yuf!06j2&$+|IQVEv!v zw&ew!7Xu5dpM3c@tHI*$^FuWnPr*{;@Imv3LSWh2mUA^U3alu1Sn2>*z@q7BRdMhF zR$W}GEJrq2jhjlIna~7lj{8-zR;ZA$BU9ElSQ`=o$~m*m+*y%b{P{BlRIg+=1Up z`WU1<(m8u)%VS8H7Vub&sD;$CJ-)dzo{)+^*jcBoLfUStgB52~A??WyX4K0bNSmn% zjnwah^mF%wy<_tr{fBr2J9i^wNER>6*s&nv>7`S1-R~h|cIIWp}?|yWYKM}3jA5|Rss)|4J~Dtr2U3{q7rAe9_9`Fnvm&G+K5l zk`tT$ioBy!N(IR&=PhmC@EoiRfZNBvi&EL7seK&0i&3)|HkRf;h z&30W*y8Xft&GJnQ`kuOgX7nBuJ&QeprtitAS?q8_%=Av}Z!Z?ty*jGjh$|XR30v|p z^Zn7Jp-RnpUQ0B=B`^Q}=2tX!hgt@Rp=hLwd7WeaDjGgMM~kf@p}{PkHzD@S_0H9h zvKJageGebLt?`IMJu^eACeePV+x*hOSN(>lvuw;zMVN`&twnApR`H{MhhOw=4-7|5 zylQQteCxeC%zlQ_7LTein})zF1^wA$E#;)5i+(i=`38DiM>s&@mU62e%CHh_NC?@4 zVm82QTR=udl=YWE}o3~J@=p0E}KLydp!hy9Adh)qSX*KcDm%KGY8K4%HW zL;Nm`c&zh#V+=RTU?-StnYzwUtpro?D!IEXNPv06mCZ0#8%!%Dn#L!61k-E3Q+8~- z3}#9P$)(;}VD{O9Wun$yFlWZ9{a(lb^P&p|+{zch{OCYuOwBx4$o%bpGpP?OdL?Rj zWJWYH5)Sf^_|c)E!(0 zApPqnwU4hQA%oxR?sU{v$Z*$lwK(?$GTJvv+Q)suY$UNwwAen(cw;qicOGMgTIw3R z%OOl}SToTv(#CXW!|@*mr!bv6rHDI)2h%>X)&CS$$FyTNL>ziGFtxY-!>8|?G1W)Y zimRgvQ-!n6OS6SzO0H}`gp(AeoJr{&sH(x_X<64CvsFxfnx*`vh=Iv_G^G^PS23xy zUYE^7HJ`!d2A}Dl;F=NAtTb`naLF29{qdIU3FJjAt=v zY-m<*n8SxAh-U6j_*6OyqUnM)Ua@!0h`A_$ONYe~Q&HWY>SchYZrEHD3(7~6@8fhG zcdY;a&(a|KhskJM<MwVaodX#5>lYt`4S1LgonSG(Idoaa|O(MW_p%yWEFbyhRg*xx-MS ztwOJ#g+Ho0V_iNKz=x`jlqAKWjtgAk0o~*^O5Xq)8ny{vzN4@^3WMb-MP0+@-_0I@3Wi`9|KmhZ^_->Z za!C}_CjENI*fjwfzF#j+OUI!3Z_iv)J_fB_D!aREtU$-K<<&jc4MCT0W^=GB3-quj zgs@C=KySED8~+*)=oi-eNvu8&1`-K6eO{ZukZhd8z_KYA&fcfFH&6wPf{#C&K9qv7 zQr?9P@=IXilyz^{L2oc=XIzs1q5@3G+pW5Fx`3$}_g4yc4ghA3SEO^m3oz~BMkzIm z0W;9LCC^q3%u)=tH<+Y=*;3is*a0S(dqi4JeA#-9DF>EC6i2hd`M`2tu}=rB1FR&Scyl?N23U5#wF=V4z^eR_ z+qWnxV0HSFD((D9u$IjoJoYUO5)SQGJ)N-5|2O~UTQZX&k#LXntIiq{uLz$zW9|Tn zKeI`{{;Po`@#9NI(u0r`(5k7rbG_3Ct=iMac0jW3_@C7wen?Jn++<9xgA|VOkCT7t zkYaBY!(rI~DV6_*x`MeNb>HzPNfBouH8kr<^sSqaIRhQUC9b&^zz&h zyE%p#zDsV#qhi$*VFs$1T!Y;Q4475GSA+sT6|*|Cmg->FsreKjKSCj^tj zqh`*&&%tEH`1_}hg=11p>Z^bCshH$gsQ9Pe4wHBqPA$k*VB(jF$-PqR9evqoot1%;HzRXfZhX^cK>(|CgK9SJbwl1vXxl zu>3_duhZbZW3LaI3y6KWLpKS{7Q2QVoe@T}6vInLOOw!yrV6!YTRocgmGFAA7LAyN z!ljp0*$|T;-1%3x8BGC+;wam_Xwpl?#rMfxG~u4m;E;V4jV+Aok6P8B(c4-lhR<(6 z!?U0Mw#$7*LoSkk)JKHS05em|ljMu~9gXDqjh#{NBq`Web_43M|7my->Y=W&hn%lvFZniR-8qJ`_lVA3QL9FY2KxOM^TmLzu0vDQEgg{b%|>P8V`Grh z9^tUV|0wuzbIu5+a)MHa3yvqMkAS}p-lBs>Q2bp(KVYe?71>e~0c){+R{%i?tmb5Z%_7oZ?Y8d@ zdC>?+*ecq^;`j&&?!GU6<*x5WbDIL0`~VVF71NMs79_q55MZ;Ag;$6Cm|en}6d<45X%#1&>jdA&pxs=J$WMAkAJw$e!^L(*B%#sI>Dir0;Q<+$%i? z>A}7y&N+@i`tZ}Z(uwt6(0w`OdFmKse0ZaFZ|VbNqsMqP_T0mawzGpPPAQn-bt$=T zFak4n*xFzFsQv)TUGfYb`RnkCLDQ**{l-(PXa7)7!o3BCMxigr;J|v{^*bI|DiN;!6xU6@? zm2J$m@0c_ZAKYeRk4YiJV-m}^FiGJ6_-lL!6Knl^Yb+mOqDy_If~5l{^2^kZHE+O# zZ2w-$({-;f?P|y}rKuK;dQ%QQyJ?0- z=v?^~-;>eM6UjjNSsygWXAst9YlHfu9(1feGD3Z#)mF(}OQ&66B`IeBd zSL*{RLmoe~Z3gsBlX$m)8MT578`v7b z%xuf{{6P*dn>rrxdX@<0Y?pt!PgjEZ-NfX5VlTjaH{p1=)_1TFHJ{}6R2VFp3>0U6 z*9S|Rs^Wx6bztewSLnCpELaYD6qmPW7_4ZTm%o_Z2Ub>PzKy*72v|9jPJ!(MVAc84 z+@ba_U`^ISyItP|tPO3xrh0Aw5)9f>xXqFw;fpMXY|#}+y zQj8ueolOjfl+-MfTJfKd%K2~Xh*&D5+OXz>sOFGby6txGh&`l zKOn8+%8wC`_5M(I7AaYag!EVUR%)J$L;BnUgRu#1$S`^;vf@z$8L7`4I-Qyz8)u06 z-BMl5Xtv$eB>D+6Je*CXcDk4{2^|{QqF;P4!S}`1X$5Ue5Fa1Y;c-N3q2Z?kn%&T9vq8L| zt^!)!$yf5^tsr7u>&%z;Q$;JEzWV8MSfk~cU;&YGL9~3(#+`wL(UR|}_u5z1{iE#A zo82+`Xpv{%`Gva6Xu(9Ln^t!K&A-_z^QJcq&Gj8n;VM`}b9=O?@lW@mS?9B%pJy(h znOxU4Pl7m_A-?RrsFZ-FkNrr9dvXXdpHA?J91x1Nl+8@RQbEA7fPdU^ROjxKPS{V{-rS5PXx6ur-dZ=xu8~|?R_mvuBgF8`^GJ<)2Q|qNx@(D9jXd%Iz79A?|%RQ0RR6CmuEZ`Y#4{nK1ZQwQHi2K zi3*kCc~U~65FuHWB9R%2Qu3yxL`0HJRwOfe9xD|1(BHpI%>Qi#26Y`It_AJ@LnUptmLoM_MCMon*U45e8vX2woA3}ASH z9}_xLe;0s>De<1pgi0`(Cc36$^JXx0GqE7w@+_DZKCm_>(g#fciDOEOH-Z_zZ5}Mj z7ci^r6CYS<0cMw`?7}ldz}#2uj+7^&fO$J*Qa^kS%!`r|juM}N`Bp7@r=kU5`G>3@ z^y~l&s;wpc{!)NV*u2}OA_K6q)nx?s(7~dO>$I~B086{0%!Nd_z*1X@S42t^SPtmA z5_obG;GCNqdS0v!R!CII&3{gVm0Vtlil{S?aExL1em)2i0=$!0>*^q3f>^2~5Ce(l zT)!(BTR>v$craev4oO5)?Wcd-A<3wELO+fVl5*s231do-ydkPidD$M4Z5e{&Og>1i zusT~*k_IWee;Pd7y#-P{ck56i4I!n?Lx$)-2B}Bumz9KaAvIvn=a=$_A$8nYJt4^w z($tFT3@M_J7R!CcB6bYY3EEKsh0>6I#;fZ_x0Y^n{E%8rQ~& zrI1nXWpyS(8FPs!svLSeg&Czh#vhxjF~hR+$uGVun8EusbK*-grf2xho^$BNbp2b3 z0w=UEZTak*AQ5>?i`qLywETf-D%|?Pul8Z;=uCOgQEyCr-2qP=AHY=EU*AhUh+s-< z{^`5H`Iz$XbCvt6f0!Z`XC$%B9+Q859RIrFi^(=&URR}iFnL4RcC&g%Ov(w*BFTGU z($$!Y?n4hSiIhCL(QgP7<8z+UcnvY}e3{T2XMIeVYR+I&)i5DwOvQbl5hk3ZG#TCZ zLMugzrRi^C(F(U~oyDeh#L>&E*RLU>0`Ik+%~rk5v%ZrCfJY1OxiIaa!8 zDgfG~MMujbayhkJP4-TH6 zd5ne?#6)iozCnX^O<&zUenA7bf;wIg^`JhES$Ns05!4%abXxB3F4Q9-*tihHkGe2j zMS?1iI+6)be>BCQzs+2}Puv<&3q?Gv_=Fz%BW;?7u^6g1N-fG+cOBLEY^WS~8H;}1 z77p07xCWJ$DBq}99!6Lwgk~%B34I-xsb4QpkD^cS;dQAI18zxj&6YN{;M17G8F`0| zAV=w7iiLFnDEyILFZ4GTlv(en%?ZB@s`!krj&yW^+AGIS`NoTZ2Fb)Y?fL7Vi9j=F zt$7Jr>eSsOWb#2 zkPfT)f`PKXaa?~F!H{&!IyJ*wFdSkA3+Jc7C~1Sj83k+b&nk}|!Cel<>UE=HJ{EzA z69arA&s@Nywrt{L^B*upv(Ih){0vOxCCYu>jKH)_+pb=&NH8PHcvvMZ4Q868G@Cjt z!R(8R{+Mz%wGwY&sBQ^SnHzeOL>k1R&n%D zN;EfExEJo$SosmK_XoWAxbPXUJD+T~Q9T6~1MVD*@~Q+&Dq6+i5^7*+QM#?j{2EyP zyypI0Y5?GvcSO?P1F*6=MRVBTFIcH?_IBFK0|`J#?5X+yB)nTXPjOL%gz4tIn{S>& z;`uLkul|dK#5fzG!3aIHI)8`B(PvT8jwF>TupYRq{hOf3wVKgW{9)LQ~CwkbGa zDsKq3V!y$ZOrfCHM>v>rC5F3u<0^+plDjfS&tY;xPLqjLI3{0EkvQ&7!lb$8ts!su zF)8eJ{2!AIm~@(0dv>q`6Nf{Cl+0Q&@wF^dM63rB z_C8ec!5ErK*PeoIo6zLSIwOhwW@z$!O-uSx0h*9KSSxfo6phvV;2qzehyGdLv{F9$ z7>zRcyZrClqv7asTcyx1Xb3#pQ2yf=8u+XAD-hYE{(HLvx72B)z71rn;?`EwlRB!g zR*8(d&$S;j<&aTl)t5_lVos=?`W+zG7;$X-KH8w|KFpS=3-x2!?Mt9xmauziM z|DMX}*bKLUvB5e1I)$BJ;#}g+twtJPQZEskKC%Q;^uyam*GUoh*T;?{Rf9L!1Gx7t{r3+B2KU)1r>0j7ULw_ZXLm{(%o zZfk7;^RwFygr}4OR_sx+#y&x?pr@((jl%|Px+#9HC<@p)HWscCB(P|CPqnD~7g*YQ z|5o_JV6gPdt?bNKSFrrR>Bg8_7~n|WR<3z*6>vI?ZtXU?3RYgJR*N2tfdmnOlaE~V zA;HDxD?3#a5^7kr+Z^9QqWBGe_W=h;^!&}tU)cePt;dKCAr+8x_`{czb{UZLg2?q{ z*M3OqHD}oFiG$=5_%lyyIV1;e=j?O43(5bSnFc#cAmvQ;yW>@gkn%ya@47)Qq|7=0 zwfAy|RE;wC_1oqsXFJT;l^Yo!T!QHpFOoL*n`64Y$;!hF4@}=G7kjcG;eygR>HVw&YhPJ-ML zrty^@;m&f$)ZF+v=e@@;)y!u_BXAy5xoj>hiL)>z{nEhb!B$K$P$>3V6O1Xuef`o( zj+p#uv$}yR8d+NfH0}`_G1Al4{S>-6uRTaq{o6+1>vz@!cQE z{Hv3g2OWKMz5mt?>>$9y}`Oy56RN<%QvWQtfdjn_|BBmJF+%>g;<{bTwoPMW) zW=pzrVYvdD-E=(ui;^0ex$$<{p3s7(Gnu)D$9AG=+LcyiJw7z0S8BpbQb3dON6x+y zDn%0$>cT4CZfN}VF?-FI@@VYP!6zeD>S(l1QmZa86pc8@v>=UhXn3Qt;H~0S56U#= z{crLy8qj-~^=ID*>YGno&vQfq^}cK0GI(|x^~eiU3iBLBU4O4i*nX@-9SfJt#5X9T zwi7Ek0lvzp#Uo!Y_;D=yQ}|pi^)nSUP%JO$Bs!v66@w(=I0aR0%(A{6GmOeY|Ms*9 zKSxD7MblK>7%2C`wqRS}kCJn4rM>HoLNCty`WObi1mU7bK=%Eo;EUTp+nnuTP+*-O z-yx?9N~HGgRIeNZKjW)9z00`4ZxQX_K=pJ`ci!;R5&Le?$hgma?`sigDtYe4>lO}L zA3bB*xXgg|lg{2eKEt4sr6XyYk_fsD*SXkGjX+QKzY*7a!k}+c;l$bjDbVlW_sm#C z4Gh$3=OlQq`j8awW6^arVA!{Ckb1@ijEqv2m(_tJJaRhDvwSEFKqPX1=FMF1%eN(aw%kKeN**yFsmBh zGcmdXX6G-wVwF#Vx!4)OwT{;S^U|A#usjRQlO>DOZ@&if=_P|sRWpEPdU-VNz$LK2 zJ5X!rmk1UL>_QUDp8@u5mU61ABv{<)_Q!o~2v{s%(2&fE221xG5}Vw)!Se3mNq@;# zV7b9a*v@9y)bUXfmH%a9nIVkh`}l}qdfdC|kBkfg<0-mjeqNuRdm<(prIWWq@YQ@1maeEG`W z$dG18PQBO670(SR)HhFe+1!H^qa-P(Xah*eC~WfWjD*xRf83{{*^p{BEGl`q9#V4_ z%6_V?cG!A`wPs2kq}|-acQ%p=Y2Ssj<#+c(`lfxxU-qa$y0sMJr~@6+i;sNOE?)Ja zt#a3VbGAc<-Od z$z#=ztQ6151Ys)QQ<3}3G)&2hoaaBAjw#o0q4(aOn8Mxt@M5L~CTCHkMn&Z@*<@c` zb-@lyW?Z=GIJg~?((jF37ShHf!>DWHGfS96uCB=1VvLE&%RBd|f5${UNsHV&s~xst z5;}bM7A7PF6iAycVuIGsD#kS$T49m{ny!CBE2{S_KAo9HoX`or`wDN-@|abC(xr5? z42DN$P$^n^b7zZJ?+3KlH@ju@k|J6>>M^>#p#`y@^SoYnISVbcMNo4%yU>D^ocekJ zL&Wl|FAis>I=?^!-w)vufiMEg*Z3V-Roc=o>Ygre6BPqcNwA%<6!4!uD$4QqBp;s zxGrjDK5>04z7hRVdX-@K-)g7%C5EO_`cO@4!+Gm1R8*-c=)hH>ihc~lf2#|SK!p!= zZf}ZGLpjpNrff#)P-4ki`+K>f$SdO3D0QnJh;T6Li|Y9XGUzhiG|ly(pus(5a9b59 zx%fkYMMkrY5L6_2-Yr4nNQ^+odPvF%FvI|LSbplL%T3%WBX1 zM}u~r*oLf^>p&-VGP6Az3%ZZLSI8r4nfNM<`K<~e^8Cl}zK)-P&=*Y7 z9ZYw`=7Px#R+vwY379ft=cogiziU}=KhOuTwwIIJu4w?)&t0YV z9x`CT$&D=k76bOqs_%!S0|C2QXkI(%Kd|U#_4)nr6tJ`>V~Eyw6D-v&MEbw*0Lu?g zw9EC21I~W8_tPFifYX%OfpR0k%9F9UklF}H5LnMv7&U|h8}aLD`T~$p0ypgR6NAL9 zx-{M<4kX^ar7(9p0TO?>e$%!JhotR39#P%>kYpeH>{`VJNGgwR;iq4M7@0}Vr3Ta|Eeu1F_X>NI9%nb&RR+B#dl{F9PdlIPWK`oH}Ak6A!Rw|^|y%N&l zJpvi~9_^R_@{r+SYn$Da1{n=k*YDGc!(4(X@s($rFr&EGB4mV#8FyM6G_n*hW6R8> zwR=9M7xCuZmpF;(*82}}a%3@mvzp$6qeYm8E%&-qMq!%O^BC9EJ(#vJrHZmw8dJa5 zMSKWa-CGMge%;~0)D1gTHXJ&LDFx~R?EAMc<)(8WjYYr|zUb`l7Vj|mTiuhm&;yuk zL7G=~<;CRnviu@T9hj7Ns~#P8$E54wC*tI}F^RWP&FJiE&*kzg-Tdf+iPuywX@2m+ zL>{k;!70BmA-iz$=fwk?3ec2smzzktGMdatez9|7 zH=1PJ|K+k~6B^G8bG&0DfyS<@B)3T#qJKOKipEQZXe2v*uYh+Q8aA`NvA_NV8d`gV znJ>NCbzeCxV@It}zi|zBPuYFc$B2Jf$W@1WzC1NdwtbGejV$ecrn6BOO{Z3&?m22V zeKu|+D~4LXIu}2Z%R%J=Lf0i`0M$^EBw|>Os3JXeOg!u- zDm4_jEvY<&Fe$NYhNy-z_1?2&2>dAa;y&UU`6wXB75qxSGX%umst$OP)C@As4Rfm! z!U1ORnj23RfKuZ>`O$YBK}Dvw1CLcEsG;%xaI@V8>e4kC&H9y~(a4jcZZHU%>GApQ z)vBQNOOdRgw<&19T4PsM<^;MZmL~*a`#`rr->#LNHlXLT{`BpA4WN%wmL#oa3i=JD zFYNrK4F*2H>EchH1VfYwlg4lHVAxQ(M!{SZjC>9{vaQt`{G)U|KfQ?n#tg-pyb313 z_~&ceznq)}lO&ClYQu6cnLO}o&67Ydb@{=-+<+gLCaovAe6|PE$q_r;hE{#*vgCRbYihWe10aL*!i?HD93hX`I=+X_kAx%!qLS9ulRET+%a zfuyB5_t#27kgUyj-Sc@VB**V>32(j!$xCP24TVoYik8vc-AXHv5@-L$eoF|XEdF=q zi)k&SUJU*3a-9XF#wHs!tltQ!?0obtt4-#O3P9!#GfFskB-#`LJ+rU>0!OxGCCdqI}PG}at-yGIG8MK5Lb!AMNI zK>cl3v+7ao^_rJTCowg4`;qNsZkT#e+}+@X2c|3@I}qBGj45%d@UEv6rf3=DSXujF z@{)C+z{{_g9RH|(&0rrUYX>>jzRbd;kY)?GIM8c&P70X?ikmMxeUh0Pldch|J4w5l}m=`6{U5-`^zE{4K zB_dAR+I6f`tNlkaFV}aS@WhZx`f2aP`2L_Fzk?}?1D60nz zhl#mt&YeL+YC1B;x1XQ^=6|x>%}-E&GxEoTVR9=THwv3E!xCjJlIv6ux~` zgu3)wI1wf!)WK~y8kKhj{k_S3Zt!OuYA!6_62CzV{n_rP>2h!m)!#E7o!RpQ)zlsT zm*yyoDh(Aw-_Z7?Bh_SH`4AlA}53p>6kU z4X6jb`lp@eB-}t>;ti9;qavVx>9In><1JuNGn7C4g9#XlNbZvFO98{vc?tX7{lMs% zV(T53?ZLmGGReaI)nII>biB}GFPM-=X_a9TVDhY?d|CA%n4HiSzVhWWn0lw;&ALzy zrccS+J9O8A=@E&Z7@x0TCP1LsR3j72o}^rI7jy%&ePfqvzHb3@FY9}yrv(91E_>cV z%O5a1L*Cvo76J3mTnc6%5&-Lvu3ZOlJz%v;rLS!60t-**4-Yiw0`~s4){|!v0lVRI z2}v;kEV@5Z(0P4m)weWND8swK(r>};kxnXDzSqm!GG+icBA=?`oDksrwAm$wTEL3E z^qPGOwvfPcuekWV93+_i(eTM}hJ>smQ8gv8khtbm2`PFbBpQ#T`$#B4V#b-<)uO*3 zi5@m{;`}>Ex-zROf9V?}rJcJi)9C}rl#fP%PeLJCe`b48MGYjUC?|^_Hi8sl@Y+KX zMUbL9D1T;47o;T09shN48d5l3YotX&AXU32>2FB~q{eR-K5Ba$QWq_*C!cw{%CFB4 zqOa;hTJ-$Qr=`~+jitCd|A7dkpMR2_=D5nSh;pHdKqjQmt<`tP4u=dijawTNg(2gE zpT=fM3>j0^^saep%vc^-mza1TGd?9JY`Ce78M=2ZUAYV}gD9)xz}nbkN8m7~WbbaY6fwjU^Lg`5niZz-R&1m-KgQ&|4?`|#KUTfVzOypZ5R>^;7v2k) zV$ydJ*#}!jFv*e?Kwn<%!%cO3O(M@Qu`oH^v)ddK?>w`MNL9i_!5dnYggi_rJ*^dH zEQ<+tyY41l{)Y)dq*TA>!)V37d{Z%4?Ze@hYg~e_BF?Ex@-|^#&~k`S%%33=TACbI z?cG;^mQ=HMm+me=ixL0Hrxxr)Y?gs{ZJz;RUp&ZVn!t}15-5c)4@e-^N_(nL(kH~a zob!A21=0NHAklA2v1p#|l&F`Tj+iEw&0n07M043E)O}UV(A>J6*L`0-MYA`#lE2TT zqnYosqI%XXXl8R)*;7s_nzs49$US)m^HC+A&RMgIc;0RR6C*Y`iwZ5+q(v(G_hDwsHY?(tXGbe&_1s_>Q}rTbR`@T5VOhvJ!*T|cE7oxcP#RP zsfGgRKe(Dclm8G5ggUnDeZK$(+nQ$*9ln6!9U9!CsRl4|_xaMUP1<0zVqwJR%>o!- zXIgngNd!#TW{7`RrTo7^fUZ3(MbI|I`l&3cmbS)C@;nwMTQM8;ByVQ8I8Z8rI4LN@|qNNLQ7Q*uGh*OZb-8gL(aRi@#V8(bN z_O(=ww%G}^h;nd_=I&@w;$wN~x(8^%r3^YN-bC{?wfBCgH==pj4u{#vEHvjmvHs{f z6Exeha-SX&gJ$=NChXspfM!B>*q>dkMyx&^dJNwfVrg3JmUUnvX55`^CZ?i@F&SN9 zvY3Y$dhfQ{el|q(LrLaof5gxfy{9gdWQHcw<#SGo_M?f@&ODB$UWI`#6gkJn+4WvyMn z{0zY7jZVg+97lkHQmy>t2;k?UmGQc0S5ULNJJ6wx1O8k!?fz^$1DcF4yqg`l2bxD{ zK|a=tpw0i?ob&R3pkwn%e5ErBbQO-~-BZ#8J*T{ud@uBY-g%OT!~HVQe?-6HU}FRr zcpNhNYWe^e?EX2hZ*&n1E3OurmD~p-_tdY3f?=L#*C$PsabR5Rnb{Ua1u$``GV#u9 z7ciO2DE>`;2c|e1u(W_EK-bsGxviZ97)E=vEF|*)gHb9@&&USMCq`Gak_7*Cj=H-^{WWJ|^`Pv5# zxi4M7g3I#w;}i$5DB(HuD8dgcmMvVg+!_klcCIJCa*qOzzyxMneI0N?n6{gB4b0^PH>@Sbetk*SS;20T=jdkI6j& z+@Y!c*YcAg?wC@C9#;|Ko?X7k@5hF?$#|)MO(75uekn-xRzZ9$+kH=rEyNEik?qQh zAVK3ohurZVNQihe^K1DHB=nS+y-UuAM3u1xb%rS<25;yqdG`(y+x5hfAC*DUE|+i( zRXs@ZO*WV`?1rSKs*~bQOOU*sl`O2nfaLp|RW%jqko;Rul+`T)Dcf#pB-WgU6xaAS z51n!#rJ}@c{eC*6O7z{xjpsnB6Xk2h#8XH`N@nMu@*ER8c|eg>2x)e%_U?v_koGlx zAYu3$Gt#)3oUQ!FMsL z-ots?$sHJlWiPZbPz$4^7`2IP?7}FQdYeosyvBjvtdl1|=^k;Fu3`9_g9rGGtT6n>zafb(!x-+@ zj{v{IFbwBbu){Ip1csB&a_8KvL)_#&ooQe9qtylREpnyFXw{VSzJkg|D{uN^tFiNF zg;ZPNxw#B2TNmnYxlBPzU(?rf+K14RShU*t;eNz%dhpVpVS?C|H%}KkX(G0i^;x5C zo@bt>>7IZ6(L(dlgE8YlXkm}WhPK*MXg+i=h*vs==KAH|3;p&-bK2YNq95Euvx$;d ztR=Uj8HRXfd58v@F%sQHD#=HzOrZs*!WG0^6`~vtnnO$rp>y@R?TGPFc)~(N9WmC3 zVLN4}(Dd)!Zv~yNpeetDXYQ%}MU!fJKGM(=jgOv@eRiH7jV0M1b-DNmjhcG(XzH4w z5mGEGXk9-V`kL!Kfa^ztPF3DRx-w`$YM8lYw?hFU+RRh&_4M$MaXU!!H4QDdO(1JlSesIL9Fv{wQjs(Rzr zGyjVZ{qQ=!@8Z@_^zCVsGRYbvN!oFfiA?F9|H+P6rn^ns?IszN2j-k{||==tXl z^FbS{9hc~z1v3v;~t5 zJLQDDRKfJ74>4KgLx66-zdXrA3NX%FUEK5ZI$&_OYASqr3YeMQOS9~0z%oio*Q;>` zEQaOo#xNV+PFtU15^)^NYBet0-bw+peG&U7d`iJwh@Q2_z#^F6wQ{TaUK*HhD!86t zwFWHQb1;7ViVGIEZrkK+^A#-qXlfaYoCoY1LEib&tAHbXK*XCb6L1PfVz~0Bz>?(? zJpH5qSjOqu;7z@FuCd;aO|rqt@t1U~u3)gjG?EhiJpxt}XAc+KqyVmVvc($JIl%4L zyIk^@0C7j=_muT@KwM(=j)%|*;>KRQARl@R@!B`TQr5&ke6-HYo6cg0?-yzrQJIiha6@k^u?o_t`;w>EV32lx;eL#ZKcwZB z{%13%4{6+o#YJadU^Hf4$P@m5813a~vRno4HELc~LkxH9dW6TRNlB4)Kla+9cBypx@{H#1ita!4pW^x=Ox^_IfcqSVoN^Qya z-ITJMfLMle^%+hTS%*O~j#)_;@U%~J#d$LY#O2zO2Ze)wluNZ!BQTwJ7W*Dv; zCk18QFkJYtj+;O3Vz>iQRHJDU;#R*kUasGdxN=&zt)}s4)#tZ6r8yF~hNg79cLDzNG6+fuYNCTSgJR)?03ysMEvRE#(;^~Admx+3;s*P-PN#}M1x?Px<` zKU#bzxHEhC5L%?Y8f|J$Lkm}R1C!LBq50CTCG*W=XkOyJvEJhZGg9JomL~-bW0B ztwKqorHHN<vJuN)Zux0_XN?i;MG6c>(E)7QmSy#`vD3zmr%WqSZs&UjOBC%jEF| zzLwysN`r5;)Q-c!f#65+l=_c3#_(c9$pMm=kYjk~INmagWZ) z$$GGqY+=u^?FP$-{ioCqj)CQoH}&;<%)v^;UqMHb9avT7r?sMlWCq)e6X*c5sQb!@)lB@ROsT0KKJr0^^m4pPG zbl9#<&5&UBQKw+%Q%J}<{HpV-FC;89edh!sNHn_g`1+9oNK9ghd1rU?I@I4F+IE1~ zp&}}a+mj(F{$-O;q6j37?3P!wc7tS%lD!#n8ju`eFx?PNgXDj$w)}g4L5lL#=+_^U zAmt&$6_?9|l-36VPK6$js=#;gh^-=|dL`I)8JIz8z4Z1dRv4s7<-Yt#FNL%_2O3gp z)F7>*yd;k=3i3&qTvk!3#%S$Z$MG?f7%e!yF<8VAqp9()Mr{9zQTzOzzn#;&bVuk6MsM_cmt4jW@+mdTfWy3rUprII-RN(>{L z=)@`IIbkHu7h8{+cNi&qpGV*ZON?|Tr*^UE3PvKz+W0)+`Sv0CKpE{0Mzr2=;xh3b zMihw25|pUH2t{kOZq8lA2-iYHl?(!SyN$4Y>c=pK|Nh{<^`>wPe~T@!o%|ESZ+7dL z&^mzOsu`o_@BYPb9ye7b+<8}SthiyJ0C6*aub%UMfL6Jc+>DKVXw~xjz1DN0Xyx;_ z8;8HIpcRoX4H`_IZ;qex1Ru1crONkQVM;n$lFqGoyt^K8ymPqy&t(w1?RDO{`FzAy z$*R+3)uYA8Ol#I*KD02JVN;y68!a43Z=NhwM)NPzzjWAXpgDF1UyDT~nme6Qv-c9O zL*HjEY91>^v;42(^#3KJ8N2M~IZNLW3wta0@hz#7Xoki{UMmVvJ<(`#!5$Mi zO*CTuoim)2j)wUfqP%=m(IDy>dEZ@w2HY9s9c{6we-~~jB#MK2`^7@;?0JKF_8I=& z($IpslAOg?#!sUT+LOjV3OwK3zEe83Y)8$#6Z!U+%~6xdhI*7tLVsMtzn)vCfNG3J z^G3Q1QH8AGy&q~f5L&R5pDS)cpR?tex>p;~t9;g@jW1-8bFyf3`;CntJv>7vwz~v; zioZ22s~rYP2ZH}ON?L%QlE$SzYhHkA_}AVd>My9je$G|JQ35pnnsoW*yc;xMc-w0n zejl{b9jJZ+*FgJ2`EkLUZJ=v?fB0LeSK!~9q)Fl6I?$VAskSImFqCqnSo&i2D*eRNL7N@qCNS6tQm*f6-y!rw|+B-*tV9xjqO9 z_!Hh%U;cvxb4=DZRu2+hDStGH`~(S$846o{{(}mI0v(0Ybw85wY2VV&X@b=o{YQE^+ zGZ@bS5e80k&Vrn2Xi7|Fs}z-i}ZUYFvjhXagxT^cJivFi&)w2_q&e!B}J z3KhWf{=*pIo8Apq^-zp(qcxd$d@DxSVBb+_upYzzWXq_1)WPts;dgclf5-4ro9Z-1 zwqdxsynSntDu(mYd2wl*JcirZAXE``A8~VktnE|iLtN^xt?ExW_js~JwQs-BTQNP|n_H83+)Vt)1&DM0Fo~scP z(q?X`t6`&3lVk#&~B`Rb@Cz~ri4QZV|{{mJI3APvL5Y#?SSDAFo}V=xL8YRsE$-Tl*WJZq8)Ba;XP2Ms2+U!cT%`=|nls z{yEV4S?HL)odak$2(IejKZp(!BF-sMgx)r!>nB+ol;9+RBK|>$GC7X7L*g2zvV6%|8pJe`}GY> zO72j8l>7!vT^YW%DR&i2=VtxWB6k7$yxof<#S?&$D)vX8@c}T8vSzw%Phhpyi*$Hf z7~ncvk48w4AdWxHPx5dt#96J)VwxmD-20$mxk?9!$1m#g8+bzeX@|na+boEG)oq~H zz6$Z|lXHf0)sS$!yv%|g1PL$IGip0-LINW@YcaSA5|3=EP*0qK#Dr*k`#U{I93@=T zaxsM@P50*fpe#s=7;}t`;XqQ4m9)B!3?wTz%rR8gL2}^H@r@hlklgxpl`nN3QWSQp ztaC|*6tA@4c+DV4sb9C$_2wa@N`=Sjxuip?E7xedt~{hxxXCuvMnl?$v2B?@lOfH) z`Vh0v4AQ>+^%ZGbfPBIR0~VLJVYL2(hi>c$!)VdvF~3b+FxnyGazc>-Mjdah`LpY=)K&gp2qR@)0LCPB)?_2C=7- z!~)(sAhtnfz{f{h(PBn!%&ky7T39X6p?#@C3+GEh{_adb^9AL%whdOJdEqJsoKZk? z4u1qg&+>L#MRSFL5U)?AI@UL>UqLfoJ@|Xq*of6S5E#KKMJ(l!6q`3U5i?@ql!2!q zVvI~bi!=I+7>Ai2@wn}Xt~JtfaNY<_F((FA_Qj&f*Yu4NygfBx#k{+Rx4*{MvgZ4> zKcdmTA~r(naiK{mnv68BWTWuQ_TE zKD$2BSsc~Odmr%l%iC}D1`p)4#t`;OWHHy0h6P%{6wq?ONBvzC zNNIavV7^h`RykU8t-~! zx7yP|Gk^AchhQXVec5I7md@L6s-mwcJv%|?FGHcM@3r9Hg@C{#(IueQqlawr#u@Z| zUuja4umuBaw!Be!%iC{fb)sHVI>1osWxwhFZh+zOhXM9&QD9W4$JlYPXo+V zW)eSl5Ab{|n^sV;;rZ6#^l+BT^KIVO-7gF*URb*$Pt**sar^ArSqA_+>xAapJ8uBT z$mvzX#23J!KYGJ1b}JQb%qZ1ssNi8E@suNdrhcCVH%Nrzs>pef4hb z=8cdzp?&?>hx?FpsLB0(<5@_0e7*J6%>qd3=ROMX_z21BiSaK6qaZnSH_IsZEhKkT zWDeKHLCS8c+$z9^6yJG%eSuO)X^JW>QDs8v_8q^xu}()^PwV2$(Bk)nJFP7l9`Mml(a-Pp^%1i>?mZ9?7iK4UDvqA_x|+$51xbxxVbSt80WYX`b3nTK}20fm4{fPYGj)|wh14O=9Pqa7uibyLmIsyBbh?EwAIUE;4 zBqMsmAC*8vBI{5!2NV!7H>)eGArcX<^BI88-iXL&cbh7C4H3Ro?F(tbA%eBUBbSS5 zh_Knu(@vfr;Y)fqZ{Bhi;qRQhAQskv@Y`QX?Ae))aMiP~TTE9G&h0|ZzX~^m6Hm45 z7}yNglBl+93r)C&`>y`WI2x{+-oE1Tk_}h#ccx!iKMq$mHpqUD^nlBDzKl_dGUQaq zjvi6E1UWnVh5FfAaLM!8{foFmaIr;&zf{lzE*=^02tD=%{eprpy;))fV z$0qOcXyrh5Tnts!O%u+sRccL~QsJD=aQQnJ23hH0lNOy*kVTPGWnj~A_Ii7HtVtJS ze)o1w4VQsT;obUoPP#zGo$_lZzH3AJ?_19=n>awa1Z`IAYB-$1>n=v|Ho&R;NHfRH zws6w!uds#eQ8=-ScRNqE9vo{?cf$Y4g`*)4Hw}MT4@a?t&QBW85R%i7#JXnI=Yx$EtgUzthmiHCwnLliAx>l_qRR&vC zGVedE`~sU&7T%M!%VEPN3|kHMhqWBqr_&nNu&OS&MEguNEK4Nj`M2(eMf54kC!7HM z5?glu22K|y28fw+H1`0xuZF29cltqMn`pY*`pw`=>Fw4V+v@-n>lv=vmjucR4_Agd zm4m85_Eb@$3aHyyZWobo6g2G6PS6fX22Ed1swp-{09HV$zk*h+L(zsCvq5|B-gkFO z)`L#h9XIqN?|>fOtpha|B0z6Fe?;TGNYKAcK(OVj2N<}u+0`&I5DeyS{aJX#5)7^E z8Mka$0wZUoS76P3F#23+@koFv80*&P-tP1mOh_7KPW@*HCY^0;Df?r<6!h9ur<@FC z)^;Qj+9|g=}zUdP?kAT^mZ(~v( z$O0DckrTm_b%2#q()E0Y1DG>1^txY(19Qt0TPKn>0QLu;!VmsG!TebfBOUoVFh7+w zmlFLMEIikUHhc0IEGqUXNRsw|#ct1kUzfLmC4UjWQkUO=Bl+d*fafKG(E6_WJJrNy1}Yd!=Q5@4Xmwq`5L;{6s+ZJiH0R+81A5%ig~v# zhVzzHkT^Mr;p)kGLGsENeouR052+NxyJnpZnwrM&RelDYidq<9oALCqBc2$+@h~5K zzZym;A?I1T`d~z%&cUhsiWu?Mm)Aof(HQYtXjk%<35>*Nl^hyYgpsbREYXchFw$qy zHmRvTj7**duYapxWaCf_SMSQi0wo%Y(-c=D%e;#_Zplpq(wpzd{s1;E~taJyR zxvrHxY!=)06;bZSmZwLBBFc`>dzHs8Bl7RxbXN%uBD)PrE^6l^vN-3j{S`GtY7`uB z)+$0IA4!Y+^(lxX4YXTACK0hiKhYz%3=xBDZfck}AflXCWS9z z4(A`~@e(H%A^YF8=u|^h$dt1aIS!3=M@-3N=b;{@RlPizl?3;j3 zu&59+=Yz|4=&eHLrO?>vn|Y9t9xm-BF8~?j@P|bD9Hg6tg|)*eICD=p*U!}nPVd`L zOzp9Nlm94Z{(cXE6X8q1fw=_7)h03=_3Pm%yCcN%g)AINtLW%5ItqucWyjix{)R(> zFUnu2H^7042Uq81Ct$zFHFMF;7O?M-a!oLw66`6HKb4E^gaBI&6(2Q0bmqUrW-1)LoZx~^Sm0i3c92?xSvuxzI|c>J_D zSP_U7dGzrcSSeUSt6#}r_1e`w2eD6Jja1_P*mDf5rSE^j`_c}>?f=Eo@un2Rc`k>% z`!5Q^)yY)nlye>1eXH_Ls1t^FdF!j>DuUsEHFIpkYeQ4^H)M(^#ysBAyEN*x7^rdjpR;rtjzdn0gGNnjYG(M>#qFUBAqoWAVu z*CL3Px$dsv$sR;AfuorCMMR@Gzc>)Ef~cSOd*uh^BC6THxPWu^h{_vAR~XkpltSR? z=#q;lR`ip9<_U-*`2Hxvu?3Og#p_<}+}~!mQnE>cj>w|v#=2MsB9$BO?&OI;Bq!3Y zOQ!sYwBwVW9#tO^f17-L)Mkl@ZbTjLXQvTyZ-&^|C<_tl^+hbB>=D6>bLQ#E7(_S_ z|8bok_ouaL$loVuA-vxN+vVJ8gg^3h`rJ5W=xZq}!ouWMmcg(dd?ZrR1 zR&kiG!TS(g`|ozeLiZcE>Xy;TL*R!i^<(Ex1q;HJgL{R?h{bT(|LO@PMi%6BMSXQG zZik#>)nPpixp3*}>bE>60$d!EQBmlehKp(zBFSJHF2qHspUVFU=UGKn+UHH+y!QBe z;?f*sCks_2r!ycMr+mgup&8DZSPJIdJOf#|!AIUstw7fLjJM9t<#5)r*3{*x6=eRL zzS&p&5i&)1;exj+_peD>ElPAjdev#;J?mE>efQPqJO?tIW{;ofrfb2e)Xlv+qjKS- zsfuuB_cu7fXVFb6RfA*DUoJuDIUK$FVGG6gI2_sYBRC_L0Ee0z0|ZO@;b71RPrf=6 z4k*nF3u&sszDZ(AYV|nmeaj1HQ~P1}`@LVfREJOZxn3#v(2<3 z!5KCkSs$``a}d@)pZ$E#w+z>Q3FXa;hiurKfrRMUW;>@2%niMVY z+dHXSxqLtPYg$>;Y2gkU7EYOs_UM4-sEYkM-U*;hM(4nPpQJ!XO`r9R{d1tp)_r*2 zlpp9NhBhiEEP}pEy@v8PLqPv~1utLeW-u@vsg=$z2Zm14p@OO?7!J|x%n}y^Bkf-k zU#M_B+rL}XLv9$1yFOLwZaWGl%5m$ox0ZpaP0k_OqD(MtK3Q~&KLN~STYubRZVKoR zop%OkX8?voUR6W>dBCVyyr^Q}2AD1?IiaZ=!0fgFhOg=rm@Tc_Fi^?@EITnimtkQr zCwOyw#mN-R73QUaGgE+VPSM0&+6m@q#=prgJiz>?%p*dFi@<^r(T#D61r}CKlPm=8 zg2j({g$GCb!IHK>uFxSJu*7nV=ruVCIB|6*2CREv`IHRL@weO^kNTj`BMep|mc(x@ zHiA_p^XDfuv%zX_^<>Nt_oqERCaYW{j^RY=b3LCt#&CAQYGqEhF&tE_zVd^D;RQLG z$>H-D{$^e=ZCfLT|91CCU;K8Az%L#9!u&i&FdyfHX4GMXyi}vTU7Ii>k99_=K@di~ zx_|k%-+PRhJ+AS-y9XnYGQyHZn=q2GW1Xt>UW}9>$J?kHhLP45)lvBbM%IH~4wfe| za&lnK$-jvhnRB5(vdS5wToe^(6p_LxANqlLs4qrgXWD(BSYcEx_m~BH0!DqSUi>So z3ZpWGCS9xVVze`ZA~(xcF;Xj#8IR)h=@?ecue z5XTnLsJorzC@Ngf&Y$!h=KeJ^7yNBCO+;P)x+Efh8c_;LA3ko`k0>|B6lV6hA<9O+ ziR=415&4Hq?0wBLM7Gvft(y}=WFeP9a?lY(LNO0N>vDgZeZG+MyJ18UZHgbvkU+#T z=DxRST-WaMe^f4ckBHk3h+P#7M1-o-fiE(e5W(f@*yGq&h_K65t-9qP!qstkuH^FJ8DYFv||%>TAGO1rEY_^;%FZ60T)XDIeAX;TmZlzAC00 zu3kCa@BFtNu6((k++L>&S9m=xNxxZy%a##cA7vSk^CS7Z%WVnB5&HJJaSQjS+5fI# zjtRrXvW^}ej~KYPZKUp;K`~r#X1RwmFXVy3icNq4swcq1^aGx&i{T> z4SR(HmdC`8!>&++1J_3MVaG(YH~I81Y}5L~2vZz{&8eJ6MJJkIBhRjbW;R0bueI`o zg10679iH%D%U4NQalTOX9FHU{Uib6AaK%wr5OHnizmx`;CU#Q3HhVAhKT}T#Q{?`$ z83jk(*_R;K$9?!gd^Gq;*5ZAsBL+&#|C0`@=mu5PbVsjR4Ag3AHoSN<0qQHf4yC7Q zfu>vCA=^eJK`W0YzT3zaw5R=uIV>>_I?pSeyD*dtx~Je?FJA`etxOj5N>&H`qWAWb z9yoykn^R5qsv^PQw=G-jH6R#X$6N^SeF;WP>+e0tvIL_UUqV`zcY?8%*Qdal7hvMT z<2WOQ`(W~&do=oF2Bzqaa@&6pz>KPm+r~Es09{i~=1t!upfmC~@5c@S#;fCE{k2B` zQw=?n-}DGDCp53v=sSbi=S@DB&PV~)N%Q5R+>d}Y$Y}8M{R!s6{0Vozr~&pd(J<3% z9Ki1WD$ zHjF?y*6p@`Jw~`3=REW27)JPnSF=bH$B0C0jT46NFrv|4zk#*e7%@X>pLjz#kDmJNzKb(h>1mdrNuMHAGx@IxQjc z4kF}bDID3ffC%Qoo@*rT@_M-?@`odQ!GKim9}>df(0EZ)osaPRX@#awwjkU$-iU3U zpAgQat!!ZkPj9M&;axLU`*PRwKxu8NmcYi3%(l?QH&6gw@r+<4&O zm0V@GEZOc9>i-sUd;+Sk{&Im!t%n2H8i8<0x+T%`lLTD!_Y~jsOdT%#+fErUGlvT@ zKQuQw+rat9#^Y#RIb?S;Cqz`wa69vf<_R%AI2ZaKNyj4^viftjJ~$WwSxQ(~f7=|K zeOhxlRiGU*hmCw@&$>hA$?mnG264!EexoIEL>|(|hDrJ#79kz8dc1{L2xp|rN)9%w z!KseIZQTmCa55-m$1~4hI3X8N9{i;Qj`g{2-1t2Wj)v+Cif z{PufSSyoX5%szbVAN7kaj5+Tkh9jthsJ$UuO*PhmPv`c?cN`l9-_)f1^29npiKBaE zgvWYN`E%AP#&`zQ@cQi@+9Lz%rK9|mE!IF|6Eh?&!V9!KFwIhWYyjH#)J@w;n}dJ9 zFJAo7rw6*7+M9D9Hi6zSh2r7E1E8;ucBn!!9}LKKA3d&r0SrDatS1S1fT7Mfo*_O8 z7&-E&=iQE4FzSC>k7eBh#@eo1C!Y-k6H>^I-7 z>r@2jDhh=k-s=JSsA@r!Ms%!Rj}f7veq*oq6nySE<&?18O6#a=!I^I>XgR-T1mLBTF*nEwD+ z=zB5ou)qu~hExh{UL65T@{6LOp?ASj?;%3vzE;3_V)Zw*a35Hfd+#TDwh%0LcZ;#t z6v0aHj@Sd@8DRCO`D%=K09frxIsf0|EU*^D@J(BMh2ggBs1J`%!f?0MjighuF{g&LhIc5>7AeCHOW^jH88RWPh}!y z3M1QVSn^ByVdUaKFMcfzj3QjQNn}9|quBFEylv$6Wbyg0!XZW&RXC!O+3$u??b-~J z(~>Z1@lMN>ig}DCY{RrYXoJ!0@^EII+@37Php#ZsV?4qa-+q0157F9;-282q5zUWc zC5J0UH0jTEwz69hwaqL)H;RU+e(S_urr9E@bna5}$TFg|T{g7K(nAzKoV25M3!+FT zK2#y+B66F?xf{d|MD`txu(4z#vh-t}PC0u-YLf_7w?BtSzNN=y=QI&X`q~Ytq@Re` zxPIwB7#((=-reGZcpBQz|fLG zcwd}B!{wt0FBSITonQ>YwQjNKi+hA{j}l_`uD3@xDXA0mTjFpn^Ja4VDF?Vlxclvm z;uu^ta{n}{T?0y*g(nxAZbLJrR9b#hnhV)zyWA5vIJC-s-}E<4ICt(fzP*V7#fx|{QpE-qsy;cPY+DaA1t0hh+};ht1E%%gtcHQOcb)w*OFu!* z``*@FcCO%u$=Xh{`u(6ZI8^{TW`bYC_Vb;a3qb9ub6R`a@jx9rvg)bhLtu*9 z^t9t=9hf%rib|9=1TzKFhO=_wfF5*r@^aW3U>wy6n<$z9j2_vDy*n2HGem^F^p^-` z6>#X*hDXGp1vN ztlGPM84oZbX_jB)Q9DL7-C}#<*91n)Q4RbPXo-=ic9t5Abr|XD3*y0^XpHo^>;`*^ zhLL$@gZAm$V&v<49ZvYpVdQ)x;hd#@jKUk@&!flfMvLM+q_~1nzAk1M*pFb;4M(jt z%8M|n)$MWN!^be{_Y7H(CWp}kCR9(IZ^dZVQX=owyf9kP?Y!pSe=#1R&)aUORCB#r zxq|eZ5Y0Ewl9cxw(WLC+oiZ*WYRgWcCn5HT`mo{0pGYA@mGq1KI`#!o8fDY!l4KC& zLC?&ya;{erA-5jL7$fpuc|n2i++K9=oUY&Pj>vm_SB~>ZAX3e~lYjWWA(CrVCguHQ zMA~VqZFA595vzH&JFOWa;=QD835IRlUR2d`H%vl=ijE{_KCV-DoQ?=OUq=Kn>Tsh2 z6X8qas^u$r5#B+%{p+!t2rpbD)PChP!lCn?B4q~<&Zd1mqwfmBZMso0EO-&Fxwjh* zDHp=kKO;^D?{fdve~j)|b5(G~X(8@#vl3h`=OhhH7Qtmv4({t@7UbBmlM{`fz@?(; zR|$bFa7m!QEhk^qlsYd1qS z@xn~Z94r1&a@4UY#EY;)82+zwV$=%)E+oi5uyess&+*)^mXC*ZO_4KhE|)bz#5u!kQSP1oqBu zAHS^<2YZgVS|>eDgq{&4UWnUTM7Fh*LaT+F>L22;&KAkL6od%e#-88RsLl8#)bzqGMYJlh$j;fD$ zya(Bs0KwEV1AG_rm%P8h4U{asN>|yw4g9he)D|nu1~tv8gs)rZpg#VSEl{opO~$c9 zc6G-=>xSp^A{LsUz2Z%Ro5^#~>6JfS-u?vi$n|t7{K^5nY+fb5TdSb|QugIz(t%(g z^NMc$c?=BkY!r7=-U)^+e>WZL7yu*askyR+0vOwNxi;}`4;Xhlv?F9)8<=R~(cAdU z4@@1NysiJM3`~c#I^FM-0y87k=C2I*0D64?+v!L@z_>U_%C0#87%O8p_U2gwW;*k` zsgVJgy^Q0xqSpf!P2j2l<0W9_OQfFU82t|b0RR6C*Y`gaUL42qyYD5bghEP+%9lbK z6z2%h5|UCOvj`cLltjo(LS;tDOl2jboI_N|9;xiTxwh-#dw)8Q&p+@y?-!W00MpW4 zU%?!o(a}R`Pr)2^_qq9`5X{>r)b!8Vf`u(rTQb~5!9oSgwtX%gEV}+z>~r-dVC^y$ z$(_&utfnY8U#|CH$?JC?msSH{%L^Ik-u(dBoyK*}5nNz7IOT#@ODtG9Iy>|tZUrX@NZaj$q<#DCVtfZ6>9Ku?>(xDw)bD`XZg@?Lr8hXcHm=pL&}iGl+>XdNQKY5d9L?E>dOvE^@4MdI@a9ruVG zEI0sZv5mLvc7K4hSt%peL-!&5^drMazXV86Xtlo7k_72Xho78S34jc}7iH5U-H?$w zzp*d94RR3;UDB_g#*C4}xmhev%m}NOh_ac+jHA{MD8C@4_pW@g2zrg_PoDMsw|WQD z4~kD#8L47gduDIJw{T4JRVlJMupZO)l|N98JdLR>dSXRi{$i>}OUhYYB~0C8w9#U; z1XJodOdYx3V#+;}XMNm%Fh#uWt-SnJOs+J1S)SU3$<7V7TRb2pZ#g9vojiw0r8wvF zf<7kMDeUT&IgCjHiLL?ttC(2CpDLc_hKW|5xk8=en8-UC*ZF%M6F#4}94Pk31d}iH zSJ{1-z!3Akof?EzO{t&rN%m+Z^SiLml0RA@J(86RvPaA36z8KVPa<~0*vP<7FyEKv}MaHBG&V5wUT=W8Z^;?ygH$%f3>yp(VjHa7k|~QC4UO_!hgEoGHpf2f7}j;gQy75s!Xu?;p`3Cm)rXED&0V5hgIdN4@ICG z3=}7hG=iRZ$Ciy_ji8T6UC&(g0{y11?PL0Wf`O9b(~cc~!I1du>*{2CFzof-ZG*!k z80oe5ju=S>V;YCQma2||@g$x-(?S=)B>9$QN%=i6nLVIqFOdtF7RIg8GOxfC|38Y% zI|ndTcDXVk*&9sX?%I#8n}He08_HQuZD6K(ari@k6qxmWa-{F$JeWHyAs?{wF_;@H zuBo>A2IeEp`TG=1z`{u`GSPnkEU>bp4c@eY#dl^Mn-*&U>xy8FtCkB`;;FIw;QIqC zeGMuYnOpHOKlRSZ@35LlJ-NvU?Q2dmvCd&2bp zgM<^WGKL+lK*F2#dn}UlAc5tz(%@?diFz!#dV4k`zH=&Jx3D3JJeDLChl$${f_oQPW<)?7X z^B>Z&}eSi$kAu3;NnU@xRe*<}39`2}fSloY2ien|WGnrM+=@Bc3g)9^?9jez(*@t48Un{)1NhC)R0w zJdT!IXjDs{lW19T(@OM<$B2Dv=VG#bK3Xb~o>jYz|4iw73eDo{XXS=hJa+n~cz0Ps@F?jhSdpF7Hg@p08;3VHp2%z7d+K zx?a2E-+446qWGZ3R1r;EQ@4C>I)SEgE8m6RGelFACwsP>`h=KzC&H=AL^K&s7@@QF zpoxE0h8fl7X#5V&xCBq4F~0S`T^w0xGDI*iba!K4S5e z??2Qp%y7{O3q`%3L{3)sjG!K!9j$TuLs8d=xYTa3Vbu9pP_`yd7`3ae{+sLjg#Nh{ z6^S|ALM`vDNxgZcsHuA;aSbd*4VxdvT{3S(wP!{~UmEN{l{DXVJX)!!%#o+5!7>G* z-1_6ZbD=0F@KDP+<7eniQFv63UIK8dv0AME7za|P`3K6w>Or2QW8>`rCs3T)d`|wb zGxz~xA6iD3fnUFaT`e|U1a*h>6FcIAK_h9N;PZe9nyWwPj+e%OKT-GMu6=U{tyY)E zl^3KyhrFH|UUv+1uI{aWHT4K|TLK=+u|J@v(y%sv(|XV+_i)EGNjm6%`H_}~u7QE& zp$8W$e}W;4z5Y{GWH4OezE8g07>vrc+$_ua1IAt|YhR4J3dWbyt0H~Zf=T&}cST&X z!DQe0)|*S(fEf|{TwJObOr07|2#|dardE}?2;Td_bXNHHwh>b>W65m4@0tT{bUykYxzX$9s`hFh8ZGc@frIP(p7c6@{zpC|+7pxpo9*=3Q z1S`WMBfJ(|VD(j;!P4eKkg!Kus59w0BzUb+HL1st&^jib7Pt)(57reqIOaiONWOrn zE)5cg6L!mpv_g{l(|ND4TafhXp|>EHCnPO6R)@7hNY=CZ{hs9m$?3-N0^4gKg=V<> z-r)<7a@D{w_{?@lDKKy&MQ}qZzoC|&Ya6868~?6zGlkTj*QB26U57MrCspU)y^!YS zAu6|F3euWGid^?HAzk*Z#LD9*kRDK=?;P0#>Aejn12-P$_%p$n|K0@|k!wS2vy>oX zdT&<@+ZQwD65gFQcgKtvx6(irgc--qZJ0SZi0Olpp$+)~oINyu{C4P3Oy6H7Es+(3 zX@5f0_Ek+{+QW+h9d;R*Cb5_rJ1Z}}ohj@2i^TuL% z#7cBU;D^3m*=A8<#fLIiGMglShN391P(QOMO%OV}UC#O%7swE4;+4AL2@3BO z7oLx0fp2#70}~SuLHU-p=ppw6Q2nb{B<}nJP_OdjYOoj?GzsEg2Uq35?+G4*`UDdA z`@?}|)8!4?;zqjG@FalFqhQWt(E)U&yx3GZF${Y67cSIkJA+U=Q#9hz;V?6AeQ@1yOaaYWzC>jYS`k#(_ zF8YAU)LinoVhLbgm6A=ratcfdzI{k;l?78(J0~B6VleIX?(v&~Q81%)_!yh%3}z-P zcL^R~fZ1dVg}eO^z??DJ_T$e{FwdV-cbwP`<}3Bhe+apNg-0}rB33L|JY2Lne|jfa zoN!Z7&z=ITB=~YvR~9T8t=Xk=>?UAu{5ST~tQN2s^i81dT zTUg2JbmKZI}ibHiDgZHok(4vbHf9g*%XI zdy34WO#x{Y2-CBv#t(8i&RqC!?NPB{Oj|nR#dp&b z)8cHA{Kl)8rsju#X>oiRcd#{f!4|cVpu8zZNw@ zF($sOdU>eW1{05bS%1t(9uqo}kA)28V1n0E8Qo)Cn6S&aCUbo{$C)(U!hmM9(r)Fz zrSJ%?NQx{Z?uizbA(ngCSh7~D-j%dN`ug!lpmS{dr-*RJvGMZ!l$p1`sM01J?RyN9+Xx1aj`jLJr zn)$IZXGb>aS?e zKD(3CSr@yGKh#J-J^jr((HbXE_pPth${(Fk7wP2}!X9qaA@);xt|Jk(9@WSR&i;h{ zTu7nMrrko#P7`7mY7|gIu<%^RWh zXV>UD-eh{{q1P^Ag-K02z~iRr4w0g6klsD#=wA^G3K)qq)+KYQF&UrOK{x zpnWAj)^MGQ=r1!_#IkARtn*&78`>%pvI*TnVGMKC+FsWr>$9+>-} z-&!Ca0p_nqFg2&=z=C-1mL1Gmu+VnUL~wF1SbX`ka9DOLVChaOT)R2I>8T497e`Kj zrSIP#`d@wv*q%qve_K!k%SZCH8}E34z8 zJtBAVL(+0Lzpvk6NWOelBO#0k$$6N+IaUo)1Qoovp%0`ur$5_$VJoE6?S{havyi$s zIpkN68OIeV?_F;>T{V;`vT3Ibq-h>8cr29+X>ZF9T@@;Zbke1wknq=#ZZa`O_7I2k zuYTVWNi&ckBB5sL^BFSkmf1;UZ-$I!Yt?oaCgxh#*T2r73Nx~l@)E<8Fhf7E&AsP7 zrqBI3_g<$P(<65XAA3W>^dr`?I+tExTHCwufkFe$ei_yjDjvo(aS4t2-9?yMdL<;p zY7|qgLL_E0gfW$YsRw7wFePnN#=KJsQ_k?m2Db8G@`R#(5l;aoKf9#IrS}(;_q&9< zarP3a>6wVc88J+9N$TUXJBvv|c}(4VKQOWIhsq>D0TYetel4kaVZv%ll!rzECcOTa z6j(Bd32J{QrR0{-YGwLpjlTw3T^HjJUu}(6&UssRcnYHBmln-$%*zq`pK{LX`(VW0 zwvN1(i_=YJEkzwKa}g^ksy}cz7cCB-zbnc07%lE)I2PM0p#{h6I!782&40S^TvN6Q z%`Hq9o-aOu=8pQQzGo|QJQ0w*8o}}8Thz4&NEgk}HIH_|$=cSr>F_S{$O;FCf<)~~*l-1>{UCbIGeE^?#J z+n;4FwMC(}`HPZz|pbxe1R-anQR6tF_mtO3D?2YOrek5ACgrjORsUFP{ zYxMK3Z{Mh@KPm}MI#wR!hw@LXX=w6zhSCP3WiH0%o#rpB;CAp^Q+)5pQXKfJ z{6t@f=?U5tHY-FcJOZ5prnc(0`9W96_k`6mr$GcO5&Pgz4zc@!$A^vAgDJbyavKeO!SsLjBR2<}!1Pe$XCrnum`VQiVqBUAX07N! za&Mi$+|HAcO8c*ax$fs!SbaN~j~^oSb_#+86Ls_VA5VZq(d1sgg%GgVy3sfAbsJzs z`D$0n`hg`w@=>GmXu#g&t9MC$GhjDw4E| zV72zewbFyykf51Zz14gb5|SxigM3s-q+K&O!_xb@3Erw1Hwdy(!E^TL{&2TEUFugAAde3z(sK zQ}bp1drTjAd-hYiGp74CZ8Ku8VES(2Cs)hMnD$d@J(Eus)2?gFzE26jG=}}gmo5dE zn&O}L!gV*MYQ5eXsw0mngE{I>C+0B4@7o?xBNa^9T~&Ec>KG>fY?QKR1z_^^X7w&y ziph*dp}frzn3PhL{QLN0OwuYD-+AZ*CJttgczNbwqF?;0KW6cmxZ9u3g`Z-=Pdo92 zJ?WTm{WR0JVFeQyyB(ur52DqxtLoAMqG;u5B01~XL9|?RY+JB_3R>oEe*Va?3bD1# z%yl~C(9)B>$AvDUh*f2>{Ag7Vv3TmruDv;l7Edd+?r!cz3xUzV=PJjIim9<9r_Z2y zZq*+8Y#Ew6;kPw~=!$0j%3^<;$Z&QD%UJgWk>iG>QLUONnm&FaidW=3n)0z&|84LO zVwT=UX=^wy+5PQZ85uNr%>7HB@-mtrjjq)muSa7ZKUW5G%+Sb6_(|dwjvH=ghKbaA zG`KkXSNjsDb6kQ1wZphk-|YHGODAE}>*QrTdt487PxP7@58gvvcKhRqg`EA-*e&Lw z_YJkyD4Nx4-$sARZI>!cyixNvw{E@wGHUp0&2y<;AJu-AbJTHpiz-di*D1{mqcZ*X zf%TI9s3^EP(5O)tWjSZ*?=q=FkynM}2JUHsm+PBL=Q`3rW*4#Il{E=`T``t8r+g5U z@k%)Rzi9-Oq87rnbzGqK#qB5Arb(dTm67_E5L?ikWUVAx>k0mRh;&t;3xd|%aqfsL=pHnuYxrn_UfbrKJ;G-}AM>);>w$bQaC>_9DM85bB6d@% zp%EBG}=bY#4-dZplBRJdsvzF5{Js+OxxP$ra z`5#>P(!hLg!~%VnDp*MNe3I#y1r}|b9S2|Q0G5n>vY1>xU`;yj`*mYKSjzU~H8bB1 z*moi{F0c*3vSQxv9Rp9nGQ0b`azY_k!GZ#!?hnDLm)`fI;X#nF*>3`)*B(6JksOAG=+4_q0R3uTSEGe5usDvFCb$Nvp;383uFW? zKceaVf{gLCqv!a=}nXj$A{yxYj4_q#e|-mAdlGS1uO16|^ z=&%u59w+ey2w0=#-8H`?VmUsThef0P+-T|58TXH`?jTmnvXgd6J7R52aGs84p+#-r zF{4643x0Jk5}TCK{5Qj_D~Xd!!>5>%&ar6LDVMj+rU}iw7u?kq#6;5r zwu+B}-lOU5d8+H=o};PDtRqbqIGyrBe%JPKjtjL{32-42O>%pcJ_ss9O`Yy+$bd{h%LlshEe-!Gk;@KKG+=KdH*{~<$GU~~>VY=bY z66)T?cB>8ii#nrS53A-KL+zs9M5;D;qkj~e$p>2M==bnY&(rWe)K~|GmQwgp-Dlf{ zPo@V@l~OmCVT3>WL5rZqfO3TEmTJi^TVIE;EQvGMWv<(D0OhK%6>8fDw4IW37cI&?M;x}svZg&0*MhRY{+q8jBjV!F!=M0 zwC&lac+lDbe;srf1|3VOJB-AuL06DygcQjM^a$U7crZbR(<9@jANulu{zG@DnMEdG z;5%Q2+XWLaq+hBRVsa1+_XIHGdp3YkC#x_srZ^ZUUQm7#`4LQnT$%kdDG4T@7IqOI zuLH~r=Nfvbhrra}}scJ~L zKl`V(BLxyV7BqXh+c~)Ng0ZEP*_Zus+A*t!3uA$om zBrC0HQ}VnI$*=5M9&UH#?1m=wL`;E{YsYrToG62o%ADKJ4;+P5S!rb>F9xKBr@GOK z_CxBT^!^QOS4cC;u^_aELt4qP_2)w#L%L*>VrY36qzBq{9jWGr^hq8@qirr^=zrvV z0kx2kf3dCq&MwHcl^$#Z0x_dlspt73KW1F#;!6DLrN>3iir z6q)S6v~sg=^5YjV&EkocvkeVXSF?`J4q0JpR9)P@=~YZUFk<(@^E9T^t|rAUxM7Md zuU3KV=Klcz0RR6Cmxm)2To{M%zL!$j5|vPqvP-0MA_|`hsg#wKNCPFQq>MB~Qc?+J zl!}ZZbWVxvy=Cux-D_R*yZ^)cywCH)6uPLXwOcMG$BF-1axB4QZL#M(S^}8Vw62VO zI|P$F$c{S|g)xbbX|*+L5fhUd(~nL!VWMuflbFI*OlXhr7+*7w3Er-)AnzL{2F#DUPG%@F+FBHxn%tuTLoekI~}tzWm(cJ!%YHb?vXx78$@{{v^XeQ~I`ZBnMrrTourbDLD zw7@$Pu%L&g4!w*?nAwTgH~lZLkR)P#wND$i3qzCrdoGz}UqO@NE75Fc3&cE{yZ=%9 z5}IJNMEvSQ zmvwvryOTD6^u1;p@r9!RE!&pGowERib|P|~$Lv8_!5Kp2R0ODg=6lbK@eWt6n_9_V}4 z6MbYQ0SxSV$4Ryc2ZKd79YULSfnmD~ef5!9U}W*Czv-p@VC?yG{q7QBFrieb=8%01 zFdakX{$1Y;CRP5_ciDRa7J(X@A&CL2+%&X^GYi;J$q5l}--9XVb^T$hlEAe3-Q%jE zi(rPd!kTHm0%od$3(fo8!EE%V>T>=%+q(AOJ`Jp`8w7$ zKV=eFh%2ZVx^opQUXJ&?>>&x3_J_H=>P`g9tAjJxbUm=#5^`esx&v5AdVBov&WDho zWqoQV3WS6>k3Dwb?vTh6Vh|jY4vCjjLR}JtAhEHLuR_cMk^m+DmRK?*C1|7{xIGWa zeD3Xi_2(ejGySl-MIt1(a+nKC7a&Dfzm?`x3Mn6>7*fnQNabhWkVqy#s<)X+!I>wJ z+L^67a*G3Lhh=?j4w^z*N~Fl-i#w1mx^B@^Gy&3Yhbm`F1Vehia8`Kc5@Z<1K5hJT z6f!bZe_P!740$BV4v)KqVFr45X9Jsp87KSo+V@*vI#V-+#}Q-t{rlMkdX|{JxynIf zX$;e{`9D3Fvc)u$|3W*f9WiytZ>`OpB~0~8*}6kT1XI^H)Sf#bgehO=gm=fdV2Yu@ zP!3H7le@Pa70wI5SSvcSGSmD&NA^ijL|LPioM>1dp@YL3Fh76pI2g@TFh z;@eVnBruVec*Ia)KPJR>&3ssQ6%+R6ZXB>=pp|!<9%#F7LCZDS6;&Ii(K6`}{oA}g zT2lV2yt#52uKM;v(tJ}bnTI5=@)gE-=BycbsgYA>2I&g83H z=|i(On{CeTXhSo}%)9wlxSY4ld#r>Fp=q93#eKQ_XiB3$HS%ErVxKFTQe>1P*7G+r z;_=gHvcNIT6Urjy)Mi;TNjJpYQf^o_%8$n5TC_**>7db-6)mhfk4CI`g7$uDMMK#f zv1{IjXi%hlAZ+9V>h}m5eZS!>>aE)BonwzCK$nK6ZM&y!PIpgh+O}=mwr%Ta+qN}r z+qP{zy|Zt!$$r{jut}vpRZ>Y+3OVOK_tkQyhQx5LAl}onY8%!O7y@{nzAh^)vQH?p zj0J9O6lXj!g0Whyxy#7$2t8dcXmB)wlu>vn@zK8$RZ!KPyZ4-P(O_~ANnsY4zh@XM3x1k4(^*TE z2GU`a$WS-F6R7(YUC)UFGRwYBLRGa44f%J-3(J-pT*#|io7RiD&wfN$(#z>5HbPgL zkB=QH_D(r2rvVQvg{9haZ{oiTh#N^PO#u-ApS|6dRRO7v2vqS3lJKvtKT5sR=LBe~ z5c{RygG;-BH!rhC2cA6^qU^APF`|)KSzK1Zn$FyoE&nk-3hMNjN6SoLFdt_b7BUzUPgm)cm_ZCRCg*6E1-Au0_V7_5bC^Ojv=@i*amgxP&a&Yc=1Hjd zf+#V@dM|MP!7r8mVH)3}+5_~_B`oq_=RVV>g|O)Ek9#veiuYA+o!8}rnD>*XAIxkO z43!QE+&}}zkt>KH*{>ur0$QpL9W?{y2ucfD(t~jb+O>?qeGMTCNoJ_(&=z)@kadu5 z2Axw{6m&R#mwegWc}RXnSfr-phA6Qco*Qppg^}bkvEFX2V!^;jZ`r%q-i-W_mf-oa zBpO0cdOZADQ)Oo0$jk+FxS*Eq0Z3&2D{eEsAL5XLsOcpw?y4Et>?aHP-D}e9E&b`D z@oK}2fF@U^s(EqX4>Q1oG4a?9*zHVe@82V!fG!D(a6c;jdMGif4nxYNl_hR#^ga(j*yg5GZ%av%`7FK9o}n!zVK z&tJ<`xI6#F%exGj^AYO^OVXxD2Xwz zju|78B$G(UTjLo)0aE}GCg;KhJT`c#Wktf2=w%^Ws4=1S=4bH)*VTS?pTg`kuH78dmgu9+ABXR zdkTE%S-ZHAM~ic{mtS^J#>%|`p2;v&Ebm>>L(7X5w{MWhcpl9Xy4G|B)ZvY@%894X zqw(j0%|mTs6(@WYk=Y%rdd4fC_w}~)p&K)36$TinF73LMaPof$OKnxDx4yXT<=Iu*b&vw={~Y$K0&o_Sy$gnAptC!R2m z1ok}7l=g^^GCLf#`*#0OcgEX*&%qx;%U$`f1FHJMee61Q6j;$f3|y-SFPLE;Nq9fJ zE+~MZSlIDl0Z5XH;wH*IIK{-2lMomk*rTh;*i!uL`75B&Z9^PB^gLO-Y2U_^W8hY5#u5yh_|MTHk(|_H9TuQ2)&C@Q94quI^K|iE%U^w`x-sp66FD0jjGclFu`; ze{h+|KqVw4QNo>_^!6bqnJ#Tv=kQVb>PNOT#;)fo%hJg;tC9F$i`(WcIPvWiD_Oc; z$gx^l$ID?o0oa?_X4>07MeemdI}RfRijdFJxiU7v%1$e}xkHddtb7i;9lF#-)Nvgj zRgu9>fNobTFmhranNg&kCqCk@<5L+BIVEvICYfbe;(u@#2BELG`*?*Shfp6$h=MA2q!>%nBgwD(JjHUc)!cgwnzfU$4hqb^R(urXUcB(kfq ze~7tWu4jo(gZZRhwHsV>{drTeH{doph3{8G`=T>D#W{B;wT2%&n&lRTuL_4@-~jQ^ zvM^!O@2(h{gpoK^RiC+Rm1BVkE)(HE^p4s2gb&>=tns=1V%5wnUa%%)3I)XvDV(X& zuQW_!rGYCeHD7`S6BhQPB^+z==;L4>wlbYW;l@sSr$y9?xk-s;LcMRVpptG(aN3H- zIb~y5pdxYD>RJg$T55Y1+Y8;z{8k{v$<$)O@sZ`=xRX6!&#|p2Q_B=H1kZ-qu1af177Jsh7Q_z?Px^ z1dRSh{-kx+C)*24enZ@Jye9j&Y{*2%^acxQk&(*hNv9jP!UfN2)maZ;1=Dp?vz|LT z(l?#Pkd)w&R*aS9xdU&UTkhfya2~wdL1WAJv4A(c0`6+wZvp!Ezt@R#@N75jVlXji z4`1H-Nwm(54yo+Xr~eBzG*4B|Qy#M$1c4kv*HSYj??~O!+f$#(-0IW|J*5}Y*;iu2 zu{!=o$Ce29x~iJRlvEr-hmNq?Qr=Zm(Z$V?p9H2+@; zu@l%63~}g|sdk64D$%sTO6$bu> zmcA0?f6lM63RHaN4k(I6(ublL??mLAYX6+!V9OWnqy&WQh?cCT#V!irix4kN*HamU zGE9ue(@zKDRhhi@%ByIL2ij z0s5jKVU+iajHZBeK1%AZ{>N!DovMteGutF9dKq^n8v%#)_aLN_EjN9fu&RERJ^A^Q z4GRG7i%LdYH;xiUR4gW!&CtJOivN%6o?>j4z1pWupiP-BjmIl|(v{y8&n9=I#ALA4 z%~cz|_ry)inK%x`T?UY@VgLTs&}XT6XA3~JC9mLMPfAe)>9>&T6%4aZ^MamPW=_sM zEpTqbp$Sy>T4jCV2Q0ML}-JieEy4taMc)OXUZG8|O{hwQCV78l@VgGxl3#ppl|g z@LM=PzuLC5+6H0Pzdgos!53-qq<1QUhb!819`;tN;?Mc{yfW~O2f?N0NlsO#P#HW;0(lrpbCHKmJ z0A%*IqV_xo7QYEEI)U491i2}unDY*2+<$sLEOuY8w#~<;6?@Mh?c?D-*;dT zUL7J1`hbjauh;_5QVMD^_|o=GYhM4i z^`a54Bdz|H;>8kWC|HYA+ww3xEPzwC_rX$&1^{W$j&N+v*eK-TO45ok83}J$(=Y+z zR22OW_YFN6!)M0q0`{ZyXiTR5KtsQWQ8U2)oK{_YLT{e+X(%;gRFgjC9ivv~q{- z@~7%vdqjxsyC5=`k4}(ibXXPJD3qX6hJ(Ejk%Gk%zpN# zsVsnTh8rypAD}s)Osz3TpU3)$HeUY}bexQti_R5S`1U|!`3h#1u*nitn)6Eqwn>mY zo7ML8rZJi<=~2v z$26Dmuw!E~du~D-Rs_yJk}rsM{#BTFF}F9r3T`!futsjLX$AeL;iI`CKYS(og;YIU zsMjBFC`Clwh8tbA!%#WF3pp(Aa%B7E%*c!T<$UV_rQd;z1+9S zA>ec*0$5QGZ&-!8Xk;| z*pN_N0+_$FB4CE-3+^a2#{05L+w;yxYJ<;7etC~Xe}gn_cF2`EZg@5=dMwYL?mIQD zp6sXZw!qQD=XNn*|BgGRY|;CEdxYDs+hCEpfh=fmuk4lc-i|WG(lDMmWnz(HF(|J( zx#qSU+%mJ8m}8N%osUXOH;=rzp+1tRseNSzi*1J|PPLDBPLg8J(C)R<+FxT2r&c)m zessge4P#18dC)X}jBj>asQZP>cHQ%6q>79{pr(HAeK~L>#`UceM19_jA<3CY71x2^ z8ye*`S}3bVtVUivQ~7;_iWJK>BQ|x2BZp(hQxW?vYU(yZw1~dL8pnUG`(?b|om#Etv~k0!Nxs%|+5;x- zdmigy%Lu8S8;1sJne*fMBuCR>1Dx^csN8zm=r=&NKEK7f2g+0t;f9fXxbJf1;N}Ls zDX_gst96Li8#L=N5Mh|`Ch%<%zdzg;p3Ym!2Hh1KG)m+6vq;pU?omiu&I|ya>U8{7 zz}wI#xh-g;go}Y{y)p_fHYgytGTlx`frENg^$Xih)qgN&C7^!inLlx0G{G+OmAHH- zkL7THSDZIZL;=nhVod0qHa)u|em_xk%L?km3jHZRMAADkKXg|eN` zd>}eVxDw1&WpgWqH(en=_G~w}S?x|$dII0Ox@r60Zt84ru_5;_-hBU}8}c1gcDWi0 z(qb@@Tu-{%lFMQgskdwnvIV2?qu}PU?14-=VmF)6HZxExNDMaZa{G_tu3|-V)t#1Orn@g z?q#UJH}fK1ou^rP9(+Y>V((fxzsQoM2MWWsX#wgSRLvT2bL;Ws`r6XOEP46OjNZ-} z`(7%ljRE%y+Z#8gTbYCxBL1?4=S$3|e+Q-Bq2QaOY~9eKzxIZwj4NYmUGWQ#Wh;_> zoQDJv=(7%Rd*`#7J;SWQ>OQ7FMXc-Luzp5*>}hXkzA@)JouPBlZW{iF-Vs>b@3V z)(8@2in`I*j9DM5d)=!b#}7I}4!Xrvdx9$UF~ZmzgwWtE!>4()^7#0)h7_pFP~mQ+ z%%v(he#3Tsjg3V}an9}PniUoViSPTXdG?-QYSA?c-NNkGTP52c1Q;6j8;KYFn~m+XcgAWQsG5xHr=SfX^3U=3ax_M5jO zy%{day#${V-qvtGTPD%!BLcu!IQ_AHjX3UQY$iQds%x%$NSRs3eK_TU zS@T9EpM@`a^FKI8E9>Ef{aPVV3xN5u@6(v<5#N-&?WyV#*PgC2E639ww|44tXvRO2 zvq_@WT0`n6=Qw5gxBRLzl|PgZ0JQ_WMX}@VEDUl!um1N>1z(YT_XW}gV7U^7)SdwM zy4drD$%Fclbccj6;m&NDlXVXDeUj{MneB%uakxYo(BGn za6yMj1kBUKO7Xf=AcSWXJuSVQcwo;hm^Z2HzJA^)rLvd^3Os%7^Gxe2l&DJSvJ*O$ z{-(&0tMGtSAGhhuO z_NbGSK=JCxcDUnUmd!?qI1sV&jcnT^(Bqg!*v@Ih0Eo0KeZDGK%%D&!7Q{b+#qM91 z4?1Rj_c!B7`9U{*lBIqDY*#R3uNAzA)57s>qEbe?l5}J}^=%CnEeMI|g3hQl=z@x} zPS2b7LgH-m=MnuL@tcVXCES0Hfp0->(U!IXux7?CWLhYSK}ohM^De|TUsKb`E+a%& zL5+w@W1#ad9o}#9j38%2z>1z_+jxV7x#Kkpa2%niH6YR#Q{kVA7Fj`b=I3#3d%Lc< zGl`ibzmsr-j?*H)#n#`_aEd=^PREB9aW-HZXkU7{bW`$q4zHg&Xs=ed#~DRl1_#>^ z13F2K;ju>MnLM1FTB}S!D0uE9tv~E>(b7@{1+$%*?gB5q)HFA@E#6$dPp>Sb|8(t7 z6maIJM1{Vsu>C4D5u&_3TbFHWS~^@Lv{m|*s9Nvodz$yw0-dUl4&%^3!SZB%HM_|? zms~gjHG5gyY&ogqZ9bd_l&XKk&Pa72U;U!zzdVxc!S5_ZsZ0mBG&dl~lq9`-KUa_* z7veI&5d{uUa2^=j%+HnCsooFMUYo0nUmW3-_}lwjDH#?alnO^O6xD>vxPnUJ zx0oQgOi5PZq)9Bi$#F*51grMS(`(I1=kfy|cV+joZmr8SCtr5+KdVP}^OJ9vwF@1@ zQ|tB_cB^6p&lah8vRt~_ae7$eoPE$#psYEe85o5QT2uuGvNZYmp+>13m}_>WqZ_;F#uBdg&=p1L8w$ z3>}8it>FddLz;MZ(Qm8N@wsGT=FeRA1rYymO<8Kzx<@ z*V_AEbW|Ebe25baqB&2v^zJGo)b`$Q6eOy!q7e%&Tv|23hW$dw5fjvSZS-cf@;-FM z>BDV%+MglG<>{+k`k+Oj1VXwGy73fR+}43uMAf^C(+)w_;(Q`whlq3Q6RZiutx= zBTLB$lmq&L4wEiN?tf;~IC$fOE~(Z)Kw zyxhFVo8bmenbezwdQ1+ArCXG5XF)Smb1*EP#M!w3LWFNA1I(8&YwlPkvsrl=i(z|~ zz#qbKr!@sdMWb*-DA3#<*Ez8Arr)~Om2mt+7r9-h=}<>QuEjQu!txt+0xwk}$mVpN zwH|ljtmacEZTugWvjzpKXN;a0&RfE2(X4wcwYCI_a@! zBKo2fmAamtD1hcVbyueiC&o1MKNtGwkbky(O=^|jf4HHs`-J3>s@J_Kt2nx&?H2pi zp+3DqU_z}Ww2FWc?Tw|8>ZHHLw^{i-jdotduVz_tvA%#Ma>M@sbt&T%k#FtR!pIvG}TLclFvgL#k^DLGp8@nO@ zZuu#)d0QkP`ZX56obyWmDfN_Qt^f0)+26e+#D&sMCJ!Q?X#+inA%meJ6Cr1xD7LfP zwx8XPr8JrHtNt(glru>;nJaNdY#WO60in_0^2NmK0Ywx=yZ4IQPgj!V%-Bizl@#;8 ze|1I4-1u=*Ym>wF%1h!!)5t7z~p!f>xH4~lID<*WY=Y>v8Q%AdvIq+8y?9&Jy27PL|YlF%%h zdk9|ywuatYF0EhhUO)`!7wReQjyMl^Y6-Z=>v22xSgqmC(k14<3iyMpPj}~FquYUG z$FSqV?obBgY<#q2gt>#2Xa{z#Zi_R@e@R|kJaFl+e*H2H#1&5>>>o&o?EtZ4bux6TFi&y=sh6n7Xza9&M1j*icY!R5`+w@ zf|#}rT8MYF>h)E(<0iTd;y3Qo1{~VH<&uD7iF>?K>iu;hP;7=pcfp+DKerFj9SseN z$CO#G&*(04duOX`lDQFjpKQ8Ka+-=yNGw)EqmRNVG!-d7iem)BlXN#|0$m_fw3K^> zGt?YOvhfoBVzS|){G2Lp>Fodbci4?slw`|v7ihZQ9tXJB+>Vv>(Mh{!>s-;aD62UcXKJQtg})f5b)-w8Ys#a&Uv4T!9an-K zkRTW#kNo23@MJ=mnyZ%PlkF8^j?fFjgMgTAI$kMJ-qvJUG9Hq2UJ*-LN>yvO=-) z=;JK~lQicJQ850NMvU3!1=c-G65)Dk?Wi5Lz(2VKH|KiW1-=IhRcNb471+uPQ|@$x za^ktQz*E?WRO23TVZ^oNh1QkXbVm~?>*QV~ z{_2If7ryxQk0lRo^7ZocCvhN8_BpaHaf|A8sYuynt`hMRrd_L(N&q|?#!J$S$2BlV z3;dB+1By|GB(-(I)W1Kw5s?$Cx^Hy6+5zKwNZ(rW?JokC52HhRQFH6wAN^)*cDjXG zaHa2XHjOB6(96#)3%QY-K%C-8cH))!K5Oj=TVH$h-Ef)~^OTmrx6ZD}T9gcbuFf0R z*Do%AvlTN;g#<9njdqjJ4Gdypgqo~|=deMzwUrP;1i{3|p{~gVkNCy=+Sjwbmw$9l zwN-~EY{l3;l+v9EBA2&>j9r(tcufl2nFq|^rcS{)%ED@5{Bvif_AsLCOqJJXIaK3A zfVSgLMUDAl28H5bO#tyHiC;BS-{XO3Z106T08?TAI>KtJ)(?BTEuQkn&+a{ycf5MQS=wx|S6@0+xs3T1|J z<3G{wEde+9Rl>)Du@!yXtmOEBa5$@N5FfhfK#&2E)Xo0eX!bG9_KSWNxBeyP{Opug zIB6}^t7b5RDAiMCXy%6+OO8gP+?m>(F-6Jc4n3W2O}H!eOY zf(K-o)r9t=z`w_8qtQbxrkT((@pt8@=eECP`-@eDFKga>Tu!N57qoD$rcwGd#8cma z)Vt+TnHSN@Cg}P%%2saXBa|~n*QRJ^ z36f`~B}KH*I{!C14~w!EJUkrXw)fT_v}o#~Cq!=>2sFpRwe34F|0gCsx!n(2Mwf7T z9<$dUbw4XBkfu2T(xoyH^fs4%G~xm8mb+B+e+dC6g?O&QYahA$Fgb5CZtUfRolmO(4DtDNsk(r&@UMG?m z^gA{xV3~#lq`e|0IagQ>EE|p0UfTtwkJO6XZFIw^y@r1gcsU~`T~+P;!tB&neDvAL zMJJ%}ZS6J!!Wn^@y$^0-U;^qyzRFd;sRt+KugrnEJ%>UdS#1frEOrcf{O&))kH^ui ztFi0NU5$3HS?G;ee6(H~Bn996oCUk#KcgsAG_9Cz>GLA;CNDtjs^`?1fXcnkT)3_l zbc*xjD(>Jee@PXVmwU+BYAj2U?D#6}v0TKIN=MWIt`tzi+ z^ll-D`jwnDJC`KTB~Yt$HfWdtnZ@vCWod9cW)};=@?X1=2zu1otl*dx^w*usT>e9O zBLw#&2*ku^{>igx7=$$x-G><0+p06Yssdq1LRO8%gro(y*|aui+09psBjOQy8aX{ZH7>@15&O+iDdmynj2BcHfPgXaMpQ|WZCk&-B+Q;7}WJi z8IoobNP>dfKGIDVL7SEw{_;jMhu2QyB+Lj7%~_;7(Ibck45aRyB_x(X(NLtaH^_^< zriK!X#gw(5lAhY+2)badT$;BmmjUR>7QZMkOx$(!Z1A2yy9^L2DswnMB=@6&2(vK2 zUC1+es`RJ=FmJDudyaf(=Um0^M9(B=(OM;2^Cd7IwS=Lyxs#wmkHq6n;vxg<4d8S? zc?baJOdB?9ct0o-2#pAt6~O(8%QeHEpASfAm4R1_@~#Q;?6XO63k?$qYgnq@~VaQwXon`h^fc zl-nVDza+REeF1;a`xc8$Jogi+nl>1~6!5vTEjniuPt|OZ`Ho54z(_l~f$< zUH~CImYp3=YhA9J-v#B6`fXix;v?J$Utii&(>cc?p*i8+i<)s*_vuNnDTr2uyk_^v z&!VdJUB#ai9C|PEB*hbr%v}Dy<{E~%h%ZiiTku}cqPKjb_2wyWWK6fmxP|m3&a1gu~5h2gPXKt{tC$HiPz?$WT93CM=RXC*Z?;ejpCx$)9mz^eCXMY ztMgyxzaOYIFJb>C+h+SfwzM*~Q+>Hfi?C6UTaD495*X}naTG`5|77Z~F!6oG;@jVP zE3s#G2HUr+Hl|P&%WFSliBL{wVR=|TkWejyG1PjW&wbnPBh|r# zOCSL_NjJ&&_3@A+KW1IT=UWo)^u+nX0U#YU+VS%RWicNSdL7Ceilx@`-W|J8sX-aa1>-{T}T3I%7ObF{1*m-R2BGEEnR5rZ)UJQd8j$>@H zmR0$o`j2BD@?_-S?a{neYz-{-co|HIA@}hgNbBAGlmM}}%O!!0Z~hTS|839gLQCeI ziWif-;y+lve;Sx6Mx=37|9vl25WkPd-7Z&wq{!E`m6FIG)P!TG``+g{x_U5^=*r$7 zU4R5tnMpfg2u*9z7hPc!X!$}Y!X#<`-KJiSKkg{ zn@+zd$7y@Jw((=m-f+dU zs)fLWJY_LUTMBZ#K2}u~Q_E!jRT=?+#>#fO*6pfln0pEA{d;7P;`>eEubdVBH;3(B z#9S5pN~<-fD$MKuurLd5CR2F&>k`H|kUpTKO;d(+7?6NJyqrf#x5(0Cc02`=GEfUq z2(;aV?LqCS91^aF3Vl-^doG*OV05A{U0g;eU=ej(-);t&WIodp`Bn8j43^T$C(F!{BLZ59p*zaA%#fIP^K@95{n=_OvLAkt4 zHI%3%0%9||0qn2v`l0NeuDps6g<)DDPO1WZu!}A2nJzeW8qqnD#WVWTT}ragdt7}s z*geNhg~+IfN~jC;Rm2Xvb6S#C9Av#U*H~*SVC6Nj0x7kosmJqN28;0mqm)fdH|=xt zpB6aNGry$z7vs%>-C%cNX6r(7;0RP>c9LA)KU^$pZh6Z#L(a3NCMN|;Fdq9%s#IkCE^%B=nuD^((=|o9W>z(-Jc@^=CNwg=6c~wNtbGyf<-~Dg;Oaky3xpt z-7BM|_yUT0?qT0>DT-`!=su8d;pb~XOUxb&sF?wYZ`Ryad_-~D$7vKGk$~ZAD7@@D^xSG%IhF4)#PjSOt80~t#{wI*8b=Q zg!pM~MgY0rgA(^yI266(uoUc{q7O)4h>usBfuhrO47K;wLIyId#4B_z{cREh%O+tK z@y4oc$Uf;25xgqv5}m$iKn8FaEsc#daV^PVzqi~x;EjjGIt+MmF&XeB$L@>=WD(|* zvjqR@HqGztf4A?1Z?OM_B!`#~elSA+V1!r@{tdzWTcmBjACXghy;PxeXUcA)#pZw7 z3-5pUj+g&G{{LQ|XdnCm z>}Z2wY^hV>Vlorz>-p^JYZ58NZSNhz+>1ZFl+G|uIc%fOx{hPyY1;q0 z`6SvA2dhnc+#~5z}pG0&^xudiMkYoyuNhm#pZ@uVbRA{WEll< z)eh@OEp6;30CetX<{`3SOxSe+a8$T&ZN5pGyb!{mvl(4XrGzZ4-&f`(hZBI$?&RHLtKQG z*o9X*dj#pv)u%pK->*fghVrESzkNI?AfG9$lM2QUvI%0|!MreL-CYb6vaGm}b1tNX zwvfRWD}*C@n1ba^WNg3te4$a!l@j$zV0GvA5F;mH+SGL)c+RdkoQrZ5(tyhm0VR0# z&?sQ=KbxcKvvkAuWJOA;se#yCg489`YT#S&>=zeJNd469LwqTXce@w|4E>p{n17=Y zeP*kiKyNl##Sb_D+p%(3M3H*VV2 zX&z$BjA~H{i#$=ATg-mLlLj&+{;Ys_L)f5^#R%_h3aCX=4)I$Y2D07VFFf_O9|}C| z#WczXePPe*N?K<4w%GD6c6zr$JMYJPPkvcUo}beM*Q+qnP0Ks8Wf9`CJ9<1FrvZnJ z%atVu-tpp&lH;yD0ST(dm9rwyJg*$ftr!)3G_jkyMkbK`gukPZTG9kQyWEG<`-O=z z*{Y=H5Bcw#S8k?-aRla#4{kh=bcm`e61b$}15Pcb^k_O5`ZhGW-3-GCXHKE0xTekx zW*KT3WFof#M4aTFql4IEa5LG}9kND}8%xVx0n-4QkGFgABL(SqS5z@)LgG0s%PZY- z3HZ(`!u5rXSa!{mV|Ku02-mM|D7|pJVDlWQUS}>%f92G<6<2@6@(HU1Y#qomZ>Xj% z?I|L9Rd=3;BT8|KbObylUohd1rs;z?3L@o-rkyf`z59DMrvBKg(=C165+>XT2hb$V zM#@x!#35)gHDcTa&9^IcR4vAXs10EOH!@S<+#ODJ2STMNp%zccPkzO}q3n;b-qBs! z+J2LCDA{ox>^JWmaMxPz;bbQR$XoW|e+);V4)ecrSaE<*XSnrhv3TM^RZb^eM-uh% ztTU7M+<&3c6%Qf0FDT;g?Pfb@t2Au{K~C$TOMh~R&Mb)0>NS4~CKtkwXR8SnGzJc~$r2R3fyY4-qy=9(^47HP zz^Dy($BB9~4&d>ccSDd1*KV0%M)5F{)!rxzO5|hm6 zF|i*ivXo13F#Kz4kA-jB^m(>DSt&1h;AQw6DHu+${5+@9zwWIdBfZXI`&+;H zkJsOfy4-3&-qw9X>My{djgG}n6jk=*b#sk|pJTB9o)^RUAq${}89St!$KvGThW?|A z3&Xw`Qb8#OYdo!S7T;2vfalIg_VKDc7WnI=)B1s*>gSZ^5l^NDiEiL0v6O?s|3yNd zKKIOkK1&dqpe)Xx^nq$Ddg~u3MRA;X$dadNPM?!#8-$0|fE`r;OMT2daiB&nOzEX&0}?(`fc9VN3b*{XMK@C*0M~_c7tPj?ZT?#CWQWQxz==|5vZQmIK$!Mj&6}_ za(rctUw8XS0ER?OPz2%L^Fa&g+f*djHYu-}7YeayZw>PrBKNc)tpzoX9a#IRzT;^Wdp#k`GS?L#I?i1I2&3Oh{=9 zPgWoj@Q`<)jVb!zi+L}BKb%ZG4IItYizk`#<$g$xdE0SgztG_f35n~)?P8c1BncFD zIhyNKUu^8vx~ij^_sh{+(P0=xrX!gVdv}%acN=tNjTopBx=6j2ub0|5ttao%Op&qDCjB;8&1{nj9f~ zM3Iq18=Qs)B{q(2$2BFLDv42HXtet^3+9KkcY8KI6~d%-z(-F6wA+&amFp8Tfnk zr{>TnhPlK`eDzCEau%OZgeP$L>+{0Dr=GWegB!Vw z8BscFm|!$3rHjDR0zUldCMIfne)rjY0&+u|0+MQEGPV<*gd^1Q&B7b(nB|Q;36`>M z*RbV#QHF!=K2@o+WG*Or&`+XZg(e;+tJY(73w(lwg88NuPt4TyVWmcp&zSqIOSILG z5|f99`{02V4(`u@-vNn%t^IC$B~l|3Ojm&>KA(O(@TaADC%2^U!@m-~0D}=LNe$&B`i}HumrkA&2Wpu*ZUkkc%H`0dG zlo_PRC?Z;Zk9UIv)&{!yrJ$qYI&DsXdchNv6vO!hli5lAsF;|e%&gO7DV*2t2kK;^ zq7IQa{D_xEI{sf<;jTB~c-HBZu)0+lRXa@vp^9707`t*pVuoPzj$itaupd;qvJcSk zw79j~XEO3^L@qM>J#cl79D>?N z+_qwhUc9Y^uJ8T-D%x+Sa<=Ko}E)0SM8%fl{>xIt9XoDo4dAa%HL4gwS(ZaMh=p(U-}22nCcUDgk|`HRldaB9(15LPdcoH zA2mZ4f>!&a;L8HSnyqy{3p-u`)wxU6pSHU%juq;pcC0P zN>!wAm$Cw1XKyTJM7gY!MA!llrIP_ST{OyNE>4vTmI3sCC#o~Y!y4{ObI~TM@`V?i z-{A*%S@}eaxmf9?2ecRr9YSyodQ))HKNa;y!DpJTnvE~ zo?uDMeD$X)c`@76tj0Z(ZAq#qVO20g{fQTE>IM_{mkn5g)5MvSlIazrcV2U;?i=VF zhS_wYfmo{0iYkIBGzmw8?@3mF!io)^M0LsM#i4*@{?nY38w(|^3q?PZQlzp%ai{Zl zjGhH?wctLR6qmt$(}RuE^GmK)2!*yC%2(5V^Z8%9nC0f}dr@Vt?wGV)Vbl=-E?!_D z1x4~)1K-wi`wUjC*t(Pg#=*P#`P~Qd!=SYQihjra5TPn7&HD+4#na*y$np;Zb z@Aph6?IvmReUbb2iGR(QI1tmV@IBsc9oriB!eZ7n-HOP@-~JF)Gc-}OtknMp-+d!# zI&qaXGRd{}lQMx-y+2uKp^r2ai46^qQiN)tf&hz7!&kS|muZ{M3=Cm^_kf*+cUp@y z(AAS+WYT%hMms=We-o$gxrz!N)l7GSsazmFF!Xf#fW@Ffw!S;-+Jqs;5~G@Yx2O8H z7k##EW>UucZ27RB#a6EI_1uix2ipXLodPny_u2exjJ}qFu*JXXUwok1tr=rBaVZBa z_53S5mI$@Fh3jSo@s(dy7?81{4mwmYCr$jqlvgrJXQxXERsJ(vrMSuwS`tAs`q?wG zM^PY##gvgkt){9@ZzXb3Wmt)auf+((EKyF+j5M{rcVR^I``K7|#Pq30@Nm-Sjlr~- z%+ZH$AV`C$s$q@d?a>Na6~p&|L&XuUGWJ6CVdQ)2${m0*v4F~9qSF#vBxo!KE~VQ} z6f+t6TqO?zJD;?{HubSYT6~vZ)~{wj)*ZK`$w((;)<}@FT7?qcHIG8>Vaj1l^zhtC zs7=*Yx}ovL0)dTNf0JvK1*zKQW6JOjCMFDQEIgy#g=J%)%}3-D>2J8|tXMbq4(71!>`Qh!)+%osQiZ9*gL0$e$PTS5`J_f6+czC`D(ZD6YeB0z ze2iaJwHEgtu%VuSo)um~7+rKr#$Fj@vbgTm(a!eA8$<}p8E(mdeJH=-b8ftV=BKwC zqHVS^fLb`ced{aXe*!e{X>QyY*H|OWsN+=m0aeP9Cdu;Cwb7`!rV;Y!n$Yw;sEOTT zYhE{A?P(M3KUd60sWj(_G^jP+-Yz_{PyQugPMmm8oVNM9_%9V^75(48wtxutJO0iS zOfN^Jar~GG)5?IcANT8O+w}+FL>yjZ_&6vbo*Hw|A(>A6i&lQ*B&h!VPO?eK*Q@AFdVub`N@8$pq{q|lP%gkJ?GIvY^3KD@*uu3wKP3ZSI z`aKGFdy$zx>n3evs&|^zt9pQ9ee%9osE9V5Z`FEO7lD#CvE7{hWZi^7-kYO@OI7Ci z4sy^jr5WvJ;k5Y8MzhI^D5SCd2ZrxAbVD9$V7L6I6YBoY0 zPbU|6R4<@M3k`_j1RCmV9d7qmSgCs=^U8Tv3Yc8m#Ldoq{9gcCK&8L*W@eNaLTb`P z=-fC$e*EBAJO3sq8=$V)V)h)W8%4HRG}r?nU0m_y$wsK>mbY{FQw7q1D|_y66*NfS zn~MtLhX!iEPV0BWE9d zmJ7dkFqF}r&@`g1LcZI(qOvnakSeY0xu-n`f^RiTc#Tfto%cl-?KfV)q(~$CoX3Tj zYervozCDg56Eo4lzZ9_Q?`aLa%1R`NyIpv&LkR0A#qc5d6O!I5+xSHqW5bPI?=3F% zVWWd_zT9*_HdenVJ~kwVjrMh8g0bq@aE-CcA|V(_171h?dp}@Z{l}d4B`G8b{r7k4 z12?St@pg!OXD^m;+%Ht@?Z#XwlM?C&Crq4?(i|mI(JQ5RNo;c(gk<#2uN~M8X<=Ne z{eoJdz(VDCcW?`of4%PS@iq)FI6{3c!)s#cG(iLr4JA; zU2^vCAAoA*jZd#txI?MbU>x^L4ahxSzC5}n2a>p2Chqd2!)@}isAq5+K1ooS&mEM( zbi9~O5|mQ4k0NLXIW$EgYoO5n*mG5P^~X?Bha zqI{4NksADCpa}Aa!_NELY@v+Qku)|i4>jvE_DbxY1>%)+>s&M3fOO(gVY$@*prLSi z(=iSOD0emHGQO2SQ>Emw1{WD<+LuQm(|8(6uZ-EKR_H-4xGZk(R)WOy{TB{2`ooQv zF|886{=*1fvcZQn`k3h#Tq+{^5Q|jQ{w_@zV3o+AeQlpO*4ByfN^j}Jy5FDn*YO-c zat?r6uR%KZneN<*=kp%w9FGa??`uBWw}h`8GKg&fyqY*tfvz$s8c z3iXU|u(cvK)O*YE%Ecl{ep7~1CtB7U5%7en==@mjh5bO#lS%V` z?G5!Y(4+hJ6Es{|Eug?o2MX~;w?Tj}G~cc}S-VXYFo{4=NJc@->Lj*0-jni*4XgA2R{M1N{T=R2LEI4_+Ml_rf&$ok$n0C7M|LxM-9!u${f#2 zYo%kcwnA~MmBBF9E8lw;#h-!=8nodvM_iE7glD?Mv#^=e_{P{_45>mx<2Au6=dDS- z*4hQ6K8%Z!xFC;IaC48Cb40vw!AfF65u4Kf$9QvL4jWGjdD|7#BgtJxoA=%oBuZVA zpnb8yYWt(79ehHuByrg0I~HN~*GU+jj>1^d>7Tzc<=}Ya;GttC1rUEwI`Dj*3*?k* zJ(1u0l>)nawnU2mYS zJ@uD=@jFlp2pvqT8K6#mw5a@H3e+Dq22W^jff|3{S?Kh7z+Pz)-3cLR8spt?Nq-O; zJq`yH|1|`XNAhQ(9fm+yxGcT#MhaAKlO4=V(tzUkw>1fy93X4ipdiVa8=`mr-GAw6 z54!H0q<&Gg#Kbr0Qvn%YFi+CJNJz8|%f8x+J(zaDniScR=3mdT?n=waS$ZpyJ4Gb~ zFI+)NL*JJdy`zZon(_&&+L8L;lWG%B8`3u0C%kxDkF+cK!xJ02kap?t5BN$#+By|e z_fM%vb^h0^V)PT6zc^U^H+~fcvWkBNGt`578zp!SjfIG)z8B04G z=Ui=WV9rNtw~4ol7{50^q4p_1s-Us_|HlDX$c7sM1KQ{PA#3C$fmWn+{?vdR(4AakCUOUNJ_;%WHwO zaa;OfRVon7MSu2xdJ0t<(x$^kf>0R$dV^040n)M?b50zxhd{+Q<57_o80cW+AM$T2 zrgi;GFVV`xLh^{K+KQ#B%(BmW_*5a`VR4{D(kPNF4obUS9>PY7fX1D#9@t#OsT^G0 zh1ACdyK_7hk#@^*;j`;5qzn34m$&{vy5*sht@9s{eo9-S{6#L(ekWyzK4l@zq%&0M zst;1F=%0r-9>C^(mrJKkf5S#)wYwcxC$YZNAdY)I6Km;$eA|!3Va4*J{^zT1Vg9&l zjksAKrc4E|KPB6ZK1Y96nfx<>@K0|(c-eo3tPD4aZO!FSyu35%MOp<^-zCRidK(DD zg859k!!;n^`K#h@rwWv}KPU4JI|5P{PB(D^fhJttYgNh(wCSP5RqL#P9x5Mr{=*-j zclBR)*eeHgI!BaGo&t1d*$KNc3ef6Z*KOTG0V*Z5z+2%YG*7u7rks7f;vdfS1n)IK zvN^fcdtW^et|~sfrX>eeTh5y&hJAp-buVL?USxQ-C?s&qOac7DkH*?-M&gr3(u22y zikLa2K$v&CfyDv-`rJf&tUhz4ZiaIciOCfY-3LiX4g#N`%Zb>u`h*fheWa^~3{I`C}Y+m*Z|gS zM9l+2f#le-?3$$u6gj*6^kgdF4Y8YZG#b#h#_U(M90t19n8V&(&cIkVK4R#992l{3 zzvu^afWfpD&#K@9MtZwORzsrVtS8$elb z_j2~}0kVaF@1wu$mHl~DTFEX4sCvUaRBa{;MQ6@FXXd?ubm1zV`=_Z8uvp)BI9whd z`(6s!&&k0|i|t%{9ip)KZi&f2WiD2GT;Bc2K_7`9fB)tE7mwt>KR=#)FpEt^aTeoT zr;+OJMoKOfLK^3U30-3Z>4UaubKz8EVL*3QW1X{x?*of7NhD=7D0>wC&Q!?2})z z#5rW`+_C){3LtC8Z3Pt)BC}_ey^$3gnQA;AM>F>z<9{PMQL1;4zWT(g4y!z*2EIu@ zn&6F1K}|R0EHhRZa&)1h@Mt@f+2}`V#b-h-AKk)!RTtDh{V#@|#t)6%Uwn6OVFTv( zg`NxT1KLB!1xMvDp#PZY5|FU~rl_*JPNXt0zt?Td7;ONSrU41`QP?l>Ipsz$s)!!`BEBSul8xu#4ZQpHP;uftEtC4 z(S1rUpQ&QSkyAlYL8@5$&r5GHAs0!BrcZWpjUnZgSmvF7GDtP^75by_3u(&(zg6S@ zLx$V8?@B+8BQwf!N8tYF>bFS9-ahJg)=LT5Yr}gc^PQ2ESy(o6 zK?9ke865N1BFK0fDR8&y3DQG4WhmMDNS(Aj(Q^o}SwqIS#(ZUtNgn;Y{^ofkKGpa) z6jgy$oa-4b={8t+k3UMFZaY3(GvmUEx{ID4()1@2<{_qP8&{J0EaXi7P*f|lgYx4; zLs@1eP@9_Ux-r8HNT$aU%=4;%Quut07@H5Mrlo&aQwM>*j`VP-M;I7kd(;oymOl*jbdKjmp+czTPO8vMWkTuP z(dXgys~|hLr*>H55QHCfZ`>fc7a#IyJ2)IO!t}`Z`dlx&vG{_wg-2>RR(I&_3QBp4 zb!9a6!80UmJi?Bc(KkfA`R^6aqBhb}>Vui~N06b@J*@Yy9+}VPgI``eh^%V8n#UQH z$iCmcO=#tP_Dqv|nfxHONIOnzdRVU1vNlqYEM(t%6#Z6X7Fm^QH?HW!Av5_`$dO7T zWN1DW8#E0tW7a9yIF#euDvsNb&SjOSc^{wK8ZShC+kTn@vM1PCf z`#pme-(Q|LmVKcm*>hcz{1mh}towd;c`LB{d=FdtivVjmHluWs7nlR8S8OfYfN}H0 zd0}h@T2m9}OLsqD29wnlr~-}V^?}}!^H5j3r9gh?O{lI|(v*L49*V}6eE8fdAkFY} zS$cH}+}jiOA+*m1qm%!=xyjjxId4)5Y8EoFJUT5sY}5v8r*b;axN9S+KUPVoF$$Zm zwM5=LHHFkpj)n%k0O@6&Jyu^5kZBUg=6ht0titnuf5ulMn^e5SQF?+czOAVyI|{L7 zYJ-5A9T8i_rt|2%o!Bz`W4Vb}7h9Z?jwOyQB0C|yUm_<2S$CQ|jz>zY}S4XoW_o4(}Hf~8bJ37tdXm^F&-t1mQQ zh_m~6c;jyf*0Ho*|M3}Qxg4#Mp7MoK)38f%e7m9MC)fAdNiV4Xy-7~Ou?Z*@TOBMt zJAfJ_zW%FIHPG*$y^*%U4@`As)4TkefmPJw86$rS*uAbxru&aTOZ{Z(sfKuHJ?Z{9 z+s_kP!{_#l{JaFM4~iUa*$qJJ=JHj^E&9-M)lf|9mI1J@G+V6Mx*Awpos6Y#o&ZLu z|C$5jHlWo(uK355J^ZwNOl>T8rkyhuKa!Jey87V=YA?y-lX%qO!MURo4oN-xv|B5ap%!{iWGqKhE=_c!@ z6WIDS(*DTzwb-^+lA~qz4qM-m{UoS@*m`mKp=9b&Y>9bTrufJN*M=&<<+P+Ad>_#GYN5+e&uUL6Uzj)u1J(%Y| zTM}pS8si@O-zmCj4({EQcl(Ci;Mq#fJQ)8BMfnBY&m&GkHB0!*{ZUbRr^^&Uz$9$ z&ZV4V#EV0li~kmf4Z6@4{5j1pxB}YFI^2+G`vR@)N#ATU>Cp0L&uGW7D^)siY8)`d-zlpox z^bFh1eKsS3N7|cO&Igpp=!&Al9F>A6aXC7poUH z>{MOF!lLgsGudbUV5-Q+KJt-Hyj4&n`6N{Y;t!pYGB%>qa9?1!@k&JZfFt9OlYt7*cCVeV%Igrc zKDNuX=)46jhRZ%W&t3ovgAQ}#!hkW8E`08aA<%ws>^Dd&16n1Lzt~GagO}*Wl%QlF z0#|;RM&SxiwB6wu@qs*@rKgczIS_lMR>f&z0`D3q?#Xvl$Mh?w1z%_`VTro?*GJPE zv8Gl*L3t(sNgFFdB(5r8lgg*?$np-P&c@Kbx%wePak8r>{64ZaT@A{x9zb^cVo7oB z47O@NfDOC9VViw`(hf&&!`tla_5i`B!Byw(J+>eh@OkiGQgZ0JRvEg!5H@T-CAu;VFAxZ)*^yszUy(PdPx{Ck!aRgWe zb3K#6_g8e3T5I{z0a_X4hpSieukA~Ox4*12a2oa;_EqqKc92vXN{xYb&xW-rFK$7* zg_rSo`8wbXKbtM`BrsqpiNBQykF(VgB{0z~C=6E3tbP${2~xc-qC&DN*PGQ`?2u8)4#_9B`4$>{nAzp+{E4tr*z4{5|e!N zj}0Y|C8N;DJ1U6`!TaMK>x_`v+~~6Dz&4}=DsS$4{SfOlq6Xg&v}1Ml=Cvv_>#(qf z-}ttcIVKaLrLDVTK-KhKyXvtOZq^GBtxGrsMXLdv0hf$|}!cimhfE3*bD zw7hS-{@erV=h?A8w<~~gu-Y_6I}KQ7;78rX1ugpn%N@AgptVEvyQYf-aAb9|9~^Im z_FX#!J%6s~`1yr!A5jfDPKo!s@ScZ`m62lW_Z~V_9+nMlGlTY=*&^$p1Hfr5pCxtq zKwI_(k5hr((7Mml=8ueFWi2Y9W@I(T#ox+%nQVYmD??@b2vOxMq zBctMv_YpNs%}7(aNFMvRvG8d<63(giNomew`TAc&Q^PZuy=}+gd-J6j`1L=H!2lVE znCf54vk)Yc1)-|E36`4b{&Y`KMRu1i$Ej)(VmgxVnE&TGiYxz1Lzr3wcjSr z0(0np#cfws{{6>)%O+nXpp`J=@?3@&I9jR6ZxzFnoU~7^ez^xac{jzF z61PC7IUgh6bQg4?EV6$^-F1^rN;rbsD(rMm6zojDUKbQje`GUTY;ojon10wMht0e`u-VW{)}=GV#2V$RcCUY}0_SW&bf;`}NIiE4{WjcV7h zp3W+EgQTjKKe*c+jqY~jtiMTJjy)HSN0e#pSWMWD?aPL_uIm`3^~`F)84%s z!FJ*Y4Wjlr>>yZdtFRWpPA4A4YOi7JWbpJ$ZC}RD7seHxZ``mmysBc&kp}GeJyQKf zO#?ebBTfcMr6~BE}C7QD_pLa63IAZjcfS>7|Ew z_H>v)>H4U`L$_W*ZQ#~#Ca-*fY!r0Qs$&y0cbpKru`vN?|J1Ed+^Yqq^T+Rf=Z*n8 zDcgSUD`jX6`)?@Q#vC|@cd0V944}P`XXM*WI&`$CeZG{H3Y|~$0=5Y~0Ly7rinb^Y1UN&ZlHGwUsM%<@?NkXQrlU)ayBB+dXQlrP3*i3Y91ZUr?v zJb}GvTQ>6E8JIl_)K~RJK))j#zcl*~u>ISEf)}aKU@rTsvRD`halYL7`&yw~t+&Ja z+eOHlm|WVD_Xq-JsDJf2+!({p_j20y2IhH6pR}Hw!79to0*vH~Sa)Jetj?tcY+Po_ z@^jT8wT^wjL-+|Yj^4i6$rwh~(=GeU?VPct{&pv=EC}0@y5(E$&SJZodM>}=nHAp} zrY~}guruPn)LZdCvCCjnRatBpc9kpC(KV>p#Rxtfxs`}rA&ccZSM_4&f`Yj9{fF2o z<0czV*@W#gk_|SiERo|6-qMn5GE%tV)@=4e{ zr6A<=uN28Pp?l35im=w793tW$iX|T%>9IqP@aByxzFf)oA@Q=7lEzJ2 zDBQn`@9Onrs3w1n_uudu>MJ%}aMLx1CZ`Yk_i4KT?P_Xz-Qi|nOk9o0ikt?v-gdeL z!Sw$C009606q$ECRsSEyZKcc#(YK*QOIAqnE>zNxq@BtNsgRIWXpp_i9$8V@d%ewj z-RtgqQ6y3nAu}5CyT3orc|6YJJRax$`n=xH=i@;8pT zU<9bLYlfWdm4GIzf9^Q_3D8K7ze>an1AV)+a+lddpzDm~867+cw7EW~WL`O-U60Yt zKhXkI->}LiX9=Jj|L@f6%dj6lPhCDNSbRc4cRAbqF5MoY(Y zq{mzKkLM2|y(Iq9zsJr<_xdumSd)jeDSBqylaol3El<%iS4YZJbI38d*Vyr3wAbi@ zGLi_Nf35p^3yB?aDf_;Vu`Me1ka%7_wro5wn>7@KjlL>2VuT>9wY=%q#aWBx-qJ^? zS=m_7u<+knkJI>4>-o37SGV!;EZb+|Oc{i!%O(b%vW6@{@}Z5}{GsUZul|c6fly&} z$4n#G2I>wa2X9**42_dzoqz8$pe3eO|LFr$AP8=Fw4>xMwCkq{O=p_|S@((4PW>L} zm}!*m>EzDa_S3T8+dY65rYUM`=>T-Q7O`kW1E5b@28w#KfU(-_Hd%5S7{b24`oyMy zo|$8Q?5qvYz7_;_n{NW@hY9U1Ho-u7BJBM15DUn|SBi`nXMn^fx<~0Q2?%`yH;q2L zht>y%nU5cKL(`bH21SDp8qPjEvMpo`s-6_eF1T1giAQls*=as_0nEt?yn|-O9 ze$k`dIRq&eH=cMDy&uUbv0XXLacoZ&oe;MAfrM*8vrcRKv1K$>>z?&lY%*|VIh~y8v$udIup-^xasnv+V$n~&8UVTS z;(m*IJ7|Ax(P2qq0>Ns<;v?NLX!*20#-YsznpCRH9uDV2-OE3=?VKT~NMHEo<kOke;(RJL3Gdj@c1#{yTK4?NI_Zc6Q#E06zoXcm)uTZyTS9V!8{=A@B2u1rH+(-L zj1i-Of64oI)Q(=PsX6lsB`)~j3HkjfW)=i9X`?9gp>@_M#_BvteJks(x9LQPfZBwDVV)+IzC@^}S|IBk0l;4;7W_a^0)FzWOg#3b_5sf-Gl!ib{ z&@z>Suf&0{X+lFhzY5x)ygJy`D+A;r`=cf)}l!phszfcE^@s?R*{gc30R1R}&s|UvCIPvo>-N48&TKcJA1q`h&$^T}@ zfo>AE{agN4p!N>0efQZ9D2j@yUSr(;-+rTd-^bNJoV?j!B1VQbpCFdrB~NJPr2p;H z@CW>-_<5UwAk+w2T)Q&34oayChc6cCLw@`Buz<_4kmOimZdo=3rd3NfRjo!b;okFt zu6h>cy%Um!ghed9T%6@(b_lD}1sx`LokPr7O8=wgg3ZMVXV|mV*kiMA1waP)1Z4GBl{OS>1`@9ww{jOTjzpw9vkAUn=Miu zjm#`Im|{n`KySvZ2a=pc-+7#Uhr~5j0l~&pYz>V2q?~^Wn;PrymyNB%`kc0uKk{K% z`RMD*+P&6TyxoSBoOcDYkB3J6SI~ix8$Mi`d+iO6g$2G1vO?fxFfV^fsuL9EI1*3& zw1x^jza#wzM4`@2O({tnd zVPqcXr(3=8M8=?q5oPTVw;y`io%v0Wt`Q_j{P7p5KJVs^R$jpl|KzFh_Jc?|e8Z&k zUM3P4S2z8!8OK&d4fl6ZGuU)Ybo}L#I@U!k`>VGYgcV0upB;ZAjfDx`FF&v3#g`U; z^qAW(VPL|_c`4m0h}w0Y?-%Po$l)!Q-*IROic_XblLCdHYL(^IV}=}PIIUCvtG5K2 zw~Adpb07vfHK$F^i(BX_DP}T{_&}v+OG-UiQA!HVacLfC( z94eueOqbn!wjY|ND;2kVUJLbuZZ4baJ)ko2hI-n6u~00ZxZ`|PK4gv5JP7}@0AcxE zB3=e3Fev##e1*vnX1=LS?7ta{MS*2xX9*HkuDlRDH!yV z>D_PuXD<>@{*ICl;pgVTn`83$8d4++eqPk(a-Fo}Z#OS-q<704Uf3jujND$HydPv_ z>bpPM8ng_V1wwUJ#}<(}7uuzknT4#?HmqRzJY1^G>vy+`uG6Z7*2Heh>PdwB1?5p4UjliqdH z5nEKEH+E_%VxyMvcK>P{tWoEsi11}#X>Gtr(q}8o-+h#)d5;z*Shy)ky-$IwLdKdK zHm!k_JwcwH4j;)@6{ zdTZ`{o=pM9`h34&opPXgjWZ2+?1197eYh{m63DwEFE*$L0r8D$ab@8zXr0S&4cIvX z&EgX&6`%_Z{Bj4(vw5NNWqh6Ucpnt644a&qY=Eq^V?|Ih4I$mD6#m}$h#{+YlO6`$ zz%19;J1&00SoB*JtI`i)<#RO?v#qXJ|L^&+u%HjvEEP_xwX(+6e=8;1efJ=-)=1*| zm<*DQ*8e*)6^GD{mky2h6@_M!Sv*0qew<@#$m% zU_DpOKQcG~ta9p&qA_D&y>Z(U+*AiFFKx~~)iuD{@W@|a|8ZcZtpCS9I1Y?ig?ByY z{eYpkH1lyj9ccCwh0Dbs1I17!XS>`4kos?p_6ocJqQNJ6B2yb$@9uLtd}J*&xhE-1 z_bEVKu8_mlfMBTD6eIY7G6V%(3O*#;CCJ!vP$s20AG|KUJ>p)Sf^j=1tqCp;_{wUc z{_BBjSn`i|zLTd8t6z#=e^k5*8-?ROPtUhti~QTt_bYUeAe8Jn&)~=Q=Hl^3RkXFuM<=#+Nt;Mfc^uREwemoH~4{C~i=BMIgt8W5C`d^6J`$^{Dc3H^ruU^pG zrvxSPy)wPa)S-$|_=F~{3wUZ|e41PZ&BR0RR-JZ&wg#!iWgEr0eCd7EEieK)}l*aWe^Z}zZvrrScd&Ik7^0lKKu+|@EMn50`D{=i4U2PCp6LOlP zGJ?Qf8#FstV+!nbD}B3f>;l$Y3Uxu!0a!UXj94Pn__j=#ly|=Kw4m z5&0Oqy%j5(wA-F^?ZJ9WeZALzZ(!5MrcK8VOknG`sx<4;t4Jh-R-WqLh-6oV*ZwUE zNEsrtWjzideckaa{ngu$5#-tLr%{B=tHj9)Ju+_i@1@R(l>7#w$g;r!G+}7HVG|tUeu-?gM=EyvEF`{@2 zw@>^mjb8+9L%Kj+13j@8DdfKV-@^k)HfKfZ^hhHyi{8KV=sdQzJXH4)*~#^h1^wc# zS*#Z{AKCX)5i72}%`1Mo3kzk1LIn8uFk^?GKHMKgPtt~}fuQT~oUcfFJHZU{g!cH3 z8D~T3%_+N8p;l0{Go_SmoCJ-RTui)T_@TwmTjBxm0>P7h+&9}0NJdJssqu!;(UV#} zr;`CRt)}732f3eEWw$dzNo_wC)N}w5Fz;uH1apzPd&gm~o) zg{q&H?zR=_@|41emphRW`<3x!HWHcl{RY1Xayer!?e>Gu{>b7O4QDLwNA{7lkQ|e0 zWJizlDa7U?yF3CGxGKyp+~4tm`5oC0d5;et$V0ZWo`bTB53*im&ydpwk;P}=66yE0bAnxAH_uY zVdEWnU3H7^SaWEsey{2jmbyPZ;p_PiU;WiJP5Nhmac}I%Z{kJ3TVLujb$tzFq^sZ6 zsJIP<<>gwLM$%Bx7WdaQs1@q{{~<@v8k%`mL%?T$Xj^AC;IEzs?JJLWPTNKRnLMLA zmYo6A(+Ru((PDv~DiAm+69Wv+zREvStAJV2r`%ks2&{WjTZfK~ap!Ml*O(R!Y`?1m zU&KX#O*B7UAM6S2ud%X$FHL~`@#E!6At7MDHAtNG3gzZW@t$T>3$U2_y?^fO14}tR z#B#})>o*|-%3HPq!ycEv4dZ%pzTy6?%jMkt!_>$t(*aWEs-!f5I3Q4OC6VXZ(9&Me zdf~7PG$sj4=fK1U9&ZvGC>LzIr2ya)6=5$8$pI*A!) z_I==CieaHobLr6jn^;l0B!n?$tTE>y72Dsw-{s(X|)gZRU$hgK&dPDF0v&@v^ADo zkaf$^BWjd?-Y+DS(a+N!c(K^@h&AG0zSF%f(y!-Xcw}-3YU|75B zpRWawVsh#%Sy>F;eC0@{&d)))XO74drPWY(Iz;=uL=-gL@8P{2l?JW3=eDP<_5|YV zV^%BH%K`a8f~lO=7*N+gI;H&mJkSH`#2U|a1A|?fbOySC*(#l~v&#`!k!e90JLiC{ zU3f=3l>+R_866cCKX4@M4u{$~0O!D&hjJGufOF(h@zoRlz)^HM_HFk@VE2%GgRQxJ zW4|mte5e~(GzpZrhLEc4P2{z_bd z`K`i5mS1%-zPjj{VS+2TD7@dWHZla#U*?6V-TefGysD`@SEQgKDtD8xst?q=J5l!c zDMPcw^QLfBEod`1RaPl=0@_W4eNMQQK*y#Mg;S@#0JSC8gIRDD7;Dbts#;F~Q+fWD z$9XQt%Ds^8b(;a!x6@~jNQwhHG6K96F9ApL-|d>~HNd%Net@)}^dZ0|Ck)dyx+aQWK(_ki(K zB+qW86421$`c$g|P&Cp)K{^gdcN+5pyYB$uzLEO~&kJZdD^#RBbR8O3?(=-g41j7Q zg1C$6UntSPA8FQ2ft;;hhjbGPAUu3YX0+fshM?uSJG&Gx+e2b3_MR{nk0vX=Onib> zKj%KGTAxB>5jEW&dYwg@X=W0m}-heo1H~AJ5saN_5iX~hZ?$G&m+tJu0i>} z16)sP3VUR|8yQaN2|HfcAkFK@xX39J?C96CE2|AelBix#{?QsFET=E<`|x0MPoG-p ztSzGGA&&R%?^vZ|8u1+puvqfS#`U^?F|#DouhcdIA34SsNAfR&7)cX}0^$aEB^Rks z9di>(!I=MxaTwGb*HxX%I|_|4N+s!KqR=uRrr|^}0HV-End+<8fwVLbH`e0`6ap=` zvdI|e7G-u0-AUZOAu@;gb%EJC+Ucoz3s_D1D@0msxV*x1#^^&maMo3cRcH}_6S?Qd zx|4Rm>3wl*jmj8s{vDwV8~XugfiHY>xFB%aSua%b&H%?ns=55Y0sWm=r#9vi2j8WTtuK>J5P) z)?(O~a~PU?tQ;OcT?FJ?qqnPG7pkOu6Nf_!plIg)`=TqukZId;-}9Oe1pK^n;rd${ zj2RXEK{jUNtGGDDb*~4pG?01IXKN_dyoh-H@PHLI)+r25B{pO0%46(7;#MT?VVfR$ zD2`ddMc4F$4d^dJ(nG&xfd_m59&f>NwBFM=g zXqssBB4_hVndz-UWIxzcdr!$2S!H2kLd&)zv#p`O|42SE%KUd9>sIqjKZQoyb`IU! z8d@5(+b;130%7u7>YcNnfHYtHSLb&#P$;;){=F>F9h1&gR+a%{c)g(dw|-#$d~Emn zur9E^xc}*^XaaVDvH^i+37pfbJ!lU$1BbTceRRkYIyW!u;JIK5ou@ADIL3W{r#XF{ zuhe_!R58`P666k?flW4P>fBs8^h932_a4}k%b6qhlYzaA(=br!1+0x#(+}%yfw`vb zwvu^2(Am?+io;(66*f=bbgcxkt3+$H^KT%!u5nb>cZF7?9~1BG3IG4kSes^g4Ql2e zb8H_jLg{;FnVAQvkhd-D`@@j|i0vcW{8^=h{(*(xlxm5Xxh5>(8IvA$^tgpsS<;NS%_KqV5T`zp__d|{f>#CA~1hPFUBLw-i zkd@^7c+VOEWF`^(20qOq!^?B8h)gfi?mDLo_Nik>B}4zm^*C%N9tfzpmyd0^=hkcJ zO=7bpe{PJZAl83g78a@61>#~aX6hj-IS71P+Ewt}8IGWY72|846 zRZf1r0o30ob{BjGU>qjx^;p{sOqaJ7_r=?Q<(|Vac4z@-%ls>Oi{AeM z0096043~K{R1Fx$ktD6CWNYzNQjw$u)k{POEkYzJk``^2M3M+avXtyw*|YDi4Jmecl4Z?n8GfmqXW*?q_aILVO{OXLTD{nujE^N~_us~RXB6juS3 z_P~gx_8VZT{Hl(=XaHTmCy#g7?t~7@>lf{7UP7yn*?6{8HqdYWoFAhx4pc3fb3Mbd zP}jprkld66RW;N5uKs31ap*Bq=|WY=yzb?>#=s6DRrL0F3g%GY-H9q2pEya1$TiG_)p7gEV zUsDsiEc{DdXVxKONO_O#9x{46s=jphVV7>q?60?`*#4;XpUo{6w!|A4 zXpDAY)7=m?rQtK!sD9&^MszCT6U}cvL-Vl0W72eERUa1aJhiz=@Fk|j&17uptU$ll z-@fEi1RyG*B80`zfvi13*HrVZq4;;O{)n&!RI8$M<3By9mp%IHC*ciLpNG_B1tp+Y zXaBvMsQ|6*c{Iv!J#^#{-!5pW0z;{{@uLL~n0B=S8H_w&x$RRb(q9Jbi+G2B&PEJ_W?N-ZA?rK_F^R?eW~F55$kdg{rCtf%tuFfAF$qAb4j*hCS8; z5muBqEOVI8Q~TpMiW+bp`Wo1YodY&~uynntB(OeRTr@lK9hmQ49nkrE02rk~y_JcV zp|j_fs;;{jw69RzG?usxTBO`|-DO1qZJ6OYsr?-qq7}C&CMN?0PChB3(V<)_wozXo z5b}e_+Efu?NKS8!i4--2OU5NDO;Sl zy}FF`?^XV~UGhTO{G0!e|wjLRG#Ui`}QjwXL z>tw3_3R(F4Zl3N!WWVm{jk+m`9FOQZgFiDCRBou6ore7$t@n2gZL0R4NHMY%?NMn9SpW@c5$8JL9nc~^4ggC)w7*(^O3ATPk}dnwA2#=n!o?EfknDk>8sP7{KU~-|(Nx8|a#Ed$c@w4%&B~ z+;Jvu6SOFsE$iJ^3$)){SNT70p&^bTzT@IOpzLk=Y~~aLl-80c?=fZ1agf zfi&Mx?MKq?*i0#uykxJ7ZCxd%K7k3?`Fg5Vc)=!QWXn}vyk3mV_nqT42|JKA-jlxL zhbyu_8CO`In?O$CS&yXTawM!?HF($zA;B9c-kZM|$sM~ow%}SM?I+UH#R`ygqAzje znIm~9HBI>TFC_jnj=rGDBN13M<`^r0oDrRs53T%=vn`O~MOlVy{m*-EtSUs-{yB9) zVNqmCmeQ2eK4MqYi8oW{e_%V^`C`9@8@ABsDAgN>O;KO(Tlgqoqh^}(#TzulJ8Sir z6nU&TB&{L8U>Xbht=F^2KuK1iNPFxI~7PItK8GC^d zu(wb@&KH<Hy?j=YqwlwLpey>aF>_6G+!(o|i?+fK*$hnx=ID2s-U*-E21yyWV;2sSpLu z-3vjRF95KU@~B%sN&_p=U}jf~HZZ+}Yo_Xt0b|cE0Wk$5=*Xk8KP&k|YxxU!`&|X- zVbnX)38_HcFZf;pFG3y7B5>d7NT@oq3aLhOP%Nl(ZP5GxWXxOGcdV`y!p_$vXw3v+ z=zW+BlL^4|(Df(gC?Bw>MW{#d+iR>+>YvDD+hX18Vbyv2osqhEaB$3W0_pb>oK|FX zV{6V#&4`FMc4Qhl zQ5huk=Uz!ar6SQYa@Vi90ZC)KTVXpJkqi%AV;60VWZvXEi8;Qf(k@gAO(h`dGTK1K z97Ixle26RZ2#L@YCLhn*A?Kss65Y+w$XQnYv_{MV+0uhnt-IurB^Z9x=&%Yhnsc&_ zrr2O-9~t?zdJx-Y+>*9TnPPLli(RRml9nxTmfKzgDjUr-ah(7p!HFT&41C@PZZOztg8DZcT>r^P|RJg+qao zALgE<^936ERG8mIxX@(Op*@vNgO~$ zGVq=L+1&(en-n{fZMncP5&9~y=N=H!wg1f=#q`Aq)@K*r3!S61H# zWV6SkV>*dIcK+M5PS6|3+)yE}pm{)^wV%z2;OFCa0b3#GAs|j@_!X}o2TsKLpl#>J zft@RHI4gb`uu?Nd!^{GK=|NdF@54u6C||J`)B6S;A@luh-HplE;8NQjRRygGCB-)fCN5OhhsFU;W{MqJVk zaX(~%nQqGYU6dItrfsyoc_R#~w^i+aFo0glmkKT2|hUA;aiY+RTvc_DlcIXe5(eeeq zAEaPj(CP^#{Vq(5+c6>?g&-lYscbA@Atct--ZZmdKwg4M#(vpJC}VBRZrPLx6y@8> zzn5e{Lsr$HoV#>rlFetfU0Me%7w$-z{0oG3|9$#uV;`aGnsZ0>KpHT`FUn3-0I-fQ zcD$>u0=83ips=3>aO~BNv`82Op?*i$IXQ>#snt)y4T^!hL^f}CiUqQ@p+G=d9JoR| z#OJ+p2kvr8zJNdlkdsFz1RXa4S-ff$DmVja;NO`vL*Vz>$rP zwsSiM?A6T2+WV7%`BO^Y@)Q&JeSzke^bk5@cOBXL#RJ-sRvRmFtDyNNGf03t4m4Ro zg`cm#Kz%}#t!joM)Cju&_dZY(N}g4^mKZI9Y%z6M!QBeaT<6Wp_%ellnez{Mhv(u; zk*1|@1vuLX{lZ~A6aLm%uL&DEj%4EG4 zl8RTf4`tX-SNMzXDxwmcxIiJMpUX{or`)~6x+uPB|8ddIM1sEc;QBrR_`7|=zAHOa5 zN5f8O>X{SjPq0mVbBOiJXr%KJwaK`xNOj`~teD+^b>ADBl&yAQRiyrS^w38vmZtOe z2!~+$jLXtr-^cOEwP}mhH$Op`(Ze~n)K`$9uGJTN=KvJ%<~^tWOopnW71JNe0-$d0 zn6B&1GN1-Bqn_Dl0sY(2=^wRa(6)&aIGgboI(Otate1!e#)F#kxi-zfWG0r0>_A`( zsBYbvcmz00Y;Jv*<@fU`eJNgx8W1%nNxWtD~f=t@3mVYH3GP@`t$r-lz^mPYFs~11f;RIUWf}nM>9`!n75<@=fkq-xZHWb z9$U_R9J(D?AEu3URQdbwb>=BgOFA%4@1d@p8-b4QA49w1%AmEC%P13H0Q5(}!GuQ% zP}f!Mekjxdb&*cA5b*@4WX7`y-6v3FT74*c!VO+o6w{kM*Fj*0@P>5G7mSokWajRg z!puo4HN^#DSR$QyFi!p#sX<`!_B^>QqD3xz#4vZ0%pQqAnkMPhwnOpKoZ5})*U z$4BtJ<@@M>cm8W6e_ghdu)`Q#&D}Pmu3nKUI>i6c`Es(oYSzP6yFOof} zrU%aR-#fF+B}G~riHc*VjGP;h^DX$Ux{M*RXJpy+`v#FUnCtQ(Oc9wSa?u)plaXN` zcrT**Fn09b-L&=M4s30E)M~K866t}lk*-b@q{^J#cg<)w)&+MzyYp-SD=UH|-^K`I zk?JzHrcI9cYUzk*RE|16w4YdZ*XS`sGT(_NY^{QR)gC-yoR@ALvj%gm$GiUz=1)e(33 z_gY}N1H|7<4`2E&AYU{d{Lt$G+@(G`6!Xu(J-z5f z;PgJ=`u5+^d^P}FZ<_erQ6b=(m5m8D%L4gFWR7(<2S{(ji90JMf#6yj94I*h#A1t@ zkv&GhkxRaCd^8H!3wc_$n^?dkdUVzdT>yq3RloL~E_80J@tS>n4cf%bFBgh+0lgz< zMrB1OQ0=cz*^C53U02LydZ9j49W06*_}dRf72B0>+6qIubm%Jo^Rn>B#e4AHH7N}5 znYc`!_agTi&t;@U8@VrL(+*MRBR6LI(6i3_$i41z@>bR^ z{@t7yv)GUCJC}On|KgAo4(ky8@&SqcxAUgjBam~bP1dn?)(){nzF*T;i#PH5RnI?Z?QX&5d@T-b&A#CwB+v1M{SH>r0?bSxJ6w$Ot<1FTtTlUx4wfB;Hfp9hk%6 zsXK&)fvwS{B!5R9FixQ41_R-< zz4i8i3gEmLZcen~d+g~V>C?AY1Iy8(YPDSuFlAVa8J1_D%h9F0)aW#{pZW4nv3m!! zC>}n3>e+grQRSMeUFD!bYk$bAN1{->G4RQ)xSLR#@=y7>SOw&aWvBg#4uBW$mY?_| z7>k}K4=;IP^%YZ5Q0Beq0W6ee1lQ%-Vnx}gTcG!CtXuKn;*ZNM*jQAUk|V|B=VOtz z#*sK|_50wglca+kSzdNu>@tyI`na@rKYt(Qnp#3jXS3J=uYXP5AKaF2`HwuwxmmE4_ybU>{j#5S@O2{6~5W4GEjI7S^ zoofx>ATwl@wz_}@GPc^^Dl>VF9k%gnj3eh`>yEcqKeGj}iT6V)-=4o0tzsumHd-TI zr7g4mp@-!^7uaR_^7rCVqUL)94O0}7^^7!@}yiPN}Z?xhd zlzDeNT@&sD6u}qgW>35E`&Zbnmvv&$q;|3Szy7Vz@=Q<1U3C?-w;wao5TAf9me|Vt zqGiB5n%JSHXbG&?kbPF=wZNu6Pnyy608TqaNR`?KMB%=8DV8vh*Mr}C3nl`0p{=;u z^8>)WlkeZw=+bnLwU)?SsJ8qm+ z+${#=hAqO*89#t9|J?QUWD9W4iX}PI?162xMrWZP3)-3? zbu^_is$@4dJLvleX%pC%XL2>&lZl-zD^J+I9Yh8<{l^FYN@S@BoGAqD3%0rJ#ov>Dztb}|v5{!_7Prqq0y*z;KU%!1 zK{lr@J1FA>va-HO-h9)KOgm+H|MWKO8o3^_k}iqu14F)TNha8mJ6c>@Z-h;UMdXgZ z4Z?<+pPBIY5K{honzLyx8OveC)v%iDqGh>ihQ1~ z3yTE>7I#}b?F^toC{Vk~J_azLhw(hb78;$&Y~8Ni(DbAJ(e@YHq180kH)5X)bog># zoODqJhPG3J_ID~UUshEogu4Q3c>Wm~gLdGE%lsT%qyogs`905Xae(+GR&4z6DUkU& zMgePMfUBFO>a>RMvw{Wf#>4#F{JC_INQfrzmKnU5uTuv+!GIKlK7Zi0e%LS|d=a>p z3+Sl~eqMfxS0DeO3*_#=g_l0Z0dX$IF!oRna4u;%eM%GqwwYuP%|QWJlENnw#n`~8 z*yQt(vKu<@KYgz;Q3-8lm^a2YuY=|#4kzDvDFQX(d*GMyUa0$J-I95z3aZ?ar2C*7 zir9xI(~El{ef^oNp1f`d=578HRT+X2_k%exeupq~@T8)#kOh|PoOj=B?{2K_s)yKL zi?BYi;ZbJ`7Dznv{<$_+4oQdoYGRXTkh^%gKj`@wpPwk9v5u|C9o#N5 zu&@w$(rOm$#0|(>Z*)XfTMBss7i<4b@^iF|CKbEz1akGdrwZnEBbno3GvCS!iDBR4 z#W5v(Us@h6_%(;@Sr6ht%xh$^(zXy6c*qRoNF5sxLdIIH%+E@_*s=T0XD~6umKm;q zuy!XlMbG=>r8j|%V${0xW0Od!(V{%N{2t3yqK5t$$m_5uCjRgzWD(UJYeH z3dHRiGz|n2=gtcne*~^o@0*cv7d}V(j!Kv10#EYT6%UpG@OHjjWbvc}cw1(dzItj4 z-04e|7SjA3kfi0Kp~K~T4E2~oCe~h`*5tL1aJ!Op4+*%1=um3A#V&h zz&fjYkTi+_=EAQJ`XDi*V}IjByR)FDADHo=Yvq6Uw13z zGY_gqC{kZ%m7wIvqfy`MsgNZe?_6Eg3lWsG)@CI;3=Wx%)5?E}>9RLQ;*Muy5!Y&> zy+H@7?w?#2&|-{rbEox(Y6p>;a^LX>3mL6z zu5bb*khNJlfB)Vq$acCuJMbk2IS)l2OAHktasTf}+Yj53Je9H{$)DfD7CjClGOr=` z`4cbGNjBeKl=7AJxyVy@yVkmL7nXMe!Td&dU%S>z{-M4XqbS z3!VUtCB*DIHx4cOtIM9hQGoWa?9wm=7IbAPPc(;S08_u@DBWQUSaG%IpG++VHuKiL zI{S~n8E7jRUFin|`Sau9!$Lr&S^c*)eiXQd@oc8jGvGF72igrk1>V~1{yMEAz%yMW zy4>+O@J@L9IogH*Z~HHn_L^#C$?{Z{9~udzu2Dvnf#}TN#JG= zdsL8V<)5C_;fh`DpTGYJ--YePCdAFQ<=EnUbB~?t6QuooW8}7=1{-Y5X1>?|z}iC% zSNqJCV`*CSMfa=<%&B}Y$F)+y=)czGqi40jCz@3-|G-*EO9(9<`}7P7(`er>R>VN1 z%}FPz9xJGG)$Y}69|G!HGt0KcPl2A9x8p;pDzu5Ytm-rmfX)MbJMARRfRSwe{xY); zSo2Tc36;7D>?5jOpWM5EbMy68h0ptdaR0QSY{nNz%XNnX8?1pVJ`}K_I|#VxB9`fo z{{c_JM@GR=A9xnAX@6eJzXgK!Afab`4RAUZcdy;=4eY{_|8k$$0L#sMjR8dhn9~26|9VM7m+r(| z#_w2YU+ZxyM*1T(x3!rTbUFgf)GulXSWy4kE!mkwT^7*Z=vyI-m3Eyt&SG ze=j6kTKY<|X17BKH|7c&#)QIeB{y$Y&cPJ4|xG(ls4fCOX?QRx}{v)2oH>CgKL(_^O<>2<@{u<`A7bl)ZQ@xHiP+e-V7dKTKCDv^Trd%%iLYMAL~uLZ@rAI_ z7VE)a%yFJ4`jwv#!_F_KKHv3*xSNS@2k|pJ6IJ)sbl3ndt^I|%MHAq)knqc_4b4zj z_gy_!S`(TacUck-!lCtjf8j}!o6xB{-KGD_6S_}+E6Zhm2Bu0&{1wHkz`8ZLV;!*+ z*mYVq-&I6`)901U3^f8S@virBs5%gN?DebaMS(od`}(tMK)#;^xv5J)8E(KAUp@il z$5tfbQ-Hdcq}%^-KTvLGC7qG#JC_r|bvPsicRz(jog)u5Gl;D+^E8rr(FFJTjBg}Tr4No=za zy}ib(20JsDb88=d#qQc6)eG@<$g~Mrz5h84Sw)5Y_pHw&`%8)Kp~WG{6$lO`9vUHc zW`9TIdjlle-2Vu!%SX~PNl>fO63LmY?L8xFkg|HAEx>Pw)ZNV+idID<71zA@$iLG_ zd7j}v$?oOxxcRm~Pd$>=H0gN~bR?CN{8smzN5c8TMRSA0$i3aQNJ?K8IRPxzt;z{x zTR#=ix)g`3MLTAioduEcxGev~wZGW4hkEs1`2co^w5+_#zYbfn6BBe}u3)3&^c@Ak zBUtOy_9x=_5vvbd0@=5 z8rtLV8koLr8V?JafW^2nC;CAWIKpddkDuNK+%-NjiSz~_#Ihh-lnunY#WPv@GC@nb6ojP}z?=Y~9EvJY_oxuE?$SfF$07mR5 zwfu+$&?T)Ww$R3{=DO&h=k$~Kec1&NPJ7&dMI}S$waXvsm^Oit+2QwsM?2=tN-RL zQ=&+vid>T1RfAM!&Lia&$gFL&lv0f5faA*u`(J^Xr{Fw%6<1 zxG7QCViO61g-O`ZxM1K)$qTGq_ON2PgBDhV3`{Oz`C>5^N1CR6$INO~hM!I}x^glD z_82rl>cWEP?eYasz+`NuH?g3sOf&k-Pa&u|*>=`HFaqko_>YFta-lh-I8^>%7qtEH zZ?+E-2l`$m`Rmi^z|c(iAhb9Tn3?7M1N9!j`Wdy|itzwA8$X=fKk*Z|P`bqYgFFzM z^jeEU5y98_4z6XLVm!xR8unFbrRSH z86lOLalo7iy>jOG31Hkxch8($0`!?X|D~Kf2JICB4)$Lsp~YqcO^k(1fAg~US~hUu-<>OBVN2?V=UGL4l2KsipToDq8{cM!`PglG_6YTVf(_Sp{DNZNVnN&E1^1t4Bd&u z7E^y@KI==A`7n#D|9tmE?+-+dcEm7E)*89SQX6FTwjiN<@Y0a3)guC3}36eUZBJnVq1IEoh@yZ?yf%t30Bs7bU|7Zl1A^?ma4gt9j^`y;mhgPM?CZ4XRO zK>eIVwQ6%OG$(~`bzB_??Mv>+r3ps?{g~;0-c~GNY%2_pnHLSrJo?VGY%mMjTehzj zI6na`$EJ;x?=hgEY3#o~g{x32CO#l=bU4KWlgs%o16Axjob3WVf|KEKed8f_%i~VqqoHst7u~T zyy;^P#|Dvp_^#f$%_hj$y7Pw{Txyo))>dq)*=;HH~VSRNu&zvw@I5yAoYTkObfi3Y65?>q1~ULK2w-HgTZL@-P6>xsFBE$BXzk##wFIXsMezBll|AQYsG z28(#aLRnfR!(s9%)R+W4_ug*__3y&9S8CpdX8$ntKcAza?FUev6`nxfJ+^9|?FF9S z7On{ood?XU{eL@OE(6xgLH?B@8o<%$o9`$i30%V;i!>x;fY51=J;CS&QlK+(MR^mD z&vF+Or|#qNw)db>6c?yKcC~BpX`qVgTsmtd|M~&Mg=I^zkWR+gy2_QIifV5vNh1fTzGn z_o%NAE`~16p|#Hk&7l1oD~D#L11+~Dmts&jG)x}7I8SXS)b0#*otH;J#Xz{l$?;yG zt!#g?uzUezT{?YQ{_$Jz+%k0H-^g1`X{1$5Hwj{aj$AZjQx@-@R^L%JQNtQ3jPY{| z#roE-rBqlbkWewt;llikMSKR}ZlHKKBwCN&(*rbp9bT+4t0U-jnrhZ^^nY zPvofN-Q8Td1-S+}(O$`RNNl>$-=k=R#DDgaB9ga}%-LboH**Ck<$-&TR&7Pmqwng@-UjnHkwa8jt@zg?p7#UA*?Ky7fgWk_!6#G)3`C!Nut;Q|T z)@mw#XJa+crOcK3l%4@&m2g6+m@+VYHbM z5bJ-d%wMPg#LQr4&=cN%%PetPwWu5@MN3h`5ILZ3jJ5w%vI44LRL01%gU8!!Evvu* zsCWs-f~_ZkGIP#|OH}}}$K!D2)uz6NsB1o{g-n0dC6e)@(lsUN2bdNijA8 z+exIwMgJ(UWbSj1+zYVTzWCfJZK&L1aWUeW577KW%4IbyAY1na+b}5r{2qN1JokwYlhvy^HIy`ekVSD^e5dlkV7h#qxO5{g$GoT}&u;)J>Zwdu=52cYZGizNz@Oq(F zHBrdQ1M2YiSB!bmHnnYG0H!W82CVvTX;-%kSNHs_H#em*`*Ez_ND+(Kni$X>j zqjj=pD|R_v%}^Ha#}3su#WPOA*iyT#Z}%L5jhnXoY(M3VwE<-tLnWVJrNe8NI(}=U zW&FGl?Ocf2{xc1Bi#Owq{w10Qdj}vX>DBmTNHpZj^SM}F{Q;%#ukMMB3xn#IFx#89 zJimoDt$q}7ADWeeqXYl4pe@r+F^P(S&hNwi?}m;7Lqx%K{$?>?2E3H~Qzr&2QonCh zbr3kq0#@<|egUrP)xS;;7(lGvFCcH-3&gm~n31Xjkcq+eH&!(PCF8Cg;BLa(Zzol2 zF6Q%gTZx<5?!!RQWaC0QqJfHySRi!v9#Ez_MojWLkW`F&`K>e{ciF}pMg;;96y}0@ zTY#HpU$a_dA8_LBEbf0Oa74dr~ zQjrSb10p>C88M<|<@O`V*_0ULJB+0M93wz32MK>2`NnFVN0Y_x9K9NXoLGs)x|V#% zb{ao)eBV)I$wuYH?kqvZ%hh~JdrYwFbiet3v-`0_NkZ!G&rWQq-Zt;qp=oSX|B+#w zo{6>o+Mkn0Qn1o~bkwmjb0-m_O3m>n2qK|6K~{Y4J1XPRDzq`O<-OwTdMm*~-q z()`Q3R#*AWb~5- zmWn<=iOnIOPa04zmU2fsgn>$5y4LZ!H&8hP+pm2X1S<69$3+6cKp8aE+%DM!WM}v~ zdR`Zh+I2qa)x3M^=|r)n{{lC`lz;C{{)$z6OG1(}z`EQp2=DRD8bw+ZrY=Nm+Cp8bNY0ZKQeJ*2t zykphg4{NbmYx3Rd-G{L)@7`2Spg(s0cKDujEfg6G1E&+#MIiHLO6;~-J7f{}2ekWJ zkh4VVY|axpa@V;v3bVqHkn-OqTacNuRF$geJVUx(O-m=_Dd6$xKl{hN!NsrMk1*^V`T5W4GE`1cl4r- zksIh>wX-V$Io?ILq(K$g`zL(Qk}MkP-f?O;=92zs1YnJI-X01`qx)>+o$bJk(8xV;SrS--XI?yMEC7zws;ksgGjKPaklH%y4TP*^ z!q=E;AU=EK>Biau8Fk(@RmT~q#WK;$K6nA;@JdOUImh!^nW%LekFSKf?jx(7&!&(4+?Gk`cEDGTblz`eL!)NPmzoKyCqhD|4cy{X}1 zAe#Zq59*?(JzQY;bck2!4g-DgXVtFQ324uXn~r#{0WDiOQ!}$R(D2xuk+EhP@O_zv zm}3G|82eX@EM5%7w?2+fTxLP0X-lDD(JpYBy!%Vwxg(~&*(G_s)dCB()_koJ11x(l z^hDhguqNc?ZhEx=*8kajHbm$MHpf|YtI58`cA=(OvndUvn>8JozHft!P2+^zWG^xw zeJ_vckwDhe-TS2nz92{0zu}0%9^~pW&%Df9kAzZH`qc?5B)%5a7J1Dg8GGu*`>^*& zEvno>ZZSpb^!J)g*L;u)^N$Ijz9SVOIg&kd9x2BP+u7&ZNJ-?>hu*ryyTeX@r}amX zn63L_A9M?et@WE^WrvV!R^pc^pM@NQRfi+g&m((LZDiG{&B%P6?v$~JiHw6E6(-eJ zB0YS1P=?us?Ir}?>iPa}%QHkdN9%g)JS-2|5qVKF8H;>Ij-4Fq z#f+=+6RT^QK(kFi>o6$?8Q-jbMcdEd7=VAjkAjZY5(dx_wqpA>Jm8)zzi zOb-C={*Y%K-)w-`vd5O@_22*ZTbJpd4ZM3QQ*gxp5|6i`27C8iK-u{=M6VkID%d9O zkB2F*S9d7M+71C_srm89hbKV(cl{;*izFa}3hYf&U4ZC|XUMC52SVI9+`MWpaMwxB zkGN3|9I+@zV%ZO1^#$}fvk73{`%=xPbb$9?ED%v`9|O9~&4gSNZD?azi9btIg67l0 zqf5zcP~Ys3leuv>)W|X(2Nmy!GQafReNQK#;M~`RBemo3(9C1%L&#RVa#uyRY^t2s zUENCqA}(O@Tglpza&N3i{xY+NuODlr^t38>-ob`uf5n01JZ!N_j>+*b!uG0^f|H!b zNdM6-CBRWbM!;wFh7?z1e%dE+<3KR7H|H$UOioA6i2;Anb`#_}{Ik}m=G{FLv)uW? zH<4Vh?}mmU8_A4fne|2xiJeQ4a?5KikEDFT)qCktj3Y9yUZn?nl=`>fk!$d>?vg7aEG}UNhx&k4KS}>6LM! z(*l{M?w2lDSYr3nna!5*eb^Z$?)2Np1>5vpPY?YJ$ENyNu^~Ac)+-&-GwVBtuh|~! z-#9j7soLrXU#1V?^ZHLAPX>}OK|sP_%{Mo=Wk&y8l@bMy)9;8hQs) zdAmGWTCT|q*rz2mMSuL@b>d=|lQsgt4N0;*$T9}Pe!jx$83vHjAD)Ju9R%|EY^qjuT4LvNCSQWz0z?r#OMmUelw`T&qy(-U0V z4g+yJ`DXaz!@w=47nGm!FT80`>Y-r-kj!ApF2D`gHr10kb85m z{?DOei2DA5aatn;V^ofBa2B)2T<%--l(rT4qMV%{=yesV99*)thB;uJ`z7(&jd9o{ zR_&8X^TpQa2dd4ts<2~7%y~$&0=q?0NA(IFkTK_-UL`DttYdd=6lKMbo$#vNs(S}= zN`8wyA_p72DTzYYcL9z4SH z-Rb>_#<~}f+ACx1_A4AI0qMe+VF4r)D!WekyhKv4C^lyE79>n3(-gARkbAL;b}&l< zIp>2@zr0wC?A?ExQ_Zg+b5`=uVp~OIBu2v>z&w;>QTvMLlgFnsp4{N=bgE3*A@v1tMjxb$om>mtH);wy+H-+; z^2NZ;oY$rMz2mn2)&a5wW$ROx0ww!x{uAL_ydLmdWFW-r(F4ofSes>mQhDKPmiLg? zqp3mBn!AB?IDGFiLkEba6ua&WUYGI*8G3iu0e9u$-FfUT;4Hj9`q09b=d~r>a?3P; z8C832cex`l6#67@GCl)cH$Iq4^M{#n?e*BP9f^Wym*2Wr*ZnCz%C&JU+?b2S%4beTbe3UxUs|8| zVOK<#lL{82KG9LKJ_?wWZV|1oy>Jc&ALeGXn$+#U(Dky|45LMIg+_C%Xhy~L2{k%{U0-iNcinz zU){SLxzDA({`n}4oYDikhaSvBcG~UbffB!w<(Ne3WTYT-QHs?0Q^VM;nbuojU5lM! zcBj^FtislYvU>~EnAl`)=y;|y6YGlKVO01-teQ9yX5onV@&M=Xl9XC}CUN$M)xC6# zYu2*O+EfYmyzedg_i7q)#FYaIPrQQ?=4EZJ`FeQeyYnPBHFU*wRviiO1xEdCo3+x)z>?cK5%l^MuurOW4J9Z6$Im?b z((Gg4dcG(xS#uSL{jZcX&JP3e=f~qU!(V|6(VyD5jRoZJV^+>j7Eo)#W0plk0i_Wm zr~D@eD9OZ{k}Z3IWYbj!7V|pv!XsnihB6Rj)2)BuG$7=*gelnh0e81@;dviv;DAKW zH?KHg%akq-QSbsL_t%Y^fhEB35HuS19tZm8a}UybtDwC??y66}8MGWv^U?`Yh6ZkY z)wybSsMX{Ts@C*`ie6=*ttvG@Q?q_wd`<+i8n%{I9(n=SJm&L%oV$q0HpiTv^k!iG zL7dvA>42s0KB~`qz6`6q7Sc2=9I*b9uX${1G&aqNNCZsTVcP}eWn9-6*!i3<-`({$ zcE4I)t@M^e=6(rJ@sJ2)C6`u9<=sMd+lwQ5hx3s`i3m$q>LRy(v|p}J5sAC>MH`IY zBB^TkT(N%zl8?g22!S*tzeP=N+M9rsRKLon6&sLRp(`&ovjEA_w3RwLdsJkAa}j@jHmF3ruNskWTxa)@=YTktI zw|Th};!eO2W4?~{xdqH{2WOEkcVN9)TUKZH2{;O#eKwhQfPf`?-1f@>X|PG^RE9fn zmr1C8q(}g_Yme?B*)ZT)-&z%KIRm_Ur9Y>?=>YGSE`90wO6V6kcXKw-19(5~&y%be z241yD@hT%0@GNF&3s+?Vw^_Gn>mn=QirhE+y7>x_o30LAm@NWAV;?r083&Gd;WwIr zGqAd^DHcmh0rTv#;IB(cf&Ri~RQg>TbU!JMtsZO!>ahr&8TlD#BXfU6rWOE2Yp(uv zgDBLE79UE!7X%f17yP%aCLRjr4t_QabcLXr%T^;xhVj-zgNfmp2rT=0P@!w;Db|#( zF)VgjgH78Hn>gQ;z*h4Ol6zCPVn=^xb>{~=r0w}SZTwLQd&9b$eMQ${-wk%JLC9ug zX^uRJ*0n@-*o2UmM-y@$AG{W=P=Z9mbfAW&4U+d%pRF&`M(!E2_hf1v^8Q=&;=86b z@=PH9+i-aT zdnOyD+BD*^tK$AM%dn5wVdz@_dzTHiJZ8(M8VF(Ilxl*xa649?o_nnMHvk{F7^m)7 z*obMFS~)WxBOvD7w$zQQmO@d$?Gxsutxy?Yq`W288yc3-7$w|%pimw-uMh2lb_c2b zDN7@O%JzJ#{YMUZ6uVFVPK*b}?rw3Y_*w0arZfE};>oysUcSICOZ)G>OBAr&*0&CK_Cwz+)idp%CG^hN4~zbH2WT{%1Z4+L==A81m9oD8 ztsfT4FNA&29Q?`y_Z)$z(>`wr@tg4Yer!f~&^yT4w{)DP6@ZpIxChI2v|*lfU~qzt zH9kpe$=g!31#8bs6lS$-#pcm$=?$h?*d{~fnyYTZ&a4+QQCWUS`$^PW#k(L~X?o(4 z+aqKy@+=v2DL~eR{7G6V6WKMWEc)Lo>VBPeOW}e7VtZ+`% zr)Yo1!o!n2si!FzDy6?t)!Gg+AH*{q+Qp#kSY)%gFG7vAmODGA8=mo|q;9Rh1Fg~w zZBwUS=*ZEVI{L>8Xo7255iTjvyW`2&a_<=EGdyrsZss7cMBhwAE75>`RNCq+TM#(m zF=qvma)F4`?rM`^0qJ9Tti66aa5c>$woiuww}&@MpNZgeHdZP(*9g2=>bkuX-+@;) zc*0GZ0la(v-gJcU^UYsNY4lwe@K$#RzR!>YZnjJKoTfRDKL->G7c2pC{hMd=cy!)hgKw2Fd+?>`(*|DLLyu9A!_i-q;xRg6y#f5kU(&FR2W=u)4wE7(V z1WQbvnjQ)IVHHEoNH|O!8;|~MT==~iTaNv^>zefr+dp(n{L^2CU6xAE|0)(>PlDR0 z)#E&5WE-rmd})Tv#`)|e+bWSQMo;kCQHdP=ttok)9Y~m~KFHUcholat;!Uv%k~7&o zes_K#_wGhzX~PG|TYkp+vz{jM+#|tg)g}_Dwuh7TFEg=Hg*R`;! z^vc`Npx;;`w2_tG^AJ;3oLNx(0U-YKn+2tzDNyWh?wPB~fXes7{&PAXp}}+b<}T5r z{O{hjZf9;Zv|pI^wE$Z{q`#?|1?sCaj)jT)phrR4(e_j|FfW{lf~VIL53CT9ZNJCLLxrR}r#^S`c?|_l8@9l~wtOf9k9G6Yq2-toqjRAIG&Ya{-su$izGUoq;k_(i@Z=7c!RY>LA zgTF5@cI>8e`N(xF`buX$4gZOi+1_G0e&*P)Ms!_DYz0ypJCDyr7GS$s@&_AdX{1(_ z72WUi!|tD}qcQ@ckRhbCyK8`-V?NZKuP>ZNR;x^clGhz%|J08YOI1ZeNY=!^FbIhs z11lED^dZ?u3<^rOAot|sk;-9HD?9*j(%C8|$ zJH~#_;~sL~)8>A(EkLg4$AnW#pOEZ*D!{FCKvLNJXr#slB;*A0jidNnFY>F&-RzC5 z!EmdAb;8I@-S*O`Iv*Ja==ZFXIUQho@NcPUuR9+ZIuoBZHLUM3Vb?MTX9BmkAOA6u`_ zRzO3rcXYKO|6UIX_Wdy)g7))gD3Fi>R8ED7`ejGxk$iu(W=|(DRvpYzI~W4YK+EoX zF}H!$dHRZKmjSSUt)iMA5QoN0eQDc zLAdf75X3c4>X-y@hI1rZvh;yXmh8+|8wXZljMPSk6)+Fms65vZ26`9odsE3K=&sAW zr1eP}sF#nvw8&Zo?NWVP9|32Wvg3uZuI!-fRPvdcUvm6$Xm7ZFHZ}7lN2$ z96h77OiWWtS--;l7nY1A>GWFCuv#KqyMM?U8^eYbbQPts#i<0ej;LV!yG!nWtd3w8 zsP$#g)?<$ku_Jh;6EZH)FC59~L}rd_UU;7*vWCxm&wYCrIg*uc3O5}=Vwq0;`G{3W z{8f^qUGReoie2-5M^LioCTuhN#kh$XhY9J=!J+ zxkIFI%dT1E#wiw$bv;Gyf028iAF@Q!;XQ3{Am8)i{r1lKk0B?ci0;PR&-XyJx!wbD z$TFGuVG}HgeS=3Ii7lza-YKW8FDkW=_E!Dk=LJA*Id$L(CdJ+TSQM~{%s%(EDzqFXaiFE`pM3R|A3_GIvD+14csHLLX*F? z0=IUT{HUuWaDR-g9g7kJo={7&yVh&qe#^}MS6c?$@>^G?;7mmtl?cUT9(lBO7wKz zNj2ztdOs&PBmp|y9Q)J5k3-8Bh4acUbKqIYX2smXtx#j^7Ur021!Y09mrnGNaO8kR`eW$}qT*KjW zCwYgps~)-Mbl2~Q%|mi>hi6f>Ba$}XLGqUX5^0wP^ShOiQ@ZhAlus_Q?^ce}sLNI6g^H8r#g z>uu-03|=e5iqWvuvl)qauR3M?=KV>$O7*_9#W)AjszSeiEf0eSOL`h!&&BP<3O|$iejl=B zleW(dU^Uz9{3>J%?7^!Kk4)bH&S2${>HEb%G%eO}-IW5Q-}01CAEaCz2hSR1(K zwx7+XRRZ@>hO(>N7T|U$DqhvO2HdKLv?hBBa4#RXy+8dNxXW*4t@s-b=KJ55rAGGIcYyi0^YmiB3SbofIv8UW3_bP6=XIoH zpew86OVj>4&|$eU!tt3Cw7k?RwePqJ&(c$V>V8eyGSlfR}A716@8c=ELXwy7o8J(@Da&Kt{) z=M$z#YcGkGV=l&CMj&TZaV_@U6FsWC`UJ8R=-9u8Ln~;Vj?tFU^*@*V2%i(|^ryix%Iy>VAF-F#+ z%#tmi!%kOu^40tU*e38iY=7%LZ2nVl=x{?8 z*4Fl%^IoZs`oo#%%96GH1H*c|TfUa9%?&5j@(DNi$-|Y1jV5D!;@V@#Qn0b-y z1-F>M>d*MI^j#jX$JZ!^t~LP9kg|1~!BZe=hJEk9PzBOy^w7|4D~Q+w+L;Rj^t8-pbGgtBh7(pbdO%$& z?C{oZ1lpdxU+ZE^2a4gC&AhZJsJ9VXJkLxGDyB~QsU66GdsDTyH*rJwz1pERTxAue z-icXbT4#hMZtwqiD}TVM`}&76>r}Ae_uc(@-e<67;p+Z*e^z6A@PDDlav4bN*eka} zD-FBfGyWBg@sQ4(+?gN#4w-wOWEO9dLRN&B{Ma{rWapTKzU`1hPL{(S!5I}Ke6Dyk z>XAq)t>p~QE#z}0I$}ukM6Q&U#KlJ&kZV2?xUZJa&vEp7o}!FgkujO~U7b7J{{8gWdBQ~sj#ofQ_Emn3Z zKU&(agvBL2Z{^Q2FwrH&ZoJ_;Brbk$BOG7}#i^8*0&#t)Y}|AERQp|M5Yy;#i>d-j zx`U;JawW7c7~DG-ItkQ+hrM4Oih*vQf@SFFy+<^E_edK;~5fD2s9;}Fq2aapc_EFCx zz&?FS?dj_sz%rHot8nc_{}e*MmRF~p3@qpse)a@O z*Q8wzS6(97d17qRdj`1z4K5*X?jv`Jo~BDDzxPcw5chJ}NH%y5JzVUHu{jNgdj(Qk@!qL2HBf;Il4J-K$gTfXLjZi_T8QrwAAf5_P&bA6=*($ zw9hvRmR8MTC+)_wBTCP)?aGN_-JSxZNUUwS86k~za|w>+o)@s9x|^eIdKK^8Twkju zm5SHS(I#$-Z-LZ4BZ}hY0w}SSTjr0ap(2>6*Zj3F{}e^?9*~DCw@zr70{Li=sUKqmMzXT0B> ziUu-r=KM(Oc_5c`2!-5D1R{8YVj9;1I8DZ9#7jxJ`wNQc0#YP(13tqB+$eyt(IwSgN}ED2Y0KKLTmDa-+Q;FLi4tsFXfjyp?0~# zYsHhN;Ypgafndrh$fGza)C%qdukoBZ8D0_IHd9SZ`rL?Rb6#%2tX!-)WEEAq=L$Xx z>OaGt-i|G`o1?t9y~U12o|b;WZ~30yFB~G5$L~{tZIi1)kg>Qpa_mtEGOZ;%Znn7~ zD?H>~{Fyz-j{h3R{{0v^ejdBeO{ycYT|Yy@=sgnTFNviJXOOfw$1tG@AbFema)C@H zk`$l%N0MPkHYr_Q|NAeJ$sfXZ&Ez9#uu!B!`|pzYBP3+4b23+H^Eu6Gz2H`i zY}cq_YRE@q9VX;1I8`BYP2yhD@pnis9J)BCa2vaOCy8tdT+IqnR zx1H|LDLOTF;YJL!wwcG-zP5$tN(aeLC;_$iOf^$e?m)Q*b^nW}olvmGV2zFQI0Shm zwh327VCM3(?rU1|u+)MRXn3;#tIuV+8A@)&#srh`Eh`hTMSsF->=PB+lh-vC3^^k8 z*`Vh5cR}oawsJ>J*?FX2Upd?MIu4lP}fNL+8KlG;~{#4PC-vn>Zn^PXc{b5)V_mT(nK^+NKjjmO*J#e9CMuC2D# zL1H*)NrtXG5@!wx3*RJ=)22pw9&iuYe~k31Q*@9ms`O;O)JtUkPHz4b5rTd3x&o4p zudw&?imhZ|Gj=a!vb_^;B2|oSZ=%lccjQ>bICT+Hf-M$ESd3tUV8x7@0bu2;i1}JC zJ@Nhq--z@)O-vp*`o=i=Cd7sqe>3_b4n=Y&WnS7TKt=x_1(zcwP%m)W^4BDPgNycaB^$S?9nUn{8GLfT2xo3chW~TmmR={FM zr`nl{0K3g)baW4Y&LuDVS~sB!#5QSaI$H&ZS_S2ufnq=|g5p2)Tp)MRn>W9F4y5t< zKd#TUfm|z7HR!w_i2j8J6{T4~xV<R9ymfSdj;%u#opTUp8#uh ztk2Ek!O%A{FJtefhd{TvDVmMHpgRfs-YtC&)bzJe85cF6-Rs$TXTvaPkvn_w7<&;k z+83n!*L4i4P1KKNd2NQ$D~#o45~cSZ z`(y2e^?RJVXRz7R>~qJ}L2ON*mM&a=7dx1XvZ@W{W7lAT@?^(P?4h)WRRu&KGjRyUO*JGqC=9<_b0M1&&H6|KajIO(~2okh@9Wmf%CeWkhmhEA9+0tiRUQ` z|84$^eM54_ud1byesc4*x=$h4ont3HSx-Z>7|){=G`i2-S56o{e~5EM3-JVeOwp1(u(9i z3FSl2MaT4o^KJt}cK5~Pj%r{U#XolQ`vokAw6v&ev%o%>nYy>Z2smr%Tht@!fJ1k& zdQai|(qY5Wfxk>3p4dul%5DPU{nz9>a;t&(b~n(wm%>?KItKw4El|lDz z_lM3;jevT5vA=t=M|y6m9yP zF?Kv2llSmuV^>XR{o9=p*b~3@_Xb%iGStj%M~-zN)8qqHEF=V3wgHEO=ZzuTwDqCt zf=Jvn0# zD1pR5A9J&(pON!|P5VX*M9%L2q!tCKAv+Y-1rLlOD|1f8jvj!_q=gRE?E%Q>9&sJN zwI6%+MZI(a(vjwyyyC&>ChWXCGZ^_w8{4e6CZ3k^LyCxRPFsNp*6)aVmF}U5m0CR| zhbekkyvY8g{bR($9Y2$gt(AiKIgy^#A%jp98k3djRRR?syWKBe7J|Al#qSf>s{vc= z`&=KnK$}{C*87L+p!2{-!3pa&pc!?H;c^D_if(osKO6&$o5i#q^Gsk~Or*!^Isxl) zm|Cpv7_d*=9_TIY1CE@WM;*Tha-PPo^_vn0LbX~*cI^WoEb5Pm8DE2L!Un5>>qhW+uT0KU^C!4Tz$`~UB#jrYM*xXMb z9UDW~;jEOS*s?-IVg8my*ls0TX!j`tsVBA;pC7(~-3B^uzsoQ99{>RV{|r}WJQe;I zMlvcYMCua=kYetuxR8F`U`QS+5F!J-6S*GGkK$`_@5%}7U~MM zrO@?Wtj6=oF6i#jd0C%h1oW7J@J$Er0ZSpIxVGsxaJEUN;0D$^MF3 zYl6UIcdOpCBLd&y))c8xANYKVe(!V=^eB#1B}To09>c@s`;`7ck5++5$L|Bc|Fbdm z+kaHxr|OvP-y#M4RRN0}x_$%CWy5j(-~WJ{;-^#fp$0hlIu9LZrh%<=`R~M;4q((= zWxsZ?1)8+AJR|oNQ1r9o_Pb^SX^Z%gM^BrfW45W~WPCcboV@XR?>1?uy%}NcZtV-j z{KwYz7iS?wCHb%Yk^AVHJ-@MSxin@gbKRUO)?@h@ijc#g{_lf-#_gG zBy^k-o|_Cq(tA0&?qDKP-h8SpY+Qo0yso+VYFlLPn9dn{VTJ67BVtC=ACSYIu{h$> zjogNT>m`0)k>~5(n6@So`HH*v*0-)9KWZdeX)6QygAdAb3a?;~s8?5glz>0Nx6-ydUyg32+kLWFXehNW`}tu_Ce&>l=IP}efR@QJ zZrS_OK-jOU-z`50q-(M|bY&T!*wpZ@Y4Cuyaa35?IS&|3pL9c1)PTM6p7Ds17I5P2 z4up3d2JZbvld;d2fOl|IYvgA$@J1|dXR7!D|3Y2h$}{!AFIl7i)PV_n-s`{jf;E88 zEztcWSWJFFVAmFz6~MP7L*hqA;JsE_6&rLMcss+6{alm-T#s|Ec6Vlh6QVv$^>zZ* z_ojWp_2$4xvb?ioFa&7A|K84tdIH5zPES446-aw*PYsWzP3wo|(XvsOwc(P+7 z)V>;*Ia{REdUDmq@XW^ClUkAZ_i1pxt7(k?}l4dhN1B$eLox z&A9DDPM~hc+h#Iy9ff9|q%K9C#@+O$=u5~WE@j>zCL({wot{9ltAG#mi29xXke_?Q z+DP;z@-tT7KhvU!e7C-e-DR`LmzNdquyH_M;)7k~rb@`2+@k1yumrgqJnxVVCXlm3 z*lc=ZKC(;`Gqux7kv_Jze3rizsmGoMCyxjr`JTgrWs&~a=^MQNokcTtSn6NjFqDPO z^8XvAFX_XY6Q91@vG!qMtD=(FzdlT`R2zACtO9&Tr&7IK4na<8nf~b6Wl#~T{P6JQ zbf|we8oxtt0NTv%y4iHP0-^syb&}h9Abo0nqceIPC~T9cbz3h1?Sb#7pN~EQW2QFC zGq(fSJCJ2@X8|}#zeCnFI|KLDQZ;9uAMi9RO0dbqKsHZv?+7_yR zWvM@a2D{SMH(#TnGWuug{a-&JckfuE2f-B{(Zy}v?)Zx_opFZiL#X(C_(SK%OXFC5 zZpO2BOdgvQEH%bQtPrysHOn<`A@Qeri1LX=*!9J(_m}Qt>~3s7Qvat0>E;#|%}PSZ zEXgn#dZLT$?wln_eQS`znH=OdKSgdz^X7i1L&)1J@>gV22lARclEozi{E+(h@?2jk z@^?*N_RIG}{$7zSUX&2zD=1t}7865Wcla^ceoN$?Ui6}1$pz%r2Ck)^cSFwivuFPZ z|3=Od)&E^miAR=j!3$lX6G*Qx(Fl9*hE!E~`S4z8B-=hY7?RV8oo-QXtO)^6PXG5! zxo;yjZ+;S^*3^wP-irU`#X7Obu;4^Sxhy88#HB{e(cyO9Xp43Q8?wveR=#YPgYqD4 zzB_R-)Gu+-F7FM4*4*8iYnFcjg8#2MrmG^5LfjlLzSRPXeb~^Gs1HC}vgLS7LKiUZ zJSiS#^{sa9idTV#MA9cX9W~z@q}- zX#QKx3~~V0g-`CGnTLR(RN$(;PadexMPD~Jb^-bKh1VimWPr5F+h4_|76_7Y=T^EB zprtx=U2bL^)XBf`PB)x{()8B~nQ5w!krgv}t@S=!iXai{iW@LhI$<1te!$`vtG0e~ zv%^}wnCru)2H4D5x@JX)A9f`7*k%9zj-B}@w8958kR0;zvR8f{QVsR=U*~a=UKwMe zn`eQ{F9~{^%_ETg@%kC#oJ#^7dXtw_(16?!*BT?OZOD`FyS8vB3V8wJaoKK?$m?i` z3m^<5udhv$CEbENN*8TfK~N*7C4JQ%Ay12cc7!^B+-KUq&RtSL&X1j&skfq$v(CN4 zsUQql$4^9F^qWP7;?&WsE+wRvA%RG&wuJt~|tb5wdZ{;%Z#*hP7~# zm>lDU&7`Rpo?|<) ze{bAaaorecZFL1FLhG^nQ1L0ftwGoo_hPx%VoxO28qmZdKO&yJlhWTKjg1Rum%Kgx z5UV{5Sp^=Ou;6w`xId_4T*-uO&@%x4uda{3CTxM6$NxLOVV?$6h&ysu#!Nx|`n^w# zZSA2o+_vV`fA4@`J(N0iV-1i@kCX-cNdb!3fa`_uT|kY!lYiK23DDo$-|CC)1?C@D zxjY|nV3WTW9&=3wPQfk9z=wx`Yy4T7VUP^mwxEg^`}~0?rM=^LgTSxo8(BoV6ajDh zX|c;F&=YarTP{QQfLptoJsz+HxI4#l>(_MvCvickS5q3;S!pf{`@Dcj(;8XKsQ`M_ z3$eddy+FNq<~TWU6v*^%33^XWfh6f^HzyPUgf(l)oqQc=m6RXx+~WduS>84>914^# ztseU+!GP>Us|W9G!@+yPc=6u!NlZ9kyRzU}H5P6ln)v+)#_Gl`%kvb@Vbk_fnSH(P zh@J+kL$;bAv5qs;M4HB~$NKGU16J6rajoj`&OJzrz9Bnw@Fp@^`!^mV&myY;A4W** zK+Z<{Qoo6n$mx-<*Dx7J?#0_wmK_JVEoL8TvtA+hN9UIf?o-GUz8vUl(udr!d9zxD zH00(E?ujh4LhjD=jju<_>iyZ19qI!S)we`D0J&Heol+OISYG z+4mWr*yr{aybFXdnsbro!N-vM`S%;86M;~fHul2$!#ikLW5u9+GlaG)J; z)@LQJ0Me7@VdDo%Krt|z&{~}Z)M5kY$d*o^kMw?MN?8DAzv7^VObf7|`gk3*75GWN zkcH~6dw{!?wb)qlB5*yax2igwfLjy66{B1QF745-na@hVZ49WcED+q6`$grq4+;Ty zO+>@!x$nSA&Ad-q z0%=^HIY40maTWL$n9`wLZ*J&d>sn}-_Utkec??w{XZ^Q^#6$io^;h-Pa}fQJJ1sxd zhmS;s+2>16;xp$fZ!YMhU`76>;61NPu>Kh5HT7c#wmx;3)4%MA1XG78sr%MQQeLX8 zXSxc>l<X=E$yOnZAR2RVn`dVB^~A&1{Z z$rE!&?(RO-@@s-T;#+IskrRd7Sjr8%t~umB78Cv*gwS;*zOgdem{ue|>0D+1wGbX+Y-3`mgk`=1RL$ZraD*4IV@ z^-#dk%j6)S-w2FLC#wSUe9Fw7Iz?d3n<(0jPXlL*)xDc0LBOeD#HiRx09Te)+g7a! z+~e+-#@49;_rfmyHXncB?iat{?;#AFdBv9S+AiS4u85!&p91#6i|U*YY+yx8_-Fk9 zVDzc^N-o)cR}(r)3?+zCbJ&&0PrD7##l_owqGWP@3yUr_*fzjlA~ja-cJX`#!KbQ7__&vLh`e?3<34E8rt zbiu}uC+D^_4Pko3Y&Ul0H(VH|g$0%1xt@6{p@KwcWKyt1uAhthep7 z^iE`^mnHrBx*FMPq4$?gk03{9d@_?Xg`9$8a;BOBe1EgA`Wh=EcU=qr?#v8w*VZ~L zR_7vTvSZnIjY#BVm{vbJzYIC5s}7y@IEHMY+&0w;0x~_t42_xhk)9!nb^Tg5&60v>N%GUMfr?FA^?(O{>He*$t(%Jq%aeVG? z@lfK)B8+WKB8e#Kfq&JDfYy)OA$#F=ow-{ql+9P~3t18ib?3Q7RxkXZ#s6&6)b?rU zs5DcZ_{)G!pPG?3E_Og(S!S#mbP&3|rq*kc#($L1>c@f}zSnGHA-5=mEvQJlER{&1vjjsv4 zhQRrs_CQYDPeCr`@)y%hftf9N{I@0G5Htlo`cnB)4rXer4S@>?^~-v zgRjdlwJ7u2$HkRce0;a*zn5gJ38*xf@ZWpA90$DE83y@T9l}=P!JSq zM{z=qY=y*{bxo4bH>2~#P|5iVahN_|8mc&&h9w7_q~^+fv1YJNKlz0VHhm;zJPEjm zSlw_`>f2!?CIk`3>Yrnmsvk*tp9fOz4lQkdNI+@=)#vE1Wk|m{X{xi5j!d!QM;;!I z$T~g$UjN`cvQHO|A8(C7j&MTq`J3O7qw6rYIAStM2v&&M}wt75LYY2^9qo*3pRnieMdAB6oQ zat?WzK(5JU&Yu@#sCY$rRXQmN^~X(8*Z_ngSuTNeP20ry6t%1d%Fp` zhIZbORMUg*)eG)T=eaI$Ysye=Q{?0WKKJry>SH)+SRO$hxb9-zhqMB9|AP$SF3y} z?ttp80Y^7iK8Awt3d?Fou0Uea)tS#E6LdVf;!>!}O-#2*Jm#engT+KO%??5>);wOR zsXL{GO?MxuTC-LlZkA5ncvl>WhaO!0))Xx8U+qt-^1_j_l%*7LP6er}DHrEz0cr1T z`W)_NBE$KsdHvTKWafv{6VJ*bD_(T!HFXEFxBvDdj=KnQ1?86cx@~`H*2V)<~W-uzq$Qi&$!n31Oa?8a;5G^C$u> zj})@_k^_(|=4pF;SPKe6zDYLPo)_$gq|Em~M`%2A$g|wA4%&rN#3c;aK&X@fi2$utnR;TLG36@cH9H3I+~ql=mfB2UT!wf5a7K&>5BSDyI@Z2T!O_r z!Q9oeW)D@NJ7V|iQLpzv_UrmKE8hSly)7>trs+Va4O0F$+Y0T{oSM&<z!lc6k?V0EN_Hdd~C^Bv%jA9G#$|QOm2*t(Pk?C2&~nZn6{>ZC<~Tpiqg``J~*J zQ>U=;(f07iC1u#Ye$V4u=_ip;cP~@p(E%iBsYUpR>_f6kq^PTK33j`+oYC#Sf;62o z8fU)QBE7g!#MwU{8U5Wa4-o`@5W}mNpK3tXnHakTI~!yrT8)HCNg(U7X3^VcNyyr` zH`(1o51C#`rL2m5$naWoeXoce(lzdlcxk^xYOE3AZ<;Jp8Z$@bE|IY-D^F2Q_a1hd zedqU>`e6r|t~~hW3ASp?5$z`=vEDmpZ=t;!Rz?giy8gir^FCVshzzsB7|EV|&3g(E zke!sf!Nvx%ZKqG&kHc?E7}tV zEaCk>@3#F1ES1)oI-3q)P97MuW?KT&?INLT={PV_y$;%K_W}A{w(@EfWuQqvl8!rP z4&9gT1m3JD05;Do1a?7)S!y@5yNBJdj!lEcFR2Hm7WqKUrX(rJ zwm~SiOY8WoijZ#U^zPVdWpMo?>3fjafC+1J#S~BS@j1QtfsXqxth#o{TWyP#z!wt; zp+*0&wf$=M>9s8EnD^FMvbzgAT_1EzMLS_ve)bZc3{#-%&93&sZ;^WW!upKG5=i5> zIcF@(LHfUU+;g>l$as@t-Q(3L@c#jRKO@#6vp{zE%hpfGjH#{tytWUSn$P0$f65@k zQ%J&BbrsTGS@GBJt0QgA$CKng3E2H$eiLDijO1MZ4^hNVNP3+4=Sr9Y67_bg)>Qt7 zXr2CT=|vH2`rS^EI#`0WW_>Bl4SX!^y?Fl8KX=Tg>{R>{X^(+gca1NRE8*!^Z~2Zy z668)u+Ak2Dp~}j)5qUe&5@* z>U#l@XAVo&u}h)5#ip{~&T=i7O}2K zRUG_cY3YcR`=4JOVo3}3SLVd^Iy!a+R`7lZoj`*2%c@T=k7AppyS-Oh5H?J&7jKA; z!s_#zP4zs>u}IQGa#?x}rWzesmQy;9cKsq&J^oK2QS|iNy?%c1{9D!Vxso=hGBZs+ zOw)n-FA2^JawN1K54(K#hqoaASh2>_1UfCWYm@hx-_W(L?$hZADxxJ;fBDk&EO+N{U>-UEt2uiuvYNhS>#DjuDxD}#WsTT~&FNfjh*9<>r31R zv1_3Dp`LIhQsTB6j2CP`s>pytoy7yBZA!>L(9(u0mYVBC?N zLFumBz@x_~iBRhZ>B^}g73{rG)aa!W=SYR>&_UM|@$aDF@5i0fTg#zslS1Bpo2}3> zACPId`6+bjWv;nKeFt4SEGvaE9Uy<+u>HYo1ax1$W!}DD2dFXDRq?gXK)ZELI%ro6 z&=)ZyBq-N_eps3uG-?R+?RLsb_G$u+HNWPa&k>-lmH+x$%^0Ywxhnh0jDSMleR^|K z2apYp7;Wwq2GV81^xTG}Ks>hlrR-$T{{a91|Njh^cRUq*6vjnnMrdi05tWK0g$~K8 zC=`{Hl0;-DRAgjDM%iWWb+0>IT+W?lgCdp6YlIe(D8lQn-+#Z)`JCrG=X@W)1-=8i zT_aF0Bpi{is{j<{LrrR+CJ+wBdIw+2g#y7)h6K3+5^E<;8MPOn_W_q|!4@wQL%ynXY+ip_;p*14$PN5p2|GHGozZ)$`k5Xw zgJn)s?hC`l3){bZ@{_>Yi^Dg}ZHAD%s%3_ru89@vO|(wZeqat+^kB7N1=G4CP^_97Dw>AhBP4H0aNPT0zmIG@epun0v@GP+$T~)8&ji zj>^EkpwzhiDi^q#4VJD8I?(i7I^*BkBxu>FKX{t<99m^{g}%CRp|yMPxOB#9Xww$Z zf8?(ZZRVcugyPDfO=99~_2-??8hp$objJd;UIH8w z#R!4XpTIh)YjW><6EL>KC|pxegL?mucHcvzfO@foWtMjZh&&&X;ybxe*!$f?V!s6> z57@2#Wbq5P=ZI}Ovdjuoj6Cz-U z=Z)-aFlN}DR?FLS6}=?;9?=LNA@TgortP&~A^&bq=(qFDP!*jj!#C{$l(jqd-dg7d zb@FoxDY4g}u{U~i-7hO(rq~8h-l_vTqGM54We0Gze(~8i$v9)4*AW{%y<6x zfT2Ec%USdboB4pVQny*#APQJ}#UBO^#{*-7@#KQRZm7@lvme&F1=OmR5245OfasT@ zkR5gmiY12nCP@rPYg0hSd@eYvzo^*VDvwF`C=Lx_bC^FV?5$>!k5#>|z8(y4MT)A4 zbHElB)+x@-c(zfov6*A>JTDiS_ZkBn|1SB_vFNC+Y&UX+Z`^pb=!{KHHI#QY_ptf4 z2yLNa1X~XGKU?u90b6P*uV+}w*wQEPai7d2wp3rT5?SMgEgBa&S^hoPe6?hE>)9Y| zI`*yWUko5;q$}@?(-5+O&wAFf8JX5|H(tF<$3|BLs|VcgSldL3V*AS=`T43qC&MtT z+LDz3?ZKF@m#rsq?j$B2&b{Z7X9^x|9{&t^MIb$iQQH+23B|{h1WBK|fp}ZzXTp>c zP*W72+=z36ddH(KO&)sz-xLKjuR06NG0ob3k0fA|)5<$HEcs9?VPqYTF*Nx~J#_kW z7n&XC+gI4?L5q<3^TRtUq2+99Cco+VrB~5mG^P+*1P1hul8rN8EH9{@J7*xdb%8Zf`nr`?%FES<&ud>pvdzhh z-aovtRx^8lw_z_fG}5}h3Hu^rV%@yqb4g@11x=J)QbEpn3%2ZrugERmJ}7l<7@LU6 zHa2=svDtZ(-UAgsZ0@l9XK>*oHh=!usG1sz%_V_B9=nRMc_ZJR_Jao41ecX(%C8}J z&ExJ^>V9MwuWDL~6Nx0Wx^j=WPs*!g_+yGG)Sgtl`}}`6pBotNF)uJY2=F zB<;)JDW(iQDG=JVZ|5_-+tcfw6xVY0S$4S3T>bJn20&?GI9} zJZ}R{V=*2rX`0Y{`gmmIo)&0!anMki*N0}+*gDn|3N&Sv$Vz!$1um=7EBxb5;G~sn z$e;TNY~}jNw>}(T`b?>d1#|)mRTO_?>qA}rtgc+K)l{Ta zyS{zu=ztAtAFM3fB8!aZ6^YqV8pt|6Ln(gliR>30&xI4I62%Y+KSN(QkRv@C)RQNr^7J|AU;l>$w-}n~>cwaVJ=w zf~l&#AcrYLj#Y$zN6jg-0e;+C>Nma{7PW<#eD>(rmrRsYj5app|^&34)!E zspuZ{d`$ACKAHV-9PYS3cQzWCbEM>z(e}u;KglqA=8v4)kt${L-;sM<-_$?>kozpCN<7aUxpOyeGd**V z`_?HXgnS#h4%0r-p5DmGdgIj>`Uu%^-?>8a>B!oryRg>hJTg-H9ES-MZ18W1_c18P zTI+{=B^&M_xjXMb=~*cx2+mNxhV)~>;$i!sE+tGkbnKP1{${-7GCO-mAp;VJKD-F} zeHZe&0;{z%uR_JBd2aXjvLz0gaC4XC1)8yY?)ca%pu43DTV@sjL;CU-H(C)etKByf zwm1V@tSh5aq#HQ0-ZpYo&A=Jfdg|YsZ|eY`d0j8+JPULYtL(FBzo6z5?~$fA+ks>g zGgGYV2^A~Jm+yxqLLPr#j)C+9B)CK={=R98*OMg{KFKX$s&<`eo$Y5VJh?fYHYJ9H zRoBouX#~lPxjLN#8?bgm!(Bm?#|G(-z2|=yA;WCBUCq22GCM5zJMOw8TWtQ}FMC7e zEYq`XIZ%z9LJ!}bt

WSf!aXn~j|LZ^!#&`H@pOC9J`Ii5!XRog0QskuBFo**kR^ znP2MmYcG}|!vIl0uD?~#-t4v*HrUCM{z)ogt%vQCw*5PiBDd#dd9@xAf*(Kjpu*G#v-nqAgL7?Uv(nKR{8)-=c~gh{#jrfkp#g05pekKh8+6c z0vwO4j4%9~fD^+GEHV2BoYQJXZ658wex4NnXly&MW+Wpo`=tT1TkQAimE*v0UB5AH zvKAUbo9hxL`JlG$P{pHrZ-5g0wqce0P9O?+xV8ibL-AerUT$FtJdtBQy1#}4_XxwQ z9@J7WV!f}}7dHjWqW?`8nUchk>cS(;*#RWRk_P$veg^U}{Z`;joB9m!wLCDz+S?zxO)YgZ{j(qi~et?MV>GS%V+nyjt>f({CU&oRC z!P}&Ftsk;a-;F-9XD_mXs`I&W(#X6JCKYwv3-O26beu#m(lg>ETqB+#t((rbs#8(oUllC;xG%EDP#e>QKh>Nf4WM7w{0-YXiSXc(sP8>NCgg~$ms`1E z8cK<6d_A9vfcUGrNSeq4)Wgp5RkQn{Zm-6x5tH@MK;hC)5Hx^c*E+4x@(h@n;>N29 zW59}!xzyrX4($CWN=d9SV8>SI9Wv(vJJB$2FhC2~h7uD)M*@LWboO3jk~}c$8UJ3j zTmr`Z9dAWdB%yJw>u>A6tx#8R=;mG*F`#nJ%B+y?NR}E~gpH}%`YG4mA*0AzMdQs9Z`BL+E~GjkE2QvxHbVwkvxBqknM-=e zwN|crx)xc}^%)bi<;V)SJ)Zh{Y4263?%evP9vP{Stiy7`MxS>r+N5!;-+$=s7LjbM z2`3xWHN8NR$G%75mfx{*WnYNOl_g$deVq{;Ou%Gaide030$v%h664Wc1qp&4^F_}b zAy;)3;cdS-l!X$t_8A00_3nEsoNlv$dffP6i{~w<6F46FH+u*g%q|3Y&PoA8I7{BC zxD%L)}3R0go8I?!X*U{w{?q{tF@M?@_rANxugpJ%$me%iFolyqX49? z^=V@2*<)?}a-;UW7m)r{;KQ)WeZ=JBw*OsR>f^iV!&m40k(t>@V1N07td(0#*G=*u zOMRogu9Fh7c$H7Q6#25m;Yu-_)E~$oUOV9Zdmd5sNUoWjH`1@y^(z$dW9@c4oFMrh zQv78Hn-V&a=u}1N?F+|J$pPL8mxq|$pE6W#%>qxK#sepk=OM*?b0uF{ z#!_zQbG2|6hKfm#21)P(l5$L^&&PP6F4)$0J<)?Y=Peb_~+229c-rJ08g%u0t^w}m`l+N_I@e0C5RRSm6=jtv9eZ2vfH zb`6m{E$mh+N&U{hm7zXX;iYhlH|_0wljesxZbQ*ew8gRXlC(olbUzYZ4lC`x{{bl{P0Q>wb|J0f zw2IUGBdmWnqs_ckyp-$5{1x4rkfB0;zv9OUWc0{-KRF_dOpW;Wdcu9k)U!F(#pFlE ztjTJ%VI^cZ&_!RTG-Ko9>Z*W1GSc(@ts`Gv>NhjsRZ!F~q&i;vv2dCntFwmI?S7Vz z6#~Lr244 z2Qb(lWd8i+0;BoWSWIgVFar3$FCP&GteJKEkXN%b-w89n{`^|X`NO&4^jV-i=;r?= zq6-w|RK%jdK%`imj~xC_1!<4{bO#y_nIY)Fj~ zEj7J^s7Dw&*rgj(*%MO`ib?a1$TjE}O=&$a>wpmr!{mPKbk zZLQ0W2d|cL#-@~t`Bx^;FcIDs^gtF+c_NT^*KI&Xxs+>91|YfVu9ndeK>k#LwwKA! zKxHeMYI{QcOZoH1)3c%WOxc-2123T3t4|-F5rFF7nle+Nbf~mi0sSXzp-`^pjpM(Y zkioYhBJN!vgxqeM?idZmd$wj#7v{t<-NC-%#9ARNV6WNDZC;BNpZ3V#s6UU@<;I!{ zomoib4^@46pcQFf^kxHIP_W*_&MxKG8*EtP_US)EWo$gkN2^lL#>NkQ`^y5?VB<5X z>+a9qVdFZf^9hb)Nas*(#vDqp?wz78^?f?hE)utDN8dq;W6lq)ovV>JJHaD0YKr9! z|Al=UJc9YU!%>)-izyc!Sz2~m(eJ>>)0A<2h#-otGmSTfCz`qSVehA*aAwy7DMboY zzIshvJ+1+yWxwqA3x@(#t>faupS3_6=@@OgYzXzMt-r+x5rAGjrhoT#UxsPq0 z{}2qr(nK{zZnX>&=7Q6)yB^7AwjcTW?XhO(LDAULK3E&6a(I1!Jl3CD+3I0&5$WOo zc+3o6F6A|=4-1u&*uc-vP73&q^b^T7QJV{~Zf@(9*RP*rt%TvXi7_>#CQrZUTHJ@E zY@_FQk8MPP&gwDkMO`eOyH?Wp-UhR$zI9)pNM ziJMTLEBV^gWIxa~H*EY*SOVxu5xo6|fl%-LQkeXp2kN$N>6e@B2igGxEth%$pm2P= zsV*i^{Yp+=+0q&+M^v{NoAE-CzfRa*Ge^i0RlTnqHUSTQ_WcciOF#$J?s67S>;>2+l%#te0OkkZJJ(>%er+r^uT~Ys92W@tcrZn*L>=yBo<8 zeq!Hymj0jL{5Ns8G?s~8_*|B)jd?*Qi^GjSVal@l|4yA;g8`yPpYH25f-rTvz~OX# zNWZaKl*cj$3Pcq%9y=X_^7A^b$`KksymPtuRzCyC7b(@nV|Rec4ii*+EeW*rL%nq~ zYoYdS&CXQ;5>V%NCHc#aUa0d*=DpS$1GR0@4Wi@@poMzdJ$}gx)Pi#d)r9AOto`eA z(>-1wTA!iq(HDYpF^eC`FRnp8Tif@`%X&!rqriynTLz)IrXiA#DlkBif3at-ACn30 z>Te<>FmH?hhT~X@rOqLn-zq&uLYVHk-OHCD$@zT4uPxz7=^Xx~@#FRq&yg{8t0dB< zq~3*|(Zt$xvFtz&AJ%3Th8WH}A#HBFPkzNP*3c!Cy$vRj@>yZx*=P)sLO0keWOgE< z;Jo~Yz(Opg_bG&nuf@Cw@u#Lz7MN1?af^5h4+e?w>z$B)55Wa@AGRuQgVb%0g`1|X zKwjz7Js0CXK`A}9XsfFw5Mnz^2PPAMbYg$bSN}+$#6P&BB(WQ643uWIVv~S&o=;)F z%Mj4I#5QGbu?JeQB?%W@4EOj*xXUoE(Qy4 zLxh>XFIH?^Htw_Y6cYVCrOij^Nc!H+4UtYqO3!1<6fvtMe}4}fe%gUGgF|^mDT-J# z!}-idOTwCKJAwn}qL6w(`be_W3M6~gpVPlNg4J@KdIXMrEyrq( zd8_Sk3zB2U56gL9Mhc^Ry8GsHq+0#Fl%TN0I|hWN=H5l5#K-JOka&b-Xtzw&ynxlV z2J$yTH)7R**vQ8<=2)sE`5@x)l0Pd{Rc?=lW19Itn>*fd7_KN1LTq;ePl}$0`l=t0 zq*s%9!ucd*)1$4fZZd}=>kZqSi@TvhyI!mRw?7bNOIGyJ$ABbT-20;U5|HD*nMz~} z1I50%B>n!LrMXkTCR*kLlnrAy1XNXlESPR=B4`ZNwy8Fy3~3-Jyh=V~@dipqsa3^) z3?RRuH*B%<5M=x`5`4X!4`TMIy~_QagBEE#pSGp0!iU}~L}g`y@k!U3_7d?lEV#?F zDRB1}EOX3yf4yua5)Qdgi{M`=|+u=v6*KH3ZA z%g$(Dw|WPKfd$2mn(mOTR~fgxxek(q@(AlHWx)G)SYZ&)J`Ayrs2(#&!sI#emF#>W z%vn4<`&0B777blK{48k?me1W+(b`*&gxKY=TaO&UYH_N$idiI9PaobLSQCIG9hI57 zWJ9d}bS%cd-42O;GhL>yBbV+)@1c8^r?A}0!>yM47mMV-9mto_#T<2Eov%Zs`1o>+ z)901`c=zR)ia_BdxW!J7^!UCRl3qL4lzWaq_J!Mj*~`SC@KAC?<5nvuv+nS4b)i62 z0Hf0_DF%oJDz*8WT$l1>#0sH{JE1z@Uh3)PU!hu#eDvsn)vx>ih%3RSy?w2Zx< zLh0W*GN;@V3VIfOe%59}*4WjSv`RfllG)cQ^jisTCP=C&ROMh$uYN+9G#el5eEan+ zISjMkk8E7M#SIH@sd^lze84gTt6L69EUa4jT5~eB772Z;$DYO^64R2>cx1DYNW7%D zaorvyD!$$QFUB6L{&;PZ7?a2HyNj*WutMf(Lnz)WKqj6+ z$WxL%Qmn>>^k!QAC-H6YAn}jC=+qiG#c>kcohtMSMw{ZXVs7B} z?YaF}`nhGhmgxyBWK~xfF!V8}Vfn>JoN7#6>7d>9W+z4jOg$Uc@qm-OgLmCMMIq*x zcFoHHGe{#8nh^IILat?^&-+n5C=wRD1^hdqv|YGy#auX4cy{W@9n^%%fi*`pFc7N5 zbhe&WmxGF*e|%l;y@Ik#_qRWva-mp}C!=1pWC8D~omD z&9e0uR20X%o8zDCSi{7m?2td3BCYUgPtjG)(+@EJoPf<&lR+$YO#6@OdH~BVe=O_1 zb_XleQstHVVzHvpm&by$4J-IYD;o59uuSAmkoY}gEE)}esdmW+^Ozbmdyh}}Zo zRfZcd@iK-}D6}naH0v;i zT-B9NvM;WI^owqs*RB_pduNJGdBS@|j1BYW??GcvNd?e!SX@K91lq7;RcLjGR=&zti( zZ_ekO`+U!JT{lLJ`iYMwJ;qdxe=JL`)tHrAWA7D_jCqog(;qlbVL`#D;eMS~ESw2$ z-e$Lsh3~Ica%DteLD){a8cQwAV^fZG-&TTIj$GPv#^spusm_=+LJFgvC%H5UhTwCD zGR;?gf5D1xh36Ridk6`CFUq514GE?yS6BA#h73dNYtvL7$T|Kzp)1b{@;4vgpCpDLD~h3Qe(77zFeVYY19Ll+Hm%%xnl z4OqI4`7)x$5kZlduWu(6)6$Q5Vk^rArNfv#(k0_JK8_jY@`{6n|1j|gQQq`rA%-7R z4e;CNi%t?3bCQa>zA;0iO(n=!m3_f{nh~h|2MOBoFH8d9*T9L2aL;!z*H)0oEg){9@85i@suDL0T)!z{DrigzionDw9DHVaEn z%v3v4_cC-hrcu)g8&UT$f$^el2lFh3Cns@uRDVGCOlzMv+I3)>;#e}-P!0hpc?s&N z>JUSB?|A2W5hTmGmMw^Aw87p*4rUR^evz(6PGZC;6i7`-9EYJOM%lU^=| zE-N!*`ibK+VtfxU<5F{jj*k;&94sA)k-Ua!7LLD8v>wDn)y3UsV;^JGg|EMRUFXra zygb6|JS!S(Kk3dTw{Yo&UzAsv zZ04l9nQn%DqFOx69-J8Q*Mhme>=DNC}g7LzG?|vF* zVN_Xbrh&y82E7tHv~wT|UFbjc9j+~g`@yHG%0xB5=U7mO&8Z{^uPIw+9q)peBvGPJ z-X_G$=G+gQnu2&e?JH*=Cqc~o5^w9SP>8tTpPeIh6?_Yin@x}Kf@LvzI4ofh?O&JA zUmL4Le>uBF-q{6=aC#x^vPTPJwAFTMI_P6;XZ3D-MFWf}`AIx^rWPZGFDAHaT4JEa zP91H{O>|*pQcb*84~9@w6fGkhohjStN z(k1VS;JpxWH2j$~K@a?=F73R*We-kf6DQ`+P2p`uUu}M!5cE{znJ_5~!Qe1I>FiyJ z7_s@(^gR0*MqQsVZ?L|Fk^56v&&j^P5XPd+*O!&hi}Pk|vIGfD%pB`v&WnJ3?)CTj z&CkJ?!(#B{zDE#xMsP-oaS0+E&CisijYEXGjnOYTaR|{7C9I@Kg7?G?hZxsyU|UYF z8gy|Rno@ObJ@2xj=LA|3|;zp6eIrO|I zekI*>0?m}0JX?S2fK|Cya_PGU@Y*hOqq#K?jDpi$WQyoz>2QkSBhD!ve8%QhIpZ&C^)vd+iM==*^JBK~DaMzS1p`ZQ>i~rMLY1 zNS7fxUv*P1u&u)@H7PNM8B<`_P)O=dQU?#0P@R1=#o*N&>|Cws1<$*_+%>pfLPxC*qx;W?m(S}4<8!~plWh7U_}`9+#OB%iXfYL2sXBWc zbjIzeoBVCyD71bG9pb=UTP(4Gs0D7%m+z`i8o?u``-HT&Pw?m_Vcau?9v|7*t$uO; zfvytn-v80wLuYD*bz3$kK78psEv1nIS9V=CQhr1WkDC4_?)K#cC)s1>E-|0LE|7ES zb@YDFTALeRD(S%cov-6h#nqy{u1?m6!3nheo9+~MClGJMTODuNRSCDN`l+0QG+@KL zKg>b35X}9Vwk;SQ1Ie24sbwBXynl$UBi!vNnm@S5%WK1i*U!$KXI4!B-T(3qRtt>4 z{huRk(fp4=^9-?5mEIVy*XG(8^~|E-3A)4EiMa~XH<5ueX$o|UgXxA>kAhTn)ZFUZ zuc+a#x3;Fz*t9O=C1_t}1d5*`Q{01k@!Vm$xV(XvATUdR@#-ue&HoLEkeSaomgEVB zuKW_Z9e*+5qR5NZeTtYq$u?EwyMz(-*Eq92J_CQIz!R@Uc0%UAx~Hj;G?2gCYnKKO zAt!FR!u^j5L@&N){`|WUz03>gA2cOl7Jp?;p+f`~->mJ)%shp!EYvqo>rZ1bZPn+< zX(h~@{i5-zeT$pE@XVCx1&Ar-x_V}59r72%thAQDLRreQ@^TkPsNAz!YB8q=6%iTT zoa1Kj>TLQz(_UxDUKzC!A&W!cAB`37!*m!a?e+oQcVXVlfpgO(LRij0qh7)qk5%Vf z_o$&MR{x6>79BOm>T^2(PH{M4CG!C{(X|U$9GvAed+ZXXt%cnw3V4Dy7Z`382PQzu ztHLi+X<|^UMwHSiWrE7`BNUGfS*YbW|4`TO8q`~TzxU3_1?uA_>f;3Epf>*eTI|QY z@H(;YmIIuH(&HEWpgByK>b%@kjzQ#!u)8)2n+4j(n_ z9@bWk&G~QnQlo_q8=sXG;+186TNi#rsb_1`8^+iupE4OEmy5L?e8*cmpJ1hQK|#IX zZhUFKu(mi+f(a46Gb~|};8ckbsl82*dG^H0^n=~-%IqD1`pX`wKGCl?)FnfMyxeZf zYXQ)_yEvLNO$S;aQR@6V31|u1KPYl26k2Fk4ZmkQ0xH=&;r$f~b!%DS`Fkbc^}{tu z&`N{iWS!x$0eMK76BzoHv4Yp;obn`pyv4Ld)(MGGA1wJW9B#HDj#U@Aq~5hmVZ&)B zueuIJYt2PK17ERe z;P{JtlVe!>g4vmLa4%L|9#Lp#QN(;V+MjnU%rJ6jbpL7VhY+CpZ2n>p9pqRYEB!LP z3gyfW7sQR!pa!KG+31a+DW&^Uyp@d|9G z5!%m76~UGdk5p7|Yh%+Bb4ej`2-X;W=BYg;k7Z#!(K>k_F*{IlB}Z%leN9_bWdoET zn*E`-lXMOgNbt=WN}q>{scMSQ+4Bd3Jj^PY}(CssEu%BKSx@}Z~IM)QAtI=M1+_3;U-6WO%(ma6nm*180 zh}qC;EPDK0j4GhQ#GU@sTTn}@6yeF<4do|agzG=J2{|oqQv}2ZASmX&&6}@L7@>1v zK=BwA^N54(Y%42RA%C>hm1PC%1b@znn&@Nm1zQ+Z`HF3OD*fKqAHfdKhLcTP;n?N; z(5#%UAG_x?rNrJwV-I!qmdBb6_DbZ$FS?CjFT?g-LY_OY=W1;Ik;x$JrfZ+;|8);L zANPbh20-J1pFaXFazaaCMOgHoJZQIf$Xai{m37rq1yJ@e6dwr`+{J54LW z(+G+e#9T=BU686=VVCt{7I^bwdYSyLVJhFk=eL({Ve!g#yJkIYtU6sEZ5``}joaD+ zzbzfamg4UoZ?79+dnmPN^O-Yt?d?8Uqg;+X3hWsj+bpqnwfcGg#(&tSm|e;?$Bg~# z)eT*HPhr35h%%SLEcPq>_WSxN1^ZHXj`A|gA;J5c{d37~?D?fqA~D&9T^lUMVmT+U zBWcs|7-sSjZobVfJ2NyQZaydh@>`7k>IRj|Za%s1E(gK|aI70ZC zgrGZ0|Ci7D6!aD|D~2t5LEk-XS51Lb=r35MJ?JzJ170RA;?pWHFk9Sn%fKB5-sD=a zem(^Qxak+r%eroy4;CnI`wZWFF-H7Z?sMTOc>d*|Yxm3mWHIjO zYGTNOSAC?X)lJn<{n6D>cKaeUy-F~>RB#zu!)&#`J?Mgt5MCcP0TOgy-6@#0*A{xK zr^|n&AA>&XS!L<59vDan4Z@0hFt}N}oI!XBL{CCZrL#Q{Nk>jL{bK~;JpCD|zi)s@ zRb=#6%(!~N$ObVrugYZtck8 zpav2=U2i(`n_~~R&eM6$TiAI&RK_)C0oxwOXMXpk#b!;n8&4B^uy(_9=V@6xtl;jI z2|r|tc?%;fBAS0Na&m}HzuO6Xa+TCw5+)(5cC@`wdI`$dTIS^Ao1uoo^vn)1KWKX6 zQL2%a53Tt!tNs!+&{3%vET-}Wx&xl;Q-9wF!oh}I^+V>+Z)4gOdzJ|X?el8cnK^+N zS^s9#!5T;xG&=@WTY=Q^(fRvgA&?KqbNvqW0P>|c12^~zWQEMK*9SR(%;L+@OiTn) z{+m{v-GM;jEm&o{LjdBv#|FnImtf$Z*dOhv(#(tSlq>(Ki|{Yc3=$7iKGb^G4FO z1>1X?>_~jBTrV}Z9|!j-MYi3u$G$mxr-6tm?0q8JVi2^1T?CCL!A!vRnK4(9lo)Iw zzaWl+GByg4^dBtrW0g&A)9tN(vE)w^@4uuLOeduLHI7iWi~q zfS!-qmF)R~Z^Z`##R;}tE%96LM)8-qz5yf^Q>}qXdmytW$;uUQ0y%e5y~ZgMDEt1X@n^6A z#bo_`(+Lrv_!!SK*FFV`+c!m(WNn}*6K=s#qMSek2$e1Bs?ZO zD13Pf`+pqa=ibVZM4mIRs4E>?T(EV!pEE|%N_ouX4`y3DIE)HzS|H`(XNsG?22#q_ z!c~=Nk+M2o+P|NOLp(gs7aX#2XqT(Et^Nh1j2~6wE9XRtzgO33qjaQfzx9LvkvWo0 zOD1*S_aP~Td|yqR28k60Gs`YQIH+}D|33LB>|1xa%z9E3dmsHWi=i3AuF~Gemckp@ z-g2ADT)M?e;UkmWln`u~+L6sRnTSf6pb)xt{!PRZ6o?Jwz2-XsMFMbB+wzmN z+O|)Q&}&cYaBJ)ebQM_^Giv>X_J+9t*^wR4lJ{ofjD99Ge2On{ymbw#ln+m7&nrSH z&3*n0$##%&ZuZ$#7aMR(a{Rf?FBxMbg3r!d4Pw5tJLS~2965wN^6_DxDMNmF@jCW6WNhOvkR*gd9p~BA{PrT1`KoF8 zt8SzUh?NKm%pmnB$>BqzB@V61MhYd^;!t5nSMe7a96C=+c-5+ml-x!(mInkRFK*Hn zd_9TegG?uE4&))}q-t1j#QiOv?L{Bg?!*2!IoU1QfP`zaCd!t<*d0Sl@$QMmj`9S- z>z@O#^<|XhckKv7mcuhTq-v}QXgsj-Un7>i|JK_o8;Q9m%WLP*5yL;;`gb$aAAEJg z1a`5+K^Aw;1Ft_?@XDa%xu?G_RI>+ZmT+rAWBT}H;OsAGrEwXkQI~=aF2O}c$%U0)y$P3>ld$;t1 zQW@fHD_RFb28Q~MLLx9UesixeKRr+{REV}Ecmmb?!&?^LyFkr!FR;HG1=LjYH4c?R zpt@ANWq)`As3L`Fgy_>S)YgAdHNYN*q{%R9Dh8An+0r7{+<@GCS8h5_5=bN0som-a zw(`y2;<$Y;V9;cB7rl-z^et(=`^W46y*i(-RcDSuSK#7gC7Bu8linR^d~*j{LR9Xp zIrKq8C!c>l#~4&yy4~NU>;k0WU8g$mU>;pu z`KA;DmdlJB{r&wr)(q|Q^LhUVQN>D}%_t08yB;fuc%H$I{{PIv6whLJxwwbrt7RnE zOZ)D0JdXp6cb`g;4+bnT75npA#$ExbDWZF)bT1)wX3*{Q>K`25WiR{DIt7RKOuzi*CyCSzAzqa| zD@bj9oH`*!L8|%jSndZwIP{e`WRp~iL)x-YyPaZ?5`S~=)l3>Bw<_$tKz|BJMA>mq zwGJeg=TSD9w8k*(E_OQQ z*Ebl}-@U7_`3($nKZ)~StOsgYkE8Ic4p7e~G^ofV!cauP!q>%Fpirmk_^h{b*S{Nq zMW5Dy%qBT;HuyY{XeOUVU%v)}_4$SK@7keXdUP{#W68KlX3wXLNn_PPVQ6|BTsM zR35~kiX%oNFfOP2A^rjg_wb^hbVS0q}T8Zch}g98rMsn-5sNSF&Z zhdo<;nZl9736J!!(=IovkB=MMd`HaOWHPYXGl-ilUJvUAEs{1*Nn@q!fWE^9yT*~h`sYuE;*hH@)eeu6&3lQJnk;9Q`uLj`E5KQv(OGG zeUz;h4#Lpk6W0iCyfF09Ltk4;6R07#&qv!E!0`S>!KK2B zFdQ0opMl{h3{RKN$X$qmk%Ql9?JbyKbi6P;u5aEd z5DLTow|^QF55q9mX;sUtEgkm0n_}|r7Yx0rR6NxY3q#xt354bnph#&iUE44JKL7v# z|Njh^cR1Ev7{~3I1{EqKp;AU(DaGADNm&t1Ijlu>z~zs_~8>s;44f1J<#`F?@Ew?g`CLkiITa~Z*@XrPKWz@M~V~}PZ!8I7|hjhEvjVzag$gq0l{6?4`nOb?OnIeYB{JSN_c4P`!g*UuhQqCa( zo&Lo$aY$5q^2i-tf~4fgLj|?ZNSm`IV3W_ZtUn6L_%SOez0^Vvcmb5Pu@C?O!5x7qbU`cOV07-zH&px z=9E#r{Up-W4VLA1sUl521r0n0v4>CG;6MBC*m?YR`F~wk zur2atGDBP#oAZq`lAO5_&sMi7jkaU;Ve68=hjp=Rb-W{u5sUfB=Wd;)MPo8`rOMt= zQ`G!<|yE(4zXebSx27+B5t9L^8v}(F)p&Rtxwd{Q2?F;==u{EP_JAfv;vfg{#9_VWO z`=@L^14AWq*+jTDFvVASDR+GX=5Trp-NXV|$tN0y95jL0d2=jzS{sN4i`y?pUjwm!sAK*>9(NKTs1$YKgGOAOpy%HTE+ZoO6NA|M4U}08(=_ zNZ?K;5Z%-KulfyvIAoi#Z{rBCo;B2Eoc06eEH&iJkMqFX<{+?iwHYvs?bkc$od^1{ zzMBF3Z9qHNuABb)FiipIe=(%`D%Kf%5barZpm3<3?b`hsw5tmia z^51rq8^>y(@lY$DtDXeZJgiOA+Zh4n{&~e8wOrv@#+ENe&DxNmP-FV{Q7HHp-4jjt zrh+lQFBtD>wZ_WiG1vDMA> z;WPBXj-6nU6899lMpG%~GcJa-=nc@2zQ9MtV!6 zwf?mzWR!0d)KD`+<^u~Q7g{~CEY&QQZ<<4bdyGYEOF$x#!Y!kj?wL}}qU#S;&#A_pasiSiMR}Qk59Pz|Qs!0AgV@I!kf@Do|Wz*UrBwed~ zc+yEEd6Qd{$E1)59I}cMEI`)i+WB)8?a12o>)m<1YGhu~Y)e<%h>VBN<&MnPBK?Ww z%6(iaNXt;Wv~cziQbSK(nT>vheGP(#CUpjpa+r8?>VYYCRky{aGmEf8EG|mFA_rTI z*2%7reT+?)EuKA*mBD&}+oH_V0a&$cP9r~c5?^pT9$b{Q#V5^2?K-=6U@Sr2_L%Sl z@23KFzGu84E&D%pO|43Vesy*8+R|TmB%Ym&ej4sGkZg% z*&oQlaAiy3%RnBQ>3sO66NtWCwy4+%AavJv#*SS8R{TF#mkoWuBqsMJ{A}X9tMP@R znKUrg8EMv~GJ!6C%eFuKFwj<>960{K2>QRxx4Vpdg5C!bOTK>dgPxTa|Jpt<=1j?m z{=m)~&_=}+>Z*V#ywrR+S|A*34^8eK_lLx%2vTS2lBG8G(axD2d;LbB^yoxrAt$X*??(yg)z*~S5uOL>Zseg3&Y)fazcyZ@HF z^sx=ur_R`UO-CbJeUa~+VmXo%0y4R6K1e3i=3i}}LQ>IhcX6B;5@`)FN*4HkE;W}i79qc^yB@!7$6<#t|HX^-ACNA~N1*A2(#((W;M{3FAQM=JL?3cT~ zNh8)DDcB`bVRIC_^@A?+XBc2d$qM}wk$Kq0H$yr7ZVsCbIvdUHG_YaR<+;zSH&&|* zndJVl!7{6R{M_|+Sn%rCUz<%DnEI|nf{WOM-c4M*Duv4-miM}ZO(sIllwsAd5*L)X zEX#AYz6F)~e~pBAT%k_vgnFZI2sFMu#`GHG%){)~IK!dI{|HmlZ_) z6M=1esxUjo5ZHITu29NFf&CzH{f85KfgRF3$bD)fuwD3$$ui}Et$sUnQ#OaQ5ANl9 z4lY0jteZPU!~!YsV@XS~7!Ws3Q{t8i1B>~i`PcFSV96LJhG>)m(_-0WSJ~&lxGJ{i z6HOH8cg6qx(YX$^Al@nASOcJX(o6XcN<&{ZSK4#8QlJ>_C~}sphpv9Vi~_+$=-9X6 zy(r z#{As5A}tO#PX5lV!&Gcv=5Mvy=^1uD0jKneE!eZsz3ZLta_kN7ITkvQg#CoZrMf{x z8jn$6#N$+?3ok0n3A{iCx2d}7V_{@`vAa`zg$tRr_S1>(v&iyImssaTM`DXx>G|ES zk!aPtZE}L+1EWhmo`)iltS)r8@i80OD*L{p2|zjS1WNg6hB<~2LZW!oOj zAY?zuAmIgvr`Qf}^S%ybUzp;~Q>{U^im`}>`+6kFZI7e<%x61m7!bGANuQU)33JPwxIUnAW<^l_HX5v1AEwO;zj zBGsbZ`BGCR_FXKK-03QUlvPp*xgH+amCHIJ=-7uH8&-?e8;fFV*qWf4Woxl%P*Wkt z@*OrD^w)grSBWoQTAD{*T!Up2%!QCc{a8>x&#fDiifOkjS!EiJ(J$oP{G?V8Jh-`8 zh_S0aJ5UR_x1T)S1hmq)DAkV~ z?-Z8K-74$>Mtp=HUC0iYZq}KD|K@?U-F`V=?rvax=H7htrSN zDqv*=?$WHT2Ik0*i}`!1fGLv@KPzMmjC~tLy1TQ0ZfR?G^TH;e*(@n9-x?3pqsy0Q zWcNYe`A5H&X7~X`=2B~o^-t)kN!ac@W(pnq*UC)NI-s>uw%2v(TWFT*lT?;3g9diz zzhgQpq1xFZLAvNBlnoB7QV?{3XZJVVm2x`?nFp```>gX8?oo;kf4|d-!SPvTer0Bu zQ8n`{qV>TS1;Aph&>o+O%b26Gd$TxiJH{&PDl27$fQQ%l ztkuJt;nDHgSqm{2$lEjNCGEBfUZlKfEk67Xs+Qcko7?OJb?2w~zp8aWBe8JicS zxaI_gJC#D)4@b4ioU733u;W|VH!0|D-W2^hvmSayt=J3GUeLd1oSe}8!Qm~rOxpSq z(DFgoAjlKw$!Rb9IC+WTvmkGfCk4zS+5NAitAQmp!)@*P6Icy4=GSwofjDiTB5>*| z5TpCHHaLZI{52Hl5UBRqy)95eff0+IR=3DLA`!|JvDJ^$s$yy;`80<-9nnVKq+-^@r zdkLU<&ikIaUclB|`1EXgHFm7JaL`As0=vAN!ga0sv8UEiiuq9_3YP_Rw6 z99ctF!}BrLNO&vFcOUmg;!m>Ci+CF(Jq}kaorpn__IXxx;4QM{l?MzTr6Bt>>s*jE zClB6hn=n4S9ocDvHW!X-AUk`-uRW#}$c{gk{Vs+d*H6YJKgBjsmkbW`I4?5>X| z)$F~n^U7n{G2Ii`E@|6mc3Ki!3i8h7$>v~_nvICZlL@Rh$+u>@ak`eP#}@d!&N zpZ#%Pbsq~)n0WlrBQc|vrquDU0z-{6>zC=}L7-DWnMr&zq}}-==p6YM@(0Fk_|8s4 zsm9u(vpqae<@9IOb;=0Tg_c^J;&Xt;?(*dqO7);ce{1om=s9RB`sS`wTMnJV8*i`I z$%Jlm>AlO>=l~^H`sxwW&zyX9H`w#-aiCf`+4$5q0PRTC%FMKvK-cD3X%?IZ42ehc zVL1iB7#@phZ&f^2NMCbauYt8`s$T`K-9~r>*n(CdaSPSfX=T09>QUP{Y?gJIGRlvU4 z{P5ZDi@>(-SeaEx;dqeFd)u}g$ibz_$%gNN45^SW-=qqptVq|Q?gS7y_7}?C&H}MU zQa9r2A7I^n_;|NqIxtyQDF?gffVq~{=#nM^jAPmN+Vrjg-S0U6brm6?CEvg3!($KB zyx(Ez*bDtO;rWgm3ZVDU`P|Gk%Fv@Au8h&r&^ao%?avhtXiwL29V8{8RbNo(qx~#2 zy*9V~xqLG;bW|A$tJ^|#>$lTF`;I_)@wjls#vmw`8rz@6a)F$>*s-RD9Ei_pbnu^< zMOE>^U7Mq5n6Sn=)g-70bADQyX2&;U@u9`4A)OE`Z?VxGe0&?L>HghKkF>C%&v@KR zS_zw8#r6Gp7lo~QZF9epDA=CB%lvvp8arQS92|)!ut#iuX67G(z1!|MtlE7V`?X7! z1y`pcH6g5}I!7WMtWH z8H(1jM%Hxq^CRP*k??!Kuh1=s#4qWgrqp62?W6_o-a3V3h2epj?JtpBaCzYSp5sY% zQ!Tyh%g8=9Fvd&0fo!MQFKWH^$aYR0tZdaqwpIU9>8<;at(m&T%|Rd8T#Bat|1^-S zjsCc;Q5Z?*RoD4Wk07x)9cgSHiA2~ful%`XNbvG3gs&SzmfM8R<^1)?>?q#h`<;bM ziMj-PxqF;k`dIJhfCSR-u;w1 z)rblOr`~6^*zJPS|Go@02}DAbs=IWSs4>(@3Y9;yC+F0)f{4M}W(OtiOe}0JG?ri|0feFc$N??Nm729xzY-P-qGC zn@p)?;Zs1%ZdkEFDh;Sjxhq#)OoRSBE0>+B#?V{!adWThBJ`A5{N&s547yT;!wi!> zq2tP}SubG`XxqIxQpZLJnx`MPge*G_jhRlmciPmUE@a<+Yx4l8s(i<#y*3I;$*GGe zDOaHI)l;6CbH5;SvN>@35HCDfm=AjvI)az|!b-~8zhNTz-OPA=4xbPSkq36~#Nv{f z0Pz>5SYD&KceQIMR!1pr&Mb(<29qU?9>PHg zaozWOJb~SZCwIF_=pn_j_3hYI0qirD?a6lPKrSLNSu}vF=ih} zqI0n-Fhd$iMW6L6*d|DNS*m$Vk0DuX=eD!L0m(O4#eIe?k(|4w#IoY#SpmnuT?dqq z&8tEIG)spd_w;&OWDI<`x;uX}GB#59Mwfix^h*)u3ZDt2 z#V8W;+;5RuQ7}BAn}z*pb}3tSs9!l_B=xB1 zYeCEzR{mvbz=aR(lC6~9_@Rq;xYgxLju3sjd+f`BILQ2A|Bn6Q1Qf<4eyoW51f?;F z%c8UDq3VdcnI$^}YJY2n9#5!(#)Iyvo$0yI9ICEhoc#t`>n@-!C_?-D{9mC56rgi1 z{LZ$k8=!l!xM^~53s8P`J-N2#JoGW+Z*Iun2~;z;H?_~BfTr@&HS$+F&=%6?lyrUp z9n%cuZyy4N_m0(bHaftRpSm+IHwa90(T*DW0W4GX)~eA4U{R<0lctXXp?~fu8#$ci zYm^g*!#G}6R0wJh0Mbw>n4}B?>G$GA)4eS~=5qPPP$z(F80_!Qw*sFVfCEIi4+DFXOSM$!|Vqi({FJ8SU zIjp#3$&_s6!5Xf;NwvK@-BZE%t=(`uC zIIM+TePMCDMFRkSCO@`YR7fT-`C9YPV5fMXDpP^#Ew+l%ZH+Wio5y@MsYdeirAsMjT z!tmw{lGi0ZY&PQL=hFvvBnxuRYn85uT35&MvfteVJx?TRdYHXhIY_ur&MaMX1qp$w zYgg>4oIcy9eKfxeS!+)^WF$u*Gp0!CNQg2r78HgAI~9;&BlFedbuZHM1` zNgTiSHl%I3Z1Gqz0;$#`{8x7-V&A-)r&lzoNr;`e=7J4;6IUz-Q?NSusk^WI2v*3guAk6$ z#*(C^@k+Kfn76bySJyueQ*m;gtlBFKd2+p@_R=2k_2K<+KCK**L-&cy+B?9LiQvGV zvuRK)T2u1+pCgnDNB9nUSHsHyuHEuCgP`uS_hfglEHtLd@U&`kLv!6x!$h-7(Aw`e ze^E6B+F9p~gJWu;lhUX7DBJJEIn*e=gBGV>G>wwDj_FBNJe4zH{ z+Who-1hlyK6!{hTKtH-peNW0gpwGYmywzR`7%6?xTeHN0x!vD{(j5rQ+N8OSgT}zp z?ln{Bn*dfWed}vKPCpfL&M$DtrZk3tRS|GQ+RgVwi@o&>0lr% zQw|^M=iIkgD<*9%3ar%gmh;=M0BhSvEsa@sV7|EC=+0~d=BCT+WNJ4s;*{o>NN53l za)C#w%Ms`X=97u5`hXUdRB+;lJ}1BI&o4a@5B-1ReEoLGL!bGntJUk-K#3hOlp&8m zcZ+G2n*AE+{P5!O!j@mqKBFyvp8E#0&WTIt1}{MK4__G@3pr?fQz;a9zZ&ZO#Xb|_ z-=JE1@o(0{NE($*^m*vQU7sH?j8!rX7X{)xME zq<#StGyT~yJ9lDEox*mF9DjVC?0DyF03FLT;`}aLO2ew~r7N^UDOk%0Iyf;tg^m2h z`V?gyY?h4hqIW1_tE`mqdfzqJE+waH?Vj;J00030{|uLRI2LRahm%SYQC3QYNFl5B zrJR(}AVp;rm85K;5G6?=M1{!6ma_Lc){A%Vml7F;C{&14K7XC-IoETY|IU5xA9gJB zY?&WuLt_7^)E%*BNG^2leiFSAsm`C;u0D-Hx}=GopTQGkoa5Z9t=)r6>HEz4%#+BZ zH^(e9YerUp;=X&Te~~R~IIX)w7}+Jnf%zpnkaNI7Z;MqNa;j4^f+!it-C?uoX@E0w zqmH?Yj+i6&v)0C*<8H{?`RT>Z_DSS9@3ZJjzks~N)q}&~YmrxbY`j;w8+o*kHW^bZ zkjEkD3z-HWk1{_Ozsw7Hm5=$3^Oqs-S?H>0+kE6*S=xWZ_yzKm6s$*Pl#$yl3LBC( zAvgH9im~?$ayPB_?7zJoId9%hk^9|{v-974Az2sMSvJe75BnlpR4V?!A2PDsWB3h* zx{%qrLsJXuktt$q8)lM>jFVS;l)6liF4&VaVQ7QYEA>Uqo4t`-;94(5VGWX4{)eY74bcRD`av{?pfEvBDOD?bPHczM2G!xfrp ze$Tpp>xPyRj-`fR6A)6$%#!+gp*=9b#V$Sph$kgYw>4D&d5!n=GI0V>8e_vRHh~yAB`Rd$uE0H3yTD_)o8iwZUx76&mWyWGo2XtTgGp1xv5+ zB?t9UvC?;bNhswo*51uJbHQ`~(Wlhh!ovxh-gt_q3o^0gY2XEp)BqCPzW9K_D{McQ zbLC3SXYBY_G_+M@1WCmLbL`8*NHMSUJo4}-Qa`i(E=?ar`c;2fwd@nfaJt@aQ#HHD z2SLWPz(!=&*2%bZGm&*xkx}?23R#0cga;$uA={B9r><}j*?oakUBSi3F)3Y{Eqn<% zg?qlb3A7@28Fxj?-Cf8%Y1dsG^AfocMZ>=KhRChUE!J~TL~j4icg+Kp$eq(tq;AVb z-m=_~`e8og@kg)i8rDbd^r+NB(=&_v-@0(mU_WxpwakY57Zy2iBFBO#j@%=fk^g=% zkTWY3*qq9ToL2(XA**j7N7qK{IcE;p3_VBhNF`*S`=i_CDU2)@`{Q2QR%Gc*1~UTo zAv0h4=y^g5GFNIZxfgdF88(Djh53s}H+H`3U!aXtdgsS%o)%ILzva61wje2sz4vmo z1$O-2?w=Y{`u`7}7DqCi1)0++cA;(tDG88@^-hS61x2 zC=V+a=zHHRiNmrLtCjipgkljNIX9Ozjya>R*Uzo9#ncGuTcV#KMmeU3m^uW2S)6@U z9XknPf>R#P?DL1T;nT?rHZ731RMCE{RTPRsQ+^y=I|yaLtAme3Z-pw)ErU`s-=OYv z-evQp?a(ONu>GcJ6Esa6+@d7^9$H$ABK_y@03qUCp~#maXg8XPBSu9)$4qW{!TDAo z#V@_Qf6W)5C~vY}@x%(Kd0TYdpRWV@`rSg)XA*#+Lu?c2Q36JP!$tBp31HsYv~AZ# z!$n>^yFMd32do5^lFqkrU`s}+|0j4C*kKROSS9rU`@4V0vVYaUIk{)F&(9S&so`tx zAMXLq=VPN$lrG?IHk;oZtqEL{M;1|5*MaNKuJMp4;=PQ-N_tX;DnFO%yhN^XRmtpoe<92bq-kms!C!s0bov!xQQ_>fq8*0Qsg}ajHX== z4}Q%D#)ccWC(mX8?H!#z!e}Q@oxjn;U7dhDE;=84=q8XZi57d%mO=-Cx_vI62ko*u zRfG6#fN)Jd!ZP$MwB)3|w5_RzrVnWa`?*rkxKhbKdwLe?&bg|t+^7Ook>%B!`%Iy% zO0Ra)IR+GUX@v#Y0pxwWAb5*x2&Rp6#Ux4`=3qXN*5VR&oV~eo+2+Q@{z6 z_Heg8LVnD;nK+#sN5HrGC#*)(O|c|M=IVtJ2uUJgI{c`wWhb`3GLb&+H2EMi#e6Ok-dQ*@wE#B3(m~{Yv+UjL3Op&u~1(@uQndV>+AFnuLtcL%;G)HXy^qyVgvk4C$81 z=Qvj)k+wWJvPfMIDe2k$7wC_WtZ~QZ=i0wWEc|X;cj*jv$Z=G>+ETIY;Zo1s^bl3=C(TCvH?KqL0K0OEy94!m3DSlhZTqxN+QR&9(gbQRl&W!J`*wGi~N zC|`8aWs(o`Nb=wMEo3lVbJ8oKFbJP3n7C+P5W!o{N-HbfUqSHu&J(@j=OE#&r1sBG z>X0$cClpa3t%bH+hYKnfwV-29qx&x9F(6j99HSg(0C`8o zZH2roK#5B6*|^&hr~`99mh|-jecQ4#&&;{NP+N5`!+x>Wx7le$R{+z%X*NQf2h5g| zJ9j2d18d*;LmH*efR&+2J~NO9Z2ob<4c>|E&i0h)~Rd$|>M% z>OXE0s}G#xUwc!pe*=z-jGW_PJKzLc*D4b>0w*$iXYNSpVx4>6u<9dl?px0OyZH(@ zu9O$1zeRy#VxM@vs{%OkS}9Yj27vwb%#!oxHG!Q!T%Ym$Jg_gVbDZ+h2lncvLJKvu zz>)gPsw`~{8Ce;hrVeW1SN?T`4*EU4LYC#xd<6jZ!5@>QCqK&kYY z;z9n?P%x9Bu;lYj$azD3{Lt?(q*-crs=54wm^sg7LD^$){nJva;o~?A{i`<=H~$h7 zHPr69PkUnKHSK@mp3az`PfvTen~25kkDr^E8e-Xk;sy`R5UdL3>>YjNhqbdUjrq-; zh<1uW@2nNE$y!F-^q3Ad&&zE1Ok-nfOpT{Q&sl7fRrYO2y1U4ecye8z0ut98PA^LO zfh2FI|7;WDkxaJG5ULhL>N=|tPsv22ogno(CErB4_o_d;RD6(O&@{cA)rX7@j_RX( zg~&Yodu!_VK4g~8WNG+cLe_>Do6&U=$nuN(6;ZtwS=4ujd|ix@Ev>#Y_5lysmfnBN zlQ_tZdc0Tq)e2ZP8@O3hHx z(9=SeVbl=aorcU$LU-Ow05W||^+z(+A(Q|4u_yYq$Ox6)m2=Pw8B0{;yKQ=r_DN)6 z%7KW~%D)Z18|;x1(2_p&Z5GMef;U)2b4cvItHZq{fgLxyr&XSeVf*qPS*h!9kPv2Q z?s#JcTlxAXr{9ZUv&Ze1SI>1|BlpXP^Aazy;i|yNR(El%6+1TgU_~%i7Fv4=C;4HS z-aolkZUGjN7Ea#RE63LfR{As1hcP3nNS7h85)48RCu`q=)coaewBCIoFw`6dgxL+NirdaY`;{>V z^{cBE@9OCf#yS)rNxvM#<;6g@m7BRKz8fgd5034gzY5g)vj&H>vw+6s1iim|0_eRO zHn9pmz;ODxdi6F7VDujBB^TcU=F!IOny-q1`Py*hRO%sMEloQ)XsHjZ)0xj^mj?kW zUhVYg;VNLU*N^TgC|S%8CmWuxrvh88d~fH)$G|q$VW?h90ro}S`c~0!U^@pivkvY9 zwu@TaWcWK^Umgqm7{ms)X~V6&pgv%0mB#H@FbB5KhpA;luYuKlI(NZR4p^_$YCjor zfpsBP?0repqCaKY7(cQFW=+(;%g!3Wvt6J%pKm|wT#NI9vFgo7AgX=)Vj=ek+B^Hy z@A&vb+sze$g{%!g5L_=rza0uKFC?XEP>wK0f<|9*UWM8)LjUe=%Rp;K|Ru;#f2?arqCK zg=L!Up^}5`Sm_=jX=hcAHEAJ7j^rd@ealXZTbDLtqtoo+x2~4hG?v!s7sJJt%S`b{ z#<|!^ryWS=pT{=MK>_*1IBb7pH@ENn4eVeg)$uDlL(-a`?$>{XA{j_?chxJ9aw*cx zcy7_}z2A_BR{cPlZ^pRa&~Ng^-3jISWJHNNrgWJ7YJ2l&bv=ALYLxIrW^tJtZk5`F@$oFPKK6K~&Oe z-zw}_K4AR$(F<&=2{WP?>mcEZnqBgecx>el%%qX zAeq>@60FC8Y`_2avXk{dan>@M9+?B`mA2zg>Fz)?4O&&Hdj#k^CXKWHS^#~f@Nr|O z9WboaWjC!~^qc~g=hb>CVEmC$+xRCKn1=?&yM<$c87TZBczh6;MRzadQVf9EE!V}` zp$E)A12Yez(tssVzImJ1L0~CHE2m$-11wdS^Y7fGfVIQe@6&@qU~Seel4h}hCA1^C z*X0E;$90ccn4JS=N03zaXc{mRm$#TjP=R^*i^;Y4&%jhTI$2gf0*r2>HKgf}z=&8S ze}c>chE`qbTxdMdv(~fg&wgLzsI~ppCy_v%$*w=yJPuSr&rkWsg@7Wmo5h*S0P=FL z|F*uo0mO-7U5Rzm&_NB{o5UnTd#cmr7xYkQyDAnR9&{K8@}hs@ZwEjNN2q)sy&ReY z@}eUI{)48CafKlhD*&&r@bJ)k40YiKLr*LWp*qFtTiEPTsK~B(s*+IwrI}n|gVU~1 zl&JNWGwTTXq8Uych6ZHzJB{eMy@h1+*ldlZzv0Qdm-H{W@!;uVHRDUZk3mQ3x@UGM z;}tIG^wbP%9-7?DTg$}Hj98H`NVj=d49DSj19Gi@<{3jhGfz7F(6}Ru1!j>v>dNZ3v} zKqUxbo9#T;JVI!ZKLaH)IENkCKkXRTl8{)H?RNW6C6em>ix{uWkX$zHYiYNbqf*jo z`f_PV^_R%)GaEvh;fQQ#$~e-O)ke)HiX**rUzdW|Q)Fyk`Cou?3^F_dO+K_qBBQXo zY6Gr8#<0MHlr5pilo+8dC|*S70p~jM{wK(^4tlZg*D7RsY#{gC7)55_?g8to50H6} z9JBn^+r@WJNtiSbnVy~oK~}TKJRf~cbOk>$!QgbzMJ6)WXCCWjxFch%DK)-mkt^jD zNhWs#kZ~)`Ga}ds8JcNYt)Ie?-d=u#bJqyz8^5bw%gjfb{fTJ{8GocEDIS@4w-qU^ zgC48M?MUwXd1u{ZERrTVhGx!3An|+81^!(L*fCrb`BN+%+nMbHaxaRpt*GF?t>>+g z5b`tQqxN-dHC5aAU$`%}teM)Mu>jc)7@1KRUMu7?vLW2_MY_>Uo_^>jlE0lIYx;acHysF>a`2s`|rT0nu^VEkN`%PY%e7Z|kIt-l&y0E1AN`A8OlQAUdH zanJ@v()iLHK8y2iD-TGM&H=+LvWre!%tP|pM%w*?K<8Y&(QbPN=x5IrO?e&yTDxEQ z0YNjMsYnlygY|(L6ymzKPy#3&>vrsqe^ z6stwc<+uNXH}t5z@qZd2XP-hu?o<@KijVOBb@~g$_kA7a-5r83Nt^w>Z`HtDd-4u& z12E+9lxK^F7Cv`PzN(Y`7t_v;NVUI<#jLT5$!9{>V!rot^L_e#Sai!ruH1b9OI1Ge z)Z<=YInN?#cc2DV`Gm&`T={~vEA<T)UD#~r z`gS`1HMRtO@;mzPKWt5C&~{cgMnbl~@VIaww&lIlRpmNh`>TT8A$LNsBTAR|{`WJq25W*)oPml%Fv-jIll)m=T@nkPt~_4f$7mw@yRUBWY)R-}h*xI8Ri zf^;42u`92iA+5J$3!GqkI_>ciU4|+}e#DXEVkceRg2GQ_K28t2(jGXP3$X zPXh@)ZZs)b9=1A9=smO;#TKhQ3PIa_jhhKd7p|-92Ko-F9Qfnh$tO@^$=n=KiEIs7Y#2d zseEOhjUc0JfB);Ec*y;=I{#jq3KXcC%WOB<2gSL}Z}b}%piJvz+&{@rP*Lm^VD~f> zsukBy`VMZ2kH&bP!Fw>Eb*fhCiRn zmp%d{D138$_ymwfOvHI-oPiv&wPbhy7oe>DDHETQ1(avErS{9`0d?hr`af4M0M%{a zAtOc#sO^qdl$d*fCN@btR#gbJlb4#ZMZ$p=kTE^i^bcq+bIKg0^nq4jKjrlDG|-B9 z7Nx@uK+ECZHW2p$Xpz&Wclh=L?P`P7;J!hiY2LIDG<^ruah;w@H%Fi*YkyChXaTBj z*kt^%uRvkB-&Q2%1I22i^(h^1AhT$fgFOR)3`BG6_6Abgxk`nMQXozds+)gT0`Z{p z@?{Rq(BYrAbW$yBV5Sy1nq}Yk>_>PRLCHg>KKxSI7p9f^#^xJrNvnQl5{j*Ag zzr(Zq=Lhr}1|ei&JpIEjLDS~@7S^)GnY3E zXT=s{?tJL@la#gic5rAmB*6xYZBN+=Q*yDi2{-?+-iQ?&w%dPL;*3?-1AoLXq+?Bf zv6iz=H`evlr;)mQ5Ct-iF8O;I8>1@{T5l_1)6=J;zMJ1*bJTRx15Yb#x#v8TE!=>u zPT}6+AHtDvY*gU76C2w$ZyU8f=!I=xh7NoC7GrxJW$!aHYwWNMm8lu5N1^~B?3dI( zBxdQwbfk?TX-@@tLevaNwZpd)T#q7oS5o$1cQcaHUa1wR??dtexhM6J08&m*-@oB- z8!2&r=UfMDkwPPDi^xeLW$u_kr_KaYC7s+)*(oDcX`8eXzZ6oH136xi8Az4&y0m+e ziPYt5Q$|&Ckn+(b%;tkNQr;w}=AEBLic3j+h;krOHusXsA66r|%^+*C`6-ewN-+N( zGeOd~`?>l7xkz#&O3@ed7x9zgL&AGmB%1V8dd22q#~Yobsktm{Ux?C)I5m&$N4JNT z{fo!8(5vd}%h^b%c@-Bt=S6^eL5Su||<_3rUu236ZSr*-Ex#%PzahzVD1N zgJF!hX0f-6lp+#ElqD4D^VdD^IrqHh-1ofC?>-MUDLWdLu0MoyN1aEbylauBOOf_B z$VTcu{$IC!)sQl48uMFX25aiWWdEkbA=#t);DIf3Sao33ho~IG;=iX0 z#TKS8U!!E3aJK|zt-7*ts;mo>Z%bt!`o)7`^mQ6OYd4|2u5ZMpVg>M%&=O|Ul|o$i z32jz{E2NrTrdkk`A!q3QwvAs}p)l^}(9DhyC_DV_S2M{HDqHUF7&*EbNa7>ioCk`b z`l4+OpKU7CMpZC|e}zLG;f>r5hYX-L53tp3HURC#5SVPZ3iQsIHlr$0XtGWzIjOt^ z3_XW{69lKWbXo=+KXfn+I=$)Eznqq!^P!L1 zvCF*BnN+2|t=<7TW1Up$nX}O8ml?I!HWNB8UH|QVJpeitKYouRWkARBCTkm0J?Ll< zV_B&VK*vo5zFvWH=-BKUN(mf=_A+iphsgzKKPDCYD)1b%(Y6&IZkmKPMQ+ZU)J|y4 zQ9EPl<_fKxtA@@BC_;;M_Urwgcc8iKdW=;d3)nx&y}Wugz?SMxG~N6OShiB>}HoTYS*euFG3--wBY~q+k3l7#h3n4Ih1tg@(^ougCwnK>e4*7o3s* zfbwB(yW=xgsOfN@J};>aWWsV5^XMw5ii(@|SEB)ed4?3+aUV+UTzX%{-iLy@#F>f* zoRAY-FSf_b5K^~x?7e7L2J!!?8|1a$f&jI~Uk|_t_1f;M3JM*@V8XGGVm=#8Xw6}3 zY}$)yWiJG)Yy&YD-W*$BI*f%`8G$mNIIwiaFzVvz60B5Snsu_ei&d0MZ&Vf1klb$l zQRA}%*1U?^QNuTdloy&1%f?pig%`~(^Vr&$`d-oOCbk{06U;Vvh;5N#=M74} zV%q>Ih{H<|+YihonLPi5?N?t`)|Q;a_Vj}iyDq-OcGgsY;p-}F|0ELBnHh=gKQra7 zTW!YnUp^fV?@eR-B>DNDZCkMYgYk^T-&ky?JM6UW(8czoKQ;uTv)FDcJ76qOgY9Bs z?*%NG*!Jc}*!@6PY`f3mtrt< zn;!4NR0^;u!#^*mQWtTBKKI)9V`Fy~>3OUn()j7`^OcVwRb8^dgTRG#cEl5toJLsd zdzfjzB!SgY4>P05<48)(?Ji5@Kw^@4uAb34tPtJ5JI|bgC2K>Z1o~cK{z%rDDg`&p zMw8G2B@(8H|M9z^JBx9w<*4F_j~GB7*5Y}#T79O3=XpW78w7L^{Y2W9A&xGp2ujhA zvLSfpm~;kY=l_sh)er*tR91+0Z#fhiRTjxF}TDRcQ!~>$mGSpXLC1iKB0* zsXsJ{iWC20F*Nn_%|;5I2FBz6xP{b*fT_cg#J5!+m_OYF9bA3@D^6k}^A!)UB?e;G z)iHowZT)a{+dMQYJ5XJz1<*{w6EfU0(6U#J6uNa0S|Ui|h4J^H<;$!JXLba%Dt$Ua z@M?ipe{=5OkDAa*Q#UvIO@P+PfQM~db|_Ju&lB6$HVa_r4vr5KgrO<%!&e8X z6+V^Gd>k^K0)3CKyFj8d(4xz_JcH(dI?g@Z5wZsA)z30^yEg+ROpBw#bOY41R9@=$ zTLuN`9DQzGf|LuGhScn<}`$z;(Yah2z}2#UknKNgkJXJ}ZLD*OK6bz`K;SWU{U{Qrhp`K=QE z-PkD4bC&(+7Sc1dYOj7aLi~HCWvy#5HWe~E`9$WCar!8qR?!<|4A5jGr<0NCDr7!e z>Ws_ytR~uY^-ngx$A_@BDDBtA3L!5=9$CJ z-v429^~qI*qea*}9g+X&n>w~g@(IfEQL)9iK3`Mc6*OVQ$B%FylwpS8c0$pUzCx6G5%d{_*)z;Xep*ba*c?DYpg}Z3_ENuQ@ zak^vdG&ZM+%2EE=VzW_Xl{uE&ANWxP`QTCKt>wIL_}9X`2o@(jJ`L-Ea@wE%%5F;vNXQXL_wd zkQWj@%rg3}ukh3VGA3e21lvLeZtK4x{2Xpp-${l)lda2wTUd z>IsoRtVom)p-uzo^uO!hb;^PKE~+pwCJ}1v9)?yVZiL!_ONJsR`=QRnb{DZE4eIM> zm2#aEpkZssQFr(EKywVb;LvLTjfJ+f)5Kw*zfTK~n`nV1jte54M00407Pj(Um<7fr zlb)Z9VqiqS(mP#t6_~5+e;-I)1m>-G6tlovzU?N<)hG+te0n_YQ{}+cmVD%Rs~gyN`NOq-N&q{3#(MmwJFuy((K7Moz<%){^4zE# zu=^z1*xJFs{z#~vN?ru^Td|siU~OQxhDdCw5Ck^itI>InC%}Gq!I64>UCV%O#un!wcan-6wD zVDwY7&lB$g){YI-BkLySSSS8?5S~zI|k?lrr%lDL!r?t$|g2R z9%xW}vb;wNsEaDn>oTuGeOb4CaEivtdkaMEwBmr;$r!h*aeJXA@Eg_S>JO;qZA%Y` zo&-|t>qnY*zCzUo(jLH zj%A&K%nbzFYy8XbIABA%o{<&Cs=AWSn`wiyu(ImY!D74|w0>Ib$qx*o zedmp!ZNk`gO^27fKk(6|+50X}l`;KUfk<0V2<9YvEq%!C#(Zi#j7d*o(Hpjq#li%Z z4&i`Dc{EmhK6XHEu>y(LJuw=dfXkw)22XIX3cM9q)WrgY=Cb#TfyG zh-<1Yj&_Y8jy?;5r`J|@F2DqtfuHyrd%KWX*~3)+a2T20nb7~wW5v%Liaq?v9a-x<4Q)Q% zMAlZny1^(vWQnM!7gtyyOQ_Ke#`Q2w?D}2g$o@_d$hD?!V`L{ko$aow5{&8_HGNO~Zk6-wN43*=tS5By5)2EV{ zKi~PWDPX;g_M1p-+8*t>O6ncrIi>~o)q6<4;k}o7upJvcN}mSy)FAD4`*+q4Uu?L1 zc3sH&Ge|WcpWj$_2J0oS4^P*SFBdq`m$lv^(h44F?py#zFa`!9W>xpv;(sC zJrVlZLr{J9_Yn(EL#WB|b9e}3NB%`2Rcc7_P&2CI_4Kyu3RFJ>y3k*@ObkY}5 zU?|QLJbpa^#wo5UNiG^N4086BNmv8pY$wZ5b)`=y@=nroE?}s9G07b52gbh9EDiZ) zVDMx$Hmu~crjcC-w33Rs(4ZwA`_^y|Q0*DX zD!Zzo{%-B>k6Ue^F2L<~?bVlp@QI02{=ClPA zZ1_I7ca{rsT?|(3n+b!gl)K%;T7*>HhG?!Xo9qQs;epr2LrX>Z zaNF~zZNKq2LfD5dt6E3V(}MGPy4p4jJ-TJC z8DiEy{^^F_>6jaKsx0x$Bo=VVrT|Dlx4)dZD1k*@s+uSABC%xPN>RAzc`QFhE}!mu zi-geqQN;oYNVFSEG4=|>DzDKuOFq0v3QMgUaO*?z!{kY_q!Ly~x*nn2tH2sRc65H- z6xLojY?=RV2r1eZ<4&1;#yXM7Zj(@XtQ$_uj#b-(^|{N|$E{cNYc>*O!xx0qzw0P% znZnrcL}Iwjcn)cj>-6q>npyZsCsM=qF#w>`zis2K)_z#um6 zJDG8({~Xdt-k*(Lm?2H!ZS-WQ0ydPS-u*YY85;z-Pt3?RBlY%`Lzl4)>)W_zsXsSj zy})sD7u^!;Of0H)`0hbUc)i*?j&Q84X^8lK=MmPtV|cAqYryJXa;`V8mSgogx5Ezl z;z-`|BmXQ-1xedQa&w-{VAWQKXH~yikjM+?!|yF)#h=s355x#q_G$|rnGwR0j9#z1 zQERctE+(|@)Ez7km9L|v_h9a;CeN<0Czu^@+~VT$T1+=RV;cS`6(47E@QU+lV8T!y zvtyA5qqXlj<;0p{5R0^B_8l*}2hQ#(NF9Nl&p&iJ?*0O|uL|F6ZUYG3X>4wy_5-55 z+}pRktAK=olZKW2neh0op<1!zWk~zy)!k4f2-&K)s`ynyA=mY+zDU+p$WQekz|adQ zq;j12aX}r5pYt=Om;9i#yE9{c_$ZXWw9_%Y-2;S1&e%`v7eF-dT)2Kz6RH$RZe;GS zK-$u?<%!K@AdN+FJ<`$#a-E;00OK`O`&~TH(H93b%KbD)MlRHhQPXzRG(v4c1<`kX zHc;feZFl;wsH^1beUae0h#Wxn}3*K$DQIjf7*1!$>4gYMSP z6^egWszv1Sp|t+{R;}wq zD1J*5S0n1I?5A$ZotSjU|Fii+`!*)zap)i5x;F+n9QNjVkyOZ-yYk}O1$jvMta)Gb zvmzw7?+DRY5`p-V>ZxY-M~LDpO_kZX0fN}UHTD1L!kxKAYwjd_FeZ*0wpcyJt73N+ z9lq({Jx{k~P9Zji+G$0UHXOki4-3vc(}S3(qNhA>{Q@6LzkO&mv64HtRNiUZuZo#t z%0oViPMBlh`#*zAi`huoeW&yOXH%r;{U9!kk09md)c{V# zt4Im@z#X*-kP@qRX`xONDe(;>atl9^5~-wE`&$tyUY$F*=Ms=|F(Oemr4T8~;Wg{&Q8f)YB7OgADz}izLjcazKV9nIc%-dU{u_h^#W$8d;G& z@r~!Onz6-ZG*$(xb(xoIT4j;^)ZX{VCubyUALjLoU75emJxz@)horq%Q;c+*uqw>z zjJR145{Hx0g~oG`c-)S^UB>_`x9{4@O%=k5ilJM#8oIGunbcsiu@Xz`Rf0MVH(`mK z_X>*b;J`1SB4@62AF1XW1uvzk6@s|;Cd#vc8eT!b9HUbx5hgWR~fPt5ZZkk9k? z`Qf)7P~a_a_g=dt6n?y7BELw5;-l_6+~7jH`3Uq}OTV@dmuky0Rc^h#D4JO=WM>~d|RBS3z-VYI~YAds8(O})=? z1#;Q4-RYw~K#nbj`doP+-#GU7-Kj+&t3Pu(;iC%V_5KlZBMLxz?piZ>Qw>OwY@7DT zFd#wB`k}`QP&FZUqO$EZR3&D*8eP_gDg}`bb)xe??0g&C$SeS&4G)*Fc05#eJ=;Xp z_y~jnQ_UYPzECmnpL61kX(;c?XEmC2LRsU@ywU|FC{16u#HW-8CGIa4zMm&SG29>3iHuYsk3S{3ndPV=tFl6$N zm2S3^gtQakuO*(1z>{kanqAUlAvsz!#s1C_NGM5kesrT6VnYo&qIBOtM76wlM%)Ah z4;XzLDieZxf@Za=0>i-7*}Yr1_aB&^PWID%Ba9cOn#HoGC(vDq_K53#Hu|LwXW4h1JyaSgo)nM=% z=X4LIKMzyl2{OSfa69jIWfrqv^xST`!G$^Vk}alsd2jD*Qsdk#GD zK|+G~lueKm5)QWnJ%qS^mDemQE==5-cflOydixFFYn|$7OqZ0^$A^-dc<`gr*LCrFsuGoz8{4@qN(JjHa1;ZYCGQ6kYAp41Ba`tXK9YS_c5lYjakUH3Xk zw}Al}%j>g#Z#RXkoaZk+L$*V9YMlK8egfoJ)&Hl+8x6UFJBw1{^&yuPWWS^EKghdQ zy3TA!8S>X&YTM+wI$-NO`{W_b(?XdO&hhqK`pQ^N6)P=`j>7MQ^#-wW9z1+25FdRG?T_qNi}L z8Wh`!-;_-=hT>cKPx<{vpxA|ydf=xt6klC!aF^V&5yz$Fj4gYCY>tM@{# zR-<&!VkqR~82AJ|e+$|3FV?Srxec;)o&B-Wy%0oM>D!EcKLlaF14E;NL*YSkwDI_guMdPN0N>PODlz;=;Lcm= zRNZ|a;HHvFzh}{LxLA_GXWd6+v?N88B9W3PQlftSb=Kdj(YAV+KjOR-ykYW;V6`Qmb;steOu&V+y-5JIAd?*tZ9B{5T$e zTy4VKE5+PLpI^c}hG(A`E@xpL#m6%zR0H#^ow&7k@L~S%B-5Q<`dAP$P|JN}4huH7 zOUb>5ksxuvnbkuJ31-LECuavuzS@{^g&} zs*MfQAz?&*yLHGK2}8zSzw7*w(4psFEy9k3Ql(iz3p*sls5r_jxgx>VkFs@f83`Bm z==*=%MgkLywwexNL2bzA*7vknAQ`b|N%<}2*GFCzeWZZ-$L9;DJ0D|SIPJAxD&H}8 zT9?x7q=>m9(kg`>-k9UYGkMc;8na1}^QRfsFzfA`E!khom_?VLb68y(Gf%2~7Dsu^ zP|?2Ia{M8t8>-MWeZPWfRs^<%rYKBxSXgC^3d0n~A~yXO-!a)%Pnu099+OO?`kf|Z zFj1>-&~%%K@u9qek{vfO&iLytrAlLr5#M%to6(L@J5A~z(Z9g(QO@Fxm3|B@xXjyo zEF6O!7qfK)eqw;zUaBN11N7SmLt_Qi=vnW)q9}O>U9TsJ_6*OU0~?q3zByOCnVkJ* zdTAQ9uY~r$y?zAQ)8y289n3-9sh{?>WgM7}ypiB9zX-M(m&3kL>w_~r2Q#RU`H1hpt;rrhd<5CgOR+E5~dE}GGo0yBg= zwl~G?w1$W`8wJ$WB@hKA22W%{AUe@Vp6}2_h-92G7%>hixI*Bw8*aofVSZqNEG_>>)WI@vE!E zHY5i>aE_J>g5UWY#&Z>rEK?T0XRaEO4;V0b|NH?-9}LDa z_Y)zhc7C&j91KbB%2k$Ou8?%PiHgNh4iZ23J>&N5g~ZgE$Pa@Zka$7jtNfiqkZ|8; zci-;!5dSwLc)E5D;>E4!!ypUp8AZ_~u>XKKA7Ws$=nIHVu(MBnLV}q5yHjeFV-Q`M z82>b#0#W7KJ_-dQ5Lx18=GZm@5jh0krloKQkH1G#V9yC*{tGig`q2>TU@j&Wt_&f% z#VZF5S|C{7EN4)+8G`ubA4ZQxLIB(2nlS+fxbul>gS=t`zMVIyerV}~cQSkL6^*^% zdCU8|P2JYNxfj{Buh4?)nI12ibSZFBnI}!olE6VSOK!K@3fRcj>K2%t01JZ?s^uL; zU~=fyR!PGu=+)WCRr;^lnY&Rntm#<1 z+i%pWdOYhC(1!-_+C=qgC}AZL^4GKaBR>{$~&DKZtg^0=I0F zpP|iEdSY>_FIwxj_NMODM9Tp`hwtrY(c<*;cWL%sXr9!?c)?l%O{Oilf1A_c^;CnQ zl-;_|rP4(EmMD>U~U0>wwaZ`tIE!+)n!nhSrG z!WAj;n&-@_pgzqfS|w5snh7COUWw(PwP`LuenL8snfrOnL3bzJ-X)qhpuI}# znes;-w6gA4Pwx2+*M6!t|EdXstK#dXA+;Nz`p)bTtK>saqS33l%RB|L7f#F;d?$kF z(D9RRw0;8(Rk@d5sXGdcx%DZj3*mWPchbd)T2$d!rZzMdM)e4ndMS-?)R7qM!=TG( zFli!IZtaN1tv{u)Y&l@fW zS+QbBx#_tR?6)!0CSYu`!~w&Ob91!)=Zs-vRUK}=i5MOlaUx280wYeb{^}Lkz=+3B zR9kP*VWi!D2B9bvAMVT?mo7{ z*fQykGAkvFE!p#NP`w^wljDjGZ_s0`Tj0j+{1%K=D$+bXGJ&zXI*2)|3mDUuL$${Va!?5GI7YCJ(LO+*QCm%E_Br(8N}f9T>?OMEeBb2zc@$k-A{vi2ZlJ?b z%|;-PB3eD()xx(6QIb6kC@8sJSyrvAAV0e7qqsr|U`0fCI|Hc`hI zA=ubr_-W@$2$hhTIWA=l;d}hc8NC!BV(Py;?Js&Es=88}>gOiJ_;sB+^3)pQl#^nv z^eaO=o%Bp#e<>sk^zAqFHiSehTzR#%7m_lp$R~MUL$X7oS?5bxNRc@bx4Y*Yq*8M{ zmdIp;)PA)IhL&1L3pv}j-1QOCrLEP&p6`J41t)q9hBe5DpQ&vNRfbGay({FqBaqo| zez#ZkGi2%HwS2QU3Rx4C9<~o3L$r1f20|}G?j_f6ca9i9?ykq@XRYiYr+Gcl z+`0^M3_sXy+}{h?%Xwpo%vq4_%|B~wYz0~0VyX4njzO0ByKPG6X~^tV+^!legUrKE z;vMQrAj6bYuz6Jo(z6*tuPIMK+R(AN$c!J5x^%2(Yqb(mcV0D@Jg^&5n3m7CDhosM zKF!s}D{_!TGjO(GZWI#U>gZTior8M>Qc236L5S6`o+vbFhN#7Bg=ZieBHS+Lrc@t; z&`xBbcDj@oqkdEOR+|MpVBqxLH&y6C^8lDr*?UYgDw*KgC}UCpWR-`8GauyFSe zt?R)UCh{t>l@N!KVzzT5;i3P0CX2IoFf-m0y>o;)fP{$$iZ|I>o?y~FhVRk=zc7V* zh;8kyBc^%?9g@25fNAgi-+fn4lRY}gF`ih!LhVm;fEx+Ne6N#7H<3`YDRQj%F&4_S5C=nPu&~=Q&+u_I z7Rj~#4i%HeqNZD~zg%d=Vt)BHtta7F9RD%oh3j`LUKM%nOD@6^wP(BXPQ1jD{LJfK zJb$rdQJu}(a|DSeJ8JJmaUjvU@iA{%IubKzLuPEok%);V%)S?q_?F*4myQRC>%^uU zh6h+m{Vl_Q+>NEXSJNK6Jc^||;+QN{ossyh*8KYN6C_Sv-8!6JhQzk(u3zmfkQnzY z@TBm2BpTGQaZ5@fk@crnAFI0_Fym3U#oAx2VFAXo|(%e?(Jr^RZZK zALrEADJ*)m8eg2EjYUTNb3YC~!@`lehZjo%u<*i^FsHjE5=z{TQRlWIVMpm_PRcdR zCz(u()2?BjY9#l(Zvf_uDw~YAzr}0~)`Kg>3z*pvXVqj?h8Y|ZFNlGAFzt4U;Pyfu zrZff}9jqV6q%XH+U2ZvI;!)O=@dL{k7v!*c)Jz$pnl=mL``R&V+*DPxdI*CSkFBX6 zrbFNHf-g;0{OHUcHt&15Ta$GdhK6!F#|| z>$0Ia1abKB96Z1XVY-YmI_*>|=OcR!NosBZv?elKTx@p2eR8bsvlReLT>#p4!5&zkYCiK_0rW32r4@Zmbq!6 z@J!^%h)-2ebkxK5C7A?8e~o98?Dj(O)bs4&wKOQHzx`3EFAs=;_jNg@OQH0?+pk~P znn2kudcpW{4Jhl7sx!%Ef^xgeUk&slP{HuLy@t5~D$0@=3^tBKrL=!qN=PhJ;^pRt zwU$sNTTvsu(-o>ndPC)t@lbt`KIB2UDO5X0mDjbOfND$&{#X$Sq@9~zeDuEnNiH%( zVf_J+?3t=9+`WJlZ8um2OF+tVzp&%lCm<1-Q(I_^fJ8VE+j>_DNb%(-liOYa$t8IF z{HKdRQXyTB+UL#a^#6-cdo^}MWw0?FsziN`#o zg9L}+2kx;iAV&B3o5A)^5PtIGv&f}(2%J;qpSfrNo;oVK)XaUsTKl@n91T_Xde$Y^ zy0jv+9ulJ3zO#*gJ@1@UBvKS0_SxuBF3Jnc2O$i!bHuoCo9y2m_m~! zEc(+I)0zTK6f+=Znh7_w{hq{}o$m7D{7#rh5V@-OBOeLuM}FVsrN%-t;d2^P->@jZ zL-K2}92QTUcYQLWgv7mU0>11VSSmS8Jo6zI%dYpu?ZsIDY;b0dv-HcshKK{FNI%rDAhwKbC@VSya(|=<9S__+V&;zXR;<4Sa z@Q;W8{rUZ;!?0emO3T;99qSgB9-aAYfptj*Z&>zmW8Imzc5|H4Seuukf9t|!tm&t^ zzP`^LNz>PSlbB9n_2NjU)ZJ{XT9^z0T`8=b7_vMNZHpCMR7^~}e`9&-f?()o5tf;M z;oYahh^5>S96ZU^STcT+xPHS0i$jddUKwg(5pNzZt>$ecba>HhyZd2&>f-DqQ!?fh z86J9*tcaNeOSgBEk(idK@P^T?1e4uQJ+%+?#Q4+~9eei9W0Yu&`RjEJ3~phi3V*GH zUdFmY&b5tbVLicjA!Z&lg-;75#xR4ceq@ID)Hw*Ka`L`7kp~ewp12&+@qxJN#sKby z21u%S&^P-0KBWGl{Ncz~giPhhx2IOD{`s3S88LZ3$bUedkeNatZ0j;Vrk#eOWSUnT zbrMi=yfZ*Q;w2EvhrWBvl zPW}gZ`k;p6y{fCIA5_8v$d{`B=^QcKj863X(>% zw8lC4vG%Unt--BMth*;Y*!D^X>-FiH*!+C3f%U%(i7_{9c%Hs%kFqc}Miz?9`Jcq5 zvj_LwwB3PC6M631|LU7PzFHIb1hIt{Y1cItuqCB$_Qb{4*m|h*+jS~SY>l@WZ!&bm z*6r{mG9JM;iy50Ecf+x*TiNOJ=x!wM3s7>q(t%`siz{^dwve1WC>-*@8p(aJ@5#cs zNdA29t)9UYw(n`&dEb&6+ga!OR2#Lhor~qP$YmpJXBXb2SxLcmdZE~5{sts}rQ7vh zQyj^I!6nj11FRL-K(N?mypFu&u|am&>gT+pMII*Ej`W>(Rr8vQeyB&LR~jJ#FD%u3i2!KA5Ma~7M|K86U`h+wnPJekQQ8=IOHClVx$uxXDJ zN1-tJiV6mek}bw6j!kKz&{`BbXlj|35#AE=cU)CBcb16-RDCd z=3Q9~I@ckJnVU@~=gux*YR(_>ZMGgv6w4Zw6Pv+Ek9NN^;of+6Dc6?e)*ZAiofxdh z83q&kxwkK??7%n8qOMBy1cZMY9Fx$df&{vPbAEX%kjhf}H0a-dlbN;t<>`VQE<#U8$YStpLXf`08ard1Ud<;lLVPOc-$94Y4ysdYFQ8+vK$7*A6m&`q4D;Ro2%Skv-m$#&(E0xDqrB1_ z=n{5T?%CM{T~wicmL!2$=!%Xf)3h^CyUQ=z5w$5djdr`3vEtq z{S{5g(Arqf_&L#fJg9l7CjDTR532LtMEg@2K&6Fm*(arsP|i+wj-c8H z#QwVy&M8??Y(1E*DEb`;zdup!nvH=xmR_~N&qT=Nu;nj4OoWufFV+0$&q5r7em3o? zcnBV6(c$X#1*c1`nrD6;M7^(lk?h7y=qI$LB+KB4kxo9@BEp53IJ*@Y_IMT3_eLxR z=zqf;(W29f=|_>kPd}pQo`^-HvA;9ZQb-g_Q}X4!ie=RjOB**Tu#zhyK$zzsR!7(J zP-@GuX3<_Kfyx={@?T%L&BKiKy~7NhvkBPn_IIz^&}(d5UoBX^(TvSBqIsWEBd~>D zy5y9sFt+Z=?6J@g!PehX=1XKgY@1IE3|`uYv55BolB&m*1-S~!Fq_R^M2yb9PU zM9dzP)4|T^q~zcQd+drNlKvx5u$wQDFPdPF-OV(oO?eU#rP~EdjXogOI+Fxt=#awT z{$83v8!6{K1MlxQLCVeI`#fj4krMo|NSy01QgXz8M|-v)g>m=0ZI%~lm;SY zANld3&l|+%vv^^W22q~j!l~Iy*xkzOEYh?KyLl^G8ynAJSIF31jlWyiIrf%GNj4cf z+3C~oe!7Vr+Iibwytc4C;KOr$s&FJ1oE42x3C6a@cS({QHrU#w+AqGd5nDPQw%v-# zz~vSh&-K9hjNT2beRMc3>th6xF3ZSo ze2Buz)<4g0Y;IsVn~#ts$8{t+b(UpZ=fI-2#YeZ;ys_Y$$}P{73CzC9rTt#Y4O1x{ zC)5XGF<#(@{2>|>3~5dBI>J$kx8CJPeEhTqH!pjriZUxe;Dduq<4>+ZtjE08h>ta- z1p7G(SdT%LGKWlw`eDfb`|@D6TL2Up9oAAcp#kD4EsI~oK`8ra_DU--8Y(;Y1mBd( z1dL#;w;WX?xu{LU(9v5*DLr_VeXTs{LWmb-kG z0*9bAp4z=v%^ccli*IB+atHE&Rgf|BPiP-|z!p%n0UhI4gDzVeLFbboyX@g4=puhT zGVibk-C4rf7FAP#jzd4L%w7ZvYg0`ElPgd>UWnWrbO6dQ`wqBZ1U;-qaZipaK#$pN zuDQK}&{H5z?=z0jGagoBl*RE(}7ixSeGjk1q6T4;<@v?1$c4Iy>YhRG`=Y zccEPkEA&P-t`B?~gWhO2lO4Acp*K{l^Dm_XEO!60yEqBDpFHh6!@J9n8mkr?eys@N{H2dEch^B+ftc#AQ}bY$W#so%E)w0Xxlfm;-@%Bx zhg81#GGbEU=K%|0L(HV+OP6K-_kY~@Qu1=31&j0*WUYfQA<-x9x@2A>mZ$jD6?i_v zDk6#YUFs*SAq_Ggcp-^(FJv|*9@%4qx~SWq4IymoW?R0;$cD{=20^m*_pv2P<-}Q~ zv)KAhnQdTx49TKo>a{C6*zV4toi_gvJE|-FPwZ>M&M6xBUX+1d+wrsa`eYCf^m#=g zBT|@>>2v3PASEt~v4dcNJv%$av!1hJkNbW3+nPk|dF}J%B<&{l%2&}p<7fOI00960 z6qjc>7XBB98&q~hM2Tb+QlwJSY4{bQ(ojh>j7U~xCQ?eFNXV$nM?&@<=ke^lD3y>% zln5yl{rz8kUYs}Q`d-)fKA#&&$+~wu8&@N#pB=-mXhpJ-OZvCgJxIRNlE$ExBe`(w zi_|6_k~?0w&hJb>iujw9ohx1;Ma%6)`hmMUsWI&6L7ZZ2n9wlGTpD=8zyyBmGfqmav^SEb2qz z!=NjM^;eK6yJl-YK^IX<%-Kwji;dsX*3O(v!G@-=)Vl2=tiP?_8Jy{Zb!M6yx<9&L z&A?z`-18Q!j+S33x}JqqtJl@$wa>+hLi!K$ySuU6;QpEw!#}Y!Z^^~SUv05OY5x9j znGP(RS^DW+lriRG*7(oUen_~gta)oV2eVgpx=tKy#OMBG@8LO(_$135 zOx;Pu$PB5E^Iam*i|iS=P2UmRwIfm^x?|zC<>774jfWv#Q%Wbw`7S(B8(9AAAP1f= zGu-0yG61sYxPPSiwgJJrn^3j=4&=9mNT*P`plEY>c}Kh#l$hVyoKTborTt=q=T7{E z^4qELUl?zoQu%?+So<2NBIs@is4aq;b@ewc{JjIU*$L9t&m5p$Ui?<2ODQx2T&nE; za19y-8ehc2ECE->E-!Vb1JPhnzCm3u5a}{w;|(p)d`iw~p2}uu?qSfBM4@J&8@Evy8pQl_Cq z&lphcMkPN#zYWw_NoT#lIY6!Dt~HCAop-FZmdf!5>aUUZ0_QfMEi_o5w>=(cGEALR znKwX_tP`41On^E)!yjWi1NBSd#_Gq1fJ%?pd!W_`s84xm^G|gE)#I+rOKBOPu5T#0 z7e4@$FSlD_9S|tV6H~Wq0)PTrS|e?nf!uM{(C29~ko{7}pNFjh(!V8AH4ayS6!GI& zMea^$p7BUpkx>H8zLl;)+TlR#kX)`*u?UE}aXTFpsF&59x#yG!wQ)O6j5LHm%>r{fVvILb`3$@nydZ=M!8=v6dkRplO@0s=9Sx;d zoSe^3nn1A^56=;gLBSW}kx0QUcwrl`LXBhsImH?)+O2FMb1u_b%yI#wCP}4l+ZziB z%fHoicYDI!RX^N%BqYH5%Xd}rcNfv~U9`VNiY?x`bX_X=hZsKMAJkHoS%#_3cdS>4 zX=BEuc;F4O5X`CDHPaN6h%c^MY4t3s#6qor_-oODSj^FQx3&EymX;sOUYISw@}R1H zJvx3^Y2r@Hn{30Xq1^EF@Jm>emaRG^E5y2;&j;Hy3bFo8he?t28f?6fk$IRHfK9!| zK3lcBk*GH|J~Vh9iCqg@Q|6t*=ID9f-F|OF(uTx?e>P4ciQ}gcxqc&(&mH1ZWcrc( zy=+hX={y_vrK;>?Z%c^BX?b- zv3&aa!r4fdZcyL#cM$337E(|PtK+yeTTxiqyFMZpPO~TULg!= z4c+P*3Us7h9w5X<7a&dH-P7B7_mNuKvhBvH{YW*R-tcF+G*WmGFUJ3PA?09#f$gy& zBva3)n7@xj@}{-Ztqx5{dZO{zu78$qKObf)DZRpGiwb*1BWol+e#`p%+yt>K-YatK z6gKG-#^LJ;Y|?$WDrk|SoUH0MC{>% z)i1DY)swGt+e5I#v{Y=A$-~0TL!E|Ap7^5Sg+fr|7tCR=>To(Hzzm-E@?EzoFeR>B z>viTqEqp67}Y@6s62RMBLnEMBV)=Q1fUPS_dPYS92o!Y zghXW%V8o61?3cL%3?YZ%e%KwD3yWInLc4)!CxkqfI*o(D|V3uOh~iNN%B ze)DTY2AG#6fHn9Tm`>J5Q|Ijg=01aXDHU^IuC9zH7)t|VWKeRe{d!dENd8uOpw69)Y7szJ-&1+xW`r$jX9DM7nS~UpN z6Q}b&cxD2nQ5tNNtAL`coBSbr63CbSJWyN~3#3YhtX#Uk{?(#_wnm0V?Z22H~ zh(mc#o?Q6;4N%%;X6d4w3B}n=&v9{eCZO&A|%ZaID~gI99!r z4@kVGiZ$;<7E6@3V4Yysj#2ImHq>7uarAy+Q|iNyi*xLexaH&_wdYybygaNXqH`-Y zj~(MC#i}ET=4%nR=`xbz{q()ti;;5l_gISJX{5>!8pfkEklLgj5S?R-G?z8fSKq!z z`aJ8qYOB?eo_NBPRyd6e)jxyFq>Ye~_Isdp`Cnwp$!yIoVIebMUS5{gC1kc_|DM>K zg)GhH@7wovBFn?bBR=K>va$ttGbjvX39siUuX9D#*vi211A53_l%{j|=5=H*888>s zeMYwI-_QAX79i`NFlUkZ6=d~Z%+*b@L{JCMYR+XIT}T(%j2g77Aboe>nYw0sq~*5n zp0J5P>c1MZv#xzeJ#@THb4D2{kN=&cS56~YDAw-NA&KPqbsYI7A(GYyul91hh0O;u z7LC11N1|ISz2t;AHjUV-`>(l+jbdd*k-9-xFR8pQxvdau=Q&f{hp4l6CB#+D+Z`+T zmY3T6j$&CZ@zwsqyIA7)cGClw=UC{i6w#`674rtF-plHTVfKk6Tiqr}e0uGk=>qD`gfyjM)7~z&HrafdSW^Y##%Xn{wn_sYoE( zR1?aI{sBd=cUa%>A5iC-D0_Qp0hN28R+a1uw1-U|L($Vfx7ak_?Qbv8e;uwTPqzRg zh3xQc56*JN^rA0K6`1G+;m?wQwOet2>JlEXs>WorDieXN&b(0WQ3>oD7jE_bT?lM` zy!Nn3D{vHap6B?i2afgJAAf8tffF$2(}GQpfRiXCci8b3a0t?q$;QuslRvqn?Q#on zGUy~i_b=ew5Ac62QwAJ2>8Ca+2Y|CB{^hnyCBU9kTIQhi8rZMOj~7<10rrWA_qxGX zfHju)Z>T08Sho&{hb^}R)`FBj&U;6J8OkV=yj%&4fyFtaXQzQ-QPN{7UkLQ{@8dCF ze1X=tq}g{t3D7hzd8mi|2I|Q}25mp7K#5S?*Vr)wN9Te?l5xR-8a_A?R+R$K_q+j z3f?)!e}JoU#r-!a4S1!q_i?A{3XC1-EH|B(icf}DYKF`i!%QEMT6!QC2^W5Kv~caQ z;9%*}>zB1={lQ_ag7GMph4;?;YrGySJ_+{E5!-^*JH%E_mt4o%Xjg;5#nxEQ@780n z!m(+Qv*o`YQzR;n^o%xHVe{I;O09UE*}nAY`ib*VNZz1$I>_YzKE@l;bx%R6eA2Dj zc2lJO{&ONOU<7HRhxCE!3Z!R!y^n8Z`E!x*Q6#T`%r(xmLS1=eikNGXWo?kt?q;j^`+}IXB?4! zB=%;%{7R$+eO_9m`5viBL5knwT9ESM)i2ZeN03}HvLa>gZ6p=HqFwZe!RFl4Z+}X^ zLgFKzoW^;1*fiAQzHY}CY{-AOZjT)S>+DoFGWWz{^?0mVQ(p&GMvdpU5>{jR62EU$ z+m%=nr?V`kVIvkw`#twf+JuCGmpSTjRhU_KygW7XC8o@+@Xu>sg)uXa=FHFi54|6q z_`=k#fZ&_Hr7Hg|fcQ;l_>lJm(ny0PWp%qCTQg|pPl+zPID19;U)@e9dNg=$`koz> zI@FHrV{C%*e%|8yeezJ{c_VYNR1ehjr750xE`a*uzh2+IaSIx2-6@;D*8p*0zX!|0 z9GdkPTIETH1IZ%t?W*V7f$Y%UxN}QCP%hryW@~?M)|+O|jp`4clu&ntna`r>XeEfjdS9Lc95{ebtr&t{JYANZP!kB)mM1K+Wt z%vR?;@b8z26Hnd*e%|-yL)qTIuR3Oyc=;XhE8kMjKMepr;o5WKeM7*H(wBGowiWoN z#k|JdRe-N1JOAimF7R5NG%meC;Dszxs@qTnJo#g)1Eo)a`*gppVa{dXDyu*9*!coD zcbC8V_%;&QU%UjPL-T;W{bEPZ(l%g)A61dQwFH>8;mbFLDFdU=B0fSb0T>IVb~Q1T zfxc3|M&<2uplK@^$H#2~s@8U|@K@h~q9Wz?@cJVli;HcZa_)lWzHF|26ao=1Q|Eqr z52)5^BE88E8cHpHt&QVDov}l|-Im=@{n9x6)m49}l%M&%`o}gX^ZU_Q;qnEFUzhoxyXT>Dz&M;4~p>2^KfVTG9^f`H)DP3iGpzdkfk~K?&x+pa@VQ?35;1M zr}sQ<2vfE}4!Os@yFTY}aPxPb4eLt}2(wkd#;*vn~M0a`-Qk5l6T6fGvnqEVwNjm;Haib9cLw94yIgfB8Rc~#}#X8VX#hmp?g zxn%XV1rG-mBD?Z%?P78Pa{RmB>7?_KtGAALqB#M%LT+ey;%4M|1O}w-4np3~4=H-; zFOct37MMTThy0G((Dzdu6sUffJ8`}m1^<~fY&VQYf%BlL*Ot{Nxc=Jbd`27!V!lo~ zo|8dAqJ}PuPM^)IiYppvD2VNNFbbPcaKp*qT9Oh9T&ItHEPRQA{ls;<^TSY}UY_jn ziHQ6j-VU0?7~R_7yf0{)va zb7@0%`69NaDG^!S*1zu?Qjs;!mpHK_51EP|+AU`Nim_@67Ff*o#ucU$)j=YpNh^=9 zG|xfG=n~fL9}-CB62cDuK8vL1XKl(2-(#~I$N7!CArf`2=Up!#VPli5;QC84)~}M? zH{qd!H9p2(=a`vTSxGevxLk#0KctpC*4T$7>UPm$4LbPp;nd*K@ixp6RItyDmE$w1 zjf-keity2SVJsnj0E4UV1mEOrhpQ%Xmy*U1;@D=!8zLg^73-VNX%_pdvUIv@DMBR?J2dVs(zdDD>IQV@jr#*Sz$0zs+U&iJ-s z5Okg1_3XAX2*r&rm|U4njgAvtluaNsF>lJb?+e2J&TRBIP6VNq>i+08TR^xkEVq5@ zZxC*en9N^h2|{h%If|7hK`0RtNgA2}L2rbM*A;ybRNLInYih57&ox zn!uking~(M2L6Rg8H;mHz^i3{q-VYW-W=f;um z^a55)h*(%a>s# z&3&h9e>~Py`fTscbi(?Sz0oV#ZRT1me ziGohXtxM%%C{(LEBxh5I!js1#!o?YdQNdB7qaG+Mk-M&W{1*y&(@C7ja1?$vdg$m? zg2K^^v&BVMQ25*I2({-L3dh9ezH}X$osXSYlUaa5fh=WX$axf&o@vPrOhMtj!6Z|n zE(%Yv-P(u5QMg+6XPDM3*SZ87Wwjzvkfd+DG?6{KpLv1xF<<1jh7wM@`XPUDRMoxZ z+Q>5#uQWJ%0=f1la;GFGk#ljtc!IJ4+3xz0mmke~=IPYGoqg5F+*K**z4|*cl;?g; zZ8JvNXF0b(x2H(W^-WBQ97T#fDfY={VTZ)Bm;gEWViqje9^&6YVtO9_DydO9HF_c36W(#xot zCBS;upnX3439x@=^hmCY1Mb}3T^}w=%>L6qdMbMzfH!jPV!eDU@I@)zb$xvxIHKfp z;{g){W$)GI6}fk>$&^>OP15Sgcs zm#2|HbkVQzQr8&}-CFti*ngWr^!Wadi0DEPrI-8}{n-zqw7WEdk28qkrK|nq4}vIk z_s5XL%OE;yFvqEQ2t?aH+??Yo4I;@iSEeozKq#cfkR)e77-z8DT{&l#V-;hIYl$Ej zy&fXj5&?pwf}16dCqQ6ydE02iGvG&mvUFPa6?j>%$Ddz42;7%iy4Uiifs?gA_xNTb zU`IFnYFY6ISZ>n$6l}wQX-rvcxmg$J<3YX0fDg2MmP&)N3Q&)nxG!aF59DF?R^r4m zAVsu_Pg&f8W@+s+lQQc7m;Wwy8@&Y$5?YN$quEgN)gjOMj3!hz>Dp)J3_;l)&9&2B z4e;tNXYTRP8<01;#;kp(5@a4s3p?W+35mOxt#uACfiQcwmsrX}|I1xAP8v>_AZwRi zlC%^v%u>JGSZ+YV_nfSi6D?Sj(5o}1#KAJf>+UL>{jk!WoVCJA5o;1v6Q1}QU_H6l ziyTPArq2N>`yCia{JUy*=$0Qy3O&>iIPe+C%FS?X5^G$M_m#F`=#W_@Ek zS;Z&@nU_bOirq{@)~j<}_kXTOc6a*q1|MDIE}SR+$m$L9R3}8YHwPnMYv|Y;mogN{ z>6MutPDR13lmDshXhgv*ouNjR2@e#M8PVz;=1P7$lrVF zrYyk(dE2tSpMG^7x#|Yz3$_L$`}dvR%C$zwB0|u*%6?=9kA9pJ=#PxGd-vyarDxys z-Sobxc%+_jQ{r6QT!q$=bgOfwXbE8j{2h$obi6)EUqN1%0x+nwu6wsmqZaHWhcEf`8YC zS2pWe8@f$8n?6DP?Pq=&AzjeKnQ!SRM}g*f>t%C1F9RuY${5C;07X4f;Fn+n)J#Ju ztsRm;SDM?mixD<^ulK&VoRtL3uC4za3GxN@#x-P>s7~Nqv3n}B`6F;&Xs(&3nFc)W zm)AEgo&tWaSd-;KHxOJM{gmxAo5Nvqs?U-@c+NTEjRX^fESJZ`_*)>-wdl(#Py|u< zJI=T5@gU;%pW#ZKgq9_iF?NhK&|=lLdue_$v;_P3s69x9mgkfDRe`F|Qg2_kxa1tP zaBijKn9hNg7Pq9LJCo4D|HqqY)Pok1RjsV27qq;z*4foG4lPkK7H%yBXgQsp8??_B zTC`+W2D;7%QE%|uBc?}L;Z zOCQCR{)EUMZwxQ)J%gSV26ws{QTRw_m1Kv#IcA(}=W?x0F)!Kf)RBN9e8pbhc1Ud+ z%O6be-4@JqJ>3JB3F6BH&;sOu@Gs-=#?+|#BrlQAe#Qh1Z;yYqhl00960 z43~E})?FCKiRK#`NLHdyMv@WH9kNPR0}W+05GpB^j4~@lXrPo;gvXw_?ai}(&p=s` zgvf}byw9KKI_F&HT<1F9@j;ru9ZShh8fl*=C8hK;kgobR_LTY*(*5+zpDT4D{o|Y0 zYOh}*efpKwfvnR=Y}uq&x8@}hFy*YUCIpESq66e610);*Q)0Tjk#LlNu<$V?Y`$}a zuNy!@e`Mmzf;18`+h}9v$w;4nxAT5y0@7q`)z(5(uU67 z=CS^Zw2&T`optAtCVBbftE20X`r!aWIAs%3RidM;EX9$M`Q~cXQxZ}na-H3?Cy~rA z?4giUf$ik^-$!Vo*cO;wBYdwMTV;m0W;C_1x!B6*rN}yL(#hlhVOfL?1#SKpYrkT> z)aCw-oOQJUu14qBE3ul9aDE9}XT=!it8YcOQ!-V5xTY<`+pbSeR5Amv>wT za~JIEGiDa?!&9+rKXDyQmAaL6US0#^^-}I`*jI#M=OX-ePxinC+fM1Z1w)8lb$+5) z$Ptnr*KE07oeJ*+6|(XQ>UGwCaugdoVpI`j&~%lr+7pCg3V@W>2J{Z)Z=iF zYGGtaNE$cL_9&Aa-gN*ieX~BnuLbn=YkQYH^#i(ByROJeIiNSl1Rjm&1!7&#>3w%K zfv}{>^@W`VBDizeR^v_}a%f*Z*^UCyky^+TE(yed?wO#U>Og#dK%4B{0>p5*^xrL& zKy>c8^=x)K5cqgUOH)4(FVj-?d)Wfv8gbV>ey)iU=>gfoLkl} zk_=>+(vr>I2kqnCQ#FUzLfZosfyF5?Xcft*pnI{P`PusQu|+GPX{Ac$lipcqxYT=~ z>&RuO!-ZYf@^Ybe&G}W!hGwDq5WnEb%r2;0YAlcsybtAeA64fZwn1_7Y_x2^2gvWc zCid-mCXm)2aLg#?hId{)<~+7ukVI0xDttl@qMDD}gsl1j4m%EL-n{n@AFR|}u9WMK ziSlmW@8S(iJ9pw#aON~-Z~YeNad!dpz8^C);jY4>GR5?t*v7FPNR2rA+iaaX(l+rJ zkS}ob`J(k(jfxu5H+Z!3ahD=JAkCU}`U%npRf8TI$s(cCsq)R#9f^qZTg!$OkZ8-4 z%TYdz44!}kufD%RhH`CoVtgqw%un*g?fHfbM`ahU8@9-BRo$CgbOIUY&peI{nL@^i z>?Ie$>&V!rko_Y1Gcq>z9;2L_MWXMM<~^5GB;M|mp4tmY*ovL?$XJfVvbV{rkK91| zo5iK%SGh>nINk2)eIIGK5H;ld5NROzMYkp$sri#8zC9X9m1GI?ZAe8*z-D7jrEf?k ziM%tGeT^OF!mH~_7O}1Cdr+!yEw_f zy)(Q|2I|B%UD-t)3mV^M{^4C5hvuVCDk!HGq2<>T2dif}&=yh7z5DG} z=n#<454l_hap*jk_19qUG~)AC3dH^w7x{fdW7~^5-aQJq0xOO_9o( zZ$P*8ytillZ=kow>131@1EHDr!*97b5OI!fmcM@jG4hyE4NrlgvRHdhhYk#Pztexh z+<_54=Bwaw92lrjIAp^Q45rLO&Cyg~^wm0We-8mhFL%`2I$>Z?y6;r#Zv#fr@zDQr zrh)PJwz$IXc3_;g&%CSkA21{~zgcFW00gz|?L$p<`NZ z745<#v|qE`ZKk&qS_iJ>*a%XgMbB>cfv9|Fdh+v6ez`p~&{Qt*jSfNm3IQjrC1I#l ziejHEuYzjRnw?K7I-s)HN#lfZ7L+wjIPLT#ps2-3Co?!0@+x`Mek`tmEHf>BN^3u) zu35?ay{8#ocw4PfJ9QEQgD=g}1DB!yr(W5WYpn2jPM<7G{T!xbGgm}KHQ|RpL4RA; zzQMeN=TcR#|6oyWqXBV z+L+DpiwQ1Q1N%^HDr(tv>~TM~c;%h8xH*7rVnyaImL1q$)E!$I6o_O!mGFi??~ro( ztNZ=H1f&X#tZw>fhSX9G5%Gr&NVC1PVr}?5(#EByxQ-1Y{l=Ov9V*I5pY7n`UByP? z(w62rvs*||%G88u$;ePVGx|hO4H>s-o~qML$f*3PdCi-Jj9Cw+{&#C+ZZX}s?wlAh zb?la99Ck*gS%m217X~sd$ohxA4Ix{JEZ7@505nq|-0AagCR&s^aFWORR^itqPE z#;fOgCk8W-aqMeyiKz?{|4=h!R33>0%ZI^x8AvEmT;=*pke+|Lp#QKb(v{+lTz}w$ zv;^0&Pi+L!xDNf9@o7b>UF3z`gFHxi_tfJuqX)^|clzs231ElywCkvU5Vn=L+JDPF zimhwg{L{?cvDu3MtBKS;Yz$GkS+bvu^;ueWat;Pq+o)|p`EJPR8)mysj5i_XN?sHT z62bD6V;^N&=CC*Y{&>_|2ROun1XOP7b2o8wnhWwqw5l>m!P<*zfD@%k7<)H;n zPOa4jOj6b=eR&Y7>CO#D59dK`+mo@r&<#*u=JD}RTr)Jrvl7?lyn|-X%x;N$HcjnwQHvwky zAB5jz?2Ez`t?m7FnSF6W!t|3O_@;grGD~bz}OxY?6Qy zFfVn$H3P`rq=TxQcW5W9WyTbKK-<=qmFf@bp~Zfa?Pbjk&=he{WeFOgA>Fx>MR-76 zQCzb7KVPURHX3mdf*M z9Wif4e+hLovG`D4iA0|!mOo`!fA}wxWt=Bg|NbWO&{Q4kmNl+kYN*EgrLXbv zu@TrfDWL!B(hY2;tz#dPJ%Ft#wbt*%w`2Q-mHwh9jv{$eV}9bz9;BRH+`l3HK2oL3 z-mD7GL2CC&pB$nLX%BKCxpWoMRR(Co5wDTn5}LwmoW{v*SZ@079TJ^6=hv)^;q-x! zhi{GGR&sp7 zjV^eHjnvWO8gJEBAa$3dZp`s6q+Haz-~aU&l9g2`E_yq${ifdypUie_C7t0JK7AXT znP0S%`17%GTzS!sv556EmtO8&b{lKQ8)U+ty~66QfGn|F>WDYWx37|VYbpkZE_+r=cPZcN@{ z6lx2#{T~&(S&2|T!Te9r)*Koqlhuqv7|=Y>|IN&W1+Dcq3noU<&>lxT*JdvV@`>Gi zXqE|-K=~?<_YZ-3WCLOFLlJ2F$0~QkUk6&<)gL#0P=W3-|I)824G6xQt9rMj0P#Aa zv-m_lFt*VSnJf7NBVo>4m2w1_D>Fl*LKT7O{EjPOzX3w?Yl@r0wmI(tnw#d0sOO!^8>&+q|D=6$5>4hAqM z`lTPe>;h(1@{-^k8ZggnA{Ylb`v2#4-oA))eiYNAO{NVPn_k?LbtHgz{P&0WbB_N1 z91oFueFW%s3wM>zl>_aAg-ZSE`#_!g_;s7F5m1#%Visyn0Od@{tG(Z~fxN;bE@_Sn z3H8#QE7YcuXwUf9?Gc6y+ha__sYGNj>=>nU3dlU@(#T(Jh0Ii?qdStzkvZp~DKy)H zEbWPFPA@BvOe-*{N^}$M`W0i90zQ# zBT*6Ze(vf55?g7tF=-sG@twUI=E+1_y{(ed(-Nfdy7$;0+K*Jtti+h{i%2<};8Jhl ziXFd$L$As8VEYy)ZfSlqY*pooRPR^BX4RKrvtiNLDD4}TlzR#5m;H<~pw3|p!(m_4 z5fiM6S78_preQ_q+gY3Wek|d;dDQ#r2F$nbf6b?pgIR_Qec{Npm|SYTTiT)%V|2cM zCv|9`d4Fup2(1^Qt!*_tHblbPW(&o$HLKu*{gc!LM=Ip~w7ONiX$FeZlQNY^R#0KF z`S$_J8K}B?oa<sT9qng_MW3b zyUdsef5I@3S1LWrsH*~sn`BK7hm)zsQ@)+Dbf9halX);k0$T5GrCP1898M2=Td|-I zgyHhwmf{{D232wR^XX_~m`T?3O!a>GA@Y*C~0Lj&i`{cJF)fL;)Cg4WGtJ z)d4YG1Y9)KwSlC>@g;j*eR#mb zz0gtk2z@v570A}D#Fwj|ZI+Ab$F$ydWbiXK+ye-hC<7lO5m?9vHlA~x)OEqR!Dl$htOLeWZtRGjHkyBcW@o^~F*d zi9zPHmJ^5b?`jX8lCwnS>J=V$x($$dpIPni^9Pwfk8W#T^%q&@N?I-&S;>s=iPC zI5HYrGTBb(QcK620q*;28$uhtYGTXFk|Kl9I!Ehn|KpZhqn*N3|C{ZK>JsN*lC z>-oqkXg+sHArx7cyX&^U8%CCJL&#V6%gD^BhPc;F$kgJG>$W2yBX3c1#x4{Y5(C>d zC#*x_mdtglKv$$UDQ)i!dx-Q^KE_^sPDtD5pSW9NEm9rm#&eo|NV&u7_EAd|$wFrm z_j_K(cJZ+pFg;vcF>3G$}6{GrfQfmDxU*G?%c>PkJA5$P{ao)@@imbP_R1 zk~9}_AIr!=GBQT4SU8&aKrdtmlICcYJxPBteL`vt@wyY^OEt!LrSi~kzVf}oQ7#A% z5130*TMkJ972zp8nvfAQCUq`_d&P!!2CC!dNgqbupDy)S0s7>t8nfO7i%4`=0oRN8W(}RQ}OQN z)d^r9`gl*riUjPFTkOU;yur5BzkQjk3~WQ0nC6I!z?N!#Let>rd(`52IB6BIQmAXX za1dBW{M-`n-v;JTr0LjmUXFj5N-)MboG`c~ar4D*U>xCFoi^hPL~7U6&Y)DFPjvrm zKQ#b!g+~L{PrZR==ez2W1{tWgc9pcMeF944k!do=H^_=VfA9H?&@TJ2Bii>CwEpL= zpMC5TG=1_N7W#A#8se|~>5;wyb*AH|EySKc^+=S%f7_Qs<-CN~*xLjsTXDess8KEy za&J_7uqz#M*mj2VV)Bq0cdqR3cof8isw^Z>y5aQrWzBojJQzLh^z5K`116IVr*cGT zm@Ue#4*kxH1@epH)4%1hRO9uE;ed5mshZ(mmGTIyA7bSGS0t>Ru1_t`QNjkZwD}&- z9&C#J;4lAM8(Z3U%vT6aW7|)E1->n-kj%YVsOH>ur1)t)zHm1TsUB-ZeVpWwW^Fay zcF+y!I~+=Tgwl~d74Ini9+1eonAe!*fDAj`!U-ys!`&~on@?RpW)N>jl5Yz#{|QYh z=;k8p(&b0Hf2ts>wxn!%wkxvNl6r4*dOiD~*z6;cC$cZK75q$7L$=>r&R-Tswtocf zIjewd&%3ufPJTl6k^5g8r)817IZvXXv<6v(oa5Zg60-a@u5Fy$i!4EsYiI-?GUJVt z0<=0f{a@)8|L`7U_|&SN`Oh1PHlIBWsr*Q6zz)H19;6@I_N6pJ0BP6MBaN#@kQ({0 z%x=aIDGB8AJ=yw5);;y1dMFIrci>~wz%*>-GQYh^GzXh%5)ywq%DZ5ZFS#VjJJA0k-x0 z2X4zCVBg(9@7!ex?6@~mX^(#ZJ0bGYzxr}uKkg{rvRx0@UKfJS+i`Te-z{Zh-UzUM zFG|8L7O;{{)-K=R1T5``!QZy#0<%i+_VpfrV5;p6IF-O{kR8|Xg$l` zb~G3ArbS)G=bl5R_P~m{xG+faz4S@A^#g>wGoO@BmBag)JN=$k@Zjs;=~~Ir7;itSuT?NFSTQ2F1wG!8RXk ziaKbt(_tC5e37xY6Ai+4DO*bW*a0LPOO3$#e57Oy9v$q;MQW0S>k=es#v44*rr$Ageq@*XqWE{TlnqCky!Ph=hu5;|d4hRm*YQgfzm$U3feU)71j z!Ik18`l6iN6uc^KB_f1un^D_qcSeyNW*&auAspGMUP15ABqBRUeTPxZKhF4Zj7AEH zGas}?n!O&`wvt!+_3JtNgKsyIIJx|B*m1P^JF<@5yI^g>;cs?&nFv)InTK*svcGVA zBJ;mHx~6qVEbJP05_^rr-n6y1tVfZ4VOiy?Ya9*;9-b)GR7YwY@8$uyUr2erzUF*a z9FjL@bru+0!M5+FtGAYqVM}tR@2?}a*kt^QmK0@+^{ju-H}RKY?TMm~etHB})z@r) z5Uq_B=GICT?k!mKdQ{3hl`Hwkr!&EPw&8DW;fCVY9Vie50i7q58zVSSqIfvBn< zP@TOKl1G-mxgx*~*#kMd3imFDf&mM^s^?`;X0S3R_TFK@$MUzWe7`}BgPLoH_$R0v zGZ{TblZM9g)k5(-#n9aGy!`T_EwpXzq`AorLWljU4aXZ#14S>)VAkFbs7A$)e9PQ{ zwtofBwr_4gmrYMH?)wMyrS9*0KBNQD^y6s|9|4TOy+VKUz5`QUQa_pY3z#1T8xMqs z0t*t~@7f^;tQ^w<${HSE|5ws)&bJ-d$6mg(k=z69@N6sZ^Vz`8s8uO>y#v_ACG7j- ziNGfL@88Aa1MFB~>Y2<~V7ojC{*&4dY-v79X7Em6wN%CCX&>Y8@aP)5<&S~c-y24I zs|HLft`lW%Yk`r4_ErLIK+Gq0y>^!XLRH}xYR3cp)T(p$7gd0Et+(Uz5e88G-0!HF z7X#(y^;lC*&**4P)T(e1hPH=U;b*U^LW}z3%?Oa&8yc9>PSMN^%o)C`R$MsyZ&JRiVcu*NxXXWaTi3Nu!~H+YldFk z+9gjV%qYpFMO9UZgkyg4s!<{>|62b3Kn17ExMqWffZei;vXZHuv+xf+?Uc1 zSX*ZB$0~3aHkdj-G*)_oO$`G2qUIsks=P}@mWR{d{EPE_p8iI12}#X>I~6ITFUDAE z+mJd|`fR5?Cr5g^x@Cx7LZK-$l9X}f}_;N5=)hYA&Rpp1hg?=B zu7nPufE-Ebvp|0tx65}=4KOl&3gu%hf%$scB_sO*u)+_9+UP3-`;zOTAf7#Nlu6#J zRGt8*H=$K{g*b2nbO$UmxWE(Jy61!OFW`j{taGoO1>RWUeY5~%^bO!=+IuF1a)2N9K{YUUGw@F*#eH8s4*XSwLo!-);1xv( zXlS_s4-PeP_dWw|rIB^BBptXi%eL%Kl>yGR)y?nbRsuVBvSIGx2Vn8ejqI6h1m^d- zPl4+cfH9L5U+~{ap#R+IbnlfMbd-OAEiZhb-R+w)F}fG1%iM`mdvc*AB53I#-wTM- zm)b2i^a8=cR^W}28#E*|h1@ZdgPOFp_THkZP&RWx>(Sd|P^fcj$|1lLGWwUCb&%K% zPhB`)Pn9X-jX$Yr1jnV?0k=v?z>Z(y*jX7%yiLO z_77~N>Ri77uuU#?O*WH2Yf046NF#oW1A#zBngBECqTvs=% zx57l^&Tb_hkkLclEmGv?VH)y2^eKo==ObTDG_EZ?6#0(R6F<6Iksslf{S2QWKLHy5 zleR*Bl*78OiT9B2PQQCZKmz%D-^1IQM4f%AlHvJ zW_;rda`>Z_ySo_3ku4G|-+T?(R?WdS;jYN??s@WF=`1pXDUs2#w~-NeVc(U6R-}8x z3@&~qfwaVe3pd`a!?pu=4QEO`ky2OXwAwEN$vetwbo5-Y`2kzh`Z8c+Q{;QUD@s`R zxli>ZF#szycEzXsJ%z;%&gTj4;rRC7&vIQEA51))*tN0qH(q+1DB14k0&(XL3H^Jq z5wf0mc(Er}K#`i|*s`HLP$3v8zhT>2s3qEL&6h}nMy*%L)t&%^X=n2KJ9~lj)?HFP zWie0;rDA1v$^w;!^0bO^;)%(fUfMHo7Z{>3Zm}hBgip7k9b<)F} z`p5y;8hPuJPgMhZK8q=DdI31qu^(rL)&SR`I<%sA47fkMgPP911fJWT0gHXNfk(d+ z;APhXe3{yQRU~x~l^?*M+})vTIq`k0<<%GyxW~ zj2d;22+ZNMZVb%@#%F0EpW<|&^F=Kl%J@Uawb|;`hXkNqY}I>{vbWIs^f}cr#2d(e z|K3)-{~U-X>R+1!};S>-=eB zDK^Y*T6%`|7zxxXA7VR=kn~V>r}fRNNKq+mySHjRQmd>^U+^_VnzAodLq`(ndi+=B z>9WYMIhmP8&OxR_0DCCa0a>T7sIv94kiGxkopTza$PvD1R`~f4avD%9Fe5U zzUT_%@2OOva~C6DK*?#l$y4N&9`ig(;~>xc^3IRmoycXgMS4~}N3Ox@8f)=Q$Vqrx zA1ft+?DzVk&TjvZEttSFT&aYtjsA-6^DJa;?xm`KU4sm<(k-W=m9e8o`gf=OA8hxN zwv8IC$JW2?MKLeivE_XIt3Rp5NX&_ePx4rcO})a$AzB=9{zt=AgEd$!o3pK6!~sjU zAADwdeh%|g!#4|?y}{Q55@y;xoABNy*B@&fq9Nu#mmJ3r36SyIKZ2}k1%+|ctZoxG zC{G@m{5;v==D8-ByPGErPZcw}J#B z9f9UQEI8^w0J;m=!k;7$jG(`B`U(ob3?F()a)W+8H}5fS2lfbTE2>FGdoX6FL&WZU6kmSU(Q9a3jyq zOAI(K3=6LQ907Ls66=9Y8o*xWBY5PM1hBT;y2Nty1*Y7e@LusBzz|<9>MUgl9bG|m ze$@oDdle3A9w>*_k?mVoS-gc7quBS0D(it5OqI>eeGX0e)qUf78v%pg2bF$JfU3t! zezvUN4kfqFPg^XLhMdI7Q@ss$A<6QSqL0)&aEaA2bk@+qxDr1*bK!D)V{wGguW|#6 zcwd9l57lDD#P6iX61%bP*V-BN2o-D`?L7Fa#ul3?Dt*?;2az1z)x@|yf~`7S9hJ?E z*w(&%{iiSm?9lx=zQvA)bdo`~GFc88T?&8j!gpkLyBxFIZ;z~&AD6ZYr6c=w!3m|} z-^e*%82aJwF61uTu&v=$Epii-KkO`9ggi0rFM~dNk>}Rfe<+cRyuuR~`IZ#qy^qM{ zq*);Evx%srh5_=r9kuM0G?7>KsquKZpmEQBeHWEUMnTPG#cLwd3zlGT@*kl zJ*#Q`Pf-b~1A<3&^XH)9Fi}gNBTBlc1g&^4_cpXmHs;6$#<@aX|y+W(Fw98m_A)m(mg=RB}AlU^J^O<>QG8b`Lh z1WsP$q0#g=z%|??T;D7OT&(#nsC*iDa;%&N)B&E;=g2O;8StLH)+>uL1YSn%{!W`& z;Jr}LSakj-@I1SZ=Yr62ZVBP3(_##XJ=Ka10g+YnHxG}Nc_{}+>TOH3`f4&iD2Dfv3f^2|VX{kQr zV-1v*3Pv7^|A1t)+Sg1q5(o|#{%Mq6fQBo<%{_0fK=r$&dnrsKD82q~N;UKlUDyfClf;NrtiRK#rhwIgLCkWdReVLNf?W!w3bXUb+A%rm1{devKUE;FxqoOi$ z9}o)$wK*WC<|)BorK#rPp|3?{9+rw<|fQNJW5`4zG%)O3&0b&*N!TB`h% zhYX6)s+uAxq!)Zu2u_Q|jwS6;-*(cm&7Y(3B$k4dPSFF0XWt`PqPp2r?J_p2*)9or z8-R@(q03T)>#_F0Y?+??6qbEER4^~CiUs12D#c4(F-=D2O}B(I1|M1c)`9*CqUWxM zt!cRcnL^XUgKmqVaHb}y*!3Ay*d9?D51WO$q$xSsH9MiPyUQ>}pa`1T)&sEKfX_YfOgS$zuk@9p(8M+`1|+`pnrB6^=e`*_;=|+p1Ce2caE?80bKK#&DYdk0r#zM!`;36fjhu!)Kty} z?))jIUH*o^{a4fJ>$s3TEAHEBEqGJPWffo~0QazniiGJt;Iz5Ty)`Wb&OW&bOOgq& zLk1sJgy{jRDlWxgZeeGvgV%@DO@YDsYa6Ug0(#w6zZV1c&>^d7L=CEgwj}P7PuuPT zW#VRv{dXrID@NP!MGBx_ehvcI2wQo#$20%NWBYZplhyuS*wHuovOZV@84^>s z1F{ttd_a8o*p?b(t+qB-RA3?Nv#W@LYALca<$R@(qZ`ym2*`O< z`@mRB2id>3U-fX9Lbl1#jG?wo$hs>L6Jn5!%-Fc0dr_sxcq(?W<|zs3xBB!$tuG@j zasy3&{XV45`*z43JcpEHZaD&vT#@8iUjK2&Y9!pTicb0X02{7&TAq_Rjny}s{YZb_ zV#$pDiZes&F^8}sQ|VR}CU!M%nX!F^!hcgGZlNb6HhmYqy8R5~l$j3;5jCLXho)Ad z%zCJH8AvajwStE8Dx)7p2Y}$Ye_JfG3`mYLaxrQIpy)*0{TzM}sAKj;T3?%i=AB^{ zs`m}(PV|Ycufo8%KXy(gJsOyI!|&}s_a0bw>b|lWqrl$!sA18BDzIBU6kZ7p0LQYI z^lGaLaO#Cis`fAV^s+Yu z_!Hl(L1^D^FS_XGVrYFayE^SDG7Nt#QyCvz6v3SZy4VS?!qS__Y}jYnlO_R7nLllf<^I%q*Bks zVWrwV+XKznSf6q+@7ld&Z1VK)_A{a((dTr^g@2LQVk@|HTIDxV*NeCc7B9i}JUNx? zx6UDb`DT{hfgQ+@KmMFJ=7`L#T{+$7-y=&%>;3n?dB~!Eiz~N2fNZbU^W@Gi$etd(2DBvLG(>9k^sU4<_Y9Zm^ozm9|!lbvGgLS6%PX>aD}#8YUG?;N-r(E}aRw59zf ztAHVK?$`dusfmz=lOZ>+DQ{T^T{X7WW=FV%K~l zp1K0ZQ1s}kpRK?-H5aON^&)UUR%ZNKB5;I*6%JoM2kgAN0+z$~fUOp@>qX0LU`0h0 zfX`20wtM&A2v7vZ*FddCFB;ItwwsL~sf3O+$r7a&4zz2o9HyikS?Jx#_ycZ}Kql+g z5dWq_Gb5vkkUI#CmG?Q4GMAxl@h<7_Pqm@^!mw@j$QdZu`|s6-t6`ApeezeJR5SRM zo{B9G<>Rx&2Q#Az>iAY>!1K6>D;D=Bt4Ml2$Ev5r%kGdXu|ZVxM3g@p2^y)1;`{a? zNpsc9ir;{g)v_DJa=nm>HSgx{Wg|^bd~2riPox`Khm0UD1gR(hnRo|A=8#QZ&t9 z)(VSxcDtubM(|Bd}~c2q;0nfO|R93!o@r8Se#)%In#de zzy6I-=kxVbbb1Oj{zzdE-AjPDGT0W@!84qK;f(shG>pRICA3-X}53AZuU?N5qZVh5=jq z!4aJYCxCtAMCUEyB(PO!USGPLf%R3v>E?n5u!8WKZWRxhQ|FYC@dKFpa|e<}UIW8r zI^o6s2%vlR2b{m32(+RdR}$h+K%0U6InzA_KuKE5inuHfB!aJG<(Uv5)UV(1JIEdy zVtV~tJWZiGTz=)xr9Dtm>t4C?MGRy=IXeB6x&)qo&9vP1au~fywm14R`!S_2JZmH& z0pAUt-6HE#3F*M9&AoIwttln`aWcKYe8`immEc1=? z_s6o46;B(GO*xLN@>lC-pV5((rx|zG$rf3+Uz}dGNfTL{wsn7hZ;Q5yP(5z-a%y_fU@aVCn*n{yE zkdbvd69nU-$Zmu3H}VCjgpUty4rxIB*R#I&|42Ync4sFw(*%emAM}*+YoI04`FY~y z1)tZDuGm-k3EJcS_)roT{HW?h(KmyuK&LLx>b?~KjM%8i(;0=$1y+}P05i~jrJLK*1uuM}ak;ew7$!Iv zwA>l!*E}Z)j-o*86+3cPc@MNDdQXl!n?S3Srnl3%F(98>x~|Qy8k%kQRL`wwg~mNk z6c1K#p{BK7UNSfgO2=cF3RNnQOWbR408v1$zqx-gB!190y?r1b9Zvc#XPI-ncs+4WfwN*J~O*Etc2tz9{kN&_1LOC zUz&N;1>4?~>kbaKAgw*2DLm2~=~jx5M;#53A)W9=Ayy3;WjkFWR30O9+euY$A3&zl zd*L&7yO8-{^|p(a(#Uko%9zq!yuiZ-`M{nH$SC}AQ1e_bG9>i|mI|~Z-E>pENSqqd zO4%>g)mUI#Xpi8t$GfprJSXqWOEDy$JNo##;6`kA@g}G_31OpgDD^`v8*9ev1$Q(l zV3|mf68qdK%pGhtA#bz9#NK4_qVuhA(L{gO-aKJ=efiJJ+{G8*omAG#)en22T!Iwh z5PJ-2`wkd$e*A&PLPz4Qf=$reSSVPZBLU=>j8j2&%b<0iT3}E7M`(LYx=|`l1=@2H zhRk>w&=tj#|3oSPo!8FU#}Ng_ITuTZ;cLJs^e~V~yZ{VN-zuFCw!omm%HN%rf$=2z zeN^BuFt*zq--8Q$iA>p6X7m6$qI+U!PD`QvU7YGpMRlP1*)!JS4rrO*=%gl`0VLgk z`grw6K!8<+Yd$(bgXoX>eOmocb@r#=69|Ul)8i$2{4bDYRFP3ps0dL(OD!cAE8=5I z*T;6UCYV_qHgZW@0E>kkR7%_mu}VPKb!O}#VgX0X^b-RKi(H@AJ^hNr3D2{)30trw z)BabF_+_Mu9bR8;_YK>3{CQ|LWRJ9OyK8!_IY?KbNLN2u$YO`h9cjkM5ULS$oK!%D z645q}(2b0Bb6ey$yhS?OH{6N64e9ouwrMO|g&m%&w8hSJV>{_muGHGiNNsv$6K}f% zDXz&Y#UENDspW*xme^fL=nD>eEj5h|wKF9T6PvM`c09OTfrBMX8<8cGEX>~fq3E(o z6h51qJJ;W~1_I1d)1IF?4(V&OEvxtoe4r|R`_dc&73_v6<&j#bkJ<96uJH*pc{|;5 zoeT!z)tb1bd`W1LT)vJ_DFLmX$*p(RFrm%2+`41Y7|;}-1l(M>*BxGw!HrN2^qr|o zgl8*(?rfy(cz?l1Jx%ocyR3n3=%FSTPlb+#ORuB+j{z;lwT(TV1#SP*Wc{u(fhr=z zUp?6jEw%ka*Y_;=w@lFvy^owwvBUklBYAO*t|FKuj2L3*r*=MPDv8S8m7Sm>i2J0+Vf+^>Sa7w8)1M6HO7nl z(;k5LB`ejW_-;teq{wd-SnzV?V*xUUZb8MuW&K>P0d>Fg%^y_ALes{#sas9*p!w&> zn+|&fvX4f999t16FAp=n&;J7IS=%tlm{MrVR<^rxJ{j6WHuv0KTmm z*-tOY@}TCBh^L$<6H1Q+TA#2EgzQC=Ny{Ebd8r1^B-HW z@Vobwbjx>G@n^R1rj{<&ClFJ;v!b!-v{I7Ij$|aRl&|o6NJsMJ*&S-Rsz^EYg+2>u z*xEjFEcvAiQfc2hZulx-o5iv<(W~4R()XxNk~dO2y3T)DHioUV^~%Qjr;%cQv;0Ql zZzS9KHwJ7ZVe{Og9ZRv!fslRTVUHSr1R4c2~UdKy5*t01L*j}R#I z^EtCwL>tmX&oHGsYr#iuNJFtj`y-Wj-PK%qw)7FrI;4o7v{k-R zzOa+UF6^};NH%kirmjDX#DrD0XXX8oV8>P|Om4%5{GVFpXLYe=*MaZxR~@kQ!qw#Y z_T`wPYH_+@`xT7)D@UfuJ%@k-KKXXfUr5hWyR};DBNVBBCrz9*hDu3Ur{T@nP;XH& zbvdg98v7cy@Viz+^X6EesiU$$WM=msrUU`$JMBIxO$Er;vr9?o>OejzW^`6J0Z5N_ zmApLB3dHS|-c6BtKv1tx`cEbT8j6A^<9eS%jqj&=bk-fpcTLFM;TU*=wH4yW zv}7mKSEJwV#*aIn6EN+)`85$u6)Yru)>3Z2gB35d^HoZuvF;u48Z;-c(S<_uTYCu! zUR6e_zZYY3kCaP$$9*KGWT#n;S|YK;W2bH83nWT)&mD+9iv-FhQ?=FvZ0uaFIk|cd z*1ubBZlWECmDxM3#{V__4*&rF|14K$AXa}HRwyY+Mnxq4N<)&2GA^YgEe)g;MGI+3 zQIb_5A!HRQAr(rpJtRrOv-f^vs|cl`_xbRiZ|6SOy071t-yytYyfJhO{!Ym2*?`YB z!-VMWdlLPh50RpOe|oE?CZ4X|ptt^YEy|vooh*ufifY-$c8}yEAb6`+jSgQ!W83D0 z^$u2OTEDlqcw-crzW!35D~>@^m*uW!tmSCZ*cS7nP#KN42lyF2>8S8n!q3%&0`9cz*R)*1tFh*o``i2o zRg1k-?L`X-^~<*ux_OTi8u}ly!v|(FA=hC;wOa*)u+R7Hp5;q#;{h$2)1kWn zFH(L!P2e+7zV#mQ=Eq`Gr)6^%DqKSS3C8A*_98Uc9T?~`euDO$w)` zq2@)#U2rDrCw>Rk!SGkl8H z8LFVNW^a6Fh6GiS&Q}T_=A(k96ni857RpGjmGkQucvdna;?Xy6WKLCR{IKsUA&B_! z#Rl`oghx8No%z*|2_-TUJ*9zigtG4yvx_Z{63RPYkEktnCcOU8+^U#aO(^}YW~-Yd zM|hGF@$nn)D}y2fK_shuzT*718wD4$n9s)n7vVzRZn|Cu#{v_A^q$-b@mnv|WAqO}vrt{Csmk#Py$qBIoyOE*w)M z1;bLd!r-%uRvUk|Tw4DBLhYNzG< zR>czT*33~l&{l!l^tpErOf<>-|3R0rm*(vgS?F33_M_r-5W1G;svUd20$utIXVdhn z(6vZ3Ya3M;T??o5MAjWd*L?k{wt@@jQrqMay519AbB>MMb}U8Ltec&Yna$`@c-p%y z*9Kj3pX~1OHBx5W3zDYws#AX}K|=5n-?B`Cq~_*uV(|bZ6(x2H z59>lwM(M%NQivy^_L; zJ0WpQQ0eW6f@D)2iMDhuBzA+OO_diQu~|6BBBB(Mb=&T|h<*o&*_G}2jnZ>6dFG^V zF4Z;S+|=t*gJk(E*(V=kAX#Efc-F^+MDKKs*~Tf5=wy#?ApeC#lX#YNp90Cesmr@^ z!XZ&z`(FrW1|-VI52frn3CYZK`szQAAer8F$5~tgiR@(b=#&gdWK8Nb-Q6MnbIi1< zZxrI6>3!eId>|hEB*-m)0rBt@HOjYkh=21tAOG%yn11m}%KIY_lb<~oeb@wXhgkcS>=cOG=6A>kB}3e@tB$Mp z58|d9L*@#bAtuy&s4kJ>YsM8Xgt|gpY4p=gX$i!yj~mp{K0;iYeYb$I1>)xnsH@~a z{B+I=`KS(vpKNsvUQLGhVMOCu^-_o*)cW*#!d% z#O|ZCr5kG@b~QCWoE{GGo^y-^OLZXLSz6)xMcRYYSH`?A0*JR5n|l~aee45h`k68i zqqrSH*9Z`ma6Hb|mvS#H&jSstmIsUOC*9{8hU5GE<%5uPG24 z1XfWD_d>k*O^QXv5X9O)ix+M3fLPONdhF6C5Nm|yUbb(7cy7bxzVsT1m1Pt8OX4A( z>Co#kWDfE4*f8h8*AUBgxO5uKg;-{;AMxHsi2k@Xy4dZ2=x3JeA$?favqs&$ZoKAQD?EI_p?M#E&@mC1E;5><>e8EK49_ zDA$#1ErW>S+Rih-3Q=da_N~~b5Vd`NUNP?_L?4W+mx;4c5JctaHg}cdA$lo_aa%6UQM^Je=bAl4MS%i8#V&~Q>-(yRhah@9 z!!)j=7^0lLwIX>kL|NI{z5c%jR_dm0R$jhHNUMT(UQA3Ir=tAT^Qzd<;3q&pl zl8nZWLbSWc*@3Ygq8-0>iiZ^-a&n5FYA@Aw$WqMfoCVRwftHWS`yhh#y97XpyUeU1T5Dnv&J{znI&zIgofkwaY5r&FRS+#(+HGXm3z0!cj(^#Ah!(e} z8()(4prcE?7%1&gGtkktNDm^7mVa^c;~-Mi8b3hz2$AyHl`nEWLp1Z4vcVhM(bqwGg%n_FJAm4B>mrsJ5nq5WY?NCf*^P*ALvksw{@EX7kOA znSKyfH_p*D{A$(p^Vzg!ogijS2?5)!LPmbFuX1YW8u(79J zzXQT-?T*oIEeJD%$BISkA-qRFIH+z0VY2Cz=MmDp2?^cbmcE8CZfIu3v~>{PaymOj z`!0l0g{mE=TObUV|DiKZhA`A;!ANB}gu!pGZY{eAVbEe7{T?a*eAvJ6y_X;i5a=HH zSqGt??e%6l6T%bOy3dEG5PDC_%(Kac(ChFbx%bi@J?cX*-h2n4`y#DV5!w*Cg#8qj zJ3+Wxq|RCF2I0<)=l8!~4WU!sZ1=|l5N?t0<5dSkXn#`f^9*Sp_~?1&t^tJBDD#F>;fPtF4r_O z`36D3tyeQsbs@<0_|WSs3qgj-;kMEw2<}e1P=1mLK`eLrle;YtM849zzseVatGAwK zST#d%(X;M;wR9d}u_OOk5CkWbJt~xV5P0_Vw~PKju)pEQz|yx6?9PmuEm#YIQ((e6 zg~Jfo?^jLYz#pZwF3X$({?O|!1u;6{cc*S% z(KiCVAgJ+8?K$w7`|BKK9)nM^vJkup1^=UtNhp6V_)Sxa^e*iOzvlD9_6P^?Uw@o` zZL$aa7bUaJhit*mPl*`YVF!LrNKm!TF!IYuXXcXbL8hB^Ec4P#d2k+!SS}-{RydymVuUs?m4s_-3 z5affmS2VaGu@SuOf|pihG2m_HjafTR2hWyUX}{APJPXb*=lAo#Tg|EQDR~6mGS2TX zMG1I%-0B<#4LmL0&lZg!@YDq5qwn8>rz9FN?0pa3w5}K4S1*D4ucs$3oCogDf!u+g z1K^Tmz^&H5ob+ENxMeF17tBfo_qmyC!EtkNpFqyqBnjN?t*aRU55P^^%MI3c z0XNZe`eK^~aASN+J3ATRMg*~fssnCdV&T-)j^Lio-tjSJ3Ao3fpU>D^ z0j_6_MnJ+ixcfh@bFvYGyPL&XdFTeXPJMsWzO;jD|LeZ&FbQ0nnbi}=!@)Jz-aodz z2V7(0i$C(lz%|@BS0+H3d$Eg=a*9WtXd~oIS6XF$k z;7ryU)Lv}_=LdQH$Wd2tzV&vls=5zO-#_uWh$L_%^8%~u%)#Lr-%vai3l7au!|P@; zI2}g}>gMeNrzPaI?)(aH8d4f#;>h4smF$=}`vjaFxKB>! zBsfaFj_TScz?rUGv+|BUI5HM5oX#eJJ>jJj@GcMRk(k*Tv8TZvcoq7wu?OrfuK!fO zIbidrvFxG;!Dg5=N6!rbn|Nq7aZVZ7tub1QujhjOwmd5M=sK`##Qu!(NU+P5sn#L4 z!7jF`E_i7Uc7ea{0{0ZKbF<`6t+po6Q zgMIDxpi_=L*q7=*_IY0d`|PmcoeVdyegBhRZ#M+Cx0~1C0VA+I;;iyM>w@hr+Q^H(P^k`l%%>WG~o8a$3h0OLH6a~rmF^?fMpFJv-PIds9ROSIz_p!+?7{k*y6wm!Az0(Yw2*x( z!TL7qXvVKqVD&jZZ%|=?C62y0m}LSM=WYF>dk$dHWTM?=Wx?vOZA%xO0jni6QDBk? zRzodq#dj~Ts{W*hE#ZSzX3b`PnhnTx`+*uf`4p_ES&1?P={(f=WBkZ*u!2&f7T@~>)){tf&2y>lDcwMiwMAeZ zJ^oB~)nc#?zVIr|*aFtR(Nv!xeXw>~Z`FDC7_2Q(R|HW~yj{Cd{u?QOy~g3d13qAx zdd+q`Bjv9wve6sQ2g_h|K=$i?uol_P8*rEU&W~$inbm`(!uZl284T9U|I$Bf>;p^g zTw`nCG%)`XPLVWdVE#}_6s*__<~I-X?=Pdl?0e=h`>79@;@>i>=Z=8M-KOvM#T-mp zR`U(36<~G@c2`fdf%(Dq#`tnAFdGx|Ej}#2TFs;3v9#%;8%m_5!=g+`2UMN_vD#aOwoKzmH1amR-%%Ft>m|EuJ z9p7(&sh0Yua&a)2N@L*#jjCWycZq&LJ`SeL8-+|4e=vT{Q+(jG0F3XKm2_@$#tfgtj9XMXmITKzQr0oB4U9zJ ze9PZTV8l@8J-vDnj7VDr-7^VbTrIrxfa(QCkm~WpMNBZxT%$buE(^xV{s!ykVla-n zt)MW^fpPGi#<`2dV7QoESC1+HV`t9E26;O$9F>S?f7}LR!_^AIgVKH04=(IB*#gE| zk10i$3&Ak@bnK$Z8!(pII68O)gP~hor2VrG3{BnGKhu@LP`%qPydeQYNxrr1vL6`J zf|u5EvOxbgB=@>B67-29Uax*=f<8jGswg=H`rx+Iw=5UXKQ{(YFUo)}uy{Wh;R-sl zID6(4PteH*qsAjTptn6}J-F`{=*=41@rDmUufOxHIlve6N(Fm4g8|TAMyPGwr3QM@ zAD@)IZ=mO0GVLA@0sX;91Of@5rv>cF_9+5AvH!m8dk4^CPn+=t%uXcD=3AC1> zpYQo+L2C>#_!VRTTFo@_+OTlYUMK$z{FMw^@#2D-p1q(Il#pg@ZU*h4ZSW!WLC`YW zb1U3lgO+k=%lw&Epv4dQhpi3-?dG*PgDozgg)6W1>g)zBB$v){G6XGf%})>WMWCH- zPM0J%f_7qm-^TcHnwot}7d~ed;P3uGoOKqiAKHiaTgq(2}-57c@JX zXxrU;psn{0nHE|P+FIG97Pj==D9bS6sWkUeQ`) zb%6SMUGB=mfuO$N=wF;o0JR|0;N9w0P#-QTSnw_a)XcX97h8KkO*y`VX*U7t9Yuo; z%RYd5v-nYI)H+bZ_vS2dJ_2gUgyy3=R-gvvs2kWw`2m~n6njnq^~B&!o8f*?k0ei0 z#v?&JXf<}$p9Jc@E_q(>gC89 zFD+26`8kvxi2~)af#zE315nNh{0UWOK=I48-K{(T$}yKay-X?2Q|0hYm0zIjZ-23( zE)JAEu_1K!Cs4L;X}NW(4ipFZWIJCkP|(Di z1Z7F%zjYeYeRLz5=QZYoqPc0tAN~SR)a2WH{Q-*7hdFHjd7w;>C6jsgL7B2smDE51 z`L_y%p-upKls;F?-3RiQOyZbYHpsnRvz6+zKo%Q(T*=-DGG|bJ&xs6>X|D*^ju(R5 z8T_-9;SF-@hSI*OParqV=v}7N3vw+vJAhIN@|!G5%}fiBOOM@BdVK`sBIBClotr>@ z{Ok1lgLIG|H0P{5pagPS(ysK@NsyBch0T1H3v%3Yqo~O*AV>W;DAzOw^0nsavA+sH zzMO12@38{N=a2A;>U2Q%H<`Z4Q2_FBnUXGt{UCc18L{P|AiF=jW^r!^$a~K}?(e07 zyknDN-V1qr-A48wc|G+SNZFcYwS$f%IwB2as2J59hB40NKzo@kT}) z$a+e}r-NA_Ye}{pXiEfHz3RlyJHJ3yPMqraPMUkhiG^Ezxgg8hmODqfgY;LU{jgFj zNaJ69&d)dn(zg#Gw}XCw)c;8Ng{vt@U03y~1$rRyT`Q)ZY6gjE(rTW)03@=~fpeQw zL2B#seRZ%2q~_*{iO*6T;jzLNp#?})*HiCr9|x)I@WUS~PJ;Bp#%TYQyC4-Tv}myL z0V(%)Y*y_K$29TDpU#eCs zfu#E`f5rv{kTgp)<=4FhNi9=pdY%qQv!lc2Twe;3!nw1H+WSD7dPry%e+0xoPMy2! z!$2Ijvl|eIEeg(v`+m)FmeIUNLuBDj&55$5Cf5MgD zf%x#G$KU=9AZ8u14mUpoV(OkO#Zd~rX+!QOxfQ~Fa)CKjE!>l|A6Q&d#|I70OFoW-yHuH zAa0+i3%a%qM2E42eN**7v>O&${CEW7`Y)w=hshwW9r&keQ3>LzzIMe3XAlj0H5F{7 zetO;Av;1#>D7_8Mo3#u?jnBUgwWWQ{>E49gTOca-%sP~61EO5--tgZA==@7HbuWlO z=Pz%o{cSan#x-Van zxVIl&>`->ypzR}P8KXO1+ipMuU-k?^$5^UztdtHI?08=ZyM2KV}ZL1$XAsOFt>=!_ZIyy}z% zI)mhFR|sc&g==v=^d^-&22_qWikWid|RemA{O z`Qb0q#w`*kwJJ!MzlG|IknexTpJkquwWiYq|EyhlUJrO>Ujq zaZ?*ybRW)>69HF8RbL_FAh@c&%9(=W;L1G{)v_1`S8VOCM*;TW&JXCjk*I)<>32;V z!uO)%+t$>dP6O!p81Kzo(}IrP39C$|7&a-{Qjp=vc5O zrh8No?K80^xh~mg|305L;PD-__g|~JD$PLq^I@k823Bb2o{)Amy@+<&6Q=*JRQkf%1(Z?Z%#ON^yMttHI|KtTJA&piU&TuwSs7u zSh2X^j~v<;W~GKIMx*Von)=OkHfS3!t@4n|MBCt&9p2w`(AGzoQCX|e_GsV!if#UA zYwhm*P&1dWJ$YDO${cM)BVA{YbI_J?!=&D~3~liOY`MTsXuF@VGsHarZMRfv1@?rY z&88*N+DZ2ol2`K;f}eA=yo zHpNGpRn3}cTjm^-6Pk`T5x&XH9VgMo`_QVeI~<(bC>*l z9Go7>F7ri#;BcyyQW3(F{jbMbX%)7CBEoDLZF+Cc-ya>Kg4$_e0@ymFNv=Yq2{u$(X5 z5u8mrV?VXdfTPy0`Ge99jzYBaEKdM9OARum^b5fen0UF(Rt@Ywxr;BJTnhHM)vh8# zW3UHBu1+of19o3arfI`meB}A4`hX?ajP<`&X|iC~4z0Z^N<63<8$9I_eWqWr-WBpz5`qKbjpx|1=vf}@>MxHV9y(`xMp!3 ztm*oO$E^8aee-Y8mH7)+|6x{$dbIha~tm**9?2>q} z3N1)^?NhMQm22Ji%<05Vl^RsIffd}5tuVhIEZ?+*1>17Ka&r&-eY6KG=l$3InpuH$ zVwHpNMm@01rVp$93U2WIe-;F_pgVEQ&5=4=uH z(=Bi5r-s*HI>+`dQI-YsgkQXoTRoUZT#triKL*q2)RNbAE5Ot@>)1*i1asr=yE&o4 zU@C9kD!)GlOj)&W8KXDAT%wSn?OFxqdsJg=d^Y>yvvSaYGqsWhLMQh}|9gnwdMr(jv;l_F;wBFn-nJ#w`t(Q%GWlyg{tHXtX ztdO;6wF=s&oA3~=hjI%00&UT{n;{%*J?Ep_f5A{pAFb>7IUiwB*(v~53H&i~|L*e^kgy^8LgJ_EE^*jzfW4p6t}NP_-vW$$JAM$mtrm?^&T0QBJ$ zxvAO-(BHn=Zu+VW^d4E8st>iGx7m8CbZCLz{4hEICR^3Th`?GeI{$ zzv1Lneb9|-Ho45(1^SNpx&b$`LDxR2SNPN(bk%I#cZ=tE^1n8(SSJYjQlpJ78)iUX zn5@o{-UHg-Z>!h79|mn=w{&{g3}{11LaP*PL3{K4Pf4^IXx&Dm#>3X2anfIoDUO2H zG{el^^#ZgCi_){ZRYA)uOVC#72JPWuACd24pvAb@|9UWo59%=ZqOJp)ug2<;6c^Ck zLV2dgCqQ%l`bJWNA2d7Dn(anbpqW=jTs2w%+CG`HmFmi%?YOm-Z!8Nm?LlF?WKYo4 z4!&lqFhNtOF4Rvv44TBs>&>HcQ82{dkYW?a-*1vV-akQx*jdUqwt;kKt&P^-2hx1I zT$;52B;Q`UMk)p*c30UI&37QTlr(k=4T79sl(C*l2RZs<>1Me-Ab54>*r8Amb=F9v zQ5A?}rP+YMLlB;%H&GW9W zI^-wBLeGR44~nO%9HyP z88kFHCj8T1ga!)5IxL|O4bfj@Hq~pO!FOHvWY#$}ob$NfZN421N1L~E+J2#7=fcq! z0zPQaut?+;%147#Hg@+?(ZKujW4iMh)PFVdlcEiy{zZy>?t7rV^+%N{OC9y4Ci^7Z z7N9;k=f(J7H0tm1ISj94px)JfbY|5I>TT(+Yldr3Z>%_e&hrrJwSz9QJ4;Zn@NE#o ziKt&>Y5jy7in?F)4xej^sQa)^*I+OJb=;JU)$+xts})%wD|;DrS+|@t->*Pj_yoiH zLNMxXo|jK=No zGv$feFK<`b)%`rGnCburW`cvM&XQ9$h?(YAJ@5!C!Dd@*Bv7d0RD z4eZgTqlP;?Lg^kuO>M|`rLD!N$zK1h(Rm+gBA$J@Xd8tZFQ1RP(sihDQt6dTibKtj zZr1XT%TcrAPPx{2G-}j0COfbhsFCdVr8+!74R69pNzP_ee?7P@_D3$NU(T1%?5Cre z(LD72K`pAOH|vU*UqN+>?!B0k1l564hhtnsQSDYQQ4AhbpY(b5{sjfqCc9(S>FJ<) zi_n2M`*WyX{ftlQ&;e90POm8AS4Gv#rBi2plTbCdLr9zU7*$V2%VgVLqN=IiTs|oo zRr$5!dK)xR6&D$DDa;pDch0YBD!YNIi-wiTDaNR>QZ&dv*n=uVzD`5d7F2B*F#j|E zB&y`ty<8zdR4pvFsCwRj%Ac{1>n=#3^1ZK7FLOI8x#t>02IWv$YpHJ6NkL`y-ncgJ zMW~G2^7r8QCRBQB*pF)RqtbaLEqi@ADvvIc^O)8`KD`3j%(iY__!RP4X&~ zeHkd~avw$6bJ>uWQY9#BJ?i-PmITU5BX(>nF-F+~u2@X=A(RCz`Y_*q24(IhMUexp zD62w9HY8Yi=#TPo4{|5E%%!&ykB~ZT@Ki1ak z0kt>DJ9Od7x2MD7C+PmpyX|rFsr0D-ByvD!xy zUuKRXiv>fs2kKF@Zi}k>jx8t>xM2T4$q0q-vm$>bO`@>wUEST3)hLWv(Pya9i$a$( z6I=J`qtLKu-sy=L6e>)K5RI=Wm@*bUG~S7VCnXPib#OgPgWPLxmvS{WBiA%vF?s0( za@9RG9^BuB+<7J%kHbDA=k4k>dMk{OQ}b8i+4kSaiF)-n`^y#NTxfoqw?-2=hB-BF z=jN5OA~Ja2PFrM8-#YSnH5=L8S0!qr3z1#y+|?Ah6WM`hZvQ7MgX~kMHBM{K;kG$+ z@xF9Hw&VrpXTtv>>$}JASDmxSYV!}2k}E}4R>GpYQ!&W$DZZz4S^`;??CBXRWn^s} zbmV&zf-K>M?K{3#BXe-Qa!G^}GHF&`W{rW!Ob+CzUf+dG_j(a6auAt^#`a%{lR&1L z`mGOB_Q>RSF1|PP1Q~A%x=%VOA){t&{KC~PWJGThC=?b#hD)%Ng4P>k?0qH2_`Cuc zt2WA}slG+}?-22#sm(}#Hq86YLIdg4{ljMvg!KE=HldoENI$zg{c~e9(h+oJ@^CBC zWoGoY&fT4~p?4Ffw|zibYPUmmg(T9Bbg{1P@kW}!(`B*aPw}wvjg3NGE*`p$g^Q+y z;Gv38nN#v>q`qFqRIV66YLr#mfzO|ix;M0`Z}U5({AOo%Wf&r*Y>}tBvNcj1Ew+!c z%8(*U`6=bM4G*61B~y+Y;K9AK8`Jis;=#5@wX+uQkUVa%f#IWrsV2#I(`ry)Uopx#U7DB|C@PX1hGcT zS2wIZkC?wEYcyUrBc{S%il6cUG3OXl24Pk=JzBJw_;`&%0e zMD9#33^{)W5#Ky=pgw>I8)na@DlWp?l=^3`FGTp}xSp`fatOEkZAd#X6-&gdfeJ+=|tC|3_ZEIVJ~$HtxFPen5;ns7(1 z(?__~C!-Bn^0Qs>3Tjy@EUC>yUm*7Tf|2`A^ZR zan-Tmz2f23aNT>v_s)U&xT3u9tyjfuToP*LQ4$)%g^qkyNLUEYg*;oL{&^jo4&V*H zp3;pU$MH4tva4K_U``o*#5Twyb(~>3$Va8ckeMCfH5%U#)R59N;BJCwXi(?{Xog zDz$nQvj35zX|AxcpCndNg*(Egyvd0$$1SFBK9EzqPb8iQbdodrrT1x_eB|u)Lq6B5 zmk_72;?ZC19_$bk|iMThtx#>1}m3X}Tex^dZlwAAuA>W z9;d_hBmQsyHXKdVA^{g(^5klTlYpu0vuX+Z$-RJ+LvNXxBv4!^gxMTQ0v}QizP;T{ zf;6<(tBLTCpqkS4IcGqE_sAYL_ZKC>kFSSoU$Q3mZCghTSKlS~hk4Egr7MvT56$_1 zhpb2_?>>6=%t8_xb}YrGSC53rn8ycs*^{uGou!OX9umG$en?wsHwkYXLAP2Hi7?Kq z&i?N;iRd|YATRteiCjO!^KFt#B0Xp$tHTsXWW%k2?+f>mDBjKAjyjE#sJ(*%M~eJN zRA|`x;a(jQ^>nSX%s?iImToQm_$Ur~^Ii^K+%PIOb0NNnfi^SDqY61Q|q z``9r}5_kM^=fL~}BrY}W{gtE`68DkA7cc&V#H$SH9KG_I#9!p`D6GgK@#RZc4_-YY z@slztYlgx}g1$_`-ad1Za7SF4x6F$qu=sKhd;f@J*Oc_ax%`W>i zt40!EdfZAqw3Q?&?6Cdn_n9P}{=wn)n3wgjjZ8OxuBq>X}2iiOT zk`#;WK8DS{Bqb?L$ttFZq`aAWv*2JjNnO1^+hlZxq&miWsk51kWo0 z5~$zl10=oMM@CuW1xf#97p%5Wkz`2g^GqFUB^i2>w_}${k__t+fj=f)B*VKgVZ#q) zlJW5VI;}--Ne0cF`!8OCWPFryONtpHnf$L-^YD+6Or^vZT7%6b)96UN*0vy$d2XT2 zEPo)$ykD;tzulc=7CFt%d=Vv?U1G1-3hI%}?=^I_q|qCP=chCNu9#DwC|E zQ4dFFZM~W5%~ZSbF~FT<55{!&apOpiz|5w! zfR`jk%{Fbr+}`BuZ&(t3_y@^xkqoZ2r;?m7mqjIW_b#WTImY#64#{~evW9mTjpU45 zHlC2XMRLU-+6J5}Cb`-l=G{~?A-NVSD!17bklbt57utBXlH7zS4MpkwB)7Kp$G-G& zlKb)pT|Z@v% zieWmT&^z|*5YQ%+k9}sb32R9n|0l4n1Ib?-fA`}f3zC2E#%I3$ zPf7kIE3ZLRX$#|7aR1&^EZf zZT&4$aCE`4<{h4-z@6D5LR&=&;_kSqRbC(k)p~2im)Dbm-qBIk&kdwtGNsBG4y16I zaX{SPCQ_(7c7nPtm=s#YZjXPWLke%|DD4~UB!$V3CE6}clEMaOVaapHN#UzMLYlqC zr0`FuxOi1PDUx5dk|E$jingb3*~MK$itN@{gz^oMBHwJU%pzA(l(sTIfU}zvk;HeK zjx~^?_abs-mQJLY$LG{^JA)Lj94=i?Fmfs_j#|dr7gM6m!{1J zZKEBnnH0BlMHGStEWh5uEKK1@Qb9BwMA&>izHGyc!2+NY&W6uuk+J9HA$#T zH!V1*l}o6Kdg12!DTJ!6zZ|zd66$XK05$Wyiw2>7e5OEG z5+T$d=0P@Y(<>QmB> z^0c#)3*W_~{GnU-3tKV1T!&-OV~%ptSanwYHI$3!Pd*9$qP#mjPhGtP&`jZ9se~qBR#`J|*&N@^$|3Y+`qk(pc9FT=l0Rr2b@sRFrM$vazh30u}CSL zhKl!lCChg2K*iv+rGD^MR7^gJxz)H6l`<~G{~Vs8Qtjs-S-D-P)XTEfULb|ajTXtv z?3GdJ@UC65`UEQX$LRA9e?sLkg^Opmy+q}yr=1Iruu*w+%cj)Y1*p8+n)iLjRa6#- z%(hf8LS@xdc<@3uR5Fq~&N*kI@~x^%9CaQlKNiuwPE?`t*E*XO`<{a^i`eig_9F<3 zEUg2Z4}hTEMD6jL0KwRH*OvAFK-hxzYa5h6aI*@jib??CaP18CpfLy$M%mO{4G_*h zH7&ei55g_Y)?+0FAUwDouOua2znHz^Nv&(=M8k?8W4u6 zhey{>fiR`{bY|Z?5M?eOn`n*#QEg!DyYW#F^&EfQ-^T>e;wgFi2n|GsIk(k6tDl^uLqyfJktMNDWl)u^ zwYfP+jDO-5qTrK(s_OGuW+`GE;~Cp-{5PuJy!~gIa|cy@(`Irp0jT<^6D3HFN42B_ zA*zjpYQ>P>(}z7!z5K@J2rU&<8$7+qUZRX@8%C$J%K=n7_ZY3IA4j$KpX;WFU!eN9 z+^1Exk5L`JV%tB@&!|o|EvbK+fa;v>3ceebpt{68zW>i+RM#9H@*ML*H8a%rg+3S6 zZ=>H1=0>6V;~BRF+YX}o=ecI(RS!@jd10@VofK*mFSP%6w;VOg69ew*+(M1P*`MY^ zRj9E!b%ivnfg0xsjrA)TsPPV}zL@^|D6orlC8Bbt$NIqK2y)oI>q^ET`%dQK&r@ zqHj4+j@nb3a?_uZ52n?L!Z&VSRfeEllaMGoHD`)mj560_>Q1uR0{ExUme`wUT+ zH>}=zAsThhGu&2uo`bpuiyNModQr!D&xt(v9(8RAvXP-WsO#5o^CUK+Zmcd>$2<)6 zv)u<;eR;T?eL%g8g8>X$y@e-{m_TGy3i z2cW@phrmYq8XC6NMAVhNN5h_#s!LLjqTz5F&A-F}4dIhf=~EtPNbp-(eDxt3Zm>EE zoVC$#Pe1G8&S5l^r0jFNG=hfeud3r?ThYL9>Q2sQqM@a@boQn5Xy}zV9q=#;4Ws*= zO2^C5F#TfryQFn!TrhKT&}9UTOZK+)xi+Iwuc)4SQyz`x-ydF+xPiv)*2yL>%+ct6 z^%UcdCK~-j!PZsYXpB_yy)V~<#`6a}dkO;3n3C%u8+HJVx$pOBL%LhA!3(>@I{cd~Z0Ge6?9n@mp zpy|V@!uI?)G>u%FnJ5{6rhj(>=0C^=WDB|HPc8z~$~LrJ;HbA*`WK9tr5S^dia4!ky4A0l$-Uo)fwoaLR1}5x>Yg*$$nx)KN+x7q? z85x~Oe?5>C{+@d(;|!9@*Z*3C(jaMeS$uyH3erkJj^wlBAgyhfl4gkWCQp6;P3;89 z@(z8#Wi?1!F05rVJrRGpp?B{((m~qoA$j0O97y}DBNS>xAo=KY*XQs-3Xpa4%=Q5( zWR%`d$OI|!t!2oNnD=yT#RuCqkk04oJCzTClytWEiA^3zDLyO42Y!H*X;rlGWj{!{ zOLR_T#DG-r=Sg-(AxI@}*AmMEL3&wEpnd58srrT$)Aln+O#!Ti%3C1Ot=%7O5%cmE z_nrR=kX{X)bg8xjsf{v6AvYYP?mM}RJVTH^2OEbq+y?3ECf?lf43K^;2+VRZ25GWO zQk5D7^31Y_DSKT(o_lulm_!@M@{WDGx!*xnR=%27Q4X?3@4Buk8IV^zZ(aCS9M{Aq zS}Nv&Y-GFEJwybuh4g<%dY*u6BS`j()&ki+!)l+l5y-ndN3Fho19|U~V&&E?ARp-R z>3c8EAAYD(^p_6u(ZemCmg69YFHie-hXV4+Zr7{@h9Jl1EnHC`#$P<}w#cmyB~X>-#-Pm1=iYo?2FhHADw!N6C~~6(@kJLwQOdg2 z&3O%qhIOL(d~sg8H|oN1Pf+xdf-rCk6hl4lkqZH!nDIOonKgrAeSG(tx$i*PHh-td zZ}GmUizk&of?jHx`+elh+v^6MWCn**|Vt-SAezwPQ zK$SeJ8&-4<)Vb5XzlOzY`SV#P_EdtZJmXczTL(}z&dXV!j09Et->!5+Yf$yh+-#d$ z0II>bNb#Q-XBM@{R{j8}R>KDlS>FeBYhXdtwX2{yb`G5$l?T<;!#wKb22l6$t{hrC z0jkgDw>Ga2g6dzjTJgC!hUlJoS18U$+-pv&HV5_8d|j*0OF>OId!fTP8`Mifo#DA+ zo#ca-zqCR?O=I0VPUC@^Wir)vkp^mB{vmT;Ur-;-qhH^b32JGyzA#jbD}R4S`hFLv zHCrW&21h|{dK%{HQ3@(uuH#6@Pf)qh&OwR8pfolS(#QptN&edGn59+_@B@M-|K$|6euxr-=&}8(qo8``d zrf~7;_OA}0DZe)=A9xDdQsYKBiE_|ZTzBv_bq7tatF<606Es7Upm)EbKr>64n0amt zG^_R$%~h(PZPj0~?#nyS9OD}dxdx!^=6S4Q>4COS?Yn#r8#M2usl&?Cp!pHkHw3>2 zEqF$ALc5svgwsirz%bBaGSxcdG(n5+pqy%n1nr_usB~2TXxBoOuMz%$mRe5xCt43$ z=2&!)^dxAx8+9mN;h+`7x5@KkKzq`Z;&yN?Xl2vel4gtRiPrzhc;2AZpRHxT=m(8l zAJh6$5j5uS4exlJpb3n}_)=RzYYD3*csYXB{v;tq@B_5&o^4(}W}tmmU7#^f1+-z8 zccNF>p#8Y~D7Lx*v_Eyx3bpZ|O@G~**V+!c)N*A_#rL4gx(%iWp9Nj2Yy$Iga7k)YGO z4n8k^2|6b{G%fBb=%U1PM+3!uzD>_C3KQ$SFL?Sby&Loo<{N%#TAss6{OlbgXv=ooD$I)ZWOmCd@zV_;mTr^NWI1LIb8*UOGeVB9G& z>O6e`jNI&`X(JUd3a)l7ly(E-Nvyf*A3ZS2{BJLk7V8mqk4P9bf>F20xhL*87^Iai z2%Sw}Fys}__!7Y2{*E>Iy912ou8yASSTI@{_K7L>V04t0FG{QeqxY6ZP8u7Gfv6h` zn@)i7&3)>;bUhfq%)+{kKL%q`xz}*S1k4%Z`(so0fhqN-`K6OKn6i~l@3oV_R7_<~ zs-%Lc5@J7J<?5+Zc+Tr@&mHxno|T7nr)^+_8DxV6GRswxmpgx#3aU z9##f(v&%OvrV5zbwd47XRbcKMlMNAl1JjLp|L+VTn4VdNiMzId=@Z2GUF8F&zp0Pk zCRs3pCC5pf!C;1qZY$hB4CcvP1NT!u!8{Wvyb-Yy%tV6|RhK8gyz*z^>*`}*-XPWV z&5i>zJ<0d;30*L=cFpM+j{!4Jp^|wo0L;QShl&pV0J9`ZF4|%lm@oE|%#8ZLB&tOY zJGg*Z*S_jbytsc-R;Lkf2AB+wI}~#}FnJ4Ix02U@*({u27x)~^)@wZN)h%Fl*xfiM zoeAcLDQCgVaWMM{3+2_s{9l9Hwz;H%`E%LBGLf)=G9- z{x}SlQCa=lbCF<~d*1V3tqYd5M10?HJXm%mhdhM=U^(pG2L2zgoX6Ix4rqh5_nuPF zvQe-O*hmzgJP4L=&)4=(fnWt(?39RB04rpLP<`nEuujk@t3KL-72{XEip2pdUZPBm z^$o1Vyy6)jUxJmi@nO5BB3L)xwbQIlU6HOg=UXD z20g)g!Y}=xU_c3@2{`#rC?6l{rN4VFhE*wXsjPHTmNE&DQDV;&J~MdKWTTprlUM3%Lo zHrN`b$Enqba|uu2_Q|XYAnlbPVis1^0%Bc7lCbek8_mGuYP?>_=%W zV5fe0aL8*m*qQEsC~~b}=a4*8|dfk%Q>c7Ay-Bg?=0BriVgyCSZK6m$!V3P^hqH?bSJu&ZFdBHJLWw8GX z-=gjP5A1GUwW#1S*q?OQM@SZdJ$R{PR$>6yBV8+!)!AT=nHS7@#Q=LUZF$6FZ*XSx z7c}2_2#%D^$`yrY!I8-*4d(p;M}EMlXyHO|ls46iPO`vJPqqK{YbiL(x?5(ZserT6 z&~J{z3vkw)|0%Kb6F3IKE5q`2;FxNt^E6k3V|lD1&(R7TTcVR++AuiVra!5VZ34&1 z;Q}*OADrFk%L5k?!EtXRj|)D7b8wk|{G)Pk4h7EnnY{#@fTu5fOICst{B>XB8v!^c z3}?z|DuHt{vTV<#DRAN{y^^I9!8!LsmiYJyIF}8ZULOeo=X!W#-$p(-sn1sTuWtq? z<8yb{=5TOwv~t+t&%k-$DWID9JbUMvhsi62+SPx{9V9#9i(!F9|+F7%z?LiRKe+> zHmdvz1Lwm?x--ECoc<-pVp9jf8Q#9-_Ej}-zDH;j`uapdPz}+K!We{i#uII-VtLiXty(ivT>xglF3px#7kik8={F91DE4asv zzkOG`32x-p$)<_-;KsVoO&EU#ZoI#$k-{->6C?HBZO;bx$~o(ZoB(i>llT0a+Yaun zJ0WK?#eOpLFO68Iftyp3?;+U%?t}8ivX4A)i)!9a^tppu()7<_Iv(6I+VW5{M{p}y z_G!uG;MQ=DmrPZH+sMB|ynYZ|ihxWo$px1w`1)uv5nP@?<9e4AxXnE0BV8-NealW< zJ1N%tk4_xgAf974Y3P2kxSx;pI-CFYf%}Ev+jes)xZj@T`kVg*_h(`I2Zf2y z`;-jszf|w4{;l9iUMyH3l?&dSn10XA>EO*jW{{b!2cF`AIL3TW@RS`H19@w}Te5NS z45tU+EngilZ*duTD;HNwO?iX2X6C%H>F40BA3oHsnGK#vYt2h9alHju@icJ{c-AFh zrfZggXLpPHu`wCE9kFY!hNgnI%j@P+b1U%NY)6Whoda**3J-0aqu_Z-HKyASf_JEY z<#@XBHtHusvqtK6}hL5c#eM!93N1R1=BPa$Q#FTo>MPAzEP3?Acr z%8`h0@VGm*N_1?%6Diev_$97y>2{U-Py=4ulfm^v;yHDmNU~Eb1+Ujk$H6@Vyw6kg zEksrDhR8wd#qT`c=w+D&90~Bow!iE-7X;qqT+d?H5b&lsGY{F$2Y=SJGFc~Q@aOJ0 zSQ@n+`~^}nR@E=TSEMvhRoLJwC!Dana~=F87COZSz2GnV-ZA@g2lzUrclOoCfv@N1 znp;{4{(7|qEj41Cv5-IgVJ7(Imr|FmRsrA2+-?1J0r;B-l}+YpfN!7Mx#qDP_)fcu zm3;EScljIf)3^ovz0a)aI)&ixKQRBAi6ZzuQk}NGOTj-<@$$=KA^1Vwm#@kwfgdXE zrE)_8{1Y!ta&^UeCq3m9dkNs5{x=w3cLw}~B6i#JKJYI(Jk@RN2R~`}M(CFm@Ne8Y zQD`jok!Iw<%NFA^Ut13>F$F&-YW44Wckmx5E}D#841VFunWHXI;6K^p0JcvMFOpZc+W^TAN?S!ZfQDrE5a@-?pC ztH5tAs$~p_>)x6*uA52(znx9FuI~zd*8%psQ(|22m)EL2Z@}+A-6?*^f;n~zy5?GHv|IjqUXOYwm@)1WmrV5h9L09`rKd+1i}BJ4z4>3 zL3nuW`~_SHqPk~P$Pgho<>Kh5BlZ*DnEB>l3+jh_3Mrg6lIc>6VCj zQbJo3-FzTOf2+?^7U%C;Uz+>pHU#$`b!_~t1VO&6x$nYF5EMmZ#yCzx@Z`PVEX+;LwPEMv-B_2`22xz z&KcQa-8m4-va+tp5g}AqywYc(1cZwZRjoAo454c2_MY%a2sM8Gm&&>ap_WyIp|v-J zD=*KXi>MIlaSL{xV?(%J!HVS+2BES0f2PLe5SnGj-8D~x(DJ?d;DLn@+G@Zk%Mik? zKK`NKzd^VoPbMdLCxkoS6YBmsLg=dID=7O2q5D4BH}T6L+@D@A448z_n;+T`8VlhO zY0cc!s}Kg-w1f+7APkO8HeHheVOW{nx1wthM)v;8-KYv-tV+G*kTZm5cAgg0FNg5l zxs7`ti+x;tImIt~2w_qW+2XZW_l81J_M&_UZ`ryGMqYt1BTUU;coBqIIiHSQ+5}-P zgOF)14PpN1CBmF=2p_3?(0_@2lx)@GOlv^+Jah(C=Lm%5>F>&p+CfOHskp(UL0H?7 z;$!y(!X}AOt@lqMq^xjiPnUs^VZZjW|2zmeK?>S#k02CW86$Xqfbi9$PV>u65Wb}{ zUvMlTZ11jATeBC!&Z+#^5?Kg)l~Y-EhavoIm?$&h1>vA$^cMaogx`)F3vF5r;g8dY zu5rZYIG(yc`{!{8CyVyp-&Iv>f@q%9i)Qsnh-BvzbPCr&v|y1%R1Fa#c{Q7QuWJw~YBHu$N+DXbLTKiq36YYn zXUP2z5UH#^k{$OGBJtEnpFAL1V*ID4TMDA3rdOtpN<*~FJX1blA4FOkS1i>UhiHYR ziH`dxh*nzCS1PZBXtibQvOoevdX~Y9wx&U(zcE4LWg|rEEEM}oEg&*5Tg^5R^B9?+ z&}sSq00030{}h*ZJXil0$B8r~BqJjY83`3-MT=08h>FHnr9wtF4I`0JL`FtQMkJ$9 z5yu`0_uls>E0hqWjD#rqo!?*2$LI68_kGTJo!2>UfKu7g=00{CsO^eQI#T*Tscj5d z`sFZC8q!jY+p~b$v3A!@!6QIvi*>8{8v(UTaCYEYG*EkZ?}shg1eDI=*PA2-fZE4? zyr$+LPwS+jCL9ewh2=_5S%c%s?aRv(}&!+ne5*8p|WUtz)b+rr_?CxL#)KwdI z%QTF8-SmZqE&lGSb$LY@FHru{x&05n02RRNn8(Kr)XnKUx8?po1$}f@PS67?xVB)p z$P%c~XP!x?G5+nSQvFz0pu)ZUf1Gp&>h7tA(ENI!qW0chf6or6Xqk?}g(rZD<$k=2 zGYP1;kssBO3P8ovulM9&yu^Zq#mBUPdJs+IBe3pdkF_yJLx4&-IyRe~2~?`u?qd-` zK&6YU$YUo!WlUSMvws3AvsLXtgeFi=3&O&)2Z4GPY1MSJ7pPpvSDbfI@BD+|+m6)$ z^+I;=bWR>ng`DL#BEJGv^hxy5!plItDxQ4BwI8VB=)?8VPC&hJRAipxIc54`t*4#= zRle4a#8m@TG1K_gN*1UpI=lE~H&8X1%Tp6S16AiUev1$L(O_<7&Hn+Y#!VWUkKO^* z#GcGu&I43)YvB7!$v{zABXJowfMTwO~+cVlLV@x zAz-mo1W+I1$5RW@m)&-sG+3zf#~p{>`V|A!yKI+f=>?!Zf5>kQvI43K@oe<;C=Jx8*I;4N3{c~`R-Bz!?*yNv zVVW9HzdBpP=g|jKsZ8TQAyB^^jM*(O0X3^?wD~mZ^ygpGvGH1<=IWZRtUw?B3pa|X z_z!4ybK|G;sX%jxlj653Ky!X>tCA7|n(N7lnq>!oUTlA++`kd%rCYuh1|Qt`SY7k@qLxJ_N43Fc=h^!K2r2GA#}o-dOh2l|xbP>uZz(Eo`gdupSe zR<#{ciTL^K<;b_e_`bDRlkGxPpwHI?b1cWaE;`gir{@A~D|}<^yDvc7K}Ck&MWF33 z_(@mq0NQbR#lz^6Ksy!Q;QvJd?QB_d?QkB+-kr^ErBGDaM=a)3?^DiFB93v~Kw!Ti+~ zKxe%8t$(f(=u8944t0K@vwC)&O?UxxwsYEGSTfK#Tw&JSpMcK2Khd?y5$OC)T?Y#> z&*z|9^zkat1&23_#!dlU_&LF&ryA&&EkRF9o_j zZ1htY>i$-E@EZ^IwK3(tAL3y^H*K=`TFeG?bK(1s1E?>hO}9L32b!)kdNrg4G&yuI zp$z@PYHjpfkG^U>*=QuZ7wESBgA#FlKzG<0etE(Ix^tAu)WiAda%EY&ppUy}j*BV! z1O4&Zska`eM=#re%c0Fcf4=cUu;4Gy{akMOnc_eX-15V`ov$$k z`j_9mlGYDEPtMCNbYZhwXYIB&`VJ!hS?_4{q0 z=Rc}ieBKQV+cA@?=XHT$r$%BuV}ao?;Lcv90Ssq(X0iSzV7OH4D;L@Wvnc0cmGL|< zOQeF!Hhu(VX}tXNC|+Qe@fsxu-v)-~#?M>JPXe?2x3JAxZ(#WBO7~WN1%|(;U-)Ml zFan1|2l5JlSy@$(J;w)((6&?dZ6&}6rw7aKdI`)bVU;d5Hef`9tb$7uff1YL-AvyE zM&i5{?NSEJYSs_CR6StU?3MU;RuY)Cc`adi_<8;61p=Y?yHrSF)MNlK8>YVT{73*s z=FCGsS3FO)>HWy9B49SE-8PfQc=9PVg(op@g=Idx;)TE{y1hPQi}@+_xaRJ|e7Ee& zo6Nro%+?%-ZCNLPQ4!2`+;Rt)ZCCA5^mu^T{`qP1w;o{B^e;_{&jF+UEO%wM12CE^ zoE1081GB@uX!jD-Ppk8ap)2aSQ>((%K?j&!$+t|VQ13kpsDsN;uf6B)Yv;=Vqf^tj zv0ng~ebPC6X$OJP3!EAK)dr0Im)d$JADI37Rwih70&^g>?}EB1Foqn;n<`fUV`RlK z+_4pyLuF>E*W-XWEGBFI+!z=WkE;t@&44i_#u?R5fH6}{-}m?sFy_HmKk{K7NBdZp zxdVYYu9f{aS`-+IST4Wpf52Fd_Oh8O0drD+hi4GRJ(Vo-ZNEP-r>EV`5>kP&GCERx zWhF3YQVT?eSiqc}z30^52aNTh$x6q)z?@HQ=Ls4C=E97oiQ;!)Yz!qM&S?T;n;cLt z(+-T?gzb!14KVh)jMQJ+0+F9XI)aCN{geqg-MggfM30Om@rpUE@q>(xKMHmh?2 zb6sy}k*Pi~K2ayy{$Rg+drVTcRs!QM+h9FC3Cs=WiuDIPfC+e`-l=c^n81a~AxYTB zAj2G$1bqHhbY{EkLtuitrQP=C0TU`E#r*?)8)lo5D20BzotLuVTPZMirq*Td#C#$& zrKHzp0dv@MnbZ;_(Aq!lpH`;|L1wSkEVE8aG65t!KKiZF@Kz})9E z_|TsNO#ETf4eGVPB;4)3D6s{YM0zOo4*Kx{zia2631A)?`!AI+046z{Pg(sZFpruf z&H9IcdAu~&d9@-ise0u>1E_CWfJv+-_C3AaI$09uG~>@qO5_<}GF6v9h}sTJ*5%ZD z>y88S^l8bBo$r9j9x$~VMt|q5zGSrF0Wi5ox#ULJfyoPB^H1kFF!{A_n&pts=Q?7N zaGnZOJdQm`2By$9W~E{TFh$AR8V)uA^YXp9#|)nPddcrKDr&$KYl~LQodu@ka@olv zy}-Ol{rpqo88D@7w|sLNfPp2si}TUH<(lRpyN7|Pxa70&KkQ3olC1Y~^lMd<$&kSm zFx7wOjRnwGwVO8PUs468&Z2#p3C61r=K8Ph1uzXog*k80A8-2xrcO8l^Nuf8^(yYO zrX3B=8&T)xi&xXncLUQBmB-qW0t{7V{U-$9qlXg3orQoQD@?Z!)&axP4BbDBdA&cU zbL=|KMQhmg(+^$)(^jDVpJ662?H}AMLQwC{1zU~GJ%RZk>!g`?445t>rFC(*r@CDn zIe1aGo;am$0nG2?o6C9W*uPJoRIb&V1M``~Q^yni+9$2WStJfjzrKH&Kl*RL*5GpY z8eqPJ-d$abb3K@SyhaQAHT3SW^`04EzJ9l#Z~X+!F!$@bGa|rz-x#<$6ZQY0Pf~~6 zff+fUB2|d{a`eXd1Ag@9SaK!b?0aCwO9ieuWBi}(1AShGz)bv7-^+t@H_6MBxP=3l zDY-KvpK(u2?^V}ai@N_l5#c*J2+WMz#qxu)z|7vRnA!dcm_KQW^10~ezi+0G7NI}q z2)T9;=Y9U$=0qm}AZ%>Q3)gK1!Y*iEcjf_*1se^?mg7J;v~$|;oCm^b64B;W31p%5 zM9YLd5H8QQia!^DEDGK6>~21g#YyWTiwuA)$qBw}qYPvzTsFwE1H#?XDdzPH$g+=B zU)tUR;TctYTJ;mi@_A8PZG4|^Sq z?=Q^l$2#O&9T%Bh0BGAX{5X?yGDAqWtcyV}2(Pl?IEQrSE`jtFc>hj2FoE^1ttV9|KW+!yBv`07R|m z@y@G7K-BYIjvA{1(a184d(H(!^YJ;&6d52p68^NWi3Xx|Z>56*>ZTp~Y_1;l-05E* zIF5Pj@;bL9(*ekCN8g*H*snd-5`U^*0oiM@!%iBX*D?CQ64nBuyXWtA{C|P$+nyAe z$_YeI4u*Di1JM^htBQM`7%UI+UFQd6Kij5C8|=&eag%xN(?AaN&MH5u2Xc^EcP8pO z5W|YbPyx)_C~xxFTCDHT!{quhA0WoJ-*ta=1#=HqI&BeApfmsv7=G{|9hE3RQIx@`yh}o{{QOc z4j{W|QT|yVw=*iO@$YhS$5|!o3)UIFL*{E5))}!daqUD0viYtlB?9Db>>?ixoY%-x z^Qp?{zbI+<%Hmw)564al^St-s>vxymK%%|+r_(WR%+CM*p2vJ*IZw_OY9i}D{EXBA z5*OClHg0?32-$so%ZAP+6BY1fqiNnUkxv=aAjayxJQe$@FPS1)>=-ae^BjIt_=k#Jj zWg`bQbUxsmWj<_4;X4K->*&C5A`Rpz?==G{tmkQMbQA~f$Lwp0t(S3sJySLiu*Z3M zHq>u0-2x=%0h>3U7m!?&q{lCvf#h+O)P8@1EVk&&!~KwN?>)O<2axA$#Fu==K0jx) z1&pyDFK+Y-88Sc$wk=%IK8+m6TKp65jl$@b-|<_46zRJ6Qm9|iuLsrl&~Gmv>m?7K z0`ltcW%qiV^H=}G_o?E(f1Rz*yX^>&;$y$)3Oyht3)kKLfb&q2NAC^5`F?YP?PoEb zU&@uA;EVgNG_OyKV4uq@qB{!RfdEH?2Rfj&P)(qa7iTYH3(!C=Z3#2B%zi$=Z6ScCtw`8E6 zwT-@BRXDG84!cV1j{>RZ^P5UT{p+9W$X~*}+h7`WyaMZM_;tW94g2->Uc_S|yl)y+ z%*%u@ej`a@($FvOoUK1qlmTht%Ne?a_i0m(=hw6eAk7D=`t8wI%|qesRTqG?1a#GA z!~vn!WaWsWuc?xma8aBK+PuLgYaw!6RI3jA$Ao<6c0rwqls5AW_Z2B!5#@%yWtm+t ze2069^+St2e;<(d0a3Y9cY(Bu*_lgkLgrUZ6$t@p(@TnA9Y%Kjmh#2>sr@p^FTs9v zaBWr#KtFZF^StUZ0n({(X=^3!ug>xV>Dy6<4<^|HYM9@L{@Y#+xR1KrMmvT~fpl{b z<>)8KSk*w<5J-=VI7z^~dWvqWn!tJdsB3$?6Z`p*Fi}P`Kt5TO)S6&EpGG(Q>_Z>- zUgclKaTUnt#n;sGv5wF8Y!8p{0O^x#Klcjn$G)t(%lw#E|29?k8FeJcx;vmQ1N!lf z&UpV0(6`Sl#QeTkup4b?LiSE6v+$l7w7Dd}k2(*Iof+=Nc^`7`EK|k44*ew|l6aqe z^*1~ejeh>NNPl^JH8QlSP67AsFmJinp*_ebZK-*@H@*w)c&o*ZjC*6V1by&Bw3Pkq z95PWm>L8v!BC&gQHSWogr0T~F=&w=SEETr@jjT}n7G-p&F7HuT^^3OKgUJ- zyLOl(V;nSM(I-CzJR|*rkr5nyGxvc^EaOxBhdNCJCAr)~U4Jcjn*TBlc}?T%#YyD! z0nsPe*GZ=?UH5CquOl|hYaml+{DMkx?xs4UA8ua4sg!4Epl-&bG2C zeD8PR=$j{5KxX7`z4*EUnVgdPvJuFvpjP-woa@=(<1TFS$iGv@UikTs(@GgXydVF3 ze*Rko`||e)Q@I20y}z|CH%Ehj%&A82-HdZL_e6D;O&iF(h-KC(e&j8-Bl}g5(;KF% zGl2ZFes`}4_ufD9Oa7b}u-JAdmIQYqb82<9LV?9D=2Y(!f(%O3J=B4m&@ajH1lEF6 z?(zxekquJOLTSL_P&WO&W-~I0^T;b6U~zJ7%j(fUItsW_u&pPbA23U)<`dnAkBU6$h)B#wFx!Ti4xsbN^3b!UA zo9Hr5e_$=y9A19zH8QgKjj0y$*PVQdA6QGxT9Q9(Ll)f)cFhD9w-C!N@eOfRsOsiX|sL?I);zIb~VIhODCx(`@9hO=8#F<+jnsxNz;fwg?m@_XI+$TOW< zT)U8E(mkcCfyFEG%X`6oq|4sr?`x4wE0RrIOq28mw=nze&ZY1(KCFn$Zj_LFovg5sWYBF{WCDeG#muO=Ok;OK6qyc@aEM z$VSK|4)qp#O$zWJMu$^ zS~K=lY<=TLW&B>uZl{m*8RT;nkqkUf?04qVmw1l2cCwne7&1V(%s&;`z^AQs1y~Y1 z!7l?bKZ(Nu8&3%#@BNFZLcJu~{``G84y@IpUMDn;AWwJ{9$1V_nqKsc8`(2`MEEqY zBqcrX6E@^&?+)<^n9knhEtZel;y z@~3@#u^VZaJM5T)4AvMcwnJ9$8;!!bSvyY#XIa2nr`Fps=8JT8s&Vy3KK0ECL|?D# z=MR>_de@7uw=y?CnieSw+(3pj%%5I{tTDJ>*qJRh@9aF*L?~s zX}MIcMw}1n<24>1(YMmU7e4zLAzy{=%cqfpN~undfF&b%iGV~^(03~0I9z$zz^%%XjgmW%KyI)XJ5_1j?914yGjR1W|B(VkdrS>$BKa^FEquG z{~f7X_>A2Vd35T~$DK%zm){RqA!BC!b+LZ=!ZQBm2qbGk{J=xxc)di(9I!U=F27%v zjg)WY^?icWUwxgLMxGrU%*DO2$!F_+aUbOUxpZONLz@Z={yf4wHZ=?He=Ug|w2nHB z`$2(C<$Y8&QsgGT`EBH8^L-iUZw0+4Zb8^@g;Q6Oe*OP<*A^ISM24h(xPrb@csM&2 zg?mt;fc~d}bF0v>agh_&tI*A{L^&Ecc9QcZ`cIKVb;cTfsVEpV$ih9WDC5*ZFF>j_ z=bylH6b+t*xy2wYc&sE)S4Eoi2w-rD-g)&m(6<8r_anR-R0xC)v7 z>HRCzNwKW%nhyF!u~BLDDZCF9+k{^)!Z}p@>}RNj^Q8F0?gIzsIQWgPr6YCQhuCkdLFs8&r0e4pViF^CUL(j?L4r+ z0QaJjPPxG*%uC6jC^+dP(nz5y5%-&t$%g5Tf=IK6Qo3J}$L{YRLmibYSK7&9Ka@`L z1&rdnDxJC=r(^m*00030|4f&6JeKeK|E)Ca6fzr15-G|EsmLfQqSEkIsgRYeg+!th z8HtjNNJgQu4kJ5U*LmHDP*#+zGNRJ=`26vEJbr&YA2;`PUdM5~UdQVMSevXvQ{?iH z|1Ej`;LQKW|M&Bgw`29pktYNL$95u*Epu3Z4SD2&@i;Hi;<2p$SESk6nGMU4rizvE z5lEwgkc1ORy)vVXUdSDLIgI*{8kTue@yIQGHk;Cr3KQHj^GMlisiyz?EE&E-65pRr8QUd zOp&>tTi)0plP}2?RwARL-S&DQZ*F;Gk98^e?4J>>M%s;TGCzy7;3^NfB!(L+A?n=1Mid2NfaBzI6*`+zL-wh7chc00s8w_~^{m&!UFj*qPz>@zb zL2K|M+xthp;auhOHgU<1BX7?M&$J`Y?U6bpgwz#Yse`)8i`huNb^+GQj`1;(%2)zelJp{&QF64SaOq(_D6FeYbVA0k09ggJLcw)E~{fW zhLO8|?|YzxTz=?x2>@%|;HG4kC&)LUdva-H$hlsB^vk-VRbHRaSL@`Hxf`^BwRV;> zT>m+;reDYu`&t{VA2#5LJhPr-3C?Zp=1`Z?tH6?-cW!6%Mb@`yQdP+4qUcT5$WyC_ zB~d?FMIMcqKwzzzarb|Mb6Qh=vQoVld8=;T`hTCz3si)!BPG|^SQ-Iqb-z%E+$rR9 zzl@+7YEAwbxXi61n?b|Mi`y?ad{eZ!_ zN_Wp362(5G6J{2E<3S$x%HO*PDeiMz^AND4+J66eJ%POcFS@c5c`$IpN!&vzzL3{J ziNKPq6V%bZgbWld4M;}nB&u6V088Rm`t#Sg-x4oX#nS#D9d=w>hy6;dY51ff4lMDH z?dnY{k&)*@XK>!)#-1Ot|MzqDh0;^#hZV2IPS#;At+7?&i7vFhv^xh_B5!^iu?W(Q7 z67F1KE`JhvQ)j6J`de6~uRcBrSW7=Gx%|8c8S-+y5$ds2rK8aue=pP(ctHtsQ79;z z%S!{f$tv396R-r^f>*snodmC`rlw-wg6mGNmBTs(8kZ)h;rj*LcJsGjZV8A@`f{MZ z_)FJym!NO?PjzT>>mnEO-|xx=7GFl?m))*Nlex`m{=niL&-HkV@8ga5`l|jOQZ;GV z4s(O2rAsop2k9AWV1{$!5n(yRUjWvUf_owE=}3#_#E;nD;>kO?)KX+bQ?WVj$71F1 zvNM=NiyG-tt^lO{{roMM?~AxUq>OO`YhhBtU5zrNcAxuF%t7uC83%n)SMG~H);puG zxp@nJ{ls}MNad>JUVzkT4oZCpEUq?*-7RW1GcPceeF=>&iJB`4q*N< zlL}{ikhbsdH`)O+KeKk`T^jNx+acqvNU>uXCxw9d`%G<)O$VtKwOhFum_OBSH^zdI zhe(CiQ(%7gzWgP|i*#8g=U)TN+@I+KJ_H$Z)QwFZxm-JZ8GfEkOiF&;fK<5o>g!Tq ze&vr9Kg&SwXe*t*2h2>JZXu~cnr+C@-UrNdN7UnOtC6StgG=;*nff|vM+%WHo%)_v zfSH`xEB*|ho4lg=_52i)<9Y7u6kvV^C%D~zhU67g`Zo*AkGq_Gvk#EM-Vy#Gz)VCt zX~xtd#riw7jsP{k&Ykf$my45GLfEi7A_q47aDYaAjof$7*iZij=6h_h-QvSY5v_V{c3_4hb!6v%BL&KQ_U{7bTWDpC;z#5{L;kpT zzn4v$+Eg65LXGf_T)-gDKYPjnv((Zz=5T5^~XIh2z25H4^y0#IR0s8i- z1)GtEan2X9zJ6Hm=`@Jks^&SX0Zd;;jjK=>Qs%>%H}8Szy>EYTln=S+ih6DWFg=%r zR&e6nK98;a(U*y|DXKP80Ok`zB295lpY-jIc8CJgU2uKH&p@P{B=c}5FkLZfL9_{y zn^B3vxpsPtwGWvC^RfT7Pu+f`S*EahEHE8qdsDYox+@5*V2+i@LH#wApj_AT7?B zyf+4hDOnonfqgKtI^+e`MQ(lPaZ>??o)Fir@jzPE*<~yMhANs37st6!D>Jgh@!aOX z&gwL*uW2a!L*+T--pYQ*AYdA^yuYTPZyE)&hA!j+^Zugk=kiiu8khu%meNf%t=TnI~Rj=Q< zISqBK3JmC5K>_pbv;G}%tmEDGkS*!iz*I(?P&LbdsThwue-ZVnFg`k)iQg-K`Xtap z7MQX>_KOS&dxexv1fGIxC z_M`9@Fhx1^?m+CnXu;~+A8}s`k4)0#2Ee?{G!)p1`n~xlxknB4cyrLzv(^Tf*G~-+ z2TuZ1F!|`+{pU!1&mIcrpC8ryD-Lzd8^~Dn!x6c4!O{;iz`VNNBVvMk{gUViA3#69 zTq(J@*A19lN8dRPEnspAt@?5-klaPp-?9E|vxKLwF9MVGh|O0JbLYiSztIf#`$EM? z*b(*1yrR_VY7flw>ZnLg+`H!jSBzv)=ZwPxznHbaq(5#>5$5vN#YKnk)6gL%oEE<@Ej?ua+Wk_+m z1xnk2i9dQq(~%39hcTb+G|?|{EnWAb&{uK7$6j622Ij#5tEL&ut=O=RzQ5?(nA(p& zBJ_}4C+6}sfr;Mn-=DMBfQj-%a47nhF)lZy5xR%`4lyAV?xu}})1#|OuT7_*M>JipSiwn&mh5oDg zyBC;HeOG5s+>2X2oPt+dfeFc6{(SjzU~YD&@6dRH6fAlF9rGu6m-!(@^mmY(9qTX7 z{YEnTeydSn0$D364VEA|Un!TP&eyjz#?)h-0XFA<* zM-nhTJ1srJaW39=e{a&57hVx-qmqV!@qF79&w+h8{v((-ZT^ z&HSsH_3z%uT+7JMdmSo!n5@t_#emavm*qydP~k8`9py1M}Z6KHk6R zr~j5VJJ5LFS}QJnw*_HR#(D|4G_BaRuhMcW-JI-h;>P$qyK<1IFsv52=f| zFGtI^@85v?eWY!HughX!4v!potY?Vilq^X_eJ#c8T4Jz23q`d-k$zwf?F{-Mi+gTv zVL4s42^h2UX_Mcu{)3l%z9->5bKv&-uCJ)m{>O>6rRYo3oT(S9I)O1MZwM8}IqV~= zPer0Wdwb?op5XmyJYhDkV~u3nSYd~AG2##QTaEXbq2y^bd)y}jc^KM(_tBnh2@%P- zC;GeoY>V~^%#MKCpowx| zbV6VJtvwBl_Wfl}iuir4hrd6pi~(l*(=*$XFz+-oOk!VR?rY?{9y@@(Q!jYB<8lEo zYQ+K}YFPKSvOn+r(BE6D92OtJ{8p{A+EIdetMb0yIT!b5OLNf!Rh<83qFAig1B^0j z<%d4JuQs*Z9}~j!m0CmQ-vcm;ZETA~a4$Bt&MXvnB^v0kJe${FWb4hd=_;R zR%O<_J_gKExxQlmnc1zeebp3@Y57y5y@!BI3Gl^l z<^=L{Qe!vYKOjFo4D|Wz12Rz}eC6UWknzL{!MPS7W7j7h2?+riJ)0z(9}i^2kVzi$ z0P=l9kaT(?kYS#;_hu!4eEse?-})KI(EF#hyM6;1%sg79eG15z(0kI=D}W5x8@YC^ z1k!I9P#WL~q;H)zSAisuUQTa4@1;OKe^$LxYXRg_v1?8$*4rJssY|#KNSB*4rvN*U zPSZ`RV*`PFT<@|y#}Y^f#}-pdZy+B&dRW~W0@9YJ@t;XLkk+uP){ou-X*r{J>qo0EVvoxhxVwi8IBR^7!7=YhNz zj8VI+52U_tVEVWdkh+5Wtom<2YD2jHtHI}LtUmCXH36yKxFPp~8jyE?<_`#u0I6&= z8#0;!QjxIUmw!Ky@(b4%{5J`tY`f*Hoj6xmoV_Sl1xQKTO}{Lxr#QLyhvo|)MXseM z4)p>l)DbWLdj`nc#lKdnssnl5V(B$|6i7kh*1CN-k9_;+WlDE} z32Z=etBafDv96r(mH+f|fMg%$mLKH+k|lk?bS>(XIbiNE90uh1^P=lJ-UG>SO}@Vx z&rMh3e-yb5NZRk&qzKe2wahkArVB_)pjpiJ3?Rt{Wx)fLK%Oqiz9_8- z#Bf0sjUPZB9|%|?WentzkbB3SpFra2q2xQL$HRMF=cUlEaR<%UYSaRGAZYZlKNCny zQ+b#a_8A>kxOKn|NR+Wk`*tlL_ZKR8%GdyjsLbHKhrYXaEj2zO2FTs*vg=l19e1Wz zr{jG=Zs#Pe{Z;}b%swezwiHOHtSrxnAdrx*bsqSCI=LB@{$V}NCDzcDwsH;;y>R=Va?VtGv$WiUgKT)`^hx=HrJi$OLLoR<3 z)B|Fnl)C4s2@rGUK-xQ;x0%;v4tLzMgA(g4UmgImztkf6D&~u+4d-zC79b{^DjO?s zulFYRozpM}V!UVBL!EXYhF_{{3BK1LXm)I}4alB#S%N7zcfG2<4gHu~yU#q($&~}L zi-X$7dmD&u;!U&Zoj`VImzz6b9oik2Ox#g-Ezg3Ti#364UwTn#<3=DFFS3_)p^oZ? z7p5fVfo$u2-t-Oi+Ira`$$$@t>hetI&3Axo$#UA7VFhIKo}8)N%Rn}DyJzpgJW=v^ zd&)iqh$8Pb0ZFV+A*m|=gaD8Y>bETvih!(dY#F^-07UN8V}EzlW$pAgzL7W}vbXXh zr-Fd2k>(H%Mc=K;X%5RV0J3to)W6d*K%`kC4$1gg>Z~^HhJKWo5m2UY01*$i2`Rz6 zTp_C3sgC(2ni{fRHy?<|){~BH_`YS8d6|FFx55WQ2Xb(4g}VDif208sbST+ff%WqL z617|93xx0bkDL4_fba^KCWhetE{Rik8Hsf-mJKQ0@CnGmtn-!l{{`VztF2goImK0$ zUTBDW%4x)txdQWpof?ht#(AiN0rWSXCq0Xv13eVF{N%@jKo2fi+^VGy^uWz) z1`0QU?&tQ%O_v0^_xi~4ynjIVunoBFR|fjim6P>euYm5FJu0CT2y~}A%hoLg=#DWe z-C!Be?e->Lp0R*#>)$68I{*_plU6*O&p_?Cn z0JG}35JD?w&kmaBF0(4A8 zy>=#^A1yawJ5>+#{jdkYjVeG#j8{C}G7R*+Ll@qxn*uugbxd{oKA`W2?{0cK33S+H z7wQQ9{#LhiLlF8PWQR%F&MKgTAOFn?#X5r6l%h{#AA#1Nz3TD(0U&G!>OlKT)yVBS z4)nE4zo*Qbfxgn7Tm17b(3iIjU0sz7v~OghdN(J~-eVs|*5?E5wKw7+dmhjpsg1kr z769$eezWi7Q=l&%tGd#A4``SC>q3(h(9ZnjkE5)Cc0A|5?%j5v9iTkT|2)w4qSsfw z$3D+HRYj#{1AVqCgp>b0(6$nd_6xQFecCmmK4ctdo9cGi_*tO;lSuT|LBF1K9;$N0 z&&MlY@+x4z$3*_@^VS6Vs9jBv83FomvGCiX*FanHeg5)t6zD_NoA}h-fHupXSKMa+ z^g%Y$J);gl?>``8CEW|O$z#{EU0Cer)6@0eWX~15Zj8(7KCc`&+*Qtz-7@b@XMRwGxh9@3#V4b5Px=EEs4F z<>j)*-IXETKO-& z^SCe2GCM=IOQBDt0;VG!aX%$0`v;6WfEMREq+EdYis|Wjs!6ZKnGk@o!{ z)+x*`AvKM43GEOtlK%s=z~w;4Ve}KV1k}H9)97+*p#Ii0URrtqsNeq@k4)48 zHK%5(Z0!ovFQ)_S$LxWcP9_Zl`9Mu}w1&@{0rgYxm`RE{P!sw#TpjqmF`vQwggKx_ zUW{3fQ9up%cyl(-0`+Z~{}UZYpoR>1)winx^~FcDw%Qn|{)}X^PnkgVe#~tRJ_A$_ zudaE?IiNmi?XUNL3sjfGXHC{|pgzV;Bas*=tueEkWi^4W%Z8+oA0Ryi=SRX~**hP9r20aUTG5_$OrsKTg& zwNXw$y(ye}!@U=%g3sbl7PtVF&sBCkVhE^L>j$l~a)HX-7rylfKA-LUhU?x&pk74S zG#>5+>UmyRcqV=?y;XhhU2UM!W^CEnyMam-Tbjep0F|u1^T=Hhppp)c&t*OXD$#3I z^x-g|9z`(zQcV2MoxGFbvv@eFvbn2&==kb)&NvUb>48nF`$A!T~v9v2dEn}IUfA} zKm`go=Lqru6|gS5|1tLMr|r75R1m1E=C3sEgMhkh=XosU08qYH3q76efbx#KcB`rx zD9^O2*ylHZaxV%?l)<_$HnEu^;Ub$Khl!M6pnL=}* z?Bp8s1J!^!r@lg_6VJ0X82nlB9jMcX)ymb1fwDQf=%yy>W9@Eb_#XXtB0!PjJL-BY z+^--G{ctqi;&kg(pbkHKzT^qc!y?Z=V-9H!?Rq^vKpm{l{csrPy1#|T_82EnCfx(W zBf3EC9ol(;59ebvAvI8(43xp_r6aSAKrq>GLq3ElvPHB1`VTR zL_?&MN+~KKNm9}vysypg-FvAJUsf7qB!!Ify?>qS+~@wS`?;=jod==~D|EPKuOYI~ zzdrA)8$@PnPj1z5fXLLSIeO?8M8>9g;=B|hL-SQ^Qz?knS}OItw1CK9L!88$T8Q+m zf|a+XLbS@NdFhcdh*nt9SE#OlNXN=l*Yhhx+8cD1Xpca&)Z(5(oDW1x%&trwn*-5e zlku)jX^7Mf2S{H%AyQj&DD&(uh*b1^LLPQQq^u(}cNOa@X)&f!UP7dxZd>Df4I(*Z z%g9P1M6&Y1l)L<;oDv9@AH@JP*;#!RN0&nnNV<<+)9YHH6cZ z?spy*9{@(sN!;udIP~k0FeY->~~x8ieO|oDtM$K^UV}W7Y2pVMO=8>hk;Fx5y)tL|;v3(yV+yvnvX|3#A*C6!cht`HhLbxZbMtJxSgr45Ajj>B1bXVUm zC=%z`@sUvd&jG^iIWk$nZV+zu4-6gt4WXSTj5F3jX!TK}Z|_0~%`?y5x3~+TiRXW2 zCT}2Ir)bS`J^`UVH*aS=3&Itb=g>vsd1zaQ8`&IyQ1kbHw^-sli(Wc(g^BYoJW#&E zco0Ixg)97(CLxq%Wn7algK*9{*#bTBd}kS4tn?p;VEW@kZOJVNCT~O$mI8vY4MRDv zk|7xGIT7nQ1A@W3gFDsbAoy-~Qem9*LU{;+Hfss_9p@nU@cH_q z+&l>0C#x)1423{s_#`u@0RnEL$;|DI5HL^E4#=N{fU4nLJWPY2zP5jO_%Q_4eu;YW zIuH>5YIDdhsxNVwPwoRPdnN3-^rVs)Lx8x~fHwZR2c{lC44}r}--6yHy z`B=7(1oTTnu>K%ZHDEaehTU0pqu(Gf2t4UsupNSxpB+9&iTx}OSQh9ft}p4FY7W$e zK;5s^`ieOB!j`IZMl1x1yR*8rA3z{0h|_-H4#6CU08hhL5X^+r*-r)FPn((CDX|5A z;?I(3_eIa;g5Ptd-Q{Q;_}$;%E$V6jzhf`^!)X%u zt!&D5gI(Y^nb)nIiU+?Tzlzc81U_G((tWrbeAc;2k(#)V`lV*mzF_d-f~VCL;8&N^ z|C(ikU#=-|5bA2qx zJO7%gSa%L6)t`YlLI@~t5pUfFgx z21$Hg6vME6Pz_$;GwYXk#Ju_MD&{@6055ljv2RNNcn?+==dIKSFWqZxYwCUQQsdu9 zsbzzACvhnRxsJ?~L89B|!?{MFn(BJ$MgZ*p(Cf zK2z|53#QY&jlet1N^|TG*AMip_A$o&n+Fbd@cO`i11`f1pJp^yHI2;Q<)hvzLU0&nq#g)^KVfT!xj=*?LJp3>g4jQPIc%?~oXm#G8Zoai2( zP2xGvyp$&=l@0E{TYlv|cHoX@X?T212KV=q)=v_V;Qn}(9cVEI?svlemYa*g{Zga5 z>2DXfouvMU$=ksFk524g?+9)aJ7LY_CvY2hE{8f+fy)zUUhj|smnj&0I(Y$HihxWo z%>lQLpH95)3vMO%c;QqjxMeK+)a2LT7SWc4nr{cUu>POrbON~fl^-WQdx86?q^{@- z8{DkIT(6lO;NHtk9J0v(_jY>7`Fmo$lNZcfpMfTx6^m z2yTq$+_*6jxDi_?>nA$FJ#O-2Sp6!v$CiCn^LhtvfLyy#aUHmR6CZ4Joxt_^^4_{4 z4BTD9w}wa7gX>cHR>kNcxQ@B+ek^(n?$)H{nk8GowLRW;);1B`4IW<%&Wm-{n+-NJ ze+AcY(L}JTB)Ixh(j%WJ;Oe%iM%~c{cWK?KuLsn@)yUrH>{tP=%31d(u6^JtdLJ8% zV1g@aa?zl4Gq}=n5B=rDxg~n4FDA_cXNugCwfF!yW0@2A0#9&;!!`4=d%ziR*nH>e zVsLsE2gTg#2j|mJnhRkcIBnEAwUJP8KHTeV+O+_jcSqH(@Q;BbFn81sbOVPib&jn1 z5gh9KH%>j$;M70<%6u;Xr|N{3dHZ^B2$p*u%(4Nec;>yI_8s69^4@QFrVmd3J>?kf zIp93<^?Fu)1Dq`FEOrxcWuy9chl0R~|0PR& z_8gqEWxmPMiQt@yDB6`c3C>9)NqMb>-~zt>Gd024w=^*J zX)!pSE#xu5H*nn2mK{;91;^R(A~QzZw{7~X#;7$oc0}iZ)M0R}f=Y9oEWk0-)Zl5Y z1;qRjq?}C zgCleIWiW3X94XrsI#1%jnbDKikp2Md$<$@x&jP_7waA`q>VC@%r*|H3ve_n!fFlY$_~OdV`diEo~MBiLNGe!)glu<1YI27-0L zCf!t;CXm6d(JP#-F$^}5Zuj>Q59~MlTYK&7zj}G|CfPFpA{wM7n*q0TCqMbH@9iR7Lpx+7XvnGx{FGj$Q zqWmepvK{O&_ZQM}tH2KG@N-Tp13NHO=_0iWZ2vL#YejM1Jr^%>VrPN9Th{tN$$wzG z+?{9_e@C|C;;P0YU%}q;zrHMR85yaFOvqnYpR7TSXKQ?c~eqZ45DT}?~0cL3|lzoZdutfE7NgKtg1dd`3ONfZXw6Z5BDeV$-F%+0OWeg{^@oE)|2QLxg&9v=QC=D*RH z^X!x|SVqvU}^kyUo!C-EESh? zZe4C*DdZHK65p$=c>|3pGyj4$d*kd(yX|03Uo*d-X#nPUW5_kR7hwKg`uKQm1DJ!s zE!$kv!0aI`P*5KR^V5`zK=L=3ZCh@{OWy{w`5JHeDgl@c!ui!lUW3V7;J%f-0!)Ti zI>o{POj1U>G4~&s)vYVjV|~FSsz(es?gF!T56RrP2h73@`6$apU_NO)kiSpNpQBjD zd=Ly~#?CoyV`sojOWObKq%N2@NR^*wp9AyC_=0y8C%{ZFJXwBu0?czqgg3&MgLx|3 z(DU>UFvCQ56d(G589Z~0)E)w6pqYQbMmaG3k23z0?*r2(!zf|rW-vXN5C6{Kfw^N; zHbf-WbyyzDuPX<0lj{#{<^nLS&IJSyECzG^)0SuJh+wW0y1!2u2UBm1J36luOdYN5 z^PYHvxnvtd$tN02wGjLH`etA%-C|CvC4(tj=KOKFc$I2wc;l=C=8UmDF}Hldm{jdH z8ZriB#Qa3Z@uy(?@SM6J4KR8mZ!D;f0Hgc1W>zW_jJB60$_bTVG&AfIQg(pR(9zaa z5e)|SPmJl`&0sJTl+Nw10)w=on9xoEqk5xD*V!;I2yR0X#^QQW;2mY@Cty5}u~;;| z4vf639Sfvg!N|@`nl{!1BfZeL{mdmWZdY`?X%ny4=_%3vYrsf+YrA$*%oEr4vz6!q z#_67CXOiE85i#s16E_G(=;XrNDX+jdDk+*%GarnDb8ke=ngzx_d8fBQ&%y9imRa7{ z4Th^K|Je0%FdWrWbL~yR*s|E0yTl$0YfY`*1rlJGFYcYt@dU$2gZR(G5scM~E{$aW z2ZpZ7uFhGiU}!1n)+Kd;u}F42Wt9gQ3#5eZUygwxJ6$jb@?c1fT_`0U1Y^dauPe(H z^oh@w9b+w^|87|nuyrQrgS?5BS9H*O(7wgk81zpi)JN~FK>wKc;zwFL=uK&NjZdru zU6c@i?1(JroUqW;vnim{eD}S6Nd&!q`;OZ2NYE=yY!Sc*y;Reb@LdG@E2-5FQ-VQ% zI;eBT zPG3){q#E>7^NfSO&=2K%-5=foy6=S}EpsP9_u6-6zKuQT zZtHKF-ZBH-N$!culsMOxuQk3`euHjZ*XXx~0=oH~pKd?J{6<0Y<_+sXUv0fkkuT1v ztKioDZ7JwWK1Ds!lmT6>EXyM-4RobTy}S^t6eA86#7=;k*Xpw*nOVi)&=Mzr}?#5)99(e$>Y*%6>UuTSyVrw3YI zY>NW_3~1RKbSb`}pxqmdIx0O5+N~1WKamk=*FsgV5&nR7NjFrw{4i*-ZIsjRPlFbH zPrXfkDQG91PnjMG0WEk&LtLxaM*wkMZE!1Se#dSNs7Zk4tv;;KMFY)^=e3fh51LbK ztr6D{w54#mQzKk*uhK7LpbRPY>cN(ZUxd$xv?*lc% zbgJbN3Di{9gX1(dsLA`RMzkYAP3&(E%Ps~r?)=3zlXOr|&)2j5rU7dBgND=!YfwY< z&V6_y)(b3OrS#elRR2v)w(s_U>dm`yVBsH7-MuU#Pnm$~)ZTyQr!1&jkK{#OO9s_? zVDAB&$Do==D%&aefND4(RsY=0mbnF>F8{YPP5hrn)x02Yb1EEE)fsQwnjAn? zxR7yjR}H9hr}vKxFhHGoUhhQy8BnIif49akKp8znu{=ry<;PHJa+ED7y}^e>4dS`(#YF<%81L@X3Sr92B8LP2hpups;GwgVb_Bp%_LU7&s3~%@Ysj4rx$` z3r+L}^g$`QvT#!MJ17Ms6WH$z%HzPUXsQb+S#LSZwhVxB*OpMjdKebu#19=a2gvKt{v-w%gx8uF|wp%`$ zmijN91oE+i?|rOBKtA|bE&neCpKpFfImyB8OzHrs%_)90u4U?0f#cdfmbi}$vI z3vELrq8Ww$p-lN~b`QO|)iB6lRibv;Of8+mib?t%0z*yKd*ZIC+C zvl%%CAhl5DC}szP^tS($YsF@ecnd#Y7_0+{ZsYlMa}!AQhgr2{H$kenVa>Gr0@9lj z0`2>MAQd*PA(n`7dE?JB?>+`8d$I1xyP+W6v(De}<|{}k{yJm5qaY=nFL-X73(|#b z1Lu+m17s`XA_&5HA%np!bWOO3}SAjH3mA|ItAuwS-P}zJM==a?^WjX=0hvn*W z#dXnz>Gcn80F>K@R_Bud!b7(7w^hKiLKDuRw?IZ|UZg63>(vV-XMX@bg3s2{o}nK1Jt>OY-+(wch#_3w{3sz*~$&u|~MyW)=eN~=dZgsP~2vE0qp zeG%%j=gwA>J%sw3{dLVVzM(!|a5i>r7V5)`tfcQfM14T=^qKW-sP{a|Y>@Xvy~C!v z^4b!pw_Frxa(oE&`adkJf9arpF;!u0$z#;Z-R+-U=z#hefm}-K2Gk837a!Rgh`R27 z=|8?PP}j)1xSw_kbjOLbr6lDDYK{^+e4Deh0n_L4o}hPn%T zeY*03P#2-H|Dk+2>H_d_fYJcu=emPc++HQ$6haX=-?fZh4vlB0%mf_r)oLi6D zior!=qc*55O!0O~96{{^gN#c%#!!2M)t2X?h1$4)6$Mw*Q5!ZHnKtEt+JmXIz(RA> z?pm>E@vR8dZmkTjF8YF6v+V*~=}V|x*}S$eQ(RvZkTwzc6t(jPCXJ4bqGl@ksLQhg z)C^2DduYa>rX#`Gil2*`hM82E@(I*X5^cyW_fSKStoL6Zj+&?On>snSQIkH-cFcH( znyV4JGjb23=1fmFziT^cLj0n8_iaLruV{Xs+#S@o*gbzcsfilfVu!~|dr)Jf@!d0i z2sPSQZV#y$qGrJltCQmUxn{O!Z}abHRF76?>skb%x<}K)hggm3mN?mnP<>Q$K5`=V zb)ve~@`g`h2dZD+_0ah?3)MLT8qF8aqx$xi-jm)dQJs)c{o}A2sw4Vt?|x;A>cEXb zxdx@E_Dr^K`09pg`wuI7TO3erv0S!iwpd3mWP}$?LA846r~7jQP%Sg|&Y^1~s{U?Z zwhw!uYVaJ%cVi{0I;v|yvPG3>tZwdk4OCH#$(E6uP*oPfcFl`GReoOM4jE-s-E01` z_Ek5klIHyxOX^3}>5U4{vcyxr}wJUV_R{U(fn&#i;Z< zT5&0}0F^G`n(J27qtf>D71F>WR2rWDZP8Cd<+6ms_jRwJQt4vrfA?RZa^}U|Qd=ZZ z@jJdjb!93lzMS)r+vbCcrl_XA>=;xqL-!XOkWo>2u-|9Y0~Ljyu|4B5sK|0q+`oPq zDw53#YhFa6B35VHKc6;K9GCyP((V;1{Kl`F9V|nIOPBHLnqE}cGTNnGkE6oy#ZC5N zeN-&Fu_;`80VLS#!V%75!d3X;#D{PVQAe6&Bx8=L-_Wu>5;@ru1= z>=()_E@YUeqx@{m+M-ER<<*HgO!CO}ZOvN_V=0m3X|?c10Rl#Q&l)$x9fvM>2`-;-}p*0jj= zEM*X7jO4a>m#Zi%p9%|JV2`qbkl9v>4k)|doHM*V5oK35Z@g6{iL%o#+7}$ELs^jG zrSse9DBBZlz(4pMWsVUD_21*N^0p|GaV7ren1j;E z=h3(8wxYCe+R7l<4y7M=&n$BDL@Do?NF}TirL|+ZfvgaezP69b+`9>-5AW2v^&oV>lx>I=%M`xo{ zt2Fa_vN}rT2kvR^If&93EAE;d=t0Sl-~IKEi74qz%hAwygc1?``B%X&l#oU%GHT*c zQliT->@r2kV~@^aJ9Ctzo}XOsAp#`{1&jO(#rSZ6)h$9HN)G-y`0P*K{{R30|Nj(M zcQ_Vq8#R&&6@_G!GC~?OC^@C1QXxqqw4{;FLRC98ctWy^P}e!j@*H?es3O5< zqO*hul_xt|ROdFK{3h>Q#T5zV>uVXB{6a!`*?;+$odTgWPL=Tuc@Rp;;)UFqN`#Uo zcBUt0F`^#+ZP^FqYw)3CJ)tf!=$M1DDU@(#iWS2Q(*7gN2DlIX0=Vw zJbH6)JzXJ4iY|RN6hE<&6zSI7O0~K~isYZBPkp*aiuf*dOTYL{3cqcaSi0jADP(Y2 zwl38nh3TyPlc$AAp{GB0?#gSV@Zu3m&VCzGcz~~|x;KgxuCLqTGU-VQc^%Sc-3LfP z&stfd+xDcOu{Fc->mO2(>a^9ep`H|Yh%r_zpXcYwtrI%hNWs1nyuTLBRElju*|PbHH4q_sI-Y*Ui&p6-^KZ%*U)4ikJ-`xfAhahmc2dJBNmtf22rmx#mWZ)q^BA;*pb5sWHiQ zW;6;l$dcTX3s==^yOLaWo!h%N-ypdncRzSO%_BLZMf$O}o+Rh_C)z#A0Lh^ULgm_H zk`ug*o*CUva_r5FerlwUoMU&s^BkGSjggPPKJzCz0!15wnTaI(N7L)YTg*vz^D93C z!KWlU`-|>5^Nl3i=f~o`QfElE&CgeZ29qRPcO?7#_zcOG8+x3zG>l~PezU2FsUTTj zyNtr4bVwGh^?)|NI>}0|)Giq)BUukp_Wso_AX%2)`g{uylB_+KEk5s+AX!oeZutx) zlgxk8Q8NPhB=g;GnpXTLl3CgG`*89Pk{K1MvR?c)$-H&uS~Hg#$uwD0y4yUGWU7Bz za92s4WQrtOcwH$c8Kb7PXQjeP#&aP#?tKj;qp&{A@!dm`5oouhuxFHH*opd8T6>d> zBQ?u|41SOdC5xmj)HIU8KfOK4i$>D>!aBM*Pe?jL>CRWL43eH!qgYPWCFvfAKA0Lj zAnDdGW9inyBps)%W_wgfx^$N+@7oHJHglT0b1#Rab-noLB56g^s`MH^+ukN=QB_5& z6o*OLEyXk`vwtM*WN6~h++~ucHj(;7)Pkf5n-z>Dz9Fe26*Q&T8j{*B{C?wNO_G{_ zd2afL21$KVtrWQ@kfdH&WIo4xlcegMh*aA>ua}R0tJarFQhB@Aaq-TQl&=y_F=2$H zG#GRKi(E-k5}#~RTk@Nv+^db+@>_(YoEhYw(f>hGG({hVuaYJy;#ypjr(TidaZ5j? zMXO12$9)L}mA53B8bukQ^^)Y^LPM{X7?OOwVWM9*nNCCN%%mLg#uB$@w< zRF@4uNor*=Kb+b}l6)8!5*Z#OX@AYKDG5iC_+NJG(1{R|SQ8ZG>Oe^1ZM&NZPO&6W zUFWR1c>qZmS#Daq;Ur1O?L3##b(tjCgu5v_o+1hBj-=}k{U-4rCO<4Z#w77EN%Cf4 zwItqT&wbtcvm}0bM{i5JB8lUiH}7vuAaOqZUz6hPNZkI*t|R8FN$lK5nKyG6No@7e zS7tsNNUTdqjMJZ761!EzUQtht#0*_I;pARTVzMd^o{rl>V$T0}xHJA5iILH^81{HW zqTjhZNI1TnM2DwSzs=nw(FUz!tS~BxUNWewBlMO;F?ljguFH_9M*;nAd!mw+fF)^kch8ro=6cB5|NPf*nB2M3E z>*aGH5i54K{5oYx!rLa^LS%W0TM~RIyFC4`1_`PiM2C_&3EC>%uP(oz1ZM0lq7T-QKndeW-+KxqAn;WD{nu|u z0QX^9`m_@9cTwe=?bjer2Dq;HCd-p27EMFC>-G`9=eL8@=Y9GekTfuUTt|E>iZ*9l zC?>ut>YJ5>xQI_;*0GNd>xqwufIp)?fOvaZ^?zif60gYsR6wi0^h-*Slf>)VJFZN% zQR4Y=w&r9MA)Y5hBDS%%kjD)1po656Jk}7*eDe4p@yH$h$hCYA@sMV1%epK=9)$$t zKJ?v59`WkH-${c!booBURtzH#p8pHFevF&Am-9Ond@LvTW5=RS@Jf?=56F~RO)qh~ zXcxm+gZjRC07R9 z-tFd9A(yEIL*r~~a_RQ*`?t%($px*VCk<^pMR5G|?E@jl?!!21sN3yVA5P0jOUgRx!y=h;P9w$>)f@& zc_u(VE7~6$M1>f?g*Di+#R$VRhV8P?L`Qoiom+|;qf$yWiNIV`})}K5o z0Z&g4rJ#*P@Df{~e>mYAys{#Xb?7$0TT^4J%KD@5ZW$Oi+A#-cD4cOx`oDMtri*6$jMqodj)+%*_WuynEZ;MI+YQ0yj91&sg%JGH zB?HP&5wbTn&;M!xLZ0wAe>9gwNXN}h(Ke3|DmC!7D)1yiZLT=&YfnRH(XY9!Dw_~G z_3(~Q>L8x(7yqWa{S=-CRP4L*wHHr2Ed$5%7zkS{)Y2b(6k%8BlR7~=5mw?U#+$ta zVYB*jD(~wNuD5z!&Bk)GfsX<0gM&!|y3&Vych>R@yR_5xA$j?mE-kOVuQtqvGlkh^6i-3^p(|3p>nuZ?~ zmm+%c4bSXO2}BzgWOpY&MRdYgor~8$MECD&yyeY<7`3R1k12_Wxi_9r@a8jOSmsW> zO5TVSZr=4MVhFJo+N0jm`iRY}jUH_fLhPu{7W#c}#O;1oIcGA7IPXhalMc5d?gdY5 z)@ftJOJ@BMdo+r88>a6|k*R%(07EhHQasO#Ff3kjiS%}4u}A>sWd zhC<0O5)}ogmt)@}(eYQ%viN)?)_yRTsd|Pa{+Fx5N2y3U(ayYipbkk19T&?>M3L10 zY3%&&Q6x)DYwmK8MKXLHCJdU8d}(#^_u2|1KcO@WRM;b#a%A8F0+9TAfcvM(Y9#;j z7s;QzfE3xSl1WOuNIBRoMgOjW6gxjL8MR@gJl)NoC%6VF6~9KW-Ta4?54jyym*tVl zYg^#mKa5l*w8 zf{R+TN4k-=wat(nehVb+^qS zUG$pmYr!$3@4nd1{VoIP=gzB~SAT+Zp9>HFN-jWpfo*$T$VQ}h++11tG!N-h4^Dhv z*N==fA%2JV+95+XqvGSBH!`l(f6SKCMMh}%Z2Av#WK_(qe7)x%GCr=8(_Ev6%mw-? z&jY_BQ`uD|?#T&c8s@BzT``8tTOU_&RHTuaAU3o0**G$rjNiBN96;tkcv%!}23gDA zc}Fk1imV;$3|fDvAj{&0u=)u{WOWDNEArjCl4+}MBR{p+XxqCE70>18BvDYpe}pGd9R=^^YDHQpDCC+}IOSb{Ld7ZHwr3|%czmYE zHNz5xw-)R$T`Yvcgk_Ixr+1)`E<-PLo!1SjaVdHZqDbVh`YRb<6lq?xD%EX7k@e%p ztZ8=?`D7+9)5<_mVO!}F!9yr|JxSBJl8T~PMds?0*FX_bJr~ty3W_}Yz1EdoplI5h zm@a+;$}v91%O-tLth2V!V{d}ud?e|)h9xLIzZQ-sNPrR-b#)ut1C*k@&4JaGpfnE2 zb2$}*(iw9vVC(`YKMp-t*Zc~~?DU#3y;YzJ7hG$T6arQLd`UxDH>jEt6Yb)sKt0;A za~$!YS_e7r*pvpUvwnU^?s4UpcVyd?=Cb3wdthI>;pMa-$?qu z6RQOEM{j<+^E9Y)Ma>^#Wl=10uV_gnpWP?Eep>+BpaN=jGTr|;}Q344Xw0*w6?Q)7XN1y|tE60})KF@>wjq5pLFqje>mgM! zl!ok_JvO=>rRfJFn(r+^X{D*MWm_CdIag|g`c|Rzv%6j=Ljk3K!k<@NTZyto1tw*0 zs3?K&9tg!tPB zI-xA5a#VB6ysoatSUM&aWiOXeC7ZvatWR4&y`c+b)Ar{sxd)(pX>tjbR|e(lUh{|@ zH%0kQfuj-D)+pECAGS$z9m=ilzyAC-3*}DLD+{!TQ0_Bn5N5}R@^}sJFstV%r`)Y7 zSnYsvdVT-rxJs12<6EiP(}MEhW4ptD7ovhY%1V^I0~Mk@?v#r@s8HS-dy!R)3hhV5 zYNLLrIMKme{Z$bamlZpuVj@uCcK@q}I29GauYX*($V5f@=AX5;hfz`KKO(=Y02Q2p z!K{v7sQ7ZY_kemkD#r8PPM>i?<&tI1EqddqlyNC9nOTQQwGT-Zw}nxur|0>q@*OJ8 zOKb#aM^Wh@yWb)t8kL@*QY?iKRL1c9)_;5)l?At&1~R))NgE1H30;lK&Wq+wI^wAO z@ln>YY7~|Kne|+lbVb#QHz^*o&r!9()V!v-6IEL8M3!2lp~}dDez*K6sxEzX;_3`Q z)!nPo$#toy3L2xIx#owev)=4YUKSkFVO;V){q|9nlhy@ndGbnNe} zMvaO|G`B!GYW6M~ddu&Cnv?Z=*e#1tbH(LJhw)+5xNqv1NHayv(;pJst5r~wm31aC zDi1ZaHc|g+EkVr-#TQSqBvA8hkbm>rUerueG=9DaK<%>IHms2MsFm9rQY|)$T1|m+ z=7k>A9(((C==KfNp3j=tXv9M8?K{F=zb8=}a8z;X%qP^Q$nNs?3q)<%!Pq4tm8**g9b)GfBPXkE1ibux!de~(zBPJN@nw!q`4J0z?VJo+E% zEGE_Xq@SS9@r!i$vRc%6bNIB_FHsj)+5g`mchpg`*xkXrsAEK@znIUbbzT1VzBn92 z-N-{D0f7~$UvOLYxLq9TC2kDoh4-L-)7A2IkB3pe|MJ}u&1Te}w%L7lJ|EX#x0#fk zDnY%+6)G1m9raQ6mnL3Cpg!M4e6gJ->S_1s+gc(~-|2h(&PX=u2O~t@b|->xrIi{5 zZ3Gc5HR|OL1W{%VhUgIxbU!+EJPqXJ?-e_w%s{R#N!d(k0eK*=vR_~fBzzy$LG=?z zjER8b#D?4i~V(uuP;Z#%C)!ahfbhD zraVt8+8hl^$KJCP>(QXzCukY#iU#cmyLf)3q2aK^rBY=DG#Hl#-_%=#21~<=J$goH zupRy&syvPcrvR?0-%HTouCi`0-VP1EtvWxHx1k}-&U!rV5*iYh-WMAAg@$Zul)B<; zG?bVWUD~gXhPr7+`o6blU?;!(wSEW<9eP8D2F{}4!^lkG)A@RTjDW1nbu^6a7f%kH zM#JpSbsIkqfVL=BnJIn*v=w?=?Y44(COy7m&88KgZAjPnv@{Gf^^=-;FRz29&8OjY zCmpmy72E9=90kqz>K3b;2SBrwQL<{v0?oE#t=)X?q&fMC`YeA4n)}{Gg@XK``A$rI z`SAm^Fv`HX0%gz=uXZ||=mafCp4QU+4z!Xld1{CDfL5RQG&6cJXw4R`imhs(y^=I9 z`$7lpWA`4z?mW;2;-w}l$3XjYcDmsIKK@(Vc|)3l#>KsqJsE4!xH89AV%anr*W9q= zwvv{ux3)U^kVSO0L) zt!2>YLSwCHHb&#a5Pt{JVKn+%AA6@eh{njROAX9)(U`)+d1)|<#=O^l=auEqSe~Ncef`kLF)pzZY(nE3W!rVm*U|WuXZ3I5jK-m^)@Q>n(Ku0hx9YzzH1Py0 zQvNicN$Bd!(zg9*TBYa4@KZ$7diixd8{E*eiI**uw;oLzJ=b)Fx1(u4UC{4L3Yv~* zFy5EWU1?D@{-EiTD=xcAq%vh@7{@~ z*rDfcNqK0>=(JY zw+a4}v;G7+7TgFGp9TH!%-1Ew{-B@ydm?m;J?K`yXmX(x(60`u(mT(A?$RIaICly3 zhke`|7k7g0-+TG@WD@9+Jsf6BGw3P3o3kETf}Z~^Btqga=oQ~bf+IpfZyY=tIerxM zwvntn4KvW+j&pG=8KC$4Go7|g0eyt0V7tk@-)RA^`wI48@U1j@(Paz9a+wr$$1*S^ zm42oS-2p>k$1dq30bp$1|2QLn3k)rz)?Ji7F!atXe_yo*j1!J0{nIPKIO`Fq=Tr-Z zZFuK$1xYZRvR8bo83Mz-)_}cj4h+8+eifk)zzF|ND|vARjHJ1V+CRl$Pei;+66yk$QO}~M)^^JR=a|>8| zR@gbYtOV#ET5fYU-?xg7gb+`JF0hrykF(j8#= zzpPL&sRJuYEW*iA7_3xt$F>{u_X|>vZZrA_R%O3jwzwHs^v(Y^G$@1h%=KCM(eq$+ zHKrQY%z)J=baQg)7+9lb`|@>QVij)dKeRZNL7g-2i*9PccvOJnDBlN{@2DHr=x6ph6Vb=e-8pw5!3s{yw#C*G{nS zY&#<;p#ZjL;Ihlz4qylOH9mhN40hZ;=Yvb+!Ol!r&%PA~Hg)QSDbo_{I@5b&Q=VY6 z%M}uq&+A@^wi_>54ECp6&Z6H>gZ<;J__u6su>bC=YCI}~X6{6@ypB*b3-L^(YFnXs zm2Fr?KmwZAKT|EMS4Z>a9gLS98_~Qg$$X~O9nA+9{Zh};MzfKV$8DR_Xtwwy!d}#g zW?TIf`Jh}hJ5{L$Py9vm1I0@I1KwzU61CUg*$d5){46P-5j3aV(XV!&*X0kkUpoB? z&6QRL(qhJFZt7_JQn3xq&ki3c+3ktuF2V>+Q$cgzPVIX?mC!s|ROTWTh2~i$<-41# z(6T5kAz=Muw5(jSGK(BhU#T@Wga7M~4E)AcW-%XGMYrdi56PHB=%RH)w{=ea7+Sa8NLkYQ8?Ad6 zd~&TliB|nM$*~YQw3@1&a??A4*7GgF%f4{XYJY)2wQ5A`o!MzC8XsD{VpJvhYS0?G z{cMkF6I$b622^UQqcz*1Dt5#CoYG~zzSFzWN+?2}MNG7|8f^IOJo zKjKEx?tl{-pVDFS9-IV&jHba@aB_IFXct-FlvZZ7(hh>tV4u;$y$KwSd@8@(190Aa zh}TeA3r|9;m?N1NHg?#vZ;&~~w<-mx(cZ4SXnM@$Z( z?VgGI=GNV4^OZ7RCzph_u-+ZA=S$T)D$+GrB^ps}D0{(RE|R=1V7y z&~;D$V-9H@x*n$w6&%herS6@T~poV$ar#t}-ZuR6Lq2KJgc%At$Z{i#sV z8C{?G_RC)VMb{9su6Dz0bp4^4A1Vk1acZw~nj18jQkkE2G zA4L1ng#EGxAnu%~3l854;=aE=*?ucQJS6v^v%L<)<1;o*eJBIsDP=!9!4D99HPoY% z?}B(<*XC2T7{p79KI`lgff!~w>w;Srh|z0HI~fxo#@f=%S`Vuq;M3#` z5PujieHcUram>ml(8CqPNyo0e^${S+9u=;Q^8iWVe1KlZ50GYGkC=09DM)G=O4IWe zfTUHTCBLo)B>m?6852)T~>kg z<3s4(;Bk<~zI$Gn;RVtkjgDhVaUjdtRyai;1$l;tgi8s>QKwfcjD1Vth$ZHZvpH_5$yuNnT&nKNA+x00gyL|`b zZ5n=_;t`N{ZE?tZITK{(3s1iG(m+0x8*cevFUZG$E@)xo@udL;>XRmg%>D6@VNweq?IXILLRFn#TMc207_y#H<%NAg3nnN&6@Z z^23(w<%d;3e)8+=`y(WfpRcU(>e>Qw>8V>vuRTD1lS!$WwFcx`@*{srEyztXdY34D z1-WfwX7nE>c`%;f|%IyiAYT^-4lI-4ZFLMMX_0~6m{1_+?Ne@EXw}6tT zRi`Vv4V34eCt6;}fKpm~GqA-Ils6O0mhKG&rEbfvo;~)UG$nj5tgi*7jXURjwgeQS zNvYj%Jt*{`E{#fQpWEa&JQxLvL?xD%BK6bfZd6|)2g>&nyW;iEpp5=y=UMIqWpej_ zIZr1*mCe5M)cxJQ zs{4tc9@#J&;70=0?2(8tI&E z?BosV&Em(UG3!8$pJ}vl$p=uAy^NW5e?iT7R}j?p71Uh4g89wYKrIL}YF^a_>PwDc z&}=F0^}3wp#{xmEPRsnN*9mIFPmSVzY*1Sd&IuV$0kz|8tfP{YhdMuU;R6Fu*`eeA z5(YpOat9^9FM#?5CpwvrKplMS(y;gns3Y=imA%ruzs}UW(b^4~Oy~0I`VF8>H`i&Q zh(S|IyTdrL1~k>bm%r~f2TjZKi&Fg$(Dd6Wt21|jw%FYEXx}N&OfyXqo|%BQMlPw9 zodMc1Lq^T4)ZP<0$2iR9@rW)dSki@HqpmdqImE^ov;K z3tIBgZS!VHeP?v!RJvAymTP{w z0j)9A=vS~2Xsv@k-}6I2>pbC@{`L}RREGA&sm7pjcKYsXi~~*dZoSoy9MF2LZW$$c zfcCBAz`Q3c&_<1O=Pv#Y+V4kxb9HH;%WAxtcik0qg@g#BV|PJUR%o?)b_sO#sQ7(e zilA#xQZFPsfo^aqJ$=nC&`pMU@3)SCzS2KuqRkofwO=LX^@l*W_Rb45ngjZ#?(XV8 zk)Ursk*BaN4fH)iv76jU&|QvazgZ;#-Hp%HAkGH;hQ4i?#@jqJp&w<{ep&MtC3wry*wj=wa zK_?rHtQ=kdITIe4*GG<%zAlXhW7_4#wVYfql;qpmLwvzdz4ujkLjs1D{_V->s$l3BKiB>F6^z9;4)$)B z!7%-FD#+|D7;D_7JP*kOWBq{iMYIu&jaMs8j--O&phOH9j{{?O_UQ(BJ1`EIT~m*F z491aWjq^dpV4QGWMqvhmar$e6b=PWR;7G8Qtbps>XRzd$< z0vNGW&1YAGz)1ATxB9IFM(ULE&VCm#9;Vy*?y?6X&ur&x{eCc>x6v!Twt(^KgwR{p z0gTGYGrIP&VAMYdUW=&I1Q32C)Q_#ij~QEW z1v6)LxiDMmFP}d@yhRnvm$82h-FAZc+QOsrlogoOk}VMeI+%@#`Ies+g89Mr#@JGA zFgpi&swdjPq-D0;*kBAMcZZ?tw>4mjf6J_zI}T>w3%A+NJi+|oX7S%EDgU@qqF~tp zF#izFkTmFEO+DY(7B~Z}S&Py>Z0Z9`h4HN;`Z8Ga?liI1)`O*Ir`dn#6<9_i{c_*; zfwla(jltLpu*}_OJDe*4YrV#?z{B2P*>#xazxf2#wwNn|7(Q6Lt+y{|eg@Y5krdBh zeXx$abT3Wc3f2j)7ji2Wf^|ke&}~g2Sm)TaHAPZaGwwoI1dsTQ!F)^oFc!@(*F%d!#=fmLqJW`3Ft zR@G!$gfR!KhFaRP|Bivx8kQ(9y9-vQZF`z104$o!^+U3Mz~a2C*L$!DEb;ZAflLdq z`W%WHRA^xRP&|?TYY|vu#MIFJE5Z7cvcp492=>&&;k%D+1$&nMs!fXSV5{_aSexpB zJ@2K8H6aaby+FIoP4!?KZ}_%%T{76FQ?*Yml=jU(wMK+GgS|dwIA^Oh*c*>$wMMeR zc39Ffy2=3T-6Q@>oV39{Ku9?$Y6aWv&W60t`e2`Qbsspq8f>3M^6TyT!44QQiBES0 z`%?YKzLS^04!=9#n7tY7>qqXE?Ud@?U0S5?I|BB-UyjL>onWVbJgxliDA+lfQZ?S|^5>u!m!3r{6vc_JsQa|K>t)WGr7g2E>6g zUAbm?ydgMBy$bAK&3 zmeZyvf64;KMm*i<(i?EL)Zg8hd;^>vnTei;a^UQ{tQu!%3eF){_1Y9=aNO5E7!Hx* zz131zbTGgf@>dowRJfD@Gx?|z>EPVA)_bqoE$Njx-FU!M+6 z>V~k`q|e|yS`ai5mTwpYa-wwI1R~-v3I2W zt)Z{==T(E#>0wl-xd$AYgNFOf``~a_-k5nN5gdtTV0E1ZIDP-b=cDd`^P{(GMU~X& zIC=f>2^Vnw)*97btpZm*KOs(m4X$ERi08D&;Hq8~ZVX-ouGZ;RBiCKvE<9kW{M;B^ zlTCAF{A<8nxiV-xZxmb$-Gie$h2YxEs-Ez=4({e(S#m=pa2@+5)xLFryO+gTe)I;o z2S2WJv=M=Oyhg)6;TO1GMHkYYE5SYcXxGPBDQ{q6q3o*N;9iN2wA*e7Zd5QUhLQ(v ztWRlI7Z=>bF~+%82=eT^<~>GGwoMsvXB{=4dEuL-VX;(edOW^lib zB*t4ya}RxItrNWf_h)}j|IhE>{`>MJFOmt~wCLsI|i^@OBDb zZ77ce&sj9EF|i)J!`=D21X8@m7lC_@C3vU%Q!kUlz&rQ7Gd=hMc)=qvguC;>3!A7K zP`wCV%s+oU#SrlB%I6-uv>d$qiq2`yY2an3#_)4Xz{}NMyUauCx6sft{N4z7CCleB zEu`~r*4kM)4ue-`JMf4U310K|d9&JTz-xDY7hzrm9{E`Rgt9$&ET81dZb{$?gKK59 zQ^5NYeIjnB4S3%YZ|Q%_0B`is@)}vG&Sa6(ky}3C%T@m;8^HvB=0~-X-bwIPSQRIm zI>4XTM_VxG0Qh>pF7i90!CyQp>FM7S;IGhKaWQ)W{Ix3`x0SC0-+JR`1FIF_Z{Gh; zZiSS`@pS6fR1@&`UM*psUk?7kB>PXbU%@|~@75Z+6MV0lp%2fz!9PouCpwyfAK075 zcY6Z$&kZi^1OMX!voQW#@JSmi1#iN@XCAC` zka-BcAh_{O?RoHfQnoJZ8v=ju^|pf81>lcR+LmOsYG6UTn2-eC!=bMf}V7=5J zr=$*o&3opbd148HV_?EMg<}xx&4`&TSO>wuhVlNz?;tq-d0l~d#7b{LPAxJkn)?S(fL5|yp zULSb~3T~CnO3{a)xI$~K*&qZJ;wh)>&OuP8?48+=4neccPG*^uzuothj>a4a$Qj9} z`kf$PwT-=5Z4ZHPf~ojbnxl8Am5;gw1mBNncD%BIVC-(NW&IEYf9jnJZJi*L4LPWs zS^?oSm6p!!8W7HSadD2hw63)EIL*Zi!a0Jwx@FR{+U4=SZR!xtQ+r~iRtlkZN&HOh zMG)#azCC{U0)z%V2A1R$2#q7#??>N*aH;O=3uk>GG_B%N6Q#UnE?cVlGa+0vJYW#< z8$zoD%IsY$A+%mT5$3!RLVP@a?w%2Zn@>;uJVOlOHu*kYbr^(>d9x2a>4$LlrV9t( zuYz!|NS(8AKZFM&ehMobAv~m~eI`l^Lbv*`pqniax*yY<`hF{fC;!T5+B|{K`;mUp zAPGWW+iNX!CWQV1eUG1Y5MGG*7wLQn!r+Aq48JHqc=_Gc?d3rbhI!5(e)|T(Ncr&v zV?+pJ3ROGLwnBKzF<^?WG}oQMS(Vc)AWTT;`LXylg!j#-6h+BH_<(+7Kz%KQ8J9oP-oAf(dvBvH>n$P8OJ%c~1QuF-0R)rt@bI-+h_=s+k5o_puwGzh;e5UcdI zL-@6INITUN!f)qM7*2z5SgYf0wgH5r&6zuXO7}S7UwGp7W(fbx8<{+y36V@wE&1!xe{gwfda=`MJ*}V{{YL6Wze1u4&_1~R&w;<9Abg+G{ z2hjq3Vo+clL<>98R$ih(WE7h1SNrC)BFPHH4v?eUTs{$5`~4Y+VBLH%F#w`X{jDGG?}x}fb7o$bB1Ddkak87UA=>q8w|Gba zqP@?Z>>1l2I&e72bnFyFhi0jy?LGjJTMg;DKp!G^KjK(n3q+m^l)t{Pg~+=r-lHcG zBHzfJZifjFoipFgo-WOM;qwjlU=BpVX>!LEogoT!BzT?VK@|3<`p1ZrKeBZ6Z(Srr z*F6Ig2oE5NowxMKuj>%q{j_L<|8|HHuN`&K>VYVE4Q)im1ESQvc=ZJ@AKHDnB#4@WVjpt1K=i@%%4uFaMD3r8Dm9BC>UyMm>vj=D z6qgR3#Z`zH%5@dm#t^YT49>BV`r$_%`IaypBC+*Mrv+9JeIEU}rbn8uuhb~(%QA=t zeeT`T?}KQ_$ad_$)W?W$X|JvH{4>+#sG%7|lP--1>~=vcGuM|WeP@g1IuCRi&4qaS z?FgrVHxSRV?>#VR4zaRaBHuU;;<*hWeQ7liYlP*5Y;J*AYs2*0i=RNO`?FYY%Mpkd zzDc%BAB5N_u!>^h4Dk~41w-HOL%e*b>Hha(h*y;sRGB=2c+I(Xj|?w}tyZpx+o}NZ zhHoTmlPHK$T<*Vx0r6&knqh_v#M@R{xS33W*zr3<^P3Rj-KCW--;yBScb+kSu@=NG z<`&1&A|XCBLR-A47UH9C$}bvGAod6$ZQ585@u>|fk{?L>r~kD3EYgSAuc6@G*A$2Y zqMIJ|i69Q#w&1UUR6k^9mGJ&lh_7@e+gr0Bj<{F6QtvLr(XP`oH_UZK4r z-R^RE6&d1ZbC$`+bV6LjfV#>bQoo5Vz0kln<8fwNtEHCOZi+`9+cF!xo6?L06LBOYv;P ze*EJCF@FXl=By#aBC2Pjy7az2XPaFcw}-gT$EH~&6XL>5xosk9QK6Kr$vQ$y- z>Bm?|OgT3Vy44^td*Ntk5e&)ND?9TW%OF{|BmU*}W=L#w=2%9RLSi>S+Vb`yBwOl8 zw8gU_aY#_`tDVwYMd( z5is^hOXn&}>~xMvd24PCB^LKXLU0$~vPyuYX}zlKZzV`tRikCb+#&fmxH@X7 zwBFge@J8x=NXWTPvu(~nLcdZ!U&j~{wu^6pxpc35vx9GA=0PG>yuM3Gdas|q40(3> zL(Hal@Wavs6!KV?D(SthOb2dOSvF81qZ+9U1qf$~SUyg2>Z_HB% zr2na(>>lv%pj+Wt?~a^x=vKVh6`j$7?m4H%Y&#dDTWyP5*!tt>o@Xd)E4YYmohe_U z>yDsXPo%hmx)9xl4FRc!Rp?%vqjsuj8M>E6j8~owLH9~`t-IctGXMVw0dp@0Ce#WE zX+zg^J%7s*lC}@9*T3sQjF_uh4K3t8l}3%)k38lPpHu$M$XwF&^tr(VVSC8c=&E^T zghvm8&GZBx2+tU~Ds{6z5sLVK@;7P*6AIohZ4m`&5Yk*O7tUYH#wA;WoS#ohkUOAm z<6J9;mt_YMxw{=!?UQ`gu-jC^RGc+Ysl=VIflp7;d^jL@eaxx~Ad;QIBcw9tyskM4f zuIqY2cC**umRw!JfuO0uK}L`9kihW?%W=U=gLNJU$BXd#;H76~u4#C?{+U;vg(j+m zdxB!_bfIdg->vUi%kaj`we;tZB3{`JZIE}}gr~QiBwJ2p;C7<9qYBB4kTj+uFqQWp z6souC9t<@kl)YP;c2UuW@ODvJxQk>dp@#Ujq9}(;sJq!#{vl07s9WV&cD10BP)+-g z`?^bx@Fsu7#M={bgwjE|xGc>cLY|i9qsY0d3DK>qBiwAOk>c#LBz}AW*(2iKxp@E;td? zhbos}4%a)aQ2xU4#OTIYJQF)qZ&>jd4;1WqL8np)QL{E_p6B)xo(!f9!{h_um2Jex zbGZmYWy3~;K$#VUx|NFE|MHXw4f)3FZY=dBG>*>K85a==?}9T+Xx&u8JL4l;c8?bl z8fP3hcI-8iP=ENb^M~Uv2vvLjoUUCzjZnTUW#_-ULPDVj@03&455m17U%is^cDVKW zq4xsc<#>9tqQXkB9%Zu|MeN-l@wPa1?^V^Cs6UYzkpKK28bkFRV+BGq>4YRt-mpXS zjKckM%4uj`H?cgDJ_AifO>=B1Kk@Fg-KIZP+Gx0JNOcJ}L5*ZMr7`02{{R30|Njh^ zhdb4M7{--QDk&mlRMMbGiIxW;N)Z+EMkQ2)2C@?k*-);s2+2<5ek|v%!fZ=cXAV^8@>S%o{RVXf zv%_s8KG2wX_CUD86f`e&ehNL~4usD3JUeDSwDCL;ocS&eZK+$@Jz{2|E%|6q%2r!w zwtKE$*9CRN=U&%bUqFR>zzNq=#ZVX$7JO3b zB&6J+$Yip5!QD9|=|CIc8)K!VeLQ8Dt1+7}Cm4yPAC)>HbkwmX`Pqb$Wg9kp`nXVS zGKtM0N~XIH>m#9+UrC#M5Zip>rf%IT$M(Dfh9jDMNIY}J*C(hRiI+Bs?)hep?cK>= zCaqMlt*mgn!9X3hZeB07QhXCO|MCk@+x-q3tzX=+Rb0T@J^`7=Iaw?}Q@Qfrz9Gza zRgU@fXbBT_?|tmJ5r+n%9yTJE6yR+_Oiu35GbGN6Lr0o68)1erAW~7gSH?hlmbmAtM`OR_CkG~k~dA5 z2$e^lO9+oqphz8ToPr6E%HXbO&GH0)k*It8MWPr*eQ|fM>S4@wa!k9tryNUH{%W8# z7-99#<6}R2vaq2nkD@HIgw5%O#q7};Y(16}>i1L<+wW|xwNib89g08dC!|T(>2+&9 zKBF4D&ThJv%HM%q2{FrS?fzkx({JvYK}qavxpG;{>K;!eYBZ1Z%pvCR$?n7}7 z&?fwJec2%mAYKrmU)gR4o%_m0J)ZYMSFGX>dm_pIZbC}v^!A4yhrnC5q{2nx7``s?@TEOj!kmMp zx^s2{SZX%2Mx9cOHHHSB4|5-4!*s@$q2&o|UUq5HXpY9#=GEKpGs#F)u}@DpE{&ZA zKkT}g(b&CG{>GP%n@BPQOXJIa*rQl`qV$?D_9QivUj-FnPclC#FjWbAl-?`eJ$4vL z#;bm`jGw@6zHcUepTe( zF|knoB`GAmCIsqg?WI*pn9w9{c>9W^91tWP4f0v;hc-6X$+@@}(4qTF&-wLQ=(-wN zb0%mWNK(rG{rngOJswvYDHR$(R=fXr6GaWkzHXbJzn27Z!~+RNh8U0?jqJ<6839=& zZYcg;F7$|sZ}8i`0=nP+7TsLI1)Z(MJiq-IK#VqYF1dXW+C&EGKOA0ymb13uo5<17 zcoIFii&CJLZ^hb(xOyntSLU88{{!A_`+BmUkOOhzOD9fSzeVeFXT97ue89vhd49>N zKFkl>9@jG1gXOkUvkMlvSf^dpVf!i&8;6x7QWTZ2<=63ZAFV2|t<~*e8s#%~oR9C8 zS_;Fiu#=HDue%}X;q2a#23I7nisfyvSVZz$5?!|387aKZZpPa<)p5eEqatY!QnVC* z@9;T|6k%qu`EzL`mo3n5ew0D79P!+770!1k(=r9akFaYgV6>l9iXDuq=e7GPvHj|& z{%f%bNXU>@;u4v_ro4+vF}iH5Ulu%dzLScTdJ$_c*i2#3+5JORlyjH{3Z9YzU+`(7 z{PmNA+VGNBDPP&;7-YWb9^#9uh2r@j!%5N@RL$sR&cB?71`~aa*n2Oa*)QhZ?j!%8 z)zjy6;MYzjoJvGV`C4uXY|#dM+A|j#~r8Tm8%aA!Q&htvU7EN*>5YTVo3z z)&OZLE26l-7`i5Bax*Pbp(E8zl4;2c?Hf%(ez&>;LBsg^j;-a;q{x|Ke57 z7~X;kO{ucR&3#a)lXNykI|)+MWk!PMO2B*3j@yf=h_9mOm}1^>m<`&-0j3pLQnR8; z&1?f!XXtBlT|J8pSz`UGhi+ptU0l|ivjeR?hH|0mhDdyAbLq#%gV-hVcGndBCz39H z$QItZ0?9kgOXJ`MlIKroC_c$RN^<&zRH4&ImElv6Ijw@!ds?4&Y(9z9=ycmvOBzTG z8+F=cq>WSyRinW?8d4T^(1$zck#Z-0z3hw4NUk`pP_)pEJw^Km-!}7OcP8n=Goe$Q zJHE*DRTsc^g57WRbsLc|e|-0r95rm33tcR7p(BQEPdP025i7suDRh`kV=-4if>7Wc zOdp^tZkTAm&>i8@^)wF%3fwaOs9+q@HKZpfi~=aCDAMUV)en`K?=}bDb_2Y+Y1#kk zFf@%2R((D(3WT{*4_WbXXs3=hIX|0*PS=0zC?6^4?&r$x{LleC|6<;{SSkQ{e2v-T zdPks??q8F0oD5WxAkj4+bAd|i;#=mu0kq8vqU(i9fTrqQbNuoo(DqB4OKHvlb%Aed z;C>sR#?>q}$+`hmc-vfwb`el+xH&%NH3xF&`7gc+Y0$IlVAZ_qZRi?bXElA;1Ul~T z(_J@H3~eZ}R2BXZT9~Xucit~RV?+Dr)t+Ri<8wO4tlJ9ZXPtK2?JB`!W_XRu6)UFSjuaWmm}YU)gLm4cNSV>LybGH@<0eS z4`*skC0@YRkt1Wf^b?U-_5Hoy zAXRqf>(40%k=mZKWBa2uNYg#}aLeZhNQ+w&}+4KRSuD>`Q_n z-@ha6zqrxJj_XJr*(0Pb=7dy(zd;{~(ntxmzP86h9Lbr#A})2Tz@C$`Wy0HguxqYz z<>YyN>~OMG_TM{?ZN=B~8~1Q}ig0S#fhvNH`D?$(DJEg<*RQ49Rlua;hW*j&vhhLM?5SZRK8Ti?09in$zu-}}Xol=0PrLAR5hy_x%w#@->OdQ- zk&x%m5Jq}ww=x8ptEtcQjx<0kzHTR*M*{JU_WtrOZ=egTwie}G0a5`atMbk@Am8)2 zpE-ITD0d7pmUk`yRri^|d}|L-|3-cdwbTPz==Pj}Mn9k}>^{=xH+Br3p&rg$*q6!7TObj8?U4q0imAf!^Zn*&{V4OoGrWz zDBzu0Jj#Sh4~25&T@#%9Xcn9%$wGQ&Zg!{sJcPct<#BK%W8mIAiIe$in5G%s%sXy~ zMf^6Wb03ys1;g9y<~u*EcPWmD;@8C{C!ZVd2j3#$@n`+XKhxOmJ*qlYhV)@C6SdqJq<=bey! z85o5$^Dj>Mt`}X_#vMATC&V&H`9QL0Us(I&KOmbcFf08sfpTk&p4Pz` zpjy<(4_#RRnqs+HX7V!7zNCE6l9B_u>s5u`;d-EdHL6@ zGcasR9~MPN0ps+Y`pdrQz~G;VRh1J5de%GEvgruWWlaw$@0kFa5AD~RZ~B~^!M<+g zRY0MSr1{!^1~TpZ-GKRd=y5QPdUMGPx|X9ixX%-za+oVsydr`7pHPyjGNn zc>;~GhqdAxMWObC;hT9L3Y4E$_!}l_1_h_U?TC;VBv*dd(^2>ij}E=RcKaC%BhL`H zG-aJJ^RzwlxTz-=+ZcTQ`X~*nR=YG=^dCSBkSi8ryJ6EefxG&rf{-wASi4Ik2-~Uc z;tP#uu`~QwX+*CrlD3~#()5}|vX+OsPlGa2E^B99y=;WkON_I5k0y|IIQ#GyadD*0 z+h>-otwDP1?zpc!jQS5ptsE_o(Z6Zs_Y<3t@!q_R(&mJW zlIAmavK^7(5LNU*BN7>_PBBbPuOQts@cajY8q#R0$Ns%GMA|y5$R5=|r0!O~v-Cp_ zDZ7uoZ)Eo)dHv|qxV~rDUC#BNQJ@-jZm$YP$?w>1v$$er@-Y(pmyVFQg|NwQzm%-~ zGpuj9AiZI52`f!+-5mODhD8KxC2fUf%uu@bGI2Z;BW?;y>Bw7yznSxglvUo4VxC%M zKXMofn)H61|Bwmg-v4OTDXLKW=ee$dml8CluaE!HbsAbq_9r}Fn+R%VJjPx84thfS309qhoV_!x^C!;$Wx?R?dbxE#9cyoQF!%tpX6G!2WIE8j zH-1^I{skCY(mUdATLa^j@#CraMPST02$W570aMXsi(cbRU>Zofz>f34)HAqYUFQN! z*>z8i$Ao|}kQkvQ@f8@J_ZvQ~sRa7`PVRVj9-v?H{KjqP5430podfJxpw!%xg-pC_%h;ro```xQooZ?zcHL{Kzcs zU46RtDKg)X_6Z#{M5YyeLj6i7GFP9v5R_YrjF%ZdqSt;#`oFis9ujRxH(VCbQVT{} z0D7(K|A^Fte=-AWmXVUUBpG~27s-L*<0stekW^9J(F_}~>tNnip0$}s41Aq?Y3x3> z)@{v0dfA4#B=&rfnaO6=9$CpeR;Ak9Bj?lF-^!qq_+q~G~ zsR6WO9o(Kira%|XiNWyH?!O^E9Sxx0jpxZP*$uRm6tM-@Mxa(diYu{*1xoeJrwsqSk{g?>PBg;BxBFu14Bt9e(fc$w)8w(>q;<$n-4;J??THnP2cm{K_ZDk}ugKM0Q4&>9Oz`5&4uibQZ>aP#drjG2_ z^L@Q|;I3L^)3cW~@OI(&eM)pS2}dcZR?RB&nB2CuSCbto8fsGqDArSU--`O_Twu z)7!Q~R8yeY3I|jNbOK$c%e!lr7ckbh<~ylzcD+u<@jLB5V44V9N47l!CTUUsT*Omg zDH$ZJJ1qb#*F@Q3vK6qBv$fa$T@9=vO$~o7Az-CnF-mI*1(uIcuorhbu#Ux4N+^i} z^P~1?{oy2F+6J!MIeZxy^!XE$Ekt1K)e>MTp9H#{a@=>hW}pQZ1ugzs#qpVj@fUwa zf%3}pcWK*2AbV~usM+`vNOAe2S!su$OG-R(#?iL3$n>d`YaO_U%)cQzMIDyNx;i4R@aQ12 za%~j}PNm4|t^KsX>0#D%eMIcmcw~)VZtwMILl!AP{$#)pWW6fB;C~_;Sz7%OS?}AC z$$ac3u5%5U=cQd{5zE+Fk3F`Cl+6se{f88@^2 zkaDKU^TwnhlJ`A4wnhCGb}ydDH#udAot|sYWW4}v?-%R7rLBamvU+z4XY8=qB;rSQ z);Kmet~q9_ris<#@6>eyFJS4QwZ$F1+nDDUv|H<34JJ!{SNGdT#K+ld-K{UagRtXV z=i9dlK^nL!JY1g-g$7@~&&}sea_L@FH68su~=5hJOhl8IN`uIkAWFbm_N9R%<1W6T7|bFuw1yNNB7hL ztKGnCo9Icotj%WI6RAKScURITZv?ueWVVC63&-<6m#)z^ z2da9Ndq5$_`;_y}$#fq8vM@Vrwa828?jrZb#a`g}n94;bCKt3}bWGQluXuo|Ldi;czcweZ{6IWMKMfqThC8-tg~w`y>{bGvxj&zdDh1 zo12uGrJm@+y%hslCwgGRRJ_$^g38?|GI$V?mF- z4`J|hIglA?tAsc!^-MeEa(0WeCdGu>>JZ_C{(`H^^IMB}hwYLT4 z)~WUvk1K&$QO_S+GYYKZ?@n}N`2Z_dlL?I!U~`Mle>m*|?31INM>@uVeaAK5%HT1u zeUq$7DrbQ0@t@>2+dyDnDRY(j@&(v?Nai;Qn}PN5W6!elDqwjZs$r}O02a?d@6Yyf zz;rWtzT!m!XD_z(YM0mnV=LU>sS^NnqpJy*J}(08u7OVfh8Cdu_U_m(pbiwTx#2^h zuYr6k#$e+D`v#Wq($3rutMk)|RSM{9o%~;~t*eU!#)P{Eg5ddj+sH zl381|(gKNlo5ZYmBd{|^?%c(vzmT+{l4zCAi)4i~?$R1bq-a?Z0yB3YRc}L|s&)+0 zjuSif@VX*hxaLU{3_Wp zvToRs)d1V2CI^L@B#`i|Lz(xO4>t8XoV?F{7aO)~33aFUVRccELZ{FymhsMi z-stfP^COw1Q8P7|@=r2r4NDqBZnpFP)tv!9&3^e*E;=NRaTe|4G~|Y;Hfc(gLCF*C zUWLI&P^Bzb@-Ms^>f2^lSQ#FNCYeRC$(U`>(w+E++_w?h>|PW;o+$$2m{Tk<*95vQ zi+t)1^8-@8<+aGyaX`NRwxxbg7*PBy1Em|nI5~WJ(d`BsXm`|38qxEBuAgyJOaCP> zgf~6jpic!xCn@TR^(|mJpK$XTJ_9T+n(0^1PEPJccJ>9Q18eB*uOl^3 zpzRg2Uvi!W>XFjOzLUo|{u5l|UiTBodjoR)vN`u8A!-(;vkN-gj#!M}dIv-c4^rJ) ze`tNbz`n@50xjC#U5oFjLSw>RV{|uLRJk?(u z#)W8586i6*;#ZUut&butL?qc!Mj25`6pB)2NT`sJku6*KT&{Ut*B#$GqDezarIHc) z-M>Dsb6)41zs~bK?+2=DYsc3uc??hFC(>Tuz5|)wL;buz(-5-i@h`@%t$4?k^6{Rl z4(2^vsF&n^7Rx7I{VaEsz*>2Qi{Xt@*i_Ki zJ|cgS70UA`tGXj$-OHS8?+j`Y=u2w=uqn~SmXbaNotTR8^wPXJw zQkMFPXzW`y>0dc-iInDzf8wGOu-nQh?ccZ~cCcc#+*X<(*|^`3yJroO@{jB}`&$N^ zzg@0b9oT?%R}0$~&aT7CnW~LmlHOQA*p7+O(=lx?F}F&k3=dx39VsdF0#b`#rP=1n zL%~7{>4m}wR31XSw9lk=V|=oblnOZw^p^ptbnTU1W~BXx3}s&h6lV+2h; zs?dSuM_aY+!&4xP^ExC?1_E33Md#YWJYY8wm);n90>@G0Hf3NCIHTj<%=JUS^;FN* zQ`848-B^n|Rs}ru>9Ti8r-0|R2n}5HfOpSGRPg*b@G8TdM+H5BS64TrnSC92MIV10 zw`T$`T6N8`{~Um46}i=Ocs=kI8NH9$8wT8xj2cH+6M!vO z|NgQLhNj>+{U?{dLap)w{~c2yP~l;jHh6dqrtICmaa4}LVltOxsc_Zz0v1N5w9@0bTO%6qh$hfR`M9#Ga zncns1d>gHibvW;=W_}tH$_MTJ$GVVsCt7^@RSvRK4#w)7`hc7*(VkvgijdR3f7kh% zWaREu{96)n7`bIndWorX$P>x2Q4JnMo*914{FsBhaH2=_>KVTNp3C$J*CDU;^zx&x z)R6bMYyRZ@VC2RA*hy8`k38o|6^HG4$Wsv>kTqY3T&ktribMzGda8)hBNCAFz5QVU zSr$1SxgBC@_mNH2Uz3FianRw`P%W-pLa9pje z$>T_WL;5QmI*R=b&Lw%-gV>k;efeUkeC&056=vK16?_b`CGWM}<(%SPz9YNz?5?kRM=p^Uzx%>YHGdy%2cb)cS2a`W{u09sP;Y_>=P z(2tBO;&O9f9Ll+Ivtko44J2<@fBOzB*%W)O<0oK^ge^5rZwBIt!NRnzH^6q>9D4dn z8L;O@DM`D8fRix#LU-L$;4bU&%r6ZF?o}ewL#K$AOpH=W*N5iLcK>gTb%>;6=^lvQ+rfb!gG$~|z*$~bA+0k7>~qs`e!uPm(Pm_+Sx*2VEV*L0 z*$H56Td@7E;{{+kl&FqO=K~|K{>lVb73f#EW9#yBfHsjpq;KH>bs)tzP{$M~PmU#A zvJ--Ck1J+$(NgGK@$9kF%RV4K;pv2IiiXy$54ucsv*7vJXD8Q8*FuBMoJUWdEj<0N z%fr*b14_m|h&r%*Ajhxexv643#3trkqGJPIwRO{48n_A{o>hpuH7A2bHFtha99@J} zcb1waEUCr127|B)uPfNxFFbSWbvBZ`PRv&;hGN@G>ZDhyDRvkyzs?&l$F2<5@so?f zvFEk8m`isIQkVN$>J~mgn)axIo^mVF<>p2r!`+avV&zoE&LhZ}iCtkJG>uGdP12tj zV`LTl`uOp#EkAE+#x!Hqk-f^#`DUIovYT@^vh4Z#Fn{%~&#DhO{Y^Y8u?FNCy}nzR z`X6#1%}jK$_rEgNd4X-;8=_Q@7cw*&Sfqr!fX!_| z|E!RAtmW`m@hs$NW*NQQwhp}nrNHNjkDukf`VS;p6=%f2G>;uK_MUk)|;G^B1T#)^O z(M=_3ZVC(F+8r5zvmb^b^HgllX0?1M`rWwb?xW>Ul`N91)}94*4Fhb)ps|B{2JQwGYcWklkfN3veLU!(6yhnQsDL?=!y8ry7*}a^cEIGk7ux;ujy=J z4{HMY>uHkm9cO^vzvbV^wQ*q7T@?DfavLy{7K2$qD6pK5D<0pp4+tejNzL&OK+qC~$uc z%i2pj18)tRI9L4vc*a<-?e!9PM-yJCEMx)Ca+k-ewnE_TWMp0xas!^669$#~0e4tn zK}6d(;65DkOB`zkuIYC2xV|iK-W=Mey?hmLyquyxohSnKJF0=iu^3<24f23asCUR{wX711vpH4LvbyV4mK*^nRlbFk*IxV#q_F=V|s&CLe|VliGT2PDaq@ z;bv!)x)6GgJ44ZnH0aS!$y0MMhAzR##stiTc5Gg&{89_r{OH7Tx)+cnPJNzfm51h| zpt8hX3F`b^(r^3CyC9c6?#Te{E#G5v*vHleQfjhy=KuC zkL}IMSzEMAuyaZu)$D7qM_qd`Cix!r8r^uDa6t|G4iL9~=t^M!&iY5GBCnAi?`Jvd zvH%$Y0?xDY+Q>W*+^n0Vge)o3r>~10kwqVh^iepDL_}W^*^HlKYAJ@QHHOHp?beq0 zn~j|9OYc7zHbqW_=)&JaKaeZ!7wHnEgWNL$-)$2MkXvy}%Kk_`a^LehG+YsRi<$Fg zUHm*%KKWI4?-cUXLMQvwx{)WN*0n>r1i91h`e{$+`FVQGq?^p=*+fNAd98Tl?)h*n z^sN+f-jCjN{do^L!G5=$$sx#|#j}+zQOFL|-_x1sio}b}k`gpNhi_gTzpZ^AvaSZ> zsKz#AHrKXfEM+2N%;oUz2hPZl5)QiYLk8&^cIqde-HEizhlE@&%Of?iyXAtw0i=YQ zy%x?^$L^Eczo@rw$IfknsMVN-F;qui3KU!e81%aFSSUy-R4!E5mk3@ykfcqw4 z?%n!2;Eu3|r-l9icgQ@16f_Ln-g)OSG6T4e|K78Yv<2=tx3I-)W`L`0U*)z*5IEeG zqb)oU;GFM&WuMNU3uucdyT1YZn#)c38+^a{`I7dmq!b9-!mDRpmIA9xYw=daT44U+ zhP)?ofw@In@w5IUFisb(lR2FQ^w<|J4k|C9-y-LBNSOij1y~qY-#i7q5tBAno1390 z?2~-8DjB+b&M%+LxC|YKX5Lj-3jRleA1Py6hS;@Xa z@bvTjrW;c~q1@$6eV_qC{)^q@&Y%}?FP=B0UKIvsz8L2kz6->}{G3(mPsw6Vi1**3 zk%jnVo|om~@ExlS*4Xui@5Z|KhguE2t+6@cW&9l-NhB@wUral>5Zj<~yoDNv?Y`}- zhO5)qnP5C?tr&pa*$k=Qza^29BR3nZOh@V+R^gmLAJTl=Kdrx}iF5_$bltBnkv?I* zv5^vojP|vI=I5|xu(7mzLcpWXA{j>yhn zr{;9FAZJ@vG&Ma`DLXMo3BgDjn=cz-t+sckL}gG4&wz!$lK$tAG~|BzD~ zId(m37&#{6=nq3 zSl4=N&!^YBv3jFx{kvHmELm+FHe5l%9L@@xVl_id5>&p@Cg}_IGf6F%rB}gSCzsQ` z?AMTY_5PW>C?zOusoCTEYZ|KmNWH(~O+bBw?CNLRk3jRx?MEJ8vw^h9LTnFb3$)pH zOt1c~2JOK|!=8DNq4QQwqF016bjNs4O$by2<%*BagVNmLI5pukO4)7K{;HW45Hyw|GCc?Z3}U{jk7N@AbS6Fa^cNpS}nG-y%SmRHC@5l3vV*wt>WmyVrf)K0hXS?tbI$#5&ELQ41&EoE98 zQjeTDDExL3Y0ETirx*{gziHc-19@bm7n>RC8lFMMS*@V}Qz2xknK*bHI*Cl0cE9!* z4OxDn-fLIuAt6X4R@t~A5%X65R7Ehq zErOhZ?a~I%;ZnBM~C^B5CDnvqML!&`z5wa2@goR|fk@-{J+%NMTG7mYsHrn1mMq17DrN*{MABeMF zUN?<&Df``wzd}g6v3XW{qbgDvsiqRg!?9QF)1nU-8nDM;7wg|w5_Z`%_`K=V#t!!| zC9ddwB%f{(Seamet&Zh;e6%iNONtEjqJlX#Iq0ldAUcY5(t4}sj4QE<)G+#nCyP%y z8%tJriDJ%NL{MndT}-xB(aK=2!+rnFq%w@GAW0ym?vJw#v3^*YTm)u_H11Hrp z`b?-TaB`n^Z446U&x|!`adZ5Ah07@hoA~EU6DQ0*^Y3jGE2paiM{(@5yAPZHZeg!C zkKe0fZ%LWT@p(gslvbhZ4MbP0+!l{vAgnc0(mOkV#eAnUH+>#h`-Q4!gc5*R@lmL@ zF&LQQ@AqsG900~i*P-_to&fzxyLVo}dFUr*c0ZxH0Bz4)fnSjoP&03=0|`B#jKq=e z$MgHo+Ev6vff96CZFg@G=0Zn+@a;@ZDei%3YAzA@x`Ub^HVwFuIlYRz4}cnm`Hl(%+JB=N?U z)9Ymy1>=MI7DZdRc`R`K9uuE;4$HYVCxR$*_%w4xM?udStZ&6~HuE~1UoEjg zd~IEIE=j_b%C+S2w*BL>+eGl>%}vB>s5l3K!fg=~2z#?sMYB+z!xg2)*p?9O!# ztq(xfhp&QvU8RxbCBDJhLK2y8R7PuBLXmm+qVnp}-^eKQtm_H)MaIITAvyEEkZzsP zN1j}R{hQ3j94&WXUojQcJCcwpkzQOHHh~oH>}%aEhq1ew*DImaf}P(?)L(zOgdK__ z4gYL+AQ_0XGpTC?~#!*e~h5L z(^$G;-*M=?!;?*1mkZq%dx{5NdO^?J&CV)$67*))_2*1Kg1!x-5>5eQKr7q3_xpKG zpo<5ESNVMhdb7A<>uo1sxGb{4$IpQ=EiNxl<@e%SUFwrb3xOp*qQ2p-46tr#yz5i? z1FT6CZ`llfUvLoIz$I-1;^}`Hi+n7B_?I%;tkeZ;BZ-bpLHr!Q5Jgp4(GTp0%x_Ci zE(LbO$XuTj-%q-mnv`U&0h_v)VR+6A*yQVPb8iO$yFBvTmtY5A$6JpT9n=K2>ynIc zbN+f=dzi>;s0z)(qLBF+jh@JFq+XIrJAaY~R1p1ZW24D%0z-fZDjH z)a2qg^lAkhY<)TcJ#jcpHQNDQ?^d}DEfj-J&49Jc*IS_7y)|Hk%pqvIyX5nkX)Pc% zSx=^Z%!cO`mj0L43P9t4POA{f7iuT{tTHEppnCC+2Yj^?Qt-h9boY%vwn{vEx!G3p=Y{kxee-;j+ZKU1U4XN<9GbStI4 z_aWBO?XYcJ0~?EPy^!7W9-p5tJUYK?C6ex0^sQ6&#Wru9hO|4H*uLqa2yN3Cc6`%F zKiQ{?U0GHNm-gvm&mNJ)tTP{w!glXCE+CFn`#9dz4;J?Imlw6fJj8yzfBULW(2;KJ zqLW*ukM!aD#FIP%86l2Y+m>8Irl|GQlFJUrjM3*_vOA3|!DmBzJD>3Nof}eQ+=6VwQ?J+mut2t% z-&p!Z60)ru%a&#KAp3~P!$=7SWW&l@kxL`UUSsGMD9u3PZ`!cZm%6Ob#!bC7p5Si zAhp}k;~g@jeJ(!rUxM_@A|9V#+hTw5C1tg5ACPv0v481|Hc~&lB2&U#u-C`)>5)cZ z?0LWU)P&Yq?6x@Y_NS8}c9uB#y!ibP+h@JSPOZL<_1{j_$#3{=}XEOIdshdMbc z<6jHe(Aeic{HBEeFVEM#J-6r{kfPF}b_NPU+rEkDld7wLJSTjhB}xN2ig@u42TP#q zKzxFa;cDm}+~+@;6A2X8^$jVMWzfqx+bZT}1AV*ptzK!l8fYm~vZ8}i(Ep-;v@T*Z z(4$v8PWFofhMc-}h_XB|vIn44qzRZxBLg*luYj4ne1zMO1I$^e+@bSVfaUO<^?T`e zU{${Qt^XzgSbq;11?t)Yv3-CRq4gIC|MOX)KUIK8pD7}r%mbp{aim&+&jFP9Q*y2x zAec9Fd`4~p(QoWm%Zmqs)Mvd>N(hL;jVlW$Re`vEaqOwfZ6J=~!uWU%AmrAZ84e5P z^F!zCx#4@jy3VwTzU2li&GVIUl^(z(zh;L9U*P+N+4z+q3NT*Ih7{JT0mEU_lD~ta zK&R^&mhT_|eWzu>U|A>hLv4JJT`Bbav5M&#IK$@(ty=|0oF*xjz@gB(P;qZtJA(DI`(uw8@hskpilJFxrU(W#Bt zb(mFb;^c_ky=#WWxl%~kIqsqH@-6m0x}vDuvmdDwOM4Zv*CNgE$Au+B3E1y#== zSfn46m=>0CMLJU@EQzPj=a99+3A_0m()~LA!Tls;Zk1Z?G|ty)M$G3gUow&TOWNX6 z+9R0096043~E_6>b>EX`-Z(5=l{hl%x_Vc|^ksNmh|E3JsyGl$1g! zgzUZd-k!U!d#~#*D^b!^N>r3eKYxACd(Qj3=Uv~=`93IkP<3P~L;(e)z^q|S6%`$TC zBjZ;zlY9dOKOO|@>upB?O*Z|>oDvG6EUeT<_oKk@nC-&B8RXCY*W}&DLVk`MZEvU@ z^7ZV0CEaEruUD#XkqrlVP7%yM1U_;{XI6))UPSJhoajyb5agtmYCd-;#_r3lAHS&m zM7FxjztSrwk@ed5pnJw;WQGTcmpaZOL;mA>>x>zsmxR7PK|O{v74fqj1}aENvk4c? zyN~3>8sif6dPsD+r590q6!FI9K8ctqY?Dl1=cZ?gO}W})>dTH{y%K$q7o=l#mfW;S z%X%zR*!`+x#a7Il*>&o5=>VpNO-lv@$z$Z!GuG*BTd>yE-*%Nofk$QME&Xc}AVa6Z z)35U<6de0}ButG1tpj4D(pGiD1|V-rr7JXt0Hv(4;_H25pzWx5ztKez=s9gk&a6GaSf+5%o;LtY zH|5t!_p^XiE6*v&MhBNR_{L)+h z{4DT(B_~s4>wx!EEH6Bg3A`P5D*qV22X4#0r;q*&09W^NVPfto;P}!;RfhDS`wY>s ze~<(0y-wQi&Rhi6KfNTi(q3S;F8QJ4w+|TZjy-jw8=zBc)*(gmAJDR5|D}YT1M0Rn zE3^8_fLu~{QOqL?NSjzQRu&h55dG8XtnL)Fzgs7{=%+BWWH+2WE-DR;79pSYElr^I zyV_UTO&g&qCOEsnfdnP`XBrRcC_?U;WoLR!Q{d@ym6ya?5eWPEAMJ|9M!fJ;pQ+27 z!pD80ZTZS6m{Hb~ac0s43-)c-IP=~b%a>D94mt|3`h!FNLj7Q@*E1(7JQ>2Ks4%xO zlMrlWS#rZ-#<1hJWVFVN0usfgNP6GpkQ9ISwOY?zq^y)Eu}LsO>YZQTy2~4p_95cb z@4yGxX&@F{Hmih;$K3lPJJXTL+iNM#Qpc`^$-TWPQ^@|$?b67BFW9ZKOr950fgHVm zpOmAbkSjA9ay>T`xlxmMg~VPUclvt%!z@kY+2{y`xws&&a;=7$Y9I3c4&G{i_Y?UB z&fSMncOd_EEdSxFVdU2siE+^k`Om$159AByIq=uD)Mo_>Rz9B$*&T-hxg{}7M^hBY z2O370&+|iCTV~rW0~9PZ8b7eD3HjqqF{#Uwkl&e5r4iu6&%-rUXdE!4)jO}+mW^hys zul+Gtc6GHK+^HmK9-Q)rM5VU3(cG($UF-hq>!wa9G9(PYDF}uN?z%X!m{zFCmGWtS zHVpNGk-mqMM$q)Lf6KF151?)3#s9hn*8;9zw#ayh07Q|@Ti(|RKnkL*%hj9%@>_i+ zw}K*|9zIv_)2|n3PyJV}jI0Iv$cutErn`Z$;X8L#sv|H>H#wMkT>;i*c7Mr%1JHHH zi*}*e4A}SYPAz@86}oRm%X@G{5%^BWo5`+P z!1t-UGzISJ|aO!aBe=4!JfQIA5p4vw6*x z1KzAcX8p)6;8CJ;#yZ-7cVAterG5x_psE~bT?^caB8g8&On{rzZN<~z0#}P2d1p-{ za5AfISDoJm-2|gfcMTn2^PZoQ?cNPtJtMtAh4+BP7+$biSs9qsb~fMSP6OlNTb|bB z0qC@sPPwp=2J{WllrM}IKoz{39z-#qgs|34I0KLs-~O>WehG-}AC}La`3wZ}u+Ja2 z*h72G*CQ4K&Ct^H<6H;l3^djxht9kxg}Q8~km36hP<@|2eXr63$~tFf2N*w~!0%=E z;ZlFdlJo!M#ZZIzfT8297RMlvWte&C$P@H8cX9b~)EDCfJuUs(QJ8tZ_x*h*H7t-k z?h+Z-hh^3`y0`ym!|KCh6LxlvSa)j2w(=}{Y_t!9%OOXw<)r^9!M#P;t{ZPof+i%0 z@729@0Fda--g;2G14$g`nU2LOs-}a|h1=&)Z(xye*kUi6WSf)({yP4&Gm7=|o z69b;oZZP)i$V*t=e>3_u@~*T9ilsb}2XAN3KjR}$q(V=>d7dYXT_tJpEy%qSr#o!% z0J*z{j7+KzM=w&_(NBExnk>6ZT<>^z`T{qg_<>8rcGe{FO|>dWhPFQi#W$>xxIY^{)NA2{qS zK|_+*dd4!bmq@5S+5Nst6+5zvB(097VJkmQK{(h6o2D5@iW(3bBpMR;RI6j{#?Cb# z7tUhU)~hpB4J)w3_}JV1=T>2!ZnKcbFCk2`w#XStqvGSOvWn}|7U0!eGQV6OCP2u8 z$f(_3cJSotV}?l9W5_!CyjG&o0SZia9MG?FfwIGbT%+jAP`!3K;E?xus9Rt@d(Mjk z4X;;p8IRqB=0=|4XA=`>yL}*C#HtEV>(|Sn$18yF^=$S-myK7^?BM*R?!=xqWy|cx?!zq_qjB8 zEP7@VxHc9Ny~mybH@ZL1KiM0&Z5F!ACl!D@T5w*XU@!25m{C_!b%D3Gdhh1ROTgP= zDd^2(0Z*m$RgPB%@RZsH`i$Sq=c&lu?1l;8iEMBl*`N&E@!P%Ubwq&MNf{<}c>*`> zUjt3i61eV$*WS?@fV-pR*Lnc`JAS!*;IW7x>M@=}Nz;4r4dtjtV%qDaobfz44&>XV?di1jAucEI4 z&6l_NencElE&qFW;;Ix-wq}-uebENeMAy~5F)~1`K6+_VuK)-h#hs}J4bY*j8ueGc z3tAsJ%;e@5K-055f0MN$p+Q<`+ox~JPD|L!*oWT9tJ(URrVDU4aSDDKGy5ll%-B^r8KVD5?x z`;p3TSVaDD+BATJ6`pC*aZAmxM)(?mS@iWOM~md~T`R9%w;o^xW8jhzX>n z582+b5k-2=(_!jf1?)_1b7;FEg^ci?fae6qc^~?ce=Si&)U~-T-5T{$Mhd| zwH12MXEcy~q1ejAJrcVY`KA$c=Y1VV5f3g&M$T$G-<85H$O--1c1>6rIdASPWxEw4 zSJvU|`ydW-btr;e6BEd_cKY4el!ZzB|t`)8$zi>d5uI!}PTXNA8t(HOW_x zA@^L!HDgaEa!qYrZk;wo?#`fuLfPxc6`QTDTfs+8yI`*Efjx4pNrexLOR#(7r? zH|#!B-QqO83E4~yac^U1WUDZKXD_*eT|t!Tj!Y3`5pEKO>B-3aX%0!JZXi=J%QW~h z9~t`3LVFK5V5hZ*SXC|^>5jB>q4`osJ9BZ9v7!`G&DrQBWQ!E-K-(KGn~}W!hwIY? zB}klP-uB!27YW1&>Azy8h>`$MK(D{yK2idIY)jnYc`#NDTb4_A$@%QU#vAFazu6bD zuJ0>2I*MbB+KH@MZ5^!mBVHD5Z;8b*mFz6BQp{VoF&Q_tWBSgwuA>hxW88l+wvp0f zc+;KaS%2g>T#X$}5W6f5(Nnj^)ptIJGb&HQf_dj9jsjS7o z*)_KNf}0p{tQBMJ+vS1dnXgcoSpghxcU-cV1RM`vl}OEtz&Y71_Rf$79JL2y*M2)g z_iVG=T!bHVH{GTN=Y~V~MWM=j%1O{Idcmls`X#W_-iAwfl>=L$mg#t;6}nPac7)jp zplit?J@IGyz;b!4!6P34W`mjA*wQ>;{N|q?^Oyw2UVoM7;T6#7oPF%Mj5N^i*EtPD z-UC{uoZJu3uRtv~`L^feKA=?Be^8ga1mv=wv)dL104a0JpiJ-zAVw&6EYxoTf~V`6 zC_NYGh@w1|&kBXMy*A?)%f3T1FI&tNnxXMLNrLxnBh-z(Vl=$-hnkDqmG7NkKxKQf ztL&aWC`q6AX!7zgrjx^qM2=wD7hwYrwjugXy5$fJE{Yg$4!eP`vx&I zGtTm!{SAz7gI-ZpG0c!{ZXlayW1dDG{l~~S7F!%O>#+013P(+si41$Ju8^*uh|Iz| z#p%sE9WP?Tqqriv#$9Zh;4`fjrC_T;7Q66CAht(*)}L`OMIE-`>XuU(_Mxi-LV!*%(rLoD(^TbrU@qbigzUMxq&c-6^+QPAY|2`w@vt{nt zfeP$86Q26v*LCdb@EZ=5&_wp?pXGDmkC1IQmi{>5Ib}pETGtzc85-gDM zg_5vqZeEZ1zdIoxg`H12B{WhEk=`$AYO!w;=_{TxZ5xDnLQ|6EqJ23ZWG#81nEYWePl}LzOCSFjfi5=711Fe_d#5QIxCEYzA zTjFK(!%lc%lf}a8T#E#3Sdf*boX*7Bvc)?)a0yl)H*`DjQUl95qG!Uh!?0+k!Y1an zA?B^^aI5|~j2UNUB&|)q;FD0RwMv>C3_E;~I~|gZh8vuYwCq)dQ0>z4zss*d+*DXz z*|Km*Yc10^X7od@_J?Nv6B8&}X5eR$APi-k`ki@+YEVUrcxDrNilR92Y9Q+E`ZKA_b%Kv>i~xL6nnA4y#5F;G=J0q%u5n?Ppzs3W}kJG-{Np! zY3$B?2Umd=cFW=1Vk=-VW%eF+Y=kc1ai32g{y>-NE8{a6TcFGMW6wSvC+IpOEc5fg zICMEFto6E+J)dJvl%(!o1zm@dbE+O(f-ZT{;^=oIU`;fFw}&0DYTL`#%H9Q*=fUq= zM9P7+*0Ei_dY(J=rutYM4ot&+`#XK-`NOem^QjmChVkbuUacFTvvtpO^xn|?^GU`Qs6Le7OTI&cip7>;-RpiqaZt;WrrA8m`*1^f{pQb* zbv#p;?DGne>@&739eWE=N)a379yx>0)*?IGp*p-a`?lh(aUVXs^Xkv}W%8K#YxyuE#MiT^SktJS>*WX8(zw|F@6(l`L$0v1-=UYP>-MYZb|>)il>&y+MrB zFRKDPD+nYQjcQ0g@PeDVCB)gOCt986aY%iA0xH z?&-^ANYXVb?LWN=$r3ugH9KD*xnH{&yt2|DiZ3* z=+bX>_tQkCWO>bovKC~TYo%7b;UM!CYp0a_7G&nwCY%>Khs@^QDlN+s{br zBlVZ($HI*Zk$R$6F{V5YDOpqf71>vi{C>TJWbwRi$*kJcw;V}!qo=ypnIZ9k-j7SO;^YX%Q3#BVRr9Y!*z4H46r9kj~Rlg#z+7BL*LSzrinn2?1?>cVo!;rbM z+9AJdKjhK{c}oeNQ26J;yNJYlP`2gi?nFl+sFGj%SpuY0n(A=A1n(C%F&WUA8aT9H9#+z4%e;qA(yhCcB!I z`2bPn7U8DiOzkZtQ888;3CMK~e(>yBGM$=1$llc@r#mcyXF z1_P*M^2pniQ$RbqtLu2tLZEec8+ICf1iGqK+2f3(Kz~#&HrX(*AFPh(9#n@;P3858 zECO@}EZZ4SF+Z+)tFZ138#;$`!Y`>LLgzn?->Vodz>tbxH>hwA7@L~zZpz#>ules@ zES%?{l+(n`@hs?^`+n5hddqy>)yNEy>+|cpKkC;mIlr#&n-yLD(5a=F@ml#F&_9~{ zWZF9dJ?_1Do3cC5cd68_^Hu;F)o@36{dS<4`_odk6T` z#$V5%8rrAhd0Vdlv>6(nqFvnpEiwBA3=#TiCUKM&6i_bba(NWscKA# zd0@8Ano-|(n=oHxru*&kcx#+YT*6eui`s`6F*8Ur2 zto(Hz>pRzE`tv-oF^neoqrk!DeHtDvXA`jHMGh~`$p_o~9roCGhGWN~I>PMz7R0+k ze+!Gukq}_9ApiMEB&q~mG#p4rBCn~1<35C>Ys8w4(ECUhJt+|17mwtp>i3+_MImLQ zoLZFV52U2Lwpdkg6sapL;%DoGkm|4bHp5{UsRNfnBc5DCnp&6G$<5knR-1YrANK^s5)&yKW~U-Dm1aNxCZ1 zuWY`2B~cCO4u6wAi$@~eAf9&i{VdWq{!q*LG>EjXTDON@P9m+*w{K7DFw%TkWpO21 zNKD*u$u@wUxK^&Z^z-ZTQKVjBiy-I|f|)FR^amzzkDE3;kqk&5IL&z-56 zDM((y%JbaQi=-fl0l{4(B)$xG2y-<>qK?B#g1HzHVrT!z@=NA(tLb?m*%a(Jaqd{F z;r#vfyjXsT6^N~-*I=c0AT~F38{1Z!V3SO_LST^$Hh428ceoL-j`)VKpj!=VMTnaZ zt*pgr!>#=;=W?)8xM})T$3iT0Vbb_ z-EI806=MgMz7OtX;k|nGsq1VfbbAvj=R0Wu-a%`2oO?e7;mQZQQ#qLsAEJFK;F}ku zyzH}2)}Mv!buVjtzaN3T24}lPyN#g8=#8yV%@CAw`^s*2pMy%HI?C@8Ic@nUcY_mYuMecJ*Q%WDA#U)umBYuy^1wnCu1 zi3((FJPuU(rrE!dWT2i1UsTy^4b*_KorCXff%=qtNL|kts1$R!-8^+%jb|L9Zv1>bYBo8I=qJyCQ#GkDP zyl+73+_Il3o(L@&g;n*rV$iH{HD;k)KQt0VRBo*Ffd+jUmBjjVsB1kjy_hfxwW?>` zV>T2+b;6I(52`nya`K6CUW_`Fm2P`;M8p`1?YHQS=T}4izh6Q|>USY0W6QK!k||_d zG9}OmN{|#c8ifUhdN=-=up_6|DI!k>LOv%LOvF|r;jF8d1G11u@}D= z`C(;Sfkv742v%RHkt5K`u;xQbAa-8HIwyB_n(8>#cZaTC=huRbyN%w4ImTntLseR} zQ8YFWq@KKP_6l2Nmfan*@x(T>pRZRR;A8uZHPH1Zqp|T6QE7_l^$S99@sZ3=1u@%4bNN8`QSm)QlvX(|nP3E|Lmsqs+vPBWZ%1 zSWk&MjjD6+Hn-kaCnd-K|_b!?$f zN>)E4N)aVVML&OipL_4Q_dfSL_k5o7#jcCCFP`&;W0z@Rj~#_Jb`eyDtA5mASMx)P zC`M828Xpn=x!{FeE72U}H&3OiF5tC^|&u=7rF zBJEc_>{uuMsd_?-9r4_oFHWsu2j7ih>&pAsj@;8(WJcI7f842iqz5t0t2OEAYivtw z5xJ?(hpmCSFZSJ+#+JwPr)^l$u^EP|o>pAPCc09bR(Hq77nGYFbTioCZzdv>;(_&- zY~;$Bcd+&?v1~mt5NquFZ+!O7!)jV}2IjdntV-Hix25#NiW}9>~7MnxX(T0_; zQmv4CT)O*-S0of1%x|#u(}bemX>!lFhoN-h%aA}<4OEosEsNjVfvWoX=)XT&p_+at zo1ab-Y7A^Pcc#ptwy=`+q~b8tEeIB$`auH?OpfAo)YqU8gnUwnlApAmFkzGQL2lnpwC-ur#GIsu*BsKfYI z96Fg_DKSiXKqoopk$=9=pksEVEc)g#=xCfVDABwI9U)W_``CTH`AEz{!kuOLTip(*XhYsmO|f6cDC43d?Cd6?5QA+C5-*YQ{} zg#A+;T6pdP-UWYsBQ3MQM1ua&?IA0COf%g?FXDN)QnQH2 zXuxERBFj1nU(6V~l<`!{8FQFlC6=})VqWLF+Ma3wEHpf=e9>(li`QM^|2ujd%baJE zqa0_kVoi2hGsG0D%2dbb4lN>a+;>23K^&|9UN&YC_Q%>|KU$AE@L?V2T`n>9(^!9T zR7YIE5F7YT5R#l~u#vTGG_#o+NqhCbDO6uX(tOUy$C6=esulFqkqpIV=jMBtTJKH9(^tV#3fOjl;}KD+7u#aeX+s*e5NWcv2`Y++cC^+LdYgzZ zYC@3V0=6G$7caFK$9BH*E89wo*e;u-ThQ-{?V9dd&)+3syRrKFUS3CRf5cf|TrIUb z-bjiX^v8CsZiS%E6WD$`BUYwP9NPtASOTtwV*8=eII*le#Bs9a$)Np+Uh+z-FPjjV zjZ3$7*V_twXPu8l*SR9T*U6 z8<~TA=MAx@%9C#GgdbLC%gK~nAt5nzrbdPH-z z3uC12pv+%q3^qArcfflN-9t4v6+GXfLE1|3?2aKk>S%bOxvULdf9OogH#Z^VPd{_t z*lCDa_bT2#8wCmPJksm>&qFF{D0~q=LYDMprYanUoU9_Pz(cx__v2>UJ@frgc>Orl z^i6IkcIDAsC|rcnlEj{+$0woug_AX_d;wMKQ6hB$`+@kCl}nNB2vpBX zW!uyCLrs5zB3%UmYKz;~{&W2ab>3#-HS=RouXxSF?!^IUp#PkHlST&`o^csgKC_2L zhw4qj1OZ4)vbxOrH9)E?bWwdt22J9bf>V=spsD$f=b<-B&@2$;%%1~^b@$y;c?y9m5l|l@X~bRi66*R^t}|{JLhTOKIfgWqNs}R{wh0nWRa^yP@ZqS#pT(gn=?{(?7@_bI4L55PFXSI{>fg$F13ByCs_^O>WDPQnceOP``c*Z({Zs%+ zZ?>t6u0}!plS2!SZ7xC7&mVq*=OiHLu(){NGf!~W2ut&6^8l069&9^tPw)XLBKDNT z06LFrQ5cdMFhFRW#p3l-jQH$d$?x$R<78!n))%j0Vi+&q0hTOG?c^gi)wp5iQpAao zo70&6Z$LkQ{2S(x-`Upw?=t59a#?+3ori@Vf>v@*8enmEPAhW;BwB5!R^p*|wyNciru?KTjl{+7b9K&oT;k!$F_F#rn zw2_O)1g6wAX-h=za%?%6r{07K<4&i2yw9tOkp$7ax=1w){H*rSFdzjz-3p9OS&5<5 zojJe7>(M~*cLBq{NP$(Cf{^KS7r{7#tbcP(EyB7>blOT8cngMOuX~=ioPSJYk z2!#h%D8kGapeXUl@srlIP;%tmM+G@qDD@*M(J>4|*`kI3gY`bB5WiK#qe}*rzT`4l z%NtOoyC?Y;RV!3|bErSnO#q_jY1`bxr=XhR+34hyGE{rr4j5-R0M+X@@5%lILyi6k ziaeP|P}9jeGZ#+JXCK=mTyX@LUk~w%hbVTs6N!AuF^pR#CR3% zWY$_BGVD(^(X5230O1v3;wV&pIyuPoSsp4#B=x^%%b?urrDB|CJ(OMj*;L6JaJNK2ss6!acl^e*nP-|4k;5?$c0p!HypQ1-62WN=8o{|3LuDo}J3fiu*9=o(VSj?p=-Qj0St(R@0)LB%M6<`#kiV=N#E^ zw8Vhgqzt?M(5 z;Y=E4MisxNJ4=q)=b+`Iq9f+Glu2-#jAL#$fplH84D+enMSj0Lfd%3pDk{Y@vG9?W zaP#qgEDAC^-$QPK#i_;jA4ij8Np3BV>O>`$W^%pkN%F_Ch$k41j&);pOSdAkb| zCC>fczsm!nWt(P3#{v>}TOgs$OeEH`M+Mo;AaQ6h{*RR|5@%_K36&B^T#5*eHMx(( zFK)MD(xi~MFg0lWm}|H1Y$12*VL@Uy&!5fwlSnL*Sd0)=Lt+5!)_d9zBx)C1P9A4M zBA1AHoa;JPt&RM;^mQ7mh$$-p6=YcTr1724(yp?qP*$oNU}Z9!K4tG9R(u3q!`V@+ z;L@|?c@0>uKa+fQZWGJGxOB>erLnZM;EAT1EtYij1Qq`9$Kn@T(&Yc%W6?;%V84Yv z77n=9GIv;DL33N<{bnxA&!_ay9ihX#z(JR%jW03RFx8sV_y*=&{_R4(c^b3#*cKZ1 z7-44W@i>lax|q&hqDLe91XFVBM+Pm9W6~*YhCx|lBt%v}8yEJ%*gvx+CFA87Z9=)0 z+)cu;1Q(3B5Q2gF>V)s+#^`f?nisi*(CNR>Z)yIY(frH#%nJ!Dc$-xH>md6QJeYm< z`&r{bu(j8w676OOw`59wNU$Y9sh3656Y^{?+}{`Cbw z_MvoRqJA;t?1?J;@%azreAUhooKS?^q2lZd{W_4B&l@-V^Z?}BCY__|q=f>Z{MWx| z9znquMuuG%3WbRUGD|wUbt=a3BdIeViiUN2jxa?+u{L|eyHIKS7D{U(&sugH$3?Di-6f$O9;Ehx=BK(I{Tg3?Kslhj>WP)60;X1{+glyUsp zW}q;KGSTA^E1HW?1{d$oUpunP3l%LRc4H{xN-R6kz6@mtPU`t2+=kK*J7!n2&O#~C zG{NQZODMJTG&3su4W*n8lpf)RP%`RCBYmhFN}j&-oJw7Sl6|GsC#*g|F+uU*vquq7 zeC#)wlH*e-iu^q|!8r$o+o@*jEP_yI%%k^woB;}OJLc@AzP9Uvqz{5Qq654Bw!#JrMkqeb(r%Fr4zbfm6ljqUJ9kA$bSq!@qn z^M#aFEI9C+mWyT6AaSqd4MfV7Z z0A_r5{QX$V3A5X2;G5%CCLKoISVY{Tr7s$C9St z)gE2Uc|k3dcE1&KIkb>(|bPdGw$5O%}#t?qu174g)pjru#%Fg=S!`X1v0?-8#?R zf9x(_%5%(V6ek%}`eKf*c&Oo1Cd~e$WSe98boX5~H4`-7F`K=Rrq}&2W>uKGu=dhm zmXMTqfy5)sd^pEWMG=Y_nqJZ$o#ruJ>TAg$dj+PQ>DJ%gmcf)?Ng6H==P|jDibK_h z5tAYcOJnYIV4@<+nD>S!CQ#GK;Hz4UCmq~5?3syirY|^ze&k{-{Zd|gu_Q*<(R?ww zFNTrjnVcPQVHozM8=TzCG2~po-21(|{CcoK&%s5FezD?3emJbbTN5g3^lr*e2SEO9vnsH5HFkdhT*qu18tq9VGv`A9!WID zE<{IjZ#i`gLsXvj%%a>1M6yjQmU6~GctU+kE(I%uQTLGxMyx@I?b3*9=?Vmm|4~$< zQGmc}V@a=OdB8v8zM*Da4*2dUIh5pvgO6^C*3sb}@Nzv=^ZafpxLINq0%D-UV0M}q@%)+TG-Xrgx1%URkU&21$d&Z^u% zYhz~)nd9|n$LQI7KT{j+4H*5`sQ02{T+=%q78i7`z=$v5Vdz@rz3Q`}jqXWShgMEY zpr@o}QqXqP!){msL^+vb$s_MfVt?25weOKtsFuHIX){!M= zq0`ha#zrM!bPRvn`*^Aj9V8etJD;oL)3vr+n|n!Ump>Er_w8M@)$MSv>l|Xxke1s;|}YO*qoP);4m>AJ{8TEVF&$ z2Ohh7hMMogK_F)9bcA>_Tr#?P?ZBJ`2yySQDu@lkrLX)=E;}wDSP@qEp7jp!&nUfh z3N`}HCqs|5vr2(&|Av6-njh@Fy4X1BJc0YDqS%8X1dxN#(B<;X2ns%*SL)Cl#H;#m z9}KNiqSSPqg?IjUl>JyNHaba#3U}_^IH0|O%4F-u-Ft#ijiSP5REHKdE>y+w-V{M? zi;6)njTzJ(lDsf~Jr)h}tZP)b_Mwr5W5uexFFw4kMa-$2MAM^}=BAgH@X_}p9J#sI z(CiiEBRW<-d{RTTVx{#KE#r=|=GPFOxFk$}F0_`_1yfyZZMTfSx6qf&b(b4@^3dhq>bP`C||9f5voyJ@9 z=oiA#+1`)0_xy8op(M-f8puKyKlSd7mKAjQQT|#aQV(6#MGlMoi$d2zPBR068FXFj z-8t%#k8X^*ZKjNa=yvhOvNgXYx{18a)e5?UZrs7@;elf4w(o`fU{pN1zUHC%PH;xo zkV^ym{)wV1r|-0--#EGu`^bCPE}{!ZV^8cR3p)F-K0o!M5uJKpF}poiL&uHUd)dOf zdVuu#?7s;d5oYJrfu-Pz+8jPJ)TSc;fxxw_twe z1<@$139L4AE}d^v2HQ2Vi{1liU~eJuzGzVr99QoOroUPQ7pH}<-%l%p`<^Jc_|*%0lkOd?NUfh$DuUHC3^ zUjm|8612u%8bNgS8~wqX4ALYvi2YC6 z%26X9;;yGP-Fn9fafH$Lb9)9MZZVZEDL4b-FBWp>xlKX5P1OnZJTZtbwxvFK{V&8% z6zQ~R*#Uu^>FDDiYap-&%w+712ZC_(jkJ3;K#&X=FtRQL!i@&r)rY@_Um7(>*f&C%@f+CQV20uu8p&(jX`u4JboB{ z7NT}aWUfL9L>9{@krZnnLXvc3X0{c=dbDx_E$%_+m6U#(oTm_+xZ(M4NErebSC}1M z+<|~|^lS+iu7jV-`niRW9PqKd8c$1P2QPBA@0OSTfg7btlFRWmaQqygIr;1m*fq+E zCP^iL#kA@4EBYFEcycrNTDLT)n>dj|XWoF|Sr6jT3%gw8zo(E)TY?5!Ck4r`0SF(%?#E>oW%#?~A>x0bVs zaj%Wcu76y^__e}xvIR*@*sIXE=ddRx9`8WKcm+&4<9wjF&;yg%->35E-N6(VM;Y(s z4oqbzIrJ-I4O6!^J&(BQVcNuGvv2BiOs{N<~90(LmA1K`R(B$ z8asN-QgqDAEnUH^G?oq(`;VCQ!J(M=r3rXnT zM{O9YF#FSg`r3wOn6o!n>q(6v=CCyWl`{Q>IsD40UQJP$BO*f5ywSR=_f9m&IPA^` zPjdYU-i;e}VcMIsyYJ}gRI%9q00030{|wi6I2CRb2k=T7DwXiFLslYbY2btuGD<>G z5{i}?nb|9Q@9b;4+26^tV4RTI8@`+E+Ej-t6s|x?Ecx@92vu^ZB`_qf9Wl&(ydz zwE>fgk1C|@*1$yPh=zgxq%q-W{|$M?3m7+Jchfs96=R>iZpaDRk1^umKjj~(U=(@V zQVZ=FM%dQ6@m)8?rxpUQ1h(>Gu$oPM!{|E<*xkR?RfQdWo+lXTNuNTG-^+^@8iA?U=ti2$9_f^9GAGulI5u2 zF3yZ#k(vh|xeTpBkGm-zE)+@Jtab+u>JdN6@NDrl86g-W^+&& zqc5Y^&kKcCecyjloS^Wa{Cz)XZYY?yiyqd~hl2DZoq4$hC^$=Td~sC>2yb68i?@vc z!GZs?X`C43|4fYISnh*-rw7NQ{hmVJG(+`V@C4*()BZ}_z7M&DNnSdNVUY93Bg@(~ zA9B?5etZZvgY1AyHQQ$HLRKBUF#V$|WX>t>BB${}Ci}Jo*%Cp>FjzG`@pKB(Jo|sD zowA0M#B=vtyfh#wdpqlX!gWZ$t z8;(<3A&B(H`WpW-_(_$@m3e*#PrjOLT{jd#Gt%-^)q4C80N}nBYlN~B1 zZ{BXlgoeJftiM$l`#av+`h+@0%W~;xv$0}W{;a~-l_(4xCw&_h+>1V&=7#$cjL})? z-AxwhA81)HrF7eT3{E9I%C#-4hkFlq=YI8m3$D*M6zp}D0N-VqACp^aAY|iro!%G< zMD9L2(DU^S#Du8~_Ft@o_^|DUB|mE*DUfo$No^0Lx_$N$jjn)cLn0m0v^in(qh6!ft2N5mOJ5qq^= zb)yRupIaYrs3;ps9Q7Sb!%LwwL15ZToe#=NhYSv~*+6;iAI+}qtU$cZsyChx3B;F- zF_u?7P@%apW5YKF6;)2__r5NMO8y@f`)FxU>2~p#_8t$Ye4*!ikRbphVP^iE%{w4j z2XHWt?*vkTbx8Ki86dsY{Ck2C2jpFwGruv80a?NKPijdWkPS2c1_tf}@&m0+9{VJK z>~6CvXs8cl@6RS9)G8o*_8xJp9{{q$I^{{>mq5PmHZwTm0^~Ewn*O^Kfy}23zrC!0 zG+$)?f}#N=@~zFMcn5&wXgRHz$tZkfCa#Ln6Gw1LY&)OtaDuPF)T{%-r6UwnWv%bKQK6(uM=-bTnz zkA&jiyv^5Tl%c3n)GaNn6$(ww%rk!20%7H{Xhgs($PWutJ>`56^7aHSZY`>UoXFW` zrH@Y`d&AjhX>FsBdGExf*zXdMp3pV&?yxYVoLgY?a}0-sS+VBT+Ej>jAB+~6@`ETA zOYL->00>#0A4 zUscvJYSTju3H|$B)}9litTPsq&VR(XEd#EHd}=W*9cb|)1#?qA82GDuV*Z7_ET;E;knpwUU5BOv7RIiW-b@I=;sg6< zBA(sDlA6eUU-k-O*=c9XvhA^0PLeav3SdKGWZ+_{Y%*5B(O-J0Qdlv2@laKNBvyuo zJP->{LXvpgzBjy^kW?!X`d%j=$!CAny^tM6a$Ec0IrbW)oHgVR@!>^EwfTRQg`8L= zLZoEw-;7m$>^I}j-NLGo^Fj^|6<95OpwNA31*>hNg0nts!|GyP2_d`aPC)Iec zhE?-u+}nPv*>@pJHLe3|6b{X3pZth5XQqEE-bh%hro!~tBCI(UJnuiri#5Wxb!1+D z#+r3sQiII1v3lrG{GiTmtj>|NKH{f{)s_>bLML`&wSdEeZN(~B)jlsEkaiTS9$3Y{ z^Z1QboBsWGR7DUe39pVzdaxixkau|dRTd;C&x=QQsv&uYyXQLDtw?hDdn?{J0V`h- zY&Y?r!pg&BMd>PItnj;~_vXu*tDWCick&M*aeKL=7)#!om-PgZKQdVIDYcWpb_|Qv z({n=p9mc|lySvJpt{|bKTs=vh4X0RJp)2Yh z6o^e)2n4dTw$b*LFF-l!mFC@R0F)2c8s@D9pepgHK{med!L$g#_TlIj+bgzD{Ta-2J26*3;saOi?~RZjs)sYPR}5{ zS*U}1a+DcCsB^cW8h(BPb;S!(YK1SMuD4(B+t?D+eb_jCb3hjAe%uS`<;jP-pUbZ@ z1NK1OVyerc_XVgMzRV*S;16|G0s$vqC_`P)Z-VUVGpN(~70{*^4|Q9_G{ZDb1GOsh zl_s>Uvs}FLe_@vGw-B}Al(s`mP0xqsrQMAqt6_~?L8MWg5?m=#GOUa zUxk3far7mfLU0k~Kb%^w1G@W#ODi#iO z*s{o0VF|a#$AR0!Sf;y0t%}PNiApDIqZ8_}LdPun(rX#4H2gQ`oO&BcSF=?bm%bv| zpl==RDW%ClG(ui`(WQHS+%l=m_IrdZ#Y^pfj-E;gv-5LOnFv7sg|#)|BN zjr$I^1!=NkqtB_7Z5t%9u`eLfYGXel_k`aMkvv4*{SB*@U5JlQZdBU+5i#y-#TBvx zVy-H)YkCqfpL40e+6OV^Mp4cYHAEl21D`m*BVIf2>zQ^5QG6k)bNzm7oZ{LoF~Wn5 zaeeVFflsmVgrdK*>@95QvE#huQ-KXeQECS-+F*TubC;;B3f8Lu-`|)!SeJiDF@AO! zsek&qer*Xu>Upb4o}p`48z{T7sW}#FYMq8!R=#2NyAXROe;!t?V$a894XoO2_x@?z zI;8Nf_zoD{MKTX^TzoKvBzEzq{0XU8v68H`TQL=hV9R=Ylx zc4JXBHOu5y7Z#lDlS(?7jd{&we;$TOV$SJne!&mkVrKqiYf5`Erg1cG4SIeO6Iwg& zr_Q-yw5_Bn+dviubIU%sME!?uE`ceS(LAF=I$-=y~dEZ~#bJVRK2;DWNB*8aO zWMh*Ql-mU*zX|V8NNPj5-^F(kwF5x>mpwO@?*Nqw$Au)^z5(gZkXSD`06FS!(VV&{ zP%6a^neH-xs*X0b*=Q4}etoy$=bd7xc^kQMv|Qa2u$jJmTc3 zYk~S`AzbR;01f7XVzdz#XcTAX!O&7@d=q!wN+AO<$fz^&83kw@zKvbRdw_P0@H@NA z6lkeG@){I$fcEm@v%UyVpl^+c{D=B80s!}caQB42C5k?sxRU))S8vQ zKRA~FUO=J04K)TEw&{xsLA8=-@SJ!QRPpA zQ!An3@FM-iHw7qfPUu%w=Y~?QSKo-Z07XX4aq3Y)KnQzczAQNkxs)S`tZBKB)zA6( zcDn$i_mE1?wtGS1jL**L>Sc)jyr(B+_ZtWr`6zH=Spi%^=QXt087S$`uK#C;5V~@_ zl3Nk3!{F+hPZTb;VvM~32QLQ`lYCc`4hOAZM#T1j%brr0eg0!xQ20FNsZRHJXS~LO z@|foZGRCMJA%Z{W22oR}Z;gx5J7T#o0U^Qb>~P8wrQRsS>H=v!p7#@Aw#$*S~b*#>Mn_r!-c z_!u@xCCNJ_U&5vhdd<4`*pSg*VNXrgLPlB_r-4u(GOkz3X=~m^2Dj_vxS1=`TNURI z9ovs|JD%{coH(TKmQ4~29zEb&DVfH#0Z~>E2(S##z*;b{hPps2z+z+ zx;xgpx!#cs_=9yDO0;^SCc;yDUmFlTy|J?->W^Ctrv@L41HyY3t@qplk=++M=_5- zpD(;S7PDrVi`@@KG2QsOqmWx4CiH|g#il>TsN*x`zC*v!Ps(q;q1y@XTo`|&x$FWD zkE#XT57h_%rM6N((|(ASE*+HSZh*w$Uw2BYvmnEJM24eW0h2b4U7S4#^<~cq*cqUeS8~RQ`~v#XD^yry1$ssE`JD&X0YkDmEao;lFcO4Ze%6=(<4>wg zW#tZNGGP;Jgdk|DP!f+M|AeN0ThqesodM=qjfdN}$pO>*<$;&Vp1>r>3hxow0L*cV z>v@kz(7gU&&y3C-H1obwrTVr(^ZvUozquYjvs|O3v`P^)%M7sDcJxBCFky12oei3| zo%DJBmlv1|Vf43;%z()(j85kW2WD*Q#~#(+z`W`>-pgSOOm1~o$wzDF>5%Hy^(%#@ zMrl(szs|I5yuoFo#K>ugLlbJjG02exIq%Ud$nXQR>=uWPU=PmS8OvK^U%n=E%m z97AT6B4446Er+&yN0oMA%N?S` z>D&rziI4F$C>6$*+T;bg=~ry&uh=Sb;}o_`w)D-s7QmLd9zrOu47N?H+kvCDMHHoS!`r_|a!1pZ<3ufMXc>nE|fd@@D<=wEC$ z<*=r%@*s1yQ1{Ehb;wNYGPrT-3Nj^gm(S;r6ZwXC_f zqxszJx-q0X?3^&&>wvT#L-QZgdPoy}Go&DphK=Kc1Lp)BvEg2#^PQT1ST~m%eBgF6 zQm+L(pb~duP2*~{qt+g*{;%rwP4lxzvAQ)qE3)QULBsK`lFwK%5g?iQLk)?0yc+w@ z_F&25De_x2ek`arCi!K%WA2wvgtoO+&Po!M)qpmA&T*@R8fbH}mQ+aRfVQU}D8KukL0eLoSMH=fw56!37kW)VTQqCI z&{74oc?^oP+{uEr>tx=*RTF4CQq-QBe;Qg>TTHxq$DtK@2Cb*Ypw+3C=klHR(7Kl~ z9NEPMEi}WpLv6pH#V|QYbDt+PPf#*g7-VR+d}WzDrw`0gh3~Q!WMFDvs4}Z0JUj;&tgvOf$HvoCY7WMK>1oC!LDuqWcFe9?Aj=(6h82)>Fxp$ zrM#8huZ2L#B@43_x&RcYsk&bMGY`2^cX*FM24rr?IwAb{BP0^Sjk5Tt5aHZ@y}M`< z+&TC*T4 zEW?qye9Kx{<|Nj4T5O<*EwAlW7iYsS3L#BOCUh6)DAN8JE^d}udymi63ayq*k&zhv zV%9qgn~Wx_MWVkVbLTj_v$j7nQC6_zkqtImxlJzre26U@TvZD)9RER&3pC z7BujQ4_h-D-mxU|V%whDZ&7_=*yhE@S0rGDZKH(-o5y9a{jh@Ny}>bTcTbw%deQ*f zYYC4#EW)sTK_%DPyAM0|ToBM2am0>;B~@Y?o3KOKz~kJBMC?#KR+F_lj~%Bp{@V8} zV24E50e^wN*s*zov-k!FY#$+8W?RT%dv5s)>zsUSzqNU$s?P`8_YCrUfH`cV9uvA1 zcL>|AXicvRPr}w|R#1@17IahY6V{>h2iKDqBHgk@O z`0)84^Y-l!C3oR9*X&j{Z}maON3E4nXX09}Jbz0!a{%cV8;+P-h9J#(^JAO0YkRFE z+leQ>hp^$YyszC>HLSD0B&)8`fVIAg#vdZrpAY8v}Q);0SBwZrj6 z?B>l--|_s>7h79sZ2WO^IzA3)m)Cookh%?Y2#S{WG6II!Gb3sC9%x!WdgG5SD>S`) z6*oSW3(Ooj`zmTbG~f1;E@Rd~i?H>${@enz^d>YfZa0BeXOf}xY$vpFJhXpv;SRLr zcszYIathk_Cv=U)bwGQr`*FjWBIww&(6mES6FOW-0eL(=(D6KtIdFdqbn?4%=@uwK zr-_8Ueqa!EMtJBvH*0`SidiXl+)?O!UMshgH32$DU4-6|#G!L6-0Qz00(AB*?+_($ zK_``XNo(8_I^*eyf2&SHr{&QfZc=m5DZ#J(YL69kj67Aa3-g2y|E%3H!_&|q;x$v0 zrvUAh+PAB1r=VTo_|QSP2W>?A^=ixW&?a<5kkI`ITD_?al(bc78P=+lTHu2gap_Oj zXlJ4MPJu1g{qMlcQ%x#g#nb`!n@3gQb1z3NyZK9K*f{y z`)}*)hcfGzgV|>CP{`O@;36Idc{>;bFMkw6rp~*fqAOAV0{{U3{|uLRI2C*p$CIR# zqGVM{DytzyQ5+?d6&WQ8ErjB&j3O$8jFOZc71^@)aWB{9?p$BHW2gZ)^x-zDt4;v%ewrdex*%VHI~Mp^mM zB-XB!Vmu5H$NGbUKhm0avC(}zsU#^E@$R)}pZ^wNbGu5`r0Y{8kj+5!csLT9@<_i= zUB{Lp=5|}wPHas)I$dwZMv`w~@T>3**k%+nCEFN>&_aODGkME(&Vn}7LdH+_-8)>`c ziz2DrNQ*Q#zgu?^X{_Mi`o-c%Ulv)r<(wwcb<9Yq#tuk#C_H@l#VVwGJ-!>O)QoiB ziP^IikC5)cxVYXS3F)@0^J1e{BVB_wxlOGJ=?fOMyI*xc8i7iabU%wUzkOrxdd!fv z-otDB{$iw7hu-~kpb4pma|_mPXCj5P!qw*8JEZIz*mya~6+52!nG6zcVf*yxBL8pK zvE3|xPqUi^lH+^K9(NXFTl@GK;Fs5#n zk4B~TR zSVR+69x&{>=&p@rZ(>WEKm5f~kG=dQ6;H6ByV0iQP8sI(8H?D4O=H$)8w)#PJSIQ& z+?IBofpMheP7dY)crBuG&SvTcTzeeR>Ct%^;@(rdL=s7mTrTte5ibC;CgcW#AMJ%) z30>cnO4CrdA@)F_R|}Lr>m{3V|#V`zI~by~^Y9mxI;18*(=LAyC6@|H>-bjav>By7F`9RlOBk?dNaL_I7B z_fr6>25}(FXE9Kz_wEL12!Q60u(Q?38EBoU*L}(s0o~G-n!Rfo&@1v9l%DJahPeJh z!zG7-apG5w;QLEpBqqr@m&O63Wu>u>Wf3sGK_0W@A~42QxlsFd0b?RiOXEfgFn)Nw za%z1C4DR6MpVfPTQSeVaPL~3V>qSD|Yv<=(E9R)5EP?(>?}COA59q-TiXnVups$GP z_`SgpXb=BIapp3BCfYAyIHv?upL;hNpAmsVlRuC_xeOHfe&M{~X6QJ5Fga?c6tq9` zC!Wif0dixHY{Ipx(DtFPCrsEBNWXi>Kd*3v)+uwpzg!x$Ooo@gkRb!{m+0RoHzt7a z-rRiuf=p;`Vp;02eE|2U^JBjHLBo4v8{eCqPy-2_{EEZs;_5pS%OkLE@3NH=sm0h(-gn%)1Q0hXq`+7_Hn$wK zF7sj{VQBpE&WK~!vLd_T{4#B9RjwMJHi<&g-ohiM-=(lkZx;O`pCVaz2Z8dDhwbWw z!y4tkv166Nl4OTy?D(Pc);N@nl!im~toBBv-Wt_lORPuQo*$9EGCa*+fI(jQ?ul|e7l2(?9_%t%d^b%KPpFq}{ zw+>Z1Vv(g9a_HicJY;Fz)Bi$lN0v@+*7BizWND|K;B1~nmin`iBP#(}vQxP`c1$Ak zpVJdNq7^c0qiZs|%8+?6d7wQo51ES!GJ4KOBjZuue{enn8B(DNu}LXNkI1`7UicPi z1KA56UigYMgW?-@Lpn%}l2=%)6N{8qZB}~m2kaPj`swBW9y?YKZr&fb8QWEjjU0#z zk*xVn;pM9n*tSc`_~ou6NZRZ@KzyHtt>Ui9B=aUD4*4ug##kf}6~0G%8)9?Z#O-OH zUTn&hv3NwEz=n;26yA+_KE*hdlb?oR)xf8Mhn+mE(0gk2BtaKnhf|X`sei?ys8G54 zWs5O)Jj^bIv;(tG8m0E$^T1@MPHm3AJKi6DHTWyE1WcV^;H>UHB_hRYa~?^#iC=vO9Gj<}u*6o}pJRsQ^`}w`29) zKA_GNmnjH(fYxqvSLEtA&?By7c@FmhLpz&vcF8m_-ab+*dEN$0&mXu}b`+SuFIqe} zyAoKM@3~7a2m|W^yKC3PZD2i^9LYIS1gwe!uDW-mfW-_ybS6F&Fjj zLAe~Teos*L#U%i1@XOzJ4KlDky{s|m-w3P@Q=YdrqP`mY<3akj*1I>#M0P7?- zYdEF{SW0e20Umk4q?x^m*WV7zL$=2s{|yI5-sWOP#(H1~39US?{txJ;dj`Oo547-A zy>CV(fckp0X|?|}P}uvIRC=gG$2W`hldlz^z3=Jgev5ZN?n;RETF-$tM#Zh|lN*6l z8nWc__i<>w7ohxx+5j!K>Xw%;9{{3^>PC|CJeSy_ns=wC02g5>&*MHcoXBRf$u3Zv z`mg3!-vm@~*K0jAa)R<%yWPVNYT&iP+}P(;=}_o3^=8_4CFI0hShw_MI6TXgbTJ-E zg2%_oPtaYa;7(3}yz~wsyl|h9VVmWLvA%k;W-4l!(r~6W=Hp*{?s#=IRWuUwtan*| zD_n&o2kv?Z#pz>Ntf7JExiPG~wj-D+I*m2fPlny{&td&$*{vVARBRkDcd+9jHd}i> z?$LOTgdB}mx>b9TI82v&8%n@d?KJDFzOG2}`B$UpCxUHRc1tf&S0R}!mgNbd*xq%& z{e#gy?D%au+jUnPDZ|YM|E16SMW2U--qfjiuj%OTy0i`H1zsEMJH?UV|Hc2B&o5+Z zHEFxNPex|<^9LV)W+Us6{I8tMlgNse_?|a-2w4>I7NKvE$QJr_S!d!DvUfeHIVmQD z?2|+8et|cT?f=Hie`yV}<|XLr+%f5=X-`gJ~i z2-(5>^Pv_$knPfbOPlx{+55E|FD;Qnwz#^PiEse21dZg@CJAIcU36J`t1z;x<;Nrl zuE<)bsCb`iiA?+Jz5%_?$VgV`QrW!>>9ofUR%$&+`?Ih0_~2%wiC*417?FeT?|G5E^eB?w{$5-ey9V2eMmHZO$RWu;^g{oJwE6#4m0Wl*0Eq*U zLfNeyNO*j}_35RT*sML^^g4x%jnA&XAio#Gx|XV?e}b*B`t3vvP5UWUbmbb2@3qI* zpLa{iP_(cpXA5We`4`L$j@Xvj`w6p5qBabQm|@ZiAAWCZJKmXn5HGpi2;2!nzP$Ce z5P$BAk-9+&q?x3eDU?RR3y<*41=@oG34s4W163!rPFImpjIo8)Mp;w zp{;_pt2e3!j01pNdQe$JrU}}+N@B!&<$xlp_Pxs}7N{H7e+AV5ps7!8aKE}7=xVz| ze*cjLhPK5ped@9X3w!0nR#M^5?0`z@9QOJG7MvY-Yk$p@9}) zr;a<*jZA>;9Fu!nGYQ!8-sZwbmjjDdQ}XqK3b6bVB8g4gfF-+$net8+nCH|_$MgOH zBSQPb!pv1bPiED)ReJ+1!{c)Lqhz2a25y#j*b0=OkSp;KpP=J}@VXl9Noe2vaLBuL z2HJX>tv4p@08*-|GB0c^v>JJP6ALqe*t2`M#as^vH&vIsl>QHzMQ3+D)%yvJvfPmT zW__qzWua(8;X>8FUR~7}d!hWJvbjN(B$U2R&M`~3hWyDagZ#ZO;YBDpUnX)bq>eYb z2$R1;Y|WFSBMzP5=ydeu_qC=NF%YdRA18%RGjyogHSw7J*+5M^a0>I>nje(wp2U(K zTh92OjaaVc*mp!S6RRBTSQ|Vg;Sq2e8#5N=))|%cqy#U*OSVkXwJ^AfwYmXzlH0FNS_<0UTdF0#y`D?XL@4D9Nh6RA!i@5&gcBFy!ZuK)JMyx zu2aZX+p_TFfBMJ{RXbLgW`b<`wc_XpCy*oAxl=YF5IGiFmTNpNASdL)(vQa#k@L!Y zZ1++-k0EdOV4ofsmM|GLgvn5tY(7sD+%~MJLbq97m4e*L#~QS;%R$ zUYWl&134+Xs$Y30A;l1Z;nksdYETfQpG)_c?Wyvq!u96 z#6$OLCSp6M{MkzC10;ue)c2@e!8TRC3(>e5TU)ZzJHIPp%kjIVOC~yz z@J1tVyigmPkGsij9ag}`DDJV|z9U$7W-c&Knu^t12DT57B(VI8ChJX2H!46OYL%>BA-uk6b=+Rv5-PaXbm_DLs8M_{>MWrK_2*AX-nt?SP06!q zKUu-h{Ka!c^rFu|^vt}iPLiAV8)mai;!z-7+`Y@PuLs(ABELQxwL!afl;-uB0O*Jn zE{Qq32q*%=>|e%w&Q?oLyxgw_^n*?k&QemqaQRbg;h76eUkFpI9st(9&MWqkdx2Hj z9oU(%71$etA5VC=0{fmvg-?q=uzP%!49~U$N7tqB*}g_^+K$qA#9;(=@XGugu;8n`}61|v7sfP32+GQNuv;?l}$VH2%Gr&D4;fnFlx&^S_k5B0QCo%6|ZJXZ3^#hYWzzZKodE2Aif@4w@Nw&2nuiiyYp^8pvb~2{|a|OeZ5coC%a&%Ih%jM?$QgWm~qSW zXm|*(quo*^=FULjx-T=C3vJ=0R9Z%%x-O*79ocA;kp=f7!nM9QsG-5-uiL8*-NV?F zi4$UzZJ55=*}-p&fG>02>F>XH2@C7OO>WiC`}dd7FP$r!u+q_b$zhipSVNunio_{w z&~V*$vnmSlo>;BCwh|KD#FML~EwM#tNb=K)4s3m7QhiCq7Te^_70eYGNKR7yv8sZJ z9gAhml6Ia$iiefu?3gK1QReIr(-Y~7D@!7drXmAw2JI6pN2Yso+^BFRvJ8d|`QN@H zi=>=7&X-2ELCwwGChw75?&`n5Hvl>7zEzyMwF)`GB4YI4rO4qv*rIffh1`v{nTf0H zk$X;A$&c|8xv5>Dc6M3FrJN-?9{7OVpYg_$YmAV$#H!;&;|TI(k^+;>FClN8?c7%9 z2gs9-2(M9HfxN|PM2XRz$Q?8ut@4RSE~%%V82uKxNit&{N@>V-9R9@#DnqVJf{JGo zA2}V;r&)KykmK{RXxCdc3SkGZY3JX%*fl0t*SLI3?VA{^ z-mhlSB^iO`g~}haG`+A?^4pe2GRN`NhdZvqoD9s0aJZ~T&csAh+s8d7op}BGJ4?F_ zqj0A#>)ivYFg(@#R@+!31J6SqZc}Q`g#3>(0i@mM;I+(hpZ{D(prZPOb#izq)K~EY~bRo05B@9V{R?&jgqbez0!x!l?rD73RHW^A>Arg2^ZnC*XdIlj(&wz}w(vY;pQ7@T{USe7hs?{5re8n%V*{0p7A~SisB9jWeq@0NyJR z{^10f`Puf|x3yWodzkPcr*IN@*W1{qRC0l5IZf=`Z4bQlhU*JlCxQE=Vz-NS0dSMO zG+06Jfol>cxy9@`a0U;>HWgk1PFRiDWb$L+NNu|PseU7{lj|?GjDH078bZua`aNJp z28wD$ngX-iepyX!05EdQ&UX7=0s4u6#d2xIK%Kb1`$1?3G3#^BAb^?~^0>U+KO2GIPmkv-WM3{6^+(c4EqLtXlPHNQGJ zsQSw@2+_-c@kQni!r^;>WS0tQOt?4IkfK911whiSEj`_!LpCH^_$64Se2%DCHR&Z)*Z98 zbKCg?8^@%KjtlN!GwHSXaW)Z&kxDA^d{1mO=oe$AE<@5U2@PGg5|SSl1Uc#ZV23gn zr$5&qrSz4KsX;N))Q?G;C`BPXX^j6$b_^NA?4MIEWMplSh&uCPzV9?hy-iV+N4C}a z5(m-w9Cp4*lW^RQ9LG^bV`ZCpZm523D9uE!!5(J+nj^@~7MP_4aF9F2w`w;sK%U8L zqDcY^dC{AnC!d_>17YKWfE+;H5L4$MI|ljU(z9#!2#~M%RWt9yYUHac&a@ulBVUEi zG+EPzeEDy_d<;XrkekTD^8v{Fa87t3=MeG=`VRC{-yqLNoOfP$De_eQ?3$bsL$085 z{N111$PEntvtw8jxsnfNmkk_3PUiCIk%n;OY|<)ND%^tXRP*>@wV%iqd&&v5RYjJM zo1CiCZe*scA~LqDN5;XT{0)n2koNY3j(<}zQqQo@NKy!BSj5Z zPL?TkdVU*AXp2>ziOpf|-)Bt?rmFaCm1SO(`%!#g%&ACWyWw7y?nqyU5s2Sp!hLql z12O~4w6eQIAU9wB#TVOpD7pWOc--{>lowAcQHe*OI<`MPix3L+E-6l03F&~F2WleU zYXiZ{`4(3-23qule*Q5E2a@oKc8P0#(AMO7Q>VWa+P$|p*F2O5%8F70s>T(dX0PcJ ze{l`yTYX=cio^jU;CKf7 z3D~`Kt;G1#i9F!Nl)1j?p3nJPcg=Bn4De+m ztt@MOfNwtNQ~c8t_}6{t+xGEA9{coPL)6OdaquwYKzp+Xejl zXTMD=CjsB{#zTUv9q=JKw7AF;_@cSwl+{DPYx$|W+OQsY*FqhC&v^k)?w++2MH#r| znjK!jFXla_reF8iTHuiEw-;+<07u`#;$zYYU>Ekvsx<5Zw&Z{23Q2!}DyHbRnw5YZ>x}7-!(`S&%NH)YynsPERR{6u|X*<3dGXv_8-n{?Kr!akF z8Vrxi?X^bMNvT7|%hHg&_^z;C&rEfuc- z`OIkmZnXz5M<@S$E_=44wS$xC8m5d_vV~ zVdVdC_q}(MkAfwcd8MJ6D3H^7K0{*ybCAymA@ZF?!;1?y1~Q94N;jJ zJ9P>7E`TL#%|L2O@r&%BRBuG(`_7+E2^>F&mr$c*!AO!#DojOEL< zEwe?D79f<{X|N0_-2GbgL1*kx$Q7yfzJ_GS19bHK|wcRCAS%|Fld z?#y!AkKre%{%56}A@H!>kM>YYcw&*imY&lFFE;$UUa4&fh4Io?a<2iD`KM}q&SpYY zdZYa%w?U|@4ws};&Os9~W)m;X7YJu`#w!#Bx%Jx6 z-s8U8k^KZHIk&o5p=*G4(p7lG%^&Df;-c=;qQH!fzTvz-6j))`k1p+V2Da{IXOUH# z=6gv`vU$5XaPC=G;km8ARS-S3^6Wex@(PTSo^1!7YTu*EfmYyU_zb4k5`n*XrtHiE z72uyU+owo(0e<`V4G@U#kK7Zl1AMZdzi(eG@NaOV z8bU{auNb5gLf`|hJ}b`Q@Fw6L4HD*T=msv;%=3Bl+&nMrsgEs0fKxEES5z|sILlmK z=$J?X+ht{=hlVh)@*Rsl-rogGz5{>E*&P^%z77A=^#NLj{+T6F#z5(F`rKt$2_2jC zxF0H1fNb8Mq~}uwBoE&q>j7J63HWpIrAq)1f}$JKIJVF?1#FJ>*p$iPeav{ ztHM9S&7kbWA%`uJr=d`q%J1E32+zG(Rw1Ob@YvJsnb*OaaOKjvCdtfdyuXd1(J=TN zGuLcuyK2nGSBI<|RxF&tQokfda<>Uqv@8(W{y`3Fh1nYwZ6vT!JNWb(>2ho?gc@OJ zKw^1O*!J*0*jjo_rB+WL+n)WY8q~Xou&5zOblE?}xkWXu$LbhR$O@@dovL|GwwOZwolf9zHWU9j%&sU9| zkcm7e1=H?j&d7U{U*fPl4*ACIWeq(_$j{Rho1Jz>{%r2JHA@@?#v>kSec>p$-J^a! zX#@o&cC#z=22sG=T6O7MJ_@=FYHVjc4-3O=m$IsNxE3R>SD760Rff=nK< z*G?4$-byF0rx~MQ+b71%554~Z0096043~E}mTee^Gg2ZnP!UBLDIp}ur7}{M8i zT4pe9DAx|DV{*MZei2BOciJ}EbQZe{9P4tkM6v6i*b7#NDt2mpakx0lhwYBUM>h?B zZ1oomIG9zA&7r9UM@ogUF{FLxqU>d?zg_6EpyiIWovLQNF2z{+Ao%kp+rwCG z8M9FXa%9e&?fX##MZEdh>r(2W%x&y(^DQT+>`+gBwEirh81w04A3Lbej5?%SUq5|j(op1GXre3T+>$FIA904Z;Yxf}#SV_&${w`?GEP4$AtT7l47_`7l37l^G#1)IMxf#A{290}qAHhp+v^N1?2 zqwPnz>{Ebk)Z=kl+!0t~XXNLkf`N5U$7v$49$3P8!si}K05fbVkTN9>jDKexOc?sW zu-Eg}=63*k#UGCkcVmFg`?E$Q%MEA-5&PRE6o7iuM21_p7kW(e$1ANSffBJrENaVZ z=&U=mJacaZw7;jQMZL6z)*pRW>k7S~`FooEcE&|$>~~4x-Z2jKbr%F~1?B*%j`E1V z%z?`8_BGZ%!BA!`FEpla1%>SPrYwIE$bQ0|vCyyyntoX{_7z zU_krT3^tri)M~%61)FZ&8cDv+jV<9F@lJC-*cPQ>m)KN?9S=Q2DZe>;?WTXXLGm4T z>s@_XQ>%y6B`&9a=r1CboscZV{D8C+^DCah>PUB3_~UzP3K{DZ4Ts-)Afw*e{cbu7 zndf9@?LB@Y^FL|vg2x8P^7!$mJH`ZAUw8A}D|&!zlY-Uq3M8^KgcEME^N~F%$z^(R z9tq`Faekr2NSwJgek9}$5;w2*s6P3HMCiTCk$-}a2ut!PUiTjocdGbvc4r`A-#=+s zbPfs4HJ*JTmytd1?ZEqP4%tQWBKkHR$hJ1yA11p3S-<2~mEAK!mj4j>TiO_z|JeLT z>h~k_iXq>cvA@WmJ)W+2ry)Z@=<)mGsYt)3^3KC%Inv%Z&wa{FLh2W}&rkU$khyKWSIEY6t2jxYsgtb7%=Ju&#lePI$?f{qmV`gdc~`3GCuSLtHI zKGP>_J3_E-`O=e9BH~yTA#+|a>MfT2Yl-Dg)Wss3!6*rDFU+wXNpp-4z~s@%9oPQO zU_{@@Kyv>ru(w^6y!G1zJk!wHdS~4Lyk0-FJ2CJbNukmKK>fsuA2a;ph6Ek?W=?`ecqDYb~hU$;QJvixOzG=Wa# zwWsKO+(41cv^r{}3*EB`8kxhAK(#xwOj$0#eYy32ua@Kjy;Du)sFEu% z0!J=^gt^QqlYaR+9*n7oIK0|;w-YhH-}cCqj`1?D3l z_)mwlDR=;3_Uf)sNi+}-i$sNgx&u+@d|vxzB@i9)340`RfndVC)$9%+x{bzd{VRZ| zDBfHfeFcc9P`~x#GeDdhk`m>q2V%qfi%$Pu1G_cpgFLq-u$|AW^_Tn(tY4xfljLngXG_lhuG?=@j|oSp#%Bt{OHus}JpGt-|K6xkIaAh}vvIFEnrBwR4|p zfrjrpBO6b~m2M#}E+e2~rj`gqFr2C^?udrGG(ku~Ngv`zIH zvK&==nKRnR?66q5*2M;yvbrIUE;%6Miu3Y&(=?>#>a?V-Rz})@;eoQN3P|H#@pZfC zFj6HX^Y$quV7G^K@%)LZ`t+jexWzx-4kn-_MPMTe(hBkmXP zU3h@?*Y4?gjZ|apE>R2nacz9-N_WoQ9ET-O18sDc*JHtn58SqLGnnS~U0ME0BF2od zH&^@pKo?h@{{*{UL!>xMJDl+xQbPDVofMQI_f}J|j_7VER!(~yLx@7fYG>Knww+M@ zRnJ%;`x4YK+`mhIy$g*Bw+!4qj6kzTdhT_%Wzd>!#WZ4bLpyV6TR-a^bpB9Uy5|fN zC==$vlJx*RpM~15y%GTG`=E)TzX3q2^HPhtn#AGv-YkWdT42~7;N2LK0L%@up$4IY zz-)W>z@2mg)`bhN1+VT0*4(bc5yHm6_M^_2pEm{ek1r3B5^n=xDjvYz;MFr)_C)%LsE|8Al5R zD=h#sZIGKx-wceY*RtUfUclI85?49U0CZ=^%)xSbpoMrIGc0ZcYU=8-C6|Jr$F{MJ z)n5k`N0B30upK(hUGFi*`JsKg{*Ud3ENGeDaQNi2L1@bJt}$@ch6c-t)ck|X0l(U; z5L#0QRm<`|^m}JOnW$m%8MiPfT%8nnmh=BJ`TTXGuL?kX_GfLz;w;?i*muSuVID)` z{ti6%^u||TY^TGe{4ht<(#7lWT`Y<#ykp)ch2@FzlSlVCVs+%r4GIgcSXU8IzdM_O zjgmc^DbJ*^*|WaEU0N7ht1A5_3o@{MN>u9mmVE45rq#t~cLn1`Ev{Uyl61|U)huH8Uxt^NV_BjDbqn7Yl z^DrcxjLqMh-bd0Mit|rCMe;&|sAjkVl4kaI`833klzUO_C$|NO@3yKbZ4Z!0Bxe4t z?MGt2X6d5vO=Qz6@7*abLH6-{%92SRWHq^pEae|Z)>ex$mvw^3^k#O-cgaKvgqp1XB*$SN4kpC76 zKZvBseba$*ZiyYv3Mx>&wlCcJ#R;f;)ULCa%NZK}84linNN9Exef_V%1zO*_m88jN zL;FJH#L3&=pi70OeB+r1bRTID#0=B1y6{s76}YjSE-4oJh0Z!^pKfV`?2E<@W7WvPpvR8bzYDzyv|^*MzUnEU*69>G z@os^hfLXonb;>}wcyC@tT?{(+7DV^$H-)yjHL)NP4=t&7KQ^&?ph@Rs>{4HCsBf;h z`SZC6)CPT;3lFh?w+~`@Nm_<-0}mv4hT&0e?5iWuC>qVjku5sng1HlkbiJ=%+`MQ<71 z0*)_7aa(^mpNE9#L2Afh7bNb{USXUf5`$)E+k{9YRj!>CzOoF-i!<{Y5=lr#6tH|= z=Og*rd)7=@6Unqa+<(X#B%l6-5x*HE-O>s_MtCBraaFXI@ezqpAF{vb7{|9KdAY)k zk=VFt!>?Dp$c{hpvqH8U*~@-<+&59@aMsS|&8+}r=1c#5RLzwP=6K3T44 zoLG;|oAPZ^T#~RMIb=d(%n|F>gbRA@Rl&-M3$amoTd_2K#UojzbNI$s_T8PgLYP+5 zB~Ik2Sa5^V)~o)qQz1|# zuJ?CP(+27kCEt2)SOpE0>#I+kWPeu2%*?v+QW)=TZdv;hf$eo&CU2*{F2*p8zoVoX&0O+X>7rI+4fkm)WZ4W11^mRPgy$EpFDe|NnoW&;`hf#v4E7D$%>{T$|VAm#1`#d6*u zg1+wdg#alaF5P}t-k%5TpIq%7=dCy#1`GQdV;jCTC5Jxaz-wX*%|;f*UW6B`aSgM>U!->xd@aMr?q-U7NDcH*vKN( z8`{pwE;EyCgXZDLI{`Lc`niYYq4fi{@9`?bG9e!Cc`{S|e zuJmB{K< zj-NX_k4Cy6efr~%o@sZaFSRbT9ZKi;Kx|TC^jYlruP-^pCKV~=o=tmx6=UalYQP3z zCbliS?-8q3#g@QVd)kt7uyI0BZP@rL)|)2T8&wZrjjnrfU55vjH(iPeZs7D)jV>+0 zL2JxXe)RjZhdaiX9nWuHy$LM#fqiS&rbSBw+sVA zgGT^KK(@bfM!pm1`mXp$_ZQF(HnkhHg#dNeXx7iFNa$92vLU;*4?3A?JJ=PP(C#cH z(-(08T0V%&Nx4o#lYYaFh5AmYk9FF>+hz|n6>0t<)`?KDb*Ova#UoI3`?9-`DjTvM zI@uN66oUAFyjv*`zksLqyr`VtPkibedO=~8JHBqt$j@q1z&EmiCQIg{u#|o5c~s9@ ztnyZv*}W);b^d&U`*kSTsDAgb^1~TyekZMZ@6#x@UGhuXB58;nUkz{QJlctr!v+|} z7lu92ra2lB7m)f%p;OH^3uz+?H^!|+kp4;Yfz5|Y$Y}HM-P0t6%tY?%Qx>tvvR4pG zey)e?RXe1ICH#<`cSZRdaRLdA)2Av64WYQ`Z$drSe@PJb7rdu)(ZtJW1}!9o^Kj9e3XBU7W(SG*w%87Cjk6$Cy;x?_xR z4)YJv>^d?RQzwvmOei3(M;*JZ-egZ&Dq-iGwcJgk<=7suuXp2Ze{30#W&h_Rj!nk3 z{pw?3SRc7gU*$(E)SZK#>pnbtR(Rd6hab`-jmIQ;MxbyrgO`+PhqCV>+!g1Bp!(ItwTru>p?+h;vhNbl zp|MX}%S&+?wA@eKvT#5H+BY5!Ex4-;oi7`7>;9=hH}@N_jC^^Z%3b8i@2mxy&K)z; z=bYYjAmT#6rt84ioxber1_@3dWSRA!90ulh{i1`?;=syOs{J?-0&FwJw6DwuU=P0V z=`=I|!r^;awK%5-cAET~dEf!$Mk_8?kx3w}%8ZwlIRSZl+mj>1mw*fj6OjAY24p~M z+Phx?K-zwk40UP;QvSb{rxK@ucqctxK_3Oe^X;tW3wL18iVoXWO#u6RO4F8lTVUZ} zV2v*)PrROyr(9P7Q~j^)`{50-Q8p}tmPD)b2=t;}+ty9I&tazi7-L<3}`{pB_0$wg-1LsD`7 zePkJnT-hevhphSb#P|byksZ5uz(s(=k4+*|9a1-ui14g(NIi(eNKqzpjVY2!?w00~ zpOHN2VCivf1&3EQq0PS(k+eT>vAg#ak_W}4Si9Vi6dX&x=RAu!bT~> zGme`yu+H%M^t{mytgJQ@>lgCD66&MFlD;vRmn86SFs>hy@5H&NYO(O%&c;KbHp38F z6jkdUoB*j(-OvB{yF-EQu8*B7K0|4eevt97HB>#KB&Byyp)U87+4CeXXbk%MrR8fS zv>5!{)|Rpz+9uB&x;Y;Uo%aH1-D-tE`TI8K$|DL;w^eb=v#!x1c&;Mw$977?Hpz&-uW+ zFc0+BOHBVw%|L4myjEmT&hfgrZ?Aacp@)BPI9m~H%tDT-^ zTvP%yCD`d%>e)ekQ>kx~sTR}}U6b7HwFu=^Q+kiT2SZ`5ie7VTF=VV+t@i7TEIhl& z{KYV3qpR6@HRdH(e7RTa-^*+&X5YwHxz=fn#WpLs{gxHsTj$ZUT-h%WPtM2Y`I%$G zQ_nRb538~H{O(NYbM4qByZ`oY$?e$Dk{~l=`5P%F9`j}-6MIURIOf-wAobrVn@cAh zkuJow;rWmRG6ar0QH4$+{h5+R>%wf@|X1m%a0+?)~;Gb&e1-==VQ<6HUu?mHyr3qF0XR6v5w9t-g0 zoW~05`@{qy0nZYnS90=3X?PdEr3cvu1q$L+xsmm1$uXPgVPp;+plWOdJEWw36zwf)<__+lsVTb20G%sK$m*@D(_iM4us@Zt# znkP0t+Zu6myDc`njVsb!qlx(R@$+!k9DEzz9$Nlj4vVim%5L}(h}l26MZ8LuZ8GZlkoMsK7NWsJz_*|gk*lh}P@jcX@&gNeHy8#+D z-&H@-MT2IpUvC1eETOeyRdE&4T z353R?*rSKffK62!aQi&P;gMDzSMN(;mBpvX>1A;Ez?;dVK>~Bno*qw$bYPs?7%Z}T z3DD2wB_+HG0Gc`XncT{)K;3Dgcwev$DAW0G1xM$h^AcCgJp+GetGyMPFi1636FUlO5>8Y*A?4uGs@Jq)>?uwQoS+OMbxX*9HlH>(sT}yO6lP;Vdz84vAwiZ+CJ0o)DP6wx7|#@v=K76|`cJ zy(@mHwK0b~iR_oJZ@40Jd|>mopuNbH_oFv|x`7PCc(Zf$mPkK#C`RzQ9?~F-Ie&)- zsgm4sM#Wu7X+NiKzAgtlHIEt3s5oI;;5gAaG>pv!4~ITJ;l+lA`)7~;%0;|2{-4AF zUVM8@e0uMmt6025^tH=*C(P0?{&Ksv7h_|>^;gY0!O2=hA2+X;5PvjpWch)`{{a91 z|NmT<_ahaK_r@h7qhv(cBT-b6tkfx#8L5b5H1M{vMG_6Nl0CEcDtpE;F0O0c%e|;X zp;XE!kx1V@zkbi3aL)6*p7TKQlQFxm?|7i9SShm5Xbu{F?x}276^B-iaqcm*m(am^ z@YO@93h4aZ%+97<0z~2@jb<K@DWJvJeUDY!3nM~aQ=?95FcJ|i{zu3N zMkcxTJ*Pf~QJ!Q~$_7RVb0GjEgwwvmGKrMj#sp?-~_{|FghSxM0TFH`J{FnliwWD5VT=xQbCYP|U zJq-pub8piRzlFY4C%U6oPXp-^sdw!SLU)wV2KnMiAe1gKj3((o+w(P*C%+}2SwY++ znlm42XY3*rKZrxQ_xvO4TaA$ONu4)XrpUc=c z76Rjp#W;B3t(-#5MlNBr;>eMYU94_5a3pB;%7fJ;9BCraWuKJ7kzw{bK0N(6(i?y0u8Rqd zK+zjVM6>)ezR$L}HSPl0srou^2<`>8uRv=gb5JCsN(IY`|*b9m<)LmW1=bl{&@ zz#*%IP`nP60b<~8|Gv`yu;D=T@lhFVtgO5vbZ$p67M^x>^gZE^@oWG6t@x_~?saNs z4<~9u#yM&ekJf!CeK+*6e$^AI*LMF6In)PDH?IqxXcvK2YW5VzqB3+$-Z_}ZCk|Z$ z&H{F?#-Jz7c!_?g9{RLZm{+XQVW3wxw)iLk$kBIr<*)PtCGQ)XCovs{vRp+SyqjS7 zL82E26arOS;ErzVS)eYy{;YRQ7HEFskIm_i0qxWIDkJV|Fmf!WaqF!R7`d^3;nt)e zjJT4*5>D@i5la(wmm?W4A~Rkba`PCK;JTAaylJ)8$;&?zve&>opKgh8yKE6ce+=Z;PO_byNveX#XY`fN+xSL|3j zZqmQ48oTD!->WkwV$VxAZYdH4`)tkaz8N3Ffe#gL1RaWzoO)?@eS!v3ieLL2{HusV z8NL3pi*h*ZQ+DINC?ir84kzx4-HB9+>?EsaKGF=zbQ8{GBCTY0+|d3Z(mrV{j%4`Z z$kr>CYV5*D+gQ<=$U&shc2zEV8zL?IbGgcvEToBzSc?{MAvMuGEJ&Cihrb0cpHtz& zVae?_2L^p{2o77jb($gNgl5dmV?hq3ph6>nap5)%FL6o1`L z!OmFDb>%aH*d8j>ON-OS7Q*6&PFn=lYcqtaxZlQ#ypU(^5we&!m@8AfR|lhPvIWI> zCn0FeNGKuN7IJpQ`H!`aLb;xRf<)sBs9iem?z8+1n%yU^*%a-AwyByl;~(KbSa2EB z8drtx*G<`2$pWN|PePh$&d{&w?|%gIVK86QqwLKwATQ)U8+`l%D2wa-y6==>h~~?a z6mbZKQ}cgqzvTr~byZ50Zvjw=f@yB+K|quJPs`Fa8)&y&u3n}~1=^EF+xzc0fELE` zofH!Yv>TVzHYYoQwuc&6TVw^)vajDd7(0L}stKM+%`og%vyw4=9ENf(DNcNe2THB2 z_I`!GKrXdy@vQy?gFEPBjcbCSFG}=Ufu0%kOv|s1nP)&ZTVm#$I3FNvUtyKe+77J? z$}{v2t)R)Cot4D81l3(mr?$Vl2Bll&H0ka>hi8eFlRpKjz|hFb>S!4OQ?h#QJsh3K z66V;RTg}E;twq*mTkpii&m5F5jhC_Yxj5IfxdC?cD)xJFKEkdpcQKCeVC+e$IbL1= z6Z+0qZ{~;PJ7b&2?LQ5r-T2bkl?ilwv8Jt~rlfTZ%O+zi zAFfVdCbRj?W-&6lrajnFKYjob3Drl8=Dt8tTin$Vp=_wCcRP@nJPVDE)hZDcR?vF; zkWroR40NQN%B=jl2wlkr2CUu_&~uA&vhN=k`*wxd9sPP4213F~4ClD}teorB|kJG+;R42m0w+0F^z#&x`m^cUPCVKi0no>SHUhh2J_r z4S#U6Z{!~z?KNnZE5rWjiK?h!brgmxONHx`{b5)n+w{77uM{+1p39*xy5mT*GPJFzcCni|l}YL}W>nGXaOI_+0;Z=v;lDnrug zkIy*aj>m->%7HHic#z4;jyDt23~pZ&Q-8%dHTxxsNI*jGzk zh+@8sgB%7&SFPEQ9KTgz=XDZN?wdEX&RoJF-TuR+%I9%tp>81P)<6E->X6FG|AfO` z@6|10Zs72$(SfJ`csTqw^K*r;E)GvVpZP6Rjl+q>&y-FY;IK4Lmy9MO4n?;Rqn~pl zh1L@;LBE9LpE>zj@hLd?ar?wP|1s>(_|kvimKgR5IdZ->DM#XsXCf{MqS)y}uii4D ziS5=;)?dF_!WJ#j)+G^Rtb1yqnt4+c%L|IGa$NGo9JRE#7|8;B#9^`QESUl^cS_lr zea4``o|CNm(HbhtiS3+KywLEdRK~SJ30il)b&Xkk4;^ZYA8L3Np$mwOh9}QK57##u z!Q(abmTNPUOy9u(mrPF7m0LjGQzd=JoE0d{d483feZ!~O!;s4Z_Et5rH*p`KS-(nhuRpM#h?J6)deaMuOQVc^k{7Ia0tw3oC z{d|x(59F_vBHEETFt~I@pnU6b=#TF2p*5*8|NI?!l<|4N4wXK z`ORSR;r(u`bm*_09DRfhdJU4d15*)~VvMU>^sr-Jz}SsE5$ux6d{3&|jl`cal3uR$ z*c%eDaPeIZ_P?oGo;V(fgP#QrTP+KbOk0pnfAR(?Pu~U|_jAA@(b(#J=U(7YaPgFM z=yx1y6P_h~F2JEdBdeD|R2-^cqbl7c!a?sZrs3ZFAW7`}U8_`Ya?p?v$C(m%(mYu(P59Jrcf1e2TIx##je28rS9hro7yEZuvvW7s4n2hpT*l8$nQFb;k`vTP+ z4(?eWRiPXI8jJ} zA=ckZbKXY(?*3)6Zl@GbPJZ9Jp7T#%@h5!>bvI!!aMoq~W(@QP8Es!Ha)w^D4)2EB zqChO$bJ%w}2s+0Xh)+5*p?x@U+CSS7P@d_A!Ph9Lcf2OG>8S%1HV1joW*u^G$|dD# zFu-FOwus7=*BD*nwC{Ff3Kraau6d{BJ66)hg6*T6uz_G}Xi2ib)?)!iJAS8Phj||5 z({5($(wj@<9a=!*rm$%UiHf}rrKTMSD6J+o@qtRU|#aFQdCyT)5e{l|gaYg^$f@*BvhSu2TOMuDu%DEGRn z3mfy(y zEzl*4bsqZocuEml*%kFmddYI#xUH4gk)vlp&R!@-^rt;34{{LOP>^j_!ylGzVm8T7Kl!DQF)bjk@F zC=*ZD6?VgZ6Prj)ItJ`b&i?qa>l*glt%%8CD8_E4PLbsD0wkQeyre2CjBQ7ECV!EC zgiXU|)Wu1fSUqVX`s+&omYm%?_)fqclip{_uMU)gr=^W@kWU_D`JU!iusjasJN@`~ zg*8ImK0nU&lqzVRxpLRexfI%Wdv&!7{szKtwGyVlJm`*yQBKJ=fu7DZQE#~#=zZ2+ zti56g{j8+nnsFT%VENnZ_2C)}BxsFz*XP1Ond+Gw$6^>TIJl2-QwsX;oH!|xZ~^)h z48D8Sh6CyTHhq5H3qZ6bFzr|)K<79A7Xd@O&>>vM?qSjbt&AqWeV$lAgE@oexTFVE zYQI&S_L73UcLWc^xLyeN@w=e7(*dJAw$6#&YQ_TT47P8Lzp-*``6~M>Uu@`0YqH-e zi>>>mglo%^utQ4!`aE|%c2e1yaPkonB^Jg9Our(D{d<66??dbje(tv4@DuihJ(e~) zO~!ui-a}Q>CfF}BkltYO1N+MUT(ug#jlDP%eoo6DNoMjh@2Ay}81SODvEn0k9hdek zc^HZv@y7g4SI=N;a+Q)r=OJt?u6SU@6^T`4{<0eRd{|h^aZT_#7seW0KGgmy8iK_a z`RKi3AvekAcTR^2RAjn3m9$$zeLB%T?x#55K2zfDeTvW?vE6hv%^o^s+N-S8Dxurv zshNJz9P}ItpiEq`1d@NAmC}Q9=+)N_Eqmb&y$PK2o3C7<*G$?#{J~owC8#gAMYKWB z`4=DR=wCs1`{qNTD0VyAzMfsnl(cH4-Z4*uea#NKqH-OH}nQ#h_Gxm6K+R-=?yS%$Eu#&2Ir zUknnbAC4|A$YXa9p49T3!Ok2zX?mI)n~GYef~y$~ux`QDpwfl|f;`v+7FEh`-LN`G;)Q*!Ngy~LOZ{yqxN$Zz~>JKMbv7bktMt)OI`}9eA-_p z9n^cLadt@O-aX+)jk`#unZ#8SyV!}Lv*lh45A6D)d;%8>n#Crez+~UMBZ2r=_ zY#>dCZ5(RJy!%zK-Anu7slZ(9;49qNk)Mz4^XHl-U%O)4TBN>mCo{IHJC)t%+>1@s zD;>YwvazO?FxB;;56hC+TI0H) z6*ih^k8XyhpqGzAs-6Od>z=VrW{1{|P*DrTyU=E$a^>R54QTDt*H#zdg%%>q))?yt z&}hNfH%~2u>Zl4$C)X(`xz;DPtMwctd59b?m+VEqKUF-_C)qH2#(2q}E)mOvi`zA9 zg0MDZ z>@h6gW6au-Fo0RPY@ysFEp(|lm71)v4N?sc{FFR$07?b)e{7_ML$z3doUUsc)W;MW zaGy8>Oms{jmj3i&jXBH1?Y;C^ zUUk1zS@av`sxT`1CceRk^qJyb+HsJub3FLO=o2XX)3fV~h#6Ew)I27BKMhq=VzMj~ zQBcKcw|K((8azM$%t6fG1G4V!E6yawf%DD0;oYR|m}M)$Cl}qMp{C`D`ozkNh<1oNdSG z{@>ufs?fAuw!NUjRqkFyV?r5!k2x3q%cwaOcT<5S1JvKu@f;E1hV$C5I%U`>sFr=* zP2-0pnrY?Ccxzll^(h~I=4a|)QvN<-S*QxEgKXxT4dUR`{>tW(e-+q*L34FF#u{xp zbw;~hUPa@h2HE!JY+!snd;hU?cd%bNe2x#K!7lxif=kUyP zmw163{QTbASaf^A*Q|thrasV19xCG2>mY|pTz`}tfGTw{RW*L+y#e1o@ zf4uQHhhALqL(cQMcwsXZ*O!^W@epe_>&ptbo1vnU`o{$xY*`r{e{mNA`&$#Z1uufv z{4ZgK+0SsE>5T1p5emBSekvMs+lc`+niEwEa`@=b(udFcIq_j$ByZ2^dAyr@S3%O8 z8EvYcZfAF8f*Y&CJ!L_=z<v8Yf zC4m=kvHTq4T30r@?R`^22<*lO!Ybd2sw6Q)?Ww1q>IV#cZn`=b!Ggh}D_^9`%J8oH zgM$z61)#Z)oB!hsO>p&--8%VE4j$x1)=ZFepQfKA>!Gfq32>Tgk8L1?XM~V z53fx&GQ~82+Xt^-Ihsyr)?FP@TfGJE9rjUYRQ-Y>FNizy9QRDiYu_@-ulS&uhoPCp7@f+-Cyl@V2euOv3g5(>;QorIi{dmuc&*5jxiuY#YWelv zlWhQ^6+<%rCRRbD=_biJItqfwuiW;=2XzT1y6%e!{U_v>Ty7*TJ+LmeZkUQrshxZwTaY06Gse!MnrM*iD%6+Fy% z^WQ{-LU7MLq3Jtr5S7yMA4#bWVh7cBZ}tBPamf{$=|{>TW`g%y2Fo}+Nl%PEb!Has z4|bPH=p6uy!aRQ|Gd=X?sA_Ja?!u6g&FnpwE@1SaRoS4HW$FnVvx4iBX*7~B{kJRz%zZuD*?y?>;^(YP)=d*mVnr8m1ASuTQTQO}WZ z9)S24*SRtd=|bWrZ^(^)R!Hn6S`B)2LA(G9yIxigM9DSFHXSI3hr5H?LXXCP#j|~u zN4*H>6CihbIPx8aOD?tU7gfdBRzEnz+K%sx}i& zNsVSg%6p+iyG=((Z^#kn6bgk*?kB%)YSSQtHRax3XMITZiApvY@`U(WLWIoj9T4I4 zIe@Mp0=#9rik5y6(V5AnVkbR2h8`vQ*dHy$xblIA4U=q`s`cLel~5#RO!Uhir66W) z-=s>CozLr=Uo^p36tk$_#*e-!jHju&_lUZ^m5@Ng+zMOSZhlh+4HG@1RD6z1#>EU<+A9jZP&G>NvV;PeV z6`5CK%6FR7?YCW+8BOQNx#bRK#~D>#OVGz0>xd&+_O~&6)-8u#_X%dni8<-a(ePR6 z3Zp*j9L959FlY>K#gILV%)u{K@!F&3Yw^sf5D+|UNMhUx(LvSonv9T@a zDa7#G#Cy58LSW71shct_Xyv1@*TZouhTNgs^`S=#<42q1D3@k1UExSc?hO&lw&#j1 zOI*X;e0I8tzX_Q4JnBHy?Ly3Rx4!c6<{;)Q>z;@_-Gx~?llFO4r!ZCFpzkD~Fvc94 zZ2K(kgMrF_=GsEv!A$;yTid;61#V{(`@{l7AL3A4`DT*dxC%+oKTl>89J zLL=vk^0qEmeAr`V%vcVK2d_A#n+IdD^irkX$OIN@L>`~B5X8J=sowvc{)t%Jp7r81KuNoGchQa&phC!>;`LP%yBs3esLDUp%AlD+rkUM}wC z+~r;?5fv2)6=`UQ6n*}B|32qA@ALc~Ob_&0yKzznqZWFEKmUA$r~b}6a{lnZ-Bt77 z`R7n7@qCIAF$Lv$>$T%%6QSa#bJ-%x0V-Ga zxG>XJL3xktohvO4Q0l@-`&_3Eg)a^|@Ltb{Tzd+;#Z3!Rwc|zPdLKc!)2FM2-4kfb zi)Vdq7h%+hM*O6Q3#R|{H@(KRz&!HqIUT>3Sgc{~;S<)6WmNvx+J6sY<#zvPZ*Bds z%0+zPyRjWs9h;lcq4i=0D(_D8-Fp+j{--MO%mzfe8+@&+kJ6RL(rxN&?4DzX{-t|j|J>4AGcX+?8T@Otad zk=R3!Wun_f5e<}|ADEcwOAw) zy-{vZ3(IcBtYt|{V&x>0v5=&RHM{5jsaokELDs1M^X8LCSgHE8{m=wfM=6-FZW6F! z@FLq_%`Pkz92JV~SdRrJ%AGY+e3*H6!8|SZ6F#W^xp@UO5$IvxUoeI!fl2o(rJO}5n3 zOdvE&jBXQFfSQRT+rCEiLzU98jXRZ`q0Hn{qG}*F6b6w0QmY~%3s+wJ{U1LhxQq1u zo$>?U<5Mq=s!rhTk%>Z{GsiIHQ@EM$>;mSAR#jZvYmCLIyR|Kn-LT>)lQ}E3fHmB_ ztvvsYA>r|-{BV9U)`lDvx#xQqYad(@iQU|UgoVN!0vmxC_%}@UP<5APlFF?)bimfHPYU%>-+|fp{sqgu?6gkhM1Y$cTRp z6oxG-zb@MkWnEI1Qb+eg^{!qu!%bsAV3l4AJXi{~uXDn!f(}8Q%`>&&o)1u`I=tgl z#vIf-|27TKEQgx!B5O^<-asYKgFmk=JD^0CG#XMJ3wh^!6t}oAAyp|bu9)){ZlByW zKBAX}S5ti!nYELc_<|oic3#DtnZYEP>q1z}74%72Z#7m}!nJ_1AgpPK^Ct5yVr}Gl zwqZUS>vGQNdxwr8QM{#b+sGK!eR}D(Ry-f;Wd8)p46H{2nK`lJaT->IEIyt3a}!Gw zFR6U_cnkA;t&qsMhv@@bG+Spk;ys&T8_9p_aMnO%lW@-ki2v$gvc@eRvainE)5!{e zqB|q1mVwWpLe{$GOu=KQ8D3}{kKYQl-J3}HbGv~kerBhQ;3FWic?7)U)&TM8&Wxpl z3qag!Ts^Z`4Rx!RzA2d91HwK&oAiHlsCZE~EWr?lVyolQMwUsCySA!d=^Za5Mv*hp zMwGzUK6B5oHVf}c3|V#wC1bkkzL>RIikRQw`S>5tc`TiNlP63#fz_r&>e=CESbKU< zLa&sCL}9_X@86A(v~5_Ce@{A+3fu(eJ4cXoGoKaxJqw97q|1+fuf;m!$~*@m9SK%G zr-i;%U`1t`x73zLSoBJnKB%pO*+j~)@Yq3&Z=iMz%_O3$t6)^Qv?oOVQh7Z*wFVwO z-g-PzS_TSthDHrP>VR^mC;h3@9Z>01a)%PBA(j@1F=6t+~MyckY-kS38j37 zdLQ8LK3vugNsS8Ww^v1h-^j;}PQliA=XDQAVuM_2#V)bq*r3U~H9Xt~>kId( z|8&zvdJgXo zTVF`nY6`B?&ffVYrjXzfnYbqN2;{D*ni$rXh2r_|1AS*VLDeCh-=a?U9e zAeKm8O-+b|dRM1iXU;4^!(ESKFGRV3%=_b8_LHa3FnK^7=hs4m(qEC@Te?7EpOL(p zcLnPDd5@;8R9^O@(9D#HolyRKPf1NF8w&SSH9WGigoo>Qnf-~EgYeO$*6d9VctuwI z?jC__m^5vucI=A8}Le=|!8OV8wmPm4UqYP=;bo_HVY6#c8ZpA;j>hoTl*Y=jM} zmEzgkHIQt*E#C3v3nULIW@X=+L^Abt^w!kn{Vh(jHa3Z1ecqvJVI4Ij64rgl)33r> z9Z%7Y6XIAIH>vIPAQp?JH_aQUSzwlfS5QCgGR8>-Lc*!|J714> zLGJOcCmNMiP!j+AXQz`eRBLwF42C&C9sj+hOGjux3fp3IwR;>I{IWDxG};5Xce?xL z`Df4=Kh*g=N(maPO_YZP1E6u6jgi8qcR=PglYZOb2=#_J#g_s$L)~1}s^_1jfUxtj z;n8=lQ1%5jbO=6&{C@XCdz8H()z|c;5NRB426eSZDl}tQ@8_Ark&2kH-)V^1+>M3% z4!_U)lz5fd`{+K>&@{ayj%$XG*L*>;qigWAnHARikcBLD%&_j4*~6{2E0M5@L_M)a z5zFj^Y`a}MFz;XY;O2FK%LpfM*=EkJZNG(FCr)MSW4^C|8G zLrXbmJ|ZO=ts@RiaTdQW{;r0`Js*p&%ceks+4@V@$;Ch%xU+;$0)X(=w(nI}HdOF$ zodbbNgnP9z{c64lpQuL8Ly!P0qmv&g65Watil8$xE@vG-#M6rfH(wDM5 z21|O_T$y$^FqhlXIM06%#vN7XlfOL=)|=Ueq4RGbVS3Fvo5~!>Q&GQW?P&(3OJ0YR zwHtsSzp~i7dIb>AZLo^89)N}e(#7`OtD!OJ0$2K}5omVU;~XR_0F+2UXpo)!~ za$0hM%5^sI{LKKM9GO*4>XCz{nMb#rBWj?Lo2Tw~$}rSN9LfF9UIpqNWa8qoe%037 z-0xpq=8l0gK5Iy0kd^gjA;wT2?xPMwZ#{>X+j$dzZFq<&T02(m(M`kriT&r(URPr| zJ9_ZVx0hHeplxn&KN(5Z>+&=LZXaS^)>1bc1jzk@HcY1|X1x??y5GibKpI&Rr_Q1v$J9lq0xQh)ZyV3#+b&=>;u65od z1Zzg$I{agJV(AGxOIE28=I&+es!fo`xOGpsH|t8nsk8FOXY#ZmX+sYu@aGuhuQ1yF zLnR2xH}y{2HGBlZQ&EP^`NKfk*Vv>&TJ||z&vH41B4{E%nABBs1xnfJR_{0hw5$@~ zpSAo8EwoiX^priJWk@wEi0}kjEM5pG6?_G%!pJ~eUKcc5JjUir0_-c9 z6-XX`nJ(sDgrvcxto||e<^1-my$Uc7D~T6`_laafpE==>#12MkYsNyxus46*)_R`!ia)q)##|9 zuIoU(*gf#@sRXpj-geQRuK?8S<_T{;0a*G=H+t?XU_cD7sX-I8mYm(OaQ_XoXqRpH z+)@q{wSsR%34LhHAcjOMFrYr1$2fmkzdEjysr5R+P`URI-@m{sQ1I5Daf*HwQui|T z24)rE^3*ur`B)A{ciMhi@ zFO<xa)KK-5V2ZV_B&z>2DhNvaVOIklPQJYwLSIz;|*Wibx>|bcj)P1KWMg^MqPY3bt%|J_{6r6t- z1GLsit+!z^KuZf++eNnmn(R?ywpl5(5*(L4C=LTPy3g*`#~NsQWpbq}(H|Nr*nYhB zn}N8d!YB2M6I9F0>TbHQ35p)fZugWv4H-%vB@2R=;AW-ImU~~~Fyd>n@52ZhW}o*d zd(T?V^=1>a>17J_3^s8B8Uub z*)~TFq~#^VeP`t&T~z$Z%}?u*u5p1N!!$$siivgUC+CnB;;xe=?|^tJo@ZqnAGRny z{{F_7jLoi}7A0igBUx@*)VN0qiN2ef6~&6Mnv>&tJ z%H&apN4gMU)b;dq?_bEaJDK~&^FEXsZeUjzu2{Zj52;uYBOrx}ZCJ5x9vW3^Px|jA z1LYjAAj4cAT9rNzy?Zeav>k^}xi+-{ZK2a)JmNjjZ<60dR1N~YtoFKHf*{cE^_}r~ zu>f?DDo>3aB0#e|u4k}zHMEA_+8n%h6;KA^Bh5wAp|M0(LTl_4)blj!?X_2f+Ev^x z_h$#7%#CM$&Y(U1QiVDY8E~Ix+Hug-EAzkfM^x)%%NHa9q9?y3HTcvfjNrjmr zMfJ@5swHP6w;FfvdAZza-t96^o!g8xZmHKNNmMMp&}Js3EQAlmK8staI%D8DKIzOQ z7TjO=w2V3|2RY3jQl?*;K$*s`y)`nfP%A8Aw#&@|>h+YZHAWnuiLc6Sr?fRt&yyJR zXF`A$T3QmS%lAD{GJGo-f!=6%Ovc3m80NEnF-Et5kt8erFzyR5?%h4F?4%EjZO0y; zOy9Mv%jURsZh1fp?sM0(x(2QO{x8G|TY=(9ni;dK1M)~6hY|Y*h@YNLmuUJxjZw54 z4<{aq6>bdVK4U}1KBx7HTqBxPCP-BXq@{A2$M~WyR*N zr5(WF$eIr*xdQzw`@8$bJwSUb6*a`^fmTjg>Cl8GQ2bIH>sE3DxuQGN%=8lwL;jUt zxpx_=x&NHeNREWU@aLBMJGmjnx$nMN(k8GuFiN~gXJR7jn~^lt4hu{>H|1|z!ph0H z!UJZvkjO8c8zS%Iw$1v^DeFCaxv*}?4^1Hj(hm**axl zZWjMeRp=R=~6=$>4Q!cD-Ky(Z@vgD zaX{wLebqvx_mCkMrnQ=S5@`f>T&969w)|7~eo)Pg&B_AvQf2d4|KU%}R-!o8T3>0} z$lHUZGmZ*H(~X!_!{++(djP`(HVf4F*FZ$h*3Q?)3y^!DH(*_<0+c)CJX$mT1?mJg zjZgToprL@vGBxcuG`}}->VBXOt;~CkC(I>)F7_c=b(bwL?sF;qc+&;UdjER9;tF7; z(ro%7b)aqgjR#=^kD$%VeW~DGF0?t`3RN#_0oL#N;@(foIvF2KvRLL$rtx=$JD1~t z{;x0Hsj~)XzLeMBLbRaesPgfzH=jV$0h>H^Sr;HZwGwm<{{jTDer5M@D=5}VNwf)n z0cpM3bB_hpz%!qHOl>O(6LsYZqtEbT!ChOcl50$?DthT<*|@Ar)g}A)cDmRIuChi$ zWTajXH!*x(;PX#uGlGl4Ky~lcPC!%2uKN2+4`W+K?V6nC1_?lh|OzYZldGy&@^ho`t zlxL#`iS?9D{kljfc=LxlZ9ELBW%;K*>k)wXTf%!`R}VBkO#3eXqaLVZQ~cFm7J%j| zTWq)CEilBk#cO?>T=u8K&gG@YfK?|yO-*4yTf#-5-&^>Az2&o9SgZiBUGD`3AD{x; z(zugOafi0)iwZwQE1*rsVPN)>7_hX`zVoTb*0Sadw zn17Q7&3`)l{JXrM;ck3#&!7j?Hp`nP7bilQWBs{?Q}-aNeT{-~avX$q-?-E^z{Dv1 z1KW)}n=ucpUVa{&!wRB)PTj*PtQ%JiDym)X>E)svArn2MN{jE4e7Jiy(`V^0B(?Dz-JBcNvyrBHQb}z+UuS9ET(M2zkT;L>6=cq?F%+tkM@EQtw9lL;(%9dtR=Xu(OJM_9@WV!I zvSP}sKgmK;-r4`2+q}mbi+i%1vL!71u=rCSwK4ge`u2v3=Wyb~+AwXsosh;er}5lm z0~G7&For|qfneRbxAE%}sJGIX%?fz|%_|4)Xz4Haf>VqA-xQcY->U3*LX!cEw_hA; z2~UCLSZAle-vezA^ynKZE&|)%MB&0}L*NKi()k<6z_Bq5|LE`xIHrQiv_39if0cEf zIsO6I2F==%KhvPic$Z5A(Fa)Eh-bjI?V-8aHLr{`9CL!ANup1?#6{zeZ%bvHRmvs*Yj8o^FJ&# z58G1Y{sC*yGNNLVP=xF`>yQfK5#+>t^D>SzLQWsSd$*E4a#)#`4*&Kd=gbRbXN7!Z zH{=D)yLDn)lW7Zq)`KkH{}%dU?;~T3ByRgrVwszz;+kFkuyy@zg--q>*p#eomgBr1 zNv)|DOtki5jeh*}52G0@Ouw=v_Wf>5GSj&z+13MRSFZQ&zAOkC{5KA~rWZqr@AHN* ztv681zw^}-DPL&VvXOr4wm39@Jt-IUxDU`h=Um)T4$#S-+ODU@fO$JnK3lC1+618H z&8Jylo9T+SF4BNws5A1%H4r${KeqSA4nez-irdAA3TQW}%(Q=Q1)P7U3?1+{aNKw8 z>y$SH_6=3r!$KL*rthr5HECm7wNkqB>r;Dktxx)|6YR@vf2)GL=|%* zd&j|yE&W8~n5Zy_vL4tjY50^r9Emuzinrwj}oh z%|JIXjg!RVAdPK zhxMj~|1MW>BVirI)8(B%7D3>4`iKuEZ~uJc$LMu%Pk+42=UY2utW~;Tw7VKgstbRs zG>Ss)q4(Zd{e8;aNRle|76iW$dt^x}=9tFq|n_a-aNY>JCb)& zH{58$4v{g2NdX<(_4{-8jQ)olg#?L~8$8%X$<0==N<-G#%cEa^Z9~Qu)8y@828cf+ zKlBV_A?2WH-S|mIY|v~_p^VHU;cacDz1vzWCI~;Wer1TMg`^g_Q`4|#w$)_s(fxBGZP+lHLKQQ^YC)O{Cd zEaVJy`ENB(BJ821GEmX@M>aIp_kL>Q$OF;WFeTLOKd2Zn3enpt2Dza>B)DvN;ZDP> z#DDr?7&W5zYP9bJ=9_$euoOLqRi&x=n=}4Hk}b)!<6I{;WmYx}jBLl&#LrC$lBbcL z8sD|<`WIwY^Ml?;V{E(c#kcKPAadjvTz@2`VY@%uYjcS)JE zGf&sq?|2z@Hti3xZ;Z#z5Qp*0uj;Ym=RQkz_*LwX2;WYp3?S!Qx3S5;Qe=lFbrpHY zAglAhj+ps=l2IyYNJ)!ONe&rF15qJ6l7=W{wq#^x zgsg1J-kZa9?{&93lu9bfD4~c?Nr zboQyND=eP}>ekq5#@+)!+i1)8`m-|7XwN*y)`+}Al$fwd{=Sb0V(yuP)bspP=w6_I}^-oig`XASD;9VS2sFIYvABEUy`o%EGtpiE%Pq(Ru ze8rALF#T(L7~Aby`Fe%^Vau>$;X&8iSYKByD)jORR%zQ+Smh33k<87gfj=VnyyS%my8xK4WtJzAxd{o5R9iuyK!6VFAT# z+n?($D}h`ny-VlgKOnYEgj5_0214qghVc5A&<5MR4JPEE$#r#IL;DESEZkI#jQ$Jd z=a)`n;Tg#NYxZ-$wiv|8@HXbV97P|A3c0MvWB6P$-fbc{5erAMvhMe6S^OWpEq68h zv7WnPTllORw#ujL`&@~@_K4RJ;ujxd$E%rWwUHtu4JW={=vsrFjf4}29-Tv~@qvdv z(+80j>s|6SDHG|DybEMGeq9HAtS-{ch$FT$jHd(vF>Fe;l5&fYtRQ?LaIf4?niO4&*9@ zXZf$3fa1?PE9mkEs0$=-XWK_W*DTBSicbQDl2r8$u@GQTOm5WpKLe&rGErV#7MPL} zsZ$v|V6-$TP4p}Q#+nBuhC6-$eaqgmtC#(O`so(YIo=v5XIXtAdV)X>d17E|&;&&9 z4#!#MO(5)5c9`vr1H5E5COXd#jndXl`epB++V4b)MD8glIiBJmtW^kE#ujfa^Liu(pB-O`qkhFbEx;hB9KSZE3d~?jKCy-=U{00UnCFNAYnA&3Nxe0|?A7t#qm&Cw zi;B^IGk<|`Px(fpu`kfACZ1j_?gr|pl!7UJ4N%m5lfBHFfPAFwT1Cf3Ac|<&AK5Pk z?dgO4cW#P8t6=>7>(9?Zz2A5ckXArt$=iNKnKXE5y{c7tX$z!m`FPDcBOfdrPgP#7 z7R98DB`>}i67hvXWaExqR#++Lcv(gG3)aoHXy3m60b8Di>WxXqVY>&TvZrGMc8qY` z93!1z86x z)JX?{`)gg@p;}FAik{Q~ zjUshvBce%wscVdXT5klxHL}xx9DgA8#?5MHn?t9huj%hU0YDXxcXmjK1X^cW3sr&% z3{5_Z-O*LRbo>%ouJ;>QTI$EQT;B{Va?uEV4-Z%iueK|#iUQWK6m5+o8CU@YGI54X zV76z99BecJM%~ES_+Ju0cRHxPw5+AZ8h_=bG6I3=I5h zbeFyiv$SM6n?AQ=Npa$2hK?0hk1!gKY~G2Dq%b z@STCs4Nll~CthHu+7NcxFDjNpL)L$W6Fz^Gk)^#!tS&GWnHqcak1A|I`oQ`nOaDnD z&ETxP^Y8UYaTbx1`JI4dJ;?_;p}(+Wc;~_hV18<3P;v>Zh$WR$kla+V|#Y)AwOGdq+`p~b0 ze5pxjRGxk`es4Ko@4bwz@1=l{_T$sIvLui;WL@)FI02oPY#Z<1i2iAxm%4#+{*V7JhVV=UstV8ZB6_@>|B_LnF2>dpPMCp@{9&H=bYf zbdcy&qgKqXjbzH<2x52?QhuFza8FwSY5ljfD<(UT5njhHKi7cF(a#sZlpez_ey@L? z5ghEIyx954^dPe3aWdw(53*HVEX%^&k-cFx3bp28SHoX_egi*bjfQ;*meD{ai%Xim z+FKIu5?ZNVnCiS)0a`W#o z3y(^yi^+KIBGP~ro>N5wtgD!RvfAB|^$6o;o<`U7Yk>blne%$KOvpUDaa8|L3zSG2 z9S-onyd(XbTxG4*_ieMTdh3G%jX5Koh8gR8WjQi zO6)UAdKIvZHhy~BrwCnhvX9R+I764z4)tB_L%{r$eZbKE5HOq`N@<9g0WID8(*<%b zP!hh5`pxtK+4N&W^6zly;LSN}X1hcCHkU_(hE~v=^dw?uu@=;(Ip<{?uYmH)8?VU? zav@jhaQbKMH4qtVzGU6pH4MF*Pd~m!0JC2c4EMniIcOkl|r}O5p5QWG=Lv zy&T|*T?Q8mTh-(j?=4MDTJa3ow_Z)g)2xu4DSu6?O&HlZfpeZh$;iGtv;0Y{BeM5$ zTed#wz^+>*6VtOlk)>%MoZ38sjM~fBzm_fPYm{;KM~4nlKJfS_=MEzI=>r=@f*TT7 z-;gVb=w9S;f=W~20JiWc2Q;%zV(naC8(s7umN#3xav&yRZb8whSMFOd`tkWT?{nKB zxPR%mvUxLPhn|~0&o2dKS9PkDwG*LsiLP+4<`-yQxAW6x-%)7$Pus@wo+5PA-wpbC zAq>dIvd2X8yMdC&xHUJE2sF~Gpn1nlz{nE}zx13BSlXS{Ety{z{j6cd)f5Nz@u=OM z5`MtW`7^djaR%70MPhd7hywegrVV={4cK`5b%o&xV0#OHqr6c7ws7iBv4*q2`Vgq} zU2zpKooT<<>U9A)8&CJsvTUJzG%d-`|icgT35SCSltSFWSBDKv{_eeiRJRVOm1C@Pq04~YW!HU2Apw|$ zJ1brnhCrA0$f-+W$-vhCcKOu~3t)GQYv1$j0M2^T5#QZQfn%)uSo_{t;Fy~5sp?$- z&hE=UhAwvkyZz-@Oc}#thk&znTheb<9*?o2Yu$oUl%vx#*HkwHkS-Bm+Hq}Sd zag7q#A@ifGS1=YyU4r);-cpcaVY~Mj96(yu%2snjb7Yj&?lJLO?0NqHNqZ|IviYQj zC^qfLPG7U*z^2E@ku_JYD^%VQtJaQ~gI_*4kA2|Z` zzT%XX$PRVNT{lBt?2p&tj`0r{IWZ}F&CfDqI2QRT7F zdpx13gM=&(Vk{{M(QRJ?c*tXe!7~woGtaPc$a)n;g^Vw%LmJv=TQQL!|3T!T7s?^WFp?bu1*#7z$G#wc|Iq<_3+6tcqt1EdzM~s;3zQ5;y zY?S=HJzNzi%t=0ZCs&}a({khsXa?qvZL(d&cwkMAV4ZXjun+Go@0`8~?4C!$H|HvV zb4tLC&~g$uDH$1^!jFN2+40?`bHHh;{_gZy6gbg+oo9UWfpaJ@ZTs*nu$wRGa}Kxx zdu_p9&r%g&W%&9VyU#D~hT*dH%O`+V^y+rHrW#Pp*KTY(b{9y5)u|7|l7aB=<{@+O|KkTqWSiAywvP`Wds=kfbju`iJPElsZN`v8 zZdU7I_9JIXoiEQ<5jis?+-th17moAQ%2kVcdE{(zPEi0kD{gDN+;j}t9$DSbheNT; zCZ$yBmNPPA9Go-vJVN?|7w6j)(~+twZ)I=<8OK~_=0c0rFIIj4Qt zG@PPNNLRs{knQRh74)!V@L$3S(imp?NoJZ<9Y^m2q}~I3laS!HaZK}wAiOwKo^Im5 z5-N#FEx9bB1>echNE&8-HHRgCK z3mE<3pUYVKz~V)Uf4=)1*gEU`eXA3J{jVdoOZ+6i6ap0~$a3rhfHgMh-WO*I90i4@!c!8@LfIVD(*~50RSN31Kby>g{ST(w~ zT;cn`Xmz1mpUwnYNXaqQov%QVTy;AA-fchcBW$oRH`uvs(W3dFvSk+IUI{OZ83 z#hw^BAs;(|UGrC^hEFeY0BP{BSm7GvxRR`1WR4(bVDxm%hFi$hI68R6WCFR4t6qBb zxFXkS%Kx!N3vv$++C5*Rgq-h(eNT2IBgZT6^xRkKV9Q|{n{B>lu$J+| zF~j~3mMgp2Ub-EO*)*pr?HLaYGB&bSuqqNq zEKANlW$ssrS)Xzw$Gex{{omc2A3i<}@o&W;{BI5v5CfdF1RS8U=IoCXH|?Rpff!de zI|KN7o&Ma8Xy_0qb=f|X0i>xoUSmceP^#^N1Y@|1J5oMI;}#p3v8E%Hv2UR(`-k#r z?G9kq>sHx@z5tHD#M^|hIpD56N*WOr0B-dCQF1j4xbG>{WxG>>x8#-}D)j(&L76xI z$OgFF*{s^Pn!vrMF&p)50l56Br9ZuOfn%p~KG@w7*a>HUU$$NaU1lCTKW-HTrdr=J1>HR?R>G99y@__I_C6jpN5wy1cQh0td0O~dA7W*sLLB+%V zZ3Fu*L7u@8$#eq|h_e0BGWBK;hCffcBvN+@b5r(SxwGyPR;b8PqZ<3M?&nthvVw7J zy;o%vF837)E(3(d$LEpc;x1bmIfRr0G48%A9w6;Cd<aWqs z#T_v>BxmP@oSPrNlYA18yCJRZ#BO!uW{~nind^}IM;9vmT#>iO_`}$TcH|xOlKmo- zfjrr~GHLH^$mPlxn_50!%oU&aYsXZPLr?d+E$oFHai*G>|7B$Fe&!{4eiB*cjVpKq z_Q((oQi;p>gw#-1Rm(3uNMuXgl$$Ya&>Mf_Bf@2uQCUv9f-^f?^soQ`9a5YT*65Wu=kOG%kJR zNZEF1-#0bytSb&g!*00;#V*jPy4m;Rt=~ZXUd&l}V-Oe~rN`{*P5`T(lVH3=4cHEw zGSck1z|pm|e;m0TIR8{h2WOIjn;`G$O8Nji!4G@0BU*rW@?osm!+PLd^>`b8Djs-_ zZt5)ZP2lahr)z#>6>xd7oMGMHz%}`^azo~I;N+{l>RczW$S=xQ-3}atF6!15JM`WI zGn49a>gP3}AL8zICa(cX@^Ld+(>@>(tBQ+{Ka;GFVZ`=*(n|}`r*9CigRUz%Pf(-64D#&Xh**1%J7&>y`$2)t*T5+=ma`E}1$LKD?!Qx%mBP`?@|Qo;FZW4%Dy{`f{r=N%x3r_Gy&Y=D+bqn5IR zqfk4ToK7>3g|eBI&%X_rKvrLt&9ed@2>8!sp-apd6U=<{dwV(fqIa4Zqoj{j?j7IW ziuGZmk*R;2o&~nu(T`6$5{Vu81E=PKQjuKd`Nl0+0I6ZMipdW?B4aNnAiUfTS!re- z84V@Kc9C0}+r7x0){h0*!)nOgFZJw+{=p-$kDNaStJqC-Pd_cMpZuA#aMY zft%=n-F$O0iA_t9H@K&aZRd!*%q%zm%wx#g-=~qgcCn8#@Vt%4KI9DEj__-%MUJq4 z=A6+JWD7pKxc=%_WOh{b-%$@oy6)B`(?XL-2}w5)5Z{2Lq@{7(B`kj>xvK9U9dklNIxmi^W6(f`L2tuHh|?`@$xNw$0=K7d0X1a`!9igx#A$dh$pa;XzvSlF7Dn<0u#>-yn%XS`Nv4*03e5(21Zm^LWg%L z5T7?e+Y#%%hS}#A{ZPZ#d|n(Xdwx8Sc&82p;bgZGt3wdyW}AHZWj6-BYW^xY9fdiG zx1*x!RIq%cxICJvigjN~$8D7-u(e{lX!Nc?BxLTsdwRJ0kq?erR%&h)a2KH*3szl*Ra`uslt00960 z43~F2m5&$4rDRp4)Hjt%gCv!ak(@-N$Vvkxl#Cxr8Z;E4k|abZWbd8bxm@dVamVvK zHzh?;S;gjV zRCbTE^lh4<=BR4?(G|H+=fAT)U7QaZpLyEVc+#QS^XtQ-k<-vBO=*N;GPMTsIl7z+&+0dg_(FD47SHM>^KXAZ_Rn> z(7ix}`ram81A(}vyYISI6c8%=V+J*!1D7$#_0mYt}>i!X1^-3l;*?FR-;d%>WopzZ@6IO+&*6;$!>a^+2!T5Ld9N-99~Qy6loSE1a=*P^xfB8Eo=HA+{^Olwde};*HwtsSzCcg79nG|&D=2m zUB+eUq#7*kV`f*98}Mzzo|<+8ajY$ly_D}2f%V;|<>TT7vFXd=L&uX3VM|f=&7ShZ z*k=5OT=0DcS(bAazk}V7eZKc=7|jYfW;c4>mPsRbP0xn9{$Au(g-=cyY(+x-sF(eh za3mf};O@CTBuWp?9N9gLM0r5)*9280o)M)cRZ~dl-pu?kpp0CmWY_P=zsTJg(%BXL z06ETUoh*-~Bm1t-a*NRUyEowv0uPRK0TZusSjL7ef7xMc|Q2} zt_qIJo9AOPd_7D6K~Ie0SKtBhEk5Od%{(tX>9Z@$4**fzu)%#@7!YSoN|ilLfct6a z>lMj)?lhkdDt;XRjz@^e>5;p@zI(=Kc)2{V+&hR>y|g76W1Qxt23B2SmNem1SEkfRuc5dV`z;ko&!L z!uD(cQtOC~>}wK83Hg@OCB8tQOYD=E{XpoY%N#Br2kz^(hH!Zo;Czr&mDODa?BSV( zotq_q_4yD(=%ypI+s&Mo?5+f6184NiVIDBXSN=~vc^fqRR7iBmDFAx)_nJ7_uRwEj z-8js@6Uw`^nI3_fP*`natzSn$>QCCIC;?-5>LENqc_!c^eV#AxcnPMMJgO)>!oY%2 zGN~~y4$IexO3ggqfHV=V=J+WAq&v%qDT?r6!)u@6z=k|zBfD42_1%r_$a!~d@uOV^$W6*rS_2npBydF@E< z68K+-P#cnVUd2*8NhDq7Qe=+DBY8CRtM&m7k_#QYk}jkp5zeo3U|JBlGY7>BzwJZr ze%(HIhxr_`x=frA(?j<0TRI945m`G=q$lcHU~AjOGB4q1Y!P1gys^dbM11 z_x(a%Q`=^&iT<#J@A4z8IyUxnsn0**+y`Q36GC8 zc?1c!CX4cQgCS2z&RDb_EHtm)RwRX3LUpDwaeO4R)k8L^7)Vj&~ z_&+yj!Mn|8=={)j+vN2Hg+-Qhll{Ab1?en}s=B?x+D7nG#gCd>F{Ump}U?z5#ix)Y_8W1jMiv z_m27pARM*jbPqoUZmE6P!YggS`6BU_A+jIX{huA|x1IwQD^W?#@gcM;P_#QQKLhjj z<`au<>;y*C{&#ni4@1M<*AK6qeg|~e&eWe}0T%p`S{ir+$}(0-zhX2(!KJBdFPGke zWW^_ZlRR+d)N3_m#VDsG_cT*?(u+=(z%BElj+yB)TX1D)DwsL26$N3A$F}ON` za>dA1Px`x#z6uF}SFLhq4Ux$1sm?y1gyc?TGntLyNCv!oxaab3Bul(A&9}covg&`H z=BJvFjJfzW%tIeZlgtFx`R7P<(s~}+*dlT8-V|5;Epq+D9C}YOkrT&xW^H;1*%3b5 z&kR%{%Vn~IJ9-}5^nPBnyZ;+oe3&9tm1)>?t0qphP6O*rJ)%0!iDAtQ^USKMbyzK; z+$(V_4NH29y?<;zgE_lI=IY!$Fs{URXz{#%m>0ci=(E@Z@uL6M?P)TET&t5c5*rV~ zo12dPDpnt%I)2(y((M7%>R0RY`D;Rbtd|d(N<&j)cg2!{m(bE6zEQus7TTWLW!(QW z4Xmfkj_OsGz^=IBfJ;^br*@)MSLhOO(;Z%HPhbGyyiDBYaR-nKgB_ShHv@UC-00uE zb|7m|&X(T@$gg4n7s^Y4{OG*>({^DXb9jLlPhSSovM|=APyz_@)v=M(&p;?XR0*1* z1J^E-QM}U}IG66pA2_fN*fwnkcz@f0B^TkX{j~~Ov$u{jLl;7GyWgk9N%GK0d(Kjf zmxa23ReAf9M4@K0$gQ}nEl{a*e?>?jKNJf;JLP?N9b}wz7mVDT4iVJb;f0@K(C>It zxw!lwCOt8_-3PN+ptOLqbyNn+Zl6^DxbiS!?Bh{Cvqq#t?)XHVC^m#luYCSb4H<Ozt`&u? z7wfmgRO({0ZzE~tI*yHw?g~uXi&(em+RYcn7D#*ZlPk#+#|o=6K`Ay{u}IQi!*o+1 zrkxJsyT~7oPfK5_-jUr7j~GMg8COOjrNkNkJ57Va!%=p!OBJ9zQf78R_-~+{cBY+) zs{(rS{+^dx-azB3Jb}u+&Csl#SSMF}8(QTJeS}P=p}kLOdi0Atu$9w{gNzmc=lHFL zIRyrAE&P?MLgMD{-{W+DVit(rMRM&umOy$%iGO2A0ofVGch~PRQ0w+AxcIXeC}qCX zo;{C%+DLrSHVOo?x6NGfn-GwGr>49ll!2Jq;d#Et6Np2H(!Os;;JOX>InxTM?&6bZgq!I!xS(sohVc5W^3)G%5(`OX>)em5N%`r8Xr1#Yq0&b`6H zYjM@KJQB+pi}?2c{(!V=`-gng!jS&s*Ab!HN3l`kVAR5(K5Ra_)<*heBDR_rS%jT4 zK$cLe-;2Xt$Uf53_3Cyta@-6Z5ADuHuG;`#K|&J}M}8)kla)yF(@O8%(nB&rbo7N& z!aO(iOoziqk%Ap(?U*N#I!SL>y0RQ8gLAWG8IO=!woyT1l@5~G&d!xLgpiaOp7m3u zknqeF&mo7A8`tykL-s6klBCYCb{#`@(AsMeKqBkNP@&X;a%}BR6Ik@w-67I=jBbM45r%Hzl`Q zTL?oy${=BLXcCfxo|h_vI~35uW-AFdC|_^4PrR%bXxr>+YaZwVJ)y<8aGxzSOoh>6 zZumg+mYDaKpD97B%ztH@#>Ak#Kf-wfR|D8uH%GJQ^G~1C+M- zE_gZzWY4>YztsDHv@I_^+inX)Nh1BUD+S!%`l81%X~6jvZ@Mdc9kAc`dsJ1=04pi6 zIa{X?+F~awq|PI>lr@#>JYNk>ucssHYqX&L+}0Bs)^wc}Pb&wJn5FqnbzVd=Va>XFnS)5J)qno}*K(xXod_qT zYNVpSAAkGL2dS9r+MaWRNL^X}?R)*xC+)wO=^%{EwkzKvblj0qZ@+Y`n4Hhq`zKyy zWguN4tM-rPRz$PDgaHjbEL-kOq^_L6{Nx$(g{m>WR$00rC;t{+@5xBq@pBNO{T*z) z7e_;u%bhB3w|*$ubMp7Lfh|xK^sR7`IE9B$5-#)7dpjV=GJ!E(D9WAa=$(#&FBW~nbg zI=Shd*f?OLs_wS?jhfi(IwEAF@f=&PILK(X^doEYs?DBXHIeNRH+=kC1iLbBsU>lXYa_@ zKmyU-eD$xr3$Sd{Yct|O59Vh$yP8}6!Pi^=#peXC$7`tZe(RP2i2ki@o=9H{Srvtb zRkztta{lPMKHD0os=v0=E#f!SOq24m@8zKWvdD+Y;!Ds}yJL{PqYPTU8SNg9c@J&x z+oUf=1Olt&jbkzU0&tedWb+PR0j`2av-xW-5b`m97p;2=b{D)y|n}0BY#Hks-DNRRGi%wTnO*sY$pBMa?Jn z6(ud}s`=a--nN0Z2MDFUj+=%}^4xVvASzEM!YnPKjyk zhZh+e&ivx+LN7y3^w8B;nE2)R39lRHFh6u3Y4$k<%fy;PcmocIj{Lq!4$eqF=$3dx zKph+Mcz4DxokPZioXhI4AZ%R{rp?-X3EM{^JR~$eA^VtMSD?)|lf%UrKNDOHnUuU9@gs{vGg-@T6yTIRa zU5Nv--|d=V%E}@uRCVac4_j#$~D zwnBYn9#*QvtB7D57S%Y}DIC?rbW8mGaA5|9P1m^h)keU>!W^>(Za<{7qM8CD2l}l*`pRlv*a*aXRcYzG&p;;DwZ0Uo0!mj|TKIAx zP}TM^_TBZs6T7)=_0RdK-aj|!b{u#bPMHg1tbivz>Sqh*fWr3O3!R*R(hm`9UvU=5 z)CDSkZg~Uo>Cmu6aC+~WMj8(0?}USZsO0-Y z-%8@}=+xng)W6agR#BAOqPzstb$%WWanr}5x5l3Cc8yr6VaU*~tj3yy_BNBwmRQG_ z5LOC1hfO^U=_7EkwO#I%wr!VT;{`43U z+X@Sp6?h{lCiG^oACcs^Tisgbjg&`lpTD0qQoTmqn&OL*r_}w^P5vPAPS);Mj5I}_ zMYhY!MWe{umO7*QuN^5ipZ-jqJyI6NL(hwjBbn>U^jimZ4a`np6$w7R*kLX?7qR9@36Vn$#y|{G&cG&R2!EJW8DfeU{vBh z((VU4mF(`p@_ggaSjRFflvn7|4E=^Fg7nq@zN=y2iTejHdyGSP8~?GRCV`M)vG~F+ z(HQR0L4{7H5C{RtC!T zt*4S-6Oi?@rn^HrfcUe!>11#g5W-dBL}DLsCJ&wrG7@0S=d*BZh zfBEzPYsB`RcDl>M3Ob*GjC&v!sWV3hY>Y5%4Vy9nQG9Y?Yv7?3u@Fj}bBj@MgS2ZF zaobcVD7r{XTRE5q6{G*+Pn+~YjqJBCi@Se9U0I1|s&xXeS)Rbk6>wfms{jsPb+$mnG2p5k>(_5f142J3;*{h*AXPtAOSX>##dqFR_}VU@ zlG$AwU0Q%ABQi7acNBQn_wKY_IS#xev`!vL0$$oF&Ucy@@b1mjQ_m8Br~LiILo1li zyOb?Yo-={kFn4aSIul5nMb6A<5{N6pBO3kkz;#T_+IO}YIO?%+2Av(i8d&h7YokB3 z^T}sMiip}0eyD;8Q zrv!N=CDC^M>ycOMH#JB64|%DU(&McQkY{JJ-ojws&&HS8j8BdtWh=`GaqmPjDg8}n z(k>)wxy|~?G01(Zu=U-^MaYTrd>OP@8QG?<%hY!4$97&Lt4m1Zd!!@>|xvC2Y*yn)}2%YbU-mXlkidc?4%C z9RtoXN+98xM(ow@BFGnVR!HT0AgOeimTw7pmh`YLWbu_U3#8WOGJ_($Lt1mX!lfdnNxun-k42Z#}s(VMA zfNTz5M`e*f`OCiK9=QTMNwJZgUG~89HD%<5JOEyevZ&>UK;XUCo4y^B1H5Ldzi&@0 z23}Zbzv{j`;O*Aqw6+TamA3J8U)V7qru4K<(iCnUG z<2`w-DqWh!7!Si*kpqWjm;c53n4NzeO8Jo?paOy^Br*?O%i0o{itU#6T3JPN$X@;7 zf0=z|$hp|GEimZ`a--FbD<~NuktRK@^BHOW3y>)* zbu4nw0h_+Q-k~t3hxONeiiromv8LD8BXh7AtDGZ4A6~nU#k`ZCVel6-54uPeXza#F zv#VlSY=5}F>|M*rfFMXtm$serNrl3d-LjC;0p+F37kp9K2(;&n1n&)xp-z<>`SE-v zG!|YvYWHaxS{7IN9ld%P+7u?{6b_^TEA(^RXQ@@d9uhg?q(1`O9Z6T;Zk+Ei!{EBj z|IPQK-ur^WdU>GM_OSh9=KsZ3mGnyGa^Rgz-0;@i26z?w0#1LP&#`gqjdvVn;hjL7 z@sEQ9@P@i&Kc2b@yd1MP)PHY*r)QlxuqhU(qJmeBVv|7rHSD44o&mYR=6%HrDIlcn zdqNX00%vA9bC9M3?9$T{BMcv4S=x^+`EeLp^TZf=Ew`chZfcJ^TMinxOm_H1xC1@0 z?5b~uFW_{09^YI&lzDqS7D!wI`R%ehdo_N;Yq6mnEfZ33MPg^@?zj9H6W_}*XIW$R zz`xnwzt-cM9Vs{NY1(6TWs}xSej3(3rk}|FwGkWE$v=6tMgOJqb$`BQe*=jfpKsb$ha!=l#_Qr~gT#c4%7K($NUodZ zX&#eCQiM?|#B@Mnq)u7ib`*(d9v;PPc_h~DWQt`TN4BfDciL(_WM#7gO>#dXv!d2n zKzSuHvg{9RZTN|F*Ys%(t#wF~xUK7$r+~dy7vsIB1+ZJ!RkC;eP3+)0^PMzt$Ck(! z_d`3!vEi?70h1z%HDRt24_sDY>GYF~Ec-ajcmAFeX>E#e5#cAY`&YsJ_S8DiDp{ z$`K`YMujF&Q&)$pt?UBY{Q3N41yR7z-c3%8O90d6y32aDFR-knBxPznfUW*izP`i^ z*k8Q#y}Y@AxaloqlWz`0U-6X8!e$`Fy+62j><3c8{%ZdFHXy|;PFrft0P)6YVULp? z5N;yhc2#cz_NQMu@(1F9t<2{i98eCdlWsiWPQQU^QA}uGrUFCV?UJi@R6++8R2v<^13hix7e4Z9{J|0zIMLFWGIYM-No`hpsvr z#}BXA?)M$}_CTiC2j%b;r@_xJvbXY~KgQRN*@=6(;`3ELWrw~NW7&~2!p)@zv1Vxd zlBZ1t*eJ6t@yOZ*Y^hz}*|_;Tb|_i>Dh*P>ZqM~;SeS#o5shZ&a_x||C)_Ws+Ysqt zPbc%u_aLLelIhj{7@5qHs1H`1$ZBQ_-#4E?_9KO!#7}ZasN4F^1$iJ*V&Ry3h>qk6 ztsP<=&PeX|*<|DygQO>kT>Bt>_szCU^piFT@%clmK7%rpmmWe*^`TrJ4JO$}L7 ztvbU-TamR=bH(n}e8^Z3kBHx*fpn@�o#Nb|p-p83NLsiF&iesP&$&wni@{O(-X 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 drari3t6_S1LfN)MN!Q{=kq+ z$*XUdHbL*r)Ru+kGtl-ikjf*q5^5fP8A;2jh9|EjEEMPeVph@BRa8q;tlNHhqTiW_ z?HS4D+OMUtPqLbBt#=rQ-gIhs4VxiptQ(Dq5GWun}q#}FZYvb9%4uTT88RQ z8Ehzv{U&+u8s={-sCdt}1`_PIAIn{B168eQ$8+y`LF=t9>+gnR(4$~mcXQDc1|@z? zyfxbnB(af~Dx6-U$jW60UiJrSM%X3xLJVi8P`63nQvq5{jrC!#7ND61Z!Ea)4OD~U z{EO@vAZM!hC!F;GqEC2-P17S7h@lS=OgBQ8v%`<(+TGBs8EE;{@&lBn8j>fH|Dl}1 zBSD8bBP@M+$4>Ced2H4x*Ru#wz%EDR33|8{2STHGjs@}{(dFux)Xf)2z8m~L(OC?s zilMc$rI|=mIWu-%Y6@xb;fHR7RU^%G%dH&0Y@}XPI+2vlh2+n-Ry>m1h{VyDf*QYY zB;+=)_xt_{yDQ%t{nN)I0yaQxi6Ns7{YL{mXxmjG?4z5QHcEifKun#sjNB)RMr5m+;+~MbI|n= zNq7k~o$n`nLiK=pZEEa1VVj$MyrOXCIp%lEDT$%qo0Z_Rezv z9`6&Ck&&{8>ZaavN0t9Uo6-IzyXG?J$-ht@q;3y`CuC;UzK8(QdS3sClbl@4oMbdb zCUUs6Wy^-5ETDcr^EW#BG0;{INPeCk2WsG_>opQ?Krvfy+`YLSNcRkEdf2OA=)qd0 zk##GfPcpy8%>4(nf4W$ycJ4o@H&zxmHnD+c!awC22Y%s$HMT{Kr=DZg2Q@!6sW;ea zZ(%}qiNo$L_SS~7Pe{1_OZBsS5)w-pW2fKuBRS2{zry_*Qs$5CsfxUd)MmNA1LFKh z9g|-x*eZooS7X=9o5GP|?3r`bBn?UF5_92cqc}w9S7}*4gM9(rbH`ghVux)cTXRh@ zHk`Vgs5y5W^F0&}#=aSa+h5t*HoH2YGFd6*hCnf(b9ZR^msaTBT4FHc{uBmAE`D7+ z)Cff9$>EjO%N%Y;Z_?!n0ZQ|_ku7&qIXk3!{?6%#Ky7g4B}aDw^+;EtJ7G6aw4LsZ ztQrAQO2B4|)z4vw5n1xnf(Cs_hwa*Stc8xd>(kAjO+v#fTMJJIekiE?{^5tSJw^)u zUG<;z9jxea%hKmzVN1*{h4|9L*j2JQ*JHaX4tQ>HS+Z9_qOzQCV4V$;x3lm2oIZ|} zxSOJ%y&E}Rz3*X#*iED+)NE{O+k?~{5qZby50E0UvQWW76G_)igBOLnaj1Gl;9c1- z*cVppZ~0{eJ8tPE<@HBl!`qg!8K-kt@P)Si@tQHXb(wqV&F?~svPt9t z9WLk!NRiOg*Mk9-vhYDaK_ISO^&`mN3P=k~HCvB3pq$f?|M7^^?|ZbQdiqZR)wN)1 z*A9N5%n4o{w@L@{SH|yOFLi-*N=8HW{dEqfr3n!;!_cSRF1Sm23OfEH3SQjQ1r2VL z{y+W=P_UI;bl2Juqqx+6HI==>in`WeLIz;Vv3M`4CKA;&(XYRNaYY1ksA>-7A~J)Aq%k(_u$d6BgF z6W^GZ84ga2o^U(XguN9HYD|JVu>Ix8h02m6SnnxZbdM_z^9)^A$zPp-J8ibkC$?UI zN`KbDmLL&m8PD}5?>Y-zZX#KG-)&WQ(%rEE1_5o#=8P}w- zG*G4*!UQZsfXW*nc{k=0P~vho%ICEK+0XEL-0V0I`*^31)ZK(Zt%E-MGP|K?{#;Fw z)In(b`)htI?8N^7009603|D776>Jo*NE!--77baYH==0hL_$UpQmKr{N+qMAWrk8& zk?ft3ajk2eyO-;_mx{~=k%$tB;`R0U{mzHyod1N%v7^HMUo;`Z;Ze}?>&h5oUg4Ol zosVTD(s3DEULa1;TRd}iAVco#<7c*?u`znHVeSAO`BHgn!dfL!@aePK{(s`wx-~`W zRcs-)Hm*MZE#w}ywkaptIDNuagXgzCoWF@JvO{kl+>S*4C8uYiLORH`wPJ*;-$mxK zdV;2X0+JW2L?)aQ!}4Dl>U&cHF=#bqc?zmD1O9c;~^0IN_b}Lu^d`AjNixtS!gYI@lU_T1zJMqpZ5!=&CY0S+ELChG z4Kd=Txz~I%Fhl+->)JYhtW3IC@A>@*lB;(JByR6RW=#8tu;nu3mR0wgg>OKE_wDh2-^&6kXm<6k*#@9=yzs2U z2q5kq*%U?AhTKozR?F@mME~XP#?PZg@pbTRdh;0y)}69?ci;^VX?jv4-Mae7u2|PRDJrUYv~rp{go(UrTH`xkThT{+OOrRdk+N5x0Q&AJO|zri43N93vgDw_e`*P z2sDyRFYl)h)W_5bpL}8mB{jdWzwsDEjLILqah--)|3%K!*cxD!R<7CLEjuK0A9Bq; zUP7h^fhBrxJ#tNk1|8m!k-v4IouFuif}~f+cH6zcmWO9+EX59COK0{^UL|77^Qqo1 zA6!sSo2Y-m{0;KW@=(BAcVzzcvgzTTM~aX3HD?n3$!o%MoJAt3F zQ*see1_Zs*v^KUYv^?3pE9CukXvq;#@vqi~7KI`IhmYs^Bq_G)j&?opzNESa?lS;R z(VV0}SOe%u{JNKven6sZ7wJ$l5VXVIT1Z<%!cBXdQ|kbe3WK|9-KVj9Z_;0@jT%TY z9X|J9g(1>^cfXY#Ek(}Apc_Sb9GgXwb=B*xp+MY%HTokBTO^#Kga-$(<({kf&pYba zV)^Hj=9D!GVxH#pU*#kJi2JWopIeaI)mRvN+6q~Q8kr@bf1$w351}n+h^MXAknvDO1XamUwmJ?Cwol-5^M$A zRkyPdUl^n?OTQxBCG<|R!b;?ryC>O~82=67^eAPTA|H#>(quw|Rn zp|I5ND42Gi`!tq;f`fa9$NUdsbMG~gD{5lMg$SRgz1hgD9Jt^gb`mKb8crPPNhFGM zCbDLCV%|UF)}QH_aDIHN)n?ly$meNl+?0F_#J+WwCz*$ULM={Vxb6bxlxbKTbr!fz zZ*B864?%NZ-6?rRDG=<83Oz%c-_QHL?%jR5Ao$T4%kz^#{KCKXm^s2uyuLY}-YRwHKOTmUFo!EFFwvuA!ioBYvb^q;1Lw@2vihweQ z0#mO~ZHnqB@c8kv;rJ)yPd$~6CwpM?@Fi{cCK_@(ez%LZF_86c@U``-AfzoaSq!pV ztY5LA=HrwImToav;QV(JMrRW0ckOhA)TZwB3wLNi`LSao>po8bj-AjvCAbOnBP+SY z)s?_*FJ8Co>%6Z-+bb)qp8vP9L(faXHsH^?1g2{9L7;C?xz5J{_`e$uJsJK4{0%Rz zyjI)`O;>hpKKC^d*oEi6hO^!SU83n8|C~DDqbonOSQ~&aU_mN(*jHC(U5iB2%Vd{3rxzvU73?CQx+wgJ+Tu5o$vAn?8N#3Y03D^-n)2 z0W(7O-gde;G)70g8s+-~@3q{%>XKsMJN$P@F2)4-J)I&xCFQ_x{1<4E7yx_~%lB5i zVrZIbyZ6i9A2=!f=NeQwz;LLW^f#OZvhyb=JTU@Qg6e|PsBG{WjQ@m9m{{~?)qPWD4rB{E(O{`h(R4{}&1Ejz?Sv1#tq2$?;O{B_9e zmKZ_)tHn_+@eJhWG23GOkIla;1jwh6v1xYm9{WEd^K*KeY+kUDQ5YG1=jak7^AgJL z-v5o&r3>unJqPer|HyR9bvtyExbX9=Tr}ixF0HowsRmU$w+60xxfsZ6nq7r7?STGo z@_s~EGH{eC|9M>2n!o!&a=@*#&|KjZ<9oaT_&#m1?mwOZ|A9|U^vonQPX|X>S^kEm z-oz#QR!jkhlJxnNnkg_Eh=!!ANOa9uQT6kC%mJK*7diA$LvyQ9!Q0et?^z zPrR?Mq+|9@(~Cd5&SK^9Tc(9g;Ydo$n%h54MS7TY)&rg}QZ~RpvFRCydRn3%VBSFUF>{yKgETgOKxVs>{MJ9vO*$#_f3` zNdCAx`|8RINL=@;QqDR63pAd;UMm>K+s?B~=Ct%6t9aO`fA|noOhqnqiHQV~`@g-c zMQ%VhqTS@tdBFDA=lMQa6}Yc2>R!|y1>VGnzE#s6;LEI1TnN#?SJZPWne&EbbBl5K z;|xuD_REhFLxH2&*R~>a8!+?)PuHtj1Nq69VCfw`P#q#1eD~Y{{$bGPq;HKPquG4+pRthy|@pxV6w^JExGoyKKop?z~UdhG<{F8q<%%M*jj?#5nSW+jj+ON~w$GJ)=9 zm8Ua20POQ#HJ*z;1NWNVkekvO;Dz$8Mn^P2^OH9>j-QE!=KI&S*GQHE?~L<=m)!i` zlr|ohxI74~zp&>{nJdsHB;wRlWP!Bj`dvGPV5n%;;e{?Nfvll#A7@>&(7Qu4${<-6 zU(w9JE-#S9YVlV0|E^UbS>u5F`7G#rt8``2uwcN6k1Sr0A> zeS*z;e9y%!4Qv*jeB$w+5;oN?8CCMN#YU%Yhu{^S$l7pkChxi#QvbTze0=AO4QCep zn>JKLLQ#R%2cavNR%nu5mfi^wx+A-m^ge{5N8wj8;^+Ohc3@6l{~3_`yp4C_h@M}a&0D%HmE32<&j z8`X-DfGMgt&>UA4zq7i%k+?(`Ros+i-$|XzJG-0b=LzJ{Tnd;T!yiu)O9RX zaNl}*?G3Dbr@7%^{s2;Ft=a)=gpl#eZRN-b59C-~T)h6z8sst(wssbGBX5t+_iew^ zkrz`a6?tL;n|hi?NxG)UmDOP?Kbl6io#@N#JgO&85=>xVvZBqMkwJjK!wSyWp zk+Z;Q;aWV(;sSS4*3Q_d5_poeOOALI0Z&e#VJBe>P3zSXOASvzD?(k`19h!j_S0&kHe*4kKTz?E?<87SW2y1okI zg9B@Sm>NUeh0V%;GU}nkwqAQAp%rQvJv_&)M4)W^x|L`}2gWYVmE4eKVEbx~U*9PV zje=d4gxNZ1+F6ygCfE;}?!`8EZ9V{8^5*cFb*;ep>&UevBmnC$Uq|;A0xg%YP04f= zNGJ6^?6;GHN`AjdhsgxwU0CX-KX)9iFMlVTV?B+TgMlWhGErEbzgEn@{W~_KI10IG zA3$nNkA#oTe80c?@YoyXA>^1GI9k<}j9iUQH}UUk*tB+qTvxycI ztgg$+o1ti6g=4eA79bwpWB1r25y&U{A3hWP1oZPg%T8+r0xK)kX-@qhG%lXYn$)}l z+{=pn&3&oB<(zS??+yU2tfzJ(IRH2w11p?DD8QuGn|K|x0ooDjMW-VQKoX&lADu6R z%F8jaed3EC_wVSr?PghU{pgSACGQ?#<}K?TELwZQHee8`){B}y z>kK1f+_fe;N)g#LC540%4mL(9^`-P@BG{SH1vFhFP0vBL82fHpSUIv`Rabl2II5fWf6K*ly3Ebrd zucMc#L*qWBJ3U-0V7tWVUv`fKM(&46$4$~eT_c~BW3~nAliV^Vl6C;$@3)PTu|be| z%t&pz<_2CXGAsaQpVE(WJ>?@S3WI- z>_mpOu>>C*cZ_6sh9+TS?PpDCk2q{R8h@@ffP(C%eB+$_`9A9i>}u|Mq^-ZTP?+q8 zB&iot!O#1!a-0}!W{{4rxS$_vZizuFyYKEdzYA&Z;hd_nOHg)Ou=MZXE~pc`+?Tnx z5-7*^HYb@~1$tNFw;F95V5P3JtIcf(j^FEgOCu3zJh{egM%)n^Rh+IlpMD4IStkYO zhHhYXUFSY|It;Y-jjjE^E&_R_O&0%9G!P9sVjW@_P%ILb(_HBcvGro-oP;7V?%1Co zpYr8ce86#R?+affn#+yYo2w&PByTRmY$wvli<5qpMkA9@^v-va8nP+b`g>*^kkjGY zQ|I&@Ib&a$9bLZ2S$sKCeftJvZ4uY7GQWcKQ+pbmB# zx)4Jo#T@E(W{6A6tcSAU-7h8E>>>R-*N>rp7JV0wy|F*2jJc~!hZ|0fVueXwh`CTA zHXITqtZ5WOs<6gkvE5e4*u^Jk_oyH%$Y$2GW)-prZ=BA$WP}`xfwzNS9wEDSq=@Pn zk1SRHv7CHyq?b(}joFxeyd>>tpRpJzVY)dLh)|DvARolw7U>tmbh%}~Df z?%5|TEs)i{qH^WbTR0tD*>TJ)1v9O(C7#Mqkzlo}( z{h$YPiBU2#(;ls_k@|$}4b{7vFM1<8HG3VD@P&+wo<`)zL1kI~2+jWW|)AK=tX0svczDdm= z4c~&9Kgze!bv_}%MgB;;2@C7Q`wx6S5rky^x?SEg*O1mPS@rOw6f%|jm6Ccn$O<{M zQaw2tS;PFBf0pe-mTmhC;}{tk?Ru{yE{!40%fmk*_9>Df!n<^G8P?Emm(~r4VVTfV z(I@OVOy8?=bT9y^{}h>1K73Qy+mmo!z187Z0>i zsp@@NnZOi({ORunM_?TrQuyLBuM1C=6*tGd1ZMZ!yD!zcfuW;X_VLbZpw>68Xlnfl zq+3fR)|$Hmans~Qe8`0ot78VpOM{oGCdxmf_hYEWO2_yhd(3} zA*_F{s%X6YGE&TVU*88WM!K|*ysUv6GM8@M^Yi%$WJ!9gUF{ZtEamk}Ep1GYc`R{P z`gTvG-=Fz%;BhZfx)W|Sw^?DsbaB(UL>g8JLDQK1K`b=sIuO?0+S)}s8eK;{Bnq$SRAa>;Nyq#`p21C|nh(z2*{6i` zqHjmy#J%cku4HrtKzNGIKTaiAa$slk6YdsVd|DNrJB;+!fH zi)iTbRzR!vGa7Jg z2Fl*HxN++ts2}eb`^+kZN`nu@l6{R(;JNvN{F^+8zUuw@A14{3^T%u@HB+$Qwzyox zDmqr`2rGv!kihzuLJHc8AVr30Bjr?%w6N*S#vKF5kmu|?L3@XcHui!~cFo909!ZoD z(?I&oj^JcmfK(rf<*{$Okd!kpyC=W}Yt95bZP&ktW!3?PEkOdz+~If5NK*yRU#1xx zoCt;VQ&+Ms@HaxKXJMh-+2=s?(>v23y$wj(iQj5Nt%161c*nVkV4$y|9)Djd0Sw(G z!j}5;{UNBVq0IOv&^xRoPr1+Y!c?9tro9}Io7h}|b+x?_^?t_0~n#0OH`2a(1*^M`cF7AgD_H|00Z|9i#J)`D;i zB!b`fh*Jl!^ul2q&rdHfJ<23wQ>r8!S-yP!j?#bjo&e?AR^bw#lOT84u07%+4Z=z72Nrsm;PWVA_V3MVSQv2o zy{LTyRv!NRs%dy9)}M&jKp@W``5CGH;>JLv)_Jchn(IRP>Q0%_HKj-o>#@%6xHr%L z-hAce_eiCT&e42+Ao*pywa}x(Sby!Bu1k$3R$f#3&&R$Gi-h_ib?83Ej|B3EwVyz! zj-_&pVHxBIGTr>{0}vi*rAW_OLrvSIO&y=rfOP*}_$xnUp!Ck!Txl!-ns=kcBB=SezS{8k(#mKRb`rHEAERI|~qHXVwf^SR+MR!K)f< zklGe<;oPNfNFy04J8elu8l$OXUgMGaZR7Cd@YQ)Ad%ya*$6>@<#0C}hVI-=(%NF&d zVQKsFD`!ROG4npV?Y`0+`iLj`$V{n1vYgJnpFRcf`pF59EbWf=s8ZDA~#&z}iPMiq&@vsidOR=-Al3@d6c zG}T`c!aA#hkP|;oAnCo#nBP=CQn-&}n=?2_9d%CE7F!M45OMg>}NJY+)|rr*HVsYX8P%%(r8jDlSeSq2*=diel z0aP1bcdA$$kbm~%F(;1!Mjm&*xxW;M?~1A^M=OA^NJU&kO9yhQr{2z)Z-?;CDu-~X z|1ef&?dsO(ADAx{+U0z56_(#36)a^Q!TlfY z=+lYRXytLI$Mbj=mSuIxtVMEK$m*{fj$y<1I2mPFibTDYkLNaZVVQsXI#n}W%od!M zS*mypLw|G{J#i|5xUJ6pr8`m}-!9@9b9WMy-`iMQwSxjR9}OLDxl@27TH^FhAq&Vu zlD(Q=3xG05HLdci2dWNPYw0UBprj{u@XVh8d3V^3ozzBXSfu7{`L+?NO~0zRNn1i` zXbAhOZ6Rb%(F;tXBH@AjaC(sf857ps?l89q$AYM%D}PBH!SbOM9j6J-Si3GE@cZOG zB#AzHrL}DZlDW#?R!t}%g-V@FTR5LX`w~f^itR|*85FSFeq>&!{}{jfX^3@npA_$* zUsyRYr9J*T5=*w;EjHCl$8-%1Tcw|?@siGHU$eC^Bz>XZv3EEEMM+rT>5&5!6+5+e z$e2TI>hdmX`3oRz+gWCkJCE!7se$hO(LjknNkTZ9`mK`Dkj<-gA z=jKE0?(^9zjE_RazAJIk+rB_yQeUN?mj=8P;e?%&zl>g1*&lMW6fnKYbE^B#3oOxk zaVz-j-Twgq0RR6Cmv=Z7eiX(vkt9V486{2QS17GRW+*LWWF`%j$S8a7d0l&4murtZ zxVB?tS11`3iK3y5j1YeQI?wm{{&k-7Iq!L2WWF8TDpGm_t8Pm_y>Rdb*4{YvpLNlC ztSfz~(tRQp>$R5D4?ncRdQPqJ@zpV`U7Ar1yRs8&G_Pl-P1j?&f`ogb@c=TosXJCR zeq;7_0<}R_3?ut5Y%6!jf}mTg^!AGFKxs;P(W|u^X!A`PD$6&ZOpcs6Zd(u4ddD~2 z{@w|-VKXdsmD5mH6hv5B?Sgt1+YI-5Z>V!qH7t322x_G?&#@(*g(_9;9B$VrV1Cgh zo)Db}s*~~48_!&UoaC*m6!jFGv$ZSN+lF9lro_L)hy5_uf1+AiGXfba3ddRf(y_c% zFE{Ch4%V2dp9)#zz}l9>t-T#nSQp2<(!pWBR%gefcAUW4R@p-ucXhGmPWeGA{=Hb< zJ?olS_Zy3MHc;z@^)a_2RGH2(iE*9{@w%hl;82mBoM6ufX^mx*uGgqg)W4}PkNh2& zvIpj}Ws;!M_GVn0K_uXvV|52*0-<(_efiCc3aGp7WAr&H1nSuA9!yEE0M?Iev#@o5 z$|Zro-=6z`Ii{K&PcH!Ki*U=8H$ISF{)DD*$_;#Yb^Wh!{qjfJG(N{*|x(thd(Z`u(Hyo0?b)PMd#R z`i#|f26W4mU0A;P6~9WaA~GI}%&9qF#hf9#E1z6RHcsgIUlH~Z1{TZd;-*Xyf~zx!3nkZICqzqc0p~Mh;##q3biIz z|04#uLyggfg6@PZP!YIvrsAInlsE<%?66jW!bUtqx;_hO$La$9yc`0DYwJnwg-C+=<~ZO>yW1KNpf-G0#ZExYh<%^$Iw-u6}yaw z5Ufkut4g$mjMvL|3M>x-bx2$&cD4w!rmEoL6zVKBwS}e>96PgdzS#{aYjaAgI$na%j)7H%?dGU;faJj zPUzUP&&jy45J}@QqVMvbVc~}7^~dhq#NrNd7gPS-SRUiadUih>Rtq*U?upV7<&wrj zyx$|XJr24*RDm^Jg+ei=g;=F8_}^sB{k8c^UnZZQLxy9ZeR-1@<}M5F^m+6b6FpVG zjZF|hde^U`p@OF&@pp2cwU!d(?Kb*PoaqdVM_W?PFD^rwzKrGzK~|{Z>Q;DvB^PQe znx?**>;*h!{Bl+LD%5zlTmNSL4OQBN=XnP;psY+_L+UnJVEjD0>G|9=pnSDXcth(i8XT z4OVA5u?rj7VGU`XL*dRvtl72WX@*l9R&na6#M(4qS=xE+yAig?SpMauq-ult)t~Lj z$L}GDFSe{k`vclP+Dqj<#0A8{%Q>vXosiW^Y`Jt{5@_`&`?TE%Kt$(FoVSy(myKIKr=IjmUvd|SYt1xwSDWGf%=AcKGPZLiug z=AEvqJ0UfU$*pw{yNa6e;kEA_+`Q!RE!W=586wkG z%q1x>3Cr77c^n>&VCCzr7mFQou*%GQ(&mF8R=VvV-mdh)a%or1&QIf55=+0*GGvR? zk*?O;8I_oswO8v)bs9!DR9A*{MuXjeO^>3n2*reJ zsV$VvP&(aZBqw4I6&xC6bK@>hQTt6JQfuwKrRXU!{=nM*LSn%kAt;Xd>NG#E1XQt> z4^)+4pfDc$E{%Wz_kWFENwxLrmN={JgXEe6(O z9xqqp6~Y9PcHEsh*nbT@#uP4I^W6#I%6ybniyM$`^=UZCaS#fA%%0u(G5{F2oAcOQ zdx81l=aAa=gHSfc+{&h$4CPb_sUJhHp`1rV)%D0HC>5j?*ZuVb#@C+E>ZgaHNS;&} z6Q>RtOV$terNjV1p?cYSfD4~AOBu$sc4K1CzBq5a7R-Jtb~~q29%;vN@4F^1Ve!A5 zK#o2aEX}B81P3i+Ig6oq=LtnDTNVtOYTSdRi9?FAwX#?|nP;_A`4Q4Yqc&c6)`r=w z=cKjAPh#Sq+oi`2x1-%XCzkI6QV?a^7Xx*>Aw!oXR$5~t6l%#g&f2X2L!I|JcZ)VK z_0~z4%BVrvA-QSX-~wf2O0vM*E-0;)eOxMW4oboV6x;tK`n1rP8sDUNZSPr zrAj8osh$ih6H)Li|Hi$h7u5QP^L$wHPS@tA-9e;xl%JO!KaT~j0g40(Q%tW&^iym( zjgieqOxwFRft`W3aZP+NBnqXSVI&Mf*0&4#_eOGnYV)#1`oNmbEt_obq%@w}1r&ANnFLmAAO`== zC~qA?Wfe23s*DZBFh{b|i_(x%mM0S#?16=EZpK=A3?XC3b%%dN$FYR`b2hj`ADMIe zhTHO8#f#~#(XaaE&SSpopYz*IIgvK@S={998du)WtMJ$ymi%CE*q4RcqX=;oTrBKguSnq^W0M)I~F+OIVY503TRdEu4_u}O_)XZdadK||6>Jae(I-vb1`MFl583fJ`CTvK!1}P!j?uq<+A&Wy) z{qV15D7ZAzQ`>J3)b90Z-&`et_T6S!o%;gNdN%xQut)%EA~SL>b1USh9{ic?>Ia$9 z)Uw2(QAjGH)#QIBgP+MhNA8#M=sbSLy~+L%#-+stT1LrWhPHy}>;47Ioss6gBRPac zU8(ic=GT#?Ssqoib&aEtYt{TZ=}67u|MM^OHx}r{mIn_IG0Q1s<0RoCl6W^38S1iO zSeAG0&98K@$ccUxdgMDqZ~U5(mLd=2J)J{^*KR=eU%IqJ8y6HF{d&sa<8Gi9YX4R@ z{sOe40ah%+>O(qlyZ}+ zY;YY$puEe)NNXfHa@^B%QpBuB0-e|VIWhlr$d2O4YNQI4d;Ga_2C22#`nl@HNWCyc zUN@|R1-D$!$j+?gduSxpxrAYw@0{`_#c(8CENaYfFh=vsl9m_ci4dCDIXk}20aAJ{ z1??SOtUr=+KS&DmH*?(b5jVyxVNbVCltNPG3G+m= zX^i4;7PsWBMMHO)7s?MRAky*XKJZ6CKC%)pA@(@8)N=g zI$g3EF~^mQg`g&h8JeDf<{P~*(bS08DO7_2Vc|zQDJ}4jV{5A5u?irZ@)b9=*asw9 zCZQ$hA!J4*Q*BpEAh$zWcYkgw6o|??b84Q0f?JiG)63bA=Q)0g=_dmjE9F?BRm3fu;RGDB3U=uT#i@OFL1n6agWaDQJU@3}j(<9s$|-G3=fOL~KO ztX!LDf15BrzeSB4{u}epPiv-r{f9YCE83L*;*j!GxaN{iH>OH4pQL@T!AJ#Z#VF6c zXgV!8^}+fE1f9H`{E!Gff=wB!}_pqXUq?u5}I@ zgCVyW28La(L00S=<9)%xK&I9n-oED|#0`!$D=oBx?-Ab%pRZ2h6Go3$){nnP*n04X zg|RD=_?4kYUIi(Rr?W>E-eb-w(;a^d#xQSpW7r%e6LbGu7Wx?6jM*L1L`QaI1%+^@fcX_}UbDFK^9BWK5 zN9&`qU0)Msew93IT+)i<+K<1CLt-%Dc0m6Qx+?}HgV^Y~Mo_EvPwVaNhEV;Zw+uzL zLgIr=u^|g|suZ%nr3<{)ab1cJDyo^HD3v{*xNm@l7AHM1LJ6=IcOufc6#Y zf6|cjX~!qE`2~n@{$wZF5es+bxk}dQIH7N+eCJFa3&u7@H9tAMf@#K@URE#mBE{)` z9-&4VvxaKf9tR?3-*u=`oqda0n{8;x<9(RkJ1^mWvmR56Aj6O$*CqW8GM5q(q#`6CtLbpP$6jT~ z%ztU#uQCSd&G)%i#BM-J#*|aj@m)Z;q2ai{K^C6xPI^K<(~i&oC6A7koJPX^cQcbS zEtvA`+gO+HDyIA1%3vEfgqbIEznw9v#jL&5fv_kK%oM+0!5er9)2*%zPu3sB6j_DU zzLCR7kliyZ)vSllJ2?;P3J=1w1O2>K3q*)2IWcZ~c^@Q)I;=ZB5ewwMW0mY$DL_e} z&#Jzyg-izzp7{)Gpg0d?9G}Yoa&6CxpTox?ndR*JiHDOAb;veBZC^Y%dR%Wb$__+l z9nQd*Tc0rMXNXm!>;fj=Hp`Ez@J2FiRs7?h=SUGP;`+M6hLn!=I+xX{m{B0wD}iR1 z_Abk8zkvfLZXJL9>#a0K$P0hAPPvIT=5`txk3PA9qq|t1@7>MKN zG^tS629hLCtTNjIkiW!88Xe7n^x5tpkJbHbN4$(yn7)*xBD#hwk$+= zFkJ7YmVmvGF4Jd~7oSW6R!wiOn7~IgD?3jl72f2IRUQR-34cKvsSJemcMyNJlsphqWF+{Mo5( z4}uOtc)va2V;d(t{iS=$k^|7uBm8&XA7PBJOxifZC57=8J0=1|M3J=V25pAZPR zqR;YW=^hZ{|DIg=Nr&W(jg5H^-vDV4wmwlQg0$Qx&J^-2klt1F*849((vRr5K;1|n z`uh0X%jAXtLz|TCg-T#_psUhebqPHKs?x&vj$xFwP6Pc#5hh$I99L0ZyL+Xgq>Y2` zF>QM$$0zQMNXnNta#q}r$+ltteDp>!rc+w?lB@=Xh*!QNF1DhLqN1$Wd^kMgS0vA< zjY9YYPek#>4-mIUOo{dA$2Cq*{M;K{52S|&?NWR6fTZ*INU>xJB%2ZVM`EcEdo^KC zI70=(_Macs{`dpzOWZ!(DY%NZrH__6Wa2R-d`4LC!3xIM4;1kJTEwKsGya}D$1#;+ zX5x1MFtv3AQy=ZcqyaH@y;ouwdn8XR_t|X>^WEt3&@2fZ^NYWl?9YJ5q31YjW)DD6 zWmj9H0TqakcXgi;x&eu|_NN@&-2o}Yzbf*xYrdkrWUJyk7D)W39JWj5D8xK*-z1j$ zbIo_;`L`8EgTvkNYHuS7+VEP~-8#I8L1xtl{9W!Mk>%d|c|&DPC_1R3@nbtC7Y;3y zlzCt>lh5ECI$%QcMU~Sh*Ep1p-{p9=1A|$=*R3dSL|f5_#*u<Vpn&wGu5K(NX*acXk`f33IP z77BOa&X!pd<$)1=<`|=5Y~zKY5fdIJEU`!=hqj$D5W$4g8?8CQzhDv{c}v=HIZWJs zd{9zY8e`$~&%2syd62Ve>_v+tdMUpQ^=8(g%w;Oi19=K~%uKd26%!yrH{P;vKm}rK zGuXYRE<%EY}sb2j$cA@ygZMf zWqCeZQlT~ai6}EDW%3v$HCn}^u?J&yW0`;QOE7-X{&u0xU5xMXJz_?6!I-J{N!#B) z#>kY0b&E?M&}XDI+9-cbF{9Xyo|nr2r^)^kA&xc>JbcYt;Zh((^No0Zc}j&ijzjGR zsYwuj%V6$F%2|m0HNWXqayt;d9q@fGD+|G{KQ9CoxPg;5Tkran2sHh)&y87f6@7#s zi#p!&$B2(S4uP)wkl0{#ny~ve#+_SK)cBc+acu7iM%*h%lsJ5_`jI(?udple^>d@w zA@!-T2UNU%Jm=5m!v^5YzW6c7YXXAbhLi57Gy}o$8uPiyBE-BtJW#Xp17ai9fBEb% z0Aj(vbGukXAoAAOjgT!$;HU6KE<`sT9-3!pE(r9XO>`h1&60|KpYOBj>L0~O3s$+~ zjBF%cNzZKbLyT#4{#RExheS%o>Cub97{%VH*VseBfF_<>ax$W5f7e(%r~WdSv+xLe zFN}aU&&B6ad7Kb#ATKFCt^cvVHHO8EbDS4t0HmT$A|wy|6p|f zy@tG^eHi(Lm$B$_0E590K~dRLvPbVVxLsi0JKvHI!OGg9QX^L& zYLn&X`}+A1EgMN6uZjV}v`}YO?ly>2^}6%NdJY1)pKcJ>?t^D%gctNEyHMFqb$T+I z2VLK~@lW^oVG!x*HNUG180k*3D^6dJ1g{-=MSFfCLBPEEn3X<882b0*Cn}=9ypZAV zP(b^EXo2b)CAcv?k-SB+8QfhsW4HaJK+x--(Jr&&5Gj9eP<@C6q6UQ7R!!&-CAwF3 zzP$s&6tZQ{>GXq-t0JZ0U=Y~Y1fJW|*o78<0~c65_|eme7<#Ox4};U!{i+*gU?l&d zM56>BMo9~Jxmyu2Vv;&e=Y4{~+&_vtBAw8qH#z3TBPBE!CPmvX)q_odAJ6S5GI)R0 z3`=v~3?Uz0e43c*fyi}RFCCg*hDd#NOSQ@MjJBO?4rFliRgjExF{H ze>MQ38esmF(+-Sg*72;RZAl}!~!CAT^?5e zQ3zQY?jz;>0pH=u%X^Yp!Le$7bE5Y>5Hnn6eWj;_4u;n0Qh_(omxG%1T~Ho_C)sMe zt)(z*{HcK0ybXpXN4qSzp2UDt{&Vz|@94fcpSx)98#MpY)ol3nCfxT^vfS2g03Nf` zoEy1sK)_p>xXqH+Aaq~)X~7?Q5PCVgfp@bW1nO1$H=Xzjp53CSEO|WO@jc^qVM!wD z%M6|gs**tGlPd31Xzu98D)&m;!w-W`E=@%9yvC5HZs*1i4Pzj&bT2tL1HHFC8!y?^ zf_7=$#UhQn;gsAtaQe;-4sbNFozDxro8Z;wQUM5j`eX0}T?c{#n;c@`wQ-#*WLSh4xQpj3?31vp%~E|w0t@Nc9jYO z=@y5|LuTj7F`Gxvg|z4stU=j{pm%L(919lIT?LAqRKPP% zB2#jf9qm?*7=#NJq4##qA(9Rm43wA|^I4I@VB*h4g4ga~!2VMe*Y&gL9lCI1!B!CM zXmcVLJGMYDjg?frHUb<{*e6o*lfg&GW#N|2PY8G~6);Ld41u%EWHuS!ujkJ)cbQHkvnJy9_croE|-x2=PWJ$lZ?^e zT}XW~tFRUP$h4guGX=nxBA=~*oC)0D3wSA;-2y8|n={RnlgM!=v*j_PFWMe6w~80H z#itNQT4!<`eX{Ho`YYa`&-&|=?lUatNvqmoO>zqDzq!(EmTaKvtBD*l(-APf`?dA{ z&nMuL^Qoq@-yOV9n7IXWR)LS^%3n$gcJLhJ@LN7|5uB7PLNBPw!lRkF9iiK7sNFDI z`Pd=@9lqDzisUp#4{4gr%i3D#?axA-uC|4q!3*ad>$uQaDdxHtl?NIwHho?vy8$X8 zdJF=#yI^Jir(UOYC!x!P8O3RTB6Qo)NN65CimrC26kom5M%zzJr{rv2qNYNZ zfgYtl+^5-ilhQf~wqMN{XKpuwOM71OO79_f;&Vi4q$UTPdILCC>gB;=PWi@vdNUx= zG{&~~+ZYXQaiv}OQi}FAMMTw&>gbZH?m{v%k1o*!g?#I0&|b?zUG**<8r%zIlGURE z(V!-=g@^$#dlOU-NXBKaUwZBRz#_ z3WXrFULM-%;}Js#!O~=nSqZei>Ax6ok{Znux6coa?xL!&*i6iW6u4)xnpP&j2o`)Y z6!T7D2mJYu@zeGW*u61jR3f|t7Q=Vm8qjip#y5qL&bdsKQ@7!}P_Kn1S)|N<%HPpe zsm(V2s3zJG<81fLgOIMvMd3K;m!lo@|*B7#UkrlYjRGYZJnwJw~U% z_Ed2xS(y3(KW?xG@Y8{2ucj391$C5QNl=#;WkEx`r^aRO@%VVaSksIB6W=G4>HERQvPIEqgl~q<6{*V|O#aFn+Acx3Li{%j1OlJV?Ouv+Er(j#w~aWn&qs z>jHU)N*A^=WmJ(+*w6j<9~ya|f4!V@0WIp}1+(*o(46X0`q-E`>M_oTq+jU9>!+32 z;$7~7MnjiGhC~z?*X~ElEO3Ll!FVjgqCOZu$|)M52nY53;x+4WME>1!n=k!{I^Qqq z52b1A{&r&2Gpiy*9wEFjU@9V(Y!V8oOI3s-}bp_yta86jWGTaZplR-~* z8}#~#ehnPz0iA0dVH!G7pkT_Z=jJYg0_7FC6PLnJW0^Da)$^zLh|OB|CsjH=F#Ah> zM|lI~Do=?vpT7>*2N$S9o3=o`;KFg1fJD$CIXBsGfe5rd@}6LBqyVWc0`^QcO}u3` zGW_GtOH_9vo)JEsfDaCNa&~u%#;8fq zst~!aZ$1F3WFxDe4iy9Q55brGI}s?`&ChdMr3y9ZHMX!v6xFSz%E!1vQMy)Z@Pv^I zaC&9aDtZutif~iF#8NG&t7%a!(fff)OrNqdwJ7lVR2ZrJa7T&Rv-d+u_VBL7z>Dui zm+`L6!tcrjWxW0PbB(peE8tk|XSllI4GQgk(_c^(?h-}O{FjjrvZ|_PZ=XfLaedKu zio-G}Ipxph!s3rA#?wacgM?8&q|bD@P!M^-2gQA(4}%C-%0f(V2`H>2gk$?{kk@Zk zIlrF^0;UlWZ`z3P+UV|BWKk^2`fBVS&;Ee2-v}O_alM9u3Gd6OQ=NdPpP;NGxclHf zHce*~ra-3Z*~Y5FRk+S95$N-y6L~xxm;)~bqLk)|N|WUll-&EHBXz+Zxvfn0ckKQF zKi!iR_ghauQb1~x-Z==w(^yY`U#I~_qWN-*5K$C#Io9ma=z|j9PhiIQUA$@PU(@%T z69}{V?kx3?ic-} z|Gv_)c3mUHH)#c~H?&Wv9qoggJq2zXrDfmf9H@{~ z18de!{RS-po0r55RZEhV;iIGSkM)$0l}d#Dd13=z5Nvq0QurRoLmq%mRR*vWyz)%k z3jkWuqN9I?d+^sT97MRJ!!xA;YF;-{I&BjY06s2jSRVc&5o+}#UUDhpoG$+!}UuT0uT$W=W2XsY$Nq-$mdMA#A`b?ik zZvJc;o2I_2l=MmT-!qn2LT8nq6&YI%7|Z((IoMD*!b>T5ci(Jl6_iGL(}0tx=FTIPzic}@~mh)(Vj z(KdZO*bj|2lpNJ-Kr2ub%*D-!EbKBaREp=}qWxR7=*Ct!?kud6!F>p?6?{Eh$`B3b zj^Fq3S73yjmd}6ES>42|=F*J1XM|B~%jNsGk^g{45xu!8G(qNQb&wcG9MY~vbC%F8a)- zBiwQQ*I?gw547{kov#nRhdZ{)tW{KzsH!DGq-o5Lk4ieJl$2B`6r~3aUhh zu;zoovp?O(dp?5Z{k-vE;vkeYPRP~P7e^y~QG?>VhiIU{dD?*PE;3S&%*PqN2LpE_ zMVjZsV7BWYzw`Mf++Ul2`#n<})d-aI>x{pnMZx#Im-Q-W!Kuyqhp`%!JfGG`XdP;Alnja*pvB*w0YX`}vW>L&r(Auf(ya|7Tp|F)X7K_o}ZF zfhM}J&OSZ5=ZTj5wxXQpa^X(lg4LDA5^x|i{VnUW4Q}DxQ6b{x;Iv^XZu;~XJfzM( z<5&CvP3=$rs^#v-C%?Nme;a9_hteGTZLxRgNOp|3Tg3!L&h$_THLQW%SnDr|SSRp& zPnV#4dl9^nz4XV9)Puuw=0}YBR*p zY2I?gX3+}iqMp~h_bvpdU)Mr%0w%%NyH&GtoE`iU=~XjcMS;5`)wZ(jdC=%+O3%Oe z4eje}$|j9=(YMB0sI6ih1OBw~dM?qS&#JxXfmNZ6oOIz$`w1}0bxofSg34wKVzcjs>!K2bRrhVuYs4`?J%>YqAuD=eyMi=HOaaww23_QDkt8aG^ zLxnYVnwlvwFrDU8mOweWJ}$ei&lv9_6=9wyEL$-!|9suEL~b;f z?H(xnbQ4^1Ej$SmNgyoBML97s7Gj_G1YHhcgJ;4^$RRZck=v?O3DY6qt=QxyUtfTC zeQTwn;|b8eLzX1<=O2uD;xRmAc@N`8`?zzThT^j(#*-2$>lmKK5wKvbh0a6Lj^b+y zV0V(TRoN~Y!j9y#OMJTmamUHX_&kn6La3YMx%aUU_fUsEqMQT5zCIr1u1W@b&V*so z6f$&a@qGSs>o`XC9KK_qtAO$IR;G7VZ($N^wuPz<2gc`I{S;;ui4nP3Lv;fL=&(h@ z;P)O_i@{k#k$9{#5OWxf@X2Wx*!9FK-X3=NOtya_R!FRo;Xe*}-y z{@ zG09cvv*9^8j1ZD=3U0iK`W<`wT6JF`z_9-NqpHJ@K)&s}xFNvhhUH zj6S5Z30yfRod`)xi9M9U`w(haR{PcU36L(H{YLyy_&^QkuM=}im{ieXWhm!}83J={ zHwu4aW+r(SFW$tA2TXE5m>4km;)gKt{Z3!;?WRvI_+a*>?<@n0^_aeyqZi0I4a0WYrY~E z+5{nmn{l8`x<0MR-83M^S9(W>UcmIZ-J^KG5 zx_6yS4WC~~xLGLh9JB9NouzJA$9(0()k?K(SYW%v@2mY8^Ae|~8OAvt!h> zh`-e(GBrf!-D+@6J_A8FOlBU%6hTV!%3fwKCFI-}U*yw$4+YL!?=M;ULSfy#?5j_R zAb&MdP+u+$vhPvl6K33mq`~!jZ70&et3NG%#9k5ob_a4uqmuFYO16{Z%uCF1N)}44 z8^uC)iONGc-T0E|oyYnt0~WrKe>%?=jJcUCzwMUgF?D@Mf^hH!hDvwvNF+9c6Yp`c zOqS1(sPKU9%*++Ye(V{>c0~gU>6+fLjQc_{*~Ih92R{6APH0FsoF58GN0XiZ9fz#O zhw7X2iV&~$)O;zv1x&cUPG44K!f5fVv`3!>F=K?!`f?^8<`1|U5E^G;v1EGB7@ZN8 zG+&G+R(XKMWD?2sLSdM%;lZ8KWri7yvts>nPcb}ENc)J^I5-Ix$v5 z#|M5g3LTqnkM<06+$Vv*OE+_Aj9}+Nb7hh6tu9q z-5584(ngo1lmhpQz^vKukeT%SKNDGtLOWl7IobO0}nlZU@0q(SOkQiEd_2~fbubirm( z4ayz|9JR91g^IQ0UoUnIp)zbBqWk6wR5)=M_>D|MN$4B5kM@5d*M5{Vn{OKu>gXAC zBrk#h_dAd1)3unu|Kd%~@IK}`bSWu(j>3`+A)SvL2Yr1fva))!k5$rd-mcKbVdct` znt%o&EdS146z>>;MO_QR%A}t$Q{_+;wIv&doJgM*=C+4`m`OXh+yNN{(Gjz83{Vti zckI5c22`A0HLQ5(2USiC7Sz`MP|cQ-JrVE+su-TW3k%AEa_h~7Z&RvJkh5&wOELv7 z0{g9B%Z-5JAQ{i_A3Kb#AtcdjIQ^I8@mbb{IA5K`CkS%EC2X$Qn7FGr+I`!Ou5jcf|-WT)}&(V0|02heN^* zI|;Fj-IC9KK)xR-N*^+MM@Xilv z)3f^8uewA1xC{BKv%SzD`*X>WydCN$N@J}Z8=<=D>xXL(7@_>ot#T&41D}z4DZG_1 z0%5;HDa{pCFwCKixhN_HbL6rPeQ?#s^2=i@w4Q@lb8P*E=ACG)cf9cIN@X85GEwwN zHN|1W>c;3L)kUmZ_(I4n(}>lak3)xYo3P|}!bD|t4Q5*W7wMouj8Ahqmv;omA)a;o z=fc~!P(V3)yQTCORBXmS=u)kP+CtOwY_0{+(7*F{{i8E9ad7iJw^oM6oVYpiA{VHa zVpHaqB!=p1-EVf3>`LCeF}_Nq18V}e(tY8}BbyU<)JnXnlg2aPtnUY3;?pw^C__)$SMly3}0QZO?eaQoAB z^-d}XS`RfSq87wh$-xv~4spzH*e*KZ_X{g6Z&@{;c!6~T#vimc^s%W}KK{A=GQR5g zruRBg7+1IO3r^)t>E9ung3u3OX@A*oLNSsUz&FE%u`j9n$XiLdg%^yYh9LhN)6X_Ht-T)uX1ee*uHT+m-& zZq>rZCs)qqk@sN@*R-VP!aSBRZ&??4-M|+d*G%(?hrk*(C962xAan5Svfq?5lt1`% zWcCsf)Q&o8g=j@V)9yRLAeT}=`##UBVOh}XPe8>QN&~Gb`-WRPhR`B4_<%?G2Q;2a zj_0+DglaYCWQkaBD9YDZUUqPR1d^1kMCFGVU{rlbn*J>2I-Z{(GkAuTS8~4Th7Mu< zGlqZ7GNJe?oaRFD%SmiC?h8ruwZk^5c}Y#j9c*p*5F;5hge`-7XB$_!_RqPJ=hneok4cm+yW%TBFVT1NAFxh6C+|^!&p|$T zF~@bJ71MW`2nU2;f?-^(k()p z{P8uv>*3ID?`CV{@Eh6_X0NMd|Ae-h4{VXK+<>)8#~!egIlSVT{^^m*UE?l7%8H z-zwHsgV@6_7@H;lW4(P0bK?2%<>`Q;pD)_6=Cw-kQ+Xw9UV86lxG9Wn@*a+DA9b-q z~b^4 z{PF7Dw+(3+7}Fdo8kY&lpUR2N_{E@f=9+=q{l8FG)L~ynsR=E$*Q?h#r=b1Zyu}eZ zL+IG3yg0b&44tp}q-@Szg3dVR%d0#+(4p4X{dlsNqaj*{0O>+BDQ6kGoWj*E|pE14?0_heI1fQ#tIApBJ_XuHJre z&+dN!0096043}v*6mA#BEk#61p=c9AR8mSxC$g1LskHbb*=q z>cI17PyG$4#`xm3YxLof^O!%g>Wo7H8LPA|jhz2P!N#@syg;fANgiR-vd`aO^LuSZ zRQ4I9SVj`gG)f>PD}E`veG8JmWIibK4#8&4hJ;(4CP=(u)JR=iiuF06Er!t!Sgyii z^swFtHM=5D-@juXzgbnX9sIzm(J z75mo_&w)I0tA9!|45&*eFOL*S0(E_B|KU%XKv{F*NUCiyG|Rm^o)oqQh;rh6AGE$h z-MukigWU#D8rk!0d+|ER^p-HYcQ_8uj}Tm55B$LFqGrwL%C%UQR}z*ba!m-w=nCyS!J|_j+KnMbx+4 zsl`ZCvvd01qK$PfTB}&b8?e-vd`>gvC}w!yyt^Z89=snhHq`e7L5}&0{#NNbP#!C* zw0>?qG{iS~{W{qVq>YQ+_f?Akd2?UIzU7WU-9K7)S@$orShiQpWZr_7ooxHzKl_FA zJ1N?JJq*q7$Ex_eNOA{qnkLb3E3F&Ht-x+>L~gku7JJ+{fk< z?Rqy9e35ESzwIj=gSM+Gt8aQgwko#Ts^67ET4(gEv&Kto2{hUvH7kphwUMJ@feVmC zv1sjewL;uyC^auQfaMu6F~ESN^xe7)I$7(;B+Xs{Af zoW!;*9(kt0Yp`{d_PMkhN0B;_u`1@32sYEMw%b@_B7wYKLvtt_YgQVDIm_+G!mY1l z6`JhX zU)3Thru1Wx@^hrzn;@mijw8*#|3$CuPizZF63OT$V*9nVguCsP*uGP*Yv}%RZ0&z_ zTy~Gp2Yza2&rFyhSy@u~;}3r%^eUY?B~gRb!y}p|k+-oxW#AX@aWF;>-%EIBR0pX) zTe?M+tfAD-_=3}r2iG#(jx;FroIE((bJc;Lh6Ac_FPo#`yC*1SaRPl|LP!YG@7tqs6N&EKDzJSVVO@}j|)`@6AaWB%||^AT)w%3S@Q z(JrLFI5QXZSrI#m4o|LXxP=|LQgix;ERg;%sn2Zw2Da_-VUB5xA@%3h<2oun*hEhL z;>OoUEG{J%NUCF5VU6RS{sK(r`^t}dcR{$1S5=_T7AUw_6>T4E12u(@y!zcMfS4K< zWT!g}l>O_v3wEYLtK88j$)L~B{`vG8`p)RdMVQMc4iVdukWg9lbi=2N0%Gn4)U1dFz8SaP;KG&?T`klijm$>BZ+CE4XOnj^yOUJewxq0R zNn{)}Q>BfQkm2{@mmrjk4CTMKoa(M4{ls1ETER_hb<zBB_}7F;?Clwgy>a?NlcmN?m84GD#sTUx}K3)zsbr+-_niw*&3x81>c023W7`^%pKG5VQdfF!%G+#=Bon^zlb`pn zHsnY9q7QResIPLxSiB0u#ZAbyc`V5I)*a=@vVw9_j}z5T9vbr|7apHZf#xymWtF;e zK)WF_l%4n-=qqgYv~+g@!|`^k)51-_REzdMVi^w1Q?-k_xT?UIQ8^a4U>Pu^8-l!* zmqWY8g6;+78ql&QEulh@0ZsQ@G%}|SLc{Xqv1#|Cpk#|dU%|@55dZE#a6K~(lMNOo zjO>`i(x~gtU3?M|J^#IP*879a8V9Va+!U~7Aa(xf-EeHDJnlOpV~LE@{uQYkM3HHs zYb<_=ip=z}$!+L_O!w@l+G9e!QkB_9NB<%HSrK=D(vGx`vz||SE+W~!j`nd3kRT~0 zar&1vR@l!bus%3pX2pqD>f9s<&5RhmB#%(&yhit*zY5fjM}J&CNdQvj{fBF%J%C#9 zf&F_|FSLCfVMsiP1IBu#NuL+9z&sEX7oBATOu&zlkUe9R8YB6@4IckTyDzG(r`e>n(5|RfcY5%P) zN5Xw)%Vi!qSSgi0BJWj;Srt7hhuEDEe5yM6YWGSg+|LMF-S`LURAM%JeOL&jF5DsK z#e&9@%eQB^3e9p}&=us~7+hDP5Z=9Z>2WtRnch3|`9X zJpMWyfG?lyY{hX<6lCRa6R)L9B1`hk#ezk#$PgSo=umtO=@xdeeXFam zWo++-lN1m z5Oln9rxKHa%!sw_lof~8rZs2sBO9Tkca@aX{aRo?N^JhUEEHH_?$gji1ZuLW?yUo!TUTT<`@a@5UiOX2gBefx^!UG9urq|~4ijZQx(mdRJ1-2a! zmlBb7K!#q$hl$s#kV)EnMexNGS#5cLhGjn?+g#PNh;k6wS^{bFwC%{c`;x|xYe(kp z+_m;Uw1?FK0Kj;#cla=F6MVJR^;Fk(U+}| zJ}f@qoxTDpG(5IXbXEi5wAhQ7@m`>;w(ZK@kOgge-hwsSJYeiH3mCYx6_{NT?oa+K z2iDYhQv2>%UiU!Mrot1L1vH1Vxf`M5*MpTS-X%b5(j79F z-U8$+p<=dkkD)Po@}}H64Jf;|O7Y!mc}TwWXikPk!z4=M68(hrSjyn!^0&=kqb>XS zGMP>!?`fkS6Z)<-FzmLAG6Oqi)k4*C;*m)hiPVVLifoawshlU@9U=xay*Z7H$`yMxx}&k(S}uU#^%kktT3Tnl6Oj0vb1Qw^8>>>& zA8=bu@l9n*{R)li5Ga28y6y7yP?&mF!)>!LN58~#DgT~B)5}asQpOjcX-ZB1DryD# z_m!tq{_=o%P2#X!VKK0JMzn$p9|D{72}v6YfTLvX@w7Jr*xZ*y9g>8QtHP23NhM&W z%yqv-8wXgIm$ZCr>66hlZ+yG9^9)pLwx|6Yb! zYU4{e^AlM4_^j`yi@%Ym5oY5sS%cJtclr!6r-Xazj&r*_g!xP*jXf5aAuDz;=YT@op^`7iIpkUI^lJyQ>(@|i#bl9{sw!t_ABl|LN!ul>lCk~Wstp(K zZ$Rpk)rDQx#F1E$ko(eD6RV134^a$X;2WO{=OeDZeH|tdi4(4Ob<-W790mMrzvmn*GFh1 zoKZ4-G6!Xse4|W0DZ@)aNR9LjMNF=}X{Tafjb$HG!!C3kM1mMMF^+cxDJsV)&W9AR zEjpCT{F8-@WHnZraF1o(Tjrvq{0!L~jk-Ld406)mvOQ*tk<;1xEp_@MavrKyE z!YHYux2406L)NuhdGCCeK;_6)+d;Chr{7z>#!RXns1KjW_*}Gsb{=m!-M<-_Tb{PQ zYH$bE?@Y(Ee}TZ+`BD$urCAY=FDM=f{==Q{be>DSf@P7uc^ARus6b0oD@b zl5-z~T+MI!=NF#}wE5YGPVvUjY*Jd>6W0m#ou~Y(vKK?qnPOsPkOe&6rf;cku@H02 zX!l$4USPFj`1lJi86@pkw6jNR4qJA#s2(zUhV+p8>#p*mkQp$kC;0mxvMtEIQQE`E z2|j!NMy4%tcT5j$ZHz?j5t?&ot0!^AaPzkg@TM&w)4b z*lKnyys%9Rn;%3xcx-nH8}?gJH(p+bMMYJ8$M4!Vp`GJPU&)ocpi>mLPhjo7l8QOfhTafsUi$7us0wE8gGSqTYq2th^u4xcGZMX|8@}5}AT?#0 zEf)R@>FN_}n%o~E^ZKfHo6`f3eZttdKb4Q1%29K*k~!o)%@*vdG(#?P&hc8K*sPxOK-^9VTeUsE2C6PbhVkM~heBOs`9A+^ zo#UDjH+`KbR;0Q8)0$vx)^k4Vd;f$uj}^PJ!A)&pKenHZ0dm=L0)FALt5!z+Lri z)2w6%@Z=+Q8l~`ocTdsY%H|62Y=-rd#jXH1TB&E#6@TEEMxN0b66WU(a&|laH83N!Z z5+5}<;)zYaB%{1d-E&kFxFYA|qGsZNw{=@ys+v&0j$6$& z%MyXtvu60a`)}YmutH)|CV^`@V%xKU3hZp#Dy3D8zzjbh?fGgN+W%PZ>@}|g>e_+r zPmF_rkh>tu{y+zm2dd=%{wfa1NjLs}Qof0=b+QDL1tFOQ}?b|g{nF9P>aXV_f zzX9*%!Pt9r3UECILsyP11a{r4-B&OA0W)f+gx#j2&^}N!yJWSnAAf0~t=yXd1ZVl9 zeNAdm)~e24;bjR)mc5*RU)Ew;dNN@p(;X`a8P=*tC`hzlyV@dL7pd&wGjDNfys6ym*f7C91Fo1kd>JgDcn}z3~xXXq`$m=n% z$|c7kx8A(9wp0f>it^u9KK?Ger{Bw_K^*C|f0CtBp#zFc1B&tin_vH z>-|?SEkbqVfolpRrBFI@uYQBFug#~2U+5CTpJrZtgLK5Ksf&z>%6KpZ)@Dub0c69{_K2 zY@wJ99XP2uN=6TLfE7!KGcJe$#&SQ-aL-+!T{z`QJn$Guv$6x~r~x&4qzy~&lOQKn zuh-*(4ThR^cb~TVi^UNq2bQf90z?el3&ZCqVFSY>+lHFDjr6r_HG|bUeyz1Mt6+PCqtg0{`%unc8E%z*{{Zs1`X4 zoXby!#cLgawR_RZ%ta;r#yj!$-CvbxG-?<~~KF>k=;J8OtHF)wNwiv_{C&&f$q` zLVu2~3tVx#5&64~l$OfgLjJ!ZuXQ0+DA+Mtbj)@Q^518%;vW7Fd6VBygqN z1a&KE!24gsjox5G;1e2k&7IGI!1f8%ZGk)ptc!LoNl*lSwMnMJ~tnG>V6zU zn${LN?VHEq1O@h<)5{URy$RU4=@631Q>6zl9>MmdGtQ|enaDilck}kKd}I@Ui(B9L ziri{i;_A)X$lvBIJ-Os93RE4Xom|II5G3;DQ#W1ic$a4mX35vtsvL;x$?CeW}?|^BYg+r^< zrXlHnnx81^C7^uuhjh!U4M2D&Q&)1I3Dooc#`(TAK#w4p)<2d3mgwVeTFYdBbHZvo zDfm3_wr>r2{m>lvF|K`8BT^u6mAJa(Cx9T&tmjTJ83Zojdbc&5fFJEMBQvZDylo?k z+zn-cW8eH}V?Gm@^B=d==_vp`^v)55;Q^qY+i(5vf001QAx`{HCr4R z*Bi zyjGnN@EpUfYTNz;&fN=V&NcZ1Yu#AMO!irzH-3Nb;y4Y|=hiEzu025L94Gcy3E%hj zuQfprSHR1uW9{|El9+aYzu8$g4l6k4bLyUMMB-zIZk>$Z!X9#XR(V?&b~umBX2eDJ$MLn#~7X=IxS>MBR zC=k1lIJ_kgdHE;fUHg=UJtZSc?ZpaYMI|lONV$X^ReP2FTvlRBTD?l%s3{VE|7IoAcnTc1-W^FB4g>G31i$ax81PxAwyJfRfS@UNYfySGbm~@4OoUPX4*&rF z{}h*ZJXh}<#ubr~kW@q|DMg4P;r<#$q|mTec1g*Ilu#O^s3@Z(TPk~V+ndiGM@Eq{ z(m+V-_xb&GUgve5=lpR!&;7ox3y76QTH&@8z_#AGYc_iour}*CW0 z4RKbBg$a;TUX3f>t%GhOn^x$&UybuOQbv=PJwxS?7i&1@b>NvY~P~xLS5?`Hkc^6xV~_}VwG)UMtap4qdAo9 z`|u=WPi6`G@i{^D8Y^e1;-kpk?Z^t_`NuVvCm9wnd1`NZv zWTUdRz!Hs|c#~29Y^SfIzLR7ic9dzJXCCmD*6*5WR8jjeU@* z`PKef!~=Zr$1zSPavn<}dX|pW&S1l|`X}YQJZ!JKcFM-d0sDmVt@Q7eA!R^iS2BAi z(#^-F5^5rmX|+kN+_MTmqCjA-Qf^|RP;@WKGI zOcsk3R{YU6;KG=#iPyhBqC@r=d%&kqiHv>EPKU>wqB0!kl>mL@70wOUv>$FNg5LU!n z>pBE>TyD?xvS45x)T4Doeh0>ttgcONRY3bMFyX=8K_I8rK34+-GV5~OnwvOfNcSulL-!6uxGe4 z?PFXQQmh@A#8(5PeOSvUW1Nf375<(Rt2lZUN$>nOdkWb@N-gG>QjoamQ721@MzSCwJXLw%LP@s_J}X4ydk=l>LbGZzC5bIRZbZ_XHq8&*!q^$j zn*Au?giV8#K+AQ>^=^C0fJN0NAiFwqRYb@rxdVvpmwIM8Er7l8r1DJDabU*hOU2kt1O0yP$%=Dh<)RkbTHLw(6;R z2}eiMA%*>FTaaibGgIQkkthxQaB76Z1sUzFRzi=E&9ldF)NUs-eN=PXKm0>>nzd>kEyljhZr{m!Td{b z%i&2Egi4ts?!kAop?UqBpX_~c=tSO22sS_(di^vir5UIN%gTH%tOf?3ex7OU8DP#4 zy9?j(0Q*dn$A|i4AY9IE$Xc%r1nu4VE%9_9kRdVpVI2_L8l1$p+5vkdg@0da9x#0e zXYZV?0J`&`MeashpnU4cvwGP9eR8)-!_HlW_JKL|+maWdaYMwqDz1}IvXq}GvrYpN z&P*BK`S=`PG*T^(v?^i6)PVY36Mt;_b9xuE@jZ6F@bTFdaso+BuMT(xNgy>%=k5e= zJJNqQ4eu%4ip=SfKGA7aWP6DQjcRit;bt&)C%Yes!T-`96rV$aobmhd9$gN1YqKs2 zG$MQF9aE8D9b_iuy1a@aA^nk-TYDYn+~g|ure5yGzBj(#){gDQj!Pbr|M6bO#zr6R zxupp#bKX1d|IH3lbU&En<@-b0z4(L5=ABUPYY^}!)drgMi)W;6lcD3=sfq>Fcpyo) z=jJSR0`+7;n?hI&(Cf{TW<+#>S?k}(e0h|^)9>y{L(hP){I+No#Noow#?s_Me;__o zY0Xzrf$%6Mg)n%5?UDL(K=3gzCo=EPohS$TLO}47Cue|~ys9$NI{`>F+cnlt8$suD zNzox?1!!KbdB6L&J5=&k=P7W7Lx!{x(Z`y^M_z`1?{Bxml3X9HusBC-n2>48VEABr zPQlts#%r*5`W8P?E`*d`SJ?G=3(^l8NBhg_BGZAD;?**bY_2HP(ff)>CNsnn_q z>V`$?Kg3Q!YwLcuv>-9)QA`hcq4WwU%gbd}j~@qGlCX=X*Joh#n1A>u+6Jt69~F_@ z5MU2qHL$bf0piUsiq5k_ApZ7WzqJqvL|1YVOY#s9;>UN+^Lzu=aNZBO2fu*1r*Y@| z%Xfe-vCj5QRS8fY*$Xdye+Rt*7wfpg9HCutyJnNlR&LdY2HC9kNk;~>z0H}Mh`$BBTVpem zEUp9P-0Gs?k0*fk{n{{p%`RYyrL=MT=>n^j9rxy384$}!|9%_W0MYCnt*}ZI`neb8 z6C{6d-c2T4eHuC6OIP{DnsV0v>*(AQ0L(QmSqW~Nfi`=B8T)%XP%iid$JHf6?`~g) zW~(5yO{K*PLkl!$+>P4*egTR-zL0vY3m{HZBaP?Xd(0e_s2<#1hm|G5gS)Nruvz<^ z)sYu!*xAte%KddBl3Jx&okK>Dnkb=kHgN*!(}l|XR;Q6U$l5nr!O_ow4}bCGAmKXQ zEfxI+iRs&puWxa+&*M&-pl7W=7TpHbQ{3vS# z-jq205jw#KbsrM~n!XD{>zgGQ+hI%#nD(XSeRwpIxUtyO0H@DkWEv3hwz z;=qhmoR}Jn1$t~YwN&pOP!;;*|0tJ1Uw`fTF>hb!=)QJSUpN7p4C0R-nY4xS)>dz) zs!m8(JTUs6w+SB$7_-dP+_B`ZdBevsb!?b=$DRHs9^0cTFIH>{!rp=eYpX|FkdkiP zNGTsdx`ff#g)Q=&+~p*3SX2&K(rb130Phbbpt=(ufbR1l!R_mJ1kn6w-wU!Tj9|DX9eapb-UxAi-ZGTgn z3{WJ`DQW7=LeE|Mgj=T!q0RQ~>PU(f;1$2x(Ub3>sNkh_lWi>AHPTKL(dfaflh2zZ zxGb?Uf1m#Jkwt9Yz!&N)zZE;f%b#4{MM2WJ08^esZltoPZnl$j%76w(84GWLcOk z`gl^2aX(F1ap5x3JSH2}QjR0}{iCU?iE`Mp&i_m59Wu6#jStoST*CS%zCyWp7Yk`$ zz9_~R;mu_p13xN`LN+Sw-+1o_R2hxCR(WiOW;<-YR#JAs{0-?}oPR-zG#){d;&=qmxYD>m?(TK>bVsnzA%PU>Q1PgApcVE{HuJS)3C zvV@&y>AxC(KR}YP_zLX)j8r2QWz8HPCojDFA!lKQ%y4sQANLkyFWYSE+HZn{h|#{7 z@+Ks58K)`J0vz2}xg4|NN8;T1_IHElk)2#S7H+!@S;wc^BaNBJNR#LjimyW24M!Ez zc4?%nYUI**v>SV3`{`G|S76&^F-1$QO2nUCJ?>{OV6pdt%PviBd?1!HvhFCKY2Yx;1$QmMthi-tr+e|UK9}OteB!?|$PXk>)Gwj@}y};Du zmNE+W1XfG?-b+Ovfc?JuW=Hri5O>O2Pf??QsH#-{Sz86fg}KEd_6=YcGA)U26JTAL zm%2wH0pqQZ!K1TepiyZS)7-fnUl_fSZeaku=LI6#qVu3Vc)?okZ#Oiqjbjcf=s;;} zcA8d0GNdlkB)JwcF(p26UN7qimgZcDPdB4rBacp8MrskZyWLQiRF}ryQ$06t8P_1i zsc@6dog}0+-N}sinnXs&z@dMh&B*dLGl zacM9|mtP9mG&$YqBoky+cc=#YenF<%V)*3>C!`-73+O9w3yKUu!O%)e1HLKTe=?U9lat?mv*D@E0EqrIU1V!p3^ zo+Gs8DE^^cJ_6lu8bzCDQh=Niw`~R}KocF<74#(*7|QNF$s4&jz1ipEOCwI6)B0WJ zDel7Q)goJ6cP0UG^Oe{(PVXZ^=Qm}#*8}_4o)l0M1U7Hao%hCbocS(jB)5H&p20n$qri5KUb@-y$`hx5*3bO2jJC2#FFHIBm~^s zOcK~4hq-;Z-cd#)ST*nfP(ZK0@}FU>IX3&;s$UWN2Rq}AU&-vvL6T080@un%NL8H5 z4j<@6x+j;-Cuahg`YnSRNB$tIqFObV^aI(bW1w78fy9Z-ciHDvkqA6>Z%vIR5}PRu z?{#L#wl4Z8)OU;Hms#N&O1{Vlb2v%8Vu7>}zkRk3Rv<-6JL>eqN7ysye#mCh72CP2 z<=?(Jjt$ke&o2FWg{9`{$|^qXm}2lW(D?0rNKtLzGU?q6rN$p70xs->hLU6Ybc2o1 zHrIU2;@VH>>Dg^|+q?-Vt9_gPm?i@4jDDv_&3<5M(xy%!6#m56VAWdQT6{uYJwh z+?$LqgIh53c_LQNJ0#zoTfk<5koqsF5<3Ug?;DQ}Ajy0Bw6^R#Qq{a0BULzjam+q) z;~*kaagcvHn8S;N@%md;#mIhmvBBb~EE2M-)f|JqBB5;_+4p%rvOiE7?F;0Py-}kr zzPJRL9~JmMJaI;bv9{IvqFSUK9%4sz>mhkg^<{=I9eXmc`>^9Iwhg}3Td5I-4MofT zJ+3BW>BT2cn_?v}_4#a2bV)KKEg%0Qc=ZdE#9Y;JA#Oo~&g6W)(lcl~o64)Hqy;^D zJ}ekO2as#ovVLJ=KogftwENu;4Dlk%3AKD+mOUHT)wBgzU!P2Y;woU*?VxYiKMsUs zb83r$Fy|Zyy9K5*up{0+&Et{<);+D#;jNj#RIwG@=3NGK-_Y!&8~H#r&oJ7aSr4R! zQT=<8`=HC>8a31*SKrTx@b5l+ACi0Lu^WQ^>;#4;NxHnLl&JzMg;kS&!!{}ZE*EMC!`cZtnFvU3=EYhg|WEh z)`37^huu&9Hy;M9DwdoLmk=;xPKw!`6#@F9$EQnj@jzR-qajh_IFOr9ELRx7AWn5q)Tb>8cWq50z$!6mtk@b|%=PqE;-&8qcg%wzz zy_Bt8bqHHe`|jmGuaDiLT80TyT1eh%WvCp;L~7t*#B9rQqz8UJw7lXiG9`-=5Akn8 zmi=s}`Rh_-Yp9C95BP@ctO}oDRn9%nE2Bc#U0z-#q5D4CZw8<*AO^bh%*wBS)_+j*Ai7GMwE)yWK-*keHUe5`uh z&jzTuV^Q*4^+11Yp8t2m8JIgyYtK}V0LxBGM7?w?u;mI?2L1g3?CYnjPn;13cHkSb zfc#-#{a*D?^x{5XtStUOCV)$(vAE$1YN-~ zUWLPJpoOKTv6yii>dJY7$G`7|B5h((Ec`3Pe;R6gXpoQ3ORMc4zq*NKd>LkJQ7LSA zDaciOISSiuQS^)*2C#?gOqN^dS0sn|z8iaR5UC}vcFlT*AwBU3C*Yqnbk(%nBjII(&H%5m(o(dKt152{m$@RGuu-IH0%F?~SR{Sc^U2qxL>-VKi zpRNN|vgyM{=@<^D&Xva-*#hI-(}$TiCxF%weX8Z5B~W^UPmA>~2a zk;bbD)!4Qn_il>g9qbO?>=ND;jAZ5Iqr;W2kZLE+OGI@eecwobqx^|2S{-1-3M-*f-&~0qeeatzI3SibaEVn!~3z zVB(5HVL=^dA*JE)r$-7JQ1aiXB&EIs@BrCj>hf1;J$1{k>XZa@6{T_wPM87d$?9!! zGde(7a+i_j{tUGK+ezhD1AyV??eHMS6PWQqZpxPq0n5I4+m7$iz-nrLc=)|8=eh1< zvdURt*)}X0`ELW}y;S)ix&MISviDh>Z!^$XwO4)w=mKSNswK!{6_ApMD=A5Q&{gem z-tpp1X!Xhs_PgZ{c*%LCnD-)-JlUj2CfC8!l$e_A(Lj9otX^y7{2&&|MD1Dh+J|-g z%l~T}IgTy+XIvsKyvNSRBImjCLb2}#@zkjADu>S-BDyU6kmf9Fq4WL^(tkLycbG&V zQ$^~nndUgM1h>966?8^cD0_IokLx*dCaI3N^S!A{yURbWuKrY zY10q8Au(uAa()-yItNXA|At0Y&p?%s;?03_QOLh7_Qg#+3<8{u6}a^+q~scrVj1G?m#okFP)!|ydvG^`tMCh73_6C$3KF!mS?8w z|Ll;lgSNE&)_r8|N!n|#9fHiklwrS5`N-NX)6KK*3bKTG+Lhk!M&<*0t>eZpWK@)Q zd(bW+J^W1A1+zw^&g|2i%d$nv8nVjG<`(SjkIY%_ybL>6M`>npsbcfnog_*12&~O< z7#8-7!6I3+xG#q;W5S8iF(vCfNZ#39d^Dm1ijS=L!sitRb+scyMJ9sKa?1O9UEx0H z4C>7AUn>E93RCz(;4)Bla~(>H8U^Z~BCq!aPk?^q!t26&uYi&9Pq()&8kpzfziF@K z`0U#;{*_#%!2EPLBz;9JXHH%^P1$_`#z1^kOXowNcds*jvDFl4E&~IF+FU@%{=v)N z7XT!Khi^^lgrKWzsop&DHMCaVdeUC62Mx}Fc>>oSLfP$a!j@6okn!EkZYE3=L#K~^ zQ}5f2`D~@4cM=I$IoMcikiUqH-#fHK&iuso?J;WGGX1f8Nl&v~GXu#x8LhJ&;YeN6 z%3WZv1!-?)UvoJ{A${=`9*{ncjPdj&W62_9hW;2|mYIdjLYqS`$_J1cCFmWxwFenX z!?{-`RgfXBIjRvfgf#kJ>idtHNY%f)RL!4_WY?64whnph2{$Yg+y4pMn|!^A@A}x3 z-uvXM+99m=+A*A6=7+EUYY!Lb>BYOl0>bmEt&m3ZUbyY_5lUPXwx%EY3H2eul{)=? z&~j^8e2u*~bcXalSW^yzQXuw+-luD}$7O>;i^C2=7&) zP+%@|Ql4YC1M_rMbY@#NFg=76jBO2pDd@4c`E)NZPPmBbedg>lT>p1s)(fb^n?g5% z1yFW*hLVnIL7%hL@S#5$&^eV(qwLazR>5n3x2Tx`<}J&1v08xAs@)NBU(Ume$;D#d z#a6tg#2YDWj+q*Gjc!=}5%5mmnp+>wyg2O4LpwAmF-a;nt z4eKt`5oBD?h?*!ki}W1v1N%I6kroispUFx@%J*$1P5wfh++`{*Grt;pwrOtW6PCdC z`-xiTU%O$`lerF+xD>1|FkL&I{R!U$H2hvA*nkhV7xQxaC_yse9l)m>0!6I5pVo@{ zL+#5`Rbg^r&>U%Z^Jd;6bl5wP+9?*$LrSuJaWoRhZuAq83ZH-~Er#44bfDb{+BWrG z2I!f)geLvZ0mG~0m*YWgV9t&#UQbjch%^QXG?e*gdg|NjhEX*3jE7*45Bl86$O zBuSz|DS1&6NhoWS5=slAES1QXC9-eX*X)C_4CbAM88c&UMbP2Vb!BCc4Ww9*^9mMPqv+Y*Yby30#9g?V7_=tthMB~Oqmkn5VPbwvK91?3|C zbQClxW%pasaiG?)Ld*FB4q9JLfAH-s4(2E&=G5%Q!FW?~9&-{0x9qF8KeaP{!mPJxYh$L>HW1+bEkmn{v|Q}dKKe^&e;N)hm%klvpRA-B2Gu4t$XI z724Asvob|~0e$_T*@8n>z%1N;!!LXiICNWf)^$_p_el(Q-FF;#7Bk_GP459e=SBFM z;a?!g-!aZMy8r`LpUqxa7sEiEgHg2aZ5SY}Hc=AGhXF5{Y)cbE5O8arQxjhT|8=zHx+xMJf)rPAR{{2F~g;Ly|4nQFE?pcHuPAW9o*VU+F>S zm!HudcX`P9qTf03I}7^*+&O;_Ng&TK@k6=v6!JqhR_w4{go0}ygV_~MI3Tli#w1`2 z2RuBqG{xqzo4;YtOe7Ah47v16aRUl2&V0?YltI2<&6yRcUy!Gj-5(K;*zY{nJyoWO zoBm6gnA5R~*Kv5jdA?^v+?WRa=GWr{ z&lG^S{y_G=k$HYtny7T}YeBFlBmc=W@A-KbU-KyrfPuC0>+oU(3`qR`Ipb9Z0^*&{ zY^`Y!EQ3V>3BQ0Zy>zye*8p6>f1OXK0Q&O&6j6q~fTN)H_L=1xV5-v>if{^m_WD^M zw^kh5(}cvmB8H%TicL5D90P?LT|d;BA4jiM7hTOLpRr`3;h&HAa%|+NC`%;oL-HZP zmDJ7UNYA&a3Ke>X%-%z>T$Q!R$+-4mq5qnllvE(0Zxt>sjuhUWLN>7PQ)Bj|Y2QqR`l1O24g9N1|C^K#=KXT?C^ zDDTs@*ewrzUcx3~QdfYR8$z#@-T^$?^2@6J>*jeswqEV3ySFbTrbDtdUKI_30nUkfbm7u=xC zEyITAW4YHGaTKhqiw|ea>r%&-190;(^4I4m zXDwNUyghZ)+0W(3U9J$rXi3Cg!*fFsCN0SN+RHW@c)he{}IkpWh zy`aG`#CoP_YvgwsEPV5foISA^WcG)s2w2OY@Q3#ft=0ojPv7TCF7}2tau9n?uNY`b zsooD>mjOeeve_;66R1})di37lIGrh84Dhl}CLkY1R`+)cSsnc7#R^SPdk1AbW4E+qnpnqBh z&@0xL>#nl~SkH^bhW)<+<49zI(ug0>oW2a)2;BhfCyZy4Z~uXYJ8PV(JDx%@HNg1@ zV;Fom`b85D4r2cCA4da@4kF=*_1k*+A|!2GG<3K90aA@8UoNo?!Y*yg=wYQ>*xeUi z+A%JQJ&Vq~GkWETeM}S9I+Ir9MiIpfoNglTqHnNMa4GT^2hyDPzeB!5U^};G2lCGw z+ig2ZM!qsX`@+vaeO*i17svpf>$CKQ z)KuV>-`qzRnS*{?!lVl;33^`rJ00ln2dwF*)8!evfKl~F=>CIQpf4>sV0C*M$eI%p zt0gZ0apXKqu5pA4pTZuo`TL168JSB>)i6m|EG^qn4=Zv8MwT4dgT%M{YI7q(ki20< zo5Wo|qx12LpL) zHk){~HXtvYa8A%!gS<+b@K+H<AO4Vh<7fH7bnW?ySR} zH~u=G9ZQkDWxeR$(?Q5w_=x7BmWuR<2HVnUb;Ka&xrsV;Z1%oTBD!cF)~pi|cGVlj zOwRb9a+5j;{fJMUPYgl{r9;Q>yb3g&q%BO!x&UnfQ@8H-S^+gJROvI^hb~q7)XCCP z==Kn^+Y`SII7Yw3*XbXF-ugvDcl74@QqixU?CuNPq<7_a%|cBBY~^7A#m;A`#6bwf&S&R^+kf6(DQX8^-x9!uutE4Wqar_FfV90 z>|fmkow6&m`rR{t65#l^u>Lo+YR%zTvAw@puYF*ABq}LV(x|OLQW1{4|?dWo3J>y?VK2?f6 zP9Og)9yY+fD~CjH*p(o6;hkLXG)qjyd*ai zRp)KrHxz-lAcdG=pv-A4q^7@3yDpBa4n|d{5YY2TEdNEqki=kJz zEyXM)0@%;49rHSa&}}9)IuT$6U5@WB=`_{@ZEfZ?`vnW3V~d7KzCj`oD@v>Mb^uhi zA2=OY`~cE#EAMudGQ!a0ys32`KVk9JsnxTJK3Kof*H!Ou54Pr_U|0G8QqJ9W9yiuT zdPDv9%Z_8nXi@{O{DsImZLZ1m)k03en>?C17kdLNTokn=ux~hX^?Q|L*iX+oonO?9 z+%*e-mTgrmxqJ6? z??uLfykC>@tC9BO_mk&hFA#Mo!C7z5w;`Og2f6AnMkrcbpD>x>(glkW@C(^ ze@ZN{SLtpb+0;Rg=wgBQuo(0v-nBYpYX^NL6Pw-_K7@Xw^GV+m)1d!+%k+O`C+2xk z`*fQ^3H0rMSM9&sbKaMFZoe@?;6RS)XkRd}HX0@OpAP^=zTTPc!^S{o1+VoL3IPR z7mJYNuy+sWOkS6{(fiILw3Y*#3t_8$T(DO*?si z*NwJejk=m_jDI@jNqLHQpCF>G*|G8=LMS}ck2`9&ITWf085NXceL!?qw1{A>gLZk( z*bg=gplXgb9MqJCPKhlQBmYc+k@IVXMnfQU3m!J-o!0_(8D2VS7zaI4cO4E4oq}G; zLK0hU2zqm4)CP}?&->4*K;L7D(0lrKOW%dH(37$-`R-f;a2&bZxsOx8YB{f;cW)6e z8?1LN?D-2_Cmv0E($s)fI8ag)wgS-hrBgulB((fEEUNl#6zVnK-KArmto$m z@IX}7mR6XC(Yd8E}=o9PFW9;!)kQ9d1)K=#10OWznec_s!zR6 zwZk47rF@}BDE90z3ayW}LJq86^oV~8StEMdiaQTtx15F0PN#9~`g1ByPH7|3BL_yp zCwWL=dD#13@xr#unm0?iw~(k?)h09Dht;x{6Gwd&Ft_xU{ow_N(XG3XY!*d=O!e@y z3;c?p!m{7tGd&R+`dqI_toHhj*XsoU$JVv#CT9pZ|5X;csmMUjqIK!7auk5meEa0(o&?|s z?GM;)B?qiGjxXh@#?XE4%5d7NQ@{uh^=+TdJp4p$?#At0MFY>Q=V0ka;+qA#={C_7_!p&W*zw&-u6H<1+B?(*DA?Z~=(51q#@t4s|#&8W*2b+iN za$Ae}WgEv`$>;D^m#l%p13D!AB#E#}LZS5RhP`WTjDX;GYL%xu1)9BI3uN{>L5GCh zdjm^3peksm`!6j3x|iAdgR{$_>$=8VXRBq=CLMbr?fWA_y-*#V z%L#BIRas$nusI|8zZ|TPd7oonb{`uS%%oRD*n1;pd%M$QUX5@qUFEc8h6~l%@Y*_mlUH1C#({nY>+;rsRSw8%`K^ zAPrdyYiE9|Het7=Y^|N_CuAD@boD#dgk4Xwf4M1YV&{e`(#BJjNRwOeoQ6t>1@hkS zs!1mQO2>&s8Br;YO3M{I+ z)!yYn_3B7_Z-Eyy?$Y}(Q6vkk_pE)G7w-W%V7OhA<^j}z{OfT8hCugrlYB2JfG&B@ zCG#a27&ju~+O!*i8OVA2Lvs+iHx+FCt0n>6R~bw13Y?+a`HTTywh5SDr#QEsm;+P! zcFy*lmw+LxyS2zA6gm@-I1`}`wBA>}ZBM0v(v`4qjhrU5&)s{!&C3K@gc*}{x-X!< zQDwp_457ln-_q|o4RV4+rHB8mfB>uXKd!GHW1{WZ2KF{LEY`U$xu1UoYcEv|yY&_$ zaiyBzV$1;~$p|Sf^$tREqZeb+cRy0EtS*b&r;qggua{;zeZ@}vY!ZFH2)icA-K+ZS zkinSDBkSeSgp_}5+_Ikr8# zrJE1riq`WhsA@np)H6-BuL0WVh?9niC3Ko@d%d*g$$XC5Vo5OC3XHXjN}UP;7-2iP z+gAkvBmMlDgufxcut|6N@bDmX;R-Edsw#9oK1QFYuK;?UWEr2`1GM#eUpcLpf#Sdj zV5i-Lc7jpHPH7itF*dsMV&iJBp{9Alv_weS8ZH1T{?E7!?26+s7BA&4CkRwF+9)6k2I1G84 zH>m1PO2ebD)rR)Zb^swl>ulqvOVG4%)7FI4b3jswH@trH5aOMvQZeY&<@2oRSGNv23a`>|iFdqQ^5;`cK3Hva=O8j+zv zHUerBvcvSR3PI_%EY9b;Cdina4p9HXh3kr+bFW38#yIw9;fW-9%zvjebt_dED=a*$ zW_6w+p(LqKaG@EA&qt=Z$|bP1!!5FMI1M}Y_N+UzwFD`On|MbxC`k2iDZR%FK$>Ut zS=mE?bQRHH&D>g~XE{|HsCyutE@R@YJ%jZ8cUk*pjv`$vb$Vr{JkmnMva~5uNR8C7 z9v>wj<*0;h?Q?7FDE(`fzR(j%X1VJA)N|MrzbW~m*=DQ{S>dMqu@0+TR_{12sfk6- zCwvZc%wdXF{@UDJ1Hzd8o9>5eoY5Y}Zd`LIuHx_WeaN5R#8lql4%` zjN0|gbEF$ul{=#tMWfJu_R-d^O*()Y%Z)!|mji|R=6S9D37}SXZXL2o1)9}Q!XIBM z(CW>6wYujqC-)6~wh3rCFI4|7iUgYK?6Lm{_kij%bFKa!Z@xc1RsZu%4agBIjE+++ zpslP?(#iTQw45JXsGPM88d=vLMlx?g-J7G+Zs~FG=Tx{I|OnJ7%`;^(-+*$_m3zvuPGcdA;|0Qf4SpeG8LPnbAn4=d8ap>5NqF z!C_H}M@Y>i7+o(?L+Zx4dyjkGBISav)$%+GB)?^)Y3|Cz_DDw7$;G>{6^D#6=ks_| z)~DEpsEgRJ+4!-C#Wk$qSBPuJ4Pxo|m{9UNI_88)90-(7#^`vm>Y<3g;C+~TQexvj zNa+rJs>un1!UP#L^`Tu*;mNQ}**pk!V~a;!c4a`LOU+VR{!3^ME6odfVF)C%!0!R2 zcc8s;-Hr=Q93bb2wck@e43y=heY2;0fpWiyWR$7~l>VYP8`IZ7;fqB-Gp+zis+=0R zE)ghl3;j|bW&^par8fItBDB9V^p-rg2uN9bjmwWEL-QE(qBYv@?pqM+G;o=8as$ z!Uyg5zh2D7w8)^ivAPo&TrysMs&)i!{giw4AzL3(e>SV{gWxk)hP_101gKd%zEi;#OA!&0?ypp*Wwmkk4bv;)Io7MlE|5G4~M9nC3 zYZ49X-$#j)rTAFqAml6ab1_yby>KeG$i|Yr8{fZS9m3pYiZ+o^Co$2aPTuN38TvTf zjrGgj0HGRVNn45oAk})n&ZY4hs;?t;>RQWGv_Nmr7&L)sh%!`ZSoKcP0Xej*`K5kA^|RP0nK-ZZQz-LjD`y zY75n$kH0dO=0iCu4SxDP14a7Lvu=X-kTqvJt*(6(;%z2g^qee$i)odM+^-8T^yUwV zHx*P&32KRpl;vUGQ2R4)>QOAQ2|rYsz62}W{Z^MO9l_e=hNDFXej*`ztxn~0du;G* zi?}T2gN%;jIOIkIPghtDN!ZhRR2cF9L~L36eHt6?|97=ZGZhKk&JP^*#aLT57tm%SiLc__<=+=TLt2*1FdQE1{~KlQFg|80z+J-L*wo90<>z%I%S@h6dg4 z&kC>S_3xPdHdkpQAWALyqRVXn;=Maxl(rZGu_|wSm2(0R@A!!a${hjXLj5P=lxb+( zb8+DNn%B^E?8mKu4iq62m6$YNfXhN_0CRgX=lpuBv|mX9}*q1c2KLNJPe zydxX0)EmEs)SPT{?Uiv5b@7v_$+vbmrMGJPnN_A364JWhrhK!t?jl<`MGMaqgqQe-A%%PQG>yY}YVE)K4B&8!rqMA;*j+xY9AN@WWW*!;r8%$b=-M+tw-=aq~YE9$}Qo}&%IiL02wn|O`oX*v?l z0_)DaH^wc^Gis-VVwl)!r%%u)eC0>K`*DCMYVJBQxwDiBt^-j>Ba1}35SaYl`U+G{A39_%=@CDh;DMMyi+#)7SW6!b593 zBf^L&e-3p8s%>G~U&jCTu|2}foa1y_Y0a3ucDgdmBLQ%nWr!I9_Ub`TaQy!dBW2V$!2o4wLnAnEyu?Aq{H zAl#vOM4sM)wA3JemN{X_NHlX?TAYV0IC^3Fo;75f1a}xfSh<;;%qu9J#)(4tp>Eunwv=9<%H;aSxLiL9+n_-ZezPxyp znHo~G)4~qgra?kx26e;WQHYklIpxXb2%-Mu{&Jr+@c%FLBkx-`aPo|14sezRIrh!> z-1Q>(+w4K;YpZ*&^B~}8Z#)A1yh#-%y2sq zv~Hn<>0>c=rhD`-?N`Fr)29?MwWdQxPF@}f&{W3sc^Q*manmIX3}XVXpGLz6XN(@r zIvviTi{WZ?HvWHkF^KlldQHp^^gjN2H*wDf+Vig``wwm6RbDBz{JT3~Jt(Apq--yE z298_&tlx$=tzjt2UJs#?ox@R6u@ET*dcnDs5Hn=Tn3HxC5@;o*z4voLQkAEDO~*Y* zUZWQHn9~C(9V!W1Uju-k6Gkib$Q1~L3FqmtUqDFH7nw2q0t7>W81{HsNcmtBS7db- zQdmqF*oqEAG9#1qi@Vv7kepzC;-~|}Hi!9SM5jVjnE#VP$D0t&!QGYT@CSk)^yOTa z@&&)YFXg#XRls9+?U1*xD_DOtWnr*ffXjiJ3pK~3&|K!;8SybGbg|>N{+X?bK6}L8 zw)ySDfX_#*n$5B>B=qpL`8Guie@N`osTIS>;af~}3!xajV7AbHMFV4F*_|a0w z-+ZrY3&v+3=*x_#!-T!Zt~(^vV*GFMr$L3!Fy3`_FMUV{#>M#v#AiRi*gIjq|6QHO z=+YB)CsS)M5y`dytnmyDk4x9pp; z-O;i2YFSkvKR)HSc;di(EsD1X8Sv+)fpMSeQn8pYJg20n`M(GQcZIe4z0-W)t)S+~ zK=}dweMiK8^6kLe&lLIaUtJJfaHuYumKH*Ju&k!L6vF<~KJ1c7fpAU&Yt4@+2#+n) z@eqCh;goUHPG>3z&zdMY+BO8?Qi0X9FSjAgb2NH~Iu=5GM$Ym)nud@Yj^Trqi4at} zvwOvz1p=(9UcCIE3VxsXtVKRQ2XA_+r(O(^;6WS9E!e&b96NhE1g;E#^@|K)ty|?_ zr0eR$urmnf|41wN1^z+ZePu>h*^|&*cZ$=|_8dNE=iq-b`wCy0Dlq)z%RzTI?ee)S&Myk-d_r__Rt)#rPTswQB)>LOiom;tPLDY1q$x4?>4NWHsW z8Z0z3|5K-Ch9}ojGw!CY!K2042SQ@+;Gqj}26=ISA^m#(inlXp8{S?zb3+j{j{WZ{ zRfh&#UsH|IK6D+fsqh zI^JHWAB2-0PX5%dUxLITC9Ra_2SGk&c)OYP6Q~~&$!Csqhdbdis2v^;dSJ=R9`_j@ zxR7EHSPo)63&EHZOWM1f_Mq{n%^PhhQj;K8LuZ?JJK{Vg`u z1-1|0)bacZ1>1!|rz2%;V8>>7#d+%o*me!b3>DOZEz7z?yl>4volhEvTh)TqNyUN& z6EAo=M=}0e@$U|?A-&Z6XTk7+|23UM4sbg?F=+n4K{%xvmUPPeGpdx_D0LG_LW3r% z1JaHJG!vJPgd1Pb+K`e!VgH8qg0`g2&$H+>=~iEQ<`B9$g}?9%Y($SqI_;&C73lR{ zj4q6pg5G)e|8T7RP|3J0Hi^e?kUmLr7DPA4@ z3-k0JJU)tkTS1bHOZ@2jp{e5f>?ib5G%3sKV!~I-4q}F<0X@F0F+O{{hOVL!YmH8& z_+mD!^1@UyT2qOz9X+It4-elnq$}A$DRI6ao(KCt$K*380#;bBZM!#1 zR4K~_!4Ntn;{R!F5kh<@XWB3PgrI`B(Oo05@TMloKwv>1eC4huhTdNS&zmHvgHd0= zaVAsrC7mf)Fdr7~nNR@vP0_1~ny&azcHAVNGXm`y%kw*i#L+|YS)J2(1p40cJu9l( zhHu3WD!p$1fgz@Pa}rJ+7)~{ws!cM&NCP>Yj#EY$ZP&l5PWv8XCAu2V3hQDV;rVm! zUtJiVBTsS@yp0LhnX8T}wqk+{ce8g7114O(+gC;W5932+Hj~2ZFwXW+UC7UO7&FmV zG2n6uqh>E@zXWrPcvIGV{E8Wdc3DJ4r-@;Z&DltOCOz~kCN~Coy+#kK2KnX*3fhKf zIR4~PMAch|B_lsmz)bXb;cw%5aNcg+gRYCl2~10Z=>?Q!KvA4uut$xJtw2Z9x6^W}OL zAaszd?ERU6Fy?Vqpwj^eh0{EW&FMf8ce^aeqz)<1$Hi<8^Fp#^d$6s+H%L_7&Yt{E zfjF6L`di*k5JkF!p}#=V*N2^9-i7EaWoWX~guN2o1$GP0aAOHtgFkiWy6(r{|*Q z?O+mL(GI6p_5xQZd<{PMx?SkMXJY z>=iuEFzPG2QUFZ_h7v8Go%Hv_*V+-OHZo@D60rB-qZ0(wN|o>1s$v0~MBdP|QX}AP zzi|03V+aIS`(33NDL~}g5`jMb6o}_iy>;KYAChw~Xw$81Kq`w51E11gNWb_%GEek2 zWU>rVJIK^RR_yxM2jll3yK|ZTv`-P_qzKOvc^^XVA@l35th$hU{N3|kF1?V`y7}mt z^OQ(If{Sjn+k87kFe*u|>W41u)f^;{hMUuBXq$)bDp9=T{$@MDF$}Qa??z?pT z;PVd<@h+rc4^1Wn7J05*xbqe~1WZc>RPsQZB$+vPmJOc|6$rf(!qmU=p@n5y;nsn5hFW^fd4TGjLVjZO$WO(Y zzHSV$is9YP6GSf~JUR1Nh;!Y2S;7cs&G052xv8%PB8opk*c4l*r$6SVVz^# z$*uwj$@3ejq0Nv%KWt#x9}n3lzFICjW<&1m>n{$g(@>xmvKHa%4@JDMqPnXNL(#ZA zgK+vqD1LNun4#4Pin9v$)6`#r;_Ms6*Q|@7*wp0XTyfjKJzXKGFm5Q~@=I%;`2hvu z-ZDo(3UaFwEq*SKKvs9fv~c9{e|UYFi|;4?>#=2S$4^E=T&G(CE7fiYvv4Dt9We)Q zlV7~Kw7sC)ThMXaT?k!N&J0xUJ&wUTl~V`LAHo<3AKf>j3Yh%;9OcDHdQ4kST~)o~ zidp1NFruZwJgHjm@5*vms8;xVBv&7cHe+JY`3w@7i8(A5zDWGWbiVaoE|ysBj^Ui! z#FDbv%b7_@SVBDG5|bT;CB~Ny3XL)$u`}t?L&AA1o~Ix5i5|qFHX(;zb5ATFr`?kW zCd_rQkK7ED#Y~FC^z{etFtv1Vq(R$fOpM`HzkRhGBNPJ0E*qqwFE?`l1H%Mr7jm3# zrMUv`KduyR#>YXZ-SlnyFC!2yA0fLaeE|rg`a60N^pL6NJazX2JLJB(QtBvn2?}+j zZD{91ZNg*y=!8gF()j>Gx1p zvA(^`e-p~|N@F7V-J!Hd>vD8l0hE;X2E`7>0ny?*jZ&T{6phlex!KS{0mpm2@bXf~ z-YG~7i`Id3M`_Fb&r%>cuBVz9#0ZfKSJkLwlfchG=eXfy4QK|dhEbOnqSvb`S}zkD z46m`DTPQq+NiQ4zJYUhkwAu7S60dhKyFcSzu^}rK7)_m{)YN0KTsOpKXVK|C(&O=i{TTy2`bv!$WW@2z$com{XeO6h`QqI!(~_p zDRvsg^P>%rd0<0zjdKz59;E*me?oww%qQALEHpqIKgGhi$Oxq)S9`-RMM1gm@LcK- zZ>abt^is^n94aT`>OcN`09CI$Cn;ZJQ4&AH2^C z>Xm_t(-nlrpTeOm`l%@GBsG+j-0scZgHY_jIu{~d0R@Nl*>vZ3LRRkKE(SFrAbj3F z`L+5c#CWnW?=MgQ|6I*SLaqjQgt?;VT=qkJEvY%BaQB~|QJs3$!RU^uD)&w;&bwl^ zR{9&m(SQE5@5bC?7Jek2PMH&3x5CnZ?X5~lRxHoZ^mC=^$4U!zgS_)cuxc3Z{Ro)B z>Z!WRp`5cw3T^&n{_HlA2FaD>%XCO8I??h&@-&io#{C)&PGhy8+v3n%C06#+{+`c} z!V1p6k9YJ)ShmNcG&}hM5(#hpY8LKb;S}ej%7p>U*(do}|AjfGl4m$`>v}NucC5|F z^Bwe8cYQ?mt^`dze&crkAPDr*diJgFIwY`5->azQ>uC#kc&!(h1YLE(ab>n zFJd;7RNwrlQEm_Aa;K@7ie{klrP;GT|I>tOoomU_b0t9fAaLS|S18mhtjyk+Ux3<} zzZM(+aHxGR@=)8V5NZjmp^vzCLCwxUG!=gnkY<(b=v%s>+G76QrT#Ifd_Bk@NGXPL zrC6R^vsfr8R3g8wy9-5aSL@9TdLZ}8smzMO6-aX+KcPJk1+jH0i}O^$;CE`Ip?q2p z05d?$zaJ6z)%h;RV+cjh@8_xsCjWQQu=xoiX4)1mCywZ1!L3Tm61}rXG}^p;ZoVDM zbSwTU!xgODx|X9OA4ocmSBx~(M`F&VyqpW8}I%#j&X7R;fARg|kO)fq755VzTEFkVwZ=7*E}YWswz?nZvqR`7!QTK%fee8fldaW#_O?KH$dFH)~jb zHsRgP$+uX)@wtb|cLf`Ks+{i#Kfs2*cjM+3qu4M~{cc6O3ma1QDQN8MU<03);1W3j z>y3rgtqvAqUFX%=ytCJ^M*B`K-El#za(GZVymcJQMTZV#JM;L|RWW84IVwAF5nVK#7lbPlzMN)hcwo4+mjVqJg*K#UYM^m< zU(}WLe>323>iVNZXzVpQ!%$cPjotZmoh5If@fE>;J1PPie(k?IUC;{+Ts>L+vMf-) zr@7vBsRL?FQi9$7NIsNs!NUIbgol#PP zC}H)Xbpal*p=X>aO*u%>kXJLBz_h?HX%!TI~JLF}5PZAUyd%FXOsrI|zW{;Q=r6--DD-QIe| zRDk5p@drj5J4hyVj}!P7kZe$HckGWnHdYl}IsErMHgrr7X5_80J|>P^qJtCb)Gqcd zo)^XH6%`A8-gT@HZZ?{l`i&*bL9-rTsWD%k+IKHy1yfi4Gn4u~h2e1x#xZNtsJ5^E zd||mTg!T$)w+!EfRN?8KrCvqIEAyJUzxn})vuoP%G6hf}>G_qTJ_tx6ZS5^{B&ciC zVR&3)4)tqCBAw*spi$`$({)W>Am0r&387Dgreh(oCpXrhDXMv5oc=yEHL>qL>0Jg* zDPh;t3|~UidArN9Ed(IjaC7uBWI?0Z@rRnG9?-za_w<6GGayrY18d|5AXzCzDx8Rf z3RBiAp&R$1gzA)8*w+%sOBlVZS!oA^Ci-uV-{l}gv`=qD?*cwek?~yR;lpSiXMQ+U zj~TM%I^zMqu!z<3ZN#iTmUa(0WDPoDl?WtSQ4a6>Jv#q+;h~j?J+gtTyul*j#2Zo8z&8&91Dabqmqh^eg{e z|DJc)bmW)VhTlVMTp8^Px%LwqyaJ89Sq>v6x;$;Vp^T(zQ#Z#bajY;?kksumMIuRP zh?4Asxn3GpA;LE>g=@@m@$Dh>Z{Tt*Z9D}YZc}$?R2?AkmTM{p`3hv$k9425>W1RK zpOmVSbD?~6z3v)M0+62kw2<@K4;U(N$Mf7UG!Vq}O^hA`Su!@ADWnRT{I;mxyG%jz z8+LE$)jQB~d7z!srxRMDuV>8&9EFy|cg7X3h|r==bBy@96PmNT9yfm%hNfbjonkLP zAe$X^XWZe2hQVT|8!h~Ro6V2$%tat|(8;!6DuW8)3ZwJz42a@K$cMZrkUdHMxwxeO z35!WB#`;{~Ds1RrUc`lg%maI*%H3a|dZ zd}wg;_TIOF^;=wP20_x;_+Ig^T^bRap3H`wbF;^0VpAkRHUL|)3f!q~UdC3Xs_n!N zEZ7<>P2c4C6!IW9xy~ZEZsWw%llYzwcfZHj5m%=XXLM$<1b*DFRj4$Vf$4 zZwM#pavM!9GxW;(ah{Ot~uzp&|{<&6ST(9qVU6*;KqQB`TmOoK+5 zvMdSKEofpN8He*r(4799Y|fMbEn}J;(j^z6wZ-*)aA6>{-I5jRQ`rS=Zt`_B+>Fqs z9w@%mCkw5O0TbCVZ=hwEP4GXZ6ljjo&1uhdgC?38xZAH$_O>h-cfL@_~@=_wCr&Y0z=S<;I<3BAEE$;*sc& z+?Z<`e#=XC5KBDnA9Tx;!zy}%FyTd2v#zA&wi#VK=#`x+}5SWWwpE z+-Gc=%v<)3smHd1sWYjnb=dZek-&GbA1Swe9;?Q8BE{%P_Sd8SNMTWkQOY1-oBrmF zd$;VcRW(j#_$o6tf7^!LL*m%PcYRdI=_WR^?TQGx&xGg}*1|JJh1K`^&CjeeVJYQ; zVBCw7nBU>Hvzgg}DgKnD@MuJ@r33fb>Xsm|g7vJ&v3rmvyH;W;S^`DNLBHv4-i7i@ zIyE9f@<8gJcpfe*0rjs6YNJ368po)ONEk~@T&U~8{|kVRdsmH zKy2&Z(x%=oAYali(b`sxF~Ji}VsD)=o1~K8B|3~Hr$1kP92S68=beamwHmQ*m{rlq zX#*SSuWz;F{l+GPj!}6w25fnv)wuE92-~=azCJXGM2e$J?qM##cI$xyu^l$pK{M>P zo7)vT&a?Wj5vs6#Ib2=7bO_sT{C%}kTZoivZ+~g-x4_nc-Ry;x;n=b_u58Jp4$0Fr z#H~3^Y;cm$m41E*YXdqMqNcpDqA+S%`FJrF+n$wSoBxLCqeXo86!kFp*WHRm|FiH) zZ9T+NK^X{77Q_(9?D`_b)8T`1QQyJF-;4K?P&Icwpz(7@Px*Wf=cAg2ntR^+=u z^P=XCRM#zNos#G+TSx$k4^@iW6KZI06rEJv%7>1qwk>&uS?HvedlR(R8aj8^iJaQ@ zgpP=nnJ=jo&|W7iFZERsD6Z);2PuQlI+8cGpVAG@Bj&_x)p#I#n_S~G-hldVk2%}b zh(OwyKcN)q4P~{LT6X#TfC3H1XHqklAi3bAEt!rJ?5T!yI5Yz>(qr}G>{Bny=Dx*m z;;)D$x7}5G9jCFXyPBL>d>e6=nb|v302^B=*0g17*sO7YRV+OjTihO_)TH~(U3}{fpkdGSIBG;8c326m57WoN~I_(D-tp?GY{9eF4uMU zy+|3!NKp!j{O<3s=kWyU>($Z6CpR8i=dY zhcpaafwcGCZVJf^+NKo@$x?biHXGGb=5Bxv?MLo29|EDHOgrDlB>_5W$d`4$WkHAe zr+?wgJ^|UA?)6k<2--K-!sQ>cK)UAUFV?^YqSZ0OT0S>u`d~QGZbSouWV4|AoIcbE zbY#0eu7(Pi-s;z;pP=ZPLdqJhG-R9?X#P(r3<3)K7khTL;PdCBHpREjV6KRtCe!E# zmhLs*y7_$+R&Q{COOh^F-|_S8v5YO)NXh+TFz_8)!j_yI+H@3K2Mq?7U-H1VfrWFL zev3%<-$i6P9>k6;Cy&MbtC3>I5r4Kh4k;AqvwE_NxIT6Gmkt7s&h$XaYEy{X}@^%ff!EMIEg&cyoZW{12!eXKs+^*HzEb1b#_ zy31q45_1;c&KP$IU>td4V9aS72u=tS><(9lSGkf}>xN&zJL@W+XnA{hA3O0V1qJ~9 zwCrQx{8avOpt--qLw|+|tpWB&UbbjJ+xsEHfb|rRADvmHm^KX^zpXsIpuq1g-go7bweL)T{BW^a@QyvSmGTLvp5TL4 zucCJ$l4a0L$+iC{RRsi=;D@=kt$>@(Yj7pT;QhKd-^5iOP*l{lG+tE&GK9K+Q7x{6 zch8|M;ryAH*dQBNlJgzkPKF0`j7MR)Xw&=EJHBJBsfeYN+c*+d)(2Y_?8atIIXSkD zDYh*-NKH^!F=m`(@56J`}j@h7q&_M`&%ux2Z{Gq?3ZATVpBq< zfmN&yHrOr>23yEr^*f7;e!ESvRQpcwQNC~ZreDU$q-Hn95M4ZMtp*`llI$hgw;i%i zGtaz7sDN~?PTy1Bif*9Z$yOdf7 z38;uII-GZ(0EJHb(}G2=L5fak?}G??bnZMsc$B#n)8~x-M*f<`cgn%*)gv!prP$Rz zMe{DKH)icxdNUgvX}iU1o#T)wYNXfO-iV}eh_*i(i{#63@n>@8k#fUC=K_1!m^@hLQ4v#{cFvVh7*c z$Sw^zY)k%Xy~}JT5-Cjmy0r$_l>Vsdj>=`s_H#Z4OPk6E% zw8Wgtoe}W^QiiXs>ZJi7pCIYK?DGT4qqy~Nr%&*B_cx=^Fi<;10!|is08M?}OOgC= zpq+5%eiUZ|P33Coyu&O|F)Hxm*nXf&9g}hGkp+sG?XGZ)RHjoZZUVI_A z4_ag_b=sPSfDk{NW3@sBYE$wbNgNh}vZv!#`(NlluHA8+QQ0N%^yrhm-sD+)a?fw$ z6r~Y!9tY0kT`tBl2$0XsIFGf?GvwXJW{~ixUpv9=8MY`sY#xsHK$4^S#h{`vBx`qC z#g~sF<@Jcq??Y#hYI@4jbn|kgEtPKk`(_K$?i4-d*fk@qP~EIJR1;~5#ZhnV9w1Hc z;($?lDpJ!U2Pou8?7TarHkY~vJM`s|yW0-i9{y*zOYbETul~|^o4A0D6BcqAIuEd3 zL9E_aSq|ST?pt=Ns1XZwCr@iX*1;r~ujIz3I&jxKOiZ9g2eKGk>m%KrP?B-FHIupm zY9!LXoB1aLK_qtdNa`MFZkkGJ5LN+_s=xTRzw3dl7W6E8+!-iM9KKh6JwWvg3(7az z2{hfBj!-!s|CScrsIA9=F5)QPIC&fBf{raV)XhMvsH(~u$po76ov16n4S{Mx-_n)# z0w^v+jb7i6L3_=i#^#$zJy#tJ~pI~^qDcU*c^B} zS7C)Ol9nqMjvY)y@}9t4iKhif`Bp!dXnzE$&&OSbPh=v^*EsEJ^%116aQ29}CyjK6 z+6so^Kcu^S4Uv`Kfb=Z|%KWCeNJ}2+t=qQ)spPa_>pltW^!hq3ys-(%HU2SEqu_p| zO$2^O-jR&-v|Nvy-Ac$`_qn)%l0B_$6UjoDpc3P`kcErPsd?#=RS$LGyL+bkzbhU#+w@ zZTtizbJ<67n@fS*DSY^Ru_bi&Xdb#n+z2$ywHs5;@;L9U`*T)F6X@SBRw^n90^{r= zSFgez7=Cr)3laoi7z-F)yIBl$^3|f=Bm}wuhmlYi4Ae=B+IR6|5vLK4O zRC_|JlRSG>?K)^WU&2V7+zj>0?@M}K?1u9G>E*gDb)nm+113=d^)7awT;jtN%< zg=Du1Vv*v|MNe-cR_3cY3)W6!gKP5A!SQr#uJ~?f$9EG+Mav__S-*Mu($I3Qz5=Og zy1zc^>L4wklIqyD2I--{uOIu`g$%vCs%uNSkx|&F&d*6iMyIW6q0~-fq%dYBPuxI; z9Bn?29fEWVol1rj6KPr+MPmd1VQ2Y@7vcZ*BKg*d&t1RDu(d@-F_U%zn+nug-4pI% zz5Y^83o!~SHhqv7{bG)}wcCE`^@igEY3ZtrhXhE>wP^Mmcn(Er)^9z`B%$i0+D_M= z0cfCGd1WO~phaUO&VH~O+O%g6_()4aNB5Gglp|6=z5Bf6Kx;J6XtkNI_K>6oeg0>6ukn`!` z_1!JM;Qrd}C3=5#@nt`!d%+EA}wcx8%h zQ$LOzeJ+fYMDyn+Mw3V#NR?`O#zOiY+6E!#AIQ)#6r0>>hKyf@6XA|zWZErgAG=|U zOmC;JtW!pWn z9#IMCgQlO1&6|LhrS7?`O9rTN7hW6eeG25V~P)dv5^X#%MWPVE6PY~-sz2z<=JF_w|%juQQVp27h$u3pVE^&x#|o|z5o;UVgzp9?|^n|Ipx~YtI!#-+M}go4YVgW3 zHlEVwfe@(Zep6~ARP}{!p`afWStf2$wi$r9+3k5Ddw*bD1CwI0@Dz)V7kBl#-o~mg zm0#Z+Za_j5@kqPCS0tYN@%`ZG3T$s2`Zuxs0(PR>Zmy0ikKgK$61cFAno*8 zn6>nVj{Bo?I++?kExF9Uel8g3_SZ_)hVqgUi*{&bR0@kNj zixw7wz#6!ctv|mSSWzqIcD(>#a=vIr-Y5qKrTpj{>AyhtE~Po}I{=mBrKjuF105xS z2LF)JIN+?ZuX7_CYTyjIbRtP4&0?VyC~u+!=ZwFSpvKJo0~s zj9vUIUwrzCOs|oS;g-M1axB&jNOwZkv~Bfy)j!DIee$P9T{5!8V>e6bl_Kj=_@R=z zY-E;gd8lwZ1{q<4o4v|rkS>t4ssBqRub12-O652r`H1H3C%e3mnBBMf_j`3DWNR&K zcjI7Hf!f0A`?FZM@0rKU27io^kliGwC<4i8;ZDS%St$0ix?ueK1k~PL!3tjxf+pdA zzW2QDK(&+?Ta>dz^>n=&h4F_yg)KtV%1-FF;w!M5}r4Fl64Y?mWLS z0ezLaL%;k=#hkjp9|NBP@cn@W?vf3wu;E49q=D}?Y-u}7^L=B1?J2v3Np@=3`H%6| z<+DE0#@Q9^l|Pa3Sj8dEL>-x*oNun5ypAl+*rUT+gplnM;^kCKM|Sa@n+;D&ko~06 zuW!=SkN2&TK)(A8qd(CNB?Py_F{?#XxF||KC`yHIn<5O`UqR5?d7( z+SID|B4NI+QQNZ_t3^MpV<2QZ7VQ4;etk#Tl3b0%5nN+wgl=|0FT*bv8 zJ$%pkH=3_8;&TqsclmA1|6J}g%e{hC4;->o6NHe^Bl|X{+lj{^D{}PwA?y&S4W0X` zht$%B?+fhbNKb!gEGMUrOt@)q{hkN1!Xv#l6L0bOYZ7U(-N@m;#>i2>jhr2X2szmc z$o_46a-P2o*>)m!w%-Pjb@5Qtp(uZ3t`z*>ad|n?FMX?)`ZCt5f5!fQ?ApzG`3L-~)1 z6pv%h(6D#sv&gHw-kqZmm3S)^+H0?=R>wL5b(j2`UT5qN z%p!hE7mZWESl6-q%E3*%-fp|bV+j*F7Q#jD{JIRJHFerqLTjM05rSQZWua!z<9Yf6 zZ76bD|CDY^gqVFr*I&$JVygd>vf{TyEE%_Q;&%{4e9f?62ex9f`>(|M7+Gw~f0ceM z<0MayC=ZMBmLaX5JwX~?jf~2(-YP3Pk#*2(E3G~k*_T2^W>+ilxZg=IOWcf{Cu4?o zL8Zufyzskky%};;(rqOLWRdOQ&1b#c2w9rd)5pKAL`K0?{S`?hq|xWK&rx<^r}f(a zw!J^L`CnG`ocV~&yC$qC3`<1OxuVa;CRn0Q%zf#ZkI5pE2P#C;A@0DzsOLX~;a!xp z*T%m-P#Z8KsZuEjO@5&tR_`hSQm&Kr!p+~&7HCF>#ddJYTz#(8fN_ysQ$@AZ> zMzV_y&w+i3;ac^p1~~fdxAkfpS4Dwje-wx^5ZHz9ZA*ty&NC3GQYP=e+3 zF(0}7-!Dh`@$TZilbh(O8RRTYI(AKX3|T*K?sz)&0-1N73vK)U0qKSNMJu!tkos6b z#Wf@s$)-z;4b@I!%VMNezLyy`m{5~L4}QV&B-J~gHgCsFkK8R1>w+MJQQ~4-AP)JY zo?k}}xzNA#0B*O4(otiVeqc_QWX##`V`B)TR=m)j9tW8 z0#t0Bb2`VFg)Ea*o?|PM@UDyb>6eg?`QAQG;;$ZH^;Yw<+{ZT9_{6wK)#5jj4ybQs zoLq_&Z=a19y=9OVEAS_}rwJJuVr~xK=8<()*XRE3IAoVj#ZZfQy7N{U8_#$nSLb#- z<@qV(Iyx`$?4CjHdet@Ceq2G0>*qiF_<6oy8T{_BL?SY|W&N4vXOJN<^4|1*A5y#4 zo?dZ%8InoYt{IDjBJsTNiif`m*zhE;*z~+LmJgC-<$@97-XMgBn;fERVlO0bl^tGjI;QffvY`lVA8?>&fT|ryQ6rxrfi?K*O4-Y$4%b zC~FFKEX~{p=|9UdB9?~X4XyNs z^Z9ZrFg?ugn077#{lbUIhm_AiUD6b*>#PcGl`3MfRaVgS6RO^*EkJF;j?2n2N>D^J z9�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 z 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

{uQ)3U2&;-Z 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 !jVST)vj${k@@7I zQEX8dGP~K1(jLzsv+Jjt+}boU9U3=ilPZ~!vB*dX zV^M6qjQy#6PrehavG@AKe$A9GNTZpGyZiYdWozKX`L%BBP_)`9cJdSw|76_ebN*AbX5w`%fUE(0^jN#NqWOkf^Y_0O(510((_2hhv_h8^UabSl|l zh;?sMblWsARHg4~|2_%*yTbq8)!q(0#RUNql?gy&orsV;77S#8m$ou*XwWwCGN8>x z0vh#x(Vkuig7V)%4QD0dAbrGmc%xP-28H{1g}0pywu%Lvu`IhTdqZX zwbH?k@koO5@C;JCMTt!pd5~@x)M-ZDioN4{Ru>{!kc$L-}00 z_u@?){+RzLM|2)X@+{TEL>G~{jiZvHzKTqas;Kwg)i@F(v~oBj?cdxL?{cM^;E-eV z6Y90!$mlx!{k&KX_P5+U`l;s%_F8=1wAG)2w91N~Z45wiGwVk#-Cx*#a8s_f?ptiS zNBnETE`ybMhCH{|v@pvgjQ87lZ+QME@TRHvGboUJA?X^f4H%~Pw3D(Qnj3w;9*X@4 zomQ8)T?H-xh5q!kq4#5;6MBd2;|rkg)VZiV`RXv>)cjk)IsgWBqg<9tV_>LJjrFu$ zHVn5AOGa(DVdPrV#QY6;7;$!wI+hUo&%+ae-`p<3uu+${;=oB563)FKN$&%OE%l%r z=K}PboI2{}q60nOlT+kt-UCfs&g2t&9FRG~o6elcgf>gZ+dC3#puyPr$dr~jlq~6c za>`1?p2H=pj2cAbFO@AO{#;n7xP*vfD=oQcE1x%3{ki;g(VwvqgiO&y10WHu%R9>?LF zwZ5nPOdJM3Me{-j9MYfVd=k`!j2~J068S?oz;l>TEmMTOjdFTyZ|#u2O+)(o3MW$7 zXWB1&H(|S36NlE>m)LaN@xhmgQLL~Ib>fha!PL<{sd4335KSE&FVFl0C8r}K2apU6 z3N7K{mmQ$(3DtR{<`E!^ohN+wZUHo<#y4UEpP^??XX^(WDd^X-y`wd84;Y6Y@eQbo z!eD4#x{&HQ7_#bMPGnvQ;Y7r71?j&z+`=X21XaX3*y z?g#Wlx=Z+(1Vmq4C$~J3rIir=#I4XH1>9g zh*#>6u)oh$xQm4Y8P{@s1UQ6oP&@Y8G2THO%#`E5D;a`==CP~~Bbdkty_WNA+8GDL zZgTTg+`~TcN#kE8;+Bk7?*t zeE49;rHjxnGr{;d_8$xcYi&6@QUZ+sKDeuYJ_(F#%Q>GOT!n!q!5hb){e^ztrCZb0 z&Cr`!z5SJPAJF9sABS{~1LeeV+2K#E(4Nv286Z&$O*@YKSoJ*#< zNn6t})zobto0%R~8Wc||)rulfRG9bo$7Sqr6mBql?}QZ3y}RCuDS&5bo5mQ__{2Qhnu>Tx8>8p6FVB*hAvLW$R!M`gVQ zG|YOYt4}-wl6PfIps5s)qsJ5kYMp>)BDv1Dy9jz*k4ROℜ{%`>%Kg@Soq66(r=w zpihmS{dw1K=v9gws;~JAbPL(t!wP;tVWxCSm9Rsn`S8BPH8*HpKXf=?Zy;1<@yNO6 zC_`G}Tu+GdG`_VrwC)Nj!tz3SiOJhHvB~SVlJtLfu)SAF&Nto)DXhPC3@YA0nzg;` z*sFZ(;n?38o->6#t)_PZYc^p|!ufF@A2p;0CC{p-L?Jbf@A(Ub8SJh+UE}uQCboXo z&^hOkfOU(6d`7hh65jI~E4+RQ4v~+~*l~|Rkr18T7p1P`GrVwUiBMjcw1 zpCv?;RRJkVr-P~Q;Jt0w0p~J%e5qBxj{Nf$mTuT&(h;?Wjq2UM&UkVo$?$;TWt+X& zU2o(W=)ZuJ={l}1YJ*1N2F{McPHwGh9xA4x|wzf^dtV8gc~mwnUp zvA8CANxjzkmN86zL$L5q> zBJuzBV^C~Mc?5LUc808p@k49#dF7gpcBs!8sQck~4hjW66>i>5!@IYg?}*rZ$D(aQ zG2UV~u%56tfv=tuTYf};ITZgJ+kMMh=L+n1gGS^LP^HH5o)Ahr~MZuQ7*)c4a zugbKod5qD`ri)@}Q}FId&`U{98K_ykXE}Tz7l_+i%(p%*hnDgFv+~jFp?OAl-(vrN z&~Q4W_NY4>l<@tHl|3*BURAD_**EecA*kcy%hSP#Cigk^T)TmdHooKt<@ea&0G{@=rk&Mc>=1{UD< zxubDPl3b`uoxhKJFQFx`!a_-q8Ccjy+MIHG4Nta*6dah9LNnivT^Ytq^fY3$`^*=h zg}HL`ki8waUtBq}hwDE0>PAcqgmbaQL;NB;7R$T%FI&`Bk^tCMVJ6F+?2QmHcxorxy#k$oh3SPu9JoN2#k&@ zI@qy;fC-1via#FMjj=aXVw1H!@Hs`&W&P}5@bMCFm9P8?Z!E|r-y^*sIlw&j&*$Bc zpcSa}ks%KuyAoC-SkuteDkC*1`!>e)6z%3-6vEW|p@%+Ju1Y@eb0GxY6m9ggaQX-iDzPu6 zmE27MFOXgW@GJf%t>zancOXf$#vWQJMCtQUgDOj1KW8Z zGH~^gWeN#0kCQ`aJfT3?x&N86qXQIl^vEbv#(;2BB+BpNM#$pV&^0d#g6QL-Kjobt z;n|4=KF{S*^lkpKF%!^xVTRoeLg?$Eko(`5+bmzTdR-QEy`r0bWooq2v`VV<) zpaOCGY@91W%VAMTn`4)gx2eWyui;G}|#e!{6;4LgB<_me8 zIfyyF1KW7yLoqU{+-k@DNAS|WLd)@k2)q+tkUwFT3B`n4?gIyepi*YCZox1Cs%L`D z-nWsUy1+Ex^<+3y*!-NHHa!4E&mv!(n=OQlzqRS7jt7HR*B3dJATE4sSF~3=)&L2Y znh%hIhOn%RSE^nk6|4KN$cZdUA)mT2FW7rq9(_IY3`;7wdz?5moV9$bpy@ zeEOy=Q4M`Nm|I-B-a|a$kZ7QC91z^gi*7?4l$%Hfv==!+Ezj|5%{z`jouB1MSI&K? z^FJ@_*rWip+ZyF5QeY2 zYqs6z^u0Q6A%l z8i^HwbHX2?f%kWbSiUPX=@QJtC<{Q`*Tm!cn;n{b3P!EAh(m+DMshu;4%Eu2#cU3| z0wq_!nm;_W0n-0Iw-k>9{BNVa@o(v;m_aGp#%lTuOQv!zb>HnOJr=^;g@Gk z*F@r-s*j?Pn%I0nQ<}ds5{cDMIZTR|v9az@VC247ta~buVq_tP<+AjKSaLq*qy?CU z|9y-;+ih;eP;NmAclfJ)esWOEvp-_yFG*{i~2`#6$ ztj6|_LyPvG!w*|cfjE9MJxxyy8YRCkJHEUPwdOlt-AKuW;x`UFDSNL&D$5LSfB#qX z`s{0B6%mCw-RIYLlcTV_^N7`&AqUp)*(?@Ivc#qjjnvuEKiG1=ZptaI4_iZDx{Qyo zVylKz8Ds1rHor2eu~0mMjX|e`MnC0XZB-es>?vU^4l~`)>ih&#E;4PGt{8z|v7v3! zWESK)a4eUw2SG*ea{-z3R;VXhy;8IL*Z*{*Ip(oD(5k=7Lc<^h+OnitBFM$i7Jl$X zLZuh9@<@D;Ikp5uB>}UsWeKQ1+^soU_y)=!Y$#ptEeG#*#T8mA#)6G{%C^Wk#Eg(b zs;qvYSUPi}@V=Zk)|K-)ISjfYQBX#AX!aJingnL~Q12n>x<^d?vsEO`Q@h?H2a@&) z3=l;4v1NYF{>3qQYryzIpzDHt zDbb|?x{UVvQT6vg=lUtOlg|N2H@7W%=E_2|-`DjF5izLGw!dC(HVS1+Ib5TnOOUx` zVX`>pG(N36ZkYv}@cqo|$9LnGuyW*Sr`q)aY~=Z1@yv>eEle%T%f-{!p6Qo-EWQrA z)Xt6tiRxgtU(5v8z9{UrJ3QAlcMZE(=&?~+eb}z9Wu=&Q8(XeL2>%Og*kBc;n4O-B z6=v)kG$kHlc5F<<%`KSM@yHN9jL>aV9tsMTj zJ_OqT54mOgcl<AW)esVQGQU>da z{Z_VW+{0$2mDkz1fTY2d%TuApu3^pG#qpOxfb0HE!p$N!;kMm#|eG@k8?%PT{Cch>hyM?Y&=-^ z%XkA&UcB?`u@41`snfIA%1=Ok#SPlJh0t~Gsl@g?Ss+2WKdn_6h$obWzMbiWTKbh8 z+*!F$xL#=BOX+zC|8$Z>J;67vc9-D6Ngy~gqLy|j zK~16XF|D2d?){m8g4H*zgI zm;lvv$ltlH3@F)F!9*?rAgeS!sxh;H4*TN=;!fB?%M*PWgPZ?6mfm|;`d{uTwXM;t zpOl5m*eop+t5BO?TTs%lsr#CX)+} z54d6XLW9TDaz3^T!Ccobfq(mZqkP(~Dy(HI0OQr`NHEyBTJLI#abEwXT;MU%G+%#>4D>>J;PqnuqmQviVaLix$xQ4y`=grU z?|Y<|dY3QKJ|perobL1z2`PgWR(uc4v0I~{wZvHl+omMX4hk}{kx}RKa{L!o-itgD z(V>J{DOb)jO5DMVn_oXE+y)4NBv^cT6l%RUzZ#i(21JU#-B8poXm6o;^zTgpvRi^{ zUhy(elZ^QWS`>f|OqqIjH|V*XJ6&}!3VK@qo13nPhMtW3yU*)X0eynwmgI9bpuMr5 z&ea+NO5I%d7mp<9qL}WtP?drXvmV4a>zYWz4SHV-R$ydbw=M|Z1#>o{job#18RU?WU_x*>>Tt=TjeW; zkfAq0-1fcbIP{kAKb9EOhhBx&9L38{(6cA{(dKvdK=Vyk9kGZ4%Kf~S@(VuDnQdLs z`G20TH(D6;_zLx^-^WOL@lfpFl6*3=4q_DJyTyLWVe(;lN)7KkmT^dZOtkUBh9^dz zwfh;^`s)ilw7>?tNQ2xOeN#x8Izhhfp^fxS?3tBvH0(*dGh+DTH}<|iu%$(M0{iym z1>9Uo#6Iqs=zd2M_L^lcRf{)a&pxHbK-+4h-3>|P&nQ8PT;N^l;fFq<#NEkxi_jNYWbkAA zzuG<3{gv!4= z-Vo}YbvLc(y@cY4Mvga%KOxqy)Zv1MCMKo(m|Zv5z|y`CO;a-ea@)gqly%y@*!oxK z)$*%c?3#1EayH>DQiTW3pz{Z$U*eYbZ6jbWyCl)GP73=}DYssKEylhtqkepx53q05 zdwV1?3Hx41>6kfpVy_P&&%!Sd=}TGGD}>GWl(A`K z^X?1bURce^>TyZ>IOdoZx0-Kk`5yoP0RR6Kmv=bUe;bBH8O4u6cBQgXNQIC)k`R?B zDh-N~Ra6p*651q$qLe+#p1B_$Bm3F2Y-N{ZMDcq6`u_Pjj_-Ng*L9uXokcD->Ujqr zY_5ci1{lGoxssC)j+sM!N6=Qk{lB4gWBxa}hl@ZOoZ#43X8`r|sQjxhIzV@t((Nj* z1ICcOpZ4Yxz#K8?z3!+6EGMq?nY0RES-uiKpq~uPv<;@w759K~)396Sdm+#ody*WU zw*Vz+EM1=B1|*@$%5jCu(5%_1rQ)Fn#6o(?38gS7f9SXC%%+Wyra87!L~0E_{+7C2 zeSArrm$7rpp$Qb@=|@$;wN}s`=P(BTyMx8A=A97z4=Sd)nCK)rbsc`jh?d+>x%n zA@S3UEm8&iU%6E8MAFUAlas+~utj#nVXw<6tjlhS2xiA(Wu&);rdl3mon-tI3+RNK z;=?alHU#*n*17Abh9gu5tUmt6x&a#2)R~|7tOc!Johxok4+2@r*_ZIa5~%T>D|tK= zf&QVLf6p%^U>;W3;hK03SYF{ltNcQNE$~m2p5hB^=_5jcHs64iyzgLB@jNh-A4osa z@CL@Z{G2}?1fVIcJY>T|1@b4)n9VQOLff#glFegxXe<$O^(t0@8lHGw?JGZ_@XPT~ z3DyRPQGLnLc^H8yZCm!*KNrH%Z!i1c-zBV_9DdLic@CSNg(nwEzQ&G}inT`cBBX@f zn|JBeLmI1T%co%*WK=RNx7OAoODWID{D2^`|Le9jOZ|y#pWH<1d;+o$uWx$1#Rplb ztL4KUdm!_slD%cQ8PeMef3LG1MQZ+gWuuqrNZx7?@Uiqfw#E^BYMzv11H6sqeoM#d zz61KAwfy+;-O)W%?Y|g&bgIX>CIm8fb#2<5KLQntou9{)TcOV5rOuJGlhFLb?)_-b zb|CpGPB>|t0IH1MzAGE;fbOXKOypJpFtx5V2dOLo>+wTpVVw)Wb_@IAGqDZWL{Yx2 ziAR7PclAP}yA`m$=ia#S*ASSc?jH@VnF2$2(5rmuJ?c+#T*tj^AbUx%GY`f>+a|aF zGKW;4f!6#gL1i5f#HueGAHELxlS8qU#WZ+yP)ct%MHka9R-NaM^1|}?%l7+nVvvZd z&Mx|1#b)c$;T;DPk)+-z{#s@wQo2_9FZyErmX|bOTgg3LPUr>Jf1Gt0 zJUqZ~Jm#|h%R8VMjHM-`#-F0I5(_vPYavQDnf|zZ|n#D58bS?go3{N|AJh+(1;eHS_U z;=u5%Tl(Lb#=C7hkhS@-&Z{sMGA<9F2zV`pv;!i`oXAs1CThNq67<0~Mq)dqo9n4)DBZg9k7KP4)ZQy;RlIy0 znq)^3H1f=#!|+?I)%S-$aeWqBFy;m{R`1n-97|vf%NBM8c>*gkKi4AlEwJk)r~E&i z1WrinWO)PthxqV`ulNVxJTQ8tlW`K*G^zPLn+1TCetYYWbGE<~oNJQ!wUj$Ns^ZGe zBY_focmImS`_PdW6cM740!>NV4U1L30a1E=jHcfTD7#j;Q=LB<-bWFynd`)3qu^5 z2@lS*Dxw%zsK52>8g>o7(A?6M`t1j#_$*89`Crhz)JjacT^)0*nL*(r&QvAQ|7#R zyD}eerPA!af4B{t#n=$;%uC>0slGjy?+>?UJzdrA9(SO0dt)TrD8*9a`+v)P@4X-?^)#${{kcyLZ`&fB0Vb z@zk&__WW_gV{fkb>zzq;h-jDgoUh&T%UlnQ)7oBwXBfLxjn+}^uczSd0qc!TG+TSobfLG zJJ#I(sUgS|#bTFC&RIt(d`(wPhLNc(VCfsO8YnuzPPZz_HYx{BhJThb z&r#s+&N;Wi<|=R3j$_2?2tLS7e?6IYVjetw z!+x1M_G0FuoW(JcBUThi>`PJ$K;qvIuliqgVYAh_um_2;NRoqMfk& zVQlK&YN~#64v8@}9Sa0iET3%-4j=rE8I>iwGI>?uMvpmlokA_-xmwTq!$+tpFON%y zgHSh+^1R^i8)%VvbwkXi0!ZGI#+7QuKou+4BAYJ(^b1c9SFFAdOy~V0Vmn2Ey=>Z4 z#kvqUd-OriDjc|?CLNuo$-uofIGfc{23(JFDI?qGz?q(L*kN}9IFhd|Dl8L$)p{h^ z{PK5TZm_kjZ(9d+Y0s50jV&o4xYlVdImSRipISGffXGNGl!S|4&8S0%@~}beW?BWb(OE<}$>QRai*(`_+ORzGVv~idT^{dPKbMc{*}E zGzP}>Ly;TYcDFWAZ0SB01&pR2BF9ai_ea?bvW=r|t_|r&W@&n&%Ii#|lM|jOxiOI% zJ97T$*AGY*JKKL@avocsRgWigFJMDt+`HRdJCUHDBhYil9}BHbc0A@ihH>7%h(V+M zkd&D#mh$K?6t6ClqcJu?jkt7=9mgLUPd4iu%Wa3Y1GF602_qmo)#dW6I}X$@fxmS; zYJsux9i^%NF);h4wq&}i0^8|EpYS*nIJcjt1i91$cjp%QFs2xA@1|zY2q*&g;y=L| z$?d@Duizoy-vsQrsjb)Q?SYkNRUS3M1|}cCo_l#fZ5pJ-kOl61J! z&|?ZThoASai->_b|F6X!6|+zU@*iKAJc2wEZ(@$X5Cm3{&ZIoPi0KNBW)3OkSXSA# zPkEvOYwM;Mk10X;x!?E3_Z3uZPj&NG-?G%7f7C2qT3%numEz?WCdQC)^_J!B2~lKe z6ADz^zaTq)wcLtfE94|wjh_g~My@eoPjrk7a)UHN@~*Bxt}UCQV5fx~V(1-lsd;2~ zc#4jv-#}J?X=V869b~j_2#s8`32C2QbSECPBgHT8b%*>2cGO=8vMu-zo0SbOsIRiZ zI^{w3@*yRxtbCkq((Qz~5zLksvBu~hQLmxvr2*+0iOUBrRYO_AWtp>?EU10s=EmJ% z37_+psanpLLHpUp^G|l91DWLWZ<~uJ&@`oE4%fc}#y%YoD+1YCQh%p z_B;;?gp>Rkw~6q=zUzoUNirrA$9%?A)v<^z9VM8OiG=b#F1d698=A-u-T0cZHSCGx zYsDfYjS)|-jo69QlPo!b58_A<>E1opXo<{IdZLFaYLL}!|0MELHF8!Baz3WtM-H14 z{+r;7+ykClgRki<@iEk0pF4`2f5u-gI*KC4jIo}ZqKItmj8QMCugI(`y|qem4jH_A z1R1TWNS#PF8P^Cva>DV5Iz4r47fM~8nJ9{%ua%UzcJ9a82i?1(Ll>~D>fvGG8XnA8 z|Hxx+!Yo|+5SQlAS`69ho_(!ytDs`X)1ifh4j}F}cw)WlGBk;&W;uifLi>wr!YjR| zflSkg+?kOEv~}bIhOb(Iu~Fr~zM}QOWbQhv!^a0~J*h7ml3$m4WUXtS_Cw%|6n^wh zc??{=GD5=~=VeP}a7tMXJa!f$N*&`f@Q*ER~kjY@Fj)fE=TfO_6V*Ctp)c)-KZ;d;0+E{;+`K6I7 zc}3w<#}cQ-F@BrSy~ue|Z5#aY4zdZ6m&j$mk(Fpx^~fg`nTiuUy2q$UKT&m9>+Nr( zns+Beeu_iV^ut(3i!f}ZhmNx@cwnPra+%PkS*(fC3B7%x0!x*5eVI#a#?);0P{Ug@ z;7_Vf{O;HVIimK10nPJJ0rRCq#Unuc&wPEdCog=iNZ&N^?j5wRo_(L9Zw};;jX!>* z^#b+N9pWQ81L!3QCqLS*2Bu4|+;c(*uaSxu=D?!%Lf9dCvZW< zWvPF9=2D&KLVy##s3=ilu(XfAc0G!d16GTq(c+jYFunGh5^g8}owzYF$j=U_9WIsB zV@qBVU+Tp1qCmT?wmRe$Leqb7TC$Q9Ao{sjN6H?C%Dr5P?bR-jcU@h>tkW1G6#u$B zTNZ{XJ_WAJzJ0*rW3JTa`3p#hCRcc8_hEyn`(?*9Kd~h}wZSXekRf~32W9DSqL3a!IC#?RKD8=V5%=aQPqGK zu2B!!*ZDgv1)>cEh+`hMKl z1!#wO8aB?^0%d=`s)+SGkoW}Dt|~5v7TLzi70c;R&we($t-Totw!RiuDypD(XNu1L zJVkiN8{V?+N+RC%*dHI3_Zo9H6n)-?RH`9kvd~ z4)E}MAc-tc{iMGcDbw!J@^0El>nwWNtm2Q1d*9=&S9T$@yLWcNKnGb9UY9BcA0oTp zK#H;Q5+}v2f_!zKkYm^-y2hdpIV-j~>FDSp`_^c_-NI6TCC{4eH@b;Tzb%$k!@kH^ zZZp4S;ug}ZlxYe-JCI_hH@3CG97!8Hi^Yt8VN1~7IP(w}Y;ZCTxL2_q35zQ^x5ZVl zgzQZftT4hfoc?0z`W-Ap)(fr8j)wH$wDw&l%b--*j^>-%0W}-8iXYpo4h`4ae(+0? zpyl4ho&p&=Ajv07KTB!>is=bS`<2~5)7E`j?c)OUZi{DiQYV0E;TCmTV+F9>tY*Y> zvVd(ENs_De05*YGCip52*uOn0uVr}yn<=Vs(RPWmo4R}7>Q}(ZF}zd6mH}o;LA}22 z05A@ZJTsO$474((>HYF?K`uN<=9eoVKzK|%KUooo9X4j_vuwQhd>J!CF! zsmdu6L`J9b`;eb|k?!}#XwAo8NbOkU%|6wKvq8DXhQoZ{9Z$h5L<=%1ZOhK|kNl^4^H)}>u_qo@R_2l+wv?L3l$ zqGX8@f3bbxMvkLH8#bpd+zxWm!v>zbvXh2$SR;RIRz6e#%l`YeS4hSivrSd|4mdu> zi10f+)q^J>NwQP2Kr9yuc-O}NSM32+X2vrz41FNV^40Mz?UY8QNlS#560};cHw>$~ z3nbkWzq5Bg0E)DTaxIS+P>E(HD-u0`zSDTf_AVbVT!$(y@hk$~m6x$%bRcVsiD3mcK!oyh!)cCo@RDq@8*sgM^G5 zAp@IhA0pFKGWwc~Ix^d9r)RyhkR`dn%p>m(vergOWt^TuCRH}RDAN&{2diGzPFo}6 zu7u5AZZ*EMIcRklj!}rUq~q^d}>i_jiiN_;vrcI*uLwreGef9n`OLf9~hQn zeNpLEpKB>tBf&pn60V444-S~uY%j)K8v_NNtY!E-V*Eep8;cNA>|Ofi>rKd`?&)XV zdJE+`*5&K(wnNRSo(*z?Lr_1IEH-Rg3C+3*#2Zuhp?!CY?uWpOOMCHd?-_$mpu|1B zX)MA4nm~}I=|(Z28=b4SQeWyly}_^xdyWF*_cbXeTPiTUC6AtIYXoL`>?Ur?O<=wb zaGXkC@@<Kmd{hEBnTI4?Fv6l;ZNxZ|dU#}f5^weXGR4OUtR}|KV2IVT;K7~z%@5N@R zfNk+FzR>$ekrYENJ^wBWDOy4{#o|>+jguDjJhpUajk{X1PK_e{(=H$3h0rC=PY&&2 zZ$rk!>8B1W`jENx+Mx0?5oD^^9zQ#}1sT0t2G6ONA>(xCd&mz%dg5a6ty)#2B{kkj zTJjvK+nRq*t*;_^!NG(z*MKDF*M3%6HrTe4voVS%8k>$qHB?WY#CmOA&Z21=5*WvK z%BqK9*((Y2gcq8a7x%CzZ$uX3j*Yh5YGT6^m)d3Zb>|_=*iESSD zi2o_$IUly<9Wjn)-kt*51LFf-v=X3thiP)W(}1EF^0>!x5J)Ls(pPK>hqfP~r>FVU zq1hspZ_&&W8qRF{|_IG!$-H z&bZ@Szk&cs`EtysC0};qy@M6yvaVYS$FU}(DEVZ1A=VR3X&cLCu<5O3mfZ7VY|{%8 z5IkRtB*+VK>*PmrNs5=~$kHDDXS%0$^;)EfnJCoxkU`=w1Z8<`U^<6VX1}`5|I}BIK)ZH5vlKkcc1WVLQ2pn zf|Zdil2wk(KCm0b4ztbf@82`AW#k#x#zqf6o3C`Ir3PS~%Z>9%du5Su$bN(L`X^W> zcj+(PZ42gAPR=Vi+`{-Dx(S6>Kf}F*9~)oPtcA1>*Kg~|$U~7#hGyyRT&Q~cD|v=j z8)`iTk8@vKhlb;tdk2i(Kr^rUzBcO~XuEj+R?I35AQ=UJlbo6X^6OB}F^MjqwCS7* zmHiCV=BJ9Bi)(-uE$mxVRI}vwc<5foUdl<&ir zWmM#WmfdhI``Binj$UwGd!QC5vz_O^1qA__%D81AdkaXx-n&xB>!5x4{hsKH2cWs4 zu=_@eF*I&9YPq<6$zz*znq2%d`EWLVF$Wi;$f4OlL#EfeGU47LN zAD9IjT_9is8(8fHAvQQ_~)fOf|R3;chx42Bh`#4{rY+r(gf8O*n~i&y%>ye z5PE>Lk@_3DSzM$G^YmJHiz98ytz=-yXK5Ly^X;}3AWf<9r&sekqGbn*Br3k2GYYjEGQ3 zMrDtPvI)uFJ9~fZ{n#ISR#wPJLb3~upWk2ioO{o`=bm$)`+8n)Xqt}nJlGfq^)iIZ zvD zTcX7f>rOjds&~JJjd}Sa7yIsED-+*hOM)o2-%Qok-J-=Vao#58{%Gv^V|#M z2g)~3TVQ`Qy>*(I91c9)$8#u(0S74ubzf9^;h@J+*X+hI9BfXLFfV(CgYVhAQ%)D* zAi*~I>r-DG)Mb5>o34NZ!*o{DJr{A{G_itAtpNLF*|yF$^kAQ;U2*Lk5B88U@qbMj z$Ie@{)Mo2MY`Z%#s>~FJEvMNR>WmU;I(yr4|9fz?-Z!(zJp%7sgMJ!tTmiyejfjV=0Z>upq$xi%1vsv-yK~SMnlz5O z3lSQj)qmfXBvBaJy|Nnxqo|-uy6lRSfhzPAc>GHKdj$GS8RUh(#6ka^Hm5wbFEH?5 zG5-jW1qNbIv5_Gu4D58#Ui;SzgM8ooLS1TL@GQqY&a-D=U^nW>sqi@%h?`-*X4wq` zRMdij&;LQcMsfqU&MoM(cE6}EM-4q))OY?p?t?Dlv7-sSPoTZ-wM+nS2DE-$kn9}N zgr*Aphe5k0P;d7BKFL1|sQi9z-b!l-irR9iDnV~I8KWFT$hSkx*D<`&&v+i246zYuOB2Y#~7iz z&8Ik!@(y&VHrtmuUxAKTRSH|#bZASrB^FcbL+kTDtxbv<(98t%e|j09;q~9(VW9-5 z&FoDxjQIlPyF1Sa`qof%g33TSITA9@a2}43rG&^2LJYj&qbP5rsV6gW1fw;&5?NAA zF|&jElk<4;t*a#V@+PtK z@2&Uhm4`f}F~D90t9}AEJ@$MD#zUF^u;-?v?c67C?AB!uEOBbVE&;9X{DEQYsQb*G z7jYfiX>RD9WM@Spf7XqzT}5o6NjE&TbPF5X?-Z_j6R}={Q}yc`6|8nyD=eV##WLDO z7amp*EOh!46ZM%N(_Ax}DzvgNw8gZXax@8^2Ao(LeqRkS-Qs`!URprr*hUn}WkS&* z!N?tB5h%B&2`4gtgPIf>g@r;VsBhWiumA&SqW+aVoY)O5g8!6$ykG(1iCc1OW4X}Q zn|w&NEUbR5r0LoFw*EyWqvG{R>~IB zO^skx>TVZ*A|l>)`{cMKfDJ<;**2!O*fh3#f3`CWTL`HnS4aJksLn@Do%9Ub>i3`2 zNb1G*HLh2xpJ=dSo+3o^{(kICB!2BsyoFtiizlTsEwJl$s)+}^8+P3&?hhf0$Id^` znD50FW2bG|ZPn-^?8rZOe0yRH+jF$*e+@ z+^0!Oj^4ork0BkyG*7Ints1y*b_A==uf*>h(!^5p8R}`N4lH~X$rks#8`CG=%U4A$ zVl>Z0FQw)NS`{q+uz#WqK{uv2=LC%*<>89>VeUN0ePXUhkP?Gp2I0i-j-60WJS1TH zr4(u|x4$?NQ494F%08Va4~=KJ4&3sWfTr~`5&z_Spe5iH&va2Cw651Y=-M|9ZCvxy zq5@~3{gkgA*FF+xpGrJh%ufRy#w96AtuD|(7~1hWCJP;yM9KOy06K#C^#uuD(80rb zjOxNBw7VC-6Zj$oZE3GJ!l@ntF?cY7RQxlvDu_N|yWI)R{jDckQr<%oKUt#AqfThh z8EMWlv4Oh2ty8`Od-ah1&E2bv56Z6dIkPJx5K4((uWkQ;Y%H9IMoE<}wtZYW_dTQy+jO+- ztfJMCn9D9o?0A5!ZDcix_N&-ZBwbEkrGm}ROv|}X9>T`oZ~FXHrLe(}^1iFz5~94y zO37K2V@ z($wGFK7;o#*G+A!ix97+FFN$l7cv~J97I&jq40qF@jIXLpoH@wvzPfrsGv0vlXz(Y z)$NoAX)Uz@FWYOg6Zb>Ig=E?Q6+>uDnch(2aH-vmghn(9AEQvqSN^wUoS1?AZLWd=brK%xO)=Ix?KLWQ}|+) zXv)$(qeiUN&(h{2Bw#(~&&RAoEZATx_Wm%*!(1hgi(4M zTd0^kgfIhJympeW53gfOmt*x(4Jo$Fh`*z^0X~UA#8Cctq>;e!4RL+QH)p>*HAlb zxrF69>Ftvm@>u-+;~BluPgtn=Ps(6k7qf1N-%@p(!Q}jEzG80%4BfC7SUM4nR$Xo+ z_q=Gp`$#&?6Ut_YQCSxKm8t=$S?_#l)gmBg!yv;wSr-V-BTbnrU!df}!=%f_RZ#xB zf%dhp2vjYZ`I=9@gxUmUsac~*s3)`QBCwi519M)1>@f*wB+E^I;v5H!o#~g>hps}C zG0%Ut58I$=m{CVH<|QqXc`kmq`>fXdPeoenk%Tch~reGo7H$fSf&@UlFQDwj~~D*g_?<#fXzk z2b6JV=?ig=Lh<1%=l{Oeh62A^bqfYzklB9HURNa-lE<35YSdXEJf(u4@UISB+Lf6X z3ntKM>3V%7ry7P4>C@|M)jIFF&YVM+;{g%#%)7v z@S~jGD)hnn?_5Wz+B~uT9CIY`pcK|c+EaFje88FrF&QD_eOPs$foFP06w4R+RXZe~ zVyWWK_i~MHSmdEL!LrB20)Y>=$^Fh_*2&u*g-YI-GO4y&%dd~o2L_+JWv-&H3f20b z{jWhzBjL~aB5Uxc`K{(AaSdY5G#~!fD-ZABz=^DjjF2VXaaE13AM)4kiKH`@LD6~J zpJ)63LJ5k_#Fmml`N^9`vaYmHd1F1Brpyd!&el&1BM3@=F43}m^MX$A3`-|<84O9=j8H8Jdc z4;)Dn1>%$3(eCm9Sid@gK@F@*p(l1R_Vw zSVO|qn82#IO)Pe9ep%sr1501q&}@>kV7XCxfy0YFtR(N6_U|pjs+Yu5v+4s_UAppW z`Zg!l5I78{$6B%0yyAG(3v;af9;`Dxs*H8#Xp5xfPwtI;m8IYJ=9lH}-tEiAS}WbU z$+TsxDWCSIclm+UO|7XS^J`cYX?;UD%K|G!@rZF-6_zKj9;NUy#?r}xOIyZSSiH8o z|KfupBz)$fx_^)i3p8WRJq-mgyY!6-d4nmY%}P>#ptZ!L<^9KgoX^6@Y8oXOi#O=E zC6F4&y@950Ozvmzxv#*H;~22gD4r)AR|0;QCP|08dXg)*nlkAwNbpuE)SN`!MO zRMceZ1hyMNWnkX1758PR;=8o@daVko0$qo$N_#+6HG@VbT|873QjR3h--W7Y>t-dX zx=^`Uk@q~m9x89PeB(K20~IDq=eLA^L-{>}s%>3LC}VEWxdnDmQm~^vD7VKARy9{) z0Wu(%=!J6XGeE)VY4_kKi;yEN$*fCIg^V+DNoHQwkg_m0PBN1V@vJ)k9?u&>*rg_A zCp9|o_IcV@Z6*K)g2`5cD=X-f5xkH{GK_(18=87@o*2b25h<}KjY$$(_B~zdn0k>* zzm#JiW*(c1esh@#bKdd(c6Ok|{G9{bY9mjOaFFtjT+b91J)W8{drE`Fi5u=L3U9F_ zpM}ookt>$I^%rGWF~l<24??99-B{MTLO-xHgyknhe_EySVmTPyuki`Qa*?EAA%(kG z_UqaBZb=801r}9PyFb9vpT!>!bnn%rC>8&`7*i~{SH z1`Cs?rA5EjV*Z^;vClY*Io$p8AIe2Bqbo7)YMThA%EvcOds<^s+9Of*jcttXbxh3t zE##dp$8X-yrWI5x!VRDKu~*G@g%=H!Ip z@(M=b;$bL$9jLD$x980l&WS&;Q-h+4TqbE|BPe2e_B++M69{)tW-SysL7`=qqq?jW zss(9J}xiLP=zQKWz&7C=a=pQL$cv{QMts6jUWlNpbgB(ciBDP8sk3hW7yW!C@ zhagg+!@T)94+O19*z^jDf!9%6=ecSK(v?V&FZ$}w@HtcQB?Go}QdR+c=_h^ZUx!Z$_?FoX9;$uM0KX7T1e zK5v?j*(-sbGe1=yMl#um6nVFXR%Ox z{)^J*6IdwuBcQR+9}7csU=qO{|7sEKne^kjII~c~b8^kDGaIZM?|6Nr zGXsy?L8*?FmJqO>@H%c)5<*Yvy$mDZoV}0aw3ha=vtWw88+6|fUYRw8R7a)sC z^353;S;*3R@BBr(6tb)g3a=_LL)M*u@x0uxkom_@XH#PiG99%a9I5eyjMnQ9Q!T_G zeNJUoMvdkTp22`(_ercHmJymBNug zT~wEsyD5CB7HxSabk)oy(an_JUF@Y8`Z`2g+K$%aTM_xMSE5c~2=PZR$NPsE-f$#% zRqPN(y&4u7zL$V8{|5VZ$2&3pGI`zjM-oiDASO{btdB`nca#}5IxzY4Y39&1B}be<$JiWjxotc#8e^i=?q3I!p^r(3(?=q z|ANon|B2?XZ$=e^6J(?o+@QI1(M8!H3oL#eK1<>n4vvwEg2z6XfSYc(LDljYc;yuA zTl;VjUgt-7x!pepZyt07n3``wkj?;?++98h9xKR{pQD3NzOdi}CDIUflS1yxi6#ga z;dt6kbr-@Hm6dnz+d+h-m#W1&IYcxGD3k^aL&PlG$NR%Q5b-{iSf0HD5fSoP>u1kE z#91L5krrkM4==D+rm2FkVf&1~TvQOc^-}4}{UQii`^%k5Ckny+kHlri*dQoeQMl?ZnL!c{@yDD^=3@-Y1mP{QnM5XEKI$c{e)W7LKm-}fI&2rW@ z&B({lDl7KU@7FYF7iD5IFx85VEXxK$Huun3S#&?TGWPc8Cb~QNMuf?Zp*!Jw@ZHD|bT88zwGZEWuh$9c0C2M8hlPcx+XEQ z5A6!61wLIgL>qbL1%vuPw4B~l&hHMuXB2v;*bdX8iOb-zai%}`h|AmlkJCeZNbmgo z@=q?jSCMAQ=aq-56av{~bSik$Gn9X*XBjUi(f@kMdja`vi42DWWbrW11>5`~5};(8 zmYn}C1k3|U<7~OBKtrs#r|ckGw=pw{XP3m0yYn-@@C_l9e4swn&B}_`ovOt~M$7Q_ zg8x-&wbOX_>(eI#OC+fCJX;Bq&!K)x$npPLpQ6z#wGgWL(`b6nOLyTDA3g)6uRC9| z&@w3TA2-Vtw6^PM{9T-fw%3~)`1kzJ?kDR)MT|5$xaJ1hN*%@LBkn#F3|Z*7%`&P^ z6^c$nj?Te^27K{Mc&RgjfG>)p_2I`ZzDVtmUMvm57Z+P%hJ!ZI$=1y`@%#mJRNVR7 zUd@LN_1D+}wM@~j?`>7;C@0#uNY0efkfJ5A`_R)06KdFvyt{wyk2tEfo@cTsJ+Bn_-J|!P7F-zYEPuY!vr3(?@>R+nh zu{{Hhd{=*nU9<+v&b4*1qY?0s;q9d3OacnMxPIqBJuN;euhCn&xr;WFjG2G-QKQSt zC$p!2*`Y`1ardhQCFrZq!Nb=gfN$8y=tGMFFlb8n$9eL33_WE&?{GWcL%f(I}zQjo)6w+7??&78B|ZpK7WO>-HVT})zL{hRh` z&pVw@VVs&dCSltj&Hl5PG*en<0L zlVRf3Rh<-GdW`?MY1wrp9OFz!K3~U8+PTCk?lI4E9wGX}TIBu%$^x>;dnXydT*U&ol#@*($E>wGeazW?o4(M-R znRA^81qU{<-B+`}z&)qrgtopJylzf1(ofxmpvO${`F1xTbac;)Lq0*IIL+PO?DG&~ zPi01Hbsge^7ztDz1CRv5LZKu?NRAgz@{mPHnfUYF$T1O8Nkcit4>m#CK8Xv@CBqWV%8{&4W65f)8b;D9$N_6N(sFKxhYvhyCeeg1os z=d}u0mC}s|mOn!tNn+?LOGmUZkxC3$h(Zr$6S0^{8w_x2jQuv6gCWy9D(eo37-@Sy z&g=M5jGce-=VC|>CY@l^swmFF6h1RN6y1%fC%?&*4j5qCs_hT&w}P0F%>FEoII-uA zm&8^k_Po(sJ)l$E2y;qhH)o_AF}GMqrdMeP^IT$g{w_bjd>VsW!3-LhZ_yyUahneF z!*sTF_kY0rSJw`ijGe}O!PSvWl_AVaS2+*CCC{jO3XprozzyGV} zdR{))^SQsD?~S?N*KyX*{lT1K)601bZ_K{zK6reD7c(>6c=u3G;JfZVn?;}9nAYQ` zdTe6~rsgr$cZhal60uU;Y4bshZ8joxbE{)iqGY#YogIcaXAp+?rtqaHS6S)#LVUc= z^H}LHKN#t#X`h#N19wvq(I$a82>2kz{vUfNM9Tj5nmm>QZ+^><$#4rp(#s!trGEX8 zI>)A&x26TsBkx=ZS_*+o-htw=rW=rb@5$nXv?%08Tq(Qan+^G4U3wFzw4uo|N_-t90LAvwYmyXSKv9RZz_0KrDB=`&_{y;W3RF1f zU5zs#?_$TCmi!*bVXMs!{@wtY0U?X&%x#c9@Swlj4&W{4uM?_+Zy-r%cIl}K6=FK+ zL6TooAzatbWPoi1d{jxi;mQaPljl``@DAer^ym+Pe=X3PcMJCD>0sE5h5Nn4YZ&uB zK_s89gh?^+CmoI+#kVmPb@W|r_^$a_swQ75W_2&loG_Ha+`8=|)3UeYT*f;y_!&z-R^3ns11t?}7^E*B!P0Hp!mMxJL!#pu34c~O zmK1IJH|E`lg!*jKth)~u69Tx@BFeDH{WhP#0Z}Z_QJ-v6J%_p0a^Tw3hgsL`l5Q(H zVEVMh_J<{@m});veeq)+<6mDtLV3fEQR^%UPjQ5ypNj$e7H(s-Q(Q1RH5&yF;t#o7 zdUwJr_r-RhL}7@e?hPt7v4{9l-3z(@1|XFb)hXHY5Z(oiA9(0%0okWrx7DT`fV`T6 zB2;e~DB2Y9UlreXD1PH?`fz<0lyK(XnwI(uL?iVh@8TArG$3d6j&~Q7Md~$^1e>A! z>AtQ1DU3tK;X^6%?@3TmM(Y#K%z?^n)#se0grV~CqU@g21gN|=_~zB@CaBykqITuX zcBrV&eE#vH98{d`-$y#?0Oj5`-_{TKLs_bUzSB1cD2-Ui6^w`h;w`pRm7nK;uyAj> zZ-);QJK7xz{v8X2iB^_I);y5M%VTBvDFm{V|A~D3pbY6(8NwXrS&$+cE9qVL5@Ir) z(kJ0G1ZP&*7GFLBPB#^bEiYH0^~T0N^Tc-aBQNq^eU*mMF8as%kIG|`%a$!k^UpCY zlgMA9%!8TJBXbGUo|w01(_g{1S}fv;QH-!7Vey1<@i7M{EGa+fKiejQrMEKf3$~?T zS)ZGo1pOdZoUBSDe6+zzvz!=jH4UsX|4%eyYXVlEQkdgCZGhF?|4!Hle88H^smro= z#Ife3Nb7Zu)q7w;N4WDttTFxfHA#UDYu2pG=WF_a)wV|tM*UU6s&{htwc|vvGVe;A zG+#efc=ZdXFA%X@lGS!*=pdG67zJ}_nqbM?+8=8!79&9{dDF}00W6ZZ!R*n#y!wv) z+b#2tVkUvDd+Ym)n8wd@!TQ%4Oo*D8{I};gMvxOCM1th-#j|I21u<_x@0$6T1t|<( z?VqCR7y3YSRiE6xv`|QHd9x`nz82EEb;|5JLm)e=hv>g96AG>y6G99_+^D#@1O=Tb#b;UCa#-th*?Dg)oK zcRdDTZGUrL;#VNVez#mV`VES-4OBNoeuG?w;gV5pCuC3+iyH5(h17tnLW{v#@J8ES z>VZWM1Z35S-*PX;+$<2`;TnNTw-Koewx0UeSzUX?J@e<5= ze(_U^j0_g$rwQE5az?_9K&tWIVI-DGSlu*Jz_O`Rq7085tmLxShq3JV*<=NU%#V_5l)O_klD(?v-OzP@Re>{XmCb?EU zP6shpXR1TU#S-5YujlLV-Ga%K(X0{m^%&WIXsL1d5qb#qGQ+j6f*tWhMbBqN2zxhc z_mZCm3GH?KQsg8^zn|~FlJpaDR2LreI-5b!I;F2cyY~R0ab&%UfiRTXFstNxgP{Dk z@R!=!I;gt5J&}Bc8)}~16{IY@hPnq|lUMBT07=-QM%1kkNCTf7=k6x}IgoDe+-c|y|YpYDd)9XNKyZ=P_cs)?2FMd}wdgd)pHapx1$kn?_{P6y8;NKfl(KF3FggpjAk z3KPE}RN^zY^w3MV6E5!gxPBIWyjO-g7L+k&!uZ7PM;!R}h57uaE6$iT9?jtGCSsvn zy6Nbs3KBB6QoUEbR~osZtoq+ItS~+ozSh+StClh{bLml7`}i(diu@EC9QBBXmj$rlnh*Dh8Go#wyY|yW&;;vW3e*|V43P38ntX8a0aB!E{wW-& zSsmL7igB(blJqD0)R<4O&h5Z)6(T>@Y#vh3805vuN0*!~%KyN!q-IKNZa9{tsrcP> z%EqD>vzm@OR_Dj_mCN4ceVEqNC=jGHjIp#S@u>^1@KwyNPFAlPm>2w3yfQigVV-Ad zk4}q2Qry+Ud`+Q{amlLEu!kG+MIP7;-uMQ^U&q^5HUg9i_w@yaOG3pl@nQYoy->YN zYDDYL>OX!;_&dX%4kQ_Zhur7&KsL3ER5M!vitUB`7t2dffAi`ozwHO1LAl>>FSk<+by8L0Exnk9KZfI9ePf#|{lYNnGMweA5> zmCYjG1zAEv_0h65S}bVbCWPCj@Id|9^?TU7{?FaB6lb^wWT_(Cv_sW^W4|Kvvjm~` z3bE8Yi2_yDp#1gYdMLl;sGhLH6^NqAHUneFp$K&f$^A-@<2pd+5WWj(7f+N24v0Vu z#VzdkPa${_`Dd5(kA3KJcysO!q69{pap$vfX5w4vEh4UeuVZ#(j!D6f^H_90Vr^-t z5SIK_%F#a-g5}z8LRxbJuqxEP%xm)m)~3uh=?}LeN%3ljI(G+>qh82Lg=!;(Moj*} zQ;hZhy_>K3<%A7gnncBF52U6IzqlQG3>(!4aw8l)v5_&gMzWy=n~rS1qWi-gn@mD3 zZLA<;lVv~f(}>t~<^2Yeg&}NQ4sqSU9KpsQn>WfE(vbRBaGs!_kJMvcy;e*6vEk}) z;Ptd}Quaa*t{GioVOb4q2>^hzizhcG3$KO0FbdgBk zl4^UCj>X4RdXErBFy~ui;DVJ3rk$)j9n{*3uS-)FYKW8K|dE>u>hqhDMqAy@TG4(8T%fDVJ|F zG*#4Z$lam_%?j!LwqLTL`HfQR$WKpbZu)A)R1bpYHs0tR9xKqC{?=N`%paPy8_G`! z$U#%*$cTpBT4*}lZX40|9vTfjq6)(0foi7tt8RS-G+gKv;Q759C`(I%m)`#Za?D4S zJ3G$;iLb4O`o0coK7H1$r?Q~ZZ0Et=op+(MOl3g+)5z-lAfMMI8szp$uAA6p4`~&; z9-O?c@cPrmvc3@$aMs%QVB>yW^oceJS+~szC0Mj$hGb6J=w*H^xFcrKd(H?; zWZBPG-6df8&baquolmi<&x~jG{0^*pn71^;9*m^n;Eor}+emq)`Nrs50@jaH*>^|n zK+c1*yMcdrf+a0HtV~sF$qq_7H%}oBr}5y$6joi5~vfs z;)yhIgH)%{D5M=&@X+Scz?Ox++a-Y$*phbOA-&2NTXq>T)HM%av(2S{mqh+zQ^-1p zz_a4m=(`~N_#YXm`k$#;R4;5;n;EckY7{B{5qAxTpCD;m#NoJq3)a~zMS2Y;V-@B4 z<3y=CEF1PH(Q79n;p<+_Mky7{f1)ZCE`XRm?CiCn>mn2R? zi=XrQoFg+pyQ((WenuK-y|i}L@jK9ZzQ?4_^)R&BXT^#&%tNbl<1_EKuc1|gYwq^G z9-vKT-l=`J18CO58n+_kp@nd|<36nin(2oWXc60>sm9oF=qD#MzKEUpEb$7cyGO^R z(^aAVb@H^Egawd)YCBwV$OY0Kmd4S6lTh>U_FD6YmQZ13Fgp+v4n#RS?lUWSP>AJL zDPQLxqibK+zYjkl-f7z&V^ zi(b-kACdS<&nDZr3oBSR^=vCnWEiNJ4`9cY{DY5$&3{PTf)%h@ECwFXR6Y#(G z_&d_J7ZFcyU*&ae&|n-FJ2sK*w~Ts3Vxz9BWkJ$CY#^^|**g6l>o=9sd&3KneAHRp ztve0ttUnKa;eCr$7k-h~*>Yp)=t;JE4h1Z}FZw}Jz5ug>KFb|@h?uhd0M}5SF$QpW z^L?HV0+&4swG&U|AvTKp`P%+9kYTD^d%wyH3Om<6?1+91#DM$ftXoQ2WQXSB4%JHpubV7^3U8+>J z4m72u)XpD21C1OynnI6$LBmyv{HT~=pxoJMJ*pcDB;#97Y-_GV&C|krs>p)!g}ZV) zdM2Sn&q40<32VsT`F8JyaVto>u4z#HR}~^!9@nR*-ooo&4JB_X8)CG2?&AC!A52fZ ztmL`f6$_ppoIF-Nf<%EbslQzHSV7Co*c5dEYYonBnY;fNNxh_?KN7J>`Tba^dnW-K z{tNu3aySP_l=1O+kPg zD!8MLs?4cF4a=ZFFLbr96Riy&?NA2FHxBRh|Jgvplmh3PAAg{6z&3<+fC$Z5XU%)Y zxPW%a|IT$10b0wvY@g?mp=~bq##t=^Xy*vGsp9j2_Td*cdqw_1M_Biuf<-Ja)*kT{ zo!bcv(P+=w=q5Y#Ho+b;B`K!tV7B`sncl-w(A?5(wjJlDX?_m}@d>XfIB+A7DvM+P;nD1OIh z&Xf*~u1QSLIwRj8)Qeek=d|pYW-QKd7}Raj!7`d0q3L=IR<}t0a8lcbBz42%1sjEs z5`UpOTPYA5Xj(_EX=q?$cg>H^5F>1^nLo4Dst9Q=WhS-b4%o)=)9RwC7t*bJ9e#+p zV|(1T=Vxj;up`At7W$iU%2QZx|h! zWJiXxf8ieGJY<{*{71h%fE}sfQ~ZBqu|2bjt5q)r=`IIkmc4Fbn^2RG=P(6nKHom5 z+puAC<4!GCzdhL4ccbL<^mc4$ZYju@(?v@7-?e8rjgfTLFMDqDX{-)r+poYbgk|;P9lsK1{iUB3y$75=gco*Af;Gv%7}y9s!Sjii352Pm5}#b-9`fCiK4-p%F+jX`#c zuRH6YIm)1~l@$Oq`vcLD#=6k9KS6?|mI?GM>W;(|VQ8OU3}Ext1O}J$_zSuTFx(TAj6YCtZXonr_&G=u z_#Vgo)D%MZHkH@)I`V{&x?HYu_)9r9OA3PSQAean9ktN!6~?ypulA9? zS0X)cLQLMR1UvQxvJ`)*uW~YUBEEhdGAe3zHGQo|rkIH-d)ZZFKH99_b14#;NlGUr zi4npFlROG*TrErmWR@d(`8fOaJghLywRhj+gM<&RS4QHUFvnzN@w#vjCRQGP-|TLRE~EMewCoQM)^m8r z;%FYEbNsLqwY7u7fZYkFvQI*(?G4eTSUaeikmTK#>Nt)?Zxf2~FguWMnG1{$ z;$CU3!oa+-{73qgIxx$!{kDi+2j;v}@0q*Hz}hwb@ek<+u=dd^=|QQ$;+(b<(7p!D z&ahD@`yOCEpXmCeAOcLzl*0y63BYjG(~))&fsXim23g{!l#IIw{`+&A;B4mNsi&U`Lvip?zLuA)i{q|Kif zTfFoE+a}dDTAYWly>|14*0g+NNL1W>w}A~AAA7&X9gSummS!2ljb{i*(*pVgw zS5`xOH?kbN=x2>gkrkd~Pm>TMHkx%(^4B zh;OV%r3mW}$yVfvWgyAJfN?i@1gq_P#uZp8SXwFhC|LV778V5=8keeKTA3hM4WkG{ zj0~KO^sa%|?GwYFwQfNQr8Qo&8@zzU!dx!bSwM4Yk=<+H%E!N z0wsNCVpR4gpq~Hb@ZV`mXe!H?-<_-rH1-`?4f`vh?TGGqlVX2p7b`Fkr6oegcRJHU z!x9)(-FwobP6E?H<8ZBYFfgYwWtPq!2G-pl$Brk_fmNmxz^>{AtP#!U8ryt;_0MPP z;S2*{{c3A)ceDl;o?=`*7745;8}@}rdID<$ak^Y)3Ye}_8#ZRO0fUwP%=W?>VDR+1 zIc_M2_FKeSzxdT$y)SjJ|F$5|lnuS#**iefWUE9(*91^qZ~D6luD<8f{wArF5+Lmg zVJ2}0LY1$cw4n>x_CK;n&dK1dfvwL zv&V(X`YN&L{E+Y~MSU#0JRI~!+yrYRr>*z!Ng(M@sNz8r0jw|l+{x?dhK(8xUj03* zzHDX;6Acey>kek(tCyijSNLF>JNgAXj$bI@)xuTp8T*gQo>4{eg{%vU?R{aVk(nR5FlLjEj0GJDyV~{0IC6i#>r@@KduynSmhQqfxBdJ6 zywygUQVEAlF+Vna&YUH-ukNE-E0F|#DWoL*^BMNNj2L&c>HLfaR+0p7t&!HilFBE8 zvW3=|D_Z14P&URyd4pHk+j;Qu+J~Kb{P!UGiXYqW?>iy$bm!lP4u_z)>p#Z25^pH~ z!-}~TrwFw}^C!=V)&cqb0mhpRBG3@WZJU2^5tpe@?+V$t`bKvS90>67{bO`S`j zGjZBLm5KL$96SvayTh`k*AY-8xZ%T-7f`v^EpZ}53kVCl{E}0|A=}cr|CGQBh}Gvv zGrA&!GTYkvMRTVycF`pIS&1@cli3~DnaW^^R2K7<+&`?mHC->jw%VJ`xXy02yM~ll zi{S07aird2kFiq zkzqxQd-0_h+xwa32VZrr?y-uM^5-g%W~j#bVasc5>ik&byWEb{{X4hbJIa9+9iM`e zc8*v_j?rH)YJ?TpSzD8{Es$V&_nX$F8D?=l6=)&5sm8|dLTC>v!EI!dcV9m~g7^M=BDt!4+zf=c3kwk%*hP%pluKMkEc z=W;jLWhn*I^Q>rxl0WNLZ*i=LJbr2C@k?S5&)z9hCKrl6 zvS7*c#RSt`k2v?Q?Z;Plb7!`kF~)*CszlC*ol`_BZnP3x>kH6Iuu%*pH=(|HW zwxuW@63}O1r*V1wMY&w0GQ1+bh;?AMyl(51&1YonShjZldL1%1%d1QM@BC!2O;F{^bH?UP9T`S~?IyQskwwCXW*ywy; zQE9pitGA!`7aTXjlFAj7+(%}ZYf|1J^x*-3c|*fSeuUNr&J>cNs5>QrFq-ZEeF?k%w9WX5B6odR~E$+qfe z{XmG#G-+Lb1H?_;WWS1|K)eX$j}}V-qS^VIOG^h3Rc*H|(pW$|$T(JQ&%NJ!C`l@2 z9k3}X5Bxtp1-7<$?4=?LV1-R?6PuL=X8DlL89`fMwCUbBY4i%{cO?9M^JjpjvPn3` zUKS{&$B&tnnnTA5OwV}d4z0R_E}sVvL-WxyWv9mXK%>*rM5kXhP%XMT^KJSpl*Aev zEmM31IU}Mmc|5WZyF@+f`J6O{w4KbN$&fMAO2j`-A_$9K-BVVFVXV9|ns@x-1FY{3 zZJzX^ASv{Yw!ZutB!|9B8`N>Y_RD@Wg#&{~kqWARFmn;R^6k|wHjt3cKYXMrdlDJR z{6>$wuOKrv)y~WMEwWtJop&)_hHRxp%Slr{WK%Xc@(lb$;;8xFocY^GWPVktykdn! zzxIPc4i$;1o@Xf$MM#WhTiQGiM53x7pQV2R35R_LA5b%t_8?IoCht7V@ zO_>mOI($a+wl`$QddR3!qJTHJ9_%8VVsR&?o%7jQ{#sYJClfVAY8esg> zE@p~}0)23q!OOyLK)ZK$Mf#=fyjt6QMNuAR})>;`*|xn@IS z_F<85+bdA5@q&+^T?{43wmNb<6dN(CG zEH-os9x&Cx$_XnY>eyCnaH{tll}bcXzh%hG*>oh2j1LN*IgIUHi#75EOr%6M1ut2? z7HM0a7RdKLM|$Wnlay6VWb}SgTpR1n{eRL@l7j-W%7tVWOs0|TVdZGOTL%eISGoSx zGf2ejQLML;Mq>P<-@D!y$dT=BIlTTTa&&7B-|^gv9F>a??Tbv2_(Qxf$fO|g+(X)= z_%$~V(ZF?OCVM%u;l6c zPZ-*H!70+P0yDoDZZifw?($|xZelAQP`LB_# zPh|+Ue|h-#(R+2I6ze9xX61%kGmmZo!qU`R^OQB1VBkVP}*UJkz#vvLz#BU+Tc7LbdvyI3( z7ba558s&26bXw>uFA_|>5R&LOBrZn0-JZK2+2oad^T8>|UP%^@8s3d8&G(6;)UU|Y z>wI(Fo{9{mwSl+Q!;rQh;<0M77pX40LR6(Yu%oQYr1D!Zwlb`;ifjw9xue2Kr=B12 z(5tA#M-Q=@H1C;j&x57n8-AFF6=H7c?v9EZ1jcsqTDiYH3L*DO+70}2Av68g9h%%d zDBf~EIOtdvRC1=2>y2EY!9L;o`fPO|eK2TzGUx^5neC}R%&U8t^HR7#_qt6M=Yjr!N@4yU*Un zO$hGh?Ub5%&<`1(j(u2q>jM;pcZhdN*FvQioBi5;1{wqjYX8#(AeA3V^kpy$H}F!etw?b^v22zm`LWpw!G6FI2vmp=-UggQ_ZaS$4}oKOT!5!~A8<~m zcZBS`44iFG23;xRK(InFN8tkyR-e}#_{HU|Got)sG68Hc^X#{Ddtm83+H-a}2bf0p zcd7V~0z>;<&?nhZ=$0&7`skD=P-D9e{8yd?9d8fG-#sS|tqV`u?)-Cx=3j{iR08e- z=HH?ls!c%ju4R&vuDzw9TR&?3PfmKLKx*B?|`Z|*HHDf4`*J68O;)kye&yjMeqBv8@ z3cKch#suuCMEVteX^B=3WYF9qFXya8X4h1d+o#{iDje*xY6E1uHI)QPl95<@eqRfv z7>UR6k~SVmNX%qfX*>Nyj@qY>yDVOEbB_1;-j9Eg18q4Bw=~qxiHow+!O-DeMntT6t)qmW4iwuw!Y(R#p_{`T*26hXSmSTGj zQiFoe99Q0h9W>Sk|MkzYb#hC=#*rdy{-G8lTl)ktoyW~!;1|{?g?P<;F~-uU?8|!d zH!&}>W%=wm9bPhm12>zXmvVP}onKj@6<KKCK-Xy!Pt$n@jH*59 z^r}!`R@Bp{-~Qt6H%de8%Q#@0eNBGjp#bdPBfRjY6bRp3iByL^Ao?yr(T}UZS?}sN zP}c~YoxWS5W8{Ie-CVAB%X%Q@qzg^UK5_XJ(;gV+`onIr*f~l7urt29-Pk+|tglgu zqxZ*wB|(+8IhF`a`IV|(Mz4V(@qStGi4#Eku&L92HVLTKD;y0p^`WD%JZtOMaA@Tu zONVnVL35A$=jXz6fL{J)<-7TyW|c`oSA!;$-dU6Gd8!cdBF^pdDOH2`pHht<$D+`G zb#Uh6Xba5H>Uf`A6ODz1N=<*$jj>{`VWx(jgY~y8_Ho3^kYp=%R_+iVlASITiBkiy z{j}S9-nM5*5s6O7klT!1xw4i$X(LEq@!6C=ssI^JXV%Y^aFF?5lXrLXH)Q!}3-DEJ zLbmQ__GB`bkGIJ>`cx5aFX|52jR+u7!{dHn8`l?RPR*MR6UbTB$(%l0j2u2gBQugEZX@X?ZM3Pl_y3<;8~FQiZX@*FE2-(G**AuarJg62#_LS)xw&WDu1PlwbYYepg9+I9U|3P6Uj$-m1jGf?>aoQ3v7 zQ>gg-&ve3=7wRpvSCtKX0Md!mQF9Lyfo$SBk|bgX?do?P*;7_P=Xj>($c69F<>T~( zNBlB$_ab%{3fL-}BV(hIa5W8w( z1s^^HBIdP#d5|vLZs~}1JHa!RfBTr7c^EZYQ6h%8>+1j$J8x#hLU$AMt+eX z9Xan@eS$LGrM?#JcQYF6hlBl+%$Sf_k!}j&phdcPvu(N|%erwq{cAc83Qy1NY-FZ2$3LJ8f;lMk1 zzgP#Emd$)OpBExa%eUM!^#`&h+b1SG^^hIq?%OEE?Nvd)r4O7|B4H<$nUZgS#FHlV z4_@O)6p82#zxski#`n7$mva5o{g%?$y=Ek~{Cw7s^9tFo{tOC679m^mWOiO=IkFr^ z)~C&=Av58-g*Qli+p zC4Do$Bn1Ge>zeNR4}0QT#)hJ1%|Ae0xFRd(BfunqF;?(6`X_7Ii?(_s0w%zjr z)=AJ^l+O3>&SwqMF6w6+rLOc1DzwUxv! z{w9*MuK;!%8ckVUkLB+4DL3YbJl7Kw?B}~GkvSH+*4l*pq9N){tY^xwU73o6#{$Zjn=c@!%aF6zytUBIIAzmg2^ zdtzporrcW2OANml5dS6RGDLabtu8ZL1KEe)M{cdvf#Q${Q`+|)KxO+I&zxg7p?>)N zI(zaYkR12&hEOAce8AHA#@91VF^^fL1-#oSU0ZTDpB6zP3 zFg@zbyX$@fBkeQiL`V|QZH9Yx>a_yx#Ov#AaY{g4p>*o%90NL@RH>wz+=VutwcfyFEy@ z2-#EdUL4zbL>SHk!q^#bKQu1kHBy;mpKI?$koI#_!Y8#D>7Q)xoIfdy3})an)`K); z#!UwHY_s6zT>HY2MQLQ!%|7Bg%8P87?32wW4IrVAj@XAP3*dOex~#!#YpC`oYSbllf z(4YmZzNKP15j%k`o~eG*;v}$l%Y0g1b_duR=0XRAJb^8AmOivQ2v}X`yvN?H2i7&V zkgV(xV2=6SxTRId^#XMn_xF;(h+6XDuv`<+om}0?9@9Vz_bp{?R{^SL7$!{ierQ&L6FdvM*eMSbV?tkaKZJP-t@e@LOm&ifh z5{h7|%sF`MWwu%3x)ff^k?r}Y%#SIYzFXyyWB6jr_lTf2J1i6X(l~AN7^{C)6%(PV z*jT_@Q0p>-&FfP#hrbjdxmx6eLvJ^>@BU+VK6(y2BX=3lh7^!mNhqrrKSo-qe#{mI z*Bg8__A5#&AtS z`C&g~ED?HGCpL`TCIhlOv`5%=ZCUq0A`dC2hg768PGZNJx#O;vWU)0{WnJI!0c=_K zAGXzJV$;z1zFSP^(m_++sr7U>-<9@8|&EaRv&-w^GAwlOGwA7pPb? zQJZi?>l9Yx-6AxO$YPy_;u}5FR%|jza9*!{1)JYgu_%r4*lMWO(LXte?eSw@g-wI7 zvugS7-P>G|TF7IW6Zi~ix9;@|SV?oeq0stt-T`FnzGmk2XfHB4dj-d@1R+zu%=bU1 zNo1yK#rM5+LuL<4A}sPKGJnaZjr?rkp2F)bo48)v6UR$<3nMdS+^SBR+spcqO6_5S z$e^r$X5YLO8Cq6+d%{bRzJ~JfnEz{}`PE*RkU53an!^LzKj>p;`>o$0!n?5jMP4X# zRu@|xd^gq}PQ>O#V&#vR9&Eb9i1qi$!n&7XcyU%0D|OFa^Qe1-#W|;~ef(LNGr^ng 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

IvXW@R(T2Yx6R#|RQs^}bfv&&8Dp$2 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%0DTd^n2TjW=TkJZz4&}P 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

_lYUm9z{}HZ*Nx98@Y{60)F&DR`vRg94K|=4 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 -Hr9Cb%5^U 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

wGCIVH&1C}b_!#?@)= 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%0AEb7eG&HhN5UW=&r8t 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 LO*kPl-P|r90 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Μe7%S-uXVvT0PgswCcp1+mk_@ zo(C}J+~7X1YcDYigJl~oEModQhlkp2bWHB+NQeyljM1kziHt}4q2Kl3?F3^M=;@E@ z^}IX?LH5RBe@@9k%#jbY18%L5EYxk8=FJXiZUolfDQ?J6d2y7dmVsS0Q~x zP(r3f9MZOS$;3~kLz0PqXv9w$i2h}8D=Nzff;WmM^=*C$wlCK^g!7rB^S%)IgD-gS z*`^oKUWqyd|yff&jXoahuboN5GlFv zx$hH19ti$enZE=vwfDS3hHW91sNgv({1W066soEk3m{hFa>x1KPawK*t4RxK5F+>v zwp`r38-jPa@CtFB1+N3bg!1yea4YwS^FR+B@6cL0EdSm{PqlY~3f%pss<+SI8l3+Yd^IwP1<%;9!&?s7fUl~3 zy|gaC6HSTZs%u_??~3H*9)Z2!6Erb&`B(>dTv=V$G?ED}S0*aIfBgv$%%?Q_1+w6l z@Vdg!h6%~tGMG{{12@qPhaRAM=7C6F`i}5DY-uipvHZ(8w;SA#0 zjMqLFY%25dz$@+F84ce$5IFTDjkd~wpzPA1(yvVbL&~?PvYnu*zNhHh;xjn4A|x#= zdJ(ods+qx^7U1mDEb!{*70?&F^i08A2d!s#?ZfNG z(fiWvAF+jo`1G!ZtnkVLhHrE?QeAwEQG&#?r#@0KhHq|G;6??;kTa=Yqu4PN#I2@F;w`W<$a|AiP}) zj@v_rs9jxbUqq=8JI4Ovb)GXMYW?TF=X(<*Z(T{6B*sGWj`(&*>$U&t^z^;unGl=S z@zL_?4u~{#P;;+}fuO4{f_>_fV87N}*g(M(?OS`{Q5EKO~$mZ2AYwyedLM0<-1V}PuLZ!Y0IA>@{Ms*ZW09&2l+0nS1bM>00960 z6qjcp6>b~GNkdCgq#_{{iLzC0Go>LkNJd2|nUPfX3T2P%kv+2axDSqVj&&T)LZoQ; zOQl62z1~mHr{}}<+|PAizYDSoi!UdbPeYDv?HS_Mr;z*k+{Fj4Z$h5P*>0t0mXP!H z3Mtv{9c1594^O|^2We-6a@Cv~A(q(wZ{fpQ@bf#sZ)~xIcJ+Vi9e*9ih^-T+7#ngh z`Jz$lW34947S&D5Rs+o2Zs>DbT>%SPj}#GFc(8Ehf%G8(Su6~=W5Ox>7xR5Dao*zF zj4u{++6tC##J;U@vuHl*L1(@5XH*Ci!#^RG% zGlwc%uP_X~QYZ>jT_5Tw0p;tUk0Qzq z6>Q0O=E^xx8F%!fL7gX59&+Q=EH8)h{K%j#QXP~?2GN5~e1hDA!5`#onUEB{%C$OS z6Fj0m>LYL%;S<~@cr!0ds6N`tF}f#P}2~%9dIp8gw@o zXIL0OoUY5g$B(2SM=_mc|MfML%J?*tiIJdEeZ-wx|2J53Vu6??aq7Lh=S>X!b3}mgW&=EZV7xI`=pek1ku$XhK!n*YlauI3=LP6IaQ^0L&I#=Owi^fsGmJz$Ln$hYHunr zKJGjNmG_U*ukH8%Mb(C^5iM&-d*rjsrzH>ezu!%1oJqulg;5D@>n~U!?MR5fFoqTQ zQcWl|32Se}T!qC$*ihrI6}Qe9o4nT-M)s4iDNX%)cAz3QZW^W1n}1;KTfVcCanG<) z-<&KdO2R^J5eH|U0!(a()Gz(w04}G??mRCbLgrz+jr1qVP-<25k*~-Rs$JLFEbe&# z4O}YGkzG8{ymLoNh;0kB_zb3L>h6RVVTY>7uN~0%BPE0@tsLq^CW>|+*aHtqb-37#d`l>D?_ z`n@=|+Twh*Nf@Fj6RvcbCR+t%yIR;Sz z8$$Rnz%pLPx;Ft5woWKG76BAlw|n{jtb}S2ntQLxacFqIU#~W}30n89)7hic2!zwY zUIX9v0wGMaa-R+fF!FuAx2gd&3ty~1bG#X9zZ}}W>jV|b4Ig@L3@U^y1Mi?k(swZ1 zcV9fWG7dBPV)W);>R?&>9xjdOm3N*xLiWibh;!T=E5O0RsM`U4Zsj&uq~o}x z9R3Sy9F?Qe2Sl*h>l3f~D-|Tn#yf56HpKSKW(yx~1?*6`U)3GfgY9V_n`OLgknnL! z@aLusY(BTZ!#`PsHCtY{u0Ff zT$Pt{r5jM|o-SE$7}}L6F*6UQp`)fKQQ24(i0e$-+=Wx1L;R!sJ9mJ#9h)nbthAx& zujpY5&LdF0Rm|z=@hHgc@U-__l>$!Y3SZNb(=mI8L9IrSo^~dJDl&eEmFjh*mOPAynPCZlyjx(3qIHp=kEI4%>~=!?VrrQc)8*ycdq%- zIjo$*GlDtyFk46Bw{N#2xQV>_!hekf`FguN?`29sjn! zEjCg1UK5fM2*u}ljv{HR>0(ZII1*Ky*BHD=$2Rc{8Ci`{3E0IP~auB)ez_e#bZEx=hb2&B@QH(jko?p zFOcmShZ@DV0V(NwG2hGEJ!!%NLjs%jFfc3}sEzGyie zZQOvFQ~S&&el}uNQPR`YE$5!bSqV{LW;cC zc>Z2{B=aWcRpwhG@!8g*Z~g^H=zjU%<7X7C=h|aLnQOtqk9H!xZClZKR=%%!?^ej2 zo|JhTco}N1U5UT6;0^?Blm73fQ$W1N8+u^yE|AaM_m4Az=FP;@nB7^Qk-Ygege!_Z%=6j{X)3bIKKCRFdv|!w3G6~&jfs&>NlAv2;*UVD2DNuMH7YkKP0x{Bj zYs1k~fEkuIqx^ZG`taQfiOP6LUn}7r7b=ShttkcVaT~Dm`L_%C^&{Bo7Q;VHXhh

kCzH<*mL*n7jw5E?9Tl(sM>f6Df%AI%szG?@t&Qfw1g+N zb{hTaqw8X2dvt&GSuadDFU$I%qX`+m1Iap7c2Fb1(|tf=BM`zXv+mw-fX;}@ZR|L4 z=sG*c-*{&y^hA6WsX4b5dSx@p#P*3n&z_;T&HBqgab7m$%jgH+n) zGlB};uw(m`?!wbgV?s7tjW8!&%ynvjiFGBP;~$kKVH>;W?yFsXNa|NtDuQ;+U5J<9Z+&MaAQmB zH@y6+DNzNZk7qkUM(J^4!Bi813hu z9TC6c|A(t`mpAt#p*fMYcZmZ@#Ql;DDJQYVL)Y4p@dl~SY+C+JsbN1$Z^1v}F!moC zxj%Ho5_>6`#_7gONJ%>}WyC#*?Z5Mzs^YI>y`^>Ctj%`JPU+?xom=*d zRP5MT;lpVff?XRfYDL#iVqeUu@!w0LNINw0N*du&qgBP~z`+UA-^BrrJHhobfjNx;wg|*ZsZO94X{_!QP7aF-|UjW0gaSa8w&j`V6>Y~H&Z6ZT^sJCBWVPRsFP zkE{U)VZt2ygZ~{*33S8(E}xcBR~8QF@QgKJjmD9U{#`ex%qlN3=y_zyZ2WGO11>uAYMp@R+;NuBWKD0O1CpE>O_psWz z?!ZW(sb%+ zBjZEkiUWeB53%YJvp?CU5!-%?kvp9uu|Y!3lJgD)2Yg>GMUHdepa<)Q zYIP?Lnyum|D;eQ{M8Lb%?u*zrmgKi|UI)p=sxKWlE0Dme>XbJ;gr$GHQtPtj;7Q82 zqZCK4VlL*a-vS4)eTY zQb65E5R2Qu0J7S@$vb~eA)H9x;e%m);L-y83T$BsgdG*8O zMb|gjTcUqROQQk@_MZ)qpJLbR7qZPH*?t-G1fzad$mfpdJ$6kF^i#s!_tFt=x1S5kZvWF{q@f500FO`B$Si+nZ%(q8S6>t+<_ zb3LFY_4_Og1b2SkW48wA=L&q1iE=>yBs>Ub>PtG}G3Oi$spWi}{jCy)U;h`)fpN!PH9L+}iwoRqz~=M(TOL7?>bcPV(Bs z_Glb<%lnFSw-MVB=HFJ|?;DeXcg-N}X)NtVC!jKR7!(mIvgg8cUD)UIBITT+##SEikB} zWjI-;1N51h$;seVz<3aRR6zX`&<8GtveO zX_t<9AQWROl_)h`YA5r5F9i51Sp?BOujBX=C zdB~(3IgwGzRmnYXiuC25X@#X`IJkSHN)8Sq_5A$ojJGY4vQ%OM%G0q)sWVE*p$^j} zj!CKRbA>{+w3Eqvi9lF)`wG)B2`G%fIRDA7KohL5y|kkj2H6=_ic;%<;dS>3qp%hj zvwv=UPn!mY3}*OZ|ZUQM>tLe3j6*Lllw+>(ShLqFYX5}q< zSiH?%{iD4V5@L2u_KQ|vm%RyBfzC&y+4c>J)(RtC^!pfjnv4uW+lebnVaPn-?<{%K z8yOd$FCINOjDzQ=>lf7~k?Lx{t&qWsqz4s2Zv+ov9g`p zByEPa?fV79vpz!CAEVfPg04V&nV)ixV;|7%JkBqU%L0>Q=AMc1Utn6*cKO7}0>hhr z>(QNrhxliUu z25Q-&&$RGKAYJnE3(7tL4W{?ql9$IJW__7tXLK8ur)#ZoK79<^Z~o#-{w0MyP6m?6 zwsJV&Y%8(FTMQWz!_&rm@yIMw&}aJTBJ-DE(0;+K$oR1#f80+T2kS}$%-pPyN`BwR z;oXNMV>`|rV`s2o=LM5dM=p%g8o#ae{ykJ2TYoWQ_Y|~~x0uRb{||abe)nnWe};jA z|70H@vIT|(wIt$1GB76{vTBVbfhAV5x!$53m^<$IXp_rekoKdcE9@{(--c^1^(zC( z=$Cbbb{5pX8!C)l(fiEGBt&V!4=cLer1du!V8@>CIMgNfs75$AEf877a|@|UliK|LtB`bY+n+2M z8LV%lNe4fc#ju>+TGCA_Pa=x`)nFAr3J-lSq&yAffK=Qz1A&=?pUCb_QW z#=z3C{i&AY4=j%+E8oo#92(P6@Ei%4w9^=>?g)Ar4 zZ&3-w$jZ<*JoPpWnO=X+__n`5`tCP3OhU`CU)A!IM6m*rY-866OR}&&aGt0|Cu6YX z*xt=~DNrSpHqc$T2|DJcemDs$L!WA>@R1ix7_@PAmg`vy%-xpv>Fy1{dTtbZ_N5oF zh`oLb2QC3K?Y&L;mI$CLx}#Zg7xbIzCw|{G4^y`}t1X6>0$>j@J z<^0KzG0cxdxlFsEm{%(t_TZ2m%@7B}HffkD-9VsW4v zu>beyMi04b&{x0QkS5mzgC#p3T}Vj+=1t4lo>x}Dns8Q9YGMO>{q&^=CA`2KQ9Vtv z;s&}+ixaQfYUocXVXObW0i<~Epe@4Uwmm6*#|spxalFtoC_qNt=)bk8=85PGRA2UZKKCpRh?83b7t2?2-qwUebCn*@`EHi=s`vtv zHRm(W^B&ljmfAY@%>nz-&k0@iniW3nj5w&2vTzt*d}~ z_J{R3<^tetCGq^#$71b=eVN+kxy5dr;*-AT)$eow}j*7J}wGU9TAVVYMn%W|uJ? zJ6A1T@CzMAYNgbTV$$mspHD~ite-)an5;+p0uQoZ=8OAiNh14|ib9ls9kOy|+~kWy zkg@0XgSy+=NV|J;?GV2OlEZ(f^nb0#1_I@qyqXh+7^wFBy{ZD$yAO4?I7$O?Q62JF zE4f%fIez{$8|de4H}5-E1*`)*1ETl*0d{?QvCMQ6us@dEsbe1jR+V#kiM$;!WE<1} zRPF-WqaSOIEWx4_Ya*WIfaUzbPP_Ak^0+p^EHpW2qbLD9A!G$7x-2WE_3Uiu@gmw6LHu zuT(%XnbSITVg?%zS;qF40EX#BR{zshf+{Ly;FU-W5Z|~aoQ-({)ED*lea4Ti=vi-} zuwEEga@HTj<#qwPQ|kTI;v2yJ)A8pz^#icFcXbcfD1GL1S?9?(_AWwV_ z;xG6Hjkb5}L!$|`<%a^V^hsd5|?$wH(i6whm1)m)j6%hT&4RmeIt zsqwtv2eQeeA4eT;BKx12qExjYvIb2lj};4$VXX34yRiysIXg5nx}A{xSMQwQesgS0 z@t@ec;{-knz8yC;dLF7=_%0q7JPgDJxs26s9Do|UDaB7xb>+XcuH|r-0@gwPGmC!= zflcAe6MfzUL#q-aSu+N}8gkrc{Y@GeR|Y;tZJS@=y^db3<~X46=helThC*Y1f6*u1 z-w-M1ReC$w1*?t^nHrzjg2b$0ZeiEd6|R&&QLHV9blCDiNJ1Q0QkxuBt>1?1&No+O z{&nLJm*>|PoR-KMJsG9kb`2TVT=HvOFCeXMAlI~47AZ32YxZCuHgP_1)G&0%s5@Ta z>o2%L758w7nqM6dpG1{}MCJn3++o_E`ybGio=i?!Z~{x@b=Is*Jh0pDiaZSQh9SuY746+`THVW`m{pmCejK9jIi>$G= z-qX>A$gndw@c42l(umHWu1G+Nq4H}X`fY47^Zi_05{uDGu^y=c|3PIMhbGN<5{O3a z0egy@S9)23$<<(4pbLB2h?ARuwb4mT`OZFIS5)r4?4JYd`Tn00S-XHWOesBS+zt%8 zQ@gKTPzM^hlGpFdUZ9x&awZdNp~+i0U1Hc5Vyb^8=2w2k%3Gt9U&iT3RN{_!`%@07 z>kr?aS;;~A7G<>r`2l1uo6nBEjYW2zpEVEvQDlD=@=cDUA&aru_-^M3WY`Y>mwL72 ze*gdg|Njh^cRUq*6viuwP@$wy%7}`VQ7KMJ%BX}y!^#MytWcrsk-f9`EUvu|u08L) z?x1>=LfI-p#Ou%Bf4}GRoacLtijUZ=0gPC&LVs^$&}{@Qnxm0k|LxxV z7!|2{%DViD%}63T{a9JD!8VJgg+DI^u)0}ay5-0_jIebRoR=*J0DoUej6~H#0*%HegdQA*|f*AAfOlPN&gmn0@Ul% zU5~Ba1F2?;MgHG0Xfx&dGdAV{)!ompvv2l+h<<@C7vnJ`wYqkY07UlZ*1 zY4mi6HA70r(}j8-D$**C%>7UnM21PsEw=_$WRz@|y}uHO^fW%L!gLm-DmHcmK0zcE zM_L9QF~_#Mhb`Eo_F;9G*P8F?RE#_@H%b=&1_U2J@e#KTK+NiVb#3?xbervsKVA?8 zl(J=)#KwIzp-?t+frHXvnb{G&`P zLz`MoJPkNA5%Cubq>CdmNE(QrBb$>`-&COvXMX!A<`=fzvvUXi3 z=0~tPKiI`OI|Cy%&YD_@YXjlNKTY@&0z^mSlFHAS&@KEVt58b|C_(4i)s2gQ_Ke3^ z$6Xy5`_KOK?!62QYq^a>^&CJq%6YLlGZd(-`o*Gexq#&5p*1$W1={#I&dn;MLG_#C zV;UcVAo9eQMUv7e5)?caC64nV(fGz0#~EJiW@6U)C^3cUQKqzYQrs3J_Cyw zF{ZGP-^~DmG-Z?HU^NhL)aLNC8bQ~$NP+^JDNr7eUCoL<0_~EScF(~2|3_9bpZG9< zA>~3f{%`~6V);*$Cj6m~Vi0pVsuV~%;g-I_4bV!eJV+rML$%nm@zUJ_5b>-?^Vyjk()~q_aO7WnTqjYl`waWzI`jH8gWPtDc7849;#JlTIL@wnvLQ3}_rlCHG#|0zEVSSCo1O(5IK!YpjBSHq`Z0 z&UFgFM+C{kz@K)LkMU2YR=ca9|`Jq?#KS9Ao1|n z<)x7w*cBLi0|_HY5&HOE*O3{iGXvUOQ5Hz|)CiI~Iga#p=7fM1C8SlU%`5eP!M=xQ z9!|-B#@-3NNgkzmY?X+;$Wms9Rg(SD0*~S_jOC~Uec}WV%q!eKSTq7rg!fzG_+#j@ zw`$RtxB!%G$E`V{b%9Ee-72_Y3FwAuGv@o1fSw#JFt9}dXu$-7YENP4lc!5$Y};6i8_ojN$@{s1cLwDz9kw}g;B_STLPIuZh%ANfvYBT;BemTSH=cHO^{UVkha z$qVtZS6Fr;wYct;u(J!&9nbr{Ob-mGEOIc?Ty3_2tsbTMq)Ej_>o)qrZVDJY-w@9}&8)-sonZF97n_<06F& zTcAcb1v!_O0e$EG7iy$-pkF;DD)})QXea(*a{(t%2F2Wi@7{u*5%V5{7YWdEY4U+e zjt*25o!#Ggt`q_y1W$9Z<|AS0SGu-7-?~3tMp}<~u}db&ZdLpelDlT?&dqK@s=e7S zNvbf?#(oK(XN^Pp9tlsrpI4E((z&(X%NHrx6$LpGmDuAdp641qgUzD~VFlNvuwvKr zo9vBe&}aC!UmSS@6e%h<9o>cN^Y%?S>D3f;iK;}`&0Pa>`B!f54lAH)`R(*}t^pcu z**E1X4YZNKL%A=cfZD8@!<%vmC{LW0gX`DzY%jXAr_&gkUn!hu%wL6a^Ln~s7LztjU(~m*~1D_KG?;p>u6%PjN~*Hr{sh6NIm(Xt+D(7(!y>o+3__Z zt?NGZ3{Ib*J{UKo@&A$M%0cKn}V~%uc-s)E(Lam4UZ`_Mk&yASD!NPS>kw zsaZf(7g2j2PX_W&C9{!3ywJTn#<-at08MY396gPFq4ZOqyb*5(*xz{7aAeYg3}}ZlrEYr2bLeaJi}>eH1=_|ZkkyvjNXg@ z`N5Xxv4mRaToIijKidz)u=nqGI6FfLrz}%g_GVOiDxcW<*#k>%Z&-XsdyK@)Q=3IR z`LT0h!>3WoGbG<+-l~!xgng+8S^pgUh}5pPDwE+JNX3`xBm0N3@8$Nj*|F(FTK5oR>f1w|VZ4*AShq6-_l#U7^%SnB#}BdgC&B+gchRL-8m&fmtDUoZxc zEH-gt-*Lb`t*$K+{aQ%9udLIueIrt3bZY{F29Pp1`t`S~U^7_T2_1ws@UKiHF-bdnI8iv=gElE$alyM#FO(v<_mMxe+ z%sfh+xCCK++#+sV(@^gJL4i?N3{B5}E0tu*L+4`Aw+j;*K>F_Vs*f}bls;Eo1-cdV zrSliOOJ0P&Yk8>W`WVQx54q;QMWH7%*!s(dN@(rZO!GEn1=QHz`%Fv&axZ(cUba!d z=-u6t{6l1{xOU*2>W&d?dQZtY&q=_}<;B*$P3A}<1-$c;&_+sz#`cK7cJt|^+vR#rVdHj@)r+x(OxkZy}ver&sb&Q(BM!1lb# zpW{%;J6kVbJq%65HAzhm-ltFXDC6|5XL z7hTwK1e*n_6?ck#Smy!1n@D{El9EpEDuQQ7QC#hG65Ngy@&m)KYbTL%IYCOYwg5?4 z{x_HpuVB{!xG_Ej*nEwwo?m+tt6U3%EhqXgrHb~2D^?FuU+S{#Id&APh_6^B4jV%A ztx8?NO@h$HG%_9goDL*U)pF}6WT0^5^qfnK0E%b)C%eO9Kpv^TZ;){qNOHUy-q$9f zQVzf0sZ3q%{S&IbjCt~`%=7ju>J6N5%NAYE$9ySMGZZyey-PWUAYnj*z`bk(T>3E&kDM9Ua&kawo9O|0;GUSsS{S z8zb>)ibjJ_FaY%1_Pw1U+d^4}OJmL%YhZKY5Pg(CFa$ zPCBUzN)L)eSk{stB=`@?C`w~4@5PP_S|^O2@GyDL>JB(r*`bzq8It=vu%wrO&C$W`o#Zdz+)}iy;=D zv!V}JGo#0+WCwoS<(m|*_MSBjx4}j|*0p zzka$31P&Rthmx#Nzy0P3_U}8PC2^DOp~N}pr1U(<&(4Nk13qifIz1rysF{QnF@R)} zBJ${cEA&L*U+WK#pd)-Dd~u@}G;c1^{%!RVYMkn~c^b_^t{89oUv-oyoWYh35+^mf7dtD}Bb?WB(YwJdplWdtNoRO7EXuB8@0_UQb4oFG zN2<8g$Z}!3GjrFs|5%YYxOmr0wGOM~&R*iK)5T27PzfK;RtP1y_c*$iLUC;+*XqMO zsGo>;Pk7`HEx#`HHTudxXN(JTo>U?9#P0Gi${mH?*0rm)wtmpNYe;7*$O5_orvJ;a z?}fHo0!*oT?a)Zb{&(6`2FhoRYQ*!IAyxj1yxXxXjHxX+O4uijrQD9J$@l;pv;$24 znK)wW&g-esDjwMR#A<`5X*TwVZ|504q=daZHicWiJ7CYzgO*9XEZFIke75}hGPa7F zT3-J)i487_9c2M?SQ?)fR&kXN_f8YjO!f)wHoJo5+4lO=UaHv0a}rlS*JG=EC4FL) z6+1UXEf)*5WA`C;^C~w*><;EiTw9&RuG0bq)At9lU0SKLqOp$dof0p4%iokh8NHk->$xYxM#Jp=5!o!o z((r8j<)<{&|KMH7Zdr?3eW*V9{p(>jOK4n_yb@zS1+6Fg?;XGR13H-I|GqAqfX=Ji z-a7n!1054VCYmt|&^F)j_NmJ{2fY=oytznFPx;4q&i?|+R0iWw)fCdM=YDLwS&jj# zDsH|eGgxRGeOZZ=D_iD+%hpcWMTc0<(#d+N#Y>)VvQ+n1BI|4t9JXM** z_Md{Wb02%KwSDB`+SUndl54y?D9wd+3x{QDlXhTnzJ#q4OFkyBA2K0-ZGou0GgT>D zj{{*+Y5e zW>>A-+DB{%47}ENfdebuwUldwj4}Vq_dNpHSJ2ZV_Dz;vETs0l4A(PHf)dP+QPVvQ zbzSP`wo@Mh@p%GOMBWfu4EN1lpx=PjiOFXZf2h#Ldi2oaKSIz_%1%2rcoCXd2|ll7 zf}mcqk%_VJ7Rnl2qn5%AAd8?bmC(@vnh)4MgbBaJO#9oXoPsxC*(L{Cl0p=s)dPa= zhjoAKo{9;J4P(nDzvu#6oAn&oTS*5zU-#?yIC@xOv#(_G#K8h=ES(+FtzGXkVf|cx z$1Jd9!z0xauDzHV&cnel*bAe+pF+-$&rN;ATW8KM7tlvLxG5ntq5+!`EEvZdo z^Nxtr)Cx9i&Y#*kyJZ_T{p0*EwQ&iF9PY8w!Y+vO)U|&O;#mGmeBO#@1>f;z#&R4O z#!&729p_$GL(C1c`fbF+P`Km7lb;s5p>p%>ls;vBsF$fIzQBJB8ppHWE$nlKCg+Vd z#VNDU)KN6~XxJQxpL$5*u_MrcF-N3IXi$5Ek)G7cy1xI#tx7dRAglhp$iYiK;O0~Q zV7lcqCe5`!r`oL`!8~5e>d{`TEL)pYv^B$e*#_=;Ne*lbzbUnpTN0%h@OhnJs}5g{|x<+pIh%6_8&w~`Ch}!c8-57 zH{WCNTic;ODl%9Vu8~{JEr2-6Y9Md=5F1ixr9)la*r>oHC^ajE4fWz&ZdV9ce{xJm z^l&^@-*Fe(GbxKDrO8SomY*@FRxxXH0zZac^f{NxZU&(>o~Dkud5}{?Sw2;f3MG#Z z-U%?f3svR3s{-0P0d)udFqY<^fo0!Mw?ZFi&`q`K{Pzy(69uiRoztMUoizAnRTe73 zMWWWs{nt5ihNW_gDx|v{mu>J0fmge;ljq0>FqYr`#!|&9=AWM-?ElP%rR)O>b#wQy zDr0e6B6k4mV)-tv*o9#It&gu|wA8TP@blv zgzpW4dk_2QVd9s0EoBl1T-tizVMts!BsI3rQvWN2_xjzfL^WdE+C4mB2jFO-|Spu*-ZQ{ape6tgC~Bp=@cIUI>@ zUb4jysr)=pOqv~E3w^TG`5=#}y;8zoe#c-T>#5r^KdZ1bWq0VtY*VZp+-+!>w*_ln z^~JIKy~J7*9kqSzeputS{Xd?Ce^~kLh}Mkd0G8ICmj0?IhlMw#xuj!MF>TV8cdAJP zeSLZ9b|%XZ9CnGgc19dBt~tyoRd7RLhTLY;eo-h5BkZQQDL|#D^Mc2L5vV?#BOoJx z2C6;&QCbyCph`-ubJk)A$~DyL2F7neG5f&8PO}BbyX~R=a=8c+_e$p7ma2y*Z%g~< z5B6e|IB~4|=_Ab2+Ajra@-7x89WMVku4OVLfqRB z`x3pYkloM3>B##F2nWvkO6DIY^T*VG52IF6%?J?wR#(iMi^>Z z_d>8hpul0mj8GUync1S-*GX zDx9MTP#AKD^8kl46wRI*cRosnk^^J8eE1AXcAaE>=ye;4dQ}hSiT;K{%g2FKxemzP zzZX@)WFcjI@At<}Y7qJ|UgJP42j0=ntbA#>h7l&hADYb;F}265XcyN7%oT~3%`hCp zf)?t<0R;^t5Eg|k6w=pwbwj0$>^Kq@WzJsCb;3e>U+tSsCopfyi#~O#1T(b!Gtbs7(DMX{3@Ed}%MasQba;v&x|8qoE0t%VMrY>@19V}JM39=*c65RCI(*2i~J zcV&uLS@9k7Y>H@L2IlRuVW{QxVwU$U2+!5Q)VM@aBtH#fHAXdvOvC7_z!G?Da{%ZD z+%UduGX{Zij?erw65;Jv!Tvb=1CZ+D{%JU21Tqb(s#&FjAiK%RYRa|>a$;^UY@Po> zHp5PH1?Nh4X!Wbi0a_(oj0ESPd*jh@& zVBk@r=r7oeua9N;9Xjw0jT;L#It)dD^@h>1A5PQYo__RTVu%5};Sql?adHGgv+t1E z$}Av!&2Y3RXg5UstqZUt_d`Vd()JfCkr1|8S7J9g4I%2XhmP&b1wVKB%LF4!czyLi zqZFA1Y&L&eE3|MyezrU3AIO;D(+n+kGSfV|7926%vdI=bzlCvplh#7tk_GL7{6FZQ z|LC|Dy9)Yub5Kuze}jH<{DVST8`1leS62S?XLM&vxloawfX`K|ouv%C@JU*#>XW{w zcO#HvRtXzZHEEblCWhvMNW-)c<3Rw>@ALC_VR-Bz2~o+|bX(t`;w#+MCzdLme+ZO}qEDbpIGcvNaXr3%$(8c>!2){7Um(lMT}F=%it1v= zEV|E^{+X08#8+ARUiA`e=-km`n?UWsC+gK^5=z>r#y#mYT)PEKVm3^Dix37UuN>T# z{1ZIHCW{zM+2E%c%W2m-3qeZP5_tAALr9BIMaC}@gg(^vT)SfrArlwEN;_5{$cMsx z*E9=!7j%C9j8%l!MlbH=2Zz8@?M6S{(geJDMzhvgSstB-Out6%oIoEp)wPpGx)}0i zo>hI~B}VvM6MEKp5u*)UFAF-3V+@@$LhFPJ#?;^aZMo?(Msqw=(|ERm;Y20h8NEde z+9~TF?R*8@&r^INIla-ij#NI*yc6ua;py)XdGI~uUDd~sg)rJ8CuQb2#H1ueOGGk3 z0+-dTt1}lNsr#P%!Ha4C0{{U3{|uLhBNc8J$MG7;2%%JpO2~@(Nh$}GhM7o_q(VfB z%t}RO5y>9e>&o8i7#H{2?&4aJ(NIz-NqPMT&pFTee$MAWimpT9vhELfqhG;bI1WI< zLZXl*XBtH3FXfJy9fFsSOU19MnSqbCoUhhsAYRmZ_k5(-6#XUC7H3$8G179Q9pMWL zCj8f^bvDcnQ%GARy~whd_UFdWsm;EavBB9yJ^C`H)AEo`k;k;lF@N8rD&QO4qQn~XiK|Ye*AGvIH)R9AJu~C8~hwqO?fc;8mD>noCW3? zU+i;gNI^o@RKjQk3lcP*NXG8jhPfj1n)B{YF;k~4JWW3lQ#j4dlrE`aJ>g4tPNzYvHxJ>9;T}kvx+ko(s~vK@%nkP)IS={q5j^8x^r2vt)-cqq z359nhR4?prgSV6V>K{H7L!M1%hTG#%$do?Sc{Q;d5gGZtl1V(}}YDw3KCx*`MV5_E-kqSNxBCQ~zgpZhKfg^yvq9 zGwwa`(q95{q<^MZJR(5B&*SVfOn)f;(d;j?nggW^;(ODgw%DKA4BiaYLmPqoeJJ6jX}kPbF@3gz{IaS|i>XP?G+7@8+-t$o~;kapM^Y z(z4GyQlXLIg~aPzQ3EA>)|h@$SB3*q)zg>r?uBB$QE`@A7&n%TxU34&6|llS+=}1s zDON?q-k0G$fYtIDj2A+Ou}W@O`FH?7mdCGGB7X{tlb=r;X;@*-Cl!(D{qh)BHSHD^ zA_9jvI~Fc?@Iid)X#Q2>B*<-@XR_6AfD(((K6^E{K}E&v-tG+-pgL#vx3&%)YW`{% zH)NJVP290u$v|(Y@-bqR{LzQ9jsxZD!BtS`@X|@+kqo5oB--tC{|Nq!>*q(9Z!p46 z!(L^BEN0#BFFw%VfyHi|9H$$9U`49wM?sHO6ePu2!TfCbx4Fwmkpyz26{O!0nHi}<8qP^D?>%W8?oB6UIt8?E)ryR}1 z(z1l>*F8UB4x`S%sCNn@`0Mk!QWYS4DY@p-t^~;4Lf{b+5ri^v-@#5TPN;D`_X89* z07{y$jfz@ASGzL z2+4<(wm8{sN4MeoK`r)$m=R*D8hEP@OQNFHqeV@yx+VNv;5-r0^q%Th4-RZ{OH_m) z3O4Wd_xoRt9yX=-yO2e45&zk&y*>K~YvR|cAL^|Chs%TSGV7enoEMj}4ROE+mamNx zR)ZkW&u^LG`4mpyJh8B=(EP)hczJCEnyFm! z!{T3|$y;;pq%0TIFZ0BSKJtNzHSYZ>>65}ZT^ij z&>&zmm?Cx_nibkKwQX+$QMNGKE-ev=gOSGuTI7HzAGd1PAOp>co>fNX2cUjMm@e7z z7|NsP#E!hFf^1Kop#ph;yOm1u_vi0mdgS(UuQoj_M z(v!p7oY3a=B1A=K2egW$OS2^&f_wPScOJBvN;%&}hkEO7cQMfn_t-{0-nOcoge}@Jat|{@ zv2OB+xRJO77VAD{#Es5j#GiRNg@h_dHH-aWsqO^j7yG|!s`EmlX_Vc^8_$8bkQw!E zV+fG`TW;SG@&w3}F6@ixOF$mI&cpFM7)X+pOY(JBC#G%OB?<+4hHi+*$^!QT4=Dh0mCg&mkY$D-EH+ zK4I6zi=p_1dQ|v3L1-|1eU95@eSX5dJ3@24ft0pvxcN3WbZ*u3$+aAXPNHST!v}An zBhKrg^e`+m1 z!g@i2LXAuoBpStDPSO-XQtLlEC9O#8Oi<#gWKqSgBy#MNi&ofKqjt}Vs~1Us_w$;> z9a+!I^uM-0RahU)Gp+d66AQckIG=ZNK^M)nFtceVAOtd0l8DVJsUUqH#)+jVeXSw%( zJP9TKW_tyNbKtq_tlQ;x-kANViFL#H9M&ZLnS7A&2wO-oS58StBk7kzZIO*7c0E0$ zZ*ue^_DJ8f^|dv_?oQWdyZ_{4=e;dqVUBcc*HCuNB@?m9^WJ7=_X{j%&2>t0vB7AE zd$G@J2$1n`mnFBvcc}K#7Ht$AgO;E$yOLeSK;}E=SSgtaU7z!Qc)pE>o)Kq}(`GZ! z)9|ylWqluXMfB~l*H8nJ$Cv1ct{`YGcY89u^$b*AY%gV~3_)_RaK^{W6_~1jvznl+ zja81zC7(jhVT;in*I?--B=1wb9CPm?b{q5gdq2p;-jMT;1=3DnZ&tj}w`yzbPK*EV zS6B;@lVdo;msPN3)IRHqUm8|FF&+D1o`-2`TJI>kKR_a*=izjlGE_dv^3~@wfR?>n z?w8F1fP9LqDB%|h-8Ftr7xvadpBQmYd`1EKwAtmUHBHcyq3r%>Vg@>jzb^!I#Q^b} z*tp-pIH>hjdU?pN6|&5g>(6x+V@%t$N#EBkSWz3YH1@3$Tevt+)nrT{+4*5o#SyXf zzKeDzGRfHI1d`w0n_*wRli}-TDeR3ot;%|ij-ADIr}nW0V(X_%ReGcBSg)y{B0NUG z+;ahS&lF-H@>#{IwnHma>`nfk($h+4Uj3HWd@UQuS#Q1@7m=YSK3nPQ+AZj7tk_@V zcNzLOYp=jN8uV!#uBS9-Kvz=AS;5U^(AF_$dyMx!H1rSzmaLS4(3h`iveH)h z8X{QU9Nt=OeI8r5xA))Jmx$y!gXx^DtJu3`{?4QTt+I3K#&^>zaK_#>( z7RN+JUxtpex9$Y2EG{)7#0>v5%l{@T;NYSj{U?N&biH2NIBfi^>w)%`<P}!!VR?^DEKlBK z?!S&joH-@j(pw;C)Xrl5!*8hAdh5&a!H3Y&pES`Ry%jo7%(@ItOSi>t?EK*Gq5PT!`#OirOcviFbl`S$JACgF2P z5mwya61;-F07pQ$zl*j!71!91{5&zzsjCN@t`GzU7G7fEfQcQ$EfvD0ysh2qIiRwA zkcTB84TvlI;7rmGbY=BXk9rcJ|3H8CS-ohWyx&mhypIE@XO8oRMNxoap|f`NpFi~N z*N@D9(+cGBOsyAIWN6Z}dtmxm8VU+7bg{hh#MhD{k4eAsv3l2$qKNIP*xDNLLudUC z==SZsazRKL`;(h1ge#_ydit)LLUbTflXe?;-uFdHY@f*@sS5jabys7*YazMHVx)KL zD{SJwrg!K;Hs&|+l;w{dg18J1RrZpXP}BeL{k^U6&{p}@$dSMTJr5SXMvSlbUBo%# ze{st|EfgRhiG2&yug`dQN1g>rr#Xj>G7u6)fMDX))~|ICj@+7`+K-o#;~ z9iDVQBQk`P?^|12_jzI8rL|I_vSK73(X!fxXBZ!+jd<(q%{k)CrWHGNozp!Hf2I&7f`vzi|>fB zLZ6nmrAy8%kP1cqExJcS!_k@mTb_1Eop`sp_;m^M1VXDE-x*_*uz?}@dm(l_FyJs{ zJ%s%mH0M=Vb|N)1!AfHf7t&^=K8Z`LAg$z)ux`i~r1DALKW2Xp`-H4}Iaiag{mZw1 zC#?@+9oNKi!_yrY+r8hKE_w`#c8Ph!h44ai(J|?XI~LHz{jpX!PzCyHWIvw{Jq@%& zgo1c3A)udDNffxy1+>wp*QQq{f%11MDdt2V^hOj<@-kMT?P~=gs%`zQGv1pLqaO}| zc^-Re0?uP8;r7qY3(t}GNab4{PabyHsff#sd_aoZ`?K=96Ocx%CdtNWAwA{9_BARC z(w6!D*I}E96h=>rqmw)Kv^?TF^!qcm=8H6bn_2fcp%)u;sk_0xY}1|Z)_zb~u%(9W zrSiIG=0zz8`ay3P+Lzqh3ski+U-RG@pc}u;UH0$>`qv`O8ZIi({+-LJF1fXyD_J1=X-#-J6XktxeO&*Y0oOXMey~FCcQzSU0AnI_QB9%0+P~xdTKvd&uhc& z$^J%Rq^?cs1_cfxeMpz&)%^(>a%$F+iW`wO`$5Zdtq&>66x~UpBzBqmc?J~pVzch| z_~C|UNGPt@c-fl|(nlDpD`pR&G3c;4)p!;=rO{A z1gCh_^TF71&^vaIkv4WaT-m`hvxXE>w4T)&ZKMaEk`_@_K?d@y)0hjd85ix#Ter$;9AWZ&;nKor3a%HQ|wSTF@o{hM8X) zq4&?dr*~?ZK&5+@|LC2;fEKn-_Xg^?}|9mm?x(v zZmS~WqiC=FlVuz*y)tF&$BK-tXFV52Bay1(L+*O1i9J#WyV}I=VoQVxPy5LzEYOMD zy?dS0>8smwU*}6hlll+!3kTYuORFzcl{W_{8P44~>@Gm3)pcc<{09T>;cTzojl#ff zz7OW6_kdo)o$LwbKylcaAD;ahI+NsFFP+#7jkYeQbR)~)&5ZWxSb8fKd+p+Ho0~%7 z2>bi53HjLT>%AxG@(@y&aw-S>B#}{Xm@WEp7zd_~&tH9U7Y9s?*gJLOkuLf!nsa;x z`%M(LOeDD?DOJwia^?h9CwIu0hJV1rcO23_8z?}vk9)1Q(YnWHmTqf^3x$50nO4_s zYoM!_j=Gs1fPvr%0^=;gp!Bj8n`b%l`Q9365c-!KxC46sg}XNWMrhstd+FQ! z3KU0g|3l**!IY)&nYh{0*!Y(+y_*q)T_HwPnszHvISmXsihPk_PhTqA6^4Tc&U_A$ zC*$DZ4}{3nU&wf@BwH7B7^zY`BHD?+v8(%Pi&DwD_p3hYt9clJsgBM)SCW`eTyXIB zy{*;IdON<2HT4tp9W!^i)9#OPo)8RjmuE>C<^jD> zQ~aMx#d*+Y>0gs8gT!@y zDEzSuE4YV@O-pJH6B}{x(gg8@sVEMPT4d0^cH+P*ib?&6O-KvBIrrF@3;X!adQ??R zAhEh?X{U8P7M@~1wrW}fS+x?1<+=jU+)?``SLP=4gc9DdzupcszI5}PpuaF+wK|{t z$_ED5gtIaW=U}iCrTbW8fkEokuQb`U&i`M}1ou3GF5c^<4qplZ)9r2)zPbpJ`mLo6 zcaCGlbu$)r8BQdz=&h`#7h!)e!TyET9;A2u+@!@Zj)Pv0cYPG}MCKKX*YDh|aPa2F z;z`mh(o?DZNzMk?eZg#PcuJO}qq}$o?tzE?4N0 z4Q`TpT?|cMN-qlWUxQQ|WwGCl^H{q3*Ok5YG1%7a^@J}(82b;{%T{bYgY+s@p7MbM zIGD5f(rr##WVX}ZUAV@DOjdi{3rex;oO!vh1h=s>R9{mz~>h zZiVnqP3AXt8UrpU4tw2y1zm5Y)s*!!fSMlgiIqPD27Ct7)ovI7GkHW+GHf$2hl2H9 zB|U&a`PjA8`{#jHy5@)3F3@}9PC7ML6k0a$s7Kzu4;ibEV{LW^WAW72RIo&BdmJI! zL=nXPgBR6TjrSq_eSpou9u*v1=xg!ME5RXo)l;`^-H_>8_BvGRI5GzITzmE(5h;Ne zc}Fd8AekWH*>{m0t18r+_E(c2OyAQpSb8Hga*Ra@toOTXWk^Hz^b?@Y91S0}S)UVn zKY!xFTNq;T&k=jy4nxOuIEz>|!Jr@cO^lZT(0=i;*fsxy-ja<{O$|ZNBI01LTxkm# z5)!Vwjv-h=%aYoq7J%&v-ISB^wb-8&?61$`feh29i%!39A@e4ex#_G04u#HnPjcKv zW}VD`0%;qN@%Lqxn3*k7{3jj##SD;q;nx{m^^I6*%iAlebs3_g&YOvTScN9(EgkcJ zZms+HEv;o@DA1m1bH6%O1cNvK@N+-%g&`Np!(YyPFytTq*C?nH1{1``8{csOZNP$u z1G}L2e{}h}*fwZpy|xnVPl6=&n_}N5)UiUu#H}NB0ZB8morkW_k>cvnw1YJe2ZW+8 zHI{uw=Fe%vqZ{;b=p)PG;k<*$r2I4NZhVA{&MzS+R+5pzYnM$}XvX%jd;xv~5iHH| zbDkZJg!J*6`VRh$7#33o`on9pD?1f|DXq0RH17lqechpL@NFK3 z^1k1-v6@(~=ePPH4G*B{*gyIZ_j5fLFD!Uve*xOe7I4%@oN~0ie@Tr=7a(A(v2>03Q!d{gwuCyg$`9Vm-%Q#sM@|S z?DV5c7;E5tFaA~+Hht!HsJtPFy?0B^+77HC{ai|aIN@G%an z^NPsu%_CFH)H4Kmkj|&KY4~_M_K-$0cGByyNsP{d4o5MZD0%Fv!x5;F^F4HaX%ae5 zSLxZSEC99CV}vg*7Y4P%Ya3ej!O*W04PM3eFr4tt@2;9Y4DAtSo$%QTj9gyD$<>e0 zfA8|F#@*e}+EPvpIC&ok18o&74vJVrdi9>brHk$24p)R*E0DrH!SPe@1P<((Zf5Qe z#37IQV}8+kINb92@x?)V9QvAekYDa54ziD%>IUc|Rr@siPd^5BaBh|w0(q?DI+?q@ z{RO<)@2z>@fEToIi0BWPX+qznsBvj~xpfbGBekNW3ry;U&2-mh7_Pmr~~3;|0cluJ3kRW>40tia(J4CBsT0c7AuXm!fs=O z%&M32NXz{)X>CYCrcm^PjA0E9Ki9S>|E`R~?@jpxMt|Xuz^y9`0u32z^L*8X$=H`2 z_7`<8W6SHp$SY%_MZ}Rq*BTn@+;G_PcKYe5 z8XUY~;{H9g8L3Y>%A#np*rBBB+o_t36^U9;pXxe6>Nq{MxI6+{KJJ)#x#cGG%}AYp ze&`7>0{%Xqu2X;^8wd6tPEHs(Xc6ucc>#vI_%nGW< zBErHQLmUy$nwQ^4LFTkcnPGzq($nUfGB|!=ui49}o+@5!{ASV`ES!wK-`%3CH6K8| z*%KHknu2a?%^!}IbwHaEy^`7b9GEUOmeOHMFv7A)J;L%FjF|m>(U7PNL#}KQEsh(2 z;XeGtr8gA%N|W-rDvhB<{i9+>{~1U;{Ns+QwFg#xC6Af=lCaZzWTlxe5NZ3Brfsd& zaBxjUQ!)QA4i5=Q94PyUBTwwOdu4=iXv&?1d{qwz_F35a)81i!#H(wgf#8`zG>#({u$cHsl3iJ_aVP6EN6ymMBPt~r>|1PZG zX@vZLt7b^zcYnox=Q z6oy?iRcFQ@z(|en%I^EJFkHSFyeDU1(A^=vGhhm+n$>jH5Z?a-0096043`H#6$}){ zlhL4(kYq(lW+9{KRHAK5UYpQV5>go@g-9wZl$pKvJl4fE?;h?&5t7o9c3z+0oZorQ z`Jd;3p1(FHtg#a+W^V{Q;}OI{JEIR0(;u-bF)J-NE(9ruCc|0$yOG(IVzlLuJ93=0 znr@%7MQ*3+m(!clk;Af>Fr)26R>`)By0TwLy%&6a@O3y66SBgdNvdL%v`B~3;%3NK zndE6aA`4wxjmIr6M*&5WU98@12h0*aPs`$cz&X8Y^y@b-;P%&|hJ`M0KHS{(;%pSK z`evJ|&KLtV&nLRCGYE*o2UvoI!BF*dz*f;C9P@k@fOas2JTLp*?7x^&FDhZ~XeP3PM_>L{{Ed?`{1Qb>JyCvV}x7!tcL`gZ@0 z!YcD^%wPVOA%ExNqHfHBu6@N4?uq$8+4VTW-0LAQiMq0D`kH{_;}*V9R0G_Rt2^l0 zBEb1*A!=N330U=i?I(VP0X1|Dd6m~!AUfo)blDUDl_z#O#&{26;idkmzwhs0*WlE# z+HO^(`0Cu+I+Tmdzb>CBx<1H>E3ZFrZ3S}Quo@cvokY%X>CpLu+mIFUOs&eV4XIiT ze$jP`*pt|vKIb-v<>B$R9SxaX%$fRdclNlKU$KyMG6#u4nI&6D2o-k zWv7(ZFV&m>Za7CMK&s3BmiG!5kyRWlQ8J>4oG-j8(zOG~eS1SFf8RWEZfUfL{n>%c z-r)(6&rwK`*O#1oy&VZ(J_j}f%Q$=JSS`Au>X9@4$swRkv8yPQ876X*@cD)S7Qv2>v_*#fl{ZDWUh`S*AVn4+fK7 zQ?8$@0D9pc!mQsZ7&f>N<0Kpf+>|$)e%;LiZlWDr`mP4U>Z6inqoF{Lul7t{2!cU} zoe`Ql0?J$}H@BY<0O|aSqcP{t1>A zCqcceeBp`eozQR45vSTd0kpO+4n?Dmz|Qz~`&eueaIICI+UBGHH?5S%Lc$4#uk(Aq zaw`PJ`X*ZGYFQYHUzK9_=^(V8QX9zH!-wv>nBzoxCbqtvhEo9-khH3Y`Ciiu8T%{V zl8#VtIPMs9sp}y(O_XPM=sV=<%4HPQ%OczBGqJ<|Akr?9R;9%WW1olquE~W-tku-F zdTNA3zngHl5#a-*}hIWBX-;S~GsUyolP!>K_^Wd|ThTg^JjL<`#v zmsShB-yC zq)0hkZJIAfX6vgn8UKutW1Zl51ui1@ephR^+-u~(Go@UYNn|F4blUSYA$g)bHo5x% z5)SawjT~|?EBv~V>Ajs$OEdAbnA!_{1u@T#9oGd~D9@xvIv=oI3=U7Qt%198{GdR| zMd0r9Fu5x?0qoy@E6)_p0{z-no0t)G7?il=akHiwnoZ;5ZL0snM-hvx?Yx+0y)} z^7`qb+ug9oA*1Gc{0x>Qd$y`4hCMz7Q5KV*0m(5>Ro+%1GZn1c)kaMEQtxpq|^}|JCq1u!2If zO>#$oeWHHmNQxV@dUG%o8UDN3rz4Kxu$AxtgKCDHA;nG@dWge4D)S{98<1)9 z$>VHqDw2El{>h`fK>}D@4RpJQ*}|sc(|@L**3w{m&KiI|0Y2|VNbZa0i6pBj$$CbE$zb_Y9uae9=CXWG4`g)jHbrE%nMc(kUuvAh;p~vQrkv>|ACR5Of1?`Nzl8&jhRh*@ z|Ffc8<~)+t(!CR;E@RulNHdGXX}r;{>N>S;4$!nVKaZgggO#Psb)L6@9E~*%)9(&^G+h<^n}G;YS-S0=oQ*trq9@LVo-8YM)Xg ztg^OVKVPx+PJ<@b=Y;ZdT@wislU#@yWD zeFbU!&$$N(&#-UBd)`OIVOYCD zEG7|`xFk@Ul&1h3^|d>ztE7Q__xr}nQv{%g7`;yw?}fo1zedk~+5xTNol#w+-RSx< z=$2^nFKm5gf982!2@bj3d(!vD9ON6xy@_}sWz92U)9rllr_ zj3US6vx~e)Ryvna<984{CB{UyhL2(TdU?r;7Y$H1%s;U#oB(|l|CL#&Tm_m&$e94~ zK44{v3+mY4f#I$?8TtM|7(RdO`H1jFV8&;zo7<%Wl<4{*WB&l?e$+;Ep3a0)+stgu zut6-}YutP&SrU6-XDPm`0j?lnK_@9@+0$`W>>FSIp#YTn2);%2xLu{y@Gdx9j#^L11*` zO&6Pt0DDqDSZTFB3_rC??iOzXR%@Msuk0Mq5?UPu)~#U!Ok^*;IzDo*Q#rY{t-CCDAZa{U2a@$f*UChe5A-pZoD+Ko@kJ$QQf; ztg-i?ov{~&t?e&pR&N8g@tHd;wj$66lxy``@`1FU&{!((4DIHY{vL5Y@I-`SEiHcy z8}I7G>5ylzKQ5-e#)ykF^M`yj8ef-q_>yrzydH*yA5ndf%kTi7Qk?V*wZ=1K-R5XYq7EoI>|Hr*BjL#oA!MF3L!+Wy%6jMtRDJFLQutk@BFZ?kcc@ zJAE5oyS>c> z3D>WL7Y_$)^BSPM&7C|EguoQs{K0>(0I*&=h&mrn1D3&} zODV1gx;oA3tdRha`1ec_>^z}8qN=S&UK^5QZ^(tEZ^62WjgQ_)d0;P@G9Y#DJW`=( zv!1F2GPg4=dU9_etGT*Q)};%XY*7Knxb;YjJ1PJ9bP5jo&F}f={U5fr{AjzEQ;*@( z7R4Nqc4*pf6dA_;0R8Ijr$gT^0<}E&`Qdj3z%=9ks9;hLtS3SyX$njE*wM?^|BnMu z2ij8GH6oxtluP3m3WH|R@S2;=d+_FjQvXh`cx+WIbX}MV!U0Ne*4lI?()4VNqR+fV z=8bhlzY=#L>%Zq~J~dP$qoeKC-$*&6jAfI83_g}j`f)`dK>z7l5Np#0%zBZrk5cZyT(P`g?{^7M7sSik>z2bnX`qShy>e*v z60P1Y6#@5^0=}d+GqKTFCd}Ai8TK8u)_fkZq^r=iVyPBcWCXsx@%r-&G9RZ#G~aha z#-1(DHr=^|l&4iMLLDrzcg11p5-WSGyV$GG^b>@H{sW_AWgTcs?AxXoBm{%EP7aiG z8vsp0!-q@O0tQ>HQAp5mDZd_krMT7|=&I5JKi2mGY4$6t_J{xws81gjjU0y(?K2Pa zmKa5e^khx-`=cTR6$VfThY_Y=zspS2< z8UegGFth%|!;SseCVYO<BN1HuWbfoOSR&+Cg~P#a?GXR>exlWeycj3x_V z+b!<-{A70=T<84l*2He4*6QuyX)Z^G=?!=7>k`Pg-*x5ap|41DEHQdpvE*+BQ%H%1 zt=PFv@RX~S2Idypnq)>33{pZL}NEn9r^7jukKhtF!cv z9|3yx)G^7IWkAVjv0d@15c(AU-rM=u9-2&yGF@Y@p=a)sV>ftbu=!C?y-e^t_C3qJ z=6;xql=_<+jV7Fso++q4|KkTTbO)A+e_4jK3yyBqDmqB=rWfD&{Tm4`?A7b`hhT}{ zvX{O)Z$V*Kf`m`?Z|H0&|26eW3`kq#0;B1_fuc%~JFKekVcAkGqq!NDq9{ zSNMioQ-G~o*tZkSOY^d=6CRA@MOyA^o?4+^q~(V)8LO9asB=c}@+va+ ziw}zvzd2#6rBGB>-d9XmQ~5@VB@H#Iv7ZY4l%Tu7Mv%XY1SDck`TQ6es2tOsMVrn6 ztzv#-_>K;s>ceaQ8_qDKnRf3dEe$#Y8g^CJ@If(Gzv1f}H_ShCJNQ7yE9|&%FIrRQ z2o4_cbJ8leKnhndRZLq4X;<6o)=#w~wei10TC#pf>a$sWr0yAZe~Pht)#-q>dadi; zJTrzz{DJ{B*)h;kSF0O#R}y;XUFOzC@dCMtdLzEq7pTAW(v%kt0ri`RYW#jZAQ#S_ z{_-IbdI?{HWpZ{vi{tDsN`g8(G&6i=J@poAcVvG2=wpZ7)jv}6ZvQ~iL)vo9(gmbC zI?@*g?;`b^Pqz8GbflO(YAm0*iv#=*f({K1VEZoSLH`?Vn6saMVMUW5l%3cbyg5$} zI&;{;)wkneu+2jM(X`M~~UTWFc#u)zkzT^}3->MqX@jQ;?nVv_H9l=Pw{Z~428}CxiE-ZE# z?MBk_lk38oDzPi~R`cx2U0Cf}ezI1)8=j0DptosIprtsc=BiMkX9d^@V5rtXhzGvMi%);XF27 zpalliP2>IS%&FDC9iXP~?b+AH+o5YZXLiJ^35Lpdolg;M1BzqPNctOppw!l}a}xFd zY2-Lx)>A#`UF)dfl*$h+d8eP)(eFdT1IFa#XK%3b?=hXJwVFssvST%>j^SYH1oGXF zLGnLg4f!$?q(r$&bR8K((nOX1QOhOYal>r00-Xn2*T|cTj_ks;uVP^aPQRdhevvuZ zeHc2E8Fnq9(lF4>z41q@56F3!rMnL$1I1>0@qfPifkeKtg?{lH^d@f;yX-L!t)2&) zK6yWYjCBt~Eu>notRf>QCgcNl%(=#_Pz%8U2~XAoEq^3CM<-n0IgXUgdIznQWRaAg z`L!`M7kjTbBM}k^*z>XQ{FX0tFsT~32 zt+|iu8e4%pD*yL`=`SF8^T;T?uY_LSf;xufCTLydpgGmu3F(gtlx#OPW0~*aj2`t| z?1+t-UP&v){-9W^R~CPe^!?hch_+TFr;T@tq~st;X2?jeXg3nAURS((O~#h8JO3r_ z+li@i)fVa|x=?Pftk+U>ywkF-f1+ z6hM!QlqXq`7rS>)$lYsC-YlZhdBGd$hbW>M5;}t2V zy*aEhtTS6sN_~`tT?bEDxBSV)ftW7dzw4InDNdce@ZA$hhpVq$Adh3;%pHwmA8%tv z_i(M;$Xcv$i<9mBd<>p$bN)@Q42H(`7h~4d2GH&Qfhxum4TI|!iELjbAYIPj-Lbm> zhVHo!(w)~p?{3M>zYZEgTk=s#>gqx$R2A6#I)I8<_HUxYu8AS$%8^%mypBEH())~} z#c}Y_)v#@kBayVHWqkMYojACM?oIk4j6Et^{A)jnV$0?ZBM!qG(|4Q3j(snL;>OGi ztLB`c?c-w6=!vDfktw3nim*m@F0Ch%+ zZwyj{AtW}zdrgH3R)yB`#SP|Rr$Td}p4oZqJ7@X6E%hu8DOkil%9+JMHos-^vN`Nc zIBKkU^#Qieyniw;GmYgh&u;j*#ugs`JifW_Ndq)oOR%{(o(EmFvQouYC7?fo&VO~o zb{OI%=13FGVIY9hX!dz4^hh?l_^$f`c%c869uFC^lk|;hOkFW|Z0m>Zqq5j){BFpa z8-YES^zUXEisOLOln3*W5Do^^TRaaA#lCp6gNihBBuIuuU2f)LZ6~w+h@lSN(ZBdu z^{yyX`gj%ynQns)V`fj{9$)A+>R3~?Xaxg3vnO17*TR6yd}2uS2Ow^q9iRI23)-SL z7}PlPK}oOZCaHoqm@Iy1+j){a{MOo}&cWfBm>TdnA9FsnO?Nts`fRZD;hh99@gf?BjvENS~Ku^^2>NdSI z&>v@&;3g~#{e(HxD(sfC*AMDu$qUtav^j_Ejy?#Tn2rKsk3SZg3vdaf8_9tEA(9C{gpa51#LN< z=aLr1pnMs#&{Ij5bLb79Q1%^KS7Som$>I|AJgcWY`9grN60c}3N&Fd*8;s{U@SgwEHGBlZ0fp^-<7 z*){qMG6c=uwN3BEmnxlF>$m7(^LnXeBaJag@Xejcm6buF_20Vhdwr3ZC2`bRa5r|@ z+^?4WJ%md@F*gspg+;$F_^`VL;fb1I>~&%>)LMtDE{~0Z4&a&&HwQzH=#MBu&=DZs zI%8_2ISbv!1$X70RH3bdZlRVm36)`d+)zzXIQw^Ti2|pw{IA{7V10$9++q-UkMtC~ z3imbgiNzt2uakf4=x6LE9%ntSxrZG}@th;$y;z%eDsYf|j3 z1*c(lfqN)dE5`@2^oF#z zT=v3@S&2IPpU1Fahep`cJ{9a}lTfL7`yIQZ_9|rW%E0c)BEd~DAF#8BU>#kai_KPF z$wLmxnBP2RxYolB;-7T;f zZfxH8v>#B?I{VDCb|@KKV`{8uk6~XIT^cqo$I7pzO^bIPVw=|2ZFg%^kuZ8UE{^7h z-N#=9UYy%F3zd?m*Y8`#%f9+ks$M*1yoBSObl*6TCNU!ZG`0=RTz zptB2z`X3je&2n#|@XZaV=FiWWb=-zv3tc@;@pUXyo==J7uEmxPvE4S&8SHT12C5WN z?25}F8Lu70PGh=n4vDw0jVZ**F!Lr>HF833|(h?x76o4p<_0O!`?y;P$2vZqe})Wbon2T#}19Gk3s2=u=Sn)lykfdR_Na8P~>((-J{~! z^s1szzCQX=z_bxs7QRTy_YFb&*VVEtfkx=m{hl(=ei7R9Z;!5yKY$jhyT7S}Uqjif z%oclT2fBLH?{QEZz>1GHl!}7g*qZ-3=FlZ(Z2yE*MqDY_u^=0v5;2c2KD3t^i*aJ( zA6Ibr6;a}y%lmVZ9J#SB$xn{uhjLqJR`PTjN7hW4??`{QJ{pu@ysDP6h~ z+D4@mmzLF_US>CnY*+(wOiCy>3;Z$VL_BlEM|Z4w=D0Yee-^PO|4Ov}61KlL5zz_q z#`YFvdiU-$MD?r-)}QuajbM+(uaR9$vS+sGsd@xC&mUYr{LKgIHZl~Zg)c&zRjtKH zryR7G_BWLr@`4w$n!cwb)u6>^C~$4&2UMiADBZcn2!5G4Yy!*TSZw|4v*^@MY}BLC zN#tF{wuSpws_FW%-SEcj>rcYiHZ(o+=Z8NwvhAkvs~o|i-AEdr#9;7yQ~vVA7#mc` zHWeHYoP_2^o__Xx33wsmRh!q25mU!g{AHVA^1F1C=GbxMCH~y0HWp?j&%INfzpL=5nt5 zEQEq5T;3EzmKZeL!4S12fX}zW&kVd$!ltK+-y@c%2~2HG<`^JnKOlz9<% z@|O%NQ?U85l@H@k4OZRPQNHEMg2_pWJXT7jknR#-qxv)%s_DGcq6|G8@F$>^sq}|#j5p6T!KBuFMiUFvr&M|)5vL|>;%;(oND4p zDxi6vZ)D1&H6XHl>s8)IgysqD{o^~&p{7pEw&QvmP)SQ8as=tCogi}!O-DN*2stlFy z4erESwnKJ^d=m|oJo*~8s&}MVW090IUmnGMtlkKIe2k|N>woC1ES&p>^-@o)dC0Y~ zik%^W^@-B$uK*1GOJ~ zzAI20L8bNO+E>!;kbCysK2_!xyc`~BAfr2jxt2w*1e+GIQklm5R>5JcHQz^)XJd@D zf}VLQ1Tw5>*5N1bUB>LW8^I2m?O-gr^tWNv4sr*wiu(lfp;Fk4{ky>))cksLcen2y z)VPjTJYxF+&x@R|l9PRgEUNG1jD9ufT9GQ8zgv!ZuXU%6df&jxYem5Pb_Hu9FM5RK zabb0q9RK9%0zNYrpK1$=$FvKEj616e5Ew8kVQ%OO1rqVyy(ETEX&)*7+-26kt@=U@FyXkCT*uNzr=-OhxFecHL2ua7f6eh5pGY% z9M-YC!2huBq%h{jJ-YwIx)1%~L+X|aH6(>UmdJWz55;GgKeleoLxpQZzaf1yR8%cb zGz2_^l2Dcjp3lXQ_JUxlbF&4l-#(lnD4Jl_=+(ie6p>iQ@>YJp*6E)veKV!_?+BKs z=La4Tc!BvQi_ARcy7jwjP!rA#kr8O+}&d&QepoHZ+ZN9*AIyBKlstJwKwYKY>J%ye*|hFt%MMG1{MD5aKRD5YhRPxc zy+$5LbMD@S_+W;+qHA%G7ez@<|9K5c)H@Pb^97-}^{Vy}b0f&vyx90uP!pnig{?Mv zd@)!th}BWyH)gF(nkBy9hei5iQ=1ouvAB0t@u%)E=55Z8x=k*># zb~uYhf#DA*qz^X_{kKmAohnhMYB(XQxv@L&o+O0x&gLdNIbqPC+d;=WDwuh=-+Xm1 z6!YKzvTqPRfCaw7GV`uP%yvq-@*s;HV@RL&+#*_o7th$~{Y_DjmYJe3a&ZLm64?Vo zM=Jl_+b~+b1D7Bhr5p^ZJRx>=RAlpr7&=5!lX{0A#N?UP^;_konCp|AC4F`V^UYPV zphOR|>(y_&jgn#9R~=WTllov{RAv+F)dYz%A*?gIYmgJW)RfYIkk=}ldj8cD$hP(z zBwts7cv@+W3M*aIaqLm=vunVFrx^|*0h*XS+L*<%e--nn`+et!Ut`vP+rk+nKQS&a zllhhK2IySnpHW6IChE;vIOgcye{=a?5)DKO*=<4 zeq3jgTGomQ$CWkTUmn4%-&HFVqN|uwK0UD*WRDq9V%_!iOBg+Ar1E*f1MJ9S4MIYM zAfYCYC!l{nWVJ>yQ#(aM_KJn>L<1G1s}yJ&A0C9TUwq7eT+Pv4Jbcid@)9O??3efC z{5MaDQwJUTBm8HFmOyFoGmRE{JN6ED?EWYj zTT(*S@uJZAx(-M*;-$TvdkH))S{~-@IE5jv0%wjD%VSEG-**YC0?ZQlI@lavg-;vU z>!;(tVO-SO)^MN|8r{C{mP}g!Q5yL}lkd+!+L6n}dMgu<>7WrI(JKL|nbi%}DJ>8w z{MyeXaTrbDjno;V2N<_cY@4j~1E!yTpm45*37<}0dUw%&0Ta8n6xbM&~&~L!$^c=r}??TwB6|n_3kvp)RWPb(y&2FwA6x* zyB4InIT!T`T!(ncNXg34R(R03x=F!Of&P->8}X+F@JVbet`QP2WlwY^VB$F@$w?=5 zXOv-hO_Zdk#~4WWmoJh1sfS2M7U%L^R!9})MRdN+UQNU}Qz6C`y;GQY z&yMq2+ziGoS7Er!I0lrS7j|`01*=9r!DlT|5JmGa)k+lM$rL?1&!1g*BJ!49(o_V( z(m8T>*dBp;19_#aw`i(8hhhVHqHO)u)aSVLfBC1`@0E$emN58}|L5QyV3pbK=h`rC}AF40{u@0nZ zUbjUcBwN0e{3j7KA}>83Bm)d!Rr-1L6$8eQUkU7&yos^r`pTO%pheO){BYadz*vTlUBs)BO}>$8_tV-O-dMSnhk55n@L_LM36A>ebv za6b8UFz)|izDP7cH=*3kRV6Q(i{cD9#}HZ ziv2hC2JH%0BJY&!q5n`5s|ee73=%eez0al#y(;%{f`~HS3hi@grxOCVgOtQeM%fVX zjPv$%kQ4;a_L@%)6@#-tR1@dKGHTiS2gyMPdJUiN@P4s@0ntN(+0Wmh&+E+!A*(7h z#{9nI_!6+qjWG?UB!!1_O*_cQ2mbsV&BELZ;0lZ*4-ZA6$dLo|LQ4MVmYZI`X`X?8 zWs>@3hlJ2OscyY*xE{@Nlmu?ISb_!bMF*2t3E+M9y!Zq8lkiac0Ot#KA8`H@(C#f& zhNrcCIQ)mb(ZwbAn&8Mkj=A8*WNqGq9A2|$u=#Pn#&?+yJT5H{tgeWHyQr^% zHo5HN6JaXoMzQ!QeRdZecheY}-}<1M(w}J7)3#tXE$3#cBn~b&#I-pamB1Lz~m7+x%KA$<@kk$!_~K5|Kk^}pHH-smydx%OUWS* zoi=b>Uq}(A*qA93pSl)wpc~nyS#f3)RWg*Ag*l(1m83`i--!o! z|8Dns*ZeuutfAGdKYs``48Du3PO^aI2N}Q58Es%u81VPSrzyC7YLDMGF&njaPm=9> zH-VNashO;o`_a_mf>U<)PrS-7`s8%?+>EXQmpQ16Op!8-qY;;+&}TQ$E9z`c(Xr1?HlU^EmRms&y! zY9gZ9f2`|Tsk0spkrR5~ZxPrkm&cM$Z&E9h;5=2#2e>M)(wuYCFKJJHmaW66) z$D%4RMxIb4P`E7mozF%WzSA(bC`+JE-?D*(j!62bG>6 zGU=vw#2I;h?$C&SRFS4k%_ZDM)wyFbKR!N2p|&@C+gERb{PAXP2T}%5t>Wi%n7#v& zjb^9R@he`}p9#qBnnacABd%%3ZlKiW^rMc`Kj6~)GEZZ_cc5G==~cZX2+~#WEQgr& zQ25=aR*|JNR9K2=T~vCBGGt%gW`H>Gnd}MNKJXW z*MYLS-P&u?r6@HqNmPxn1FmVd%M~kM;709dHSe=M043++Jxe-~XN&o_%f1Gb(c)g+ z>Tk!(K^ua^#H(-mY)c~RjMP!TnkGvAY`bJuMYPBJ?oQ13M(;`m@lI>GSWbaWG$_S6a+Z>{!PSiE zkZPEZ1XV*kU4P5S@ zvs2^_1J_6W!h)DbNSi8ZJa#P=d8lK9=khcjcnKXW60}o6J{hh8BZ!R z0`m;7z_LIoVX8Gz?k77LGJa;Sp%A%2TywvuuU4u8^jlWSaMp>i&Pb*ty32sHj~(0E z1a^pPA>*!{WPv~}UFxTh*+!T%+aeN`7m#Yll~(K0S>o&VMQWleyo-=SuuBZb=pV!I`kV)7c(; zVvyJrtolG~;W_cQ75Bx&*m%N^l9h`*lGQ9zAb6ltd`{ejG%quKh5{YDcP+l+Ey7A?FRhgkDRG5`r4D-n z2;@WM2eSF`X{7G_cgkpW&Ye#8!zs|C49PRLR3yB+P#0gMzMul$-ygcF*J zEIVad$ZdDD#WJQ4>BBhXO2fl|zwc(IMXUypu|3>ToHj+F4Yw+lhXcgXE!Epp9qS;n zBJ{EO3mY+|h$>E}Y7Q@QHK>^A*ATb;cPxHRrod$rN4oSFePA|lH>%eCZ~EOP0>%d5k*9?&l#X zD{Fx>YCZb9KD>C-|3(>>nBn!p>W}f+1|Vr!*e~@<85FmjcYYie0lNS8AD%RFKxM*^ z=pg4$y!nDxH`M<%NNEM%IFy+HYB6c#Jfn&rl&T&@E0c?=RK&HaiI=Eah@7wcs^9`i zYsRR03TQTGES6qg1cgb{#ai~aDDTUE&~4=q>g?PzN*OD}>*sCA^2HWG{SDuTJQ{Ym z*J_k>)o=%d^ECPfUaz4}v}3{8yIIsb+RjGWa~Kc);Lz&#o&5UC6%9KDrUFT{akdzKUj ziqPb^qr9|$2Ab2|mb(4j2BjzhiwRXdU>t4wGe8zN;3`O%Abv>_sMH_>V zxr})lv?rc^ndI~x)fn9brwzKmoa@|SmBA!%vgM+3ZmI_J=iFmGm)TH5eUzG#)Eb?x zZB@kt*r4NUURSLb4^Ywd`>bsXJ=jn>sFCG&gKP60WxvrBxIZJ;XqdQ-8YA*ooHl=> z%X@`@1p6E4I_Pb0TD6M0QanrMq2qABD>8+`|0;N#WUbAVt^?;d2leZ5l!WyWS*I^m zE$DKY!uiYD-{@sxQb0%(L0;F0w*V)=9$cxw%nKKkSZmT%*F zM^Y-$GQuS6hW;h=8GXGmZRwBR?O8rmIbCS1Ut-J|&H)ZfHjk}N&VpZ#CV5$o?*B=eUR87vTf9YTonT40<8Z z$NUq~^c?u<=^xmx;RjtYy*;}6Kj{9L@5bZIG7LgC+QX;0F@Rcn*yLm-noM2uY#Mq2 zZWTq$MGPk)xMO*Y=>|fOO0Q-RX*k$17UPFf8g$N7@@cmyz>u3K=f<1uFyz-a55JFR z(aoVm-{CGhSSPiON8Q?h;IS)CKX0}C+O@FrdY+mRVAi` z41J6!e-|A>RfWL@BAZzeqi7I*w~c)y^M3#U0RR6Cmxn(UY!t^8(%?lzA}bOZm5P*3 zRvAe}p_HOBifm=C%u4p&TgJ7wWAAaVaqY-xNJX;6>mPVN&vVZ2obUGm=ij%ui{Ey` z+dCb@3)3&aw?%pW`Hxbt4Odn-kfuP3>F=&*H^$L7IEPBuz7_qCJRCpFeGEO`3G4RA zFaY;~WYg)CdU#`FD8zZ60X|q=b&)cug15icUd>XOfX$VQ?wYBVM<4JIi zIno&s{s}Ehav1+(O+f$R>ei9hOBl3yPBYXz1m9N-$7qNZ;LH6;c%pb1+<6L?*MeFh zh=1MQP(2QUQ(Dqv_cl+vcW1}Yfb#r|a5tO#B1G2T1*GYFg~h_&tOS`cz|NUWD793stg z8=YH+A>^j_7I`ugoR-wr?JJ|v?NZH+VAt0e+DISx^o15iO;72r7U^KxSSfZ{}n=uzJ%es zG#`dAHqt>Pz=aAEr@}M@1tc+E@Zh-R({t!gI$L}rfDc|hy>wlW)(#>~zBr4_%0ZHV zm_12-KO_zgPXt%VLU?jWBLAQ!7^|7lEL{49L3Uq*R-9Zhk$dIG&4^4)uKRwcTs0lz zOR^U~XDH#@DdsbMhtt7r`Jf&{gb&148DF?w>jNors`tg0KS8n+-HgdSdWf`q=$+}A z0>;B+3A=4G3^|raZz|M{NqHK-i#~tB)Nbw7d*A6Xanfsv_R|~&vd3)6DyM*B=^Qf! z%N>aOZ{tuWg$bnAZUkOgJ_u=i1s9_JvO&C)amJ#e9=L7YzT6mg6a&QBbT2+Vg-LIt zNlP`UM<27y(!%Q>KgVS8Nd4&jW#}V1 zMNAkGgCH7V8J4!Qkov=5WKgsVa-^%9|`^h+PUq0=!7K@;Y^hgH}h zUH1_)_d$6eC~h{hB~SxFuyHYeB@faP#Qk&R|3H8i)0EZ5J`6CW<1{{;is`iH*0^8T zA|cCqV$)U&^A24(;BsawmZ<159-TN;goL21@{J>QnE(0h zzaiddNbn40pvln3WDcG2vEV0Y=EV|IC&Uf$x#D+UsSZG{pOYDs(n7%tSF4k=tdOs} z&Np>>6Ebp3(l5`I!3W>urd=7QF*NgX-yxMK%rb23;J74+1;!jWp(TTbRG*4|EmLA{ zR?VbgQ#Z!l&UUNy8dOgdxncmD1ube2K;NIRkord$D9Uli-yAHq2*NBr#E%VB#g- z3+B?i;M_*-T;~-F8E$da>z4$fu%j~Ykg6M$-rk&%aIk~oH=;JaoKBGIH0wV4eGEeS zEwYuv12Eh^rQt%Y1QK3FFr4P;!xD|yy$(qyuuRPP*7z2L-l8C;w)zZ?ezZb#jO{@Fm86cy>M<|!zPs%y-LQYiHCGpV{#0jV5D9K&Kl z`27A6*ZMV8%y@kCNUZm6ELyzr_{Fx-r}Tu zKcxh|6kTWBhMOQqWV`Om4FZ(R^gPinxd0V?-r+^Xl~8^_D!J|JS;!w}8BZ6Hf;ej9 z15)2)F!h5Yy$S0kAbBu5f zqE5DPu7;FhWa+b4O-_}V|J%%-)+8P)d|GK|Pl{l5!;|}^yvu30du-+A zqcM!J{Jq31>ID&HhwN21a-e|8!bkP@cc^5$PEYBJfTf?B^(9K7>iltAI-Nx*q8h&) z_tz8>o*v<`t=fYjVGgTuk8fkX{|qZPI~`WaT2finWMRz>sf~@*DXgv)_-N0@xs#WG zE)U%on35dN6_Z>5Z+ZV5Sijc?c`8i?Z1Oju;wv>-f-4ki(q$M=`LRNc^e3OM_kKW` zx0uAdgb94KwO9EYl#2#e&PT723NYuUu4lfT6qb*%J+Vph!kS(ktyA@ZSbH?bVQ-Tr zR@!pW>MK3QJiYO$UUDLOAGM~;IUxY)dxIleMdzS&A;(RGEgfnIKMZ)2oBKHu3@HY=gdTH6S!r)v? z|7;-)b(u1^zMVV`cq;efP2RUqU{@-XP_bvnzlPP0X+6U42-c-p0Lb!-5)<{y_QGkHSkRhb800$ zfP#t1kUBmB)P%A+e;?lq4R+=Jp~QA*SPZppO<;i9Z$5!CC4o>vc>R9L{sP1vwoZAi z(~e17;ZiypZ?SC2O6Jg>8(24Vqn=hM6C2~KZ_{blVnZK|+O^6CtO@SW&G(DOf@A6s z?C}{Lm)B~K5TdX7fn|k&Sw@=g z{)oLq%rh!oU=SMJpDQAt~?KA zuUfO_GeRN!Z?9)u*d}KE_jvZsEpe>j@6xJzWr|JT&o;6*tz(X8K6AajZ^engP4B-Jl*^Yx+r`VvWPgTNAaWAyxE$XOx z(?DBFHdnus3p8c_?A>Fu)BiFS=?9dOkVgIXbcNt&OkB!tUGsCtDzO}uVv{%6^nhRR z#hetjeNQj0KQoB!0aANZdzi3A@=7&#Nf_2@R@$WVv0-j5GlTk~EQEN8zBS_GfwG^2 z?EenVL!)t9P}FNvXzP77ST|4s9R?<>+hl~+@BW@nX^)^jf7h7x(;_I6V|c*%a1Qn? z3cU-VNx-7J!>neM<5)jlHC&*gjBP4>QAfT8Vdt)Yd&Iaku|2kP&wSu3Y`U4wYbM){ z6&Wn4Py8n_vj5Ewjl2lR2~a&DO@AM1qeBHcq`pDxaTm#e`W)yyt@vw(eH%Ij&s8Pu zj)YcPWuD3x;ZSQFplDD^1=)(Mp6+Ig7+d-%H^EB_t7sYpoMoS3v!sF0%;nwKQ8m{j zapVnl-MFOiZ%Pi^b9bL0YF@_13!lv2##>=YJcI0n=_9l?oLW^=xDJI|Jr;f4ywGq* z>A*JQJ!pTvPQl@40bMQg8y`Gvp>wf(UCccPTKAY;t#Y!1noPa~kLv=Ew(ane?>951 z9vLiqTlX7lwB3_c6b@o5#kGPn@?Wq^)vsN1iXOYY49EVPRmTpO1VK*OAZ&~+<+7OA z@se|uPoIINs7Mp!BD_ur9E=*8#Jh2 z_L=m003ELqc}{!_1ES5S?Sg>-5Z}dB<{q4Yj#a;&dV6+gq)iJ+eQpbdWwvUq>P6`H zpmD!5yv2(1t((Jb*4W(o#yn>740ipJE%I9{MiL#7HSj|A&VBe+o5zn~yQS`%+n4`f zon^{{sI4i?66f{5Wwih)r&Wkb-UzjnI!C*{jg?|f*g_cihU#ma)1JR-Qr~KC< z= zT#^bS5B8e-49<4{LDG2!+CoKPY@M$AEj(9_m0@-qpGKadv*)bRWZ@AgUEY1t=TprN zS1ueB=2Zvcr~Ryav@+1^KGFVqRTg@uc~5P4@cK z5K;Yg?H*YG3m1FVm`3NYY3onzVb@9|nv)05s0U)N>%Mp!(=XU}tEKJ$^+W7wrw&`> zdWBu5eF!SWXR-bU_2u`xx|p8v%i7s{1aih{ooXvqprKZs?ctd`=(aQ+3syW2y-H(& z=W{}!FP%josVD_{Kfb0Co$dwV%aN?4eKF9Ka#kt%r56;$5%{e1tS~-zUiBPf6xNn1 zJ1L1g#!eN#JGU9-v8OHm?3WDZ$Hh)J{L{;Waa;mH1_Lo8Jh{VJtyr-w|#(> z5_@x4PuAgG@OtPTe+()TrnH&P3AOJ1JVx)hKi5*hfLvI6t|(NS+5+Ko-OMndRP2}q16)fP6? z!M^kPihCZ?VSjjjU&YjJ>n>&uhigDtZA3tNuYaJ1RM;S;8^^W1#tB3vjpVvry4neX+ z-2l!DV&6Ybz2hppNV0FDzLle0t*0Y9$EVx{2~vX>Q&C6>08hnMRBG( zgdNC^q+O=$uV8?3&TGY88TvVW<{eaHfVjQBGI~@JnuOD7tsZDV?pB~sZq+bmiSpuQ zZJHf_IS?ehz8{IT%Ub)XS+JjlSyuRkFAiK#nCLgsLGr@4rd+$%*mt#I9|NT%c5Qmi zJlNrDo#<& znP&EMwq}U2TNk-VZ3J~`M=r6tptBQ&_I zX{ZJS#?UwE0^HC<<~|<1v!6(Lt#5-X&4DawB+pv67Y6+vOsCV?!Qe{{BiSi7=$~2R zRnYtlB(dR=K{{<{^h#q?^mKXt{KakP=cT1){lYdu~u@up(_&4+BpO550SEc1ECekJTN5UxgP#85jyV``bi%69%r?OdHGHf*yP< zx|kXVE#v_%maM-}5az3to8W-yUE>OF34Yj^P){r9yun))!T^r5X;XAlOP&-p$|7KFa}amEo* zG3b(?kym?=4j9cBv?9}v8UkURA`|^s!+oSQV^tZuq9k43$H!woS896DA|DQJP+Wnd z4{+H11=H=u0UQcG_J_W@0?Bfx@2Qm5AaVTq4Vm>KtS9~wi8tuSc<#HZ+5 z{s-oF>S*xa=p&?ryk9p)^fQAoTjuz;ORi*WnzwHG^w|!3q#3vZ>UQd-nXIDJw1&es zIiosm9LM2_(rJsu2^`#{f5%Bo#J;Yp3Ub-T*lFIMd!d1dRRZ6uLz~6HmybWOd_o** zi+deD{zwEOo2R`rwITFRc19}S(1RgDz^SwuEf^6}J*s`N8-_(y6l@#e5^b^lfxR>P-qOhJ%t;XV#2kHx zBec@g#=FgNgk>$&(pd`!^Pk;dWn{y?LoYW^b>?Eb`f3p@4`C^tj@FvZ2qe6ElcDe= z4I1=_!V@2dfOK71var!&Cy%_}->Iy^@RN_vx5h(ZBv6u{PwpiQD-YznZ*~Im$7Gpq z-n<>3V)3I23y1oOb5+;Ir67jqZnhS?B9;YuZ#eFWz>dRIY)ne5*k_|MMA})}YZcKX$*sdq{~<I+`vJRU-Z~7CxFS^~(+Q<0!gTpEmUYOKTkMhTiIROqDxii@0rE$;t5i|Cv4=ox! z+{tIJ_)XTU>o}sMq7a@|j-$rUIb8k9apdUI*YO{cINkvF~5@q`bG0~kYH-i<=rFQTBu(i-#~4~dH{;ejD;M_K-PE>#I!sEL>U`B1L_W_jf!|AI4%k9nkQmMLZY!cVun1DyM$ey z8v^>2kvpDsfU3z#0f*TM?dyy=IBKGB(LC4zG#z2^+>8C=Gz!);eb~$Pto2(IHLVWxKCdPN5AD=nfiPgN1230PP<>m!5`Nw zP2)7Mw~(TdTzLXpOJe^Sz5WjiI$I@6)aD>_{*8N7LIO1PSWbK`ihK0mkl<5Gy5b#gX3>+T^Ju96R>KihNTI zN7l4IkI0;>!nY5%2Nk6OTcH%a`Yc~h{Q<(iy+2l`M3Epl%EKzwf-MYV)c3CCWA6be@*zVu9Q5?vn|>z|NB4c_ zq4eg$F;%-WtGd!SDv`wYHnd@9{wO&azL;aLw{LiC%U^7jtNP1lT#5OU)aPW!ll}() z0RR6Cmv7i6o=6RHTqdvMR+%5h+F46p=%c@LeUWm7EY>wuQWJRq2E2V-aCmFtd)Hyk zK>ote-_uA8;|Ss}??vjbGzFD2gE-o{w|}eaC^B+J9xvW6zzH)AnEBa-%r=E}&OwKe z{#GM>6O)WX%k#ybZ<}Iok6Yf5fEG5AAMNMo_zm%%GMdci_n_mvlNgHUAXDA06sJ8@LfR7zZ^6RAp4p#}$wu;ZPWzWD8*m}>u#RYk)C8YIu> zJ50nw&uWR)HXRNaN>!Y)Jh&d{*~!80MKgd|=8}C<=QB+BZ#hsNYYR-C7r%;>&0)-O zmyOE!9MBemjQ01>Lgyc|Q>{S@khmIx09xzV~hN)nH^$4p(H$0t`vq5s@=d5*Z08KM#*oBHd?Fmeh%3Z zZJ1EqVE5#h0x(!&+w;?uVWjHlm%(jCKq+3JE=n+p#|x4#KEVc4D|BWr++oWrR*mYLqBd4h% zR`NKlJhwE1qFWcQnS9FxlH#8oD^LN{Uw8kRgfU?>P~FBfFBupnBPaBwufT+i+}%a~ zyTF_ou6J|{fN`(+oPA#hU_|nhhQ9|HD5pR5#a)ntc2%l>K)xEpbn#?;e`bpfs}pnL z=N@2BhvRk!Y{Q{58BK;}Kaeh#v|0PG9x_iFR8I#4;l!E1GvU@&$dnkZ66jSy`lh4p zPQG$Dw1+$PX_h+nxIEmut$r38Tn}@sDBXfM+3Mi4W46$KpbGcB`+|lUeUHQgiVOOmGC-#NAj0#@RNOvYH$i4SqzmRbl{bAFWQzu?I+l zxpxfwH$jz^>mT*h$?y=aLfI~?J$y-;n?fRytmJEJ!q#P*`Xlf@rQF^Q_s-9k%- zy4nB2Pp|RW?e|xrCGj^5##Xp4-q3-uz?<$%BhP_R=cJn9(Fx4&c|X0f9D%tfCS-E! zMxbBhKkrtM2}5On7ETl{K%dIH?>yg%phZag-{Wh8XdrFk_U6?#Y-x}6U-tcseI8a* zTuXU4gk{~-*j1!oICPUebQzhP=I^hsD?;XgyXP6MPGp3c^qFro#j)#lSCy4|aM0z$ zyEJuq?7m}q{=gJs{Z{vF+S>DwplWP-F_sAJdu1xpHh+czGTSMoD`#Oi$@{}j$B#ho zOKOcjCIw6x-CaCCqk)-FmLq%WFEChT^KLGx!RYfnlIcdGKy%Q!qMULPy7(%)KQ@R$ zm2yg&><>N6nfp~-vt0oRN2A^~UHgNSCSo?B+yzJEYI}nsw&3_aqL}x|MPwd-|5m;E zATmu-^lhr2<9LAC)yj`safBZ8QDEUCQWLZ`u(4f5l3IP(sLm5CgZZrE8hKD$I23t> z#|wxV1o;Tc5>U1BKYJy9hmnW}RmxOf7*`McZ~k3b9bI_pXM_d-@{$) zFrWw{x_9d1qI!U`YRkAndJaTZ%_r8{hoSKPO=C5somlQ-t+mld4@n-LLUiS9q{env zSNK20k$RqUUdGxuuIUX*7oQ??)44QNqjF@twwgKd!UgF)O;o*2;yApRD)Vfi1}UjW z?k3)Phy-ngl$U?*VBQLkjpVxysIZo?8QJ(1NS*4dAC2pPn*CI>^jav4lucI1Cf`6D3*?0mW5khmyT15QOG1&%7V< z#@GWQlY+5ADpilS+Z0K`!p4`Dn~>@uq$>9^cFtRN{X`omT=t<^}JXHgLai`Z-OsNqVrbFo`mm`4gcIM&l zkhT1O>$Iplww6nSJDPHS)&TKh0$okh6iW9K*aE^xSV(`#?zLMK2_6PJ&q(SZGKjns?3 zL?w6lASq^?!&j^bE06A*nhtseS>JbQ&du3Ddv)pk{=owN9>x3%|wHI6`*8GLB z(0hz1bxs(s;rgd9r2!0q-YU%N~$} z+B40hvXG}3%UL69_HGJW9e&E|Svp|vs(%%yY5@)oJo-x z=y{lM{Ly?IxOvW_nf?wt@)l3?_~~O|t%$+|TPG9_KWfB+BIw9i-jnym3`akGZIOYyx&%*}VgCf@Q_Fz7xYZRzk&8G#E z5}gd0Ob*NlVH!}q5(eT|?|vR>fB z*+DwW>d)NUEuh>d{Vc+My zB#)(+IB3Y)KYc3|N4!o6rGPh%oiyFZvdaj^91@OfS1ZQRowPrR<R~b^& zvnzcL4DC-LXGzK~CI}yMlQjP@yl{4_cMfqVE zA|`}AkgbAI*_z|Do<$gwkqsj5F!H z^V*%^@i#Oe4@YsXG5xnRj)W#PlExfyaH)|`_Tna_h$Jc==6i#rtdGC`OXI~lwN2V= zw-@0|^ZRcv8l$1^QAS*AVHl7yrmX_Zvw*@~kn;5Y8n<0j_B4D1BbpZ5wjB3|QS0>n z+Rim!yb@maFIr*vveOo}sUV;!+s%L2LxkSF(gRYZkD#4%kbH)<3W}bV@ppYU!_2b8 z0*OB{h<%H!vv$_lEp(&NKj|1!O+54^l*@4_l2uJmoDD~O)7%%!~-C&r*@A0qdhcNPZL8`f&3?o77MKs>Az_7yKYZZGp z04*`^>*uxy(AV5J&~bqW2=2sA3#kaGUjI!|--i=@dZhL13rJYc+De)E)`%pzyDy&n zo5cZEm2LAGM5Ha&Tv(in!C@7#ejV?8965DQnpN!r4o@2FF*bjXLr3rq(|Z!B>iaHp z5)WZ_&ckFG#wBc%2$-7r`5Oz1Pu;!x!3fgHa^H;ak)ioThKNE%A#~ZzD!9p91&YRs z^L58FFlf@yPw?f0VF*@9HxGv4@e}Go(PS7F$z!>(&7O4n|h#KF<);}eCJ`-56dsnvk`s^o28Q379D^-t! zFN`%yj;{IHS+!kBrx%AU3?JCdTjP+qoZXiP5l9nVG|WLC>??b7V!whK5_RA7{W|>^ z>uh)p!S)gcR*2;9{Z zXp4kPL!C>{ceMZnLKB;<-^0()>$+vHm7yw7LD#(9<~|H66|+7jxWN#g%y-f7HGg$? z9}Dr815NIeJ#IJ#1IlT6gPHZvbtb6(?*~=D`rX&PBdJiR8fJ7X<~YU|w6fnj&)nv0;6 zHuO$%OX7Ggkk|w>SQLeziSo1e{2@2U-ac))F~S?upSUm8c)i1hpV?i1q8}rX`?uO1 z*+%S{DD36ve~%P@yEqpuPoxQ{A1|>@L|ReAYjVpp()L?_+7@Ggl;;9Qe4a0{XNAw1 zvrr$27oEOSRjAlVe$ZsI9E+K&{p{Lh`yl<9zVNnxr=a19v!=MxRUkxWXcP}@fgUOS z^8;-DK-up2rZfJL3mPEfF8@QvHrp`EcS+IW-*cx?>b4+>70vi9fcfWg;Qu7JKiu zUD&AC5cy_!J7%k#{L!OV1&QWe9sWidP&=+T(%ADF+L_+G<<7>&edL78kwO`X1tUxr^vm=p*01J}&Pdh9@<>chnyJt^9^vz$Dqj71N zK@{@qmZM|sh4KO|#bBI5&sJCOX3VXt@eD)wGFB(yuX2K!h7SNkg8 zVXuJWyLQ-#P=Y zei#G!_LsL&wY!1DYL^hWD<0bHi;kC^ABMUfVl?-U9gzDs#HVqk9G%~p+`kmwfW@Lw zyB~T{u;J5BjW;!E*e-l}o|3i!Nve&F!Y)=w-mk>{P<|4-$bOyX(=ccD`%Iz)(s(5Z@>R|l8njRUXvA$+v8 z%6)A8pr!xvwH7uSNirHMm$AZ6Ez3_(0Mm|H#PGUZ0Y47PTY8@pV6yxC;oqN8JtzOG8II&zc1Dc z?ik1|IFBuadwTl|FJc=b)Q^)GjvdB9g!<71>>w{*p0KFI4vEXb^Ye<>=0_f8&Dem= zuSFK0H^0NW!_h(?^sZuQc(J5f?g}Qxdrc4O&4M3aSoH@h8OZsfNBELw29>L?^L)$r zq2XH>&D^^i(B64bm}CrXu_fy2HA~R$Tk~-PPbRcG$e#H3$r{?s$oqJS8qm@qzPDc% zp+R={C!=f=s5C%1%x#98gZF1l2Xw(Nm{!e*X~eis8|&P(Utv*;;oFi1Rjgh(bjsc| z02_z-MNaPgf~eFnEiY$>txK7wbSz2OW~H`$2|2KJ>ieH?m0Q^ISKx7QfCV;2b4yCH z&0uxEmKHbHS1kH{mt??hiizt5R<>kU!y^_>_KO-}kWsBWB;+IwWqqq}CBBS6EytO! z^#YHfaZYVTe@_my7z(M~oacvD?ze&)iff^D>k2JZ_y)B2$dMh+=RgyD@Mv`5hT6Dq zqwTy_P~MX=sJ;I%WE+1SahxB7;5MC!;;nBnLj6rr!SZg*nXp!MJ?4cK2LeoZ;@GkF z`roXb{@vJUVx!5E;)t)_bsV@D7K6>RLVn(%!PtE1H$l?X0GlLjXJYIsu`W|MB3N-N zR?b?@Ds8U8LPy?DM?e6RDpTLAk2{F^6k_pzW!E6Srhaa{(g5T~y>KL2%R)tQ=d}rz zPf*LN)9%bK4GpLBBuOXFLlc+6xgB@kL6ePP9-rkZH0p`OlbcwfZfdvj+zu9~K0Z4U z^lclIZ5O$FhiM4er&)KDo7zIeykNy4={)p^XW^6dZ>@LjulC| z_djO~V~x@ReG6p>>nhaEzBbHZ{oB+n5qe`--#T_gNsR~V^z&Gc>a}8Z-SYN_R)bi< zWA&P!=7m=_@#4@;i^M!4nGF@ zJIQbPR=S|X*fO}sQ4`8Ndne^L)1ks{QtR>-HK@1`|E}q!LwQI};4cSNC@GL%xV_;S zs&UA z7Uq23qeo4oVd1W{PTdQ!SUh%GURpF1OSx{?+KYr>NpT7{rypWbcj&H!Mjgx#@|@!f zxQW?26!HY$+Cf!jAqRv()Hz%`0O8x8x zhZu9nlA+#T)f$9cyP~#?^l`|)D`%2t(EhC25CjjljO8Z5E~ZFcmK*(cy=&Oc-GK(J<4t{a|~QIA(QvsI6Mmuj$`s{l4=dX5C=pJNDnPwSJ2+U-RW* z>b1)eKiWhwZqAjq-*yHg!VL8|tC2w@SkL-44lbP9f4gb*Lv?94I| zqAzuETAMwFge`}|`pc{#`C7He8+Q&!U7zB9?++PLx3?%y&ACBx#z_54&pk*Wm&Gbv z?uHnm{OitV-4HR>G9zVT34vM9m%DD90vFD8&08h`kF9f4@=F&*mw}AaEiqd#fNwbO z&A0=G3P}1lAAX9FVJj;=eMuPQapO1_;WtKKsJi82Ux`tx*FV}Tf5VsMqsRCpo?*n( z`1I{V()i+X-R(;9VSJiInsPoBici}4W#a7~qK)z%zCZizLHUDWwWNa^*#FS4BJJk{ zx7}irR%&wKlmAj#*zh~}-}_I{%=8329Sy3c9ZQ9$-;b~?i1&g&;{Zp?Tn6~|*zQ$Q z(Ov6*f|JdMN_gy3-83C30uS={E~(5c!>#qvmeZN@ptC!tSb1a!rHW*_GzC0S_m^#p zbHe%m0RRC1{|r}$KNV~kH4>3Bk_eTVkX0n~gh*Bc$x5V1DH7lB}yeK^+lqh_4y0l_x#Rz&OnEI@tvhDO6aU_*v!qfA06^eUJj8dMeDknpNf|$ zXq5cP{f6615d9GHFI7JeOs9ceKkPKvx*g1!EF*$LzvkIl0atLmmH#M1{12SWDl$B? zOB@bQoH6ip@kaGKy*b;tw9r0k?b{Zqk9a{re?@5SHeQ1=!Rzu9czY&UDX%~c@BF?& zdi{xxp|?wB#2v{PF5T_y^WZp!<5H;Tl{O5Q%aF6%+=`+5dHx&XB4N<{M7Qsc0K7h} zPdI<;w75X?sJSuj#P!1oI66Di0K?u>hdaI5FRy?6KJU)FI!^ll9*VYCL~ zRkN#h+Ob0-FO#&eOBNFURaed@t%byS-un|SA0VOcZ?Fcl2jXH%emn65K~#cL!*f>~ z2vs|4Aa+6?eDa2Zz5I>Prf7N7{NFbiu=M+eVBQiwFb&n{ApgMlxxUf(R3}VM(3w)u z`iN;pyIi`Ss$mB4*O!a{8O)q&kl~nU$IQ^V#3QZ?2{s6hOhDzRe?+3-Z}7QbNUXUIA# zoJ8e_gr|vOSNWfugFIF4WoXQWyjOQFRBV)hytoadpqX08J+LGaH+vSc-zO4dQsN-> z{_N8yCPoln_2}kUW@nap=BlQAU>X3EXogH!_2wKS8OjD zG55KhyJ>MT7QCT^a^C5}q8WQ%-(?jnCK)6p$I-CZQP`;dk@P>Hclw@O+M_j}L17Oky@C;ElllN@{CY0{zN z0nKNj&_b+EL7NXs*xPTJy*deHceiyr+;fNW?AA@n&jHGh%(ll1r9!E{?_p}eMJPVF zS&>nH9P-+%bYqsNkYO~z5`X_3V)_}C>S?@SSEX3yN9Mo>*+WKktypzilb`g}5Uck-dM?Y}jMd^+1;V;~SS6diHeJ&f z%bG>*SijwkMbB~;2x;E<)W(o?&GrsH=DscT;pB7liFglsiErTkgQI5%g$oKat>+zIk3-qMts%o~$Dyjj!y_e!0yR%;%A~U%Lv0M*M$a_`YUA6jG7JTwCSxch z=hSDYYT`&rh~t9NF9Q$txbh)?F=kG#YzR_|EV2_F)Zot5Uy)nB1!9C&zU7Dm>Y+%fm_3V{b6aW zmwEYi(CHM`YV>&TVXMI^Q-AZU!8v@kUe}UVmw-8{E8Yd`jqpMGuPTac9|YIWW*ri) zg$&{1IDHvDD5@@4+8nn7subC0h4Ou|W-`#pFsVy9#8I?erR@)5Gx&GK>Yt=uG{V!x9JhO} zXCPdN{h6er9mb{I$Z%-Z#{wrwvnI||tRfT$+DL0-gJ}K9fwzv>azRowYD@~-gNs6T zWN{-*fE^o~M%k+_V5><|qs%>DY?Q?Tsf|Wh{bHSi&kap1GE?u) z2t2pyKfDUzj(QLp(Hp3*+7G!y2P`7$44_Kd>&|cwQW7AG8X`J1xyCK*vD6 z<~#W@=zQS%O5?T{bWUxnvRt%>PVWou8{GS$Vt>r7z1JG**IyVejy?wE zF89|Zo_P;h`WbW0N9_;%kR<+Xjkm|Fo6`g>t57U|t5*57TOaE)dHp3k^s&`yU$le| z0kO@?`|lnn?6Ol1x6tFkuD^#vu3X{7uHNQndY22avqjy1*Ge3=*Y{mK^``=xLUm_h zV;9zJei#{R-;4#p{Qs5lxZu5PbL&dVI3y|Uv_H#l2PM}^nf-@)p)Tc)UB9{{wDK65 z#(+3tepkx0%>?hq(O(m{^yogX_n zU)>U0uZYc~>sl@K`mx64U9^7GKFs^hvDRqy9UtoYlY3tMhU{fQh1fHOtG+QByhr5> zG&N3)JR=7HKB*YXA?pAkbXYGS@eYujH%LBR;(%@=z5?dddFbA$`6v7BOCYTm_KErX z4Z2pY*d*QC3>_kmLq%OrKto6M0gotzvgqzFcj&_K*y3{OR`NECZ;BzV72?Ix#P3}v zNHy3Hle(a-*NGj+@^9IC$s^&EvbgJi?~qg}eEsfHCXzRr-8=Fn1)35NBb<4UzSgd8~|UE@GXI*XX^?p_upg{L-%! zRq)g*rz`P~L6KmwWyEY7)Q>bTT#bwZR21#brU?Nt%JQ)2F##Z_%V{jLJpsy75z^Qu zIp__&ZdEj$1ihNdu}z2dpr_tV=ZXJ2=oa(5&B(g}T|pc7u$>!%mQCr30qtE-$vmge zwb>97>1zYk7Ys0U_c-sNiu+i7H0#ii*lTP}a3Sogp}fw zqR)=r!ant)z#V+|u`g_@T9h*kds8dB)c9wyC-AD!8L>Dd87-8!e-y+{k)vyeTr04_ zFpapfKM)J=KU9uZwgu~qFO4X@4vL-|d``>phDKhslz3G7zoBXlNRvFox0ND5 z+4teQ04)ak{Pb5i>N=o5fa{t$Yd`esl+KD%ZK1ceL--@FK9HAZF7g?ZfvBW)?;}4S zw7tK-rH}9!YD7-#_jPuJ)PUcL`9l_%OgjBoHQ*3dKV*7dd`H5zyg$8y9wa30KkNU6 zv=@60aZBfiaAKeSg3_9}WgOs4+2SnTj|0K+ovjis*k6RDPM0;YH!@$;?8O-*YYClo z=~Kh5F=^!~GcRm5`TG9-r!!c3cv0s2i*&rPBcbW@MG_S5PdmB!;Bjc&{C4{G;0x$l zyM@m9Isx77+f!*eF3@{(Y_KM_6$aMvaTFd9gTdp%rrbkAFbLk%t!72g&j=ec=FEm( z3BseY@^8?s^G(xdaSL?XP0Z?sx}UyL-J^3z5jo9yJ?$g*-_p1?u5=a$)AoxM+HArhSDr`VH}r9kAgT8I z!d~nrdK*=qbzjx9(yaKK0VHjpn{MqXz;?HH|MfU7V6`D_|Hj}bj8|4T>ueeVPoH;X z>T}OSea}pz!;}Jaj*dnTEZYE?&y=$L7C-bIJZgh7cVO_4@7Zue4H){i@vy?;1{l_s zI{EcT4-BnW$u!@02Ks}GsFyE&gq~8Xf3(?$KxqFFY;NZU&6C^Tjh~x>k`0DbS$Zcr zM~gUUU7W(wrSXPz(mQPVpi6o)J&nW@FUOj%bt1*)fS}ixQ#hbk+jiv39~^plZvQOz zYozk2Y$s=*#NpAuboneV9Fmz~eEBa5``1&3>gP?6TwfU?J?4R3$1WO{Z+5~4t!HzC z0*?6f_SYhD&Ij`_NrlX5yvp1AW&R)JvPjV2C%9 z{;_@rsL~Of0y8B*4O@_DuMz>OY~&H<%0n0u;2c}}G6H=!qSX}2w4pn<>_nZwFkoh^ zvH5LIsPVVocI?a;#8VZG4vbe~Uj7yONx47RSpC+5C6$eYLzX$Z9zU^XlA-l%WD*B1 zoNuj-^U}&%X&yW=XpvGC4)%Ps}&BQIUYDooXdnAhI&T|9RzHPmZ*)bRl*>kW? zgawqPkfo)R+dw>YK)<|X4KzCklvb5ZLm}s_$bBc%F;?D{okS7BnrD|7V;_95^O%X+ zvd%RmCpMc4p9;W!=I9iU-CZ1hKAj*uo`*E8mIvEqYLM1qUTsmeh%}$VlOOH#km{81 z`F@cR4sP1;uPoIODO(S{^eT)-0{30Iu!IaY=)KP3+x-$V0}EQa^X(zqKXl-rLk=_y zXjzDwxd7p`L3Hzr(?Ge`;iCBP91Ny(^fFgdo?7xPW9nin(E7rAa!XzVU2=1{%V#a1 zWqES3pQr$;b;-pEVFC;!CoX?8I1D}eo-lRR@-rnX8?Za4f(++Yc0xyZ$)5r-gOx!X>2HIqos{UPQX3Pl|}} zb)@^Q=kz$|i?mL`vUNpIk!tXh;=BI@4s2K)dmki%Wb2aYjMyuP@*N8@t2?zy>z?ac z+h9DSzi@iP=n7Osh|Qi^l7bFbr>NTwen1xaJD8R|3j^$zpKfck1*)BlSgXespe_70 z^-25*^e+2NcXi@`-sI=ISW^YG=LfT*%{K#emsQ`GuMPBvet&1Fkqq5ex6QWc4nW(G zu2&(=0ZMwU8x4tF7;$hY=;Fa;tjSq>(ap>VJEv)%D$GdO(;@SCP4@^6KKP!{+#G>4 z&dq8%mi$P+WBO7kzZw}krOqU|>_z%g!q7u0C!~G67BWG;gVc>y|oDLYIAx*ND8wgJ zP8EjcZ${*OFa%omp3h4Ce}Vp|Vpu&k3K(H2Ics+(17lbCOmjpw(7v<%E~ab4@XVm= zJKdwucQsY==)Z9w4z7PB68#98!X#hbyBG^ODJ`$E#Vs+Xpxw%(EFmf85K_1Dx5jShLAr8ezd#~8GOlE$OgqXWgBf`$#JL0+_LlTxvGPb~ z6KLL*-h{)|$;PtUD%ktOq2}-jO(Y6!>F%yf#)fPf=b_9bd}2aNR~)p0f<%fVN%J#+%DC%~QrWGID|6=}0<`OnBUQIp>XxpKWB-SAs~_l-~1AO96)uJo&~d zEkR1%wuXbL8?j43=f5VCAgn$f{|Q!m?ePIoo|BD^P(2l7%$J-9U8gM*5-qd+w)+ewcv~joPNkn+Jd?zI|GqbQqYMxCJT%7%;NkneZ=50_aB) zV2i&B44W$QEBjjlC2i)_R4Es9vScFSU>8*7@+IvUeTY|6@?L)v{f#wWlmt)PUc|1i z|2DLS-p1a7nMRw6jYyT8n}3*;hV;5ND?h1yIO5MPd!@4%nf8yXrFMBB^N35{LxD>; za)ipvC3GSE+>4e-Rx=K}FNs?o^g>E{#;*-K8nLrAN-iX7603A*Uv>7nLBQfWf(yj~ zYD=9PhONH7*3X-DpY9$O5^Fj?n#Ew*>!EbQD)8R4la*+ zb@(sd)ye-m+}ne7qU~qrR?LvFdJ18$jj-?PL6^3w45U6%k_r{KLWcZn_dik>aOBem z?UmeSWcKLWI@`4&vvR|r=+!kilCPS-CgKs&Yc{%z-HFBFiJPRjqajH7GUeGH8;PAC z9zIe``iND=<6n~B>%m>Nk|J{RCaBw!Dt+kp5g?F-69Rg)pfA_qUwFbXpq578+NJOm z7#4ATCS+@1ZmwwO%hv+tQuFV;KUTn;Bzhd?se%z^RG75a0?^<3m3{r11XKwzBcrf( z=rs(COwFEvE_I~`dpX*ms%=w$@m(MEPt-BuVa8z{+tvB9#BL;XM6n;(bQt@}7pSrS zP9e4B{ox>KU1Xe-y;4(;$kb*LDIGz`k_zR0{3Q)p8~*e8{8$>9>yjJKUS}dhtb)U5 zz5uB-J5~oh{FtUT4?fal{R2{FQ0w2Q%=UgG5Mm7^ z9KOsz-{Tl!_M=#!Hh)cjP{;s=k9kp~m^m`cR6Igm07Q^S|fC;|? zNgr+i!_Hl9K&}s{DYyJ)f8T~a{UaJj%Xonx-}dQJ;Rw_`n3tLsF+#Zo{>ia5HdvF# z{E9`P>MZj=esa!AFth>~!Iwn<=t9 zIPObSX(98La;at7b7Z6o80Gz1LFzlLvEnDUv2SYc4^M|(NT4^3oLM`MwXZ!MCD!=h zwa)tQeD20jeOrF#vGASH)i_UFXS&MEeCVr7TyKCH5i=GpI|&RYzkr`#KLOME^3=@E z9l*M(B6v+G4_GnjlhVzIPp{3h}z?1&I7m3}ae zJ{cllqFILY{tWWRy*bDfJx;sYUVy9sg?Mi?L)LrpuAHwL$U1eS)_t4@ zM;OO{__8G<{Q|d0tkg*y^3)tws`f*2<^4lL$@ zC@dt36^Gw?JmFshG2eNPRM>8WhQ=hzMt?RSS!_#i_;w8jPCvAxTvGyCrn9?gt0Ih; zQCq!l3Ia>qj!pbmEU0B`{s;Gzi~uOjdN$5 zB+_mX8}liyIKUO**={e3#P{*sPu^W3%O_3`rJhA->AGfN4 z3l@yaUJaJq4LL$%_S|o^prvRuNVt6~kOi9zcMHtG;N;#~s=PDMHD6hNo$7{>8vQL* zBs#E;HrB+16ai~x!c68w8?eek^9VcD_XSK`FEA3OW zHF_F4n|6Lkd@2DI=h)xrE+4_@>+p#8W+yhBTi}1Cw+l&|+!YTQeZ+ySrn=&BA6NNu zlF7{S!x1?*J@qYa$ow%-_gvvDvc`XI2$3m67R5pF{cwvY^ZnRKp zAB>or2TQ3o0Ihz_toIxl2JoOoaYPD`UPa%(;y4XW`!menNB@Fky0!A`^}kpmrja2T zD~EVM<7JC_AX50pMz@!<;qc8z4;J=aLpoXJqTz1>GPz9Os(u$nmaB+BUEXtK^>h5Y zGW7vj2S|T3UjM`qf={Qf_Y~64>zaByMB`9o%)!*AUMQrB<>W=S*_qLfruW$#??Do|> zV3kC2<(ffda{a!1PJfK}%xiznV;9!TUDszd1R~K|dbBh2CH5Q8zg3)9LfV?{uj{Vc zBBP4DK7sTdnfEPoyl$Bz>t>_SPkltz4OzeD=S9f8`(CtZn2wBs+lOG~B~pLzHa4gz zV87gvqa=qHNYr^*ZtzJH>p326dY0aU5h-84ZUno=v9Z<$pknsgyx$({sp)X)uZUnTh!lM+}J~4%qtb zYR9%(MI_spl$?_1#liNyabA&Hju;;`A+%jy)$sy-{>3V8i{vK6$})HGcrm-LJ37Al$}IQvI+@Fkp?B3%*;q+ zM0U39Jua?2j&bdEua$-op(sfoDygqO;XUX1J@1Rd?sLpWw|3#s{`FAh<~i(IQ4dMk zZ-p3YmdfY}?Wx?xRBEx%r(Ikn$=C|yrFT1r z6QyCqL-lP}uquq5GWC^tqz~hJ2fFm+t6}VS#rTY3IgI|{kK_}Vg%Li6x^$TyAUjv2 zd|o9%ujGg97r_P4WboR0D6Kq>boX}U|!CtG88fC&BB;UWML9JYc!;4d6bNTOaG;L~B zab6t9Jnoj+b0Ln|X9fMYP=KSp=7OpPUvaqVd)?^>4kQbf9L);3ian#Z^{MiIVVm~t z6-8kiBr>oNC4&?&P|2S5MJ7N=D$m-Y`7~hqQdHH|8R&X`)L&>`0tR(>`x4Hc2g(PB z6KmVAU}RRgfjYJu#&#!%y|a^mF@pzlIzRGZw4P1EbI%lvsHi57d^!i@zw0dvlIqaU zdT3AO(;6WCqDGNW^r_Q?g^L4ZyYK2BrxTi zKnjXk*M(2xApcH-x;rb_74)Ly_wpmeiUdbt?l28$Pac#jy z5n7F(NK>czLpM<(>6Dxw4AENllro)$VOoubU0%vC(y?i&zV;kOiK~`VCn8|9E7y#r zZ4ySdi9JGAJ}`WHDz5(`2Mql+vh(-+3q4PX`9zki=N z=kU&+14my(+wuxi;i#a+qj#FjI6U>rz(Q>d$>c#%pOuH$&;LnWc)A}uy!~A4qZY7X zY3hvW`S+OjkZ{kTi4kI6ZnnMi4~8mT)*n40nb2mT|KN{_D)ijm4mhpB149=g4t?p_ z3zTo3k?&7+!H91Nt9HFOj4Bzu8ZUhVqe2cY$G`(d(yjcB);O zR(Ds1|JaYEuQ{zS)E?P@VJ|&DJ&8NMli<5BVufUE$4>laJb@CT}rijB# zd2BxmlW=I#&b!*>3ij%c4kkvu!geA#NWgzT*2cURR##EPjDWoiKFM;B8hQHYVJUT} zkq&eak4%Sl>e^6m9WUrfn>*}P11%&SoPYM;>v z={_1w*fmvb8Y1C@d`T#$H6lEI(&1l+oxbf~EBHLI-`;J^XOn>B7a#6dstx0?x^SpD zpB|1#=c^uS2*eS?-I>pGB5}C*_GbpuzerI!blvQCI1b7tudppHVRyy5k8ww@VB5*p zv(uc-ST#9tT6j9uT)Yhk%uI2)JkzuZ}|jX!CO zu+yYAlRJ7?78 zS|q!)%ZG*VVt-+~t=Z{B>{8~D)!i(?mId7$U$IuKY^c|%ayf}HQS}|J-@74O{-n~` zr;1QpVEWw8xH<3o19R^l@)8CRA0&>6RJ}+wuP`;l1y(VG?!v-@U z_EXP+@-wJ;AY>89?>$Fd!cTjUE&-67s$IX zWL2x(gTc-oG-JY_u>8f(Y631GnxsbNyVqjJV*IzYatijHvb$mbKpltfR$4KSOCyC} zY{H1j5-F3<6mRdogOqpOj7u?`NIC2xs_l}CL#EkF557OgzBB8aS@93C?g=@>p=&@uE4z6&|D`^7D-|ASgfcHS~66KKnrXYcX;4&55Q6Nbe- z(7$vd<=_D_kWbLru=lS3MgCVQBaJCgq8us?^8U*$VH~`f8U|IX@Z8O`UU#TWGP_ubY)w z*#bL64=6g9Ghwgv6=4AHq_Id zeY6t?X1^*OS_#0O*{gYJC-jjt)-J1T=Zj7A|G9cgCL>|BFzZi6E{0|u(>YzA2-)a4 zdp(~IYErm$t+`8}by>ba^zA$7(jeVl=%0YTVxixGMjv5tS+d1?HwTa%S6JNYE&;h! zQ#}6P?jW1)u%L4^g25tD`_4En=)201Y333DopU%T-M0y?Pm|%HEFDyTk@&bfAOy08 zxR}1>+TpV?#gTK3y+|lw6xp?L44VY=O>QmQBT4cKQGB8TyEj{lUIkvje&YOy^lUZ` zoew*{>u(g2RRZrx-t$1R!jX{dN5(kB#(uPtc^dnz&zRPUAH?qDG={QCU2GrX3UL;; z#6}12y|UVVNI2p-E>EY8A*FBlJ*IWw9}{1Hy!{K+Hx#MWPclQxuPLIr$s%;JT0`(F#0*UC%a`KX!Iu-+?7^#z-&@gaj*XXV2qco4a{cRUHo23A+Y}3E+Uk zsZ#EYb?p6aAP{@M2)pj2(Oci3VB4fCMV8JL8>D;MW|?BJ?38mgO?NOpGtT>R_iZI) z)SkZUB4`4{`pKqBv6FyRUawBA^8l&jn8Vf4f4pZge#Dtx=!^NUGrQUl2Fz5y?flOY z27c=djD9qQft$PbrC(EkzOd6@JDo|;oyO=kzvCB>DrEZ=KQ{u-8=1V0>S(R*gtW*8V9pS-(twnEg6*%3nW0M$GI(!RzjQ55X z*O_1+Aw5^@Z4>r?5Xq#;s>l9M_k^TMgR!smj^sDNcc{uR0!5*!ttC zcF~J%tmk_v^1zlBOQTvd{<6s7^G)WJJ0mQRmaM4bZlezsWX3)(r*dc#{?_gqXaMa3 z27c$}x}bA@XhL6p33{puX*1t^T+F<=NqKTUN`|= z=VLi^XBnV9`-2Hr*E}@)Oo$2+j{xyeb9=$lM98vP7X0Wgk8V|>;gML0`R|L}Vsyo^ zdhs`5@8EH4kvbRY^-cgu=dE@$EO}s;=btls7sRor!RPe3h%xN_lEI{05siIxN@u%Q zrLcErf%k#PYuL4!OLdQBHriWPKrc_ML(eHK=&7A!)oS8}?u({z;lZKMF@41;$3zX<;@GE7D6c{j_eR#T%pa)y zM7(HgECN{{KR;@wUPMC*RdJKI1LjB*6d#2DLZZnBcbj|L*aV4cjvDRQ=6tW`);%ul z@V}_}JO6qqVk~YBZ8IzRdFQeGAchCDr6eT+{*GH?h5&;B^z9W;y01c$X~ml#*Me< z80}TSM{n2KN%hcvu<7`Do>$OO#8Q6WViURyKb;ZK+X3Cok}BQd9?;c0PWqUf4V{r& z{i^f)K(cS_ctZIOtzHoZgF)laQ2O{y)N~qD>YdY4eW(T54&EdFQaNBLA+5j0V~H6z zUH$%}@y7C+-F^Pzd06-B@~LLJSZs+}?>{IjjqR?9G8@Kq*zxRekea45b~YcGxN>U- zyJ#L)h0gxPPNNAucg0gk>Ty&Rm+!;2y9t(N|c*)--ZgoP;HAT)d}> zJuv>35Ekx?g^;n0JnB|%$UignZasAYh%Uv(9*V2butfQ|VrBxZ2fj@$DG5V+@I|4f zuu13;zOj7VF&8?P5|@Xm5jwg5m;$WrH2;LwBYi5C~H3}=Fm-6Bia76Fs@lwNn~ zRUO*q_750E3qh-X`ggjRcxVq)1(cIUA90lku2oCvmZ-CQuq`L{b& zwZ)!Y>c+P6J?6PpeAsrQd~l-epT{nW(0@L?hRDQFa)=JFUaNYfZ1g)41AZyoJQssS z%bLztp8Ue(u#!&k&Huo7uSvbm{+p2IpLx^4U;v6YS=!Y#Re)GQxc{l#4(jOzTIFqg zpjjn`y}!%{T3((Gq%91DRy&f?=lMPV`q|%;nA;02pT4~>I!OZvy#eGso6umdwyb~V z0aS;0eA-@p34~64_B&?DkWC6Z==H$}!s&G17&BeRkcQ5f5}d;c5o?#-^+sn)G!;#0Bc2W0Ka`V!JGHq%9m<6nRh1smEe-_eo>% zP%<`5aaStLJ;9nc8%tNq%dujq{mIs=Z&(;;Ik$V&9#g!U?u(2}alB5T^(F` zX}k6I-G-)$r|Nf~e1?WB3pYkh8>sabmG^jX7l?QGyU%c2L+OueIg+_+kj)t3U0X|l z$f1nNg6U7_6@QB%LR1&iI3*k&8t=k_WoADH34bi7*!oU(#A4OQ-ZRY~gRySkZMSBf zW^9mJ7{4JMjEyp~YfdV6uyOA~Fx6Hd*7rUc7GA!JwJr+2^K$xFCCov3o5GIeyGRpk zSN$+Qno)}Qco0(zw*oJIl|j!(ck-Va3d3_Hm#}c>PROLbZ=)Qh14XG5fpW4hpkhaa z#FX$usIm<`ue;L&YQABM$A6Mg=T2H$Vu^&h|7!Er)ViSVZlUGMAtKZaJ~vqXISEx4 zT6~vS4nz4@o}iqlG$fT;Cb(XA?{@b;GS>oGqsjLS5;m46p8 zo85Jf{+0w5+cfgpu)f3c)&<_5Mtn$oR=kU=;3!tRlV>)L@L`R+OvagTd#v#f)p0vb z#_FU1fx#aKkk}t@+@;-&6(?_~eM~OEk_Jw$@9bijv+cwvxXy-2E7MmW+KHe)^Guf5 zWh;36SDE=;jU6P}kglHH(1IMb1j`7mf1ba&rA_GF3FU`gB$xC5fXd5Z_Mvu8K&)(c zE#O*#s1ub}Q3qJiaYm#zI$DOgde&ADiB0xQN9Vl*vNutFibkTcf>35$!~ML+bh zZ|tWuEBIq(oqpH1=bV_pyHCL|U=Idxm>s=4oC6O!5)KZ?ia|8Za=3oO45Urlr1~f< zL(Y+M;lnjWP%v}b_fp9ql=$u;o}BN5vdKrkgejka;Nq_|_0M+%oyT&MLt#)xJsq&9 zaTAIq%}(r}&4GNafJS4l4aj;lbk+=IAcZ>it%fxTB6-zgOBB9?{p0wPkp_p+ufOzB zUrj#7(g*KiKClbZ()bR>J<-9e_q35$b!#y1`N^a1zi(rqthzGYuOKXHF(FqgKgD9f z$L-RyJXm!9OXw3%S1gFmpYIh&!raz+u}>T`n8h)tUUYZ?Q$7Ax`AgixnBEgVBTs(9 zCoHcmQ$Krw7Ey=kP@f$HZj7c+8@z&8E3z8P_9UeA>1BL`)ikvLrC|>p$iTR;8-W##@0BG4wW+mMyC)ATHwBVR7@RX%QE`Z}S9w(yX;Z`9e@Ds<&JIDjT>?Exg6Kad=t~ z=;>6@43Up*xT@M>A$D*-*KC&{BybpJ287Z>(s|zMcWU#HtbXAZ58)#uA5G+6R5OOe zW$_OsHi8geX}^7}#~)(Tom6e(Iv{dVNNlmH6GCJp;~8Vv!H?q{Q=qd7*c=PlzM#sC z`d8ux+@@ZlYs4jL$p%&QH=1UayOD;$4UI4EGUi}-ZEuU%#Tbl?56KUzAH}Gkxq7~k zMT{!*+jGgG6{8O5nkg~4UR@M`IBID!Q$ps9e%K9ea-6fVjbM1s?Ga^sKF~~g}Lz64EPG~ zTNi=v;AhuDcW*ig{4C~ePw^u7%B~$TP3{M8JuA)Z3V(2S))zA-X@K*(;QsGh^z`Czb!Om&1qCI&0hlu5d+W01^w)&j3H7_e#M@Q5!6ABVl^p{}4p&poX1 zS>hgO&&8g0{-PeL)So+pgi^R~>zd#7DFr-iW+WWeKf@DJ*~5|<1qgMTyL7^D6C!2F zRE&p&A-c3*U7s@_Vto@*`;yEdE=1zF3Y!JQ5xJBUUdBM|w-NSN>P`@Ic3UILtO+91 zHnTR|Exic`XF7>y;v=t^6g$6GiVZsz5RnXq+ahR63<*@PF6kp!&P4-JAVcOdjX^-ht zOxk*K$bt{{*`OjAlv-% z^PAeYA=^za+W0y>WR-U13%2G!CQBThk()5QyyR|(QhkuPOIP_Gs6bSt;K4l2Lh#oX z8Q(W02z*)(i!YS%p}(%Z(EyZS^ko&dp>=yq`tH_N>)nPK#wC&5(zBSIc5b%s6d&gC zR2hCFNML^5)6R{ad@L~jLinobg!${cZc68RVP0TS)9&E6n6p1m_hmpgX4E!(Fn*PX z$p^NwRT$PW$~pauru=F2axSK6v`&Txe`rG|-XDVJQ-?9r^vkme%e-q|{}P%(!m8TGuRp}G+)c?s;bI(? zYt-oSWaS{?u5HKYryp4IQZV7e#SScxw(Pn7`Wt2y2OHd&IEqQWL6VQ3)nahPD|N;p z4Y;SbXl2Nx2vN~0o3C0RJ(O=8U^|z}17&p&>k89^p-^PAjMl~$vRrFU z8y6Wse9hTFS>Y}5cbXnd&Ee|{ucZ`JE1fx6W?RcS<{TBV{ zbtb5eiGW~VJs|Rjr|wzY2EwcVtAzdqik3#Hu zH0=^GMTwEChlUgLew=quO72C1r@@n-EiyN+ zucR`wV*Tjy1y!||SVv~-Da!bUH4W0GGjiHUEMQz+q56h|>gmw2SQ6%Qtk|7bx{k?) zDkr_nH_;{IhDTB+A4IwDXcW@g0a-&c_u@}yK&iCISp!!MsBGw}nXSGFH7WUW)MQPl zkE#wc8Z3lHkIZ@1tyX9{+g4oEI1G&=2l{ve5E{;WK9ReA4r=|$=6Af6fJjm{=zc^1 zfdguF-eXZPOYwTjJw-~2CXZeZiZy9M!w z^s#oPQ`qd-3=(Z;OR0{7Bj*UF(j%c}D_IRl!{u})L?)}h5*)u77&+K`)u6%Hb@BmQt=OZXA~5R8t$+VPmZCXF)3Yq_KJR=s zc~?3iUczkeU>SP9VDm>1S4+QAcSzOZ^y^x2Bo^2ivb`0{waVVA|y`|36WZ}YL1E;=vl zv4pK0aeD|GijcseLX+uwfJEaz7Y^~8VdubI;jjG%vCDbkW8P>Uc5Sb|amZ)}iPHfy z4mCHCKo40edn%0hb1_gs!3XQVU?w%^GFH6GH(3`GfEnClX2w1H!E3PEi)&p8-u?bo<#)I+z2 znKcK;R_LnYN1pW6_t-G!YLXxh1pi5f=;;P%wYTMM4HALc!1H^48finZku1$~gFD2~ zObw*=dt>56e0n8W8cTni^)KDkfpwo1f*y`XB7Q%0MBo!Yc39`O-iRS%=h8KyoUQ=u zu8NsRij>A4-|qSG+&9>xm64V%rjFg*Y_9yRd8_)RTnzK2uzg(n=r<_G<|DSd9i9kc zRe%+zxgZs@$LY+3rC?Cj$~?st#RWO~W=g^9r=V)MZDx4F7@A2^=k=Gr0^!{J{mZPM z(0PB{Y|gYw}`1y#NKA&J(z>2<~gEdM);Wrh~nE9*S5e&JfM zYMwT>O$MITl)a3^jDObOHl4-p$Mt*8h<(T2FyXgV18cC)=d6o#4jcAeP*^u^VSv42 z{Z$^KvDh_vZ6oQ=1?;Gjy_B$C0nyP)RzPqFYk42Ls+&B<{KRL;bM=+zUJQA$I-ekW zkY`$|`VCZjZN8d$NeEh%68t?Di=e|kfxDzJ5xQpHX7=!zK(9Z?_mw*y(9c7X^7>!` z{b5P|uBR?Q-?-w#X4+@y-6cV}5@rourtTh3=GuVpoGbcod*xqS9N@V6@=NqLetuHp%yN%mr zZcrEdbx*Yyi(f;MT~XSO(j!PRxf{|DZ~*&7{_~ghU-dyxf_yJ zjf=0n74&F_Z(WwT4gI3`_K8mX1kz}wgU>5381O9E_*U`@kZ4?)~7=2o6>284tJ>DEVwVB*AFtUdO#AT#3330NU5kfW8Zr*Tg@LsoBV`q zwzfd_9fwHp`3^PAC0pg@CTNSamTQ)EhR$HB(um8dpI^M#C}U#-q?aRKqjX1r{7gq; zKGOyUb*fJpXKDhu@Mn^%uNPV!^?|K>boO6?mj?+OB zXIo5Yf+~_TZt)%5(u0G)4PxK_`iqn`%gak1;z(|tS{LOqh9nj76XChru_t)X7wuFr z?C7u1WxH00&4HEXNx?g?;;_icL%UvJM9yC77iln0p=&Z#ayQ51>eu)Gaqw*>9D z-eKrJ(&gJI-2z>2?*yv+RDt$Hy{fsNrBJthxq7kK2y(Vx_%gJxfRTlgX1?M(v0`*S z;z@EOwqy_$0=~u}F)fg=eQOQ&#{H`I5zfbfph+E1Dg!BEoZg)G6p_N1++}@r5Gf;f zyFUo%Aw`~j=QibL9H^Y1Ub`H00$vY2$-LNy30*C!vologGS zvJam9K9&Hv+iY)2n4N(7b<0ZJb$US1fjzFKiO@Z0^1#&pKOos(@8k_Cf*O42|I-rJdVBm%m>v?nj{y8^*lQt*gl zIMlCq@sMv=ft-{F?OlU{7|lP4Vt4Yf^1H#AdY%eIS2kz!m|VlY(TQZu zPrBIoV*FdtvO2c@paxoZAHqs&!G=)5APnayV;%aK4f!1T8sTk>b1ln&H*eRc*afne>UWd$_Ri1vBI5#l#`sEu9^}^efibKsQM$)Tx8a6J#K+C z+qyR|hPEL!CQ9+d_Zvvr`26ri&CA$dxw$REZW_C!Kk__x`Gsizc|umZ1uJ)lyGrIq zVvxjuJ>A$mp7+pHkKVuJl_uG}vbBx2F1^YgQ_`^WGb!t() z>k7~wI=-5+y9hMa(_1k_A)sB_n|1r&Q=m$EESjga0NM4OoQTs&=sj(+U6HpBI)r1c z)hlH|z4A-W)IR}`Ww$GvQ;~)#fA{pf9>0Y(x3=_OyYdd(-~YUIxr!5eE=KU>osGf) zR`hjtiZD{SjG~Bq7m;=+;^zD94oKhQ;UNtXNM9fD+b`P{X*+{U3RMmx#XIq|%7Pw} zjs<7m zaiGRVXAMqv0eNx%z!T?i=nc|1WGrb5gg;l$-8sPtb>~ih+c10;p68r9AE>zwGm1mD z9`sSedUoE4jyoOLap^2f7_Y_Ng`bviMg|9cTwT=979sT&bEnN-M7r7z1DVhmq*DUQ z;u(2JPqevv>2?Lu9#zP2S(YKCiO;pJTMkKH(fzVA8rTJFBH8+~*s8iEFVW~7mRfRT z#tzuQoug$T$^BkXS^PFW;LIGf#iZ>xp%@O`FY-I&FU-I|-E8{(&{aKWL_VROAJ91@ z{uqfL0s5l3K-gD4U{LZLjM4)^n(Z@&S9a!Q+Ls&t^&dgj~3lTkqM z?VRP#KLa%x>2=mtqL3J@Y}6m4hj}m?ba-M6n-p^z`yBbPQ}B4Yk6IM=*Zw>A_T_h^ zJatN_VWl9g$my|D=Rc(XJjps$c^?_qr^B@z+>pUFmm9>nA8E{Qy<#!ZNEy13a-cZ@ zN&2S7|Gik{yxQ4M_TDboeDh_dcf>j@h}bbCDij2<)ZJ#0c}`yWZzq;CxFz@iCL51DM-JseU43N2pM@hRQoCpAmjT> zF+ZtvWY~MfkPq@BZE5|-XrWo8bcp)Ji%VmFP1iMZ@?j)4{gK~#j1L<+HMUp}+hXST zeD_1L0+8X}d7(|z6dHuTE>^z`2jbmo3F@*f^vC{y)Tlo|>5$oV!kG)`TtD}7`D*~< zQR7sbSU)i3RWFph`wEPO<6K?YkAcqowV?En3#c>W=A3b}K)xP-@qic=y1NA`eV$A~ zo5TwtNs+ryepu`6?&f=Vuh5`j*De*TT1QzEtWU&tqQwRI$`9Ck#ztYY8UY7;O)E+~ zjw0?nK%Wd<6R|ow zcdT;Q8?O9}Q5B$){vF-1Py+NXgR{9aY`|2%uJ0s~2+aJnoCGHoV9Lhltu?+5^a1%> zHj*#F&pgZMN{eqpzJDb^p* zHje(pK%!;jLu|0a{?1>vnIu)DvJan|2;YzNn_29qTKtj8xASq;r!iy>R{Xncya|~( z(hJ{zZ&=mM{!j7J8Kh+fDA>o=;~<0GKR6&5dwIG8LS(*U`!Pd}q(D!swAy)UX4((z zq>UdGd>@6EHg3X~CAUC(^B$>hFYiNdRBqYRSC4?QZ#3$?<_gfp42xBUw*aHht=W8E zJ1}245bZgc!2B;g<@hEOU>-J-E2W46{ZXXd&dudO-TZE;g~9>-RnLap%Zz|1-V!WQ zV-0mz1?*fZ+aO83zNu<`1s3w3{WM(v3|l2;m6y$Uuv;Vj-Ed_Zl5ZaQoMpv>B%EpWs=BE$VDfga$1zZ^wL_++%qk}+D$g7>R+ArdWm=;H#eZK zGn+m6&k`tyo4akg=AqXsxT)+=1hhN3UZmesgG#koO&!At^gQWcKH(ULRo28~|K{qD z;2P&ATlNY2u5df)+HXNhmdxzE(49!Xl+MLVtU=~kmE93%dXQzdo~5%{8d+`?Kkvte zAv1Bw?yu}2q%$y}`$H*GHL9J$WM#2`nD>K<+BYO_j8!e=6v5i|2POXI(-=FNEO33& z0!p|?E{V4a1I|-Q6ElOM=cMsgF5L2Imp1?!Caf>jI1P+>zeLw1XJBc{oD;qt z46F?O{*7TrfW`fMYPZ@CU_{F9ZdvLCn(XiN{i=LG<{cLgX>Ee8kb5M(9mk=0!}!xM z`PIHx^t(li_akN|XzR8HRA3X2^n=f-U$9HKcIUKMAP%%RM)!xeAZ@GK{-ZsL$Otl4 z;Ql3oEdC&4Ukh<$HN0q6!~$fwgg=}KTb;MGo9@b~3rJ^cWN&^QgA{JR5feFG>|rbj zo@#T&w&2u{mM5NJ=^u}Z<_Qsa5_xLf=;LmvRr@>}zPAlJJ_f9-4@!dmsi-cVlNmrY zFF!ata~~LMGwrD%w!mcO)mV8b1FLyrN5ii3z$$ZWyzsUWm_@n1vHT36H+wr6esc!O z(&P8XzDYyh?;BTc@=}2?x~W8DpDt9r+bk94QwKNm&gDCV_+n+yhd`B++1TFxXr5c* z81}8>N%~kVgp?$<_7^wfknUqSMiLJ}W|(e$?x|zQDzRIUUhGEJC|`UI!4_G9`^g<8 zImo#5#il@&1F59GXF(^6ko1jvi~6lO?Br3R4NpG6`o~ot%X_#nndtC+%Std54i{_a zEmi<(CRC>9I6;p@smEJcIT(C?Vp-w3B+w>p#3Z~IfVp2V&hH2ZupWh-br&K7Ycb)q z@|!2Xat*Z&8nOe%r~QmTheJS%$fd@V%>lXTffOU^ICKkSrSwiYLGuR@iF)_#kTYbn zBy?>*W^y*?g_xUQ({}fHMQ%3i(q?*&oM=Td7oocRoe9!(Zk;%k>WqxGHvXcgwaBt; zPs;Pkz#%q{hdTTbtNNWstP^e`)80zdYy1Jy<$I%Jd)Sb2AjHx%^&j>uc$qdkZ^br0 z8JYh!tzfC%{k{9V4??VFn8jW<0@Mi>wm63ct@i2&+5H4XAo&jNNQ##QYM$BAGjqkj zFr4(Zm|Wf8oeyYnS66+#6g?|IrUPpvExE$X6PO*tnl(zJKyTyYY^ZPr%8cZflj%R9 zFGnL;IIe58f3#NCeVl-oiQjsEiEH46(i^=hysB8GdG4joeL*CYT-3I#W?yF%v z)!bhHe4=5j;Ty;}_8|6b z*J>{bKcFkmCW<6k9{IhW+>yw4{`BUBXslKLtSe{kkCA+~nvQSRL%G^F?c?vRL)-7W z4ToB((0lDqE}E_S(;=|Ay6C_vZ^ecB3;Y3QnCMH@7nwR*#rnyKzS!TFu~T;;z{@}x2b8s5>4dCB>etHo zlFk%l1oG7!O_@fPyx9D1Uu9&?*^7O-9)hgGS0wJ6KauHS(p|TK3+V=inNCv@NHK8@ zCYorh@=aZJ)Yx5Y8{bk8Zg?8YCNBpK+BL#sano&<56z&~nA1se%O@ai^S@mq`2$Ge zW1l}V1cBnU$UO-3 zC6GKB#Rqz_I!ip}gnW^F+Hl|%((mEKvrY|BDck;ZMY zz)WP8viF_Zb`$AsRPLu6O_B2Fqg1j;3HJS1C){wv2?@O!%@a+(u_|*!Nxb6-x@y(l zHC(WV${#O(CEF-L`?9t1^js?R9Su6cef}y?3hoM>FY5)m-;t}M!mD@rj-g!4$ZCFt zeQ@!i?F7~{k3vFP05I#f5@gbnfj&hHus^!mFO}Z>Gjur*{f|wD4JWjqBgnGi)O!c0 zf%fhy)qfC@v*|>QQWI7vIN#}7DZqBI>?~?cGWK4TYf$AqiWCE}W5#^#NI$4C^M1QB zGS!|(-Za0CESqe(EZNmP4jaqoE=)saU3%48y{kxH{JsBdr7cpeJp#TYIAZ_GZlT== zHX)JMsanKlC)P%Kg=j1rWAvY{&ftoCD0TJUXEpr^+UylYYBTJi=cOw5Hw#l3{4!>k z;o<|d>9sL?PQC`lN)T7#niXKlS21&(4gl*~$fn!Mt2tg0xhE`28t5wrnni6ct@6v! zz{jsSfuyg{a?DN}h(7zIQ%debUC6lY`m7j8a9VND43foS?wIY*6AvRkhG09ptJov7 zyzhK{9uC?#3WpL&s~mX|28-g5L1a}3o?hKsw%_Z69v(%Op5jVrLL4%aQ=Hev-e1+b z)}xm&fYdv6>M|bANb*$6^Dd1?VlAiOP4AIau2psK@*raJ6H(r@iVaYx!`0WR@&Z~@ zE>HXOL_+sdpAcJ;C6LD#7uIO50os-C-w)waU_|Llp1LgzOsXjPuEAbliAVpl)eHir zug#C?Yl=Xh{3n*>6bn>$D>I625Rh)pj8Fe52jaj@j`w;Spgw5IXv*Rhq`KesbuPJ! z1;PuD;;vd?%ZKuT6?!XntDTZPU`j;tT}!R;2fnMkDL*V(d<7ZShEjicvyhpQ@@T{L zRSx^H<+$PD0%V%#__tRdM>-))_J+X~q?-8+&DFbzK;zKyIr*Ug7zZTe z+e8Y1>0Y=?D}6UG2@3^$D^G#BJE^<$y$H|~hjb@xegIX@AWn;|5=cBs53C9!f%q`u z#;ofas8{pKPffIkR5vx&iq$aYKazI#do+M8HtP0UPhP+-+RYT+zh7|RhZpC+gf~c? zR2t2>v>O?01Q)N{RmePU-f`mgR%AZW3vX1ogN!-*6E?nsNVnZA8L~efDZhSoT=ww8 z{=B$pmF)9KlvzklJ0FF0&#BV+MoO3*<9T_Fg&`D3<`|B@cm^$g5-E*0wnA5*;%nS2h16zCEHs@Ywa1QP%h=tx zKN>pNHTvH(_UCpu&|_uL`$Q#8!M0~)xBM=w@w@iTEY}ue6q8H5&8?w$ z+aIUr)f~_o_$N|yFc-SHAFb^D{0;`Fj`CUUazM@Wx4cBq0(zWm>p8tOz{uTR`6w_B z7-XLtpCwI!!QIui6q*dQt8;7-RxB9&=xh1?n%{mM|wGqth+%#>heUf^5gF~xORio=VUAFDb{x``|}RlVXpJi zSQx(C$I`beD@Tu7C6-cy3RDOlI@WmZ9JHykV)eD2LibDJPcu>skcAWF!oT?gHGbQZ zSL_dgZfxEC|XP_!A*-wUd^-gBpT%2F` z1A2<2Ze@NC0&=2M*)Mr5pvGv+we)uaojY#G%_9NmW%I|b_ay?|CS@2T z>jUNLzWXwKx1m4y(8t0p{y_Z4(P{MX88nH;k%rdyK%SW6fyDism`Lui^SoG$HRS_p z7eDhN;a2f4nc_I?Rd*S(6O2Rh_-=RQvwTR6UR$zNjDoc3%z^(-Z$$d##J*q&q5t=z zD@wkmNbO=hQxO`*!H^C&z3xox6R6@hGr5c%0S;!o@5xv%@}ea<-Vigayqj(rxj=^O z8pD(;45(XBFW zO;2;Io&EwX64MDpB8Q`VS#;j`Rc#4^WosFa)%oc$C3KLdvr?J z5orO#p@)6GBCTNO-yc&Kkox<}{?--z9{>OV|Njh^cQ_Rc7{$M2lo?8rN<=h_2nlZ# zl_aA?Rw<)M_6U(tDSPj|SKMn|>%A`b+T)@^C8H=s6eSg3|Gv-r&v~A6o^yUU;F~t1 z9rqV|Lflw;B(jh;81TqC*$K(~<7^Y(g|PDS>iSNqG=ku0zD3SK{`Oj1UeNqqaiCE~s zN_Ov=XHSh0{T5D{^)Mh!bz#V&q#wKM@-Db-nZf>r$gI~Md`LHPJu#)FhV(_tZssr& z((9VLCm9snk*ost_1Xh^Di$rZHE4Nzhe*0JE3Ry0q&l-c4%kbmCnsD1LV1*G4A8@P_^eZ zZ^I`(h!^3wGH0fW*#Wn1-E4Qk+F0Yr^_!tcvATD}ZdVC*hzZ}`!}iLJq{SyJT2eddIJWChJLNZf-sOVs1n}J4E=FMXYOBQhaO)&zbI)==-55b zFRs!Blsu)iRfbHctCI6FKHLuZ+^;y&zjNUe(m8cIl^(2QUYW5y{2rSR?D}C4nuKki zMXR~WM6k1aKP%bd8TNX8RxSz7!v5aJYNJPjaNx>My9OgW9AMsUamrr;dwQWbuvGq;}kcN)wS=uIpcxEVd;C@W?3+4ZzvK)G9aC$xZo#O9aPP7?35AH z1acn9W7S9mXk3AmEXr%>a)w#WST5*I3AE`R%z}QKo5haV1n8%5>8PHQgTBI|(v0zc zIwj2iWHClShh;_8ScDw31~4pk8HYkcz$($p^D~sion4%_aRd+E5Ao(_$yhLQCca`u z1nVkV(oW)Sq=;01+p4XA?b~x=z3V%$Yw5RUDZvkWBW~?Rzc}pcHyXB^zl?pk?rPuc zaNqPAdM_DxCO=w)ZcSVA&kL;3zV2(fKS32*GrZ+y)jmRF!v@>Nd;?T0QNtM1gdmD= zX?o(+1TjG+1B<_so^}ait>%Azw>0N4 z|7To;Rhlf^-tjPOFqi~IpOZ6+4(x|I?{cR2^as##` zJ0++r*%d)3y$1x&!!aQz(yG$J4=e9exzBF-fQ?cox$k-&KuX*Gk+hsoNDDo! zWcJw(JI@^6)NxQ5yLw)jc{W#L_YPNKOIB6v52p~4;K824QPG14{uo8o#Owd1$m8X>b0>OP+jX8KW@(o=#12W zTd?KGmBqs%U$CvA_$zs)2HSPwlxpAq!jAUB#StX}cJg(2`7s^DjuXS9LA-rPQ?71W zuL#6eMN(p3h$%MbmvU@>?2gr*6^5gpwwPaj*CwBb2W=7`tYs~XKu)>xQBK1JAbxnq z$5w9wjX#IX37aWE(VZfkkh22nnUx!%<(AMczll%ZQ~^3T_To!Ww-k4hD^nGo%NagrwpWArs~_*~`8|%&k3|@@T-CAc zfd19%DXUo9ru>P^rU0>v7-M~M23tkk#n0?)-S^Fhn|o@w>9yU^rQpziQR3aVfJjuuO?tgl&1(CaH zCRX5Qz){oTmtILdFxy_9~pqKpj)hI8Xd9^i{9x*LFWFU6fwCcz^+`tIo2VT;|7y(TQSd(MBZeipj1C zw`0r4T{2d;|MhJ4#wKmcM5K6COB=KJV~gYFcYmX|A&OTAj_fQ!(mMY~KG`%RW{Yyi z80KPOXJO$)-%*VAUz~ECya`XuW8XOOT0q{PVQW+n0D{2&Y2E|dpzeIo+XT}`&~%z_ zdfR;kAX{5#jeEI4i-o*JJ$n_jJY1}I^f?CPzNV0L|7K{;WMMfi6bALOiO+s$3PDwr z+ao6#B9t=R_7!US1}T?2%c)Jr@TL^QW7~w!n9;P`vE`2`mgQN69x;h*VfmqbOIi&NF>7n`+CzyF^y)R$Ds8HTIJpI7;0A z%grUIT3|I-CS}9(tL&G2UhILKyFFd^SsLN#*jslVzbt&x^pbtz4G(7LnR4@;Q^azf zN+*LDZ6yAnJoGLU!`g`(?V9NeSf4mV=8|c~#!YiX8Fj!$jQ>Ay_@)$! zSS!nZ9wkGi+G|Hii5939xSP))-vzZ(%5z!iRzSLcY?k$WGmr*#K3r$lfx0=!E!EJ5 z8oHv)i(?Z&%wuF9P5cJWg$BGYboW7CRKLXD@mz?P-uqLK)ew}G2t(gHRxxhtbA5d? zCd^IYyGv0G!?FlN@6f-dNbo)+tKveyYGs@`u{rx+FL=1SFHT~u&ldVosW`0p5b&{d zb|+RJKjqF(%RoZVA&zQZZ7f^J-u_yG3G=+?d)}{$VWP5wl>;N7vz_cAHV+{Po9kp3 zaVA41*^$^Y8v#W;7y0zZB%y-&07Yt>H4w`6%{-$2?WCLC$&wQ{p?dpI*Kj%+s+#1j zbmX#-PY9~SmL?Hd~@_ZRw%hFZnB-h%Bjg%IdMrO6ofV7d>v;lpG|X|>DQFbJj*0fM1swEc3^*W0CP>o2 zi)49suIVSl>3IadzS{{|_eihazmS0fC9@N$a0*J=M$=@Xg`oV6M{yfz2UJK;rM+)9 zfQkdt%G1-zU|MuJX|m1SCGKkEzeQ@-uaW@jMKKyXAc zMilRUsKm&pt{9nrbG&I-2~%C}dX;=XhB;cqq5P${Sa3mzB~5q>7IXF}9kZRllKZEd z_$Do}B(VF*oy^TxEbGbkemWTovdwOEGFM{G>L=J-BaZ2#oA#z(R>4>=7AL!yCm7HW zZoYM>1p0xUwFsqM}LH-E^F z-yjkgav{IOIe+3s8{}o(+C=Hnhn(r1GHB-(Rzm0xZUWt{HFvE~Q< z6+D|6bUW}I^}%a>Cr%9H`y%D>Lk6RsM%Sx~YhmKeF*AGLB24S7?TO<#h?x}TKHd}7 zm_<4!$q5w9qFHCKS!7}6QiIp^9r>7^#whpZf*vM)Z~Z8ftb?&KznG>|e&VxhBZBEo z{piiQPycfCZ4fuzA>8~(6ui$e&g_(ogOF6t3jWJGA?h8Q{0^rN5Z4HB)T#x zUU{+$lJKc#;?oRBs<1KNUU?i6jXC_c>K=o*H%1IxK2s2V=Sx_^nK}sdTex)ej5`D> zeN1OF69Sk0tn9a93{)3imKzEP`l3^_y<0f9Ec(~UG1QnE<70^ila{q5e6}nnb)>Bd z!@mba?S8opBe}XCs7Z}t#Iq{_5A8}Z?8frs*n}U3OtU{RPBg|~vt;CaZ-)MdjH_Rb zETP+lpksB967W{xy(K<{-_75DoYWV8D*-nK`5OBY+QCs_OZ6;^Ex1KA>q|0MgXeHp zyiWZKxX-0)=X!4ryzGCbbV_l8hf4RK9vBo zo61{LOX5Iheu-+eYY!a1mvQxe!1-osj0dyU@UG^S;?~6To$(-J&!%%Y&;qnZk{E;J z9)WT9d8unHYjA7x>zyk5zk;2@pY4rD|A1r9WJ7^k9JmPYDg)~{aFx>txuB^6E*0GG zX!bVXWVRAZG_ry_x<<(-E=z%_*Xvrv)hyi4cjTgA^*UNk12JJ!J-X~G^Sd|w2Yr73 zSd`XT!9c0~2b~QC@$m(!qLJ}9K7BxQQ&>2Fq27AN%8KO}#t_NFtyYK6J~j#eIeZR7 zcB!7Ea#UkblGnxRh8XnSeo2bva2@SaH<=wdodKt-MF8ck8}(i2YkpBf8QA335J@d7q{sQJX(EOg$MAMV`)<_}ql};!F40 z8zLcQN(2nYqagwdf277&LvZ{i1J!sbaB-f}T5+7hYmyy1md`MuKlx6Nv``&}ZTyf@ zNqUcQ2izUQS&v|{v-Pj?It5IR*P1M-|HnnSB@;pQj(A7*gx z_#W-2ipex#t4s2J7&~3ZQ+Is>pIu=$KIz1SZY{UnmM;5(-Cm2pPb|vtr0IeDvAH~m zW8MgN&Dns|=>w&K_KJ{2R^7zaKL)wVEjPDlRzqIXg3CEoS;!ZwD+wMYL7uJT%^(X) z$O&j-l$ck8%twWkt7CeQbkOj!`rRIgFn?=zq00qaZQSqr&ncqkdA_S#wQMj-jppE3 zJBlf9-cR2gJ&xH0<>k~P=P>_?%AGY^D=fNl!^1p;jKz~SXRlxB#u84q9onOjSTqom zV>=X%1(JP&TNj-%=d^*PtujBRx(SUhFwSFSb~L?*#S`xe8njt+D?=b^TXa@gK!U98 z#=d5G$f66JlZ_IG0@!81RdE(d;!IsDmI9zW`iZD^bvjgR-t5$AFA2|wm~XCnABVDU z9%1V2_E7Bdb@E96eaQ1Q&T|y`2I_@~!R>B`l zH-1tw5+sWGiVY3g#XC|z0@zGoj@xaO-C&Z7kC?O#{TU6~uH4>!eO*`#$ zuwv{GVWVLc%Z{^MeQffN({>a$m_PV|8EW5)yk)2u`rq3Yt^ zpC>L20>L|eMekW8JlB1^(fW)G1)sk4&z!sp>8EzLj9=%5;D|myPAgvwlxTglXGb_W6Kw=RcdMZW((l2rTdAn*Lh2^_) zdvilARd?Yf8xK?wokPQ?`k=yB>hCM&!8X^7{yI!KrNiB{L8*N>6BF(oUy z#_vfk7S*51?-h1Lg8WK9zpf6}6t~|GNa;q>YAxURhuzrlwQkA!RtGjZ+UA-_e!>Qa zm0tbTV60naT~cFG#cILyyKRlmSixV)HQcO?xq6*1%oHDC=<868K_^BCAwT?m)bbkS z%&C$sUyVZrC>KO2Ize^wM0n&HFVu^vR7D+~fTrVNG_qwoG&h(2_j7>-gEKhb}6J^gvQbsb8Wk0Don7u`E>3>p#%@IgGW#b=Q zLcpev6<)zT6eN}FA9v*C$0`=pA>(mJEWYnIviXY?#uxkRT-luj0hf22<#=HNxps%= z@zZ}$S!6OV@ze_HRQjyt!=0fiuDfUS=roWC``Eft1fiwwg!g2WCbaYr&kvh40QvLm z->ITI(5%`o@5QSQb-$%d#CNX%K~KHwOlc?N9h=!j3z>z7Zy$baCp%!05!c+2eU?~u z;iAe#xzAVwp$<0l2H03vYC8Oygyb=`MZdTyq`2+h!k(&!t=m01Y(J$SrR?yv+Q2?+ zQHSw4B@b-sEDTE+n!{Ra;)bkhF+RV3CWZVf8B^t_%9&KX!T+k)j!!O+A^(Int%%N-uMJw|br*J} zKZ2H{0b5e#B%sk!UD2s48mj1gA0PNUg+c*mhY;QU5ag)$YyNElrWUa1N0{(oMU2FW zb}Km~9g=3S9%DzcQrOCM;Wcb!O1eMBrHF04I+1Z!FOlm0^!y$FAK11M(eUkH2Da+Z zb^PV-A~}9kiG>h@q^ZnQ!Zs$X+-pj1mJ`6V8)gPPPuSqGX8F#|(RZNusD?|8svgv2 z8!GeVGyyWcQh92h{Z9|C=AZp^psKU&e_!VcH1Ds5Q4ZUI=DV+9<+Z@S`%l7uHC;e? zBfz{A@dldvV^>}%nL~|ut(!*8VJLLr>t3oQfM>-cshCIGF+0^lO2(=fiKJ-;ol<9P zI*_;^u=gcW0w)Nc_qZX|GY!s5QLz2Yw0yyqP;BpIb-pwfgY7J=sl^usvF*3ik!{pU zY-#P{`|kY?8+P_xJ#qCWRtgA7J&IDs#2d?w9O_vRr$ax6=Y^pnPd;iz=6ozVWW){s_m3OZ&d-qaD^K}T|9LaKQP&=!|3uD=g~)(!ul zx&!~f=C#i0(##uB{o$jw|Arpq=?QX_mzki;AD22wx-u3UPF;JsWP){02Ja1*8n8ui zFXgSzW29bK&YV2GiXDp4=cMB^uyauNPVqt~cKyd()v2M09gXq*O5aFG+i50s<5VD0 zWc^q#sc&F?=m`vDvcYnl&CNT%l;fkCHMY7)bI7spP0*JUg6clA+hx^FK)x|sNC>Av z+nx`}@#kp<(3oF%3Gl4hE9sm!Qp9S-;cn zU(PnhhV57Wab$phpzC@7q&U2i>NIJ@B&Js{9%vs#qQG{Jtv>{@d8N6Qe<2gwVm+I< z9v#At2y>su=?>T}o!dL2Lc$(hLm62CW$b=EED_0m5IbLO{dx9hCDKgIND_k`*pgy? zN^Nc%)|UG4m#b!Bp67}r)#*DtX0O+@^7sN3c1-s}FJFTu!Jny~Rn^e8kEnam&c8j$H}g)ysvD~8cQqws#ymO ziSrVi0s&Aus8BQe_AgxV6B}<4)yI-D#u^TvJ=k!m_U>N?R%|VN-B_tCjz9 z(sR%gbdOhJpV;*aUu{>h&*hc1Sm-SFZuzKPm#T@KKm99xZ>u2nc0#GMcOs(7=R5=9 zw^%vkCE8bX7@wx~B{G>lhx|#_%uur-AmyBwi@tdtT9qh^jazJ>BhCOpK)%0yx71f7 z=!rI4$!|%4z7=1kMezgBpF|l<`)mk(E*HGQ7N?;*QZZ;4u7Oug z>dD8xr)e-SmZJYuxD*C_7xL`U8LOpxcHHVFG z$Su2!-XKE8B_cH0J(UO`x|6(2v8tPuykdMK^ zT^0VZ_Qp8SH+zfMUlDt`<_(o)ERoi2M0`;wjm=k&f69G%2#W(Jmwa}dh3E?QdliST zK#fhRUS_Hmw7OJf#|VW(S5l}QC%ps)1Rw1t+U*1S`tDs~XR={%7+OYm=)+)?%!2)r zB+wP&?}gFop|`4kklCXW+7%`WB#cv_`MLce`iWX77J1cu{@dvGArvsv@~eq_heP@Y&&Zmp;oy2`*UM#pq=&kP z|B-o#eL`chIU2{Y-OSrVlT{3xt;+3-wQpnL9d{o2@*zmsc|K{J`2&#d7N*v^z69!J zhE#U0e(0%n;Z9y)2fE@G&V0@=7~*L#8#ogKLw$vzAUy&@7M^v6#n*w}<@Nozb_<8k3RM~CcH&Tl^K2}uKGNsi1zyvCW1m!r1Ha5w zq!Hflmu2C_hGI8LX@CZ1I+-|LOV@>hsEd1qFG&N6H}Yry_J9tHU}3vyA?R-oihXeP zG7M&<$M!9@!m!4`!RT+tVYt?N_D|hc82XaJt}&ei^hI{!@AvW0+st8Dwr?G%eIxOD zE|-C{JizKd~ijB7(m67j|9k**8b{fCF6*n!;DLaOjSq zD>nlV4o~s(UiH3>F9g`G?qSNtVUC1jZzCTfy*r~UsHOpXKHvM&|HTH|e5@y=9_wOt zYy?dh((1h>5TJBv9WdD<*X*sdb zo+W#y*1sL<3)W5&k7Yxlw8}(Qq!dPP#Nac;jacscJ*4-l5;ng$&D{7a9J^%5$_o2d zAmwxZ*O|xaNMGY-w*1Ruq%T})_(Tst`U|b?5-D~_<$agAt^N;5-*;S?SpNzM!#m|} zIx?{Kj8;a7!UATH<{XAHE_R_XA1caP^168_*J`E-)g&g^B_H zvE5^N5R({M@&05y7J7^B>8w@22Iu_cp&LE1=ZLqA4qh@#uV0`P43ZH%qUm2agu?D z0;g4WohLzgK!?!PBmB@}PU88-MgnQ?QvH5UH=q)KwbkF21co|sZ{C%Iz})fYXq&w) zFq%(Y-1(acv}xn43V{M3Q@zYqDeFVK#;pf?Owyr_FXr1e;uNGWjB_QHeZ!2H?Y1VG zJgnQ};qWWd1KR`kR=?UcjTE6*tr_NR!k_|w>}|ddr45{ptrHs1EIiP$ z`}8B|>aI4dW90#rNBWykxdRx__J1Q}?FMG|(#k(sKY*F1$IIPs4~(TH3l%&ap!^yS zX|k&TqR&>9=zMu-klkZ@sgw@+DoTZ?rb;kHF3I5quEN^WzbTxhE3jSF`M1pdS)^>8 zweWCThxB+Y>EQN2WESTP4hx(_mQ_sMkilnUx^?^A>tBI%fq91~zYCCTrRHV#sSF9r zOqT}h1Y%|UrkmYf{`h#A5#h2%7L;zBIdF@X0?peq4z_U?`=OQf%e{01(5yqNRQIj| zrpkvjvfnRYJvm;|us_2v?+#ESI$0T-m!b1`_MD579yGjxFXFE^ zLw?vl!%wV_n0n3fr4oN0)~#CVr1t&+cIc{$wHR}d(m54pxl9<>Crl2JmI>JgwDDQ=A|-T^FuU$q`D%7J|_Y$0y@2Vi~i zqSFr!0%JUHV%O;_K)qvn^Qs~lh;R8``^xJ<{qd@ddu@J@afoSlM)x)59=myF{ZK15 zJc)b)UlOpheV?ZZUmwzhm02r=>XGSAd4Klz6J(p6l9As+MRqtxD9UIKS;`x8tPb!a zefQU**zy1*^;chMR;6nD=%TG{)WNBdEX%BQrP?{{Ya?E;Sc{5A^`1&kBALc z8UY1uYjoE503*Y0UCpztz?P}Xa=11C?1_1DqSq*}r42ufj^+R($sy^_B?X{-(A{=$ zax=6`fQV}7OQ@bcXQj8OtEa{jx=FG1SeDQDp=r^JE!~gTP1LI)`FgeHHs9???@Eu> zzDYz@%lF9_u7k+gqJK{*%>&t8o&7WShLPE!SToGYLYiKso;b$@J97;i{M9yNeb3>W z)~%(Ou|I6#;M)?&PjK5mW9tizX>PF{vwwiJHMD9C(G_S@LGg00bAe@lY>;eK1sv^< z!ndX)fpfZB-EM3aSola_ZRIKLTJ}RCGRHR^QpvrDoE`nbyE}W3Q)#wmc|<(2 zLw4@h-0g;p1bNA!VjHArubTO0?uUdupX+suSK_C)@}dGWU*Q2aXPKK|1k~&>i+Gc% z1nqZCZ&Rn0G;T@W4E9aj=v~;*OXTX$8TGB&jGTlu?`yt%Lzb5R(%h7dy)rTiUNt>GSZ>m{Z*u3fCeO2 z3B7MC6361oHPW^H53nVygtz0LACf!UGyg<%AR~)rm8iZ0*$V-G`~4D-8)rv2WITl2 zV=}+5HZDc>j!fCR6@nuustl2me_DmJHbuC`z+3mo6YFd`u!UT4JT5+A0 zBhYh_@89|w03-)>^w#f%hVj=qCfgk#{j1%y4toO@HVN>SE+=C1Xq}|uEh{7!4X~(B zk07JEvpDPPFXZfF50OtFK<*F8_;SBMtbWP#Jt*>S6+E=(CbV2w;pw4~4dh=oXIY(rz~t{(s#_lhoS>1h zJMsa*Q_lD6Ze8p{AHT)?%nD%VaktN%(*b&!5Kp-@8c6$_2p`?&puw!C(&uwLr2Gwu znw5*hlEXLUD)0WnR=ec}jnik4;#F5DQX-2?Zx3tga1(OqCv*i(gphYW$2j-ISL9Ay zeP3MTgY4+jx#RhgNWU7JvCZEdyJEh4-?qXG>(>vkX8#srd}roLuv3GN7Ug=YBO-vn zE!*j}lLJ(x3$>S`ZGp8ScKCXTEO4Q6;K0Ff;5|=UowdghxWlx-5$zmco7=wKpP&b{ zk+l^kpY%iLh7*xDyDvknh0&;{!d?i|&Wtp+%>W1IuVT(R$r?6ym z46HUGUO}Ct{Ja5Miku^Qd zG#XYGntT_0xfH@eVwG(kt3d6IiF@S4N$9*<8}wz*S)gwUe$ITB3G8P#Z6(g#1>UX@ z@+U$;q^PNbCfvgw`s8ek%~Hzg1=ReS^|#pEghW2VhE` zgW`1gF>I)Mf6&A+0!gLM6-0I^Amc(azn+c=a=ZiI$KR1h-uurRnj%&skEAG)9`hAB z-#!2JTzh~_d52TqnzWIe{nlB0@Fg}4?xdE&0nE8uWD(aU35Dhoo+rri&=N)6^1?P3 zD6S9gESXOL=Ev6OVaKLCWf{JEAA}o>8`$n?Y$?Wn`Ii1X6SxsuhOEfH|!pj zWJDoPjl6yR77^^;y*;GkLL-VIYzi}pT0!%83l%{~k4f(>fnuhMp z9Oh8O0&tHWv*_#g1ZLpjdy)O6K%UWW^|^f=nsrSr>B-+ACvAN1y9)tWNLQS^HM$pD zWxDmB&EG&uQ{RxK^hRVURFWO9?niF9YieSKDt24&`$#GFA+N&Az~D*-a>P<@%~UV$ zw_E?6d*N+|ovA)8kI&GtcGYl4zncj<30C$Uu9JY8nG^p!Py0cq(x!6X*S$cuXgFT| z^AoWDdrFig+5oRY=ZHSvIA4Y21AA8=2947`ps4em)Abl>dlTI)Xw+;1PF&%LJs z>j>YxN3ShVSV`Z~%wwTtc0f}+p$I+AiC95PYvgzp?uu)Gj>Y<5S>=t_Jc2<4-GrvFhAIpM&PWiTlU8{@Vb$*AWd@ zW{NUN^*_(!?R{wb8(P5BY9uU4Vd|M z284tkz)dWi-p8(jZjXh6ScyR3&Cjd4=neqq_}8b;off&~?J{wWBL_NzwskK1lLOi;+1|+Ao2=V8R)S1^Rbd;uPe@*N;n*}$9~)ex_vU^-it#IW!rQLbZoHJy6VY3ZnclLD}tg*%77d~#4pSB|5fxsTITicMDbm~b!)_r76`*Ne& zS0c}9MbC@7;_V682pROT0|LqQUzc zuac4=_w1>w2@e?1B2lp_ZW$3M3F6;1emMb4NAl}_`7Mik=540C#7XFO3^Ph69tB?b zr6rn=g@Jud;9Q@(CeSSOor=PaK>LP{zzW9}DEsf+mpDm(Ofyswb-ARCO?&Q&P(yu@ zOtV}*KF_-)e=E$yhGMnpfL|Xfc8-`PV zu;b*Ma6UuhCj`%D?BZLd@Niq_HQ;Y_kR)!4VMS5Wo_U0 za8u}3t2t0ooDaMY!&H-~b--TC5)!96fG!YoUVrT$=or;?oZq1g6`x&tq+LJbtKo6x z#Wr1Ra8F(u^Q8gFt42cE0h!1YRra@tB_mhWzN6SX3cJ_L_h|KRMqUcvOkUIovb)c4 z<^C@E^n!8Z{pvLAV7s3gYSYGwa*2_(Vny&e|5EbQCKfb=ny+~iyB5eBE+!@a5e4Sz ziB{sB7~m?airEASF7B5!z155e-~}5L{b@@9cDjcdaU>OJrNI_T`U}vp75Hy=?-rnl zJorO3>H=n^<0Y@{{}%VQsE%WN4)8wv+3;&V0PfcjyC-#Lft8ZB^y;;uMGm)4w>eS_ ztu?Qz{+{iC!nEl`J-$*bIL<2irTibZPz2wtG`)nBk(9@Op1eku&Hmd$`~D)gq|-D1 z!y4o@Hg=fZe}LSp>bs>!%aPeq@-gxJVt&|Sx2@hn9Gm7wH}Tz>!wfsSeI7Q?p){@{ zLAY)OwB2h-Jv{0T)cJ4E#}1Q#Ev$J@d%^~|b1(MTwYdN<>Y)Q6uK+j|7t(!>v;ZSD z=BMiFKp>?CEio6fhk8Gni}1oqct))r=&#nmDqg&XM)4RDD^ulyf=7{V_*8YuTnyQ? zpmjPgYLTZkx%q+Q8|3Zy`Q?z*b!0bjat>}yM!JgbmS?U1ka$P!K*6@FSY>n9?CCLO zc>as{I;*`F>I*m6RT(t{sd$tlMKoUIYa1DZReON*W>B;7wkq(BsX1i4egWLr>Ryw7 zi@7;4B-4Ra15|U*@2XD)p!IXa`4Oi>P_%w~P6 z$k{qCGQJj%ztJPig^KDEDf5>3&{4#>a%97Epw;KRVra_%`<#|yII$YI=#%O=D+t_= z(%J<*L|_{;Zs-MV0b0Tp!*70m&|yV?`XlHmln;G#f>)E6aO}^B`{9q+P(qpV+3;v_ zzT_DtBlXB=**r+^If9%(*_124MUl%(pT6;|204Tl{=wCS$UK|B2zwSCKf!~Pc*`+L!Od5aow{wvZP zGEM?6|7cHK(NAC{3EG8MD*}!Gn#;mS0JQI9s=-KpKUKM0j6%?S$)H&K#^IQxg_NnG^akbm0xEJxyv&p+h>ch=>Dhuzhow` zHLdQ%(nmXy((__($O#{0W&c5{&9F}!&&Hyv5qRxeQzsYGgO%HZU% zFSaFUQN=5Tuxxgm5L#XWDd;A6?F$VWUHvT6F02Rg`hJcWpBylp`}OP(oB{T0mnI)s zE#SCqzWHWy5?IJTZks3xwC0tngwK;eEH_9gl=Fca<0XwTYBm@Uv)5hiuqW2mmXaR` zk6@Qbbx85IX{7IQPPbc6L)K>kLyG@4anKId#?zn;1ub07)XD%}D@>&1|9%=WNk-l86lPyhG!;W})x z`4io#Erc0A{mgI8ormJiGaI_Kq@b0&reLc2D^N1N-CoxE8kp;BjTseNfNf^vR?s;K z>=kbeC}FX{u-nAb{NW1ZyPXjl?n|L*oX}XgrVO(G0nsm95{ot)TRqbE#g;#Te7}=( zkz$-6U{1M*4D`&d)B269M9zUR;YWvCFNGE8pK2^NJ_dHVtM{VGoh z0E&J-Zqk1Qh|8}XcME&~)P}WiDIyveb5}2aG}Qwpllj<1D-0M$)(=H)3j@V@m00jU zH6U1crTJgihO(Ot6>aIQ_^zVrZx!X{_VI?vuUnA2b5$L+I(4;B@vJ74UAW+xA) z*5xfg-YlAYnfwUora{Jv!@9uSY5%ggdOa}mw+bnW+y`oh&c@3zD}Y$^<)ZxGET}Cz zn0jbEz_TSj0WM9(Sl&V;UwUy3+ng2-e1G>5DUbgNMIBK>`gjU4ePj|D3+XlWg8fKO z8IkHXnLzUV6i-WZ8Mcln3oM`2#WIhK`hkMS@K*3x_f0T^dU5`_g>Vz-j9As-IlIU+ zz3)EkUb_nzXPn$MTk?V7?WDFRybfqv+C4r<>Oz;BrCCU^Jv3-qmhw!-A+>hQ-+O&5 z7Qd-$jBM$}7GEz)<*)rnHoI{6&fImR{a!7s&c6m3&Vgb%E1Z$;rXbv#T#b|s5@C-| zyCMO{j!$??V7cJueSYQJ;Fw^I`k4(Yb}g5I)V|`WORX(fEF$=Htx^XzPo|X! zy?l?Pk+tufeI6n0_I?|F&jh5mYrgNixDIJ$pRR{BZ$k1p$)}G>bg@-S*`o2rEi99B zTxD85P#&6%tX$DGu zCFkPTJ|thhpV_6L=)bR24CNfA6X-A0*yh~S|Wb;SJf3H+nSHQdbXGY z9H0HW_RkdQiazyq(k)00v9S>%SYwyFvsKHwIBYcIIB4EJj5+DGVOP4WAeZt)t5L!m z8gE^aC^52vF6Suy-@;u$wU^5LFli1n=G?)wA6J1oonv-tab8Is^XX5_8=>Vc?S+e^ zJ(NB;s?KK+jIU2udvEc7gtbL8x?}P8vBP||?7S=;DaQ z=N0ZxU;=LVA91f?=FH=J$`**^DP)J}-$>BfrbKL-&z9bIkf0{R9&EcW7<@9*_0e@^MW09?bOq7^d><2;_!GS_enT zLqmXZwVzHh5WN)(Zgt)P^4D80g+fU{nbhQuZ3qK$PSN|fd*+}cf*PASF%0#`LW@n= zEs*g%Wyulv1Nniq zVcu{ZP!3eey-A(|Qf1`&ngbcoW*#hEmXHhB?E2`fDhU$YtRJ?Se!`*)+a`TinP6k( zgay|&4~f}MtoZ5wkn9m#B$9O+$=p>=(aU0xBkX~BdKsFfChRNk$w23cnf+n^J_7k%26^O!&*G`os=ao{;``4(KP{d? zvwUoyTwn~8nHhXBI2Vc`=l|=NvUrCTl{=L+#g1W1i;N=S%qHwo*m~Fwt|EE=Rm%Uoy;mZ8+0@4YYg*qbzH3(*iF5sBXa=l6U&U(fhG z&jZ;Me$QA>J7Bd`#B6?fF?JtGvJJBm!{Ox9Fdl4-<1#bJY?kFX9(?846SpHcs^iS| zRjmMfdnekR?_R~mvBukGM!I0L{wwajs1-C{I&yxaKLh&Cc}v_lE(xQCQemT2#xSlP zP#i^R3r}4-SCb#a5IIa4y?H1GaiDk{7>Jv9kq7Brnrnfx&5$8WN7{Vj9~Ii*s} z2|?-M%HvM^9Wbwdc=z5RB}9wF-_HITIG{q#Q(3-C!qlmY3mkLH;QYr-b;w z(7cH~gVh%bK6+x~mA)TRhR^Vr?pr&rC39%xz4Us?qZNAMP49A!jIt32E5Nkerog zBY`afN}~n=0T>tF`y{e+8me8W-i;1wKxc^WhoephVL-wBHfQdQF^OS`=Bh+Y{!PS~qk9?IsIhO#*)nQQ35Q~W zu4gKE;*joxk~{Z%u}{3qkowIdY%kcm-;(qj3y!76Zx8{e zktoa98df2WJCU4+%4h!a#?9Oq6vY^eWu7$oahvZCe^+ zo|@TEcrvSz)y@R7U-}NRCgfpjph19PB?)^ZeY!#ncd-8-pS;MVIS$ZW^Vzu*jXgKV z6nP(1Ad!JML7OOxx&AB}zua>mZzPhjm}&)xcS{Qnw7-KMCHZrzml~iy<-*5fTI)<80voee|W6>pk5u0rLz1helh;ef10TtPe} z=y|>&w>ZrOea(J&F7b)5O-)Y zM*ZY1EQyivQ$Ajb#K}KLpFEDj?gI|3JwyrY+1a7u-};T+Cj2uF#!T4u&-Yg)Q4Y&r zHAjcVEKQsF2poje%A?5NN^HRgmMZA@vc=aB1?~Aik zs_KLe3W1VyQd>}eOZn2uoHitk*PU^sU&eyS!J0o+YS`SiM7J{f13Ql#rp@<#j9o)V ztk@G;|LZAVO&UJ_kGHeSWK>O9NPYUG7&`&tQaw~W*ae`@#OAG1o-mLCXX&T6CZLP1 zCFqUb8g$0|(h|7(5Qxw9lCN_bLDd2I=a!;2V46`^bDR1DmT&gN{g8^rR?K}hbm|6n zQZ3OK`rg6LaE1fvNB&}aX@Upiqc2$dF8=88J;fN8mn&pKSq}M$U4Mi4bD&9~;O51U zCxF9*2;1|U(0Mj)QfKx6kP`c8udN9}1GmN6LY^07aZegCSx#eGF>{vYg-EQI$bUrT zLXPce4RHaKmDo{D(OOFX14%DR#vT==VxzZTI)j`R=FQ}Pd}yEru~BZH8-IsFO&^;| zI`e)YRXc4%TFuD#~xheGF9!t-ph7+iY9QRdbPR#Qx# z``i%`0|JS;wY>s+U>)xv|J@QYU`!JUj@{HU1Mc0~J#( ziN6>#p?TMxaCT1{keHr%j2J9K`$-+fqw~k0G34v=(uKcJ_?w*TN3a+A>?B)q25n#k z!y7^Fd}gW@qVa?gkR>-z~kOC&5w1W$ekwCW|d@u- z6s%XUcDwuVma6pC-L*FaKk^fy{(L8xS) zUs~VC4E0Hak5zgPLc6U9dQ6Mf;22M+}W%(u9;6NZaraoJ;kGN}V^lR`GmL zmrMD+zvKhd-5wGCNeqYb)e6xBTQNvZmH$KhauuTjx>J|rRC}+hSd~yCQf)1SISg0AT{{kd<*eP!7mlou=gHfzFE|U;vMEP~f2cuiLF_l9 zfn=z*HTu4Gr62OIkn^-n(}H{D&5x>lUocZ6>cOA!qgZkD{r7833|RAAy#0CAJXSv@ zDpe`gV4>2y{=;zGlt|ot=?#S;#fL8W5P|UG$t|5- zON`+*ULLO8#e%A1dwdyPu_9h+ORvZnD@?U+-rsWt3#1*x>l~^uI)+(`zMBmQF-)_* zBnv3;y?-oEX%)(|zhu)Ie1o!)YjN}LB*?q6YZ=b#2q8-A%ie14&-Q_$0nOtf6ugi(FUh2PjmJT&O%~06CnoKaVfTK*T_2!nV2~hQxabc&5f+HchUM z`3w&h$mQR4m_31cB_%S6cLy0}uXxGcLLk{oVV<1i4!8q}X zDP+$?>D-lRhIB*un4fReAmS+PKZ*=C^p^Z=+O~BBlLFM_&!yU6)>EqHBw1Tb&*bTw zN%)PA-R16ozD9uiB3CS)^dE-=_x$!3FMJ_mBu?ei+g(WK+UO5!T>*ly#rqf?a=f;) z5P=U}Fz%wBf*9QuO#5q!_n1U6jV(Is6RkB8SQ5*)7EIxSs=cI(fhQ1l6_zc_uR^L% zyqGrYD@bW#pfX`{fXAw@WhU$eQTwIAaob*cBm^~%&TpAu%7u4rR%Y)pd7q-YAN41U zcjCpY6VxWseCk%Y-P89f+gz@~6X$=1yFo8cOV%7BwhV8NsR5AYssmf_8 z8>SEl4;>)QAM=NJqtootX}=*>UvlxnW&`;BiMuQGf*M_gtd1Gw_2T2i1H}T0|MA?n z=1H{!4MyaQ5Cpz8pc$vBxq#U>2s|vtNH*vMg!Vn*kG}^1f#nm6kbwmFGgFwtMNPET zQ?a*=w8n_rl-+L1en_xsUNYw)!_Z3OuL)c`Xl#^TMiHzG0e$cOy_DI2$MlAh-v`Da zGW;idgTngd0GHnkY8J1RDJeFmefC@1u+9Wg*(g8eecb{^FUoEe(XYzP_@;?E@iHMJh^svEUM$WxJOA1?_^@DQZ3nVi1j3 zL8?R&2H%j)kcfDUZk>K>d1S$GSMgHhtX4HVqL*clXLtxfD%8xD>RjOVb^q%6`A)ne z5vextIT!si0wOuz+u);LWj3+REa-aQ->=Gm8B75x?BLe(I;Hm>vkXx)o<{#mRM%w6D4 zm(1wiT?cTvZ5nYt;w#wY8*zGa(c+0KuAbj-KSO)zJPG5;Q|QEA&zmc93=LyWloq@0 z2XkMQOMK_=gJX%U{IdZOFmJn;X1dCWx~~56zA}?&2is%Gd$!Pu<8#@oRaM~To^DJV z(+116jej0p_rcn%aQH866{z?)H}Hi`quE66y8Xctv}!+mD!DHgwaZjLl#pG9Tc$>; z#NtG-Ji2=w!z@9s>8JAk{r_>LxYJC)fC}%Pp;pewv_`!FmCj8^Z_p3k{p9AD0_G~L ziE^(`fleGvWYdKQsF(K1|M^ld-Z6`)FJeLXq-8>%aCd)Ta_f?g3| z*LhL)M-CcHrJi`68-_;zc8Ud)U97qM<=k_SebSlCPPc_p#-h|pL4b+} zgHB3+ZUP|-uSJ{lHJ|_;S~6EIA#1GK*{53XQP!d82l4f|;;y61S@zSxAbsRW+tzho z(rW9B64yR{6rWibblwpL3XvBxx?9C?x?IVuSi~9+6 zkQ;a!H+iqwu_0gllE|-%n@DwbZTlEc7VzemQCF2nCO916&0 zH>#T=Em)i$oGIr*hMQG;_$NAH|4F-zguxlo?{`lp)tE#{KZ8Er8B5p?6iLS_rGLdD z+2q0wt^NR|sC z^E6>eag=^W`qGjrX;4Aq^0_H`#h@$Q$}1`1ilyh=uI#d|E5=*5#Tct-Cr|#~;##eV5iB(D|H0)`Ny4@sgsz^^xn6Y3nQG z)L!2V42o4;Og4Sc=~W1VrxJps!!M%b^O>6FAMzk3VwcaY!2`maJHJ;~4x;icp6jP? zZiA@JWMXkm0H_3*@m^p5j%spua<}dlpyKYovNm!6?PH&*D|LE6I#XUhw$TaoiEKYc z`z=xC*;kLjm^QfHe_xD4=nehd-7TtjLDaDxV90Nm&TmIxe8;$HlMOLHE&) zInn&BcoK?uIaNDj;NOdnrq*8(5IUK zn~OA;1o`iQ`-7Ukm8&XnBlm_5X9*oTv#Bfov8_SRxvkWe%5pT=msP19YYA?V!SQA5 zrr=9yNaJ>N1B@Qtn{7)`LJ#%Jdu4Tv(El)n$^%+HyzAI=k#XcWxH}rDi;3#PBfp8` zZK?6#Tz4icM=2VelA{g=RI*^uHPf;nN*{bMqi*8CxC6$4{KsEwU4fu8u4P7p%Mi># z$Nc3{BAC0fT3sEsM}GAv@(W*I|$?zbdcoB`RgS@tgnxgfml#NN-l z{17Wr5~K3b34(4`yb2KWLi?q}3jbVZBv2j;)DK<8I1_p^(;Y5+r0}$VPFEkiSgA#` z?CT)T`r001>^q2W(+{Z`c?gf>47XVJspEs+HqjEA1D@h_+nI_-A!Qj>g-HJ(XYZ<9A?Hm< zHR7!eEH47j^SXPsPP$`k{ypo(=ed}@F;c+CC51VupUPAS=9rN3QtLxB3)mS}h&29l zht!=PM3Y);$O{vG`BUNu2HTI^sO9^iEaz#Fl}$2ma@SD*}sA@ zyh50rNQ)MKq%bfeT6@v|1H{Q>pSo^w2l7Z2Q2y#T6sCSoeR+8dvhQYTm8l(tZ>LlwbYGX z=YdMq>geLjSx}vlH7s()0ZKIU{HS%DA&#b@C1EEVpHOt&F46yoWt0K>%X3GtCPhGl zLe>+jg_DVzHtm>qdL!}M*IbbQvl&)v^WPkoX7gv9wxRknz0f7nTc~XdHn8=23>9@r zQsJMAA;qEdwSco065e^=v1l~GvU@RJp0R(iPTuzFGJL{1?%!$=td3Y(V1M<#doxBZ zOq>5*jf2c%wac-hl29F~JJYv#9qQ*==G`qspib>42O+i_iiJ&^Dz*-T8|wl2uK#>q z-frE$G51NVEfu{Zt92Y3rN(#)Z~eo%WM4ZHR}vQfyd5ZXH3kKge}7=y5dAOjvq7^c zLcIiqnB7-tXmad++;>(S>Thb(UG~a`A}0ZI(J~FZ=%-H3`*aqIAD9`;?iOK#B%i+j z2RUr6+|#(y{Sh0g-{o1-E@H`IW7(L(2ehPW;OX8qfTBMAKHklAXh`8OP@=m8EwlT$ zKjphaQ_`bDPdDmHQx6lahXg_95mM7l&!iC1Atxb^_nXGPb^Se7LO=gDrE1 zb*~HFz}i5rO7Fr>Oqp0D3ojCZj5~Y_-51-TE-dFGZ!jYek1`+EeK!hi=Q=Xe2RETH zcrEeB)?Fwp>J{Iv@;A;XjnT1Erob>^c%c1iA`CmXv&pE5r6$MTG1oF9K zaZvcBB9MBz7^8kt6n+u&!CD4sY6YPhY)hdn(b06l4*L$#=RT#_{*`8O_v>S11o zmUAlLdYmut;l;gJVc&75dg(S2TXy6Ht7NeA!9;?I4K;SU$}FW`Yeb^Q>FjfTTv%?H zoJt=x3IX#K;R_mqP;2yeuHiNfke&y7*;#&vu3#JT*QI-)^VI-fr{+Uw-DWzzRv!-~ zy5cXgmEABlCdKVbCIRbPfT?}m3p)bs-8IsevHPy{qIIV}c3DaN{Ik`LL?i(5yT5&p z*4u^#waR^G;zl4e0B%5$zvE&yHQL3VwAh7tC4hc8@q z`-wf|U74|a&5?NKTb|WQ6z0}$?fs#`5Ba6dq4Y8C!~Xm( zbwRE*9JtI|Ho0MfJ;Zs*vbBCBau>W&&hf^qMf0+!CAXmDmiYCMx14|mgJzMdz0hZ| zuRso6VerO{xA~PBFhJw<^Q?M2bmeN@KQ%f9_3Q;_l)wF#OWwUq*y+p127{O%d^h~D z+aTDgST+O)UPY_LB>Cfza*5eBzF*jH@ZNjhd=++texVwUpu)1z7xQ--`XICIah1I? zC$ydPP5A1y0eu{6u190lVJQAe2dA$R40RL#$?K{>UuMqvhip^O{zUXJe{Bji%m_?Wnn_3V_$~BoX36_U$n!>(ml7ceYP;%G49<;_73{g zp40UH3xU?0q+7ff6(Dx|w;9pn_x}I@0RR6Cmxm)2Y!t?mk;*7aNP{R@Ns^V5kQS1R zjEag%()dJ@6&ab86(XZ#MONmqxyE((zBkcMQ$?gc|G|6C`<&Dq=Bf4(9Db3P>hNV34rNSBKP}jYz0<8~<5_R9x$?=7gYaj(cPspgQE)Ci zbIf>tKwS#DvaUQldsY+%H7+l(0}2qE*19BgE5mTByp8(DA?QESI5oI38QSi4o@bhr zLSB$$=yivEShaz(fSsm+oxe7Y-}8ThgQ|LVI+2<<;`3;T@w5j=)=W!0Pkn;}Hr%zW zumJP`iY!a%WWy-nU?XsoHO&)3i*^Y0lsEB?`?5{9hu{>WJ*L&uTuXT6OD zkYDU^dytTUHCo);^5T!NSMRy4g4jVMEq!GYe7FLsB1Xn3!?8#$s9v1ytczsIf$Qg| zSU8xz-#y^wAhyeO=>FT7g7*TgM%?+opuXxZQF_@M==-qAWz*LxAPv9%WfnXI)CcOO z?~KSmlXz3HWN;2BOOKC=D`&xA#i3T?lO(|QbK9deJs^eE#?M_`j}4O&o8;1i=XG$G zaj>Na$wpM;XD@V+wtOPt(Y9KoMZXL=N_&iyTSX$_zr1iLZffzvcZGpiB7cB`(|oREq}=hvf5s z=zqrd($NCw?C|W_;N=E|Cx#;xL#naH!=w0FU<~$cNLxH-O+nJEV|3l<52RgLX(jhl z1nH^e7DhQ%NZT#}a?3@K6lE;JOgMu*^uxK+Bi&fFMPBmXh&z;qj_zSQPC<9UuZ`vk zg+S7J6uo!hRiGIJR&*T>1N!v1Ymd=epu>#riPkGXS@$qEKraIbW6lK^3I?H3HL~YR zn;E8Nd6rq#wP1ViiPz-z3>=QW_e>+M4yh4MG3J*yBV*P0niCnzkzw3Avvt2OQeTHR z+g|>K#Aj0-g~E2&sqH5l^y?MoaLkO8EbF13+&ZCAwH^qD%f6i**#eY}ZA#iv*MR;! zQeq~;9~cvPr{b@g13mx#8;1WIAWso(M|}LCzj7e=zmttncV2KrCr1+>vi~$setd;p z+vvO?&Hr%Zea-$A_WnrAF%?$7?uSh2U9-KZvdCOaIq}2F3~9I9w(VV3gd^2zm$p#X zVdrR2W&3*-%wJ4e9(`pR>Pws@ntzah5V`WSkyi&$B6(hpTa19=Aet_6t_PTeX7-O? zuYl3kZL-n46{t3GzSj9wFj%y9_Jz%3Xby?p-1^BL<2UN8SzA$s?PD$tL(()Po~6oZ z<)tIdC(lLa$#P_do>Zddw;*d{X!>M{6EbXG>NnC9k)q0Qrcd`_|JEiRA&QGNsvMzR z6#-CUv-#Wd*ly_A&_`iQ-vaXDsEOt3mx11!r>?7Z1y~2GZ~4jH1=i7>$@b#4K>u(~ zajlF6kYUMMRg3?iCtsOTvqAz&m3P`KYm&uh(H3>D6&_;0y85OYUG_+E$f5YZS3*Wx z)WdLQHL}La+IkK=MOJJ|Rxvvc>CcygZ~^A&EeW}k5x_pGPW!X;AFzfalLe~~=p(67RWkR1 zRBHQlOHC?twdRenG>aj>c~G?EOawL*npGr=uf&0xc$Kneo9A_QSXXK4E;4&62M!ok zAiKppF#YaPWN+iGFix{YhLI~-()1>h(`lo0Ed9Hbd zmD4EnX1gDG`}jGO8_nKt+Tx4PPM%65Y#PJQpXNcG(39g9+5^b%j_vnI-wP;tf3ZS>L~=Kn{AI zTxl#4d;xNsQi<~EJHQmVL>8Ex0FH)n86(XNIIptlUPhI`R@pS*soXK|Cx^c+{vZQH zu}>ajPj5n-^TsS=yL^mjVpx(7iekqhrJYG7G#vS9@LPUs9@5!8*UDll=l8epXxs5K z$lc?=e=flsIY*`^f}$mmF?U1#v(Qo`ClT+Op33%Glnh~)Xa;<{cFuS%8z*32E_8@WH`{ZAa_ zoGoCG@i+0GK{Y&oyakePPf~~Xw%=wG}8IH+piYM`Og9#u9d*a2{Z@4rD^BnfvwR|^JcCXxa8|mfB2t(ClRi__FDq587-OGQl>!n z^h@cQy#>T|UW!GI+n}{UtwSt&J>EW5YAu#GiJhD7S=~D7f}~qfJ3b$7M@I7E>Z2O5 z^Y098`Kq0Tydc6w%F>(2WociKh$}%BEwST^uNzXUWapmg>_$R;$F*xWsaW$=D^$qr zCY0T--tp8%1o|XQ@`Jve1WJL&6Vaj{z|!pXUy#fJZmFHA41*0k%BdmGqw2uDt-0k! zMFudxUewioeh?^!H0oHj=b+a*M$Ko95|n69evo`3gLQtVo&`NWj{_NdwqBd+K-&7h zxuOmE$lkZJd9Hi{c}{z`d=f53{vw@yLPe*LYjYuKuKFJ`ZH0X-4SbP&Og+q{tq!}U zt%_eNp2nR0MfMJ(GthJ{eS5Xf0Sovh?zpxbkc?hZ;GG~aus25vyo@_ zc4P8N9gE0RuQ5w z@HjI~yz3m)U0glocfSWq^mHwxf8D@dH(S!7ucJu07SB!ME=HE?UAal)1mt<#*83PH zfdYNi`$ZA+`)*=d#ptX;&TPP8jl?-*Xj%H6IYGq{XCIq^if@Ro6g5`#R6~FV+c{{@ zR_HK!XKyMI2PE*l)6QK3jADMxc`XF4V{qzbUnk&CPV8Q97zP46DaX}1gTOm+FJQy3 zcwpHcvv{>C2Pi&Qf7w;GLa)i+fr#vBcs%*?>eQ=9tn<}>a=rR94rCjcWOuwknt9Em z4AEL-Kieh#+%FXQJ4(W;1CF8~d3)uu$SLIKy}vm9w+%TV2EE-r^PF@dE}ibG6~&T3mfck5sx1V}gFxFG?+4uBl-*wru|Tl< ziNZk7b`acnA+p8(G4QTO?fnz}3Rqs^&2_Kmxi@TKd$H93^hP$zMl4i^C$XP3itgUU z+H>i}OOt=%fMj)+{l(iz{nx6z)a^5}Zx(+~75F1x%lYyi`wSG+yRVBkc1MBepnmms zMdYe$Zsl2fAj83)95T+tkF67wYm@5w-}X6k3NDCpY>_s z$LIM(N91RCKpSwE8T5KOPJm#+?<@HmT0k(k&^KX54EQIq_N_9y4s4$Pk`pWU11&6t zQ_CBM!K1s*I?7o%IurzoPAu|OM?vLbeZq2IMQ{J67Ar1XP_pi6E)dZ@9>1s!%5MXuKOIm+Q240hWsuocn1XYw~&N*ce zM8=5CR5F3LEkaGmP#Tz@`m7}yF9Z4S?vrO;heFSTn7- z!GVPoli<_Ok;kI#l+Vq*>K(Zw5j8@OQZdRTGmjlRlmp^t#e;WA< zOHWvvendfSxlP-O6DV+`zq(WEf!t5mh1a__BD45IYl%7)$%LzqOurRkPjGd-c`Feg zGcp#*-(o?{tA(QFJMw{`WjuXja-P#%%W+TdH(*hVD7*DUfLC;C>w9HQ5F~WF*p=J` zf#0rzx@A4U+xy8!!HNwmE9H%8L$*M9#Fk4cQHQ>q<%WS*Xi(LXB^|7E0V|3~VK?%O zvG-{$T`%byQjA{4uFZOY%(u%7k`={}x4{2+4*MSp%vqDv$Q>xSCJ2;!eL3x$$^@7hu#_mBo0%ZhQ=)iXd3Db~J< z9Y8GJt984^8QNWw_tzvogmA9|t8DyIR(rHX#zEC47g9erjmC%0H0I9 zd*1O41RG1&8}4=oUc7zyo5yOvUf-wqJ9eJGR4nf6sBMP9_STQwTN%(SY#yQ()s1n= zUp~JxdxPyUIzyu42atIF$JC#D?MT;ibTd0Ue-F$8kqw)cBac@kdemM41Uy$%mjlyjHcy7&09+G~MUJZ!fqx-BUaWB+@QJNQl}((1=dAJT z^DJ?Gj;(6llbm@ztfhvXSq(!C4_9f4h(qf;wYHnTMZl|kpT1VI0=6_A)BN{49*5Sf z4k^{-Ax(-FSZ2N)S>&O_@Wfxplf1v}vVSJ>Q|`sZ|FA~BrM{_{tpK??jukJwn8>`? zTEHikB4y8q@((Ff*e_DG8{%L;MXRFINw9rIdgk znf}s$M;NfX18kelhXXHQ`Due@Ch&dfS5l6t0WVw3WYhOK;4BO3tx5a?^dGsd`br!i z#e99A+oB2GJO8RyJAQ(a_l5iJv~9vF%i4dt?p?>8S$*&O7G_A^Id(2+JR2F8Z?EXQ zN#Gxk4BSs~q~J|0~RCZ~=hmj^LZ9{R3$b7cs))rM1@k|y3Kt!@3I+KPNL^B7w7_YY)@cLgbobFO*dEmbpy1` ztg!eT0f}>aY%3M!uwk0Lm`#{K!Wz+Y2Z&BcIrfC^9j%MZReuXVJ4++yzffAN1qXS% zS-aM(V<7LW9>MSAN94RopK^{fL?%UW*CFB-Qa$wU^f4ac;GJX6F_SUaTIP!dG5Q#_ z{l(pz-$dbg?XoYQB*lSXxKPjLk~B~b%=s%w&j91Sig((XXy9z&q}@KE4BW3Jx~GeF z15akYb*H-kCoR)}vECV&Degg=vh#te`?WZ%N)ZMxy)(a_V+gHp>ovV5pFsSwXNO6) zQP^86aP1)E#t5}UC;1?^b6Ljn z*zd^k?wcGsIp6c*51B+8xFFTJ@fJbJ5Qh{Q(TVC^h_8SA@+|7a3dm&H=sn(F);1S-@U$(@UyL7q|;WWbFN!z`gjw@HnJxp2Fw;4AZJxX$HHV1vWCyZ#hVk5q5horNk<|Nm!4C7Jt3Ivy{t~K!|HNw-or12>P`_}!F(97a zmG*>v0I0c}v|N2AfibCN?b!Ss*o&MG(=CnyyKTX@hJbUxmbzainh_QpV>`wx8y-ph?_+y%K*A;J893l6kym^QtM9M zMWAq8K3^Yr0u1r-EA}lnfF;`O6e)CCM9te+>b>7hvfxL(~ z7{C4j(2m%@a5p{+jHIP+PsP6lW@hNbDC`8L&xSLedRu`$H)X3~mH^aCTLvE~(gojZ;IPh~<_)qrIVK*sU`8;s|s-c);`B8wo@E$Dbxq z4S?JlDsJ+hB+$+R{gmb`FvNHa9cxu!M21+^eUkt>Q$N`(#T#hS+xm>V#er<05+-%* z01R%u_p|Ai3Uo%QSJ-8lLp5CxlI<0S5hp}sbDaFJZnn4gyjc`>ADA(X-(iA7vC=A; zUO7lEGAC<}u14DGfe@y}Ql#G=$awvJ7U^T(MPgMNk-paaMT%k$QunQXQ7m1Gq>zl0 zS`VHeq2*xgY86%NFfpwEu)-0arWGDkp0I+1#?Wwv9;jR)+2aUsJBV_Jkqr z$!c}!avAGCfcD#7I>`JJ(066if5ZXMuKwJ=$owx*9>1xad$9~g zm~*s`qw_suL^yV>&v9r^U1Tilr~{R%E_$JsOEJ-EnWDwMn^?cr)b>w01G}ngeO1Z= zanQE2?7Gl8By~Bw-VhjxR59sgSH&Wb<}jl$x6&GExs*)B%2cGjJZkdVX+G~ZJ5xp8 zZov^nVU^)ax!CXFN9;+UV*7vBD;Z{I@#zYEg>5B!Axep}vc$q0YF)cNviH4(&P2(A zvk#_$Fg3U^efS)Z#GhRJ>gxp*>wQI}BRrty6l`TjhynGt;nH_=09_NaB`86fxl z_+~lw8i>_mAAV#sL%-9zgA0f+p`99?@|H-0YDq${QqgKW%yF=%F1d`=albUbukFV6 z4}aT6Pn%%B-lZ_Z$uuOICp#DGP9fRH;IMoE11V(Vj^sBgNVN^tU-HrrDID{yL96PK ze7&S?`K3EZj6Wot#hJtY$9gL+%eZ1kR){9ezYc2xe4jg=sKr|^+}j3r=s?-M1%>h_ zqM)_nzL=4HH1vvI3wGr{gCPaY(8F(*0qK;6jkUxlAb+}R;iPK@lnj|855La;+fmNZ z{kKbiY;1dP(DeZjlP_#hpLPO*fk3y`Ee1NDZe4q3QX1;hGM`hknjm|t(x#1|f(2KM zHWKQL@p*l6jMHC5?7AB1@Ur>~5;6@Jz4uT;;?;(eSzliwX=3x=1(oec9u&Pfk|T;_ z;)A>&uTqdSy*+eu)-ohM`q=mE>?0(6d~E6#P>WqNFXdisp<NX7~mB z9VAnlUj(JrLXG$dU+1^V(0;ohUy!B-y=|SQNt$*rNWJBzvTHAlBuS|%RT%>5Wu=LN zVlR-j^Hr5Int)VNs@zCg0mQncX)N{+7$_Nju<_k)=sBSswyBJy{MTOwRc;CW zMKjtELgBD22cqyvXwtqpTX}4{zasw0tRHqI-S-nx@Wg(OpgaCD!WoPd|w4ak@^?C<4$gPKGYt0VPu&@L$(7qMzF^u&&Q{yKCK2*00?k9?AY zVXda+nZ=1focrr>XXO(ULE9~I*;W&dvR$uJy_UT5KVO&aQn5s@pz8MY##6N^slOV}Bl+-iuvIdAA&EcAoAXch(*>x(fGN@0+qU+ll%5QgkaUw_ung2AW=xn0Yb1L5lUcw6GU z4lI(cdwl3RL_9h_Lh1-PZ?wWv zN=k^NjLIsqiKL{Aj54xU_Fmb0+;it}#<_FnPEnDRl=x9fqJI4W?|nY+z3=-DtPQ`G z>7$Z}c}x#y@99Z^_je{=*@i*BWWjcOd2Oh*dzt!H(f|mReUF2l{)To<_h2@2BXnx* zy!y3%4^U26KKu1z1-d1vyqU+o0_8Plr07sPbls<_$_zU~hd}$fL@#$B)}7yXY0Fz^ zR?_(V(6AON*>y9%zkfjnUqI2~qA)&Aas0)e3&J8>t&v`0EY``!t}1XPAtCJ51fP%= zk_eZZxVaBwhlvz(N{|mbe^RzaI-kI<2$hs`9!}UL;<|RnNiXb(k38jid=T5E^*;VI z;X)*E?fyROiS@(kRs8Dt_+r7CccHlz6C^BLozE&kl)ms+>RuKU_kZ&~aZV5F_`NOu zx>-YOhC+8$@dOYj>nAJ|)qpHNu~YBKW#|Zb9=A(<0y@6%$R8MZ0v*N<32&?wp`E_j z=13zi5M5pqz14)EC4J{5h1yK0l~*k{Zc>LLPY#k&hcI?iYm4s`7Zw+N z*r=ev!deybfA{*sn4p z{h<(ZI<%-i-p%5Zl^?4)s*@nhyYk8VYfQ*#le?R;*AL25d`3m?szJ?9J-+umFQ8H8 zYF0w{6KGM{@RrkJ1PELw|0@Rsg5RGj9VM%vwd}8POyE2;KX<4#7bu1Xt7TD`9fBIU z6ms;uCY0&FwaI)o4>`LfrRD2>LxkDlCPs}O23T*r7PLPFGk2E?k95{y@t}BHb;ftB z60`q#@5u+O{V(jT(?A+Fbno`xCnAnbp>EklaRu1CV+S+diiu5;T@zYsb+BQyWMlH7 zjaVnQ-brvo39Fv{BKz$R!P0w27ChySV>a2RnDa*wMvboAm{rRGwolm!);1^EWkKyZZ;7~Z1*rSuPu=>r7wW4+x7;{C2lY1x zWW}xfpl(}nXOM9{RDT^h7k1bUD(1uFNWN>JICF!bRqi>+wqm}y@0|d#Lhbi91#AMn zL~X9I7X*wN58|lvaKlWRovf6a5f%U|CxBSdhmZtR%_J2#o+%JFITxj{Jf( zNBJg1#3Qk0-zCwd*($6)V}Ibzad_WfIU~iHp`2ER2yM&A0fg956**$6a;jf0)H$ zip<=mU|x04PKoR_SQybRY-7!f#d;4NoqY7Mc*^9&r9->0_=aw;>5&91q`Frh|EP%h z8Z*K+v;3I-+ApEk@>4~epYs{8^x!!>YUYG)wadj3IVL~;=B-8Ciex3Y(TT{e>JNJj`(spoML z)PT_O<66RA!|-&E=}|Mi!|-&opxTE$W)M0!-C!LeVeyRm+JYuD z)f(f~7%)RKre1OX`dfJU)!(r8xfaxoRQtS6+7P8CYCm*{$HJMOqU#UGPlKu1_Gy=b z3b6kC?9Ul4PO!_^8saN|7#ubiBue!+f<3WJQaN=RY$3|1(CRi^@9W<-;A{h0+Xn@U zUZ2AYNB0XJPzgr6i{l55=e|MD)0!@y-o8a&&9O+9u_guzsn3O}n`6k{Ct(4i3ivdm z)YLA12qTm(1<7x?hLMFy)^z7QjO-y^9x4EgxLc6ky^8TqADsGMq?uyyamRPMfhp+c ztnuah{2bnX@pQ)FL@A!SEmsy@U zUI7wJ5|2t;Rfg#IW;KP}oBrJo@cz(R@FsUvb@F)O>0?XW*-{4hXrmfSTlES?yt-wejUMPGXCJXU1x$Eyep+owjQj6BLCy)~oB>T(V7xKUOER8x2L(!vKXRS?o zphSvaU$$xm>8xBK`?#>Fr(@;=BksA06=PL1QI3NUSr`1Lm1ddw9*WJ_K*iiOJt zYO>Cn_=0!U^{Zb)v4X3)RMX@rR($SVzuO@QE9DJXjndOtLF}X_-7LoP%iV3YxrhxgV1l=_ID@Dhv9zjp==#1E{G4*J95TA z7P3CJU-x$%hr&nlOuK!NP^RUazFC$ZDt-N*8pU6PYGvOZ$&2Msqax|=@e`%gAzkIp2GK*kee{Je7?F6lHU;5Jm$Cs0YUu^ zeF{+92A$v+zG?8-jZS#Jvi8rc87CCnz0|$x69Fnj_ft5Q z)1mr<>ENq|AOH09asMOESI~I!L1BsJLuiV7ox2oM08O8EQ)N2#Lz9wURESg}H2CgV zR2mM0TH0B+(h+m0I{E(Vz(@|1OvQ*w=a@sbxGCe|wjV55EOdhf|_Y~ks0v2;$s)-=P?@U|2r zh{miJZ(qVz7t@Oem0w|VZUEoKgavHq`d+j(SORP2;MlXh+p$8kJuo*f!hN?JMKFQkXrDsh5QT@A6i<^DPRp%sq!ygG|{2nN7H!w7AI&9$`G9! z=LJG^+22}s4QPYVoTM7q9{=R;%xG&5g(Gc!~C%-X!!t7*0C!+XLdF zUmlyEcZR}@pZrI5MMAacqtN_2ENDD>Mmub+7!d9$iI!CW5Dmj)g+(NQ)M+;AqAmpO zVU@WHxnH3@sjzmp_!%I5*{!=HHUo$u%d3K3#sFa<>*&|`c4#cI*F1gI8>+1YRj8{w zp)k`YCblUMVy51E#hH|1Xph8`=4vy{BdP6?xwsLlj707!32ef~y&Xd#!4$-8BAJVC za*?=fEOmU^6WcpP)13UAkj#$rDBI?P9lMnl>#p)3xirvB)6f~)U9A?@%qb%A?uwpA zjSjY!%>~~&rhxT2l^6M9`mubeIdypqF;nEs{gQM5Lp@WH>**E9(wcI$KR|co zmADx?EStCa=-5GfY}#cZf-VsG%|`Di>q2u2wJgfs9BMB15}FjJp-{DCo#?m`gvkg< z4bF070^j3x_KT5N8gXZOD)~3o#aC|#z5WadJ8J4=WJi&7;mbDl9C0Ln)(lw+EyT`_ zS)t-dZS11!EtgmtVAr41Jl4A>uuHchB!p^#9c>ALR8tnV+x{A&YkOeZCHD)lbu?@| zJ5Km~GXpFBD|yI$dJSe&#+AGXGJ?B8e-{JPUqD{AqOv|M5UO8$r)r8vLyJb_ma7gH zKpa#MOTO+4?{RBEd;4eS+gp_BJ zE48tQFsS;=pMc$e7YFDOnMg6nz7?|i3wGe@Fm^&TlB^|hoa7aGDGd2Co{vNOe4$oUbhP4x6cB8?oqlZsXuo_X){1-_I{UX8 zKJ}Y|?t8f|{4z<<3lU5i2?q2DIBwc|{}J@Qi94;L=LbD69&)^qcLGWXT14zOf{uq| z?jh|oAihu#FWwagP4<05Go&o2@R>~%?yG^s!Y{qG53XQrnT3B79|6m?KISE#ti{Gx zlWOx7O-M|>wEDn5|I<-&r)9@N4pLV9KQbl7u-8pLt;hO1_D%bLKTj4!s*OvxuoVmY zXgO!E9bJvR%DZ|^Wqu+h>q5i9oIThf=Pq)xHU`^fmL6}dp2h~5@2y#;VOSz|Aopn4 zcMLqK>7TvxJY-?*$(+7t|McM0-Sv7GfN+XU@*f(6_I_u9`Wyr3qN-i_<3JaH^*U$ODuu zGj5j9rZRSZ<32H{2 zxA9@4W$fd9y~h7vJ*BQGRH2TF2du|dV)3mTg+Wqma;J=tjc4J)8ItURh zQOVv*F;IRl1-Rayg65NzdE+BYAkFGJR)7w4CDUco8@@uX*Xl&MP73r}X4ag)xfSS= zm&zU){RH}>qYs28B7v^EgSwiM3N(R)Jk4K`(B~q>x81@SC{z=d2Y20pe7mfKJ*=6-yhO=l3zX27*5t^0wd7%AUt)xnPTR_zvcoav_psRG6MB%TedVL7 zwHefOvmeoG#-YvX#pRh>m!X64a>)Dbd*}%nN?To14gHthsf(Xh13hwA-RBMbFks19 z$l9O}1IfEDO`iJ>14qO|tof{feypEEC-fswZ_s%kY|e&m9qBs8*|k8{xD@34J10u(Q#mhu-ABl1`bSbIy#YZ4;kX-ww`MmaiD~4HznzS^vuck;!=^= zzvkKZ(xlJWO}u+%?B``9Cm!clx^xCx?Kiky_#227Nw0sbK2VHL9OWOs2r+|PitB>& zd>+*2>8NqP8~~C~-}I7aEOgaYX(&2aLEp2et4HjFfPSBPo*{fKtGanp;01Pz3`5#Uws`N$Bs+F|*;CfF3)+p{CS0=n$9NxYg=75cX~e zbgEv0N?yMOiESU?sWm^>dXF&7lb;~|I@XL0duT-kxDQEp&lkC<5s?A{`%QglNLA&# zGgI&g>CaC_Mh-_JgFpTq{ir!I#^ff1mgvab;B-w?`zkWhbXkgChBy#nO6SZzinL0N zW?2s#?A54e=l=H^JKn5s$#hFV^lXqCEmpv)&8^)beQ6k_XMNCWvkK&@emlG)xC-i5 z{*-QDp9503$8Aretw8ZDFCmAV2Wt9{kq49jpucOG-#qdX7&fjP;%bS&)IP2j;(P&^ zK|9SHSX{u|TAV8MM;RFWB6Gd7K|r_IuVHsF8v1mkC`pfhK!9gnb)$&;P!HS;H@P9V9nn{Z7lzZpmIqI&W4_CR!uKDfMO==QX6F)5({U zE;z83dJsjIk&#NRc}3YX9dW5~q50E=dn#olNKJi-*XVK7OBfI%Ykjt^wu?^n(Tt7VC8$&C$leC}rO=zZ=Nxa*USH*@%qGm);7DA4dAw zuQ@?gBiL)%BWRsIjU8HBs0`&|Y?*j4`0nW?EDg~$F56=Yj`59K+;6{!^2J}NR~kBj z@I2=X%k?94O0Hj5dHVtMsq!gC&|-jIb$dCJ(hZCjVy3LmCK#0U`LdexE(}gzbCT2l z0)u~=N{l1_?Z=|2+(bYYm?9SXbE9Q2u=gt03#Kf;3Q zrdLpvJ{o#WGZn%FRJ7uCjsE4N?_Y|-0Gs~2{N`jnj^t=*Tgrc5uxHWpBK3+6(joN_ zuf#um_!#PpHtfVf2^;~BV$9; zp|#i7Ak8UxOX`iU*j>7db$eGlwr|`(+WnY~^(Eq_@d+`Q*%#tF*(w34#ak5;M7g2v zaer*&j1G`uKc*UN`UKs&2Bpi=@jyGg&+f!(tAGDsn>ci+0hk~E%2LX&%}&bXF7kfVgc9ZN1juLkj%niw1C!3AP@yQG2fp-Ou5=oJ_ +hGWnd9S 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

00HxAO= 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 z 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®3&J{X*ea!@d-P)-& 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

E? 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%0AY$OZtcqw;aZ$&9E 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�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 z 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 =%0El;4&Uhsn8 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�))8JOIA$Dfe;(gSiWipgqXe2%XaHPh~6=?G`a>tl;f90*~cM7 zt_pej)&j!GMdRnU{)P}?TJczu@P|+IwJ_NXA#BtTtQ`d5h{hwceJ>z{^m2U=cL>6v ze^O^a2yDu{_mPJX&|p8UBN>8!&EGr2S3}rWc4@LX;rA<8cxzK31mD|&Vc;GJK37lQ zNHT!n9XCV&Q5^)Y6Q8bqJqN+_(BZKP%OH68>ZRy*fk28iYJN5Zw+;U#xon5vYBP95 zs5S)W`S}S~-a?R$RWadrG*FJE=R(*xB12Q@7lid{tIm$Q0b#A;AN3_p5bXaXp59LQ z?L(~=Ff*{zuIo0RIbO>ac9uqhSR(T(k`(1>v^j6@JiG+Xg<6xFP1Pkv69hF}on7eM?-y8$MO!~pa5KOIZ_)R1HCKfio z?CwG^p4#f;yA8rLz4#w7gn!D=xnB3)K$z5@5^Ih@n5Yop(Pj?8pmj1g_$LH?wr1PR z>k!Cvpw>A;7*jdQ#a|7A?vs-G_)-Wu_dPd1JP1KMU9I->R0zW_-rw+#fiU#U#*ZTi zzt++2Yvr~+Njd|e z&!l57Mic&Cqm7nYc0y3neDlopHUz~!`xhP|{N1}~Ke;v>0_pa7C9lDEQrjOfN5OYU z2h1FNdwF)g{txhNh3jW6y$ZfHyKAn;M({1ES7$`1gKth)mYrS38+EH+cCP(F0#Q z@^SLdPvAcd+@>?|GHiik0Dra0xM^!U_>|&LJCA09PkwMn zNOc9Dl%co1R119Kr56la0Y2gEe{Q`)z{efalo`wdAA3NWJm6z?ZTY(63ixOjWyce1 z!AGsR`8k8|M=o2n{$&yPljd#jzZ3q5DTxjPCV>whJOAw@!XKu^+O3QOf27~Z*Z&dz zkZ#j#&h!9(sOA03JGtNknLw*Ip5OyMjeh=17rehzNWxDZs>Jvtc)uKt1#2w9`=&i8 z^7{+kCvo%K*bMOAQHlk*TflpT-kAM?@O$pF$!mWJ-eX6r>Cj;C?wjN9o0))jvzu$Y zK?Lu*h`Jka8NBl>i4eS#(d5j6{@^9q^o8(m9CYAj*S+A^_a0@SGXcEAKcc|Cf|tha zmRRt1GPNtg*5Ga5-PcX&4&LU)#!FA`ftSCg9pJ6*q$c(p1%Bx@>tSPSz%P#b8Mi0` z{KAvx2XC7T-tw?{OjsNEdA26(b0dwB}rr)h6Ldh!zZDe40hZxQ}UJ+p&f^#yO(zP?-2WAFxzU4vBjfY<+e zrE`h_c)jXn2W-EAAM>oK-RB&5-G^jSTY=ZfoYk7$4ZQZ{ue+;rz!R0!+)DU|9-rW? zsRLf?VCDB2)!;S%^Ye5#4qjvHFn%B5S6}|Kz2kGEd=Js>_xEXxEX}7<1 zXn^lC&SA^2=iqw{{Z}_T2)vTY-ZiB@b}imQ2fWBf&BDs~<0Z1CCnq*TVfcxQ5w8v08wupS;j4tp!}&X#PQ2 z8o1iQr%i;-;6C*=&gnN0+=niorW=-mtND58j&&e7NnUtO16TFo#jR5;xXPFR8D?Gp zN4D6F%2nW`vDB;#uI&1jR5gGry`VgHst>r5$eSs4`rxF;+5H(@kzZTV*=TTu9*HCF z5&iI^H2VD82rlj0gYXgR;H0T+UIOlFnc@-00B|X|(IaRIxa8Y5hm&Y< zNmp9C7AAm8JRg6s-WFWK35$Q-mB7UXQU1CQ!Nu-A{>Sn^a538^`?-z-7rp-NuTa7t zwc-F-t>7Z(>-;EL1n#79i5J}gE@J$SM&&GU;Um;`=x+rVrkcYo9R}`*;>K;;Ux5q$ zqd*-$3XV(}mvq7(Shu|X1>p~n8zFH1@_`6$UmiIDs^I)GzI|L#49++C*xFqO!1=^X ztT{ayocFOetFs8dR{&A?ao{|?wO9Tm{2ne(UJX=Vz^AVhrUe|>=gx_(d)FS*2zhdT?x`4B1XOYnh zPLk99gx~hnk=%q3a5hgS%*ZzdXPr}-{rNjMvWBO2UIDlC;;`G=>%c9JdOXQO1>C|T zZW)`OfRi8J{ov+#-cCz40%zgmFzzu0&fMB&;WsgA)LB6Ijdjml z+`1E-)CEU%!A^_^*;mGB~Y0NuiV0 zg45i-u=`5Fud$Io65dCE?T`yzu8@EwS^R0|tX_KF)l-P!6^!@T4OSgKhMg`uU3qSjqi#5y5in4t^M! z43@DT?J(CKEH$_E?Uw#v8>V~N9exb9UVq^0%YI<%hCLv!4s7iJ$CnNDU_bRxT&@@k z_Wkd)va!p-*6=n<7Igz#UHhxVEeEXJK6-+!EVd}Rt^>9rmwfX(u;n+87jVbHO0u&L z;V+GT`_O>!mxLWKwMqjksd>*WVCCy-5ZFTJ9d|RHgDqI2Hl>2_=Sv397;K(=(1XpL zqHuHaC9pYTQVnbgf40{0>ps1~-s$^O@602xSzTkV+}#5m^P#l*xJ%fMcJ{AQR#7qBV!_QmbZ2AiCwJ@~vk*rW?jVjgINCF*qG zhc{poLRF&vhJz&^QXMu2Z0wG8r_6qVjoI9_-^LqYqgP!yesB}ms71?qUDN;@X-Xz+ z8Q7B(V-)Lxz($Ok71C`w*l>-n3OX#hAlP+($eWl7)Vb@Ou-3Pdmc8`>Yjt@+>2Ja>*(}Xku#3YZi%m|0U3k#ga_u6pmfjy9@9P9B z$+I}ZZ?SeP^0tCCw|ZgrX#`j^xsV4dAL~cJn&>?wRt>E2&@Iz95&mf^N_PUUftA`J zX#-fJR@+;Js$dP-Hp8!k-{A9wbcF!0(l*qc1Xk|}lRBRQJLdk$u`UT(a|Gl!asCB*+}|ewRU<99Y@Zg=9YoymqdZpSp9$;d9dnB z9M6WggH@eP95>-tnUr?=1*w0((KagLFtB|zf1T_{_jLRtWp3$?K1#H(3lY3-s0Ml9i_VDWgU^?W+6->Ldzz%|GOD+C4%?M0u!VZ7C1~4s= zs(*arz%&Qv_{FRM)8x0|S56NwjUEa(;6 zFx79LY}`B(Ox1Juk3rwTR6=F#r4%p~S$At5uLVs;DqzaacX`vD@Jq46=>1?y zf|kBoK=_~fG+DcT15@O7_QjD{Fp?d)W(}smy6)Mt?qKreK@Auw)#&8~MlNG?!Q>3z zQ@HdU80qwRoC0&FM`3=%d@%Cy_Zv)x&^Na{15Emt+cO%S!K78Kxu-H1jJ#|wz+8Pm zHh3_Yl#IobyiLF)UlKD;i(rz@o|$m_GML0;CTUfKKjDCsP=JZs6?|=AA(&Vf{V~)1 zz{IS1dD(sf7|EsYsRt7^N9*Fbb6_H;6b!$=91Q8E`1cB6B8K$V`jZ1Dyx*-d6!hfkTU>tkTYbsp^hM3fy9N}O0>|Pvn+ffb1_K~ja#Bne-cS@Zz=76!jw)5-D7BE)v10BDogIRhq zw|2m0F!C5p0}OFdA6Axvv2;&!_%8^|yp1c~o|z6tvfp<&Fy@wVuisn*VLnSbb928ecHedcIwqHwuj5*W#iNOTZXZ@0k0y3mE-U z)kj0K!N|viJD4$<8y;>X{JJR$rU8Us=iIgXiQ!UzplFe>Br={;e=^cyzfiYyUK zAC)JgdlLR$-QAP*Nd0^MRvEb{A50JKZsNAxU=(WC4LddtOxM?4;;w%N-TCy&;OA#R zcSr%$6432(Aqu)pYRJ2wTcc;GE_Vmra7lusP1e%)crm#v4bij!6bMjrrO*LTf<>?xpY zyL7ZyQ=mWoOy1j?0Qx<>=(naVXekXh=?S{}Wz`{)FA> z5Ke)P+h#kvpC#zn^}h)U=$I83W?B>e==t+r3lM4>ee$o#Ue&1uihOX-l+9yD|2>|WwZJ`3+EGFENa0J+ z(w3+v{Oi~a!QE$qcKEE&O;-eM|LR(x)zPptmA5`NnpspCM~+&K5=Y7uDbi?jVo z2)|WS{V!$$=%q)(b}Ki4Uc8?uYQitSCb0%>>9n`eqX+1Dt4HiOPWUYr7jfx3LCfP+ z!Y`#sBH=fc1om;zCelHh3tF0bD+vG8&Xg~^Zi1fNymaGfC(uT+?;mdu0xj9O*M#4o z+>}^L(E5++><5zi>)j1~GmY>|GH~@J(7N%jUhP=}TIbXr>vM!(J9y}eoI=p@_2CD4 z==QD8{uqJQ+SGTERvl=~m03?sV?j%8x84f0x(V65-9W2ONS>2$543cO^S6WUr!LN_ z)dAf{DJr+K8np6X6BF%l&^;SJ-?Jd~?@=E-ZF4JVg}38wA4&(^we;nrEYP|ZGemyfOn)wH!;C$$eK$?ZRT z1WK@8Fr4)T#m(gsdXEPsb>;XkpeX(6vCGbaY8du$(2k{`>IVcxpXdUruE$ulo7tc~ z|0XBY1Jp;}yZ`r*px%EObV8*XRL$#$eI|v2sxEdqw$dC_)dS){T0vFbOb?B^4yxjk zZTCBlpvt3vA9_Rh%fc>nX?X^!^njGGf|A^;@l;SxoloqyXF(OMnbPJ*_(_%b#M*%> zFb`Ks zgOcKlFN8nsaZ7zyZBVKA;x>=00wvvY%{>N6vOQa7gGxRf{^9UXP{fTnT)qY>aW7FS zn?Ol&Nu~x$`Y**2P_e6uSB@q8F^fDZ77>1F%(~H_q9)!e3rhqQIcmd_>#IPW9MrAk zxe}=VzaCJ>{z*4YppG^*&zqnJDzxF;Bdc0a!S809d!7b$sI30s$wi<73&Kn@Iza_U z7lpS#`AdPJ8z{+Ls166^Ck>ESpnMM%W!WA9<>TvaZD-L9P30F!*mCD2F$%&JEiI%Kq6NjoD*C**%mJX;6|{K1ld&E^j?`(GryP zxxW1hIzU;4XC1H00=4wun%>=9KrQy}2pgpZYN2a#&v}HOi1!d@!avVSR0uHxWnmE& zltTE;r_CU%4U}|!My&^BDmTiYOr(YR6qK<-`R~R1K}oT@yCEnkRX;|7GWrbfG{SFK z>HNKn@XO=69-#E^OUe$EUb@|OL&87i;vdGE)L(A%--FUQYT0n=Bq;6u+?LD*poZ@} zRrl%-D9IlDAobT;{o%73;n!Rew0Xcpp<|1d^xy3sGd~1mC0jJM9n;3yAPE7F(!iQT9{BAR}Wcd_B_kH zbC7jN7eXr_YnKN@khMtyF&DB{sZl&2Yw?pd0A$S`x-$c7AZyz6EGH=fvPRpT(+lTA zCM;CH^R*2!Zl>gLA!7_TW$HRZM(OmJXgLV7hJn}9UCJS=S6(qbG#Iikf29N;GHE*( ze~0Yjw>c?vGGy=H%5;_2KvwfS{E~iO$f_|(d&yJCs1xa6|LxYa@R=63g=zx z8~GNp0%OuCgg;+?0ScLPUEKT&vRt_#f-FZGj9VbP+eVbI24vDTlkW@2GQYh37en|n zs`mQl5dQR%;eTp)$fS6>EeW#JjBTx2_WuI_0RR6anR!@^T^GhBNs>gRK}jk~NRkX8 zNg@&|y&=hvA}NK0Bq3vwN+pSsgpibUXU-5QV>;(NbCP6;Bttt-nn}$XGSINqPc8+TyQk zyIdipx+Z-b+yxj`V%G?A`$ghq_19 zbJHNi{~F}eqZPuw#yjs#FG7futnr$;9762NKCjnkL5R73b>ZHp5Tb8-y*$4Q!jAk- zx5u^+qB74^HGYN=d2E(z@6!;r#5F$|;Rzu^{6#Man}Y2guDb&v)K5C&&}IlB9=q>e zGKUcCVm|G;48pp}&&ykmLkP6mWZ%yPLV$_xtufsotR9F7?l&QU;)A2s9=DMf-p&QL1H(;KSB9-zah>LY&$XzPbd5~ zEslLwT!moGe2m{60Kw|b;a+D6|EMQpr_QWUe~|P4kmqf|VikH<-5Wa2bSt{rFFpLm>3+aUh`D41(%!E8%M$1eK;Y zt27cID9g67)`VZFc8K4CzYr83K9q$KeudI?OOLMx-*rjjLya9z_fAdP2cd{S&mO1v%N*{u6p2E)l z5Cy);dSB(=(cl}+MmZ1q2);qL_JRE=@Vweq$7S=uvkHcHcJ>5MwcekaSq5JEaqaDj z5b*W&>XYc<;OkyoFIA`m|L)#@cE(4*zq!$M!_gW1s|)9B{5!zcoSJ<#wh(-E!dI(v zYrsF>lXU4J;eWPulBG}${>eHjUpWqZTr?tg)>rWNonM-+Jq!Nsq=@YJ z#o#MO4;qrM4!+#@PUcg>U#7jr;PY1SrM>&4t670B?!2luQUG5h|Dxcpah=*5+`t#U zJ9GS~BKXVCX7#^P3cdi%M_+CLpMULG-|wd2^K$JD^(XwfC#9-m4}(8U5B_lqttb5P&7Zz@MuOi*AKhR$5`5h2am`bB z@UfL2f_ziK$CO1kM$ZEueZ_1|7UAEK{gl5`0zN8vqdyZ2KJtJzqi6zt%Z{?;LkWL` zc(Doprq#+zRylwV^}blQ=Qnt<400}l51!Wc=Ftl9>ufR>ebfOTIDC3-FTx+7|Iyt% z2K;LELoa6AfnTXOc5Yw`c)wroo*u{o@B3+o%SBJ{OQk~}RjGmZdHL9>`3`vR2f_FI zZU*mFqB(u^2=E>kODf!G@C#4-P69qkW{j&KC;FvhCjL@W5ICT~U*6MlQ0ZF%qf zz)$KkWLWz^@OE7fb9Ae~+x}Q*GBFywO@qc6A6xL&b;U;8K7+SUlVoNyoT7I|}Z{t^D+>EDwFM}RjwnxZw$61+*Q{juc~c;n5i#;#=WMnU_IoN)zj z=sQa7UN`WA7StYKi@@v6+}gVb;n$gHxX;uGy!OcZJ)Pcw*Br7ocJ+Sn{k7D)@0|v| zU$5)YxrATsulK*oJn*V5T~Up`;8obO9lf={E5Dt+)#5RDr6(ck%hKY{ByM{O)P1+Fu7Ps?);a2Y z_GHO+a5X1%XKfz~u6lp@!;FvMo^M|{qnz+R+o*C^wg}vlm6sj5^#WJ9coB>U|HC>WbEk*;!Ug*mvpW1S|%5dI3YPsP~@;L7!mj=S#yuB`94YaHP(Rrp}7MEHw;k{b~S zu1IWHg#TLo(~E0rz!g?+wAi-~+~xb)=kq3kD=02Ad;ASte!kz?Pv^nqWhxI<{SRDj z;>9e>0pQNXEg0-d__MdRWvt%@E^B>;{^2p;GX18fUTOeGZppwG>EP049ZLG@4lZ@_ zSWOLOaLJ?JC5|Zrmo#)ozXc)Sjtv}oILs7WLhr|Yj!D2B{udm7{V2GD-!*%^b_N&E zm&E<-1h?Vc8^~LF1F%=!eV`JG1uL8Zm9-Gils9(4&08kliNz|!9^XJ z+Fth+Tx1Ntxg!VMmIzT9fQyh1XmFdBzW%=S5x7wIZ6Q0hf(vmn`jTk{P8{)_)^7zc0Cdv1Z_W8CTia58%YG4-SL# zd7S(~a02Ij+y1|vf5CZOVcrcZ1m|&fpXaO<;1;Hge6^PFyC0}su>UzY@mpMo1vfX$ zaNbjr|2eDgJ!|>`&gH+gbNXb1bDr1t@ko+?Cx`3gM{thg#0~<^VR)D05t9F@gU;T$ zG76l1zu8l(S#XmSTW)_#183KkG`as=aJEeoOUEjKvk?ok1e|rvo*SEj!C5^VVUsiz z+^CZ3t3~g@Sr$ZCy*UKVB1`{L8{r>*{LaXMzrmU9Tb*xr1)ND#A9L@O;EXpE=0@s* zGxGN`Jy`|L(DQHhtr&2FW}g{SKOUUk6z9yp&ERy#G#eTaer?ml^eKzMY3kbP`4ayA zeIzM6?}6*rZMXL6&EV8p$tRI}sM_$nKTY^mK7=K7KLJkpg|7NgH*iXK%MZ;^1gCgI zR8rs+E~xC^vkq)m#%1LkW3ZhGi}pNx3$`Qnk7C0Su)_6Rmw|nEwQc2qWUy~?(ixlC zU|*e_zTBf5*qTEP((q!i)w>QYIS~lKig^|I|6LpiPt5Hgg-Za z+jx^Cu;+Fd6*;+p&EEKM?5clYvsMKa#$5-S>8&w3HwbKo>y3g+!k;#6$%v0NU{h_# z$?OB0JS=y(#Z<6K`mQ;%2|rN_CP5d$CUj3ebI=#;;a@~~YJxr3$egNr3^rb}Z_t-0 zu=`$)OjEZ88+X4}cXT7z*qd9D=br)_bJ0+1<07!pnfHz*_5!=(*jkON02{Tp?~&SY zu#u71)mn#v-4g75P*VyvLKNDGU^j^u&KYc|%j}*JonS*Ix5Or21siOY)cxjau;TQ4 zKL~8#K-s_cTCf4Cd$#Kl{#9KT9g_&ZDF1xEg7p)^+oJNo`qt@(XDkJ~w5sAqxdvEq zY)A>ecM+LT+rWCAFAO#s3)Umu^YgR@u<~+C1M9v!>toCUux^{3S7$4Oog4U>yH^Hw z&a%W6TnJc~1>6ZLoT_qEZK|V}9$pwh35m13zoqIrMad7xtg&8eU*mQ`S0CHDI@Hx`V% zy-ol_s^|ORFJPXpR|vU$2F$bNIbW*1!N`w=@K-v2Ytpz6=HaB|wbom}+#fx;VIkqa zYs{<)g>ma08ek(Lf9Zb4}hz zz!X;W_1t}%+sK>-W7l9E zph)s>TlZElQ2}Ek3Ppgi77HcZtUM*XYN^n~qT)Yu0VSI2=-eH%2T zrU8t~(|%*fXM~z&Y;_T7)#v_&_6|ER0#Tq*dPNyf3vO0i82J;VzI>}y&5!89cOOu z1>K}^&q!(yx=|_M)W7ebh4#J%gU^HJK3_|lwiGl&dF%RVf+iwAdDlbG(nn{t&TI!= zf6L|Ay|JL{F12W|A3=*YxJNqZHzy|cHJuOo)qdH*nM$B*w(se^x(u`^pZ9J6{d{G0 z&+}%WpDhlLtt9+UT=ly*9sw;MyE8$PDcWW67xevMs@vyW0ex5RO2<0FFJ9L}dZ5b{ zI@$_efWGyUIOjOfC5m*#y#;iUxCqDreN7Yu-k=M`KlB5AIX@;ak?!>3l?Gbew%NLY&i3>7^&d;fK{~QIKJaEP${TZN>dNPAYH( z=)-)S>nUB(2jA~}QeFi*zRGl#Y&YnA6;B>@Bm8mKMTHGI_Po|ThqIt#(r!7d@B$ru zWI1-Lfflz%+4n(5MdaVQzXfz;p!)=VBxus*ZYmM}2yyXs67(if02BUD`9%O7VtMe& zz7o*EM%JV9f*`i zw0LX77K4`CMRm|~|BLT;{SN3k^F|+jP550LUibM$>R6PS+AL@%b0d}UDWDw(J=nW= zE@+2-K}uVDfELG7YANW+Z8sE313^!0^4a;p2(+E7TW7~R&|+B+Isn>6Zumf3i;e#$ zXyWdF?YIbfRMzB8nf{E zgSGx=KpV}z+Ysvs+Hgw1s&gd&gRIGo1!z6fYkmUZ*U?=}DO-Zp?(=WiFbcG0x9s{^ z$)Gh_MMnZ!z2VEdcm>dEAC7xoxB*)A#e`Q+gFq9vy5O@hXyqHRFZ;X&t#rY{ZRCE? zVpiu(1Fet{J}3AmsIEPFkB^)O)w!j@`HC;7j&-XZywn8MzFgJuTNS9bg;(zO-wEoc ze8BD)B`21ISt-` zdbR74@s$0bYQh(u_MHr>I-uQf=MPZgdgOE-sAuzM=-pWc>WO1x3Zo6Ga{Q5j-77)K zZB;a=`-XJ`W{d?zzD&Z(Mo<+!P1X0LgObZJ!cW|U>LV3UCA8N5hH_BFuWt3~6%I;l z>8-N9S)JrYe400Bpq%LsB^0h zZXQ(&D%*R^Pq#QwS*~xxLhM0hPK)|>v=vl_4RLTJ|7pV>HP`rnO4VN<^rJthWcB`^ z1`vLtjst9>KqdZKDtHk7qn{L4h7?`V&037~dFzN$@k1{D0Z_WDssi(7m`9y zTRa}j{YUsC#09n?s7<1geF-X5KF~mgnE1@xH4zk1d-tRLo8`|1-WE=uD$h>}Qxf3WogI#S>!mpz- zEWE1#ly;A2twt+A4fq{OBoru(&jY{uk^HO6ZU@K2fKsbn@j2TTlxY_;*FS2V~-!)GHV=Vb$^TDRq#E>y$c2$fP#nCIT|K?HUN8eJfH=?Sf2{ zXR@!5RlW2~9O46+*v3~pgeX?y&yIjhe%vHJq2E1B5wa4Gs+|F$kQIrG(D#rPiVe{L zvI5mhn=G$FcK$nY5}F_%I%D1CSjbM_ITG;o3*;`v+6%Ijqo#ggcOg5zIb>-OiGOt2 zE$?4RAR?frr(HM5_KkF3uyq4uv6|`gO5Z}Zv!h}5UlLz@jj+D}+2$wP9d{0ZEKD@u zJ0aVUI$*NGXUKx0m)SXz_-oeW*~H#~%zs|1)k6~B*LLbiyG~_ACkEqtvra?Bl^oHKNJjiCAQP4h0_^0o8?f)_gvMC|rO@?fu7o)n!9Wq<_ zgAZiZqVThXOx()qkoe|5)&6>SKxSIM_;(tKKjdC^YyE4;3@&{6W=P`eCQfMfJqwxE z*4V}@Eyy&Mzu=i@$kb-(F+&B&R7S6ot|IZ3w6E0VltY|aZ$6HI^e;cN*8B*hzn>+% z2<(8gRa`W#hV-l0aB3m_920tf^i=%+IV2ZS&b?RJ)qaq#O@C~Kw0`iZBAbu+|9WKs zq_tmc3X01iw_)ujkUlMYk~1*@a=Esx3(|WBmY=#E2zguoR|6?Io#bg#AT4%qIJPSX zQt|fQ(}47{`rCs&wn2KK&3K;^2WgIUee7Nm|ICA%(Uql;o+?n>-rF3~lgH<6opTJ* z6Wdb54|YOIT>8f6evlrXJvvyu8q)YNM4{M08mIGMb>bOFW4iTQ@ruOX-r(b_MdELL zp5x<5;)jb5D)S-TC<-gWPd;tF{xC?_2GzJOA^fWr8qCUQhtzLkzzo?6NS6+|=3qqP z6OnGeViKf_zLE};3F-W|$H(!ikh+$OM+oVx9E(wFc!+MrBF`1lX`3p{J`w)OOH_wi z8bfO5=s9?OJpO-u{y=IaUTA+vN3@UE98(GDFe;{B*m#Jq5`C_pf|Q7#Ucb~K)j#2{ zG(H^Cf!i-BY$5Rnto+?sO8C`X9osufAU^W^vL6bmvflgeJIMJeb~pKgHc0+8ZfH_i z4#}VD(uV0zAR(%ajU5lkchNv*K=LIntzKCTl27Y}ceBDE5uZKxbC58TqpF|IfkX~c z3`w18|HtzTAraT8M-D*p^8NWc)xRMT*Dd{*LGt+gl+uNdA(7j%agf}Jcy;wnIwW%W zrVL4mQ((R~iC-jtuz;jc6fQ21TDhve*II^}d6B&Q2S@}n_-y+&;eBx>Vt_SO6ZiOOKb-k#o&DD|Az zGx-rD-I`OozaNA8zpvOXy=2t?E*sV1(}nt0@j+k%>c7f`!T$gN0RR6anR#4|T@;0r zB+8IPNfMGIl}JdEBne3+$xx({BuSElWGbnUBuSDaq*O>2D%^RVuZ$&0G9?M$dGGgc zzthv|412G&Untvm4Cx%}3}x%;fcBs=DBn3>X}xR+zvmDA<~Ar1?Edt#6w2Dgr|NAN zKv`qcgdNwRtTeEwy<-67&3`*D9y zWp47vD~^Pp9btcIpBj`|-UlvV3zX@zn7L{KD3670hEqQN|qZ>gwkQ!w`bS1Cu?l|&rJhf=#dX4`j-&lPl-lE` zjGH;zDBUA;Ucb~Y4W(>t`QuR+nV zYgYg6AyBlfJ)|*f4-_q~9JM{oP`sI9*!y4^6is@Yy8qmTLe_KZ$2>DAM6Y|k>^}(w zkGAmB_$DZF zqSoK@WkGS;ue9pyOeiwu{Us{Zb;(RSSY+10r5AQpjcLMCH6Dndz|asVMF+C2j*w0;$9?%6|O)&6HyPXQDbLU$j>fl!#$p7KiE z2}-r+!xvB(AGcVn<^hFa^v;Fz318nI^OH@X&~+X-x8Vd7gUo$r_apm1U~qx`qBT%x z{P;NSC=Cj=7xq)>Ga#pAYhQxA`#RHnsV3y#PmLU(z8mt+J;5fNmyovy-59Ow0eP!? zw}E#BW%e&W+J)jyLVkH7J%(t+?}&sg5t699Si z-d)#g8zGO}`1tA{!Vh1fQ{!8AL74A+$j4vpzbU&6a+7rL4N}54ioLMb z@F3(P14#vLgIv$m&Nt5o@*$S{R=juux%M#HG84kr>>2K{;SA*Juh+X3szdhod8y0W zEl@qv2_ne4&N|Q8>;&1@eW^3AmO<7LBDVWr09o5oQ=7>LA#0hwbxOoX$le&$OuFF< zSyNy22_26hQ!SVTnTVHT9DNot-rcu`6@MXP6-?Ft9tj!kNc^xFV#pe|H4KiM57}eC zAp`GThpcXHfM$;#WcMaq={sj1WL4Uq|LrCG@^7<$KlFjDOm$L_l|1HtpFbJ0qH9K- z2hTuOkg>VF{vTv{akoG83x_OcU2n4+(SO=)(d(m*kY!k9y`U9CmNxu_Tw52iBfXQv zo=K1;zm4Ia_yAJ8AF??sAWNtiz!>@fvbb|T&%7-li`jp%{?sYRqC(ps`~z9U@)-|C zgh3W+zyIzk9%LJh8F$VR{`!6+%H^ey1yB!S7-W8evTJJ-AoITe^Gbd*WXlR&F1_-C z%;VUJeA8OU+_p<|H%^4i#eaNuQ6^+g^R{I*|AuV##Cs>rH$i4USR*xz1DWlQFR+@>+jrPhs}^_G#_0T&xTBmDF~=_gtYh07{A_PNU65uG!)YB2k$IT z+6`%E_`fBO-a*>F!oyvCDWt0FTn*_vlUL3u;~;(2-_r5v2}o59;3uRK(c>A5gCG^u z>DV6UK*}jvWyN%Wl#yCEdC(e37M{+~IM0MMKY^60=^&eF_Ge51 zq}d+Ze{C2HX_js6k4tforW9j7!P`FnTKHsKCPdM;)~=*yw9VXHhK`MPb=#+-6UI(%c+%Z(sub9@+RbQr4g z9oPxU8*Lw-{56og_8PW;yXM1SZ+<9F_azj095tK)>f?t7(@aUGHXs|v@97C@6yw} zlOG{jmidy!BYcne$@F25AaUCe`_#t@5|>4fo}4)giIcVVLx~zBvq$*V8f=AR#-B?y zt0j=wzH6^MKMxWs=FD5lQb;T+50;G?0f|{It7JXVZ+g(6sGtoJplOXO~O)6&_#O==SW4`%9+&XF6_UVrxrtHct3y5EKJrAon4KZcp zeyKtH|A9iRDsuveIj6p_u5*T%kucBq?^TGO1t0fz9tttFJqHpXhV597C#?|I8bmD8 z@PWAcU-g28_aUx$-)G(tbBJ%UJ?A{nf|$56hXKDq%-5UgOEyDXc*x2ojR$dl#O^6< zCx~;s>n(;9L7Y8%u-OX2&oW(Ynw1D~x>k{~fbfrf{ya+G3*r=NhYA0{!<1n;6Ch5! z!W}HjfH?kyk@lz_h+}td?jINmar7F>K|&nq^84S*IS_|WcIzEm3~`8VW_R#lh&OaA zzhB-9%4KxEYlhfgRlp$jxmoui^Z~?P*;>ul#zX9xxbk&d8pQ6K@|!G)e%B=*c>)i2h!Em)p1tqMno1XEonI)U|8RDfguieO=pl@>n%Q9Seu1GR8sFHf7CG zo#PO-=oKGY`UC&l^I(Wxym8#iWk95A*fSv#mGfg)7C_b3&kTf!l@t~!j)#c0xpK?M z*AO)>{kwU!2UO)Cm+XK{m0EqJZ$c@|qQI6BhxszT%blU9TtSw6*%FtoWxLyfS>URU% zPsR`(Q8{jilAqk19Q7Tdq-(z>-d+n)LZ<7uuXKpwcAqqvZVM4r)nYF~6t&1~WDVg* zOx>>69RpFQe(lg%gdhAzQzu~&MC;zI(0Wh~Q2=F7jUe))E-K-B=i2_+PxLQ4u=m%K zK!`lTo^|zYgviZn*w=+N5V_1;+j00jL{4K$+Mf4=Xm-DE?*~LfG~<)gTMq?9w!&jC z(+J*L^@@)sxw1m=)8nBya6J8^Xx`H!q*-A z`tjKuh;+K9)XDlnr1c{1{wTuNXn0b+Mh1~u*`SIGZV>jK^1sUJ(L#VQ`t`IV|kVt$B!e`#*`)my%te>@G&yIr-Qthv@1HxJ@tsOsBLs6PglfA@i~I4x;|BjFdu&;t_*KYtBLC@v7@x@_=Oy8$7UPF+So zm^HL(Y4RZmPjt^;+|Ukc7u_^{AxwEnN-H2daC4l~F`_^5Oyq1j(I3C}?o1uRkKNSQ zZs`^Xqn9kRP8UHKIqjS!cOHb{hVLfnUV|{CkM)F=`Vekt-81$y(H}?+AU;6oPZ<%y z_n`z4{az`>y1AARdT#wPNJ02i+8X@_Lf1J*G}lFd3f<}#g%FaT{(U_c!kJ$}e~&AL z(2jC4!yvTApKn)^Ahf*d{<)p~UVp6!Kz=0_^tI|v%*p3m|i{Kpeo(o^q2W%pR-5ZwK? z_sHOr5Zs{>T{i^fPlhFBZiK2$@VO9_WR&b4?g&9q+_#;+S0E@@@3j5wV5qK_bT`w_kSHO8D!j zow*NUf=SSv0D+&X;XvShjAIe~6M|*Yqs%IUAn@=f&X4fj=9Q1Jp8yLhP2=qtVeOY7=%B_4ldJzJhX4(h3HUwI%;Vs&`Aket8{*C8L z2-MD(Hl=%j-+SZZ=~=Fh>ecsl27_%!fu-Z*@!l<+BA)K2)tdq<~P?F7GYW9ZRs z3h?tiDh`z|2A?XYUn;@RHgr$48x4Mz+Nt=RDd3-Y-xOO#^sA16=ufHMxy_*gd}>O! z#~S>^l!2RTbHR__>Kpt=15`Iz?-T`o^z4sol8FAuarUboF9bh)zyTlia_~2GGQC`l zz~7*9%HRi5gG8d=p9&QI;QOcw3;15K3+ATUg6|oaK8txCeD?(;im8L|YB^!r^6lU| z4~v?bAp?KTultkvuHesn-OpU_7O1JycwYnXt#6$-$xa5}GP}h{(g8lHjs}JS;Exa4 zJ3N5!O+23s&9egEX!vk(PnSi(5sD(+7{WuCVd$eyGNBzX-q4 z%HiRhRp31yo_v2V;XnAzu6{`PRGj~J7Q8$3O}Cu?fmeR}*7bwo;Faa{T&u{}`ky!f@Tl9%nF3YW8F~u5 z3|`d4^-V|y651AcMivdQhR; zn*g510Imp?#srD?Z=D3{eM6T?*BmvTvfqr2A31ec#*LTT!zO88Sfsr z)EHXN4BUEyGQQ7Aa3B8r$v)Es?)~>JbP3^8<0}IWxD{1Yga?;OA?FLhEj_fY_66Zn zv3E=yxP>c8rFso+{_N%DmpsAEHO(!1L->?ko?r@YW~a@SkaTcQP)V#C++z=)UT6&l zmuj;X43H2Tm>n?#+{B$%v&slRe$ChP4jpi*=V`qg+~~1E~)JKf(2<1_SHC^`Q*Hb8x*>3&HjDv<#`c2(G)`uAqMd z!F3(=c%AbOaGlk40uB)VoDZw~>X(2!llqS;z_qLSwA{@YT#eaK1knJfpH1oc7~IQ|;@(dAFLH5P_o_@NWP| zRTUh-VKnp(br}Rs{i!UihPU9<22bj<=ngmlWI&t0l{R(1=*Pe*{kM`>0dNXgAKJLH zz{$-^db@HcI3)cmL~p=3KI^*BzZ#r_TJxETRB+;{gtrcy=qr(RuV;c2zO!%jCT(zn zT+ZEWQG&CY8Z1?S<3(MtG;rK+uE~iC0>^ppmyEA7z@c_0wm&#Fql^#yYy!u;wQ|oM zqQ|6W@s2--z!{nHGGc!qI757hL$e2`|9I`d!&+ef{c_1y>jl^(1uadj0=pxf>T z*ez=}I%Td0yUFs`%;C0Rs{+kHuvs*-Nrq&7F;$51Hit~ zH*uiZRIrPv3abgW>hq5r?9)+B-)`Ijn;H|_90vQ4&X#wTYrv+)N%q!Y$6U)6-6QL% z*f~cE_C~iSPal%?ls%olA8c=`k@|v7wXsEn?{Z*N3B4cKs_QNWd)gScbDUDJE!ve? z-uu8dt=(~4MAjP~*Gl%E1h%e!eu6>+>;dM}cdnIyt@eYy_0=t~x*IlxY}^l4XI9tR zmK9*N2BrChTY&Y-X56xNHLz5J8v$4x*0OnDO2B${{++|l17MM^X!Fw#teROvE%uQ0 zxB3^G_V$8ROeIedSozcjTmvgRCQLhJA6V)0|7vJ?fkldJZ>l9&i7zdF4EhUJ>^{@62qln`A~sj99W*!H=d9A1D0#bf=8G5U^%WN&an`z z>EohqUnP9YFa1g)&AM1yW!1z|yu{n>OPLSn9vN9lE;*%%11R z66Y)j^XplY*oWi5YzwK{=G+S=H3g_=fTwB-C*9<=FAeZz$~FA@_AsYjyo32oVd*KYrVkCa5Fc0WeO(sIVku$nB*1cG(QKE z8XJcdfEl%a-=B}sU{d3yZHvHMZ(Q2(Wh|If42}5$=Cb?ZmtBouQg$_-@SXhCxxL%L zq}p1NJD65Kran<04W?Or!~H{qZ=4lS*}nly{SBShk6#3HkoDoBK`~%z{2iT_;Q>Z3 zv*L`N0T|!UyPr7o8I1Puro#peV31SYcRmLU)rYukV5kiF0x%dw_F)r7gHgYOxuLiN zjN19Zt1X^_Q8}c0McFwpC|78`6^z0g6I?15fsvbVf6ffDKFh<)u7<2XZqPDib|V-E z-tV1IcOH!R>S4yt;b24`D$%cZ1|xhWakNHY1eubE@c|5fY5)u{yr@Qy2?kNwxgr7# z=RoR9BNz^oAHQCu4~F%xRWcdjn?L)+4}1UyF+uc~*`1B2?0&18Ll^@VrB zhJpT<>PYRNcU>eE<{s!B+xlPVJOz4-UiPLYxc@BBi*7FsI8N46a*{eV9=>;F(B)y&qL>lo`_YU6OG@1t{NlPf*wG9=*k4$TV;4b_sE2n#T?M7 zSX!nH`s}G~zos^WPTAMnWW5D*MBDUK(5W_8vl(>5a2Lhw>7eV*lnUwwfj&TU8*?7v zt5He)E@<7CbL$qSf!4Xhrt0}x&|00J-dr*bv{yp{i`hd#Qw><(fW|31dRA};v}Xxp zGW?E#hQ)V|%E>}^2v zJkvV1j|OP2oAwzb6TYL}a9zzZ(5Ck(9dPU*XqHr`3}QfX3Yp67X9cfL1CLPA1> zBuPS&eCOW%56^R+_wM%D`+e8?t%K_EYX^M}ZbbD++0a(Sd{hs9uJJPBB1C=3+=gj; zA?iN8w>D-eMD4m?1uBCfdOQAdRbmrF&)+H)t7Sk`pOc%N&eT_XZcbUq)U%D6V{+$1 zR65l;eCYs0IiE+|Dr$fzrS$H#RXGsFTwQ*#;sQirrZw(l4@3c~R?eJx5MBBH>%UFX z5P5QL*a#m&`(9L_%RQ{p0gLpAnfmvKGR;uS-(>V<1ec6vfG(g)r{AMMUs+ z2qVmUf)tthK=o^W;lCmD?VWLH>H`S91V!iWrah#S!`ziin=CBx-Jlo8P`5u$gDrK<-({f(;yhgnJ9h#7X&}gr~lo~ zhoIAF!;eQ%5PVQ-?A(1Cg68()AD-z$&`>($^}Z<()Lsd1Z0>=8Z@TE=!Fv!?&gP5W zG4%!C_pxmqAjn{UEB&+?f`ou8dH*r>k(SfaI=?~?tdSq@B!IxL-{4M9Bm~~~UI)9L zgup%A<$9kE1kOiCUiO#)f&GeDkAK||Sj((DeUSr!`Qus#8K&Mi&icqzCkVDU{ysQT z4+0%>)68E1g4Lr{caHrIf#%C{gCHRU>ghXmCfg<_cAdo5`QxmGd@4eWdFgG0huATOBX^!Bx%@{OPgMk0KGh`q~0sO|w1;3Vj z0>93W^RA{lBoDsJf6Jmw-h+R9^}XATmEa#9anRp982tT> zKYg0*z&A;{?s;$x_)K@WzMBBP?#2?w!ymz4J8s+2whHi_^EkX-m&I@W(5y-FW&9__CiKt@+KYKe*)RvU7pp_4y1e_-6}V_wHcTiz~rv zpFMB7j2w6^-K>dMTETnHHXS2d4qpAuj$t=^!K=2oC^eR;XKN_-1}y`xLm_xEM;u;6-vlpAJcx(D3y{83ldu}RD~~mKb4P&Z87r(vZ3fTP@j&5% zT<{#Uzh`D&1@DNQZ_*Mg@GM>`M;9&y&or$tR7(cDZEjm{mc0W{Z*$Albp_yQPjtP& z@&Rx8dpWm_2f>rH6;rQzan&&cX8mb9>JHVs22Vlx@V;$K{irX0cGX`4PrBlkp@}89 z{eE+G8<&CGv$t}c`3P`3)OIa@`3l^3KR+$B%mlZI?>XnKAGnW$nHBbfTXQH~u}u?P zuI7fZ_R`>%{c9Zl zT;E3Xrhx`_^$8_iTJR zxQZ(N&T~A$9o;?KKGhi9p{z2S1sdQC+}yE0YXF>|2R`i9tOuua!8xOX1aRK}8K<}M z0yxdpDcWT_z-b6$lyp8gwYE?G&Uvs8b99j)UvC8ZYZ5V62Sfqmn3=Ey83urFtAl-AS( z+vD7`{(@;>yKFu2W5o}!k57^QQYr-7rY+*b+DNeX7cYJVrrzYTpixI3Y(ta%b^Iw{ z>(1&HZT<%Knr~NG_n7@JWlb+NV%DGUUy%FI5p2dK({^nETWS8AxTj40xW3bO%$R!F z>QO;WY_JE1GR_kXR-dibrIr(5buWA1VY30O_8~SdACtK>zSe(yxEa#GK4INJqQ%9#nP{_??!(Mwx$fvFD@ z8!A(O^W9SwpY>odsy}rEv%aU-;0b=r`mWo<-RTCfI>xQNH(Q zD6=0^->+Y%j00<%+2xOs?O^H6ReGb$1#8`p+-Gsj`pbEn>s1efr4h(<=vuJE*f3un ztZ9o!lx4PpHDTax{$hYNs&;vLK2tB2n-xca-Y48uC!K*dr?2zQ%mJQ_QBv}F2naJa zkMceR6dRoU>pK@n`VigeUkikY4e2c4GvnvO2&P_an|EsfMn&=xT>!~=sR6pT8HE=C z%a%O4TyzppsT(+5F&P+teBKc@BltsPP0fV%sOnC>Xi%$ys<*mXs~@pZRp0Vr{tc{^;{lYvQO4Qkp(wAb_-y|+2jwtV+}~!3@~mGQjXDRR zJUWk#$nJV*FG}aFCRmXx-k zbVpW{3Yhx!TdODVnfgU-KVW~lG;!)QKO`Cxmsj*BuX+KncV0lD2a5qaQ^QHlw2Q`;W#7)CGM%utVV1=iT!42 zVRrwQ2)XNJds`{a1ve}zq^R-bj{O8Et#h+2! z8^k!`Z4|dHwtlg8HHsT+Z`N%1iellh@`}yO^WtG2GmW%RoRl~|+W0k!L&V@1fa1%q z?JroYL9w`fty@rhcrtTRw@_?S^mUiRN)(H6`BW>4mwwy4{OlzZi*5A+vpz$SikI6^ zJXlmS+|L_D-G_hvzO@2HZ->lk4{1hGeayC|$QvkPuRD7`ZUKsNUL;i}zeG`t>!Ykp zFBAoc1xp=8o_X^EN|@&k+fBWyuA#`H~NO zwl@k_{tiDpPX&c@Lm1M3fI>y_L7YM1(E4dwYv!Zi=LrM#^))E?Fw$j;o+}C(QesCM z&P4%#)BXOPbtou!+xumYCkhfS%zkxX77BvJV8%m%ciB1CQFjzL?@7r$p^Sn1WZGLRQyZ*+xL*)wPE|u?onqb3dq*RD*m>5_cBzvkHs<=8Z#swDG&nVjl8ubd7mk>4bcb8*3hN zm60!&Yf%OA_X~sa9x%@hZ4m!N9{J)}{JawR;%k2GfP67Nzh~BweeQ6iy$pF`o9#M* zJSIgM{FF!D^PKOi{|J#+y-j(+ARFYBeBL^3m>lvLH5@&PsSgteP;2B};XLS?q=-CM z%f6Or1<14gJLi##1M*BGjJfI)kf*oue8Iw8Am@XZ<$;` zI+MnoEngtLSS@q6y%y3#!~yvl(p{nsO!g8W-K4SL&y7V$Up8)3bC@gA$BP^K1=6~G zDq^$MkXFy0;9YheX*qxXJIsH8v;Z+!O+lK2<5cyR9!T4kc538D9?~>gYrcF}M4Fs3 zLpG<7+OgL?Z^RR%)&wz$XdY729?U;I!w#v}hI^aMZ$_$}PSfg@6Ok&8**aE86=S&3 z1Edc9_V&%*aY*^FU^U0)5K{QIfe8*(NJ)rk_i-PA6z?XTqdtyEu~uM|sTwId+q)M; zDI#U&wJoDlY>^_xi|xwKL-Ol^-;W@JWUSg*aBnY?qn%Sj8p@IEku~T{%P=JGZ`*6$ zVT|OpvvSw|ibt}N*tjPnsV~%O(CA}GdR|}hZgLWmN=J?5&+bK1nD~Q{Es~fN>ANN$ zNv7qK>^Bca663B$#=DWEut>D%KqeAfd4>3cc*oI?oAyM+PF-R1TYl$HeI@i9Q$<0ARt?SAmb)%7xk?a5d#a1Nvef}VP zAB6<_IohdRpOCQSV2EG80TR?BI!_GCK*I0_y&dCzA--))^pfeD5YMR01oafeCtWi7 zx$GSm7ENUw5CFvqgd+3CW+-Ss26F2UA#P*-%If~{YwyAKc z@#Bk#E&FIGs~K6_j_YCdAcpH~#!5hIRY zvtA*l;YySB!ZnB~;4Iy=>Lg-<#KF4>G0rRAjo6`v7-Of^pZED7Ml(II*7h}G#=dXQ zKDioq->knptFI4tqYIaPl#j;U1M02mYMQvK!~h!^j_4QTnK$-AbeQ;?Cet0XeDRh+tc+KgC*# z2+v1dT2G%KLVNSw{x3%m-e0kuEiH%e^2PryPf0|$cziXlB3x^VrJVi*g#ElZy51rg zVTD7gZoAkb%=yfTz1IoCG`~!r7MF_9F00y>(qjnCdg_t*a3Vq(YPb8)fYAA9*7$3K zkoINQyC*0jBqeoi(Y$7a9GS)tz9&Ld10%KfwBdH^FvGzo5^+1u{g2?X4Q?OoO22kz z0Jp`TLGtnt-27tXxM~dqM{X;7`bHMP=GS#D>=CKR;4YlAQab_Q=jtI5WY=6ljFyv!B>opYp>vHL$z)GF)ds*&J(N& z4a1eXNL4QH8m<^#zPzDe#hlU>g=nTu(Vu3R^h@-{i>?}Lg2a9X6=ooK{&r+#h)nuC-4x*+P054r~cBdYGWAORkF1n zMBT>OX^heQJ_$FmE$%AD8F^;G%+GL@?OQ%}csNc=-|v}WeF&$-ak%myoO@56+%U-) zC%ZRk?sWbSP92I&hlRmWJZ5S(aA4ArjEohI=g-)uT5bdTB>rIGu-|h;bq|jC zk8QZ}VjB*7741q1Xot1SzWQpt4Y0BswEa`xEm)KqMJiYn!aOD{%=F%Cm|l4o9JXQt zj2#vRJip6@VaE3ZrlIItciKMRe z29f-3vL%tM6WdE9>uMPg$=|6RPb7c$U^|iQ<4*>W>}%6LLiZ^{B>QeUN+j>lL~_m}<`BubXPqJR z9ySrlz4ZPgl6#6)A(DI3okJw|_~{g(_i9BX_q=Qdq4$1(&_0kNv@bY>_K5+ZeKUqg z`pCD1(7xJDXrCDpN#6}>CA1IE5!#ojMAD~cH3{uoKSKL>7m@V!w;DqGd?%rOZ$Tt; zU^hVMTs$CjPMipxoAHFs(JMmd>NJte+1_7-&fRB1=g@#i=CZz%Nai$gGNE&8P3Rm~ z5y@On{YvPZa|xaMg@o#W523nHLa0s{5vm(U2-Oi5p}L|*sLq@xRCjs^)uGLV>e6{a zb*i0E-I_tDj=2$uuFW1rsLp8;s(WrkqJytH3Dw1&gz97ip}N^ZsE%$XR98hrqO)eB z2-V$Lgz7MhNOXDpA3}BdDxtbvLL@p~_nS~%zd@+Z-zO5?_j^mI5BL)53-^e`CpP~g z)Hm!2^$`)FzM@H}&s-zacZv!1AyYzq$%9azDkapn3<>qIqlEfe7NI^jpHSZmArc=P zIf_tU+(D>M`Vi`yU4;7RVnTh@lTe@SBGh-)3H9N_MB>ZZp9%G86GDBPLnJ=_XBwft zKA%vZ?;_Oq&k)K1lL_U54njHM5~19nK`2Lb5y}-e2<42mgmOm*p&a5tD3@#|lvC;n z<(5-~a?C11x#lUMoa0C+_pBh4gIWmXq7XtkNt;k^>L8S(LJ8$6EkZe~lThvoBb39I z5z1vPgmPL0q1?8DNH}i%2tv6ono!PLLn!z45z2vCgmU3JLOD^2P;QJRlq0nX<;p>X za%McC+-XN79O^fWP%aH2lvDQ;3Afq}A(Uh963VrMkv>-5z6`HgmS+X zp*cW_&|Hv1XihL8G&iUanj=_*<_c#*bA}qBxucHI9CDV>Tr!o=oWdtGxA+j6W7G-F zHARHx9DhP{&jLbo&}%|-kt3lwX$qmase{lQb(PRuHIvYs)ktXWawjy0%_B6IeI_)g zog_53ts*qXwGx`^&JmjPwiBBBx(LmIOuZx*ZXq-$b`qK!oe0g58wt&o4++hgF@)w$ zO+s_%OG0yLCZRc1pU~X;p3oedPH3)OL1@mcCp7m4{SN>D|NkUec|4Tg8e_kG5g8MAMsjnX1XLP(N+_x1aa_jBgV znfu=RJm)+Y8Jw&G23uAjqxHxn+x6YZR9-^!wo63joMC%TSeYTyiLG|eqyw3Omy1fK z-$Z7#i}y=S3uIDOEK@{lb(^t($aJ-_^}pQ#$hv= zU$c>A^>(24;~=seA^zC79$B7A$z3m>A}e4-=rEZavX1Rpt0r(p)+L^vE;|=l_e^@` z()*G1JchHhj65&ld}Md8 z_Viz)gdBzEbC0g{L(T+M`Ew{mj$zP?*u`qdv8YXZynsBnUw9&KZV7VS<6RiWW0AA_ z?+mH_9^`~^8A6z$M(W<{-w zZsnxQW1jmXS9Huqpqqh#X7|0tpGHX-J4CLwgpWb~j z1bJqBkKogF$g?$_b2`ERc`n!GZiMmw zrvQ1$Ck-06Y9lZ2L*MsJgonA3Kd|8?^6F9(m7S&`uUR>Gvi(Wq_3m43Y*UN;k&>y4 zmgpm2)4X$)#YyBF#WLMZ>yf|k_Z{C^+Q@hC3OsCZ9QhuV%cFDz$oHQ<;kwpTPDGKFlc#4-UqfniC(M>4Sk3KZxq&W(yWeB^1LOWM& zyTc7AB&TrW{&^_$)ne@Qzlg%%913fX&0%T`6BuwHPLx12n0nYZh;^$HaB-B|e5G8#qX^!LsCh$1bI_oHUpqsX{4 zZ=&H%6fM>{Z>ZaeBF9r+3nni?k>{s*D>PzJ6tGIcMdcfcjy-+3WAtJakzI9Q_yrW* z+kf)J-*yx|m%3i*b3jqK#mswMw@@UwJ@Blp2SpA2;*u|fr+sTOrzsvqgS4YB-*lr` zRp05$3u_eXo}Jb!PC~J1OV0>y4~lKpa5R|9Q0$y>U%xU1#XH7PCmh8=hgUAoBluJG zTFw~{P<-9$`}Wi}6er!I?|ZZs#X0|Oh2JN5vPze4cc56tTzdDq6N*309G7% zel9-SixP$J#Wklkpk#vcmHK0kP-2+7qdB+>C6*H{dJe2ciG8S&!rmm5xW8#s_Z@{2 zzhybox4WYxB=M}-<~t}kui$C3@i$81{N}D-w;m;_T={Jd4^dJ)=S86HACz#erX62O z_+NFMxU?`1C9Q5Q@$(f>(qA;=>6{HHRh~@#%15boxR5<<0Hw3vC%w>iLMe6ZCuE`2 zDaEl{^$$w7j@BKnv=OC&0YAqp<4-$N|*rwjP=Kf_rb5NS`YsK2{{V1*U z)bwiEj#5$Cw}1~%QTkrDGVJX?ly*ekxKO_vWpbbW;v_jJ8|Sd(34b`s^q#2}usl#U zf9yvlEe&P12MTLTl~Lv*yYw;N3uU`3w|8acqwLU~1;f%Npe$-YQ7zdIWjD9I)qU^` zWy$ocxpy>CmTz!+>5a`OW1jPHxm)qkOX*U*^d`x&N+&4{ih>$~xS+-UsCu zjaSR9u0nbI<*BN6nkY|e@6=fqg!0l2Op`@~hnIK9+FS$WZ#4tgm;|G|Eo`}`Q8CH~ z8YcKp*F?owd_6iP5EWCC%Fj)#K*ih<*J8)1p<>w{-^a>9s949d${RsL#rC;l8FEum zu|K9s(!UQC5kK?acQa8D<9^}Ck4dOVDBe2w^*>Z(Pa!MEKm|Qwq+El!4y;uS914YA4a7*Rj@^<)E5mNDVvVU1@on63Ib3`wYe+_DqZ`+ z9zD}TrSFz?Igj_DGPq(o{hmff%EHwL|6Z7eO7`IG0+t5@{%omKpP{lc$OOj8da|5Rf9Hl-sqC_ z7SIfL9IBeF0-DM722QFCXcpD0B!>Q=E$zvEnG^?_y^%KAN}#RtIP>LRGicN@Or8kZ zw$jbLx0ivoyNxlZ;S1V+9kQagK?_+QH&%rXTEr=NjZ3Ydoy+-e%IHa;UH$k%|LjuG z;wIS49)1wC1pBo4CkcP*Q4OoV1fTWv#PYE3pcTDtap;>28hwn5b1>0E+{31>AkZZH zXKde3@UIeLcDI#*M!g;XPS9G1`viX>{9Ox#;XW%t>)*ZTbkjl5il-WCtK5@*bf zH!RS{Q;oJAbZzRuX@ai5)iG_OJ?OKe^RmT(pqtZliq|HAzNGU!jmrkzZhBYEs_&pX zxq6A1x}dwBVb$9@f$mi}ud$NgeOlt1trI~HoJ=Z8HR!=>_VrkHf*yYS^d+Opth6UF zxE57ZIqm94m8}kOl*XuXbT%*i?usgxQ}-+P2BXR|cNFW(GgR&T6eRQ!qbgtm>8QP^ zI<#tK!*+r{b~N+TTf!ferq#BY@Lzfp_45Vczd7dnpN#~6Z<&X@_#dj0_g5*cn}Mq5 ziF3yBoKcl0jn#69KvlVd+%#qys+bmgXWEKTCD>hSS~-ZSy0~Qvml~mp?9OE+M9=3x z(&q2Tf$82;mkqg((+(26O{bFN^J)fOm3f^q6`NA0O}FfP=4z8QQ4#&zliD1Z^a zcy8-&Q!tVO;<}Cy{_8?MCI9LbzY{$Sv*l_5ieT_|KGSS50Yi3k zg08Oz7;l&nGd`RL<74mFx!ZHVXq&mw;_XK;x;K|E^&A1lz$GKQdNWijlwEUj-Gypu zxg}>&O+LM4T^6b-TgLl{YQspYy{ku}+9dZ;5NjT)Ek2J8UEzc3WfMbA(k`OfepS=? zrA4S-7rN$Z$vafLr{&*XG#b@ZxzAsOYQM1;Qs!?%HR(F(nU_%=a$sxzoB~uwB(lq% zHlg~Q%&gjo@W)UEXCbQNEJw)n2tL7Y|LX@gP@Nk0>VtL(sIXg3KbGsjy=I=l4 z2)GWW_4svrT8hB5TTyht_Zyf_!P7%Ns)6a6ayi1=228K|-m?w6!So&N9qoAy%)rIm zTlI7>ga2D_-?bIY@cR#vrG)>CNb&jlDmK%R?=&v>d|Cr`Up} z7y4!Kox@-mKignC@ithLtQ*x}Emkqypw3Yz{>l%g}$5UDK}u&d`tq1xO}lU;TN2{Q{O=J)D;hZ zw}s#vS_7M3+JV)qUEl6@2(0$C%X_4WVD+AO_IEwuAIzGl!0!foWYftpj(T9LjweaV z0c=gmFo%MzJJdMAHhMC1)-o2@rZ2CXmG*>a~Ywx#_B+kgJi-81#U4%+o0@Ub)4p|{8mIR^GAR>ARy_rbo< zH|_Kk8Q9mULfQ*M-l!v&2}O=qW_a-#*6S&u-jHoYUme&-5nPBIb;BA;-=erj8LP{ z;NE?318T;q(Ej{5g&L}z{`U+uQ-f|PeHEgHil2V+s4=Pa*ZO3L8tNGCSc@7`MQ1if zqQ-vDlX+X7pk`hCxP>qIsBz~VgWF%!Y#aD&FC%!$);e!N&HnAhZUVv|a*cG#6x2ji zUGZVpq2}DrU;nL?Lrn~29EhGcih$q~&Ray5okmS+@xzN&k5QBLZS=K**QhC;LL4N~ zLtopFkZp<@PQ3_ngo9YIR{40~U@e$xCE8YI2nFWqI6^!42qfHs)k>Kb*sO!IK4$f?`jr^F+;1Jh3 z`ocMIh$$R5G8-H_pA(a!YQb^3MNX6=IIe6LqZ13j@#-s^`)3C@zO!an9wqp|Eip@b zGQlCceC5GLaKbBmoH~@jIrBs48aN-EXuU;STD`!Dr4Gzla2}ib&!>2tWInPK-Oji=LmqEh_@2zM<=(GvR-)>Xjl?0H?)< zm9fSWoQ{L@@@ojb?@@gD%JbmL)hSe0<%2tV<)bi+}#1 za3{FN{E4j#V!$=~d$KdT5L~M5%xwbK*4s_)xf-}sJT_hgt_#ChHDx=v)OOXs0`4xu zzd8v;;0A2+n=!Q++(YLjCU;fAJyx>BVv;4eQQsb0-`Wi>WxK}{{+m>TCF-UiUVQ^^(JXq?CN1!6yk@u5+JWbAL}=<+wq49C#NeHP2a0 z2k$y%h`PXwA6gjjlF|)qbF9HjYm9a@Jpf*=YTt(Eguit8&dtVzpK*}yokH-$eeW?K zcv)S-{=`+_y&a_#qH_?uPm2zpxJ&SD{*7lR)qvN1mni)S-T*)6mih$n6$Yo=i?IiP ztm)b0u?N7P;N9`;;!W_UUMEhB1HK`ny5w{x_$EDbtK_GFZ#g556JZBFWwQnjgKvM~ zzn7tj;IAur@vfKP-P>%w9QqDERh~Nyz$b39ci$TDsrdfw2>2n{Uq|do2A_JZpPAsF z*C^N6*#~|M6#%A!A4e5}mEb3&{+abU6#UfJzVkOFfS;`_va02RU%b?6`Gy|wNg8($ zO$VQoFxJ^=1Nah2$Ro%#_y5RTMTnJyX z5dz|lP8S`4Kza7o%N9uxs8a(kDFoV7@cjjWe&yYybYlo+caBJ#HD*v9D~4m z{J7OmP>55fC+)7O0)fS_f^Wp{r= z2s*A)&J_ZZdVP0=Lnzn7{qOxV2uB+&IK1@@gyTFO9D5@Nq1HvkD33W1>Xjb6Smz0$ zaogMLE>RH9*Rj7N%7Bn`uSBQU5Dvu(c?cbIPG_w$hmaZrRulY|2_BWpPeVxAk%~MB z1CGuSE~$m^(9_tuVuB}M(qKvWsWO(k3Bt=uYun~sf{+?7q!au->V?06kox(l$`Gax z4_7jr4`Kd-FXNI3zI^uvE!~R{GH;U(NAw6dhBLK@9#V}>Z;ynqarW+A@KR9%C8hMPmANe#GmK%_eqbRjZo z$qfrDhG^d8si%H@glN&4a~Fb@A+kB%8PjD2kweCoxcyrpa(>5r*hcW1$C*CyFNA1^ z?Hy8*A@V;wyufD^M5MZuH!XoE^hG^$+fIlg6_@khT!rYO)w5cU5{Rx-!R8%A@l=7+ zfGA1uwN-2hQQE(aU2C^Plsm8dH}?uer8{R1TU7)R;|6j1gr8SEpk_M`B3bWl%}NW1 z-WrK@t$iT+w0ZH2;>!@VT}+;9N%VJ@saWKGg=paW(WPeU5X)Z;n!afNH@%$Sf5 zu@dc#ajiYXDz9QpuD^wNeAh~|4TmAtRO+`-8wIhpe&!-!0w{9pD+?gjchj<2!-3c+ zP-v&L1LE0dqgK^)Lu~qxtk5}#Ns3!I1}flj+-R z2)~2*ksbfWKRNBb`8H3xR?jAM=WuQgx@RU-(gY*#op|^qer44 zreGF&5byb|6Y(<-Vro2};|y`otn=p%G(jA^V(BH*Fo;99bVawTKupD|=S2UhD_*ey z3n4y}GA`bj3-N^t*8LW5h_BQiOHAp9_!<>#uRt728Qf_Q#}73+h$*|4xDM2>$=m)B z;*@~mBAp`;r=8wc+AtPkYHWBn8RDG$mkdu!hzo>Q*pmbhmwd71*6)URs15W%%$P(? zEFor_?RcTC4>8Yi;wuT^Cuyl6hUk|aJK403@YmlYNht(F-H5LSF}1xeCR3Lnt{tlv zL;U5}=h}%>vez6FD$IL^2P7gxdy?o}s6)_O^ZEhScZwT?g!5brKWst~Sa!`s` z4~fE~zbZ?cAyF*L88;9P$(TC738iX~s8JUpDUeJU8jM4tMGZ)$p#Cw)-wTPJGx>(U zkQn+uo-_X%B*u}Rrk!&@HEr|Ea!AZ_s~7Gg{1*JsC3C(&V)c3MvTw&BS^D>*ZJG)s zwiDy*_oP8$Z@Sje$Qlwy2l=(1UqG_XyKqCYKO`=p|GDk_1Bv@}z0G&bKx`Tiqbp-QBZCoA8rV67ZVvQ{$OC8ju`<#-UBApsIezL>ows9XJtI zOY}!vFh6l)4-_pUmaMASwE&mGh7Am;DhI zRFL(dYebbCuY!bWvZ!JS(a%}=o&LKW62Z14W>Ex&+Ej=pBy}-k1Qr>Pyh^2uyNUh= z`jOh4dJK*Cg2?)R?t1@r9^r3QzV)s>4w7~Q$B*eIkaSu9`w~F-d)@NB&DsoVI@R7n z_y^DFbUir@sr*Ay874zY+<(8pb4Zn_H)02=%GaO65?_LYj{>cYIMSElGbKOXUCF+)B&k!=3U*`Gmx6sIP1F+{)J5=jMTG1 z!f?qfsV$^7vsfW~Vw!!@M2O)J>@yb$V1f))0(N_HXkU9??P*BtR<*QkcdZeVU zRP=<@t8%9U>j$LXFEyP=|C9Q3@SW|ZLh3*Il&gFOq=C~dH_=x>8npP^mWVfy25(H* zzAOk*YWw^h32FElrQM~3pBf*9nL&D{;PAdhY)CJNjDvo8L3-s&V{ksvPhBe=J_l+F z6mG5qY5b6Zh4jHtBZG7(mNr0|a(v2VlOvF(-K4e(q#5aFZ=^kdG>5h1w*LZ13mQA_ z8WH^^zaBqmCi*MYs2fU1DZ9JtJf!U9)oIg-ex7G&`uhS%MTh2QKXinY8h3APgtR_6 zu6Rl?q;JaCmc1eT?_S8$?ht;eje3|v+A`|Dnu#1p+otL9>UKcdvFL^9MmMD08^{hO z`uq0U)Q_76=|E)9Yf&y_a(9U{bb^djsSi#~kSPi@nw1YjHs&+uD|akpYSe{iB4iVW zF1{esqAo!AkWHlq;oCq$o6A6C7i5NEigL@ZKxTZsTtQ9;GLvTqM^zMpnzks1uYt_s z?OW9)?;x}4xi-E(3^L+oCl)I~W;^50*oh0ogWL`-1c$$ac0pTJ#^$?>EB3de#TX0(8dWYba#LDj8wun$^1(vU5B+Pu;8d|1ujuc6DIyj(a5- z8gFfJhAfT>svjY{M;TV4pX{Oox78p^4*7Z5?Ga?DF{wv2EFpXTbn7vx2(qlI@e$X2 zF%+BE_d{0n^Y}THXvoUPm|YZ1hm3B}9DS)2L)Sl!>mlQ~JI5*#erl@0J_gxP;Zenq z9k)w?jJU?f!>u7}piaC5vZmJP=O_0<);xSg*0Mj4wQBd}{=EijRSL_DAnRJYvox#{ zLv7xQ=TWgu^vnpg`oWDY{$;2&ioVe{(;c<5pE&$zZbhwW z<=>x=PoUQPWzH`j!oRT7@6Ytq{{a91|NkUec|c5E9IYrNAw(jPB~ePEB%KOrlNORn zMWsl}l2j5(LXs3pDqEJwu97SjAxX@>zBfWblq5;M`{w(*>CBmXf6F=Nf@M8$Y#$A< zZ1vwL6>`8@IB%ayz&fxTmyy5x1Iu+oyM{0uEcd;|nt6s`Ei3TT@_7K3PubAXqn3f? z-}q!K`!iTUE%D>CcYzhEXfnxb1X$}vH&4|p0V~ohclv8Pur|54nPjlQiV5jAYsm(% z;&zl<3{n6qF(=aMMGjcIOZ9E`8-ca=Dc64SW3cv1(;ZY+fOV+b&Z)K)tgNA3OOkhj zba-VZ}T1YZy@;G+kXyCC-}mK>zS>}U`aoOW?wu3*1LZ?C&Em@Y8lm-Kluq*UrbX9 zn|;Ch?lkx8nGUczSGQeQy%((R__HPB34ZTUpHfLF*a}xPZk}2QcK_PyyMA1-RmHLQ zbfUl>)MZq~R{~peF#Y&=9@tt2$DVl40DH8p%kvR6VC$|_c=^^J>n}R27tXKP%tKj;Ky!1tY(-s)!6I+(KxUl&vsgqcN^>{OZwKXbOrnQ+FR>KQD8SDg-3D-e$xrvO*w$>s}TIY3(a{?wu7VeD7PSG0CGT$zaTg&e77_9h2RYA=vS<0 z1rOpzD#v z5^$!MmDK!v2ad_>pt{>};LQ4@Rlh|Y981L)jWf@KW37|)=DP(rwzJGRrA^>0bonHR zTmz0{NP%SfZ*W`_z3A2qaNLinzQ3do&N8NP?tN>sPB%Xggm{0ic zez14gi7DXh`7zdixW`-;J7JleUkik$!3E0 zINb+Tl1xT|(|fjZ&(}-fD%_7wyPM7?2aBWP~A8`6WhU%m0oLq1nf?}R7Blym7(_Rd#2G{L~ zw4uodT+hqdO^3gN>n%SZaD9b+e2r1y26WyM)n5fSSRTnZ(=veI zN3GcR`KdCvTcWMMr5p!0Hm&`~0)n4#y7-r34Y*17{CXY{{N%So`*srkQ%% z`#g4}%@iTH4TtOP-fslA>Ef-$#-~`_EXM<1l7lCI&)tsz}0dLmt?S*>=fM+?(_^d6#x1J^| z{$~cB?SkW%s|fx=f7j9-tHE=OQM_sO13cG5ckld81JAuUqN02pc+2Dq5Ii5|1RTKg z|9+tM2L;}0H9Why4ZP3^oi8`3g164<(rc3<@FKke-nN;8w`s$0atGkWq&yQw1cDcL zDp6`k_$S^qleJ`kxBJz{4;S>n+xs!UHS`X62NXQoCM^LkW3)=UjNoU@to(VJ@IU4p z{X1w7czMB-|BfpFuOLCFAf5x>ne5E|CtrbAe07nkZxDEwpY#mU?g6h4C_nrfvY-Qg{3-J5DPYZ~94ZdpM{56&#;A@QR z2<_?yU(@8mx;vTRYdQKyZq)~W^lHsbW@X^(#y#EI?g2g-e%r4#gFm^%bjQXW;2YMw z-(@@md}C2w^5^s5&-}S`-{tw>&l%kRV0aVwR#Pet8w7)IgN<45|AKGtLn`Jl_zuy` zk%I5M|4_k%Dll8-G_@3b&wIbl7kmWYn;CTR;QM}AeRZrR_<_nJuL~}LAFNw{JJ$yM zusOTRSG)y3V(IMrBg4Rt3Tu7H`UC!!U4=DAbHIWAI~Kk3DTSB+la zC%@bB=1>dx`+BF6odSOP2(dtYIQW^yS>opeKigq3oks9a1oXalAoyfzeo`j*MVV{A z)GC61?$Vg=d$Pg5`1p0F-Bj?e2=@N^_Xzy!Kdk;d@C5&k`nP{OK7d~_>3qL=yTGrS z@2k?I1^#1ivN?;vf3mT5a4aBS*RxsRHx$j#>f8W+Q~A5mw-mttf3ZW}=BCrYm-JJb z)K(3?Y)skItAzgt^9@E3U-AE+cZ1&+N>(Z1-?8(c#f1{^yN=t=TWbq`&$XYJ#09_a z*=7588z4}k10BvNK%mky!a3+T1nR?{yXhH0Fl72p5AkCNhA*78Jl`9FQT{C}eZPPa zMXN^dfeLE>Yr*IPs>u+z-+gtcj^Hn2gzR+) ze3*h>1i>nWuenM*2v(0ilm9phf>5&+MZ1(BSm!e6oDJb08T|OdUlRy6?budQSpz{# z&h%^XD%N&|w@Z<_Bu z?1SLefTthN6a2FA37>nzMK{gc=6R zt&}?;)U+Kqzcvj*#+@YVK{$HT)+6P zL1_Ht?~0y62+fpl`c;@iIA>f~VC+i>tt`d{&k2OkW@*#f&Yuw4ho`Q;bpS$#-SakX z9uJ{&?)S~6a~X%{Ua40Cvw zzLwxe1fIy88~|a|_9aK(b%PX}((yAH5XN3AJGq+RCsc1J)Fb#wa^?^w{~!|VJ%nk4 z4qo<)gD`!vZK=*+2s7vZyumvQVYW9>W^*At5fxamydJ{*v=LP!)lX}R)AL1NAOD6>F3^uaC~s5)$YtE$dl1TuM)%%# z2lGz~@$VpPU6s;*?heSuf43%t9T{!vcL{#ig|kCqtRW=gW%#Tn$jhc91R|yOYMtx7 z5Dgd@J1*)lMCucb^k*1CG-Mt<`OAHXhA$%y)g7WykuJvTK0q`kRbl4T9T4di+%f++ z1fq#$>n+b;fXLvro^^;dMAKV{^=3h2sR!QYflM)*UBV$NqI?_Um4+=B)C z78CqLM#=61F~e6go{WGfRdr2PatTBSCX6~}Zv#=r+?RO@Y>2Wvcb|H=0it6Ob58G6 zf_z(9ABCtOzv$v0BZ$u2S$?JBF+|0$243I345G^)9^RhQ3Q_65tz|!VLv%~qu=2JJ zL}jLuhnufLROxiIW+uUZxW@76H!egq@qb^G68yTOH(y06LR5bx?9KG!5HayXE5Uy& zZX!DaBDoOrf$0AWfk*l5F4p|8Cgj;sw8+Z^;uJ4+Z9tE*sbIDYf{tz4g4Kh+Y0kPRgEt6+6 zAfG0wPaw8hoMf>m0AiaU^LhQ+A-3QC$)=j%I~*yn-#rFm=gVFWAoy-Is!n~2AogTB zLj}4HA2WbdAP$_&lmNuRHb?x+W`c-QqWoV#91-;=#M~F+sI=>09Rz>N>ClK9 z`yo#qq6vP&o5n3O2!7J%lx<&~Atv1sUm}4xZEV}l^#nhC_Srp#10c?H^V$2c0OIU0 zjs3;5AU=^)eJJD^#Q7&;k4*G~xafvaHvI$QbI<7$MQIRUlpV_t)P?xUAD1HC+YsLv zp>S5T7~(rdcP`{n5LYZ(U$Qa=;;I0>YuaiMKi$bnHut>hAZ~c{ zz6?MVL6k4K-?PnfoNce+fq-82B~I>w@2Z z%JBa`p_plx+#qo*o;D-w9hhZdHYFYs zcezu7WEm4Iorh#4BQWPcvWh9RdPs=NStt#GB-BgS@f5*d7xBi`KNFJ3lzr}FCPT96 zl(iS1;K$r)Uva_{lDJpJe%>D-N&M&+sI?7}JqknDu!cjDs{Leb);UNH%#2^}VFgKs zv&qIGjgVxmY2NfI7?NWNxiRT~Aj!*ii*w0f9pEdNGGF8|U` zTSWL1)t=rz5t3U|(+}4Sg`~{R?&xm9zj7r}RP#Zaz9g@&36h$FK?POekkp;iI+M@? zN&Wp7#a4uWqdYN!gqV-3W%nVG8!Cb?AFQpAP?lchKN293$5O)}X<1kGDEcBKU-oRS zH6i@JpERiZ%7%oovsVay_sb)V>;FQ+s8GXfNEQD6;j|b*%E;j2`;e-cgpxCaRKrn6 zHn9a#&7j8jvOSQ>*XIaGM`z9b8dwae?&Y@jarTf-s5#pyVnHfzyD$(hq|xiE0O<^k z8U^j6AeXnjAJ+iVIWQiO^B7XA6~tK*e4FUwLxz2U)PBF~u%?}mI-F4)nK=@Ss?u>Q zfz<77#5fIt@A+l?gnBllE0_Qw0#ZM@kbpFh0VMdrZk?u2jUf#SyJVj75YmWU0hS9^ zLK>Aj+*+{>(k(Zh;n8kLV_zgLNYaKh;hovy`BxxK`t#Ab*A~*05&3TS_>iUfTPi`C8Nl2Sq}j32tL~8VAu3_@mRd;jFA~W}@QWTF4*&iY(sPUgO@;Jg$M5Kk zg#T6b(yc~UA-ypvIQH`bNbk(oPPoK_v|>4vut8e2aZj>=GNh09S){(t1?j~v2hN#8 z`n>#f#u|d((Bz#p!5h-1R`ncd2c+`AEE&@Og)^k`2D%QZ%$50S{2#-LAZ^|0bY(>} zq;1Fgu8&lKwBy>XTdaJ@t%-Ri$1Jy65AlRV>l=A8B z_frOg8c^yLrtAYs?cUXv=5wIb>r~g*d5!XJ9wb<-9G>Gp9E@> zAEV?zO$j^QPv;(}sayV}^eBUxw#!?E?*_^!{d!vYNl-I#)dwDb56bj>XnO1nP-ZtC z4fc))W&S`Xb9ODLIWJ;{X=#G8WD+g%`>ftg(|UUz6qC-}B>ZjukkYjRWv4p#uo;aziXe#@`Nlh#I%6Q>RR<-xf!S& zrSfp|9iT`Tw+?>}DtAm|#E)U1m~r#QAJi#x{iqukKo#2VXwU2bb=sA?CE5nm*_Fh} z?*}En#y6lYZ2ItfupX#OJMH4XhJz|OaI*I$;eYj5*Ul@7pst%K~VCkZI#6bubOl`$_GF`z1Ft^FS#f~x!)O-dG2)$bRFikE?Uq%wKP-U3k7!;+4K z5dO8}h$S@#^>n&<&csAe&nym)QhEXE#ez>KWWzzdbYH0RI1tn;e@4N9dL90ITv8_} zCRPt5{N)ce2SCY#TNWsJfJ6Apjob!M{|h=${||OhRDFYSyfY|yT$c@sh_acM6sQm1 z$tS0SYWZtn{%b3!&uT~Ravp*Ds`bV4?m$rA^d0Wyc!6r4aoT!o5hx}G@cInu=VEW$ zS%m*Duj|#r_JH~wq`sh?@c*+R^hwi5P=B{ST6{eS)W5wt&ktV)t#~BHWn&j;#$LDq zwDRR?ON|eJ9&k6MX%GjrS~VH56F{ps&SllF2dyD@FrbHgY~vkJ1g+WW(h=LdskQs0NZ;C0Pr={(Sre1<3s;T4ANYKpBEer;2$`n8;XtRp;?W+iX z^QSI7^A~`g^QL&m*mTgA^34U>>a$;xP#?7Que*x(B0!TSO3p0T?BCc3dX-$jfew@pa?q=pmkh!`SQdHSwHtJ3 z+cN_rd(dHj^e?GrfL=c!aat=6v^-9n1bX9mvl*8*f{vCCJkXmhKbnR22hF(W#crUt zdF0QTk_(y~M!9k`XrfN$zMlb_i79Fc|DDMy^Uv0T-gP+WVKO=YJtr&e*7$->xu{iR zcMf#w?PxOUK&L%=QKw)9`ar{EM=3e~ba{dWI^(^-wLk}SW{3H!#1PO~eTUus3ICjd zpWe*t0eyVb!ewI?g3g^-!0yQeebVIj3cdg|BdaP1|3b%7zZ084pI)vij;#cJc6D&z z3c~+WMDbK|h@p`fpkkpbt zH(fo#|C4ffL0<>x&zd#kCDx$7j?+C;l?M9TwC$7f-+*qH7dGf03yi1wg@b0|POF=s zfB7-a9rW*T>#M(=K>yi#+=Q0}`tPoGa#W!I9dey@d@5v$xy5(3ZHBC0v7*KD2aqu_ z%4{{r20XYsZ-gggYV||!|0sY=UH*ar8Plyd%^+jk;E^QAG<)M~qn|-GLY3{{J{&T} zo|yzdraj?+^Wck+=@>WHf9-^9tQD3t*g!VUA-C~L8f4==J3S7vAkznd ze$jX^s6Y<`-F|C81^I;~eZCGVIOM~qXFoxO9G;qzHVahfnUiB8kANb-P1{rrDm>GA zoXtp35&4N32Hv0!mj0QjNcbb)EWgQj19jw6mTAdCP*F{NbCL=F@eU8Oa2ix}&%!)+ zBTz8|hfcTL0qV@~?FG6;pw5o1oYk!#s5mpjho785#n0VuS$GLl!s3sQ69|8z>on^< zW}uQboqD=D3{>*=<^?kde@d9m^I;mGQll;}`m+vH+PS}#@6$o0r#LUoYX_Ba>sHmd zIiRu%m6z{~0(Gn0vt~sNsM|GHwU!5CDD#hFbefuKsQTN(!xgDP`e=-r|Ws(j6rrb@zJ z@n2WpjLV=Zce;FwY6A6Ye~!P8IjE|WDnISQK~-Pa9B5Pls^;3`4kf~0o2#>{(H&IX zqoB^R8=&f6yxEi50ji;HLf1ocK~X~FK2O5Wd}n)D*Mj1^;=t%ppu~RXdiNy!jYGai zvU#As=-Vqj?hdNigq(;ys1|fr*>?_9>w?uM*D;`eINep7GZ9pq`@qv9fi(U*`cVp-bzw@B=w$(mZ z!hzNgojiNu1keUYjy+Nd25lHCo7?;Zv{CZhk{2qVjk6Nw-&h5D!u?-mN3Vc3ksi!9 z(5BTlDi%%$J%#SQcr4*JYhM4V&nwW=eit~%v_Q}3rSaw|;fLBbr>i$X&(?YV?!X_= zmg5XuHWGd-^RN%|PJ*_!`rtOI4z$hEsh@fnfR-PtA80$T&&;FypzU{9dnEM&y<}ga z5VjPw!?8bJYYG3d^UFWa52}8x zwD0uh@H4kS``Os`4EPJ$f7#`O%jbg*So^Qf9{Vcx>bfNZLyYuRxi^dLov1<+J;;BAMRucXa%hK28 zKS7r+9=UADY|v$^c2~C_0WFP@x7DC4wwsXF1zoxK=&IA+pkE#3>$m5EmOg%2SJ2g0 z&Qqp#plfcDjynUIR5AOF@Yg-NzVVe2==z$TVpag?24?N%<3*sUulK(ADuHG?)wkF$ z2hI2PZ85$CS{(FjTffhs8+Av0|3dh`7>5Rwhk_&y(>mc#6BsSqOC##cz-TZ3lXNc(jLv$e zQRgba=x)hM3DN+g7pyeK*&U4jL60=E3^3$V#tm)tlP z`yH4GC1Xuv^uUPTHd7YV9eTLrmNb6u~2Bf-*OJj3>8~cGGL%} z`C%sEpKb8Z@>mcU%gN4%r{h+Fv01rkfzo9#3p^f`H#UQjWb@fH zF!p-_E3buvS#tRG(nFPC9Ad{+ZPElIZ#Tm4lu6Z$&IIFpf5yt59bjCZo_Wt%fpLBF z&GqqdFmBYskC$t~tZhnJ8&3Gw|L#h!_XXpjxN5_kdtf{V=J2{b!FcHm*wl3i7;mG^ zvIfHMV^-q*fCJ-erPGu!0gRvAP=N85-naxzfY${787g1`10sKFtpXDi#_sri1x)ZU z{Hpy5CM53MuDlswLQ}qXo{az#mMwh~FyV#Qx~|Xy6Y;$JzNsEy4!(2ip-%WC*}D-x z{(w31O|93Pd0?Xc`b1_&gE`UXsZw+unCQVHqqgaTi5VH9veXaEnejCzC+34WJAIPc z07Woy^N+@SbpR9ZC=7lP4<=#loU=Cwf8u}fL!(TUZ%3roSIoV=cB zqzWcAL2+bX!k?D5_Ok3MnDpFy{iol+WE87kO(pzUm0JxD9t3ks-bi3>i~7dagg^I3 zXr}%qFnL|yoAkH|CSQ5-E#@y6;(jI<&j(YeFUw6L{6&+a;Q;f) zbEvSy5KNoD^yI<(3a$LypYZ=aI`+TjK43b}?r*Me1oJPsVQczDuw8FXYds44Rox3f=oFR)rmUmvD(z-qf0_j}X@tj^|x$1d4| z)!ji4*n1kRUiggYH4R|(kH-$0WdzpX{I@g11Hc-l+G+eP1Z#9VgEf^7Y%16(twaF{zuCW%D?^@xwNM%{`jtKm#NI(4(tmTZu;{)b^wX$KemK_0Wy?oXrQ^Iev?%ZuPU9by$evr2WYq!h(&Z}Io z_6M#_yV(uwl2hIDPb>uMaM5k1Z!Fkl*Y6hEQ(z@KHJ~h5doY+y+KnvpeN$?&HX2!HUIt?MZtupvp$ z*oSw)l5W_T*d1(GeyA9_2yA%i`^|2IKjO{gFEd%N2R|L(qHPQ|@{8 z4E9*hgzx#vU{9!a1jG^k=;4m-LCIia#%2ULH-SB4*87jS1=zE5-9t3O!Nx5v_}BIV zY`p7`y>B(aCT#L2QUW${d&T~k46sRIV-)>6z$QoSJLEVQEP1+pCq;oxO))#FS_?Mq zmgE?~ra$;{{G~70jPm)anR#HdYA&5RPWW$0g18v$?G~rlMR8zrJ8x=^W5DM1Q99pm zBG`QOjl(_%fi2K|nDC777mn8&k){H+$RZ#qawXVe>zAW8T>)F-I5uT|3)s>%5n~Jp zf0=hfnqmal@|_k&TqRgSd!vN#SDyGfA=v}$s|&U_!!yBFT}w7y{|9V!&c7VXd0^%7 z;W*gZ7uk7T>%i94^|$ym8f?9=>3$*MmuyEuK3KY|_QO3r!Lt2!TCQFKmLKx^@r?6e z<>QJ2+h{_P(uT#wfy)-L@6PVwU| z+GIYs-i_582Al-fw|xTlwGNze_rso*2H;dwSXqW2IMrdZyrc5Lsf{_;mcZ$=luX)e0v-&X*q<BB==FZxxXyte>%n21V$1`=KihoW;0ylXEUog-?tTEy zYU$viu6@8+uihFz-4UFPSNZUvgnz*f{fiwkaCZCl>eiZqvp@F!^4&e)mYkoWA6o{_ z;p*|LfokBEWlNJ7oYOr<|Qlj8EA@8DeCb!7aQ1}#F2V~J2T6|V^$8hvkPMc9R+Z4E52^}w-8+X2HVE^GvE@oCjWPz z2A8<|Uvs<>IMQreg9(4~>FidQB5)~5{kK~vflJNU)TX%{T-v?jz+acZ5!2sM^BG)5 z)z08MX5fg*{XG)~?v~uxg1aphxCXd8J?QYs>%iry&g`j1`17@6545&}D==&&(Gy(Z zRJ+4BkAN$(yxQ+X4Y=aP-HvV51y{1lb--dDaHXEP(c|xeE88w97r64h-lv-ufvY(B zMB{lZxXN=Q&RwU#y}A;tb;KB4)lDgxgR6cpQOB0>OHmKPOtY0aOBXEg=BE` zU*kqUX#&^q=LZ>K;N-C~92`67TKa|;;CS60`(mw@O%eWP zhb>cztiZLnJ-w3{1x}K&&{}Xmq=Bvvt}XoCOb~u)yQ7^4PG0^!z;&hyk3JB7GKH-2 z&w=k+6#pcS0k2TeZnMi6e2@1_pRL>lUXf3?Gk*-e_jlsp2Y^@VvTkwvO7O}``LEty z2Cp(?uwzaOc-2u`t4~h@uQsuK#rAOU>NE9g9V@|W*zR3rstI0m`TP2T?%=i7PjUN} z30`~4@lP**gV)*BxISwhc-@0m?D6B^^-f*fxTO|6=_=7)AG|^OvdzX@!5iMq_|h*A zyirLXpD#VZ8^3b@TD};`YHGA78N1iXdTzCXPP z{|tlr-TW%>m@Fwh_}R0g_a=V@Z)w-0uzxyutCjQjyB`2g(zl}JEATdcorgwhfnTs^ zMc-~4!An*0=_Yvl*nY}|f50!fyz%%&!tan-q`K!M_+|ICPObg`-s$NMas=R=-@J?+ z<_F$|G8*zHAG~W*L|k1j@NONShTU5Vex0I4!nyO{r8UY<0ldfXuSw1(;605Nj4}%b z?`4*pGPo4H6u;V3!Aohfn(+I&-Zr{@6}+FcsA~l;w{0`Q2S|;35PaaV;ie{pKPYZz zj;c0zY23GXf)B}-5)b&$!b27rf5C^9)Ax_rfR~pE;g4WrAKKM}KiJZ0Ic^O2$iH@v zmHfdU?Q?ZrV*&VMgS(YJ>ka0?>qS93!LkE!k>~h>*JhA z@Ts}vKi_~)d-Q`yANcgj#qJGW;4|v3aSyV=XNf&LFA)A)Qb4r@pCcD4@OPBenx;2^ z&(qxEt7QnDxc!#jguh^t-nQC8@P!EZk=F-&(Smn7&JzCO6_b7iCW0?H=O`8~(Qt zJa0JV?84LF#VOJR1>ZQQF}|-6c=@^^0DQB{#fwh~f6K<-x~WRwTjdKG@KQ|KcnN%) z^ngBt|8;hQq5c%`zmp$a@39ZO+}=C~|F6J5qj)fcu4OMKCas5{@OI3tu<@&Am|?7VIQjuLGS#_ zmphyx=%*SvEKh=9aGN;EW(bB4KRFFDgJ4u)QS&_vf^qHXm9Jkwkle*B4G1Rk1tbJh zDTv&FFjYQ~Aed{cWG2joV4-*0qkj~H858^SO@tpayf#(nL6~h*+?ehI!E*WV|Bl>+ zV6|>%vv+q0);?8R7c7E6hF+^-EQAFI4sGwvK(LFZe~QKs>@Us?EDeGnZ6Q;NAvoM= z4L(5lmp!)o>#-7oq?T5fAvo77bkl2s;39Jk?`{FX^{1pb5Y{ND9w@4Su&)1qy)S7( za3A{Q@LqQa@-=xT1W!|vs5>Bd&3ZdvIN|rUn|Si?2?)}9?L#dD-woX9`-I<5TDbc{ z@RtW~2mx{dh9GU#rY(jLl$543Bo0DwW{<>n4uagyPk<0wnwOkQ_`}`|8hyG1LindG zsR1ewBpa~I1;W7&y>!zQ2#0&_89(qVgrlnOGFzuXkdKcD2q(ryWoNyF5IvPt<}e5` zb1m=qZiFCxtbG=Qv#Z+kjXNR4ZE~2YJP$(rcFB1|NC@jSySxrUV$`}v*YzPJox5*! z*bf4kW>38GA*9@rHj5BaACx~E;{YM8e6(G!^AOT&_EzwOKZB`T{KN!8R?8G3sSs{S zi>40YcIc@;vw@$XgLzCkFkSoVRM4x!LG)9v9Q2t|&4K3#kb zp?J-P^`Tl2O1vMiZk`ZIcWQ2&c@sj}et!~`AxPcXX#=6+!kEu>Cm~c`3-`HK58+h~ zQD_4QRgcX5f(U>0i|Fsp1rTc9HwBpYf>0~WZ`W7~q3(Oq&bA8>K6dH+T`fTP)NjS^ z9Kufzx%n?91OltyZ?AtT1m46`!Eq1-ac0r}Nvk0=E*Pe$O8BJ|-|`)Tv`&6G6GDrx z(UHu95Tt55Rt4dQJYYd+lMh-5zYcY2Gu(q9Ojc?-^bwuKeW;ZK(Wv^rIe)rBG^U;uzqf@rp;>oc z-f4&?@{0tBljREqh*KqF5dhI#{s9oBlr@;}&oH08tj*0`DshPdEZ-p2ui-|qaNHD9kow7Vo+LL_#!XGXs4%{6DG2#bFcJCm{V;H+9ytwRS3{fsCggjNVnU>OS{31!%JJ4^ zh)I{4GEO!@OwO>G=tuZd?j_w?vL9mVlfRQER6rzuoU1YvVtT_Zvu1aQlB=sA{8_)q z33WismKMfV5Od_g5#k+5K;A>lGki67tRBStsgeVPSYUa;TFir3X#eTy)9w(9R!v`U zbuq+Z&(qHj#6c|amo{7wOZP5#Id3AwvZGfVMg>7EKiB0=cfwzB#br680^;&E5+B zHTNOPuM2xZY?WV-K>Q&sO3p)UlN%<8zvKr8@pleM!od)U>UM2?0`XtP+kLN9Ad{~r zS3#!0A31R13S>Q6`QEBke$YAFlaNU^YD^tuTD!_F^frJ@`{1bIf*)i$ zr}iX1$%jlDzbU;SBPx;{u@o}>yHZ6#X7E@{ohv{le{3d@8P#7%R|tX3SoX`9Durx9 zo8*`wn3b!*;IKzfXrMP6f+^Sn5;2P`w(O^X8YaiB>b>@KI6l1$Y!q` z{UF~HGE0xJ*>TyBS^3pH3i=C~^`5E3!b4_r_{0W@O1g&(}aK7o6J|+9U*g~`Z_vZfXumRL-nLa$Xq%KR}3_TY_+21 zyKjVl&A{z0FUufXH~htiEH%j7jSSt66MhdfqO8{-^PKx}{i5%Xc`Y#~r2rW*r5pPl zhRkPElkm9;GT#6juW}v8q%KeMg3MpO2!||y1Y)l)kOj(x5i;po&4BO+7kUOLHb53q zUev}L{to~E|Nk_Y30zEX)W=(ApSgEt?wzeEA(bRcA?qPzizH=Fh>|TN2}y(~Nl3O9 z3S}vhBq8)qCE2q_*14M^S;G5F@B7a0bDrmJpPBEy_dI7AFvL8yUQ-bchS>M3e`j9@ z!{(;@>*GXV*z(u;Uywf-;ze6G4$lC?4%J)pP6jX}b{-UG))x#(JyLmZV!)6*uxZ=1 zDlnvs_7Y{Nz_536PQr#jFr>~gl?CL2A#KTwU4y@a;ozDgh4oM{9NvPbv?YKcefJ{r z`C~9-9=Vlz*%k~(^K7*T7K0)CVidX*499OgvYuuFhLd$Y(%rqlkoRJHNA*51oc{DK z>w5zj&bENvV`ng&Gfm665CMil={Ltcn_cr4Z0l zPJ^LrTya4Y;=eXk=~@>HhVq~#7tYpz;bvH6za$M9D%N+pv~(UAD&yA=9DfQ7RePUY zasB~@nylU+@c={ZnS^T;;;$?D=uuS6zl{m83vm;i>Cmb?kP{a|=454`*SEg0TdU-r4>0)|E>^1-o4Fud;@=C=v)qi=mO zPX>n1-d(17OalWoW5e@~N5Q}ZKbvL3f`JQnd)43$hNhULz^j|V@HOG{+atALXh|Cp z6pi>>vyXh36$FN#1wTUuodLt|GGBug;{Q{1X3_5vVEFe$z&zUtlxgFx*``?;xfCdYU`5N65}-uHoz?v;fRc1{_^Fxzl&pJfRLcRN@cu8_9=-!g;n^>` z&;=-B(r%NKD4s&jZRhSxy8B z{Qe$)cMzyybEkE^@d2peOV8&W?FrP#wZ=OGYSh+{vvVqd8k2IP*DxHYaT(U_RFK<@+o>;rS}?R|+-iHELdN5F{8s=K zI&G16pHiR}&%bq#MEpxv*iQO338=8>DCA;5t=Rs^|J)~_!c%+H@9qs$#L?~3m#+gV z^6a}86Dxs=GCH~fsCAWT4H)8&e)w$;djhDKHxnA~Gy@gOoSc6e@o)ZR{xKmQsI9z! zg^TV36|X3!#@PV1ql0pZQwUIr-Ij2|b3i5as|@?}7pUYBoti601C=syefV+2zjx-7 z?^|90mAbHZ8j1K1Zv42;t_-NdJBR(X5CD~a;LwJ~$v|c1w3?P50qW>^ zpG}#cfy%ym%5tL{P{(U{TLYtkI$1wQ2#7!L-Q^t}2%t_ksU&{`fI9mpZ0AeFe@vOb&4U@ZU?H^<=MXJ4}mHfX!Hc2N=GFf(1rrl?)HU1T?-s>_zB`K zU!30I;#i<=M*hs)w+E<-xXGPYA^ytbGueJlKvf+PI=F=cRg*jKr1Bb2wMAu4UqwLG z-O!x6kNEH3UFlMg0o23ick*``fO`DNv3D5aum2WX=p6&pbCZ{SU8;b3DeYG*L;SC` zyZbYNK)vZgU#`gosW-m6eH`01EOZA@pQrfW81on?YF@#}uC_oi zVdDP;h@V@xVD!f#pp4P=KNFz7?zQsD83$BL=BnDbRG?Z<*G&v+0P1In)BO?7K>aq} zPy|qa?!SI)hWP)z9x&yt1ZY!g&(rJvK%2L6Gcq!O=2?t+xq${6Ey~%m`vNV}|9vxL zBhZqr)8<*%04?it{@ouH(71?aY~OR73*p@*Az38$kEs7j3?W_+1G(FMle~eQXzPOUeSe zpL2z1DGPM}{wsR7 z!n;;7AL#J(IUZ?i@gLr|GDN%u z==7{RpAB_DXP$LjRE7ADUPh5-0npk1y~OaX*R4+=)P!3||mC>=4kU z?Jo-GvYA#}OnL)-EhK{fdL7W^;dSw4i2vrsZsH>fpeqvN64%cJx;-4`09}qy~&8fD)^mA(sj|c^(|1h8Leuy6xW08GKfEhfU_lp<{3@n(l_Uk@i zhOM~#=Y9h)!#AiloJ0I0cPuwejsRv@{ox$Z$$|0MtuG@|Tq&SPK}_-H$9LHr@JR%Xs$3{2?4+Rh^`0<$>6G26}zn5D6s z9L&9dF=n;5h=0XFcc<%bfk8?2RHid95$73~7{niWZB+j3a$us`3r}Fy869v6FwyU) z^!bwoOiWY3#TPU%v417~OWlEq6D_!WFcz4ts_TQJ5Py7UtERqq~i0{Q*q!AmoHjFOX3C!Ll1FH7c17nQRt2zOb7RS|2UJA^?-D4-Z z76Wtm$g%rM#Gjt~&$oF3Fqs#pJ-W9an4>oer{p94>^j-gT`s^Jf3a}JvPfV~e!B5; z!cAcET5M*!$bdn?@r`sUF!|C4bLnHioYQrGSIq)bXuoYi9^xPOrN)3e9~fiQ;hzEKTG;XBAASK-z8-n}2w-l;&s>#__$&4nwQha} zOl6jQO^_Wh#&UN!;;$(|6@3XXwg1`vGqV7u?!j7A3IWreCJzAfknXuT{T(omf9&9G z=n2eIi}%|CqJS|jufd4_rS*XXYaE!@U0bAW(}8)@*E{Js;&1fGm6v=02Cbr$0|S8h zIAb=s2JwFmzLYw(4j3w&(7Nk@VPcjZR0jjYCEV73&j+R{t@Dvbi2rMLwCx2?U|I_5 zv-a!)rnSt~ZYARXS(TXMYY)ut_5uT#KkYvR%s=jMw-(yZ1UYryMcB5aMow;3t*kT3Lkhl0E@auzm6+_?IA9EVp0lhFO7C; zg8*3LU0$68Y@eRBGmjwteuGhj_ylbKF`EKs^#*oedqEBCVB^B71QwR=e*aqm?64@* z0R;d%eCw#smrejXG9_!#{$^lDrMEGWLx3G~YRa-H@xZpXcZh%dEy+ri4Y1z#7JO?7 z0oLc`^@xXv-&hu&{|l_&_lT&J(ZEhMt7}`a2iWOYw`iYNz#7v@FGpYl92#Qra9{)7 z2AXqaz|I}IH|{RtZ+FAVz%H0JHa_tPup#ra#fuSt=<M;Gq7jrhaQ-c+5)1va7-RZ8E0jjUXw3r76L>fUoZu-Z%s69Kz-)nd29h(C2>MbWwpVAFPXbe~}W_TYiFB?J2c zi-Oo7T@0}4=X+lHiTF{q3QtwQ9<6?Vy*Loq?E0a@QxX61cL#1od|2RbP#ZvVg5B zIy`?Y4Qx$$>qjTVUwe1bLSZbhbLC5C;i<}XaSinA&s+#8` z{^#1|;UhhOZ7-h^fPLNDKGM7%*f&GalkWs<}D1N`*Gf`4I9mX{k)7a z4MhCZI#gNi2e$ony#>}-P5edtO__dzmyy7JJ$-h2X*sYhB_hco8L+JtK|9w@1@`Ct ztN3)p|J&FoaKQd)4;aAyYpvb;BNjL_i>~S?wZK{6o6;_7faB?3S?vn~PSDl;@TxPw ziTb2;nEV4c$uK6(;vH@?{WY*n*x1r={w+TuNX5BaGh@7>r)d2oZaJY7xQicXa9Cf z{~a>m9NC7;q0@nL`fcp6f$PrSd)1Kzu7~o=Fu?%edfARG|F{`ASLf^z6?MS%asOA5 zqXVwr$myfw5PyH4!m6Nr;078S<6poHZcmWFLB!38X34+}+hlX^%`@PJC#~_lj`&9& zeDEkE47gDzT&8R&0d7p;wx_dsz>T}sIAh2};Ktt>j6yVU-cR=jw0!{1=Y4a-i=M#w zHjkfs8Sxw2{sR@jO%*7R-zu01??0vDD(bY0Uf;8x@v z_*?e^xbTZDG5Pku8E-3T1#ppdxto`k0vFZ(M-Xu9j0NE&;G)|d1GtT5#10DaZ;~yO zR`&)jPIo&gcO7tB9qi=sh(F#nI%S~(IJ6qc(KCTd^m0vgI00PJ)SX&hGjPd4pALLL z{3*+a>u+rXZtr?y#s&^GJ+_+>f7-rDS@S}GJD7Fa&f^?#htKkJIwJn`%X1w~M+2An zUnwfhfjjz8-Rs|+~QwYv@$0Cz_I{DL0w=iBt{ z`}+uRM(=v|3An<()PNE<;EINiEKQ3BuGl+cNMt2&B{P0qn@RvzYHWZ4fGcYcguq?f zC>q)F4Y=~ep#L5X0q$nnRrHF1tH{w-r#u9%@?7}%l{Uatm7$d#3S3QfSD#*mz|}t4 z^Z@@094cNXe;Es$u?xMs2e^lA#?A$}_P@EDfHOX=CE>t5@0j(<3-Q0~{wL5`1e~!w z7EcE5jpw;}h78~ueI@U28-RO1J2?0x;%_gjV}Sb{sb3Ua1st_Gf*FPQnO*mm*#`n= zOvjeFz%`xRvf>@$|9YX}+s&cCwUiHxIJzCU_GSDSIAd2e*A}?n?F~P0e~gL02)>y7 z|3_wGx>|!~9x}oI&Bl-A|LzZ2hh}qRrvG=`!o)P-s1l6S@!y;c>VUZq~HZq=1* zU+a9;!Rin-qtDk*)fXtUNmjL1oq%Ynv?DdQF`3mYBbI zmZaOEOF-79!euqsLM#;LVGEIk%IdJi^8WY{JRQ%%GjX1LpuAp_tVx#Hi!4O~>W6|B)$~H?s$}Px3@`8G@s*2dgJH|VPhv30-ORSG&jin!dgy5y%l`zEA)6~mE zh1AG*<+)p4u`I=<_;FlS}_9$1k)4rvQ+Kt|&f*-Jg2$WSjND^!z-BjS8*wq57;cAp1<#sc4l!-G)5qwZ!YB zm1=!}!KF!M7O0OM(bVWNtbz4C_k0F4|$b9@7u-) zbP@ZCu1NLb&r)l#pV&|4E7eOcNlRoaWh+HvL@%XJWGf}9lKm1BNtz^6!dGdD5F(fe zwhFbnt0}ZH)um`oYr5-n+GAQrZIABa|I2A&~*LUbcsi0edm4JHzbj*2oRUu4&1|6%j6 z`QjTQo@hV59rKnI$_j-)g};TrL=I^;R3eK-d!N-))US~Ft3Rsew40x*8rcw4 zwX_9uk(6SUn6si<(M!=w+9XRP&yc5;&BRt>tFlQsLs6rs76tLOJS$$B=!a3_oq`fU z58)WH0>y|j^H__?7QXy$d?#KWKcAn^bKp7f?fDM;Jf1Tz7aeytbF#Q4J|dkjS|+v- z9~R5-P&`!5lemcwOWY)PWJhG?vLjeu?19WoW+F3{2FpyOf2IGV^JRySOl61Axqetb zG~bhp@TK??q{Wyk=7!xv=8CrOVs}LgMSsO9qQAV+mNk+l$y72~c+;IG&rB0d=9+9Z>1wvoyv=-{*%Py;XzP%Lxy51&Q@$Jj5|SIgPrHiw#e(4i z5A<|BEgo8W^7`-!d3`M}TVBSG86|%%e#CMTlMm%NYBW* zBC;829@(slQEgBQ(HyPXpxUU4QH#~Pbz+@FyHBgrTA@*o<~>MS^5cW z%^~@B`E>aVWZ&d76nhoP@*lVZxke=*Bh*={WR*F}Sq_?9O|BwR{)!k(+(W+>MBFzT zF<6tS>420$E?1eVwre_yhl+>sgT*5x5#m=Oy~s*rEy@>ribsm_MS5X^Fu^zqR`XeY zuyB`UgJrN~18Nxm8BT`dTD%a2M1!1?Ps9tAMd&(X9*aYHY%4LI z@KSbE+FB%9F1JWD8)@RsixXrBGK8f?G_gNEO-%G2vm6t1wIC#{0(m#*Y;25NsEi3bym31SW!0B32w{ z7KY--S4B5@k}^Q~m9!?}iFoB#g)`nN-!0#5E-`sv-eCS3W#8_?9s(UdMd%{PLed~p z^OB^E(zlY+lCu&*I!gKm*(k{wWOBREY2YFC9kWz$?N2G^?dbbb&%?nYO=}~jlQHSkwIhhvto{%V4 z5h6lJq!a06FLXsZA;Lx?y}^cKudxQv7O@plfmknHD`}8M$xh3Zgr3kTHxYS6E;*RU zCC(65#90!^VdOC4JW+^h1b@X8`4z))|EB+H^wobg)6KDXGWOxgrVlzF{?ZKKFNKX!#P;I9<=#+AlqB(*H1YqC z9chwSEKQcH%GIPSxvG>UWr?NYUHwCCr?yMmsm=!GsM+dFZHrb>tEgrv$yya4`jc5& zW#uts6?K+;NcmLhQEm@yv$jcpSHB4Us@&7wP&3s`C zN;+UlM3vES&CEW^mjOWy~8=F_Pf>}R;u~P91lJ= zA6O}F7hoB<+`ZmuM^Eu%`~;7|qtIQHiptP^{0Kh;N9jlOxAX?aWt4(a zjlcDy#wW&A@S1TIeXcjsR$B+`80(;Q(5?$UHB<2rD+xGY9W?(kdz*dnP&@>c;8JuO z-8TD~{qZe)8xO)I_%`%|@f~mw9*k}~o1IP8VY|M)(2lbXyFoVuB!Wq9qTW+Gp?A}7 z>&YmjF4KO|yBlLr7zkMbbEXy4;!T9+mc!zOIM+m`V$L*W=yR}+7hna;C>xQ8fDB^= zWjmwnPF4wc%id}4w)Z#@XN2oH$E{*(lr`EawzoRS-ezyL#sD|1vEUdh9k_+hnF(f+ zdCcr!97Z3YB6J3KK&QZw6ny?!@uBmLYgoXT|ghhF)pHyQ36UZn(E&fO_e=L zp;Cz27`t$SzQTx8Z$+9%8iLIu^}x7DlSosrPNZ4n?MU@V1E86=$UEdMcVpbq&Qxcb zeaflr#JEr0O75FrC79I>hGGwex z8mkP`SY?OJAMrta&};#=G+S8ptb8lZ{=&+)N7x+r1^BCd$-d+?gd7P9kdn31nPpS< zd1sbW->U62bQ-yDxs9BgZbRp$GtZskHnsnD8hb6=k#0@5R=K;}o!~BaJJcHP2%x&V z!yVzh!BXidT6EEU9HrR^~qW{EgAZ5S~vBG zK0zO^m7rX-5Ibn0xzOHaced`KWe6L7BiqO}s{mD<(asnrVi(%U_8!PW=MAR_CTE;< z@QhRB4)N-^1Ko}8V0Sb8CMpV@gieZ2@yR{KnM#iQLVhmyl%F#-nHo$DZVG#g?MOc6 zCi4#O@gCcOO%js$?ff>#ZTwcyV}~*CG3}W5=&kHa_7&SdDi`DyaRDyK*W>GPd0bw3 zF5=@kf^Wh%=9_T&;4*F*-w2Wdma#)QN=s3T)FQ2)TBJ`mZ1s$KR$MF{llx0`rQ=ep zJU|{OostL2pDST`Aebr-kWMHetD-g6T!#yAfw{t5Y1Y6S?9c4p)^qEb!K2F74C{rJ zZOyg5wq9DZtQY79RNYvDsu_!oC5EU^G(#DK9Q8ivYrp9ZZsSWh6v`4^0Tp#^_ zH{&g6lYxwt`V>7wE7N*{WqO7_ReLA}q@WZK`?7V|Lu?%;k3Gb7=ei50#DP)d3-Wno zNEG?J+!VMVH82Qnq;~0s_rzcTmj6jcP1V-RG3HyY-VzRIoYArclj+gSJT*!su zEAf@&lYC+y$;Z}W0?d52Iy0Y6qpooGxd+@st{Z!Rt<7}>x^QJ&GE9=Wu1qeI%hqP{ z#13KyVH;=)hJXbmY-F<7O{~j0tjm4KZe}YmGuZ0vUbc|y#Q5RW{d5}RW9CBdqlYj) zwklhVnafsV3&EXiW%>m$kbc2rvlW?a`USg#-Oj!V>|kcWY&*M+t-x;MrwSGLjHqH4 z@qt(->=yP2ZwiIN9@y^8-4M12wp>%LCC!oJS*O}y}sT+`A3~7e=Eye zTPBl!6eVyZFf?$4EFjktYl#}<59CJjN2(!Ni~NzONvsEJkX6ZQ#A>n{xs~{yj3c*! zvBXB=M>39xA!-BP0=2^%iQ1t9E}I90xLEQhawF9k zI7l@nW0_&B1PF9T`a1nDb&5Jo-vxRwlju_Vu6VMXQ{o9>ffx(jad_8{izmQ3@+x^H zxJoAE_RrkE@0;~ubEe3Js}5Jz}4ms6NiaI;Cn(9u9VLrPm!mn zPr&QMKC(5jpC}|+gcHL@!-@W@{%bzQ7xZ`aFNS`xze~Ap=zl`PL)Rb~AetjWUxdC0 zcMe?-T?=<6ekR%x?ZPLC_n`iV_=PwbB16N1%Y*qLGW;_UJwluCQKB{UZNtZiHbmP{ zdMG`(Hn=Wa6dD~W4*e6l0elh7a983W*_LPv`7U`Pn)D$0B{+!unfilD0Dq?kz?Jknj3=|9gobLkCa`g;2>`hN}PhWZ2>26KargY|;*g7x72yb_ogm=x+4d=Xp_ zj1SI-d3_+hJR5{Q4-E=k3I#*qke}R6ouFDqA-7TQkUPoxDPR0tq9jTjD6Nnv`68kag_mLnmS#)M z95crf%pANJTiC&N6zNT=qEtnG3iMEGDs$Bu${aCExFg&ZlFGAGxNC3*Wh~H&_0dL- zu}~kakI}~%j6O!YsSnftM<1>aNBMY-KGGnKkTD0@C?8qK#_Mr)pg>)xu2m&vlq#zV zxKnO@tWsIuGZKQS5 zdP&q;Y42$7O6%pe$|U(8`DQuo%?OZd1b`r{S^{uxgY?1rDnRAzgm~3<6&p zGhjXg=i>_a4d6|*6u|=~70?nur>8SE^BuDxn$%Eg2y`Zw#o=e`M19Xt=N8Tp;ll_p*GXZXhSvP8=tW6IxLHsQXlZ`1Zcfo)U_LB5^QeeLkNLbDs;%fTsL1 zKFlxWzY)#}=Y>Z65}`5ljfF;kUAm3Ip7@XdQkO9v65WSQl6u^!vlUBL4yZ zIDaGGDBmjISl=ms$algw($~N@*T?x@1_H!XVj4*knM4-B5YxhQ!ggqVcs9X=XNT?Z zEa)=Avj__InoJM`8J-!=Ca7?BcqYA_-obo8@1Sddwdk7EH`F)LBxjP@Bn8YQDR|{+ zWQYthA2J^>AJV&+%fN@i2vHVB@Rx*}2n0_D2ZePaL>XE6Xv+QRHZHH06UmN0G0{SJYSJE8+o-={4cXp-seWs(@}p6;KtZ^;7|2Qg2cl z=qA(#s$#hn$vhAf3#ckURi-Q5h)IsZX0TJ4JM0v83TMMgBNB`RoWLNdOxz`PmOhc5 zNRQ=tkWZxU{4M^D^ib+5C5wg9V=0-xCC`=~DhHJs@@%DsQcbB2><4Qoht(cxH?>Sn zR=dell?uuZrGnZ)?ErO`vOCBHS&$D73i5%Cq5ME{kPdwBI}e|(^S<-`R{oZLGPE(g zFt9f;FlYtMpcU8~w1ZACJ?O$2jsx7_<12khCTm+`rm*;@1l3pG2m|I zBjyHk9Y|nqa2ltw>6A&%p-jr8>ryMBpGS%y4>N;W1|rIU&)#ebk#oq|Bnt}g)48O` zUlzvmSA=ogw|pD^?{eC3>j9Y^!(3;_a7sDrqn(IFByJRcl1iim;A8Pe@kgmWOnwkG z=g=EQc2F#_v`!gSXjUQ4r|>$#-I8@qk|r=*Hc<3zbP$X^|MYLt`67esM=zU z(kL}eqxhln26=<{w!jK3p9Z-`SS#?tI>@!mwEu&CNI&35@niVWg32|6HP|Y4HP@7D z#!O@;3LAv)#P@~ov~`+hBfC`^_g4I_3W6#Zh2)PyZx#1Ea{ z+wbiI4|sV%F4RR{UL@#UhuL*62S|ZwDv;t1a6LB_G6Hx`f2SWDuOC#_UgyA#p2NA4 zD`OsKTfbVr*{$t$c54%E7|h4k0GJH029|gI%`&UM`;S}fE_1KCN!D4buXWaCoNd;5 zySd#0awV|J=w+1XXN;akGJ1p_gO6|;FchbuyQmC3#3PKqjgC>Y)p|p1m9|=2Q;w>w zu@?Y!?PvB=r?WW_xME(mlFYx&KY@PcpH`vuvGuX}r(Mh0;%sz7&X3MU;3ub>)6ME+ z9kLF?GX_~*%}Oi|r-$bNjiw$n5|wa{uydFVX9u zozzb1y|fehZDX{4D~d5%YoPt2)rUN){h}vB9@XOQ1p8yFSovHoQU<6Y<#Ux%No9yJ zLjOlE*1N*l!=YmBMm9B_d((h6gYbJ09B7e^l&R!tQvrfMp9o-@k2 zZH>3a+dJ(}c1P=$0}p$bbF7@>aNMnSqIJ{mU?)1moZ${~ZO3p7E8QAver?efYcUpM z&V!`QMDrM!U?$=VR&(>1)!b@f>_+X%Ic@Ai?;HD!czuno>#KDQy4AoM{abVaoi`4l z_UJr%$2@HQVjeXU&>7qjcfuF!iS`80w68$DVqdlzTaBF7HnIwA1QP?gb+&Ggvvqu? zoJ8{@eAfKH`W}w{o%Ovp+G`7@d#Am1z&N15TMOM-Z;f{fIPHGzsnP#hy0hGq?kTX9 z`;ObvZQ)LHkGoUdB6p_S8hpn+!Z0CCY9X$Wnv3~TbE$UQKI^ZvRA2!+oSi; zNpun?>iI@pW4Eqo<8@hAK-nln?Tk2mrLJldbQP)w-Q-AJpmC&0Bod(_ly}=Z>>Yy3 zJtlg|M+lIN5Z-dHxi`!k?v+HC$Q!VKB=UxP+=FGaonoi{KLeb<+!&y?Tif}{`OBH+ zeC0j?o_h7YfnI&5iZjkR=ZtsKoebxaThpoOZg+>f!<0>xy~3h^u;=@=jnMy4g4-Th~LBS;#Q~-x5DqBCa4)|3N&%kf&FeQFxE|X z>N>H`bV$Gs*aK|89l%X+Q`{77M{(d*R2RjfSYtKR?NC?2q)rrLrA+{XZ36GaO{~gR z6)V@O3K<*4+-WU`y4)75JlJcPea=p^X)w(mVxP6oIq^t4Da<|&*wFEUwcEnAwXkq5YQ0( z**ofe1EhIF-CE8c&L8kz|KUt?ce}gXk?vFXnY+V%<~8-2!84miaSuQr1itrvfX{5y z44^|K-aGGo2Tb-hKu+{FM3hLCC|(t>GT6=Q0pBLoysGYP=&E_u++OZl_m0=otKr^u zOWZr|Js{Qn9=PYlxEtLvua3LP{Rz15{^*v0Ke_|F-rhWKZn;mqi(UrY04T;gMl0~7 zz8Uhg(OTcCS24~QXYf`0U-Vzx%TBiL17+4!Ynr*j%(r{lJ?#BB2G_wcXdTq=aUHZC z6`%sGOBD5hR-)b2Cu(=JuG$@ayusrNEAv%SaeVt27hq3dD^FrQ@ILCcV7 z%rdeq-TcN}3RJ?Y@oMu;$Vzw>UW=>ZDtN6~$*c@n#jI>DwMwnY)+BecSLj^@=XrgB z`HD};m0!z!m4Ffuv!rTbws2p#Cv*}@#hJoAF#F>R9#u5cm#LKemb6q_EG>}&a*=#mJ_W0TppvSj>YcQMdMEvwF-%W_e2#*~XcRzMD1?G0 zg#}o7&Bg-Nhq_CTr}~hW$lrjDz$LOHah6VJIEH2zW-)c2x<{u|z38!22}3Y6J&Ni@ z^`veQiDV*iido6XjKs+FBya*F(Gy_r@$>|)6IaTWa7jRkuwSSuR2OOkwS*%=O`)dv zT*?u9i=T;~2}i_U;w$kb*i*`77BV?Z4qKDm7lrH0?xWM_VNv**Tp2%8sLnm)XTdAf z;Aio(#6)3>cvtKoCWs|qqG0nAxc{)5gw5rc!e%i+FzF}dJZ3VP>GTsOi}irbtjkP? zx`o|LU7;@1L#WGCN9rJ#ihk1xCaZ?7Afw_ zHb}mAX7_yOcb@0{Uzy8HW=Lidp+3KX|25XqHpv6q#S!9geha@vXzX;cAAtMTt+<1W^|*7=Icc{wPnb2#nr025wa`Xr&F>ak3ax}!;#4t1%#f1g zbm@rPS?i*`)4D>ZYhBc2wVZlFnWxN?^VAAzidsSLBzIP3DYMnm(6i)RDN!ma9hMTs zDN>^R1;~}ZkPb=*VDCY3f;d5F%I_4Kg2%85`EA0dLKA)mzmt8=jb)DWQEnVljXA-b z0X5k#**ENegl0l>bzfW&t+l#ed#1I9xlene{oAZ=tT)yf>-C97Xlyh#nl-5WbP;L^ zwS@Q=v5YE6{);R?tR$B}uORagWr;HQZpdC(B~wvy5t*ONM}<^KF2I`*#qph72AINS zu|1Usn+u&8!@grKFz4B>Og7Vi-pzah8Zw{6R}I*nY%k_2+ndQ@d$E0(G`Mv) zwi|Pi?ap>neo=3NTk1`1fO<{6uHMi^U4Sgp2I-=7OCBl@lm1Y)C=!sl^_h!BjyFukxC&`$Sq7d(V6Ta)U?cV#dx9UvTj59X zHrNZi4N(ctB2tL*_(5U~S%g>}w}xB_&&X1EHkOi0>5B9LdOzeKwT0S5m5xiIHdCeP zLmbW#9Kn7KO+r(E<|wv5+mE@)DV)L%1(2s(dmxpHCLj z`D5TTUx7a@E|MyV^Q3a(+!*1#@Gcf{HlM^NadY@1avz10`^deOWy*53x>}v>$syb< z4q@}y9?WI72it=~_`_5K>MYfeJO+J^YDk@92GXC?t?19Gv-EAIAAK9P?$Ec%T3`>k z7kVFAgJ=qlV~emwIF40`tBO28?nm07Ip`R)3|cmF2WGj*UBm(=#6~y-gOothklIKp zQU~c2@gtu{f`}LKk-Nwi*q4q>LM9?xkxj^EWIW_9vYBW_oF+~Yr^yD8M&wDdA%Lbk zP?xBSbbIO|%uk^|r5ckb@qT!J{7<3y8&O%%jp-a@1kxI5gM5$tiu{0dgw%vbUJKNOty+i-Uyle< z7)d~?g2G7aNNVH&QA}ZRFEPW<-rB5f#Znav}=!>PR-4FLEJrJ~BCS0dIk~z#bqQ z;l6E%`y+A%dyl=tK45dOxsVjtnuA}!)A25NIyMu_#d7gZAXD~*-HlF$oSCRP?J zgOx$EAw$t@bQri0X&$*Axe>X6mVm7i=m_+CbU0ig8_$MU##Jl@y^4-Pui(9K9PbUT z!YT*P!RBL?u?5f-v3W5#0zIFsLVZLZqmR&8^bw{7(*j;8Zp4fj@YwXo%*YJT4EZx+ zN1DUEx7DxJe(KlCMU7Fv);MjM#+k#+VHRc4<}l-_HPzOwserL)doc*?MRJ0?PdlLP z*NQ=xh*4*#)5Ry^W6(s{3bqMb<$`h{d9PeZ8ZSPU#!2I)AI-TYZxu4q)a2keXR^i+lhgKSMYKKoef^>SK!0FTCTR>bNz1o9GZT8b<=ctY zPjH=|tiW2XSJPH%E3}`rpVgttU+PeGsHSU%ro&tvUzzInnyFvZYnh`g!5pPu(9c_v zHPaHUIhJh6#y{p5)OP%UWy~ zB-;|V=pM{?W&$%_;J^xY9aoF1&0XRy@qM|=>}uA;-xK|)Zd7;S7h$!S%H?o%xoaSe z-N=Sq1Fk-}#fHojsw4fLnLxh-eIbLXC)88wDT6UM^#DAi2gXp3pa;+csD}(n4`2`` zLUkekB>w`P$iLVqTs1$tnXAuk2AkM|TmyD1yOqgga3+&2$V_K4(bwn;bRPN)eGXn= zn{XF*v5iD`q6gWY_>=gH=z;$m+k#KTnqpfZo3YKf56LBZ6TKk!h~D^HJQp$%e@pa5 z7oZ=b^`Kut>Y-_H<+_o#kzC>i(Us_ezaTmgm+>b=2mEo|FrpLwRJCSiKDsyLqd3+w9&VLXXf#&;))dUPI6fp6kSQ&B&a#7wT=ZEYTKNjnQ zyTW=w7uJjQg%m@)-3|(|+qFb>s+Oqjm48!OD$gM=Wl#2H7kaDg z8GZEY;10M8xsC0>3t&6ZhUjaoDOx}B7OjsiN8b|&o`+AxGw>OB5y(t@I?M!Y5Am4z z27=+!2$UeP2-X4Xf~8|!h?mFaUjX|M^d~eAZj*@Z#}gy4BT_wrM}|bIL@FUC zB1mLUWH-vjI`S>t_6RZv8H_XsOTlU6J7fr~D&`bOxQlcytE$j-M$U7rTnx_*p_p;fQcp$bwmd z{D(cmrE}@*Y4#LbnLWv#U{5kD7!%?!D;XQIlC4bkA)k;>seh<`)Ynu$Mxsa4qv(;4 zQPe>4CH0;fNDZLAA)k}asa)zUl?%tmF$SYE8YI>#qq4`iFW7Qyd1g6#giT?~ll{s5 z^d!cnC({$@N%SN<6|aMD#%|!7@l8Zwd=p3|XHYsdm(EYkBQ^FB`#HakH|bxPiu5X` zLJTzzzU|L|*rY=gC+CnZ=|Nm#3BCoS;aiA>#C&1_X%Iz;M9OB4#2sZnXO6JX*tUGg zjpYMAz#HHVus@*dy%dcd}ujE(CROnX1 z197bI05pa?5*`Xogh$eDxs5nZcnoUrxpOeYt0}{wPxtAU_IIvZG(MP6XQsf_>mY# zX!ufm3Ce*s=sI*gMnemLhg*q}gOTqe!y+7#4exx|xZz-Aq-KOdE=1_K+Q?aC8FCIe z7omuP_y%|`Hjq;&k(@%zCi3Cy@%89ez=d~7U!i+ZH*y;FP!GEf2IHyNbvzBbjwD* z7HNyzM6#tV=5;g2yat+pSl=+OTV3KFsX1y*wTAYMnxpmC258@C-$-e~Kw%(XgTEpS zfYkuu8=;>lNVUYD`MUf~{-*FPU!7aQiQICqOz0zO;yQ7?{)=wthBjQiuQpcyR`2U; zjOzLtZIt>@8)cjVCm|mh)uB(D?Ts_WpJre4t(j}~GXF7qo4M8qYos;OrmS4+A4sl) z+hZNv8RlRy_82GE9sx$$Bg{8&?htFJjX)1EUzo4VSJqIoJIt46SM!B&)wlw)tNep> zKkgIhZzWWs|C3J%)n>{Lr5H$*Gvq1iE48)yrBTPIqi^^xqqb4U>|{PMpIC#UC8MRH zC7?@2z3{JSB#Op);eqg86c6u(<-+b^xgZy2dB2Ol%m3Zq705961WKR=?c&-xf<48a z3?{j~-D_?)_mWr3z3ioey6#o4j+g58u*cay+LS%cA)FEL*a>GO80ApmZ_ThFW>G4?=vfb|M`p#92hX|{+lvdrfCPx>-_ zIgqvQVjbgUdNaKlUMX*;zsj5C{l}Xb%mvq-9?l=mSI$@V6X>2!Px~3{$#JeZot+$a zx7#Qd=Zcr%{_YiZ_qk2HlI}jQB$(lq^tbq1{nq{_zimJUq`%qU6f}j2cxAn0w}smh z9Cwd-<=ta$Yv-Q*+J5Eq^>J;vUPZ60SJsvSR%6@&?rrZ=Z;O}ae(m;izjpG}UTRO} zyxL2{HA-8gEi&`qqu-C_2Xmk~(D+-=(vw}vv7Ah28kh>-04WIROmPWEbEeoc?3uO> znPt!P&w$hZS^rcJ^-uYyy&b*-alK}sskg&x?ltp0;QGh>{{C_Qn0+b6N&_dYQ`RTu zesiDU>OUH;;h2ZbD#jY~2(+y|(|^!^Ff3!Gu?kq`LHnfL&^l^2v`@qxw`y5OtXfV( z`>b==tpZj%N8M`fIw#9%>>P29*e&fAkW0=X=P;z9Q{S!RR`l+8x4{VSuAl1N1tYyX z?n+S6yXg(JPr>z1IrZ(+usUO(fvZD@bwU<0FdP*A9DWib)JgDK<_3L_n`;YxOkSAb)|J+{?)b?L{ z6GJ1YA2tfj;A216NsF&K{8F>~_mJd(@~JRen&$ zNUP+!${_igTvM*0YU&zguzXD!9HVM-E%}D>ovLeT#%yzwnP4VpH?-@J8~Qie4P&-J z8nX<-AoQ=bRCR5f4%b+%Fw*5HcM+`ah1+BD}>R#wa zS_`d(x=Wd)7Evb2&*f*zM5~T<90JUpc4PRuHnz`b&9n#FL&yVtxLM9jHj|Cz<{p^4 z!7fKh7T?chfuU9r6o#9lb0+!OQXv`y>3}ezt$v9|cDE3I0ewzdy_`0LH{6 zddIzE&?mf;kZzFUexhF#&Mq1h^)ClSgT$Z+D60LT57Gx3tUkz)jiu&JbB9?x##ms? zH7NMnQg*7f->Pcux9i$jb{ceD*xqaHfmF6@*){B%cFmw{P}VQwodf5+-rhNuQ z^c{pcvcrMHie+@5&?ZWn90(84@a-anrf{sCluvqXcEDkz_C1Zl;!Lwj} z@HAK#Yzle>y@OuiAK~`!M))DjgWL?qhvUKtVJpbQut0DZEDH;U1%tcc*f0p2hnK^R z;l`*D)xv+wx@Ibly zB~SUFe2_Ba;?h*P1RN`&&QfP-rL-h^BzzPd!4_wCvOCxWW(G5x`x|`9HRA4Y{dktG z%ce1#p{uiJ*lKJwW;OJ=xawRt=xnYBn+=~FYB1~A^XvtFA&>-g7C7c&72o?B6LdCfA!Wp5wkRqf=j9g3lNvkjS1=X}F zT2*zq{w}V&R!OU*chSy(O4@1djJian^v?Q!z(2-#{XcefP!0Z<>@#LsmCgKS)Y`4* z>3IfXt}<6b0yuACjOiJZjLBwTOpZmW z2%=81v&JpptZ~Z5Q`X+>lyRrIAKX0Xd~Osn%~|c{vx-|A?Fx2^wb3f(l()CVRj{`i zqfO0J;}-GlK|B5pm&G07%5q2ej@%KkgfLZ@#=jA!i6zD3;&G{)SX!9Qe-P#fbHsAo z32==6l79#J63#EnC3DBbGGbXs88HbQ6ORisg<1SNv5YVaW@r9Acqh!^-z(>pilBnL zP^l=-m*+tcB}J*Aq{#D?GfIknKtHIQ0_8MJ?XIEPTs2S4)8=T1o}|qH>Od90Fk1XlVXqm_OL`Y+?Q@tN@_%)eYD#>s<>hj+Q}%zoy3@Xi_&i#5h(Z4OMfX?ub- z!5VLkw?%jtGM?^4ccQLBu2I*iR*);yCF(M08cz$VIUH$0wIDB$*;FfbF_+B33!3?k ze#m?Wt3@mq1Ka7~Ih{^jhxr6Nr5{6gVyU>fRAXikGng5~Qp{lb0sRp2fNoEIMxKM5 zCC}o26K#n$kha7Hz8T*6c52X1dhV9cod$Kqf%$cd+FW(yk&6~V{xWGJDV%c&SGamaAA^IM3^K@ zhD;Q6Q(En!bs7F zd*I8N@^tBqJVTzY99NEkB;K=(j0B^wQCOd8prdq9{zC2`P7t05&xEI-IlqnH!EXmq zemmQaZO5Eo+p^DLo{X!;zF^x!p0h8wam;Cf3A6=5(MlFLM+wVh0poDpeQ$uFUs%brt(EV0-wNT@P+vVrheR2`gf*2hqAr7+1#AiF9w); zOd9g1kS8vbL0(FS00XalBq_5BoVSWOuOY|kCbFAr4r~}k~syg%mI8vXkPwl6(=?1Vm3(nAI znGQ@x<{8t0szg;JD}im~b~>Bs1YR zT4Kv+Md+|Y%>R3D>+^iy_jgY2C67G0d6Li>bR3;7jOO3uyYfYRSMCVZl>LS~#x;%L z-vV#)e{jdSV{m#KT;~(GOkp^G6_&4^5S}t7siUB z)JQrlodJ#HA<`NCCZEW6=ilQ_LZ|q@`M>xiWtp-RVCl3xSRSm<5%OShwNww}N~fe> zq__xiz1mo90?z3&khD>{EcXG)&@*wlR9mVg)q#1;Xl68pni=Pf=JFGeEccdn?6b(gO1{ncqIKM{T9B4l28v+j<|_ph!U_Dd8h|b3=@!7sD|Vf@+wi2 zXid}r4z!QB3B6D3B|ZW3paHlL{T7Bf)S4_NuT$}4 zF%?g3LaC@9xQ$ZDxgeh`pw?3xsP*Ju=mS&(ZAXvM4wO#(h^nI+Y+6ZXi4-YUL#sSRS6m>gbdLHNAOTAVS*+^Q`8F0h{{1HaBJ!^7)M>g@zh1? z0yzNXl0I~T8cSV9Kamdlne<0cPSjZP2l5c*kcZGG;0&aq4xl~s3DJ|7hTcG3$jW3a zx=6;7708O@ajFtkf(PM2)N`00U;+;&uSLx!uTf24&Vv8lS!6wO7AiyqstN1FN0FL6z^c%1Hh4KzlZrY0q#JJzp<0KGF*!tP56abB}e!YG++FcbfqS zSnc$7dRx6ve;sC9y;$$07aLRbVtbzNnLW>*%Oo+~nI0gCxx)5huJH4?AyJR{nfwfX zreF!%1V`8+*uplkg)~g&=$rH{W*~G+)*_^_a;lsrD@rSAyjURSi~0Nlej)erU;IKI z@t+Ch`OhMleD)^Wm+i|WGkussridyH} zNgqiQWlNeU772UBPGXVRiS5r6vi;fqwA z>O}rSE+hY;I#KCVh7uojRoer;fgEj*IuWJ~?Si>mPtZGSyYv#hvpPY!3SH4`b%M5C z+pc%e45dIR1Z|WerBF^&TK}g&DbQSXvN}nfs7~S@a1Zzy+ym(Y@r=AiCZvJVOXWAE zff5&WCUTN_S&%o$o0Jwxb2&rKP}<3+G(nmm7DyB1bSOhMBJ{h)r{*EEqFKSLXnd+2 z(i1^9{l1=PRyL~`3yg)vLbI~|z*uN?u@cPv)*IIEP*?Myb=~TUo|6d?xE!?~$57vs z8_B2SGx9n0Bh`cY0qQ|Mqi@lFGK1(p=@c*u_Gmf<$3|7ADH`LYG^Uc^8JW~!D3d1X zf9SFFZF)Sw%y7H{*T5@i4ot?&aW!ZK&EVzqM4F`;`Vo^tB~yJsU#dTq1NEbFK{j56 zYvLMkb&NWOYtv=)G>62_#LX5g!p7iSfh)q8psL5siq7@Cw_Ar~oPwBZ)4=t3+LR z6%Iw!BNCuaaHkg0j;M)tp(ki))GkyT4J8hvy2MD7f?kE^rGT|WE|fxyhIta^o5WjC z4zY$Y|Do!Q$lF8&=ybU+Q z&8V}KNu@w0xsNi)WRy*+5zKsMJ}c8PbPUdbxrAN{b15S+BE1Br#C*b6;lG0_b8Gl2 z+^Q&rkA-U;7@W?|<206G=fT$Hc)6vN2H;CRObw{w7;&uhxwHscEPXCl7oWghBG(ij zNb{uy(n8_5m?S0%$HZhIS4`A~VRJc4>E?HH{1tA9H_@L$HgM?qFy}K2 zJ)fPzPGO!gPuVFPL%(1qGLx8z+yXujwUrO@VQvxlOc|&QlwXl^BU4%_*Zr6BLg^O) z&zrz}1fH@VGf!Zb!5mLN6HbZ!#b@FGu`ehS`|_LlRN*I~A(O(40wbAw>{#X=obJLY zCF%)tn;pfj1S{B8^lCbmv6#gWpjR_KI4@zAvKF&M_)DB7x#Bc&s^myJC5Jx>;)HHO zB7aOs6en}3TpAz8ZQ)|L7u8#N7)#(lNdYJ3s&U(5k zT?KzjSE1L^Rk%v*THvs2xr%UJ$9};E*mXh=A&JlBPe4tiuoRNMl|tf7DTLdDz4$xa zp2{ajki$ujJPLCdnN7uz*>KJ#v$gK(59%RsSdCRPVP>g^&ECdwv$t6a^(J>x0vH6H zq6XtQ>J&YXwrG={3ws`3N9*()yph()o?s88kTPn4F!~rxLDSGNG&R~(W)Wl3%b11q za=JW#iFe_hFn8j3yn`G9vdE#)9fZ#-jnvRFm^#^)><9Xj1EBB8?P+-B}; zZZltxUCtWJB31{>;H;~TYOA*Lk-8h^c-2zIDdX*~zARt1??{BvQkV2pkY>c|sYZN+ zHbNV&jnE}!o3a(C@)$)0=^z8{>549olgGkN7qS(#vb}Iuo<}~A`In7t(E3}9C3M1?%&U8QLOb65a zlbt92C;mwh&d1IaKX#wEWq}XfGIzQ=1Lh3>RA++o0*rT_+e7UkQ6Jim>{9!Y^D#`I z@6-1~-x&{$2T+o^AbPrQeq!8@(2wagji=@kX(av4}Xz&0U1x7;m{3(IMfy_XcKxVLJaB;8(?CQZ9 z!P4Nv;8K_mg7&HXMSO>g&2pl$Jyh2x2)s7?!H9ddjZD%4EUghpm=AmoX++U5N99p zZM7TPji82hwwvW1akBz(fhK{bZcdF9(A(=4dF4_Zg#LZI0J-& zRv^vW?2Y%vd0)dE@3r<6uWk4jucOz=v!E$Z2d_O`>t2WO>tJs9XQ)L)=ys@GXgydL z+7P@EED6pEdeE%UU*RU9ze9h8;)8#LT884`aq*!wp|#MO;H}`zU`c3W=wWCB%#GnT zp;9<^2rmKW!|kKHV<6XBN)76PO+nq*XT+E#W>>STvESGSyNg+@ZUwTsMcu5$Ypt|aYMRy>uF`;L z_@Z{0?aX{NL)D>lHACy5Zq?dq*R>+hR^6d>)H)b@{ckuYou8eboHou+)?{mvSpsvi zPq$`R)6KulcfCJjSnrm19J=MDcwfed-apJ`Sw*vHsTnY=3Jf)8EG5I$SqgFH{sNbmRQ{{onid2gx86 zSRSOnkid#SWoS9HB6ub^G&n3c1SWR3yE_6EVP?47{f+&N;F%4bZ~ct|RRdMrhVJfA zai};P7j6=s9i9bdh8x3d9Bv%C6d>_)++A_>osP{LriG)r0DK%e+i)xi`>TuH|aE`atc3 zRtHW;wQ5krF}pr5f^e=gJ%eiUj6HF*iJJo6u#o5-_56>vbPEL7uH zMhQGGO%+Szz4EuhL3m3w;gFajTotYf9i_;R}|GZ$Jm~4p&d3h8ec-JvC(YgzUI$zTUaA}l)V$| zuy_5Zyj=k*=UW8NO1I0|>DGs4p7q>%VSQ-5v|jiYIrYH-=T)b^y+t3XZ;3>$HqG23uB$x0QNe6UH5CZrdtE5wagV@rSZ~SVUM;)`)>G(?U(jwzi2;qW`jA-Y+=2y0Vs4Yx)=Tv-=fch z3v^y&GpCs|%xU&5rVDeLK1-j2$K=uHm@e`>rP6;grFQZpsqkO&WT}JnyZo`#PHG?Z zyVPEuCKXFJqy%|};wk$TPo6GMk4)(X?EUIHQTNn$)oxLV%0cCTUOTFeo@)#+`Ww%o z{?Z<4m)uF(Ed>Bfak}Kno#hg!v-FL$$Ib&C?L6N;yDj+DDRPpWp3WcsV&4H@b>9KI zz1_ig&{_`XYSwZKSxYU#IA@$S8b`ljV9XJ4kFrQ>xjDo*Ymw#fmA+DYuCLHn8jV0hajrN|DldK_E)X8^Ex6r$ z3%)u33;#2Jif?Zarz7@BZZ^g&+zrt+ERgJ)h=*@H;x(+@V z2_Iy?jw;7~&DG-e@ol);(fvC66}yrBlKqkiGhzBGn5&sJ)Gg{Jev`ThW>Uq}b!sZ^ zjK9a7qB|+~q?YOqw>&)J$Z<)rR3DbyaOlLCHKpIq) zi{mn(23#DwovA}kAjgxH$?;4*u#2gW`%#anCsbJk?t@R`WZZ}P9F$UzVAdtikY}hl z)B@^0RfDR|CvaK(8z3LL!N1Gp^4<6na1(-)$O~imB4Lauh(dI3jQlPEUdp}{MTJpl zh>?fLL-{1WC*PAh&G+JaO7*3B(n;wj=%m_2Jr6Euqtrb0oSFyUu&9tCm&s3{GU=$4 zE%)S-xE@dm9)a^QjYpt$APKsTiiv^5`@{g4^NB%l+D9zF1@O3ns6uRDlghv*o`Ox3 zMztsZqBc{Tu}p0yZ-Nr)b*K&8YfZHweVs~8VswN2A1Wc^$Oh0{R1*ybHBe3B0ZK<1aLz#6Q7O#(Xd8MT zZG~MGRYTQ@JE$6QkGKb?dqgJjBcT)Ji3$WFSb`&1@_pcthluIKjHsE=bmA(JL8KGg zh;(EUSCN6*{bP9Q1%a|2Xl!{VlFb5xWQ~8R|>O;ErgQTB5nv*#?R#*b3>&RSpuojXemX! zB8`?6NR&p(k~B&@BlrYMa0I{L=jXyVjef!5XY;eU$6}t?Ld=tfiRZ;UVT;&YY#|Mm zhRUooj2XZTga$BwFxQ!4Fp&9x8N}RRie*(ABP+5hZWq z^zSfxGx_Wt<_0^M9V|_fZE2D;QP?MT2A#k z*iY?*(+)V##P=aTbC!9BIR~FlQ^6hbZ*nR0H`Ouv)9~#eLusYNE7#PC$~EPhW@$V1 zPTDSQN7PProN`GWr;d{bOM_)fM$#Y|$%N8CUMqhAA?T|Jr8&$^>R9EHa`9ireB)DS zzIo7$1(nTMI3F+%SY52Huq&crXgAsg?M8dhx8NoE1`UVvH{b>O4(vlIWCGet5^&y& zMxwn`ck(Iu1Z*ImpciDP2)qba0z)j^G+p zGIfNG{Ca|;C(`%n2hc}g0(6hQkJsSU6sG!6@Q2(2ZKW8BAv0k1r)Zcot`F8jweV`F zCay&tqsy3wOer&lendZ}AH$wS&ji!)E1)iw1G5gIh*PKuBBOppnJAMK(P8pEGLhU4 z^F2~Phe#HUk2(a6BR7+8g14ZqBqk|1y&Xlv)!W3E#2M&IVgivE)dcEBc*LtjeNYeb zi1tKnq9ZYs=tR^aM8XBN;Z^G}u>`$>>cU6h74!=6m?(oD5v8a$kwrWpRuIFXQA7$c zl2}cQLSxW=w4bEVXxO7s3N)I?A&wKr;VolP12hgDKx1(_$bg#TZPXab2VI25QorKH zIF(W<4R66sK{MQx`i+^-d6a&5K`ewKC3GnXO*+zB2qgg#q&KA(K|t(4AfQwQ0%8aq6{!JKf^-sE3Iq@W;@|(f z(|kX_-+ME6mrHhM-n?bEu@#uF*oqJDB4de@os%YpvMN<$O8%4f|#>u&8tfHcE5+||YG>MZh%U3{` z&;XW zKu7NzuY=d#edu*?AH(Ra7@fRr|KdLLx`LPbL7(up;=cHI`zCll+}HikT>`x1R*gm{ z+u7@6yHz1(<6L|Z55NQL+x9K@zPr#}0IJ|tboTs5Yxus!@c9xa$w_p600HjjZamJz zc}_Q{JH!!g9rsJOj&lNHUFSH&hHgXWoY&9m3y>b^+;HA?Zn%kV8+V)A#<}XYcH6~h zYuq(@nB&a%Al~)H#W(?a&mZUy@=R~E_Y(l_+dlS2d8rUBc+K*+`mUesZ}tcKgT2Gv zA@8ue&69x<9&)$1TmQwA&3eWrvz}QWR1dcX4&p<&wSB^Moo((+_kB0|qq~#bNzMkR zwzI*#;$HUZN7exu5ji6HIT6`!=`RH(_>Djb{v3a<*UByM9(k+$CVo?hkGz#$At*{i z|4r|ym*n1ud(p+~4BFxcy)6(oLzV=r^e_6K_$$4CAPe~Iv|IWl)J&O(uBsNWP5oB2 zv{veO>bF`O?V8p`nXF7w4Unh0>Q2=`H&82iGirres=HKQd0&~Sey{EZe62_;2D)qa zwc^OJ$S;xf$ni)K#QTx^aUwViG>J6ze~z&F1TD`H^$CVxh+4ir2{az&Zfe&IR)1F? ztB=#i8e!urKs2kHF9S7zR}4v?1oM(v!&nVSAlbX+<$3vjytg#Q5-;Cd>euw+{hHoQ zf2v}F-oCMU^PsZa`GrU}p(-qS>DDu-gMMi)>6puUo-q^X>eit3=c@@J^F zGEy0Va!@V%b*qxK)!J&;w6@tb!6C!z@do@dt`2cMt`XyF(97ZFVt?^@jAuf8jN|-j zAzn>Zhk}Msm#M*Yd%7K{J$;()VD&YBGk*onnJvw8Rxj%&(90fdq8=;=l($wE|N~g6nE!8dO&UNp)bL>mFhuz1%93|X4+)F$Z?gc#MAM=0mkNC&J zJjnXt1#(oRrV#&j?msvRw#>l znamHhgREVsEqOE4j?9aq-cVbs*VR^0v?;o-P1PoAQ`B2(5^zgRRP(gS>P}9f;easu6Y-S(ZlCDafslW2(vkCa$xt;C=)iiF0?&)-gFk-Ft8^|u!KkmZVY}CED3%c92Be+97NoUQ9vXROCjC`Z%E81t`qag1mY&y zh-^%*0Z$;mB3F?OqYxhwi-`u{cZmAIVxm5=IPe3pkXRV(8%z(b36=|%3*3XeT(CS* z8^(8mJD@(n-k?6gHSk@_h~>eTqXZrYM+9pG9}!KW1RqBsngurpHwBo07El2yKm!V7 zG?7dUA@+g{&{(1Z=w0GCFgEIN-Kvts=75X6bC-|(8LtUhD=`JCI+!``M(?e#+KpLijQ660w@>L1vMA$t-#}J%TO-jieq>93@aZ zFg2zqPpRpE04k-X6Pt)lBt=Pp3`o=mluT@d*=__wbS1h&>_*VREP^6v7}EhM5DCbE zxIml0N5KBTKJa~kl)%tHS|Bx$1bQC$DR3mPGEfTsByc#!k-(@JX@Pd&&jLr`T|Wjs z3H(Ur03*qqP`%Ll&>Ilzf~Nsz$#dX{Q~;G!h+QNS!@$?#263I30a-@4N%#+OL%4Cc zLbyCoF6IZrmBI(5-t2OA1uL=wSC%Wwt^ogzD;qv04Uz^*gXDlTh<-|squ-jEn73JO=u@MeYM&kz3-mgZQ`m1@v(*+!tO?$Ug%< zjrj|wAATo_{RH2|?>GaTfzDYc2Rb@%=;jFM=?IT-S3B3EJstRU=N&KFo_q%#U3(|r zZSQ8f?fs3=rw#B2c!p=VncisM@{W3G-cjFyPVN}^5Fi=iV1J0KLFc7984%Y;aWA_Q z-0`4E?!*|HtGE*)V}YiiV(89JKtIzeMr)AlJ@=k@t${UO8?Uun;J5TjVde?+Vr%`j zemg(O`=9qezpb~?``cgPUx2w4{>T0bbQQHg&6P>$8oH(>YKh7;WvVg-dafzas9Gpb znTGP9+scP*rs^s)lo{v_x(y_1?V~{FwNq=$JOoOZROV0Sad^8pRh%m1M?GwZG4uy^ z*b!2NG(J~I6B%KYonY^?_uCEZY&#pj;Z$|1;)eD?oPc-hX)#ibWpL7$v+7#=L3Pb- zaMIVd;;mZ1UaJ$fUS%oYN z9S$7{btMbPdmtdxMXVm9TGZ)=)Dh}1oj_;P2}C1cS+HtwNEE32H;Dy6Jva&K1q&fA z46Y5P6Q{^3#7W`=F^)J%H-OI{f_i(1N(7Rqq)=|ug$BY|sFDqMEr!Zx@ayT{=--$g zbXVXvainlwNDvyvD%tmB7h)Ch74d|4O0*#oAxn%=3iGAFD&jfW9jab;APZ_$IP?V- zre;txDFn3(QA%hPg`hUQ6{z(euLNp<+5{Z%M2N#<)hau%IIsxL${&Iifq}tFfudmf zKq0Uqa44`GJQZ{}7$0~ZtQo8+N@7@e4_tz3(+uF6aQTKjsJddwf^EfWOBb z0pcO=!guEH@SVxyWC}TyJVBla)pGjdVkZZDEPfX%K}ENcTgl0CesEWN0WavTisGDh z>$-0^ry$mISG)C`-uSN5J4PQ|==6fBa0eKL@3;*-(p~GOyY=CnQ3pK5LtgX|*Z}&+ z_J5kEdz!lg{HS-tH@qY8WU>|*3%hu&m*i!@lTM=g9lC{X!|uw5cuULI+QIH>2ebul zYDroWJDHu#aqJXkBz=z=$&3i^0I<|9yfeH5H?R*xf!N62k9XjDu*0%pU)94qozJ0z zW}VNY`wM@M8{s|pdm~^3fn^2}BdDhtgq$v~fm_%RI^Z?1gL(qjnV$3orYG!>6g5Z9 zam%=6VZAqvaY<|zIzc`T^`;tAyNSj`W9WJsL2MEn44uyq=z9hS2NQLPI?(4VfVH|V zI3U;`d|j{rSPN^oZm@v5NOz_F5QmGy!<0B&I0tGVoP+gvE-(y8fz?tRtQhz(uozas z>%q~W*Wo_jjUr4Hroo*)%y;Gvafi9X_H#Ve{tJ(DPQhL33-rMSPG4Mr@8JS(Bvfbx z{IGY#%kb6%8)BXTb#k4zPTj6zWtxiB9qJA(De5X_C&N{K%shh1_6YC74b-#Hb)Suq zGM!BL{~J-es79eap_AYz>2Ci*{Qz;=AbX%QuKDs(c` z4;%Od9@hTVcZ;kQ*(UUY3}cma_D8nj??UO(IjcKLR$yb(+m*{oQ?wrO@;hh)+5q_mBnfr-wTMR<+Ime= z$7zxkMo4=^Dr_kerI zE9)MTmpBeQ-!63iG8H*R9wwcVQxJ{P5iO5EoN``y1AT?oz|0!7N=dLk!YDkS8_R!& z7RnE}XG%5Uedz<~1G$VeQ(0wHFe;e8m>Av6>XlXIvp)CuMn_6mEMy%=l} zL;)^PHE@I8&cw6FscdR5T^otO202Z+2s8njDoxC(=5*UJL&_CB0eyqQaOGr#&?dCm zct=mvuNk8)$M}bR2PyJcq@c}kHP=ZO!nAZp%GY*knR=3bO)1bkb*?&(exIwzgxDZ= zoU6|lqd(Q^YPG;Q?p5v;Zoj-6-BV^Ovrs`4Ww!p6bx#+qp>XYg)V~zI6I{6^nx;5t znw&4Ul=FZj^?`a{eW35ttLS?{`}C@MRpX-3#z-{USQCs(<}k=E8Go25kf($vNv7Oh zZYQ^qZ^^gNe5I29gOOykHLmCt^ga3>BT;>>E!C@NOV#Jbv0EADSh`@1Wm|-=jIJpAxq016G4qVN zMjf+<*~6%B)YrcOuWKALeu42D#&P2p=dfLbui|Ss1w7fhYYnvS*(2SR?yK%6{#!;r zpD_AB>;vnu7i7JS-WF{!cmYNZ0j>bx_U9IFePo;VC${ND+-z^G>pS0CIbLJe zbA8+lx4_MDHmt2<#ujC-uq4ZEYs?|_e@YzDAurG8HKM=YKh2h=658*ws zB)!95=37f+!oQ23hyl-A)PsQw)O{$X~ev&;?RYW5bq4zI=Oc&)S0epT{y-A5b^c720WA z^e6PEw960Tp9zckQuY=02kwGV8=i)<$@fE@LI;?am}*S*sOWWcC8jd7iK$F)gwaNN zBQZJjqwu8^5JG&KKnof2Nrgtk#FJvY@TGW4BBZY*Qm!S}mV#0+oDBL07##jbt}6wk zFQlMc2VVO^u7gs6ktkKpK_lgOxh5z_J}sX{BjlR=|M(RCf5I~A1l>yPE*ucMiw~I= zO!ELAa6);ZJUWp+PUTQ%$km}SWO|6DTTmyc<4^&+Qm3eHRNv5hAu)8D?F99(8{3U} zlQ|CgaUhy?Wv{VU*-r4v4Ymt&0(6o&#{9xGXO6L#nV;E?%rR~#dyyL+s2rFQm>iUY zZwBWCPXtc~PeD8xTpVl*bBhCW0y_fDh?(TaKY%7muF?p`xki6ufbqcS zr=J1p>p8|i{fxz#(_!|ZG0>a_`Lrm;Lrbs(bGjusBK{cUVh7~n<&J`HqcXftn@?&)a6R4x>R0Zvc?2stXoYsf3>u@&1$Mg7gx|sp6

a#BsdKd;GV;oBX!`WW3KU;ui8A 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 + end + + end + end + end + + + sample_files = sort(sample_files)'; + + num_samples = size(sample_files,1); + + path = [ dir_name filesep 'sample_' sample_files{1} '.frr' ]; + + path + + fouriers = load_strands(path); + + num_strands = size(fouriers,1); + degree = size(fouriers{1,1},1); + + params_evolution = zeros(num_samples); + + + for sample_i = 1:num_samples + + path = [dir_name, filesep, 'sample_', sample_files{sample_i}, '.frr']; + + fouriers = load_strands(path); + + fourier = fouriers{strand_i}; + + params_evolution(sample_i) = fourier(degree_i, dim_i); + + + end + + + plot(params_evolution); + + +end + diff --git a/matlab/old/plot_parameter_evolution.m b/matlab/old/plot_parameter_evolution.m new file mode 100644 index 0000000..a4f3cda --- /dev/null +++ b/matlab/old/plot_parameter_evolution.m @@ -0,0 +1,82 @@ +function params_evolution = load_parameter_evolution(dir_name) + + + files = dir(dir_name)'; %' + + if (size(files,2) == 0) + error(['Could not load any strands from directory ' dirname ]); + end + + sample_files = cell(0); + + for file = files + + if (~file.isdir) + + if (match_file_ext(file.name, 'frr' )) + + delimeters = [strfind(file.name, '_') strfind(file.name, '.frr')]; + + if (length(delimeters) == 2 && strmatch(file.name(1:delimeters(1)), 'sample_')) + sample_files{end+1} = file.name((delimeters(1)+1):(delimeters(2)-1)); %#ok + end + + end + end + end + + sample_files = sample_files'; + + num_samples = size(sample_files,1); + + max_decimal_places = 0; + + for file_i = 1:num_samples + + decimal_places = length(sample_files{file_i}); + + if (decimal_places > max_decimal_places) + + max_decimal_places = decimal_places; + + end + end + + for file_i = 1:num_sample_files + + decimal_places = length(sample_files{file_i}); + + for i = 1:(max_decimal_places - decimal_places + 1) + + sample_files{file_i} = ['0' sample_files{file_i}]; + + end + end + + sample_files = sort(sample_files); + + fouriers = load_strands([dirname filesep 'sample_' sample_files(1) '.frr']); + + num_strands = size(fouriers,1); + degree = size(fouriers{1,1},1); + + params_evolution = zeros(num_samples, num_strands, degree, 3); + + + for sample_i = 1:num_samples + + fouriers = load_strands([dirname filesep 'sample_' sample_files(file_i) '.frr']); + + for (strand_i = 1:num_strands) + + fourier = fouriers{strand_i,1}; + + params_evolution(sample_i, strand_i, :, :) = reshape(fourier, [1 1 size(fourier,1) 3]); + + end + + end + + +end + diff --git a/matlab/old/prior_estimation.m b/matlab/old/prior_estimation.m new file mode 100644 index 0000000..cc47902 --- /dev/null +++ b/matlab/old/prior_estimation.m @@ -0,0 +1,41 @@ +function batch_prior_estimation(dirname) +% function prior_estimation(collection_name) +% +% Estimates the prior distribution of Fourier coefficients for a given phantom +% collection +% +% +% dirname - directory name of the strand collection + + + collection_names = dir(dirname); + + stats = []; + + if (size(collection_names,1) < 1) + error(['Did not read any collection names from ' dirname]); + else + + for (coll_i =1:size(collection_names,1)) + + collection_name = collection_names(coll_i).name; + + if (collection_name(1,1) ~= '.') + + collection_dir = [dirname '/' collection_name]; + + if (isdir(collection_dir)) + + prior_estimation(collection_dir); + + + end + end + + + end + + end + + +end \ No newline at end of file diff --git a/matlab/old2/d_fourier_descr_matrix.m b/matlab/old2/d_fourier_descr_matrix.m new file mode 100644 index 0000000..784c14b --- /dev/null +++ b/matlab/old2/d_fourier_descr_matrix.m @@ -0,0 +1,20 @@ +function d_psi = d_fourier_descr_matrix(num_samples, degree, include_endpoints) + + + if include_endpoints + k = [0:1:(num_samples-1)]'./(num_samples-1); + else + k = [1:num_samples]'./(num_samples+1); + end + + if (degree >= 0) + d_psi = zeros(num_samples,1); + end + + for (d = [1:(degree-1)]) + + d_psi = [d_psi, - d * pi * sqrt(2) * sin(pi * k * d)]; + + end + +end \ No newline at end of file diff --git a/matlab/old2/f_descript.m b/matlab/old2/f_descript.m new file mode 100644 index 0000000..a835dbe --- /dev/null +++ b/matlab/old2/f_descript.m @@ -0,0 +1,82 @@ +function samples = f_descript(num_samples, coeff, varargin) +% samples = f_descript(num_samples, coeff, [plot_type]) +% +% Args: +% +% samples - the samples, which are plotted +% num_samples - number of samples +% plot_type (optional - passed directly to plot3 (e.g. 'x' plots +% crosses instead of a line) + +if (nargin == 3) + plot_type = varargin{1}; +else + plot_type = '-'; +end + +if (size(coeff,2) ~= 3) + error('The second dimension of the coefficient matrix must be 3'); +end + +degree = size(coeff,1); + +k = [0:1:(num_samples-1)]'./(num_samples-1); + + +if (degree >= 0) + psi = ones(num_samples,1); +end + +% start_point = coeff(1,:); +% end_point = coeff(1,:); + +for (d = [1:(degree-1)]) + + psi = [psi, sqrt(2) * cos(pi * k * d)]; + +% start_point = start_point + coeff(d,:); +% end_point = end_point + coeff(d,:) * cos(pi * d); +end + +samples = psi * coeff; + +%sfigure; +plot3(samples(:,1), samples(:,2), samples(:,3), plot_type); + +% = (1,:)' - 1.5 * scalars(2); +% up_lim = c(1,:)' + 1.5 * scalars(2); +% +% xlim([low_lim(1) up_lim(1)]); +% ylim([low_lim(2) up_lim(2)]); +% zlim([low_lim(3) up_lim(3)]); + +cameratoolbar('Show'); +cameratoolbar('SetMode','orbit'); +grid; +xlabel('x'); +ylabel('y'); +zlabel('z'); +coeff +% xlim(plot_limits(1,:)); +% ylim(plot_limits(2,:)); +% zlim(plot_limits(3,:)); + + +function h = sfigure(h) +% SFIGURE Create figure window (minus annoying focus-theft). +% +% Usage is identical to figure. +% +% Daniel Eaton, 2005 +% +% See also figure + +if nargin>=1 + if ishandle(h) + set(0, 'CurrentFigure', h); + else + h = figure(h); + end +else + h = figure; +end \ No newline at end of file diff --git a/matlab/old2/get_m0_coeffs.m b/matlab/old2/get_m0_coeffs.m new file mode 100644 index 0000000..6b0b376 --- /dev/null +++ b/matlab/old2/get_m0_coeffs.m @@ -0,0 +1,24 @@ +function m0 = get_m0_coeffs(SH) + +reshape(SH, length(SH),1); + + +total_index = 0; +i = 0; +indices = []; + +while (total_index < length(SH)) + + + block_size = 2 * i; + + new_index = total_index + block_size + 1; + + + indices = [indices; new_index]; + + total_index = new_index + block_size; + i = i + 1; +end + +m0 = SH(indices); \ No newline at end of file diff --git a/matlab/old2/get_response_coeffs.m b/matlab/old2/get_response_coeffs.m new file mode 100644 index 0000000..ce50dc3 --- /dev/null +++ b/matlab/old2/get_response_coeffs.m @@ -0,0 +1,66 @@ +function q = get_response_coeffs(SH) +%Takes a vector of spherical harmonic coefficients (SH) of a given signal model +%of diffusion and calculates the corresponding coefficients for the polynomial +%expansion used in the calculation of the instantaneous signal intensity. + + R = get_m0_coeffs(SH) + + max_order = 2 * (length(R)-1); + + l = [0:2:max_order]; + + if (max_order > 8) + error(['Sorry only polynomials up to Legendre polynomial order 8 have been calculated (order ' num2str(max_order) ' supplied)']); + end + + P = zeros(5); + + P(1,:) = [ 1 0 0 0 0]; %0th order Associated Legendre polynomial, m=0 + P(2,:) = 1/2 * [-1 3 0 0 0]; %2nd order Associated Legendre polynomial, m=0 + P(3,:) = 1/8 * [ 3 -30 35 0 0]; %4th order Associated Legendre polynomial, m=0 + P(4,:) = 1/16 * [-5 105 -315 231 0]; %6th order Associated Legendre polynomial, m=0 + P(5,:) = 1/128 * [35 -1260 6930 -12012 6435]; %8th order Associated Legendre polynomial, m=0 + + + %Weight the Legendre polynomials by appropriate scaling function for + %spherical harmonics. + + + normalise = diag(sqrt( (2 * l + 1) ./ (4 * pi) )); + + P = normalise * P; + + P = diag(R) * P + + q = sum(P,1)'; + + + +end + + +function m0 = get_m0_coeffs(SH) + + reshape(SH, length(SH),1); + + + total_index = 0; + i = 0; + indices = []; + + while (total_index < length(SH)) + + + block_size = 2 * i; + + new_index = total_index + block_size + 1; + + + indices = [indices; new_index]; + + total_index = new_index + block_size; + i = i + 1; + end + + m0 = SH(indices); +end \ No newline at end of file diff --git a/matlab/old2/inv_f_descript.m b/matlab/old2/inv_f_descript.m new file mode 100644 index 0000000..5f6988a --- /dev/null +++ b/matlab/old2/inv_f_descript.m @@ -0,0 +1,77 @@ +function coeff = inv_f_descript(samples, degree, varargin) +% samples = inv_f_descript(samples, degree, [plot_type]) +% +% Args: +% +% coeff - the fourier coefficients +% samples - the samples of the line to be transformed +% degree - the degree of the basis set +% plot_type (optional - passed directly to plot3 (e.g. 'x' plots +% crosses instead of a line) + +if (size(samples,2) ~= 3) + error('The second dimension of the samples matrix must be 3'); +end + +num_samples = size(samples, 1); + +if (nargin >= 3) + plot_type = varargin{1}; +else + plot_type = '-'; +end + +if (nargin == 4) + num_output_samples = varargin{2}; +else + if (num_samples > 100) + num_output_samples = num_samples; + else + num_output_samples = 100; + end +end + + + +k = [0:1:(num_samples-1)]'./(num_samples-1); + +psi = ones(num_samples,1); + + +for (d = [1:(degree-1)]) + + psi = [psi, sqrt(2) * cos(pi * k * d)]; + +end + +coeff = inv(psi' * psi) * psi' * samples; + +if (num_samples ~= num_output_samples) + psi = []; + + k = [0:1:(num_output_samples-1)]'./(num_output_samples-1); + + psi = ones(num_output_samples,1); + + for (d = [1:(degree-1)]) + + psi = [psi, sqrt(2) * cos(pi * k * d)]; + + end + +end + +new_samples = psi * coeff; + +figure(); +hold on; + +plot3(samples(:,1),samples(:,2),samples(:,3), [plot_type 'b']); + +plot3(new_samples(:,1),new_samples(:,2),new_samples(:,3), [plot_type 'g']); + +hold off; + + +cameratoolbar('Show'); +cameratoolbar('SetMode','orbit'); \ No newline at end of file diff --git a/matlab/old2/load_fourier.m b/matlab/old2/load_fourier.m new file mode 100644 index 0000000..f4121ae --- /dev/null +++ b/matlab/old2/load_fourier.m @@ -0,0 +1,43 @@ +function curve_prior_est(collection_name) +% function curve_prior_est(collection_name) +% +% Estimates the prior distribution of Fourier coefficients for a given phantom +% collection +% +% +% dirname - directory name of the strand collection + + +collection_name + + collection_names = dir(dirname); + + stats = []; + + if (size(collection_names,1) < 1) + error(['Did not read any collection names from ' dirname]); + else + + for (coll_i =1:size(collection_names,1)) + + collection_name = collection_names(coll_i).name; + + if (collection_name(1,1) ~= '.') + + collection_dir = [dirname '/' collection_name]; + + if (isdir(collection_dir)) + + prior_estimation(collection_dir); + + + end + end + + + end + + end + + +end \ No newline at end of file diff --git a/matlab/old2/load_fourier_coeff.m b/matlab/old2/load_fourier_coeff.m new file mode 100644 index 0000000..75a27a5 --- /dev/null +++ b/matlab/old2/load_fourier_coeff.m @@ -0,0 +1,127 @@ +function [coeffs, residual_vars, num_strand_cpoints, length] = load_fourier_coeff(collection_name, degree) +% function [coeffs, residual_vars, num_strand_control_points, straight_line_length] = load_fourier_coeff(collection_name, degree) +% +% Estimates the prior distribution of Fourier coefficients for a given phantom +% collection +% +% +% coeffs - A degree X 3 X num_strands matrix containing the loaded coefficients +% residual_vars - Residual variance after least squares fit +% num_strand_cpoints - Number of control points per strand +% straight_line_length - Straight-line length between strand +% endpoints +% + +% collection_name - directory name of the strand collection +% degree - Degree of the Fourier descriptors + + + collection = load_strands(collection_name); + + num_strands = size(collection,1); + + coeffs = []; + residual_vars = []; + num_strand_cpoints = []; + length = []; + + for strand_i = 1:num_strands + + strand = collection{strand_i,1}; + num_cpoints = size(strand,1); + + if (num_cpoints > degree) + + k = [0:1:(num_cpoints-1)]'./(num_cpoints-1); + + psi = ones(num_cpoints,1); + + for d = 1:(degree-1) + + psi = [psi, sqrt(2) * cos(pi * k * d)]; + + end + + C = inv(psi' * psi) * psi' * strand; + + residual = strand - psi * C; + + residual_var = sum(sum(residual.^2))/num_cpoints; + + coeffs = cat(3,coeffs,C); + + residual_vars = [residual_vars; residual_var]; + num_strand_cpoints = [num_strand_cpoints; num_cpoints]; + length = [length; norm(strand(num_cpoints,:) - strand(1,:))]; + + end + + end +end + + +function strand_collection = load_strands(dirname) + +% function strand_collection = load_strands(dirname) +% +% load_strand_collection.m +% Numerical Fibre Generator +% +% Created by Tom Close on 19/02/08. +% Copyright 2008 Tom Close. +% Distributed under the GNU General Public Licence. +% +% +% +% This file is part of 'Numerical Fibre Generator'. +% +% 'Numerical Fibre Generator' is free software: you can redistribute it and/or modify +% it under the terms of the GNU General Public License as published by +% the Free Software Foundation, either version 3 of the License, or +% (at your option) any later version. +% +% 'Numerical Fibre Generator' is distributed in the hope that it will be useful, +% but WITHOUT ANY WARRANTY; without even the implied warranty of +% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +% GNU General Public License for more details. +% +% You should have received a copy of the GNU General Public License +% along with 'Numerical Fibre Generator'. If not, see +% +% +% + + + num_strands = 0; + + files = dir(dirname)'; %' + + if (size(files) == [1,0]) + error(['Could not load any strands from directory ' dirname ]); + end + + for file = files + + if (~file.isdir) + + delimeters = [strfind(file.name, '_') strfind(file.name, '-') strfind(file.name, '.txt' )]; + + if (length(delimeters) == 4 && strmatch('strand', file.name)) + + num_strands = num_strands + 1; + + + strand_collection{num_strands, 1} = load([dirname filesep file.name]); + strand_collection{num_strands, 2} = str2num(file.name(delimeters(1) + 1 :delimeters(2) -1 )); + strand_collection{num_strands, 3} = str2num(file.name(delimeters(3) + 2 :delimeters(4) -1 )); + strand_collection{num_strands, 4} = str2num(file.name(delimeters(2) + 1 :delimeters(3) -1 )); + + + end + end + + end +end + + + diff --git a/matlab/old2/load_mrtrix_strands.m b/matlab/old2/load_mrtrix_strands.m new file mode 100644 index 0000000..0d60feb --- /dev/null +++ b/matlab/old2/load_mrtrix_strands.m @@ -0,0 +1,132 @@ +function strands = load_mrtrix_strands(filename, varargin) +% samples = f_descript(num_samples, coeff, [plot_type]) +% +% Args: +% +% samples - the samples, which are plotted +% num_samples - number of samples +% plot_type (optional - passed directly to plot3 (e.g. 'x' plots +% crosses instead of a line) + + if (nargin > 4) + error(['Incorrect number of arguments ' nargin ' expecting no more than 2']); + + elseif (nargin == 3) + first_strand = 1; + last_strand = varargin{2}; + + elseif (nargin == 4) + first_strand = varargin{2}; + last_strand = varargin{3}; + else + first_strand = 1; + last_strand = -1; + end + + if (nargin == 2) + strand_diameter = varargin{1}; + else + strand_diameter = 0.03; + end + + dots_i = findstr(filename,'.'); + ext = filename(dots_i(end):end); + + convert_to_tck = strcmp(ext, '.frr'); + + + file = fopen(filename,'r'); + + [fname, mode, machine_format] = fopen(file); + + + if (file == -1) + error([ 'Could not open file ' filename '!' ]); + end + + line = fgetl(file); + + if (~strcmp(line(1:13),'mrtrix tracks')) + error(['File, ' filename ' was not a valid mrtrix tracks file']); + end + + offset = 0; + datatype = []; + + for (line_i = 1:20) + line = fgetl(file); + if (strcmp(line(1:4),'file')) + offset = str2double(line(9:end)); + break +% elseif (strcmp(line(1:8),'datatype')) +% datatype = line(11:end); + end + end; + + if (~offset) + error(['"offset" property was not found after 10 lines']); + end + +% if (datatype == []) +% error(['"datatype" property was not found after 10 lines']); +% end + + + fseek(file, offset, 'bof'); + + elems = fread(file, inf, 'float32=>double', machine_format); + + + end_of_strands = find(isnan(elems)); + + end_of_strands = end_of_strands(1:3:end) - 1; +% for (i = 1: length(end_of_strands)) +% disp([ num2str(end_of_strands(i)) ', ' num2str(elems(end_of_strands(i))) ', ' num2str(elems(end_of_strands(i)+1)) ', ' num2str(elems(end_of_strands(i)+2)) ', ' num2str(elems(end_of_strands(i)+3)) ', ' num2str(elems(end_of_strands(i)+4))]) +% end + + total_number_of_strands = size(end_of_strands,1); + + if (last_strand == -1 | (last_strand > total_number_of_strands) ) + last_strand = size(end_of_strands,1); + end + + number_of_strands = last_strand - first_strand + 1; + + if (first_strand == 1) + end_of_prev_strand = -3; + else + end_of_prev_strand = end_of_strands(first_strand-1); + end + + strands = cell(number_of_strands,4); + + for (strand_i = first_strand:last_strand) + + output_strand_i = strand_i - first_strand + 1; + + strand = elems(end_of_prev_strand+4:end_of_strands(strand_i)); + + num_points = size(strand,1) / 3; + + if (num_points ~= floor(num_points)) + error(['Strand ' strand_i ' does not contain a number of elements that are divisible by 3, ' num2str(size(strand,1))]); + end + + strand = reshape(strand,3,num_points)'; + + if (convert_to_tck) + strand = fourier2tck(strand); + end + + strands{output_strand_i,1} = strand; + strands{output_strand_i,2} = strand_i-1; + strands{output_strand_i,3} = strand_diameter; + strands{output_strand_i,4} = strand_i-1; + + end_of_prev_strand = end_of_strands(strand_i); + end + + strands{end+1,1} = filename; + +end + diff --git a/matlab/old2/load_samples.m b/matlab/old2/load_samples.m new file mode 100644 index 0000000..e377ff0 --- /dev/null +++ b/matlab/old2/load_samples.m @@ -0,0 +1,238 @@ +function [samples, ext_prop_keys, ext_prop_values, initial_set, true_set, sphere_radius] = load_samples(filename, varargin) +% samples = f_descript(num_samples, coeff, [plot_type]) +% +% Args: +% +% samples - the samples, which are plotted +% + + if (nargin > 2) + error(['Incorrect number of arguments ' nargin ' expecting no more than 2']); + end + + if (nargin == 2) + sample_indices = varargin{1}; + else + sample_indices = []; + end + + + dots_i = findstr(filename,'.'); + ext = filename(dots_i(end):end); + + if ~strcmp(ext, '.tsp') + error(['File has extension ' ext ', required to be ''tsp'' for tract set samples file.']); + end + + + if any(sample_indices < 1) + error(['Sample indices must be positive integers (min index: ' num2str(min(sample_indices)) ')']); + end + + + file = fopen(filename,'r'); + + [fname, mode, machine_format] = fopen(file); + + + if (file == -1) + error([ 'Could not open file ' filename '!' ]); + end + + line = fgetl(file); + + if (~strcmp(line(1:13),'mrtrix tracks')) + error(['File, ' filename ' was not a valid mrtrix tracks file']); + end + + offset = 0; + num_points_per_set = 0; + num_tracts = 0; + degree = 0; + num_samples = 0; + true_set_provided = false; + sphere_radius = 0.39; + + for (line_i = 1:1000) + + line = fgetl(file); + + if strcmp(line(1:3), 'END') + break; + end + + if length(line) >= 4 && strcmp(line(1:4),'file') + offset = str2double(line(9:end)); + + elseif length(line) >= 18 && strcmp(line(1:18), 'num_points_per_set') + num_points_per_set = str2double(line(21:end)); + + elseif length(line) >= 8 && strcmp(line(1:8), 'set_size') + num_points_per_set = str2double(line(11:end)); + + elseif length(line) >= 11 && strcmp(line(1:11), 'num_tracts') + num_tracts = str2double(line(14:end)); + + elseif length(line) >= 5 && strcmp(line(1:5), 'count') + num_samples = str2double(line(8:end)); + + elseif length(line) >= 17 && strcmp(line(1:17), 'true_set_provided') + true_set_provided = true; + + elseif length(line) >= 22 && strcmp(line(1:22),'proposal_sphere_radius') + sphere_radius = str2num(line(25:end)); + + elseif length(line) >= 8 && strcmp(line(1:8),'datatype') + datatype = line(11:end); + + if (strcmp(datatype, 'Float32BE')) + machine_format = 'ieee-be'; + elseif (strcmp(datatype, 'Float32LE')) + machine_format = 'ieee-le'; + else + error(['Unrecognised data format ''' datatype ''', should be Float32BE or Float32LE.']); + end + + end + + end + + if (~offset || ~num_points_per_set) + error(['All required properties, ''file'' and ''num_points_per_set'', were not found after 1000 lines']); + end + + + + if any(sample_indices > num_samples) + error(['Sample index (' num2str(max(sample_indices)) ') out of range (' num2str(num_samples) ').']); + end + + fseek(file, offset, 'bof'); + + samples = cell(0,1); + + %Read true tract set if provided. + if (true_set_provided) + true_set = read_tract_set(file, num_points_per_set, machine_format); + else + true_set = []; + end + + %Read initial tract set. + initial_set = read_tract_set(file, num_points_per_set, machine_format); + + + if isempty(initial_set) + error(['No initial set was found in samples file']); + end + + %Load extended properties + [ext_prop_keys, ext_prop_values] = load_extend_elem_props([filename 'x']); + + if isempty(sample_indices) + + end_of_file = false; + + while ~end_of_file + + samples{end+1,1} = read_tract_set(file, num_points_per_set, machine_format); + + end_of_file = isempty(samples{end}); + + end + + else + + set_byte_size = num_points_per_set * 3 * 4; % times 3 for a point containing 3 numbers, and times 4 for the size of a float. + + prev_index = 0; + + for set_i = 1:length(sample_indices) + + sample_index = sample_indices(set_i); + + if (sample_index - prev_index ~= 1) + if fseek(file, offset + sample_index * set_byte_size, 'bof') < 0 + error(['Sample index (' num2str(sample_index) ') is out of range of the file']); + end + end + + samples{set_i+2,1} = read_tract_set(file, num_tracts, num_points_per_set, machine_format); + + if end_of_file + error(['End of file reached while attempting to load tract sample ' num2str(sample_indices(set_i)) '.']); + end + + prev_index = sample_index; + + end + + ext_prop_values = ext_prop_values(sample_indices,:); + + end + +end + + +function tract_set = read_tract_set(file, num_points_per_set, machine_format) + + block_size = num_points_per_set * 3; + + [block, read_count] = fread(file, block_size, 'float32=>double', machine_format); + + if isinf(block(1)) || feof(file) + tract_set = []; + return; + end + + if read_count ~= block_size + error(['''num_points_per_set'' (' num2str(num_points_per_set) ') property does not divide evenly into the size of file']); + end + + block = reshape(block, 3, num_points_per_set)'; + + tract_seperators = find(isinf(block(:,1))); + + num_tracts = size(tract_seperators,1); + + if tract_seperators(end) ~= num_points_per_set + error(['''num_points_per_set'' (' num2str(num_points_per_set) ') does not align with tract seperators ([-inf, -inf, -inf]).']); + end + + + tract_set = cell(num_tracts,3); + + tract_start_index = 1; + + for tract_i = 1:num_tracts + + tract_end_index = tract_seperators(tract_i); + + tract = block(tract_start_index:(tract_end_index-1),:); + + axes_seperators = find(isnan(tract(:,1))); + + if length(axes_seperators) ~= 3 + error (['Expected 3 axes in tract ' num2str(tract_i) ', only found ' length(axes_seperators) '.']); + end + + axes_start_index = 1; + + for axes_i = 1:3 + + axes_end_index = axes_seperators(axes_i); + + tract_set{tract_i, axes_i} = tract(axes_start_index:(axes_end_index-1),:); + + axes_start_index = axes_end_index + 1; + + end + + tract_start_index = tract_end_index + 1; + + end + +end + + + diff --git a/matlab/old2/load_strand_samples.m b/matlab/old2/load_strand_samples.m new file mode 100644 index 0000000..59707ed --- /dev/null +++ b/matlab/old2/load_strand_samples.m @@ -0,0 +1,231 @@ +function [samples, ext_prop_keys, ext_prop_values, initial_set, true_set, sphere_radius] = load_strand_samples(filename, varargin) +% samples = f_descript(num_samples, coeff, [plot_type]) +% +% Args: +% +% samples - the samples, which are plotted +% + + if (nargin > 2) + error(['Incorrect number of arguments ' nargin ' expecting no more than 2']); + end + + if (nargin == 2) + sample_indices = varargin{1}; + else + sample_indices = []; + end + + + if (nargin == 3) + convert_to_track = varargin{2}; + else + convert_to_track = false; + end + + dots_i = findstr(filename,'.'); + ext = filename(dots_i(end):end); + + if ~strcmp(ext, '.smp') + error(['File has extension ' ext ', required to be ''smp'' for strand set samples file.']); + end + + + if any(sample_indices < 1) + error(['Sample indices must be positive integers (min index: ' num2str(min(sample_indices)) ')']); + end + + + file = fopen(filename,'r'); + + [fname, mode, machine_format] = fopen(file); + + + if (file == -1) + error([ 'Could not open file ' filename '!' ]); + end + + line = fgetl(file); + + if (~strcmp(line(1:13),'mrtrix tracks')) + error(['File, ' filename ' was not a valid mrtrix tracks file']); + end + + offset = 0; + num_points_per_set = 0; + num_strands = 0; + degree = 0; + num_samples = 0; + true_set_provided = false; + sphere_radius = 0.39; + + for (line_i = 1:1000) + + line = fgetl(file); + + if strcmp(line(1:3), 'END') + break; + end + + if length(line) >= 4 && strcmp(line(1:4),'file') + offset = str2double(line(9:end)); + + elseif length(line) >= 18 && strcmp(line(1:18), 'num_points_per_set') + num_points_per_set = str2double(line(21:end)); + + elseif length(line) >= 8 && strcmp(line(1:8), 'set_size') + num_points_per_set = str2double(line(11:end)); + + elseif length(line) >= 11 && strcmp(line(1:11), 'num_strands') + num_strands = str2double(line(14:end)); + + elseif length(line) >= 5 && strcmp(line(1:5), 'count') + num_samples = str2double(line(8:end)); + + elseif length(line) >= 17 && strcmp(line(1:17), 'true_set_provided') + true_set_provided = true; + + elseif length(line) >= 22 && strcmp(line(1:22),'proposal_sphere_radius') + sphere_radius = str2num(line(25:end)); + + elseif length(line) >= 8 && strcmp(line(1:8),'datatype') + datatype = line(11:end); + + if (strcmp(datatype, 'Float32BE')) + machine_format = 'ieee-be'; + elseif (strcmp(datatype, 'Float32LE')) + machine_format = 'ieee-le'; + else + error(['Unrecognised data format ''' datatype ''', should be Float32BE or Float32LE.']); + end + + end + + end + + if (~offset || ~num_points_per_set) + error(['All required properties, ''file'' and ''num_points_per_set'', were not found after 1000 lines']); + end + + + + if any(sample_indices > num_samples) + error(['Sample index (' num2str(max(sample_indices)) ') out of range (' num2str(num_samples) ').']); + end + + fseek(file, offset, 'bof'); + + samples = cell(0,1); + + %Read true strand set if provided. + if (true_set_provided) + true_set = read_strand_set(file, num_points_per_set, machine_format, convert_to_track); + else + true_set = []; + end + + %Read initial strand set. + initial_set = read_strand_set(file, num_points_per_set, machine_format, convert_to_track); + + + if isempty(initial_set) + error(['No initial set was found in samples file']); + end + + %Load extended properties + [ext_prop_keys, ext_prop_values] = load_extend_elem_props([filename 'x']); + + if isempty(sample_indices) + + end_of_file = false; + + while ~end_of_file + + samples{end+1,1} = read_strand_set(file, num_points_per_set, machine_format, convert_to_track); + + end_of_file = isempty(samples{end}); + + end + + else + + set_byte_size = num_points_per_set * 3 * 4; %degree+1 accounts for strand divider [NaN, NaN, NaN], and 4 is size of Float32. + + prev_index = 0; + + for set_i = 1:length(sample_indices) + + sample_index = sample_indices(set_i); + + if (sample_index - prev_index ~= 1) + if fseek(file, offset + sample_index * set_byte_size, 'bof') < 0 + error(['Sample index (' num2str(sample_index) ') is out of range of the file']); + end + end + + samples{set_i+2,1} = read_strand_set(file, num_strands, num_points_per_set, machine_format, convert_to_track); + + if end_of_file + error(['End of file reached while attempting to load strand ' num2str(sample_indices(set_i)) '.']); + end + + prev_index = sample_index; + + end + + ext_prop_values = ext_prop_values(sample_indices,:); + + end + +end + + +function strand_set = read_strand_set(file, num_points_per_set, machine_format, convert_to_track) + + block_size = num_points_per_set * 3; + + [block, read_count] = fread(file, block_size, 'float32=>double', machine_format); + + if isinf(block(1)) || feof(file) + strand_set = []; + return; + end + + if read_count ~= block_size + error(['''num_points_per_set'' (' num2str(num_points_per_set) ') property does not divide evenly into the size of file']); + end + + block = reshape(block, 3, num_points_per_set)'; + + seperators = find(isnan(block(:,1))); + + num_strands = size(seperators,1); + + if seperators(end) ~= num_points_per_set + error(['''num_points_per_set'' (' num2str(num_points_per_set) ') does not align with strand seperators ([NaN, NaN, NaN]).']); + end + + strand_set = cell(num_strands,1); + + start_index = 1; + + for strand_i = 1:num_strands + + end_index = seperators(strand_i); + + strand = block(start_index:(end_index-1),:); + + if (convert_to_track) + strand_set{strand_i} = fourier2tck(strand); + else + strand_set{strand_i} = strand; + end + + start_index = end_index + 1; + + end + +end + + + diff --git a/matlab/old2/p_descript.m b/matlab/old2/p_descript.m new file mode 100644 index 0000000..c6f74fa --- /dev/null +++ b/matlab/old2/p_descript.m @@ -0,0 +1,91 @@ +function samples = p_descript(num_samples, coeff, varargin) +% samples = p_descript(num_samples, coeff, [plot_type]) +% +% Args: +% +% num_samples - number of samples +% coeff - the coefficients of the polynomial +% plot_type (optional - passed directly to plot3 (e.g. 'x' plots +% crosses instead of a line) + +if (nargin == 3) + plot_type = varargin{1}; +else + plot_type = '-'; +end + +if (size(coeff,2) ~= 3) + error('The second dimension of the coefficient matrix must be 3'); +end + +degree = size(coeff,1); + +range = ceil((num_samples - 1)/2); +num_samples = 2 * range + 1; + +t = [-range:1:range]'./ range; + + + + +t_bar = ones(size(t)); + +if (degree >= 0) + psi = ones(num_samples,1); +end + + +for (d = [1:(degree-1)]) + + t_bar = t_bar .* t; + + psi = [psi, t_bar]; + +end + +samples = psi * coeff; + +%figure; +sfigure(1); +plot3(samples(:,1), samples(:,2), samples(:,3), plot_type); + +cameratoolbar('Show'); +cameratoolbar('SetMode','orbit'); +grid; +xlabel('x'); +ylabel('y'); +zlabel('z'); + +max_lim = max(sum(coeff)); + +% xlim([-max_lim max_lim]); +% ylim([-max_lim max_lim]); +% zlim([-max_lim max_lim]); + +% xlim([-100 100]); +% ylim([-100 100]); +% zlim([-100 100]); + + + +coeff + + +function h = sfigure(h) +% SFIGURE Create figure window (minus annoying focus-theft). +% +% Usage is identical to figure. +% +% Daniel Eaton, 2005 +% +% See also figure + +if nargin>=1 + if ishandle(h) + set(0, 'CurrentFigure', h); + else + h = figure(h); + end +else + h = figure; +end diff --git a/matlab/old2/p_scheme.mat b/matlab/old2/p_scheme.mat new file mode 100644 index 0000000000000000000000000000000000000000..d9f7acb99e9ba6e11b29acaee482ce38a468c823 GIT binary patch literal 3068650 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

^AKC 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

HK5Y zY64N_XZS~tejt25m>|?~6=0uw|+D&CW2)1yZof($ZV>0vY?9P93xIPC!!hnhV+8|1EKH`tS7We@IJ~ zPjM7JhYV;ra5XRindxclyM?yMs=o7OxNrrsZz-+o{F;aCUwY*yRnH(t!ZZDH-59dJ zx?Gtp2tc+M?IoYTBeK$ck(Duk%*e0%s^JMTq=whq%0?jVdbcpYRUuLytf)$|T#lqm z1#c(*c4D8L$gc9w3)m$sYO>$d4O>}?qLQJTu(ou?!rB-2@fFekd!K$(R$b0fVuyFXEX`VMQ`zHA1eJp?xM;TLLHUWLzsB)QYX|x=t1pOkn3?fW=;&(@11kOgIMiAxYuX zpzC^dq-fvVtmHd{v~`!CtWJN2^t@cN6}(o+Sn$S86_dzXLvMZ@dJS0=?2~_0k8HD9 z_JXVsvTrC@f6w+sw(XpIlkj0=O^%2BaR@<{`nloJ@d9M-t1qco;w$}&{2uKrEu=Z; zm`+ssBPC^C_}PvYBt6f*V!p=}``D3t2V$$RTUJO{Mo1ak z*)%dYdKr@!v=#qpY=+05zgJm(n}U)fv)Sh>Dxm&ML9q8CLYo8g+kv<#=sF$tYuzq3 z^sNe)@M!xDBvro+Vn*kHqV%E0Vj>f$KMuKczyAvK;3KAm23LU55pi?>pKxGy>ldwI z)dDLrxqBCH60m*;e)P`-U`rJb%{xZ`>+ggRj=cufqoQ`Ijw~?Q9`v){eStCLhL5N2 z0zI_^7R3C4wq?g1lIjYeI9hK}+uIH#&*;MO6{gUaWLj5bONQ=c(%C#UanLT~6ePyj z0F6@8^4g!iLRns=q+jcPNd0%k`@r-7#`c+uXr%jNVb^S1i{x#reRuG5W+De$qpGq> zPIO_X`=IVS0ZkNZ)9|qA+07Zq;uoqlot8(|-BoHf+24`XFdCyN-GHnDxw%ifKOyV5B6own3o;Ak z7W;TEBZIIm@@Z5Z(o;+A<^HQin%bj#DKargiTiXw%P|#6wHd5w{R`OdL3bDgtB-Ly8ZQI=bUK32qKy5EBOHPG~@Ar@RB#D72+=1l>+OqX2tzFGhkUM+MAWx z151K8`jW{_U_QTZVfS_=Ft~?5d=OZ=hZU8TzMBQKB>UIZAM1g-B{*BARRhTGW^Num zdN3#$)3wnc6nZCzYLqAm&>0@Bq!oD$TG=jXHkjoWS2$TiTERJn+Q$)burQ%$|=8AE%DMxGWU;*F*2o-@;hiV$jp++ z5)lI|K_*Y^S`~VsI&%BvlV~+IQdp~P89YN|y zYMVmh52T#8({DGmLsChH7`>VY`_n=f|0q4gp8J=k{<(-EL3vvFeDn!yNeK&GJaipv z%8eA9-w5OD5z`xcM_MpWneAB1KLknPH@ACgWI@T*x6)5PG(erxwr61*zCr6b>w`C% zdVs+Gow%pG6?!*?Sy)#%zySZg;eAc+K%#7H`&S@aKv43}A|#7;`&54~z#6 zX#>egKyPEEKGS*uv?fvi>@zokdP`{J?$K7DtUkkF-t7gF%l0j2-g_?je3#45Pp#0i zr>W<&OAU0)>=qqjt3petvFqFUV^Gt+CBj{B016YXW_oUofyWhF(#i{WVZyk~X|{F34YfgDo*)Uhm|Sv13wWQG{iKJ;HTUby^kJH+`ajPu>ej zx(#uH7le__?0$T2^?9ViiVc0WUP!x|$9ohakna8am$$^eY zS*7v)_;XJr1(s7X9pth9=4Fue0$z7yvH)CAN!gz{@^hk$bIs38ez!veMIlF}{>`;FimR;k8-C_~NrnBuxtlhWeeryyD3T;|U z-tipCe2q~pt74IIrv0IALnTs!G{mBFTab1^#ouqN2k87#+4-Ono^y_ESSIkgq(M>56U4KG7lrkJ}!i8NBX*A!Rg`5>k4gObBXK_uUZ zBYq$LjU=HUmRT|t`@RY;FF41+9zTA~J6GC}P-j-TsYV}LJ4efR@j*p*)>d^GsJpQ))kFkHJ(Fp?P9{JR(61(+3|Q*P55-(0 zD}XvDE8D2)-y=pl{rMcz$v{(9K74;p5V~KT%}#(0mH$TT(xUdpiQH^;Vk8-Su*CO{4i1Jds(*FRQuFu41;uV%s%=-c@8r7k8wclEBF z8VMsn5TE-*I?D^K#;N3H>t?7=KK{V&s6CXQQ)jR3@P(`y-s;f|H3*>Y_$=sdj;XU( zixOjZV{v;KjmJU-Yo4`S_hFSH#%-8x@HfZyWVz^Lx`WuI=I(u{>pJ$vr3^Hv&trd{ zyjRIZek5t8d8Hiqh~%rE)=2KFM@q0;m_j@sQf+QE&MEIk+A{IqvL`!{=9m5I%#7Bu}{5#aQADyK9y&M7J#Ga2MAf z;5PQ$9y>ZW-H&}%sg{RE`EY>icx3qA@X~Gyoz+o}MRJJHZp)NPq!?~Eaed{I&pC~b zt$)XnYEW!@_uOry-r%t~c*+l{w@)emxyOUlQx$f57Xy*youyc@bFw0o zTc!@|UsVRVR$q3tu=c|vtHozI*X=NRfVbqBZY1VNizac`v9PRw=u2L?7i%9EOa}Op z5Ov5yqbD1&t!J&+)aWDi)F*6w;N$5# z##h`=Ll|D?SD9Z0nT9h>oLpWg8NHn*ukaSC6K$^9(w0NxKcgStkKBXShi9)zxpY8> z&+3BdyIRn--O8V>#|J%$@3s#n^8%6hRY%n?9r~M2t}2q0gTV`lwtlxR0?EnW!LR5Z zkUq%!tSP<^WP|!#2M;+QU%&d#^Pw(~LuPjJs-ytjWcPu=#5BkbZSoRBDhu#cVo6X|E&~5d#%cO?^1Y&{0+d^Mx7iL`K zCq0A~#oc=v1y!Kl@G5=#I~Az-!5+nU2Y5Bpw8^eh08;PeAJ*5g1dINEQmj=|`0Qq2 zKBY7S3n;@o%^n(K#fi|+`4@Ru7s<7Y<1;}FpjSHwT*9{4stSRwWk^s}{k*N47rW9m zKV1$o!ydYfkfdk^5_^YJW#jd*KX~S(gSaUUOhkqHekLGkWmC0G#!n=9Dog4N?Oy8J z+Bc_uMIou@{QQF5cO*5$?#m1;N79`?ygW&VkhI&RpbR{5&}=4Azqtha7aCITH8x@2 zrDJh=PQgpwNj=x4GlAVV4@U(tzhS4+<#asliS30Iu`zz;*s`bwoc)Pu8Dp?*dOZbo9Yc+K2m3=G@PNwm-EQs z;5-nuW&bv=_J+QuRRk^m>(Kvq_q+6WOPu(@w67@G41<}g_yuAf0BJ>uNh&=ANNZDW zmA7t#!A}WSs`HCr@QV8B@bv~TkQFB8CbA6rpTrK&^H@TkzKCSDi#PNZUh#UmyC1qa zVPbLY0_YqZP!ri}4;}GlY5f-uL7VL5w!Shppyc14Z3XU7SM14Wbh-s9SBbCO{dE)y zFH`EG`&uCVq4o)hkINw3QZvA)`~t?N23g#2wZtqVt5}Tkz~UM2$>XZuu}W@ptJmB~ ztWT}FF!}TvB5C;-PQ2hoUHUR{dSAu^5BhPuBnSALnAPW(4`u z=wBp0uWR{my$JhS3eWj%@yGu3Y2H7ROWrt8OA&3Y#(_t}Te?#!aNzk+5WC=gN=uESlk~lGO8(vxfNM z)B66y%P->XV8XbRF&Q4PDkOQdDdk~-dQcQN&|o`w3@XK=?8gIqpw4h4%eSTn zn)kNu4in9XR(C!Ro0lHY9;c$?mOA)900030{}h*JAQcW5he@PCq-aP=QzDWg9D8Oa zn<67Ll#Gb%y}5+Q-s5sz*FM+YDMg5s%w+VBsEoJw^Z9T-oO7P@{GcT;YOHE!Ewrii z_KUm=hxQT1^3jzo=oA=Dp793gQg~{voUsGCkH$TS;(i0&B%j-gowLxh+q?Sds?_mV$3pqz+31z5_uR77f$p@5%>hu6*Unr~Ui#?P- z4h0Q{|f;F%5&ITzYBbDLe#o4$xY-B%EHu>K&HvJWpeEK{OTT0J87izP^Heut0 zubdaL-7EY+)VeWt5VrE)c8p@@L#Me%e6iTIN17r!#e!XSqK;SR_^~UbW%uOkM(nyj zL@<|k!7kR{y^EsJ*!fggEp|c{JF>X%zTs!U_V{6j;rAD@?Z&!L?@d;08A*KQ>}ZS4 zm&J~4wk2VsSv&9cRsPZpTUv^`Pa@IwajYa4xZ|3yXv{gcG!> zm~rz|tg!BBjLsMSQg1#0y1i%9$+pu#xc{EpHBkvN3AmHfy#tEHC$2Z9Hv_5b0nfHv zEvQsi(xF8=FGf&Z9hydhPR~#nq48QM z?O#4OpgQ=Js9qC*I@WXB!s^taa#Qa$?0pX9l<&IacdS5E%&}(eQGlF>SFFQc%)?71 zqrNYJ`rxxir|+2aQ}ljj@`%x843mZ@n_jzeV-A~%xu>9M2>xB!Z~bs$+B{x*8-c4G8#L`u4D6K){~0r{MhosdddL^ z*cw(YV^S4_ZJJC$7p&c}ZFJM_Xzwp<7YTT!ob7?_2FJZT+E=h$zBZHL?@?@9Z@8H& zu!U{UnYkXvieYQd%2jb22W*)W-8s$HiOoYhiiwFouqk0BcA~%l8!xU(UoyXj)HFl+ z)^>HQ8+H9#Gf;%pVyse*0`6FGyVZqFjvLDib!{*EdSKzL0-b4;z>I#eQ=F3g7^nGe z7j2{*I^3BzEZ6%EL3~R``0tBC@&^H(d&VTlF)LqudF>*UB%L+f@CgA@6Kk50wKq@# zdybCqc0&z&`5PfmE2y`;_TQQHuRyIJ8yylWfX4k!wi5TwLzD7eHS3>!(5$^j$jx9A zS}qu05*HnTmZ6&l4tdhhsza%6Z`}v2DJ9uM=Q*IYVqk*r%|&QU7XDM6+y|}NlA&Gf zg3vPXuHle+8np09G#zn{fM%WZxAkb=L6c@-S17Ru8c*^^8rDkz^{qowzFZj8Q@A#Y z^rxXFq{e1$Um#ST`8D}t%^QBw?b*a4Uy4rlAw?{+amxHUc@4=E z*Vv&e1*^_$R(X2HVC|J5%8AJbh;*Lc%|@q@+ARC@z6A$1e4d)7@y^G_{zoxB3j44r zb-P#Gdp~Rju1CKvea7a}l(Yro4Q&3^N(wJ3!4~FgwRlYio7WhgDgAzr&E?VL%3sg0 zS+1yJY+($W@_cuDSYO4)i4@C+YCBtP>zh_Qk1XTNG& zqf`AzbE`}wc*|?j&Hr76_}6Ay5kD?M#^D{Zfx_dEf7t)s#vKX}?=876y&VKn=5oB9 z-#SzjC-DB_8-pqz!VT7i>rl&exYESD2kKqE7#lv51FB*I$BRph(7^9 z_NgukL}(P(R{b4s1Pzhj=+4UB0xEUXzJ@OX@TGX=rExB(bL?h(%@hqaY`6NRVl<)B z_3qKMx>_I;8$v^$wLw{J?y+S1Ur?f~?Go@y2Xe=FB@)HYLb}pe?rf$%#Gearr(Ze> zKJxOs=XHefp}=XAqslih>c#~l=FAFA39KdFZe_6Or6>~rQ~Tq2 zK@3UFub)fEDr1F>;+0t%Z>$_PUb?hS!WuSSr+W@mtlO)i-ukx&>pREfy8E(_dR%Q% zrMnZURTFzyx>vD*pXd2n(obw~zg}tm<0Cd?FKK)@H-ZiMi*|YT2G|hf=B(tqi4C#` zgw^?bkvbT1V#&c8sVb|Aiu6s0S6tHb-6F6qVY?|CD<{^}TO7Zz&Vf}0U*8&9Q;=dM zIVIvn!1DhHi51|8Wx8gD#KA%=;eX4t{(S`VobTu^eYC}l=nXRw2783d0+p8d;}j_TNNF0ClG=%!ZSioLe-5m`E=QOsM!XK2Vb6tTF1kR$zjn@ zmp7_bF1`TuDOUNuUOIqU$E1~|-vLrLq8Mmh0O$QDDFwxV1HJlS}6lH6IL{~gLz zgEaqIRzcaW2X=H(qEMpVs_(};4fz_1Q!!yDA?r8{X->Got5@W0{k&!n+r7+D|62rn z8eJm7g||?%H9~4Q$p!;D1&_Etbe%nH)=+-g(Aww zvAX)(y;gQstnoRlWEkUxwJasYQZq7GYrgc$lt&V4pQbH5Z@YxGH|b1C`F&Wk@;0Df z;ttlBNT;Q?Kg8E?dPz7@x4x&L=tAlE(`V8-o>;(z3*$H9WXJ_d#e7wDUAFT zJF~a<9=dD%u)cr80?ZABXFf!BLqJwL`Tjfy5Cn2)BGy|VMcpukruPA4ge(6}=nI0J zW<#`k@(l_ab}F!>1VhQQfX!PEd!W?$O@@g>F_3nS$BPcfK>4HKv30pYAQxU8tx27Q z3QGNl$96k_5`D9nw&yEUioGHlo-~8XlKjxOVFpmSv}6+B74d&>cypBfI#do`vf=qk zhRWwK%d(djD9dU6??vZ;B04UZ%=;HAG{0Fh)HDM5+Lq(B)6ziNsI?xt90_F!d(Mpf zm4i~&6Xgs!X;9oZmr4>AhXPew*C-WQ$cgdWyL{yoWRSFWyGk;^D=U@DGNSt9x}m@#~nMlcSErjiTfwf$Hcle%$(`V7m` zl|Ei6A3#!|)o0TAZ&)tp<689PJC^r*8LdsNBUvnE{!pk3k{z6WKbnn2vL{WV659zR z-wroxayyLV1Kk~d17ld8ir;pK9mDc%R4>hJFCPe`ahW8)=)>?633iQeSd#44Q6ICjnr-a+Y_U@H=F_|F=^??&J$lw zAYt1SOG}RzhOB<((D!FYxBMpmuw_X&&Qs!)qO}3f9-9rHAN~L#-%aflJIo92DAm2?c0=?x5C_Z3hra#uPchTgsiz!J{AaK6P)9Bl z$+HXJJ+c7>27kk*cYc992~|N{?11c_vkY3>Jt5PFeqvLP3(}U@mI7=}K#G?m(+OHH zc(D@GQ{j3XVw6m7_TNf^klnGFwB$(en6{c}XK998J3N%BgAee5PH#f*ND+E}sNUSc z#)n~Vj7epw%@`{@NTcH5feDKF3F`DYn8Lw)mvyTM)6{l-{D@sG^sKj}*tGA#2SjN{@5WA$KP2>U zN9$mH36ayEG#G6z|u#GYS= ztlP(OzH^&ER`r)dX1W@XHDmSdVpJMr{Yz6m?jev>_hA-?n;^@Y7(i^!g3OuYY9mAW zkSX4qXwbNaZ?<*u-{!F{h zYzZ$^1uK$n7y>~uwAT2uFGRCXL~P&w9KtI6XI(GJK)@*{n*9S+;2D?~Twikm97dR8 z?`lng(IF{Cp7VF92UIo$E+yXT#)Y{L1^xN-?>8Rya%V0w#Y@zOpk<6_a!8yK=%lU^0lP#t=;L zWil&GnYbw?wH(!6mfw$w)#0b~&#_{H=Z~jfE4=Up=V`|SokkcJsXcr>7M2A((VYa*pSfY0R+@|JWM_`T)W@EN=hfhP%c^h>f3d_ifPZgd1fW@TtbuWdk> zo-Xy{Q7;I0=24{A6oUw5dOKMb0f>0bKIY%229ewM^;whTA>w!bbWFksL}XEK6Yo_* z1j~M-Q$F7yTztfuS z68IU{T#J4s4?gzZ?9$wB;PvFfzV)!X;PLUbeZS8SaBcHY5%(MfCknp}!}J_HuHb9l zmRk+?Q|^k%bM6PLgBjSoWazN2LLl0f3SIc}#1HN6 zOgcE$d7|C3@ClFWkI{~fB4J)Tg0^&Jr;jDEw9tD*-OkvE zW>k>?;=lx&yx)kvLwg?edW}go8mCYz=IYF=+a{z^kXHaZ+k=7Pi0!_~ZS(ZE8pksB7?;7zT=(+O0B-pQVd`)o6O=G<^pMRt2w&@E**+d00!=&`WP!_@2#da>`^A?Z7Z-r126^W%Z& z%R|pdkSat!zmeX``yA-skt65)OceuWIiuGDHZgGQ!i`G{?=UEb^(_Scy9aUo4~bvJ zF*tGMT~Edo2BW$_?^iYq&X%v4xwwMCYAOuvDjpbAX6#EN8-#)HkKFMdqQ!vH_O0>x zH|Vdb)y?xl1bx#qi_BU1(VNUll%p#~&%hX_iEdwfCc(J)`K2;CEeC1bpwYueP<_kg z(HpeV`0qy8{C(6Ob1W>|yAz~Nw+Y;|-2n4##V*DM!C)`&mi^FmS8(=9vd>&;{`cop z`s$p9!RM^aP$N|l{09cyk{WX$*vXaC`e7D?ZFaPGA4q{nQsRkWiCl=jk@!1HX$@jN zia0sAX#zn(H);Jf8RDXL*`!B=K|Cd*rjc_Oyr?jqH?A~+gkWBtO%^6d6!;^coL2ye zStq7c3SA*_T4z3>SOXH5)88&1vxCI004r|uGmvOIr|CiC0ttQRYWQ}AKmzT44!;AY z5Wl)S8~N!n#8IN6e4H-=LHhjeIEo9z#JQ(7%|t^~75ed$E<=Qoc2BKN4Oq zsI33v@!r43ZzwTg%B|0T!-xK0suXSS;Ws^)b~*k&jlUSCGfSs2&s1Z28+DY9mkl#+ z?-ty;5rP^0T6Rxm9WnDXUBhtgKmXJmI20Cp7&CR6n(4+JFjH_})zz&4%$U@bKA+2j z8IK;(&-!y>dVgHNLU|Xa?^9hI;7!G}vv);bO?}1GLu{0j1wokH74}xgqY9I_qx3$^ z9>Euv_573B>X5)3Z%i()0U8;3I&Ijhu-(gLjga_pLV95 zP{4fGh+X?75#^%LBHcX3#6R8zqMrtDo36nkd5MC#WVA_SyU^=xm%%9t>Z zqOVdVV2TAUu2+1Svax7as)?|O1{T{YtSLwZV@a&c&T?~cB+85nu)oVdVv5kO{OJTF ze%#*>)VzhnHR?Mq`X@;Im9L*Ol!e6io;zzx?jSMxf_~>TBN7EZUesF%!V;s;jt3qR zvH0+D^Lb_=EPQ$GA#MCA%%8Yxf4%lD=C0^wrWB}ScHhaDgajAN^e~p2w&%pOjrskp zUE47wU#0)`LN_L`>MCU(QoCdewgt!Hc<~=REvk(2K@&qlWl^rHcpW4aMoGF$`G>jnX|;LSRnVv zryz6w9LTTQ_wck0LJ_Z-$2BQ!D6#F-Ij(#ah}EwNXVwoxX@*So_3?EmyVvpfxa%n( z9Z3C@W%m+DFQr9PSsj41b^DCFy*89f{Or+O{SD=Mm-)X;%0anGx@^^`8kBQvxjemd z1W2e~vgoV}Bx%|@s%#IGCCBMkSxQ4`|8Jial`c!3P)uVUGKNkXrOEs_#W zSHoTxEKgs(6|mvi{$TEF(&fZDeW^-)U*?mMTU_Q#mK<%{V7uN zf)pBW%OE9AUyhrlA1Qi@rF!F)Sn=I$-ubK`R_NNP+A60ZnJ`Md+`kLU3+7gjkemPY z+vs+44aYLGcEMXU99T-P;@U+D#1f`B=^uUGSnxJynlM*@xyD9>#4;YtBvI^7_Fll$ zPv=9uIi)e7g^BOz;|z?7cz0`y`x1KVE@aQ@-bJ~oX(5gehv7NdIx#ND4I;hmYniVn zK?39HPBXVJkV;Wq7V?>b%)YIkDwSH0+k21g0fPz@X8v*dB$NZh(`Uo1nf~R>F@c|k zgQtPydWA=_Z5xy??>|iZ#R(P4{hH?=8vw*ay|e68N^b{GiHt zJ=!U)94b@YZ90NhfRbp^%Y0x3Dy*-pzqNA(GUMNOQA345@|vqpNbH5u_b>ilxS;|> zx-lhwE-@%PMcp+%^%Zh={*F`sxEnHRGU#s=J%SY9O1=-Z9YDA)(J$4A5K!C3MDU&g zb2G2iH!?ZserM8_50)`<%QgOCdNL*wUTmr6iD3HnUdK~kgE2dElk1z>ZY(%K3XtbL zhb4~gD*;6VSlStH(J|qJq}t`x1*>~V4nKTXzqAf1V%{2(3pcT{e)8vM+A6F*D4VA> z(}y*(6Xk=P_puhtOXUSau#U0N;tjr!@ZHFphT-6nU<6OnCLe`ckRQA!-^4==Tk zkMm&Nz$jzrfn!)_^sU}%&q1usFQG4$62O{f9^G0S2dvJ^6n8jkja9~rTK!L(kn)*3 zSk&GhD=rte2ZlCc`EBdYwV^63yJPowTe$H*E}pgx`O1lfG%o^2t(Y-KHf@WK?Fy#f zY`(la7=($>pS6x3;ls!SNVhQ3fbiPW0 zPN=$gF_FPi2dZbeW>qCypw{7TSmyO7P}faQ!+4$w^-D529h`dsN4w95(hUGrSvMlR z%mS$X1=}`-P60Jrqc?-l57eBg+K-M6Kn+nGH<8o^s-`#pyz+U#MGAYoNCY5VnqY#y zF4TQG%VDrG0kvL7WZ#H2LG?nZ{poYZpz56O`skx?KoO2e7u1OWGTW*9Bf=?A*1pJ2 ze!dPwgRdnc`yW6-tWRjF3o~R(?44aJ{tl@XLu(cW{3T+(kK%{OC)0dfyl3yEwKJdcz4~sQmi$5W5QOM zh1I(A$0eVyVC7+>V_(fgkX$mKHOt0^q$95@)*^l)(cF1>Am-n_u+Pj z&jvB&SoGEXf9_&bG5037gb6;8$QpIHtqC44culkEY5oTQ0RR6Cmv>wZ-W$h@q)-t} zDoT`ypHV_R$~V$Np(rD?kd_Edr9>rZNLpIjdynVV-S>8Hccl;wX_2;7`1RNM=e*7z z=e*DR^LZf7&U0YvVmhSzeK*?X&V!t))3L|SmqH=)>3TEek5G2@2-$M~6jbhP5%NBv z1l1$ILLP;LL*3mm>yZD(prNV>Fj@KR{0$9U-< z&Cq&z*!W1~2(*4BAG>~k9Ec|m5;V5A12HKuy?AB@hz*~rYjzP9))ig1+K50*c+34N zs|mzoE^qJ3_CxDux!64J7_{2nPc2ccg_iu#2BnNBAaw8XSladv@B=$dsr)W9(afGX zDifjMp5yjWyG*E^Tk^=P@HAAL-72i+H9&=@-Ja6!EGYHNvAVWY74kDT9oqD6F=TDi zU2C&{5|S0_8(Ng9@K{$zTS{LUg~XQ#=1zFvW6x$YO|lOrpTFS6=N`>|q(Unnx5fz`u5zmva@U>!+*Lw9T!HhNE|$VEqC^K?S4z*Gte zY1?%TXXCKtwXo%(>||_>wahcSLq?+g89hI14w6KY6=(DBBPoLJ_v=b1l14jK@2`+X z@}}>%0*4%ste?ESyl@?oweJOWJI^EOR}8N+=pd5PB0C#UP!!$I<3*c z*jkw*aWjpLEzF3z>ph5smM;^*=eHs5T5bJdvJe|zmpbPDOv1X6#WjIW1g!o^iufCL z2rE8_q>G#r#?s`?cS;yM%=auCdz27}nZBZZImeIU^8%SWFPu#=)NXg=M(Td>Y}i(R zb;A~Two=!@fMpEnZ0oXn_17Wy&zkn2KrJX)`oJqukO1Wq!J5yRwoq;GB2HuaFVwln z+_)&Z92%W>KP~ak1=I=7=sE8UgyCxe$1g0ryL@HL_AYxMY7R9fnRfw6QPglSrUXbs zrpbh%FF=mb60~m$1Ip@)H$Ht22a0=dx9+XyK*<^j{q@-dC}s1fY%h%gC83Yg^ZYbW ztn>1OSgU|MoZn%m-3#Q?A=}J$kbsmb8=~eN2Sh@Y(Mh2t(27>ES-Y-6%S-9SL5o9x zU|UJtkuwfW-x^ug9=1?F!;7xpRSGpU((fmk6Hw`~?56=~97-o{R6D4wh5YoT2fa_t zK;{WNR*$>D$sie0U4J1^~cE=7@>Sa;q)*jUh}eFo?D2S*E-u$wF9tV2`8s@ zq7lpXOCJ7~ya_8i>y@fQ{jt{Srf^kk1~z2P`Mb+`VKd#T^5rWtBy)sHF zZ$B)N=p!yVOnFo zfc;rS5lQ^q52;}WNNl?5u|KT`TSF3rhu36ai^e|rXMv@NcE$-Wmk(j%*1YQJ-R@Y+ zkY`q?N}D{qt$=y$Wt6d7-Ue!O3) zb=7sC{Z1NR`*9vf*-@5WaETPGd*Z$4Of zXLpTg|HB87%-H#LhZ!HKLMyh9rWqkkGH}OgzY?TPzi_JCc^c_O6#-<%R%GnI>SS}* z6B)?`y(!M=$Y52(`id_@23I0%@t+1{WGAX_#2I9m1;)uUERaq-k}u!10_hSh%71j< zA#JOKOPOs5b&@fF-Jie0 zFAzezHarW(4e&B_I7wDr26FeO-Td=y1WLum>`(pS^WkZfUfFU zCjB`a7&1+-9(@P`Mz{X89A!gb-VBgx&2R$d2m2F}8@@uDtf(L%=_a%({j1Ha+ycy5 zr5C4UNx)2w6!S|S0Ol&@rTpGnVAz&!bnI&dx~D@*h<-KD&eF;yw zKctAIs}$8nxg%Ja_&{SgE(B}m8TUTbF2g3hz4kt_rbu{Ix_GNcHMT~rvZoKkBFXlG za=pDMQiQKx+4J%kQXd>%``I@WX?=SQyB6}3AknG^qePiN160@}Be%f!t z7SfWegUc=>J~Z!NubqGm$G#L#e9On`LAgw7dOVg}ov9SJ)x-iliSA3;TQMWaNqP6Y z20l3>BhPS72lt;&&YhMakXXE;D@&sUveWb&wi@a|$&nq_2O@Hz@`9}7s?Z*&{q;eo zDSA0HT^re{v-ma;-ZZYu{&*2u-$$OE-CznN!h6*#B8PwyVlDAv<$|A7-k!@_JPY(^ z&pcHI_X6Yn7xtagX~6uRP`9`w4%+$>Of;t+0xMbn*Sm@TfUUZxt|U|r*gk$X7n}ot z9p~z@B4Pm80mac{N5+A@+jh%9+5oVsSkAB57QkBEUiO`#3vDWQV#HR50CU-a9)pvS zKqvR!%`H6uw3Gf8RTs_!rS@*uraDU?%{EL&CXrQ8ouzaDm0DW~?5 zt=-1C8cCB~W{cM^K?-L#ZzTE_(jFf8`R3L>WXO*8?0mTlnRf!h8v4Spt>}LCK;trG zm2!pcc6TE?IKe>bz8|(LpHlykQi1IcM$R;QF|fTR;_Ab$7ua4-v-z9ai|w})+_@4# z*e+@qC1!dU*%xkB-@LnUPN?p>O5JK~^BKK!+VU(ibxgR$S-ME4I%J5fGew$K!VU7u ze@Jmmc;lhkfFxi0r5$BdY;{(n8ZurXVb9gs`9Go9z-qUph^@xze@l9liZZcWG)pm2 zZ42hTGsv;GJcOxVv&^qYt-}!3qM&MN9)x+1%`i>%AYH>$w1Pr|{Fia^g@TJv?mhW* zl)4OR{9v#sC>I*fKh$};X%`S8wl&>|sD)N4GcM4AgZB(D2fMw;gG_*>`z<@kgad4w$f-ncD`-Dd9rewe1MRi{`_okVp>90?;g>&=P}x(YH#49LCDz?Cg_r(8R&nITr^l4w8BtQ_fxkaq zT=9kx-+B=fnHbs@^FPdKkp2_AvI9%2$B#Z0`iWJuKb9W7I)@Fb()H~Fej`EXDL4P` zMr=JVyiP&uHj+}rC$8tcK}sE?!EFBqq?IPi7JmJMi~wmRtI8N`Q(0l1-Ij~2n6kCx z_e^ASZWo+b!p8P)t-FUGh9k%J=c=r`r;zhn)n@;lOUQY@czt;48RSgr$wqJXK+fp1 z;(9Y_W#y`1c!Zzfv*E`gIZ61~Hz^H+Ey&z>SiBeZP=t z8^QV`^b6@JUP;!*(nzgd4tYP?keq$r|J-41B)VIgtaLbuEpqCAmCScyli|;!c4GUn zcEfmpjFUW;zj+tO4Zer@{By52HAG`t^xfdy6RLRM!&6M9&&Oig@r+R>f2UOp5H$C)BfCSh3X>#xmjjBztz34e6CcnGC=V%t@9-PS1ck9726J4#pA^un`c=l{&-B#|Rc zi@aU54B1HdSy5MkEOqDeZZF%Ac}D9_{$@#}pBJZhd{RKF?y-%dlQl>hezrSPC=y$J z%DtW5xgnCDIBgip#(Ec15Ax?4tn7X<7PV**7TXl{pXnRMSGaZ2cRy>4lvuibi;NG1 ztp7f*{ZSp#pIpe3x;hJm20J;A&tyYI@6Arf4YF$9l%p|J@zR7Ch#ndJ?FX;fp_k-_?!7{z_YYP zACKL@Tkit36BmHXr(d1kYrnwb>>3?QTj2C28uBRNz}X)yw_JV|uxB~kU>i+f0rhW> z{10H-bV^q$-vqj$M$n7K1fcxWiQ;GN0#ZCVB)@rqH?a?wuYA;m=DINR2amQwoz^GK zu4O$?;iVQD-6IPHT5WF=q+=j8RJqD_$!)mPHNEy_-xqwE7Z{$gycDzE?ufs8Bo9l^ zPrq4gbQr63uY_k=D`3OdCCNG8-yoqbLG`V_2NE3`#Wy`;B6(!eS){uLX%<6YK92r} zjEE?Q&ZG!zOOj6Z+M zHJ(Ih;g>F9t&9Uw&`|gj*Dj#0I97G}yZAy6Pn^;(lLKa9acBOA8^EfgulpP73+?eP z;uZa*1%GX?lvoPDJvDY)ru`vsC(0s=`|s$<9KE{dbHJ8C8S625Dd9yB6|6 z@iN=C!x;h>cyhFZq((RYt zKFAlp&mBAQ40&nS`}|LSM4s%T$)g*_7Wh?PWcNvbA%_RgSv7TH`xCijiR1PQUR}NF z$wVbG-Grl$sQf_sn!8FDD=U%m^pZPu)(we6!{^&vS7Xb%yR-3ACfMj4CNCcG7^@w1 z{uV2hW9b2DEzNv)%=}7ovI2r)@&#a%#&>t6A>+7 z#hh?{YZM9XFR1rS7H9=;?UQyt^ zO*9jGa}jtZ$SPg#L;@$oOW>6`0^hX8I z<=i9orFk#REp?k;U&;m|{f!DE)dC3Ljy-$z+6fxIwEOxe$wL)WZT8^ZVki;MKN(5? z3a<{=Hu9SS;lbmTNvUf)FnVXILlx^ZW_b?veEsNzrO6dd^XyYt{i*Nrwa<|tULr=Tgcu>V5~??7M=^1~%l%`e*{Un;*>Wr+^*d~Iu2u9QG- zs}%Lf2hQi3Cy*;B`n zSQm2OnP@B$I1*(?)81f1oY=jq*Nm~s_G3TGHUWz!|8Z|{tw>Y5$f; z@pVA0_(Z>ZVh1oRww`tWS_Wn_s#ZB=THz_EIhty@)ZcKj<#k;xPic0 zaYeO587$oASC7xHf!{1ifn`DqoDx@`377(2_J3X}8A`w%d3J7F{Wai94Ft{E)dEK$ zl{jS?0qm7!g9?=nz-%ZsvLK%X`d%sT&Z119JQ7Ow(R>TUsu|r(1z#W#UbZYfoeK@; z=+$oeQ&6>>ZBa0F3W~H6m%UY2gmei}4P(2TKFTOXH z+YlVouHM30LgH;s+UuA z3N+?Vrb^17;O1Y~3?qFMq|RDA*Be7YPC~U|x-kkKbE9_9`cYuXmQHA2i~RAibT=z9 z^4%Gd7Xl6;uYGsT^y$Y#0SFo^T;{pEX zWK8XxlJ%bOLXT@X2B#Y?Lqg%Pwc3j+7IHL3tf%uil#kH;6yp=2?qcfXqLx>H#ln(_ zHgnMWsrrA9_U!;N_l%FFv_8<1MZ?Ip4Zu9G<~KjbA6TU-Pi~HWg!bv>p(DfFfh!c= zRQ{v_T2Vj;3oyINhB@wxmkfm;cy%9 zc1A>OIk(`sp zMD|cvnNT|rs1F?NS2;t&5qA26?HN$X3!8+B0Vwo-@A+j_Dx|9Qf0`Ug1XtUkHsCyT$HbV^RKY#~?MYqfa)Lyp_i zIQ1J3ke%^ytCia@w(SYndCqYK(qD+~w$W=r3ZKd_IAgJpr}n}^Sx1rZHo0C%vjiJ1 zYzO}NHmv-h;^&!0#X|Q2^#_ArFlEGb$9t=AbetP6K2V|q&pk~~uzp)ZUQ^Ggy`}|J zL^jabuj`>+FW^b6bKzK%3jQHYOhgSF(Dy z$?pUHM^_)`Q|ExMtDY-fx%AoQ$m6O@l4TXs} zpLo7o38~V;D_;gngVXYZep}K3pT|E89Na^~y#A_{-FMBg;gWOUs^?^6Bla;G*L`MkP_xLrypa7d$NGbT{LuHUpMaT+@mPE@1yPpgr8NpGK1{7JGPb2H)GqwbJnT$vq=9;-zg=kk5qZZ zfZ5!0NK*SAW~9CyTO^Ir9em08!B=Wy_)<6px$`vIkR9E5bWw#ZNIGv#5*5kymnjy z%584UzZJ?rKb|IIN=X9dzenZAKZ^i6NSS}?!#m(OE1W$0DH^z5KO^?^v;xmzJaD*f zfs36UFaPe60{*A<)W@fjLE!baV1;EO2zm=LN=mb!L#yXd&yxx0u>Styh7&-CZPBF5 zw|mf`H*dQ2x&jD(uD&iD&H}-+3(u6^)`4I}SaXbh>;C}&0RR6CmuFZFY#hcTQdWwD z2BB26P@(cqv`CYXQqdBjB&k#=5=|{iyR`Sv{MV_@?(9QE%jk_1Ng?u{PtTXM4O}A}ez{yy*x&H1FVAs8?);=Z#tSYnl|2(yUxp7jh=?oR!w@#_GFbCQI~hBUE1GVM z^~J7hMX^dpT#wO&Pp@($R<=)Wh(@5Q7(`>-_h9o=QHLGR{c01)r z1;k&%PUGxZk&2(#s_=RHCYw2|zdy7pQ&|MdGd8ua>3N4)AD=E;+qxNj!yeWM??{7G z^@Gtmi+(`ykyXE>{raKSJN`j4DGZv$FPS-zBB0|?tbFmx>(J$K$vj+Y1rWUyeKXCH zfO4pz)!!@?XtQT0b%6$q;3})Ws%T(&G>KU!*#O($Gk^IO4dA$M&3bcC8o0VHCElaj1xrt#{&Nv{pMq>WwC@66SM92oehu(lYP6j<9s<5c7khNhANb}ckAp`Y z@I|xBGw$jEuR!z^ee5~#Htudni`fR;K;iMVua^R+>On}G$ZKFz*9Jxt_`o7=IbmBp z0!$0SoO8_zpuch)j!An6R2{{juMZ4?kEEVG8zqo=64 zhPF`O;4JeUVfo=$wQ!J=`;ABz_;u~u(e zbQ6h!O+#BC#Qq3&sIAoZIa-EYR;u(QhXY8o(caG9UWF8O%`lS}lSmtO3XxCoMTUow zY0G5-vK&uNnS2>Tw)gqCC;ESobNW%B_B}wZy6M)m9W%%s-j+p>qa*L?a!QiUDdfFd ze84ZW8~K_ie#{l@LB2!e3H|g1$aghUIiGL_`G=BcTKotC-m*46=jS0WhjE`dH;O!2 z@;J465pn}AbeKrWAg7W>ovo8cHg%W1($W>kB5e}2J+l&-*5Q1M!@fu#7}*y&tAkX7 ztD!ofRYNcQWwaqJEmjZ0umV5jGagouVtA@s?$XZ23WFzH;(ab= zXB4bkJN+E5FN!T$KSPIPEIt;P^bLw)+8$kHOG2%fUVYHe6f~7m`=_R_LWe|8?BMrv z(6w{eiSt?%h`U7-?8zH|vdU0mAin@;1ge3UR46b^)d^|EpMYhNvt;>n9k3lz)?HJg z0q00#_M_Hr;K~Oi1eGiXE<51V0b^U>or~KdH`)L^F0S3!N&6; z5xvmq>3j<4#jvCYU8t=1V~v?I60 zGUW8Dy~sPddGDX_eaLIm*EBx-1o=zftC{+Q3p|&uH~4xP@(pCK(o!Xnui$hZ!nw#B ziPbwgvlDr@)*ldgWRKjxxyRqq(vW*`4J|YG9^5=c(A8r8t!W>U+$`{~u%@70ZhJkmMclzAxEZ`0f z=#nL>(5m7#vP4o6>dW*bJkITb3h5)qcS|%t zc7eU?hm+C}NP6n|Y(yQCCdzJ5s$B5d^dI@g(?VF2PwBpG5Qa?}A>xWe7sR;dn)`wk zknq;uFDTIud$?YIldt_kaz3j_Y58HKS^SH0D!0L2QY`B1Wg$yc3km&h$d>3|)n7b= z?0?G@CSNT=4#NQ4`f`vPx~`c#_!N07Zf?|>xh%-lu$86xgUBO!_h=W1An$7rL>x~> z-t5tZla&$3d;L4I_Sr||WeDjs7T!hPKI+yt3pf09RI)336=A9@m9$ zNA~5G%zz3{Wciv$MTK8MM&+Ki34=9R*korbEUu?`ZaIkwBn%CTEKMW1fC z3p>TE3O8y_VGCn*`mHaYu>SNPnPs9|u{?H1OvB=Rn7zB|CsC7y0W0R*|NgiQ$zBio ztPh`uqP4$%wydv!nxf@@HlNOgrmcLFcW;*gUSFx4-u4v;RGClLMs7h*lhl{H3oZcp zPU?b2Z)2csoj165SPXj8Ceu1+D}dR5T3PL-AF!qmjE@->0DIsz*Z$Kua7wi{01*jQL(AMi+>?4Jd%fLCJt_TQ-l z;CXvrA7e!VPxR^gN@0N~BkztZ?b8R&i133AB9Xw^xNV5-d;r+{^?p*fp9Gd+6W{Od z7hqT?zqpmd0NR)63Z-HJZ;m!etXJkh%+YaIGr9v^9n=E`d~N8!{>eT6Rzi!(U^dsd z0_uh@&CmHhgtEG=36c{1kU3H3(5*QRzH4qvMw>pt6t6}3n^POHC_u?#*SR*VA-<1@ zzqbXOcE%U{kU5KZ^*kXw`!f`X896%S5AKWm+y`|^{>wLp)$y&eRX6mx{h44 zg~8vL^T^3xqHs@R1G0zLELp5yiEJT1cTeSe$P&(=d|7t}d;4x^C0F+$Ezt7Lr|ChJSR=t{?kti(uCS9bI-d%v8cZ~Kpom!=4c!Wy@r2eH|VSa=9NcBl%nK;RbLfy z=>8zEQ^nCwO^|mE-?QqKb$~0hzA@pMlz^A38_grH0{4@W>Ls57;HkyYj}Zm=YIP__ zjxO+>mBiyB%{9Q=@yFcOX^Eis8S$mX4+1yhbj0?x_Q09{J~b>O;O*4p*lv~zuv0u= z{M!Co@NVHxeRXqS`q>^{YUK>Q#+upSb`_|jkNi%4?*+2cwQ|=dub`(?=67jPGZ6SI z9!-q>1ngLEyScI(nsQ~y%`beQ*1=s{YX2`N{y5IrwAU6M56LX^+WHPv6>k&T9y;Qa zgM`Y75Em?wI2&>7btTrGkE*ZA-iA#@T(vM1MQl~NubAnB1bX#QnQ<`oq@R0l`E(4) z#y3a51V2D3G4cG{BTm@6;l>W%lbexgV88LeyaBS3neUf3KS8#yWc;PKf<@b!kRzQglh+51By{6iv;<)ow?TpfUnPW}DN z;d-PeZ~ppv${VSBO9iXr8Io#PQM+R$v1buiT32%j3A?p_=37Ky`-Af&MaE8i9&#h9 z?~D`H7!$|IMN|0fUC75U$s?GueKPk|7r@29@!0u;58x?m@K3k-0i}+2Uzo=EL+y0x zkK=RR(7ev9N^{pVbS#OUI;vF-gwea6|J*d7=b6Q(3x|w=Y-DEsbI2H|b&A0wZH++x z$(`7os0GaB@p_M)Q-F1Cnw?5s1#I(o1D(yuz!7R>aQUBs^Z1ae&g47bO2&D*c4z_j z0x!a;+ZMR_5oSV`F2HRyQKrzDz^(cD@`q9#aHDE2_v?xP*Pz4LTWBM2IE7Bjq+bKa zO#aSSv8TY!k`_NUvk+K))dz%4{t9482p4OV;Rq2O5!CII24V6rW|o<01Ay z9NTrFuW3DWLuBU(XFKTh5C0?aHVoR<*WIiueF=>lKF8czM}VrCHpjQ`UO>U6U&N*} zCmHBGu)>tQhm2%%4aI=Gn@BBo-@j1i0Mg$$naF7~kuh+kaH(P*vg{R! zVydf=t#D&+5c@N-neXn$yse&E z9S{FcA_bX3_h7|{BK9sKe|amJfYd(Lmax8WNDe=GKrZkf_Wavdtv0g~yH34ONiJew zN7Cb){Z}Ti#mhs+;4lm8gXW%VRBXWt{)g-Tb~#{f>Ld7GsvGr*`xT_0Wk4p=%{d>jrn0BbfPx2^ORuroBX zjy6aDXUlpIxx1Ty^WdE6hISv|@H|YkqPv0fw{p8eR4#Cr2<e8-1BTuq`(IS(^x`^lkd7{wip?mSwup_#@Ol z`BSPZy#-1S3~p*Ye;G1O;I;gRS8&}oKtiRg6BFY*%SA1CSa9KQM9@Zctg4f9%a<(2 zhNK%c;%7Ev>rw4=`77VCrf(avS8z`F-clV#PU!nv^;bfXW7w#1agK@XcQ5Pq`Nt#M>(dXX zJ9fxokzJ4UtwEM-VBj`TL&g&i;gjc_kWOwIJrgh31*GNc9~?A9avI&zGu9u82kH_o z$@XJc58*#Y)fd>QvNLjn%w=pH8rxFfQ;&^?HYU>wKd?GT1$VnG!e^S-qd#YlVM@aH z;$YANYF5iyecE>$8Y%LhNl`}7cKl$)-ug7? zJRz&%XOvMMwfZ*TUzgn&ouz5++ zAFVlPw$DiW?3@X8>`b`x|oeR+M*|^}&OYPaTQ#OYrtbhnfvAiP4NCMP#G=^yQFgWS5ARCs}kL`}(qtBK>v9 zR=Vq|yHyccP0J&VLR^uh;S&44;UhBFe9~2Z5RAPkd_PN8G15k5-m>@2BUQBc*ODM> zB+WM$xV5BV51pMP<}!(00rh(o|4m}2ke5|*AO&M&B0G{MyMGNOV$kGrj*4^27goO;{=qm1Uj>e~Vp$dMk;6 zw25+P&SA)yt=b3Jb75J+#b-b`nWg+MP8zx^!V5{{yV7)#0*zkAXFHeYQ_l;5+3h ztC}-}p(DPS$O6i^kwroE6lwJ(51~kncG5djaXWNNV!^6N@u0Cj5<_(N# z9UbxB>(HD2#_+#)^FWs<+Zn_31L{e84=Bq4vfu0Yd%|Ksbh{n>M#dPrHQ(gkI!lJm z{(67+;(Tc5Z038}UK)jVgFn7NK zUQgECW42coGnTCWUFLNWi+-Ajt{5!C>Ona|pYIelD#Xu+o>#-xeUH|r?UKQcc*1IZ z=XXdLU1=k$x&eD+4azK3e<5kdW0$`l-y&sA31K!u8>#FA63grayg3IjuSi|P-qwb! zpJ4=Ke8hOM9Smgl7x6dT97dMKR3K?*0kYyZ%iH-jAgf`{t)*2DS)C@lA#uUJsQBCC z$a{#a@WaQ0KU_eT_PsT1D^Fx*hE#c6j6_C;ZBSz2TkQ34Y@HchfVBCJtFp^2k?J{< z8v4myu$M`_myJ@8_}nyNTbLzw7ckOO)Ekj-Xxc+M?c5iCAMj&Abu)C;$nI#UBVL5%lFWG+2m*mDG(S}ziN*?Bm?u%+UELa zmw`EO!P#iLIj}a(EAkdD2A1xI_s?W}fTiUd+rCQ~SgWL6yrm0)S(x+vuJQ?B%x0*gI?Aa{eFLh#a?0NmQ9w?sJAL(y0T5|JkFF-Npu3N! zQpyPh0%69iB+O6H2mZU5DcBRO!9q&=Up7EvY4|q&n_o~52xk6h&>_JXW0$^nB&zdHpd%*y~j4NlW~ObXNn}-maHO+a2w# zLBENVR~0+m-@ibzodm~mr~-+3Ui~sU4D9YLJ8Ho2LIPjvOx-aOcC<-z$JX7zHp#|u z-|cJhdGHmtdw1Nhw)Gh2hV4EqZ#g8q2Nq)U+P&?3`p6jCz&m*UYV+8lxgmTXd;Rtl(CH@I@8UaGF z9RJPHJ&W(>OB=h!xPa!G2Y`p<{`+(KBwj*eU3mpxOGi# zUKDgkonBfuZ3Ki;iPFit*3eOrpxPLf3T-CPZ`EsUUw@0M-68Gx%aqeDH}_I+D`Zne~TR3UAz|2?zgu}GWb4m$rRLHf0ut}>E# zNT=kbFb;$u{WEhH<%SE=`v;r18eK>FlV$fS++2~aG15Bai? zgH&u~Nyhq^+Tip2Bk_(`4`ZFR0WmiI8&)W!|?s1 zT5^^|h!kGMJA2O^o-TGy)W2a1&k7ePe|fzCs*YY?zi?w8)DxY6C#o6W1;b`^sfTK4MlugK26wg2xxA;b}#X9IYo$qjI9%2 zlL<8U#gg`8RzUqLd#lc+1gIXd3m0;30wp)7%~)+CkZWwO`w{Yhl*)SV>39l=$9@M9 z&SXIM_&Q1mhC!EegFU~u3p#6_tP++L0%S(yJ$)$yt&31;LGN~WzU-;LjNL7${j6lY zb0QKdj~j`*e!L2Wc@hRmr3Ku{nHapkw-3XG)Ag#x9^vDbgTmGGTd^SX zaG`>~9aikBahd*Ui?ybqF$#89u+e%T%U*U7wrB{17HW>|{WhxWR%l`8wie&hd{@6!rYXL%)iU zd@aX3J6ab>iJoU>sR>BDoB1uE+zoq<=`8Ez4r13|rw#p|QjrjG``fJ3HS8F-b`y8W z#rDf4-?!1tv6;IjHRQ!@Y+M>FJ2bfvYh|_b8AcOWAs@8utDG_x@ULIA@M^~=eGAQv z&x_-ouB7ezgY_W9lYVjs?GmK^y`G!t{7m4noK#b(yHIv#i)2~NDAedj%6_+ShK4mg z9da%z(9~7&{^sx_Xfyh+PRQ&mbeQbDHSpIOI(tuW?J~L0wOeP&iWSb#9e8c^7Zp9| zNuAb~-*Fm<@w{+P#Zn--hKQ6atN^lT+6~v8NkEQNu)Z!70^}E`e9mr~2J#$h&#mV2yj0VzBS84bi3u19fzB{XcHk-vz-c2Jt$VMawQfzkPs2ZGI{39=u1g*2ON4_B zM-F0-93U-$C9&@GCJ6sp_S|5*B!o-vL)gQ{OAYOMV+$-77=fJot?9I9|0$#WbA4u=M?NtQN^!#xO_EeEMpRHm`T z^~DJmW?5`CQvBBg+SqoY3Y)w`u#FsQ%4uhT?PtbQ1wK|_yA$;}bJ|F3kB#MAQ#p+7 zLEe+p9Y?TTYm2l%{{-9CJ;*oWA7h(s|NgnqUTl5+?=r~;v1M8Dq`gQ5Hg78@-8`s= zP2WH1^3Bg|ZS;t1V=Hu>6AcWV6*HSyz#i^^T!1AP%ean|ehbievdAA9YlF zI+hr-3rWkdW3Kz&zDxX)n8q-#N~`!3BUcpz&)CkQJzardQu03VoY(&{UOtKU5W1vh0%Y1QPkkJeyt!)Dz~n z63s1ve8O?>p4xtByssEh9&8LvcDncGPWVEz`TNM=153~%BcMaAkPa=gf1gBCPC%=} zVHM}0r_eg`PBd24650+1u6LR{Lz~dQ>y#Pg(8j?Tvl_(@t)E3i^k>GQ)wS-vz|0o3 ztb{+i-^T(iH|tiJhpM63?bTcLefr_jJue%NuZ z1=L<`XVNe&hUz<8Hc{K2Pb$0z@EJ&Ul58Vy zEkY!_-Fig8P9f?yDC%vXSu%=;Zcdacu);$Ug7u)BK4ezc+RvqO;vaj9d*N|`6==F6o zFLH-B1F15an|#>J&BgB6`3akeH#lDt6R|~j)LlxxWQRX)6Z(1qY{^Z%;b*acEv4c? z)f17}60w;4ocA5JsES5DHo1e%(;oU$-KN<5u-^ai=~is2UbANs+rY*dpBo&XzhL98 zUw0RtoO%;9Qjivlj8Nev1>+0o1eF&ND6hm6Ik(=g$^cpx`4vkAV@&Z&iFQDt&zff+Ol((K(`>JClYF28(6+o7rA$e`E_GiXvs zjxb$Yf=1GCZ$<7gF4*#u^;^3d*KJ&pN!G$!@5 z_pl^vs_2Qw11uN$>qC(`jg=Xp`$V=bV%1-_S=#iUNMd=dTYkj^Yq#F;auZXrzWPRS z$O(GHi~4o;Jncx9y|L-1rHJHq3$7;(uRNXoQ*Owjm?hbC}Y4VPAmFE{yb9JoDxNH+nu$9R4yR4+hu!{h~99!GFx>s5ZrE zhz+F<&{Mq+1kxIhhUIz4re(U%202i`KjeIH`#&i0%%drfa)7e_e|-OWPea9)+T7NY z?@&dtQp+fD9jb?IIG6VD0Ld+X`e?&hs9hLMsHIDQ`twN*9&@?SApK|e+J-+M>ltg& zr|W=ur-lV%V}QInNMYa293UU;xKL1I2V};#LEIvr0o%(VN7@TeI?w5kj~X<%wu?4p ztUrcDRfm)L6rxfmSJ~A{|k@)G`m1A9P&TlXIbbz`xy> zdkabnLeEE=#z9dZMQo#IHsrC(+ z9$nm^{cy#h+)MyH^#7b|E_1=~_hY|Fbefphn|buImM^Bu{arV6?!@ecOc4qJ5*An= zx>Ta$gC)9REJhl}SavU1+fiy0D=wsr4smN>vX9R1hi#J`5e#Y89iVrQpvsh>19osyek9A#Ew^~m7W8K<)<5V6VtecmgJz15C zb;K8p5#L&|?poVKW3CI3U6Rdcb?4$Bifz+Ii)&3L>;RjC|Tsp zH>|7`9gmXe!V1E38*Y#`qcpB1Z>aR{do%okH5{*aZf`DRecoy;kQs)Ui&Rr+5yUC z{O)qZmqA6gm$+4j3{*~PM)?+f1meGcXEQ&#Le&JZd2RGGRHq2!Qa%0#HUG(OO!m$~ zjsH!WV69(JQ$4kNh^}lWGHVJ+X+VwNz727SI;athceSdWhw7xXldq&~pz6B=vGLDE zsM=L$9P=O&Dp&40eAT=K6|FAE2fr^t`Lk3$0c~F>UA2$!`S}J)4FA;K_>~NWk5na- zxfCI{f4odoodL2q9Fr%Q4Ixbm`bvrOkQl(XrTw)6BJGEqJgdKgUqX!fXX6d9w46Ig zJ-&^W;#q>be9h5Mwmxr=@eoGtO*=$?SqT$fhcT~KStB9Uz-x`)6*JHOrBh@1ia7}c zll(bl%7uZ;l__Ug3iL(NUa&M=t_Z#hS zdMrgDco{376J`~IOtGTRg}+Fg6Dt@*sSxng9PDbjQEkt~GWH4M2(%?dGF{gUNL zqmXR+O_f^b7^Gcip0n5HfXp+4FPp+ikUf)k?(G#u$g}%+>-_$oP|(4v<6^-JMPFi7 z=lw}ga__HOU!n<=3Nn`N{e1vR2aJ!L*t!5^y8D!LUM4^pKG@B3;wF@BPn$Ql$FyLs902tb}_Mv)_BG-UULg{GK^LgqC==NqioAT2TI75@nb zNGak^EXxdnxMh9Uuv=pg$xU59*&q&qI&alGPt1V3(LiJ1#dl!PekCfSAMk13OnvCK zB6@LF3+`Fr!C;?wi8yg7jO=bZXSW%R@qC>P&3E)MMeM%FKI~H_x43QDQNbyGPAyb}X`_(OJGRfrXje zYju7MSdj7i%(<{YMWHSZZ28p9;vPgK1e0vH?P942n`10yC97)JucG5DO&K<`OK^!Ca0T*#qD z+q6-6S;Z!l3wv*9%R3F0O}ogBH1^<8%PFlS{0IC8eyY!WY=*Em)=R$98xTz)EaTHh z3vvHyXtpG)A&DsUs%{}0QlrmlzPQZ=X~Ky4dYtUWey4cI_~_}TK@kd>3;726 zTBjlFlT2B#<^p8L9+T7L@qnD8(Yf8y`yuCrM5u|tBIM*#pNn?-4msJn=MKr5L5|H_ z7Aeafat^%nqP}1^XyvAz;dQpFK;t2_{?8 zn}0d!f{C4mYc^Fg7{7dFCdq0EV^?*bc4}S2=y%agV!S^wGJ@^xYe>d$abC5)3`Gp_ z6I}DxJca(=J&UQY@1f6Aw#)tnbm*=$p!qT8H`?8O=Gk#b1x@aC-HD85Kv`e*6y}#3 za9>hl+sgktSgyx3O^won6OF6v)yv7?p?q^qLzo48bV45Q8vG2ecr?ZYZU}pNrSE-N$ z`liur93*B?xGr+dh9wYXPg3YJ^kkrJo_E;(E@^y>^u}_m6KJtA`t!6_D?Y#QL|xPU zKH7y7m8U$`(b21C|8Ls@bfKRdp7RBCJNkUNmR%QL^zwHHF*&2VpQ-rOMgaLSvCoAv6g?Q+t0Fxl(4F{;cU1c!x?eiIn;5f>FT|DHsky$QYvnI- z3)@I^-rA$R;m3zg?0;2Xu(qSa9-fFg6+>xrysH0as2_Vpku-urJWbjz+EHO#H|d)N%(?H^wQzYX*81Evp_G|C}!OFJb$ z{XG;st9rtoNP!owxBht~&`6U`hOXcWKGFQ8PuTRvr#3FH^X}T9Wsgk6kz^UP{>-er|=&zw#vBf6;s1X!J$ zMz?sss%k@jbbCd<-Rf(BZk!9M`4UvT zh78d5*Gg4*;eYsiZ?0d;^-O%0z|lv%;fN-8wLYy&4x|3Ptb=lFSMc^1D$;dQI0!s% z+oVi;4w}h-)$P-XU=+A<_VKb1Sh6w6QvTio+n0IizbP}pnYAx!Pne1 zhcca0nFGOR^j5d@u`=-U|L|!n`Y{CX&xv0Css}-d=T8kY7D31#ZE923c?e^O*Ag`f zfN-iOL8=A*5dOI(aD>YeBI3LPkHt_yq-bU8VdHv;B;-2DkLE(;&n4o#NIXQ*x@SFW z+sUuKbZ+-mlf` ztva}yt_(v|p!!V1D25-HkxB7i#7MK5u$aU!jLxBd%P#ALvCSoM_spMyP56UOrgD(J~x!*}SAWo@*bZC5i??Z*2$XNWJ0_2Hg@yr!!2aj>Ik_*Q*Z2RuF1OgLEm!GBj& z+O*qW2(7M3`7Xf&kq`XWcsn8?W~RT@l!^utbSr6$<=Y{dU{7s$n+{S(U&G8B6G&6K zuc_DN0O^U;PC{3BA*0hio}6M2nFBdBDhjQTRncRxtNA%(n>{Z6kKz_&FG-IickhLq zJC1@sgZd!HIb6{>b_{ZCjTXrN@j=ezv!6qBVj#OeX&l84K(<(g`pI8%ko9=RlSP0Y zGL40`OA0n1LxObT#_Cr{8&NhF{<|9pDzu+I(&<5p)awuTIYc4BKk!e*2@Z$}8gcE7Jl8waQlcB z7G(x*?ADgT;!~7&GFxh~*db6~M4O6h{XKW`x@Wn{$ZYPjgMZzPTdie5F(KovzErJI#`1-<71qK^>-6Y3m5rR za_1DLa@EcJJkWvhOKDC2jPx+dq9nJqDI7yI^`F^haiEuZ9A{I27@B|Tp}M%92#=as z*hh1^!J~YS=*qG)1dC1XV!C7wQObCiZ>${>Ojiu=_WXd<;*pNQdN)W9P2qIAS`1k# zL2`E=hX>-V#4>_VwGvua;cHNSYF*K1i~-92pF~+Xs&uU)-Ciji}Ob;5ywC(cO-0Y#4Olj0w6WZCP3-v?GnVPHu!oLWV<|(5X#ZY+EEZtQ z4N(%p{Dr@J>C}ms@06;*$zwAR)zV)|3X71^= zf=4-!ON>{ri2eS3~lou+sH*UGN-veT@ z--GvI)KEoCW1jb?f$Eg>u}sQcP;>XHc9@F})QqO)9b;evlCXqLvzIQA7 zz{M2m|2Cjz@U3gV2|~?{MHlygi%=b)Yv9-R7ph_e&iu%X1LCtk^>zo}LM40Ug(5{Q zC=Z>S86nj`>1XYw65diMp}KnH_U95Pps`&MV{C!!mTOd2_rxLn`XkZOpWKin@#?(y zQD=w<$?p9SZVz7CVe$Xg-lD|Wd2`RZ7U(^f{ewVz10zElA_WKDVRGp3&5mI?%s5l? zqQue@bJlv4a&*(NFj{}?WVZ&EY*n=%`ZU_y^&wA0&5Dm>{jmmF;m_7s=W--ADD4r}M*Ak8617H>?Zam@yIx@pR}uFA z=D;eykGVe-C$X|=8}FVTZSBQ~*7!90bTjlgM5^igss@j3LbIK>G9mEU$XiR-b%=`=xNP2;4{0W0 z5ARM)L-v$~{mJw!D3l)TQ(v@#Qc;fQ<3`d@o|>6e*-;FYze|$(D43y|iATV6Vjt9O z9?Ri1tbkgQ=I|z-f_f+%54-gS8eWALujpI^jGWYrRObisY40~0$xT4E{#)r{PXKbn z!g1-ooqRaM%^!!Afc%tlM5*H+kdMvIi0^v{Xk+-%u_p=|bbbWh|Mv~*w$*;EcNjzM zBR-DK<26tdc!zQ2Arn+NTkJo<REW^KK1 zkTJZtz1Xz|NonRp!A9{TAE!MiNHWWMxquH^bCC{~Fg= zKg{~feM2It4GVr9b3Me)i>3N?YD;o$SRtI%n_?J-#JAZdp7k48bM2F)8@mYB2GoCX z%pJ%2xFi2AmGL8*-s$~$EE37CJ}EbB-(us@&Ms@B0ybvpUm1NgfK61ZPj#-ZW7DOG zT~Q_Z*mUy+Y5ZLqHi_#i%DmIY#x=phrEkI57naoElXBY9`m!pRzY{N_h&Yze& zTA=k%S2Syp9AypqYAe5w+N*;x(50U;tf%-s7=aW*J7leB8t-T@p zD`3X}4rhln19?EVJt90C8tYDu60#3K(~IwVR_$BRe7GjO&gL65haI{t*+>t~qeD$< zH6zfx!IEl|5C_eFue%Javq5vMj-@^0duY~qvFJh}0!?p~7lL|Spoy!2g>K3i8l^dT z_Y>QIe2H!(@6aGLoMcPP`%w$E5ufNN9}PlvBVmr790HZZQzQ*3XDGApw;dsSLlIYY z`|*GR$XajfqF<1N6#3IF-$j!l^kQIyVed95-@9{`raKn{%Rlt+deUQ3TKZQC4`s}{ zzbdg}bQTL+b=*Jo#A2D#fh(Fz{#ZFfl0Teghc#lq)g*7_VV#mf-tFNE#1n(pd>!r} z`78BdtmF)_7A10W!UPnd�r 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≪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

Pz6~w? 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 z z7-m2{A{SYPX$V3Q7+ zEo4n?_6-QeK-PI0;uBhWNLa7lmv$rZ2d9G1jP@73^#%Lg#md$(Nw zMj>Wy>t0K~z7L}-U74)z{{p-6g`3VV7$Esv|A2zH6XfjLwao?DLB2mnxyOrFd;2cg zA=cG2h>X|s_MpCt&*mas(ipTbjpW|0Kkqlpx0?y8JJ5oKZ_VVVspv50Xdao&i$IK? zof2G{z6|cqs&s9w0MeYqe)qjJfr5o12wXb>#WXfQLNAj+zNTyRKAj_w%;d;i7lwGl ziFcoLLocQ{sV0QRAHagiUi$SYTP%@0m|}Y36Bd0C>(KKcU}mB`gW1(0d~qfqB=H(Q zLUOm~BZE6w-N_Uogyo{7 z`lb%#dNxlJboc6i`8Q5RPJjvt8q$Bi?4gYN)B3w0WylkWb9-7+1ED9nuKD{~W7HkJ zYd1gJVZoeV;=@@xEPttL*ErXNl_|QfU0WTnTspnOGRqb7>uJoFi@Gr^_g&K+ScWKN za{ZVEHYn`aI(Iw14Juq8Qri7I3f0Gpu8{gvLnX6(las#|6m9gUSRJH+cuLlfou||> zxZ+hn)Ke|YZ%TJ)EPsF%&uWHwmglkNPMql>mv*dv#UP!`br8#RuN-|CQ;(TfgQ~)B zvIEH4-W2tdhs-UiKQ79VP=2&nOdlNZ72PZpA3NiA z_|_?i>O3##p1O$9hfT+uSEaDnXzaxLH9M@&KA@g zu0DApvj!C#ey0@ck3shCX7$pcN#Ll>S6Jz-#vI0ub#aAtth6xpnbgn0h6fHc@A;__ zf09P@jN4;FVy$V3#4J`e8a_?rAYxAOU_!m8ES!l7AnDWWh1_G`&(_8iLY4gMVaqaG zXe{z0`FBDbng)cKlm7k!Ou0fd5~hUe--mBS|Kx%~QDJWFvkTxw?_MZ=z8N!jpMIo1 zpp2ElN)1QU4q)TIT0gNYQ6#+54m>`JNH|+budMkM>q91D+=4T)v@h&@Y?KhjURN2k z%&3Ee(&8ucgBeiPZOg%v89?~-h<1Fc51L(XCg)W6LsMV_r*l^bR2ThD z^pFsQT*B&cLuFF5NcO*cfaA~}XP5n-tgK?KV)L4z2@euXFT3XceTppxA+&t%W7s^H zz?NR(iWqThaB-;!D|C38*V8Uwia$4L&?|R{Ig*iPr+*g8QjJ&lS1v>2MDs>@x;V5j z`h4&&FN0Q-4_D6~^MDoxQ9n(W6liSyqG3EO4P}z-9w5Os!`%6jkaO}ncPY~~$U zIZ~Y{x|@hi^SjD~=x^An?j>?=UkbJCIvU#^caRU)FW^Y}Hay5z9u*9J&P2-CD7#$sE#{{sfs zIPADgcOaU{2irN92j)4cvH4AcF|8LT*1YBAtBq5@tmiJX=am&9j6GxpPYOfXcexF& zi(jEB&iT5Za~8DOo0N7NmP5yP(oe!%U!kLWv?i+09NG>!X0#>v11^}KZ_wru+EPURXf; z+YX=3-eu^@@+)&We-yg5(V3yx3_4O;g~%RhK=WvTO6$25sAji+;;85fDI7{!V?D;0 zN^E!+d9oF2PA_ivMMq)F!`N@$jlS4vWIaz4d=k4Ce~r~KCt-I}sD|4o3G7&wu{OWH zg3TrRIn_t6Vio5jyT<3f7{~Q9?@1gxWTwo0|2|y-b(a{osMz(P)kmlM9JMHPIo=*5 zI~Wc?Sj}{Z@Ua^P2Z^?eUOP=UvjK09KK<18~4{gFS)Sy+o|}bS_bUaCttfI)rD;; z1J;8j;#mL8?APq#U(A+OKKg|6J;cVTJ^v+6gsPQhwZ(o0Xes2^q0?`Lu7tjGqYQtc zPvY!k{nS|ISNKah1C2bfDtgnC`EKgcLFqxl~8$VlGr z{W6Pf!GE=wXWFoCx<9cyatbqeN;gJy5mMDcj2rg7fZB#sPA{|f&~~dVb;DBzdQ7*~ zXNovsfLr@utoBzBjV>Ky4}nUQV4+ORgOEtt zGiS-=v9R-x^8Vg$*klxS^?^koc5D)L)7>s$Ur6+pe>epW>RdcTE3=J*!97Ex{ngmt zEG+2c+J{{u*VoTP)nRjW5!uL5eJrP%jV;P2qODt{r1XI_C{;BT@lX+lX4>xgFBXc> z_2%6nod|R2|GlD-$ov=ve|&Z)eG>&kq@NndDAZuU#vV2JOQ8FDTVSGA1vLK{xEePt z3FWNGB>WeR!JMS7{&d_kEL}MHNbBldZ1yb>f2FF3-JJU_xiS)Ppaw^zJ}lvodDqnQ zP-z?r-S;>~{5KA2rsirts>Ghm+Du80IBd22daa|Q6|3kcSS2$`G3ZlEk}aHrVi!O8 zc^efVBzPCKE3QFTwwato(IptDFOWZ-dmV;KUi7fB%E2&qt7?JWHyD!8Nhka@guWjV zGw;1fpo4L!bA7cE>bJTNe5~exv_*!B6kT@Ate#lrzv+XG4;_o`;})=E&Wz<_3>o&f zX2uQ9Y2eV?9LJE_1{}@_vPydL4u>T><)glsO<~>TZlPH^7X%rk28A zP1xw)p>|L~0Xy#$Ui(2##DPRLsnPsQ9M+m_;7}CDk;wEhM~2HdVoSH(E2o7+3u%y; zqmBJMS?2MZKd{|6PO7%`6xQzZdlPs30kt>QB2GK~CQr#Uh69*FdVu?ihQ zFgo(6W?@?oM)=PkDa&SoL0O074@#WS8GNR1Yfcmz=6TkrY2zVPMYNE{Boy;ZeNR&A z&mn;&`!v7)Hg<{9dk%ZvM<%^}dJ>ycj06ndgkZ6Hav&T38;HWoyTbykP-j-fHlDf#9TjuL zQC_b-{Wufk*DenuMg=K6bxA<9>UkC|ZUJLw^aPt3zW~v4*DG$x97YUkNGz>~V33iw zv~}?|bY%UWD|%i6bpqrc0;r-PQfaNRB_b1xzu-uE%yn#`8Km%}ufpD-$^#|KfjG>% z86htwh@&4u_-<({;g~kdD-!-C9CI*mnAtHyB6k+|-J4E09QG?|CR7mnN(_H7_K0Jv z#Xg%Hpun;UxdZPhJHe0R8`q!mKT!Rj>FYbY^w3UZx#br24hCla_KTiTg%M9@4PBZ_ zAkM3meW7%Ov8|K)bbHRiSpG`lYfu8>0iA10Ok*&7D$RWJeJ=E#ZxP>{OK5g{zQpPl z0&gE{KRMU)0TV+ucx8>4u_5{4@tGo5>^k8y!c17e!4+R;y~j&9szudfHk^cGZ|7K)Qi~?!zOEev=Mi zx@L5A@3q=|oarTO4P`w>ERI9q@L!q8jjYcNmFVUiu8% zp!$uNIRm{XbkKYaG$I(mpz=F$1%rAR6>v9+x>W>Y8vzzEkO~t|KI^Jm7QjTB{>Nay za2S8|x|1tmFYotRF&Ud(7}6rlJf6>{3;8hC8)G!?&Ev{%7bQ!RI_#)t5#rW}uwr z75IoPSD8#A{mrn?l9B#iO&pHwyWjn2J7B(0*pfu2(=7*lrdfPD0Bp?W@ILwBbLpINu3>DHv%*L%T3jGBn z7;=a*>R#E?vt6=x8ihFgyz+3R2?58LdPo&|&)`G^6+vcM0VmrJ_}9LFf|KcA+9Cu* zaN=Sdx&?eeqPxkDvUD_1vl*a$`X*dl8KG-_Gzc%<}e}Ail=F<5Q+@~JLUE= zT7qcgTm^%n?`yR$H^omFF=Jrsb0@;sWP!c*VP}}+9L(ywF#=Qkony|*_At3{@4Vc> z7cg;0C3=-|28b>Wbc-kZU?_zD`)A@F&oA2;DOQ-EL8VL9sB{rxfFtSUa}6x<^BKM) z5rVB}>&tc)+pynj*-T~kK8_RxUF1>G#BmNWt>83zoOF&ld4}u>PCeImx_oL1r>-l% z;20(1MCrgn_{te1el1{KpODAl<1`B1bS~H(pLs&@R}A7C^NaJgRhW{eNP4!b6y9cA z51bB*ffiOd+C-g7=quoxVvZ-kh>3mKzHVC>+x_v4#PT*wdKQXLGsnYJQ$+`_kQ_`^ z20nQj!~&B>{b~98yt94G9DQ&jHgfq48!kO%v9n9$F;IP_c_re3h` z*RU9cY3B?l%a}@-W|V%qW!?gl9%iN!TjDTQ~;U9an2zYhyO~2SN5{u*gMJBKk}k* zvV^p+@3|>XYrZ0`B>%$chTKt)$DTMfyU_U8Asi>#(oCM-zK6uX!~_*OdK^-#ZOK0A zik%t$Oka|ZW8Hq|i@Y4%7__$dX~!%W$_3L5D4wiAn@0jC&n!O-e3g@a6@CClor-zP zNG)LE5EqI4g}X52zgikY7Yfs(&kxZawu0&ZXz+UIKA0-Hu_z!<0u#4SUcbL(52O9( zfAA=4!JtV7qvKpTw7aTHnuJh5rAEsvo7Gu#diCOl+{24lJyX8J@x==}3QT!|w%Pam zz;0MQ%@2vU*!zzg(C=}{eWjAfgwv$Q6O*op;SBqP7sY-w+gYXvtd2+y&jg&a$G#qv;+Q!HbVc2^FXaE$$8^` z#{U5T0RR6Kmw7Z5Y!}5dm83|Dq!bBJDN#{QNrYr7QYe(tB$6SdLZ(oLgk&Zm^E@0b zu8WI1xbszSQK)Djn&k8S|Ey=NbJpJb{5FuR=0Y^H1A)44@~iJ98DK=;+2CZ>3G4|H zQTvtq@C*+Q`v`qusW7LLgD+7ZgX=&}RF95~s z;hP@Ca3CfzCAtJ6peEJ5W;HDouPaI|eb-Thb>5-@vb}@Y<#RG`qxos1aE`d$*6~LM z+!QQ5YLDz@a+}>o6Xb2b_>qx#3Hd&s1Xk>CM1ExUza4lQd2Y*VRet6oM|RNEC7+0l zMx6qoVR58-elhfEyn-awp28zhOl-V8<#eVq5+C_&zIVeT6)LZV9vC00gHGwgNp|7~ zU?46gb8~4Y3_8eaS3F+~>@{oX!uATl?H4NL{Cfuci-ICMx>A8pF&GWMd=&U1uUdbI z#{*Y#@nP=nQWt()=fA<%{J_-}R=kUcF+54Da#TXD&yaUTtMQI>o9Zg&jkpSshn zz4r>XtxtRDZLNa6U$5q_yzvcb{W^Xl2ARklnj|mYY>Aw|MC~l4A>@lGCC=L(MgG?& zrCHB(vcTFW zF<7!c5Uo$$+4nB*IMgm48(6za7>JeAnL8yyffDGb7arsRgHx?K!5{L09WVAvTHzb; zb}jz3=?@9`b?gR3*(Mm05x?>NUnlTQ)LUI*l7MT+(v-KC1eTqv$iE;Rpu7Fml=iUZ4LCb|Y`XU|@b}J#vcUwG=)} zAoG&3t5y0e(hgM{>a8@z9-_qIG^852S3uUyR5@0*PN{RxUU7dKz9@(03c4z*=; zGmxix6c2bh0e$z(`<`7)VC}eao_4qjxQ9yZQyxkK-~3c~TEQR;>6Twr{9_gr>UE>K_bWW0xap*!s07lpTXq50f!`_|Y^kZSu) zH>Xks%Wlb86#SmU_G_P5UY{t~_a8~9L{AUtPc-ZcAL=0McI`Z2X9#kAe;p2z`G))( zJV%uso;YNE>Ue&tJ`PE59n4F$L0hp-aQ= z9G9v6eFSXosK36v-WH!l1y$U2z67OVZw!TV??e0I!lgzVKS7_DYN&AEPoSSo*pi*{ z3|J=9Hh+p<0@pg>v5(Bc{0>)Eua{X0Lnk(0bs)sRkY-OQ|BN~Crey|B{CWtSm#3eO z4rKzeD^g`={oI|oV`XSHN`BZc~1z)Vobg_3$$2Rq@ z6BdcrvA5{_mxyHnNPF}_a%ZvyGE)=E#{cd`4mrF|gr4|{ZSfC~}HvBleLV^XPP=~x)9~MwIbxif2Xa>gF?~0?uRA4i<8EZY6 z0-m$8S!~}+;7>>$OLI|#q02iTd6|>~fADGGMQ7%MKej|HuW?=Q%e^OM2etuYML=Yn z+Hs(CDJkd9pMb7zsds*w#n522-b*++2Ob5|eSo zt@%O<(jRQsn9ndomNn~O=cxeX8q>?G?s*~KbbpRviy#ge{}_H?yWoet#|n-{2qIq| zBp>NJA?M#^w`wdz=J%`(=g#^feYM8S{%2*_w<@A!K$+2hWaHfjj4kPfmSK&+ezMWQdtd^1${+JIYGi?r zo3h0FLtx0J^2S&D$H0HxU+k}D3A_s;>9gk!0()9MP(fiSFtS5g6FWnI8XN79ASeOd z4Z&_c>`l-z5+c3+?H9-nB~Lt`=q;~%k&pZbL3LX`%OZC$u;f?3 zf5_f#zHilzJvi80^6_U|3{v8nCfxh7uq&g%-|u=4He@|9?>+qx6TK{Igk931>=85e z88CrB54+S8qz~j8smt^40chmpn{Omfj(B2u3RT@EWDBT{>PnI_Ctj;YjZ`7PSkLmNL_JGrFLZQd?;fa}Edw z(eA{61nB)%-7xzf8)$aXr^xk2z?9W`sz1^LoOLVJLKKUDXGETOs7(QWq`6H^%t7F@ zP2LO2O#^>t+C#NY0pO+?o4G|K0bA+t`Tg(D!r<#)h99NWf$}kecwF2NNCWvfG&N0V z{^95nWikQT1)Api5lvXIUA!r#WH+{olQWdP2e7+6>9Aq?CZt-(l0Ns0B13I&`Fhy%Nt&WhC1s4we}`e zWVCiuj-KHnZE0>8Gx!_!`ZLDdt`=e2TtTfXNd!yluk3nn{|4gcm4?@JCqn)9JyHdF zQ9yLDkbj{q2m?2cxT?Pm1A3!Wx5}+qn=xIeghBr;H7%uJRf;ol3q%`Cy{&gk>1`REoAF? zbHyq0$S@L{O|4k?FSl>In8Gsb`LzAmr&a$2Fv{Yv@q> znXof>dI@v}wzZUgcY=QFMZ;Zi73eZgE`;gn0Q2%IKX;#G;4GohzwFQjF4w`!KYu&$ z23HXqi~@i+@r)x`DF?hQMa>^XuK?%4BJsVd8Ngbr(iIjo4fN?{KfDw70!7obtIKjH zbg{d$B{R&RSzXd?;)EXLgsDCX9GSr!cFAA%OE+vb^l)J0 zBc1yi?pFsc&} z8`*t+?*hhDk$I?Y&Huj=AS!=R1dyQ*sknZ(rgl%L&A%_36(Q zrK{kjnR&60*AZwHQ9P|J$Oh7nM@NIW6rjYd30z@d0D}r;vm@)>fF=1Qi*9!oIL8#@ z4;HNlZmWLB{2ns!TpY)pN8bT&`|=QY=K);hE81DYlEAiFo|*SA1{m1TKM}JGXkn8z z56*fwvL+!>J5c@NL3J!*936c=`xaaGs7`a~XOJ|j zI{f9GFH-zQXDuy~kv{#wEa&;c9T^-qa1=L3j*yH?RH+kkJ(kSqZzCaZ#eNeJ69RJi zmtXK_-XMpUqH@;z8M399JTh)gLPo-Pi1oLlNV`6@qV(>6*cad{q!RfDJNM1d|9zLi zx{6W>&(`gKss?O$7!9BctA=z6ZLC&X2$Z zd0-lbG4g&N0CvFREnYcifHU*nRxVZ@xJ8vu8pKS2o3!EF52+#GRGqSq5;6w1Wa4D! z5-VWT^t!&ev;%1M$L$lT_o3g(=LA>l5D+g$@5`AggT|yJ>SeLjkfY+VZ{+g=pPqS1 z?)$zG8*&FyWVTOX=Lo;hPF4o{`nZwK+QLY4mv%dFLj@U5D4~(}23ZvX8Gai&kz>`P zCU#2{xx3B`e7V(wT=Oj7b35)LC+B2%_J%je-aGgD@ymt$UfX1B>Z6GClRxBsIoTpb zuz&c^Y(J82uK&4GwiR2qmFbP0x`8GAVI!CQs~|i@Jaj|GEvR~Bay_hg1rUaprUs?SG26u2{jK1Cj>Sl9=@Csw--4pEJvfl&RosG8; zSG|RrMfo0nYxY3=lhDMoM+LC(nd6g`9rD=B)v}beNyV;3If66oL)h<@o&ECo2-3Wt z9r3$VhYXGM(Xto*$TB9924nk>T`N;`{YV>fZbU_d8azafhi&@v24`efEhh$B#UaZu zK4ja!&&W_8Rc~xCM4CTqa_!y8%;h0Rcpl3H}qNpVYl*QbE+wH54yg*X1p9Ir`@iOUCRTywdk!EF_yq+ z{7MV276(@N3PxD-0_Wtvv0J042AoxdgKuMD zhuun#xcdNAf_=byvnBLC*mgSMoC!I0O z#IWvHiC6H+qu6nL>Dy`*b?lA!CfZMVhm^UsYaE93k>0Rb!zv>h8Dq|&fBF$welH5n zo$o>Rxuf+eujt55v3R@GqXF59Wp2;cDIjZ+LEW9Ab;!`o4GQ42BklE%{+`<;9QZq7 z*=c+MyB$`{cFFuj!m>>|LgZwu3bMIITy_l~-!#%Vr`-evW$asJ8mZ7&dU?Vr*9kfu z*89lAEg%~{XlT{E4D!AT5bfxZpGi zt*qFY^moEgarJybYgsLXC2iY6-v1e2DoFEMZ&hK_mF{T0ALp?%z$ZdOzZc2MKmP1V zKa5nN{Dj!tH%JeN=x*5@h79-KIR$xZWVT(YoBwBnEdS_LhW1v-iYZAa`}ZJojv75q zlR!rQ<&X@|6*wq*;F@1_DN^e;T>X2m0{e!PzxV3JW7nPP6rXzm*m{q+$|sGE72BV0 zjcV@0a80(*WI!amV5O|Opc4*_j#6K?;f>ZH(%ehCt_jG z7Mq&xxdJuLds=c84f=Y0uPv5*3tgodqT5~Q(E8)c$J?{_p)yrGC3eyc5_ai^Leg5y z-9~+TFESnLUIrbi{3eO*M?7|Hm`uX%;u(A0CM_H|m)ay0y8&tImoqC@bmO4-(`5zs z=aAvGEhqk^7%~mJm0ILQkQr=CU#_Br%#Ac()4CN4zBMr$^K?Y|i&hJ>uWOK+IghD3 zO|ai6s?h4dG?MPM@OG=JAYt7l!R-G!vE~jpDY#=CGrgkEMU6SZ)8T5(#SelS+ zQO}pqw&J_dv7KD#x*YlX_pUY2r)2p?po#+2rTN*C^+$m&{-;`r7z=~3;rj}H>;*<> zX6C`QtAR0YGnz1a02mEnqE&(CVDQ(k)Bc&JKrb<3Y{;ks>QLc;)XrTnup{(y>E9se zX8JOuZW=)QU<<$8SPmNUPiN0KjX>e7AT4RC4Lw}W(p*jyW61(pD$Vv{lda?h7dbiX zxW7{_MbH>~%z{ETJw3Ouw-2AEY^X@3WPF*J+P=^$!<-+5#o}OkBCSF?6d8NVE#fTS zE^yLmY8a&z2Z^okqaQv-dUI2wvTZujc2#_oa)>~RrsGi7a1i!J3iBleRk3q^Q=pEz z0U~99eA=%QD|i;0W7=gfiBkQyJnJW9%Is6&QLjO@DJSfp*e_`PwQE@rGX{vP^4A{L zTYxNARUuHf7$}x9_4kQi7W@^b?#;Rb^!pnM^CuWE=y;5CzsVH_%m3zDos@^cJ5kqq zp9=%MgJ#w)L;z&=qs z`xiGOkrG7_x}Eb3X`7dR3yjE;xtSFTdz)R5Y*Gfs@Zk^A4QBX zOH(xU!@89am;7_nyz?ZKogy_p%yWk(lLs;5G40Ua{>+&br+3e8vCG3ab2l>fIRBy)EGB-d(` zGzm`N)7!f|6@iT9vwtqO{Z+OZ*4D^$9X-Ix;w3y!SzQC*c z)A{1sNcC9iZ?)4IX{Jq!7dc%+TDePw-RO0sWzJT3DHkJ6?yAU|HAJLtN{1loA{@Bw zS*m+|p~p!%0WI!L|IhGHSJ*FYe z*5J=OUsb5s>abV8HUOFz4UA^dA3}RnqQb3Jxj>S34*odL1hN3t(UkBK26W%e-yGcv=~#If>anl0<knYQYp~*UoS5 z7FfQXKRtE04I6`hgo;pkNJx6p4SuhX_$4sC2@{xLUw17VzhE#pIreBU*kU}yWru|FC0Y-zxbGN0`y1!9P*AI1B&d% zvd~}YKzU%TYPd)ZD6!Y&Lmpc$^c@m^@2z*x|DQ#1x}-mlbL=l?k!a9ee_rR>RxS{= zwcj2Ha0J3O^)+7-y`b@y<$KMpMkxP2_4=5=Qpl8#uUofk3WFP@JJn_4v4HCyC;x94 zt0TKp4zKFPmgKd0Ka(P{-NW)^or5WM$#|CR3Jk%X?WT2ByZw=zMHXpBHSBkNubtU) z7Y8m69@_cJ2M5aSryP_&;(!hp|TY z_d<}6Q!^TGJA=)VDZe*fZo;bFTaBE$buf?W?NpO}27PWSI{OO=L*}-vcl1pPq1;aE zL~CCrG$@H3tJMvJHpL!~gIkNBqs!vz&8dCRHC|Shy4DPOd|S59NTjtoA0lhKFB#nDtq5F)v<$c9_KupLzb~gJN zv>(+FJLc91DEHrDMYl?*nV!62CMW^LnM`rpMZS;}p78IPj|awxxZim)@fiyRFMd$$ ziNI>HMlIvrfX!khgk6j< zc8C?(2epR{HpX$vpe5`=O1aK&AcU%}O=d zturRdB-|33#cVtFHUvZU7^7mWFdm9?ls2!tx*t-yDxBNXRnhO(@S!C)1u&bLwW!u1 z56hP|M+SUq#=8A>KR<*l#};};>Z0g7NU)WWaB^9J9kh$q+`oQEr2JO7*r1IhqhB{R zvAVHagOGbBDse$?%WV$MF6eIGT=`IP6OvpNzsvmALE^mg)9VLXu~VieKz9FSB-EV^ z6ZbiQ_$Ds+ng$8$)5n)uDSyBUs`r{hN4v4$h_C8>)3x~M>&MS8ig!X})fDr>smG8f zJy=fto(JWLJqmBVqoHow>CAtpA3)3YG(+i?L(tafyj7-D8rrA#Pm8$3h{j^Ain)xFQ^KCbwEOog^SB@6sv`N@S*f>Ktr72SLx-iB?y7w6f z7GR!NPs8_mRV?4rJ^oAe3)UJ(=WM<+k4?lJp$l58v9;G&bMdNGNazm|-F5vkcDShA zyy&A~}F_PHHQ^<2%5r-ZB)R`yy+1UP)phl5)z_#)8 zZ?ZZ|5F@ACSKM;Oh9s%ajM!&by^`MK+rY% z=G2K2d*DmPr58J_!yaOFcVbz+#Bx7FordDO?LEapyCF-W*zG4l7Q#+xE7ujJ zV`Oe^wEgLSnDr@9=+329EdH9mNa{a(tW3{nTALP%btc|kQbGH%$t7&UA&-wp7q}hv zP7T`(gFl+TTZ;s}8xEZJu}J79zA9kXAYsDt&`mu9B;@a-vRn3G+pK78bM-oG9eJ=Q zZmu6&KIs=(+~1CkZk|J(+R|8SF&TH$+a4=$PCn?F6c%L{wmrQyj#&ricNlrHFv>o& zqCmS1?%vN3{c3Im>6YuB9~g>;7o8?jdu7I;eB;^Rjp=)!`lipa<+3ACZ`iCQ|0^1r z?ymcBxpxLodTNZYX$)EebW={sBtqNrNx5@=9?*8s?Bj>Z<0J+v+sDsa9;HEp!jdo>{Z^<8srLN9l!uy&-a_t*tx(BwOWw)|hO%LSnQaC_P_)Ns zzG3bMM4^&(L}IldEeXv`+N8r2cihdD5Z7sc04x8vhwNl(}P;5HVyo$p8y# z7FiwW%D@t8-m-GfC0L&JDpgHQ94kLan%;fXiPcR*#Nr*Fu~sH+N|N>+YriHGIFZ+5 zo#Ci@-zuyB0RRC1{|uLhBNYr3#Su*-BVUv)WR#s!u2N}Gk`Y2=&x8_%$R63dtY`1N z9`~8g<{6c&G=!2!iqO};aLzryb1v4h#n;R)ZDNh72UF~!2&|UnE5Al=#>&WIvw?DZ zEcZ(jV}0X|rH3Q-)6oiIephEDQky>i$*7uOj}m<-MwdV;xW_M`mlZVt~p9&W%Iuf1t8|bt>fqHB{a&jX2P_6DsoQOq2^Eq1=6r zm*LtrlrEYmwVPx@F?;Frk*`URM=E$V`*9}_RvupvNq7XQ5&NZ=R<$9f(VUrX&kOL? z9DenMF$Q&(rE_N+#4s?;?x+gpU>r%8F37PQ)6OTxzIE_J0@0_Iy(WXt9j5(9GTn3w!1y3D5h}AP z3=?Gey>ZPKUB3=^CSDBzJM}<`j`$rAn0V?U563=;N&Ou2ISXj%2+slfr1#K;D=R4D0oX{&7I~A1;Gau zF9c~rem-Y?b;}3HJI5rN(z^sXw@a3sGRh%q7tivnq%>q`#Aq5_FM*fQ^E?i2vyiZN zc4Ba+3q*=vWMz#=hi6Kh?AA^zV5NDcx5h;f9gUu_jTL#J-(=hTcSM1 zReB%c5~IQ7iHY25MQ%(J>ZkWQ7J}*Ps}b*oi!k%f`veJ^1SIHkwtx1{MZ(*>Q091J zBz)z5uDrU5gm5={zTg$iBvbEo-x|P-7XtS_#i(LB=kcpWu~qmoN-EWzj|!9Q3}4s; zWn%1P+^4#^HjJd9F}~Crh5?KJJsindM2|a5LjhT2ynXUayZQD{u)Y(TNLQua*UZoB}jO)_0pMK4M`CeYaxv8ken-4 z>U1a(Qg|yLFYNP$kI1 z%ysDR4u^=&_cBwyD-hxrcc1>eD)`AUlt_Ib!jtFWa#!+(;9h5_Mq1w%+;EG}TuN&~ z!_t>V6Lk0RzTV{dw^8o+SiaaeS-KW|Y#V64zbHh12G_GwlRX&tlWwT!)i#D4J`$7R zp@gANYY!HEkixK|DZE{YD;Re8_WJhZMGUnddm9i(F@(e7+~cDW7^FH!{>X9~19rPR z^7HrLGiQcE*^GI7nwFNS+mVe=w5g0{s-5xS&BF!SPgv2(mT$G#o`jZBa!*9#JW>A! z!Pw+oKPr6fU?=1%Zbk_KwEI*PW6pXV6;GtPoY}|)0(>qF24C-W@zghO=AmY z?qA%$TMxlq$yJ(%3>V=};p@1E%aNe3_D%Iwf;ikD2AsXp)D6mZ^rK!bRCtJ`nrk~v z053Mj|8NW#N3C-sI!jt~Xwdm+JW5#x@6Vg~zW&ftJfzB|4-X`tnqa;-YMMe4Lb``Os_4PyM15Ul@ z_JwII>5v`z6!MPzm@&q{;f4x@RAme&pI2B~n8ql{bXwnJUW{on+QFXj8sq*jWnGK@ ziwUn-#4a1uVUn`WqpP*_m@M9%_p9j_CP&nz6PrkwY{nx_cE5&6>EEo6Yh+>KrAvN& z?V=ceD?=*BQx9Wazj|SwqhE+v-MKtvFdJ}!uT9|L&V zc9o-nfeh))hH}ge#;rsJLtj)g;3Swr#j|K4%Cd}UHzS}r!5OcO;3=aP>#=L-8C8=Oe%uisEdi3`I76@%* zR(HR_f@8n7edT2^zler#dH-w7OB?77&h^Ax`geBg7ye?_+S9BP!AqEF-sE7fyohP$ z=U&*;Q80khnhNCeuc2PH859m~CaMi6Lh(lY@Z7{2 zlwLls{P}wrl#;p4oPG#H>5tu8W^8(Fbb3mN`Sdc(L3DWnktZ+xc(D{Ge2d{c*txl7#5{jufnv@E;RO{ehJVHc>X}vRE;F!E^oI5v<^M zk(ln_#&TNKeIFX4urzRs{zrlZ7TH@f*cwwXPn0m`wL*=A+oZHS)pz((#(y+8vmB#V z{g%E)wc%s(Gq;0%zrop2awMem9Ym}*ZKZ@ghm@~k1rNKefuLAEa`rbZ-gqTx^xw#>bxtO8X>*uK@sHbAwWCI=Po0@MhE(DK>5fEv%FBUa`| zpvKaPh5g!9sGgK?J7E17s%8Wp>*s_(<%3DdH>H=LoWQh)Li!7(_ntb5-|c{cp6MhN z-q(=L)38@OEC^B;1NNqYAw-QAI6v4}2Unh4C*AH9e9FNyli_s)?>?t_v8%nHI-95o^Olc@vC58R_a%lr{5Beo_C@(y8j30H&X`a`TW^PI0^VZyqc zD&rrY+Ogiru0r(VBdjMza@E9(V!gk8e>Hyr*7f7iz{@9C8{f#=q_>XMvrJ(zpPjIh z)SAmFw-3vu#Hv*rzG1PSL+mdWY0Rbbz9=>NZy!)48Sl_E!RX^MVXsgX9mc4=1;6|U z0e3^V%9M2>S=^iLFvl!p2~M-FXZb^+F=4DS%?!#S4R`cNaYJP`_encVai}qJkvXOz z3w4DC;J{=H4Zc;L5;rJ7d>iyeT;(-1=AEQE=AsOZ3prM`MorL|VxU&>R~(2<;rue1 z_0XUtwfA%SX{a;($X0jq4pgtaGo;lMgG$Cx>m&L}P}*95;ioeX;{$pAk4VH8tW88V|HCCkX zn;qD8$Lg(}dvuyiv2JaoEl*MtiSGB(7@eoE$^Es^O`#IR#k+sYc)lUYoc0Pkod%Np z8oI9>+=(RJ^yW=l7R0KhglV>$*u=jQo_%6JHf$E0n|o=Cb!w_`$d828T**Nm5%y0@$x#r;@I24_Sq4aHPoz_q zwxQYnq}Dmp8EBqM*1J!Xg%&1qisxBoXr6K0t?n-h&4#ZjC`AC0|5TBU_AE5vyZ5aR zo1kI*xBc^qH&E+9v|vz(fy#gYRTTy`C{@@WWlpyOIU)-3r_I74sqL}-)c!hfH|&uU z*=LL)rTky_*lc4u8zp^Kc?t8k&E1()`>_0UrNCzyW2`RZ-T#5X1nX;lA6cCvVUwCm zNaoqENGezns(4+^15Y(GTLDJh;5nF#gY$`gse{OyW8<@Jo+loJ8^`dkN{}WX#zr}pX;NCLk zcc&1(^7$=MD6zw_o9PUATk(j5QeDH;h4FG@#M zp2b1+{xjVSlK=S5ZpM4%ssd!j-E*m2EP`MIw(FbLW*BV1k*W}uhM84`DyAWau=IS@ z9jjv&SZ%AGxx6-xL}{9u$9EW!)UJN!EryFCqwNNWHEgHbMSQXTkp1G0$Y`vj-j=!{HirfDHbS~*@-g{ zfbyayt*7e}q$qQZ5X6O`pnHDEpfLa{ecE!hb|chxd3c@TmIBhXi!*<^G@#}C{hqa4 zE@)T!t}gWZ0FaN(nELXHLT3%*v8B#&=o;Mryqix9x?LW6hvdJ7?zEY#e0Oi?)?)Nr zCecAx_@}SC9>_tbmh0G;CRymno8=O7u!FWZ(>xc0N@(HV^tGl|g{G<gEZ_;|QifwCldoN9vB3b^$j6k0wb}?0yUAacVZnv*jvrctl zkF5vOjFB|<8yb%54K~E&Rmy%2p@K9M_UZ|d1L3qF5i8d&e-uiuvsys zAKQ}6bZG6(uz9xk>#k@cY-}|6C*?HO@P5s4?byQ70}X{!J|s+k5F|07MUBoP((~gt z=O8ionIP$3GZnOsi`kRTLDf;mjNhkhfq3vh>$eDJXjTPQh+D@F{pSHXW9sTVm z%-toSi+V7rg|P&>J2)7fLu{d!^~x2;OJAY)1OKuk`!e)NMJa3T{sq08J&Wg_RzUBC z8?TR1#-NAchn7XnS?Dro;j-Jg1Z24_s@vH^(3bVRM)y@GG*=H;{f%7);=RmhGN9JoNoX{WLK1F~eife1di88#OQFxKVG7~e{4EEOoHI{a&(@^#O!rHU>2TID! z5Vf8<@BOijE#FP4tBuUC{i7DG?E+UW+P_k6H&Ub#9gn+Ee`BsBf{@-gNJ%}ktjB?R%@ z))-FjgY2lk^9BM3phD%K; zKl~RIT!W#PUFqxUgCXc^^klo86%73|5j&r93&6k=S{}}8mtY{YW7Fa8QyADU6@J5e z9{Tq%7~ApBL9a(R)oj=m=yrfIIt9UhT>9dtF((Rb>rT&`e)L0gUScNSbRZC!YxWu+ zz5Oz~kKxPv*^6hX~ zWb(ikW#h||vEkUB{yRD5wG?({AAS`UFM&NEnd!MN82e0YjmVV|IIx5MI^E(74l=4d zx^eU?4r*!kQQE)bpr*!@#QwWDxcgvzNZ~Q;Ukv7d`7##!&gxEl?PJ(! zGiva$h8o+oug0onPhj)34eNPhbtFo9NzQ$Ggq6IpLPj?1m}AzOeS=9I19e3jJ=h;X z94f69_@+W(v9IVIQ!}V;ms4+0Jq1l8xAO0uk%m@D=jOgb2IwGU9Uo1Wg{~Uyx1_9Q z=+!5sy{q^N{k}W=brt1ckX6)6n0XQgUncBS^6rJf8O77#Y2RRQtWD`@WIGH7iV(k~ zR>8pdWuL_3#n8`Tn>Tz{1bT+}PMe&416@q~%1@0#pnc*h=^BeAw5Zxe_dos$L=r1= z`K$v}I>@~BeI^7s?rZ)huXKa|%V`(I(Fsg=nXkJQA%n$->@~O}9%4<6l=h*@R>ZB1 zgKJ-xv2}`k!$;o^$=0Lqb};l}cf|c0AI;8U-}$&d-7zO|z+FNheRmQLMyFe+q{t(M z|4^YY=O$9jzm2Y{2_VI=n>E>*6DfOg!)~onikZ-JOr>DJ zoe}yr_ED8y`vZgg7EG~!*MLHEB#d}x87K)iCDP(8fb#zIJe{=!P^LVpx8uG5C3Hhz ziuxc7e)}ozrt{CIoxgO0Kk`CfS<1Qd|8+z6(2uSQ#CaflO0k_jasXPJ;|P;pRDk+- zdZtZMpgN0-?OT`~6fnG2(-l^{l&MtSZHvF`QDeh*Kd*XD5EGT-3kX|mtXK+2*UmmG08`B zyRc`C%H%rH5<6c!*9(o=!nQF^o}UgW;kyRY>5ITLv9y&2LlZ0xO~1Mn+`)ndcCtAM`4I^Yx%@gQTGQ#j0~M58gAhQmtiErJd?ID8<6@`Y4@L&>VM<8MrmLgCg*v83Q&y&*4z zQ(=FNVBVkbo7m&JBX@z`5XnT2&jqQ|*qS1m?6g{mP3rcn8vflnItD~HH?MU`dT8kvwtsfO49LvU8kZc4p?g)z zsDGC(^qXHjHJ!f>g9UUaHYdG+GBLre{d*3ES~f(9v2HM|cW?YqdkqY~Alxa6qle*e zT?S4?78n*Q{*r1-fT4$S_63&jfZ|LMdyyFogGcIyGe%>fPq268+x8yl@?I1uD@ufR zN3k`nD>=|iRmVC@+XS@{*&*8&%TQ$b;hT6F2SjNld)Z&Cz&Ky#1Mg3XW687E(pRnW zu#QlDJ#Bano5RVw=)I?~gXZ$SMwtcd=9tOJoZi5`HdfAU+G!kgi`#bv)R5BEZZiG- zAPxon3=I2EpOlcP=myY+WYsW+Ohnv znf6h7e@svLbXy^jAKc35v)>0LLrzQA_g#U_P`$hNVN5O&@YTiEPZCPd79k+=fcF)2 zPM4}bvgd|gvU}=+<1-jMbYC}5;vrC;XNk@{_JN^#9=E5x;V>LK!@C2SAS!xI}UJZUAk|igcOk# z_q%ii9P$VZ-6h(C!`{7W%&ezyMAl@0jl&g3qE)&x?T+I}@}TRX?(;aJKKMMC*A<8J z-8?=E&*D(!UH!S?YNR*@UTD|Q!GV^W84L?E*vsRsc+`FiJLwv7KCa!yR)5|#Nylnz zv{-3cKEj0+D&v`sa%Q4f(!43p-XZ+}jg0{@X4v!6lE`|F+saIX0&s@Ub7i|R$h8jJ-{ZbW%_}=DB%Id+eo#Q~Q z91DzC)RyZt3&ALT%1brFHW)Ry<8@hE4MuO2D=(-B!pKtbEt<6k7?Gbg_)%>O!=fk3 zK1U@1rJv3$I8hb`h2QBfs0%~y6CtNvW>e59vmJJFTLxPFe$@zqIyBOgxgO?hLV0wb zi&-@vq)HuHVUA_O!1+x<`6fFo_@!A9$n+R%GiV?C{@aDk_xVut!vpNNx<1XKa}2w? zA9&b@%VPiAKe;P?%Se&eyZP#>E)LaNw(QgM!Qn+q{vVGlaAff2t^ayuan#U#iV{SJ zqfz1i@i*1rs6*~ZD9gWGtmrVe@BW4(JYltuir8>yz0g00rwJ*37BU`#kvI@(##vp! zg*~xmEmJACkSu)ch{j(&Y`OKTqMM-t>!0lX!XF=jB^CNAYAF*K-T#31-oHO7fsb3? z{L%v`{o1uWtDy)DVN3y{u0qfShNV@E0S4(Nsjkpp2MYe8 zy)|kF!&2(|S=EpKyY~fx0om$*00030{|uLRAQfyF#U(;U2^krwBvLBL_N0`Gq=nM3 zDoI7iM-dt%p(4uOviIh>u6uEf>rN8cB!y(PefO{T|8w5woZkWVW_hxY+*4r3h8qi# zYk*yI_~8nv24Dx&1U|l*1FRX=nqx0&fyFl@+#cKujE>0Ji<^6ZerWzl?IsDJPCrVC zjqQY1IwdLmpc*tCj!=_vEQW^5cP|~xy$6+c%5l9{tszH0?s)o55FBTFir2}D@(}w za&yBbjBZvJaC z65{6kCWY=|d42JLMgBR=Y>T|PU=xowZW~<^Qci-jtEWYyuI+^~sb4-Bl4XGJy!+Ox zz5r4mk*vI;2PhFd@{~hk(9vrVX)7uZw5|vRM^i6g_)NX#zHlFyETKE^z19P(@5V!} zel=i+GyV-;eGBX_SF(Rv<^y{w*X^d+XJEgMJCx?p1guZ5bw?X?fjMGFJ=yvl7-5R{ zJ)*6FHf2PAcP|sDB29Or;yweV#rN|w@Ap8K7Fj-ek_H5^kQ0|G44^Eg_Qjej1(5Ez zCXW{Q60Oy&_Nfo~W5#IfO`Q+(SZ=xIg@rR85^k4ho!X>BS`BuS;uApc68@x2yPQa zN>DMI=hAN^(KZX@Bvm5@>wNGQpT*K|JN|@6g<{&OZ6duoFTqW%QT3N#2V@;xdzbxc z4^;3T6*E?j0RqYY&LOuEAQQvNN6Jj0)#>fF5XB0hrZP=pf8PfB?y#*cLw&$#%T#j9 zKMgGDnr&6ak-%R6h$kzwb`^L6>myxH$)Dk6*Eqhqz3P_S0yMgkQgF*g=xFX9TBo!hD4v^6lt-rmsU|J?zy=$@3p1yx zq)1Ro5;*^4_ada`w{5;)s)_C$^WqUN%`huQYHRQ-MXXTq*U^aLK?19!DI}u-$+WWg zWpXjLdgSZ;+q)5|d0#dzRBq~2q_V~{Im5DNcs>p$D2t)OnLvBOr~I&Xd<<`GZWLS*Eg^6PX`yH zhi|6jCn58_?aE&jl2A_mcf&0F1Q3#^?aw`o2XZ{qKXe-jS`XwpF>f{j)wf&PWB+EL zE9~6!FQy3?)o;GLww?plY65SgtsJmd+mbxHWr1Dh|MWl#6S@Sv{2DK6aQyfq_9yKT zu(OoE312D$*1Xp#M~?|$ekG2WdLIQw)LxO#gQGy3+bcuqxeipB+`Fs4Tm?#(4_9!P zKaf?I#KZf#fS@|Ibl@o!%2>q{XMQqTT8$=kH=!zt=VC z-3>_C@sU&_n}_7>mrLw>C6U5xpa1^N7pdaG{xKgFkv44_9-?7|j4-zd-?~g>j_Pai z4m2Zc(q{RVUNYwn2*13~%^~|oHv8d!J;?r3lE~ybi0mx(W^+q-Wc_oheJPlZEH1^; zTWJ=^DCXY7I08tQKK7&Xm@rcRYd29;W@781w@HPqd`N!REh2d4IT9)sJCDs>#0tLP z$4`rtFe}*bK#}MR^b~Zq7Lh21)Z=5HY)1s3)Jp;<^6x?Yd{}jN4FbuB{4Hpj3=|b< z*PxLU=(v+OCbwz|XsKH*BJy2;am@3t(B{v;%qnP}^$G!2<@F7#!&t!fbUVkRaRk_X z!>8!Z0i3+r{z{4~9M~CBXLv6E1U5fSK>L0cuq5feyLyIz(KQh*$Eyx>Q~9~uKb(NN za6*=EfYTp6&ypUCv_sQrTiP14bPPGUo^e5*BuFHSN&S#zhL?Z=kd;V-uLMR=ZH;o0a z_>hLgi!%LH7h147;jDi9T5Bwnv9VYG9QIKfnuuIvP9bxmaE3FXwT5Jpz41HG;*4%ynEyZaU( zJK#`!-0wtWdtTqUE6EMn;$Iw2at9;J&L+lC*%g@=BOZ%~NFzfyF0W$u7o^>-TNKs_ z!Vbe1`l_GpkRrEXzRDsUNpJk(cE;NvKHK|sN%;nrT^Cic9@fD0&)Vg)SIzKjQ~8D5 z8Cghsw(AHv_9m286l6+TUWWQE(fnw+J3!LE?=|Kl04;S#!riuTL3=N`VBmu%&<;*2 z#S9t(z2|wq-?wOBZcA2(tWyS-nuyoWkSbsee2IQy*A8r>;0yDsE(807_iFA(CBPPl z^)d)*0G6BN-f9&oUWiC=Md316l5i zRAB)FDAz*7ruQg8hgqtQ&PQFKT^972J3<3`x5?Yd&Yi#%IOnq>WgM8_vX=I#9s}0X z#>q-+4(Bp%Xd8Ul2P{ggYJp!2ux^L_y5-0XOfueaA+7}mwXeq2^fl1K8n4mnGl90+ z0zoAw%Im(&nGk@ zbs;%cgDHY^{&VIL`I5*uwTzhqCdfQX^9(FUWC_hSruw%c%d67Ug&pPh|DE&DL&~zEG2@vQ zl1EB{HjGAMgU4B?{jHu@^@zDWP{Roe0t~kVRykrcf1k6fD8LJYglTpyLhf6Bui8KT zP`Rd|XVRnt2$j9xmw68XS^0pY?xpKMF`9ZDROJKhKUc0g`+YCa6r?5Nk4geP(DQyF z>nkvlP2|F~&jHiRR4O_?3Ro*_u9(>j0L#E9!7F49uvB}EsatY^Ng2M}6aNyJvPzyC zT`GXF#bF?8q7-Q3_fo(5=K+;k()(^@7POtCP9L0^hvs|3NBX(ipwU?7hLp|})IDBk z_e;};QgJ=K%JR36R!~u}u{8uP7M`z2s@a4o^s|g66LT!txL)SoCM&Fc`hL|Wy(}aW zh@}QP>Dct$(3ZP22U{tc%V(Bzk-Bd@U_p(;tHG7xS2vx; z&dzng=Z7|7drIWR#tsLh@LyDK+hdPpkuX@J=YRxKnYv$g0# z7TSJSi*Macgigf=N1K#b96hPND&qk3UrS`~QI5_O)rEzw0brUti9FnH$jPbJ;zQ!! zIetaV1=lM8bAw!^*fkwscr4}*M5_QjsBY-tCvTuxZT;gt#0wprw0VB5J<$5#WY-I$ zE6_xtpV8#L0>nC6^x2iSp|)$+@O#!iC?PF5`+e_*v@Xknyy3raGx@sgu}wEHS@EK+ zOq??oeYVlgYbj$L(#qcivBvC*_4WaKK{8XGl2rf`p*?g37JD1CbTj^2ihd5OzKj2+1E zKEz`?(}?s6xBm6Q;YcgWvKZb#MQZo=ZY|es*w)3ipE%`(EjLKsS?04yN>dQ`Sonp6 zu$1SUCHk=PuDybg`6bMsJi&GUx+BKSwws!2{f1!wW;LBROOW-(aCuFt7L=WR6>2Cx z5B2=}y(&LBL!)A5$GdnPXqrpo!sP{Mz46eRlGz0v_t*FSp^X7eXjqhw%L?dn)-j?% zi9rA2QLj{fm7}{s)0pcHV3ajqRSE3^MuB#;W!e}pY^i20$#y_*>-jnn#<`R4HMv!0 zH=(nrC{sB45_Is&Y9HRH1(ZpB^59)RXu7FK(@#GG#Msgqi+**e6Igj_!sR`b-dZ;5 zd14Eh5~kyEb*tdv_e)Mvmk05!S;zh>8YWmEJWt(T=7E*EMII00_8{T#qu3p~DM(V6 zv%H;f7@J%6Yc3zK#5SITOQ$=#v7_s2!i9v@NRw&rDzWGIBUmBOMt4Peb!EavuaC%3 zI%B`~BOv3Lgr5B1I%I5nr98Xu1kxKkG!;W6kiP!9L$;3`(o~hh9lVv0%2hd@)a=XY zG5FS&A&e~|Br(yt8%PSuzW&;;5D6u@ecZ9HvFhN_!vPg{v5=U&pR87gNkVq7v`Ay% zEY!L}rMv=C4egE6W$r?;@hz#S)7?;=DB_~}q6!*J-tJE&)dK0aW$o>U`p|Nrn8#%8 zXK1@L=4H73K6ET5l?Az^y8DflPHvV!Cytv_FWdz>RRb0` zRscQfxJ$qS0qD}2b(Mh)K(m=zy1^#_RKg&=aWWX%&zi6tn@({W3I}%mma7 zcX9whK)%23g?{1FPFtw!UCe&5(hth0=g%50c0%?DA+jnV7hb)6UwDy^fzMx7{p&B6 z$1K-U1wjWZEDdR}9W^+@$uoAR``dL$6nwM&-O5KuezxIjV%-q7lQNHpHc$PCrrm;a zTi;28kbJ1;E?Zym^*j(?_naK~Y6j#H4gWXG1JLqe#baUP%h2Yknz%To3mtJH_OsV> zpz~~&yV}W5Kr^*kb=L16(DF{X3>C%!t<(FehRS206}j7fP&)^-(|wb|dKaM6_34HE zrvspac(jgx^DSsgE#6}pxdAA0iu0py%Ara7f&81!_0YIt4dZ?oKj5mkfEeF-sCeUg zRg7f?1^GAJgf)F3@$SdEgS+MM*#5Fli5?-C6mZC6e%pUoxQ$PsX>b}V+OtpQ@18{z zja{6YokHSNxw=|+F*flZ)3KYpge~opZI6U9uxIxr{GjguM%uY!xewDub*WMYc9>?6@ur>t={ADiGydZ2`bBwIor^(qh2bwoD z`(VqS|IB7|S7WRG+AYUaT(E8MO>(m@FLubNR3w#kV#lcKj`h^FNY!u3{wu^r>L#7* zej$IbBkHL`LhL-Yzu6|7pP0w-S1m0iY8O%*4jQ{F{lMmZuLbq!Ymih@n68u>g$<*Z zish{)u`W|kO#GW3R!GkchsRA~p>Epy>*fNOa=7>4;oLLmw@`cZ^xzCcNfk$LzIz?A z8jFup(=S5F5n6!#>Hw%3lG>P7SOx_CU$f#b3V=Ag)lqS%7RYYi@gX+npgGUKb@7iI zP{IVKzkia4HX$>bCsh;LH_f~VaD5N$)E$vlgA&jo_`#)NRT^gpITz)B6@qqy`L{o7 z0-aFKn2|#Hv@9sa=1ad z+vx$NpB#BNy7EHq({{p7saA+@nQC7hRtt99+ivt7I)ra-j*hvQDq^;=ruqb`H2tW2gZSP-o)MB>Mt}MuHcc>(}m`bMnUJI?gK?i-+?Qh1eCc8PfXs8 zaJYedU_)^VwEBx?85J5p>n`ilkF~uxeWDWKtnULYEe|%B+#$}64a(9z(1+w?ar!DP4Q!k&_TTs92sV7#E_q+u z8}UqbX`}uzthW1d>9J)#mWgU}U(nu*`BT5;m`>`Ldh!Hczzzv~KI|%>tkMMmwco3K zhdLoi=hTqr)?CP`vi)_=WEM*7HD!-vJ%h@ayt3Y=PN;LC_X#M>0b$&=-G6Khh%9#t zd#)%Td3))xO>P0XGvVSk=SgT{=w9a)Qio>Wk4F363PCf?@%F$qIcRQKF1kV*fM%yX zK8Arx&{RPCuQ^Zz$SDh3&wt`@`k}?==P1KKOgMe7zjhV~#ql@jCZC{Aymt1pbqiG5 zEX7C+pM#R)D*aMt2O(!EaO=^~ACUAzR%^GX0t89cTav#8;A2KwXVc{+OnQEehd1&$ z=A19H6)gZP{-CTZ9IS;ERTKNSklnCWH-qjA?nqFYD{yW2jSVyI>i-0TvC;kNpiKHS zl5*W{So1tY@@q?Jm6xj6w3F|Ay<;dgxfOQm(`T^Bwl={cb{fgQSu%}B1CeapTUhJq zfh5C8O#z3SNSxNIRa&cy4b~fX-QfF*$lLbuly4DMe+lsYKv~9eHydfsbHA}DD-;NO~$(v#Q4qvQw--9Z=p4#Y)CW zyM~RRJpaecQBw+3e@r|{YcAP*KS1m~`L{f!8yeo+ zU3cc_Dj-On8re>8f!Z>5q}0hIPX8$-F+#6HX+lAINLD%&DiBpKyURlc`@mGO<63xo zNPNM6q6>WN_OJe9vJ*o#uh*pAI)zDE=e*cPE%+|hy{iAOHWnRK`08TSjb*+z0!0r6 zvC3w3P=jGI*0NMK>v(4(_5r1Pz6=}o9+mq`(nO;6CJ)DeJ4jqKAgs2V!bTUZiF#vh zY>XjTjy|Gb1_ED3P(px8nyAomz5IKiFV{*TOKbgESIMWO{-uOtG$9-l=84 z46EH&YLH^(u$)d*EaREL;=v$`gX_dF@8Wi&aTXENVkA%8dpd#9TVIbn%lVA%L4*4z zzs^8NQHuBP>;OnS^q&@Y@h-@+Nc^@!PX`K*{TX}hdJ#%hHMcx7{|prs{W?|`<)Hf0 z);*(5mQa^l)ctqA7vMiK|HhJYK$tAHwJuGBhA5qFTb!ey;m<(+!L?#Q-1yvJ`{AoV zq)t8tWtd1cLV?0L* zS1~@@NqhfkDrU3|(6BZb^DoD5`?Oq%#ntEjEBvqv%YIZ9s2QHd$^o+{srvO;`TqBQ-nt1>oP(8uhWVRp% zwf4`{H_ll>ovW;0TaE(M3nv=H{2GILoz&!jGf7Z4e>G?IF-~4V$5hJtl~Aj2QK9ww zDyWW8%0R;rs4OhJ_SSs@%3X&Ic7Gj(lA+$mXCEDfB4Osykzh5*S^lWuVrT;C!75ig zI>#YCmOEXuM;5{}LIk#CuYybLuNR0W(HKPP^!fGUC%$nCa#I~i!&Dt#=kmg3eCPE0 ziOl_CEKoas-)xl$7Hc`)%ir_?OT#{Y#w}zlk9^s~`|uoA8u=@*Z$)EO#LjYKRSm4Z z|J3hgzYNx_TnH2v=E52!>j%FT4rBF@G*RyCR;<>MgP+^(V%4rH_2xV69DdKxF45z| z@^zD80&yW&x|(pj5EHPd*6X?3YhBE@f44I5TIgNFB;T>m#pB4?ub0%Zu6W`A~8Hqg<-pVW^n# z^A$TU43&Jj?p+<*{s#a6|Njh^XFL@Q6o;)MBcVh}DWgItP2*Sz$tY3^4WvcN%8HCc zHreCan``fb%e}ViB8ub{p+q7Q^7iTce&_2s|K~ghDq4PiH9C72DkP5SFuWRoas|(` zl}6@J`uDs=;KnN`dG`BY8?Pr2(+^fDem(|;$K7}8+wX=PqD-Gl)EJ}>UB8x6TLj59 zTR&VqHvn%xoO)VHqktdVXEnpDb+{~=_QTMp6uoo?jCC?sFha_Tyt#7?6LoqepTB>G zsXrd&{n=`PS+}Ea3@|QY-b01@5?xO$+`Q!}rKN~OzeR>IcT+6xH2uk^fNB=2W6(8iG0BIf%2`{+P)qFCDxVk10Lm=fU$i7*Ec8@1V6C!xK#n z?kV)6cLb|}$)q}7O6O4Yj|c&e?B5(3E6*U*n4a_O-KP*s*RQU156c6ww9EFal>!i5_zlLR-T;yA*W$%gHz?BNe&V@z8Vd5)&x8k_fIL&F8drZq z$jxhBK7u z9sx9WzuIfv(2Fj$_fEKwt?8T+GL4Y1r|Ry&>rxn+miaVg9#$`gO%^A+<#SVkYDZpD1MwF91}?=YV+ zx58|e6Z2xe#H=hn!dwc6nU00N=$UI%5mO^Qfv?#kN4y=zm;Z z179Kh!PCK0iW?9Zy63jLE_$qA z>r+`N#n)#2i?Tc}7!v6$dt~=CMhLZ!1n93}l&1SvM^75YGIBaIUR}X>^(mLa;pdph z>0oNWWQ$4H&vA*mi(oR>EonogPE05I<0sP9Ij33ba4L&;Uou77m2T!t~XS;A$MP-_|!B?8QxHZwQ=+ zN8q}6j6D@hjB`W&KI{g`H;$%4LK0}Odn4ioF9(_rd=8cgU`FfPFU&fu&fqgm%H6Ke z8Fa{te-TZ1h|djnX>!%Dq6?@9sU8|cS6kh97a?X1}fZ2aiD&E?uX z;!bpKh@1mgRJ4$iC~otlc5JxRrnJHtuhzFy?>#?s0oOJbbRfg-aIc zH}5Ef?i*65Zs^;5~noKz{gt4$v`E8T)G1hp%b@_6xuvDIm_K@z%uP0ww;(T;AU zdj9H_esme-PHz|0z~?7_J#_YRK>LnQS}V+@Xqy(QTV0=w_rsKLvmCjPCITfVzWvd~ z<16!5QxrA8FtJcpJvJ7s+D8)8U$n!s{2S6=c`t&?0jZ*my>j5GBi_RlbQZifmG*`0 z`wM=d0<^#OLlCfVk$!f!3Xlu_Y5Ef_JxH@wRLhtbB+r7CS=b(Ai zX58eiT6A=F+0eAM!(MPReM~iLc_#3n~M?likLJW9B&`og~>OP(%DN9UM zFxhcFK&T)BlSR4>4?C!1l5l<8+RX?|a20vZLo3EOgI3=Y8fF+>QeO1OX81ElCr?B#NfKT{#SIo8@Qcd&m%X;EkDc&@o7o5-Htczy|~yiSdTJsgSyz zlE-4w4QbXbLxT(dLAu`!zrXeqkYSiV&(E^}8NKr*Ui`(7vHF}as;B}PZJ)$P)afBZ z`R@&m>?e?Zhjrvhv<0Mzhkxc8x&eCK)qb0_N|0yt#Tn3-gS2SKmLih`C4q zRt5?ZFguL;+K&DuW`<2&G%+Z{bQ!Qn6}f~d_Lilw%u$#~ZBLbpS;XigN)C0dOBl-b z$WiAX_q~KnHm?ewM-x?!)mKI|a5}j@uJP?A1bolCeC&xNM7Gt4UspGPgnNH3pSHOG zDc46{T^S`oI^~xOkxYQBA9s9uHGe@anYZ74ZWsy_c&dhlNKhnl$*dqh4vK!}x7beB z0`X<{{fXdcAkqqlm&_S~IHvgEaA64$b4)JHpBez7^cOTIEvZJ^}l5jzG8a9*W=rxY%zIC*|w|F2csxb=9jFy&_6<_<>7J(-kqBWZew=_ zk8gT>PYKHqe$P0SF=;0xN|K+R?)Qc?-GL`{8gh`WrCnBKB@g*O+ZgoRlYl5-Ic*RS z2_+1X1d7jgD9se|-*amf${B?D22OiH1xGE5qMg>i|3K92rbjDO3isJ>FW3*2M;${G zj$1*+0PlprRspCGVGld0Lxl3Z>@`=8T0?1_knuvN43w~^Y|E2P2I3CUBCZo}AV2iq<-{OcRhHAp03 zHRteSF{Qg$`N>Wq_jdqR=rq3gU>SmCcZSYyt=GkpgEAkTjMcCx;%&;zj(p7Z-FmM! zaUZ7JaDBc##Dob;Sx)ZpHCJ_cM2x}}5Zo{Uhr_kdjQLvE-RHeTzl`3^PR zntn%P=%9{!qDh}62I^+t#(N(&gL7)D5<2S!*{#?f2w#V>V`} ziNHw85)G<)Z(nqhMX1QW$zacO2FirDvk*QrL9v!vm+jgJ6llvQ-dK@@OrQ3|p!#c& ze7!g7ouv_kwkW`io&?;j9khuyt;N^B9SlqF=wtj%_$4SBgXt9_)6^*y%v*QT?@5qG z;=-Hl5)8MlWWHO)D2Z{SDValD+V)Mfxrz|cdqG3kPk?>FCncMWvYoepBE#Tkje{9YLD)xC9;^CleX4)QyyYXaeO2Tj5AmH3=nP>$qR9bBwOB9Lr$Kf!9xb8H#66pXz#fi2upl(YHUk+kqs z)mwT4o4h%W1{B9*L(kTMAlqQ9EBX~KyqbVjy3Awkfw@@fcYdVMXaWmHyqbF)#W78+ zE`a0rI)=%L<%I>Sf-T?NHJhG`5ZfW1AXLl=SuZ={um8ycVwQ&Jm{|&x(*~`ta0x(7 zz8dj<-2gOjKT^|FS%jvY`_kX9X91~ii=Z zZGrqsZ)(Lk2wHcn9tV0cXj5i2mfd89cJ7>vzi0M9`^($maVw?J9wch6Tf76>Pu{RX&8oC`?Z$!P_%6lKkW6cd5sT|P4F}ganLI+JV&s&u@mW92OqO2K`h}#nBwh<@F_P)CwVtvHAZ6On#$ABDRJ!YC#2-PYyIN=5nD=D8S=#cW3HgrELVe+@enyC~u2HQw1BiWVM z3SPp3pvZFem4is&ofiBrOCFsgTuz-^RENl&)7cG8p^$a)E#JqUcTha4ob&yNHB=e= z@*Vgh0%&_+?ibvKrod!6Li7)45iCpSSset*?RWbeR!@WbmY)A;&_pg?F)X|{z zX2;^ra2X)WCG8(iE(TJw+)H9dD>Q6YtPcF9LCp{1&NPYBQ1+CX(=N&f`SOa}&XJTL zQAV=$T;5-}N;fMSs??5gfg}NIZgj0M$IKGw*|DZDaDXoO0XD4r>#GjF zM$%{1iXq}QBzsgmu$EKD*7ge7kNJYwUa7^N%)^46$~`J$`&hB-_TJLh_olF$E6QU~ zazA$Ksed-HSHNz8v5CO25$v*~<}3@UVW-I{-Q;8D*giBS9ZojH*6#`frkSshOwbP7 zsUU%*4R=Ykja+PGi<$6Z8pWD?Y0ttSCoJt>@^lxp!(2Vvx{X)AFos1o2yA-6j&Jtn z=Wc!=yg9Wu#K)c*WxB8X<=oI<5xn+MWbY<{yO+T20?sBi9d8QrEbGhDeqCO3Joc87HZM_0L zB2|@(9oo=+^BMm+#c1df{Gl5yXbT;-ktYYzZ$g{#vxtu&pMd<|Nsa%eA3`%Hox)eT zd}x?6$Qh*aLd~wu?ZG#?pk#bB_SxYVkX6r~8KuP!VX@@bFPA>xYxVf@eKD6Y{d1!6 z@HrDKe*1b%syPa)RvY^GM8~n=g?}F*KVMnQn z#5!9Ec161As(cZ~9_DRM8$mabN*^a3uAGNdmE{MF6K|2K{#5HnMi)}q-kn~&n1VfG z`ErAG^VroO@==WM40e1uAVatygl)-Yf}VTcA$jHes=>Gnl9sB{t4>N_L+aZ5i@IB} z`VfP_wABYJj`VW>rk{=JPJ%(+sVeA``n+|1cPvB(oU*SK?S-6ypr@yUdZ0|L$x|Zi zF4WQze+YR`K;v4vklvy_v|Nln!+TBvTD7kTZU`|$`%lq(i^cFI ziiHAH8Qw9&P+g#=9QIj1qX*Q!?>{d{+yiRM3&Zp~t3Y*_S=d&R2R*dg{Lb9z&@CV0 z%bMi?oyQO9dA{+0w(58)pFkauKZ&m1J?96coF|q(t^d64u(yNmmt9cVB`-NR;{rvK z-#U&@UIoHa88<7+UAXS#$o5HD0h4;#^V&PDu}Jnw3`dVRR?5vUpEZ?5{1y}?*d&Og zus-($NjD@<30cgiZerUcDS+WcI(B-oKOvM_VRvb*xb?ZmNIkn#H)^2}sUM{Nv(OR7 zUO6FRLI#IP~&DkGHPWDjVbyg?7R`sqV__OF-8VjqYfSK z20!Qs)RjfzUg#FE`5V&i0#t#zNApZSfja9SzI9hJ^tyhi`+WZy^tPKWRsSJCZy&`b z!R-X}Mz<;2dW=Kwo&zkoTS-8@9x&p}+6vtzZ$;l)w?n7GfkuAKbZEQw_2$A71;|{~ zU%z91K$D&9bc6B~)ColRS*3h|(hqIqtb8rV3ZT2x*}nz>6Gx~TeXbb!eA8T@%?$Id z2!_PX=3#kLpW@L4Da36D_j@YIBgq=ho6{vBg;O)6FOCu0uSW=elD5MxC5_L;KT5Et za$BQ}-#Suak_K0o~U^c@qxZfetHH)sG}SXl1wisOP2+&6h*devDc|gGTs&ym6XPvGy+9@K_EM zunVi6dG!gRG?|q=q=GQuzmWEb&qJ8~viEKZQx=xJ59{eW7K!x)wViILkEzZC(@SH@qF8 zCHp@``|_jE=xq6Y{MHIov+;Aww)};n%0F|n{QDsOb=7OXNiFn_BMJRHZ-H69r$|3d z1hI@f@#?Ep4c4y?=I%L}hNKa$yNSW^&wx!ZzN0v&O>c9=`UT!@ov+!@CZ0rlGA-#`g!oKm^+A4Wn?3>Jdd1Znb`{FKJE!Br$9}|9b zV5K5Wc+cPMZw-*TURYRVwjX;$YGZ=KTCih?SGGQ|6kGT4_!`dL!e&NRE!_b##1p}C znN%Aro5(OaYp?~goXe;=Vr2Byic(q0$eU5hOi_d;Nk#+7$jsi{=QzeW$KmWsDn(W$GLz)>>G?e$o-faJ z-`D@Tkf21A2v_=tErmVb2gWxcxsP;+M!k!)nz6O%DkaDem2=U#>x9f(#qOi0XOLBG zGgvY=itLP|+Z8HTAV+WEqU4R$$hp&ZNBu(#a$?J+u9pcTXSd@9(jyaOKjyzASa%dz zxgr{h&ArI(K#ly!RbMdpHm_1d@(Fn1PIoSBWkVU=CQDK67BpmUR$;h00g3OunZm** zX!n;8-FTo1I&O|6%{_Pvbd|%)I=&wSrkXqL*aRQ2!u>{q&02wd_v)6q*&V>Kus7yj zV*satN816L*D= zc|h0k_Ku5};(>avsX)sr7up=E(qnsG1Cc%Va8vmss1tBw6;~aAl4aI+#I|pNq@KL{ z$`5{HLa~VzZlKVFB6uRF1A<)xD^GIt==tV~n-*&=o+ zkFBV?AA<~vkKmpRFJ$S>ymIt&M7Ec;Xg;q#a?GgNUk5HA=ly4h)@?`b=7Vmso`77w zPp$i9mh{RPVrMyNr#$zdwIq7>4D)4&=Gt%fOdA+nlz)v;gmk294swcOj>fBcPtR z3M%WFd&jcJ0UOgojEM!%lIiznU8L=Yf%C1guV8Q(xTcMZhv}JS#ap1&n%`AH&zqKIW7Su#Yqe%r9aRRlBCJ^dE*UtrlY9z`No02|(~Jh5*379`oq z-c(;{jO}B8>x3@vMw*5-UpwU%(*GS6_kVu@nXjDxbjk4}do`#?-u#9f1s$c7^6kj^ z*)ykSbON~^yzTu_mB@{ybP7o|Aos+*y_pqr$YCs-|GR%TvS(FJZn7sJi+<#|aAhYl z9lpsH8-GH&g`MLjdI@&8#I1eQ-H+`8{Ra4B4>sF*D2d7lU|s3%QkOscSaRf4#-ejE zCMABSzD5N|Ja4ckc2*2tKUn?la-7LK?lD36rnbG?PlU1Ot*F>vSY%_EijXeA( zb`0qHXWLf^Rs+-VXAV1c23YT^h4lND_CZkQnf}|@B|SX1yBuB*+~7st*lrqd%U+r; zEb9eslCysHWe4EOCxi}eYypnbSlz-mGO!N^h7w<{1LlCI*V)o$VC>iGx$-y|Xc^39 zjr)%R`IORWt<+HbvQvFKiUvutb*FDP|ztx$@+_Whm!dVqr zIp(zy_?2*gxh;XS1LvH)}H*>by$o16u{ZmL9 zIc0kW*Uz0qc7E@rn^zo>Wv7+AHPQhYRY4Wnl6lyfFGomxI){{t1HNjEA#7oejjH|~ zLPYh%td)ycdHRoF)$9yrACyXbZ?gex&YV?jZJdXkle&*L^9@1eVA3Yj)$4(v(7CE; zGYeWbJ>hkn@C8cs#7>>88tDAxL^7@P14j44HzBiSzzTNaH%4n>I;R zpV|O7x}(hdEgiUDPkG(%U;+1AzTiLpdElm|*k=4&4xEWIh1=ZE0(&;{rgUXEunI@r z{o=xaDPH+D^Ys99g&j6u_qZFVR&r9g{+iHQlVXv6z77b~@42EMwnDX5#Ol-RAb2$- zf97(g2L!K?6iHaEh?&1mzPbH72P-Unb$kBY#3q)Y1oc=rw)pBS4{owVitG-(qf=k8 z(_i}D@7ZBwJ#wc35sUF$oYn4e(>Bwo@y~h2A?19pkvkp=-yEv& z&GL@|lVhRCZQSW=*)D`!nW$SwR#qcN6Gp1eQjs+(b9~$8yU27_>~{QGgLLs#Mj>I- zNSzdne*ViE+gv#@M+llo41Q&hDW-=t@uzMbxUGi;DNnflP5~Hw({L>PDi37%c^o}` zTLsFcy>Yj+8Z_1`1^MWx0cl*hbh+SVAeW0D-B~COoni*}NDniC5gwVlPwOSHwCvK% zZbt$;ZJ*99sYKw^g*tuw@D;d`PsEw0`hYw0UwWtTcX+c_Jc$3vKj5;}$4{Lb1g?Ji z?z75&fpe^(?hZ}?d!wf0N*Os|-W$rC4q*U2R6{}5T8tm9E3Ld5tO@93BBYbMY_lh z?|US-ij3S@2P5xV9elI#bU?Xl9dbXMS>`AF5xM4uR~1*@K#r?D$2;yKvXu{522VyI zGh^^yG$R-3S%dqqxC}dDZS!{BiNUtNc~Y9EakS39 zF)l^0h^`+2&l2`nB)q%}WzuKFs?4d-z!c_jrE38xM)#c1lL;W76zOkQmjzl&N~KA# z1TdUt)U+;m081j28!&kW*mruQbQ|1(Q)IBH9U=qVFyV+U-#Fk-F1np@m4i28+fy{S z8o=#dzg{@z2yji(grsK)OTM+q)3-7J*mCO6Hg^99%qQH5QzjgsC&g^qy2k@Lf)d_J z?IJ?k$W>~B*)bsgEB$J-xB_aE_U9FyvxB0zgMT%>GvWTX_wzTMf8cXJH~+@C3@kgz zqkY4BIX3dA^eY%2N74(qMGtwGB|RwOhwnT`S~pZ(kTzV>B4^G?z-R@wQvqO zhmvkMu)~qf7kJ5S_7*ZjCDUB}jgW5nVu#z;eb}MQBd=+=3)>QRJx%o3jKnNv=j7vA ztm*lzWJ*uLLNP&K3ECXSOuaT7o6Up_&Bd=9j_N|Wu=MlNP2~V|1Z&k>;xlNh#@HaBP77EOtt-!98Zlk_w!$@iQ;$7Tx z7h9$Db}C(ABVkLz9oOf(v9hiOA{U1+yM^5tAe#*bs(C+LWHKSgRITsTor_R8GrXQA zmk$Kp@R47A_n>u0(1fykK2Vr*7M|f@&?P94&7MjCM&AyJpR(P+3O!>p>k$m>w(EaF z0+#qeJn~T6V>56)NCOs$M!>Bwx-akW5V)@%)v*M+fot^r;B?>x;Kcl_eWR8P?4Z1+ z%Ai1CiQn{zQ|AMQkCLU~htoj&H}*+;>jfYeGLO7BR|nEGDd}U)63^dz8<_R2gL13R zkqymvA>*e`Vnpx+Mv2cJSK#i${Jw;_T`O*2jUsVwjeG(U_rH1<=RK z#pW2>UN`Kjemb(zITo2pS1X1a?U7ZeLu&Kifb4#PM;7HGawuEVb_9R!isN{snj%Mj&+4zMd6B*Bi`+7I3uMNbj1IizLwY_V;G^|B z?5Oy_vxZj;+bt!-8%3{U^DVmcCYl%44czc~CU6c*Z2Gyi?aKIgLRC~PHx3?G^&2z_ zSVIXA_uhS<4Rti;e;;o5LGzUy?}B~8(5_Rp^-i%UbUdEcYrC)?=#j@0ES=v2GmyUg z!bJmM^}EoOyVHTgbF=?f<^phNX|CqsBEUU(g()^P1Y9Te8ygHnfh+5%z}Z_5oH+iQ z-$Qo;JLjolrkXFXyoZc*&wc^MkPrjUZG^7fWPdk}*Fcr+?wnt41FbI)oBG6cE^)jw zUgTXMRG(4Mk3u`hi}Z`V{jV6pPe^JoUSGo(wF~1TehOF~8`RL@){Tvy8{F$HdXeTE|P?!0B^c=Rx1tDimF8lP<3S6((&(CViqbj4>YP~Q3YOdsHZPEO|; zT5l{c@;(}lBt-yA?o?=g_y=HHV^h%@I&jpr%s36dfm5mK^k0f0a0bJEiC1I-hv0Mf z%GNC47!@8^xG@53|Ks@**HVFH)%&aKi4-ut$Vis`AwrkEQFwxtG*B;U$_B5_hPKUt zI*|#bK=iV8UOoO2YQ8LwUOzSsMPh+J|E2AQI3g+avZf$DdB)mhATx!f%6yI?v23h& zf>XBy>DU|>KeQ=y4BKUX#fRCfzz%CQhw!7bNEd1wKe%cIGG#Z1H}3t4tU&(KfVGv# z4pYACZ*w0xI}9bS+j$}<&i_e&(bB)C=sSgHKSGXq{P16!Ib`Ry^S%?jf~>N%AG7BU zE%o!AF{!N|k={xW4bkUCnsTUq19>@;H}oBkc{PZnbgkEmjx*R;oV=;l&mYUP%IZ}z zr7<%}@wLasS-7m~xqRwky#4?&$-&+yKkJrvq!~>^=Uqe}G9_cD%*lEil|a80QX#KxaVTv%Oy*10}20 zlqx0xt>?q$Tx@fIz}A%L;oAV!<983_?jb-ysjGNkhX&j`l6wQLXW~=i2U~Wm4#!fV zg5ZZ^<5>5Hyv`|18JqVRHCmVnV%w{bje7%ZkXm_aEOn|FyR1GumL$g`qr#8X>Ua&A za~0ohs>_fyaq-YhK?1U$JlQ^cr~=tzHyo}=BrTn9)Em2(xbXCKf9^3;WKG>$F=)3N znG2@)==2ye>cnEIF0RHdmu5b#YaK}KOm<%zB#v#AxuXG%Kd{+TEOuv|CD!{H+YLXx zgr(_5z9$|vVVX33tBuQVxaC;Y_d4w(tIs;+;Z{NH~-ka>Q2CF?k}Jik%1 z$$KY|iPAvwiUL~5Y`L(C7tm`?RvO*C0ZiQ^g$o6)z&cz!viyz;u!TMq8E*Uz>}ypv zL1v$T{p`Z6o~_G)?U|H&jZp)v&)RAtW1+wj$koiF#Rb;?+Oq*0Qa8#TfT!5pmGVUO`4?>a7fv_ROF=3%xGha(BX-Gp?`gDp zjEpeJnZ4&7k(oYydWYI(WChKKI|>af`F>H{wEL0{y1gf^=bk~fRI@hy-~nX49)`o> z3CNs0==a8O>HW8L3t5l!kiL_-$oKa%(u8<5*LK+>+2_)Hks=ve&XWrJQjL)yaylzC zRRgQ~mRIz$O)x*f$DwfJ7QFl6ckJ3%GLY&YH9E3Z5K1}E_fOv3w z=dGdV(0X}pW0JcaP!4x;Wz6k?_WJaTga-;hPt{0SHNpbM-#=6Akgve(e=Ap>o(QaK z=U-apw*#wvAMfgA7l1`j=L}5N0_%JvkM~mW8iiObpv}@g+Jrbx*Nzzt!WM;BD%Yc%v3+jRP5byx>~I^3xsoJ? zT_?wdcNh*J=%1fV5$WcmCth_Bmz9PGugbCL!D0*0)3Fp4jQSy&r*|zgtwqtPdFE_=IX9 zU10iWZ(+;q0VX5$a9x8JFh9?ASQ#7!=F4m|+y1@4l%TmA=`GFwp&w!;lWov-GU}0B z;Rfi)2)(G-r3GYvDsjiSIkbGZMGAi>1ccGB!Na)?OMUK-%Y4LhC`snK_b0Ugo=+Yd z{LDzktM^3{RfpGMHYs3=@5UD_f3rfuP3R^z_}0r#e)@vVMiv5MzNy%{aA;fm5g(-3 zY12AXjFF~SIfL*yK-;bt7Bjb>#VqRD|GR7W?crX4zrqy|m-KMXRdCp%jD$Np^ zYS%v>^WK7tSB0|vTV#=5SO1Pe+k~A@&R^fRKtSr;^j=v@ZEPP<*s%U;Ft&J=RZaQt zM?$jLIlFFmtoiG{X8%$jDRH$N9vh#-H1SQ(S`;rskR0Pz{#goSHIT$qt3{z)Jdu^Q zM-}RWssl@k4g;}h+gQ5pQf@sOIMHe&0_1q9o#(ALLdUs9@!rE4(AhY%HLXeu=#QpP zorq}!hMyD*a_PY6sOT}Xa0bSw6GnczOY@%d-Y&v&IWQDm4BWaH(A5+t)EKM-w0v_B z(%Au^O1SS^^gIOZ;+G#?x;6l$(#cCaydHq#@+Z=kEWdh+@hPuu1H4uxl9bfL;b~9p z_-ue2hVd0e29*e47RTq|aQh6FeYW}jEyN1z79Mg=4Lc#xO53daQU$g!2p1G)eqj5Q z(oAq76R8EA8QnhONc%n;bWUFfy9#(}+=ac7{w3DoLD*7$I%H(|FE1DwHkFf)3HSokSVRMG8;ns#RM~VVkhtFo(7hn`;j@G-c>v zlL{kNbD0EIxqKK&x!#9`0X%gMfz6ogZ4f>v;to;7{yf&DnYG48|VR)F262Qpoavlyyy7elFy&pY$ALXIzJy-Lx0u{Gz%*)#qqB|-OCcb zZt@A*E1gztf0dDiP^KFyYQ;ELsiml9^&UB zXL^}*jC0q1u_dSja~EU#cnzAc{H;jYW>tQyw`x+=+WQxY@@_!_XMC{5rp{Gky*0LP z8w=Ux`4}m&^|u&L7}#;O^4Rr~*GQX)5NMY9hn<6CmM5eEyX>}ITdVGaUHjuwC!7vr z=hJmL+Xg+67WnD38lf4foJ+@p`^J%6f0bXy!x`IjswWdOh)6oxQZZp`g9Nc*+TctQ z)+$vnwS-^t!s3wsR*Bb+ZUGeoQ?<F4P_!b~4&*ODy9jo? zC2oY4sDldy*B%2gz02uWsRJ~8yx@4H!wxDJH5FGfC!i?ydf)q+H}G6%QhoieQnY4D zYyVfm#dOURMRn$qSZo__#^jgAD*fn-UFPA~Ffg**;a(#WZ}y3ie<@(gff?(|r>e2- z#U|6-fgvQPd^sxXRf$w-Dn|DjV29>$h5hf%v4gaEYgmHV0#f*)|cR?21VXS^gB;JvGcle6+Dui!`jOybYT(pEucLZbA${`}u7D6xQyj;<>r% zIhF+;R!_X>hB+U{Z=cMV!uanQ#oZSSAXd31cCC#bWVz@h_iPt|QiY1s-~RPObz9VO znch%noNCKoT_FiXs?YcAE!UvMUbn?w6Cg_oN}WTDm9`?_+s#Y_Z(OMLykC!k6X8_FNmJTn=^s`{Cx5n z8g;S^e-33s_3vBbbJ6`!c07~l((npikyf2)Wx7Gi?C-qW-L0_kp2aV+hz_RYe{Aha z$j4Vcd=4gUHCV>;*UF1kj@ABo+b)~F!v;ULO@w(95-x=qI`<(qJ8askTV~Nuv(}j0dF3oj{{)pQQwg{*Y zbH!z``No|C9SQ+R$URi%6*Y;CE889%=_g>#zRPE_Ruy46U+8;YPjxI zjmo4cjd=abm{#}tWe{hRT%;$1l#@elT6lSRwQvCbbzC?4H2J{X0>A$#kS2fVPE zGWhd{k2#W#&Hhqp(Lqu~qQQ}Q*QI+v$%D^^*i7a9qn{;!#BX*7M2s9Cj8UvUtd z{1e~D2x?>9clBr6?Gv!-yZ!x;heB8uogXM5VuA%(-{ix>DENYk<)hLY@j>-FZ9X*_ zxFWQcNIfG4sfwpQJ>MkBZ;Q! zg(lGC_iX3(X%`@zbL3Xpz5pWJzT+-*8i-`-z>&L|KwMDynMaHP;s>MQA(vPndYZq0 z$n8ML_-kP6Hwh@I6!ziI4rp+9n{>?^gIbN~{mY$%p)$J2tM0{RC=LJpe&?kI$agp% zdc^f5yf_lgr3vOi+%MJhkNIDt$5rkW=Pv;tyEi<%9%}kO00030{|uLBAQo&ChWnC{ zLX;$=%w&{=qMTGxDU^t8%AS=nGa@tDd+)uywqx({zOSv!(hy}tRP_1z{5sE%bFTZk zF||t2aIe{J%u~LzDIeN_B`5hVeyp3t@-8m7xP(fq-17g$Yy1ssO8=F73~t7{86R)M z>Ys?t0~1Nb(bxcaU2M}r*zlz0xRSR!Haw6n3zTk0d>t~q~!C-&vQ`;^B2t9vr|8#={BoB{FbgQL6c8($Qr=&J0a@aQu-m?DfS8;7hg;P? zc7e8umn@LTWp_9_=n|w8q>fwquS2e$Y)i1sYbcTmnR;_12uiFLCK;I1pzNweA5h+V&k(XiWF{^=3iEo?|ak6q|tnIdrpWYf#P@7#{js z6-wQDzu#b9fZ~YrBZd)_P*CYSb0F&~WY?M4d(Korn(FB|36CETFDab0N8A8{HKkiF z)YO8Vyon{jO%ff`H^+LlcVmc_3Uz^IImQQGE3%o=!8FPPFQkJDFst7>`sG<)%s+6| z%4(Axiyq3T6E}>oc$ojn7s_HRS*ub|wz-O>W%*X7hwo$Afh^8Jk~@~|l^K0LD}kkn zt1}y?OR;41WbjoY3l>*U-DT$}$D*sc`y@@eF@N7aWkOvIX4AvIR_2G8mOjEAOegQAmX_pZJ=2L)K!_?Lb!`jBbM9MD6m{t(i z2)z%fkAggCuhc{0*^K4GM-U=;XEu5cgu|N{Rh6YeKX6bq-EG?}hK7(N{wf>6vdt2n8hEO;<^4rGglD-<9Njln`-C(do2`7X-I*swwJig5QzD z_NU*Cf!mYGXbttJU@m>qRpi$os_xHRK~EZdp;hQPnZSykf)Y-is_W>#WRQ1of)#@; zlezd>3^2^tQ|tP!TNp7Oo|&%~fKl}$Hj^R-7{idsBI^GMW4db%H+ZgN%o=mccZ&v$ z2_g#%WS_(6jLlCh4-a9~70F*-`#3Pd`Zebl-#HAs)EgVn?TNv4u4io7+%Rz0t@A5% z1L$-5gG7i(6ncn6yZ!bELVMX@V_9E)G|8Zdul|>Ur>q_BTK!ppNB>z;XY0v_PD$I~acgmZjUzL- z${w&VrnUfwnmT!h@I`ob&SBy@nGY-rTCQ)Um4RV&lL9v@!2MYVb?3_8Am%IN#L03O zFHawuUj6U*kj35A`tfVjxuUb`XjOu`kJ?0I?3_`%$aHJG>n>{8%q!@s zs-wzY3Z0VCT$G#Sz7lR{fk%TR->j)e!etv3mBO|WxW{q1u#8j%nwFCc@#X=b-_>j& zCH@K?@3}9%qzhooQ}~FMHVTZ_7VYmocLC!&e5Fel+Trp3qfA}uQJ~M|$a*118Xjx_3| z;5|D!y6meMsO%qmg;@ySgr4@FA&@bE>00hvk}vvpIsN=~eimQXCF*+St)jjKRee?d$(m0%lnGQ@uU zBx42w5Et(wxmRl(;;PbSHd%%sPV!Ll7*_(sGO?6Pys(AnTmC;v-2XttM|zgR@8S^p ziPA6Lwikjlqvhsqwu4V5+oG_nIJmlQ@FEQxbDX!m~r_hU7oVAe=F zacPMLyl7(hx;F1Xa7MmJ>GdNJ71>+uZ88suXT)bD2?mgoR=7~YE(+fJ!y|N;S1v30`>h)7paC!L!Iu=5ya}2zQrW?q<3KNoN(qUMJW>xy^zJ{R*@CiUKGT_vM^N@lGg!W( z3d-Ia&kw3xhcYGRc9lJpP^z4ARf%B;ia$2Iw2{k%BF4A8@)|3Ui@Opz>7*c|#Dt>Q zX$F!H`@dT?dkzr?F6nw6wFZxv71cQ9%V<>-m?Y=Cfx#?scL-9km~hJ8I-;%<(+vwB z6it4>T$P}h*Gha?q;GudXlDYJbP%r@pQ*+&QsP`7gD?`TZ~7UX4aJH`!=)ve7g#C# zjm726O{_GvD;aS)ftCBTrgQZVVg>&YMefo9mN)*QQe|An(y6Klny+`U*mwN$uyqmU zM_Sr(a=yh(BjNsSUsFsC8O;=bP7<}vG6itOA)HIG~Ie~ zYoNxUdx>>56lw+ss&DPqhnfPx3gyuUP`yZ+ST1pdstDGwu&_j^$jkOhQ{aGdDWg^@ z26`w_xZ}KD6Abz9tzWUHDMN-SKNtO}o&D|LO}F6C2k+_Z+OeqPXlK;oKzXSiBM5UE z|Gtf3>IY3x1=mc>I~3$%YCM6((_)9py1KAjTi)pkjV)GM(mxPg5y$GS^UU#UC0M&n zOPRNa9qSG1o%?lo5Kjy_m-R0rimS}3C+K2*%nuKFURJET&-ZsS+ZAh!u6ddb=wju# z!qpaCe=M)<54ac>f+ZZ)W`MhBBRa^F6FbuLz5`0UTps8Bcn1XkC+CN=Y@nL`bK#ilPpIQb_~=DS z2Mjv-Q7%&e8nOf*gv8iGqfifJNuwP!-s85B@9c!e!&WiR{BxkekyhlOnF-WyFBlHQ z--KGVSVfDCQmCSNBtd-i2+DcY{#{hr4@HfeguZY=$oy8_`p@7m#9FxD4-stz`$<|U z^Lc6vOj+LSlpMyChlR8hC*?4&PKTAf;|Z4Dimz3RI*k>Baa!jd6kyHlUbaKMfcUUw z*K-LnHXfSNFx}Y3repOSVx2SC)FShKKKcwc@9L>DefI>L$Q%dy{x)FK`70vV4sBzj zc+sYML?~i{ZH}Qo71px6KYHL;E>_IbGd&I7nJ1|6b;Ya?bH7p0vIu;^q^<{)hfIm+ z*(K(6y2upe#2TitWJ+^`#(41ger*}^rTD0+T?Y%*0$>C*;e#!Xd#)iv)gkg`1F zeRk_3_^LBHjZ$r)A8j&?SEV|pD%Sn7&ke=GmS+|*S-e=@n`@|Y{3X_0|Cwc=%z_Pv ziFUEZm$2z9*S)$W7i|6#`NW!`0b5VM;%mFSiLKk2r>#|9VVkna#Hr-H*mmNV-cL$% zY<+5QP3$rqw#X;yZI5wdQ<@vYTxvWvgoGz|?6iwoseRHFL8p+A5-;hNT!uw1TjO8s zw=s3X(QiN{9DRu2h~_=65ZFdZ`}MXxq`z`xc;B`citUq*pW*9*is3yY4Qe7#R|ebG zvT@L8&)LcAJO|C?A||Xw&!P2IAbput5VVbaJ7%TJ1?}0XI`018pnYYV{+}ENv=^&b z1cb>$+Z!}W4~9BV#oLzCJ3Z9oq>IFG02Ea& zdc+5=L+S++_SX~w;66K)|2a_b)hD_C(?UhMtz zlUPL4NfVv)7nAbr*R@8KP$RZ6Vs)=BB>$vkXQRqIfc&je`Ep#(U zza9Uo3SCb+NI8>2&?$aREO{;&+V$wW*X9MFWsBX(BSHw8Sn({6Mgi0X)M#?NS+lFy;C zzB%*OIVvd34ZbxauK+O=L*r?S-sp32|FSRDOUyo)*OYBtf#p5)!PL9eu|8be<;Ku$ zY<|%2{JwD(w*92B<83~RT{IISoPn{}<58e-TR;Q*?z$5TV%o6ZRP$aH(F*&U0=(Xs zhhV?PH?F*VXY4!kt@qLLN9?(iRCDmbBz9KE?b<&fjBT$8yQ!Tcb~syg>0z`g)-lf; z2%Xr#(mA_Un*}CJ(`A{{E8#==@WnowtNoB#caT?=F&j#2+6tUHdZ145&7MSo9Ug9m z+GPLt7}^%QGU@D9piARf&c^zt<{?u!A;wQj!akZ_hQyCM~DX^-bK(JF1AD>k2rUUP!1BmKYtPH@&!pszihem{vt_^{C$Ii z6N&u|ACA5^jtH7f)WnHo;vlo?1m0PUrp zuP{fnLw6eMskccA&^PaG#XH>##L8)Q`II>zh1q$P2rmP9H~VkLfAK)tjwk*nDhVWC zuYdeBtw2l{WvIUW7W(oX6BSsGLAS!>dVKtKXqTcLHGakpO+m|vn(0rVdc60d!I_s( zSXcO_Kg$V%yR}t6k!CT@b8Vdd^o~DEGRl=}#h%e9Udrez~JPksJffhdxN1cZC% zt&t@8Jlm*j1^Y7#rVTdlV9!CV%>NQfu)Tdn>xcexY?@}*&9$V$>NUQ$yNMUDVD4FL zAx}RBFj#CEx|1N8OWs#q^(&M)oXBqI=>q&}s{Ei^p{J?fX-963#(9gAk}SGhxzuh7AT4H2ly^^T7hOMzT|=OatWaXbBY zUXdm8JZ8)%EOJ^3V?|4r?2)@B*w_?*V_VA&+r{@rcEwV z?6jYCJQ4>Es6S+jsKJ4Ob1TB%*Kv?Jk|=-b5e^K=C#-3o$AN>|DV;Y4ku-R9ukidu zByvXikTt5YXBT6l&K^!|r=kn^{*WCTZC0$xBZQF9`M}@a=o+S-c>1Hz#uvP^ixneB zY@qN{^+FlrbEploDy7qugO)3ALTEKup|ghF%{AmK^u0Ct>?P|2BqfiUusTm5f0mft z`&JzWDP|ZcB(h*IzA$&JxdaA__$kOmXJAn3s#@6Y<1irO$wZ{c08-P`>R-Vp(4Tzm z;&-1O==!4n_vY*zv^uyszZP?V`XBWhL-XgLgxNTGMI{tMX0Bbh&=-rz34`j9)73~g zd77o+b|*GEM^EZ~d4=uIjU@|G`mkqAgFKOc2Z;@y1EXYdBxlTwnmf4TAX9Pdz38tv z_?sfd{*W z`6&~$zA$tj%|8O&DyFf%lK%lwMndz%m!m*7_I#N&Z3Tmeb34zpn8FZDc^_~20z>1y z$`tV$Ff=(N+!TV8IEgxYL{Bs_gKTBTf_^`vb zlYthahZnHFw&!VMfD4jk@>10vn&KdjU#Awy6o)*LbD!^D!eJ#Y)>^Fv9QHg!M|V~L zhdDjDRZ6RHh&y~{_c0|Lh;TeGUF41=kDD5oSSqmht9PZE!XIqk`aYKxcn2Fz<9%Js z%CM~DjAMDjdyM=b*>mp50wjNFQZE zR_=#^ER#Xa)gK0fcSafH2F}0`Il{3m{R|8@E;^3?@q&>ks=WcUD1s_}P)8!yY zV$743`t%*+HKmP0%zKa!DB4(+Jv#-!G`Zt4OO#8`4b7#@3A;z;8GLo(DSl__0eVBfKGZqd(x zs8r7=uOJLvm#XY3zm-5UhrgJQt1u8|et!{ncZOKo1QwN0F-+-DVzpya#3~E!V!eIC z*zzc-M)aTvcE9#Io_>)Ei9c`m){3U#K!I|{Mn(V*O+1T=-e->^wt0pxmjFj~MFX}1 zxNtP#-3P%N<2Wkvkh^}`5=Rc)VEmx#jzhOkD2z$XBKbSxKH%X%B30rqJ60lg-uG0J z&Oe2XGeKopb5F69JiV?_t&V>8_Sx{#0pv8Wp8PpSg1XW*j>sqxXp1lAW4L-8dYd{& z>y@&AOdIy@*>XM%mR>YY-427{_S*gS5}Gi2K4hR&qz^`a58O^5xxyIDi@AqE(=e(R z#>AL84RymAg`^0=XlNxZ$C$Wcer3c4ujsDf#^2bpXHam|S1~{DgH^*H9E|8p9r;G*3!|%Q zuJP0EFxG$5wr>|FjC~`{ZMw<8n0%1U?B@m;`P8Q2TQdMd1ET90r=P)X(N2`nBBuXt|z%<=o;9MG^McETq<=!1Wiq zrR!@COU9Dww&2 zW#_~6-E%`9(OYu#f(LP+c-pAvUO5iO2@i~w>Eh^^vPW8{1&%*> zb1SsO=YIeI0RR6Kmv=N4?ijBtBS~ zju-(ud!S6IKLt1@Mep7x{R0l15YzK-0k-BJhwa4W(CWW9OZW zo7^-PB=xWlR5&>z%`Ax4w#FKnCTlw_XYL>?+2!c@xrfNv=t}$Xatb-6^V6$p{gLAw z$p~WBBl~t($>)>+>~|JVUN!L@>0JURJ_{Hl<&k8L^P(O0{O$BkzF>eYhw5!3s(i8B zhuCvsDi=M+@|>;8A3;g&`5whZV`#E*G@yz0LbsiCoZtFgKwQS2M;OT z2fBoYyE2~-kb`u1EL8-ctLfNSt+pC8zS!t0>a`q-Y(5v9q<+U}F((-Lupg_W6>T+y zlCU-B$THJ|n%EbSHv7GE6sget_Ur0eWF(D-$5@Ud>-4CCe40CQ#M*~QtS01c{(I-6 z#x!ze|H(T!pF_^A2<^PnN0C)TRo{L|ADIWmkN#21M(Vd1SL=@-k+j@xoH133?TY*Y zted~FR;B!B{~t+AdRES#MU;g+)2V%(hdu!zX2scouu14z9&M0qtP12S-TuwTRsda8 z;lj7GU!Y$){m@sXUSPW_&n?m>f%E<0^L>h*z;$b!eYz>NTp&{htuklGz z5<>3tzHp1zZ;>0}+xo2C3pw#0qDzhkAgd}&?w3>>G8U-=jWRos`V<&@4;W!zYkn5v zU@W$}UwswxBo!-u30a%Ilt3R%%9O^C7rd?c8=&Z&1I>QQQLgPPp?Af(vwsZJfYR06 zwxxFf7!I8N9nNmRGMT=0P2UYT_LSq>4%`6lD?Rz;Cr$&Gw$3QASQNM$t8Z*L@fz4> z$DRiozXB%J&#_f72563ZZQnl~29kNaXAG!#7tf{59*8es z;dVp&B3o^2{B+uAOG7DkXAhaH=a(Zz?Y4)bPX;p92N;@$L?COobndAK?~r4B*J9p% z3v%(bgYwC6YC0ZTONtZz*j%dJA1-j$e#&(k~k0mjb8uswIjr#`@T(h;E8ddD3n>< zdK3o?Q6mc(jhnzyw2Zxa{|aziH?D{d_W*8>=vEp&=)Q+e3_d9)FR=y zGrE4jG_Q}O9|;4tR%(wLIs^C2Vcw}T8Ze-$+-Dd200yMJEQVb}fGaF(^y%9eux9#- zot_*8#?)dGaVit2+iAL9tAnBUaA#|AuMsqFJK~qOGY*Oi#wjy#A24<_G~nvSD6DS;y9{$x&5p1=y^C~V+#j*yT`EH?b0R)Yg~ zJ!drMZISz>i}7Ge1Ua`8-ZGlkV*fy-yVp@)q(64~VWV>&$!EPs_5RFZ$B67_U0p-0 zYq-Sc?j?CI<)%MGBZbK2=pz)|R3-ZdkbaUG~zgMZ7tmINlx$Pcq$ z{lFGBHXCt^1+MI$$)D697*KyMdMHg41}-FdQ*1u~_k5WuwoMw{ zJuX01R*k)*)C|2UVWBpM5}|4G@!9JUr=W;^E!l}CgozPXe~zy1!Md3O6Z3Q~c8Z7Y zBW!qs8EcXYi(9p%&(<92@QVbo1=vT{06)?1;uc{>P>sey=dfC znzi0C7eV$^#pA1$_1G`Bs=w;q9Mb$OhCR~XBWXi`Wt8XzY}>FZZY(hxE3SIpPP_6Q z^clh$2fUP_;%^YqE^8dxOzC2|X_Y`yStze{8v4mS;<`CP%hAq&ZWH{atG32(B7Vq zbZBpn`)~ed7*zL&DPEwsL(uKI=+MLau#_4TKRbevNpUKQOI$;c6Tty0sFs5 zejNR6jPyIMJ_qTJNM2R^y3y1DJ4E^{Yy4EOMnl)TWamu`-PR{sT%8W3>EfUMMfpL? zv^J^h%PbHznpW)`>jj#8P}RrTAz;qL={-N63v80&*15Eoz)fl@@K>0E0j=rgcI%}* zV7!?0J2M0vwJ)k!ysM!<(Wu3nm;l12U57n9${mEwjURyG79UUvYh?newQ-b zo3^+8bT<+!Ji4wgpPI!sqr7)Jruvbj9ewg?=YL3R(^T=jos0dCmUXR8bw{T{1A3M{b~_Ng}Bo*%k4NM4lbUq?dV$^S2?5mn1q=NyonCyK?9F zlCb4`#h&im5iI#feb?c73t~^5E&p)t0@PWUp`qqq=sZ}_dLyb7$T1m4w@!-yokd*U zy)7D8YTMSW;N1e8G&Kk6!;QclzF}&rwX_Gkzjf~&9R|+Co1#O?`+?PL7vxuPfb z>bC2)g^`eYcRX+BN)9sh0?${9iX!`B?g6^*dE_cLMhyitAoq`_(+|Z;&b z`)m5R(yKJ=KfGpfO!YF-T=nEKNi-x)k3akF3{KpoAp~GG}K;iu|Aggbx)V5ffJ3%-Gx(k7|qBJw*Kq+vnWRi{k@&GrhCW2Sz z0B}o4?FXvVfD@eSvS>LBEEVI<>W@=E=RSO=!*2!TXDutN7u2A0n=|XnT`Q-(x7!_L~b)OXPrIMo>?Hf@RdRK z+M;771`%%tbWTeFA{yplAl)xC>tc?e-TXWW{ z(JmGVH!T(>yhku?uqRp2LKq4hSPxuUFF{kbYN2X-PZcpr1{b+d8@+K0_uQ|?RG=*ulzc(7*Gln;-LnQ8fjfbY*okwar zDA4P5!Je4<8K^dz%N;TcfC>4Z_`=QtoBxyLB5ww8lD`$CY_b5(-<_^=)=Ov6Ju-=D z+R*=Jqp#23FRO%*1vRr1M*=K)VFb)GRHcP+g; z|6k$7-K9{AvvZ0c+0ZeYJEE$P3FOB{v=-4HK!5pA!?d0c`UwugwE_#ku5V{#qabje zc%+lhg#vpb$TzorFR*qi%Mh+e`*sBuU7n0=odT!4KLhiw6`A6b@aGJwcidP|Cks)2hV{1k*lgMq5}PG6jdhh z0o#fF)i-Ysum=WMM zB9s?s)gAt&hn{84XYJm4V6|y+4Bz^r*xsXOQg=%dNgR$JN$ot+{$^TQ+*;xeVWahf zgAb7P>qDjGA$?>=OW41f>O~gkynKT4lD-GP>E0G|q!q*aW1I#gxuRUWrLjR^!+K;KP=NjqQ$g)S~`j|AEc$K(FT#elS{U-hfkD6}cf zh7n@jp<=_c`TAvM=)`kH`Gn&!tg1Ps!IMYBcGIj(zODR7O8ogk{O=B=WsjIVCO<`H z`bVMTH;a&E;i+2sV{~aQ)1KYx^4LEcST2yPj*MQPdsge+kotI)JK>)P_8k#)+x|@g zo5!Q&7?Q?VqHSgHZ|v|=FX($)u}2x|j~B<~gdBj*yD!auOt%BsA|`m`9v$fN4O_M7 zBw)TLT4j)OfpwueHmf!gSho#C=kFCkzqq6PlZ5?1fAMcXyzC^9$3@!H@{6D=tKwg~ z?(wC3>8!6%@`NR}q59UxV1Zfh;%VY8Y`SZ4wN{3KJ^3TjBW5d+QWo=;VA+KX;l1Ur zpD8c(2_J=Q^(F2WtM?ys^u+#@!I!QH50OENS#|wJ1XA1j?k`@pMB{@G^0JoKSd zSa>%uhZIig?jr#6*ry${tz%34$8Oz~oe1Q`de3gge&}|8Vr?T(0FCDK!)-PFkb5bA z!KknpGYkh6w>>>trDyFFJQs{)hsCP{zQ#za6pr!!_!b#W+p1ccuOrhb zbj@DA<;dvd7`XK~EpgJtR*}=wNDeVQU7^*0T@ib-rzZ80;QGrzvQGgsTgE!eZ;3*7 zv~1uqmJJZt!l#u5q@b(g@0Z;NN`M?z(tY{oH=t#0*%#aAvcxayaq@Dmz~rSZEX?`> zL*jtZHXbQ+fy_pHwkY4;4C;i#OHTW<%{%&eY4K9*95pLhbXDHCUXiHqH}c zj7^IQ|8^fcjy>M#j=P2wks|J}=D^V~qz&5G_ARO)+OD7OJgrN5n}i&%`kJRu(O4EH z`$-5|C1P48`xcYtn7|aXL;j@mr`OP9%W<=ESL z@=4B8{*qfxq~7#zM(Q0wxmHRDQj=B@vkCb~u`^3;xo?id@2TMx>U*%GOvHbp>olTM z-iNl;h*{}T&c@0+A${+0>gYlZ)R$RhpEqxSc4E}=N+)+9@_CHjS6lMene*c(d%~9b zJbmjfxoMyb81-tMOb7DuWyi1X%z~bhFj`&e0<_SIj~E+hLB-fp#?2Le@bt;iu>bnq zvE2_}P#Xn+5QE*<|8-E!odHkjARz^s!nta5K zUizQmeC_L77O-P&S3qJ@Fg8$z!|iYDU{*-Ebd&NZr0qO@MJh%K>e9x)E9i|u+uZWG zrZ*3vm$lZ|G<6k_71We`t@Z`FD%4H4mlE+)HZ#CT!tS8rr4DOzR zG99!1$^Rsvc}2LnZf+`c>1Q2o850DeTdb#@_2QBq&Jq-B^MLeY+4+q!D$qA_Ip9&n zO6auLh_mh*fyVFGjZUf%p=2V|vgWBYI?j-dPQN&TWgfOngXUG(G7gGC)S)!O_rR~m4$wHV%z3E020CsZ|KO_@4?T%g)hOwC z=u;}3;xYISde^l#rj;Lo&eNG$L{B+rmYRRHMd=Jwypg>vzU`9MWk&$eOosr@l>3WB-MKs~C zoP8NqyQxOY?(o3WAxn&J@`kk7lHUC>eNeMTz52ZPUuY4_w>wyN89I+9Pk3Fr2i=1b zTU^Kj&`sIuKq`6;ox;T*tHs@+dFbH5h5#j~PHvu`a&3aNHCK|GuW~T8Ix=;Wga}qq zPo?kViN|J>KFY_f*RjLo@{>lLiY1>mPzum0#jfUv#CL7}*glTgWv?xG*5?^dBFCms!Afm8T+fKe3IOXz$r zCbO{RVe0qD>-Vr@OSmjWWdS?o1b42yMaA}5pKp4CLfGs|Z$8NX25VkD^=x_FgISBh zN$-;W!LwE2&Gf@Rq0BVxBRjooDYvbO$Kq6=H8sO!E|LHpJamf_M0;qjQTZ<0Pz@~% zuIYt`6M$DA4)K$xpd{AxT;01z;1w)L{oHmR^L-qJrA+KT#=kvvF05k!(zmZ3mA&!} zDoLNN=bw;<#sn`Y{HqSFhg0pceJ!Bv+{_!gSrj28tlK;?Rx{8*)}CK zMIOYFv`x>tlCbPl+NRKnAbiocVQwyNE4=2LptV;n>3H>ZtqJ=bKrl4QtvtBzsj9g`gl|QS3 z+2iMtP&m*uF)WSEa!&7dT#LeHshDNQK4>B#l~Wj@6@rx<)fUpt2lOJalbKP^wSmDuRz)f&yCgpC@R3AZ&C zu^u)?-jo@{QhI&$-=1%nOo)sSNg_aO)0hGMsxy>iPpkY&SOK;2*@9p8JOjdY@@4av z*MU$NJZ&MR2lcz0<{RM`l;wy@E@y6sH0v8Zekp%2bRvNIfVU5eHWUUYE$+o?aoQuP z`AgV9787&qOF?W??!9F26>A4eHWg+Z$5Mjlrg?rVe0|+Y;rhx22w!3K=t9UbD0D2} z`){TNs;*=<0^e$=_dIO7^8PWXpR_+EIOq@687GULT;W2=h41;qt#=?{oyf1yCQpou zi)*(@55!_0r+Zwah8R|#lW%6&hxz0(-(Iz&Se`n`(<`8{)PH>sFJ!o4RfNcq_Uv#h)#g-< znwVgwiuJ_)L$^`YscElf-CD?q5P16_TyV(`u6uaRHbAARl^|;&8!D^%vvw@+gVNZi zkA6ffKz4kS{w7v3c>D}#(fKKYsUbC`e_H3TxIkp(E=fl$ub3I%LFvE>+r~x*gI)Nx ze(VfKg@ajbQSqMr&gd~O_Qy+F9a7xqPygOn3`NbG=^IT~LRrYVWrSz^P&T&R?$|n8 zD4t&z&a}AcR$g$f_ z3B!V?4}=?*d?|r#91;|O&a7(PACGAVbp}Ed+n0E~IAbbU4c`!#X}OpOV)kP7R`0NRjA!5NpKMzP zF4bp)PA5u1>SUB=kLLZRV4f#MJtDj9xbz8OOezN}Ff6T}of#o%qn zTrgci!e-mlGfa+fi}Re$!@!ct3&rl!5Oh~lYAn$UlA66AJ(CZIRM!Q@fzRdeq9@L1 z-`(TzaD$@tc&{^t@pc>UbbW$}OS2eEoB|0z*UFhm zzKlVp!Zn|WTk$F3YA^r1IQog_vgP)bfMbBxQ_;5q5WMV7yi{@;f^P|kkKfP$hv>V3 z8Tz{Do#Q_pYsZH{jki-4t4#4;U`^^{n(y_cylPi{Oot(?5_>24#qc82A*alJ$>j5*>uHix&>chK2X64AUtr-7a1+`g$l{MFQo;5XKT>c|*ZHgA2mkO)D zlYK<%Gx48}yP*~s?{M2u(J_GrToau03FDx!O>gT&%nq%kTb1YD9dob$wQ!_U{+=3c zyOKbo`Fd;3{q{^?_aA2azlCQRRM%_O!>D&Q^h=gyA$XUqAKL6;jh^$l)ibso_*lb> z#UoY?zPcA&JPlY7<@JQB^-u&)_zwTmcq)i-ru#>)D__BA-5QJ3Gzakel907+B^6Q% zriHSUf58i$T%Z{@^rr=5lDD;Bp|h2~((!!Z}J=>=v{v_5|i*TvEkhs_Q~ zUB*)KKo)0kEarytj0}I7LAwwc^RxF;AtzeQ&FQ@ylwauSJ0+40l{a^6iu9_7;?kTj z-55`ZA6``7q`4DQRVHq89i7B7>D;rq+)S+Tcs?zBO9QLL8vZfHeqqsd>(tH;8V2!{ z&Azqpg`E8-(*EAW_uV58LE%R-LU*kXO$z4v4`HVUO}6e{O=s)Y-ncDyo#5(;2qQWu+sJj$Z~5d ztC94>m&+X&f6MN`Y7<_ui@cK9Tsmnlzk31O+mo-k9}~e2xYuJ?cLQ6w4lRAP-;Z^& zaeY;8|1jG(iTldhU`UC|%6uAK1~m#F-nc#wftI8i8Jj!;bn2U$cozPFuDhla`kL3F zeJ)Y_gI^mo3B`4PguGZld!ftYZA!~f~U4tUR_ce}ULtB@T?D`8>D9bH5+h_pK880fvcl$zhR8aEY z5JhOU%kzIJ%LmoP25BH;{>~(gw!_)V^Sk;K=}fk|*}hKbM!eCWeFq0tpu=GuV4v z&+BcE0JbexnQgJSiM5t(D0KTUrkrAHV;DL!&$d0@ z`vdA@ugJN#iNebnkBi6V?qZR_9H-+nJ2pSO8)951hrM^#75rgrL1OlX2&HcdIH*~f z8M)pWDMlp%HsnwoY)({IIm?Em+!!ODTwf&YQOjRAZ;Wm8;?}|;l2|!9{a4^eAu1m^ zE*8)00+pnV|7}0!4ei1fI(^RaK)4v*J|@}(8?ovQj_KaeKDS0f=CkJP53gUQ7PI5@_^o}iSD z#N-jmDe@caF=@VX@cKt=d@=q{b^0e}EpBsqJ9h-~)@$hT4=+NKgHiT{DP8DQ{5o00 zSq3EW;;#O|Yc%~9 z+I)lZuAaCK<*sTDTOUMW*j@4MHS>D-Znmn!vR)TEW7q2y=9J;U+=b@9ypNG08?)8L z_!kaoPs=@NnMC?}P8;qWen@v6e13Bc1BY+t%7~|{A#Lm7U2N(`NPa|QYd3g;{nc9+ z!BQ1l24j`7{~2L%!@0ye!itc5{cVq#9t-gGbhEIj7j&C*?c}o|0dM?Fz!*8pkA|;+@ON!NJGqtLt0Te{_|D^+pcHX?&sK$dy;02xlB{X0VkaJXQY(~|dzpKY z^jh+YSJOA_J-^3mGvs5_dJBp3u}?5N&G=)R$z{mnvn;;Z{TQ0EqjoGsUW496jUT1! zYk{;>+u!i0W3}&!i?3Up0J>=4)#*=bfiZjVY^X{IjNFgDfKRUiqe_~daKsIUi}%;j z%{qYUEklmFeiKOA*{!8fBFH%`b7y=7+pUzO$?I#5*ST^XKwreBXx6UljKKTHJ|m`%7C?E002& zllmV=CK(#MTcx+Je+%6|56K$EB9Nr~JS?QI0X2v=DpGnBhJWZS8#jD_5re#gzN%M% z>2hrY|7-A2(DHXE>On}_1G^+T*PFm7+hY$hH;Q9s-XWFH(}P- zB?UI|wb&TSlY7=k0DH=Wk}tg{A<1daCG)S^NbQWgSy&f}bfe5_f!mjHgxdb3*~1uF zXKv<5TE-!(U_|alVFWU#o*ImLj^K#Ez68hHfjGQhZ6Ryz52RdjHh#oBh65eR*(EiX zu~V9(=VeMXzANg~P|Fy=XF(H|=db`upT+g-N;X5QLG|{Nu&PTg;?>t?d_W$~SB_~a z2ik(7P^)AEFqG>}zOHhe>3v!0h`I={s(TJnQZE8)boQWH(-B~PS02;6xe*u(K3QJ5 zyJ6@b1_kCj17)wVqd}7o3`G4gi%~Cvj?Ubey|L-=PE}Cg%)K^Gs7nmfFk}ddl@$yYBJ zvD$AO<-f%n(76U#wl>Aty9;pSRnGKUEj}FnBq@AUjDS?*ecKt2QjxfzZotO8ggxwJ zi5A)fHXgj>eWJ_^vrQ+xHgYXM)?h)G7_Toh^1pXmiD`!J;m0v|DEojodgOKEaxGBR zPD}I_2*5Bg6813lVI*2VB5U6@VA&3a(B757s7QM6*uHTXWxJ$I?qUaKPtx~uhn0bm zc3RWkn-7MbEu<5zLtwD1<5*x}7YzJ&FyOzpBG94wrh5OKV5lkfkDz5oz_XY<-MVj% zSQ2pZ`NYxf*kZ^z9l`Sz``%7}I3d3q$$}ga#8q3S$=yF#zfBhD!37S-%Fe9%!dC-L zEh@5JA7?N4TaBZV%iDwA?nBlrfn=s~Y*jagi7B;)$gtOUpt+^ukWuRq>lAq$bXR*~ zc=#g{7W?=^HJ7k`;nPmj;4fGcDY%GkzcH$yeomZn8j49-;}nNFXl`=2rOY5eANxq? zqXXSQD)6^zb5sRt^PJg%sC7V>rj(WxYQsp)Dcv~%J7C?4-aH`m7)C`6Z@jOzhf%JV zne2To!2ID8=q-5`7(Y!-xHZjTSbQ~Lcw7QXi2Bq81`CKMPu+Q(>jK>y>FlqBQ=p;E zNyqy&f0zH$_Jkrf#f@4)a!=9bp#b0asA z-sEzAb2&fKa>oYf&M8QK|Kn`?yZuNAg5(vRtJv;b<}TJ)g*B%6wZB}HG4{sS`2EV$ zP;~gjWr0d6G=*(z7}EbYp+@ZNM7Dc@Kpb1E9>7x|OUeJTN(ZjPn0 zXEFHFmEqF%Mv1r~fAd4H&+x8+0+DAE@Vin-bUpfK>gqb&78u`ZX_4D2{1E z+p$h})-o?tKjc*AQ=5W#duGWYISYK#xi$Ob(OuZ^>S3|{`UluK;x%N%os9!(AM6DT zs&H`g5pI31R-|36YB06mgLF}Xqa94*h}7JhZ-o?Ox{beF@Oy$Rj%`cV6^4-6-yF!E z{~kw%rvG}mJw(Pni~OC}4RNURjE$Yo3#4?~-^v{6Mv}%9``Xw~*yk>mbU1J;wpQLt zRq^k}s@bVHPvpe-fbM4-6nr5sB1w^Rvnw?4i17^_zXY9JyqEZeb^xKcd}^IQFOWSC z=-qH!UDeYMyoiL6 z*Uq(f&A5Oe{VU_V)FBx9lcQx*tq4@r<9P+D>w)x1A?c0p2_Q)PO{@CGfc9U+E0>D< zq5gz?mV>PnWV2W|3p_e8@v-4k@@qY;`nOKeHdzf@t*ck+ZDX*vBDv>=cpMV*?-a4G z6+_DU&+iV?^N=>NZLO3= zS^w%wzd(h|mn>#_BE3eSVx4x7o3gSqwl(NV))xK6KC6d1zng`T zn0{mI^sm*qGQU7u_<$DDjy#C+FOS0Eqe3x1Q@fB}G9YLZI)aSQ6K#hpoRHCQKa}su zX=I$66So#pL;Bg21Q&~SI8?#BpVpy>)CjPi@$o_OMJ(9>f~3UCcj8!i?wQ*Bw)qAn7FANs&x%sMPe4xq2lMnj>~fRD@4J_lCd| zH}^=yTqQIG-3EV)VMg;0#%!XkPD{1=ZE}#cCMJmK!2m0T4 z_N^YZKxbX6-gj;Y=yD<|lhb`L^wEfetuzK`TLT6z{C)$2ZQI6FPcebS!6CQXAP4&E z#HY+dPeDf?rxSfr6B;i+5|A6ugi>`E=Q9t}Agpctl$04e<_ZrsJGrM}t%PrbVCXQm zhMLU|`F+Nour)t6+RWg9$LFrZz#b$Uj0IU-szu6MFRh3O9;78jpNZCN!eNd~V~*_^ zIQ-$GiSiSBq$@jmWqe(S!;6Px|A{%_u>AhAnG3s+#*nGAF?o+vp1f}MAPSNjNVQGE z#z^GfrtV$43;WpCbe+mc!FHpn=644A*s!-HCo9t$i*Gu}c*^}ozX_LnH3ys_cZ{)F z|K2rt*Ux71ecd%^<)&xN`mW~ra^E|m{a=9a$>R8h{#1jz3CYwl~Wg@JG5c5$5I(Dz@gief$ww2u`@*{0P&|p?(nJ zg^y~#BMxJltIQIA@)%b9U3*@C?+$FbEWI{NSO7a%!kfOAUP)9!M1Z(DuIX zGm>u}+B(W`M2bad>57>#Qv1FMss%(Kt-r9v*M}E}%&sM$ezn@C7i8ZmZtO(bxUY(i z?_Q+NpI3XdqX#MBe+?;yEqb~Hhz8Hv7apV&{jU_a~Q<}0%<*d@d3?`U71D zDULV8mY_eUqfFjA4~W{bf-bS%KsK3v8O*s82LDRkBLDddR88HQJJ~rvThI8IJ#h!4D`ER$uHAdtgvsiCum{5J>Lvww5BwFre34#_R}& z-k8wL$j@HTAy9M#1s0)6Tza>i!WF2jD~z;r+XS!6*6!G?xf}gFYQJ0%+=zvmw#q%t zwfL?|OP($EI5v-pGLM>4vC~JzJfL+R`(D}WuXBySf!JqP1Lp1^DPUTqfB#h++`7Zy zbX_G{9$UGCgjbzV0 zwxh0MNNoM2cy(1LgnGA>g%x(}p^%PTHRi?kB0<60uuIsq>zrg9Wt9hEQX9-)4PXvE z^-^8B1nQ`Se!dvi2|3bz%sZRsp^CFS@sZILXsnB0u=!{X?c#ASe%_-)&&DvG=G0d} z(A>W^%2Wu5QcWCm6J;P(RDO7|%^t{KtQsSKHeR z&8Hfx_MVTyj(wsWLabE|MOV9o%cmjXh>p}n_hB4(KW|1@&G94^U#klPGe}nSn&jit zLGmEGf6M1?9Nb3p+^Q&q4vZ_@pQLg(@@B)V)1 z>(>WJ$$y`DTJ|!Os3~bxnR!9&wdW$q@pjP6DIH?7?ijQ`{M+Vp`Zjb2)7&WjyP4OZ^K;Y2_(KSboj)}hD5DS?r~{99C%T%G}Aqcgxq5}F7l(;H^sJz z8T|%()_fa%Tb+R&c|JpJ!IIcA8*M+pmx2vr(Nc%z`LJ46>rr%?0~RTU1V4xj!Q>qW zf}8hV2fyU$yVGI+AS-|PJ0Y(W%8qRL9kl-~)YcA}smrNA(?$2!OQ)=$jr+dj*{4R( zY0^!3qT&lZa(DGNrrJYaxb3*p%XT0r8?~1tS^|OfCffX!C=BTE)(SWufdQLy`j2>? z!@$8jf76%CK&W5Uph42=+#hQxKe-Y5#DqAk>`y~?iFugYEEPJ2n`hkn)SxwOdQHM^ zL1^0Axg->!47E=bZ7LJ%nTY*M;xD?~a{mVa0RR6Cm-jmr3>b!mvMRGLg(NeS5eeyy z%1SCbp|V2BEETd>DA^hKg7K~WvUb>#lg>P5;f%z) z>5AjXi#6m!t9(qVSo*BS?S4=NW{gJ$uWSGPh|+Q*5?i6}0G-J0H3|2CbXS9 zx|0vD?=G`~o~$Z%Zl@^dRiOKJ{$2$18k4MUtX_a#daFL3+XB#Y=|YWk$q00_m?$Pm zuRy1ZwQiHQ6tue%h}|p&&?;DNsDHQ$n*Bmo2AJ#s&p*^9?KnXVjd=-U?r|u6a<$pQ zND8v<=nRe~r$fZClL4a+m(h!Bt>XONYD`_0aToSGjYV?Da`SbsW5v3#Tn~p9*3Ikv zx$hQ*#PW3hlIw}sB6>StUm+b^b?jqSdML1+UwqA7hz&bpEuRTGS7K+*^~EbUhOtYh z(V)0m3%laz&PD`!Vb>$Rhm*PAvGd2PpSxvUu#@tJQQ-12wpVZL&2x{zwu6_=6&w#C ziSLn+o<=n`eQA=hkt1Q__>#fe8%3;n;zzIbA_vQwSH`~OMPpvVrrBeGW=!h1#6QDW zgOBY(W=}Y+K==d6r^_qHA>*u)j>>UaD7N9*karP*im$&vQVmi<9i1!hZetO^O15Z? z+uxvRF=Az3Tp6^~aTbw|Cqt{uE62Y+hR}AKE9aBnJhV&5e%<(R2HLYLoV1ecpuM&B zq0{{lXb`S!L5F$Q!42@ z81d9&?W39BVUdXSCPOS!Ne2;srsw@Q z&W26iJfvt_c5H4lB)(t|!d=K3e28{ z9;HE&kmj2cY+~4AXmw|n`6)K5_=m)fpGD%Tlb_LLpPBAt3rz6 z<+^3kQ^;PgRrk622Z|GPQ{2lVpxjaFjQuq(s9K&N2RPb69dn%KV-G%PAgTFKp5p-G zuCu+Zd-qSqV+P7wGEMwV`QFr=0nu1vFDS31-j>K+_Dp}`X z9Z=-Nn&p&pMM#O&R3dRsC+)GKE#e-}{w*w1-n%f(^#F^5<7(#)uVCH9%2j|OWV81|V{`&yS8+N%WtYkUcKNhedBt>}lyRhjIw&Eb%8w(8%mp`UZnbT8j&0Gsr z&#i2?jQydSZN5R)?gdn<(b3dTR6w;LfpfGb9I8q?8T$91fXW{QUp+Y$;p_`Ezc9{(O75H) z5yOSqBqyqR(2uO2I1oF5w#3&aUmuHuO}za9mWT}SJs(A@eR%=GVrxV4XQUxI`(nYc zv;@39`VCYAoIGwiP-%l$O`0rrY$56+2#p3 ze&_fg`;%FP=;1)f*`FA3I*<(6Gr7jUq?sVwnEf=lRs^zwLj=Q0Wgyc&+bM^y05Vt> zhhndHL)w!}w)xc+NX;*7Pyt0qwj!TaV>N(;Q^%I*g^v8|hrhojN*TgoJmypK0|?fT zx{~Gc9K1QRw^ENKgCoBpdxH+?6XTK-skH??Fy7U$=a~={ z#(&pztKIa(_!W(%)LXYPKDJn7nbiT~W=~y@S7*oAx1GcL-ODh>+cA;u^(aQo)3VC{ zV8ux8eHG593ou;3O;a{|4#W0^hP);+VK6cdd7swDfU5^h>lV4u`yGijWx){LndO@K z!}g(bS!BPZ?igCfu$;KYcnWpjCG_e&3kJ!CmrdQj0E~{eXZ6S*0xNzA3Z=yYus>sU z{rOo7aC&&ALPP&FJZz6+n@w#4ms8SQ#tNd~LQKu}wM+*Wch>NHRV8@zl#=0Bh#WZg zR4QAjw1Z=4S3cW0Yp^Rh!^#~<3D!|22?ahXV77hF+%Gtk zFI5EWsVCiowo2jA1+&6QjbU(`<#{wdIt*U#hRd2RWrE+W`O)P1T@W~_B+)xf4E@Ji4$`6|O6 zcyYC8nMJ-5g3`aa%qQxCuYs!72j8RM_CvVul2AR^A6am)-X8@QbmYg4ejB3I-r*yI zPP6E`d*G98HwF5MPgnZs)?vu9Z;1Mr%NVXlZCcc(gwaQDMUl6kU|c6D#CTH`6ECDv zrliYb3UsHGP1<5=)da=T$|X#r(qB1KO^fNAwBt#Q>X^PQuh=lnh#5(f-lTKXnDI9( z`EL>#GY_{ddEa@B89#b18?0W$j7Q^Ui@t-HUctwj_=p&EV68VjwKoHyX%) zhl~`1Ju^}pkj<@aacx@}a!vOPg%n+b{98FD^1Z54|6)-3xy{hE!24fkV`RpmOnjM$iL6En_GA(gvY)b8(zjt| zYD%%V-UQ}aF*%mpUc!P!9vYFF$5-(fHQs^}Nz-ke?0c*T_%KmI@WApRs&SLY zqgXb!;Ju-thNY>otrncuu|%YGi`^mw3pc1fB(0cX-U;yy9@i_FwTta1r)2;VJa%y( zxc31QEEmZ7b^Z9tV1E$f%tLgok+CRd(*;|!+O%;Ef{^tyTG27F5GS|36kHbyso!lR z4ef&va_nzI}V4*eqU@KyL@7(assnoY$c|&b7BFofRrA{`dzPo`9;g z(N}|y>!IdC*s99%7}TnphH7%xL*1V1IkJpBQ0FYGx97Dn)V+GEcGmGfs52fB9S_!m z+PD1@)JnEcOQGL!it;g3k8ZeWcdOjL$>yJ+ii;vK!}P-4;0@8aa=8GT8vAyya`H`V`Q#;U;+ z%+t#rSW7z@biYOq>$YAIrBvFnA$hVFCY`Zy-G_6aEtGhhF?9 zoyhD7Pkgkeee)tA%JSMl{U;xRa9n)!j64VAxb+wbsy>2ZjkAF%SOsNeQN8z=#Gvw< zvS(PX9MpVDAfVj=s84q3jUAH*-20$g{ZKy;!x!@e_UJ>Cqu-5`P;O{G#)7 z=P7twpF;B&XtFzY<^4Pvs@ggEqlz%}-!x-QKE`tlNwzP?(C35-OW{MjhX_?a=|aUmHCPfE4K z&BS0C%e*X4EeR{%)n5`~q{7;VwjH^S>)6odMArNK8Hwf_?6qE>u&K^U@#3X1Y@T%{ zNT$VN%bNhPooOW`MMiopXA-dWFu&5Sm8;llVM2A(I}2MM?zUK1|B0=tfsc(@(vURs zM{z>)2$Ih7I?lvWV~dH|sgAda*sR*c=2NMO#GO67Iomf7DH|Q-tOv2Kz?eQnrw6O4 zv)9j7c49e;;jMu;d05oE4|+yzFmr=O?8WsgOlaUeu{rVtz2%&JRk_N*=P@BAU40u~ zC&*HXNUB3t#sl%j&w)^EQ9=KeX$8uM-rveOeimx><&R2^e1`^lDrL?YP9U0`{&l7` z6q@%P7JXS&2Q48DF*c$0KpHK!bP!^I)*lQ>PNz(ut<9Yfl|KpXraFS>PDVm|qpzcD zZw0iEl?)ncw?KQDEEBLI7}6~*9)o~Bfi#f{DIQ1GFvx7Tp?fmT)%sx7Z5Ck z)ZPY}Lzq{MQP#hmvcI;&(Rf1yV;ej&Z-@?IW=bssh3g$GzVTfw=j~yvILEcFqIVT* z7EQL)Ep}t$?T9qJqTSe}lrkWEazC~RjeZXH2|?0SVB`$LD7M{fFC4wN3)_@$%zr8zMO3Qm4#N8k3G1*++kGLQe|v{EM~-2q8>1Xv&@df<`n$ zjItyYT+yw6%J}ae?+MTTEo%!kGNvVeXiA|`_5n{xko1ru;Yi9tun{$bOBHlxfxIE`MpP$g9 zwb)2}<_JB)oZ{@WQ_x*8H7GqE4_&`FPgviqht9+m(d0!F>5cZXZzeY z`im2Z+1&Dnm$tBlGoqR@qX}E@2#2ut*D@&C-9qAA-GkL`x?-SL_+% zkUVrS9lLAZoG#i&gI(8BJk=^aup{M1PhAc>wiW(ZtQ`tPl83ian)h{VW|xqsyupTz zJK`^YxW2`jht;PA9}%!DLyST4I3woC@EIm>v|(cEA8m@CyU>By61V5;8;JZEs`KRR z24w9Ib55Dcg^~u|i`x&opsFj|YPVtrrp1RBzej#Uqev_u*n zU;}|N^YE-KHnocf)TaJMQn+|fU7!`V3s(tD%C2E&(68L5TyfZ)Qyw9_e;IpyuTC|d zx{m#9V|Djb1#v*+Mcac%8#s{m##2G=IS%|>O>mNH!NCL6-@a?!z`?y?zYVGnMFG52`D-`#YeCbJ4DpI}}LV(zWaS zvCy{Eq;)O-Gju-Jo=tOIgzk^Bx`yo5(EHn9d#c_6`r9wbUo?9N0|dT?f>tpYl#v%b zlg9;vsk+~OSlh$k%(XTqIsq75dUVr4!x9F`-gKLaw_z|ih1Axv2L}JMZ!h5qg@H#D zC;I6A<>^O`znA?8y-wC1#7RBqzR2?1ORO6@`sRN5n7xO#Lv!EVOl+VBb-M%rk-8gjCuU|(h0taiyS)=As{&BII>1`v815);M`W&9vXGvh* z9B#%QcBr{6A@UBH&a{R7VPc}To@Rp@Eg6|9-AGILI_!O|8H zZ=H@M%=|{aD*5m=hH-^Q(ys|ZaQf1aNHZ5?j2d5CTYLzm8ncnh!nsi6>oq5mod?A8 z@idD=LeLWXhVhH#8niX%R6*%DbXLk59LReGJ@-ZLxtz0yzA3ETU6Tw0-uDIU9yZPX~{NjKHwSk1xzDDKKoFvgD`s2Zn9e4H(yzVOWLqEUp4! zXjxA}G3PW4J+PsPV)25(2J!S7%P<&tr}l0tjRgH=UM=4(H=);HzhQ&sU+5~Ea_6kS z3GKbgrukS1q`ZqfyF*%`N!Pr}#%&zxvTQ9_?&U+d@jc-uJtL4)PaZo_uL+UMrlQqW z&ghfRCE}NBkLl{R^8%KUSc3iLqVsE5BiWfEayJNx(tnwI1v|~HR2-Igd-?YfMH~uP zQF@nAhJz)XDLf(hI8b!iWBblE?5872C@aTckF^~0+1ga>^ii~vKE;7;CUs>_^8dV# zO5o~o3OQ{2N#{oY&l9R%#0L>AN3rMtSU{)0y_UTNXkd!g?8K#fS=9Py%bCC<3P}d1 zCG0-rLE+$$)-0||P<2R<*gf(R8l#Njt#+KGEU+W1y zFFf}?$ZCOpb&dtm4dOVVENb{Gy5_7x6S2QtT7RdVzx zAiJPrx`IBC3BN6)x8i}EcreD4$p*-l2a>M{E5Pv1eI?GMf1KRiqc0hD5Qb9EC*{sd zz+mAg|8B2V7zjV{HTzQ>^d*?Z=Umc&?v7DQfB!`2C^KQm`t1#^re~~IHFiPMl-%)o z8gZzkR_sMmPxgO2O-9%u<69g!t%BV)=h#Zp8L-b-?ktZg2?u;@ zU3brZ!@+V@h`99%hiV;F_-GE{aAfP4qJkZg6=fXiVHnAcf{_pJNa6^+Wopnzc^u)F zNo5+c!jb)26qMlsNN$~#vzl5!vPO`@GwH)PoOW|ziR&B=bx+6sHAfumpfawSe~bh1 ze2JfbEnr{J-%G`C8M|YQ4E9*`V~5!}RlUyhNLu4MqAYV0n{+n)r^Vf|?!QPDzVvM@ zQ|!C?E$TC7x{mwPdy`-M3 zfoAoG$Eha}TEEt~a#w0Vr(Wyr^~~GQ6BItQf1CpPpQdS_s+)yD=D?~oNgEhCcgDC+$Mte|`V=%@EYafZS-#^nj88Bhu|g!6%ks#C3!2;MQIk3DeNwdMX4XjxU_t zNq1r7*dO}M9@>ALs7G+EzlGtS38i>j6oy%RUkVg7z!1&uL$=A=ns$#weOkt2)OhF?ZQ;tJ<#yE5c_Dl^AHS!OcugtNSuGzpCI-7U9J< zd45kSX;$nk-4~H;qmMlc_ge{z)!6@~^GSLy9S&aMIpSjyh(pgbyM!lC;;^464|jke zl5ZKT^f`S0*Z;)gcIf{9Dc&zw=a1ShwM5E9%Wy^!LxgFBo|&_f77k%jGaO3X^Ivp zAM?ack0|S-)b-d#*&Fnl*o4j6QXf_Sdye(X_rk8baAW!J(@L(TJD8L4)3ivH2g4;U zOjJzz!i$qXrTI52A)80MN7?8al%HR@?;W=U^%oUaG%IdFGc~t3iH;Il8{$vTv%G>% zWwwgE1B}oU<>i=BpbP!!x^YsxyI@ed=lk(6TNrY5XX2YTfMGuys&nmgK)%mYo}*<2 zBYe?~BPQxFQoz3pk6FMQ>ZmJm-`wDh@KHAM#a-}*%Z@uM{S%B#Cn@CbX@-#pa;s8G z!9ec4Anf-s3x@w3d#mO~hM~X3<%6~VJmak}HN!P281O$~Me}Y2`nauo&gq|lu7x8K zoHqoZ-J?kPW$IsOnV8y0ce@5e`VZ0vA{L-pxYl*kWEP5PAD>BUOoHUyHtTYwxpz#G!Q>!R(}5a zem?h}d+#6T-0#3Hu6$vIOR?DN`k;F1wFUNPw?xbh@FA5{F;^#^j`Uql$&kX147t2M z2?I}L%5?grTU|pI`^#~Q!=A{>y2?v_tbqgDqa<8QEO9{h)}?XPYdCO2EM5LTKOB&l zb{igPM%Lh8m#GmUWL?@9+qHH#GM@(;*Dqf~M)A8nCAQa)o_J)vo^d?VZg)36QHe*& z%rTSDh<5Dzs75*PwiLUgh@`>W3?yyb^5)?1AQH5<*j$X!#U`o*`I5pkR&^4#6UZmhviWxq^+Y16NgxaI#!vbT7+r>{BEjvhx1K{&&1md@DzQLNT1ZdS z?}U!Oe?tv}A3=ABM4%>N2Kt687ikqQfifeQ*7DpJXvVMYqhuZcJvG{x%~c*4Revt~ z-IoAnTDkbqPxipNU2tQ;`7E%$Yj91gFks-q)h{!diZJkCoo9$>9}L(nu5gOpgaK)d zsRo&0VD&k^{>4fJ*6CXUDj&3gX=~Es)?W;aN6Mk>230^eIFQ?7ycK9$9-r0qH3y2K z;h!*{Jm?c3Er&YZfUf3K1S1PG=n&>|9P=SV+dUnXcl*+yVJdQb!LS4>hP8BW$PL0P zHK~;mGQu-|t?gI!u3`co@%#l&F)T_GPWs~Ngf;HxH*6Ui#ujH4@p{h|B<|Qe&;MH= zNkoeSL2NwOb3Ty@Ib_Njn@mDhy&tF?tCs2 z$Rg}N!9o9oEWu*A+CnL0Ugwx;eXWiRqj{&FZdZ^ln^rmNd;qCG{p#HnM6v(h3hj*N zHtc=-(52*(A$ECOva|nj9oxr#XAN|SV4I+Fu%AvaHaz;|m&)Ug6%GRXt`Q_K+vD*u z3z{8zKenGI{wD)3HEe4wx#gjF?|-{*cYTGLyuc6hC<`soIT6G&;Xvf4r+FPa4W#zp zvR7KQp-29rkH{Y*AV1bWdE&D^P~|s(V51n&;=QwNYL$WBm+$b%G#eO$--$Y5?7(bb z*CQS@0G7k9ZJi;yz?w}}Y`J#~1~da6W^)+BfFu8O?vq>?Fx&Nwpq&Q;BF}e_4yFOC zS@4wRA0=QNE^nj{rU3J1e3wt)D_~eee0#`20=h=2;WvkiKwD?4{b{HiD5rPuez3@2 zoe#yt!x3kptDEQJrrz7oq12;V;rBP)N67jlXm_M932 z1i{B=TP}xe#5k47`vi;R%;A=N4gWZq|+ zemp*nEHM+swM*T|YCLB#(fb+)_L^S&dZ`cxwD#Th>sMYyu5B6#HLL5gzCUJaR_pej zd#4+=dd_EsgKK{Ep2E2vMQdb)Nzzj_gpuyKRes~oL8PfhxY6ZOkwPuWVHs_}K4#S` zgQ0iWos^zb^*sYgC(KxLu1Am%VJ;T6Ee)Gv`u8sBreSsOnwyWhBCxP%f6~lrevIF- z@X+*eEj+6&S|n@kh3vuQ5bh8|sIa+{uE^XB4UmvO96i{)DH!BFVh zQ7>xSbP;-QCyc?pS?ISZ=(eS zo7u>7jT2Y~W~WBc6j&suoBaPGVSqzwpS- z0z5e{_Uu&P!h}yU=|Q9>EK+ZBie(C8^_0#JBd=fB94tf2=h%vb``nrjH~M17eD8A2 z32W@ubxzDZ*@k_N8}6Kyk3h=R^};THr;)lO?fsMIC(@68?0)z_2N_~}C8LUn$lOdc zwam6hW((ixL{<^9)QaVPD~=#5{Xzbb?PrliZq!^j8@Gz5Sq3Ey$V#0wf2Bo1mWtsq zv7w#FY*f)mkt;^##1R4E(hsC&#wRe5xn|tdf4l5O{5sEB#dAAfqfp- zt-H?WV7F=4ks3KcB=J7dzkdGam6+B3hZg1KFjYy@GS}RCpAnl`-Z^(bkNGFeX zT$Oi4M(nktW0R}CLR?fZK&=OvSyJWgGrN%a<7KGdp;e#4!D_RqJc-ODj9*v2ifsWo zs$s8?X;i6Ik$VyuRH19bHjc>H%d_pq@&TkPtO*@XT0oj?ueSRE38e0d(YxeUgygiR ze`wS?>=|6gHDeQvokNe^cc~>~d-37LWACG|%^+T_(y0R*8v~NA@p58SY+-V_wG$Qu zbrcIbj$r)#AELE3U%~yn!nCzg3S|5ZHF}ni4rThstA1y?L#@A7R*=bNXz_Ko@}}(s zLOS@rNm}Lc*Vnsm1}H+;2j4--Tf3pRI?Hdr;3)K8X17wQaRI79O)%r{-3gVU|5xvuRpdE=uNk?qWw64_WdMjZfiYIXUFOVztjMwcDtF0 z@>w9OldRH2CZQ*p&0?mlA3B>fpYUkcKznhVvz&P~v^^5n$a>2GP3InYi6k9>YCTbr zXx=<1@=__R*{A`@I?_MG^Zw%bBvbb_UcH!dW6d)Aml!OXvUZDHGQ(=uR}F?%rr4zE z#N!ZSh;5FxnFYtHAS>Cv%T?2O`T$}!@?o*Pt;@Z@vYH}T`eD?4wbs9q|693+g? z;!?ThI2)wBSkdRszku}HS2n8hK0^AR`ZmWD=kBsR^XMd@k z$e3yW*Iwd;jGpSh2D`bC;nBIhjuL>3^~DO)9CApvwo`EL6+l{^zKRGl38}=DegB!* zA;t6M^ReCvBulm|99+7KJ*6kl*gEE6=R9AD@=+P=*tYwDIVBDWYK04qZUIs3VVQFVEqRBqJhCdD&D+X3m8fR zvDQCU{mm7n_3sS@fFVDB+IztP7;6+h@};T*JuS1CFZCAC`Bv)3b&Y`L;MRsG#etgP zmf)Q71Spob&+nhp2D0wNKL)76vsx+W2ZDK>aaEPdMItXJtAcVmBXY%fYotNJ{K!Hn%oM;!LJ= zsoD{2J6z&n+pmdDmg4^%+_$Pr`oVnMJgQi>CtQbny9{Re8@fz%MqtJQ2l!G+MSd!Xe2KRZq3Pr*7jFlEt=eb=xz4Vi0wF# zwogr+lbeSwSM4S0m1odX@OhD=B?tQQo)uZ`oPd72JK6TO>_C|nHK^o$0o0TYLj6sr zfOg<|{(*mmK=V$2!!;5Cv}XDI{Hj@?z3!RVA9o386mhzX$R?m=C48Ic`2)0T_ru&O z&jEGJsb`e`H&FG1=!W9qK)EoIx&G^EAQy-?g|Z!nUWV~taCsqgcS^+EX6Qm^@POmN z@L1?LFnF~Eq7p})A~J(;xcTt zE9)3EH%7wBCB7h!3hc0%ddsORg`EX6Umg1ayBl{{{8_BQ-gw6W7MmZE<-=}_{ma7s zTqEJEiYcV9E*`Aj)sEDA0`kf||Bza*ETbg*dNtPsuF>n%LK=JG*yG*qH_ zYOhS4MfMz0y-b&+r_LgkJO8}8&|RdgpLnmkaTLjAQv&kO5c>oVWSrxV#GX5~>bX-- zu**iTO!j6GlGMjOo|ElE;$r8)#Mi>u78oP%vF#u>f4|~oZ5xVpk(aevYOZ1>M}v7z z9RUjnV>yz4?qX_;fqH7^UG!qTo%(*k0U|GW7z?%4LYBIO)YO|fC<)^-GrCd)RixK_ zL+zZ0FGqsmox$Msowy zw(9)QTao+NFVjb_`OO97?>MkEyd?R~ExjNRjx=Z+Z^W3Twanwa=W>{F9o$9w)gk`If_mlHCOOuBns zX#Obni?jZHuNlDpyT2pSw%B05L6YRbcT(8Tv*Yc$2tFjo2?+F!c4FV~drdYI5$v7* zS)ZJ+1A8bsdh*|zvD@RiM4Z%}RekCuncKS}=>mbv)02wr4p}Nrow-PGIrfk8UPF z*5Kgwo4E@RH!7rCpXmp8etR4cOijQjdQ(Dt01GqfB!AbDr?B9ylEn>kCYFCFiF_pR z18YwF+I-|V9UHVByq%H)Y>|lVQ!-!WrOD@eq%V6QAzdwCW?Bl{#d@}WWB-L6vA1S6 z8Ac(g-?x6xW zdp)@jd(PW$IKjCQyBGf$6^8u7ZlBJ~|E43c>&@gDpHI%%weItSh2=QxT=UpggO7zB z%zkbz1`oDBz1V#HM-LJ=F2IM`}NL^gN7q869sd_`}Sbo~s-gVH@ZsDp?@czrSxJWn zWjzi?F?Q%*SlZRCeG?Pyr{mUinPB!vsAv3xt5{^C%I&9L{KO7_>j-UrdF-H&43{f7uw#akQ;p*bc6>Xt?S$hF?5KM& zTvfG<9d`&noXxjm`$#H(RKZtlKX)}z{jNU}9rVw7R|O*B>D3GMgYwwsto*mhhK8*w zdX`kx|FC(c`A1HzFE$?AsQoM{5$hyY>fh|s#%dndVe4sGET=vj+ElrOMW2~7Jn2jL z>aY5`y#n@_GPUd|*64~}p5>Mvy1Q$w;>eN$%FyBAi_!oM6< zGiwH|ymvKe?t7qZjeJtk`9x^z*(slT{Rt49@&?asn*hS>zvBw-13oa+ILB4O&L)PmK!tLsM(bC*!Sh&|oj!TXDJ!YA4>;(o23pwd$+rG50%A z;f}FsKiZ*GQ1VENX*lEyKA#-Dia^pQF2lvAFWRlD9d zh5u5<8dqnwTf6RJUEzrU;fJHxP^^DfJS`NP9!LBgBr9MG_mBL4_vnZ=V# z+S$8@Ca|^Y*AbP7aco;3*C21$fNe6${N`UGvU72 z+R*zc*~I}{b?ZBPxcU%7=C+nL9l;i*NdLqQqS(~NvsfJ-i;di6@>hCevHsMgbfs1* z)(WL&T(btO`t?DLnzb7%GP!E!<+QO(qN=_)l8%L!PlU3|mtzj^(ehoqn=u_P^AUv2 z@kMTgj%G3&20kXM|CF0Stw?t55ra?Q`%iwCWVIW_Byq` zl@Z8ypWyWWZx@st2pG#db05mjPfL6@h=9sVwY)4Bm@YAhqUOqxQox>Sfz>2_#-IcgXqCj-qj zDY+sCZ$fi&>7NthPoP=5(~X>e1DZO26^Ireg(mLYT%qhvXcQ{)`B#1p8n}daugTDW zx{e6hT#^XX>gQNw$WB3ZlSjXJ^AV_GyS+&$W*RC4DLMgcE>I>Kt(`CB4Mh?=o*gV< zLhh$vSAVT`$Z}yljntiol%dh3%e=`DS2*&`zA+pE-j=$DhQ@(OWYFFV$qDH3_Q8v7 z!!;N=Pn-7-mB)m>xzQ)#PcXe$bW=c&5N7wdf8={ohk3QCSv{J&vB-{U*DD`~rJvuP za|oqlc^JK<+r|Dc3Xn9`Z_Zw>` zbbeTx1J;>7<#ZB`#k!*3OA_uASl5-~dv~>ebv45#_Bx1lZs$6KyOpqROVO3A-Ah>O z=3+tTCt*#4zzXr=5LPqYmJ`Nmv8p@uYo)>!tW5fRC+p-4R_F}QUOM&)%SM$5Yt5fx zN!>nkd%s{T^lV}d{9eL5zIU9#;?|fQd+GvPU?8Ud_x$D7S$9nIwtRrJT?4Iw3oa5hK{nH(Xe71qm$3JbMFpaOd|5+TAtc@bo+@(U02T62W$N!9g7T1b4=le0WsP_4>#zF& zr5P8mR-Z;Fe!0!9b)^dm?*#>TKL~~VwJ!U(&BGzbi+V-JR|~S<^jV3SghK{Ds{K7k zf#jHTu}1T6;YI%dSLO~!h+1&mGmZ2-Kj8~|oy13@zL<0;slrKr4Aa+_`v$Bl#Z0NlpN*FzG5Z|b z;Vdg2%;BCt$y}Di+?u}lA$1bwA6NLYT_O$(Y@IE4zFzgW4;T2vuYJQJ&Hjc>0xnqe z#dzxt)-)Dhe5@>|G=|0QCc!*U{ju1oezLpyDi%vdm^_pl$D-DY+%vD%U=e>kyU~ME zEL2|<3Hx~g3sj#JHU{j$d|r;>_D&(pZA%X4`*{y@E_lw_+M8i^(UEJ!S6eZ2R{q$* zwkpgx_+0uzRs*IwDK;KAOvgkI0_I8c;|tr5n>jyS#~2N28P~KLhDita2;QhiUq(G4 zEH@b+E$A_Is9W&HtgNH?QX!b$_^!woO#^o;zAKRF4u0Bk(zj+;AT;*a8gJ<~h*tP? z&}rN1|Me=n_O&$_;(eEMjlRr5qW0x85mPddOs6cgls7}#&XWm7-fEB@FcK;D{uN{x z*QHJdyFli)Z-uYp+aNP#6W`Y$d&pY5T-9OM2U*Iq`i9Z_A|u>Bl0lIe>Y?tJ+tPrg9xM>ebu7~H9+d(*qE8i zb4cNgoBF7G^cYOM3!k0Y-(C_};o7dZTFtB`7oo_YIhoqWYNW{5e zxKzDwM?V)v-Vfg=G}I(J!}5WG{{a91 z|Nj)1cQh6L8^@7Sip)}4Rz_%`z9dhiGE0((LS!Y885+pU-aC8mdCiA=-D`6PDMH&S zq$Q<(et&(=^Urh6=bYDhJ?}UAT@yZS7TAxE1@%k|TR731Ye_WzSm|2y#l3sDP~QeZeI8CjOK0-S7v%%zxyQ0%L+H0 z?0SM)Yg#`;w=SUJ*-vM_Ln)fci}Hs1t)LZ0?wit{t!Qig)IHT?bZyVL(I;AuZuS38coEsq-AIxp(pCfA(^8HyJBy?H zgW+xI2fESihg0oTUK6^p9KYip^#xrrB(_>p8R*;{W8lcyiFa9~4fO?bH5>)JI&$qcPWT5u$$577=hTw;}c1*l_4%xv@(BM65@jr-tZk6f`n`3 zB@ySeAaRSJix?h-#K`VfK}A$ZoSzQROa2Z?yT7X$Z#upHc2cW7q9Jki$w!_ZVMq+1 zM5LXbhlB;cE}aKDkRY=E?4*$l#EaZBkNQW1*hLCE$K^hV34S>mn3w`li|@A_X)}cg zU6FnFZZtsX4fgG#gxe6fv&dS^_7?a)<|M=It#Dsi^?~)7$8hJPeqy!ob_~d=zb6<{f45b#c+!i;-D3h+&7qTB>?72p* z^IlSzAR^@V?w2+u&3)O}VP}b{Nqbq={%gVv(b6qW^ft^qYjIQCq8YPp8X1qREMvCy zL$l{!Low&#f4#=kKOz(c{Wh3>a0!Zc*tPi=xIl@|`_$~QF(@TS9~v0Wg)*|b;KKbYP@d&= z*j4EiRA@Qet9;Q46>Xfen@$-)#cE}-5zQ1T{xMk{-ee0EyD* zJ7ATBH-gmX&|!1xTLtbV^w(T%A;oUM$kfEM6Bi9Je#yOxr8*MRm?usclx1P&Z->L* z3-@5oTM5y3ouQatQFzHSuMmrFL}VD>wZW3v9K}{$T`bq0%$m0Uft9Bf8z1q9VwLLc zZ5UO@nv`7xY@5Pb5zkSANio)j{*r&DErGQ|9tPQ*7qNC} zYgov>TCDxF?Q+zURjeg(NttvnV6E#S_g&2`Sj$X$YUXN=HFopjb$-vWx_ncd*?<*R z4gQihm(Re;fti!qFe3?1&zI=zw^6OU>@V1xQj?|cM?xTHvw&uC z7{riOc(aX@A;lwP%lE1|$l9!;GWRJMayt&cUn6gTLbE|xk56}@Wa2jL-;x0pa(-Wy zS6!h>=A9Q|E*q)~`7e1VkfC;?$El}m(@=NjN>Vn~LcN)+z$eb{&|p~G#U%3y2;wi& zHQsLl0=26v`=kprUi|9Sob?SFb9qfHolK#zU&1lx-x@S_Jqoj8@`1+qnv1-uXQAtvqXdc$#*wx>JqUS{TlE+0UP9*DWr1#xhh&3NKEl~L zh;qye&1vj{2RHnM+w7C^21j?t%P=AaUYYu!+n<4P?ruKx&d-=$BQlp0atCv44KnvE z{l$VQOZv$Ro3ZqGqf|&mB38;NJrkluVYQt5=ll0PuvXv(OP9Y0)=gRs<~q7ygWq9w zANN9RWJ)Nxb>0n|3@cK#SpQbTG)!;=Rbi=xc$cGN6%CIKyr*zhL0#+qPb_kuH z$MOLkL+2|ZSS%C!N;>WY=3R{_&C6KD%*$%7qUYi;L0|GeG2(U%3S1giKU9Qz6dM7h z&&J^IYsnek>;iGo(m9l!WAIG>bc9L{E99<3?6Bryhhmv0I;rG5s8Atu{Tt$hYVOQ) zVf+3-tsPIK^BpOu&+ZlRcPONAe2C} zxlJAK?R;pw6F8-xd=DD5L$aPZtU>MCaEfj0FjNQcrMMCJq2krR*1ylUK(XDN*r+~+^x?un9_lNIelv9S?vZqG|C&&J?YRPa@rN2M`-ET&m330~U@<=97eE4!g`6zCgqCLNNA9Jt@}9~oA=+o z`A$v=TTSbZO6{vhw4Vvr4gZbpIlJ~KFgId{TX4r8`BWqxI_wy8k_Cyx!nZ#RI+3JA z61XEbhoqRtDY0Bzk<_z0WY^MjBu%oMf-?t@M132Xsq+I#S((iQh5Ja-Go4)hv4X^j zdpt6UJV?}Z-=m|bh8^+$A=BGxZ0{hZn^Th!GYfpG1{$&T3CWo3d=s1Hq?}{pvXM{` zS^wdl57zx<4sr8+hc&|QBsD%&Vx{nh2&JhpEZ+F<#<=wg=0x>Jw1tLa^4o188aaD0 zxXWC6WO)J%BrA`98PS69uLlxR$W@S5RMGin4NEq^p~3v5B8!$YG-;T+JrtaURyHHsAL?a*NvhhvT?3*0x1wCHm@W`G`<0wc zEr7)Os^!~0cOZ>tuqRx94V}>*{60L6Ko;BRGTSc+zj^+@@4)wMnn=DV?iv$!7&~=+1Cl*skR%}`DjhV39j_M| zBG-;$`~6po+Ux#powFU23Z-LH@hi*vum7+?$$Ia-=u23WQAzp8ZHE=jcZf-2s#x&b z+5dafG-k3}ovRj)!N})cvcC+>K`BEgvnn$kqNrs;wH`T;8Q;>nDR(PILadCvo z%k=5SZ~9RC-#JEMn<6y)y&kNZb_SZCg^XRiwF8jfL*{4CPw0?gKkcwJ0f;q20XpIq z(7DI(NU3uHkgaxa=FutvN^t*qCAAso3clKTJKz{}o4>F7cFrDpxL)yWa4~_NggL*K zqyXqyW|`fw-UoVx%}$noMKwJKis#VjFwJlhz=}Ph~mRyki}9 zGX(TW8Cs<1SYlG|-?Te_He#L>DUT{AhGoMFZW;b5SR?6I8KK9C4LTS5+0Jdl zX6>7IyIz|j?x#hz#nZ9F!du^Sc?n57mD4D!Y}i>Y{U`A(Gg3qzCJT>MVwY>mwLh)$ z*!@h@uY$phJy}c>Ot6o%n7BOp7yAs=_BHAqz~08sWBDcfv1f5Od}n|ycKn@Ol zL~J*(&OztQ?Z9f4WT1ric>fHlgl^7j>?3Zn&|~8+TxC8Ay$KCZ{ln~`FL_N|&LbB3 z?>e@p9Nq#0{Esbe^6-+Sy z$V2Dx^Kl+_CxB=;+Vqf~1npOOr8We#L5pj^*Z2+9Kw#^-ReUiHYVLx7hFUR{-4ZhB z+TIK~HR`uGML8h0TKVYH%ZE{-@4ng-qCLimJUIF9R0`%Y&B-yvjbqt}ABW-66|BKK zb?UCRNN`tAFREOWw`0#sTVczL8SGPx6&Q>%#(swplQ98V9B^hoWunS~gX$)`EB}+g!4GQ1jy-lb zq#sGV8vr=;)F%2Uy9EwKoWsG%o+TJvew>-cWo0E*yyD-orZm z82cl#wq%c4VBd8Yr*FA_*t2H;T7st*yPcX2aw+R`Jj$2YRv0KEeitGyLZ|o=QdDd1$K}Z^neb%0kpl8=14hLaBjO`T zk#sDMqbJUPqhWR7=FO+}A~wt#F3bGbiLD!5TzHLLu>IGV^>zM#NV+m%74BDtV&g=FjJ!2f$xDaVo*@J`k5(U*y2jEcYk1?jg8KfFJ ze~fPafYgq&KBem%(l``p=2R=BDYyS}*?bad7kzyD>TV(JtcutpL3yO@+bp-kfe)!; z9GP0R%SgRn)i*EDh(o`(zq0fW!NLAqr$U+w4%jnm>Ub_<-^h(+-5ndTms@L%aBUI0 z59GXQJVryxrZ}DI?O8~og#X-N(19IRXIB4I+GA^%re}=gI1-}sX#*VgSaU>8c{Dx= zON@5>{>BoFnR{-sIWudbKhqN=sN93le4>=Q@&aUYtUTH|s{&=lX%^9$7ok>}b|_eH zH#C+NI=LRY32i^b5fo`tD~y_k2jJ{j5Ip&bxj( zLN|kcJf|K%5D$ZvFPoNMf38#KVJi3;BehP!Z_3@NIO;yjY0AE)Asw_LLnnf<3!wp-{5n` z!G4}picwKM%UTb$F_-JW^R8pP>v_d@pL>)f)}`9$XYn>*^9l2^Qxm7L-C$o>j{IpP zF55PH`^_Nvo``CxN)&bt@xI?x#frTf|NFio@(KI7sG_mC?{Hwjblm2oFb<`ZE9ALu zLu$x9#b8S@q)91#wdL1BT6uEGhpnne=g<4_P|^?SHws>4o_LM)kX?%Eg6S6F<% zO$X_|3dR$kJ|X?WuqMlWTcoWGv~Kb(L0Uw*Q4y04(wM)Pef_L}RHLGN`lLM$iI*A$ zJQ%_OJNxdUYx}Y9zLib*>Nf1TMmqg7^(c06Gr5W1lk2|ffxZPU+>*#$DZwJ6>FdmrJ4n9 zJOT9k39NHT>oaS?Rf_l>pg9Mdp47JiYKLf}&PqQF%^rJjMAZ!jcU#HQ)IUML0L@gQ zcnx}{iGh1lE0K z0otegY&S=1fgZcJ==T82)Fq3X0l*(I+K%H{d2PmgSY&IGBL3B6!59 zR|Oca2J++aDljsgV|H051LKV4KebCMK&SlYr^3AmbV-6vT5clH9AD2K{_+B-32!s6 zb$7tfxl^2D?|NZCO2fx9ln;6*ZnSEb=|Q)prn+CtK_Iv94H)LT1H_f%$1`Ihp`A;5 zw|1ffH0?_3bCmCcnvV+MY|_q9a$xul_^?4*=+7%J9shyV@1o}&Q6`vpr6({vXdf2F z^-JX+7RKsQ6}PW3nn+kO{zwRNM%;D|rd$sq(Q9`99>HTsz7(lWv*^O^jaLO(NvE(k zy7^N2ri0kO?4jq+%8x@L5oTh;2}q49k|Hb#Ak9_&!y}erq$|x$uv&aU`aAD)mZR^H z;n00f^`!waMy5x6^Yw6epV-CuQe7NA%Tl~A$OnhD6m=TXIdE8}DfWcRd1NeBe8#*H zWJG!8Sw3S&23O4)iyiA8be2dvQu_;O)sv5Y2}vP!bQ@2gNHz|&$)zl>u;4(lirIIT z7ucuP4mN>a*xeTU_uVZ?q;S1qvf2@hBo#hOD)l3_YrU+|8@IwH&x5)`lNwknlf#?2 zER7|;hmCR{cVgN?t%j=MRlIe)`r=4>HY66swKQEn3Wf8w9eGXvp!&0++(F^v(0DFr z<(4WdpgV#4*~|ApZ0w`l)Z+qja(oF(1{u1qEZkjCG=|=}vpiq43}HZD%j5ZZ2N()j zN#7~m0aQwV$!jA&pp||+`)q^>=x&tRE0gztabQmm+ifFY6nEFeJez=FzNufFH^0H~ z^|GHUCMz)fq)spT1j2AgWs7OhGz>e$2J3qXz_3h6g&c4@Zw=C)+Ae2k zIfKn=oMy$*KunCwJ26=K9gA3`M@@J6V9n;AkEH4kVx#kyKtirAVwFkv?!~J}oV4xw z^JxOfWTE!gD&E)~%qsIla1Ztgy9ep2>*7F^Fejgq3J&$JZVYQGK(&&AP zt2t9hPj?@uHZ37TQ}1o;0AoO$ztY!r&J-mtO}pUmY4zaDIz=1~X}ig*a}bBCBxxLM z>-^QLJ^V7!g~Lf}yR_zPaM(D=jyFmI87mrFnePW8!)>DH#99T?8T%65cxI5!y+h98 zWj@l5vfkGG`WC73CY(GPYB;FqvAv2r3j0Q9ZkTnw$DZ@65z{e#NC}_!(tRL^q;fbD zrLdkC$_OtPGEZW&aIUDkUMSYKSa&zl60y{}%>LumM$FKZ<&-6!M~C2|WMH*`MA?M9 zmZ2O__`d#dJ>?tJuntup_5TQso&tYf4MqWWJR*d4Z~<{%gYow>Kaig%dv>dThVJxH z&jpGi^eI~%CC;kDK-qiq*j5f0S~zdHM2`pRpJ}G>4L5=IG5C_?A#tEr`}vNvx&Xt> zH`|Vt3XD&;4psFD!LX6)8~KB~U^v_In*L-r4EO3Dx!h_7!$ZwO>PCah0p4B-YBg1gz250 zTAQw8quI9hpaLeu(!ZQ8v^6BYQ{s}@&xvGefmO|x4cMJL_s)9d2=*yixr!FB<3L#h z!F9&!e*gdg|Njh@XE+rM6vve)qEu**lvT-A(mFEAN@>s_yvnFZ_AG_U${tzSGBdC3 zaIcGN-HA|L6A={G+=i^4e~&*diXp4| z%x;4V!N~GddQTB7Mb=K~?x1rq$c&|0c-eI$V`lC@&6r4JD3pd82osTRsL{n|21vUs zDw;Y{huv;(P5%xOv6FvBP~Kk#DSpqcNAMbBOKZOYkFy|>#+_s&%A2rpbax}!cmQjI ziy5Yl*Rf)6T2et^5*8k?t6`bovl0`}2Gj#PorN)o)*Tt>(89aqcvf z5=^DuRf|EjjM81KLzIHg{!~jRDn4Xe)V_g zNnoAd*Kx*999Ri#`|ORk0E<}IOXW8MR@g|eEwT>Ks=H2Lqu zvvunrRW!_-_MshIuL}LU6`O!D!p9y}lXNkMl{+V-K8vLu=af>a*I?Bbfx2_TdlBW< zlw|WnBQf=g&Q0ZGNDg8nDVhdg+xcQn+k$u4{;hM3Y{6FSGF@}eLPi#;NoQvVZ%-qQ z>FiNu$%*tjB5G5^kn#M*h7uz-WFCH6_f(k=nZ)oI4mmDl$u>J5RH{Xm$Ah6m#3#r~ z7Zv%_A&0EjVeA!7eaH%_)V(2AhAe~jjPskGBJ+pR^*iQe$h412rEoMMqpR7YfX0Cg zUY5S5&kLl>a|kz91|aQl`~C8Y0PH>;N=UYx#g4Ja=zpwsq}+&_l2)W(OHQ|{IAJT2 zx{2dWpDtlzk37TL^f1=??x?cKxQrG1zw0bOI~Lyj!0x&(8&gj-5S%@&(49NcnTxLw zqCKf6={L!cW9ww%Gf#rjBOc0gN2pNsQnKdgKX+(gNC)e;+XL}#V&k{|4?sSDV9S;* zWze?iPh@_+FSKX79Mn8(4_#Z#^rv)bK-D8`_e)I$+Us#=n{(Pg50_Hyo|^&2^}TzH zC%u8m@w~ZZoFAAGTCMCFSAeDt$U<-8#F>X{9&t{G2J zzpnBqH2w78auP7>5C2+cuK~=H&0&%kZGn;Ew*Fm;CeVkkzwI0+1ASfbi;WC3pz(ak za`NGZu0Q&xV}9E}$1BU2{C^jLBD~hRRo4w#?wj=VIlTo^^5ieaa1UrKusFl#F$c9^ zIA`uX0_FeSoY~8B8Vbb|Mq7=OAyq2BNuxLu+#_t0K868C^PFP#*iB&0Mz=z8bRL%c z7C9)(R)SR;K?%>s=CQ#x$TVI$8HqBpxxdw)AbEqGd%+J8Y{duK{t1%UZV(VcWL98j ziNn_t6?W_%)jZZj3P#$4;zw*cO-R3j#T$&4kRjaPc{k$@GRV~?vln+D^Ss_YS2cHJ zR+VU5SBN5O&FM*PY>stUK-Si%&1bjXM`n*-+#!2MWV(gj>+hi; z!hdqY7y)ulh#Amyw#0a_YTw=qF96pHI0I z=UWO*liR*Cz6V2d)ouScQ$J|6Ox4L7Tn5U73Af$3BV;mK$C6P zrN~i$zR6yt`#=oP>3*7yRR9dvjvDUV3&2=9PHrG51JiOrI)G~un0Z#|)yF>rlg2k7 zYIOjZEYjW@LlQ8ne5#EzjfIU znBf7Mi~fzkqql*&zNf3%R0BGHEpT!~#Y1~RXv0BuM`$~4k^i*eK9JKRt@0M6fH>~` z_~ZvNG;Sm)h^%9S8rjXqj#)%O`7UyC=>1^Gr`q3&e^mx4-hcWc*ZF~Sz2d+(;V_Ke z^XKE9XMUKSag{n>a2iXVk`G&4Rl&-nzX5^^nphtsqqLzt37gWjLq%?xVY9{M;w7yE z*s@fzD>~siQk*u8j(xd|9rYIH`_8yw*W1ziM%GhEC5o9H3oJld&GKIsUnJ7qdneAh z{X)jh+Ybdf?U0d}Gs=Ic0~yQRoO+H1$W%W*I=yQinYV)i)!Y6K&up z(s_$a-a%Wb!JWt`9yl+3SpXTzgCBJaG?1Q9xmf;J7-^r}9~}{HL>iy5k70~6c58WF z7@@4k&ZC}m9cweBEFCo29SGPOXRsvYJ%eQK-+}(kc1Se2-A>F_MikWzh<+Z0)mJ(W zWFFXnWtQw}$Ci09FN1Eaw>}$_O8t_WT8r_1;T)|0r3ukwtMK=h{E(eD_`%w<5=w4G zuZU2nPV>(rTU8f+blc92G=GeUHYLFGQgxP$!%cciyGlmU@$9tjU z&_H3!7BlENYLYGQa~!B!A0~b7i3XazlXfz@y3G^a?w6M~5z>wbTy!Lh< zFalqe62GhfgR<8^+SeQyU(QPDCCIGiaB@k?7%{b7X6FiRfU^G$e^g-x zv`{^hzRrq5v!R4X?GIUKDj665E!GP4-we0ThZ{hZ7VoZg!!A(j=9^O069l=tXr-i6 zNsypk?$g~$0gF2}KFhX#7&CIU>5I}NW{>b>cO_iKlFJ)~Q+2*z<@Wxikqr%4S30a% ze?%Lbc)u8xPZ%I6^8;~lWIML(;<6Q$7r{1L6RVLwVb~tFF0cM_Dq!6Hc~jjB-$2T8WZzej z!w~0H)=l&N3ORcAGu|7SP-1jHFha8#2op&squ8!M-T9@kD7GeOB%K>l8CnCR(|31C z2#NwZ<>=%ogEH?Y=7trf6%7&ih0-c~PcbF*)^hmwa z5|w&DH{{y#cS;Co)3fE-0fIntNA-xkSAp8%VIXZI0o_*Lj!9fz3!ObDh+>xd(7`Wu z#Emut6v=EZhvetb%E$kb$0`<@S!;Y#g)RZn^@R7KYEgbFu? zyL_rV6tB&v_`O*RnO_Aaom`$kl(kT3s?8C!885MXMK{EkVN*H-vz(YSZlEsNz7tFC zKG@3Rn2rQeoubqM#M&8&3islh*ytWOvS+Lwi34e$M2B3FEcA`rUe5ztkCr}s+G&Xt znTI~#J)5z8PK3{keJgfG=Bi(Ll!RSNPltv3VR--67l8lfX@ zz99Yk1L*wHzpX*-6LfRm8)VDf0Nryx6yzO00=4+3#BbGmK-+cbL9T`~(9{SyUxPja zO>aEdb;S>8$7?on@QMSC&vg6FOB;Y1ebF=VOf7UXb*8>|O+(iZ$JIHlEa_)e`zcst(Ona{EmdUox?9aZ^zoxvmWcN6Ia3e(6?nm3Y(S* z;@Jql=i_d~?r$DW%7t0j{X1KFUU40Ew~_kSU5UkR zTeT3o$kjjH`;lMjyc2e9MQ2O)ci1VS&6u{{j_nJ_`g|@ik&>SpaK%Rz+Z4K^!$)ec zCEV=7Wad_EZkOe#SW}6_5yR!Nq9@q+Zl~0rehI91U6(P8$ym){e?_sMj^*|nKPVFn z@Xh_Z(FdLxU>0jUT7>UA#;cZY?W1l-$NG-D8+o2XXwCP34+m!wTq>;5^t|OoPsn zD70X1zEp-bhE$s@Kw=#t+(RQ_fOI_Jh_4!e#)XBf8vb8;9uX8+@SQ(Occ zasupo_k4u*WATOa#3i8YDx@9Ve+*jbrkXq%Vyk@p))(v(g62*(53TYAAPMM6R$>S= z0V^t`=q)rPC!Yxj{0=q2vWc;;?0|6ocI5gwS19=v^ws)(6y!}Gxg!(r0BM6xLv5d* zLxf4h(rq_?yg(qH_}6e2qb$CK_N>*%^k%m0N6hsx|4l@SUjPS|Dw^zfuB%7F9T%dFmBZb7 zUtSZo?Y}B)<7JDKy|%pDm?KE}anQ2BcN?~c-=2E{?%1(TQTVrA1$O96PanDd5j!ky zNH%Sf#}3_lC!S63!43{r^{+8?*dDc=N4M4lDZh^n{iYir9|4c0{P${Cq05 z?h@|#<|&Wlw>vfH+5yW3#q%IdQOPSb9_D2KWbb# zb37dyZN1iHnJz)opRAD7qgJcjy&Ek5Zv!;v_nJ6K`~ouFZ+M_}wfE?P<1>%|17lqVjM^dd?RpRz0cQ*KC1uXS!kIwtqm;m}ewUXF%KZ zjU>sD+tB9Pz8K(S1+5G%pBsba(8|eUy6OA?v~0`RfAZ!OG%t3Js#R(LiS(R0vf(fg z?`&$+wiJfO=?>96lg-f3SfTR$<_4&}%l*^l)qSX(bTN+Cdkp1T0(WNr9f0D;nveQ* zdLUPCtF52uK}dVBLrqfkIYg~ffIW|tz^2BfY4Z0442;a;a_l^WNl(zYa%eAREh$X1 z9SXt1U}2qS-Zofz|MXu#(&PR&n*$86*>`AHt+*JHZ+tCmUy8(*EoEzt)%?Ylv;&p&h%#*D zdbY-L#1mU}weoB{>#)^QoZ$a(0$VRj1$gzY`uy&gC%D!DTkxOx%agp=a$?UgMN|OE zQGzmCs%EgcMT*2{;*O-=!MPhR`H=50eEfaZ&pn5L zeCl&;{umj^yUR(zN$;WgZQdh&_zKMq_fy}#KLMn%F>{5WH$XZjS#Ya;HxTUu7L;xC zp~*j}HsiTEH2QpZI6IvP4b_TM@jrc_P764WnC3urrdzts-w7ZLCY&_MNrbW=>EsU@ z>QFpJthtsJ0{Kth46XSc2U$Wbhd%b#L$dT=y_nZ=5WYs6Vz;IftRA%ITz=Ao{)O8m z^Q?w2&M4|Z@yaDk=N;QglBmGf+UG}#E(>AN1wri)g+o}%8*^|=7z@j(^Tr*{ZdiGz zR9lekC06%8x-b^{9qV?u*fAe`#|Ck>s0t2##J`i4r!pe2v0W~n+P{EJ9{=Q$PIe=a zn>IhDS%5^ZZ_U=)T}bS#IWVjA8HtNSy3QWwki>I*^E(kiB+ics-qbfjB1J|)_pt;L z-4eofeDy;j=j6kL51X*beN*3@qBS;l9^xUe6R>ez>ZY{HvCfd6r2R<~ zYviOks~rZg@>Bl>E~ST9;dH5iLvaL4M>gzYS0`Yxatza+Jsk6ff-N%52$-d?HmK-? z6Q)r2PxwyEV$?43n2Np=`rI0w51XSST$D3J;!ZXS+20+vw5+|&L+>HL}9@qbu)Yl4)9%>8yYvZA@ zAdy9JT!Kd8bQqY2fHD=a%7HmFQ_L1CA@0Tr2ZHjdh-pe*o9a#89P zC^6J7i+TD53YWESzCC;$a^=ifm-ehc<|&_VoFT=KVl(JAVDuiMm6epo7Vd%H$NpPB zS)8auuJb$WU4s6E{%b21^`<`x8jTxUEOukDo@%6(64K-U&EciH; zGrMUHivzgtO7Gi;rS8{ENx!_Y{A}~xp*U--`1xSBW_uA<-tRuSr_2SbNO7HK+1;`F z%fKzpzG18xo?Yi`l7_W8sk){#A*?$w&duhUhIOfj^jo#`u#PTYazC;Y>u6kZ+{>@9 zE?Mlvy{Q(gQ&qp2nfM%QvmWk~AKHmEpTI9AbPrblKG}7Gw-u`fJb!v--owgx_|MfW z0txa0em}JCV0mV9GG@+T=|4TMVAWDAksl~pS(Lz{(D*)Sv*iq6DeOqP#@;v&QP zB7p!X-SN2PH1!#jnN@5$_Zp%6$$Ir0gWgc#(_iGt{Tc{{Js!P%>wvI0Wx_Hpfy#$B zsfn85P}x&jtW-OPz4C+4b8?>LRcPe_frga~|N z;&f7h)rEym%&TYidt<(r&cdZB8O+tY*KitcV)oqWep`)t%=B~CyWh19(|*5QpZV1T zQ&O8G&&`(L%Oi4J+_Fs=RW9*kg`JKeI>iTaKK9{b@t%^8a<|Y%W$!YtVHjAxQr$@L z-U5#dV_nG{SrD|Z)b<*G4n*#q@Fxa$L+sM)ZtjUCNKC4jva;xfS929dIYZJRoqcA@ z$+k0)@hOIO=T1Ll#dF86?BaLz-jfq5GWcqrj19zXq>`8e+1Z$U=7Cf2E%7ohzu(Nc>_;^Hz+Wz`8KBqm< z>TXKMFzdx!VF`PTq-x&kl5@hCii-{TWjiq5;@9wjUGbPecWD0!J206ow~LYR5L2c& z_qs?v!c<+gg8{?;Fm;|mRvl5nv}f&21o9N7{bD2X?ytu5BQYD2H7;ZN)hUXrzw2t2 z&)Cf^uFiYh?i?yvy}!G_jb3|9i(IKZy-gd__&F?Zg+0bpk4w}xf!FvdkgT4`wHcFt zrIR|8O)yEe*>U4|F(znz9$$CwC&nLNBES1@2gVBW8|T^8VO0N>1zpG27!mY0Gx+US zd|__&uIS!H3{0}B{~$Ds{w&ci{w6=rcgs_8dT}ti)>-@9l}f|AypKbRyyWnrfuUM& zZW&xqq&Yt+G6S2KhJr2z5uA6d3{@p6f!Cej6bp~_@OanJwK5N`f&Y;RU6EIt;2Eb8 zBc*K~0-u`Xr%wh#aJjbekencdzKC$x<{SZG{J!Q~TJ;bvCXlhKK>@-ek3N1Fz5?NI zJv24$6+-wN2MnKj3*kR33UB+Lg>cgCzfxyceaGdnnV94}gs)eb?>epkFaAn88nKr_ zXrV^Sy~iIRM5*r~ls>#CBpB+2jguMm-WoNUqY0B_qxz20P zs3-XTy}GDnqXs^os>Mtvqru~ozS7*&C~#RwrMXbPgX2-HmdcY6V5iOV;zv>_SVg4Z z*{mrrHu?*XOH32xwTcK6*gbGq}YTQy@Pf&~NByKN zxn;f7hDy>AVUFlmn>$pSszh7*tySvk00e^ zdvmvNn}GN>730_#I%uR(o(%*$fZ_1T&dT~mxc*#2-($}dSWu6Y4(hD~D=+DNBYX{T zS7G-RwRc)@zaLMB8}9-~*{+?To@(HHF*oCvnH9L||K+&kZvyUHLxK1DUGRu6`77WZ z1D-wVb4oNW@M@r$NHRLXTfbJjXuB?WyBQW%miz>7m5JY9)?EXy=RY+}Dhj~UYV-DD zS)u;{0096043~F26>b#9D-?dwFe;T9QB;}=ovbFA$%>-LN+^UvvI3V#?Vwr-uF9x_ic(5Vp4BpCkVoyl! zL)#oBqo~vOKUyUaan(b!poQFGg(R75cm&CxdrK{Fi>nJ>vgyU@8i7^J`UCj&(!s zj|CC_k?WARp^=g0W(s+$`)UtMOG7T*;=2j`59GQMX=_Y)A?ICb(%5_k7jDaRZ#CkObybVou)ghBFHO%*)j69!TL{A1tY4G3|PNNh|nf;%gD`uv)Xf)MWEW|FlSu#f99 z-{>4hDDU$UGf2SLYZkP%`z$eDL2jjrhi>wPmzc0+=%kC@96s0OGUMGGhgG9oT z?G-2DSTa~LceXe-upLWv%Mw2LzQxkOZ`pGfN3k>^c$3^m3oL!y(y#GV3QHYz)U`h` zuvDh&xz*kwEVwStWbKRARmAM{wS`F!_F$%jX39B|KBj(+40BL^WaYeIQp;RmD$Dl`jLvmm47 zQ2a?I0kWGLY2F>}kV`7PQJ?4s1<70f;Ybv`G&pwj-J{)5+#i^@x@-Ix84JWBj8`9qn^%H8@w$xy;E?K6^j3a_LSib)S|L*f3F>$X`XLmscecCPX!$S$nA zb;-&CGQ>ZZe0W?6iJZ49)o-Ri?5<1gU!}jo{n&a9%kd#F{$=!fb<7p?i&pb}F3yk9 z(&x|gZyUgbW4d{{M<*~{pOSirK*a3KT@;-{ZOjY0u262W8jCa}@0C;wVDXz3w27H* zSSI;PDfP1;5^6)NS64`2#i7rYtNDVkGG^mFkJ&d^MG^n#q2+``j_Zg~LKjxorG2mT zc!o7zi5o8(x??T(!}NOwsaR__=ky`<6xKc^IMhdHVC|F9nu?Emu=a|ug63@&)+~wr zvVJ6uHBJY(?T5#(I_HO_ar$p05>76pDjvbAm_RO<&@))6sVTcj`x%zEKXhAa*F%DQ z;f;U|E?8=-omyO{g)gULe3fF2G5^CGnUDm3e35iT#W)B8E?MWmIZiB)A+@ubpevZwydS8GBwIA)TlQN-R!nxXx`yABL{LdWO zj8LN`zjY#H9T3Cc?oxH4KxO*nEpHu3P#!T#8`4*WvUA_}v6Sz_D`qkC>*hU>-x=t~ zkQ0XNXoas=9Wx+R<5y6KcM-&Hw>ioDuL8XJheXu2%c9q)xH`*Zd0%PVJ(5ju!PLf( z&@V>}@x^*~g%zs7SdbeVv%AItOE#~j`JOCBf|BwrfebOMC~JuO_sR%~!VRw{vngp4g}oviNEHer$Z*qaavw8k;PB4;QAo zVpGGL{<8h?NM7M5X`*!v$r;g3l;yr`-SLbvY%-hQQ5(dI zjVzPQk&Ps5RJv^>($$0{dV#DvuQ4|88(Ck<*@bod?ZPR44X~PXxyW!a469uGD)hF* zVEJpqm)Ebq#j-8>lU}P9@ujnI^Tvv^n0t+npKDzzX6$+rd30PCpGLc%CeKsQ_mJFn zWuhkdnx`d8n$*D47Tt9>`tCu7`=?toA?lDjC2JPEcmiIXO{w)#KL}+F@rK{^h)_|p zkTRYo3B)*}hQY@-P<#5w#7y5GsP9o!{g|BrxFgCa|Jx^M%w${dAEiT6obb=+l&wH^ z*x;Y~gXC|zYq85-4HF@abF zq`ixw6kaqy(#Yh9KX#?B8cz z1IRpc+3^5V65`~=ebUda2QS_uDFd3$ct8A6tlhv#Ok8({h>|IoeI?~miefPqW=XeB zF7r?6U^Q#i-v6*d|98Mr8X_@spX?r(z}k+<2lq7JU_;xgQNe{1*m$Zc- zX?VILg`zfHBvOl%DyPqH^bC;V$FSNtK8zI6%2z4vizz?XUo{@t`op<2E!CE@)V;SX&Ljur{1e;jUml?(#4kMk{m))}awVjz6552!p(K76V? z2W_Tvt?gfz|MfGsYnV9zt+ynU>m2CNqQ&F9c#;g{&tgXn``e+(xpvQ-j4R-?&7MyZ zA42`c-=A)oRzmefkABOahEU;XG&$TrgHnCw8{TqW$d?s#eVO9{X`^S?H>^~JhqmPd zQG3^+M^hOiU4IS6r=7U8wK)i1sQ#B7B{Gb!_@~>*a{fr@oqI>`%0ePvacJy<4AzPG z4i634B5B$;!n6UfNjFMkjbjfsuM`qKzsdz$o;p=+mgGgs3Ri^-reWBobC^LV9zm*& zlEJT>ENs{19-Pgy#}2+$LCvzQ*b(2w9qrVO9Y1;(jr>KBwq-&2tbz;D1PN>G!3sNi zII)|gU9jU)mY#T!FSb_`_xP^diPT}?G3&-4Z0q0Vp1w{S1&d!@Sh%CO z33JTUeZzd4Fd=heOLE=`bk~?!f7Kiz`skj^uZ{>p=7~s^Ekh5XuzzaD{Of)K(8d>U z)v|>PsJ`7)Io&JJPD*jRIOPHzOzXE*t1W<5&RLP&8VQ|OHuLjG3PI=V7xu$ecF?uO zY8Q9;D0E3jycqpl2c0t?)K#DHL1)x`AHkiAK>Id-zw2f5Ms*->O+I)`%o-Yb?es*S(V;G%#3ruY z2gEg|FExjKfN%&zY8;%P&|6YNMzH`gPPx5IQ>%xtI?bhQo)HXMV7c~k<>K>x;%MJ@ zBP=*WJuz7D49n0oh2mn1RrMCGuQEii?#Y3@xmNqIacjBYq1|~%Hnca}{3`=nuCXpz zY$3UI%V~>9btuAZ_ z&z~0bTcab8qAC5PDfKDj6GBw`nnIzh`z6mE#|j|IZO%I9X#w>Y*7`drk3eI7zIvD3 zcWCAfK3nWPm%uHwVc;_Xt%GA2fhUQpb{HfL3vv#|1DBS37yO#i$P9<7trCY0eEkNc!J<^t@net^ zwSi|^=LkF{AC1c$bjKSvHIlws&SA=R;$aa@2P|;oxToJ4K|;`BsZW#!tlm}RzEW%i z8w$iyCit?j$)`syclHxD|9#zdIhTYK%dBfV4V91@bNz33yX3O35GT1+2eH%1{hy-` z4ZGL8>9*M|k3G&wUgyk%k$&cCllpTbq&N5lC;p2@#s=XVT(@r_L(6@(^sXQ>Og5cl zi0LCkv;EfLB4K2#i;+|OxBRZQl2UfE66xA)yLQJ9Vb3L5$Gl1wc1`Oo42IZZ=ef)= znUQqtaM{18wrdKh7ek!)IvzsGh6tHir*GJt_9S3i9~qmtjJS`RT4Q}g{EX4PzgR_2 zj10`{!_qObdwa=U%qiKsL+|$;d{Rf;UFu>3J|0h1{r3$*+V6Kq6imoa#PJF!TJ(YP zeq~s0jxFKaQvPEJw{53GfSJR4S zf`BQ?;Nl38fGIVT``2Y)YgKYE1=?X1T?d6cpe`hg>W+;9C3@}PiI1t!JgqaZ)cF;flnlO_ z!93JQ$Xxai6N4&0*DrQA8lY6&M$Nx03bL#G|I_jkgGT~_+8xiEF+ybT)WJ3_%syjk zo%sDDmTvN`epB`nt8N^&j%CJTed?ZD))<3LXYb|}EUv*8xpU&qEfPrSuO558`z^L# zJDqXHMi6NYJ)YZS^RVlEU`BlJ9QIJ>?0B^`kY1Cq%HtysGF-n4(z!{<_&4>#oG%}l zH|&mAhuuYHwfW1{>R!kk+__s!nU2f>C+|he&B&}05E_V>My8Wi5jT4^GJZ#mB-yJY z<7#Ef(548azwCOj^REE*#JR{SXPS3ebmFY7$lB!&lIT23Ct+CmXswDy^( z1ldADVM%%Q?*=Haj+_GZVJNrW9$-``1vL|OYd!9aLZh_jov36sG%H{3yq-1#l&x+8 zD?_b-`u0_KSISYKIo@OJ;}3%_a^^!xyMxg4LH+N-*B?NC?`;=CH3vrVsGPm*MPOPS z^0gB60OtFJy+XR&z|!16cK*EvSpMlBzI`JBD`t!74U6#Q^N9;Kk7&TskUKbbO8}Td zy8{EKlYwda&$W7{6Bq?)WzNs5fd1N$7_dVcdfH6_HS|=VD|1B`$tDnJs_*t&tdRg} zS_aQg=0j-hcAdU`d=AL;H@#P@BLFWJ#Fpoipqh3v|K7ejAn;`_T?u&sxhEpO=WeA# z%q?sBCc(8B7JdHrGjS`-{(J1(p>_)_{hfw_U%w%-SGple${$G~6*>72(vf`Ee22^d z2W)*h^M^9ug4DnZ)Sprpk*4NnTwHSkyU3W6Iem43SH&01B+B7 zte@R3!KBb=lkMhF;JP)t=7@&?WH>6DvodK=JbFR=eT5KI#c2$=i0_1khgfCkngV2* z&ndHWNziId5B+yh7pQLb|Gid=0h+#1c)|28=$e0iH#p1z==%qQ$kW=uI8Cb>Im!b} zRr+G>+YVsyebH3iSPQH&yVYE$HUN8HkI*%19bkuTda^_5Ah64Qyv1bufL$4UMz_2l z*in)yXPw1?eJnaiH0~R)NLMBGCw+jmC6ZB+ion!6ZS7jF2@Fel_0U=h&~?^6Jaujl zbc>yMMctbVH0Qz=Zx=7129rDtHEu%db<1R)-)Dd<(IdRK))yMCJo-dPQHLt+fO%ho zMtC*F6M2)M32BlNBWVM6uoZ6WJ}al=^PfYRceIu9)r7p#bZQz_>GzX{QlDW%!0YX= zAEhDr7*lBKpA5FfUTcW=D?n;}1;n(>AgxN0=tW=V6mJi{EaFw9-*x+|@VONk&mX_6 zO9@40QdNGOfjhF?I_rIhN02SP#*Kfx1ld`WA09vXgX~2sewoZM3Q{cg9&0$3H@ zktt~=fyLXUetojtj?W1l7M3CRzz{hS{l42EeR>v!uj-I-yKX27iOw~-Cl3kOF8KcTPYe(Ru?J3jFgw$}J!8%v%bvTJSrn9G&8dSe zTJ!g@(fV`!l`0u*o~I6`iN;`?WBlw2S#j(rh=I^qvm&P&5%2S|y+aJRR{npTFQe7S69|1iEpY_e1?f`@5Nv~7= zA7CDDZU3cb3M@m%*M(F8V5=$$E@*oI`_DSciDoC@M0)a!ZF&!!9~))&?7srNJNa|2 zS|Ic)4XS@}%7$JZH<1hMU%)Bm-*Ge17&!7)O*5`Gz`pHs(WLDnu;P0();7%pGg|qb z#X=G=E_L)?ZGQ)JUa{mO*DRn*V#K_OYyj=w-}-dFW&WF_5Q)CC4`P0Lj)_ z-!XqVC#K!jPW-@uSB9^e7Vdq7$oPgkq;ZoA4Nnq`eBRHTubH8%h)!zGws{P=SVZ~)Cf+!j@@q02N$E{k)AtUk<;3Y zjOp;g3Hd+B+SDkzes2x3g||%a&Ltvy^oGYh^G@VM{Ajb8O2yt4DiRZe#n^jF<(o}ApMEkwuHfX>^{yGy2XDVX`AE>Or|Wcts?16|E+!4BJS~wKS&)LtsLD? zMJHhOq~dLrPfA$&nau4j7KWK24ILtLWV}2Qar5>{Dx|&j)L9#N5K7vGlga*KK>YqG zma4wYxgBcaQ9LcsTvAUR2-Sx+gZ0k6txnKEIr)mU-r;bJu@=fw@&$ z%f7D%=v`VR{yE9eU3tE@)DM9cIee1xAs?vn+ih2QN%DB_(@#3!p(;a;SPlUr)y3K0iBV_+cbI3{?o52}bl% zYVsI;fz8qRkqh_Du>PO`%;$ApF7KQttgs#fr`vU zi>zYXWqt6BP~F!HB6~P+eeVTb$N_?-t{>)2eMaUug#-26Uk)ky{jp8_sM?j zbquoL*EPf59d3HMF9wiPoc4s}D}@|B0kg-~l#qQ$Mt|njN@N`@E>q93LMGpPOX21H zK_{LPE$w-O-2rhTYX8|FO;4M?$vzI--sLx@?qXnz>iLfq~kO=~>IMS<~~DzlmH1uWT^ zSdcddwj9eMGl>rD1;bZ9$2x(Nx%a1{S|0R@{#l>O=MKG=xr7~iK11(~BvR^W3Fy_& zp+1Os3!Hyzqw6JgfphoX1N8t$V0Ui09Aoyh^q$fkyvtO(IgWrrx0k(Iqi_TIv^*Ku*p zi|bxjQ>X}~VUz~Fy&umxpU#Kpd43O$Su_co)j1%2k7{Oz??a^5DruEQzQb{T(jaI$s(Tnke9y{>R&-MpvX=4H~~B zx)Z46!=489@8HCQiS0Y3Mp5KL28o7ka*)ThyT4fdOmQHhSI~3}yIml{aSrMdwhE zTLqR|rni4S&`UzusZ2E6_-vC`_|HpN20?^w>T$7cEFwVHx zrbX3*ao&#sCDDg~zLHbbbTJ<2xn@(3yiTM^UH}?dv!{FHIR<2 z236;D{7SHsX}6}S&}AgmeB<>>e}Vn7Chm=LGDvne`q>w@4M#j~yI5`Oz)}7in|n!Y zNIlEZRo}l4X@;&DdCKNECNC>oBsGI$Z}l_(BxoZ2I(+)lbsg!IQ?pg$oJb!C6uYDy zf^@>?=%fJ;q&t`}xbaBi*f$q!ka~?{XD)11*~uWyIqY(u+i9fQ^Bw#pt&F3`3{KA0 z?ZJ_5_Cp0^Yb29n-4`|Vu|Hn?e+hei@Pr%*U<=r6n(aU7cMYNZhaJbJ`pG#PG+sE0x-I)ph2EX2kP(7 z0!McK0@`zB;h!u+Fc!Si$obkspfj!SXTKK*^b3OwRmC5H?l88VEnEcj%kLgo|Np*K zzCs}D8H~l<`K8Y31hl!)yH1fAK;wD_jF;~Kb!%v~LQ4Wr-srtbEns*f!>e2x-+e~}pLdRg>pCzAH9gju)k z`lr8&)^V;P9IP$v`oXV^!)ZY!cfTJ-N_unj)>le6+ARZ5Mjen!blUsJ{T$Nbq%8(> zS8z-rz)iq90>=vf7KwhX!LhlFn23uhIJP!u(|7RS{+W|i?#3S+3w-^j`}h=&G0X`l z1QsAoe?*}5zYL_hs?R&0w!~3uvtK}Zixj!66B}oa;Ly|8c3oGTaG+s}kn_e6_WHj2 zk=@{d-8_OWRYXVZ@O(*9QgXm1+i*_DTU}UPlD+E|uNLNoQqltMo8tX4F~;|e~0jgKJkj^z$ z7!7@z=w3Vn6jwo>kbXWGzP@#Tnfy5ze8QMgm(&k^vE%pOpZyCY{rAU@%Q*t^HTU3e z_G8fcz)N2}AQkEu)DKizwLodvk>m3oWJprjDUkc376T3i=vy$PV*YNU=j@^FSluqQ z67ekzn@*MlgG9_crdN`K?#~&Qv5E{yIzu8Fi5CTka~E~E{yoUA&NgR~bb z#KxzukyhVzG;DeZX*b44LS|Z#`gU{j=82a`JyLY#)35=K8r`}ou73+D243=ee0y>D zTxCbQvkMNE&1&_lNMc_$4fWaKZv}$QppCfB_Wi6A zbe@e1pU8>>Qb?Ua*$#f_i;U7|i}8d(L-Kjo1aTO8(Qq;G%O;>~&i1<976_D$$B*yu zal&Z-`3E~Il7MQreecO*+kpDQnCZZ$G@uDdO!LT<0PXPHuD3@PfX3_p*P4e3r~|r7 zmVA*wHQ)?6tMda!D_C4-cqD-G`t`MPi9Q(VJ)8COvN{Zf5DLxQqG51T22si<2Ktn( zeOzPi07;2OB-L>%bTTmO?P+C#wo?NE72L^C4|`gF;RsZ6v+c|z7(iy1r^pML3NT1r z6=ZWGW4aZ;FDbzt%Lh+u88zBtUD%9~h?O9=-YHcuizFd2e90^>&I`MribZBB2w`uA zV(ML2F&sGmM^*hLGm_ihwaF6oaQHog#ICEuNU`9ub&FERQPKG%Ez1EMZET@L?t{5SY zl-;y<+X+u_*zi*6?G=9{iv}!rFUZmH(*rs$Z_eo2SCZXB@lP01V-jpCI2kj!LXLe<-@jfKsGen`+EHi z4D9CNQXIJjy~SGY9SdU6{lh#gk0%E@cNi>cmQ_MK+cEh^{O_P4`&fWc&1nyp>k zwg2*9q}5AF;Td)(H4j~H^TghLTLPZlWyk(|nwCEppW$Fw4pUUpUmUu`c3oSL8HYy% zqyKOk!(lv9b6ZW#A@Q;3wR?t?_VE~MN}?MNd>A!W-$ z-L?u(99~vzzU-BOLys72Dap5Suuo^jJs=DFdmDB$`AcALa1P;!&SxZXu-FH?wqmE5 z+rE2zh1kCSF?L?r?yj_f;BCA^|2Zsu{iG>zd+4JOg`#dc=+NR*v@1t>1*dg z2G8b5t?yw_W|e2SG)V=*D$iwy9SP9%x9W}iZ7V=xquR`c4d_f#eZ~Iy6p#c3l`na1 zhTa=Ho%csELcgReI59>}b>MOyBRoHN; zU@MH|_Z9M0Si(p`nvzAjIE)-|H9Ddj3B$hOdZdHZF!Ydt#YFimkY#Jczs;t?K$-@R zy{r=Sb#kwTa7IE;sr16P2^r`%Q90A{Nf3zi2lqb7J%RSKH&f;RWI$u?W-^n_Q>bbC zc`uJs14_(u9Yi;G!V?~S%OnmyxHLIzU?wb#$$s~Wtqsm&(Taq;Hp2(3{_Om8!sZ+{ zRMZOXwhF*Dso$kS#Suu{zs=zAJ}>NwoTK+jaU!X8F=j=y7<;Rt?XJ|QVgHS{DxM>m zI6y7(Nd0M!gFlVwUe~rGnJ%Y3A^b0=Z^|e1?S6p2txNg){wv*TcJlwt>!($e(0sX-&*o49r|}~WxY%-h5^Zt3k}V`U|@FgHJ6PT z3|d&ew9pNL!HEBAU%E5Epv(J@EL&7zaEtjfo8Nz6;Od;&3ny0Sw=cRs>T?zPC`BQZ1D03e*Xo10!R0GKEH$M&UQbPeT%WUZ~n$16CbP& ze7am3WrOw38IpfvUt$a2;lcNR8xS2ui;9LckXXy6($Hv$UB2g;<$EYd+M(5Z@{kJl zID9mGc$9#>LDLDj|NX)~i+k*0K~(HpZt)iX+=u;|HtAfqgt1?LZ7@Y-3j6uXb9aeK zU|*_tdV=Ut?0v~m8xdcLJumy1^fw73DYNB40z(mY?@yW#5z4|&-&`s|R|q=_2w8C{ z4cK-{$-O=>78}1PoPLsLhqV@&Dw#ih@u^C3cBlLoEO6spixn}#q#x7o7EWA3TZdOY zmx4}0EDP2CB)cZ$8kRYKOxA|7+4fGthefD~5-^J4pO3OyVSqFwYBD?9Ls4SeF(8%)y{#Qz*r**KZKsQ zJ_Zhj6zJWQQ&2a*4SFVdf)88gLeIlUE=#U%AWc0q60lF6`NC7swbEhh->@Az zD}-`RX`ch4{0gHd$sTZ*nQyJ4AhbNZ$Z(ot1RBzeHA?Kmf$*S~w8!#1R9f9jGH29* zfy=qr~)tW-%?HM>xN?k!=+cI~e6zhZeE3V`)?2 zwSU|f?y9Sk8jjt<1st(17TA5qbZ?8_Aa*CL56_EPWB1)WqvS8~*e$^@5yeZxt`s-Z zjvKSsNuPQ3A>uR=C+C@hvkb7KDR$xSS}eAczpuU}I$;a_c2)ZTU}Iu3*Hyd6ShsV} zt8X%=vHGT4`f{``mT?U;RGr$3c|woh5wIDPSb=+6953E^)8-4uI3S39cPL{yGdy{? z!EdIq6$)5+d-Q^;q1=zZ?dc~as3tpz77cudIuX~Ok$W4V@sMzrXUixwf7SGz4`_on z%WOBci6?+wbFRnt^Fl|8OOcd13lKG`LOU;91!Aj`S3`s4KaS#CRVbq&3^(=uy8nu@mwEdkk(0rLSKmH=zZc* zIRckn3r){``H7E5e;ZTfEb$4cvQcwX5c35bheAUaur$E%#}B^+tU6=DrqR2E1b(Nx z+uIqjuCTwAiNb>o-%^qes@=w>uTxQMsb8@rD?W!K#2s6IrteA1G{LstvuOwYrm;QW zF5ljCFSaj<$Aoc>VEfGeU;c8T*#0nHMm&#(Z5_V%pY3hM*2*mj)?__wIji=gMCSuG zWpH;aWdGxZk`og@T!gUhj^?^(vlkLLF4+C~cpj@esaJbW{>XDv4%mU+Wzka7>wV+o)C?%o4=RFCtz z!iG??Juh|QPdZe58~*lT$Oftv$-@5Jsz6Zoi%gj8gxcREf>%Qf)cZ&q2@??-2>kl7 zpSYnho5ncPHv>(lVnvIVJfSJsAw0!S5}LAXU4;rnpvlZFve88m8i$NK-S$jF!w=Gz zn=cxn{*9dB#~Te$7f4T#x48p^uh}j)szRV<-<~X@jU-gbc)bw6@vlGr=bg#>R}YF3 zUVO=Y^8j*RmX)n=`9j+2tcLu(4?;zn;zOPo5$UnXNp1kyV3TyX&ujbs9Aq!^zH3wQmoSHp4*XHAxumRPb^ z*FLe>8wqVtD{vpNA7{vb)}ruPZ-Ryo=w)%koEXR`eJ86jFU-<2~Tn|Z8(E*Re?m>oX-1H}@z@MPS=2eNv8h%l_jmmF>u;#w=T!(6l7NbH6&}}} z$Dl%z)*AiZ4$6zp1SHn{gtE~|OJ8B(f4$c;v39EmlpLelg-RAd(WChGRF5<$h~d#K z5ebJpTg^K9b1BH-&N=+y^$Ey0{JY|mPco#iP7OI7Vu843v&*Izhas#f-`uGs4*WKa zou)+df_1${=IK!hym41GpZqxv9|Tpnhj$*r(7jiRZJ*U(jO)}1LB6e+;Bjy2bFvqv za0k_VVGh7FP-A5JK*5afHLgF%doWwj;?&1$3m@>(v z51$-WyVvoGgvpWb!V~y6VM2qi`X@g*jO{3~S0wDiNQd7$%L+bY$Qin4uE#L?A7b4{ z8F$1x)=Iw^H*=wNj@-7f1_#yxna*yv!2Q;kwa^+{@MaX;Y#&n%?oQIjULH^bXJuNIcjF&starv%<;9 zH+>e4cG?$QKH-TYk!AFsqytE>ti73_R@sk-|Y~x*`?{}#UBu=$CONI z;f2RCJ=)Z$GI*S$zLHy@2#-^Ul!HS>@R;MtDLp9}2wAfKuaeFU!P@7Z+)T}fKn^Zh zXZZ)n@bL=;tmM|a3?B8Tdrv`D%J{uWY*^+~qRs3m%^Fo-eDKzY$vWlr!-c0b{ zOT)y^vNP)yk{HLs92%QS#_*K7gtIPW3@|W_fBV22U0)o}98PZo{bZlST>ZOn*QYu- z>st?mv`jl1zfOl(8++cQt?iKX{=kX*o6{lvRM=4B2pzKP4f?``nIKQ{g=LL26$DDqssFFf%Q3iecbns$safBGR-vP#vVE*Ksit9N;EUm47nPnjyr&f{In)Rkmo zZj9U|Cn`i3#H4QPY)#94%$(#ctr2FxylbBxJTT)v;v>ti7wY zJ)-#-)+!V1td&Secc;FnNOOsQbH|N8JbjCiA)wt4X)Ivc%gHvCA3`%YK%Hq4hH zPI$d)YRh5B;AajQ{mcz{i}Nf8XNRCf?2VO5s4i3r>P34?8bP&rqW$MxjzI9q zgE|XY_LjzRs9(1ih$2crqk-b!`OuHhbj8K&twJR-VC4tRCgd14zFW|2AWr4x zxeraByiV{>u|tzo7yB>cfeKwo7lJwn_YT=ZY`XBw#AbC0(cz|9E-m zlN^-3wTf=gEr9}N+n|o92*?Q53xDQO2r;&5E|1EE!KQmen#}bWgFX?u!*7aW%2D|%Ni0u<hOc0E=M zi=MybH-m*vM&G3LsF7Ns>WfRan!*F2j(3AOu#yuRlNK82kDfzI|LnWoet&4s;dRGTbm$1RP>cE& z2E-7kbtNrAr*?;S!@*$a>_45bzWWMvv5I6SwG2b&dWd>0|3~PoY(0Kb^AmIm{>c_Q za2tqfk!iupgU}(~Wcr#k4{h-YD*WR~&}_#@iC=1m`ceL+L&j`S^YRUUrQB7hkeID? z3w#9mTzS{uI8;F5LBBOa`UsebTsssR^A_XSv{_q{TQK+K+Q@qTTPzP1l3iE1fi=r} zpOfsRu)*$Wg$jEtw!~{+6-n$sw7L=LedRq8Z=46Yzron~d@YBrrjFel8yBwh7Gw7h zzEj@KUyzizyuYI>14%R2`PK_mk@W8DDeskTBt?;l;!Yp1drql$Qa%j3zU^>-V-bg) zPy)_me}laZpfN>0P9}M__Mi>W7Wc~Q%_&N!6Kt*gMHVX zFl8uzDX88Ft*RD2%M*qm;fCGmFE&s9-xDpzw)sNUg$35w17lG4^rp@_c@>)b(nw{u z_y9vMczM#E199;w%|YJ=x}LK?xpW~BNItSktj^z{hq622lgKpmQsza=RqCM6o3>3L zvl;rjovxI!azbBq?)M*GzCs`Lh?LMzL9a_P*WVqw(4(Oh`o(J-bhkT(_Dmju&RO=j z@)9=a=&&<)6Wau>rLyMqH8E%~iBU{HXaUu^rpwKLH=sz~?;m|CK%z-<@jG_~blu4M z5y=;dnT(!c$#12xjO5gLxF!i}g=JoeopizGorYno%8`go3Saw8JFwGpEk@w87_z9Jl%~wyVQfNYf0Gks+*rhauJC-$4sT8 z?_%pq;i1`>T&&NVI6qnU7OU6}#}hAFW3I|zw9eie=(k1W?>~VaHa;e4$`9ys2)-0J%MSzY zM@0ggZvmO_=v3@~7hp(t*R(j(6BypQOEPSSA`BbJNM_0WgyH>rt0qckVaUIvXi@YB zkgd#BJ0de-U>NVwYqFq^EVtuXkqq=)pYqmy@*BERs&Dx#8bODTu(89m0yIkt4woA+ zLCuFN?k!n8P?#{Rf2ULo!ozdoPmVJF4*&rF|6G@MIMweP$IX;bR7OTpDO>BSH13up zEon(pRw*Ja%1R2^Gub=J&N#+x@56ESa*k1G8Kn~8=kMR=pXd7g^<2;Mysy{meq;FZ zCmI#=B+UM1rR-J2$C5)glH+8kSlN{nKB*~$b#9%v9Rh8zk(hnM=1p2_Z)1(^ zZibe&N4H~VrKP`+=yL1|R4&O}bPK!twLE5*y+)GdOQ)rAtC8fZv(qj$4oNr9J@8V{ zN0Rs#p?}v`Vi%>Aux#}iBreYj^4lte?c^3>?1%l>s&;LVU3CbXmK6O-=SN^&WX;|K z#}O-2cg!ky4q@?|*xq`<>zL`l?g6Q_=o?3OUMpP=v8gS3&IRr8zC?X>N7+p%yW~|$ z9}@$7wNcV_7Xup7RHhZA)S+ctSKP6~7SQgHfn=UA5O@0UUiGen?l7JDKSo_zz2G&p5J(woee$YxGmqa1E42i(zYTo33^mM=8FrFfpqS7n));ky29AT zhD+Z=$HcuAA9k5RE1mPO=3*fUvl>O`vHGaY+KYLWSU+86)!}pvTNY`WDcp_5 z_7B0XHhat+i1hd zv)C}RVpq=ZZHOYlNAEv)haWt(u1tr7VU|+&h=S59yie38oLuA&DHIJqFjI$Od6j?z znj%mwq@ksjDF_XFeg^yBYk-#bp?j(a)<8$)lz^7fcj!J>*(GE>4L$#*Ue3)92lAuP z$p4H8Kyg?fzkyZ&)FtoIuEstF>Z!h@%>QhGy7%V~JFCM$p(JNYnI`~cxwfFg%UbC9 zV|_GT=Le92VhY7vLx5Pgc-Ua*0JPQkPF!dZf~GUa&18HoZ5OGB3!+!MVhq19WKd9y8L2UD}-KM%S z5s4(>_{+xok`KBY#bQNhP>yAq{Ek@e20?mpB z2GTB{wl2_~Mk-z9koEyjq>S;=)!GHgd8>Z+43e>D)zHw4e-d_Gk{yYNd5vwe_L@_r z9Bfh}N`2=xBQ~5ly`oJ5OHylZ=!*1Xs#fGFf$9->?pEApCtnEfMy17`S~UYhv zJ5SgGT~)=d>AoY-BVPXw?Fj~YlDM~tJ{{=$6AiDungH69o2}|IZ-IK+PAmMsC?K~w zw8kD%0n(>cSyxnQfO!4dWzMG*XuY-ed7n@+)K4>V?vGCa;leB5sYoWgvvxWbb|?qj z^OwG#kTJ)M%v0`q2}M}8XYIo!TwSb7-!Pun=7}wrv!7PQv9U8h)sD)vL{hC*4O<}& z$=tPf#Y>JOHN_~Rkm8Q?MIT(=$XOsm)TsRV!EeZj$zByM@Cq4(m#04@Ed1Y2HXwZK zLV8|ZM@+=Ih4)~jSFEW+$~Z@dGEBjqf3-i$@@`}IwNh`~WsB|Fw!enO^0CqNLuqVLZq8skTdA>)cVrC&h;${4A!qkj)V{qf>vkB2$XdPVrl z4KV=X+*ccxI3Icf;Lr!`1xkIo;L_hMKufS5dA;HhFqTg}(q$R}b5&J(JSza0nQQ)R z-Mk2xHML((add%s#fMCAEd+*N42ALRE6@!+!(3(6fa*E@(q!Z`kgxpEz3@vBy6fNB z(FQc2eFN_^W8HaZ6gpk~nehM!UroiP?+QVVN5!KpsRH%#62xf$O-mo7Pe>N-{h zFXp9gEyu=h-zGO3EXR(`k)Hd#b|A?usjhX~bEHV_SM>e96KMx;uQkFzWJt#((C`{E z9ra(F-!6kJGvXi*_9Cn7;=Y@j63B|*+;xUpfGmM+E;4$%knySGNM|D%>1O@*O~fxq zHSO-(dOr|*diNL@o>_uj>-vAD7+Yb>*bap!Are@(ODERBCLK#oU&vr}gkbci@S*ja zbs%-slbySc+dx^~^u1Kt5Y$g@c`q@e0BxoGH3L@Lp!=UIE7`~!$YeS4pvgX<9Z@Bj z2!c}vBDjs z9N+t)P;oiZKDJzpE&ybTPaQs%n1!t3;U7DF-H}b-@*-A7961j9{#v&sk>j++R?kut z+5LuphkLD&)zETeB+(0*O5$t$V)T*rV_U#3zZ*y~+x_s&sTL$1&f0kJt{t{D2DB+T zPGG%5Q_KSgFZ^JhNi98Xic!Eiu1tu8jLI;jEvf_SD0Gl^BT6`f4I6V2o0$Z*C*JxZ7 zu^zZ9p6wrgnE)K)Eu3_{ufY2F{tZns92h_PBMig!facDXb;w%_qbyG~bP+ zJ5~b9n}1;2`G{`>kyNbP8#-#6TZn~j(S!B|+PKETuIiDTAQV2V6$hJWs5?33wAExi zwE0aG_wW7!q}Ui}UUdPe%V*Sle=P=v{NA(UlUsllf6Meb&j&cc)_wsx$-o^jy&deF z4ZR_C8c!wyp*LKut@X+%a7S`h>{q@9oao1@WR~C4pf~kS zDN7DJ-n^Mk@vX(4l4Nm*=y;@Un|xC7;tMi&23d5hUxn=av3tKH+>rZ{MqLYD*jpa{ zwKM+?@(eD^lls0RPtf5!Bq!MwWw? zpLg?rXe@Y4yWHy1VlAM|A4}*=&jf}=N=JY|HL%q)zVE(O0^BnpQtjcppqF;y-x~GR zz)KweIB%l^yj3Jz!Gy#nK->&qA8$dljtC5(w z;5ARZ^B3lPq1A13U$$5P)Z~AW&>;K=S^JMtD193-Y03A2kT4b!<|%tQgeTbCEui}2 z76H2>oTtV5ERfQku`1=)wFIXJe`S44*5%vzeM1m z>-Z4zRXnDTxCtTe&iXbvD;wlarTE$Qi6FZz_~*H$1<3e*;N0M_6jJYd>b@*on6Dp6 zMD{B=W2@5DXSw(NvHFzZZ^hpSFb$@ZHk~3udLehL`Peq7k^lBizG(_tLn0IuRDJ@f zviP8ZU@A}>qb~3QqJU|fvisN5{lL*NyCr_Q9eS&mw}CBCGu5Of?hW6 z#@>WZgS|2PkaMzFYrA0pG7n8s58UfQY8bn}|B4clPM(PkT`!C++cM(0BNa$EwmQox zBpst_y+y3l-5`Hk$(x|1_n}_Zd(=2Y0y_TI5Mo=71KFR_KQa>r^ysk#wZ5VxkPZ67`VeTSdU{I#xz;8h}2L4L+^f?ZCgdlI3@oPS9*->Zd*|uMLq1jvpZOB%N68r zza@2Tv=RFx6{bILHO4;ijajFBKOujenrgl6F6=!<)ef|pL3X0f?-|hz$k03-EHRXT z6mdb;*rtEjS=w~FaU})oy>B(gnXkmWf3=aq%S9nh@UbH&#{#O(`k!2${Rmp~NQ-_< zSU}I-@Q|~UUx1cTH(usp2P_AB#|)wea9x7E|LXh!URvp`OwL;1e~-P$kDrA;HD>H8 z`J=$kPMkV%Fcx^LjYo&XZviKxUDtHllHHM_8=eB6Yow*u~v5*wyystAf>fY&_jyCEX{9MR!0Xf>lIyON;*j!=h&kx1kKL*}L?+C~@`}fqu-4pqNGYrtZhrHBFvtxp~$c?8$QC=6a zf}A*a)uWIWDm>fpARS3UKJn4LECJk9(SFwFwG`U=g!Kn-Bc>?!qo@fEm?zwLjYp95a<4n?QuslY#={?W79 z6L_URG+QGVye6#pu2KCtu>Z56%r9LIbO$rx!V~MEr&*VnGq@aDhcj%<$yyRkmWoPd7w`dxmG&o zs=IC@@4x>h`aJd`kF$6<^H>1#OzvjiRHq}?&*|W;t4hd9TN7k*c0JOn)+(_7X(MUs zm8oS8V9WA}m5K*XV(BY?iI(2m;L&Z%Tx6vHgp(&0)vde^t=%^d<-6%Y58>94k1lFJ zKXZ#n@v;WCsO>uV6AawU18lyfmGalXnm~wkkcBwkl%pfnICZJ_`2o)^1wIc!0h7L3{K< z7PzqQ>r4F!L1eC*e{g#?8!0nY6u0M!Nc>8+(*2W&^^vz^WJ^`?ZOwdnS+px;4NrAf zUYvw_rM@9f(pexnUE6s#*B&V4dl+4P62PE0g>uEd0(-E=#-}0_xRoigjmuo1_edP~ z%d2C+eU`QOZ1pW*-xsh6Tkr;B>p(@6@=G9piVyTM&4!MLKYqo(lLYKM!*tb8fcP&% zN&CXtSeTZYae40tY@}{EHRE^{yV-o7D+9GiE%;UV@A@8Ox}UyLbGQ^aDj|w19yue| z&Enru#v0^4%@up2^bR>2OLCRNa*+8_IxXe+Mx@qg{+srg!|t(?-kuC)Y~;PqQ!N?8 z!qi3A?yVSyg!K(qlisTXcJG$2+Hwv$u4X_0@_5{zzp{r%Zbd92wlWAo)iJhs0%pZnj1MM$>TRP^Y=7o|VRrSf9eKfj-ckcoR0|}YePA-$whHUl zguf^|Ack3kWsw(yW#MhV#DrPre^CE&@Lp;0Q6Pq^NJ9e^C{OpEmo$G0j5YeDuS<6W z%e~Yzk#Gpu&ic3R>nsJUQ>g=X32`jH1* zDDkUezmL$tP`;yO*kmA9WlfGqzc1+GKczyB4Z)vn@wXaG@>YV18@m@InvV_gMZm18A3{(~AhE!07z?P$eM^m`ycx z%g#;%bBE;`Anyol8*&QB4ITAUzgI!0jiKbP!Gloe8xgQRd>k@Q-Tg5&`5trf zwi2WS3b6iO4s%X*28qJ|+GZprkjx0lk-NNZq0j!@rf^>r8OaZeMI;1}(a?Wq_uLH9 zFM6*^kT61ud&Z!70|~qGKGgr&O~XdpKc8Jz+hSpYZe)bI7sRD$+zn~J4>dQ0gSzhN zLEB8@sqrO$pvRp&E8&&9F!wI<+IgD;^!TEjkK*G%|0Jqi*q;Wpn7p}x%PBza2tAfp zhCsCD4!$uz1`S%?k^+lYLSFE)#mh#lFy)0N=fZ<9tX=$7d|$LMw!4%490iB4=SiuK z>%9@AI)5c9?}b&nX)GHi`e5bK}Rz)CbF zL~dP+Vdu=?gPx^B#?8S;pzTvbG~u70e~3{PocA%`r#!jvxD?NVx{y1t``J%C%#1waW9= zlv1pb-gJ9R?-;h)Butp5_G7noO?Z{LGWO)DXOx7^V$ZLxoi-a~k>r!{G56R~Y@evH zUWp6mGufj!Gv$c+u}*RK+3Vo7XQ#;x_sdXOX?b+z^m1rfzH^`C$G<>iU1F^2c?G0K zm256A3P`-YzPnS7LznZ-9U!6(E%W4A4`WfN(cT=RczzC2-@Jb&ZF?TGYl7B*<4!mH0+A$K^u+7YRqP4~R6kxij%{g&E^g4ff^~h|Ef2Mi zV8My|(M@lbL&PZ~&ooncsL(eRm6B0|rp-xnIXgt5W6SFfp&&0HetdIdchE}c{KfKD z=v?rlFD)^F_8jU|e6F}>N<$u@yHpc0V>=)jE?Sgds zDegFS{8ggfta*;@KoU|+(#9s4bJuqEA4P(3aWl!P6XW+cXPFt;!dvt)A@NYL-V`VE1#)Y@wM>pH=uh4@X6TP_=kP zXT~RZ8|Ww07M!Oqh?G7sOgOUFW#UVXS&duUNUW9t$mt zB=6A?y$MoIn@2PtXOoy$w{;(sC!2g`izY+$eZ|KPX_i2^P@`r%k^%)=iPo!mPT;Y% zc=*V81-@M>GcIvg0!w*h(ZI1lBy1oAUG%<#ADk`+jPFvy^nl|3#?b zB)tM|vJ{~-d_b*>WeFcNWb&kO+3&pJiH6uW?!u9(i(t5y@x`(6$Bxt+fw`Q{sIV$Jf@#j zbpaFob#pDsRq)-eJNl-_yYTHHm&|0f5DX>rVf5`yh&{Pwy=nY2$ZGR8?{E7GX(#T_ z-;34+XZE^}i&#RKK>oRLZ=(RF9kGKiqRTKOf42H!z$An<9MseK{Ron5q=qlahl79b zwm*4e0vKww{&PUoUW|@9sJLmQ2~;QYtM^AVL%8goL|?7V;4(ayfo{sK^ZOtLTqNCoKi*HR*d3-x37=?}H-q4{|qK#^9-@xk%?M5eW?f z#lQc$U>!qy71QAu78Q$F3XUW|_O5MK0dfV5_=*&=+qdk0} z=W`3G*D-BF7`O1aC^qnOl&%f`BpI7D16J=}v0&OOeaLuWDV z=w$`*MlmSes(R`0Y#FpY6r=5E1?c(tI)1a)3!vUvbIrlp9VjfyqYHz_fMk`sr(*X% zXwp=AbnJE;bO-oDXR(s` zx`Ae(8p@{6sz?FTSvji3_!_X^l^i$UJPYg=6QWZg;mVV+-#<)a*0iSXnJBzuJ2^f9?RbU)>|M^Y8F!JVt&Ua;5^+N@qNK3qT5Dx=I)wo;U= zNcP^6y?MC9nRndT`;?VcAyWGH`Mvl1@_q}3&*yTSpSTC3F&mUkyQN{wUxqBtjxaX1 za7QkZ4r4LHAM`XDVU#c~Nsfwx;j$QqgNf%ls4ewry_Gc-4SI z`*IBVr%Z8Fb?(4tsZ1Pu<#e7(E_vUL$s&CBbP%AK+0Gb?-Qfmp1$NUZJ4kHPrKgMyYk zEbu9&h9Ta+3kdDf-&Ny%fGpOU&TuglXaf>I?&a1%Uzo{~*wjxLN@EeU)Ea|Pm!glG zR1;vVENC_J=Ut$`Jf5{rw-@L`fh;?ZeFA!Q=04&5N=P(VJ2lYj_4pGpU1(jo&eY z&ZT?UJ_u{87Y`WN-Nx4NKfH0CdPp@>5_+8Z|wn$f7^t@n|fMeQ2mrFyd zab&}3obB{49L%c=FMVB$y%gU*Su+CCY#kk&(=CvEefmbzeYur+##aP z+&o-8RTE}vD-1>Pm4}6;rl9`f!}^m=Pl0^#p3jv7cY&sr_Gx?Pe&`KjZx!pdguz=m z(eGaBz{rPPn-qsX!5IH=!n4S3p!248NuM$Vda3mRueJLy&M=l}Yf%pLc^7MLSpd4X zu^DafI*j2B{rD6I7|ke-_*?%Mh69qGFI=C8feSC&x%elc$03EC&+!*f6<+?55ebJj z`$RL7=@UShsM+oQG!P1Rcr!0Iw!^77iLHBYW@5om2e<|IA|a3YzOC^-Y}@|n$KlPa z*twih`Y|{fd)O0mob&{+zeK|MPm>o8&7SYwzrzPduRgo6M*fClx1FrFi02^v$iDB6 zVQ-Nh-EO9vFpczjITj9PW2DDgpLOvDq>B^??YnA=V-M0e4hkK@(L3B}PuG9q@QDP1 zQJ*jl97^oxelUYQX%#_HF3L#l*!EygPal$v_Dp|K(Zh!LQ?`xFEm(2nQnY+(5GI%s z+9v>7K&8LqUPDrH+}Sf9qo9&MvN!8tHZ&~may<5k9mtP%I`)=l0JU)Dxtwki^q7k8 zu@HF%{W(=SvtuDJ6r7=^ai#}G{#K9Nstkb9RsCbC3^FkGiC1IMk^$(4zI&`PxC32_ zCKOIQ1a#RnwuLb{7#lJYp)kDF}TmrpI zCN?R2Ait1s7?jP=(WPPls%ob(2JjAwm{`6C`rP%5I)%SqL4eXlA%%^*CVISj$)ffLY z9H{ADcB7ra;e8$~;ekdt%F=(BYa<6o8*d$=_dmoj&4Nj})G{3V5PsF|hbxYy1*C_y zu;JLVxz$2-T^!rd;r&G_5Jw$%wa^6#I3kyN$2m0+hs1({IA!9nzcSmpC)yNyR(qdQ zMBgE8dLcgkWhHh*CZEgj564#Vg2V_lJ0y0j`K?6xV7ZI=Peof%*>^S{ROqZAm`p4@S7iy({y@B0yE!Vkj&XvF*AEez_7%N^%A1pRV(n;S@8 z(9b3zy(J5@o5oQI@fpxKJ{ORfDhRbAX?*UpZBQ5>qn7jB z03u&LIi}4NgE2>b$Z~Viu!ue3qRE{~td&3ZzKG2S8_UidSzQ{(wn@Wi`EXb47*JLt z9Gpbj8;`ygnFrYYN79$Lhm3t9>ni?v_BgAaP>lc_iHO>7x$cf5u3xEByZvy4%^;Dy-yVk*eta(5)`>$$({F|F2;o4r zV(gBDci7K)<5HTAA@=S%si|T(ja_5p)V&$sk?KTHI_`!@={qp7Z}J+p9&PNG-qnu{ z`rU7~OU|)ccyZT*G)S=hk0O>LJ)YV5_`I804njt0_@Qfy!*U=h?4O zKot3P_RqI0XsVtYe8wjRzJ-AwqovQ6AH!hw*l}k?V;I^SbK52Kk5L$|ME)I0KZpvCf0 zKWCqW&KG>5u_ER`Q8*ZLVI&4xa!q-q9RGuc6j8d+~yP{We1Jp;m6o^ zPIiaayFW;&Y%yc)euka7DPHfrO_1hjXZBn{3A;Bx)*tTbA5mkK6u^%CKH(DDW_PgvH0PIxX?)n1>ei>M zErq?qZG)oY&#-62v^UD{Id*65(QH2#fL+Q89R%H0q~?X>MP#{S$C6<4v!7K+;n6S7 zDLad;dmFlQ_wr)nkO4`cACO=d|6^94h*b?ox!Ke3lwiiIXr>>FfvMn?@$ZTBwoD6M8 z29_9$f`OuD-km#d0v+A456d^J0QFqt0LgIe2aBCHM?oW$!I)y<`+SEUORzOcd@B#mMCg}0kyCWX013gmvOz$yoh3*W|qmg%u zp=nX{p`yP{wwc5Z1?w!L%xyZ5&dPd(UrYjm_#bt6 z2?=4K`Q_-hhMO?$^`W~?jpJD0z%3m5iWSQzg?X4H_FyfWZi{4w8WJ7)&IOp>!p7{V z5pswoHh=se*6u2gZFXAgDi*Ji{JpDlddVI;cFmZbK0Sn;-0GfJOh04i7_D{Pn z#ik-x?&lp%*f6awueG!j2|vGIt92z{&16#Xp1+(};b!Yo>1>BZTP_Jy@eX444>ylH z&ejZi%mD{kB|yOnx46@i8>7-Zf_sx&*C_qsmdm51`%X zj;-(c??5gn2y)ny2NVmAwdDByKE$EunSfHX^Q3rf0#GjcPo**I1KEl#Y3QGCweKO}WiJ}EzVjC4ACQCQ z;evM(S~@`5IAZF@{0bVD=|&IDz5uaV;!lEdJ=A%4daR9RK@Gn{Wq8AXPyw$x#+AmQ zSlBzTVDqlm!GniwvAIJ&z-fIqwiwX% z>9nd~O98*!P(2s6^q&q-8q~%XN^CrX3mdkC3m?6mR);MT-;I*9?qPF;^-ad|Ky2#O z;xKsf5=nC(=6=cYW8;9|4u%HP zK`}b}`FCPfq~LV^LIak~D;ZPBHCQaHAU4)ZUL@^q6cF*}v`)=T0ICKvAfC?yt( z5iUXn@5_Vm`NfFMfBJsI6QR=WoA;0)%<4;`c0d^<$`q+~EvZ4qv!#j)t}>8&zF_9% zLE(q|h%;^# zcPs0G*s~GhwATTMNwWdM4@ZHhrD$oS84QF05ru=P6d0->ARr5>#bsr0Itr#=D`C*Z|(SYn|}8oxx%=`>L&GR>1z>{-_!BXCaQbwmK9M@CK+9XElrS2K0jGh86m@T{9?rah$W{wQa;mlM$IrQ&>Z*DQKvIjnqQDMznIx%w*JO6b|U+wEE` zBYJen)N2lKp_}1|#6f0#e0F`IH7TVGA2(ZNGO_YaJS zW4_`Ix!mGoMOD>nOsZ$L+a-Wb&TmW4?8ji%&D)+UGz~TheR_@UF5uu-md$Zq1)gj= zf5gbE5?qh<+H9&%0FNn*wh9RWuSgcf#n=Gw{=L$^T=W25@Q$0FurPub!@@a=C!T_j z*5Jy;p#ku@J9KTNoCrR9`)nntt?=UEt@;+(7lWYNog7A^l7&n~i4SOdN?;>I zj18Z*8jj_ToI$TuLlK_Z`}j&_uyNuz1NxKdIpnzzgU=~?|HrM3p$FGq=Ecup_%_+& z@%xWpB(p;+esRU-Kq93yOre2fX^iOYvKrD0+#H(k|&4U>QzhX9l_apE7cFZn6r<>sS5wl;GojR(w8?%r3yRlTc zVph~**=IpB%pA9vcej0l8GnjB_3r(^^qKkCQsa}DmUU0wTt5s`p*DJ+mX68kQ@2gJ zi!pJETi7?G1>-mJnwf+TV9d~wpFU|l7~$Zg%+8^Xp~OjzLgIZ4{CLFn%(hwdG1|W4 zajOtIDZ`~NDIOsH&Tdaoqb@jS?%;orz7t+KpA6c>Xa~W`!@GaoS%vV}H&?%`9EF(p z58I^wT0ug`U2Tn1x{%y%`j}(rFQgHe1p2-ofy^xC%98A}@X`D5`vMJsTtTiaZwD{`)8qOJJB^q{UQ_#oYWZoQwk-!MN%n?j!?4vGx$H= z15jGNe&>8#Ae5OG=svkM4`tt~7$00HhjNpiqz#%rl;=(;XT=|d^3iWO4J99-d{I=~ zIv^Cvho%LOu?j+YM*iKe>l09}BW-@A;S7}ZUuB;oF+v$IJCA=5fKsmzYsbK?P?Gqc zchnRg6er9H1v+krBCo9~yausQsE|5RDQOM)V^neD+Ycb`Zg1!hg@CQzo%!y_dg*l^08vV|aubY_P1KHAaP@1}jnnw6}_R zVwHZW<-t8kSUoSc(?ppGYb13@x6P8UW@t<79=md^eJpkMX~=b~{rxrd!0j_wXKTQF zf2bSl$W`30dYF*F|KLqZ*f}IJ|me?+1F{k^5^0R(eP;xf7F2fr0 zlqI{_`X1v)yIH%rFkeg;y?5#Of(j;^tEw3~_4~P1JvUN*Qa|;5&5^vZ{_OaFjGcE|J6Ev6cb_F+YBJ zP6|Tt{a+_*C#In6P>*ExH+QJ0zrOg_a|={oQ{&yY&H**IsY8;dPeHBk1>ZLlEl?M? z>Tv0XF%VKxUmfqa17i4Jn)O#TsCObCl977`4f0FoYKo1}uwWrvF=~(6lvp)mrsEG;ut7P$RShNOK#w1J+A|=Ta%8k{S3~2sTI-}8+R%6};%RWfS7@kPPg2(s22}0O%~7r zqMXQ-aEKugPH#IrUFQRJymC60OP)|OTEjG?mjig>&H9(a%TVboC>Hij1Ii+ot3#)! zp*ZGqkgI|K6nHO574D0KT+OQu<`j3xWbinf-*yv{F5LF}`LDNrDE5ooaGL|4r@msJ zY>m*0o8w&7rXmb}@9O>Q$PJ9^Sj{+T`vTK8y-Ra!%fg&(_m96Ge~bA(w&}mDd9Y~t z>|P(+$5^IASy}qD2`gj#+8DSi0&AU2(pZ5JGVj?LoH{ZAWyV+;4y{Pk1$*wQ1Ps-t}y zTc10g$Z^ucwjF%i$gTd^=3{%+{H+AG^$l+I_$q?!+(X)$lp1V5w)2B{wKujORMPYI z&ce1;Rb7JlOKi&*qN{caW1GhBnLP6g*xJN1SI;tztw$SL>UW>V7K>O%m!oH}+3&oA zat<>#1>XKIQBn;_PiI)kgLG`X+&ggjB@G)Glyg@343QXnx8tCsKN61kwjF8J!P@ZM z2VG>f5vLDDeeLnUN{`*`SKJ4%^v7M=^>_{}y8QCglSL=Y^Wn8LDPzPeo#;~9rFl$p z=A72t_>J#Z(}YvvexQq?-Fm&133#_3dhC1Q07T^0UQkjlh2&qu*WFGB!N={jhfl&) z$bU2Oa%89pian?AOS%j~xw(TyGk3=SYZofEVu zSBD0{6iL%RQqWkUC8kox0!=cC>A&8chUS>b^?myeLCY+GWHg-$ZHFF4*)Xs}`?)B+ z&yx~BKC?Tl;5QK{>=U+qb&f!>9R0S{nF}ZtTXTAzMFC}55y+K4f2*l;LVKHC7Ri1Y+Nx={nAa)L8nTVWV$Kg*)Fi)*Zz_Z)`hAbvv8Vp& zYt?P&a{@Gwl%K>V`9S@ymKYZ~Js@ZuRBU5ehg$ouhPviufLliDO?Zz&1uKK%(4D(b zJi|y6%w>iAyf%MD4r$14pospl(1K*?_B2VQw3NB&F~Ti=^mr9*)FcB98WDW7shKsQy|fCz5jF%&Sug*nEFs6Nkm zixN$I*xAq9E9-tAsXWHbd$t!LRc7pzz|AvAz4CCuP_q-M>NCS%_UuOLd9_8>B}Sy~ z2{^+#{~J5UDbv1QOxPJCtDd-b1v@YO_D6$p>=>{JHQc-pJ50#c&s<0~4ui=a#W8>*(VR&m-8%UnHct)g7B3t|?qz3P)0ggR%VuIySUaW^*wG zBeBQFuFK&a*0sO$WIryCHTg9!U+0mries^Gq3$)7hCaM0l4OR3Ox#*0jjJ)IbhB|= z-#VtK@+Nu+{p*p=YcH+_yQA&;vTCj62?*FFeNECp2@*t=bDTMCA+x?=o*)?t`Ntww zp7@GF@$kszP9`m=cyTkE+p-L5*!smy~QVOD`@uCyS(|Izqj6!y?2*03fd1o_3d#H0dk{L^SicKxVZyy`~Grf zDLbg`R@>Lh5dgSjcchfH1C$#MX>!bWLD8EnUpx}eL2hyv{~LQgNHY{$d9R`hk*V35 znp+IvX)o)sVxDe%^X^m9CL$juFnJNB>Z&kncc&_qdlmEjUHWZ)^I(Ywm*MMx0j#{O zv^U~T6V`;9E6eq5#k#Krwy!4NW4)B?-28J*Yen`nEB($TH2$@+~$xQa%BYSh-!}C1r4R4f4R!U3LN`C(Oobx^Bd(J)g+|NQ* zGy7A*wa>_!nG5o~iyx z3(4-i2i#j?kfb&9Y;jN)TfbcXOfeiqLik_Rjf?BCNi#zre6kj6b>4`uH6yS>ZD@x< zZVVPG4~vb7-omu{to*yTGB9xHY{9HYI{0(;T}g|jKx&)AWZ+l>6tpFkugfJt1r^@AL_r9Sph6ZF0Bau9l)G)wB?-|1m>BL-5;}bpg)^lJ|%Ss z7*oup&eegy*eQQagth?mQ{H^HPw)ZF*7M%y3)0Z{y8CL}Tr2c&xcF43QlYEq?B;2w zz0etUb=AP+C+IlAcgw1l8`{3gs};YE0AgUl;iq3FphawP)5-PgpkBx}#U0*5ZQ#z_HC4$lSR;=AfwzGP}d))qb2s)-@-G-x7+*`g)Y6%*aCawXo05#9(B1{l=4d z@yL--Ahbz1BgguWxK>*wa-NEeez)9$oP5_^&s^$|Q#Q{NC2WM8+>{Zkwl3s^+}WyR zFpivykEKT9J|ahW)x$8O6Uc6rHPkadgKSH6FaDWYWQ{&KbRgOaSr;C*>~MESX0z+& z8_5i0Zdn^lvb%u&X2lO$uGAwVd{xrEcO;}&6n65v^dhbMyr$v?OQe?E*6{yz4ttCC zkcStPush1#p*~z6DRvutM}qW`ERn?9AZ3j0oxiROyi~EGaE&?}X z9e(eB#ZUxFijucH;O&K~Ri5>7eR5F0!)5)8VSZ?lZE%Wsw|p;8l~My-PD9)5sUAb- zN$5CFI<-IX8FZ#F+=ll?LKm}$Ppb4j^!!P%va$aR)RnVEf_2qEdz5rI;HnwWZ`|ss zvUUK*iHern5?7&LxI4V-Km+s-2rdcFUjSzKLNX(r4_Jz`qG!!gfz|q~G4!7xuysv} zUt1ustKOfxpt{T}f$u@owLgJltMqpK;wW&E9eTZ8oqwOl})y8p@;vQYRw%9AU1=7_wdvDO3 zgD2su&P}A{<71{&+hrHTlt@SRZY4D=;3G`mzK&R)?qn?%bQ5ceJhD$~9Kpuyioyrp zfk@C*2sD4rz}A9W%7v^4NLm5G;T2LyKJn8&P1*}79{mj~)h=LniuSXD)OzeKNO4<| zdW+PwdkHkTX{5Dej@@qdL3;Y|DUY-sWVm!nb_a7~zgFv&=Sv%~|F?E$ujqGVrdBJo z-rtHW_0pMrheeUq+H5J2rhsfM@9NJ7t&yFR(h>9864{IN$=Vyk$k83vp4iVp&ZFmp zJ1tHlCzbs+S#<KT5S4sQwy2(qv-fa5t)M78~0~?zs6OT70t14-y(OS0u6iikE-|jJ;JW- z3D(LUJV^diX3?B>07(Sm&)w$1*yiE<{J!xHB+9yrFYNQi<`@B9-(p{^BT)Zaud0KU zL$$e2PCUnwfj*bGZ$_9kxiUw*AQ)r%%0BD*eFynhBR79?eTP^rug||kpF*}!c&Lo`ryYyr!)HRxJe|qHtG<%O3m1Z9Xq7cV9^;;dZUEXhNf9)uc5~!9^ zGwwicm!6w^-~*Jw%q-b}0_Yy;%D6~>1HB9drH};

b*SNaiBYYE$Vv8UKJD{<8VE zTp2J-SpO|%Ec0|zfJ^4jozUN;WqfGB6_^%5cFNi>fcf#yXynQ@z`DJEi>kyBum<`a zzkK@+Y|XT3S(+TM!%g;XPA~v=PqU{;w-T`bR__@|d${b2lGo%an}M@;+QI9xD{$nb z+@31817|Cu_WjspKOM3iC07EQkZkh9Jq6faa-h-j3D|N?XPd}-fYp(}f8`qwuuS;& zWZ6dnli?z4WRwle?tPyZNdkuU7x{__eW1Hm4CbF40$Pq~ zJLPyNP$R~^*hZ>DZ?jol@V5}?=2*CC{L=@@+w)HQO?-gdUy;bUTLh%KU;ge91JL#? z{pg_U7a(3dp&vA33oQ!&s={c8pgx}M*fd-KRnwQ{!mJITO!G^T%jgW`E;Ravy1GH) zdyrlG+5voIuHDtJox`Av(UVJ?Lon5Hr1aj_XPBS;e#CI429~e3*x^1jiPgDwi_Y1e z*r0wk>42^fwp9P*tTtYW#0X)YP%&q0tDGx+E4mIz-7|!Ctr8!nH|)! z4)NHp%5%Df%L)5Qw;eREhamG*`>U28Ld!nZK2cROf-LEsDzmBc$nr>hUEI`%thU9# zC&g!$^XQJmP-g>V%Z%!7p=2Zbn6jVl`cPyWtWoHwe}U|imUCl8A$#jBWp<2ZFTEwWF-ZgPnd@zOP^=rQ|kaSKh4dld8|gJcb28unP_CLwg`Kubrbs^ zc|H1*U4V@72Rh~MNys=>^h)aV4AP_1O3D^}k;b9g+J0sujla!YIbIn1{I=$IYb9b& zkLO-!*oob%zc+H#$sk3ph1cUa0m-1UIXYn+NqWT#eil*Kb|mV&#>itN?lYXanxcp; zqA%+$MlM2u%tGTi3 z&so58#``14H9#zPP?*|Q0&OK5UQFsW0x3~V<;9c)kX>_V&t5WtqASVsTyGA#{<-q1 zTb_oVoKV{?q7n3|pGjKU4s7p;P+zAwOVpewNkTTmj5n z^(!Xb>wtNk_>o+(tQ#VvEoW{;LO=SXRSUI2{{{7}RW>fm^JoXgJzvhbS0+!K%Gw8X zPHdyt@JFCS3D>#xJwQuNZK_zm7N|qGhsz)t`tH0E7!=Bd1VXEK^yuX>Yaql>-74a$p!rDD!V4E? zsMjsXR*+^uwN}E@uHe5=E+=;7UU?)Gij2(;Dc*++R>LA&@DIdnjo`V?tp!(Ca@lo- zyJ5IUtX9sO0!$6me6qdi4CXn?&8^;$hA)E(>~`FZ!Ajz!sp6C~)|Qn&WWUeA#;4K| z4vRd9CWPEO(h^AY3tcEO*^O<6W1242iAdU@Q#^cL20QAbboec`vD3V9flM1g$~Xr1 z5B|aK%UR#o&h5h?Lq|ydsYvTtZCc6aiuC_( zHe3kXj`U{n*Xt~-kg;n-Jn`BHGQ8clnhTdAqo*oL^X6gf=eu25T)GVtav2nTXQ_wyiMwbSrfe5)F)+XPQJ2#npz9*I?{BY?y_Z|yy)_M0>B4!>-$rfoU#W;^Ul#1_T=uVL> zW09S+L2LX@9(yV`wD0Kin)$hMneV5FcEcG! zURxMP<$egAwjwUZbD2OX>exa)5DQ)7pBZVV-b2p@wq~eL3-s>bSf}(fK%b{i_Fn-Z|oUT0IQtbP+eP8Wzxd7md)k66lzi$BOX+dM=kmXQ&j= zA6uC^FB}H?IrO~#S^?<77sKmlbwFcS%vM;P0h-@D;h3Wk(BvNKIi9fwYPgif#G!l8 zS0Pukwr3Ock}~RLlMX`pd$6b=r}PON{e^#a<43bd_J-xx2+Cj+~R$u+UE{&-qzKA zmAAmxG-U3q`UiA=tZA;J6^YRnAvERpW|-zt@-gh?H_X-Uj*9s328#|oeG7~6G{PR9bss~weZ!vmkJcAl1F`plX26A6KI|Q<;N90YjeS-dM^^C{ zU>|YY!N1+hJ$p-WS~6cGQqR8JdR$x+sUDmE(2awT8bzJIPuhmm*grCnVr@tbNT`-y zw;icAgTJF(9g!;cb$4>82KK#Mr&Ijk4)*!qd42bc7WN4`Vexl|CN7VJEHFJqkDgXF{C zA4JLi#tsErzoqa~ND^{QelBZ)ZPVYi!>`L>D=}Iiu}J<~;k-h*%F8(7%< zt7Pw+V?5Ysq^GH3tbujO*B-lnlgH{IimmXhJXQ)R^IyB3h-JDq-WB~RSU8|%8Wh!y zIZ{_eUk9XPDkbXGxjt`B`1C;x#_lc+&K-G@$ukiy9pr%;w#N}LjsNXX= z9wVOyjZy2O1eFp^H5eGLl-doGYS31PqpY zf>8O%-MsG5EoOb}$WK-1-cm9Xr}YTBW?N{6o~qE*SNH3#s0MV!_Q}kq1Vfj;#&hF@ zN}&9Jd})_kKndNCukPLeionICNnL^d1^-9| zhp`b}y1E6)JX`~Xm=PtpeGzh&`pBC z@8&_F8Cxvtsz3c$*##>`J6(MBJ+SJt+TZt6PqAiVLNW8sd93Se`Lx^WD>mdbDQru+ zj7_&jvOG*AmviVb=}$375Ub}^IDx)MNEKHtUGCpRGl{R~BNniARUT6GW3e^sY8~-P zE4Hbx&)zOV!8U@~9zAmhY}eW__*BIZ+Y4uJ8s|Pn(#Gi!$s^19VoR6GX;nc|fsanY z8e=4leUR~&Wnl;Z%KiRR;@F`?el2`q2s?C+)qg3o!;Vv)mnK_YV#m>^>V^hf*s(7v z(6sSBcJP$SiNAh|q&J&FWu1;ADedEpkXHjpy6~{@-Qp7@t(jBPS+fV*bLvZv#yrDz z&2>i=_Ak#zI&^hlN(|d{bJ9jBO4wRoso9+xgssx#)#3_lBnBD$$xTl{!rPja(sg}E zP;kxnO8SZ|pM~9@H7jAW{k!#fr%JGKNS`y%5Qq)Ot{O_0m|$IkI;IitE$?-xY2%3+ ztd?~+|7UI5l zmsCqip{%~qm1ooqDvqp-oK)e4%BmX{6~tpuEw+Dt^HUM1an4vDoNxeYo45X2>+}KY zetp-N>gk4t?a8fKhohiTDOxyW%?LE9n5GEqJP6IZT-#LbUO>x=xc$Sw=b)v_j8$}w z3Fzx28QR|$R*nTir(_i;*bWHO^#ebW#eukK*Gb-g zmw~wJiq>#10C9g1pUB6sWlUZ3EFf?Bz3tRsogol63y|_gZvo*)<+|tgaX{$q65Z^= z1B9d}Hq&*#fnX=$2%+LY*g<|H;>QhG;3rP*E(2WkLUH_R3bg23Pxy-mouQkwy_RYOtQ=BuG5I{N7T ztBX*5U1>zT$^)vD0%QM5@k7NAo7KleT%o);nr4>Dzf1fTwT+#YNK|&@F zDY|&MXyFY6O1UMKWg`GISLoNb|0p#vsKtP8^kXj5HqBS&{CJ zaV|w85>{!L=(VeVz+W2Et|yrf5>uV9PO*KM5tz?0H~S!T z2@AiD4;kK>XCM-{2P6BaYSQ-qO^Hm{?8M^=!Rjf;Gq8Rrsl8HYu(fiT=g%&+Ke&bt(pE<+iWNQgAUU6|FE`cpZwMYORP;Kq*rJGB(KBs)f;)lW) zf7>c!A>De^X;K0Ub`@Q6kw1uecXuxl|N3A~`7A-x`2=Q78^&G?oW;z&hNXi=8klY? zNmSXk7E|`U^5y+R#)Oz0Gx|qfj9Zwf;Zx4Q=<9tcbzJfIv}Eg+1(qoWCAt`lzFI;b zl~$tq(UV?{|p5MZ2qTw-}kHoJb1;K*-W>7l> z5%TkM80HSq8xFsdVx&Rrq@woUb%hY0|BsiwB^nZqY@H516NKc~d)sZ=xFJnXhp$m; z4ALp44V-HyAmiN;a^TJ^$bA31fAo?FWDQAr3S8%c?ACi@N+0_m=Xp*et8g9UUJO0? zk1Yv#>;IfJ)fa=j!oDpFaaNG8v1;$iMJ>p$es(MG^iwF1^sb5CxC#o~$C)bTZ=rxV zx-U4p1qx;}LtTwxp-{qVa7Bp%6sj1%j{12M3J=k$YtK`mP+p$k6;=X;o5^cwy*5zr zp8Ng2^Zrm!e6`@C5-${7HQkg@?F|KdR;+@8B*-t~g0}7k$Ui*#;-u|y$ZH8HRkJsQ zJhcR)e>GB&n^o23XD0-?TmhP-pj61YTxF1F&w}iizc29_Dnr)Hg7D|>4v?kpF&J{( z88V%e6mAcMLPic_xB2TdNN0)-krM7e+Cn^2=j07YJ$W#+cw-SHhX+4pZD2rR@0tU; zNxvXr{WiPFOW_c&rxbr%qaEUWDrjX!G7!`7FL`tL07T6?NURtsg-8v3={~nf2w!Y} zG7}jDA+c}17t3ov&|xS~Fh2@@)0(l{^v{Bi)7tGe^9|s>-=ge-2OA!2buw&qh=tpB zBHeXj#bCV(SBw}ufTMZ>W%55C;OX?|)0Iztqs=vA*CS^v@YaaB-rkFc@VNNXYw$>{jKkV zuWA?=6Jz`_YzTv%Fv@%UR^byf&WEr0HW<8ODd&P*9tH=I4LM zRnhT9D~^W3LrCc&a;J;$ucP%EoT` z8j@TJhb*cB@7q5DgJ+`L&x?+M*?|XUqHZhTQm9VtvA_CYw^KX&(i$VUwkKtgm}jQZz&;BjQ)7Uw_@}?p}AV zyL;We@BM*mUk^OdmK*{{<@6&wQDnG0W4M^{9+=XGi% zk$oC{J*`!%Ki$B4c?z@%39$}#)oHa z{11-yF56j@<0GRB_Qi59FxIg$Oz8#(lOGN;x0dI7re*PY<~9Z6 zgElHj{++;t)~GM)`j0U2U+`?h+<%y?)!Zk%a0gS|B#NAcIxscaQeN6)JEpZ7`MmyA zi_c%Ts!r+0yEw>PZ-vn} z=4jhs9p;4p`j0KijX4i3#XnwGz??hqY?ZL(a=&YyPUj)aF;9xc%2LeP9<%h5pN83! zQim7reZuT4DZhmv7G|5ePrKZiz^qR^a_I?qnB_y0F!w zBTLBFJ$QLv=3jcIH%nvMhmR3YZj@r`C3|5V!!S&4>xr@byB?ExUw*p$&KDCjveQfh zhw+)|x#%xGR`|p?h7w=!4rA3Mk6si%iqSl6U**i|@Ih!j@2t--hO_oOyn6Bq1}+v$ z<j!D@K0 zDlw>1QBnR>0N0nfPP5`Q;dg@hqi-MU|$klYlraJOL{q$NGqeAP1# z8J@aUrM7g)+VR?G!c`8kVX;LWlxTF6&Uq zZ)yPLng8ZQ3kXml={wXAsRR{~9+Q9k6`^7#W_EkhX{bEo;n?v>3MxxFZV);IpmIUW ztn?W|)e*lZ>i0CEDilohb$y_!($JJE%?zprPn_R>{{>XdNnX)!tAc7FuR3Y_Yf!yW zMZPr00ID}gA6hN&2&(zFSclZfL)9miu^lzFepBWTn+mM|!aT!oK;8L4-D+DTo-|HB$iBP$5o8?55GE@{8u68K92^ETt-}^>1pggz0>44Qu zC>K+`ay{-Blulp%H+9SlUS<(`$7Rk!iSBG-e}EbkQ6HqQXaiKbLn)s?&PmaYc&_MOG> z-Fr{-xSYZ$gSEkzCKK?9##Hu&FM^mr{jerZWe=uaoz>Y_z>gX8c~%~=6wE%RUDUzS zz}y&@ux18wqL=QZi83N!2`=;MT93k?qE4b?`UyU z4_3VKr^wBTV&xl&VF`5)tYQV;bEEQNHA&2BXX|UMDK?tiqfExy$f&i-D&tsp>A2SZ zfFZ2k!#z51{43T^?V<+Q`e8$k?rE{R?$~&uyCW@12phkis<4WQ!=?}?rCPT#Y+m_X z&S#n%n*$#|SG`k-%^%*);;MLTIijhSvFi}F#Olc}spw)0y_S5j{wcPuIAfZD`>|Da z*vb5~1GcKm1}QTSW2@$mwtVe8Y~8KswBJ_>TLmlIh>7ypGU8=*LHHZCbYXPGMToxqZ_y&367C$O+Vz}H%Y2MhSx zmlWRyVeT;<`@R%K%<`^NZV&i|&lQzCt!jNS(cEidvdI?X?4>h9m3aq(JYrj4-YJ8~a^Xn9^gZx2nQOwu*cg)EZZ$T4kOrB; z5`05ZYLKJ!9WVO=GL?0TsPR$KvaV=PjwiV8;1%lH=kfGd8jNi zWuAT!4AooR_Uf#D1T~Q>*;69Vp!SPtlC**%)E^D?3KMpOhPdHjD)SLE_Px~dQq_ZI zp}l)s2lAn1f1|GAE*WUGO8C|-UIlnv#_~!m8``u7)Z+v1KwH(T$_e*fK#Z4yMo6 z0EtxFxuLibNZGB8ub;mHl5az_7x^%dj=U_ta5)=DEAxBC#Y%zLSW~mcsSk)w-`!2b zrGdzQOL5vx0SI~4+7X^CAZRcaTc<8TTl2r4m*u;m?SM!)BR&-HQkclaJ?hY^bI*P$ zXDzgFmGKu`u8|vq-JSAK`26cA}lN7(6fm$w}ou`Cmq1s(; z7J_#|C5z-RvV9Fy>`L1{cv1;UKYuClScOo0LnlDXCJ73LJ97*u){uMnDDkw`e#m^} zW}@Y}%%N<4yS)di;E8aH*rtUGaF?ygu**LQ4yo(4f+-u(>)<2hHO&-!SZ$aQM|*+K z3Qn@l3U2IdQEc##Cf^D-`WMzzMkWii)v`POM60ZnK+Zb#?lAvWIq0$UVWfD`_ zYdW$0*o=AAUq@{3Pv}*6a}_&mUp9^3IE)>yC&y}CX0h`)S6)!&D0Wtr@02*Y}plZOWY7UPlss^;sSOIyFsbHGj`Z*qB>|UVLPk!)yJW6 zY(E&sf5~+oNvZS-8IyHL{N5UybU_1&2l8LtVFe-~=+!TkNCRxE&JGsJbU^HEU#Yx1 z6kA0<&=yXlVzb$eke(agurWYURjS4g>l1#Y8;q4d|t zYGzn|Uz4)Wg^ndXk%Kp>-|&U+Li#{~Ip&Jdz1Qvx#f&5Bha0rAFyZKbf(JrQV&vrj z#>X)>y6c3fpR~vaudspth`SOXxNYv&V4d{kksF6;@Jm#JlIWMm+BUbeXCs0tK5 z67TpPbqq=+ue3%Hk3z)>C*B>?zo06DpSwP#0cx7Ue(Po4g1U*)s4pA~Xyglu!Z-ZT zEYol2VYLfd70aFz-F=}=BG@d2MgxM-1;24=8z3xw4Xoc455&oaB7x2VAoUz;`nE?O z+H++Ex8z$vhbQ~>;sGh>)cF~}qIyB+tk`n_(F4#`zzTR?ya;47y0E7IGa!F1HPv&` z0!rW}{ilm1Kv^PQEq`qc-G0{3?hWTa_jsnmqYP>2(YMex;5`F9iRu@7G7_O@X#J6v zf8T&ALGhRH5C^K>&W|Ez$AEfKuupt-HBfI}UFBHY2-I5=Z3BiMf$AjjZI8<)pqklj zJf-mosPfYuR`qevGt>Ki7fTU(D%UIwDO5wxuCef zaVPrJDxag!UYuMXl9LA{3YYMkiQPbaD=#ZyKLvyj-g8HbDA4x7ruFO%dBFPg@vvMy zXo-(`yzikkG+hp*)cEa#hOK^QADTaaTE^|)s=Vu=+Ozb-RfXSB$-mLjUN8~LRGP0& z$g-hG({y_4AzsMaqw&=9e_*T=jOj;4;sWp|=AQqT6SG$c3nQ1Tb}!%I(&`x(TeVcI_`Ij>kHt=` z_O!A#;nl?2U!8U?Ra)3^UF*@y;1O&Z^iyBux$F&x&sHi#)L@&*Y2k-nqe!@s;o2&t zgT$!Ni0B<}kd*0Avu$Ps+e^BdymKwFqg+N#D#;H!3nxP&MD}4<@{6R)`uC6=GTOC5 z_YYDoY?mSQWnj1bf7N;=$FckKe2-So682=Zum3@lMyl!0NdrwCq)sYd9eHGdz5d&Z zC*^ywcRrlIzDyly?mTi`8~l;>%2gtwgAeJ-{!fpXrz73>pICkQ0i;)w$4l4WM*47_ zq1073q|X-=U2mu^k8|}J zqSaU-T{_HlT)7@;#OIRzDL0XJZb~}hy*>60C%@{C7s1}M>>AJfKS*t3sT}l=L8=rx zS2If;dtA2|Y}-_f-Nkdio5Qt{@(vZ7ulFEjHL?3yp)`_ZuPz7|*kG3`KTqG*lZ7V%VW5p?aDO*uL=+HeL2X;(SQzeWNQ#;C!o)l>uza)1lD>eX;d5t!L?NC^laZ zN+1!4*g!cydCFrR>l6pCWeuBR_3iG779S2)P%pFcSJ+~yB*i$v`aZsRs2ocvS6j}5 zF)Jscg)t>?&GD9mE_@{Y^FyH<54x4g*Sg=WhS18k5$T&#@bp%o;eE+*NS{>_m_2qA z@^p5e-WL!AMc)Z4`G>}#{N$7Et+BdLwUy!W+m4LPr z`(~h3ID?pbR~y>SWo(|?bPWiZ552W7uK?o6_hYwiU556}+R6+1z0hGwu{2rp3OYT7 z8>6nChOXGa;OM7wK+d@>+n8Sjl;UKzLS80xzc~8BD^nGElDS6RJWGKZY`g39p$pJ^ zW~{3)Bm-zNyGE_$X+RsKlxoe20X_0ccIqn{FeFZ%NmQf*!%kezoD=|z3@bM!eiASS zmMA_vw}H9#gJX#$0hsFFSBHpP1m-zDF+n3MV0uUvg$fG+^Nx5S^=T|HqrcWLvR4B0 zQSy;!Ml~=aB$BcnrGV*wX<&XL0+^SB7xP4OfqB$(n7(8OOsNy{tErX1nA&(D(!K;3 zH6Od)xpx7>hZz<1X#+4+z6JAA-GNSQwdig*3iS1N?z=ef0?pcQ@3~P+=#87=mLb!D z+Ncxz<;fWIaGLcBW4xey^FouL=%3+5X@B)wVpKlO>?4l5I1-B(6i-%d{ z85P09d$$kdeF_8}o7#Z*eRB9<-s55hdr;zMum=(G>i5=O%|x5uBV(SUI@HUH%#-J1H$C2l%+ytU(o7#@4wv_yR^UU{rh~1`?^Tg?;-OC; z?_Fg11zF|VOdu;|u|SIb5n0v$f{M0JBdgQ-(@gbdWYM*!dj!Rn%PY}G`t+CECtAN~ z&mgOYbYCqb6#KDrfaYTS!NBcz6Msv+I;r0a=#5S-#t>Dm}psEhyRXy zr;aYKOI_;FKrAxm-lc7qxP*-Kj4x9S`;oE#IqwRGM5L$lNZ9q8BCT%8;Kj24^^#&H zZy5O^m9S-9f!8zasgSv}-nb9Dp9v1d9AzNI#i>E_-Df1LSBm`}X~xbOU*dnF%jaBR zye|Fh4{SGY3Lt7kFMF2rjg(y;NVxx#TSsFW+rM`2iIct+O(B-b|+x@ht7N<#VuIuZne$PmyCI<@8-92_u_NeUzGIi-!WFscD}QA z*}W!9SQ~RY;m(NUV2gz*B>bD!UUDgeY;M2)3jO2oB9ykn=$ZzU&de96ow0(-(p6n4 z%l~7|oA7|mGV7pzaYc$sXBISX5GXJhIt{o(JFRquKM+I(d!I>i12MADNOY$dkmhx- zt6%Vhjw=e@lhz{8Noe%^S!W33^`|p#l)MJYCCltElW)+Sv2*li>00Pv?WNRgb_eR; z&wN64zknu6eB=D$8qj5Qj1unF07K|wMa`yeU_4lj)XrPL_(RYfObP?$rIG%$u~J|X zH96XSy1?2T_p#U`8CY&)*Jug@ST$8{s(Q-6npJ5M36%o2@|LCho@;?^d%2@DtrXaI zCZdwkB7vP1PfZ-l0d}qZ+72~GU=t6%%5#hdc84ryW?en7QGobh>Nv2=7JaUU{{wd7 z{0OJF0NB1lLKUx10sF*}%>+IG_NGFuz3Kab_3nJ)k+r?RN_BRhKlTGyW`C!4h4ce+ zPGPg>zX@PI-#k`kUj|IAh2PEvPQd8?Q&V5Q4H#z+DxQA01oWzT=F)*Gpp|_5T4$O7 zy@?e!c5XWkR4;bc+Uu-k|6^<(7zF6%Q@+1Fs~gA|WUXmNf-cwNMciCJpi@AL<$I4C z+Or3BuMc2Pas2WiC?Z^vlDt8nXm#m@Xm`Iz&`3`85)za?qpNHD%k=M@l z=b)-0{JCUZFO<7Ht{Qo)0YzH86)HO7kQ3Ep%(rPhB$ouBES|p2a6-%-i)bnHy@SOGy9=iH>##zaE%nKaAFEvhZPwXVU|rcG z{8ko+jgxT|<9ZI*x>0bYj?NuyOY1r=Wl2HePD?&N8yh4QEYy{`WMPM_(2&*hb=VpE zj$Suyja{>3oJ_n$;1cnFyTFRT@CL zQ*SXt!vPrwXi1KrbCJ;;sv49lj!cb~3_D3CG7C=W^7x7%ON8%zTHsk^-70@`hGdE? z>K6GN({0G!vcs=W;ux|WvJ7XkD9Fz982?@*kL&uraz_I>cAq5v%&8#fT6f!Blhw#^zIR*mKMUm8ZxA$o{0=!M!w)WOokos2ZLK4< z0y!c)k6eZtkv*<8-?5?^*`;=d0S+Kt$!ov zBZVv(Q;Uu|C1lo~A-^B(LZ*RzRib1(GN`%R)|Ag8AaR#Zp^)BB%9%DE0R>bjrtC8X%bn++CkSxB<;I)f6c9xjzu;5yY9s762 z*YW!ysnzDoR9zJkbrSlTV(Hjc5-zH-dO1(4Wa{VHYGC7E*B@n5#aLI}Z(;i&1gjm- zZ*SBU#tI?lP2LfaSZph5vv0dL=Ei!DHXK&MR4?Hum+`|GvzZMmWLqb^n5Q5r zLFiq8+&f5p$RGRBN*Z#X&u02Pu;&!kceq1yZ4iTpEyP}h~-p>p6O zGzk}JFr=%X)pR1T$S?}pTHNh|vYrF+L;|0+tRj&5DnxXrW1z!QWU@oQ13G&IzKUh1 z09kYH#W$)dP?EIw_P%X}?rC|)x8=D&)mGUzGTIBh-c7?@Da(G85Be>B6XtG+j34m3R;u;jP1Z+WNGB0VF zH}=1Y0*qRvriE?wU=}Z9%TY2|J*;%^|(Y}>`9vWav>V%hpe5?x9I~-toYiG zZeyUn&G#C}z6Cu={j0VTmbqort9{DB7|2u7X<^^qLDzkUk$(ad=#)5;LOALL?J4Jf z)JNL`X}!gzC4V&_JRES;vzq|?a?qt9@;WqEm#`f5hM~dZrqi08#ZbHLk3_h{JXCf! zmD;-MKq==|pf;@wUhoVP?zOc+)*gZ;#b*ONOEN6t0tN(X$K2F_atxeTj0`F-$7f{6 zhD34)X6c(ae%P0UFQhUK8tEHg>F3>thqD&3lJo1Pn^P0k?z!og**Jv_0RmiYXU}4D z^BK$3-xi2J`agXS;X*=m{Nl$AGDzC!vrYb*8MdbmHSg-CW9NF=Mebut*mXZm%kf1t zlD`&hHU8a*-N#C|dfn&6ok%%l%E=4W!cJ$f;PzGDu8D&U5&qs5gL|FniYf71qeHx+}yv zMMaKc{qYVPF=YP|m)84hjqIxOIgiZE$aX2&yG`%~vL$zp%Gzci3k}A;Y#&FKty**0 zOFm@ItdDH54MFDZ?LW@+zegr-4EGNM0c6~d*e%qxoKF|hx6Y)hAZ_^2S_c(V?5%Vo zjJ)PUs(&S`P$UI=)KeVNhv`TetL83CwnXxS_>=EU?_<~20ot}LCCj;b%QLC{ve>T4 zyZV!V9TKY!#;sm4g9HWVb1{T?#67-)Ih$RvX^tu^q{zbh7VXnVA4_13_wK4i$r-HN zA(1BXdI4W14BPk8hcN%O{rQPvI%bL%yDrqPz$Z~RJ`UL*L(dX%(fV>}xb50UWR;0P zf`voH?ABe7^}XTaZ}Dwx<7cFDcZkD-^?tEC!i3AFL)nXcM6p#SHh zmXjC=jL`8t+fri=V zm>(`U1MJsMzWH6=z|IaaRd6E%`-)iXNa`nGZ`LPzaP0zC&)y}zXFb63**^_5m*6kQzg9u7 zLH!QeDnX!%dqz4%?11imZN9;K9H2aUlE>om0`dU~-N&oWLFdp}^Aw(R=h>!L+PVSA>U}!py+~F<3f@lWD~T+4n7!yRGRWj7aaW{ z>aE21X37I_yT2m-U5OFxN^iQ8O#3imK6mJw%{&t5+M=9~&|p?lLvzWwOe{S4e5OnN z5tekXGHvJG#`3L(2}NyvtmZBJyZ>th*4;3;9d6%-jcVaPkAJkorh@N(dnl!m#Pi== z+X?|&;)ZR*gR`)WVwn58&0cJO_RM`^r2#uC=hYTZ3SlS3TUwLV9PGN5+)~(~iruzV zrMof|uqQcH*5n-td#fj&QOhl3U;AqOyLAuj@34Jx;q^}(c>I?o`IS5l^zWU1shEy~ zSBjD>n0Rn7iF`buYYPWA&O}&dp2VR$h2ecfVH}DT;t!xT$Dwy|%Q`{hILzEZ&+4;; z!?!b~M{)A$Z+QG7aS&Y{rO_>bjcIPjc`_Q=^( z>>qbokm7Q|z6nQXJ5MLjkkp8FI8&u49)a!*Fa+A$E$6&i(Xn z$Bs3ww9o2J*q-Bl>P43awyAg!xCSM$Wu=k-*&kXY1rHgEZw_NKhvuXFxXXyjEC1M= zBd}g0<7SKRPpnZte7t}A3Rd2Uvdyzw!?MdxO!6AxNMvJQw{aH6+#kiEN%c=KJ?((` zA#GnwNa8L@DsRM~@o#FYnV0c?QwsHs^*->Mxjqx{H38z7ncD`AtU=m?3*)+bDIq7i z`=q)QB@}fQ>V5T7hf@0^Kb5EcLWRczR5oOQYWG{a)-$`H&MG}r{M>hFd~~LhZTTBC z#q}SccI<%We|l|q{pz6Q5sBra7!9-*-kS^`(}uQn?_HBl0?;Aao2^o~0%Ws1kKK1Y zpffIZ`CoA!bX6Z!^~x=V?(V8nG&}oyhPDO1n1(}duTNi+Gb{AfPSb{+*@pgv(hdc8 zT^P8mWEX5j0RwS-H%+d0!@#e4PgZ;agE!{)Ic@dAVED_uo&0xUaKvZvQI9GN9c&Ew z%RB)?H#tvt4j~L##i+#D6JRLzpkR|GKMa-mJa8S=fuWAMzNXq`7B=xMp8is5t0tyOsVd(bi#UzCg7-BZp zef%6?@SS7|eprFQShtLvkU$tzP&V6_`Q{q*-$In2u>ik zjxnE6JPREOl)WhhqtLDw6;(K!2yJ{vZf(`YLd(oy(-~(HkfJ!2D+`sNS&IC9(Nh+% z?Ot>Gxp`>VmH*NF<~^vrI4;e-JrvWZ941;>lO2pN_dZY%G09G>(m8N-qp`ZsqP7qPsCDPH2FKUVq9Yh*6`hqbq~ z$}?C~u>L>!7Jb8M#Pnc7l=9dPKX#ih=$j!)M|q1qY93os_#&FZX4r9bA>@Xt3X%nW|27IZjh$EcAG1Giz%DVCE6ss#vHPqV`{vmu>^bB!5N^ST zJ>PG7|J%ify>-`r`qHsrpUYY2>5o;|f1yNO%{>_VM?%vs4Q%7UwDP@#KD^%w?FZ4;-G=ByxLb~9Q4@#iMoV{gW)Uk+ zTdWI7Z%46DUNZfyr6cwRPFZn8+{T^;jpC{{3hbVxt=|=)kKGja`$)MK*mWqm%X?x+ zw~jubTRIYpWah7u&*>zvgJ$UHxQP|E{qmLBOZ3FnVGoLZMO)ZXAj3>}{1Qp7iVmxL zGqL&B+0%ka{n$kN^v$Z`Ha3K;rQTXL!P+f)1=2btR_pT4iNy|M1sYx*uMER7rd5&G zURFqaw)&{ft{d|o@c39$$ztZjUuia$MI=0JwD9ISh|!qra)QeNeeI47p$Z2GPVVKn z`(zmW{E}G~qedY{xIu@#qz4Eu5Al6^(gm46R;_tO8X#XzO6(!kJ|N1Cx`ycwKy90#En4x(k z$m*r%ZD^tU{dG7060{yql%=s6gEsDcpPwF=g?6qnV}_#>&~b$D?k?3sAn&5+G^@)3 z^2Zdh z3iKA9v|{W}gg*WiCo3l@=u6DbP!P3;zU?DO|1uN$ADqzb521wqyX1vpWafEQ#1qme_#G< z+u8yBt;cTv%S?cNpMq0eC+MJGjQ)$5i!k(kGfzys|kvcj9>9z)wX8t%c!L1?{rD&bq#7POo*hCC-F zAf3Et;A1BQ%?t{c-4|*Azn6~|X3;|fasJ`0c50|I5)6IHIRP~+;Rk-LcR*zW?c`DV zPAJ#NVhnrH10~C*w-s$Tp?J?wOrqpI$UFXkDf-zt$P{o@z2)KxgsaB9M_CU+jGyhN zbDeb%cuxGN`Wh!?THCrb6hn7H8D+PVg7B25N4m= zbjb^l#{31}yN$&WNL0Gv|1sYXOH=7IoXyBszHl-@Yw`_N@kA9d4Ycq4=T7o_E~#Lh z>*C<8*8Es!Y*BLm!b1>*fpZ9czt0VyTyAxeRTH1?ijtC{Rz)^^np&0 zxqp4huo$*l9Z1qbV1F1J{-CH$~`9e3NFam03+|MniNY{WKS$7c+mX|NST<1bvW$Cl*;TdL02*m7)RG~l}f zl7KE!b#pg1YhIOHG$3M=QO3PY0IIMgWtot|*`U3cCOPdmQen=ZQqz8;-X)8+diQlmS3 zL%RbKKgT*G6a_)rd3JZQf;?nBK4L)l@*m{6y2XmD2trY4YV}`IK9t-xek5{K4$7c5 z_k-jLRGeG$bS(>pDu(+d*Y4**^&FGqf$KU@OLQ3VY7vBbv)*nlrU+;}u2Yoo^bTNS zh%pt_b!f_Y_{7iI2bztdWah3i0*R|^^|GZ2kcKT4vK^D4#o3=`B3u|+*=k1J=ggs% z*ys40%?sKjL*Cq_YlXI^PKrwgK8t^}R0i^k)di)({XmZQaePv`qZ^g4qIT``1#%~YA-{SE zkO%3rHEUXc+!yA4!uc1Fn=`_SP9u=>H0H829Dy7_o}c3%2C^27V$kw$AoGeI;90DI zjxY9iId8~8NAizb`g}XSNxoB7m){TCmxS#Uc1c5fz>~SR0%g#C)aS7h(<^98eJ6EY zoCVrWrZ^Ci8=*D+pqAY#6|~aW`D#tFK#S$!qHqCmAPtBl4AZOv=?wSc>1)=|>@2cN z*ESlTYt4{21J!4? zr5jDhpwc10dgGB2lw~RsN=^j*kNLJXnu}rtnf+%XH3{RFpU;`(Pa?rv#q&9RFJ@3We!J?_iP<)_b+ePF zFmJ5rVU)fc7M=S|PdauViPgu4i+z%@^j_SCeCAawo0L!4te3+I-RR#h*kiHs!zT;# zZAGk>C#=t3dyh2*GQx&bU06pUO{@%T#de)wk>U010*lwwv41qnCkDwmc+sfTTI8Wy<=(7n=op0|@!u*wo;5_{sz;HpvVTZy%IJ^f{DrVX_Gu z?OGo;UI@hoZBT3WIgj!KPg&%RZcIKGo3<&2kfUNB?HY{Kr_Hnd1|u`?wmL}JnL8=ov3zG40qzs?56 zYnY?BQE`Vh4KuZ8n;blcG0iycIXS`;Q|2m$Qo~0vZuNTxr_KyUQW_E_Xv*>BDg8GA zqBQ6d{qT7IFCD!9?p7=k)^{A<^Av zEl42^2tMv9;}mZoT{61*?DAg7T$nQYP5l{i0`7_24qt|RmWk(EUtU0AY=CW~9v={Q zpO;WS%nc=irM3LVuc1_JM!V8V0m`ftv)-|WLAiG*?elpvsCX&Ob*3*GD*bkM2PLRL zm7S-Y{YVW|YwGE=_DDj_B^}rKk)1q5aj};2Y6a9bhwSB3Er2>(sSDePP|r@g6+Gw( z^%bp`rJG`)K?ZW+Qa3a-KazTXZ4WdG{rYovfBX*5S2q%hqoDD-f>Y0_4}c;+$M0PH z3TQd*9owV;m_ofSL#Ybb;8k&j{RUva+9kVdGl0WULkF&f0CuT0mJ^QwmenlOZ@vKx zonFXlod(oipSk|Y4e%ttp??S~G`=l-&OrMX8r^G_Y!!o{kv-(1_lPny6q-ripS}YP zLMh*DxTm4Mz@mV+!~p7#U3@y6^9kzQFAJ1%(L(LmyL;1zWucbOasKn44yZA=?X6M} zf$DsrM~=x?p=y#vWX_Ncs%S%b9NMacNCCuf`#vBC^e*hlduuhwt?41k;LRD0g&*={*U*p8^i>#E7@%xg$New z#2&_<5Tr5|$tubVUhW^?hhKaF*4FO*t>@=J`udfDc)A2Mx3NnSxP<7zlN6Vjt%w0p zt!~Elj2LEh=)Trnd5j7m&U3eaz_{SV7TxJYOmdN^p|yF6gtL3OxBoU`8lCK^-DZRx)l|)(ZPz#oG62`GS!Bt~|VXCcAh%TEKdB}g({6uU$11u3c-scL6! zfxs-`#5tb=gw>_ZS;Bru?d0$5i!p_?@G3jzJ?4HR+=3Y7?9E@KtSN$Q@|wk`$~wsQQp5JYERZd9 zni%zs60*jsDW`OdAj{5-XHIMwvi7HMANnu`nQ@pZ$dd?}96U$#dHW$FNt%s=OA#`d z9L5*~4?((*WUih2V@O;2H(0?M3~8$TS6_tKKx(K6{kjfBo^hfhf-qWv;s8}z7 z*ET#K?Y~}tl*8A{a>&0SsVHA}SX2fQWp8~?2`Pp6x0Kqh$>9+9oTPMJlp11|&2(am zvmx4Lt}XJIAVkp|C~Yhrf{4iG^+rx52l3#yzEiEO#i^s+KS#|{}i|;M4k9F_Z1vWR!G4=*T7mUw0AyR157^^ z@a(4E09`dcU)77pK=u54i&#%(;7Z-QTywAw6-s@CzMtQ~C-W8vM*FCzLDp02QSyM%s9FCuAo;|7&(g1#dh0x6+PQ z?C{#(pCeD1as~Y_RnqJUDM!EFlIAW)cJx!(?sogU7k%3j{AYfYqAyPXeW3~i`q+)@ zvufC(cU5lNvqSXg_4Rl|(fwldV$d-ikLo~AzJko?K@Ic}6+3J#FOF^w!6dI^E$Ct; zk&ygx7@f44Q}`mS&_SyFp%;f8+8wFoaF3%y>-p}RPpZoCMb#^Lygh&x`{n*zZHh(X ze50rTrYBHewS2;3yAE~e9xL9gk3-F(?KJ)f$4D8 z_nTTIFdevO7N58VrZyVv;#4kR()fTS(y7_&z+4XqHaNqJa^YqG>Y!acpUT+7DS+( zXW<#$_??`)YwfgA96P$Ea6L@wK7bzi{=fRAn$at&(cs=WMf3^ui#ZS~j(!1|ctcbf z1HwkA&eFWZmjn`DU2!M|S22Ro!U+r+Quk34=)*9F=&%9K7Z@H$vs-B19V6mfrnY1_ zF*1)z$YFL8qiXgE=aXeIx_wXQ&#Zoo84%daJ(Y>EZ|jXF)a)>BY^vMc^)$wh^cx?1 zz=a7tb+7d^voNuKTorN;VN#}+yX}KSO!jrlw49#Cl*hIYvwdCg^%8a;3ZvDbEo!@tLKTcuV z!-HwzH}x>>n)8?0&-*crYrnLroB^h8BuuQccwuVWe(r-BuQApCTCc555vBq^g@o(~ z5*EuHs(eUD2px?KBF-RzFVuWeS`1&C)h)A^h+~Rv^j5Zo2qqhn-AnfsV$v)HqdR!)< z-T}j0))lmFHRCJYggmpt3=AxAOq)u26A?2QKvbmix5FT5;dQ|EHsUc>bt1NAh)(|9QUTX~L3unDL6p4_@NZeyIFaTM? zPB#tj2t)S0MIPe=Cn3kskc(gS4CFd0=W4ZeK%O_f#mI+Gknc-@)q_J&;1<)Jp??z! zEkt*P*U&?en$p92XStwQSSiy?J_Cr9BX-4eBS6$Qc{@AB3&d7FmiO#upyXJm5ys0x ziP=E`3HdcBscJdy@JSm=HZzTH%?d%On8&Q1^dBfSKY5~@D+fxGRD%qEU4>H8ViMh| zER;?+%*t7EKJpIb_WV@ zu|6~=9r6?P-uU%8L!QCIIOp5}$UV(T4CVBK>>=J!k|;f7y?Ea!qACNKyGy^Qypx3V zfV199Oiqxx-F^F+rv?yAPDs_nWkPba{h76uEJ%>D>*s&00x?6LjAux1AW~({;{kO( zgnH4)TKb=b014m5MaLZQ7(2f*eR~M3ivNwrG_$~+pG20~eI97gc(Txp@c}wNqp>3r zv(eXsuw=I|h_4<8P}frxVg$js;k|4;#zfOaowDl2gqNoLK0aIj0{{U3{|wi6JQRKy z2XINEh^R;?q0%mq*^|+b5y?uDG$b-g5{m4RkP*sW*)!|T;|_Q3&bU?il@*nuQdTth z`SbhV^Ll;1&-?rNVETRP^FE0#%u?H(_v@P<=IkvwZ7{qB^W^@yyid7_1#8u3cgRLy z;UC|uE5|rkG}vb%%gDhJ;vM&crbH}za>e&<(;2MT@3?))e*r7SY}wuex3O|!k7jsW z6;@HMtFLQy!|LRmy&a!7V9h0WJ zh4mY(8xx%DJ9`o9LwT)U5Yn+h@`JI#90?n;&l&RTjbh_gF(YNoYuK1f{QD+%J2ovB z`!Heq6Pq0A@yZjb*wm2Sa`r!CB=Ffih!m$IL62nP0_I5YPPw&kUK{nHhU!O zT-U4OkbzAjSFYx6d5lf5hg?hi!?9_9^tKEseQa#=bBX1-jEzQ8*m(5{Hc%fPKTGVx z22~E7ndpP{sVa3rt2D9hCs(Ap;y2c54_#d=LdTc)VRM+{G4@u=Rl zXoDtvk+0u8maT{d7Sp-HmwYkzm+FsgGt-zI`RhURWG!ZjDZLTeF^_4R;({N_rDNj1 z;*lYTYZ%*Ez5Sxn5e!=&_AJZm4c`5{!9O)z4Gj~mD^7}E1kc_2SF_H&g`gQuiiwaB z#Ju0W-u?X=Ncht9ZFkZeNWHx3oAG9K$mo~@7fEG&Rh=MWXxcpNHL9I$rx*Mv&bydOBufU0D{tE@*4q54hxY}Bkf)QX+3 zo=Lb0FOU5Za0^s|I#1K!m~Y-tpVW}(HQERbRYft;=3&s-o*H{^#V%;-Sx(oJcLGAU zV}sM4R3Nr$I*l7mLUXA|x%6ZcVAOSIv7M&SvUjZCoTv;faZ|GMZvk4qKg|v^y#plu z7c0UAvw-wu`gYRklR)Y-ZgUMkgbCDkDufPa-_JJ*#N!eoHl z>&3fc`y7y`h1U<1X+!JEjyN~&GiVi$kK7dM1g#P_&QbBTOXoF<;q@n=mA^3PsOKpl zPs$doi>?RqE7!E|3afxzk+^YSwY6=Wl<#MEwUSR;$3+h9Nf(H)BK%LJ1U}O-9tjmgCGL+lnw*A;W0x+BEQUa7$gVs;ZwV;6NiD5+)_{VO zoZKht#~^oIJUuB#4>CEXrp-)UNE0IFrd5hV!i9Z_=eGqzl%|WUqv$X2RdXkPu&}_@ zaoYn=pD{+?&Z{o6%D*v+IF$RsE*}%R?VZ1UdW&hzw>L5boH5ICQ_0_Z{FqC(N>STi ziG><&i_ZK-Se*N*Uw;J!%LR_)(-e%c@__%HlKQn+^&c}R{DutH_?@?vaIC_Yl2@H% zO}=AYsmkP8wK8nbSm&WX?~9Gi#sfKb*+@`7u<}z;5fY0;28FDNh@wD0KVOe6D$(8JNpgb`wrQSR zA(G>TZ56c}-fjrMc9|J|7<+;354(SxsyAT!pzy8b|J_H*!TXmZQ-YAX41sRrGdPn518^~#oEtms1OopMS<{&S?>cM{<5et=Xz zjffqO#gOVQZMVbk9#YTovv-@vBUSyE&!&A@NEP|9D?PjyDer!Xo;te^Dd`)YeZH=b z6id6L4_oJu!Z)~Q+*Y3F|VZFQFXJtcQd|4-wVNkD*HIufQX7=Wx80JX*l^uA$i0Oy!gykO$#w3~4 zGOIu>jQSF2(R1N8-kAaU-?|}id8g{ZJ7dQoBtxwEZC?jGk@yzK?ybd$1g+q06jj%hRAkyiSPKqyinulv|~LB7nB`TknNK7l9Ty5w<&18fc?& z#5vYighCN}#A4IP1TPf%dT0jTL4M(AF9F@_C{Xw5{yCK#W=r zt?J+XBlq0_vg6_Mga|Dl1^vkxeH0HZ&*J_>rJ4brD>1pbsT+u{CZV2nWzgi&Gh&x+ z2MtbtuS)zl33cZA_vFN>Px^RhJ+s`=kZ$Sp623fA@q0-0`5s_^-bNBMUsOuo=` zGoAxEf1X(Hg*HgfA35E=;T0t6ydJzvmLXvG?-;A6QPbEXN$0#8KZZR@W8Hj%`q;ClUr}z%9eWg#&eY31#GW;xw`GSZ z*ga-wW~`Qq-3>+#+RIm`#9Gh`JKV8HvuhD717w`sr%2IS&v;jniG<$ zW!M=QKR5f5gp66QmDWdxkzv0sK$B+>=}j*VJnXrNbRl=G5AVE@W>&JyD#`gKuUS}$8uw8I#Sh0sNwu$6Mi>=VXR-qZ&P+tQiFY^~T za_bGYd@HD?*{nd!p;HQG_ao8HJXhm^5H<<)2A^kq!1@A{B(BS5e5qb}W{ra}R+D&F zi)-d%<&hJS`D-Vz^vWji%8AB8ZQ6wq+eXY0Acs6M_QSN;n77|TR5ctM6Qg9WNbor=#{ptdh z0wws{Sl>{Y4J}eqTQ`sD z0Lk!K_G+HpK)w^ud8vv3t*N?k4Sq{ry}bDR>E1QaPCp+j`#1wAubNaJ28#lcu^m|3 zp7$2}Ah4vKY>8(d1=dQ{yb8`2V1A9h5koo#OnTb0aM}l8X59?Wb}|K~hgkOC@GM}e zKlT6iat?ZCw@2NxJq$fJRB!WL{Q}+WI79OnW6-_Zqu5aS40QQONJkIaKxaK=;jv~P zFvdGwrS(OY+`TKW`^gLFd$!n8ZY&3y)|PUK?`qHi|9v0T-2_y%%0-*B5TI-qFP#Y# zg!a`pL(lpJLF*^g+!C=0AlH2eJsR)@NCDGtxV21Z(fO>q>r)dDXG5=F7NtUy?WXhO zR8^?2$`|~lejRET^epTn&OkM+{}9qZgo-=Ia>}-eK(WC>T>g7~$a^|k7_D3d8Fd%6 zl3G4Pf>P|}Vx{#ED3x%%Cw3m4TE`{7Ta4hNkmMlobLTPDCCg4Gcz)@9-j^&kqhR4H zm#MF-Be5*?`Ld@ME3j&32XBz%8?0US(Z&1r1lF-`=<2;`O5YYNIcu~A!YIu zwk((Ti($?n$)aSnDz^m5S+48v$`i2lBe!xU@*B2qHGgCAV|ppCTu39FT0m-`%PoG! zZS2UNyU}px0n!=+o$q!^Bb^%QI8Qf01}!zwc-s!_Y|(CX(J#WTVm{r817X-55fsdc zrDBh*#W!sW9%PCNCqHuWK;{j?VTP*iS)dS$Y!AVy^F$i5@1-ng z>-r+wPuEpohJ|deg>k`R4zjOxKgzajLbh4;>&v`h$X2eY&X4(xY~i;La%FvxHFRKM z!|SieDq>jM9DaZ-*G5Uf2_0l9t>1EpVvfwd**sqM17t?{$xXjeMdn_LN%2_{_M}WI z1PqyBcgLME_kV}6>x-L$jP4Qa{HG#7nf1g@z8$46Y@Ct4P(CP-p@+0@Dzg>&@3Diq zt9)9|9jS%<^B^{c6ffOYqgiQeSG&-?>9ilV{v5pZLQN0J*~aeA`kaw;N~P$dq9!8O z?CW4`GZI&LS8Q}{z(ysZM+clHvF_;cSK^g+SYvdlZt_eBR+?lrM;*zQ~PJkG+Eu?b8iR}G=~2vf3U{~2h_%NgSg=NLgN~@@HxcECq~6ATEp{H#Uq!0 z7DFDNakgjS1QZ`)XqsrPhKkbfW+U8bsBXHkvaOf_FG*qJ#}6qk^_!_4O^zcFsxFc? zzJCpv8l0A5=>jB8A;xbx6(DC#+$6gHhPGu!VVT{!&~6=ZgB!vIO2L}?mbqx4em$9d zVr~Iw+w=b=`|AST`uT*rk~lE#=Ml*4Y3NMRJQDtT0=f!@);6_>LwAuB(=7Gbl26_z z6~y#_sn=@7Eu#RlV&bc^$4X#Hh?EDZl>^Ib>Z|WUJFvRk7u&7ufGu;u_hJ+ffHmXTN&gD93T5gGw(s*Tobf3DBTSlBjabp9bbW?q_TPJ;eKHM z>pX$MD!``8%Wy3FfgNLfqC-y^*rzV>Y#8(e)`Fk#F*!S66*bgFhbIB+v=(7XpS9%S zPQAXb5=-6|bxQIH0aIj5_NIw4^z7a1;@g4L-=Jc8>l<|YkEgDp#4pQ-63iUwE461=c5w&dTdnip8U%Ij{?p<%2d9De;hJsNArKiT+;uEz$k_i@pW_aR|l z$L?Fpo+0XJaYRg>BWdfD!y?fZ$?58pL>9mL5-<$jU?ojD=-xZ#Cn~$uyy8=Q7Bav-M64bDZLU!qnwH^Uf zWd8{XTmEMdIXbllyuv$>^B}2ZlaC^DYK6YdX(=P;{emyg938p*7UbBV4anWf(;uEz zkK98)i}f>$kP9-sA1lX@d-VRN>40hEs*CNhAa){mM{j=&vmLo2y~}Nu@)GB}WKgh$ z402ivHp(|HLr!dhnQ*f$a?VZ%6_%ADM|7}jRptd`w|OqVdAJ_gZuAl!xwFU?7y2%k zzvNt*eX#!nb7bj!E&bYTkIb%NsWB%LWS((<`(fcf?8!)t`SYy`yQA&;dhRD+*Nx1n zg0no>sXe%N%4R(>mZuOR6qraOT3xX%%g2rzx#lk>KP>g%wXcb%S7Upjs)E@)K5RQ& zB0&-*Ah}s=Laas^Nm^_8msfs4yc{8WUSls3bjeBVqhGOMox%hD6B$_hR+RbG_&Qc4 ze($@V6gC>I_?0ae@>?ElqFW^H9ha)J7O@9)ze z#elH>K(VW|2%wHs#k{;JkoJ8F&AlSD^zTpaIxc<(+SCLUHaL|-d%16!@7)=o%H&n6 z27Q8#z>lJVYHmP#mp1IrZwic^`)Qm3OXzeJ+3y^-1G;hwqF4C)KzEm0I$13UdcF+T zo_N{>OuwT)Pi8IUtG~|D&#elVyiyL782b-cpRUeXC~pMzY1WI%PX~ZqsW0bQ+yRE*Xhq62ks_!{#*?q;2KP4>2^i|*DY23*T#>) zjXo{p?8gt>%oVzge3yY+RQ2~<{T1MroH5rX2?96wz5N09A>bxlI{e`EHQ?TRJ4vdw z1+KM4?&K>s;O-u>ZETGN&fFu(DOECXnmiac+&2KntMJ%(%PHV&H#y`-Sp{rnh{$X+ z6WAV}A_Ib1z+QDkDjrRMmA1b6EuR~(6n1>+@a_j@Uh&cO?gO~R?&&oCeex1yo!eK@^7$wv{M*(gzsUpqCMMO7CjY^E z3I}zP#QHJ8aL_jU`)ABruIv>jeH#n@J6SX%rHy5IN(Z^`w6Uu4OFWNxF1{306p<^t zf(@3PrkkzqHmDoJE+W5vd30|GmhI+`mrtAmEiADj+B+bv+t*s zka~BbK~b;>JB9>58oyhEbS>p!jfwBbh-Qx%_#VYhmf4<>3!d05D0`l3-iJNP~O+C{JOa4KmBa4Sv#uk+tu(-I|m9$SPp$95L-jwxs34{lX2%4)~bp;+lx;_a{|D zSJWd%-JH5F;1P1dhX&@$|01V{@n6QPUC0%l9<>hRN3Pz{O`eBn$aPEfIpnnDQT))t z;!8kosaScziUQ;|%clHm9!75a-+^SAe&n{jsIKnTLvEwuHQOc!l=U1&&XxzQJ>4sj-Tv)B z^_pwQc3fpcjT~F@cllba-FnCh;b$rGGLW_EWLEUuMP!C8@_sSCi#>m-CH%LR^4UA5 z;H=g->?(0kscGoPPIt8+>ueolZ1)vsKE8}JcGLbvo_g%?j14m~%0lYOB;0j{W6}NRHN7akh09TmC*;cjKZqHq!|QYkq2CQw(S4O`ck;KhE5#TCodj zmhNs(-xO9pwbiNDHpi0d9ablr&thIuOfPzi;`7@(zn{6+gpcjY&2QKgsUxC2gd0b>PSsu8ihRL;FbHH^~ z*9;Dj0B#^}hWs{9;6`Nxc?3KI?xWRoxg9>h4LRYRG@Sz6+m=<|9xu6fPNz+>B^J1c z*Ng6yO9$?%_u}=$_rQ78XnS+bFW@9M+-r(f1CHq*9>NDIaF%7>DH(?j0*IM4^Jy`{zj;;Cg)d7`9iIWPse#9 zEvS+f-)^x#3`)bL9a<*NK|bT1(QU`$kjd}*R={x(;=S7M@e&@wtxGl+Qm&d|V1(3~ zGyhg#l5Id>4F6Benp&GzNWX-I<$KPB?qy@S{i?gf{$*IT$eyYEDTgmlEc^5v(y$@u zsYAtmek9b$6$$-zLwvLMS*Q{TNnXXfHVXYf@~_+exyKOI|mD~p}ZiPxbx6T1>ZT?`F>V0Xpn_Sd&F zu?N-pyFR={rhVX~zUeY#z8RMbDojAu$!rw=6^yLPJOAFTUFvUQ>LqdqejwYq<)lUO zQjcr=ux@MdJ>>8{RO}c{U&>v+-t|xD$nmb3b=-OtIe8M%+Wqp#p~dd{VYeSSA4PhL zwq_vbS5!%w&yrI-fBR$Vejs<*Ma-yKjhwl9il|Nyazm2k9Hkrv`&0eGCfy_#* zm=X|LA>fO}4nriXqoJ6~Ss8V!?-V}s5v-AZDS$B{?tF1drg+gnR=!B^5`@~Cy_+5y zfTyjf!d&>aOBkLB=?nodhKYiRG`WDFflATE_{Gm;xNQxK{0qt%tE;(N<0ZRK_ z@rdqM&>`w~Q_MXXXr^)ey>l|VQ1 zFFvP4K@Z9E?;VFsV4B5vaMWjj*~o|)(fJN6Y2E7c=CG8%Xtv(UOFfLLR#R~G53ogD z%U)%Q0^7`B^?yWOU`Ld@?lG$ac0+_cGwd|5hgz@N&e;Ha(PWwC%D4Xm0096043~E} z6>J#BrIL)$v_4Xzq9LL*9z{qA$ts0}tgMESy~*B@?CqGxv5x0B$HB2zLrH_OGD4xG z&tLa-U+?w&@xIr4J@@a1{$2kO*||1B|2_#W!RJNLFXouHv-dFci~JNVUXh0Wog|s~ zKf9rCtuewe{wef*+B>`S%^Uivzj4YE-a}vTfoNvNW9ZXd-X1dP2z}hHOu}ti(A(0U zES0Jcy-&DDLQ>B`uaHAPm)IioH1KvRy?X^cx+neCCLExoY2mg9k2-50&RKi=fw?!f#LS5(_}~+S`||dnaNZ^3sW_V)AOT1 zuc-UD80rd5x0Op>M5=-McO{o-F$InBF2hk-qd*b2-}>a<0FX_&wf^ET)LMOURFYQ% zl0{8}9BBwDZ>~v74fR5qvH-E!dJh!oY`jUz8GxJ}N}@%}q3|+>7Wrb07owNK`V^id zg3Fyh@uaVL=(0zde`z%iqu*c42{~(pFYit$GspeF>?zyx3(D`Xh_^yYqgM*c1mp_s zZd+pI-U)r7qc@Qx$o|Gl%L8lKFW{b8IjoS%@`>!Eg>M@+zERux+y7 z(h_?;wogv5J#pKQ9UnUG@b>M*PU`rOFMS@nk_IaXSrOQMSD|-X$qe>zj`%ZVw_%Uz zwgU&>@5Y`|xBee2aoF>Vogo}}7JH@B7ETq^?3wqGA+(oaPx1M!3&dXRF~04! zZ%P?^IJS(=&#Yp%arZ<{Obd1;>xG^@J&&EOTa6wKvtq~CHEXxQSZrU3dnLS`6WjjX zD7tc4Vn;P9LcY zPLp=K0S?sr$Q zoTzF>$<4u%mp{T43|ldu(cmUavcb&Bn%u(U1WaMq6z~3GhmrDW#I!adI%KwQJ)AxT z?vbQ77k*7bjJW(=E1@rt`mVh0qyZ~rpN$MHr3*m8TG&78Z!svLEZJ?&H2&UK%S!suqXEb1tNI<+A~3;hsp3B^&X&Bs=D%f zk%9J!IQ1)1ALtuJmKCWA&@8akc-%k;TEu5WE_tRw>mj||?w$o;2=#L;lggoO%Yur= zVF73x)iT8V7HF?{7CH24H*`Ewixg1PfzCs63Dbg`ptGALx!`#abeTJt%Qb65*X*fk zJzZ1iwiGpeF<1@V0~<|N_TGS=J+Br&efk7F=l-I&h#vG9T6=f}-G?5hUE1bCXQ9XY z=Z+n%F3=Oqs#;gB4Lw1cGV{DT(Bs+Le%;UwdhFr|M*B*kM=$SC8rK-~oZ>sol==XA zxL0K!YV$*PQxCE2ivV=%&)pe6+X!95F*bZoU!Y58HLqsqE_C7}FQbBd=oCvioZJ#2&%M9$HZL7B}1xA4(R)3$fAQf6qRhs>f*MS!J?Beh| z1)9%N;&=n1fPSoBJ*Z{}H1WMmTzt(2)ZZn~67)-vR+Z_xtO70ShPry zFBj^~$cCaNGf?xnplIWj-9XY7i{8z32`cOCE)8n+Lb*V5)~l*$AWV)(y#HPf`7sY( z{~H>IENN=+)dL*xBIPUTd08SvcSx|fa(98}BvYX3GCP_l#MZgePGIQKovgVJQZeyr zLACJ~T}*#sQWdk%hdK4)RUi4!VBx%^yA9bGOG7;-(r*}J#ZJEbh`3@TMvV z#^ce}iK19*VY0|`ZxZXt$LDtN`XX)&k^Gl9g_M-C)4$%TU?bsu{5?i2Qb{e=ye0NX zt6HtU!C{0=MXVtYeGVW!-kl}p^*3yO^rOkYxfNT~HckrKY{S;=y0>1KCShw=)K~2b z^2qQoyL(V~3EM>cKc3dwfo&v0y+&aswkxDFPR9Jh_Ih!n*Lq~^IK0hmuTVdBgh;l% zxIB&>LwBg;2QJvTH!!~?+5tOtqtflC<*?Jkws_ax4D3wYQ5o)6g`Jr`zJ&IA>`cRE zgV{{%jCi|2h3P4F+7AcXY%jo0#c3PCBNEuT^?<|2T4C&<6#wFh62lIw%E7DZ|6#|L z2lt2v?_hhvE=g(8W^Cu1n9iVyU|XcLEidyYWc)sV?LxmHGV~3nHhPI-Yr&Yf!JiCl znU}wqb$Wf@9Iei=VB3z(#*FeDL1m-|4F-Py*^N!P`rZ5K6G*GC_f+4qid2Ss`sEQB zZ0zFWY1&UkN;}tu+kw{+y<5HoH&-Cp_{?Hf&j8k)2%AV66~gM3*PK7!sbCdJ>X2gR zWvsNuh2t*>Sk9Z{%TE@=5|2Gki=XLZ0Yxfgq;njzSLPa@Y#qY%BSmk~CI=Ji+<6>W zB`{oS#joq&1$^}7zdd5t1Hs;JOlljqI)oaj?im&hfrO(%zD3zgkam^x=dboRkhK_Y z*K}zUc6k8g`@E)49I4tV6E4SU^*pNBZ7%KB2=<+^xN*f&TIAAPee2vy)+v;@k){|5@|TtK0`I z&QmdkOa9O@F>lQ!{{~vGjdh(1EQ8kEoTS8Up3u6;)l+cE1{gAIc?zpLfnnhnW@4oY zjBtlTLho3Ck=JITA@~~@Rgt>F&kqBG#4rrM76ptV@1N}iLtw;q&_YLofMHK{(Xev? zhJtrnQ8gPdHXYN=4zq&Rx}TA|4(dSb{Y{xl331TM8m(XX`wg_b82ows3Lmr_6x?&7 zO&OYVQ==%JvCu47q*P~<0rbGw`JUSy&@^7Wi^rS*O$zEox~JEG7Cyl3mTm#mfpl_; zkq%I|3ku(VsnpPUr5yod$Tq~gFt$>O2 zWCf6ZO-h%auYoF#Ya{zx2~f$W9I083P%hN#e!KVsl>Rp#JpC~nijLhj?9zV;dHlT7 z@{emFb4_en!{HLVtUKnD4p$-J;gZPqaefHD6_C|pX$x*SwJe%{O;Jbs_>Tv*-RQfu zAf@)MCr0JU-Z`I^j7e3-5fXdEG3|})q3EGW%%V5$_(6-uysVis&d*}7$Z?eDOx=&A zyQhvSrjf90l1cBuDS50Yd)>FxSB^y6=ZcQ%?&}=ou2VjB7^}&(BA0^vu~swMj}&zo z>jpI4!|Rlhtg7tRIN6U4h25oL{1n7BO?|gaOQgI^W>U1GW25Y!k)1R>Y^1YaJ}`F^ zsh7iZAJY#YwMjFyE=U$>C-;_hi*H0)^1yC$c}=7(Ut;-_0obIbeRS^E25gENNgwuJ z_g$YxxS7U~zCnIcvdawV2geSuXBi^>(x=B2>5E9$7ncspQ$xB@BY#`ox;Ly*-!wji zbd9|V`w8ceF2`OPa;gC7JL4l#6xXn6?9*&!%_=sPaZQT`hGUbxdR)JyLz&c$?^=}?xl9JGauFx$noaFXR+qO!}n3% zhDc(JU8TjH#VXY=bvgyMSc#|dEZPoZ#SwD<{iE-&Ebem4gA@C)WZI_t>Z}G9WjFj1 zWbDIy9VI(gc~8v#Ta!HZ%mp*j-ha#1d4Q>2z13=U-!P$G-p|?aI7TkrznfOfjegdN z4L^@gq4jIO-}|Vyz_RQLi^h39@U4j3lzPhyB5hiT3z=>ZKQ)s1pKm0*(4JG)G);x{ zp7D$2?6HtFadya5{U7B1aE-20P`U zd{x=j_4NU$yfARS%E$tUuH8%?o9Ce_r--Guix`fwHY!QFfi%DCbY^a@O_)ikVQPlC(cie62Y-XV`&~B;at*ED|U=C&fia z=YUc`-LAGFb=~*)-BFGM%5$e9DP~`Q;@`;LGR+T^`>%A{3O#_L*ljI(FaapL`^rxf zEZ09KC(jX%R=_KgN;gkQK?BWrP{-Q|8jf&%{2XQnp>ZAR_uOaz z*B?-K#r&gr`%$QM(opjJY63M8iJB57^-!JG>%W>238dTz=~o)aIN_=dq;+_lab^1kDb5unp@?^oplh(bmb(q2 zWpYjSKK%Sks2F!n5^Je}nGZxmSe-0zu#o~}fpTcVkSfV^tEO&7hOCOI(OjkK!891A1 zCm3Pb>N|%{uJs%y&=0xUUB!wUOBR{+(pWJox7X{<7OZsFa{MSwz{-F8M30MKkofR{ zm+XJ~Nc?cD^vhFTtU9e~v)h#utAYynUUKJPRlB<3PBoiKZzbor?9w|SE@Ei0*mBQrYqyyu%Ix&|GSns=IQ@5m@1I#P za={w2j!8U=tcu1ApZzDkvfaV7-mqEpp6ml*Re z`liv1>lm5%W>|sBjv=;1V?vLwqi@ywfXzNU=ql3rWeaT#E&oO>{w!Q<7*pouXKTL; zmL@eH_=Cd1<+!-+n*cHJAuf~}DQ}0Ml8r|#7uO)%OV7&u#RrJq5i=~_CknAW7LN-L zSV6)g^Ya!hVeovz-LLsit0BcnF|J}qqYLFWx8T6&Ao-}Us^l89qEvho3r0|8x?X@3&xY;|3L1b zip@=n4UlK>Ai%s|4)PfPwHQV#LjJ+qw~lH|Bf%@Jw2@>*`@$_+cqtKEK-8p*fT}_-1{My%f|8REHmVINrZK| zDM9wwc6P2fA;?xDtECFQgRG=3zYs1f$ow{`&ZMUVnUdAJ|L`y%!}>GvSM*&-&))uV zL)Rlnd%K+P^>+}`STAs`h-*Tsh0K>nf0rPIWG))Ov_feZuxk>8cqX(?q@_UM zk)M`a`=Y^jifeXJ*bTgDIGPNf@qwH4Pwp#MhTxI#%ZO1eeR$xI^V=^b5KLJliDve{ zK$GR2ifG4Ul<~c9wC&SxG%zygFb91!*V%0!Y;S^gZWI2SBYp89*SvVs?WgE0lu>CK zaSYwY&0EeM(Lqn^Pj18g3Fxi;n@2fK1bsS3FOENJK)?N_9zD;j(Eo;d-mY$Y3@}bA zRXB7W167T5YLmDyi2XGqV{I=673!Z;F@K7|;v0T8H~@o5cLFyuUBTdv zuiGgt5*XaL?D2>r3xg9f+#64FVz9;*kS26v;=L8%=^qTkWpcS1FI zy$4x0Z~T0HW(%4}uMHU9ltq)rRrxAz=BPivN!F?WLYC&+bI@Jk`DTBAKlFM<2znXYh`#@M3|}_rLjOl| zy9;>xFz|z*7n4^jhG=bBvGz2=XWi+Bb$Qn?LYMaEWkM)M&I=|arp;iq{LrfHcS(%# zb2e!F&5W^~WXmzFMU3C|=$1sy5+>ZdM^AS7v=Llli7+``j`8n3&)# zUMi+1{^?@uAYl4$R+n!>0fmEPajdlblV5+s`dkzHu2-@qD~K{ z>5VpxNt5v9gW?+}x|cDPyXoZpVn>>S@@m^8Ozf9xJwIh4(dvY}lop>U0kMFR~0=Up$Il1{a9u z?y2D8Xv>EW!j9s7t$}nNXB`>l|!@~0`*I1DlOf-^7gHa z5tMChujLJmf-?W~Zf9c-C|i-K%sr+J<@b2&el%T%a{9N6(KpSYLP&n2^0hIjupydH zN4P>o=~~}%c@k7iHvY7Ztz7S)rQ6P!c0%PjuaiBBr=U`2Htiv|6ja`A9Ck4ff=bgy z-mxp|=lTt5E>iC6+#dCi%C-+Gh4^}ve-WW#=G>aut!$_$`z}7jeHkh&`49J+IY7k@ zI`M?lJt!|*G*)|i2g(&InjcR!Lm7iF=9SJUlwDMe`m~Jzr6qdBZ-$JZl-qY@E~fwp z?SHQuJH$Y-F$ep2V?PvrpfpQG%|gMYYA*ZqQOHY7mDp~<0y%Gv_7{g3KsK|?{CPDt z$m9=EBS&&Ty2u`(qm@CBdL+{?bT$c+R-WEYZ_S6e-1p2P&&?o8{`aK2(kuj985z8t z76mV=XTVyiPS?gk1a+dhNY^&pLFXK25!b(aF@QsTpp|PgM!fmj`a$s$#=brL z#s04tCbdinJe&!})M_QlnIi`=y^qz@7O=%Q7k*XcFsKhBbMv5aEWSl3-5 zd2rVv*74n1oq1G-wOZEP(p>wo##!vM%8WBshkccHc%6f!7?$Nh?jfuSTt0DLxde%} z$66k*m|>;jG5s2{6jreLvbJ#fVi~Pbfk}Q2OYK7L`xqTV!hbx@&h*28`HE!=rMZf&r?gJN^ z&?fwEvAb{|SZ$Bt3bi7FpQ^(5uWy?miYq*%{%Z>)GDUe4c2q;^0*~|64XTjwzqqf$cWFI;-4y2Voqg@5+RhL2LuLPjhdUp?%5P>Fi z_n=SDQJ_6xd_6qH2ef9}Dn+6_G_kSDd`Q=Zri(ZEzV1H>O?HPJH!Ey{rby*3wn0B= z%J#L(+_n*#2z8E{fBT@RuxHN2#1ooQibd~*GDDNMfxy+9e*dn2Zg~=t8 z90Me687*d&I3PxNx0}iAhl;wl)s>Y4P&O!Id+J9Tl=RBFX%L=6;p;Qs%FL@Emqu`C zYb=G#YhgvF>(+u;gFzb*$W{*w0j}FYfyt*C^UPzfeaardqQ0{9r3rQ{eI8J+w7`eu zbZ3IVzzSB54^ZCaUqjMH#j~5Qv0%*(JDWr4U$Bms)zx|WAdXdS0rkS^bf5q>KZ!|G7CVV8EbM|qdSq+~jPW^^V~Q<*TEDp3C1C5_YaN#i&tYqAPvl@; zCNef}2)J{@6&VUIE@|}q9!9OvRaijd{vNfK42-e^>S&^UwF24Tid_gnUFXk(pDR>4C&vpeiq!j4!JtwwSG#5 zP*mR_W?>ugKL7v#|Njh^XFL^b7>842Hc+V~4N9RBsT6lKjFM19iU_?#$taSQm1Ja= z70TXw-<)F{2glimWF!D8_d@Oc?tR^_mY{yBgM7+u1{&o*+*6+V51P!@`-)_J0)nr++54q1ASSvs z_qF~9&H0Di&QIw>OG$d>xbseQm zZ{1x38-d(Z^GL0CJ9OCG&FJckg^u~%vk`BypwruWgzL^N=={-jKYy(?bX{IZUe%uk zU2jvOt-0vXHF9TBZjUrjg!h~XRg(gWY+NEw*Djza#)s<+><7v|!ET%SXrKrV`mcK4 z16}Xe+{m3-4_z-`6@IZ6gswC3u8Qx=p|gLtxyyrU=(Mt;U&;=F4$kww$uutLIQ~Ie ziz^4nAz6J=P1?{-J`wIYH4UV{^P*uzqCgV6tP?^Qhc@YkU%!I|p;fBhg<~57EgRm4 z5afJ;_`6i_YfcFe$R8r_R60P@3y~dF+ZfPz;ZIk2<4UOio0!*c5(TyDrB0WX6`;zk zhjp~3FLw878KCZ36yed37}PlF^DhMg77t@Fl` ziH#8g-ey?A{mS;u24k$=P#P~cAc%FFZOf||I}z6qvJNhlVB@U)!$6x!Bv=kUxV}{x zi3Gj1H|8y{WfN`h*QrKqHTQEX5|Y8Tgut~HmQhF|^UU6Q6p8Hqe!0DmJ(&yXjMOjxG(E(|k+#O+*yBYC(xg;fYeWW-cF2&-d`&}|LSkKJ zf*R6f1e2dkmm*E{Rr&$GDy06>8TS*2L@HUzzgT-CQe%{Tgnr*Z>Xq1mE1UKsRnRgz z!2b|-J3Lx(B3cqDg>Q;m2dl8F|LsYQwx8JfXL6Cb?KE~Q&ib}1Od$E^73G^_PqCd9 zC;wsbD3UTPN$ax?VVjMuiEeW?wr(;f*=zM+bESxs7m0{OZN0-I_z|1BzR#3p^JC-L z!Tl53Dp-Gu|EYL@H`eSaDKpsi4l7udd+TxqvDA6@_Nkn4EaF=49sQ9HvsaxLH*rzM z)TzC)qn8k4!i-d{uP>oz?3Z)9#5TcWeaF0n-eibj7v8tEde*SwJidi2P6?`#avTXyJDs1JcYZdx@x{|^{kPInDN&495+ z+t0S51{gx!Un;0xKwp|ovo+}l`WP`c_qGhsn-rx#C4K{X_?3%c4=w^-AN~5J&aRwV~}>t1L-e9a?X$kk?tW1kHs1)MvT- zfVh!cMpiKqnoI_)O*5SUr6kqP7hH$h$4Hdxu3Dtjie6l*gVRvx%Ji0ICo-mMviO^F>hjRn+@c;EE< zu%i{WoHP;q&D)Btv!UXaYYreOt7+=?y(%PYQA08~ve?lR`_Jh|6m}Uc?p;@8g%rZ9 z&nZ(rq^==OHc!bRweTH(|8yVHG<7~ly-`6LBYWMG{>@0g944r5c^T>LuWIPl_mOe< zLF}8FXk>&je|~rUj*J0&4Y|nY$lNi1`nAPdWEx#O6*r`aOfO}n#hd$(8UOt6#h7o% ze0$uypq7fvH`1o!mZivy(OMm-vIUtBUlZwCw#dAAOeJBZDl#|iu&5l^jtr`c+kK^U zWIVq5&(?<*8QbQwH<>IVy)a69^A{haA2H7t?LCRKf^0u)(OpOrC&;Fq{({uUt0L!q zx?uO)ln?UGwMaR!TWPaa0Cv{8-rEJE*s(W6P?Su@b|0(NYQ0j}*0x@EL;nVBSt#TW zDjCP-UAL!_8-tK=+}XY8%LF!_Ubnw?{d27IU2{9Fq8O`e%rq^i_E>hTdF78I8d&&y zOF;@l9WyO9zkTR@7L)9rlWMNoVbIsnWRk;0a657R8;=7G;5!)(6JtYxDu5WK^$-TR{_hX=>fg0wDG}1orZ# zKufpl*FEW3&{kRP7dN^R+9QUREQgAr!z9@zci&3rTAx4Tu%`sLqaSfj~bttS&RH3v`BKUs#tFFmBpS^vfOu#_*kpnfwf38i_&ir9WYB| zOr$Tp1*Z0cF`0Kkz@SI2FztH`4BdLoQQ7N2uf256RXz#m;+d+k!GS=#D>Efv`x&Se zXRn@6w1e*9i7y{@!-1mV`fkGHA#{dyNg%!L=RG z{5^Q^yuTw5hC11!A09(v(>&Gv=uW7Y7gnpb5{4=qTw$05SD3@2#)OH5q&f`BUPpiEqlC#X4=K?%xMNn9!Ghd^4i?Sdz4)y` z9n0gHjM`j%tl77T_t4isY{;4!xSy_yO(Cy!c`uwmV!189-fb$jFw~byMisDaIB#o8 z;3I4w-siX@#S}ZJTDr%JWw9$a?dqc27VN&?ADohwgVYyB(TtCGkY+w^&pfma={v*A zFDem{&aVFY7K@PK^Wc_;L zDXj{~J{w-79H)Zpz+YPo1g;>v%7a@_vJBb1Gm{l!eaQZznd#TO0ojwLJ~5IV$nKXm zoc}I>?E0J}d*{>0e*V`xb1V$#Aac>%HxwZv~nqNHiM&4o* zudhRF?rN-eIj&;0n}St@#)Ql}pRn}b_n$n}IV>=^-UCEcp>EOKWCl>X`{(I?ZT5GujXc|e8mbVRVxZnC-Os;D0&47ib7ovYxsa2 zFEqBO)DB4h1ENT*$Pqa`Xff!3vl5li=C80XCmf;utxTk}@^U|yNu1k0u@AZmgG{$y zpM>t1NiEf^6+kVS7O?2`1X}ni1&=5;&~H3#JWAC8#*VQPPrE8$umTMwAF2ZL(LkYI zvDz}9_f|>oz5}d;7D>K-C17uGZh5V^AJ~s2xTc(+0-NRFYJG_tI1&;`sWV4_WB5b( zRk1v9+-oa%_euaK%=k0o8Vxv+Md>aU%jc82sD)KGfpg1St~;9tI7)muUoCF{`-huI z@zGnrPWirDv^E~tCyT&xgCVd;zxCW2xPf(6B-S@znd4#$9~ZrTV6N4)QLq^ShM9_1 z$`%u#Csg`%IFAFZOUqfGGz--4z7i__=0N3JYK(Ty28v7%d#h;%bjp0^%04s+WYId$ z6VCO}HqmIcuVOc}6h>O;zi|Pg6+K|%07O8$zj;w;;#b-d_o)o(HAV>1jP(e^0>vIYeZ(m1{jdf{vZiJT3y07=Nv@@8F5Ym|J+DA!kr#V25>nihr&*9>>ZD;~yDE^swaG;b_O{@-lAXVgNBp&gO7$>C$hsX+r)O*t$K48z z=>>kDNN1M$98eMUIt4Ax23~&mS3?_7zDxdc50F0iFAX0}kX^0Y&wU#?8D` zpl*v$z2uq+v^75pKF!|++7E%9yWeC2owU<&xAz8Mgoh~#znlc7X0h3p&Dp^G_9v5c z&;eLM?{+#k`~&vdffu}wt%2TklC-c*v zD;74uA!IR=CWnDTE|1gteFZp;+zWfB`GAv__>yPD7&!MM1|Pm40Ot^oC|mmvu=`|> z>Hahaw#(^Bne&%`HJ=O`lrUg9#kmhSF8_!9s%JDM6qvF*)z}UEz_?q~`&6nO=x^TF z3q8~UTE`jZiTYxoevAs(o|6UL{aizbygi_+H%aZ*89C@^h)m-Sy9VvgL%vVvYC@Zq z=D{E(1~gB{Y+fa^9tgn(mF{_2&?sy_72W0uwc^D+Hrp1UeChZxHO^@$q6Ka~xpq5b z%6soJSR)57FWih6(EJYf@~U$-E?YO^PePa=j}xZzJo22RUBrB^pBf3$x3TowP~L#* zH>_UQ^w~&f*`Hhg=4Bl5$ELulRexh0koY}HP~6r6TQ7)Z919#qQnXobS^N@`Nx{6N zcXaF=qqwIGk09l%+k0cx<^Aa3a8;l60BJ_0tZx)Rx&qZd_pmL}7uQ=~QTv6Anoj4P z!tuzowNo(3VIXUj*+KCLX=H`%@=0pDh-}{T^2ys$k?nXt`uQnoWD`#lcBtM)4$s57 z-x58@QF_-RAlZT(eT~4fE-&Pm#;fyPCnM()W6)e85IKtfc>YPvA%|O5xcGD%vYP?~ z>={bPzM~%8`PUuU+! zH>Xw9V5=HAB-pxsr|?pv#eX89yX|J^?5C zbPod~E|{IKc)&mpGJa!7r0_)f}(O%bVV7;~x9_d*LtQq^@npL5|K3aW- z?_LD3ZMX0WHXZ}^lUsP|Z!oY!1GBaI?Sbv*ZcB+;=G9tD=t}vrSC6a}9z2N4z57So z;?^x-B|_B(*Ui9EQnald_6BCn0hx)}abO-u(2VL%0!HM_VeU*FppUeOq~z@d`rb6N z#2jm&T|0b1L0BKCK6_0ASjo_R!1sLLOJ3;Gc#%}<`w%+R4o2^OMu7I+TlGWqW}x+_ zOo5m^6`G4Q(*6oB0>RAUEl;Ec;7`$^8u}vCioOjk9{33r+soCu|LcL`&Czcvqk|wz zP^)9LL^32~tAl*yG^e@l`^Y01yLs;Al)AYi)img^kz_2=cE7wj71fNies$Z49c@St94zpO z%tVIda2$V$`GqMR50Me{+oI(DG}0H)(Zgd3=@w&m#Sv@B6h4WIeTtnQIT{W#EbLez>D_5c#CD!D=Ltn;uytmW`HfUXY^J$Cm~b^kLZans zi}>rx-JGCMHFb1br7o0RpG@dp?x^oQh?Q)-w%9M-)d9f_ef7%&3 zD^h(7lZZeu+`|g~cp19stfATwGEiU1ds0R{fOZ0mTR(*Yty9!hC_4=37i9nJwSBj| z&$gz2PwEB6W?!Au+IzsbC9?ISKqxSh!Y4D@TY%9_d1zJn6&SrG-of;0V7ylt`Q1AN zj84OHtNqu3k#k5grc@pnuG3~ugi3*NkP>9LZXD=68?BvRtpobq9oxqojsb1P?fC?9s|h^WLtm(flMJ{KA2DEc1ppF|_H|CC=U z*KPpP_8|LsyN?2YLHt8AUMapk~ulgI(Z*A!u3;YAoCfrLIAHTv4>nMw>n+-9-ORMVW>^4lj zS-D5-OflxzkIL-d_#BIKBF)NQ@?(X-liVXh6W|0j~3GZW4RxFLCuurB&u$BuNSH07!gcJVY4*N7le zbYicbGqA^Qr$g_5SwBYV$+N;2^PeEKu;0c#sR(Hz|6&H5laXevKgT2zkd_hWlxh1L zY3zjP9%44qW=@WOS?*5yO1po4J9Z*%agSrcV*#Xn_8E8d%tTsK()#nU%lAAjxN=nb z5z{J^ukK)qI|yg=Q9^}2A)#! zvi*Y{yQSq##h+t)rof5YwzrWa>Y-5~@CjS(HrXCF9K`0lXnPp*MZ){KpY2`J*tqat zb^Ol+Y!K%)bY?eTjTG0{?B}UiA=auwV|!!q+<(=*#Wk4wdPmB`UD=p^oT_Mclz}nP z(d!p33P>A2My6&%srjT^YLzKe zo~}4D@l+9N1z!#R;EoFrK2FfhbvVJVR|Y7-V_82LP0;n@_#T%RHqfQ|>1*n)N$9*op|1Lw0v+CC zDT=cDf&B2yCdS-;XgA)JovVBZND`TfTp7Eewae&vqs%O{*d~fJt5pDTihBj0ra2HS z<;jL$4=wLm^0iZ8deCr0$zyaNA8ML8PK#X6p;AqO_~%_7l)e>IuI({^!a287A3W_K zD@H5UNM;kH?z)+1*!fhLv9AD=2~WL&r1n)77xiO8Q@# zpb$0@yrqYv8j&bOrH_9L#O70dX^uN*u;sdYXt5#_TW_Wa&Kw=YwhLx^F06Tlq;36I zEBca;o0}o|g2?Lp55h=}6svj^n1|$Q>zuJ_HjkzB@Y6y&Up%tXm?;!}8ssF}ylS7R$9iB)+k3a8@??RH0 zvo4yf#WwZTKY4j2u=U2tkW5lCwpbtjay%{+n~fz~k6o5p=KrE{E>9p5xFnACt1n2TXUD>uxNKkb*CF2 z<_Kw?*l5Ft=>)pgfB9AT>SLhOmIKBZ>JuJ1cHknKCf}Jhn&^Un^gx>GwXF~*E%Kb_ zj0B{n8t(W{V9oh0?K6e6z}*`2Nm_fFHWRwgKEV% zGOFc6Z4gs4gd+s?m7m{VKBNQKlwT<^914xJn2WLsU!f`gf=l><9}t`m=Mgn`0C875 z>FORiAl6J270wSr^NGTV3Pn|De)DWL{J;=2�xmt6vE%^65(k0cFslTNYbx(FrYA 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

74s2 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%0D5MfmvJ#~v6oYcfReKonAgT+YjqHz>n76xw{ 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 mGe)*8Y*JXZ?=M&`VW>5VR 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 z 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 z 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 z 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

q`+46*TOV0q*tRR^g;+c5+w1s| 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Ξ>-4!muxsT?4P!Fv*GR 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

xmgj&lo-fh>B!p~^`f=%t+W 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≶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

OQHO`jDXZtz4SY-D+qUCHM<$ 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 z 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

4GeMPn= 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

=tQ_DAWBc!T47ECyAu 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 mUzUdq0KCv2v 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%0AR8!v|tjQPOE&{m(xTl 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�)>1I>ZpmcO?ZXf5wg9VKd$goTC!lr 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,zuTth6ebk}p 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%0DQSfmBys9Q5~)cf1J>rIJu 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 literal 0 HcmV?d00001 diff --git a/matlab/old2/plot_neighbourhood.m b/matlab/old2/plot_neighbourhood.m new file mode 100644 index 0000000..e383179 --- /dev/null +++ b/matlab/old2/plot_neighbourhood.m @@ -0,0 +1,97 @@ +function img = plot_neighbourhood(image_filename, mid_pos, figure_start, plot_limits) + + load('/data/home/tclose/Code/Tractography/matlab_scripts/grad_scheme'); + load('/data/home/tclose/Code/Tractography/matlab_scripts/p_scheme'); + + if (~exist('image_filename')) + image_filename = '~/Data/Set_of_fifty/chunked_separate_images/001-11-11-11.mif'; + end + + if (~exist('mid_pos')) + mid_pos = [1 1 1]; + end + + if (~exist('figure_start')) + figure_start = 0; + else + figure_start = figure_start - 1; + end + + if (~exist('plot_limits')) + dynamically_set_plot_limits = 1; + else + dynamically_set_plot_limits = 0; + end + + + img_struct = read_image(image_filename); + + + + if (~isfield(img_struct, 'data')) + error(['Could not read image from file ' image_filename]); + else + + img = img_struct.data; + img = img(mid_pos(1):(mid_pos(1)+2), mid_pos(2):(mid_pos(2)+2), mid_pos(3):(mid_pos(3)+2), :); + + size_of_image = size(img); + if (size_of_image(1:3) ~= [3 3 3]) + error('plot_neighbourhood currently only plots 3x3 neighbourhoods of voxels'); + end + + if (dynamically_set_plot_limits) + plot_limits = max(max(max(max(abs(img))))); + end + + if plot_limits == 0 + error('Neighbourhood contains no signal'); + end + + for (z = 1:3) + + next_fig = z+figure_start; + if (ishandle(next_fig)) + + close(next_fig); + end + + fig = figure(next_fig); + + set(fig,'Units','normalized') + + set(fig, 'Position', [0.05 + ((z-1) * 0.3), (0.55 * mod(figure_start+1,2) + 0.05) 0.3 0.375]); + set(fig, 'DoubleBuffer', 'on'); + set(fig, 'Name', 'Amplitude plot'); + + cameratoolbar('Show'); + cameratoolbar('SetMode','orbit'); + + set(fig, 'Color', [1 1 1]) + + for (y = 1:3) + + for (x = 1:3) + + + ax = subplot(3,3, (y-1)*3 + x); + +% title(['z=' num2str(z) ', y=' num2str(y) ', x=' num2str(x)]); + + set(ax, 'Xlim', [-plot_limits plot_limits]); + set(ax, 'Ylim', [-plot_limits plot_limits]); + set(ax, 'Zlim', [-plot_limits plot_limits]); + + voxel_signal = squeeze(img(x,y,z,:)); + sh = amp2SH(voxel_signal, grad_scheme); + + plot_SH(sh, p_scheme, ax); + + daspect([1,1,1]); + end + end + end + end +end + + diff --git a/matlab/old2/plot_strand_samples.m b/matlab/old2/plot_strand_samples.m new file mode 100644 index 0000000..c1429bb --- /dev/null +++ b/matlab/old2/plot_strand_samples.m @@ -0,0 +1,258 @@ +function [samples, colours_of_strands] = plot_strand_samples(varargin) +% +% PURPOSE: Plots strands from strand files, and optionally displays reference sphere and voxels +% +% ARGUMENTS: +% +% filename The filename of the strands in either .tck or .frr formats. +% +% OPTIONS (name, description, type, default): +% +% -transparency +% transparency of the plotted samples +% float +% 0.75 +% +% -include +% The indices of the strands to include in the plot +% matrix_1x: +% +% -sample_include +% The indices of the samples to include in the plot +% matrix_1x: +% +% -colours_of_strands +% Colours of the plotted strands +% matrix_:x3 +% +% -voxel_size +% Size of reference voxel +% float +% 0.15 +% +% -num_voxels +% Number of reference voxels +% int +% 3 +% +% -cube_size +% Size of reference voxel +% float +% 0 +% +% -num_segments +% Number of segments to plot for each strand. +% int +% 100 +% +% -tube_radius +% Radius of tubes to plot for each strand. +% float +% 0 +% + + global colours_of_strands; + +% The following code sets the input arguments and options as specified by the 'arguments' and 'options' cell arrays. + + description = 'Plots strands from sample files, and optionally displays reference sphere and voxels'; + + arguments = {'filename', 'The filename of the strand samples (''.smp'' format).'}; + + options = {... + 'transparency ', 0.75, 'float', 'transparency of the plotted samples';... + 'include ', [], 'matrix_1x:', 'The indices of the strands to include in the plot';... + 'sample_include ', [], 'matrix_1x:', 'The indices of the samples to include in the plot';... + 'colours_of_strands', colours_of_strands, 'matrix_:x3', 'Colours of the plotted strands';... + 'voxel_size ', 0.15, 'float', 'Size of reference voxel';... + 'num_voxels ', 3, 'int', 'Number of reference voxels';... + 'cube_size ', 0, 'float', 'Size of reference voxel';... + 'num_segments ', 100, 'int', 'Number of segments to plot for each strand.';... + 'tube_radius ', 0, 'float', 'Radius of tubes to plot for each strand.';... + ...%'sphere_radius ', 0.389711, 'float', 'Size of reference sphere'... + }; + + + parse_arguments + if (help_display) + return; + end + +% End arguments % + + + + dots_i = findstr(filename,'.'); + ext = filename(dots_i(end):end); + + if ~strcmp(ext, '.smp') + error(['Input file must be a samples file (extension ''.smp''), found file with extension ' ext '.']); + end + + [samples, ext_prop_keys, ext_prop_values, initial_set, true_set, sphere_radius] = load_strand_samples(filename); + + num_strands = size(initial_set,1); + num_samples = size(samples,1) - 1; + + if any(find(sample_include > num_samples)) + error('Selected sample indices exceed number of loaded samples'); + end + + if isempty(sample_include) + sample_include = 1:num_samples; + end + + + bundle_indices_index = find(strcmp(ext_prop_keys, 'bundle_index')); + + cdata = cell(num_samples, num_strands); + + + if ~isempty(bundle_indices_index) + +% bundle_indices_strings = ext_prop_values{bundle_indices_index}; +% +% bundle_indices = []; +% +% for sample_i = 1:size(bundle_indices_strings,1) +% bundle_indices = [bundle_indices; regexp(bundle_indices_strings,'|','split')]; %#ok +% end + + bundle_indices = ext_prop_values; + + max_bundle_index = max(max(bundle_indices))+1; + + if size(colours_of_strands,1) < max_bundle_index %#ok + colours_of_strands = rand([max_bundle_index, 3]); %#ok + display_colour_key(colours_of_strands, 0:1:(max_bundle_index-1)); %#ok + end + + for sample_i = 1:num_samples + + for strand_i = 1:num_strands + + colour_data = repmat(shiftdim(colours_of_strands(bundle_indices(sample_i, strand_i)+1,:),-1), [num_segments 1 1]); %#ok + cdata{sample_i, strand_i} = [colour_data colour_data]; + + end + + end + + else + + if size(colours_of_strands,1) < num_strands %#ok + colours_of_strands = rand([num_strands, 3]); %#ok + display_colour_key(colours_of_strands, 0:1:(num_strands-1)); %#ok + end + for sample_i = 1:num_samples + for strand_i = 1:num_strands + + colour_data = repmat(shiftdim(colours_of_strands(strand_i,:),-1), [num_segments 1 1]); %#ok + cdata{sample_i, strand_i} = [colour_data colour_data]; + + end + end + + end + + alpha_data = ones(num_segments,2) * transparency; + + main_fig = figure(); + + set(main_fig,'Units','normalized') + + set(main_fig, 'Position', [0.3 0.25 0.4 0.5]); + set(main_fig, 'DoubleBuffer', 'on'); + set(main_fig, 'Name', strrep(filename, '_', ' ')); + + cameratoolbar('Show'); + cameratoolbar('SetMode','orbit'); + campos([0 0 1]); + camup([0 1 0]); + + clf; + + whitebg(main_fig,'black'); + hold on; + + + fprintf('\n'); + disp(['Plotting ' num2str(size(sample_include,2)) ' samples.']); + + for sample_i = sample_include + + sample = samples{sample_i,1}; + +% if tube_radius > 0 +% +% display_strands(sample, colours_of_strands, include, 'strand', '3D'); +% +% else + + for strand_i = 1:num_strands + + tck = fourier2tck(sample{strand_i,1}); + + h = surface(... + 'XData', [tck(:,1) tck(:,1)],... + 'YData', [tck(:,2) tck(:,2)],... + 'ZData', [tck(:,3) tck(:,3)],... + 'CData', cdata{sample_i, strand_i},... + 'AlphaData', alpha_data,... + 'FaceColor', 'none',... + 'EdgeColor', 'flat',... + 'Marker', 'none', ... + 'LineStyle', '-', ... + 'LineWidth', 1); + view(3) + daspect ([ 1 1 1 ]); + end + + if ~mod(sample_i,25) + fprintf('.'); + end + +% end + + + + + end + + hold off; + + %set(gca, 'color', [0 0 0]); + set(gcf, 'color', [0 0 0]); + + label_handle = get(gca,'xlabel'); + set(label_handle, 'string', 'X-axis', 'color', [1 1 1]); + + label_handle = get(gca,'ylabel'); + set(label_handle, 'string', 'Y-axis', 'color', [1 1 1]); + + label_handle = get(gca,'zlabel'); + set(label_handle, 'string', 'Z-axis', 'color', [1 1 1]); + + h = get (gca, 'children'); + daspect ([ 1 1 1 ]); + + light + lighting gouraud; + + +% figure(main_fig); + + + +% if sphere_radius ~= 0 +% display_reference_sphere(sphere_radius, 0.1); +% end + + if voxel_size ~= 0 + plot_vox_lines(voxel_size,num_voxels); + end + + + samples = samples(sample_include); + +end \ No newline at end of file diff --git a/matlab/old2/plot_vox_lines.m b/matlab/old2/plot_vox_lines.m new file mode 100644 index 0000000..9832843 --- /dev/null +++ b/matlab/old2/plot_vox_lines.m @@ -0,0 +1,38 @@ +function plot_vox_lines(vox_size, num_voxels) +% function plot_vox_lines(vox_size) + + label_contrast = 0.8; + + half_vox_size = vox_size/2; + + hold on; + + start_edge = -half_vox_size*num_voxels; + end_edge = half_vox_size*num_voxels; + + base_colour = [.75,.75,.75]; + + for row_pos = start_edge:vox_size:end_edge + for col_pos = start_edge:vox_size:end_edge + + line_mat = [row_pos, col_pos, start_edge; row_pos, col_pos, end_edge]; + + for dim_i = 0:2 + + colour = base_colour; + if (row_pos == start_edge) && (col_pos == start_edge) + colour = [0.5,0.5,0.5]; + colour(dim_i+1) = label_contrast; + end + + plot3(line_mat(:,mod(0+dim_i,3)+1),line_mat(:,mod(1+dim_i,3)+1),line_mat(:,mod(2+dim_i,3)+1), 'Color', colour); + + + end + + end + end + + hold off; + +end \ No newline at end of file diff --git a/matlab/old2/plot_voxel_signal.m b/matlab/old2/plot_voxel_signal.m new file mode 100644 index 0000000..bfd3182 --- /dev/null +++ b/matlab/old2/plot_voxel_signal.m @@ -0,0 +1,17 @@ +function voxel_signal = plot_voxel_signal(image_filename, x, y, z) + + load('/data/home/tclose/Code/Tractography/matlab_scripts/grad_scheme'); + load('/data/home/tclose/Code/Tractography/matlab_scripts/p_scheme'); + + + img_struct = read_image(image_filename); + img = img_struct.data; + + voxel_signal = squeeze(img(x,y,z,:)); + sh = amp2SH(voxel_signal, grad_scheme); + + plot_SH(sh, p_scheme); + + daspect([1,1,1]); + +end diff --git a/matlab/old2/rand_f_descript.m b/matlab/old2/rand_f_descript.m new file mode 100644 index 0000000..36450c7 --- /dev/null +++ b/matlab/old2/rand_f_descript.m @@ -0,0 +1,106 @@ +function coeffs = rand_f_descript(num_samples, iterations, scalars, varargin) +%rand_f_descript(num_samples, iterations, scalars, [normalise], [plot_type]) +% +% +% rand_f_descript generates multiple plots of fourier descriptors in +% succession to give a feel for the types of curves that can be produced. +% +% The function will randomly generate a number (specified by the input +% 'iterations') of different curves and plot them in sucession (press any +% key to iterate to next plot). +% +% Coefficients are initially generated between 0 and 1 and are scaled via +% the 'scalars' input vector. Each dimension is scaled identically. If +% the optional argument normalise is set to 1 then the second degree +% coefficients (the linear length) are normalised before they are scaled. +% +% num_samples - number of samples to plot along each curve +% iterations - number of random generations +% scalars - scalars of the relative coefficient degrees +% normalise - if set to one, the coefficients are normalised +% across each degree before they are scaled. +% plot_type - passed directly to the plot function. Use 'x' to +% see placement of samples. + + +if (nargin >=4) + normalise = varargin{1}; +else + normalise = 1; +end + +if (nargin == 5) + plot_type = varargin{2}; +else + plot_type = '-'; +end + +if (size(scalars,1) < size(scalars,2)) + scalars = scalars'; +end + +degree = size(scalars,1); + +coeffs = []; + +for (i =1:iterations) + c = 2*(rand(degree, 3) - 0.5); + + length = sqrt(sum(c(2,:) * c(2,:)')); + + if (normalise) + for (d = 1:degree) + row_length = sqrt(sum(c(d,:) * c(d,:)')); + c(d,:) = c(d,:) ./row_length; + end + else + c(2,:) = c(2,:) ./ length; + end + + c = [c(:,1) .* scalars, c(:,2) .* scalars, c(:,3) .* scalars]; + i + + sfigure(1); + f_descript(num_samples, c, plot_type); +% title('Strand path'); +% +% if (degree == 4) +% figure(2); +% plotv(c); +% title('Coefficient vectors'); +% end + + + low_lim = c(1,:)' - 1.5 * scalars(2); + up_lim = c(1,:)' + 1.5 * scalars(2); + + xlim([low_lim(1) up_lim(1)]); + ylim([low_lim(2) up_lim(2)]); + zlim([low_lim(3) up_lim(3)]); + + coeffs = cat(3, coeffs,c); + + pause; + +end + + + +function h = sfigure(h) +% SFIGURE Create figure window (minus annoying focus-theft). +% +% Usage is identical to figure. +% +% Daniel Eaton, 2005 +% +% See also figure + +if nargin>=1 + if ishandle(h) + set(0, 'CurrentFigure', h); + else + h = figure(h); + end +else + h = figure; +end diff --git a/matlab/parse_properties_row.m b/matlab/parse_properties_row.m new file mode 100644 index 0000000..8ff056a --- /dev/null +++ b/matlab/parse_properties_row.m @@ -0,0 +1,15 @@ +function values = parse_properties_row(line) + + line = deblank(line); + + if isempty(line) + error('No keys found in extended properties file.'); + + elseif isempty(regexp(line,'\t', 'once')) + values{1} = line; + + else + values = regexp(line,'\t','split'); + end + +end \ No newline at end of file diff --git a/matlab/parse_strand_sections.m b/matlab/parse_strand_sections.m new file mode 100644 index 0000000..b04499f --- /dev/null +++ b/matlab/parse_strand_sections.m @@ -0,0 +1,5 @@ +function sections = parse_strand_sections(elems) + + sections = split_at_file_seperator(elems, [-inf,nan,nan]); + +end \ No newline at end of file diff --git a/matlab/parse_strands.m b/matlab/parse_strands.m new file mode 100644 index 0000000..242f1a1 --- /dev/null +++ b/matlab/parse_strands.m @@ -0,0 +1,5 @@ +function strands = parse_strands(elems) + + strands = split_at_file_seperator(elems, [nan,nan,nan]); + +end \ No newline at end of file diff --git a/matlab/parse_tcks.m b/matlab/parse_tcks.m new file mode 100644 index 0000000..367a828 --- /dev/null +++ b/matlab/parse_tcks.m @@ -0,0 +1,5 @@ +function tcks = parse_tcks(elems) + + tcks = split_at_file_seperator(elems, [nan,nan,nan]); + +end \ No newline at end of file diff --git a/matlab/parse_tract_sections.m b/matlab/parse_tract_sections.m new file mode 100644 index 0000000..f553095 --- /dev/null +++ b/matlab/parse_tract_sections.m @@ -0,0 +1,5 @@ +function sections = parse_tract_sections(elems) + + sections = split_at_file_seperator(elems, [-inf,nan,nan]); + +end \ No newline at end of file diff --git a/matlab/parse_tracts.m b/matlab/parse_tracts.m new file mode 100644 index 0000000..4a3d035 --- /dev/null +++ b/matlab/parse_tracts.m @@ -0,0 +1,26 @@ +function tracts = parse_tracts(elems) + + tract_divs = split_at_file_seperator(elems, [-inf,-inf,-inf]); + + if isempty(tract_divs) + tract_divs = split_at_file_seperator(elems, [-inf, -inf, inf]); % Legacy issue with incorrect seperators. + end + + tracts = cell(0); + + for tract_i = 1:size(tract_divs,1) + + tract_row= split_at_file_seperator(tract_divs{tract_i}, [nan,nan,nan]); + + if size(tract_row,1) ~= 3 + error([num2str(size(tract_row,1)) ' strands were loaded from ' num2str(tract_i) ' instead of 3']); + end + + for ax_i = 1:3 + tracts{tract_i,ax_i} = tract_row{ax_i}; + end + + end + +end + diff --git a/matlab/pf.m b/matlab/pf.m new file mode 100644 index 0000000..83a0fbb --- /dev/null +++ b/matlab/pf.m @@ -0,0 +1,23 @@ +function fig = pf(varargin) + + if nargin == 0 + error('No arguments supplied'); + end + + filename = varargin{1}; + + if file_extension(filename) == 'str' + fig = plot_strands(varargin{:}); + elseif file_extension(filename) == 'sst' + fig = plot_strand_sets(varargin{:}); + elseif file_extension(filename) == 'tct' + fig = plot_tracts(varargin{:}); + elseif file_extension(filename) == 'tst' + fig = plot_tract_sets(varargin{:}); + elseif file_extension(filename) == 'tck' + fig = plot_tcks(varargin{:}); + else + error(['Unrecognised extension, ''' file_extension(filename) '''.']); + end + +end \ No newline at end of file diff --git a/matlab/plot_evolution.m b/matlab/plot_evolution.m new file mode 100644 index 0000000..68a0ade --- /dev/null +++ b/matlab/plot_evolution.m @@ -0,0 +1,240 @@ +function colours_of_evolved_strands = plot_evolution(dir_name, varargin) +% +% +% PURPOSE: Plots samples from an MCMC sampling of multiple strands described by fourier components +% +% ARGUMENTS: +% +% collated_samples_dir The directory that contains the collated samples (output from 'collate samples' program). +% +% OPTIONS (name, description, type, default): +% +% -true_strands_path The path to a .frr file containing the positions of the true strands +% string +% '' +% +% -include_samples The indices of the samples to include +% matrix_:x: +% [] +% +% -include_strands The indices of the strands to include +% matrix_:x: +% [] +% +% -colours_of_evolved_strands Base colours for samples of each strand +% matrix_:x3 +% [0.228801116693986 0.363610266029849 0.983863430198537;0.616023151232531 0.815277162004599 0.0953236751558441;0.51015054259208 0.168093971458644 0.739270506551875;0.350622850963505 0.716324475389521 0.294423983509783] +% +% -start_shade Starting shade of the sample colours +% float +% 0.2 +% +% -end_shade Ending shade of the sample colours +% float +% 0.8 +% +% -line_style Show samples as an evolving line instead of plusses. +% bool +% 0 +% +% -invert_shades Invert shades on plotted colours so that shades approach white. +% bool +% 0 + + global colours_of_evolved_strands; + + + file_paths = list_filenames(dir_name, 'degree_', '.tck'); + + if length(file_paths) == 0 + error(['No files loaded from directory ' dir_name '.']); + end + + strands = load_strands(file_paths{1}); + + % If the number of previously generated strand colours is less than the number of strands, then reset it and generate again. + if (size(strands,1) - 1) > size(colours_of_evolved_strands,1) + colours_of_evolved_strands = []; + end + + + description = 'Plots samples from an MCMC sampling of multiple strands described by fourier components'; + + arguments = {'collated_samples_dir', 'The directory that contains the collated samples (output from ''collate samples'' program).'}; + + options = {... + 'true_strands_path ', [], 'string', 'The path to a .frr file containing the positions of the true strands';... + 'include_samples ', [], 'matrix_:x:', 'The indices of the samples to include';... + 'include_strands ', [], 'matrix_:x:', 'The indices of the strands to include';... + 'colours_of_evolved_strands ', colours_of_evolved_strands, 'matrix_:x3', 'Base colours for samples of each strand';... + 'start_shade ', 0.2, 'float', 'Starting shade of the sample colours';... + 'end_shade ', 1.0, 'float', 'Ending shade of the sample colours';... + 'line_style ', 0, 'bool', 'Show samples as an evolving line instead of plusses.';... + 'invert_shades ', 0, 'bool', 'Invert shades on plotted colours so that shades approach white.'... + }; + + + supplied_options = parse_options(options, varargin); + + for option_i = 1:size(supplied_options,1) + if strcmp(supplied_options{option_i,3}, 'string') + eval([supplied_options{option_i,1} ' = ''' supplied_options{option_i,2} ''';']); + else + + if ~isstr(supplied_options{option_i,2}) + supplied_options{option_i,2} = mat2str(supplied_options{option_i,2}); + end + + eval([supplied_options{option_i,1} ' = ' supplied_options{option_i,2} ';']); + end + end + + + if help_display + display_help_message(description, arguments, options); + return; + end + + + if ~isempty(true_strands_path) + true_strands = load_strands(true_strands_path); + else + true_strands = []; + end + + if line_style + style = '-'; + marker = 'none'; + else + style = 'none'; + marker = '+'; + end + + + shade_range = end_shade - start_shade; + + + + for degree_i = 1:size(file_paths,1) + + strands = load_strands(file_paths{degree_i}); + + title_name = strrep(strands{size(strands,1),1},'_', ' '); + + strands = strands(1:(size(strands,1)-1), :); + + display_colours = 0; + + if isempty(colours_of_evolved_strands) + + display_colours = 1; + + for strand_i = 1:size(strands,1) + colour = rand(1,3); + + if invert_shades + colour = [1 1 1] - colour ./ norm(colour); + else + colour = colour ./ norm(colour); + end + + colours_of_evolved_strands = [colours_of_evolved_strands ; colour]; + end + + end + + if (isempty(include_strands)) + include_strands = [1:size(strands,1)]; + end + + + fig = figure(); + + title(title_name); + set(fig,'Units','normalized') + set(fig, 'Position', [(0.05 + (degree_i-1) * 0.3) 0.25 0.3 0.5]); + set(fig, 'DoubleBuffer', 'on'); + set(fig, 'Name', strrep(file_paths{degree_i},'_',' ')); + xlabel('x-axis'); + ylabel('y-axis'); + zlabel('z-axis'); + whitebg(fig,'black'); + set(fig, 'color', [0 0 0]); + + hold on; + + if ~isempty(true_strands) + + x_components = []; + y_components = []; + z_components = []; + + for strand_i = 1:(size(true_strands,1)-1) + + true_strand = true_strands{strand_i,1}; + + x_components = [x_components; true_strand(degree_i, 1)]; + y_components = [y_components; true_strand(degree_i, 2)]; + z_components = [z_components; true_strand(degree_i, 3)]; + end + + plot3(x_components, y_components, z_components, 'o', 'MarkerEdgeColor','white', 'MarkerFaceColor','yellow', 'MarkerSize',8); + + end + + for strand_i = include_strands + + samples = strands{strand_i,1}; + + num_samples = size(samples,1); + + if (isempty(include_samples)) + include_samples = [1:num_samples]'; + + else + include_samples = sort(include_samples(find(include_samples <= num_samples)))'; + end + + num_include_samples = length(include_samples); + + if invert_shades + shades = ones(num_include_samples,1) - [end_shade:-(shade_range / (num_include_samples-1)):start_shade]'; + cdata = ones(num_include_samples, 3) - shades * ([1 1 1] - colours_of_evolved_strands(strand_i,:)); + else + shades = [start_shade:(shade_range / (num_include_samples-1)):end_shade]'; + cdata = shades * (colours_of_evolved_strands(strand_i,:)); + end + + cdata = reshape(cdata, [num_include_samples 1 3]); + + h = surface(... + 'XData',[samples(include_samples,1) samples(include_samples,1)],... + 'YData',[samples(include_samples,2) samples(include_samples,2)],... + 'ZData',[samples(include_samples,3) samples(include_samples,3)],... + 'CData',[cdata cdata],... + 'FaceColor','none',... + 'EdgeColor','flat',... + 'Marker',marker, ... + 'LineStyle',style, ... + 'LineWidth',2); + view(3) + daspect ([ 1 1 1 ]); + end + + hold off; + + + daspect ([ 1 1 1 ]); + + cameratoolbar('Show'); + cameratoolbar('SetMode','orbit'); + + + end + + if display_colours + display_colour_key(colours_of_evolved_strands); + end + + +end diff --git a/matlab/plot_explore_stats.m b/matlab/plot_explore_stats.m new file mode 100644 index 0000000..86a4c90 --- /dev/null +++ b/matlab/plot_explore_stats.m @@ -0,0 +1,71 @@ +function plot_explore_stats(varargin) +% +% PURPOSE: Plots the output statistics of a parameter-space exploration +% +% ARGUMENTS: +% +% dir_name The name of the directory that the samples are stored in. +% +% OPTIONS (name, description, type, default): +% + + description = 'Plots the output statistics of a parameter-space exploration'; + + arguments = {'dir_name', 'The name of the directory that the samples are stored in.'}; + + options = {... + 'chunk_to_plot', 1, 'int', 'Index of the chunk which will be plotted';... +...% 'strand_radius ', 0.02, 'float', 'Radii of the plotted strands';... + }; + + % Call a script called 'parse_arguments' to parse all arguments and + % options and set the desired variables. + + parse_arguments + if (help_display) return; end + + stats_types = {... + 'strong_dist';... + 'strong_px';... + ...%'strong_central_px';... + 'weak_dist';... + 'weak_px';... + ...%'weak_central_px';... + ...%'max_arc_top_dist'... + } + + stats = []; + + for stats_i = 1:length(stats_types) + + loaded_stats = load([dir_name '/' stats_types{stats_i} '.txt']); + + if size(loaded_stats,1) > 10000 + loaded_stats = loaded_stats(1:10000); + end + + stats = [stats reshape(loaded_stats, [size(loaded_stats,1) 1 size(loaded_stats,2)])]; + + end + + reshape_vector = [size(stats,1) * size(stats,3) , 1]; + + f = figure; + set(f, 'Name', 'Strong'); + + scatter(reshape(stats(:,1,:),reshape_vector), reshape(stats(:,2,:), reshape_vector)); + whitebg('black'); + + g = figure; + set(g, 'Name', 'Weak'); + scatter(reshape(stats(:,3,:),reshape_vector), reshape(stats(:,4,:), reshape_vector)); + whitebg('black'); + + + figure; + plot(stats(:,:,chunk_to_plot)); + whitebg('black'); + legend(strrep(stats_types(:), '_', ' ')); +% legend('distance', 'full-strong', 'outside-weak', 'outside-strong','central-voxel', 'b0'); + legend('Location', 'EastOutside'); +end diff --git a/matlab/plot_extend_elem_properties.m b/matlab/plot_extend_elem_properties.m new file mode 100644 index 0000000..7c82dfe --- /dev/null +++ b/matlab/plot_extend_elem_properties.m @@ -0,0 +1,102 @@ +function fig = plot_extend_elem_properties(figure_name, all_prop_keys, all_prop_values, bundle_colours, include, elem_include, fig_index, num_figures, omit_properties) +%Not implemented yet. + + if ~exist('include','var') + include = []; + end + + if ~exist('elem_include','var') + elem_include = []; + end + + if ~exist('fig_index', 'var') + fig_index = 3; + end + + if ~exist('num_figures', 'var') + num_figures = 3; + end + + if ~exist('omit_properties', 'var') + omit_properties = cell(0); + end + + if ~isempty(all_prop_keys) + + if ~isempty(omit_properties) + prop_keys = []; + + for key_i = 1:length(all_prop_keys) + + omit = 0; + + for omit_i = 1:length(omit_properties) + if strfind(omit_properties{omit_i}, all_prop_keys{key_i}) + omit = 1; + break; + end + end + + if ~omit + prop_keys{length(prop_keys)+1} = all_prop_keys{key_i}; %#ok + end + + end + else + prop_keys = all_prop_keys; + end + + if isempty(include) + include = [1:size(all_prop_values,1)]; + end + + + fig = my_figure(figure_name,fig_index,num_figures,[]); + + num_keys = length(prop_keys); + + for key_i = 1:num_keys + + key = prop_keys(key_i); + + all_props = []; + + for set_i = include + + prop_values = all_prop_values{set_i}; + + if ~isempty(elem_include) + prop_values = prop_values(elem_include+1,:); + end + + all_props = [all_props; get_properties(prop_keys, prop_values, key)']; + + end + + if strcmp(key,'tract_volume') + all_props = all_props * (pi / 0.15^2); + sum(all_props) ./ size(all_props,1) + end + + num_strands = size(all_props,2); + + subplot(num_keys,1,key_i); + set(gca, 'NextPlot', 'ReplaceChildren'); + + if isempty(elem_include) + colour_order = 1:num_strands; + else + colour_order = elem_include + 1; + end + + set(gca, 'ColorOrder', bundle_colours(colour_order,:)); + plot(include, all_props); + ylabel(strrep(key,'_',' ')); + + end + + else + disp('No extended, extended properties found'); + fig = []; + end +end diff --git a/matlab/plot_extend_properties.m b/matlab/plot_extend_properties.m new file mode 100644 index 0000000..8724c75 --- /dev/null +++ b/matlab/plot_extend_properties.m @@ -0,0 +1,63 @@ +function fig = plot_extend_elem_properties(figure_name, prop_keys, prop_values, include, fig_index, num_figures) + + + if ~exist('include', 'var') + include = []; + end + + if ~exist('fig_index', 'var') + fig_index = 2; + end + + if ~exist('num_figures', 'var') + num_figures = 3; + end + + + if ~isempty(prop_keys) + num_values = size(prop_values,1); + + if isempty(include) + include = [1:num_values]; + end + + fig = my_figure(figure_name,fig_index,num_figures,[]); + + all_props = []; + + legend_keys = cell(0); + + for key = prop_keys + +% if ~strcmp(key,'elapsed_time') + + props = get_properties(prop_keys, prop_values, key); + props = props(include); + + max_abs_value = max([abs(max(props)) abs(min(props))]); + + if (max_abs_value > 0) + sci_notation = ceil(log10(max_abs_value)); + else + sci_notation = 1; + end + + props = props ./ (10^sci_notation); + + all_props = [all_props, props]; + legend_keys(end+1) = strcat(strrep(key,'_',' '), ' x 10^{', num2str(sci_notation),'}'); + +% end + + end + + set(gca, 'NextPlot', 'ReplaceChildren'); + set(gca, 'LineStyleOrder', {'-',':','--'}); + plot(include-1, all_props); + set(gca, 'ytick', [-1:0.05:1]); + legend(legend_keys); + else + disp('No extended properties found.'); + fig = []; + end +end diff --git a/matlab/plot_extracted_features.m b/matlab/plot_extracted_features.m new file mode 100644 index 0000000..1efc37a --- /dev/null +++ b/matlab/plot_extracted_features.m @@ -0,0 +1,48 @@ +function plot_extracted_features(directory) + +global v0_norm v1_norm v2_norm dot_v1_v2 dot_v0_v1 angle_v1_v2 + +load([ directory '/angle_v1_v2.txt']); + +load([ directory '/dot_v0_v1.txt']); +load([ directory '/dot_v1_v2.txt']); +load([ directory '/v0_norm.txt']); +load([ directory '/v1_norm.txt']); +load([ directory '/v2_norm.txt']); + +figure_start = gcf + 1; + +figure(figure_start+1); +hist(v0_norm,1000) +title('v0 norm'); + +figure(figure_start+2); +hist(v1_norm,1000) +title('v1 norm'); + +figure(figure_start+3); +hist(v2_norm,1000) +title('v2 norm'); + +figure(figure_start+4); +hist(dot_v1_v2,1000) +title('dot v1 v2'); + +figure(figure_start+5); +hist(dot_v0_v1,1000) +title('dot v0 v1'); + +% figure(6); +% hist(angle_v1_v2,1000) +% title('angle v1 v2'); + +figure(figure_start+7); +hist2d(dot_v1_v2, v2_norm,100); +title('dot v1 v2 - v2 norm'); + +figure(figure_start+8); +hist2d(dot_v0_v1, v0_norm,100); +title('dot v0 v1 - v0 norm'); + + +end \ No newline at end of file diff --git a/matlab/plot_features.m b/matlab/plot_features.m new file mode 100644 index 0000000..f73e828 --- /dev/null +++ b/matlab/plot_features.m @@ -0,0 +1,276 @@ +function plot_features(features_dir, varargin) +% +% PURPOSE: Plots histograms of prior distributions collated by extract_features.cpp +% +% ARGUMENTS: +% +% features_directory The directory containing the features text files. +% +% OPTIONS (name, description, type, default): +% +% -all Plots all the features. Overrides all other flags +% bool +% 0 +% +% -v0_norm Plot the norm of the v0 vector +% bool +% 0 +% +% -v1_norm Plot the norm of the v1 vector +% bool +% 0 +% +% -v2_norm Plot the norm of the v2 vector +% bool +% 0 +% +% -dot_v1_v2 Plot the dot product of the v1 and v2 vectors +% bool +% 0 +% +% -angle_v1_v2 Plot the angle between the v1 and v2 vectors +% bool +% 0 +% +% -dot_v0_v1 Plot the dot product of the v0 and v1 vectors +% bool +% 0 + + + + if ~isdir(features_dir) + error(['Argument 1 (''' features_dir ''') is not a directory, it should be a directory containing the features text files.']); + end + + description = 'Plots histograms of prior distributions collated by extract_features.cpp'; + + arguments = {'features_directory', 'The directory containing the features text files.'}; + + options = {... + 'plot_all ', 0, 'bool', 'Plots all the features. Overrides all other flags';... + 'v0_norm ', 0, 'bool', 'Plot the norm of the v0 vector';... + 'v1_norm ', 0, 'bool', 'Plot the norm of the v1 vector';... + 'v2_norm ', 0, 'bool', 'Plot the norm of the v2 vector';... + 'dot_v1_v2 ', 0, 'bool', 'Plot the dot product of the v1 and v2 vectors';... + 'angle_v1_v2 ', 0, 'bool', 'Plot the angle between the v1 and v2 vectors';... + 'dot_v0_v1 ', 0, 'bool', 'Plot the dot product of the v0 and v1 vectors';... + 'd2_v0_v1_dot ', 0, 'bool', 'Plot the dot product of the v0 and v1 vectors against norm of v0 on a d2 histogram';... + 'd2_v1_v2_dot ', 0, 'bool', 'Plot the dot product of the v1 and v2 vectors against norm of v2 on a d2 histogram';... + 'd2_v0_v1_norm', 0, 'bool', 'Plot the v0 and v1 norms against each other in 2d histogram';... + 'd2_v1_v2_norm', 0, 'bool', 'Plot the v1 and v2 norms against each other in 2d histogram';... + 'd2_v0_v2_norm', 0, 'bool', 'Plot the v0 and v2 norms against each other in 2d histogram'... + }; + + supplied_options = parse_options(options, varargin); + + for option_i = 1:size(supplied_options,1) + if strcmp(supplied_options{option_i,3}, 'string') + eval([supplied_options{option_i,1} ' = ''' supplied_options{option_i,2} ''';']); + else + + if ~isstr(supplied_options{option_i,2}) + supplied_options{option_i,2} = mat2str(supplied_options{option_i,2}); + end + + eval([supplied_options{option_i,1} ' = ' supplied_options{option_i,2} ';']); + end + end + + + if help_display + display_help_message(description, arguments, options); + return; + end + +num_options_selected = 0; + +for option_i = 1:size(options,1) + + if eval(options{option_i,1}) + num_options_selected = num_options_selected + 1; + end + + if plot_all + eval([options{option_i} '= 1']); + end + +end + +if ~num_options_selected + error('No options selected, use ''-help'' to display possible options.'); +end + +% if ~plot_all && ~v0_norm && ~v1_norm && ~v2_norm && ~dot_v1_v2 && ~dot_v0_v1 && ~angle_v1_v2 && ~d2_v0_v1_norm && ~d2_v1_v2_norm && ~d2_v0_v2_norm && ~d2_v1_v2_dot && ~d2_v0_v1_dot +% error('No options selected, use ''-help'' to display possible options.'); +% end + +% if plot_all +% v0_norm = 1; +% v1_norm = 1; +% v2_norm = 1; +% dot_v1_v2 = 1; +% angle_v1_v2 = 1; +% dot_v0_v1 = 1; +% d2_v0_v1_dot = 1; +% d2_v1_v2_dot = 1; +% d2_v0_v1_norm = 1; +% d2_v1_v2_norm = 1; +% d2_v0_v2_norm = 1; +% end + +if v0_norm || d2_v0_v1_dot || d2_v0_v2_norm || d2_v0_v1_norm + v0_norm_data = load([ features_dir '/v0_norm.txt']); +end + +if v1_norm || d2_v0_v1_norm || d2_v1_v2_norm + v1_norm_data = load([ features_dir '/v1_norm.txt']); +end + +if v2_norm || d2_v1_v2_dot || d2_v0_v2_norm || d2_v1_v2_norm + v2_norm_data = load([ features_dir '/v2_norm.txt']); +end + +if dot_v1_v2 || d2_v1_v2_dot + dot_v1_v2_data = load([ features_dir '/dot_v1_v2.txt']); +end + +if angle_v1_v2 + angle_v1_v2_data = load([ features_dir '/angle_v1_v2.txt']); +end + +if dot_v0_v1 || d2_v0_v1_dot + dot_v0_v1_data = load([ features_dir '/dot_v0_v1.txt']); +end + + + + + +if v0_norm + f = figure(); + set(f,'Units','normalized'); + set(f, 'Position', [0.3 0.25 0.4 0.5]); + set(f, 'Name', strrep(features_dir,'_',' ')); + + hist(v0_norm_data,100); + title('v0 norm'); + +end + +if v1_norm + f = figure(); + set(f,'Units','normalized'); + set(f, 'Name', strrep(features_dir,'_',' ')); + hist(v1_norm_data,100); + set(f, 'Position', [0.3 0.25 0.4 0.5]); + title('v1 norm'); + +end + +if v2_norm + f = figure(); + set(f,'Units','normalized'); + set(f, 'Name', strrep(features_dir,'_',' ')); + hist(v2_norm_data,100); + set(f, 'Position', [0.3 0.25 0.4 0.5]); + title('v2 norm'); + +end + +if dot_v1_v2 + f = figure(); + set(f,'Units','normalized'); + set(f, 'Name', strrep(features_dir,'_',' ')); + hist(dot_v1_v2_data,100); + set(f, 'Position', [0.3 0.25 0.4 0.5]); + title('dot v1 v2'); + +end + +if angle_v1_v2 + f = figure(); + set(f,'Units','normalized'); + hist(angle_v1_v2_data,100); + set(f, 'Position', [0.3 0.25 0.4 0.5]); + title('angle v1 v2'); + +end + +if dot_v0_v1 + f = figure(); + set(f,'Units','normalized'); + set(f, 'Name', strrep(features_dir,'_',' ')); + hist(dot_v0_v1_data,100); + set(f, 'Position', [0.3 0.25 0.4 0.5]); + title('dot v0 v1'); + +end + +if d2_v0_v1_dot + f = figure(); + set(f,'Units','normalized'); + set(f, 'Name', strrep(features_dir,'_',' ')); + title('dot v0 v1 - v0 norm'); + set(f, 'Position', [0.3 0.25 0.4 0.5]); + hist2d(dot_v0_v1_data, v0_norm_data,100,100); + +% cameratoolbar('Show'); +% cameratoolbar('SetMode','orbit'); + +end + +if d2_v1_v2_dot + f = figure(); + set(f,'Units','normalized'); + + title('dot v1 v2 - v2 norm'); + set(f, 'Position', [0.3 0.25 0.4 0.5]); + set(f, 'Name', strrep(features_dir,'_',' ')); + hist2d(dot_v1_v2_data, v2_norm_data,100,100); + +% cameratoolbar('Show'); +% cameratoolbar('SetMode','orbit'); + +end + +if d2_v0_v2_norm + f = figure(); + set(f,'Units','normalized'); + set(f, 'Name', strrep(features_dir,'_',' ')); + title('v0 norm - v2 norm'); + set(f, 'Position', [0.3 0.25 0.4 0.5]); + hist2d(v0_norm_data, v2_norm_data,100,100); + +% cameratoolbar('Show'); +% cameratoolbar('SetMode','orbit'); + +end + +if d2_v1_v2_norm + f = figure(); + set(f,'Units','normalized'); + + title('v1 norm - v2 norm'); + set(f, 'Position', [0.3 0.25 0.4 0.5]); + set(f, 'Name', strrep(features_dir,'_',' ')); + hist2d(v1_norm_data, v2_norm_data,100,100); + +% cameratoolbar('Show'); +% cameratoolbar('SetMode','orbit'); + +end + +if d2_v0_v1_norm + f = figure(); + set(f,'Units','normalized'); + + title('v0 norm - v2 norm'); + set(f, 'Position', [0.3 0.25 0.4 0.5]); + set(f, 'Name', strrep(features_dir,'_',' ')); + hist2d(v0_norm_data, v1_norm_data,100,100); + +% cameratoolbar('Show'); +% cameratoolbar('SetMode','orbit'); + +end + diff --git a/matlab/plot_fibres.m b/matlab/plot_fibres.m new file mode 100644 index 0000000..d206cf5 --- /dev/null +++ b/matlab/plot_fibres.m @@ -0,0 +1,25 @@ +function fig = plot_fibres(varargin) + + if nargin == 0 + error('No arguments supplied'); + end + + filename = varargin{1}; + + if file_extension(filename) == 'str' + fig = plot_strands(varargin{:}); + elseif file_extension(filename) == 'sst' + fig = plot_strand_sets(varargin{:}); + elseif file_extension(filename) == 'tct' + fig = plot_tracts(varargin{:}); + elseif file_extension(filename) == 'tst' + fig = plot_tract_sets(varargin{:}); + elseif file_extension(filename) == 'tck' + fig = plot_tcks(varargin{:}); + elseif file_extension(filename) == 'kst' + fig = plot_tck_sets(varargin{:}); + else + error(['Unrecognised extension, ''' file_extension(filename) '''.']); + end + +end \ No newline at end of file diff --git a/matlab/plot_fisher_gradient.m b/matlab/plot_fisher_gradient.m new file mode 100644 index 0000000..e5d292d --- /dev/null +++ b/matlab/plot_fisher_gradient.m @@ -0,0 +1,200 @@ +function plot_fisher_gradient(varargin) +% +% PURPOSE: Plots the difference between the analytically calculated gradient and the numerically calculated gradient. +% +% ARGUMENTS: +% +% comparison_files The filename containing the comparison between the analytical and numerical gradients. +% +% OPTIONS (name, description, type, default): +% +% -style +% Style of the plot. +% string +% 'x' +% +% -marker_size +% Size of marker +% int +% 10 +% +% -line_width +% Width of line +% int +% 2 +% +% -param_include +% Parameters to include in the plots. +% matrix_1x: +% +% -test_include +% Tests to include in the plots. +% matrix_1x: + + + description = 'Plots the difference between the analytically calculated gradient and the numerically calculated gradient.'; + + arguments = {'comparison_files', 'The filename containing the comparison between the analytical and numerical gradients.'}; + + options = {... + 'style ', 'x', 'string', 'Style of the plot.';... + 'marker_size ', 10, 'int', 'Size of marker';... + 'line_width ', 2, 'int', 'Width of line';... + 'param_include', [], 'matrix_1x:', 'Parameters to include in the plots.';... + 'coords', [], 'matrix_:x3', 'Selected coordinates to plot.';... + 'indices', [], 'matrix_:x:', 'Selected indices to plot.';... + 'test_include', [], 'matrix_1x:', 'Tests to include in the plots.';... + }; + + + parse_arguments + if (help_display) + return; + end + +% End arguments % + + + extension = file_extension(comparison_files); + base = file_base(comparison_files); + + if ~strcmp(extension, 'tnr') + error(['Files must have ''tnr'' extension for Fisher gradients.']); + end + + base_extension = file_extension(base); + base_base = file_base(base); + + [analytic, labels] = load_tensor([base_base '.analytic.' base_extension '.' extension]); + numeric = load_tensor([base_base '.numeric.' base_extension '.' extension]); + + if any(size(analytic) ~= size(numeric)) + error(['Size of analytic (' mat2str(size(analytic)) ') does not match size of numeric (' mat2str(size(numeric)) ').']); + end + + %Ensure matrices are of the same size. + num_parameters = size(analytic,1); + num_tensors = size(analytic,3); + + if size(analytic,2) ~= num_parameters + error('Matrices not square.'); + end + + if mod(num_tensors, num_parameters) ~= 0 + error(['Number of parameters (' num2str(num_parameters) ') does not divide into number of matrices (' num2str(num_tensors) ').']); + end + + num_tests = num_tensors / num_parameters; + + if ~isempty(coords) + + analytic_block = reshape(analytic, [num_parameters, num_parameters, num_parameters, num_tests]); + numeric_block = reshape(numeric, [num_parameters, num_parameters, num_parameters, num_tests]); + + sum_ana = sum(analytic_block,4); + sum_num = sum(numeric_block,4); + + ana_bin = abs(sum_ana) > 0; + num_bin = abs(sum_num) > 0; + + tog_bin = ana_bin .* num_bin; + just_ana = ana_bin - tog_bin; + just_num = num_bin - tog_bin; + + [t1,t2,t3] = ind2sub([num_parameters,num_parameters,num_parameters],find(tog_bin)); + [a1,a2,a3] = ind2sub([num_parameters,num_parameters,num_parameters],find(just_ana)); + [n1,n2,n3] = ind2sub([num_parameters,num_parameters,num_parameters],find(just_num)); + + tog = [t1,t2,t3] + ana = [a1,a2,a3] + num = [n1,n2,n3] + + num_coords = size(coords,1); + + for coord_i=1:num_coords + + analytic = squeeze(analytic_block(coords(coord_i,1),coords(coord_i,2),coords(coord_i,3),:)); + numeric = squeeze(numeric_block(coords(coord_i,1),coords(coord_i,2),coords(coord_i,3),:)); + + my_figure( [num2str(coords(coord_i)) ' - ' labels{coords(coord_i,1)} '::' labels{coords(coord_i,2)} '::' labels{coords(coord_i,3)} ] ,coord_i,num_coords,[]); + + plot(numeric, analytic, style, 'MarkerSize', marker_size, 'LineWidth',line_width); + + set(get(gca,'xlabel'), 'string', 'numeric', 'color', [1 1 1]); + set(get(gca,'ylabel'), 'string', 'analytic', 'color', [1 1 1]); + + hold on; + + overall_max_value = max(max([numeric,analytic])) * 1.1; + overall_min_value = min(min([numeric,analytic])) * 1.1; + + plot([overall_min_value; overall_max_value], [overall_min_value; overall_max_value], '-', 'color', [0.7412 0.6549 0.9608]); + + hold off; + + end + + elseif ~isempty(indices) + + analytic_block = reshape(analytic, [num_parameters^3, num_tests]); + numeric_block = reshape(numeric, [num_parameters^3, num_tests]); + + num_indices = length(indices); + + for index_i=1:num_indices + + index = indices(index_i); + + analytic = analytic_block(index,:); + numeric = numeric_block(index,:); + + [ax1,ax2,ax3] = ind2sub([num_parameters,num_parameters,num_parameters],index); + + my_figure( [num2str(index) ' - ' labels{ax1} '::' labels{ax2} '::' labels{ax3} ] ,index_i,num_indices,[]); + + plot(numeric, analytic, style, 'MarkerSize', marker_size, 'LineWidth',line_width); + + set(get(gca,'xlabel'), 'string', 'numeric', 'color', [1 1 1]); + set(get(gca,'ylabel'), 'string', 'analytic', 'color', [1 1 1]); + + hold on; + + overall_max_value = max(max([numeric,analytic])) * 1.1; + overall_min_value = min(min([numeric,analytic])) * 1.1; + + plot([overall_min_value; overall_max_value], [overall_min_value; overall_max_value], '-', 'color', [0.7412 0.6549 0.9608]); + + hold off; + + end + + + + else + + analytic = analytic(:); + numeric = numeric(:); + + my_figure('All parameters',1,1,[]); + + plot(numeric, analytic, style, 'MarkerSize', marker_size, 'LineWidth',line_width); + + set(get(gca,'xlabel'), 'string', 'numeric', 'color', [1 1 1]); + set(get(gca,'ylabel'), 'string', 'analytic', 'color', [1 1 1]); + + hold on; + + overall_max_value = max(max([numeric,analytic])) * 1.1; + overall_min_value = min(min([numeric,analytic])) * 1.1; + + plot([overall_min_value; overall_max_value], [overall_min_value; overall_max_value], '-', 'color', [0.7412 0.6549 0.9608]); + + hold off; + + end + + disp('') + disp(['Plotted ' num2str(num_tests) ' tests.']); + disp('') + +end \ No newline at end of file diff --git a/matlab/plot_gradient.m b/matlab/plot_gradient.m new file mode 100644 index 0000000..0d460ce --- /dev/null +++ b/matlab/plot_gradient.m @@ -0,0 +1,163 @@ +function plot_gradient(varargin) +% +% PURPOSE: Plots the difference between the analytically calculated gradient and the numerically calculated gradient. +% +% ARGUMENTS: +% +% comparison_files The filename containing the comparison between the analytical and numerical gradients. +% +% OPTIONS (name, description, type, default): +% +% -style +% Style of the plot. +% string +% 'x' +% +% -marker_size +% Size of marker +% int +% 10 +% +% -line_width +% Width of line +% int +% 2 +% +% -param_include +% Parameters to include in the plots. +% matrix_1x: +% +% -test_include +% Tests to include in the plots. +% matrix_1x: + + + description = 'Plots the difference between the analytically calculated gradient and the numerically calculated gradient.'; + + arguments = {'comparison_files', 'The filename containing the comparison between the analytical and numerical gradients.'}; + + options = {... + 'style ', 'x', 'string', 'Style of the plot.';... + 'marker_size ', 10, 'int', 'Size of marker';... + 'line_width ', 2, 'int', 'Width of line';... + 'param_include', [], 'matrix_1x:', 'Parameters to include in the plots.';... + 'test_include', [], 'matrix_1x:', 'Tests to include in the plots.';... + }; + + + parse_arguments + if (help_display) + return; + end + +% End arguments % + + + extension = file_extension(comparison_files); + base = file_base(comparison_files); + + %Load numeric and analytic gradients in 'unzipped' (flattened into vectors) formats. + if strcmp(extension, 'str') + + [analytic, labels] = load_unzip_strands([base '.analytic.' extension]); + numeric = load_unzip_strands([base '.numeric.' extension]); + + elseif strcmp(extension, 'tct') + + [analytic, labels] = load_unzip_tracts([base '.analytic.tct']); + numeric = load_unzip_tracts([base '.numeric.' extension]); + + elseif strcmp(extension, 'sst') + + [analytic, labels] = load_unzip_strand_sets([base '.analytic.' extension]); + numeric = load_unzip_strand_sets([base '.numeric.' extension]); + + elseif strcmp(extension, 'tst') + + [analytic, labels] = load_unzip_tract_sets([base '.analytic.' extension]); + numeric = load_unzip_tract_sets([base '.numeric.' extension]); + + elseif strcmp(extension, 'ssc') + + [analytic, labels] = load_unzip_strand_sections([base '.analytic.' extension]); + numeric = load_unzip_strand_sections([base '.numeric.' extension]); + + elseif strcmp(extension, 'tsc') + + [analytic, labels] = load_unzip_tract_sections([base '.analytic.' extension]); + numeric = load_unzip_tract_sections([base '.numeric.' extension]); + + elseif strcmp(extension, 'trp') + + [analytic, labels] = load_unzip_triples([base '.analytic.' extension]); + numeric = load_unzip_triples([base '.numeric.' extension]); + + elseif strcmp(extension, 'mif') + + [analytic, labels] = load_unzip_image([base '.analytic.' extension]); + numeric = load_unzip_image([base '.numeric.' extension]); + + elseif strcmp(extension, 'sta') + + [analytic, labels] = load_unzip_mcmc_state([base '.analytic.' extension]); + numeric = load_unzip_mcmc_state([base '.numeric.' extension]); + + else + error(['Unrecognised extension ''' char(extension) '''.']); + end + + + %Ensure matrices are of the same size. + num_parameters = size(analytic,1); + + if num_parameters ~= size(numeric,1); + error (['Number of parameters in numeric matrix (' num2str(size(numeric,1)) ') does not match number in analytic matrix (' num2str(num_parameters) ').']); + end + + num_tests = size(analytic,2); + + if num_tests ~= size(numeric,2); + error (['Number of parameters in numeric matrix (' num2str(size(numeric,2)) ') does not match number in analytic matrix (' num2str(num_tests) ').']); + end + + %Set to display to all comparisons if not selection explicitly provided. + if isempty(param_include) + param_include = 1:num_parameters; + end + + if isempty(test_include) + test_include = 1:num_tests; + end + + num_param_include = length(param_include(:)); + + %Plot comparisons. + for param_index_i = 1:num_param_include + + param_index = param_include(param_index_i); + + numeric_param = numeric(param_index, test_include)'; + analytic_param = analytic(param_index, test_include)'; + + my_figure(labels{param_index}, param_index_i, num_param_include); + plot(numeric_param, analytic_param, style, 'MarkerSize', marker_size, 'LineWidth',line_width); + + set(get(gca,'xlabel'), 'string', 'numeric', 'color', [1 1 1]); + set(get(gca,'ylabel'), 'string', 'analytic', 'color', [1 1 1]); + + min_value = min([numeric_param; analytic_param]) * 1.1; + max_value = max([numeric_param; analytic_param]) * 1.1; + + hold on; + + plot([min_value; max_value], [min_value; max_value], '-', 'color', [0.7412 0.6549 0.9608]); + + hold off; + + end + + disp('') + disp(['Plotted ' num2str(num_tests) ' tests.']); + disp('') + +end diff --git a/matlab/plot_hessian.m b/matlab/plot_hessian.m new file mode 100644 index 0000000..b91c0a4 --- /dev/null +++ b/matlab/plot_hessian.m @@ -0,0 +1,148 @@ +function plot_hessian(varargin) +% +% PURPOSE: Plots the difference between the analytically calculated gradient and the numerically calculated gradient. +% +% ARGUMENTS: +% +% comparison_files The filename containing the comparison between the analytical and numerical gradients. +% +% OPTIONS (name, description, type, default): +% +% -style +% Style of the plot. +% string +% 'x' +% +% -marker_size +% Size of marker +% int +% 10 +% +% -line_width +% Width of line +% int +% 2 +% +% -param_include +% Parameters to include in the plots. +% matrix_1x: +% +% -test_include +% Tests to include in the plots. +% matrix_1x: + + + description = 'Plots the difference between the analytically calculated gradient and the numerically calculated gradient.'; + + arguments = {'comparison_files', 'The filename containing the comparison between the analytical and numerical gradients.'}; + + options = {... + 'style ', 'x', 'string', 'Style of the plot.';... + 'marker_size ', 10, 'int', 'Size of marker';... + 'line_width ', 2, 'int', 'Width of line';... + 'index_include', [], 'matrix_1x:', 'Parameter indices to include in the plots (overrides coord_include).';... + 'coord_include', [], 'matrix_:x:', 'Parameter coordinates to include in the plots.';... + 'test_include', [], 'matrix_1x:', 'Tests to include in the plots.';... + 'diagonal', 0, 'bool', 'Only displays diagonal components';... + 'collapse', 0, 'bool', 'Collapse all plots into single one';... + }; + + + parse_arguments + if (help_display) + return; + end + +% End arguments % + + + extension = file_extension(comparison_files); + base = file_base(comparison_files); + + if ~strcmp(extension, 'tnr') + error(['Files must have ''tnr'' extension for tensors.']); + end + + base_extension = file_extension(base); + base_base = file_base(base); + + [analytic, labels] = load_tensor([base_base '.analytic.' base_extension '.' extension]); + numeric = load_tensor([base_base '.numeric.' base_extension '.' extension]); + + if any(size(analytic) ~= size(numeric)) + error(['Size of analytic (' mat2str(size(analytic)) ') does not match size of numeric (' mat2str(size(numeric)) ').']); + end + + %Ensure matrices are of the same size. + num_parameters = size(analytic,1); + num_tests = size(analytic,3); + + if size(analytic,2) ~= num_parameters + error('Matrices not square.'); + end + + %Set to display to all comparisons if not selection explicitly provided. + if diagonal + for param_i = 1:num_parameters + coord_include(param_i,:) = [param_i param_i]; + end + + elseif ~isempty(index_include) + + [row col] = ind2sub([num_parameters, num_parameters], index_include); + + coord_include = [row' col']; + + elseif isempty(coord_include) + param_count = 1; + for row_i = 1:num_parameters + for col_i = 1:num_parameters + coord_include(param_count,:) = [row_i col_i]; + param_count = param_count +1; + end + end + end + + if isempty(test_include) + test_include = 1:num_tests; + end + + num_param_include = size(coord_include,1); + + if collapse + my_figure('All parameters'); + end + + %Plot comparisons. + for param_index_i = 1:num_param_include + + param_index = coord_include(param_index_i,:); + + numeric_param = squeeze(numeric(param_index(1), param_index(2), test_include)); + analytic_param = squeeze(analytic(param_index(1), param_index(2), test_include)); + + if ~collapse + my_figure([labels{param_index(1)}(1:end) ' :: ' labels{param_index(2)}(1:end)], param_index_i, num_param_include); + end + + plot(numeric_param, analytic_param, style, 'MarkerSize', marker_size, 'LineWidth',line_width); + + set(get(gca,'xlabel'), 'string', 'numeric', 'color', [1 1 1]); + set(get(gca,'ylabel'), 'string', 'analytic', 'color', [1 1 1]); + + min_value = min([numeric_param; analytic_param]) * 1.1; + max_value = max([numeric_param; analytic_param]) * 1.1; + + hold on; + + plot([min_value; max_value], [min_value; max_value], '-', 'color', [0.7412 0.6549 0.9608]); + + hold off; + + end + + disp('') + disp(['Plotted ' num2str(num_tests) ' tests.']); + disp('') + +end diff --git a/matlab/plot_image.m b/matlab/plot_image.m new file mode 100644 index 0000000..2dffd71 --- /dev/null +++ b/matlab/plot_image.m @@ -0,0 +1,252 @@ +function fig = plot_image(varargin) +% +% +% PURPOSE: Plots DW-MRI signals from a neighbourhood of voxels on a 3D grid +% +% +% ARGUMENTS: +% +% image_filename The filename of the generated image in .mif format. +% +% +% OPTIONS (name, description, type, default): +% +% -no_neg_values No negative values will be plotted +% bool +% 0 +% +% -corner_offset Offset of the bottom-left-back corner of the neighbourhood +% matrix_1x3 +% minus half the neighbourhood dimension length +% +% -scale_signal Scaling factor will be scaled by +% float +% automatically determined from signal +% +% -colour Colour of the non-negative lobes of the signal +% matrix_1x3 +% [1 1 0] +% +% -transparency Transparency of the lobes +% float +% 1 +% +% -neg_colour Colour of the negative lobes of the signal +% matrix_1x3 +% [1 1 1] +% +% -grad_directions Gradient encoding used. +% string +% '/data/home/tclose/Data/Gradient_directions/encoding_60.b' +% +% -plot_directions The direction encoding used for the plotting. +% string +% '/data/home/tclose/Data/Gradient_directions/encoding_8000.b' +% +% -lmax The lmax of the gradient encodings used. +% natural +% 8 +% +% + + + + description = 'Plots DW-MRI signals from a neighbourhood of voxels on a 3D grid'; + + arguments = {'image_filename', 'The filename of the generated image in .mif format.'}; + + if strfind('-help_display', arguments{1}) == 1 + + auto_offset = 'auto_scale'; + auto_scale = 'auto_offset'; + + help_display = 1; + + else + + image_filename = varargin{1}; + + img_struct = load_image(image_filename); + + if (~isfield(img_struct, 'data')) + error(['Could not read image from file ' image_filename]); + end + + img = img_struct.data; + max_intensity = max(max(max(max(abs(img(:,:,:,2:end)))))); + max_b0 = max(max(max(max(abs(img(:,:,:,1)))))); + + if max_intensity == 0 + error('Neighbourhood contains no signal'); + end + + auto_offset = [(-img_struct.vox(1) * img_struct.dim(1) * 0.5), (-img_struct.vox(2) * img_struct.dim(2) * 0.5), (-img_struct.vox(3) * img_struct.dim(3) * 0.5)]; + auto_scale = min(img_struct.vox) / ( 2.25 * max_intensity); + + + end + + options = {... + 'no_neg_values ', 0, 'bool', 'No negative values will be plotted';... + 'corner_offset ', auto_offset,... + 'matrix_1x3', 'Offset of the bottom-left-back corner of the neighbourhood';... + 'scale_signal ', auto_scale,... + 'float', 'Scaling factor will be scaled by';... + 'colour ', [1 1 0], 'matrix_1x3', 'Colour of the non-negative lobes of the signal';... + 'transparency ', 1.0, 'float', 'Transparency of the lobes';... + 'neg_colour ', [1 1 1], 'matrix_1x3', 'Colour of the negative lobes of the signal';... + 'grad_directions', '/home/tclose/Data/Tractography/diffusion/encoding/encoding_60.b',... + 'string', 'Gradient encoding used.';... + 'plot_directions', '/home/tclose/Data/Tractography/diffusion/encoding/encoding_1000.b',... + 'string', 'The direction encoding used for the plotting.';... + 'lmax ', 8, 'natural', 'The lmax of the gradient encodings used.'};... + + + + parse_arguments + if (help_display) + return; + end + + + grad_directions_mat = load(grad_directions); + plot_directions_mat = load(plot_directions); + + gradient_scheme = gen_scheme(grad_directions_mat(:,1:3), lmax); + plot_scheme = gen_scheme(plot_directions_mat(:,1:3), lmax); + + disp(''); + disp('-------------------------------'); + disp(' Image Properties: '); + disp('-------------------------------'); + if isfield (img_struct, 'num_points') + disp([' Number of points: ' num2str(img_struct.num_points)]); + elseif isfield (img_struct, 'num_segments') + disp([' Number of segments: ' num2str(img_struct.num_segments)]); + end + if isfield (img_struct, 'num_strands') + disp([' Number of strands per tract dimension: ' num2str(img_struct.num_strands) '']); + end + if isfield (img_struct, 'state_location') + disp([' State location: ''' img_struct.state_location '''']); + end + if isfield (img_struct, 'interpolation') + disp([' Interpolation type: ''' img_struct.interpolation '''']); + end + if isfield (img_struct, 'response_coeffs') + disp([' Response coefficients: ' img_struct.response_coeffs]); + end + if isfield (img_struct, 'software_version') + disp([' Software version: ' img_struct.software_version ]); + end + if isfield (img_struct, 'datetime') + disp([' Generated: ' img_struct.datetime ]); + end + disp('-------------------------------'); + + + + fig = my_figure([image_filename ': (Max: ' num2str(max_intensity) ', b=0: ' num2str(max_b0) ')'], 1, 1, [1 1 1], 1); + +% fig = figure(); +% +% set(fig,'Units','normalized') +% set(fig, 'Position', [0.3 0.25 0.4 0.5]); +% set(fig, 'DoubleBuffer', 'on'); +% whitebg(fig, 'black'); +% set(fig, 'color', [0 0 0]); +% daspect ([ 1 1 1 ]); +% +% cameratoolbar('Show'); +% cameratoolbar('SetMode','orbit'); + + set(gca, 'Xlim', [corner_offset(1) corner_offset(1) + img_struct.vox(1) * img_struct.dim(1)]); + set(gca, 'Ylim', [corner_offset(2) corner_offset(2) + img_struct.vox(2) * img_struct.dim(2)]); + set(gca, 'Zlim', [corner_offset(3) corner_offset(3) + img_struct.vox(3) * img_struct.dim(3)]); + + xlabel('x-axis'); + ylabel('y-axis'); + zlabel('z-axis'); + + hold on; + + count = 0; + + + for (z = 1:img_struct.dim(3)) + + for (y = 1:img_struct.dim(2)) + + for (x = 1:img_struct.dim(1)) + + + voxel_signal = squeeze(img(x,y,z,2:end)); + +% plot_amp(voxel_signal,gradient_scheme) + +% voxel_signal = squeeze(img(x,y,z,:)); + + voxel_signal_SH = amp2SH(voxel_signal, gradient_scheme); + + + S = SH2amp (voxel_signal_SH, plot_scheme); % The interpolated voxel signal. + + + S = S .* scale_signal; + + S2 = -S; + + S(find(S<0)) = 0; + + if no_neg_values + S2 = zeros(size(S)); + else + S2(find(S2<0)) = 0; + end + + + vox_offset = [(x-0.5) * img_struct.vox(1) (y-0.5) * img_struct.vox(2) (z-0.5) * img_struct.vox(3)] + corner_offset; + + + vox_offset = repmat(vox_offset, [size(plot_scheme.vert,1) 1]); + + + V = plot_scheme.vert .* (S*[ 1 1 1 ]) + vox_offset; + V2 = plot_scheme.vert .* (S2*[ 1 1 1 ]) + vox_offset; + + + h = patch('Vertices', V, 'Faces', plot_scheme.mesh); + set(h, 'LineStyle', 'None', ... + 'FaceLighting', 'Phong', ... + 'FaceColor', colour, ... + 'FaceAlpha', transparency); + + h2 = patch('Vertices', V2, 'Faces', plot_scheme.mesh); + set(h2, 'LineStyle', 'None', ... + 'FaceLighting', 'Phong', ... + 'FaceColor', neg_colour, ... + 'FaceAlpha', transparency); + + light('position', [1 1 1]); + + count = count + 1; + + fprintf('.'); + + end + end + end + + hold off; + + add_vox_lines_to_plot(img_struct.vox(1), img_struct.dim(1)); + + + lighting gouraud; + + fprintf('\n'); + + +end + + diff --git a/matlab/plot_peaks.m b/matlab/plot_peaks.m new file mode 100644 index 0000000..296bf7c --- /dev/null +++ b/matlab/plot_peaks.m @@ -0,0 +1,75 @@ +function plot_peaks(varargin) +% +% PURPOSE: Plots spikes in TestSpikey probability landscape. +% +% ARGUMENTS: +% +% spike_filename Filename containing the spike landscape to plot +% +% OPTIONS (name, description, type, default): +% + + description = 'Plots peaks in TestSpikey probability landscape.'; + + arguments = {'peaks_filename', 'Filename containing the spike landscape to plot'}; + + options = {... + 'image_plot ', 0, 'bool', 'Image plot instead of surface.';... + 'invert ', 0, 'bool', 'Invert the plot upside down.';... + 'extent ', 1.5, 'float', 'Extent of the peaks to plot.';... + 'resolution ', 0.01, 'float', 'Resolution of the grid';... + 'transparency ', 0.5, 'float', 'Transparency of the plot.';... + }; + + parse_arguments + if (help_display) + return; + end + +% End arguments % + + peaks = load(peaks_filename); + + num_peaks = size(peaks,1); + + grid_points = -extent:resolution:extent; + + Z = zeros(size(X)); + + for x = grid_points + + for y = grid_points + + for peak_i = 1:num_peaks + + end + + end + + end + + my_figure(peaks_filename); + + [X,Y] = meshgrid(grid_points, grid_points); + + if image_plot + + imagesc(spikes); + + else + + X = repmat([1:size(spikes,2)]',1, size(spikes,2)); + Y = repmat([1:size(spikes,1)], size(spikes,1), 1); + + h = surf(X,Y,spikes); + + set(h,'FaceAlpha', transparency); + + cameratoolbar('Show'); + cameratoolbar('SetMode','orbit'); + + end + + daspect([1 1 1]); + +end \ No newline at end of file diff --git a/matlab/plot_rank3_hessian.m b/matlab/plot_rank3_hessian.m new file mode 100644 index 0000000..57a866b --- /dev/null +++ b/matlab/plot_rank3_hessian.m @@ -0,0 +1,189 @@ +function plot_rank3_hessian(varargin) +% +% PURPOSE: Plots the difference between the analytically calculated gradient and the numerically calculated gradient. +% +% ARGUMENTS: +% +% comparison_files The filename containing the comparison between the analytical and numerical gradients. +% +% OPTIONS (name, description, type, default): +% +% -style +% Style of the plot. +% string +% 'x' +% +% -marker_size +% Size of marker +% int +% 10 +% +% -line_width +% Width of line +% int +% 2 +% +% -param_include +% Parameters to include in the plots. +% matrix_1x: +% +% -test_include +% Tests to include in the plots. +% matrix_1x: + + + description = 'Plots the difference between the analytically calculated gradient and the numerically calculated gradient.'; + + arguments = {'comparison_files', 'The filename containing the comparison between the analytical and numerical gradients.'}; + + options = {... + 'style ', 'x', 'string', 'Style of the plot.';... + 'marker_size ', 10, 'int', 'Size of marker';... + 'line_width ', 2, 'int', 'Width of line';... + 'index_include', [], 'matrix_1x:', 'Parameter indices to include in the plots (overrides coord_include).';... + 'coord_include', [], 'matrix_:x:', 'Parameter coordinates to include in the plots.';... + 'test_include', [], 'matrix_1x:', 'Tests to include in the plots.';... + 'diagonal', 0, 'bool', 'Only displays diagonal components';... + 'collapse', 0, 'bool', 'Collapse all plots into single one';... + }; + + + parse_arguments + if (help_display) + return; + end + +% End arguments % + + + extension = file_extension(comparison_files); + base = file_base(comparison_files); + + if ~strcmp(extension, 'tnr3') + error(['Files must have ''tnr3'' extension for 3 order Hessian.']); + end + + base_extension = file_extension(base); + base_base = file_base(base); + + [analytic, labels] = load_tensor([base_base '.analytic.' base_extension '.' extension]); + numeric = load_tensor([base_base '.numeric.' base_extension '.' extension]); + + if any(size(analytic) ~= size(numeric)) + error(['Size of analytic (' mat2str(size(analytic)) ') does not match size of numeric (' mat2str(size(numeric)) ').']); + end + + %Ensure matrices are of the same size. + num_parameters = size(analytic,1); + num_tensors = size(analytic,3); + + if size(analytic,2) ~= num_parameters + error('Matrices not square.'); + end + + if mod(num_tensors, num_parameters) ~= 0 + error(['Number of parameters (' num2str(num_parameters) ') does not divide into number of matrices (' num2str(num_tensors) ').']); + end + + num_tests = num_tensors / num_parameters; + + analytic = reshape(analytic, [num_parameters, num_parameters, num_parameters, num_tests]); + numeric = reshape(numeric, [num_parameters, num_parameters, num_parameters, num_tests]); + + %Set to display to all comparisons if not selection explicitly provided. + if diagonal + + coord_include = zeros(num_parameters,3); + + for param_i = 1:num_parameters + coord_include(param_i,:) = [param_i param_i, param_i]; + end + + elseif ~isempty(index_include) + + [row col depth] = ind2sub([num_parameters, num_parameters, num_parameters], index_include); + + coord_include = [row' col' depth']; + + elseif isempty(coord_include) + + coord_include = zeros(num_parameters,3); + + param_count = 1; + for row_i = 1:num_parameters + for col_i = 1:num_parameters + for depth_i = 1:num_parameters + coord_include(param_count,:) = [row_i col_i depth_i]; + param_count = param_count +1; + end + end + end + + end + + if isempty(test_include) + test_include = 1:num_tests; + end + + num_param_include = size(coord_include,1); + + if collapse + my_figure('All parameters'); + + overall_min_value = inf; + overall_max_value = -inf; + end + + + %Plot comparisons. + for param_index_i = 1:num_param_include + + param_index = coord_include(param_index_i,:); + + numeric_param = squeeze(numeric(param_index(1), param_index(2), param_index(3), test_include)); + analytic_param = squeeze(analytic(param_index(1), param_index(2), param_index(3), test_include)); + + if ~collapse + my_figure([labels{param_index(1)}(1:end) ' :: ' labels{param_index(2)}(1:end) ' :: ' labels{param_index(3)}(1:end)], param_index_i, num_param_include); + end + + plot(numeric_param, analytic_param, style, 'MarkerSize', marker_size, 'LineWidth',line_width); + + set(get(gca,'xlabel'), 'string', 'numeric', 'color', [1 1 1]); + set(get(gca,'ylabel'), 'string', 'analytic', 'color', [1 1 1]); + + min_value = min([numeric_param; analytic_param]) * 1.1; + max_value = max([numeric_param; analytic_param]) * 1.1; + + + if collapse + if min_value < overall_min_value + overall_min_value = min_value + end + + if max_value > overall_max_value + overall_max_value = max_value + end + else + hold on; + + plot([min_value; max_value], [min_value; max_value], '-', 'color', [0.7412 0.6549 0.9608]); + + hold off; + end + + end + + if collapse + hold on; + + plot([overall_min_value; overall_max_value], [overall_min_value; overall_max_value], '-', 'color', [0.7412 0.6549 0.9608]); + + hold off; + end + + disp('') + disp(['Plotted ' num2str(num_tests) ' tests.']); + disp('') + +end diff --git a/matlab/plot_samples.m b/matlab/plot_samples.m new file mode 100644 index 0000000..b23195b --- /dev/null +++ b/matlab/plot_samples.m @@ -0,0 +1,233 @@ +function [samples, colours_of_strands] = plot_samples(varargin) +% +% PURPOSE: Plots tracts from sample files, and optionally displays reference sphere and voxels +% +% ARGUMENTS: +% +% filename The filename of the samples ('.tsp' format). +% +% OPTIONS (name, description, type, default): +% +% -transparency +% transparency of the plotted samples +% float +% 0.75 +% +% -include +% The indices of the tracts to include in the plot +% matrix_1x: +% +% -sample_include +% The indices of the samples to include in the plot +% matrix_1x: +% +% -colours_of_strands +% Colours of the plotted tracts +% matrix_:x3 +% +% -voxel_size +% Size of reference voxel +% float +% 0.15 +% +% -num_voxels +% Number of reference voxels +% int +% 3 +% +% -cube_size +% Size of reference voxel +% float +% 0 +% +% -num_segments +% Number of segments to plot for each tract. +% int +% 100 +% +% -strands_plot +% Whether to plot as grid of lines instead of tubes. +% int +% 0 +% +% -sphere_radius +% Size of reference sphere +% float +% 0.389711 +% + + global colours_of_strands; + +% The following code sets the input arguments and options as specified by the 'arguments' and 'options' cell arrays. + + description = 'Plots tracts from sample files, and optionally displays reference sphere and voxels'; + + arguments = {'filename', 'The filename of the samples (''.tsp'' format).'}; + + options = {... + 'transparency ', 0.75, 'float', 'transparency of the plotted samples';... + 'include ', [], 'matrix_1x:', 'The indices of the tracts to include in the plot';... + 'sample_include ', [], 'matrix_1x:', 'The indices of the samples to include in the plot';... + 'colours_of_strands', colours_of_strands, 'matrix_:x3', 'Colours of the plotted tracts';... + 'voxel_size ', 0.15, 'float', 'Size of reference voxel';... + 'num_voxels ', 3, 'int', 'Number of reference voxels';... + 'cube_size ', 0, 'float', 'Size of reference voxel';... + 'num_segments ', 100, 'int', 'Number of segments to plot for each tract.';... + 'style ', 'strands', 'string', 'Whether to plot as grid of strands or outer boundary.';... + 'num_strands ', 0, 'int', 'Number of strands to plot along each axis. (NB: can only be used with ''-style'' option ''strands'').';... + 'sphere_radius ', 0.389711, 'float', 'Size of reference sphere'... + }; + + + parse_arguments + if (help_display) + return; + end + +% End arguments % + + + + dots_i = findstr(filename,'.'); + ext = filename(dots_i(end):end); + + if ~strcmp(ext, '.tsp') + error(['Input file must be a samples file (extension ''.tsp''), found file with extension ' ext '.']); + end + + [samples, ext_prop_keys, ext_prop_values, initial_set, true_set, sphere_radius] = load_samples(filename); + + num_tracts = size(initial_set,1); + num_samples = size(samples,1) - 1; + + if any(find(sample_include > num_samples)) + error('Selected sample indices exceed number of loaded samples'); + end + + if isempty(sample_include) + sample_include = 1:num_samples; + end + + + bundle_indices_index = find(strcmp(ext_prop_keys, 'bundle_index')); + + cdata = cell(num_samples, num_tracts); + + + if size(colours_of_strands,1) < num_tracts %#ok + colours_of_strands = rand([num_tracts, 3]); %#ok + display_colour_key(colours_of_strands, 0:1:(num_tracts-1)); %#ok + end + for sample_i = 1:num_samples + for tract_i = 1:num_tracts + + colour_data = repmat(shiftdim(colours_of_strands(tract_i,:),-1), [num_segments 1 1]); %#ok + cdata{sample_i, tract_i} = [colour_data colour_data]; + + end + end + + + alpha_data = ones(num_segments,2) * transparency; + + main_fig = figure(); + + set(main_fig,'Units','normalized') + + set(main_fig, 'Position', [0.3 0.25 0.4 0.5]); + set(main_fig, 'DoubleBuffer', 'on'); + set(main_fig, 'Name', strrep(filename, '_', ' ')); + + cameratoolbar('Show'); + cameratoolbar('SetMode','orbit'); + campos([0 0 1]); + camup([0 1 0]); + + clf; + + whitebg(main_fig,'black'); + hold on; + + + fprintf('\n'); + disp(['Plotting ' num2str(size(sample_include,2)) ' samples.']); + + for sample_i = sample_include + + sample = samples{sample_i,1}; + + for tract_i = 1:num_tracts + + if strcmp(style,'strands') + + for ax2_inc = -1:(1/num_strands):1 + + for ax3_inc = -1:(1/num_strands):1 + + strand = sample{tract_i, 1} + sample{tract_i, 2} * ax2_inc + sample{tract_i, 3} * ax3_inc; + + tck = fourier2tck(strand); + + h = surface(... + 'XData', [tck(:,1) tck(:,1)],... + 'YData', [tck(:,2) tck(:,2)],... + 'ZData', [tck(:,3) tck(:,3)],... + 'CData', cdata{sample_i, tract_i},... + 'AlphaData', alpha_data,... + 'FaceColor', 'none',... + 'EdgeColor', 'flat',... + 'Marker', 'none', ... + 'LineStyle', '-', ... + 'LineWidth', 1); + view(3) + daspect ([ 1 1 1 ]); + + end + end + end + end + + if ~mod(sample_i,25) + fprintf('.'); + end + + + end + + hold off; + + %set(gca, 'color', [0 0 0]); + set(gcf, 'color', [0 0 0]); + + label_handle = get(gca,'xlabel'); + set(label_handle, 'string', 'X-axis', 'color', [1 1 1]); + + label_handle = get(gca,'ylabel'); + set(label_handle, 'string', 'Y-axis', 'color', [1 1 1]); + + label_handle = get(gca,'zlabel'); + set(label_handle, 'string', 'Z-axis', 'color', [1 1 1]); + + h = get (gca, 'children'); + daspect ([ 1 1 1 ]); + + light + lighting gouraud; + + +% figure(main_fig); + + + + if sphere_radius ~= 0 + display_reference_sphere(sphere_radius, 0.1); + end + + if voxel_size ~= 0 + plot_vox_lines(voxel_size,num_voxels); + end + + + samples = samples(sample_include); + +end \ No newline at end of file diff --git a/matlab/plot_scan.m b/matlab/plot_scan.m new file mode 100644 index 0000000..ef715f7 --- /dev/null +++ b/matlab/plot_scan.m @@ -0,0 +1,415 @@ +function plot_scan(varargin) +% +% PURPOSE: Plots the output of 'scan_strands' +% +% ARGUMENTS: +% +% scan_filename The filename of the '.mif', '.sst', or '.tst' scan_image containing the scan. +% +% OPTIONS (name, description, type, default): +% +% -scale_range +% The range of the colour scale plot. +% matrix_1x2 +% +% -state_filename +% Filename of the states to overlay on the surface plot. +% string +% '' +% +% -include_states +% States to include in plot. +% matrix_:x: +% +% -mark_rand_samples +% Mark samples where the momentum is randomized. +% bool +% 0 +% +% -highlight_samples +% Highlight selected samples with a larger marker +% matrix_:x: +% +% -image +% Plot as a flat image instead of a surface. +% bool +% 0 +% +% -exponential +% Change plot to display the probability instead of the log probability. +% bool +% 0 +% +% -offset +% Offset the values by a constant amount (used in conjunction with '-exponential'). +% float +% 0 +% +% -transparency +% The transparency of the surface. +% float +% 0.5 + + + description = 'Plots the output of ''scan_strands'''; + + arguments = {'scan_filenames', 'The filename of the ''.mif'', ''.sst'', or ''.tst'' scan_image containing the scan.'}; + + options = {... + 'scale_range ', [], 'matrix_1x2', 'The range of the colour scale plot.';... + 'state_filename ', '', 'string' , 'Filename of the states to overlay on the surface plot.';... + 'include_states ', [], 'matrix_:x:', 'States to include in plot.';... + 'mark_rand_samples', 1, 'bool', 'Mark samples where the momentum is randomized.';... + 'highlight_samples', [], 'matrix_:x:', 'Highlight selected samples with a larger marker';... + 'image_plot ', 0, 'bool' , 'Plot as a flat image instead of a surface.';... + 'map_to_surface ', 0, 'bool' , 'Maps the probabilities on the surfaces of the scans, representing the probability due to that dimension.';... + 'exponential ', 0, 'bool' , 'Change plot to display the probability instead of the log probability.';... + 'offset ', 0, 'float' , 'Offset the values by a constant amount (used in conjunction with ''-exponential'').';... + 'transparency ', 0.5, 'float' , 'The transparency of the surface.';... + }; + + + multiple_last_arguments = 1; + + parse_arguments + if (help_display) + return; + end + +% End arguments % + + + %Expand any directories + expanded_scan_filenames = cell(0); + + for scan_i = 1:length(scan_filenames); + + if isdir(scan_filenames{scan_i}) + + filenames = dir(scan_filenames{scan_i}); + + for file_i = 1:length(filenames) + if strcmp(file_extension(filenames(file_i).name), 'mif') + expanded_scan_filenames{end+1} = [scan_filenames{scan_i}, filesep, filenames(file_i).name]; + end + + end + + else + expanded_scan_filenames{end+1} = scan_filenames{scan_i}; + end + + end + + num_scans = length(expanded_scan_filenames); + + + %If states provided preload them to save having to read the file multiple + %times. + if ~isempty(state_filename) + + if strcmp(file_extension(state_filename), 'sst') + + [sets, props, set_prop_keys, set_prop_values] = load_strand_sets(state_filename,include_states,1); + + elseif strcmp(file_extension(state_filename), 'tst') + + [sets, props, set_prop_keys, set_prop_values] = load_tract_sets(state_filename,include_states,1); + + else + error(['Unrecognised extension ''' file_extension(state_filename) '''.']); + end + + end + + %Plot the scans. + for scan_i = 1:num_scans + + scan_filename = expanded_scan_filenames{scan_i}; + + figure_name = strrep(scan_filename,'_',' '); + + if exponential + figure_name = [figure_name ' - Probability']; + else + figure_name = [figure_name ' - Log Probability']; + end + + + %If 1D scan + if strcmp(file_extension(scan_filename),'sst') || strcmp(file_extension(scan_filename),'tst') || strcmp(file_extension(scan_filename),'str') || strcmp(file_extension(scan_filename),'tct') + + [prop_keys, prop_values] = read_element_properties([scan_filename 'x']); + + scan_data = get_properties(prop_keys, prop_values, 'log_px'); + + if offset > 0 + scan_data = scan_data + offset; + end + + if exponential + scan_data = exp(scan_data); + end + + my_figure(figure_name, scan_i, num_scans); + + plot(scan_data); + + + %If 2d scan + elseif strcmp(file_extension(scan_filename), 'mif') + + scan_image = read_image(scan_filename); + + if ~isfield(scan_image, 'data') + error(['Could not load scan_image from ' scan_filename ]); + end + + scan_range1 = [-1:2/(scan_image.dim(1)-1):1]; + scan_range2 = [-1:2/(scan_image.dim(2)-1):1]; + + if offset > 0 + scan_image.data = scan_image.data + offset; + end + + if exponential + scan_image.data = exp(scan_image.data); + end + + + %Plot as a flat image. + if image_plot + + my_figure(figure_name, scan_i, num_scans); + + if isempty(scale_range) + imagesc(scan_range1, scan_range2, scan_image.data); + else + imagesc(scan_range1, scan_range2, scan_image.data, scale_range); + end + + colorbar; + + %Else plot as a surface. + else + + [X,Y] = meshgrid(scan_range1, scan_range2); + + my_figure(figure_name, scan_i, num_scans, [], 1); + + h = surf(X, Y, scan_image.data'); + + + if transparency ~= 1 + set(h,'FaceAlpha', transparency); + end + + %If states provided (i.e. a MCMC sequence) plot projection on to + %scan slice. + if ~isempty(state_filename) + + axis1 = eval(scan_image.axis1); + axis2 = eval(scan_image.axis2); + origin = eval(scan_image.origin); + + if strcmp(file_extension(state_filename), 'sst') + + num_sets = size(sets,1); + + px = get_properties(set_prop_keys, set_prop_values, 'log_px', zeros(num_sets,1), num_sets); + + proj1 = zeros(num_sets,1); + proj2 = zeros(num_sets,1); + + + for set_i = 1:num_sets + + strands = sets{set_i}; + + num_strands = size(strands,1); + + for strand_i = 1:num_strands + + strand_disp = strands{strand_i} - origin{strand_i + 2}{3}; + + proj1(set_i) = proj1(set_i) + dot(axis1{strand_i + 2}{3}(:), strand_disp(:)); + proj2(set_i) = proj2(set_i) + dot(axis2{strand_i + 2}{3}(:), strand_disp(:)); + + end + + end + + + axis1_norm2 = 0; + axis2_norm2 = 0; + + for strand_i = 1:num_strands + axis1_norm2 = axis1_norm2 + axis1{strand_i + 2}{3}(:)' * axis1{strand_i + 2}{3}(:); + axis2_norm2 = axis2_norm2 + axis2{strand_i + 2}{3}(:)' * axis2{strand_i + 2}{3}(:); + end + + proj1 = proj1 ./ axis1_norm2; + proj2 = proj2 ./ axis2_norm2; + + + elseif strcmp(file_extension(state_filename), 'tst') + + num_sets = size(sets,1); + + px = get_properties(set_prop_keys, set_prop_values, 'px', zeros(num_sets,1), num_sets); + + proj1 = zeros(num_sets,1); + proj2 = zeros(num_sets,1); + + + for set_i = 1:num_sets + + tracts = sets{set_i}; + + num_tracts = size(tracts,1); + + for tract_i = 1:num_tracts + + for strand_i = 1:3 + + strand_disp = tracts{tract_i}{strand_i} - origin{tract_i + 2}{strand_i}{3}; + + proj1(set_i) = proj1(set_i) + dot(axis1{tract_i + 2}{strand_i}{3}(:), strand_disp(:)); + proj2(set_i) = proj2(set_i) + dot(axis2{tract_i + 2}{strand_i}{3}(:), strand_disp(:)); + + end + + end + + end + + + axis1_norm2 = 0; + axis2_norm2 = 0; + + for tract_i = 1:num_tracts + + for strand_i = 1:3 + axis1_norm2 = axis1_norm2 + axis1{tract_i + 2}{strand_i}{3}(:)' * axis1{tract_i + 2}{strand_i}{3}(:); + axis2_norm2 = axis2_norm2 + axis2{tract_i + 2}{strand_i}{3}(:)' * axis2{tract_i + 2}{strand_i}{3}(:); + end + + end + + proj1 = proj1 ./ axis1_norm2; + proj2 = proj2 ./ axis2_norm2; + + + + else + error(['Unrecognised extension ''' file_extension(state_filename) '''.']); + end + + + hold on; + + %If map_to_surface option is selected, map probability values via + %bilinear interpolation to scan surface. + if map_to_surface + + for set_i = 1:num_sets + + + if (proj1(set_i) < -1) || (proj1(set_i) > 1) || (proj2(set_i) < -1) || (proj2(set_i) > 1) + + px(set_i) = 0; + + else + + + index1 = (scan_image.dim(1)-1) * (proj1(set_i) + 1)/2 + 1; + index2 = (scan_image.dim(2)-1) * (proj2(set_i) + 1)/2 + 1; + + low1 = floor(index1); + high1 = ceil(index1); + frac1 = rem(index1,1); + + low2 = floor(index2); + high2 = ceil(index2); + frac2 = rem(index2,1); + + px(set_i) = (1-frac2) * ((1-frac1) * scan_image.data(low1, low2) + frac1 * scan_image.data(high1, low2)) + ... + frac2 * ((1-frac1) * scan_image.data(low1, high2) + frac1 * scan_image.data(high1, high2)); + + end + + end + + state_plot_colour = [1 0.5 1]; + + else + + state_plot_colour = 'yellow'; + + end + + + plot3(proj1, proj2, px, 'Color', state_plot_colour); + + plot3(proj1(1), proj2(1), px(1), 'md', 'MarkerEdgeColor', 'red', 'MarkerFaceColor', 'red', 'MarkerSize', 10); + + if mark_rand_samples + + sample_period = str2double(props.sample_period); + + mark_samples = sample_period:sample_period:num_sets; + + plot3(proj1(mark_samples), proj2(mark_samples), px(mark_samples), 'mo', 'MarkerEdgeColor', 'blue', 'MarkerFaceColor', 'blue', 'MarkerSize', 5); + + end + + if ~isempty(highlight_samples) + + highlight_samples = highlight_samples + 1; + + highlight_samples = highlight_samples(highlight_samples < num_sets); + + plot3(proj1(highlight_samples), proj2(highlight_samples), px(highlight_samples), 'md', 'MarkerEdgeColor', 'green', 'MarkerFaceColor', 'green', 'MarkerSize', 8); + + end + + hold off + + + end + + end + + axis1_delim = strfind(scan_image.axis1_location,'/'); + + if isempty(axis1_delim) + axis1_basename = 0; + else + axis1_basename = scan_image.axis1_location((axis1_delim(end)+1):end); + end + + xlabel(axis1_basename); + + + axis2_delim = strfind(scan_image.axis2_location,'/'); + + if isempty(axis2_delim) + axis2_basename = 0; + else + axis2_basename = scan_image.axis2_location((axis2_delim(end)+1):end); + end + + ylabel(axis2_basename); + + + + + else + + error(['Unrecognised file_extension, ''' file_extension(scan_filename) '''.']); + + end + + end + +end diff --git a/matlab/plot_spikes.m b/matlab/plot_spikes.m new file mode 100644 index 0000000..640a804 --- /dev/null +++ b/matlab/plot_spikes.m @@ -0,0 +1,57 @@ +function plot_spikes(varargin) +% +% PURPOSE: Plots spikes in TestSpikey probability landscape. +% +% ARGUMENTS: +% +% spike_filename Filename containing the spike landscape to plot +% +% OPTIONS (name, description, type, default): +% + + description = 'Plots spikes in TestSpikey probability landscape.'; + + arguments = {'spikes_filename', 'Filename containing the spike landscape to plot'}; + + options = {... + 'image_plot ', 0, 'bool', 'Image plot instead of surface.';... + 'invert ', 0, 'bool', 'Inver the plot upside down.';... + 'transparency ', 0.5, 'float', 'Transparency of the plot.';... + }; + + parse_arguments + if (help_display) + return; + end + +% End arguments % + + spikes = load(spikes_filename); + + if invert + spikes = -spikes; + end + + my_figure(spikes_filename); + + if image_plot + + imagesc(spikes); + + else + + X = repmat([1:size(spikes,2)]',1, size(spikes,2)); + Y = repmat([1:size(spikes,1)], size(spikes,1), 1); + + h = surf(X,Y,spikes); + + set(h,'FaceAlpha', transparency); + + cameratoolbar('Show'); + cameratoolbar('SetMode','orbit'); + + end + + daspect([1 1 1]); + +end \ No newline at end of file diff --git a/matlab/plot_strand_sets.m b/matlab/plot_strand_sets.m new file mode 100644 index 0000000..fe31940 --- /dev/null +++ b/matlab/plot_strand_sets.m @@ -0,0 +1,330 @@ +function main_fig = plot_strands_sets(varargin) +% +% PURPOSE: Plots strands from strand files, and optionally displays reference sphere and voxels +% +% ARGUMENTS: +% +% strands_filename The filename of the strands in either .tck or .frr formats. +% +% OPTIONS (name, description, type, default): +% +% -strand_radius +% Radii of the plotted strands +% float +% 0.02 +% +% -num_points +% Number of points to plot along each strand. +% int +% 100 +% +% -include +% The indices of the sets to include in the plot +% matrix_:x: +% +% -last +% Overrides '-include' to only print the last tract set. +% bool +% 0 +% +% -strand_include +% The indices of the strands to include in the plot +% matrix_:x: +% +% -bundle_include +% The indices of the bundles to include in the plot +% matrix_:x: +% +% -colours_of_bundles +% Colours of the plotted strands +% matrix_:x3 +% +% -voxel_size +% Size of reference voxel +% float +% 0.15 +% +% -num_voxels +% Number of reference voxels +% int +% 3 +% +% -cube_size +% Size of reference voxel +% float +% 0 +% +% -style +% Plot to style (either 'tubes' or 'lines').. +% string +% 'lines' +% +% -properties_plot +% Do, don't or only plot the extended properties associated with the tract set (0 -> don't plot properties, 1 -> plot properties, 2 -> only plot properties). +% int +% 1 +% +% -sphere_radius +% Size of reference sphere +% float +% 0 +% +% -no_axes +% Removes axes from plot +% bool +% 0 +% +% -clean +% Removes everything else from plot +% bool +% 0 + + main_fig = -1; + + global colours_of_bundles; + + description = 'Plots strands from strand files, and optionally displays reference sphere and voxels'; + + arguments = {'strands_filename', 'The filename of the strands in either .tck or .frr formats.'}; + + options = {... + 'strand_radius ', 0.02, 'float', 'Radii of the plotted strands';... + 'num_points ', 100, 'int', 'Number of points to plot along each strand.';... + 'include ', [], 'matrix_:x:', 'The indices of the sets to include in the plot';... + 'dont_include ', [], 'matrix_:x:', 'The indices of the samples not to include in the plot';... + 'last', 0, 'bool', 'Overrides ''-include'' to only print the last tract set.';... + 'strand_include ', [], 'matrix_:x:', 'The indices of the strands to include in the plot';... + 'bundle_include ', [], 'matrix_:x:', 'The indices of the bundles to include in the plot';... + 'colours_of_bundles', colours_of_bundles, 'matrix_:x3', 'Colours of the plotted strands';... + 'voxel_size ', 0.15, 'float', 'Size of reference voxel';... + 'num_voxels ', 3, 'int', 'Number of reference voxels';... + 'cube_size ', 0, 'float', 'Size of reference voxel';... + 'happy_colours', 0, 'bool', 'Uses ''happy colours''';... + 'inv_happy_colours', 0, 'bool', 'Uses the inverse of ''happy colours''';... + 'style ', 'lines', 'string', 'Plot to style (either ''tubes'' or ''lines'')..';... + 'tube_corners ', 6, 'int', 'Change plot to ''line style''.(NB: Only relevant with ''-num_strands'' option = 0).';... + 'properties_plot', 0, 'int', 'Do, don''t or only plot the extended properties associated with the tract set (0 -> don''t plot properties, 1 -> plot properties, 2 -> only plot properties).';... + 'sphere_radius ', 0, 'float', 'Size of reference sphere';... + 'no_axes', 0, 'bool', 'Removes axes from plot';... + 'clean', 0, 'bool', 'Removes everything else from plot';... + 'no_voxline_highlight', 0, 'bool', 'Doesn''t highlight corner axes of voxel lines.';... + 'invisible', 0, 'bool', 'Makes the figure invisible (for automatically saving afterwards).'}; + + parse_arguments + if (help_display) + return; + end + + + if clean + voxel_size = 0; + sphere_radius = 0; + no_axes = 1; + end + + +% End arguments % + + if happy_colours + + if inv_happy_colours + error('Can''t use ''-happy_colours'' and ''-inv_happy_colours'' simultaneously'); + end + + load('/home/tclose/Data/Tractography/misc/comb_happy_colours.mat'); + + elseif inv_happy_colours + + load('/home/tclose/Data/Tractography/misc/inv_comb_happy_colours.mat'); + + end + + [strand_sets, props, set_prop_keys, set_prop_values, elem_prop_keys, elem_prop_values] = load_strand_sets(strands_filename, [], 1); + + num_sets = size(strand_sets,1); + + if last + + if ~isempty(dont_include) || ~isempty(include) + error('Error! -last cannot be used simultaneously with -include or -dont_include options'); + end + + include = size(strand_sets,1)-1; + + else + + if ~isempty(dont_include) + + if ~isempty(include) + error('Error! -include and -dont_include options cannot be used simultaneously'); + end + + include = 1:num_sets; + + include(dont_include) = []; + + include = include-1; + + end + + end + + if ~isempty(strand_include) + error('Cannot use ''strand_include'' and ''bundle_include simultaneously'); + end + + include = include + 1; + + + if properties_plot < 2 + + overall_max_bundle_index = 0; + + for set_i = 1:num_sets + + num_strands = size(strand_sets{set_i},1); + + if size(elem_prop_keys,2) + prop_values = elem_prop_values{set_i}; + else + prop_values = []; + end + + bundle_indices = get_properties(elem_prop_keys, prop_values, 'bundle_index', [0:1:(num_strands-1)]', num_strands); + + max_bundle_index = max(bundle_indices); + + if max_bundle_index > overall_max_bundle_index + overall_max_bundle_index = max_bundle_index; + end + end + + set_bundle_colours(overall_max_bundle_index); + + %Set up the figure. + main_fig = my_figure(strands_filename, 1, 3, [1 1 1], 1, [],[],~invisible); + + set(gcf, 'color', [0 0 0]); + + if no_axes + set(gca, 'visible', 'off') ; + else + label_handle = get(gca,'xlabel'); + set(label_handle, 'string', 'X-axis', 'color', [1 1 1]); + + label_handle = get(gca,'ylabel'); + set(label_handle, 'string', 'Y-axis', 'color', [1 1 1]); + + label_handle = get(gca,'zlabel'); + set(label_handle, 'string', 'Z-axis', 'color', [1 1 1]); + end + + daspect ([ 1 1 1 ]); + + add_sphere_to_plot(sphere_radius, props); + + if voxel_size ~= 0 + + add_vox_lines_to_plot(voxel_size,num_voxels,~no_voxline_highlight); + + end + + + light + lighting gouraud; + + + if isempty(include) + include = 1:num_sets; + end + + for set_i = include + + if size(elem_prop_keys,2) + prop_values = elem_prop_values{set_i}; + else + prop_values = []; + end + + strands = strand_sets{set_i}; + + + if ~isempty(bundle_include) + + num_strands = size(strands,1); + + bundle_indices = get_properties(elem_prop_keys, prop_values, 'bundle_index', 1:num_strands); + + strand_include = []; + + for strand_i = 1:num_strands + if any(find(bundle_include == bundle_indices(strand_i))) + strand_include = [strand_include; strand_i]; %#ok + end + end + + if isempty(strand_include) + disp('Warning! No bundles matched the given indices, returning all strands.'); + end + + end + + num_strands = size(strands,1); + + bundle_indices = get_properties(elem_prop_keys, prop_values, 'bundle_index', [0:1:(num_strands-1)]', num_strands); + radii = get_properties(elem_prop_keys, prop_values, 'tract_radius', strand_radius, num_strands); + + + if ~isempty(strand_include) + + strands = strands(strand_include); + bundle_indices = bundle_indices(strand_include); + radii = radii(strand_include); + + end + + + tcks = strands2tcks(strands); + + if strfind('tubes', style) == 1 + + add_tcks_to_plot(tcks, radii, colours_of_bundles, bundle_indices, tube_corners); + + elseif strfind('lines', style) == 1 + + add_lines_to_plot(tcks, colours_of_bundles, bundle_indices); + + else + + error(['Urecogised style option ''' style '''.']); + + end + + daspect ([ 1 1 1 ]); + + end + + fprintf('\n'); + disp(['Plotted ' num2str(num_sets) ' strand sets.']); + + end + + if properties_plot > 0 && length(include) ~= 1 + + if exist([strands_filename 'x']) + + ext_props_fig = plot_extend_elem_properties([strands_filename 'x'], set_prop_keys, set_prop_values,include); + + end + end + + if (properties_plot == 1 || properties_plot == 3) && length(include) ~= 1 + if exist([strands_filename 'xx']) + + ext_ext_props_fig = plot_extended_extend_elem_properties([strands_filename 'xx'], elem_prop_keys, elem_prop_values, colours_of_bundles, include); + + end + + end + +end \ No newline at end of file diff --git a/matlab/plot_strands.m b/matlab/plot_strands.m new file mode 100644 index 0000000..0beff50 --- /dev/null +++ b/matlab/plot_strands.m @@ -0,0 +1,251 @@ +function main_fig = plot_strands(varargin) +% +% PURPOSE: Plots strands from strand files, and optionally displays reference sphere and voxels +% +% ARGUMENTS: +% +% strands_filename The filename of the strands in either .tck or .frr formats. +% +% OPTIONS (name, description, type, default): +% +% -strand_radius +% Radii of the plotted strands +% float +% 0.02 +% +% -num_points +% Number of points to plot along each strand. +% int +% 100 +% +% -include +% The indices of the strands to include in the plot +% matrix_:x: +% +% -bundle_include +% The indices of the bundles to include in the plot +% matrix_:x: +% +% -colours_of_bundles +% Colours of the plotted strands +% matrix_:x3 +% +% -voxel_size +% Size of reference voxel +% float +% 0.15 +% +% -num_voxels +% Number of reference voxels +% int +% 3 +% +% -cube_size +% Size of reference voxel +% float +% 0 +% +% -style +% Plot to style (either 'strands' or 'lines').. +% string +% 'strands' +% +% -sphere_radius +% Size of reference sphere +% float +% 0 +% +% -no_axes +% Removes axes from plot +% bool +% 0 +% +% -clean +% Removes everything else from plot +% bool +% 0 +% +% -campos +% Position of the camera +% matrix_1:3 + + main_fig = -1; + + global colours_of_bundles; + + description = 'Plots strands from strand files, and optionally displays reference sphere and voxels'; + + arguments = {'strands_filename', 'The filename of the strands in either .tck or .frr formats.'}; + + options = {... + 'strand_radius ', 0.02, 'float', 'Radii of the plotted strands';... + 'num_points ', 100, 'int', 'Number of points to plot along each strand.';... + 'include ', [], 'matrix_:x:', 'The indices of the strands to include in the plot';... + 'bundle_include ', [], 'matrix_:x:', 'The indices of the bundles to include in the plot';... + 'colours_of_bundles', colours_of_bundles, 'matrix_:x3', 'Colours of the plotted strands';... + 'voxel_size ', 0.15, 'float', 'Size of reference voxel';... + 'num_voxels ', 3, 'int', 'Number of reference voxels';... + 'cube_size ', 0, 'float', 'Size of reference voxel';... + 'style ', 'tubes', 'string', 'Plot to style (either ''strands'' or ''lines'')..';... + 'sphere_radius ', 0, 'float', 'Size of reference sphere';... + 'sphere_transparency', 0.25, 'float', 'Transparency of reference sphere';... + 'tube_corners ', 6, 'int', 'Change plot to ''line style''.(NB: Only relevant with ''-num_strands'' option = 0).';... + 'no_axes', 0, 'bool', 'Removes axes from plot';... + 'happy_colours', 0, 'bool', 'Uses ''happy colours''';... + 'inv_happy_colours', 0, 'bool', 'Uses the inverse of ''happy colours''';... + 'clean', 0, 'bool', 'Removes everything else from plot';... + 'campos', [], 'matrix_1:3', 'Position of the camera';... + 'no_voxline_highlight', 0, 'bool', 'Doesn''t highlight corner axes of voxel lines.';... + 'invisible', 0, 'bool', 'Makes the figure invisible (for automatically saving afterwards).'}; + + + parse_arguments + if (help_display) + return; + end + + + if clean + voxel_size = 0; + sphere_radius = 0; + no_axes = 1; + end + + +% End arguments % + + if happy_colours + + if inv_happy_colours + error('Can''t use ''-happy_colours'' and ''-inv_happy_colours'' simultaneously'); + end + + load('/home/tclose/Data/Tractography/misc/comb_happy_colours.mat'); + + elseif inv_happy_colours + + load('/home/tclose/Data/Tractography/misc/inv_comb_happy_colours.mat'); + + end + + + [strands, props, prop_keys, prop_values] = load_strands(strands_filename); + + + if ~isempty(bundle_include) + + num_strands = size(strands,1); + + if ~isempty(include) + error('Cannot use ''include'' and ''bundle_include simultaneously'); + end + + bundle_indices = get_properties(prop_keys, prop_values, 'bundle_index', 0:1:(num_strands-1), num_strands); + + for strand_i = 1:num_strands + if any(find(bundle_include == bundle_indices(strand_i))) + include = [include; strand_i]; %#ok + end + end + + if isempty(include) + disp('Warning! No bundles matched the given indices, returning all strands.'); + end + + %To match 0 indexing + include = include - 1; + + end + + + if ~isempty(include) + + strands = strands(include+1); + prop_values = prop_values(include+1,:); + + end + + num_strands = size(strands,1); + + bundle_indices = get_properties(prop_keys, prop_values, 'bundle_index', [0:1:(num_strands-1)]', num_strands); + radii = get_properties(prop_keys, prop_values, 'track_radius', strand_radius, num_strands); + + add_colour_key(bundle_indices,colours_of_bundles); + + main_fig = my_figure(strrep(strands_filename,'_',''), 1, 1, [1 1 1], 1, [],[],~invisible); + + cameratoolbar('Show'); + cameratoolbar('SetMode','orbit'); + + + if strcmp(file_extension(strands_filename), 'str') + tcks = strands2tcks(strands); + elseif strcmp(file_extension(strands_filename), 'tck') + tcks = strands; + else + error (['Unrecognised extension, ''' extension(strands_filename) ''', of input file.']); + end + + if strfind('tubes', style) == 1 + + add_tcks_to_plot(tcks, radii, colours_of_bundles, bundle_indices, tube_corners); + + elseif strfind('lines', style) == 1 + + add_lines_to_plot(tcks, colours_of_bundles, bundle_indices); + + else + + error(['Urecogised style option ''' style '''.']); + + end + + + if sphere_radius ~= 0 + + add_sphere_to_plot(sphere_radius, sphere_transparency); + + end + + if voxel_size ~= 0 + + add_vox_lines_to_plot(voxel_size,num_voxels,~no_voxline_highlight); + + end + + + set(gcf, 'color', [0 0 0]); + + if no_axes + + set(gca, 'visible', 'off') ; + + else + + label_handle = get(gca,'xlabel'); + set(label_handle, 'string', 'X-axis', 'color', [1 1 1]); + + label_handle = get(gca,'ylabel'); + set(label_handle, 'string', 'Y-axis', 'color', [1 1 1]); + + label_handle = get(gca,'zlabel'); + set(label_handle, 'string', 'Z-axis', 'color', [1 1 1]); + + end + + if ~isempty(campos) + + set(gca,'CameraPosition',campos); + + end + + daspect ([ 1 1 1 ]); + + light + lighting gouraud; + + + fprintf('\n'); + disp(['Plotted ' num2str(num_strands) ' strands.']); + +end \ No newline at end of file diff --git a/matlab/plot_tck_sets.m b/matlab/plot_tck_sets.m new file mode 100644 index 0000000..4e84765 --- /dev/null +++ b/matlab/plot_tck_sets.m @@ -0,0 +1,328 @@ +function main_fig = plot_tcks_sets(varargin) +% +% PURPOSE: Plots tcks from tck files, and optionally displays reference sphere and voxels +% +% ARGUMENTS: +% +% tcks_filename The filename of the tcks in either .tck or .frr formats. +% +% OPTIONS (name, description, type, default): +% +% -tck_radius +% Radii of the plotted tcks +% float +% 0.02 +% +% -num_points +% Number of points to plot along each tck. +% int +% 100 +% +% -include +% The indices of the sets to include in the plot +% matrix_:x: +% +% -last +% Overrides '-include' to only print the last tract set. +% bool +% 0 +% +% -tck_include +% The indices of the tcks to include in the plot +% matrix_:x: +% +% -bundle_include +% The indices of the bundles to include in the plot +% matrix_:x: +% +% -colours_of_bundles +% Colours of the plotted tcks +% matrix_:x3 +% +% -voxel_size +% Size of reference voxel +% float +% 0.15 +% +% -num_voxels +% Number of reference voxels +% int +% 3 +% +% -cube_size +% Size of reference voxel +% float +% 0 +% +% -style +% Plot to style (either 'tubes' or 'lines').. +% string +% 'lines' +% +% -properties_plot +% Do, don't or only plot the extended properties associated with the tract set (0 -> don't plot properties, 1 -> plot properties, 2 -> only plot properties). +% int +% 1 +% +% -sphere_radius +% Size of reference sphere +% float +% 0 +% +% -no_axes +% Removes axes from plot +% bool +% 0 +% +% -clean +% Removes everything else from plot +% bool +% 0 + + main_fig = -1; + + global colours_of_bundles; + + description = 'Plots tcks from tck files, and optionally displays reference sphere and voxels'; + + arguments = {'tcks_filename', 'The filename of the tcks in either .tck or .frr formats.'}; + + options = {... + 'tck_radius ', 0.02, 'float', 'Radii of the plotted tcks';... + 'num_points ', 100, 'int', 'Number of points to plot along each tck.';... + 'include ', [], 'matrix_:x:', 'The indices of the sets to include in the plot';... + 'dont_include ', [], 'matrix_:x:', 'The indices of the samples not to include in the plot';... + 'last', 0, 'bool', 'Overrides ''-include'' to only print the last tract set.';... + 'tck_include ', [], 'matrix_:x:', 'The indices of the tcks to include in the plot';... + 'bundle_include ', [], 'matrix_:x:', 'The indices of the bundles to include in the plot';... + 'colours_of_bundles', colours_of_bundles, 'matrix_:x3', 'Colours of the plotted tcks';... + 'voxel_size ', 0.15, 'float', 'Size of reference voxel';... + 'num_voxels ', 3, 'int', 'Number of reference voxels';... + 'cube_size ', 0, 'float', 'Size of reference voxel';... + 'happy_colours', 0, 'bool', 'Uses ''happy colours''';... + 'inv_happy_colours', 0, 'bool', 'Uses the inverse of ''happy colours''';... + 'style ', 'lines', 'string', 'Plot to style (either ''tubes'' or ''lines'')..';... + 'tube_corners ', 6, 'int', 'Change plot to ''line style''.(NB: Only relevant with ''-num_tcks'' option = 0).';... + 'properties_plot', 0, 'int', 'Do, don''t or only plot the extended properties associated with the tract set (0 -> don''t plot properties, 1 -> plot properties, 2 -> only plot properties).';... + 'sphere_radius ', 0, 'float', 'Size of reference sphere';... + 'no_axes', 0, 'bool', 'Removes axes from plot';... + 'clean', 0, 'bool', 'Removes everything else from plot';... + 'no_voxline_highlight', 0, 'bool', 'Doesn''t highlight corner axes of voxel lines.';... + 'invisible', 0, 'bool', 'Makes the figure invisible (for automatically saving afterwards).'}; + + parse_arguments + if (help_display) + return; + end + + + if clean + voxel_size = 0; + sphere_radius = 0; + no_axes = 1; + end + + +% End arguments % + + if happy_colours + + if inv_happy_colours + error('Can''t use ''-happy_colours'' and ''-inv_happy_colours'' simultaneously'); + end + + load('/home/tclose/Data/Tractography/misc/comb_happy_colours.mat'); + + elseif inv_happy_colours + + load('/home/tclose/Data/Tractography/misc/inv_comb_happy_colours.mat'); + + end + + [tck_sets, props, set_prop_keys, set_prop_values, elem_prop_keys, elem_prop_values] = load_tck_sets(tcks_filename, [], 1); + + num_sets = size(tck_sets,1); + + if last + + if ~isempty(dont_include) || ~isempty(include) + error('Error! -last cannot be used simultaneously with -include or -dont_include options'); + end + + include = size(tck_sets,1)-1; + + else + + if ~isempty(dont_include) + + if ~isempty(include) + error('Error! -include and -dont_include options cannot be used simultaneously'); + end + + include = 1:num_sets; + + include(dont_include) = []; + + include = include-1; + + end + + end + + if ~isempty(tck_include) + error('Cannot use ''tck_include'' and ''bundle_include simultaneously'); + end + + include = include + 1; + + + if properties_plot < 2 + + overall_max_bundle_index = 0; + + for set_i = 1:num_sets + + num_tcks = size(tck_sets{set_i},1); + + if size(elem_prop_keys,2) + prop_values = elem_prop_values{set_i}; + else + prop_values = []; + end + + bundle_indices = get_properties(elem_prop_keys, prop_values, 'bundle_index', [0:1:(num_tcks-1)]', num_tcks); + + max_bundle_index = max(bundle_indices); + + if max_bundle_index > overall_max_bundle_index + overall_max_bundle_index = max_bundle_index; + end + end + + set_bundle_colours(overall_max_bundle_index); + + %Set up the figure. + main_fig = my_figure(tcks_filename, 1, 3, [1 1 1], 1, [],[],~invisible); + + set(gcf, 'color', [0 0 0]); + + if no_axes + set(gca, 'visible', 'off') ; + else + label_handle = get(gca,'xlabel'); + set(label_handle, 'string', 'X-axis', 'color', [1 1 1]); + + label_handle = get(gca,'ylabel'); + set(label_handle, 'string', 'Y-axis', 'color', [1 1 1]); + + label_handle = get(gca,'zlabel'); + set(label_handle, 'string', 'Z-axis', 'color', [1 1 1]); + end + + daspect ([ 1 1 1 ]); + + add_sphere_to_plot(sphere_radius, props); + + if voxel_size ~= 0 + + add_vox_lines_to_plot(voxel_size,num_voxels,~no_voxline_highlight); + + end + + + light + lighting gouraud; + + + if isempty(include) + include = 1:num_sets; + end + + for set_i = include + + if size(elem_prop_keys,2) + prop_values = elem_prop_values{set_i}; + else + prop_values = []; + end + + tcks = tck_sets{set_i}; + + + if ~isempty(bundle_include) + + num_tcks = size(tcks,1); + + bundle_indices = get_properties(elem_prop_keys, prop_values, 'bundle_index', 1:num_tcks); + + tck_include = []; + + for tck_i = 1:num_tcks + if any(find(bundle_include == bundle_indices(tck_i))) + tck_include = [tck_include; tck_i]; %#ok + end + end + + if isempty(tck_include) + disp('Warning! No bundles matched the given indices, returning all tcks.'); + end + + end + + num_tcks = size(tcks,1); + + bundle_indices = get_properties(elem_prop_keys, prop_values, 'bundle_index', [0:1:(num_tcks-1)]', num_tcks); + radii = get_properties(elem_prop_keys, prop_values, 'tract_radius', tck_radius, num_tcks); + + + if ~isempty(tck_include) + + tcks = tcks(tck_include); + bundle_indices = bundle_indices(tck_include); + radii = radii(tck_include); + + end + + + if strfind('tubes', style) == 1 + + add_tcks_to_plot(tcks, radii, colours_of_bundles, bundle_indices, tube_corners); + + elseif strfind('lines', style) == 1 + + add_lines_to_plot(tcks, colours_of_bundles, bundle_indices); + + else + + error(['Urecogised style option ''' style '''.']); + + end + + daspect ([ 1 1 1 ]); + + end + + fprintf('\n'); + disp(['Plotted ' num2str(num_sets) ' tck sets.']); + + end + + if properties_plot > 0 && length(include) ~= 1 + + if exist([tcks_filename 'x']) + + ext_props_fig = plot_extend_elem_properties([tcks_filename 'x'], set_prop_keys, set_prop_values,include); + + end + end + + if (properties_plot == 1 || properties_plot == 3) && length(include) ~= 1 + if exist([tcks_filename 'xx']) + + ext_ext_props_fig = plot_extended_extend_elem_properties([tcks_filename 'xx'], elem_prop_keys, elem_prop_values, colours_of_bundles, include); + + end + + end + +end \ No newline at end of file diff --git a/matlab/plot_tcks.m b/matlab/plot_tcks.m new file mode 100644 index 0000000..83b45ee --- /dev/null +++ b/matlab/plot_tcks.m @@ -0,0 +1,239 @@ +function main_fig = plot_tcks(varargin) +% +% PURPOSE: Plots tcks from tcks files, and optionally displays reference sphere and voxels +% +% ARGUMENTS: +% +% tcks_filename The filename of the tcks in either .tck or .frr formats. +% +% OPTIONS (name, description, type, default): +% +% -tcks_radius +% Radii of the plotted tcks +% float +% 0.02 +% +% -num_points +% Number of points to plot along each tcks. +% int +% 100 +% +% -include +% The indices of the tcks to include in the plot +% matrix_:x: +% +% -bundle_include +% The indices of the bundles to include in the plot +% matrix_:x: +% +% -colours_of_bundles +% Colours of the plotted tcks +% matrix_:x3 +% +% -voxel_size +% Size of reference voxel +% float +% 0.15 +% +% -num_voxels +% Number of reference voxels +% int +% 3 +% +% -cube_size +% Size of reference voxel +% float +% 0 +% +% -style +% Plot to style (either 'tcks' or 'lines').. +% string +% 'tcks' +% +% -sphere_radius +% Size of reference sphere +% float +% 0 +% +% -no_axes +% Removes axes from plot +% bool +% 0 +% +% -clean +% Removes everything else from plot +% bool +% 0 +% +% -campos +% Position of the camera +% matrix_1x3 +% + + main_fig = -1; + + global colours_of_bundles; + + description = 'Plots tcks from tcks files, and optionally displays reference sphere and voxels'; + + arguments = {'tcks_filename', 'The filename of the tcks in either .tck or .frr formats.'}; + + options = {... + 'tcks_radius ', 0.02, 'float', 'Radii of the plotted tcks';... + 'num_points ', 100, 'int', 'Number of points to plot along each tcks.';... + 'include ', [], 'matrix_:x:', 'The indices of the tcks to include in the plot';... + 'bundle_include ', [], 'matrix_:x:', 'The indices of the bundles to include in the plot';... + 'colours_of_bundles', colours_of_bundles, 'matrix_:x3', 'Colours of the plotted tcks';... + 'voxel_size ', 0.15, 'float', 'Size of reference voxel';... + 'num_voxels ', 3, 'int', 'Number of reference voxels';... + 'cube_size ', 0, 'float', 'Size of reference voxel';... + 'style ', 'tubes', 'string', 'Plot to style (either ''tcks'' or ''lines'')..';... + 'sphere_radius ', 0, 'float', 'Size of reference sphere';... + 'no_axes', 0, 'bool', 'Removes axes from plot';... + 'tube_corners ', 6, 'int', 'Change plot to ''line style''.(NB: Only relevant with ''-num_strands'' option = 0).';... + 'clean', 0, 'bool', 'Removes everything else from plot';... + 'happy_colours', 0, 'bool', 'Uses ''happy colours''';... + 'inv_happy_colours', 0, 'bool', 'Uses the inverse of ''happy colours''';... + 'no_voxline_highlight', 0, 'bool', 'Doesn''t highlight corner axes of voxel lines.';... + 'campos', [], 'matrix_1x3', 'Position of the camera'}; + + + parse_arguments + if (help_display) + return; + end + + if clean + voxel_size = 0; + sphere_radius = 0; + no_axes = 1; + end + +% End arguments % + + if happy_colours + + if inv_happy_colours + error('Can''t use ''-happy_colours'' and ''-inv_happy_colours'' simultaneously'); + end + + load('/home/tclose/Data/Tractography/misc/comb_happy_colours.mat'); + + elseif inv_happy_colours + + load('/home/tclose/Data/Tractography/misc/inv_comb_happy_colours.mat'); + + end + + [tcks, props, prop_keys, prop_values] = load_tcks(tcks_filename); + + if ~isempty(bundle_include) + + num_tcks = size(tcks,1); + + if ~isempty(include) + error('Cannot use ''include'' and ''bundle_include simultaneously'); + end + + bundle_indices = get_properties(prop_keys, prop_values, 'bundle_index', 0:1:(num_tcks-1), num_tcks); + + for tcks_i = 1:num_tcks + if any(find(bundle_include == bundle_indices(tcks_i))) + include = [include; tcks_i]; %#ok + end + end + + if isempty(include) + disp('Warning! No bundles matched the given indices, returning all tcks.'); + end + + %To match 0 indexing + include = include - 1; + + end + + + if ~isempty(include) + + tcks = tcks(include+1); + prop_values = prop_values(include+1,:); + + end + + num_tcks = size(tcks,1); + + bundle_indices = get_properties(prop_keys, prop_values, 'bundle_index', [0:1:(num_tcks-1)]', num_tcks); + radii = get_properties(prop_keys, prop_values, 'tract_radius', tcks_radius, num_tcks); + + add_colour_key(bundle_indices,colours_of_bundles); + + %Set up the figure. + main_fig = my_figure(strrep(tcks_filename,'_','')); + + cameratoolbar('Show'); + cameratoolbar('SetMode','orbit'); + + if strfind('tubes', style) == 1 + + add_tcks_to_plot(tcks, radii, colours_of_bundles, bundle_indices, tube_corners); + + elseif strfind('lines', style) == 1 + + add_lines_to_plot(tcks, colours_of_bundles, bundle_indices); + + else + + error(['Urecogised style option ''' style '''.']); + + end + + + if sphere_radius ~= 0 + + add_sphere_to_plot(sphere_radius); + + end + + if voxel_size ~= 0 + + add_vox_lines_to_plot(voxel_size,num_voxels,~no_voxline_highlight); + + end + + + set(gcf, 'color', [0 0 0]); + + + if no_axes + + set(gca, 'visible', 'off'); + + else + + label_handle = get(gca,'xlabel'); + set(label_handle, 'string', 'X-axis', 'color', [1 1 1]); + + label_handle = get(gca,'ylabel'); + set(label_handle, 'string', 'Y-axis', 'color', [1 1 1]); + + label_handle = get(gca,'zlabel'); + set(label_handle, 'string', 'Z-axis', 'color', [1 1 1]); + + end + + if ~isempty(campos) + + set(gca,'CameraPosition',campos); + + end + + daspect ([ 1 1 1 ]); + + light + lighting gouraud; + + + fprintf('\n'); + disp(['Plotted ' num2str(num_tcks) ' tcks.']); + +end \ No newline at end of file diff --git a/matlab/plot_test.m b/matlab/plot_test.m new file mode 100644 index 0000000..8f6756e --- /dev/null +++ b/matlab/plot_test.m @@ -0,0 +1,166 @@ +function plot_test(varargin) +% +% PURPOSE: Plots the difference between the analytically calculated gradient and the numerically calculated gradient. +% +% ARGUMENTS: +% +% comparison_files The filename containing the comparison between the analytical and numerical gradients. +% +% OPTIONS (name, description, type, default): +% +% -style +% Style of the plot. +% string +% 'x' +% +% -marker_size +% Size of marker +% int +% 10 +% +% -line_width +% Width of line +% int +% 2 +% +% -param_include +% Parameters to include in the plots. +% matrix_1x: +% +% -test_include +% Tests to include in the plots. +% matrix_1x: + + + description = 'Plots the difference between the analytically calculated gradient and the numerically calculated gradient.'; + + arguments = {'comparison_files', 'The filename containing the comparison between the analytical and numerical gradients.'}; + + options = {... + 'style ', 'x', 'string', 'Style of the plot.';... + 'marker_size ', 10, 'int', 'Size of marker';... + 'line_width ', 2, 'int', 'Width of line';... + 'param_include', [], 'matrix_1x:', 'Parameters to include in the plots.';... + 'test_include', [], 'matrix_1x:', 'Tests to include in the plots.';... + }; + + + parse_arguments + if (help_display) + return; + end + +% End arguments % + + + extension = file_extension(comparison_files); + base = file_base(comparison_files); + + %Load numeric and analytic gradients in 'unzipped' (flattened into vectors) formats. + if strcmp(extension, 'str') + + [analytic, labels] = load_unzip_strands([base '.analytic.' extension]); + numeric = load_unzip_strands([base '.numeric.' extension']); + + elseif strcmp(extension, 'tct') + + [analytic, labels] = load_unzip_tracts([base '.analytic.tct']); + numeric = load_unzip_tracts([base '.numeric.' extension]); + + elseif strcmp(extension, 'sst') + + [analytic, labels] = load_unzip_strand_sets([base '.analytic.' extension]); + numeric = load_unzip_strand_sets([base '.numeric.' extension]); + + elseif strcmp(extension, 'tst') + + [analytic, labels] = load_unzip_tract_sets([base '.analytic.' extension]); + numeric = load_unzip_tract_sets([base '.numeric.' extension]); + + elseif strcmp(extension, 'ssc') + + [analytic, labels] = load_unzip_strand_sections([base '.analytic.' extension]); + numeric = load_unzip_strand_sections([base '.numeric.' extension]); + + elseif strcmp(extension, 'tsc') + + [analytic, labels] = load_unzip_tract_sections([base '.analytic.' extension]); + numeric = load_unzip_tract_sections([base '.numeric.' extension]); + + elseif strcmp(extension, 'trp') + + [analytic, labels] = load_unzip_triples([base '.analytic.' extension]); + numeric = load_unzip_triples([base '.numeric.' extension]); + + elseif strcmp(extension, 'mif') + + [analytic, labels] = load_unzip_image([base '.analytic.' extension]); + numeric = load_unzip_image([base '.numeric.' extension]); + + elseif strcmp(extension, 'tnr') + + base_extension = file_extension(base); + base_base = file_base(base); + + [analytic, labels] = load_unzip_tensor([base_base '.analytic.' base_extension '.' extension]); + numeric = load_unzip_tensor([base_base '.numeric.' base_extension '.' extension]); + + else + error(['Unrecognised extension ''' char(extension) '''.']); + end + + + %Ensure matrices are of the same size. + num_parameters = size(analytic,1); + + if num_parameters ~= size(numeric,1); + error (['Number of parameters in numeric matrix (' num2str(size(numeric,1)) ') does not match number in analytic matrix (' num2str(num_parameters) ').']); + end + + num_tests = size(analytic,2); + + if num_tests ~= size(numeric,2); + error (['Number of parameters in numeric matrix (' num2str(size(numeric,2)) ') does not match number in analytic matrix (' num2str(num_tests) ').']); + end + + %Set to display to all comparisons if not selection explicitly provided. + if isempty(param_include) + param_include = 1:num_parameters; + end + + if isempty(test_include) + test_include = 1:num_tests; + end + + num_param_include = length(param_include(:)); + + %Plot comparisons. + for param_index_i = 1:num_param_include + + param_index = param_include(param_index_i); + + numeric_param = numeric(param_index, test_include)'; + analytic_param = analytic(param_index, test_include)'; + + my_figure(labels{param_index}, param_index_i, num_param_include); + plot(numeric_param, analytic_param, style, 'MarkerSize', marker_size, 'LineWidth',line_width); + + set(get(gca,'xlabel'), 'string', 'numeric', 'color', [1 1 1]); + set(get(gca,'ylabel'), 'string', 'analytic', 'color', [1 1 1]); + + min_value = min([numeric_param; analytic_param]) * 1.1; + max_value = max([numeric_param; analytic_param]) * 1.1; + + hold on; + + plot([min_value; max_value], [min_value; max_value], '-', 'color', [0.7412 0.6549 0.9608]); + + hold off; + + end + + disp('') + disp(['Plotted ' num2str(num_tests) ' tests.']); + disp('') + +end diff --git a/matlab/plot_test_bed.m b/matlab/plot_test_bed.m new file mode 100644 index 0000000..888173e --- /dev/null +++ b/matlab/plot_test_bed.m @@ -0,0 +1,231 @@ +function plot_test_bed(varargin) +% +% PURPOSE: Plots probability landscape of Prob::TestPeaks function. +% +% ARGUMENTS: +% +% peaks_filename Filename containing the spike landscape to plot +% +% OPTIONS (name, description, type, default): +% +% -image_plot +% Image plot instead of surface. +% bool +% 0 +% +% -invert +% Invert the plot upside down. +% bool +% 0 +% +% -extent_of_plot +% Extent of the peaks to plot. +% float +% 15 +% +% -roi_radius +% The region of interest radius, after which the pdf drops off with the square of the distance +% float +% 15 +% +% -barrier_rate +% The rate at which it drops off +% float +% 0.3 +% +% -resolution +% Resolution of the grid +% float +% 1 +% +% -transparency +% Transparency of the plot. +% float +% 0.5 +% +% -samples_location +% Location of the samples to plot +% string +% '' +% +% -style_of_samples +% Style in which the samples will be plotted. +% string +% '-' +% +% -map_samples +% Map samples onto probability landscape. +% bool +% 0 +% +% -start_sample +% Highlight the start sample. +% bool +% 0 +% +% -mark_every_sample +% Mark every nth sample along path (only relevant for iteration plot). +% int +% 0 +% +% -include_samples +% Samples to include in the plots. +% matrix_1x: + + description = 'Plots probability landscape of Prob::TestPeaks function.'; + + arguments = {'samples_location', '', 'string', 'Location of the samples to plot'}; + + options = {... + 'image_plot' , 0, 'bool', 'Image plot instead of surface.';... + 'invert' , 0, 'bool', 'Invert the plot upside down.';... + 'extent_of_plot' , 2.5, 'float', 'Extent of the peaks to plot.';... + 'roi_radius' , 5, 'float', 'The region of interest radius, after which the density function drops off with the square of the distance';... + 'barrier_rate' , 0.3, 'float', 'The rate at which it drops off';... + 'resolution' , 0.1, 'float', 'Resolution of the grid';... + 'transparency' , 0.5, 'float', 'Transparency of the plot.';... + 'style_of_samples', '-', 'string', 'Style in which the samples will be plotted.';... + 'map_samples' , 0, 'bool', 'Map samples onto probability landscape.';... + 'start_sample' , 0, 'bool', 'Highlight the start sample.';... + 'mark_every_sample', 0, 'int', 'Mark every nth sample along path (only relevant for iteration plot).';... + 'include_samples' , [], 'matrix_1x:','Samples to include in the plots.';... + 'peaks_filename', '', 'string', 'Filename containing the spike landscape to plot';... + 'gauss_relative_scale', 1, 'float', 'Relative scale of the quadratic in the ''y'' dimension compared to the ''x'' dimension.';... + }; + + parse_arguments + if (help_display) + return; + end + +% End arguments % + + + grid_points = [-extent_of_plot:resolution:extent_of_plot]'; + + num_grid_points = size(grid_points,1); + + Prob = zeros(num_grid_points, num_grid_points); + + [X,Y] = meshgrid(grid_points, grid_points); + + + if isempty(peaks_filename) + + for x = 1:num_grid_points + + for y = 1:num_grid_points + + point = [grid_points(x) grid_points(y)]; + + Prob(x,y) = test_gaussian_log_prob(point, gauss_relative_scale); + + end + + end + + + else + + peaks = load(peaks_filename); + + for x = 1:num_grid_points + + for y = 1:num_grid_points + + point = [grid_points(x) grid_points(y)]; + + Prob(x,y) = test_peak_log_prob(point, peaks, roi_radius, barrier_rate); + + end + + end + + end + + my_figure(samples_location); + + + + h = surf(X,Y,Prob); + + set(h,'FaceAlpha', transparency); + + + cameratoolbar('Show'); + cameratoolbar('SetMode','orbit'); + + + + if ~isempty(samples_location) + + samples = load(samples_location); + + num_samples = size(samples,1); + + sample_probs = zeros(num_samples,1); + + if isempty(include_samples) + include_samples = 1:num_samples; + end + + if map_samples + + if ~isempty(peaks_filename) + sample_probs = test_peak_log_prob(samples(include_samples,:), peaks, roi_radius, barrier_rate); + else + sample_probs = test_gaussian_log_prob(samples(include_samples,:), gauss_relative_scale); + end + + end + + hold on; + + plot3(samples(include_samples,2), samples(include_samples,1), sample_probs,style_of_samples);% 'mo', 'MarkerEdgeColor', 'blue', 'MarkerFaceColor', 'blue', 'MarkerSize', 4); + + hold off; + + if start_sample + hold on; + + if map_samples + if ~isempty(peaks_filename) + start_prob = test_peak_log_prob(samples(1,:), peaks, roi_radius, barrier_rate); + else + start_prob = test_gaussian_log_prob(samples(1,:), gauss_relative_scale); + end + else + start_prob = 0; + end + + plot3(samples(1,2), samples(1,1), start_prob, 'md', 'MarkerEdgeColor', 'red', 'MarkerFaceColor', 'red', 'MarkerSize', 10); + + + hold off; + end + + if mark_every_sample + + if map_samples + + if ~isempty(peaks_filename) + mark_probs = test_peak_log_prob(samples(1:mark_every_sample:num_samples,:), peaks, roi_radius, barrier_rate); + else + mark_probs = test_gaussian_log_prob(samples(1:mark_every_sample:num_samples,:), gauss_relative_scale); + end + + else + mark_probs = zeros(size([1:mark_every_sample:num_samples]')); + end + + hold on; + + plot3(samples(1:mark_every_sample:num_samples,2), samples(1:mark_every_sample:num_samples,1), mark_probs, 'mo', 'MarkerEdgeColor', 'magenta', 'MarkerFaceColor', 'magenta', 'MarkerSize', 5); + + hold off; + + end + + end + +end \ No newline at end of file diff --git a/matlab/plot_test_gradient.m b/matlab/plot_test_gradient.m new file mode 100644 index 0000000..1d8c345 --- /dev/null +++ b/matlab/plot_test_gradient.m @@ -0,0 +1,635 @@ +function plot_test_gradient(varargin) +% +% PURPOSE: Plots the difference between the analytically calculated gradient and the numerically calculated gradient. +% +% ARGUMENTS: +% +% comparison_files The filename containing the comparison between the analytical and numerical gradients. +% +% OPTIONS (name, description, type, default): +% +% -style +% Style of the plot. +% string +% 'x' +% +% -marker_size +% Size of marker +% int +% 10 +% +% -line_width +% Width of line +% int +% 2 +% +% -include +% Samples to include in the plots. +% matrix_1x: + + + description = 'Plots the difference between the analytically calculated gradient and the numerically calculated gradient.'; + + arguments = {'comparison_files', 'The filename containing the comparison between the analytical and numerical gradients.'}; + + options = {... + 'style ', 'x', 'string', 'Style of the plot.';... + 'marker_size ', 10, 'int', 'Size of marker';... + 'line_width ', 2, 'int', 'Width of line';... + 'include ', [], 'matrix_1x:', 'Samples to include in the plots.';... + }; + + + parse_arguments + if (help_display) + return; + end + +% End arguments % + + + file_parts = regexp(comparison_files, '\.', 'split'); + + extension = file_parts(end); + base = cat(2,file_parts{1:end-1}); + + + + if strcmp(extension, 'str') + + analytic = load_strands([base '.analytic.str']); + numeric = load_strands([base '.numeric.str']); + + num_strands = size(analytic,1); + + if num_strands == 0 + error ('No strands loaded.'); + end + + num_degree = length(analytic{1}); + + if num_strands ~= size(numeric,1) + error(['Size of numeric gradient (' num2str(size(numeric,1)) ') did not match size of analytic gradient (' num2str(num_strands) ').']); + end + + if isempty(include) + include = 1:num_strands; + end + + num_include = length(include); + + degrees = cell(num_degree); + + for degree_i = 1:num_degree + degrees{degree_i} = zeros(3*num_include,2); + end + + for strand_i = include + + analytic_strand = analytic{strand_i}; + numeric_strand = numeric{strand_i}; + + start_index = (strand_i-1)*3 + 1; + end_index = start_index+2; + + for degree_i = 1:num_degree + + degrees{degree_i}(start_index:end_index,1) = numeric_strand(degree_i,:)'; + degrees{degree_i}(start_index:end_index,2) = analytic_strand(degree_i,:)'; + + + end + + + end + + + for degree_i = 1:num_degree + + degree = degrees{degree_i}; + + my_figure([comparison_files '- degree ' num2str(degree_i-1)], degree_i, num_degree, []); + h = plot(degree(:,1), degree(:,2), style, 'MarkerSize', marker_size, 'LineWidth',line_width); + + set(get(gca,'xlabel'), 'string', 'numeric', 'color', [1 1 1]); + set(get(gca,'ylabel'), 'string', 'analytic', 'color', [1 1 1]); + + min_value = min(min(degree)) * 1.1; + max_value = max(max(degree)) * 1.1; + + hold on; + + plot([min_value; max_value], [min_value; max_value], '-', 'color', [0.7412 0.6549 0.9608]); + + hold off; + + end + + + elseif strcmp(extension, 'sst') + + analytic = load_strand_sets([base '.analytic.sst']); + numeric = load_strand_sets([base '.numeric.sst']); + + num_sets = size(analytic,1); + + if num_sets == 0 + error('No sets loaded.'); + elseif size(analytic{1},1) == 0 + error ('Loaded have size 0.'); + end + + num_degree = size(analytic{1}{1},1); + + if num_sets ~= size(numeric,1) + error(['Size of numeric gradient (' num2str(size(numeric,1)) ') did not match size of analytic gradient (' num2str(num_sets) ').']); + end + + if isempty(include) + include = 1:num_sets; + end + + num_include = length(include); + + degrees = cell(num_degree,1); + + for degree_i = 1:num_degree + degrees{degree_i} = zeros(3*num_include,2); + end + + + start_index = 1; + + for set_i = include + + analytic_set = analytic{set_i}; + numeric_set = numeric{set_i}; + + num_strands = size(analytic_set,1); + + if (num_strands ~= size(numeric_set,1)) + error (['Size of numeric gradient, ' num2str(size(numeric_set,1)) ' in set ' num2str(set_i) ' does not match analytic gradient, ' num2str(num_strands) '.']); + end + + for strand_i = 1:num_strands + + analytic_strand = analytic_set{strand_i}; + numeric_strand = numeric_set{strand_i}; + + for degree_i = 1:num_degree + + degrees{degree_i}(start_index:(start_index+2),1) = numeric_strand(degree_i,:)'; + degrees{degree_i}(start_index:(start_index+2),2) = analytic_strand(degree_i,:)'; + + end + + start_index = start_index + 3; + end + + end + + size(degrees{1}) + + for degree_i = 1:num_degree + + degree = degrees{degree_i}; + + my_figure([comparison_files '- degree ' num2str(degree_i-1)], degree_i, num_degree, []); + h = plot(degree(:,1), degree(:,2), style, 'MarkerSize', marker_size, 'LineWidth',line_width); + + set(get(gca,'xlabel'), 'string', 'numeric', 'color', [1 1 1]); + set(get(gca,'ylabel'), 'string', 'analytic', 'color', [1 1 1]); + + min_value = min(min(degree)) * 1.1; + max_value = max(max(degree)) * 1.1; + + hold on; + + plot([min_value; max_value], [min_value; max_value], '-', 'color', [0.7412 0.6549 0.9608]); + + hold off; + + end + + elseif strcmp(extension, 'tst') + + analytic = load_tract_sets([base '.analytic.tst']); + numeric = load_tract_sets([base '.numeric.tst']); + + num_sets = size(analytic,1); + + if num_sets == 0 + error('No sets loaded.'); + elseif size(analytic{1},1) == 0 + error ('Loaded have size 0.'); + end + + num_degree = size(analytic{1}{1},1); + + if num_sets ~= size(numeric,1) + error(['Size of numeric gradient (' num2str(size(numeric,1)) ') did not match size of analytic gradient (' num2str(num_sets) ').']); + end + + if isempty(include) + include = 1:num_sets; + end + + num_include = length(include); + + degrees = cell([3,num_degree]); + + for strand_i = 1:3 + for degree_i = 1:num_degree + degrees{strand_i, degree_i} = zeros(3*num_include,2); + end + end + + start_index = 1; + + for set_i = include + + analytic_set = analytic{set_i}; + numeric_set = numeric{set_i}; + +% num_strands = size(analytic_set,1); + + + for strand_i = 1:3 + + analytic_strand = analytic_set{strand_i}; + numeric_strand = numeric_set{strand_i}; + + for degree_i = 1:num_degree + + degrees{strand_i,degree_i}(start_index:(start_index+2),1) = numeric_strand(degree_i,:)'; + degrees{strand_i,degree_i}(start_index:(start_index+2),2) = analytic_strand(degree_i,:)'; + + end + + start_index = start_index + 3; + end + + end + + size(degrees{1}) + + for strand_i = 1:3 + for degree_i = 1:num_degree + + degree = degrees{strand_i, degree_i}; + + my_figure([comparison_files '- axis ' num2str(strand_i) ' degree ' num2str(degree_i-1)], (strand_i-1)*num_degree + degree_i, 3 * num_degree, []); + h = plot(degree(:,1), degree(:,2), style, 'MarkerSize', marker_size, 'LineWidth',line_width); + + set(get(gca,'xlabel'), 'string', 'numeric', 'color', [1 1 1]); + set(get(gca,'ylabel'), 'string', 'analytic', 'color', [1 1 1]); + + min_value = min(min(degree)) * 1.1; + max_value = max(max(degree)) * 1.1; + + hold on; + + plot([min_value; max_value], [min_value; max_value], '-', 'color', [0.7412 0.6549 0.9608]); + + hold off; + + end + end + + elseif strcmp(extension, 'tct') + + analytic = load_tracts([base '.analytic.tct']); + numeric = load_tracts([base '.numeric.tct']); + + num_tracts = size(analytic,1); + + if num_tracts == 0 + error ('No tracts loaded.'); + end + + num_degree = length(analytic{1,1}); + + if num_tracts ~= size(numeric,1) + error(['Size of numeric gradient (' num2str(size(numeric,1)) ') did not match size of analytic gradient (' num2str(num_tracts) ').']); + end + + if isempty(include) + include = 1:num_tracts; + end + + num_include = length(include); + + axis_degrees = cell(3,num_degree); + + for axis_i = 1:3 + for degree_i = 1:num_degree + axis_degrees{axis_i, degree_i} = zeros(3*num_include,2); + end + end + + for tract_i = include + + start_index = (tract_i-1)*3 + 1; + end_index = start_index+2; + + for axis_i = 1:3 + + analytic_strand = analytic{tract_i, axis_i}; + numeric_strand = numeric{tract_i, axis_i}; + + + for degree_i = 1:num_degree + + axis_degrees{axis_i, degree_i}(start_index:end_index,1) = analytic_strand(degree_i,:)'; + axis_degrees{axis_i, degree_i}(start_index:end_index,2) = numeric_strand(degree_i,:)'; + + + end + + end + + end + + for axis_i = 1:3 + for degree_i = 1:num_degree + + degree = axis_degrees{axis_i, degree_i}; + + my_figure([comparison_files '- Axis ' num2str(axis_i) ', Degree ' num2str(degree_i)], (axis_i-1)*num_degree + degree_i, 3 * num_degree, []); + h = plot(degree(:,1), degree(:,2), style, 'MarkerSize', marker_size, 'LineWidth',line_width); + + set(get(gca,'xlabel'), 'string', 'numeric', 'color', [1 1 1]); + set(get(gca,'ylabel'), 'string', 'analytic', 'color', [1 1 1]); + + min_value = min(min(degree)) * 1.1; + max_value = max(max(degree)) * 1.1; + + hold on; + + plot([min_value; max_value], [min_value; max_value], '-', 'color', [0.7412 0.6549 0.9608]); + + hold off; + + end + end + + + elseif strcmp(extension, 'trp') + + analytic = load_triples([base '.analytic.trp']); + numeric = load_triples([base '.numeric.trp']); + + + num_triples = size(analytic,1); + + if num_triples ~= size(numeric,1) + error(['Size of numeric gradient (' num2str(size(numeric,1)) ') did not match size of analytic gradient (' num2str(num_triples) ').']); + end + + + if isempty(include) + include = 1:num_triples; + end + + num_include = length(include); + + for dim_i = 1:3 + + my_figure([comparison_files ' - Dim ' num2str(dim_i) '.'], dim_i, 3, []); + + h = plot(analytic(include,dim_i), numeric(include,dim_i), style, 'MarkerSize', marker_size, 'LineWidth',line_width); + + set(get(gca,'xlabel'), 'string', 'numeric', 'color', [1 1 1]); + set(get(gca,'ylabel'), 'string', 'analytic', 'color', [1 1 1]); + + min_value = min(min([ analytic(include,dim_i) numeric(include,dim_i)])) * 1.1; + max_value = max(max([ analytic(include,dim_i) numeric(include,dim_i)])) * 1.1; + + hold on; + + plot([min_value; max_value], [min_value; max_value], '-', 'color', [0.7412 0.6549 0.9608]); + + hold off; + + end + + elseif strcmp(extension, 'ssc') + + analytic = load_strand_sections([base '.analytic.ssc']); + numeric = load_strand_sections([base '.numeric.ssc']); + + + num_sections = size(analytic,1); + + if num_sections ~= size(numeric,1) + error(['Size of numeric gradient (' num2str(size(numeric,1)) ') did not match size of analytic gradient (' num2str(num_segments) ').']); + end + + + if isempty(include) + include = 1:num_sections; + end + + num_include = length(include); + + + position_and_tangent = cell(2); + + for pos_or_tang = 1:2 + position_and_tangent{pos_or_tang} = zeros(3*num_include,2); + end + + for section_i = include + + start_index = (section_i-1)*3 + 1; + end_index = start_index+2; + + for pos_or_tang = 1:2 + + position_and_tangent{pos_or_tang}(start_index:end_index,1) = numeric{section_i}(pos_or_tang,:)'; + position_and_tangent{pos_or_tang}(start_index:end_index,2) = analytic{section_i}(pos_or_tang,:)'; + + + end + + + end + + + + for pos_or_tang = 1:2 + + position_or_tangent = position_and_tangent{pos_or_tang}; + + if (pos_or_tang == 1) + title_string = [comparison_files ' - Position.']; + else + title_string = [comparison_files ' - Tangent.']; + end + + my_figure(title_string, pos_or_tang, 2, []); + + h = plot(position_or_tangent(:,1), position_or_tangent(:,2), style, 'MarkerSize', marker_size, 'LineWidth',line_width); + + set(get(gca,'xlabel'), 'string', 'numeric', 'color', [1 1 1]); + set(get(gca,'ylabel'), 'string', 'analytic', 'color', [1 1 1]); + + min_value = min(min(position_or_tangent)) * 1.1; + max_value = max(max(position_or_tangent)) * 1.1; + + hold on; + + plot([min_value; max_value], [min_value; max_value], '-', 'color', [0.7412 0.6549 0.9608]); + + hold off; + + end + + elseif strcmp(extension, 'tsc') + + analytic = load_tract_sections([base '.analytic.tsc']); + numeric = load_tract_sections([base '.numeric.tsc']); + + + num_sections = size(analytic,1); + + if num_sections ~= size(numeric,1) + error(['Size of numeric gradient (' num2str(size(numeric,1)) ') did not match size of analytic gradient (' num2str(num_sections) ').']); + end + + + if isempty(include) + include = 1:num_sections; + end + + num_include = length(include); + + + section_components = cell(4); + + for comp_i = 1:4 + section_components{comp_i} = zeros(3*num_include,2); + end + + for section_i = include + + start_index = (section_i-1)*3 + 1; + end_index = start_index+2; + + for comp_i = 1:4 + + section_components{comp_i}(start_index:end_index,1) = numeric{section_i}(comp_i,:)'; + section_components{comp_i}(start_index:end_index,2) = analytic{section_i}(comp_i,:)'; + + end + + + end + + + + for comp_i = 1:4 + + component = section_components{comp_i}; + + if (comp_i == 1) + title_string = [comparison_files ' - Position.']; + elseif comp_i == 2 + title_string = [comparison_files ' - Tangent.']; + elseif comp_i == 3 + title_string = [comparison_files ' - Width1.']; + else + title_string = [comparison_files ' - Width2.']; + end + + my_figure(title_string, comp_i, 4, []); + + h = plot(component(:,1), component(:,2), style, 'MarkerSize', marker_size, 'LineWidth',line_width); + + set(get(gca,'xlabel'), 'string', 'numeric', 'color', [1 1 1]); + set(get(gca,'ylabel'), 'string', 'analytic', 'color', [1 1 1]); + + min_value = min(min(component)) * 1.1; + max_value = max(max(component)) * 1.1; + + hold on; + + plot([min_value; max_value], [min_value; max_value], '-', 'color', [0.7412 0.6549 0.9608]); + + hold off; + + end + + + elseif strcmp(extension, 'mif') + + analytic_struct = read_image([base '.analytic.mif']); + numeric_struct = read_image([base '.numeric.mif']); + + analytic = analytic_struct.data; + numeric = numeric_struct.data; + + num_include = size(analytic,1) * size(analytic,2) * size(analytic,3) * size(analytic,4); + + analytic = reshape(analytic, num_include, 1); + numeric = reshape(numeric, num_include, 1); + + min_value = min(min([ analytic numeric])) * 1.1; + max_value = max(max([ analytic numeric])) * 1.1; + + my_figure([comparison_files], []); + + h = plot(analytic, numeric, style, 'MarkerSize', marker_size, 'LineWidth',line_width); + + set(get(gca,'xlabel'), 'string', 'numeric', 'color', [1 1 1]); + set(get(gca,'ylabel'), 'string', 'analytic', 'color', [1 1 1]); + + min_value = min(min([ analytic numeric])) * 1.1; + max_value = max(max([ analytic numeric])) * 1.1; + + hold on; + + plot([min_value; max_value], [min_value; max_value], '-', 'color', [0.7412 0.6549 0.9608]); + + hold off; + + elseif strcmp(extension, 'tes') + + analytic = load([base '.analytic.tes']); + numeric = load([base '.numeric.tes']); + + num_include = size(analytic,1); + + + for dim_i = 1:2 + + min_value = min(min([analytic(:,dim_i) numeric(:,dim_i)])) * 1.1; + max_value = max(max([analytic(:,dim_i) numeric(:,dim_i)])) * 1.1; + + my_figure([comparison_files ' - dim ' num2str(dim_i)], dim_i, 2, []); + + h = plot(analytic(:,dim_i), numeric(:,dim_i), style, 'MarkerSize', marker_size, 'LineWidth',line_width); + + set(get(gca,'xlabel'), 'string', 'numeric', 'color', [1 1 1]); + set(get(gca,'ylabel'), 'string', 'analytic', 'color', [1 1 1]); + + min_value = min(min([ analytic(:,dim_i) numeric(:,dim_i)])) * 1.1; + max_value = max(max([ analytic(:,dim_i) numeric(:,dim_i)])) * 1.1; + + hold on; + + plot([min_value; max_value], [min_value; max_value], '-', 'color', [0.7412 0.6549 0.9608]); + + hold off; + end + + else + error(['Unrecognised extension ''' char(extension) '''.']); + end + + + fprintf('\n'); + disp(['Plotted ' num2str(num_include) ' comparisons.']); + + +end diff --git a/matlab/plot_test_peaks.m b/matlab/plot_test_peaks.m new file mode 100644 index 0000000..9a10a11 --- /dev/null +++ b/matlab/plot_test_peaks.m @@ -0,0 +1,195 @@ +function plot_test_peaks(varargin) +% +% PURPOSE: Plots probability landscape of Prob::TestPeaks function. +% +% ARGUMENTS: +% +% peaks_filename Filename containing the spike landscape to plot +% +% OPTIONS (name, description, type, default): +% +% -image_plot +% Image plot instead of surface. +% bool +% 0 +% +% -invert +% Invert the plot upside down. +% bool +% 0 +% +% -extent_of_plot +% Extent of the peaks to plot. +% float +% 15 +% +% -roi_radius +% The region of interest radius, after which the pdf drops off with the square of the distance +% float +% 15 +% +% -barrier_rate +% The rate at which it drops off +% float +% 0.3 +% +% -resolution +% Resolution of the grid +% float +% 1 +% +% -transparency +% Transparency of the plot. +% float +% 0.5 +% +% -samples_location +% Location of the samples to plot +% string +% '' +% +% -style_of_samples +% Style in which the samples will be plotted. +% string +% '-' +% +% -map_samples +% Map samples onto probability landscape. +% bool +% 0 +% +% -start_sample +% Highlight the start sample. +% bool +% 0 +% +% -mark_every_sample +% Mark every nth sample along path (only relevant for iteration plot). +% int +% 0 +% +% -include_samples +% Samples to include in the plots. +% matrix_1x: + + description = 'Plots probability landscape of Prob::TestPeaks function.'; + + arguments = {'peaks_filename', 'Filename containing the spike landscape to plot'}; + + options = {... + 'image_plot' , 0, 'bool', 'Image plot instead of surface.';... + 'invert' , 0, 'bool', 'Invert the plot upside down.';... + 'extent_of_plot' , 15, 'float', 'Extent of the peaks to plot.';... + 'roi_radius' , 15, 'float', 'The region of interest radius, after which the pdf drops off with the square of the distance';... + 'barrier_rate' , 0.3, 'float', 'The rate at which it drops off';... + 'resolution' , 1, 'float', 'Resolution of the grid';... + 'transparency' , 0.5, 'float', 'Transparency of the plot.';... + 'samples_location', '', 'string', 'Location of the samples to plot';... + 'style_of_samples', '-', 'string', 'Style in which the samples will be plotted.';... + 'map_samples' , 0, 'bool', 'Map samples onto probability landscape.';... + 'start_sample' , 0, 'bool', 'Highlight the start sample.';... + 'mark_every_sample', 0, 'int', 'Mark every nth sample along path (only relevant for iteration plot).';... + 'include_samples' , [], 'matrix_1x:','Samples to include in the plots.';... + }; + + parse_arguments + if (help_display) + return; + end + +% End arguments % + + peaks = load(peaks_filename); + + grid_points = [-extent_of_plot:resolution:extent_of_plot]'; + + num_grid_points = size(grid_points,1); + + Prob = zeros(num_grid_points, num_grid_points); + + [X,Y] = meshgrid(grid_points, grid_points); + + for x = 1:num_grid_points + + for y = 1:num_grid_points + + point = [grid_points(x) grid_points(y)]; + + Prob(x,y) = test_peak_log_prob(point, peaks, roi_radius, barrier_rate); + + end + + end + + my_figure(peaks_filename); + + + + h = surf(X,Y,Prob); + + set(h,'FaceAlpha', transparency); + + + cameratoolbar('Show'); + cameratoolbar('SetMode','orbit'); + + + + if ~isempty(samples_location) + + samples = load(samples_location); + + num_samples = size(samples,1); + + sample_probs = zeros(num_samples,1); + + if isempty(include_samples) + include_samples = 1:num_samples; + end + + if map_samples + + sample_probs = test_peak_log_prob(samples(include_samples,:), peaks, roi_radius, barrier_rate); + + end + + hold on; + + plot3(samples(include_samples,2), samples(include_samples,1), sample_probs,style_of_samples);% 'mo', 'MarkerEdgeColor', 'blue', 'MarkerFaceColor', 'blue', 'MarkerSize', 4); + + hold off; + + if start_sample + hold on; + + if map_samples + start_prob = test_peak_log_prob(samples(1,:), peaks, roi_radius, barrier_rate); + else + start_prob = 0; + end + + plot3(samples(1,2), samples(1,1), start_prob, 'md', 'MarkerEdgeColor', 'red', 'MarkerFaceColor', 'red', 'MarkerSize', 10); + + + hold off; + end + + if mark_every_sample + + if map_samples + mark_probs = test_peak_log_prob(samples(1:mark_every_sample:num_samples,:), peaks, roi_radius, barrier_rate); + else + mark_probs = zeros(size([1:mark_every_sample:num_samples]')); + end + + hold on; + + plot3(samples(1:mark_every_sample:num_samples,2), samples(1:mark_every_sample:num_samples,1), mark_probs, 'mo', 'MarkerEdgeColor', 'blue', 'MarkerFaceColor', 'blue', 'MarkerSize', 4); + + hold off; + + end + + end + +end \ No newline at end of file diff --git a/matlab/plot_test_scan.m b/matlab/plot_test_scan.m new file mode 100644 index 0000000..30e9a47 --- /dev/null +++ b/matlab/plot_test_scan.m @@ -0,0 +1,237 @@ +function plot_scan(varargin) +% +% PURPOSE: Plots the output of 'scan_strands' +% +% ARGUMENTS: +% +% scan_filename The filename of the '.mif', '.sst', or '.tst' scan_image containing the scan. +% +% OPTIONS (name, description, type, default): +% +% -scale_range +% The range of the colour scale plot. +% matrix_1x2 +% +% -state_filename +% Filename of the states to overlay on the surface plot. +% string +% '' +% +% -include_states +% States to include in plot. +% matrix_:x: +% +% -mark_rand_samples +% Mark samples where the momentum is randomized. +% bool +% 0 +% +% -highlight_samples +% Highlight selected samples with a larger marker +% matrix_:x: +% +% -image +% Plot as a flat image instead of a surface. +% bool +% 0 +% +% -exponential +% Change plot to display the probability instead of the log probability. +% bool +% 0 +% +% -offset +% Offset the values by a constant amount (used in conjunction with '-exponential'). +% float +% 0 +% +% -transparency +% The transparency of the surface. +% float +% 0.5 + + + description = 'Plots the output of ''scan_strands'''; + + arguments = {'scan_filename', 'The filename of the ''.mif'', ''.sst'', or ''.tst'' scan_image containing the scan.'}; + + options = {... + 'scale_range ', [], 'matrix_1x2', 'The range of the colour scale plot.';... + 'state_filename ', '', 'string' , 'Filename of the states to overlay on the surface plot.';... + 'include_states ', [], 'matrix_:x:', 'States to include in plot.';... + 'mark_rand_samples', 1, 'bool', 'Mark samples where the momentum is randomized.';... + 'highlight_samples', [], 'matrix_:x:', 'Highlight selected samples with a larger marker';... + 'image_plot ', 0, 'bool' , 'Plot as a flat image instead of a surface.';... + 'map_to_surface ', 0, 'bool' , 'Maps the probabilities on the surfaces of the scans, representing the probability due to that dimension.';... + 'exponential ', 0, 'bool' , 'Change plot to display the probability instead of the log probability.';... + 'offset ', 0, 'float' , 'Offset the values by a constant amount (used in conjunction with ''-exponential'').';... + 'transparency ', 0.5, 'float' , 'The transparency of the surface.';... + }; + + + multiple_last_arguments = 0; + + parse_arguments + if (help_display) + return; + end + +% End arguments % + + figure_name = strrep(scan_filename,'_',' '); + + if exponential + figure_name = [figure_name ' - Probability']; + else + figure_name = [figure_name ' - Log Probability']; + end + + + %If 2d scan + if ~strcmp(file_extension(scan_filename), 'mif') + error(['Unrecognised file_extension, ''' file_extension(scan_filename) '''.']); + end + + scan_image = read_image(scan_filename); + + if ~isfield(scan_image, 'data') + error(['Could not load scan_image from ' scan_filename ]); + end + + axis1_scale = str2num(scan_image.axis1_scale); + axis2_scale = str2num(scan_image.axis2_scale); + + scan_range1 = [-axis1_scale:2*axis1_scale/(scan_image.dim(1)-1):axis1_scale]; + scan_range2 = [-axis2_scale:2*axis2_scale/(scan_image.dim(2)-1):axis2_scale]; + + if offset > 0 + scan_image.data = scan_image.data + offset; + end + + if exponential + scan_image.data = exp(scan_image.data); + end + + + %Plot as a flat image. + if image_plot + + my_figure(figure_name); + + if isempty(scale_range) + imagesc(scan_range1, scan_range2, scan_image.data); + else + imagesc(scan_range1, scan_range2, scan_image.data, scale_range); + end + + colorbar; + + %Else plot as a surface. + else + + [X,Y] = meshgrid(scan_range1, scan_range2); + + my_figure(figure_name, 1, 1, [], 1); + + h = surf(X, Y, scan_image.data); + + + if transparency ~= 1 + set(h,'FaceAlpha', transparency); + end + + %If states provided (i.e. a MCMC sequence) plot projection on to + %scan slice. + if ~isempty(state_filename) + + trans_data = scan_image.data'; + + iter_filename = [file_base(state_filename) '.iter.' file_extension(state_filename)]; + + if exist(iter_filename) + states = load(iter_filename); + else + states = load(state_filename); + end + + props = read_properties([state_filename '.prp']); + + num_states = size(states,1); + + proj1 = states(:,1) ./ str2num(scan_image.axis1_scale); + proj2 = states(:,2) ./ str2num(scan_image.axis2_scale); + px = zeros(num_states,1); + + %If map_to_surface option is selected, map probability values via + %bilinear interpolation to scan surface. + if map_to_surface + + for state_i = 1:num_states + + if (proj1(state_i) >= -1) && (proj1(state_i) <= 1) && (proj2(state_i) >= -1) && (proj2(state_i) <= 1) + + index1 = (scan_image.dim(1)-1) * (proj1(state_i) + 1)/2 + 1; + index2 = (scan_image.dim(2)-1) * (proj2(state_i) + 1)/2 + 1; + + low1 = floor(index1); + high1 = ceil(index1); + frac1 = rem(index1,1); + + low2 = floor(index2); + high2 = ceil(index2); + frac2 = rem(index2,1); + + px(state_i) = (1-frac2) * ((1-frac1) * trans_data(low1, low2) + frac1 * trans_data(high1, low2)) + ... + frac2 * ((1-frac1) * trans_data(low1, high2) + frac1 * trans_data(high1, high2)); + + end + + end + + state_plot_colour = [1 0.5 1]; + + else + + state_plot_colour = 'yellow'; + + end + + + hold on; + + + plot3(states(:,1), states(:,2), px, 'Color', state_plot_colour); + + plot3(states(1,1), states(1,2), px(1), 'md', 'MarkerEdgeColor', 'red', 'MarkerFaceColor', 'red', 'MarkerSize', 10); + + if mark_rand_samples + + sample_period = str2double(props.sample_period); + + mark_samples = sample_period:sample_period:num_states; + + plot3(states(mark_samples,1), states(mark_samples,2), px(mark_samples), 'mo', 'MarkerEdgeColor', 'blue', 'MarkerFaceColor', 'blue', 'MarkerSize', 5); + + end + + if ~isempty(highlight_samples) + + highlight_samples = highlight_samples + 1; + + highlight_samples = highlight_samples(highlight_samples < num_states); + + plot3(states(highlight_samples,1), states(highlight_samples,2), px(highlight_samples), 'md', 'MarkerEdgeColor', 'green', 'MarkerFaceColor', 'green', 'MarkerSize', 8); + + end + + hold off + + end + + end + + xlabel('Axis 1'); + ylabel('Axis 2'); + + +end diff --git a/matlab/plot_tract_sets.m b/matlab/plot_tract_sets.m new file mode 100644 index 0000000..4cd46e1 --- /dev/null +++ b/matlab/plot_tract_sets.m @@ -0,0 +1,436 @@ +function main_fig = plot_tracts_sets(varargin) +% +% PURPOSE: Plots strands from strand files, and optionally displays reference sphere and voxels +% +% ARGUMENTS: +% +% tracts_filename The filename of the tracts ('.tct' format). +% +% OPTIONS (name, description, type, default): +% +% -include +% The indices of the samples to include in the plot +% matrix_:x: +% +% -last +% Overrides '-include' to only print the last tract set. +% bool +% 0 +% +% -tract_include +% The indices of the tracts to include in the plot +% matrix_:x: +% +% -colours_of_bundles +% Colours of the plotted strands +% matrix_:x3 +% +% -voxel_size +% Size of reference voxel +% float +% 0.15 +% +% -num_voxels +% Number of reference voxels +% int +% 3 +% +% -cube_size +% Size of reference voxel +% float +% 0 +% +% -strand_radius +% Radii of the plotted strands. (NB: can only be used with '-style' option 'strands'). +% float +% 0.02 +% +% -style +% Change plot to 'line style'.(NB: Only relevant with '-num_width_sections' option > 0). +% string +% 'tracts' +% +% -tube_corners +% Set the number of tube corners for 'tracts' style. +% int +% 12 +% +% -num_length_sections +% Number of samples along the length of the tracts. +% int +% 100 +% +% -properties_plot +% Do, don't or only plot the extended properties associated with the tract set (0 -> don't plot properties, 1 -> plot properties, 2 -> only plot properties). +% int +% 1 +% +% -new_plot +% Plots strands in new figures for comparision +% bool +% 0 +% +% -transparency +% Fix the transparency of the tracts to a set value. If 0 the intensities of the of the tracts are used instead. +% float +% 1 +% +% -sphere_radius +% Size of reference sphere +% float +% 0 + + main_fig = -1; + + global colours_of_bundles; + + description = 'Plots strands from strand files, and optionally displays reference sphere and voxels'; + + arguments = {'tracts_filename', 'The filename of the tracts (''.tct'' format).'}; + + options = {... + 'include ', [], 'matrix_:x:', 'The indices of the samples to include in the plot';... + 'dont_include ', [], 'matrix_:x:', 'The indices of the samples not to include in the plot';... + 'last', 0, 'bool', 'Overrides ''-include'' to only print the last tract set.';... + 'tract_include ', [], 'matrix_:x:', 'The indices of the tracts to include in the plot';... + 'colours_of_bundles', colours_of_bundles, 'matrix_:x3', 'Colours of the plotted strands';... + 'voxel_size ', 0.15, 'float', 'Size of reference voxel';... + 'num_voxels ', -1, 'int', 'Number of reference voxels';... + 'cube_size ', 0, 'float', 'Size of reference voxel';... + 'strand_radius ', 0.02, 'float', 'Radii of the plotted strands. (NB: can only be used with ''-style'' option ''strands'').';... + 'style ', 'tracts', 'string', 'Change plot to ''line style''.(NB: Only relevant with ''-num_width_sections'' option > 0).';... + 'tube_corners ', 12, 'int', 'Set the number of tube corners for ''tracts'' style.';... + 'num_length_sections', 100, 'int', 'Number of samples along the length of the tracts.';... + 'properties_plot', 0, 'int', 'Do, don''t or only plot the extended properties associated with the tract set (0 -> don''t plot properties, 1 -> plot properties, 2 -> only plot properties).';... + 'new_plot', 0, 'bool', 'Plots strands in new figures for comparision';... + 'transparency' ,1, 'float', 'Fix the transparency of the tracts to a set value. If 0 the intensities of the of the tracts are used instead.';... + 'sphere_radius ', 0, 'float', 'Size of reference sphere';... + 'no_axes', 0, 'bool', 'Removes axes from plot';... + 'num_width_sections ', -1, 'int', 'Number of strands to plot along each axis. If zero the default 3D surface option will be used instead.';... + 'clean', 0, 'bool', 'Removes everything else from plot';... + 'no_voxline_highlight', 0, 'bool', 'Doesn''t highlight corner axes of voxel lines.';... + 'oblong', 0, 'bool', 'Prints an oblong tractlet rather than cylindrical';... + 'happy_colours', 0, 'bool', 'Uses ''happy colours''';... + 'inv_happy_colours', 0, 'bool', 'Uses the inverse of ''happy colours''';... + 'true_tracts_plot', 0, 'bool', 'Plots true tracts (as determined from observed image)';... + 'no_density_plot', 0, 'bool', 'Omitts density from properties plot';... + 'highlight_axes', 0, 'bool', 'Highlights the axes when printing in ''strand'' or ''line'' style';... + 'invisible', 0, 'bool', 'Makes the figure invisible (for automatically saving afterwards).'}; + + parse_arguments + if (help_display) + return; + end + + if clean + voxel_size = 0; + sphere_radius = 0; + no_axes = 1; + end + + +% End arguments % + if happy_colours + + if inv_happy_colours + error('Can''t use ''-happy_colours'' and ''-inv_happy_colours'' simultaneously'); + end + + load('/home/tclose/Data/Tractography/misc/comb_happy_colours.mat'); + + elseif inv_happy_colours + + load('/home/tclose/Data/Tractography/misc/inv_comb_happy_colours.mat'); + + end + + + if ~strcmp(file_extension(tracts_filename), 'tst') + error (['Extension, ''' file_extension(tracts_filename) ''' is not a valid tract set file (''.tst'').']); + end + + + [tract_sets, properties, set_prop_keys, set_prop_values, elem_prop_keys, elem_prop_values] = load_tract_sets(tracts_filename); + + num_sets = size(tract_sets,1); + + if (num_voxels < 0 || true_tracts_plot) + [num_voxels, true_location] = get_observed_properties(properties); + num_voxels = num_voxels(1); + end + + [loaded_num_length_sections, loaded_num_width_sections] = get_num_section_properties(properties,style); + + if num_length_sections == -1 + num_length_sections = loaded_num_length_sections; + end + + if num_width_sections == -1 + num_width_sections = loaded_num_width_sections; + end + + if last + + if ~isempty(dont_include) || ~isempty(include) + error('Error! -last cannot be used simultaneously with -include or -dont_include options'); + end + + include = size(tract_sets,1)-1; + + else + + if ~isempty(dont_include) + + if ~isempty(include) + error('Error! -include and -dont_include options cannot be used simultaneously'); + end + + include = [1:num_sets]; + + include(dont_include) = []; + + include = include -1; + + end + + end + + if length(include) == 1 + properties_plot = 0; + end + + if properties_plot == 0 + num_figs = 1; + elseif properties_plot == 1 + num_figs = 3; + elseif properties_plot == 2 + num_figs = 2; + end + + if true_tracts_plot + num_figs = num_figs + 1; + end + + if properties_plot ~= 2 + + overall_max_bundle_index = 0; + + for set_i = 1:num_sets + + num_tracts = size(tract_sets{set_i},1); + + if size(elem_prop_keys,2) + prop_values = elem_prop_values{set_i}; + else + prop_values = []; + end + + bundle_indices = get_properties(elem_prop_keys, prop_values, 'bundle_index', [0:1:(num_tracts-1)]', num_tracts); + + max_bundle_index = max(bundle_indices); + + if max_bundle_index > overall_max_bundle_index + overall_max_bundle_index = max_bundle_index; + end + end + + if highlight_axes + + overall_max_bundle_index = (overall_max_bundle_index+1)*4-1; + + end + + set_bundle_colours(overall_max_bundle_index); + + + %Set up the figure. + main_fig = my_figure(tracts_filename, 1, num_figs, [1 1 1], 1, [],[],~invisible); + + if isempty(include) + include = 1:num_sets; + else + include = include+1; %Convert to Matlab indexing + end + + for set_i = include + + prop_values = elem_prop_values{set_i}; + tracts = tract_sets{set_i}; + + if ~isempty(tract_include) + tracts = tracts(tract_include+1,:); + prop_values = prop_values(tract_include+1,:); + end + + num_tracts = size(tracts,1); + + intensities = get_properties(elem_prop_keys, prop_values, 'intensity', 1.0, num_tracts); + bundle_indices = get_properties(elem_prop_keys, prop_values, 'bundle_index', (0:1:(num_tracts-1))', num_tracts); + + if strfind('tracts', style) == 1 + + add_tracts_to_plot(tracts, colours_of_bundles, intensities, ones(num_tracts,1), tube_corners, num_length_sections, transparency, bundle_indices); + + elseif strfind('tubes', style) == 1 + + [strands, bundle_indices] = tracts2strands(tracts, ones(num_tracts,1), num_width_sections, highlight_axes, oblong, bundle_indices); + tcks = strands2tcks(strands, num_length_sections); + + radii = ones(size(tcks)) * strand_radius; + + add_tcks_to_plot(tcks, radii, colours_of_bundles, bundle_indices, tube_corners); + + elseif strfind('lines', style) == 1 + + [strands, bundle_indices] = tracts2strands(tracts, ones(num_tracts,1), num_width_sections, highlight_axes, oblong, bundle_indices); + tcks = strands2tcks(strands, num_length_sections); + + add_lines_to_plot(tcks, colours_of_bundles, bundle_indices); + + else + + error(['Urecogised style option ''' style '''.']); + + end + + end + + add_sphere_to_plot(sphere_radius, properties); + + if voxel_size ~= 0 + + add_vox_lines_to_plot(voxel_size,num_voxels,~no_voxline_highlight); + + end + + set(gcf, 'color', [0 0 0]); + + + if no_axes + +% set(gca, 'visible', 'off'); + + else + + label_handle = get(gca,'xlabel'); + set(label_handle, 'string', 'X-axis', 'color', [1 1 1]); + + label_handle = get(gca,'ylabel'); + set(label_handle, 'string', 'Y-axis', 'color', [1 1 1]); + + label_handle = get(gca,'zlabel'); + set(label_handle, 'string', 'Z-axis', 'color', [1 1 1]); + + end + + daspect ([ 1 1 1 ]); + + light + lighting gouraud; + + + fprintf('\n'); + disp(['Plotted ' num2str(length(include)) ' of ' num2str(num_sets) ' tract sets.']); + + end + + + if properties_plot && length(include) ~= 1 + + if exist([tracts_filename 'x']) + + ext_props_fig = plot_extend_properties([tracts_filename 'x'], set_prop_keys, set_prop_values,include, num_figs - true_tracts_plot - 1, num_figs); + + end + + + if exist([tracts_filename 'xx']) + + if no_density_plot +% omit_properties = cell(1,1) + omit_properties{1} = 'density'; + else + omit_properties = cell(0); + end + + + ext_ext_props_fig = plot_extend_elem_properties([tracts_filename 'xx'], elem_prop_keys, elem_prop_values, colours_of_bundles, include, tract_include, num_figs - true_tracts_plot, num_figs, omit_properties); + + end + + end + + + if true_tracts_plot + + if isempty(true_location) + error('Could not find true state location in observed image.'); + end + + my_figure(['True config: ' true_location], num_figs, num_figs); + + cameratoolbar('Show'); + cameratoolbar('SetMode','orbit'); + + + if (file_extension(true_location) == 'tck') + + [true_tcks, ~, true_prop_keys, true_prop_values] = load_tcks(true_location); + + num_true_tcks = size(true_tcks,1); + + true_bundle_indices = get_properties(true_prop_keys, true_prop_values, 'bundle_index', [0:1:(num_true_tcks-1)]', num_true_tcks); + true_radii = get_properties(true_prop_keys, true_prop_values, 'track_radius', 0.03, num_true_tcks); + + %Map bundle indices back consecutive range from 0 upwards. + mapped_indices = true_bundle_indices; + unique_indices = unique(true_bundle_indices); + for unique_i = 1:length(unique_indices) + mapped_indices(true_bundle_indices == unique_indices(unique_i)) = unique_i - 1; + end + + set_bundle_colours(max(unique_indices)); + + add_tcks_to_plot(true_tcks,true_radii,colours_of_bundles, mapped_indices,tube_corners); + + elseif (file_extension(true_location) == 'tct') + + true_tracts = load_tracts(true_location); + + num_true_tracts = size(true_tracts,1); + + set_bundle_colours(num_true_tracts-1); + + add_tracts_to_plot(true_tracts, colours_of_bundles, ones(num_true_tracts,1), ones(num_true_tracts,1), tube_corners, num_length_sections, 1.0); + + else + error(['Unrecognised extension of true location file ''' true_location '''.']); + end + + + if voxel_size ~= 0 + + add_vox_lines_to_plot(voxel_size,num_voxels,~no_voxline_highlight); + + end + + set(gcf, 'color', [0 0 0]); + + label_handle = get(gca,'xlabel'); + set(label_handle, 'string', 'X-axis', 'color', [1 1 1]); + + label_handle = get(gca,'ylabel'); + set(label_handle, 'string', 'Y-axis', 'color', [1 1 1]); + + label_handle = get(gca,'zlabel'); + set(label_handle, 'string', 'Z-axis', 'color', [1 1 1]); + + daspect ([ 1 1 1 ]); + + light + lighting gouraud; + + end + + +end \ No newline at end of file diff --git a/matlab/plot_tracts.m b/matlab/plot_tracts.m new file mode 100644 index 0000000..4bfe5e9 --- /dev/null +++ b/matlab/plot_tracts.m @@ -0,0 +1,300 @@ +function main_fig = plot_tracts(varargin) +% +% PURPOSE: Plots strands from strand files, and optionally displays reference sphere and voxels +% +% ARGUMENTS: +% +% tracts_filename The filename of the tracts ('.tct' format). +% +% OPTIONS (name, description, type, default): +% +% -include +% The indices of the strands to include in the plot +% matrix_:x: +% +% -colours_of_bundles +% Colours of the plotted strands +% matrix_:x3 +% +% -voxel_size +% Size of reference voxel +% float +% 0.15 +% +% -num_voxels +% Number of reference voxels +% int +% 3 +% +% -cube_size +% Size of reference voxel +% float +% 0 +% +% -num_length_sections +% Number of segments to plot for each tract. +% int +% 100 +% +% -strand_radius +% Radii of the plotted strands. (NB: can only be used with '-style' option 'strands'). +% float +% 0.02 +% +% -num_width_sections +% Number of strands to plot along each axis. If zero the default 3D surface option will be used instead. +% int +% 2 +% +% -style +% Change plot to 'line style'.(NB: Only relevant with '-num_width_sections' option > 0). +% string +% 'tracts' +% +% -tube_corners +% Change plot to 'line style'.(NB: Only relevant with '-num_width_sections' option = 0). +% int +% 12 +% +% -sphere_radius +% Size of reference sphere +% float +% 0 +% +% -no_axes +% Removes axes from plot +% bool +% 0 +% +% -clean +% Removes everything else from plot +% bool +% 0 +% +% -colour_key +% Displays colour key +% bool +% 0 +% +% -oblong +% Prints an oblong tractlet rather than cylindrical +% bool +% 0 +% +% -happy_colours +% Uses 'happy colours' +% bool +% 0 +% +% -inv_happy_colours +% Uses the inverse of 'happy colours' +% bool +% 0 +% +% -ignore_bundles +% Ignores bundle indices when plotting colours. +% bool +% 0 +% +% -no_voxline_highlight +% Doesn't highlight corner axes of voxel lines. +% bool +% 0 +% +% -transparency +% Fix the transparency of the tracts to a set value. If 0 the intensities of the of the tracts are used instead. +% float +% 1 +% +% -highlight_axes +% Highlights the axes when printing in 'strand' or 'line' style +% bool +% 0 + + main_fig = -1; + + global colours_of_bundles; + + description = 'Plots strands from strand files, and optionally displays reference sphere and voxels'; + + arguments = {'tracts_filename', 'The filename of the tracts (''.tct'' format).'}; + + options = {... + 'include ', [], 'matrix_:x:', 'The indices of the strands to include in the plot';... + 'colours_of_bundles', colours_of_bundles, 'matrix_:x3', 'Colours of the plotted strands';... + 'voxel_size ', 0.15, 'float', 'Size of reference voxel';... + 'num_voxels ', 3, 'int', 'Number of reference voxels';... + 'cube_size ', 0, 'float', 'Size of reference voxel';... + 'num_length_sections ', 100, 'int', 'Number of segments to plot for each tract.';... + 'strand_radius ', 0.02, 'float', 'Radii of the plotted strands. (NB: can only be used with ''-style'' option ''strands'').';... + 'num_width_sections ', 2, 'int', 'Number of strands to plot along each axis. If zero the default 3D surface option will be used instead.';... + 'style ', 'tractlets', 'string', 'Change plot to ''line style''.(NB: Only relevant with ''-num_width_sections'' option > 0).';... + 'tube_corners ', 12, 'int', 'Change plot to ''line style''.(NB: Only relevant with ''-num_width_sections'' option = 0).';... + 'sphere_radius ', 0, 'float', 'Size of reference sphere';... + 'no_axes', 0, 'bool', 'Removes axes from plot';... + 'clean', 0, 'bool', 'Removes everything else from plot';... + 'colour_key', 0, 'bool', 'Displays colour key';... + 'oblong', 0, 'bool', 'Prints an oblong tractlet rather than cylindrical';... + 'happy_colours', 0, 'bool', 'Uses ''happy colours''';... + 'inv_happy_colours', 0, 'bool', 'Uses the inverse of ''happy colours''';... + 'ignore_bundles', 0, 'bool', 'Ignores bundle indices when plotting colours.';... + 'no_voxline_highlight', 0, 'bool', 'Doesn''t highlight corner axes of voxel lines.';... + 'transparency' ,1, 'float', 'Fix the transparency of the tracts to a set value. If 0 the intensities of the of the tracts are used instead.';... + 'highlight_axes', 0, 'bool', 'Highlights the axes when printing in ''strand'' or ''line'' style';... + 'invisible', 0, 'bool', 'Makes the figure invisible (for automatically saving afterwards).'}; + + + parse_arguments + if (help_display) + return; + end + + if clean + voxel_size = 0; + sphere_radius = 0; + no_axes = 1; + end + +% End arguments % + + if happy_colours + + if inv_happy_colours + error('Can''t use ''-happy_colours'' and ''-inv_happy_colours'' simultaneously'); + end + + load('/home/tclose/Data/Tractography/misc/comb_happy_colours.mat'); + + elseif inv_happy_colours + + load('/home/tclose/Data/Tractography/misc/inv_comb_happy_colours.mat'); + + end + + if ~strcmp(file_extension(tracts_filename), 'tct') + error (['Extension, ''' file_extension(tracts_filename) ''' is not a valid tract file (''.tct'').']); + end + + + [tracts, props, prop_keys, prop_values] = load_tracts(tracts_filename); + + num_loaded_tracts = size(tracts,1); + + bundle_indices = get_properties(prop_keys, prop_values, 'bundle_index', (0:(num_loaded_tracts-1))', num_loaded_tracts); + + if ~isempty(include) + mapped_include = find(ismember(bundle_indices,include)); + tracts = tracts(mapped_include,:); + + if ignore_bundles + bundle_indices = include; + else + bundle_indices = mapped_include; + end + prop_values = prop_values(mapped_include,:); + end + + % base_widths = get_properties(prop_keys, prop_values, 'base_width', 1.0, num_tracts); + + num_tracts = size(tracts,1); + + max_bundle_index = max(bundle_indices); + + if highlight_axes + num_required_colours = max_bundle_index * 4; + else + num_required_colours = max_bundle_index; + end + + + set_bundle_colours(num_required_colours); + + %Set up the figure + main_fig = my_figure(strrep(tracts_filename,'_',''), 1, 1, [1 1 1], 1, [],[],~invisible); + + cameratoolbar('Show'); + cameratoolbar('SetMode','orbit'); + + + % If '-num_width_sections' parameter is not set plot the boundary of the tract + % instead. + if strfind(style, 'tractlets') == 1 + + if oblong + error('''-oblong'' option cannot be used with ''tracts'' style'); + end + + + if highlight_axes + error('''-highlight_axes'' option cannot be used with ''tracts'' style'); + end + + add_tracts_to_plot(tracts, colours_of_bundles, ones(num_tracts,1), ones(num_tracts,1), tube_corners, num_length_sections, transparency, bundle_indices); + + elseif strfind(style, 'tubes') == 1 + + [strands, bundle_indices] = tracts2strands(tracts, ones(num_tracts,1), num_width_sections, highlight_axes, oblong, bundle_indices); + tcks = strands2tcks(strands); + + radii = ones(size(tcks)) * strand_radius; + + add_tcks_to_plot(tcks, radii, colours_of_bundles, bundle_indices); + + %[tcks, colours_of_bundles] = display_strands(tcks, colours_of_bundles, include, 'bundle', line_style); + + elseif strfind('lines', style) == 1 + + [strands, bundle_indices] = tracts2strands(tracts, ones(num_tracts,1), num_width_sections, highlight_axes, oblong, bundle_indices); + tcks = strands2tcks(strands); + + add_lines_to_plot(tcks, colours_of_bundles, bundle_indices); + + else + + error(['Urecogised style option ''' style '''.']); + + end + + add_sphere_to_plot(sphere_radius); + + + if voxel_size ~= 0 + + add_vox_lines_to_plot(voxel_size,num_voxels,~no_voxline_highlight); + + end + + set(gcf, 'color', [0 0 0]); + + if no_axes + + set(gca, 'visible', 'off'); + + else + + label_handle = get(gca,'xlabel'); + set(label_handle, 'string', 'X-axis', 'color', [1 1 1]); + + label_handle = get(gca,'ylabel'); + set(label_handle, 'string', 'Y-axis', 'color', [1 1 1]); + + label_handle = get(gca,'zlabel'); + set(label_handle, 'string', 'Z-axis', 'color', [1 1 1]); + + end + + daspect ([ 1 1 1 ]); + + light + lighting gouraud; + + + fprintf('\n'); + disp(['Plotted ' num2str(num_tracts) ' tracts.']); + + + if colour_key + add_colour_key(bundle_indices); + end + +end diff --git a/matlab/plotbts.m b/matlab/plotbts.m new file mode 100644 index 0000000..ec5bdf8 --- /dev/null +++ b/matlab/plotbts.m @@ -0,0 +1,25 @@ +function fig = plotbts(varargin) + + if nargin == 0 + error('No arguments supplied'); + end + + filename = varargin{1}; + + if file_extension(filename) == 'str' + fig = plot_strands(varargin{:}); + elseif file_extension(filename) == 'sst' + fig = plot_strand_sets(varargin{:}); + elseif file_extension(filename) == 'tct' + fig = plot_tracts(varargin{:}); + elseif file_extension(filename) == 'tst' + fig = plot_tract_sets(varargin{:}); + elseif file_extension(filename) == 'tck' + fig = plot_tcks(varargin{:}); + elseif file_extension(filename) == 'mif' + fig = plot_image(varargin{:}); + else + error(['Unrecognised extension, ''' file_extension(filename) '''.']); + end + +end \ No newline at end of file diff --git a/matlab/read_element_properties.m b/matlab/read_element_properties.m new file mode 100644 index 0000000..eefdfce --- /dev/null +++ b/matlab/read_element_properties.m @@ -0,0 +1,48 @@ +function [keys, values] = read_element_properties(location) + + disp('Reading properties...'); + + file = fopen(location, 'r'); + + if (file == -1) + error([ 'Could not open file ' location '!' ]); + end + + + header_line = fgetl(file); + + %Seperate the header tag from the key list. + [header, key_string] = strtok(header_line,':'); + + if ~strcmp(header, '%%% Extended Properties File %%% - keys') + error(['Extended properties header tag ''%%% Extended Properties File %%% - keys'' was not found at start of extended properties file ''' location '']); + end + + keys = parse_properties_row(key_string(3:end)); + + num_keys = length(keys); + + values = cell(0, num_keys); + + row_i = 1; + + value_line = fgetl(file); + + while value_line ~= -1; + + value_row = parse_properties_row(value_line); + + if size(value_row,2) ~= num_keys + error(['Number of values on line ' num2str(row_i) ' (' num2str(size(value_row,2)) ') does not match number of keys (' num2str(num_keys) ').']); + end + + values(row_i, :) = value_row; + + value_line = fgetl(file); + row_i = row_i + 1; %#ok + + end + + disp('Finished reading properties...'); + +end diff --git a/matlab/read_element_property_keys.m b/matlab/read_element_property_keys.m new file mode 100644 index 0000000..64e65a8 --- /dev/null +++ b/matlab/read_element_property_keys.m @@ -0,0 +1,54 @@ +function [keys, values] = read_element_properties(location) + + file = fopen(location, 'r'); + + if (file == -1) + error([ 'Could not open file ' filename '!' ]); + end + + + header_line = fgetl(file); + + %Seperate the header tag from the key list. + [header, key_string] = strtok(header_line,':'); + + if ~strcmp(header, '%%% Extended Properties File %%% - keys') + error(['Extended properties header tag ''%%% Extended Properties File %%% - keys'' was not found at start of extended properties file ''' location '']); + end + + %String ': ' from start of keys and trailing tab from end. + key_string = deblank(key_string(3:end)); + + keys = cell(0); + + keys = regexp(key_string,'\t','split')'; + + num_keys = size(keys,1); + + values = cell(0, num_keys); + + row_i = 1; + + value_line = fgetl(file); + + while value_line ~= -1; + + value_row = regexp(value_line,'\t','split'); + + %Remove the empty value after the final tab. + value_row = value_row(1:end-1); + + if size(value_row,2) ~= num_keys + error(['Number of values on line ' num2str(row_i) ' (' num2str(size(value_row,2)) ') does not match number of keys (' num2str(num_keys) ').']); + end + + for key_i=1:num_keys + values{row_i, key_i} = value_row{key_i}; + end + + value_line = fgetl(file); + row_i = row_i + 1; %#ok + + end + +end \ No newline at end of file diff --git a/matlab/read_extracted_features.m b/matlab/read_extracted_features.m new file mode 100644 index 0000000..9c2e3f7 --- /dev/null +++ b/matlab/read_extracted_features.m @@ -0,0 +1,36 @@ +function read_extracted_features(dir_name) + +fid = fopen([ dir_name '/v1_norm.dat']); + +v1_norm = load([ dir_name '/v1_norm.dat']); + +v2_norm = fopen([ dir_name '/v2_norm.dat']); + +v0_norm = fopen([ dir_name '/v0_norm.dat']); + +dot_v1_v2 = fopen([ dir_name '/dot_v1_v2.dat']); + + + +% +% fid = fopen([ dir_name '/v1_norm.dat']); +% +% [w,v,machine_format] = fopen(fid); +% +% v1_norm = fread(fid, inf, 'float32=>double',machine_format); +% fclose(fid); +% +% +% fid = fopen([ dir_name '/v2_norm.dat']); +% v2_norm = fread(fid, inf, 'float32=>double',machine_format); +% fclose(fid); +% +% fid = fopen([ dir_name '/v0_norm.dat']); +% v0_norm = fread(fid, inf, 'float32=>double',machine_format); +% fclose(fid); +% +% fid = fopen([ dir_name '/dot_v1_v2.dat']); +% dot_v1_v2 = fread(fid, inf, 'float32=>double',machine_format); +% fclose(fid); + +hist(v1_norm) \ No newline at end of file diff --git a/matlab/read_fibres.m b/matlab/read_fibres.m new file mode 100644 index 0000000..2bf5475 --- /dev/null +++ b/matlab/read_fibres.m @@ -0,0 +1,113 @@ +function [elems, properties] = read_fibres(filename, varargin) + +% if nargin == 2 +% num_elems = varargin{1} * 3; +% else +% num_elems = inf; +% end + + file = fopen(filename,'r'); + + [fname, mode, machine_format] = fopen(file); + + + if (file == -1) + error([ 'Could not open file ' filename '!' ]); + end + + + line = fgetl(file); + + if (length(line) < 13 || ~strcmp(line(1:13),'mrtrix tracks')) + error(['File, ' filename ' was not a valid mrtrix tracks file']); + end + + offset = 0; + datatype = []; + + while 1 + line = fgetl(file); + if ~ischar(line), break, end; + line = strtrim(line); + if strcmp(line, 'END'), break, end; + delim = strfind (line,':'); + + if isempty(delim) + disp (['invalid line in header: ''' line ''' - ignored']); + else + + key = lower(strtrim(line(1:delim(1)-1))); + value = strtrim(line(delim(1)+1:end)); + + if strcmp(key, 'datatype') + + if strcmp(value, 'Float32LE') + machine_format = 'ieee-le'; + + elseif strcmp(value, 'Float32BE') + machine_format = 'ieee-be'; + + elseif strcmp(value, 'Float64LE') + machine_format = 'ieee-le.l64'; + + elseif strcmp(value, 'Float64BE') + machine_format = 'ieee-be.l64'; + + else + error(['Unrecognised format ''' value '''.']); + end + + elseif strcmp(key, 'file') + offset = str2double(value(3:end)); + else + key = strrep(key, ' ', '_'); + eval(['properties.' key ' = value;']); + end + + end + end + + if (~offset) + error('"file" property was not found after 100 lines'); + end + + % Read elements + fseek(file, offset, 'bof'); + + if (strcmp(machine_format,'ieee-le') || strcmp(machine_format,'ieee-be')) + elems = fread(file, inf, 'float32=>double', machine_format); + else + elems = fread(file, inf, 'double=>double', machine_format); + end +% elems = elems(1:end-3); + + num_triples = size(elems,1)/3; + + if num_triples ~= round(num_triples) + error (['Number of elements loaded from mrtrix file data was not divisible by 3 (' num2str(size(elems,1)) ')']); + end + + elems = reshape(elems,3,num_triples)'; + + + % Find end of file marker. + is_pos_inf = isinf(elems) .* (elems > 0); + + is_pos_inf_row = is_pos_inf(:,1) .* is_pos_inf(:,2) .* is_pos_inf(:,3); + + end_of_data = find(is_pos_inf_row); + + if size(end_of_data,1) > 2 + error ([ num2str(size(end_of_data,1)) ' end_of_data markers found in file (max allowed 2). (Very) Probably infinity valued parameters have been written to fibres file.']); + + elseif size(end_of_data,1) == 2 + if end_of_data(2) ~= size(elems,1) + error ('Second end_of_data marker found not at end of file, possibly corrupt file'); + end + + end_of_data = end_of_data(1); + end + + elems = elems(1:(end_of_data-1),:); + +end \ No newline at end of file diff --git a/matlab/read_image.m b/matlab/read_image.m new file mode 100644 index 0000000..bffd7d7 --- /dev/null +++ b/matlab/read_image.m @@ -0,0 +1,132 @@ +function image = read_image (filename) + +% function: image = read_mrtrix (filename) +% +% returns a structure containing the header information and data for the MRtrix +% format image 'filename' (i.e. files with the extension '.mif' or '.mih'). + +image.comments = {}; + +f = fopen (filename, 'r'); +if (f<1) + error (['could not open file ' filename ]); +end +L = fgetl(f); +if ~strncmp(L, 'mrtrix image', 12) + fclose(f); + error ([filename ' is not in MRtrix format']); +end + +transform = []; +DW_scheme = []; + +while 1 + L = fgetl(f); + if ~ischar(L), break, end; + L = strtrim(L); + if strcmp(L, 'END'), break, end; + d = strfind (L,':'); + if isempty(d) + disp (['invalid line in header: ''' L ''' - ignored']); + else + key = lower(strtrim(L(1:d(1)-1))); + value = strtrim(L(d(1)+1:end)); + if strcmp(key, 'dim') + image.dim = str2num(char(split_strings (value, ',')))'; + elseif strcmp(key, 'vox') + image.vox = str2num(char(split_strings (value, ',')))'; + elseif strcmp(key, 'dw_scheme') + DW_scheme(end+1,:) = str2num(char(split_strings (value, ',')))'; + elseif strcmp(key, 'transform') + transform(end+1,:) = str2num(char(split_strings (value, ',')))'; + elseif strcmp(key, 'comments') + image.comments{end+1} = value; + elseif strcmp(key, 'labels') + image.labels = split_strings (value, '\'); + elseif strcmp(key, 'units') + image.units = split_strings (value, '\'); + elseif strcmp(key, 'file') + file = value; + + elseif strcmp(key, 'img_dims') %do nothing; + elseif strcmp(key, 'img_vox_lengths') %do nothing; + elseif strcmp(key, 'diff_encodings') %do nothing; + elseif strcmp(key, 'img_offsets') %do nothing; % image.offset = value; + else + key = strrep(key, ' ', '_'); + eval(['image.' key ' = value;']); + end + end +end +fclose(f); + + +if ~isempty(transform) + image.transform = transform; + image.transform(4,:) = [ 0 0 0 1 ]; +end + +if ~isempty(DW_scheme) + image.DW_scheme = DW_scheme; +end + +if ~isfield (image, 'dim') || ~exist ('file') || ... + ~isfield (image, 'layout') || ~isfield (image, 'datatype') + disp ('critical entries missing in header - not reading data') + return +end + +layout = split_strings(image.layout, ','); +order = (abs(str2num (char(layout)))+1)'; + +[ file, offset ] = strtok(file); +if isempty(offset), offset = 0; else offset = str2num(char(offset)); end +[f,g] = fileparts(filename); +if strcmp(file,'.'), file = filename; else file = fullfile (f, file); end + +datatype = lower(image.datatype); +byteorder = datatype(end-1:end); + +if strcmp(byteorder, 'le') + f = fopen (file, 'r', 'l'); + datatype = datatype(1:end-2); +elseif strcmp(byteorder, 'be') + f = fopen (file, 'r', 'b'); + datatype = datatype(1:end-2); +else + if strcmp(datatype, 'bit') + datatype = 'bit1'; + f = fopen(file, 'r', 'b'); + else + f = fopen(file, 'r'); + end +end + +if (f<1) + disp (['error opening ' filename ]); + return +end + +fseek (f, offset, -1); +image.data = fread (f, inf, datatype); +fclose (f); + +order(order)= 1:size(order,2); +image.data = reshape (image.data, image.dim(order)); +image.data = ipermute (image.data, order); +for i=1:size(order,2) + if layout{i}(1) == '-' + image.data = flipdim(image.data, i); + end +end + + + + +function S = split_strings (V, delim) + S = {}; + while size(V,2) > 0 + [R, V] = strtok(V,delim); + S{end+1} = R; + end + diff --git a/matlab/read_properties.m b/matlab/read_properties.m new file mode 100644 index 0000000..5f53df8 --- /dev/null +++ b/matlab/read_properties.m @@ -0,0 +1,36 @@ +function props = read_properties (filename) +% function props = read_properties (filename) +% Reads properties from a file and returns them in a struct. + +f = fopen (filename, 'r'); +if (f<1) + disp (['could not open file ' filename ]); + return +end + +while 1 + L = fgetl(f); + if ~ischar(L), break, end; + L = strtrim(L); + if strcmp(L, 'END'), break, end; + d = strfind (L,':'); + if isempty(d) + disp (['invalid line in header: ''' L ''' - ignored']); + else + key = strrep(lower(strtrim(L(1:d(1)-1))), ' ', '_'); + value = strtrim(L(d(1)+1:end)); + eval(['props.' key ' = value;']); + end +end +fclose(f); + + + + +function S = split_strings (V, delim) + S = {}; + while size(V,2) > 0 + [R, V] = strtok(V,delim); + S{end+1} = R; + end + diff --git a/matlab/read_set_element_properties.m b/matlab/read_set_element_properties.m new file mode 100644 index 0000000..2bfc336 --- /dev/null +++ b/matlab/read_set_element_properties.m @@ -0,0 +1,63 @@ +function [keys, values] = read_set_element_properties(location) + + file = fopen(location, 'r'); + + if (file == -1) + + keys = cell(0); + values = cell(0); + return; +% error([ 'Could not open file ' location '!' ]); + end + + + header_line = fgetl(file); + + %Seperate the header tag from the key list. + [header, key_string] = strtok(header_line,':'); + + if ~strcmp(header, '%%% Extended Properties File %%% - keys') + error(['Extended properties header tag ''%%% Extended Properties File %%% - keys'' was not found at start of extended properties file ''' location '']); + end + + %String ': ' from start of keys and trailing tabs from end. + keys = parse_properties_row(key_string(3:end)); + + num_keys = length(keys); + + row_i = 1; + + value_line = fgetl(file); + + while value_line ~= -1; + + sub_row_i = 1; + + while length(value_line) < 8 || ~strcmp(value_line(1:8), '--- END ') || ~strcmp(value_line((end-3):end), ' ---') + + value_row = parse_properties_row(value_line); + + if size(value_row,2) ~= num_keys + error(['Number of values on line ' num2str(row_i) ' (' num2str(size(value_row,2)) ') does not match number of keys (' num2str(num_keys) ').']); + end + + values{row_i,1}(sub_row_i,:) = value_row; + + + value_line = fgetl(file); + sub_row_i = sub_row_i + 1; %#ok + + if value_line == -1 + error (['Found end of file before row delimeter for row (in row ' num2str(row_i) ').']); + end + + end + + row_i = row_i + 1; %#ok + value_line = fgetl(file); + + end + + + +end \ No newline at end of file diff --git a/matlab/save_evo_for_talk.m b/matlab/save_evo_for_talk.m new file mode 100644 index 0000000..bded81f --- /dev/null +++ b/matlab/save_evo_for_talk.m @@ -0,0 +1,42 @@ +function save_evo_for_report(output_path, varargin) + +% set_transparent = 0; + resolution = 600; + + if (nargin == 2) + resolution = varargin{2}; + end + + +%set(gcf, 'color', [1 1 1]); + +%note A4 is 21cm wide 29.7cm tall + +% xlim([-2 2]); +% ylim([-2 2]); +% zlim([-2 2]); + +%set(gcf,'Units','centimeters'); +set(gcf,'PaperUnits','centimeters'); + +% set(gcf, 'Position', [10 10 10 10]); +set(gcf, 'PaperSize', [3 3]); +set(gcf, 'PaperPosition', [0 0 3 3]); + +%set(gca, 'visible', 'off'); +set(gca, 'Outerposition', [0 0 1 1]); +set(gca, 'Position', [0 0 1 1]); + +background = [0 0 0]; + +set(gcf, 'color', background); + +set(gcf,'InvertHardCopy','off'); + +print(gcf, '-dpng', ['-r' num2str(resolution)], [output_path]); + +cdata = imread([output_path '.png']); +%cdata = imcrop(cdata, [10 10 300 300]); + +% write it back out - setting transparency info +imwrite(cdata, [output_path '.png'], 'png', 'BitDepth', 16, 'transparency', background) \ No newline at end of file diff --git a/matlab/save_figure_for_talk.m b/matlab/save_figure_for_talk.m new file mode 100644 index 0000000..d473a48 --- /dev/null +++ b/matlab/save_figure_for_talk.m @@ -0,0 +1,43 @@ +function save_figure_for_talk(output_path, resolution) + +% set_transparent = 0; + + if ~exist('resolution','var') + resolution = 600; + end + + + %set(gcf, 'color', [1 1 1]); + + %note A4 is 21cm wide 29.7cm tall + + % xlim([-2 2]); + % ylim([-2 2]); + % zlim([-2 2]); + + %set(gcf,'Units','centimeters'); + set(gcf,'PaperUnits','centimeters'); + + % set(gcf, 'Position', [10 10 10 10]); + set(gcf, 'PaperSize', [3 3]); + set(gcf, 'PaperPosition', [0 0 3 3]); + + %set(gca, 'visible', 'off'); + set(gca, 'Outerposition', [0 0 1 1]); + set(gca, 'Position', [0 0 1 1]); + + background = [0 0 0]; + + set(gcf, 'color', background); + + set(gcf,'InvertHardCopy','off'); + + print(gcf, '-dpng', ['-r' num2str(resolution)], [output_path]); + + cdata = imread([output_path '.png']); + %cdata = imcrop(cdata, [10 10 300 300]); + + % write it back out - setting transparency info + imwrite(cdata, [output_path '.png'], 'png', 'BitDepth', 16, 'transparency', background) + +end \ No newline at end of file diff --git a/matlab/save_samples_for_report.m b/matlab/save_samples_for_report.m new file mode 100644 index 0000000..c2b5387 --- /dev/null +++ b/matlab/save_samples_for_report.m @@ -0,0 +1,45 @@ +function save_render_for_report(output_path, varargin) + +% set_transparent = 0; + resolution = 600; + + if (nargin == 2) + resolution = varargin{2}; + end + + +%set(gcf, 'color', [1 1 1]); + +%note A4 is 21cm wide 29.7cm tall + +xlim([-.53 .53]); +ylim([-.53 .53]); +zlim([-.53 .53]); + +campos([0 0 1]); +camup([0 1 0]); + +%set(gcf,'Units','centimeters'); +set(gcf,'PaperUnits','centimeters'); + +% set(gcf, 'Position', [10 10 10 10]); +set(gcf, 'PaperSize', [3 3]); +set(gcf, 'PaperPosition', [0 0 3 3]); + +%set(gca, 'visible', 'off'); +set(gca, 'Outerposition', [0 0 1 1]); +set(gca, 'Position', [0 0 1 1]); + +background = [0 0 0]; + +set(gcf, 'color', background); + +set(gcf,'InvertHardCopy','off'); + +% print(gcf, '-dpng', ['-r' num2str(resolution)], [output_path]); + +%cdata = imread([output_path '.png']); +%cdata = imcrop(cdata, [10 10 300 300]); + +% write it back out - setting transparency info +%imwrite(cdata, [output_path '.png'], 'png', 'BitDepth', 16, 'transparency', background) \ No newline at end of file diff --git a/matlab/save_samples_for_talk.m b/matlab/save_samples_for_talk.m new file mode 100644 index 0000000..084eb9f --- /dev/null +++ b/matlab/save_samples_for_talk.m @@ -0,0 +1,67 @@ +function save_samples_for_talk(output_path, camera_viewangle, paper_size, resolution, camera_target, camera_pos) + +% set_transparent = 0; + + if ~exist('resolution','var') + resolution = 600; + end + + if ~exist('paper_size','var') + paper_size = 15; + end + + if ~exist('camera_pos','var') + camera_pos = [-3.25 -3.25 3.25]; + end + + if ~exist('camera_viewangle','var') + camera_viewangle = 7.5; + end + + if ~exist('camera_target','var') + camera_target = [0,0,0]; + end + + set(gca,'CameraPositionMode', 'manual'); + set(gca,'CameraTargetMode', 'manual'); + set(gca,'CameraViewAngleMode', 'manual'); + + set(gca, 'CameraPosition', camera_pos); + set(gca, 'CameraTarget', camera_target); + set(gca, 'CameraViewAngle', camera_viewangle); + + + %set(gcf, 'color', [1 1 1]); + + %note A4 is 21cm wide 29.7cm tall + + % xlim([-2 2]); + % ylim([-2 2]); + % zlim([-2 2]); + + %set(gcf,'Units','centimeters'); + set(gcf,'PaperUnits','centimeters'); + + % set(gcf, 'Position', [10 10 10 10]); + set(gcf, 'PaperSize', [paper_size paper_size]); + set(gcf, 'PaperPosition', [0 0 paper_size paper_size]); + + set(gca, 'visible', 'off'); + set(gca, 'Outerposition', [0 0 1 1]); + set(gca, 'Position', [0 0 1 1]); + + background = [0 0 0]; + + set(gcf, 'color', background); + + set(gcf,'InvertHardCopy','off'); + + print(gcf, '-dpng', ['-r' num2str(resolution)], [output_path]); + + cdata = imread([output_path '.png']); + %cdata = imcrop(cdata, [10 10 300 300]); + + % write it back out - setting transparency info + imwrite(cdata, [output_path '.png'], 'png', 'BitDepth', 16, 'transparency', background) + +end \ No newline at end of file diff --git a/matlab/set_bundle_colours.m b/matlab/set_bundle_colours.m new file mode 100644 index 0000000..3392769 --- /dev/null +++ b/matlab/set_bundle_colours.m @@ -0,0 +1,14 @@ +function set_bundle_colours(max_bundle_index) + + global colours_of_bundles; + + num_colours = max_bundle_index+1; + + if size(colours_of_bundles,1) < num_colours + + colours_of_bundles = rand([num_colours, 3]); +% add_colour_key(colours_of_bundles, 0:1:num_colours-1); + + end + +end \ No newline at end of file diff --git a/matlab/split_at_file_seperator.m b/matlab/split_at_file_seperator.m new file mode 100644 index 0000000..2a52457 --- /dev/null +++ b/matlab/split_at_file_seperator.m @@ -0,0 +1,44 @@ +function fibre_objects = split_at_file_seperator(elems, file_seperator, varargin) + + + if (size(elems, 2) ~= 3) + error (['Dimension 2 of elements must be 3 (' num2str(size(elems,2)) ')']); + end + + if (length(file_seperator) ~= 3) + error (['Length of file seperator must be 3 (' length(file_seperator) ')']); + end + + seperators = ones(size(elems,1),1); + + for i=1:length(file_seperator) + + if isnan(file_seperator(i)) + sep_column = isnan(elems(:,i)); + elseif isinf(file_seperator(i)) && (file_seperator(i) > 0) + sep_column = isinf(elems(:,i)) .* (elems(:,i) > 0); + elseif isinf(file_seperator(i)) && (file_seperator(i) < 0) + sep_column = isinf(elems(:,i)) .* (elems(:,i) < 0); + else + error(['Invalid file seperator, ''' num2str(file_seperator(i)) ''', must be nan, inf or -inf']); + end + + seperators = seperators .* sep_column; + + end + + seperator_indices = [0; find(seperators)]; + + num_fibres = size(seperator_indices,1)-1; + + fibre_objects = cell(num_fibres,1); + + for fibre_i = 1:num_fibres + + fibre_objects{fibre_i} = elems((seperator_indices(fibre_i)+1):(seperator_indices(fibre_i+1)-1),:); + + end + + + +end \ No newline at end of file diff --git a/matlab/strands2tcks.m b/matlab/strands2tcks.m new file mode 100644 index 0000000..e2ba199 --- /dev/null +++ b/matlab/strands2tcks.m @@ -0,0 +1,13 @@ +function tcks = strands2tcks(strands, num_length_sections) + + if ~exist('num_length_sections','var') + num_length_sections = 100; + end + + tcks = cell(size(strands)); + + for strand_i = 1:length(strands) + tcks{strand_i} = fourier2tck(strands{strand_i},num_length_sections); + end + +end \ No newline at end of file diff --git a/matlab/test_gaussian_log_prob.m b/matlab/test_gaussian_log_prob.m new file mode 100644 index 0000000..b72eb20 --- /dev/null +++ b/matlab/test_gaussian_log_prob.m @@ -0,0 +1,13 @@ +function log_probs = test_gaussian_log_prob(points, relative_scale) + + num_points = size(points,1); + + log_probs = zeros(num_points,1); + + for point_i = 1:num_points + + log_probs(point_i) = points(point_i,1).^2 + relative_scale * points(point_i,2).^2; + + end + +end \ No newline at end of file diff --git a/matlab/test_odr.m b/matlab/test_odr.m new file mode 100644 index 0000000..aeae1dd --- /dev/null +++ b/matlab/test_odr.m @@ -0,0 +1,24 @@ +points = [0.0558338, -0.0151347, 0.0378316; 0.0825788, 0.00693855, -0.077859; 0.228064, -0.331608, -0.149636; 0.256504, -0.356444, -0.340913; 0.330395, -0.383082, -0.342205; 0.543772, -0.510789, -0.485669; 0.59165, -0.547569, -0.568391; 0.717377, -0.76264, -0.70171; 0.801649, -0.832203, -0.839953; 0.94715, -0.886547, -0.925994; ] +V = [0.567898 -0.368983 0.735761 ; -0.568563 -0.822213 0.0265069 ; -0.595171 0.433379 0.676723 ; ] +centre = [ 0.455497, -0.461908, -0.43945 ] +direction = [ 0.567898, -0.568563, -0.595171 ] + + +figure; + +hold on; + +plot3(points(:,1), points(:,2), points(:,3), 'Marker', 'x', 'LineStyle', 'none'); + +line_points = [centre - direction/2; centre; centre + direction/2]; + +plot3(line_points(:,1), line_points(:,2), line_points(:,3)) + +plot3( [0 0 0; V(1,:)], [0 0 0; V(2,:)], [0 0 0; V(3,:)], 'Color', 'red'); + +daspect([1 1 1]); + +hold off; + +cameratoolbar('Show'); +cameratoolbar('SetMode','orbit'); \ No newline at end of file diff --git a/matlab/test_peak_log_prob.m b/matlab/test_peak_log_prob.m new file mode 100644 index 0000000..e6e044b --- /dev/null +++ b/matlab/test_peak_log_prob.m @@ -0,0 +1,44 @@ +function log_probs = test_peak_log_prob(points, peaks, roi_radius, barrier_rate) + + num_peaks = size(peaks,1); + num_points = size(points,1); + + log_probs = zeros(num_points,1); + + for peak_i = 1:num_peaks + + peak_centre = peaks(peak_i, 1:2); + peak_width = peaks(peak_i, 3:4); + peak_height = peaks(peak_i, 5); + peak_type = peaks(peak_i, 6); + + if peak_type == 0 % Gaussian + + peak_variance = (peak_width / 3.0).^2; + + peak_log_probs = peak_height * exp (- ((peak_centre(1) - points(:,1)).^2) ./ peak_variance(1)) .* exp (- ((peak_centre(2) - points(:,2)).^2) ./ peak_variance(2)); + + elseif peak_type == 1 % Pyramid + + peak_steepness(1) = peak_height / peak_width(1); + peak_steepness(2) = peak_height / peak_width(2); + + peak_log_probs = peak_height - abs(peak_centre(1) - points(:,1)) .* peak_steepness(1) - abs(peak_centre(2) - points(:,2)) .* peak_steepness(2); + + peak_log_probs(find(peak_log_probs < 0)) = 0; + + else + error(['Unrecognised peak type, ' num2str(peak_type) '.']); + end + + points_norm = sqrt(points(:,1).^2 + points(:,2).^2); + + outside_roi = find(points_norm > roi_radius); + + peak_log_probs(outside_roi) = peak_log_probs(outside_roi) - ((points_norm(outside_roi) - roi_radius) * barrier_rate).^2; + + log_probs = log_probs + peak_log_probs; + + end + +end \ No newline at end of file diff --git a/matlab/tracts2strands.m b/matlab/tracts2strands.m new file mode 100644 index 0000000..cd3fd37 --- /dev/null +++ b/matlab/tracts2strands.m @@ -0,0 +1,80 @@ +function [strands, bundle_indices] = tracts2strands(tracts, base_widths, num_strands, highlight_axes, oblong, tract_indices) + + if ~exist('highlight_axes','var') + highlight_axes = 0; + end + + if ~exist('oblong','var') + oblong = 0; + end + + if ~exist('tract_indices','var') + tract_indices = []; + end + + if isempty(tract_indices) + tract_indices = [0:1:size(tracts,1)-1]; + end + + num_tracts = size(tracts,1); + + strands = cell(num_tracts,1); + bundle_indices = zeros(num_tracts,1); + + strand_count = 0; + tcks = cell(num_tracts * (2 * num_strands + 1),4); + + + width_fraction = 1 / num_strands; + + if num_strands < 0 + error(['''-num_strands'' must be greater than zero (' num2str(num_strands) ').']); + end + + ax_fractions = (-1+width_fraction):(2*width_fraction):(1-width_fraction); + + for tract_i = 1:num_tracts + + base_index = tract_indices(tract_i); + + if highlight_axes + base_index = base_index * 4; + end + + for ax2_frac = ax_fractions + + for ax3_frac = ax_fractions + + + if (sqrt(ax2_frac^2 + ax3_frac^2) <= 1.0) || oblong + strand_count = strand_count + 1; + + strands{strand_count} = tracts{tract_i, 1} + (tracts{tract_i, 2} * ax2_frac + tracts{tract_i, 3} * ax3_frac) * base_widths(tract_i); + + + if highlight_axes + + if ax2_frac == 0 && ax3_frac == 0 + strand_index = base_index + 1; + elseif ax2_frac == 0 + strand_index = base_index + 2; + elseif ax3_frac == 0 + strand_index = base_index + 3; + else + strand_index = base_index; + end + + else + strand_index = base_index; + end + + bundle_indices(strand_count) = strand_index; + + end + end + end + + end + + +end \ No newline at end of file diff --git a/matlab/unzip_image.m b/matlab/unzip_image.m new file mode 100644 index 0000000..239c353 --- /dev/null +++ b/matlab/unzip_image.m @@ -0,0 +1,5 @@ +function [section_matrix, labels] = unzip_image(image) + + + +end \ No newline at end of file diff --git a/matlab/unzip_strand_sections.m b/matlab/unzip_strand_sections.m new file mode 100644 index 0000000..43f4f6b --- /dev/null +++ b/matlab/unzip_strand_sections.m @@ -0,0 +1,31 @@ +function [section_matrix, labels] = unzip_strand_sections(sections, prop_keys, prop_values) + + num_sections = size(sections,1); + + if num_sections == 0 + error ('No sections loaded.'); + end + + num_props = length(prop_keys); + num_parameters = 6 + num_props; + + section_matrix = zeros(num_parameters, num_sections); + labels = cell(num_parameters,1); + + for prop_i = 1:num_props + section_matrix(prop_i,:) = get_properties(prop_keys, prop_values, prop_keys{prop_i}); + labels{prop_i} = prop_keys{prop_i}; + end + + for section_i = 1:num_sections + section_matrix((num_props+1):end, section_i) = sections{section_i}(:); + end + + labels{num_props+1} = 'Position - Dim 0'; + labels{num_props+2} = 'Position - Dim 1'; + labels{num_props+3} = 'Position - Dim 2'; + labels{num_props+4} = 'Tangent - Dim 0'; + labels{num_props+5} = 'Tangent - Dim 1'; + labels{num_props+6} = 'Tangent - Dim 2'; + +end \ No newline at end of file diff --git a/matlab/unzip_strand_sets.m b/matlab/unzip_strand_sets.m new file mode 100644 index 0000000..a0fbe97 --- /dev/null +++ b/matlab/unzip_strand_sets.m @@ -0,0 +1,71 @@ +function [strand_sets_matrix, labels] = unzip_strand_sets(sets, set_prop_keys, set_prop_values, elem_prop_keys, elem_prop_values) + + num_sets = size(sets,1); + + if num_sets == 0 + error ('No sets loaded.'); + end + + num_strands = size(sets{1},1); + first_set = sets(1); + degree = size(first_set{1}{1},1); + + for set_i = 1:num_sets + + set = sets{set_i}; + + if size(sets{set_i},1) ~= num_strands + error(['Number of strands in set ' num2str(set_i) ' (' num2str(size(sets{set_i},1)) ') does match that of previous sets (' num2str(num_strands) ').']); + end + + for strand_i = 1:num_strands + if size(sets{set_i}{strand_i},1) ~= degree + error(['Degree of strand ' num2str(strand_i) ' in set ' num2str(set_i) ' (' num2str(size(sets{set_i}{strand_i},1)) ') does match that of previous strands (' num2str(degree) ').']); + end + end + + end + + + num_set_props = length(set_prop_keys); + num_elem_props = length(elem_prop_keys); + + num_parameters = num_strands * degree * 3 + num_set_props + num_elem_props * num_strands; + + + strand_sets_matrix = zeros(num_parameters, num_sets); + labels = cell(num_parameters,1); + + for prop_i = 1:num_set_props + strand_sets_matrix(prop_i,:) = get_properties(set_prop_keys, set_prop_values, set_prop_keys{prop_i}); + labels{prop_i} = set_prop_keys{prop_i}; + end + + + for strand_i = 1:num_strands + + same_strand_across_sets = cell(num_sets); + same_strand_props_across_sets = cell(num_sets, num_elem_props); + + for set_i = 1:num_sets + + set = sets{set_i}; + + same_strand_across_sets(set_i) = set(strand_i); + + if num_elem_props + same_strand_props_across_sets(set_i) = elem_prop_values{set_i}(strand_i,:); + end + end + + [strand_matrix, strand_labels] = unzip_strands(same_strand_across_sets, elem_prop_keys, same_strand_props_across_sets, ['Strand ' num2str(strand_i-1) ' - ']); + + start = (strand_i-1) * (degree * 3 + num_elem_props) + num_set_props + 1; + finish = strand_i * (degree * 3 + num_elem_props) + num_set_props; + + strand_sets_matrix(start:finish,:) = strand_matrix; + labels(start:finish) = strand_labels; + + end + +end \ No newline at end of file diff --git a/matlab/unzip_strands.m b/matlab/unzip_strands.m new file mode 100644 index 0000000..f00b70a --- /dev/null +++ b/matlab/unzip_strands.m @@ -0,0 +1,49 @@ +function [strand_matrix, labels] = unzip_strands(strands, prop_keys, prop_values, label_prefix) + + if ~exist('label_prefix', 'var') + label_prefix = ''; + end + + num_strands = size(strands,1); + + if num_strands == 0 + error ('No strands loaded.'); + end + + degree = size(strands{1},1); + + for strand_i = 1:num_strands + if size(strands{strand_i},1) ~= degree + error(['Degree of strand_matrix strand ' num2str(strand_i) ' (' num2str(size(strands{strand_i},1)) ') does match that of previous strands (' num2str(degree) ').']); + end + end + + num_props = length(prop_keys); + num_parameters = degree * 3 + num_props; + + strand_matrix = zeros(num_parameters, num_strands); + labels = cell(num_parameters,1); + + for prop_i = 1:num_props + strand_matrix(prop_i,:) = get_properties(prop_keys, prop_values, prop_keys{prop_i}); + labels{prop_i} = [label_prefix prop_keys{prop_i}]; + end + + for strand_i = 1:num_strands + + start = num_props + 1; +% finish = num_props + degree * 3; + + transposed_strand = strands{strand_i}'; + strand_matrix(start:end,strand_i) = transposed_strand(:); + + end + + for degree_i = 1:degree + for dim_i = 1:3 + param_i = (degree_i-1) * 3 + dim_i + num_props; + labels{param_i} = [label_prefix 'Degree ' num2str(degree_i-1) ' - Dim ' num2str(dim_i-1) ]; + end + end + +end \ No newline at end of file diff --git a/matlab/unzip_tensor.m b/matlab/unzip_tensor.m new file mode 100644 index 0000000..7e07b0d --- /dev/null +++ b/matlab/unzip_tensor.m @@ -0,0 +1,34 @@ +function [tensor_matrix, labels] = unzip_tensor(tensor_array, row_labels) + + num_rows = size(tensor_array,1); + + if num_rows ~= size(tensor_array,2) + error(['Number columns (' num2str(size(tensor_array,2)) ') does not match number of rows (' num2str(num_rows) ').']); + end + + if num_rows ~= length(row_labels) + error(['Length of column labels (' num2str(length(row_labels)) ') does not match number of rows (' num2str(num_rows) ').']); + end + + labels = cell(num_rows^2,1); + + for row_i = 1:num_rows + for col_i = 1:num_rows + + row_label = strrep(row_labels(row_i), '_', ' '); + col_label = strrep(row_labels(col_i), '_', ' '); + + row_label = row_label{1}; + col_label = col_label{1}; + + row_label = row_label(1:(end-1)); + col_label = col_label(1:(end-1)); + + labels{(row_i-1)*num_rows + col_i} = [row_label ' :: ' col_label]; + end + end + + tensor_matrix = reshape(tensor_array, num_rows^2, size(tensor_array,3)); + + +end \ No newline at end of file diff --git a/matlab/unzip_tract_sections.m b/matlab/unzip_tract_sections.m new file mode 100644 index 0000000..5c13222 --- /dev/null +++ b/matlab/unzip_tract_sections.m @@ -0,0 +1,36 @@ +function [section_matrix, labels] = unzip_tract_sections(sections, prop_keys, prop_values) + + num_sections = size(sections,1); + + if num_sections == 0 + error ('No sections loaded.'); + end + + num_props = length(prop_keys); + num_parameters = 12 + num_props; + + section_matrix = zeros(num_parameters, num_sections); + labels = cell(num_parameters,1); + + for prop_i = 1:num_props + section_matrix(prop_i,:) = get_properties(prop_keys, prop_values, prop_keys{prop_i}); + labels{prop_i} = prop_keys{prop_i}; + end + + for section_i = 1:num_sections + section_matrix((num_props+1):end, section_i) = sections{section_i}(:); + end + + labels{num_props+1} = 'Position - Dim 0'; + labels{num_props+2} = 'Position - Dim 1'; + labels{num_props+3} = 'Position - Dim 2'; + labels{num_props+4} = 'Tangent - Dim 0'; + labels{num_props+5} = 'Tangent - Dim 1'; + labels{num_props+6} = 'Tangent - Dim 2'; + labels{num_props+7} = 'Width 1 - Dim 0'; + labels{num_props+8} = 'Width 1 - Dim 1'; + labels{num_props+9} = 'Width 1 - Dim 2'; + labels{num_props+10} = 'Width 2 - Dim 0'; + labels{num_props+11} = 'Width 2 - Dim 1'; + labels{num_props+12} = 'Width 2 - Dim 2'; +end \ No newline at end of file diff --git a/matlab/unzip_tract_sets.m b/matlab/unzip_tract_sets.m new file mode 100644 index 0000000..7cb0e58 --- /dev/null +++ b/matlab/unzip_tract_sets.m @@ -0,0 +1,72 @@ +function [tract_sets_matrix, labels] = unzip_tract_sets(sets, set_prop_keys, set_prop_values, elem_prop_keys, elem_prop_values) + + num_sets = size(sets,1); + + if num_sets == 0 + error ('No sets loaded.'); + end + + num_tracts = size(sets{1},1); + first_set = sets(1); + degree = size(first_set{1}{1},1); + + for set_i = 1:num_sets + + set = sets{set_i}; + new_num_tracts = size(set,1); + + if new_num_tracts ~= num_tracts + error(['Number of tracts in set ' num2str(set_i) ' (' num2str(new_num_tracts) ') does match that of previous sets (' num2str(num_tracts) ').']); + end + + for tract_i = 1:num_tracts + + new_degree = size(set{tract_i,1},1); + + if new_degree ~= degree + error(['Degree of tract ' num2str(tract_i) ' in set ' num2str(set_i) ' (' num2str(new_degree) ') does match that of previous tracts (' num2str(degree) ').']); + end + end + + end + + + num_set_props = length(set_prop_keys); + num_elem_props = length(elem_prop_keys); + + num_parameters = num_tracts * degree * 3 + num_set_props + num_elem_props * num_tracts; + + + tract_sets_matrix = zeros(num_parameters, num_sets); + labels = cell(num_parameters,1); + + for prop_i = 1:num_set_props + tract_sets_matrix(prop_i,:) = get_properties(set_prop_keys, set_prop_values, set_prop_keys{prop_i}); + labels{prop_i} = set_prop_keys{prop_i}; + end + + + for tract_i = 1:num_tracts + + same_tract_across_sets = cell(num_sets,3); + same_tract_props_across_sets = cell(num_sets, num_elem_props); + + for set_i = 1:num_sets + + set = sets{set_i}; + + same_tract_across_sets(set_i,:) = set(tract_i,:); + same_tract_props_across_sets(set_i,:) = elem_prop_values{set_i}(tract_i,:); + end + + [tract_matrix, tract_labels] = unzip_tracts(same_tract_across_sets, elem_prop_keys, same_tract_props_across_sets, ['Tract ' num2str(tract_i-1) ' - ']); + + start = (tract_i-1) * (degree * 9 + num_elem_props) + num_set_props + 1; + finish = tract_i * (degree * 9 + num_elem_props) + num_set_props; + + tract_sets_matrix(start:finish,:) = tract_matrix; + labels(start:finish) = tract_labels; + + end + +end \ No newline at end of file diff --git a/matlab/unzip_tracts.m b/matlab/unzip_tracts.m new file mode 100644 index 0000000..f0e6e9c --- /dev/null +++ b/matlab/unzip_tracts.m @@ -0,0 +1,53 @@ +function [tract_matrix, labels] = unzip_tracts(tracts, prop_keys, prop_values, label_prefix) + + if ~exist('label_prefix', 'var') + label_prefix = ''; + end + + num_tracts = size(tracts,1); + + if num_tracts == 0 + error ('No tracts loaded.'); + end + + degree = size(tracts{1,1},1); + + for tract_i = 1:num_tracts + for ax_i = 1:3 + if size(tracts{tract_i,ax_i},1) ~= degree + error(['Degree of tract_matrix tract ' num2str(tract_i) ' (' num2str(size(tracts{tract_i,ax_i},1)) ') does match that of previous tracts (' num2str(degree) ').']); + end + end + end + + num_props = length(prop_keys); + num_parameters = degree * 3 * 3 + num_props; + + tract_matrix = zeros(num_parameters, num_tracts); + labels = cell(num_parameters,1); + + for prop_i = 1:num_props + tract_matrix(prop_i,:) = get_properties(prop_keys, prop_values, prop_keys{prop_i}); + labels{prop_i} = [label_prefix prop_keys{prop_i}]; + end + + for tract_i = 1:num_tracts + for ax_i = 1:3 + start = num_props + (ax_i-1) * degree * 3 + 1; + finish = num_props + (ax_i) * degree * 3; + transposed_tract = tracts{tract_i,ax_i}'; + tract_matrix(start:finish,tract_i) = transposed_tract(:); + end + end + + for ax_i = 0:1:2 + for degree_i = 0:1:(degree-1) + for dim_i = 0:1:2 + param_i = ax_i*degree*3 + degree_i * 3 + dim_i + (num_props+1); + labels{param_i} = [label_prefix 'Axis ' num2str(ax_i) ' - Degree ' num2str(degree_i) ' - Dim ' num2str(dim_i) ]; + end + end + end + + +end \ No newline at end of file diff --git a/matlab/unzip_triples.m b/matlab/unzip_triples.m new file mode 100644 index 0000000..e69de29 diff --git a/profiles/callgrind.out.16487 b/profiles/callgrind.out.16487 new file mode 100755 index 0000000..f32e1a4 --- /dev/null +++ b/profiles/callgrind.out.16487 @@ -0,0 +1,33910 @@ +version: 1 +creator: callgrind-3.6.0.SVN-Debian +pid: 16487 +cmd: dummy +part: 1 + + +desc: I1 cache: +desc: D1 cache: +desc: L2 cache: + +desc: Timerange: Basic block 0 - 208919124522 +desc: Trigger: Program termination + +positions: line +events: Ir +summary: 1323501268167 + + +ob=(1) /lib/ld-2.11.1.so +fl=(11) /build/buildd/eglibc-2.11.1/elf/dl-environ.c +fn=(26) _dl_next_ld_env_entry +31 3 ++3 11 ++2 90 ++11 43 +-13 130 ++17 1 +-14 20 ++5 2 +-3 2 ++3 2 ++2 2 + +fl=(38) /build/buildd/eglibc-2.11.1/elf/dl-init.c +fn=(174) _dl_init +93 11 ++5 1 +-4 1 ++1 1 ++3 2 ++7 2 ++27 2 ++1 24 ++1 11 +-1 11 ++1 22 +-97 33 ++9 10 +-3 20 ++3 30 ++5 27 ++5 16 ++8 16 ++6 48 +cob=(2) ??? +cfi=(13) ??? +cfn=(460) 0x0000000004e4e288 +calls=1 -70 +* 189547 +cob=(2) +cfi=(13) +cfn=(440) 0x0000000004c26f38 +calls=1 -70 +* 29 +cob=(2) +cfi=(13) +cfn=(420) 0x00000000051210f8 +calls=1 -70 +* 29 +cob=(2) +cfi=(13) +cfn=(400) 0x00000000054e0450 +calls=1 -70 +* 29 +cob=(2) +cfi=(13) +cfn=(264) 0x000000000576fec8 +calls=1 -70 +* 2214 +cob=(2) +cfi=(13) +cfn=(244) 0x0000000005a2fe00 +calls=1 -70 +* 29 +cob=(2) +cfi=(13) +cfn=(224) 0x0000000005cb1a98 +calls=1 -70 +* 29 +cob=(4) /lib/libc-2.11.1.so +cfi=(40) /build/buildd/eglibc-2.11.1/csu/../sysdeps/unix/sysv/linux/x86_64/../init-first.c +cfn=(196) _init +calls=1 -18 +* 6489 ++4 8 ++1 16 ++65 8 +-88 2 +-6 4 +-9 4 ++9 1 +-3 2 ++3 3 ++5 3 ++5 2 ++8 2 ++6 7 +cob=(2) +cfi=(13) +cfn=(176) 0x0000000004a234c8 +calls=1 -70 +* 29 +* 1 ++4 1 ++1 2 ++26 2 + +fl=(7) /build/buildd/eglibc-2.11.1/elf/../elf/dl-sysdep.c +fn=(166) _dl_sysdep_start_cleanup +251 1 + +fn=(54) _dl_important_hwcaps +353 6 ++3 1 +-3 2 ++3 1 +-1 1 ++1 1 ++9 1 +-12 4 ++12 1 ++10 3 ++44 4 +cfi=(20) /build/buildd/eglibc-2.11.1/io/../sysdeps/unix/syscall-template.S +cfn=(56) access +calls=1 82 +* 11 +* 3 +-2 1 ++17 1 +-17 1 ++17 5 ++3 2 ++22 2 ++8 2 ++2 1 ++1 1 +-1 2 ++1 4 ++8 1 +-4 2 ++1 1 +-1 1 ++4 1 ++3 2 ++4 6 ++1 2 ++18 10 ++1 3 +cfi=(14) /build/buildd/eglibc-2.11.1/elf/dl-minimal.c +cfn=(36) malloc +calls=1 96 +* 28 ++1 1 +-1 2 ++1 1 ++7 2 ++22 3 ++3 1 +-3 3 ++3 1 ++28 2 +-7 1 ++7 4 ++1 1 +-1 1 ++1 1 +-1 1 ++1 1 +-1 1 ++1 3 +-1 3 ++1 3 +-1 3 ++1 3 +-1 5 ++5 2 +-5 3 ++5 3 ++3 1 +-3 1 ++3 1 +-3 3 ++3 1 +-3 1 ++3 7 ++2 16 +-2 4 ++1 12 +-1 2 ++1 12 +-1 10 ++4 4 ++3 1 ++2 2 +-1 1 +-1 2 ++2 3 ++13 13 ++3 3 +-3 3 ++3 3 ++3 4 ++3 8 +379 3 ++63 4 ++98 5 +cfi=(15) /build/buildd/eglibc-2.11.1/string/../sysdeps/x86_64/memcpy.S +cfn=(58) mempcpy +calls=1 56 +* 22 +* 1 ++1 1 +-1 1 ++1 2 +cfi=(15) +cfn=(58) +calls=1 56 +* 22 +* 3 + +fn=(12) _dl_sysdep_start +88 8 ++25 1 +-1 1 ++1 143 ++3 1 +-3 1 ++6 2 +-2 1 +-1 1 ++3 1 +-6 1 ++6 4 ++1 1 +-1 7 ++1 105 ++3 2 +-4 49 +fi=(17) /build/buildd/eglibc-2.11.1/elf/../sysdeps/unix/sysv/linux/dl-sysdep.c +-83 2 +cfi=(8) /build/buildd/eglibc-2.11.1/elf/../sysdeps/unix/sysv/linux/x86_64/brk.c +cfn=(14) brk +calls=1 -7 +* 11 +fi=(5) /build/buildd/eglibc-2.11.1/elf/../sysdeps/x86_64/dl-machine.h +226 5 +fe=(7) ++2 2 +cfi=(10) /build/buildd/eglibc-2.11.1/elf/../misc/sbrk.c +cfn=(20) sbrk +calls=1 35 +* 17 +* 3 ++12 3 ++3 4 +cfi=(2) /build/buildd/eglibc-2.11.1/elf/rtld.c +cfn=(22) dl_main +calls=1 886 +* 2122610 ++2 9 +-67 1 +-59 4 ++34 1 +-34 4 ++43 1 +-43 4 ++40 1 +-40 4 ++37 1 +-37 5 ++13 1 +-13 4 ++10 1 +-10 4 ++7 1 +-7 4 +226 1 +cfi=(9) /build/buildd/eglibc-2.11.1/string/../sysdeps/x86_64/multiarch/../rtld-strlen.S +cfn=(18) strlen +calls=1 29 +* 42 +* 2 + +fl=(9) +fn=(18) +29 40 ++1 40 ++1 40 ++1 40 ++2 23 ++1 23 ++2 23 ++1 23 +-1 69 ++1 69 ++1 91 ++1 91 ++1 91 ++2 78 ++5 39 ++1 39 ++1 39 ++1 39 ++3 39 +-6 5 ++1 5 ++1 5 ++1 5 ++3 5 ++1 40 ++1 40 ++1 40 ++2 40 ++3 33 ++1 33 ++1 33 ++1 33 ++3 33 ++1 22 ++1 22 ++1 22 ++2 22 ++3 16 ++1 16 ++1 16 ++1 16 ++3 16 ++1 11 ++1 11 ++1 11 ++2 11 ++3 6 ++1 6 ++1 6 ++1 6 ++3 6 ++1 5 ++1 5 ++1 5 ++2 5 ++3 39 ++2 39 ++1 39 ++1 34 ++2 34 ++1 34 ++1 30 ++2 30 ++1 30 ++1 27 ++2 27 ++1 27 ++1 24 ++2 24 ++2 24 ++1 24 ++1 21 ++2 21 ++1 21 ++1 20 ++2 20 ++1 20 ++1 10 ++2 10 ++1 10 +-1 30 ++1 30 + +fl=(1) ??? +fn=(0) 0x0000000000000af0 +0 2 +cfi=(2) +cfn=(2) _dl_start +calls=1 363 +0 2123846 +0 14 +cfi=(38) +cfn=(174) +calls=1 93 +0 198780 +0 3 +cob=(12) /home/tclose/Code/Tractography/bin/dummy +cfi=(84) ??? +cfn=(1040) 0x000000000040e360 +calls=1 0 +0 1323498945522 + +fl=(34) /build/buildd/eglibc-2.11.1/elf/dl-version.c +fn=(134) match_symbol +82 460 ++9 46 +-8 46 +-1 138 ++1 46 ++8 46 ++6 138 ++15 46 ++1 92 ++2 46 ++5 92 ++14 572 ++12 720 ++4 480 +-30 480 ++19 276 +cfi=(16) /build/buildd/eglibc-2.11.1/string/../sysdeps/x86_64/multiarch/../strcmp.S +cfn=(44) strcmp +calls=46 -76 +* 3816 +* 138 ++34 46 ++1 322 + +fn=(132) _dl_check_map_versions +180 99 ++15 11 +-15 22 ++15 22 ++2 11 ++3 11 +-3 11 ++2 11 ++1 11 ++2 11 +-3 11 ++3 11 ++3 27 ++4 9 +-4 9 ++4 18 ++10 27 ++7 9 +62 9 +226 18 +62 54 +226 11 +62 11 +226 22 +62 106 ++1 163 +-1 326 ++2 549 +cfi=(26) /build/buildd/eglibc-2.11.1/elf/dl-misc.c +cfn=(84) _dl_name_match_p +calls=183 301 +* 11316 +* 366 +230 40 ++4 60 ++5 80 ++20 52 +-16 440 +cfn=(134) +calls=9 82 +* 1651 +* 222 +cfn=(134) +calls=37 82 +* 6395 +* 230 ++11 138 ++9 80 ++5 33 ++1 15 ++8 22 ++3 24 ++10 108 +-10 216 ++6 162 +-6 24 ++6 18 ++8 22 ++83 99 +-77 10 +-1 30 +cfi=(14) +cfn=(32) calloc +calls=10 111 +* 370 ++2 10 +-2 20 ++2 10 ++11 10 ++2 10 +-5 10 ++3 20 ++2 10 ++3 45 ++4 18 ++4 54 ++1 36 ++1 27 ++1 27 ++2 27 +-9 22 ++4 66 ++1 44 ++1 33 ++1 33 ++2 33 +-5 22 ++10 22 +-10 66 ++1 33 ++1 33 ++1 33 ++2 33 ++5 30 +-10 90 ++1 45 ++1 45 ++1 45 ++2 45 ++8 60 ++5 33 ++1 11 ++4 20 ++3 30 ++20 108 +-14 54 +-2 54 ++2 60 +-2 6 ++2 6 ++5 108 ++1 54 +-1 270 ++1 54 ++1 54 +-1 108 ++4 186 + +fn=(130) _dl_check_all_versions +383 5 ++4 1 +-4 1 ++4 1 +-4 1 ++4 3 ++1 33 +-1 11 ++1 11 +-1 22 ++5 7 +-3 44 +cfn=(132) +calls=11 180 +* 26216 +-1 44 + +fl=(20) +fn=(56) +82 36 ++1 9 ++1 54 + +fn=(92) read +82 36 ++1 9 + +fn=(90) open +82 248 ++1 62 ++1 312 + +fn=(104) close +82 40 ++1 10 + +fl=(18) /build/buildd/eglibc-2.11.1/posix/../sysdeps/unix/syscall-template.S +fn=(50) uname +82 4 ++1 1 + +fl=(17) +fn=(48) _dl_discover_osversion +67 4 ++2 3 ++85 5 +-45 3 +cfi=(18) +cfn=(50) +calls=1 -27 +* 5 +* 3 ++12 2 ++10 12 ++4 3 +-2 9 ++2 10 ++3 4 +-3 4 ++7 3 +-1 3 ++2 3 ++2 14 ++5 2 + +fl=(25) /build/buildd/eglibc-2.11.1/setjmp/../sysdeps/x86_64/setjmp.S +fn=(78) __sigsetjmp +26 26 ++2 26 ++1 52 ++1 26 ++4 26 ++1 26 ++1 26 ++1 26 ++1 26 ++2 52 ++2 26 ++1 26 ++2 52 ++2 26 ++4 26 ++1 26 + +fl=(33) /build/buildd/eglibc-2.11.1/string/memmove.c +fn=(124) memmove +47 2 ++5 4 +-5 10 ++1 2 +-1 2 ++5 4 ++5 6 ++22 102 ++30 14 + +fl=(19) /build/buildd/eglibc-2.11.1/elf/dl-load.c +fn=(94) _dl_map_object_from_fd +839 108 ++11 9 +-11 9 ++11 9 +-11 9 ++11 9 +cfi=(23) /build/buildd/eglibc-2.11.1/elf/dl-debug.c +cfn=(68) _dl_debug_initialize +calls=9 52 +* 81 ++4 27 +-4 9 ++4 9 +cfi=(27) /build/buildd/eglibc-2.11.1/io/../sysdeps/unix/sysv/linux/wordsize-64/fxstat.c +cfn=(96) _fxstat +calls=9 37 +* 90 +* 18 ++11 63 ++1 27 +-1 162 ++1 216 ++17 18 ++22 27 ++9 18 ++21 36 ++31 27 ++3 63 +cfi=(12) /build/buildd/eglibc-2.11.1/elf/dl-object.c +cfn=(28) _dl_new_object +calls=9 36 +* 4248 ++1 9 +-1 9 ++1 9 +-52 9 ++63 9 ++1 9 +-64 9 ++63 9 ++2 9 ++3 9 +-4 9 ++1 9 ++2 36 ++1 27 ++1 18 ++22 9 ++8 9 +-25 9 ++17 9 ++8 18 +-8 36 ++8 18 +-8 9 ++8 18 +-8 9 ++8 18 ++89 18 +-47 9 ++47 27 +-47 9 ++47 27 +-88 116 ++6 27 ++1 36 +-8 552 ++1 414 ++60 6 ++4 2 ++1 4 ++1 6 ++4 4 ++3 4 ++4 8 ++6 2 +cfi=(32) /build/buildd/eglibc-2.11.1/elf/dl-tls.c +cfn=(122) _dl_next_tls_modid +calls=2 54 +* 16 +* 6 ++1 2 +-67 90 ++6 108 ++8 18 ++1 18 +-1 18 ++1 18 +-1 36 ++1 18 ++1 126 ++2 54 ++1 54 ++1 54 ++4 18 +-4 18 ++4 45 ++5 81 ++11 9 +-11 81 ++11 9 +-46 6 ++1 2 +1160 27 ++1 27 +-5 18 ++1 9 +-70 8 ++78 36 +982 9 +1178 18 +982 9 +1178 36 ++2 9 +-2 9 ++2 9 ++19 72 +cfi=(21) /build/buildd/eglibc-2.11.1/misc/../sysdeps/unix/syscall-template.S +cfn=(60) mmap +calls=9 82 +* 54 ++4 9 +-4 9 ++4 18 ++7 27 ++1 9 ++2 9 +-2 9 ++2 9 ++10 18 ++35 54 ++1 27 ++2 36 ++7 72 ++6 9 ++2 9 +-2 9 ++1 9 ++2 18 +-1 36 ++8 18 ++3 18 ++11 72 +cfi=(28) /build/buildd/eglibc-2.11.1/string/../string/memset.c +cfn=(100) memset +calls=9 32 +* 1296 ++1 54 ++5 18 ++15 18 +-73 90 ++4 18 +-2 18 ++2 90 +cfi=(21) +cfn=(60) +calls=9 82 +* 54 +-2 18 +-29 63 +cfi=(21) +cfn=(98) mprotect +calls=9 82 +* 45 +* 9 +1323 9 +-77 9 ++77 18 ++9 9 +fi=(3) /build/buildd/eglibc-2.11.1/elf/dynamic-link.h +113 9 +fe=(19) +1332 9 +fi=(3) +113 9 ++6 9 +-2 9 ++2 18 ++7 9 ++5 9 ++3 9 ++1 9 +-3 9 +-5 18 +-1 212 ++1 132 ++10 44 +-18 132 ++18 9 +-18 27 ++2 410 ++8 152 ++8 152 +-18 456 ++25 27 ++20 36 ++1 36 ++1 36 ++1 36 ++2 36 ++5 36 ++1 35 ++1 36 ++6 27 ++5 18 ++7 18 ++1 36 ++16 27 ++5 1 ++2 1 +-2 2 ++2 1 ++2 2 ++2 2 ++3 27 ++2 2 ++2 2 ++3 18 +fe=(19) +1338 27 ++16 27 ++19 18 ++2 45 ++51 27 ++1 4 ++3 4 +cfi=(20) +cfn=(104) +calls=2 82 +* 10 +* 14 +cfi=(20) +cfn=(104) +calls=7 82 +* 35 +* 18 ++8 18 ++3 18 ++2 9 +-2 9 ++2 9 ++16 18 +cfi=(6) /build/buildd/eglibc-2.11.1/elf/dl-lookup.c +cfn=(10) _dl_setup_hash +calls=9 843 +* 261 ++4 18 ++1 18 ++17 18 ++4 9 ++5 9 +-5 9 ++1 18 ++4 9 ++8 9 +-1 18 ++20 81 +-35 2 +fi=(3) +128 36 ++3 36 ++3 36 ++1 36 +fe=(19) +1263 21 +-2 21 ++2 7 +-2 7 ++3 7 +-3 7 ++2 7 ++1 42 ++2 28 ++42 24 +cfi=(21) +cfn=(60) +calls=3 82 +* 18 ++3 6 + +fn=(120) local_strdup +160 28 ++1 7 +cfi=(9) +cfn=(18) +calls=7 29 +* 453 +* 7 ++1 14 +cfi=(14) +cfn=(36) +calls=7 -66 +* 196 ++2 14 ++3 14 ++1 14 +-1 7 ++1 7 +-1 7 +cfi=(15) +cfn=(42) memcpy +calls=7 56 +* 215 + +fn=(64) fillin_rpath +384 16 ++4 3 +cfi=(14) +cfn=(66) strsep +calls=1 -68 +* 24 +* 9 +cfi=(14) +cfn=(66) +calls=3 -68 +* 866 +* 12 ++3 6 +cfi=(9) +cfn=(18) +calls=3 29 +* 162 ++4 3 +-4 3 ++4 4 ++15 6 ++29 54 ++1 30 +-38 8 ++5 6 ++51 9 ++3 12 +cfi=(14) +cfn=(36) +calls=3 96 +* 84 ++3 3 +-3 3 ++3 3 ++4 3 ++2 9 +-2 6 ++2 3 +cfi=(15) +cfn=(58) +calls=3 56 +* 81 +* 3 ++3 3 +-2 6 ++2 3 ++1 1 ++5 2 ++1 1 +-1 2 ++1 2 +-1 4 ++1 2 +-1 4 ++1 41 ++1 2 +-1 6 ++1 2 +-1 32 +-98 2 ++98 3 ++1 13 +-1 2 ++1 2 +-1 8 ++1 2 +-1 6 ++4 3 +-1 6 ++1 3 ++7 6 ++1 3 ++3 9 ++5 1 ++3 9 +-14 6 +-9 2 + +fn=(82) _dl_map_object +1958 364 ++7 52 ++1 52 ++3 156 ++12 372 +-12 558 ++5 609 ++1 406 ++2 609 +cfi=(26) +cfn=(84) +calls=203 301 +* 12464 +* 406 +2240 234 +2001 9 +-1 18 ++10 9 +-1 18 ++26 18 +-2 9 ++2 9 +cfi=(22) /build/buildd/eglibc-2.11.1/string/../sysdeps/x86_64/multiarch/../strchr.S +cfn=(62) index +calls=9 26 +* 273 +* 18 +2172 2 ++1 3 +cfn=(86) expand_dynamic_string_token +calls=1 314 +* 231 ++2 1 +-3 1 ++3 1 ++4 9 +cfn=(88) open_verify +calls=1 1565 +* 202 ++3 1 +-3 1 ++3 1 ++11 27 ++3 18 ++41 9 ++1 63 +-1 9 ++1 27 +cfn=(94) +calls=9 839 +* 13987 +* 18 +2000 18 ++39 16 +cfi=(9) +cfn=(18) +calls=8 29 +* 431 +* 8 ++2 8 +-2 8 ++2 8 ++7 32 ++33 24 ++1 112 +cfn=(110) open_path +calls=8 1809 +* 9409 ++6 8 +-6 8 ++6 8 ++7 2 ++71 16 +-78 14 +599 21 +2095 21 ++6 14 +cfi=(31) /build/buildd/eglibc-2.11.1/elf/dl-cache.c +cfn=(114) _dl_load_cache_lookup +calls=7 182 +* 9571 ++2 7 +-2 7 ++2 7 ++4 21 ++12 14 ++22 70 +cfn=(88) +calls=7 1565 +* 1484 ++3 21 ++2 21 +cfn=(120) +calls=7 160 +* 983 ++1 7 +-1 7 ++1 14 +-90 8 +-5 16 ++5 8 ++3 16 +-3 8 ++3 16 +-3 8 ++3 56 +-3 24 +599 24 +2058 24 ++13 40 ++1 40 +599 24 +1982 186 +-1 372 ++4 117 ++2 117 +-2 234 ++2 351 +cfi=(16) +cfn=(44) +calls=117 63 +* 2996 +* 351 + +fn=(52) _dl_init_paths +622 1 ++15 2 +-15 8 ++15 3 +cfi=(7) +cfn=(54) +calls=1 353 +* 355 ++4 1 +-4 1 ++4 1 +cfi=(14) +cfn=(36) +calls=1 96 +* 28 ++2 1 +-2 2 ++2 1 ++7 7 ++4 2 +cfi=(14) +cfn=(36) +calls=1 96 +* 53 +* 1 ++3 3 ++7 1 ++22 1 +-3 1 ++1 2 ++2 1 +-23 1 ++23 4 +-22 1 ++18 1 ++4 2 +-12 1 +-2 1 ++3 1 ++2 1 +-3 1 ++4 2 ++4 1 +-3 1 ++3 1 +-8 3 +-2 3 ++3 3 ++2 3 +-3 3 ++4 6 ++4 3 +-3 3 ++3 3 ++1 8 +-1 52 ++2 4 +-1 12 ++1 4 +-1 48 ++1 8 +-1 4 ++1 4 +-1 16 ++1 4 +-1 12 ++3 4 +-14 4 ++14 24 ++7 1 ++4 1 +-5 1 ++6 2 ++2 4 ++2 3 ++32 5 ++8 3 +cfi=(22) +cfn=(62) +calls=1 26 +* 52 +* 2 ++2 2 +cfi=(9) +cfn=(18) +calls=1 29 +* 86 +* 8 +cfi=(15) +cfn=(42) +calls=1 56 +* 62 +* 1 ++17 7 ++2 1 ++1 2 ++1 1 +-4 3 ++2 44 ++1 88 ++1 44 +-4 133 ++7 1 +cfi=(14) +cfn=(36) +calls=1 96 +* 28 ++2 1 +-2 1 ++2 1 ++6 7 +cfn=(64) +calls=1 384 +* 1630 ++4 3 ++6 1 +-52 1 ++58 2 ++1 8 +-75 1 +-2 1 ++2 2 ++11 2 + +fn=(86) +314 8 ++10 1 +-10 1 ++10 2 +cfi=(22) +cfn=(62) +calls=1 26 +* 43 +* 2 +161 2 +cfi=(9) +cfn=(18) +calls=1 29 +* 81 +* 1 ++1 2 +cfi=(14) +cfn=(36) +calls=1 -66 +* 28 ++2 2 ++3 2 +339 3 +167 1 +339 4 +167 1 +cfi=(15) +cfn=(42) +calls=1 56 +* 47 + +fn=(88) +1565 671 ++36 61 +-36 183 ++36 242 ++21 244 +cfi=(20) +cfn=(90) +calls=61 82 +* 617 ++1 61 +-1 61 ++1 61 ++11 27 +-1 9 ++1 45 +cfi=(20) +cfn=(92) +calls=9 82 +* 45 +* 18 ++7 27 +-7 9 ++7 9 ++16 126 ++50 18 ++5 18 ++2 27 ++6 18 ++7 9 ++1 9 ++1 9 +-2 36 ++1 27 ++16 36 ++15 18 +-15 480 ++1 169 ++4 45 ++1 27 ++14 63 ++2 27 ++5 2 ++1 2 +-13 123 ++16 4 ++6 2 +-3 2 ++1 2 ++1 2 ++1 4 ++14 563 +-13 2 +-1 22 + +fn=(110) +1809 64 ++1 8 +-1 40 ++7 8 +-7 8 ++1 8 ++6 16 ++5 32 ++52 16 +-52 8 ++52 8 +-52 56 ++75 24 +-63 69 ++7 92 +cfi=(15) +cfn=(58) +calls=23 56 +* 617 ++1 23 +-1 23 ++1 161 ++20 16 ++26 3 +-46 479 ++3 184 ++4 318 +cfi=(15) +cfn=(58) +calls=53 56 +* 1032 +* 212 +cfi=(15) +cfn=(58) +calls=53 56 +* 1355 +* 53 +-1 53 ++7 106 ++3 371 +cfn=(88) +calls=53 1565 +* 2596 +* 53 ++2 159 ++26 180 ++2 134 ++39 22 +-41 22 ++41 110 ++7 22 +-2 22 ++2 118 +-67 16 ++1 48 ++79 8 +-79 16 ++6 16 ++3 8 +-3 8 ++3 24 +cfi=(30) /build/buildd/eglibc-2.11.1/io/../sysdeps/unix/sysv/linux/wordsize-64/xstat.c +cfn=(112) _xstat +calls=8 37 +* 98 +-1 16 ++1 8 ++2 12 ++7 24 ++27 3 +cfi=(14) +cfn=(36) +calls=1 96 +* 28 +* 1 ++1 2 +-1 1 ++1 1 ++2 4 +cfi=(15) +cfn=(42) +calls=1 56 +* 51 ++1 2 ++34 72 +-14 21 ++10 14 +-66 6 + +fl=(21) +fn=(98) +82 80 ++1 20 + +fn=(170) munmap +82 4 ++1 1 + +fn=(60) +82 140 ++1 28 + +fl=(26) +fn=(116) _dl_sysdep_read_whole_file +44 2 ++3 1 +-3 4 ++3 1 +-3 1 ++3 1 +cfi=(20) +cfn=(90) +calls=1 +35 +* 5 ++1 1 +-1 1 ++1 2 ++2 4 +cfi=(27) +cfn=(96) +calls=1 -13 +* 10 +* 2 ++2 1 ++3 1 +-3 1 ++3 1 ++13 2 +cfi=(20) +cfn=(104) +calls=1 +14 +* 5 ++3 7 +-14 7 +cfi=(21) +cfn=(60) +calls=1 +25 +* 6 +* 2 + +fn=(84) +301 10225 ++1 4090 +cfi=(16) +cfn=(44) +calls=2045 63 +* 14322 +* 4090 ++3 2045 ++2 4090 ++4 2036 +-4 6108 ++1 6219 +cfi=(16) +cfn=(44) +calls=2073 63 +* 47163 +* 4146 ++6 37 +-7 37 ++7 2119 +-7 2008 ++7 6024 + +fl=(28) +fn=(100) +32 11 +-2 22 ++2 11 ++5 22 ++1 33 ++1 33 ++3 33 ++4 22 ++8 22 ++1 43 ++2 7 ++1 7 ++1 7 ++1 7 ++1 7 ++1 7 ++1 7 ++1 14 +-9 14 ++2 70 ++1 70 ++1 70 ++1 70 ++1 70 ++1 70 ++1 70 ++1 140 +-9 140 +-30 14 ++43 7 ++3 14 ++1 14 +-4 4 ++3 8 ++1 41 ++2 22 +-2 22 ++2 54 +-2 54 +-47 11 ++53 11 ++4 22 ++8 11 + +fl=(29) /build/buildd/eglibc-2.11.1/elf/dl-deps.c +fn=(106) _dl_map_object_deps +149 1 ++1 1 +-1 2 ++1 1 +-1 2 ++1 1 +-1 1 ++1 2 +-1 4 ++1 1 +-1 1 ++1 2 ++16 1 +-16 1 ++14 1 ++1 1 ++1 1 ++6 3 ++10 1 +-10 1 ++10 1 +-36 5 ++20 1 +-2 1 ++19 1 +-17 1 ++6 1 +-6 1 +-2 1 ++2 1 +-2 1 ++1 1 ++1 1 ++6 3 ++10 1 +-10 1 ++10 5 ++19 1 +-15 1 +338 2 +203 1 ++1 1 +-18 2 +338 1 +201 1 +338 1 +204 1 +338 5 +208 2 ++5 1 ++4 2 +-9 20 ++5 10 ++4 20 ++2 2 ++3 22 ++2 9 ++11 9 +-4 9 +-7 9 ++6 9 ++1 9 +-7 9 ++5 9 ++3 18 ++3 63 ++50 50 ++1 51 +-51 860 ++1 430 ++6 125 +cfi=(22) +cfn=(62) +calls=25 26 +* 778 +* 75 ++5 125 +-3 25 ++3 25 +cfi=(24) /build/buildd/eglibc-2.11.1/elf/dl-error.c +cfn=(74) _dl_catch_error +calls=25 -87 +* 58503 ++2 75 ++15 25 ++2 50 ++5 9 ++6 9 ++2 9 +-8 18 ++5 9 +-2 9 ++1 9 ++2 9 ++4 54 +-59 8 ++13 4 +466 22 ++2 27 ++2 27 +cfi=(14) +cfn=(36) +calls=9 96 +* 252 ++2 9 +-2 9 ++2 9 ++4 36 +-1 9 ++2 9 +-1 18 +cfi=(15) +cfn=(42) +calls=9 56 +* 253 ++1 36 +cfi=(15) +cfn=(42) +calls=9 56 +* 253 ++3 9 ++4 66 ++2 11 ++1 72 +217 42 ++1 10 +-1 20 ++2 63 +487 4 ++4 2 ++4 5 ++11 4 +cfi=(14) +cfn=(36) +calls=1 96 +* 28 ++2 1 +-2 1 ++2 1 ++5 2 ++1 1 +-1 1 ++1 1 +-1 1 ++1 1 +-1 1 ++1 4 ++8 5 ++4 2 +-10 3 ++6 50 ++4 20 +-10 30 ++13 2 ++46 5 ++2 4 ++35 3 ++7 1 ++6 2 +-6 1 ++6 2 +-6 9 ++6 18 +-6 9 ++6 212 ++5 38 ++4 27 ++1 18 +-1 111 ++1 83 ++3 299 +-1 544 +-7 138 +-13 40 ++40 2 ++10 1 +-8 1 ++8 1 ++3 2 ++3 8 +-30 13 ++6 1 +-6 1 +cfi=(33) +cfn=(124) +calls=1 47 +* 73 ++2 1 ++6 5 +-6 1 ++6 1 +491 2 ++1 3 +288 760 +612 8 +cfi=(15) +cfn=(42) +calls=1 56 +* 64 ++5 4 + +fn=(108) openaux +62 50 ++4 25 +-4 25 ++7 25 +-4 50 ++1 25 +-1 50 ++1 100 +-1 75 +cfi=(19) +cfn=(82) +calls=25 1958 +* 56553 +* 25 ++5 75 + +fl=(36) /build/buildd/eglibc-2.11.1/elf/dl-reloc.c +fn=(146) _dl_relocate_object +158 66 ++10 22 +-10 33 ++14 11 +-14 22 ++14 11 ++1 55 ++6 22 ++6 33 ++4 22 ++8 33 ++45 11 +fi=(5) +96 22 +fe=(36) +242 22 +fi=(5) +96 11 ++39 3 +fe=(36) +268 320 +156 20 +fi=(5) +295 10 +fe=(36) +-27 10 +fi=(5) ++27 10 +fi=(4) /build/buildd/eglibc-2.11.1/elf/do-rel.h +65 10 +-8 10 ++1 10 ++1 10 ++6 10 +fe=(36) +268 2 +156 2 +fi=(5) +295 1 +fe=(36) +-27 1 +fi=(5) ++27 1 +fi=(4) +65 1 +-8 1 ++1 1 ++1 1 ++6 12 +-8 11 ++1 11 ++1 11 ++6 11 ++3 32 +fi=(5) +476 10 +-1 20 ++4 20 +-3 1491 +-1 2982 ++4 2982 ++2 4503 ++1 1501 +fi=(4) +68 4503 +fe=(36) +268 165 ++3 33 ++40 11 ++3 22 ++13 22 ++1 22 +cfn=(160) _dl_protect_relro +calls=11 +8 +* 275 +* 11 ++1 88 +fi=(5) +135 20 +-39 20 ++6 20 ++4 30 ++13 10 +-8 10 ++8 20 ++13 10 ++3 10 +-3 10 ++3 30 +fe=(36) ++51 33 ++82 9 +fi=(4) +75 11 ++2 11 +-2 22 ++1 11 ++1 102 ++14 10 +-12 10 ++12 21 +-12 1 ++12 2 ++10 22 ++10 33 ++4 10 ++2 10 +-2 10 ++2 10 +fi=(5) +296 30 +fi=(4) +119 20 ++1 10 ++2 20 +-2 10 +-1 10 +fi=(5) +267 10 +fi=(4) +119 10 +fi=(5) +270 10 +fi=(4) +119 10 ++1 30 +fi=(5) +270 10 +fi=(4) +119 5758 ++1 2879 ++2 5758 +-2 2879 +-1 2879 +fi=(5) +267 2879 +fi=(4) +119 2879 +fi=(5) +270 2879 +fi=(4) +119 2879 ++1 8637 +fi=(5) +270 2879 ++18 5778 ++7 52819 +fi=(4) +120 3492 +fi=(5) +295 5238 +fi=(4) +120 1746 +fi=(5) +295 7005 +fi=(4) +120 14 +fi=(5) +295 21 +fi=(4) +120 7 +fi=(5) +295 21064 +cfi=(6) +cfn=(152) _dl_lookup_symbol_x +calls=1753 698 +* 1738268 +* 7012 ++1 8667 ++4 2869 +-4 5738 ++4 8607 ++9 17334 ++85 2875 +fi=(4) +117 5750 +fi=(5) +394 2875 +fi=(4) +117 2885 +fi=(5) +377 30 ++4 30 ++5 20 +fi=(4) +117 10 +fi=(5) +386 20 +fi=(4) +117 20 +fi=(5) +335 3 ++1 2 +fi=(4) +117 1 +fi=(5) +336 1 +fi=(4) +117 2 +fi=(5) +327 6 ++1 3 +fi=(4) +117 3 +fi=(5) +328 3 +fi=(4) +117 6 +fi=(5) +295 14 +fi=(4) +104 30 +fi=(5) +466 9 +fi=(4) +105 9 +fi=(5) +466 18 ++1 18 +fi=(4) +104 9 +fi=(5) +465 9 +fi=(4) +104 9 +fi=(5) +467 9 +fi=(4) +104 9 +fi=(5) +467 5236 +fi=(4) +104 2618 +fi=(5) +465 2618 +fi=(4) +104 2618 +fi=(5) +467 2618 +fi=(4) +104 2618 +fi=(5) +466 2618 +fi=(4) +105 2618 +fi=(5) +466 2618 +fi=(4) +127 5 ++1 2 ++1 2 +-1 1 +fi=(5) +267 1 +fi=(4) +128 1 +fi=(5) +270 1 +fi=(4) +128 3 +fi=(5) +270 1 +fi=(4) +128 4 ++1 4 +-1 2 +fi=(5) +267 2 +fi=(4) +128 2 +fi=(5) +270 2 +fi=(4) +128 6 +fi=(5) +270 2 ++18 6 ++7 117 +cfi=(6) +cfn=(152) +calls=3 698 +* 2668 +* 12 ++1 9 ++4 1 +-4 2 ++4 3 ++9 18 ++85 9 +fi=(4) +127 10 +fi=(5) +295 28099 +fe=(36) + +fn=(160) +336 11 +-2 22 ++1 22 ++1 33 ++2 22 ++2 22 ++1 33 +cfi=(21) +cfn=(98) +calls=11 82 +* 55 +-1 22 ++7 33 + +fl=(32) +fn=(162) _dl_add_to_slotinfo +820 2 ++9 2 +-9 6 ++6 4 ++8 6 ++42 2 +-1 6 ++1 4 ++1 8 + +fn=(122) +54 2 ++3 6 ++48 4 ++4 4 + +fn=(138) _dl_determine_tlsoffset +116 7 ++6 3 ++3 2 ++36 3 ++2 9 +-38 1 ++38 2 ++3 4 ++4 4 +-4 6 ++2 4 ++2 6 ++12 4 ++4 10 ++2 8 ++10 2 +-37 4 ++37 2 +-37 5 ++41 1 +-1 1 ++52 1 +-51 4 ++52 8 + +fn=(140) _dl_allocate_tls_storage +332 1 ++13 1 +-13 2 ++2 1 ++11 2 +cfi=(14) +cfn=(40) __libc_memalign +calls=1 53 +* 50 ++1 1 +-1 1 ++1 1 ++7 1 ++4 305 +-58 1 ++1 1 +-1 1 ++1 2 +cfi=(14) +cfn=(32) +calls=1 111 +* 37 ++1 2 ++3 1 ++6 2 ++64 5 + +fn=(164) _dl_allocate_tls_init +380 7 ++1 1 +-1 1 ++1 1 ++12 1 +-8 1 ++8 5 ++5 7 ++6 11 ++22 4 ++1 6 ++2 4 ++1 6 ++8 6 ++1 6 ++1 10 +cfi=(15) +cfn=(58) +calls=2 56 +* 37 +* 8 +cfi=(28) +cfn=(100) +calls=2 32 +* 112 +* 6 +-42 6 ++6 9 ++3 1 ++1 2 +-1 1 ++1 2 ++6 2 ++2 2 +-2 4 ++2 4 ++38 1 ++3 9 + +fl=(16) +fn=(44) +63 6086 ++1 6086 ++1 6086 ++1 3455 ++1 3455 ++1 3455 ++1 3455 +cfn=(45) strcmp'2 +calls=3455 -6 +* 209833 ++5 2631 ++1 2631 ++1 2631 ++1 2631 + +fn=(45) +63 29437 ++1 29437 ++1 29437 ++1 27869 ++1 27869 ++1 27869 ++1 27869 +cfn=(45) +calls=25982 -6 +* 1770092 ++2 1887 ++1 1887 ++2 1568 ++1 1568 ++1 1568 ++1 1568 + +fl=(12) +fn=(28) +36 90 ++3 10 +-3 40 ++3 10 +cfi=(9) +cfn=(18) +calls=10 -10 +* 522 ++6 10 +-6 10 ++7 20 ++6 40 +cfi=(14) +cfn=(32) +calls=10 +59 +* 451 ++3 10 +-3 10 ++3 20 ++4 10 ++5 10 +-6 10 ++4 10 ++2 10 +-5 10 ++3 10 ++2 20 +cfi=(15) +cfn=(42) +calls=10 -8 +* 273 ++2 10 +-2 10 ++5 10 +-1 10 +-2 10 ++3 40 ++3 10 +-3 10 ++3 10 ++9 10 +-7 10 ++4 10 ++3 10 +-47 5 ++49 2 +-2 2 ++2 30 +-2 30 ++18 20 +-6 10 ++1 10 ++5 10 +-6 10 ++6 39 ++3 216 ++7 9 +-5 9 ++2 9 ++3 63 ++4 27 ++1 18 ++1 9 ++3 9 +-3 9 ++3 9 +-5 3 ++1 2 ++1 1 ++3 1 +-3 1 ++3 2 ++4 27 ++4 63 ++8 1 ++6 1 +-3 2 ++3 11 +-3 18 ++3 18 ++2 18 +cfi=(9) +cfn=(18) +calls=9 29 +* 470 +* 9 ++4 9 +-4 9 ++4 9 ++64 9 ++4 90 +46 100 ++27 20 ++39 5 ++10 1 ++4 4 ++24 18 +cfi=(14) +cfn=(36) +calls=9 -54 +* 252 ++1 9 +-1 9 ++1 27 ++45 27 +cfi=(15) +cfn=(58) +calls=9 56 +* 309 +* 9 ++6 274 +-1 137 ++1 146 +-1 9 ++1 9 ++2 18 ++3 18 + +fl=(15) +fn=(58) +56 145 ++4 145 ++3 145 ++1 145 ++2 52 ++1 52 ++2 52 ++1 52 ++5 52 ++1 52 +-1 93 ++1 93 ++2 85 ++1 85 ++2 85 ++1 85 ++5 85 ++1 85 +-1 60 ++1 60 ++2 60 ++1 60 ++2 60 ++1 60 ++5 60 ++1 60 +-1 85 ++1 85 ++2 74 ++1 74 ++2 74 ++1 148 ++5 74 ++1 74 +-1 71 ++1 98 ++5 27 ++1 27 ++1 27 ++1 27 ++2 27 ++2 27 ++1 27 ++2 27 ++6 145 ++4 145 ++12 2 ++2 2 ++1 2 ++26 2 ++1 2 ++3 2 ++1 2 ++1 2 ++5 2 ++2 2 ++1 2 ++1 2 ++1 2 ++2 2 ++1 2 ++1 2 ++1 2 ++2 2 ++1 2 ++2 2 ++22 2 ++2 2 + +fn=(42) +56 40 ++2 40 ++2 40 ++3 40 ++1 40 ++2 11 ++1 11 ++2 11 ++1 11 ++5 11 ++1 11 +-1 29 ++1 29 ++2 12 ++1 12 ++2 12 ++1 24 ++5 12 ++1 12 +-1 28 ++1 28 ++2 9 ++1 9 ++2 9 ++1 9 ++5 9 ++1 9 +-1 31 ++1 31 ++2 22 ++1 22 ++2 22 ++1 22 ++5 22 ++1 22 +-1 18 ++1 42 ++5 24 ++1 24 ++1 24 ++1 24 ++2 24 ++2 24 ++1 24 ++2 24 ++8 40 ++8 10 ++6 10 ++2 10 ++1 10 ++3 2 ++1 4 ++5 2 ++1 2 ++2 2 ++2 2 ++1 2 ++2 2 +-8 1 ++1 1 ++2 1 ++2 1 ++1 1 ++2 3 ++9 2 ++1 2 +-1 8 ++1 8 ++3 10 ++1 10 ++1 10 ++5 10 ++2 10 ++1 10 ++1 10 ++1 10 ++2 10 ++1 10 ++1 10 ++1 10 ++2 10 ++1 10 ++2 10 ++2 1 ++2 1 ++1 1 ++1 1 ++1 1 ++2 1 ++1 1 ++1 1 ++1 1 ++2 1 ++1 1 ++2 2 ++5 1 ++6 1 ++1 1 +-7 9 ++6 9 ++1 9 + +fl=(14) +fn=(36) +96 171 +cfn=(40) +calls=57 -43 +* 1556 + +fn=(32) +111 22 +-3 22 ++3 44 +-3 22 ++3 44 ++4 44 +cfn=(36) +calls=22 -19 +* 722 + +fn=(40) +53 232 ++1 231 ++11 171 ++3 57 +-3 57 ++3 114 +-3 3 ++3 1 +-3 1 ++3 210 ++4 24 ++1 18 ++6 42 +cfi=(21) +cfn=(60) +calls=6 +3 +* 36 ++2 12 ++3 12 ++1 12 +-1 6 ++1 12 ++3 6 ++1 6 ++2 24 +-3 52 ++1 52 ++2 208 +-31 2 +-1 5 + +fn=(66) +320 6 ++3 18 ++2 6 ++1 12 ++4 32 ++5 8 +-5 264 ++5 356 ++2 720 ++8 90 +-15 272 ++18 2 ++4 8 +-13 4 ++2 4 ++7 2 ++4 4 + +fl=(24) +fn=(74) +160 182 ++9 26 ++2 26 +cfi=(2) +cfn=(76) _dl_initial_error_catch_tsd +calls=26 794 +* 52 +* 26 ++1 26 ++2 52 +-2 26 ++2 26 +cfi=(25) +cfn=(78) +calls=26 26 +* 494 ++1 26 +-1 26 ++1 26 ++2 52 ++1 26 +-1 26 ++1 26 +cfi=(29) +cfn=(108) +calls=25 62 +* 57078 +cfi=(2) +cfn=(80) map_doit +calls=1 627 +* 2192 ++1 78 ++1 26 ++1 26 +-1 26 ++2 26 +-1 26 ++1 26 ++10 104 + +fn=(126) _dl_receive_error +198 10 ++1 1 +cfi=(2) +cfn=(76) +calls=1 794 +* 2 ++5 1 +-1 1 +-4 1 ++9 1 ++2 1 +-3 1 ++3 1 +cfi=(2) +cfn=(128) version_check_doit +calls=1 658 +* 26410 ++2 1 ++1 1 ++1 8 + +fl=(27) +fn=(96) +37 10 +-1 10 ++1 10 ++1 60 ++4 10 + +fl=(55) /build/buildd/eglibc-2.11.1/elf/../elf/dl-runtime.c +fn=(358) _dl_fixup +73 375 ++6 750 +-6 375 ++6 375 +-6 1125 ++6 375 ++1 375 +-4 375 ++3 375 +-3 375 ++4 375 ++1 375 +-1 1875 ++6 375 +-5 375 +-1 375 ++6 375 ++4 750 ++4 1125 ++5 2244 ++1 1122 ++8 1500 ++7 750 ++3 3750 +cfi=(6) +cfn=(152) +calls=375 698 +* 488484 +* 375 ++4 1125 ++4 1500 ++6 2625 ++8 375 ++7 1500 ++4 1125 +fi=(5) ++85 375 +fe=(55) +-81 2250 +-55 192 ++48 6 +cob=(4) +cfi=(136) /build/buildd/eglibc-2.11.1/string/../sysdeps/x86_64/multiarch/strcmp.S +cfn=(3194) strcmp +calls=1 -86 +* 9 +cob=(4) +cfi=(135) /build/buildd/eglibc-2.11.1/string/../sysdeps/x86_64/multiarch/strcpy.S +cfn=(3026) strncpy +calls=1 -86 +* 7 +cob=(4) +cfi=(121) /build/buildd/eglibc-2.11.1/string/../sysdeps/x86_64/multiarch/memcmp.S +cfn=(2148) bcmp +calls=1 29 +* 6 +cob=(4) +cfi=(80) /build/buildd/eglibc-2.11.1/string/../sysdeps/x86_64/multiarch/strlen.S +cfn=(940) strlen +calls=3 32 +* 18 +* 6 + +fl=(23) +fn=(68) +52 22 ++5 11 +-5 11 ++5 22 ++4 1 +-1 1 ++1 1 ++1 2 +-1 1 ++1 3 ++1 2 ++4 11 +-10 20 + +fn=(70) _dl_debug_state +77 2 + +fl=(152) /build/buildd/eglibc-2.11.1/elf/dl-fini.c +fn=(3700) _dl_sort_fini +34 10 ++1 1 +-1 1 ++1 1 ++2 1 ++2 2 ++7 9 +-7 3 ++3 50 ++4 50 ++1 106 +-1 220 ++5 76 ++2 27 ++1 18 +-1 111 ++1 83 ++3 200 ++23 99 +-24 544 ++27 138 +-32 202 +-12 27 ++76 8 +-53 13 +cfi=(33) +cfn=(124) +calls=1 -15 +* 73 ++4 1 +-2 1 ++2 3 +-2 1 ++2 1 ++9 2 ++2 1 + +fn=(3698) _dl_fini +121 11 ++22 8 ++3 2 +cfi=(2) +cfn=(896) rtld_lock_default_lock_recursive +calls=1 835 +* 2 ++3 1 ++3 2 ++2 1 +-2 1 ++2 1 +-2 4 ++13 5 ++16 3 ++2 22 ++2 22 ++2 22 ++1 11 ++5 11 +-4 11 +-2 11 +-6 33 ++14 2 ++4 2 ++2 5 ++9 1 +-9 1 +cfn=(3700) +calls=1 34 +* 2083 ++9 2 +cfi=(2) +cfn=(898) rtld_lock_default_unlock_recursive +calls=1 841 +* 2 +* 3 ++6 2 ++2 3 +-2 20 ++2 30 ++3 22 ++3 33 ++4 2 ++7 20 ++4 4 ++2 3 ++1 4 ++1 4 +cob=(4) +cfi=(46) /build/buildd/eglibc-2.11.1/elf/soinit.c +cfn=(3924) __libc_fini +calls=1 19 +* 6 +-1 4 ++5 30 ++1 27 +cob=(2) +cfi=(13) +cfn=(3904) 0x0000000005cc23c8 +calls=1 0 +* 2267 +cob=(2) +cfi=(13) +cfn=(3884) 0x0000000005a707f8 +calls=1 0 +* 2267 +cob=(2) +cfi=(13) +cfn=(3862) 0x00000000057e9238 +calls=1 0 +* 2310 +cob=(2) +cfi=(13) +cfn=(3842) 0x0000000005514ce8 +calls=1 0 +* 2267 +cob=(2) +cfi=(13) +cfn=(3824) 0x000000000528ded8 +calls=1 0 +* 2267 +cob=(2) +cfi=(13) +cfn=(3804) 0x0000000004c33d38 +calls=1 0 +* 2267 +cob=(2) +cfi=(13) +cfn=(3736) 0x0000000004eb8368 +calls=1 0 +* 10837 +cob=(2) +cfi=(13) +cfn=(3712) 0x0000000004a23748 +calls=1 0 +* 1546 +cob=(2) +cfi=(13) +cfn=(3702) 0x00000000004d8fd8 +calls=1 0 +* 22 ++5 55 +-39 11 ++55 11 +-55 33 +-71 2 ++71 1 +-71 1 +274 5 ++6 2 ++7 8 +-62 20 ++3 18 +-61 2 ++3 8 + +fl=(6) +fn=(156) check_match.12169 +132 12654 ++1 4218 ++2 4218 ++2 10545 ++10 6327 ++3 4218 ++5 2109 +-1 2109 ++1 2109 +-1 2109 ++1 2109 ++2 2994 ++19 2994 ++1 7485 ++1 1497 +-1 2994 ++1 4488 +cfi=(16) +cfn=(44) +calls=1496 63 +* 128810 +-1 2992 ++46 14763 +-73 1540 +cfi=(16) +cfn=(44) +calls=308 -87 +* 55321 +* 924 ++29 3 +-2 4 ++28 1836 ++2 7344 +-72 4216 + +fn=(152) +698 6393 +459 2131 +698 8524 +459 2131 +698 14917 +459 10655 ++1 4262 +-1 2131 ++1 6393 +-1 6393 ++1 152016 +-1 76008 ++1 228024 +-1 232286 +700 2131 ++4 2131 ++4 2131 +-8 2131 ++1 4262 ++7 5125 ++5 10655 ++6 19179 ++8 44 +-8 110 ++2 31965 +cfn=(154) do_lookup_x +calls=2131 82 +* 1322969 ++3 4262 +-5 2131 ++33 4262 ++23 6327 ++1 12654 ++35 8436 ++14 6327 ++3 6327 +962 2109 +833 2109 ++1 2109 ++1 17048 +-81 154 ++17 44 ++1 22 ++54 2 + +fn=(10) +843 11 ++4 33 ++5 11 ++3 22 ++2 11 +-1 11 ++3 33 ++5 11 +-4 11 ++1 11 ++3 11 +-3 11 ++7 11 +-5 11 ++1 11 ++4 22 +-7 11 ++5 11 ++2 33 ++13 22 + +fn=(154) +82 21310 ++1 2131 +-6 2131 ++5 4262 +-5 19179 +272 2131 +-42 6393 ++4 2131 +-4 2131 ++42 2131 +-38 2131 +98 2131 +-3 2131 ++1 2131 ++2 2131 ++3 2131 +-3 2131 ++3 2131 +-3 10795 +-3 10795 ++1 10795 ++2 10795 ++3 10795 +-3 10795 ++3 10795 ++4 25852 ++4 25852 ++4 25852 ++7 38778 ++4 12926 ++1 12926 +226 12926 +124 25852 ++1 25852 +226 12926 ++1 25852 ++4 12926 ++3 12926 +-3 25852 ++3 142186 ++24 10817 ++24 21634 +444 32451 ++1 9445 +-1 26676 ++4 43290 ++4 17048 +287 11456 ++4 8280 ++14 2109 +-1 2109 ++1 4218 ++1 2109 +445 8295 +cfi=(26) +cfn=(84) +calls=1659 301 +* 90979 +-1 8295 +241 16380 ++1 5460 ++2 18067 ++10 10856 +-7 29425 ++2 4218 ++1 2109 +-1 2109 ++1 8436 +-1 6327 ++1 8436 +cfn=(156) +calls=2109 132 +* 292930 ++1 12654 ++45 1888 +fi=(37) /build/buildd/eglibc-2.11.1/elf/../sysdeps/generic/dl-hash.h +65 8436 +fe=(6) + +fl=(54) /build/buildd/eglibc-2.11.1/elf/../sysdeps/x86_64/dl-trampoline.S +fn=(356) _dl_runtime_resolve +30 375 ++2 375 ++1 375 ++1 375 ++1 375 ++1 375 ++1 375 ++1 375 ++1 375 ++1 375 ++1 375 +cfi=(55) +cfn=(358) +calls=375 +32 +* 520219 ++1 375 ++1 375 ++1 375 ++1 375 ++1 375 ++1 375 ++1 375 ++1 375 ++1 375 ++2 375 + +fl=(8) +fn=(14) +29 1 ++3 4 ++2 2 +-2 1 ++2 1 ++7 2 + +fl=(2) +fn=(2) +363 9 ++18 4 +fi=(5) +76 2 +fe=(2) +381 1 ++29 2 +-3 1 +fi=(3) +119 1 +fe=(2) +410 1 +fi=(3) +119 2 ++3 1 ++4 1 ++5 1 ++3 1 ++1 1 +-3 1 +-5 2 +-5 13 ++15 13 +-18 39 ++18 1 +-18 3 ++2 36 ++5 20 ++1 12 ++10 4 +-18 13 ++25 2 ++20 4 ++1 4 ++1 4 ++1 4 ++2 4 ++5 4 ++1 4 ++1 4 ++6 3 ++5 2 ++7 3 ++1 3 ++8 3 ++2 3 ++3 2 ++1 2 +fe=(2) +538 2 ++7 1 +286 2 ++12 2 +cfi=(6) +cfn=(10) +calls=1 843 +* 29 ++1 1 ++1 1 ++1 1 +-2 1 ++3 1 +-2 1 ++1 1 ++1 1 ++21 1 ++10 1 +-10 3 ++10 1 +-6 1 +-4 1 ++10 1 +cfi=(7) +cfn=(12) +calls=1 88 +* 2123081 +* 1 ++9 1 ++7 1 +-4 1 ++4 1 +570 9 +fi=(3) +128 4 ++3 4 +fe=(2) +543 14 +fi=(4) +76 1 +-1 1 ++2 1 +-2 1 ++2 1 ++2 8 ++25 2 +fi=(5) +466 14 +fi=(4) +105 14 +fi=(5) +466 14 ++1 28 +-2 14 +fi=(4) +104 28 +fi=(5) +467 14 +fi=(4) +104 15 ++5 2 ++11 8 ++2 8 +fi=(5) +288 24 +fi=(4) +120 24 +fi=(5) +296 24 ++4 8 +-4 16 ++4 24 ++6 24 ++1 16 +fi=(4) +117 27 +fi=(3) ++17 4 ++1 4 +fe=(2) +286 67 + +fn=(80) +627 2 ++2 2 +-2 1 ++2 6 +cfi=(19) +cfn=(82) +calls=1 1958 +* 2177 +* 1 ++3 3 + +fn=(128) +658 2 ++3 4 +cfi=(34) +cfn=(130) +calls=1 383 +* 26400 +-1 2 ++4 2 + +fn=(896) +835 2 ++1 2 + +fn=(22) +886 1 ++19 1 ++7 1 +-26 6 ++32 1 +-32 4 ++27 1 +-5 1 ++10 1 ++3 1 +-16 1 ++7 1 +-4 1 ++5 1 ++8 1 +cfn=(24) process_envvars +calls=1 2494 +* 534 ++7 4 +1090 7 +cfi=(12) +cfn=(28) +calls=1 36 +* 248 ++2 1 +-2 1 ++2 1 ++1 2 ++2 1 ++1 2 +-2 1 ++1 1 ++1 2 ++29 1 +-3 1 ++3 1 +-8 1 ++1 1 ++2 1 ++5 6 ++1 28 +-1 27 ++1 52 ++95 2 ++1 3 +-5 2 ++1 1 +-88 3 ++1 1 ++49 2 ++1 2 +-1 8 ++2 4 ++1 2 ++3 2 ++1 2 +-1 2 ++1 2 ++1 2 ++1 6 ++1 2 +-46 1 ++10 1 +-10 1 ++10 1 +-7 2 +-3 1 ++10 1 ++68 2 +-87 3 ++1 1 ++92 3 ++3 2 ++2 2 ++2 3 ++13 3 ++1 6 +cfi=(16) +cfn=(44) +calls=1 63 +* 7 +-1 2 ++11 1 +-3 1 +-2 1 ++3 1 ++2 2 ++1 2 ++4 2 ++2 2 +fi=(3) +104 1 ++9 2 ++6 1 +-2 1 ++2 2 ++7 1 ++5 1 ++3 1 ++1 1 +-3 1 +-5 2 +-1 16 ++1 9 ++10 3 +-18 9 ++18 1 +-18 3 ++2 54 ++8 23 ++8 23 +-18 69 ++25 3 ++38 3 ++5 2 ++7 2 ++1 4 ++16 3 ++14 3 ++7 2 +fe=(2) +1271 2 +cfi=(6) +cfn=(10) +calls=1 843 +* 29 ++3 2 ++20 4 +fi=(3) +128 4 +fe=(2) +1383 1 +cfi=(17) +cfn=(48) +calls=1 67 +* 92 +* 8 ++5 2 +cfi=(19) +cfn=(52) +calls=1 622 +* 2979 ++3 3 +cfi=(23) +cfn=(68) +calls=1 52 +* 18 ++7 1 +-7 1 ++2 1 ++5 1 ++4 1 ++3 1 +-2 1 ++3 1 +-2 1 +-2 2 ++9 1 +-9 1 ++1 1 ++8 1 ++5 1 ++4 1 +-3 2 ++3 1 ++4 1 +-5 1 ++5 2 ++1 2 ++1 1 +-1 2 ++1 3 ++2 2 ++1 2 ++5 2 ++5 4 +1620 3 ++3 2 ++4 3 ++5 2 ++1 1 +cfi=(23) +cfn=(70) +calls=1 77 +* 1 ++4 3 ++15 3 ++4 4 ++31 3 +cfi=(20) +cfn=(56) +calls=1 82 +* 11 +* 2 ++77 1 ++11 1 +-11 3 ++17 1 ++1 2 +-1 1 ++1 2 +-1 1 ++1 3 +cfi=(29) +cfn=(106) +calls=1 149 +* 65597 ++1 1 ++2 5 ++3 1 +-3 2 ++3 1 +-3 1 ++3 1 +-3 1 ++3 1 ++1 5 +-1 2 ++1 40 +-1 21 ++4 3 ++1 3 ++1 1 ++2 2 ++1 52 +-1 27 +fi=(3) +131 4 ++3 4 ++1 4 +fe=(2) +1797 2 ++13 1 +-1 2 ++1 1 ++2 4 ++5 1 +-5 1 ++4 2 ++12 1 ++2 3 ++1 1 ++1 1 +-1 1 ++1 3 ++11 2 ++2 3 +-2 2 ++1 4 ++1 1 +cfi=(24) +cfn=(126) +calls=1 198 +* 26440 ++10 1 ++1 1 +-1 1 ++1 1 ++3 2 ++3 1 +cfn=(142) security_init +calls=1 848 +* 32 ++2 2 +2093 3 +2239 1 ++2 7 ++6 1 +-6 1 ++6 1 ++9 4 ++1 1 ++5 2 +cfi=(32) +cfn=(164) +calls=1 380 +* 283 ++4 2 ++8 4 ++15 1 ++2 1 ++1 1 +-3 1 ++3 3 +-3 1 ++3 1 +cfi=(36) +cfn=(146) +calls=1 158 +* 9118 ++1 1 ++2 9 ++8 1 +cfi=(7) +cfn=(166) +calls=1 251 +* 1 ++4 3 ++20 3 +cfi=(23) +cfn=(68) +calls=1 52 +* 9 ++1 1 ++1 1 +cfi=(23) +cfn=(70) +calls=1 77 +* 1 ++4 1 +cfi=(31) +cfn=(168) _dl_unload_cache +calls=1 306 +* 15 ++5 8 +2149 2 ++4 4 ++48 2 ++7 1 +-7 1 ++7 1 ++3 45 ++3 4 ++22 11 ++2 22 +-18 22 ++2 22 ++6 33 ++1 70 +cfi=(36) +cfn=(146) +calls=10 158 +* 2011896 ++4 26 ++1 4 +cfi=(32) +cfn=(162) +calls=2 820 +* 40 +* 2 +1828 2 +1412 4 +-11 4 +1857 1 +cfn=(136) init_tls +calls=1 780 +* 687 +* 3 +-89 9 ++4 3 ++1 1 ++1 2 ++1 2 +1663 59 +cfi=(15) +cfn=(42) +calls=1 56 +* 65 +* 1 ++3 4 ++3 3 +cfi=(14) +cfn=(66) +calls=1 320 +* 909 +* 3 +cfi=(14) +cfn=(66) +calls=1 320 +* 9 +* 6 ++1 4 ++3 4 +cfn=(72) do_preload +calls=1 800 +* 2277 +* 2 ++2 1 ++2 12 +2224 1 ++1 1 +-3 2 + +fn=(24) +2494 1 ++8 2 +-8 4 ++23 1 +-23 4 ++8 1 +-8 1 ++8 2 +-7 1 ++6 2 +fi=(156) /build/buildd/eglibc-2.11.1/elf/../sysdeps/unix/sysv/linux/dl-librecon.h +32 1 +fe=(2) +2501 1 +-6 1 +fi=(156) +32 2 +fe=(2) +2504 2 +cfi=(11) +cfn=(26) +calls=1 31 +* 54 +* 4 +cfi=(11) +cfn=(26) +calls=2 31 +* 252 +* 9 ++4 6 +-4 2 ++4 38 ++1 19 +-1 57 ++9 12 +2666 1 +-4 1 ++4 1 +-4 1 ++4 1 ++30 2 ++21 8 +2591 17 +-53 5 ++7 12 ++2 2 ++1 1 ++45 2 ++1 1 + +fn=(136) +780 1 +-56 1 +-4 1 +-2 1 ++2 1 ++4 1 ++60 3 +-54 1 ++3 4 +cfi=(14) +cfn=(32) +calls=1 111 +* 62 ++12 1 +-12 1 ++7 1 ++1 1 ++4 1 ++2 5 ++2 22 ++4 2 ++2 2 +-2 4 +-5 2 +-1 4 ++1 9 +-1 19 ++10 2 ++3 1 +cfi=(32) +cfn=(138) +calls=1 116 +* 101 ++7 1 +cfi=(32) +cfn=(140) +calls=1 332 +* 418 ++1 1 +-1 1 ++1 1 ++6 1 ++4 1 +-4 1 ++4 6 ++3 1 ++2 1 + +fn=(72) +800 6 ++6 1 ++1 1 ++6 5 +-11 1 ++6 1 ++1 1 ++2 1 ++2 1 +cfi=(24) +cfn=(74) +calls=1 160 +* 2249 ++1 2 ++2 3 ++12 5 + +fn=(76) +794 54 + +fn=(898) +841 2 ++1 2 + +fn=(142) +848 4 ++2 1 +fi=(35) /build/buildd/eglibc-2.11.1/elf/../sysdeps/unix/sysv/linux/dl-osinfo.h +68 1 ++4 1 ++3 2 ++48 7 +fe=(2) +852 1 ++6 3 ++2 1 +fi=(35) +132 2 ++11 1 +fe=(2) +863 1 ++2 1 ++6 1 ++1 5 + +fl=(10) +fn=(20) +35 3 ++8 1 +-8 1 ++8 5 ++4 2 ++11 5 + +fl=(31) +fn=(118) _dl_cache_libcmp +169 216 +-29 144 ++2 216 ++20 216 ++2 144 ++4 72 ++1 144 +cfn=(119) _dl_cache_libcmp'2 +calls=72 * +* 6029 + +fn=(119) +169 1086 +-29 746 ++2 1086 ++2 33 ++6 22 ++1 11 +-1 11 ++2 11 +-1 22 ++1 33 ++2 44 ++2 22 ++6 1053 ++2 702 ++4 290 ++1 580 +cfn=(119) +calls=290 * +* 19015 ++3 22 ++1 11 +-8 244 + +fn=(114) +182 56 ++8 14 ++3 21 ++45 14 ++6 21 ++15 14 +-6 7 ++6 7 +cfi=(20) +cfn=(56) +calls=7 82 +* 77 +* 7 ++17 35 +-23 7 ++23 14 +-23 7 ++23 1090 +cfn=(118) +calls=61 169 +* 5686 +* 317 ++21 63 +196 4 +cfi=(26) +cfn=(116) +calls=1 44 +* 68 ++8 2 ++1 1 +-1 2 ++1 3 +-1 13 ++8 1 +-3 2 ++3 3 ++3 1 ++1 2 +-1 1 ++1 1 ++19 2 +-17 2 +-2 22 ++60 141 +cfn=(118) +calls=4 169 +* 356 +* 35 +cfn=(118) +calls=7 169 +* 1139 +* 285 ++16 28 + +fn=(168) +306 1 ++1 4 ++2 2 +cfi=(21) +cfn=(170) +calls=1 82 +* 5 ++1 1 ++2 2 + +fl=(22) +fn=(62) +26 36 ++1 36 ++1 36 ++1 36 ++1 36 ++1 36 ++1 36 ++1 36 ++1 36 ++1 36 ++1 36 ++1 36 ++1 36 ++1 36 ++1 36 ++1 36 ++1 36 ++1 36 ++1 36 ++1 36 ++1 36 ++2 27 ++1 27 ++1 27 ++1 27 ++1 27 ++1 27 ++1 27 ++1 27 ++1 27 ++2 36 ++1 36 ++1 1 ++1 1 ++1 1 ++1 1 ++1 35 ++1 36 + +fl=(30) +fn=(112) +37 8 +-1 8 ++1 8 ++1 48 ++4 2 +-4 24 + +ob=(10) /lib/libz.so.1.2.3.3 +fl=(59) ??? +fn=(3806) 0x0000000000002280 +0 10 +cob=(4) +cfi=(153) /build/buildd/eglibc-2.11.1/stdlib/cxa_finalize.c +cfn=(3726) __cxa_finalize +calls=1 31 +0 430 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1810 +0 13 + +fn=(448) 0x0000000000002300 +0 6 + +fn=(442) 0x0000000000002260 +0 6 + +fn=(454) 0x000000000000ed00 +0 11 + +ob=(7) /usr/lib/libstdc++.so.6.0.13 +fl=(53) ??? +fn=(2684) std::ostream& std::ostream::_M_insert(long) +0 65 +cfn=(1400) std::ostream::sentry::sentry(std::ostream&) +calls=5 0 +0 105 +0 86 +cfn=(2686) std::num_put > >::do_put(std::ostreambuf_iterator >, std::ios_base&, char, long) const +calls=3 0 +0 622 +0 22 +cfn=(2686) +calls=2 0 +0 5116 +0 124 + +fn=(2686) +0 25 +cfn=(2692) std::ostreambuf_iterator > std::num_put > >::_M_insert_int(std::ostreambuf_iterator >, std::ios_base&, char, long) const +calls=5 0 +0 3953 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1740 +0 20 + +fn=(296) 0x00000000000ac590 +0 49 + +fn=(532) std::locale::facet::_S_create_c_locale(__locale_struct*&, char const*, __locale_struct*) +0 4 +cob=(4) +cfi=(61) /build/buildd/eglibc-2.11.1/locale/newlocale.c +cfn=(538) newlocale +calls=1 46 +0 42 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1796 +0 5 + +fn=(544) std::locale::_Impl::_M_install_facet(std::locale::id const*, std::locale::facet const*) +0 364 +cfn=(550) std::locale::id::_M_id() const +calls=28 0 +0 392 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1024 +0 6328 + +fn=(634) std::ctype::_M_convert_to_wmask(unsigned short) const +0 100 +cob=(4) +cfi=(68) /build/buildd/eglibc-2.11.1/wctype/wctype_l.c +cfn=(640) wctype_l +calls=1 28 +0 134 +0 13 +cob=(4) +cfi=(68) +cfn=(640) +calls=1 28 +0 254 +0 17 +cob=(4) +cfi=(68) +cfn=(640) +calls=1 28 +0 387 +0 3 +cob=(4) +cfi=(68) +cfn=(640) +calls=1 28 +0 230 +0 3 +cob=(4) +cfi=(68) +cfn=(640) +calls=1 28 +0 350 +0 3 +cob=(4) +cfi=(68) +cfn=(640) +calls=1 28 +0 98 +0 3 +cob=(4) +cfi=(68) +cfn=(640) +calls=1 28 +0 171 +0 3 +cob=(4) +cfi=(68) +cfn=(640) +calls=1 28 +0 74 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1796 +0 3 +cob=(4) +cfi=(68) +cfn=(640) +calls=1 28 +0 164 + +fn=(654) std::numpunct::_M_initialize_numpunct(__locale_struct*) +0 345 + +fn=(672) std::__timepunct::__timepunct(std::__timepunct_cache*, unsigned long) +0 13 +cfn=(512) std::locale::facet::_S_get_c_name() +calls=1 0 +0 2 +0 4 +cfn=(678) std::__timepunct::_M_initialize_timepunct(__locale_struct*) +calls=1 0 +0 112 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1409 +0 3 + +fn=(688) 0x000000000006a230 +0 17210 +cfn=(696) __cxa_guard_acquire +calls=1 0 +0 24 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 980 +0 6 +cfn=(708) __cxa_guard_release +calls=1 0 +0 5 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1022 +0 1 + +fn=(746) std::locale::~locale() +0 17064 + +fn=(786) std::num_put > > const& std::use_facet > > >(std::locale const&) +0 2840 +cfn=(550) +calls=710 0 +0 3550 +0 7810 +cfn=(764) __dynamic_cast +calls=710 0 +0 41890 +0 2840 + +fn=(840) bool std::has_facet > > >(std::locale const&) +0 16 +cfn=(550) +calls=4 0 +0 20 +0 44 +cfn=(764) +calls=4 0 +0 236 +0 16 + +fn=(1338) std::string::reserve(unsigned long) +0 13200 +cfn=(1344) std::string::_Rep::_M_clone(std::allocator const&, unsigned long) +calls=825 0 +0 135750 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1075 +0 7568 +cfn=(1308) std::string::_Rep::_M_destroy(std::allocator const&) +calls=5 0 +0 410 +0 138 + +fn=(1360) std::string::append(std::string const&) +0 341 +cfn=(1338) +calls=8 0 +0 2462 +0 107 +cob=(4) +cfi=(81) /build/buildd/eglibc-2.11.1/string/../sysdeps/x86_64/memcpy.S +cfn=(966) memcpy +calls=16 56 +0 609 +0 190 + +fn=(1454) std::ostreambuf_iterator > std::num_put > >::_M_insert_int(std::ostreambuf_iterator >, std::ios_base&, char, unsigned long) const +0 66 +cfn=(1456) 0x000000000008ba20 +calls=3 0 +0 84 +0 63 +cfn=(1462) 0x00000000000874e0 +calls=3 0 +0 223 +0 68 +cfn=(2694) std::basic_streambuf >::xsputn(char const*, long) +calls=2 0 +0 1188 +cfn=(1402) __gnu_cxx::stdio_sync_filebuf >::xsputn(char const*, long) +calls=1 0 +0 247 +0 73 + +fn=(1692) std::basic_streambuf >::sbumpc() +0 1225 + +fn=(1710) 0x00000000000a8b30 +0 18657 +cfn=(952) std::string::_Rep::_S_create(unsigned long, unsigned long, std::allocator const&) +calls=1239 0 +0 167364 +0 9708 +cob=(4) +cfi=(81) +cfn=(966) +calls=1188 56 +0 38057 +0 12633 + +fn=(1904) std::__basic_file::close() +0 50 +cfn=(1556) std::__basic_file::is_open() const +calls=10 0 +0 30 +0 95 +cob=(4) +cfi=(95) /build/buildd/eglibc-2.11.1/csu/errno-loc.c +cfn=(1302) __errno_location +calls=5 34 +0 15 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1834 +0 20 +cob=(4) +cfi=(120) /build/buildd/eglibc-2.11.1/libio/iofclose.c +cfn=(1914) fclose@@GLIBC_2.2.5 +calls=5 43 +0 2992 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1698 +0 25 + +fn=(2274) std::num_get > >::do_get(std::istreambuf_iterator >, std::istreambuf_iterator >, std::ios_base&, std::_Ios_Iostate&, long&) const +0 90 +cfn=(2280) std::istreambuf_iterator > std::num_get > >::_M_extract_int(std::istreambuf_iterator >, std::istreambuf_iterator >, std::ios_base&, std::_Ios_Iostate&, long&) const +calls=9 0 +0 2435 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1905 +0 18 + +fn=(2728) std::num_put > >::do_put(std::ostreambuf_iterator >, std::ios_base&, char, void const*) const +0 13 +cfn=(1454) +calls=1 0 +0 816 +0 7 + +fn=(3152) std::basic_filebuf >::seekpos(std::fpos<__mbstate_t>, std::_Ios_Openmode) +0 10 +cfn=(1556) +calls=1 0 +0 3 +0 11 +cfn=(3158) std::basic_filebuf >::_M_seek(long, std::_Ios_Seekdir, __mbstate_t) +calls=1 0 +0 3062 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1527 +0 6 + +fn=(2696) std::basic_stringbuf, std::allocator >::overflow(int) +0 152 +cfn=(1338) +calls=4 0 +0 1832 +0 76 +cfn=(2702) std::string::swap(std::string&) +calls=4 0 +0 44 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 999 +0 28 +cfn=(1758) std::basic_stringbuf, std::allocator >::_M_sync(char*, unsigned long, unsigned long) +calls=4 0 +0 108 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1372 +0 16 + +fn=(282) 0x00000000000c9500 +0 11 + +fn=(292) 0x00000000000c8ea0 +0 52 + +fn=(368) 0x00000000000639f0 +0 1 + +fn=(492) std::locale::locale() +0 8604 +cfn=(494) 0x000000000006c5c0 +calls=1434 0 +0 76167 +0 1434 +cfn=(688) +calls=1434 0 +0 19248 +0 17208 + +fn=(518) std::ctype::ctype(unsigned short const*, bool, unsigned long) +0 14 +cfn=(524) std::locale::facet::_S_get_c_locale() +calls=1 0 +0 3244 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1149 +0 94 + +fn=(526) 0x0000000000069060 +0 4 +cfn=(532) +calls=1 0 +0 1847 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1384 + +fn=(722) std::ios_base::ios_base() +0 20938 +cfn=(492) +calls=361 0 +0 14079 + +fn=(758) bool std::has_facet >(std::locale const&) +0 2840 +cfn=(550) +calls=710 0 +0 3550 +0 7810 +cfn=(764) +calls=710 0 +0 66740 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 959 +0 2840 + +fn=(778) bool std::has_facet > > >(std::locale const&) +0 2840 +cfn=(550) +calls=710 0 +0 3550 +0 7810 +cfn=(764) +calls=710 0 +0 41890 +0 2840 + +fn=(780) __cxxabiv1::__si_class_type_info::__do_dyncast(long, __cxxabiv1::__class_type_info::__sub_kind, __cxxabiv1::__class_type_info const*, void const*, __cxxabiv1::__class_type_info const*, void const*, __cxxabiv1::__class_type_info::__dyncast_result&) const +0 48858 + +fn=(828) bool std::has_facet > > >(std::locale const&) +0 16 +cfn=(550) +calls=4 0 +0 20 +0 44 +cfn=(764) +calls=4 0 +0 236 +0 16 + +fn=(1142) operator delete(void*) +0 6973172778 +cob=(4) +cfi=(71) /build/buildd/eglibc-2.11.1/malloc/malloc.c +cfn=(1148) free +calls=2324390926 3692 +0 181303823584 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1642 + +fn=(1254) std::basic_string, std::allocator >::basic_string(std::string const&) +0 17182973961 +cfn=(1344) +calls=21 0 +0 4162 +0 5727657514 + +fn=(1446) std::ctype::do_widen(char) const +0 2 + +fn=(1562) std::__basic_file::open(char const*, std::_Ios_Openmode, int) +0 40 +cfn=(1564) 0x00000000000c8480 +calls=5 0 +0 50 +0 25 +cfn=(1556) +calls=5 0 +0 15 +0 25 +cob=(4) +cfi=(108) /build/buildd/eglibc-2.11.1/libio/../sysdeps/wordsize-64/../../libio/iofopen.c +cfn=(1574) fopen@@GLIBC_2.2.5 +calls=5 107 +0 3691 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1723 +0 55 + +fn=(1612) std::basic_filebuf >::_M_allocate_internal_buffer() +0 40 +cfn=(1618) operator new[](unsigned long) +calls=5 0 +0 2739 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 877 +0 20 + +fn=(1650) std::string::_M_mutate(unsigned long, unsigned long, unsigned long) +0 4370 +cfn=(952) +calls=16 0 +0 2561 +0 3374 + +fn=(1824) std::ios_base::_M_call_callbacks(std::ios_base::event) +0 4236 + +fn=(2266) std::istream::operator>>(int&) +0 28 +cfn=(2272) std::istream& std::istream::_M_extract(long&) +calls=4 0 +0 3445 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1080 +0 72 + +fn=(2272) +0 81 +cfn=(1644) std::istream::sentry::sentry(std::istream&, bool) +calls=9 0 +0 449 +0 207 +cfn=(2274) +calls=9 0 +0 4448 +0 108 +cfn=(1630) std::basic_ios >::clear(std::_Ios_Iostate) +calls=9 0 +0 72 +0 45 + +fn=(2280) +0 144 +cfn=(1456) +calls=9 0 +0 252 +0 1791 +cfn=(1798) std::basic_stringbuf, std::allocator >::underflow() +calls=1 0 +0 16 +0 64 +cfn=(1798) +calls=8 0 +0 128 +0 40 + +fn=(2760) std::basic_stringbuf, std::allocator >::str() const +0 19 +cfn=(2766) std::basic_string, std::allocator >::basic_string(char*, char*, std::allocator const&) +calls=1 0 +0 229 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1047 +0 3 +cfn=(1260) std::string::assign(std::string const&) +calls=1 0 +0 28 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 992 +0 18 + +fn=(2694) +0 223 +cfn=(2696) +calls=4 0 +0 4627 +0 212 +cob=(4) +cfi=(81) +cfn=(966) +calls=12 56 +0 222 +0 60 + +fn=(524) +0 3660 +cfn=(526) +calls=1 0 +0 3235 +0 3 + +fn=(568) std::moneypunct::_M_initialize_moneypunct(__locale_struct*, char const*) +0 112 + +fn=(728) std::basic_ios >::init(std::basic_streambuf >*) +0 4260 +cfn=(734) std::ios_base::_M_init() +calls=710 0 +0 64451 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1040 +0 2130 +cfn=(752) std::basic_ios >::_M_cache_locale(std::locale const&) +calls=710 0 +0 434340 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1442 +0 9230 + +fn=(764) +0 116019 +cfn=(780) +calls=2874 0 +0 48858 +cfn=(766) __cxxabiv1::__vmi_class_type_info::__do_dyncast(long, __cxxabiv1::__class_type_info::__sub_kind, __cxxabiv1::__class_type_info const*, void const*, __cxxabiv1::__class_type_info const*, void const*, __cxxabiv1::__class_type_info::__dyncast_result&) const +calls=1423 0 +0 73996 +0 64455 + +fn=(942) 0x00000000000a8880 +0 8585969064 +cfn=(952) +calls=572397936 0 +0 74012132505 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1077 +0 4579183364 +cob=(4) +cfi=(81) +cfn=(966) +calls=572397905 56 +0 12635859943 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1708 +0 5723979483 + +fn=(952) +0 8013600365 +cfn=(880) operator new(unsigned long) +calls=39 0 +0 5535 +0 572400001 +cfn=(880) +calls=572400001 0 +0 63136811529 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 869 +0 2289600160 + +fn=(1532) std::__basic_file::__basic_file(pthread_mutex_t*) +0 15 + +fn=(1630) +0 3304 + +fn=(1652) std::basic_filebuf >::underflow() +0 216 +cfn=(1654) std::codecvt::do_always_noconv() const +calls=6 0 +0 12 +0 36 +cfn=(1660) std::__basic_file::xsgetn(char*, long) +calls=6 0 +0 4622 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1121 +0 21 +cfn=(1624) std::basic_filebuf >::_M_set_buffer(long) +calls=1 0 +0 15 +0 28 +cfn=(1624) +calls=5 0 +0 80 +0 35 + +fn=(1686) std::string::append(char const*, unsigned long) +0 6090 +cfn=(1338) +calls=193 0 +0 39899 +0 1571 +cob=(4) +cfi=(81) +cfn=(966) +calls=193 56 +0 10202 +0 1037 + +fn=(1702) std::string::find(char, unsigned long) const +0 5130 +cob=(4) +cfi=(89) /build/buildd/eglibc-2.11.1/string/../sysdeps/x86_64/memchr.S +cfn=(1248) memchr +calls=513 25 +0 16648 +0 2565 + +fn=(1752) std::basic_string, std::allocator >::basic_string(char const*, unsigned long, std::allocator const&) +0 2752 +cfn=(942) +calls=344 0 +0 63891 +0 1376 + +fn=(1886) std::basic_filebuf >::_M_terminate_output() +0 180 + +fn=(1892) std::basic_filebuf >::_M_destroy_internal_buffer() +0 40 +cfn=(1898) operator delete[](void*) +calls=5 0 +0 1358 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 888 +0 55 + +fn=(2196) std::string::compare(unsigned long, unsigned long, char const*) const +0 32 +cob=(4) +cfi=(69) /build/buildd/eglibc-2.11.1/string/../sysdeps/x86_64/multiarch/../strlen.S +cfn=(642) __GI_strlen +calls=2 26 +0 38 +0 79 + +fn=(2312) std::istream& std::istream::_M_extract(float&) +0 2331 +cfn=(1644) +calls=259 0 +0 12432 +0 5957 +cfn=(2314) std::num_get > >::do_get(std::istreambuf_iterator >, std::istreambuf_iterator >, std::ios_base&, std::_Ios_Iostate&, float&) const +calls=259 0 +0 393954 +0 3108 +cfn=(1630) +calls=259 0 +0 2072 +0 1295 + +fn=(2420) std::_Rb_tree_rotate_left(std::_Rb_tree_node_base*, std::_Rb_tree_node_base*&) +0 9662 + +fn=(2766) +0 8 +cfn=(1710) +calls=1 0 +0 217 +0 4 + +fn=(2830) std::_Rb_tree_increment(std::_Rb_tree_node_base*) +0 17296504 + +fn=(3164) std::__basic_file::seekoff(long, std::_Ios_Seekdir) +0 6 +cfn=(1666) std::__basic_file::fd() +calls=1 0 +0 9 +0 7 +cob=(4) +cfi=(103) /build/buildd/eglibc-2.11.1/misc/../sysdeps/unix/syscall-template.S +cfn=(3170) lseek +calls=1 82 +0 7 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1721 + +fn=(3282) std::basic_ifstream >::~basic_ifstream() +0 36 +cfn=(1880) std::basic_filebuf >::close() +calls=2 0 +0 40 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1272 +0 4 +cfn=(1940) std::__basic_file::~__basic_file() +calls=2 0 +0 34 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1042 +0 10 +cfn=(746) +calls=2 0 +0 24 +0 34 +cfn=(1818) std::ios_base::~ios_base() +calls=2 0 +0 116 + +fn=(3614) std::ostream& std::ostream::_M_insert(double) +0 12 +cfn=(1400) +calls=1 0 +0 21 +0 22 +cfn=(3616) std::num_put > >::do_put(std::ostreambuf_iterator >, std::ios_base&, char, double) const +calls=1 0 +0 8307 +0 19 + +fn=(272) 0x000000000005a540 +0 6 + +fn=(512) +0 10 + +fn=(562) std::numpunct::_M_initialize_numpunct(__locale_struct*) +0 410 + +fn=(708) +0 5 + +fn=(822) std::ctype const& std::use_facet >(std::locale const&) +0 16 +cfn=(550) +calls=4 0 +0 20 +0 44 +cfn=(764) +calls=4 0 +0 236 +0 16 + +fn=(1242) std::string::find_last_of(char const*, unsigned long, unsigned long) const +0 290 +cob=(4) +cfi=(89) +cfn=(1248) +calls=40 25 +0 892 +0 20 +cob=(4) +cfi=(89) +cfn=(1248) +calls=5 25 +0 110 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1682 +0 249 + +fn=(1344) +0 9306 +cfn=(952) +calls=846 0 +0 115610 +0 12882 +cob=(4) +cfi=(81) +cfn=(966) +calls=48 56 +0 2018 +0 96 + +fn=(1474) std::ostream::put(char) +0 30 +cfn=(1400) +calls=3 0 +0 63 +0 69 +cfn=(1476) __gnu_cxx::stdio_sync_filebuf >::overflow(int) +calls=3 0 +0 2232 +0 6 + +fn=(1538) bool std::has_facet >(std::locale const&) +0 20 +cfn=(550) +calls=5 0 +0 25 +0 55 +cfn=(764) +calls=5 0 +0 295 +0 20 + +fn=(1644) +0 25630 +cfn=(1630) +calls=61 0 +0 488 +0 11529 + +fn=(1758) +0 7332 + +fn=(1772) std::num_get > >::_M_extract_float(std::istreambuf_iterator >, std::istreambuf_iterator >, std::ios_base&, std::_Ios_Iostate&, std::string&) const +0 8192 +cfn=(1456) +calls=512 0 +0 14336 +0 218126 +cfn=(1844) 0x000000000008a190 +calls=193 0 +0 5404 +0 772 +cfn=(1856) 0x000000000008a140 +calls=193 0 +0 2316 +0 13808 +cfn=(1798) +calls=14 0 +0 224 +0 2054 +cfn=(1798) +calls=315 0 +0 6474 +0 1575 + +fn=(1856) +0 2316 + +fn=(1898) +0 5 +cfn=(1142) +calls=5 0 +0 1353 + +fn=(2246) std::string::find_first_of(char const*, unsigned long, unsigned long) const +0 240 +cob=(4) +cfi=(89) +cfn=(1248) +calls=10 25 +0 238 +0 16 +cob=(4) +cfi=(89) +cfn=(1248) +calls=4 25 +0 97 +0 147 + +fn=(2504) std::basic_istream >& std::operator>>, std::allocator >(std::basic_istream >&, std::basic_string, std::allocator >&) +0 28 +cfn=(1644) +calls=2 0 +0 96 +0 36 +cfn=(1650) +calls=2 0 +0 76 +0 24 +cfn=(2510) std::locale::locale(std::locale const&) +calls=2 0 +0 12 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1013 +0 4 +cfn=(772) std::ctype const& std::use_facet >(std::locale const&) +calls=2 0 +0 236 +0 6 +cfn=(746) +calls=2 0 +0 24 +0 72 +cfn=(1686) +calls=2 0 +0 448 +0 52 + +fn=(2510) +0 12 + +fn=(3158) +0 11 +cfn=(1886) +calls=1 0 +0 30 +0 13 +cfn=(3164) +calls=1 0 +0 1750 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1240 +0 18 + +fn=(3444) std::_Rb_tree_rotate_right(std::_Rb_tree_node_base*, std::_Rb_tree_node_base*&) +0 9636 + +fn=(266) 0x000000000005a4a0 +0 6 + +fn=(278) 0x00000000000d1200 +0 11 +cfn=(282) +calls=1 0 +0 11 +0 16 +cfn=(372) 0x000000000005c2d0 +calls=1 0 +0 57 +cfn=(370) 0x000000000005fef0 +calls=1 0 +0 1 +cfn=(368) +calls=1 0 +0 1 +cfn=(348) 0x0000000000072400 +calls=1 0 +0 1917 +cfn=(322) 0x0000000000087050 +calls=1 0 +0 49 +cfn=(296) +calls=1 0 +0 49 +cfn=(294) 0x00000000000c3ba0 +calls=1 0 +0 1 +cfn=(292) +calls=1 0 +0 52 +0 31 + +fn=(348) +0 8 +cob=(4) +cfi=(56) /build/buildd/eglibc-2.11.1/stdlib/cxa_atexit.c +cfn=(362) __cxa_atexit +calls=1 57 +0 62 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1778 +0 7 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 + +fn=(486) std::ios_base::Init::Init() +0 2067 +cfn=(492) +calls=1 0 +0 66774 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 952 +0 16 +cfn=(492) +calls=1 0 +0 39 +0 14 +cfn=(492) +calls=1 0 +0 39 +0 6 +cfn=(722) +calls=1 0 +0 97 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 970 +0 15 +cfn=(728) +calls=1 0 +0 14921 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1451 +0 3 +cfn=(722) +calls=1 0 +0 97 +0 16 +cfn=(728) +calls=1 0 +0 708 +0 3 +cfn=(722) +calls=1 0 +0 97 +0 14 +cfn=(728) +calls=1 0 +0 708 +0 3 +cfn=(722) +calls=1 0 +0 97 +0 14 +cfn=(728) +calls=1 0 +0 708 +0 16 +cfn=(492) +calls=1 0 +0 39 +0 16 +cfn=(492) +calls=1 0 +0 39 +0 14 +cfn=(492) +calls=1 0 +0 39 +0 6 +cfn=(722) +calls=1 0 +0 97 +0 15 +cfn=(804) std::basic_ios >::init(std::basic_streambuf >*) +calls=1 0 +0 10851 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1453 +0 3 +cfn=(722) +calls=1 0 +0 97 +0 16 +cfn=(804) +calls=1 0 +0 638 +0 3 +cfn=(722) +calls=1 0 +0 97 +0 14 +cfn=(804) +calls=1 0 +0 638 +0 3 +cfn=(722) +calls=1 0 +0 97 +0 14 +cfn=(804) +calls=1 0 +0 638 +0 547 + +fn=(494) +0 5 +cfn=(506) std::locale::_Impl::_Impl(unsigned long) +calls=1 0 +0 63678 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1006 +0 11478 + +fn=(574) std::moneypunct::_M_initialize_moneypunct(__locale_struct*, char const*) +0 112 + +fn=(592) std::messages::messages(unsigned long) +0 11 +cfn=(524) +calls=1 0 +0 7 +0 2 +cfn=(512) +calls=1 0 +0 2 +0 4 + +fn=(648) std::codecvt::codecvt(unsigned long) +0 11 +cfn=(524) +calls=1 0 +0 7 +0 4 + +fn=(666) std::moneypunct::_M_initialize_moneypunct(__locale_struct*, char const*) +0 101 + +fn=(734) +0 6426 +cfn=(492) +calls=714 0 +0 27846 +0 2142 +cfn=(740) std::locale::operator=(std::locale const&) +calls=714 0 +0 13566 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 995 +0 1428 +cfn=(746) +calls=714 0 +0 8568 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 976 +0 2856 + +fn=(752) +0 4970 +cfn=(758) +calls=710 0 +0 84739 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1216 +0 2840 +cfn=(772) +calls=710 0 +0 83780 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1219 +0 2130 +cfn=(778) +calls=710 0 +0 58930 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1580 +0 2840 +cfn=(786) +calls=710 0 +0 58930 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1599 +0 2130 +cfn=(792) bool std::has_facet > > >(std::locale const&) +calls=710 0 +0 58930 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1572 +0 2840 +cfn=(798) std::num_get > > const& std::use_facet > > >(std::locale const&) +calls=710 0 +0 58930 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1615 +0 3550 + +fn=(798) +0 2840 +cfn=(550) +calls=710 0 +0 3550 +0 7810 +cfn=(764) +calls=710 0 +0 41890 +0 2840 + +fn=(880) +0 20969242173 +cob=(4) +cfi=(71) +cfn=(886) malloc +calls=2329915797 3615 +0 222199402928 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1742 +0 13979494782 + +fn=(1260) +0 1626209 +cfn=(1308) +calls=328 0 +0 26896 +0 4072 + +fn=(1332) std::string::append(unsigned long, char) +0 2970 +cfn=(1338) +calls=99 0 +0 19202 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 950 +0 783 +cob=(4) +cfi=(82) /build/buildd/eglibc-2.11.1/string/../sysdeps/x86_64/memset.S +cfn=(986) memset +calls=96 44 +0 1738 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1690 +0 501 + +fn=(1394) std::basic_ostream >& std::__ostream_insert >(std::basic_ostream >&, char const*, long) +0 112 +cfn=(1400) +calls=8 0 +0 168 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1011 +0 256 +cfn=(2694) +calls=6 0 +0 956 +cfn=(1402) +calls=2 0 +0 4248 +0 24 + +fn=(1498) std::ostream::flush() +0 60 +cfn=(1500) __gnu_cxx::stdio_sync_filebuf >::sync() +calls=6 0 +0 2025 +0 42 + +fn=(1500) +0 12 +cob=(4) +cfi=(107) /build/buildd/eglibc-2.11.1/libio/iofflush.c +cfn=(1506) fflush +calls=6 36 +0 324 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1689 + +fn=(1556) +0 99 + +fn=(1606) std::basic_filebuf >::is_open() const +0 15 +cfn=(1556) +calls=5 0 +0 15 +0 10 + +fn=(1624) +0 170 + +fn=(1660) +0 60 +cfn=(1666) +calls=6 0 +0 1736 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1051 +0 24 +cob=(4) +cfi=(106) /build/buildd/eglibc-2.11.1/io/../sysdeps/unix/syscall-template.S +cfn=(1678) read +calls=6 82 +0 42 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1649 +0 60 + +fn=(1666) +0 14 +cob=(4) +cfi=(111) /build/buildd/eglibc-2.11.1/libio/fileno.c +cfn=(1672) fileno +calls=7 37 +0 49 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1682 + +fn=(1778) void std::__convert_to_v(char const*, double&, std::_Ios_Iostate&, __locale_struct* const&) +0 2530 +cob=(4) +cfi=(112) /build/buildd/eglibc-2.11.1/stdlib/strtod_l.c +cfn=(1784) strtod_l +calls=253 1601 +0 155848 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1788 +0 4048 + +fn=(2006) std::string::rfind(char, unsigned long) const +0 154 + +fn=(2414) std::string::compare(std::string const&) const +0 1494615164 + +fn=(2524) std::istreambuf_iterator > std::num_get > >::_M_extract_int(std::istreambuf_iterator >, std::istreambuf_iterator >, std::ios_base&, std::_Ios_Iostate&, unsigned long&) const +0 16 +cfn=(1456) +calls=1 0 +0 28 +0 352 +cfn=(1798) +calls=1 0 +0 16 +0 5 + +fn=(2812) std::_Rb_tree_decrement(std::_Rb_tree_node_base const*) +0 897 +cfn=(2818) std::_Rb_tree_decrement(std::_Rb_tree_node_base*) +calls=897 0 +0 13461 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1313 + +fn=(2824) std::_Rb_tree_increment(std::_Rb_tree_node_base const*) +0 1258072 +cfn=(2830) +calls=1258072 0 +0 17296325 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1247 + +fn=(3218) std::_Rb_tree_rebalance_for_erase(std::_Rb_tree_node_base*, std::_Rb_tree_node_base&) +0 259 + +fn=(3244) std::istream::read(char*, long) +0 636 +cfn=(1644) +calls=53 0 +0 1696 +0 795 +cfn=(3246) std::basic_filebuf >::xsgetn(char*, long) +calls=53 0 +0 6866 +0 159 + +fn=(3254) std::basic_streambuf >::uflow() +0 4 +cfn=(1652) +calls=1 0 +0 115 +0 8 + +fn=(3628) std::__num_base::_S_format_float(std::ios_base const&, char*, char) +0 27 + +fn=(3794) std::basic_ostream >::flush() +0 30 +cfn=(3796) __gnu_cxx::stdio_sync_filebuf >::sync() +calls=3 0 +0 168 +0 21 + +fn=(506) +0 217 +cfn=(512) +calls=1 0 +0 2 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1179 +0 56 +cfn=(518) +calls=1 0 +0 4501 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1014 +0 4 +cfn=(544) +calls=1 0 +0 1277 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1354 +0 3 +cfn=(556) std::codecvt::codecvt(unsigned long) +calls=1 0 +0 22 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1130 +0 4 +cfn=(544) +calls=1 0 +0 253 +0 23 +cfn=(562) +calls=1 0 +0 410 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1356 +0 5 +cfn=(544) +calls=1 0 +0 253 +0 8 +cfn=(544) +calls=1 0 +0 253 +0 8 +cfn=(544) +calls=1 0 +0 253 +0 5 +cfn=(524) +calls=1 0 +0 7 +0 5 +cfn=(544) +calls=1 0 +0 253 +0 35 +cfn=(568) +calls=1 0 +0 112 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1464 +0 5 +cfn=(544) +calls=1 0 +0 253 +0 35 +cfn=(574) +calls=1 0 +0 112 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1464 +0 5 +cfn=(544) +calls=1 0 +0 253 +0 8 +cfn=(544) +calls=1 0 +0 253 +0 8 +cfn=(544) +calls=1 0 +0 253 +0 56 +cfn=(580) std::__timepunct::__timepunct(std::__timepunct_cache*, unsigned long) +calls=1 0 +0 1537 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1273 +0 5 +cfn=(544) +calls=1 0 +0 253 +0 8 +cfn=(544) +calls=1 0 +0 253 +0 8 +cfn=(544) +calls=1 0 +0 253 +0 3 +cfn=(592) +calls=1 0 +0 26 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1020 +0 4 +cfn=(544) +calls=1 0 +0 253 +0 3 +cfn=(598) std::ctype::ctype(unsigned long) +calls=1 0 +0 25829 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 978 +0 4 +cfn=(544) +calls=1 0 +0 253 +0 3 +cfn=(648) +calls=1 0 +0 22 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1190 +0 4 +cfn=(544) +calls=1 0 +0 253 +0 23 +cfn=(654) +calls=1 0 +0 345 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1372 +0 4 +cfn=(544) +calls=1 0 +0 253 +0 8 +cfn=(544) +calls=1 0 +0 253 +0 8 +cfn=(544) +calls=1 0 +0 253 +0 5 +cfn=(524) +calls=1 0 +0 7 +0 5 +cfn=(544) +calls=1 0 +0 253 +0 35 +cfn=(660) std::moneypunct::_M_initialize_moneypunct(__locale_struct*, char const*) +calls=1 0 +0 101 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1464 +0 4 +cfn=(544) +calls=1 0 +0 253 +0 35 +cfn=(666) +calls=1 0 +0 101 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1472 +0 4 +cfn=(544) +calls=1 0 +0 253 +0 8 +cfn=(544) +calls=1 0 +0 253 +0 8 +cfn=(544) +calls=1 0 +0 253 +0 56 +cfn=(672) +calls=1 0 +0 1543 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1291 +0 4 +cfn=(544) +calls=1 0 +0 253 +0 8 +cfn=(544) +calls=1 0 +0 253 +0 8 +cfn=(544) +calls=1 0 +0 253 +0 3 +cfn=(684) std::messages::messages(unsigned long) +calls=1 0 +0 26 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 996 +0 4 +cfn=(544) +calls=1 0 +0 253 +0 3 +cfn=(550) +calls=1 0 +0 5 +0 5 +cfn=(550) +calls=1 0 +0 5 +0 5 +cfn=(550) +calls=1 0 +0 5 +0 5 +cfn=(550) +calls=1 0 +0 5 +0 5 +cfn=(550) +calls=1 0 +0 5 +0 5 +cfn=(550) +calls=1 0 +0 5 +0 5 +cfn=(550) +calls=1 0 +0 5 +0 5 +cfn=(550) +calls=1 0 +0 5 +0 10 + +fn=(598) +0 11 +cfn=(524) +calls=1 0 +0 7 +0 4 +cfn=(604) std::ctype::_M_initialize_ctype() +calls=1 0 +0 24637 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1167 +0 3 + +fn=(660) +0 101 + +fn=(766) +0 73996 + +fn=(804) +0 24 +cfn=(734) +calls=4 0 +0 352 +0 12 +cfn=(810) std::basic_ios >::_M_cache_locale(std::locale const&) +calls=4 0 +0 10877 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1448 +0 52 + +fn=(816) bool std::has_facet >(std::locale const&) +0 16 +cfn=(550) +calls=4 0 +0 20 +0 44 +cfn=(764) +calls=4 0 +0 236 +0 16 + +fn=(846) std::num_get > > const& std::use_facet > > >(std::locale const&) +0 16 +cfn=(550) +calls=4 0 +0 20 +0 44 +cfn=(764) +calls=4 0 +0 236 +0 16 + +fn=(1400) +0 420 + +fn=(1402) +0 20 +cob=(4) +cfi=(98) /build/buildd/eglibc-2.11.1/libio/iofwrite.c +cfn=(1408) fwrite +calls=4 37 +0 3008 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1725 + +fn=(1442) std::ctype::_M_widen_init() const +0 1041 +cfn=(1444) std::ctype::do_widen(char const*, char const*, char*) const +calls=1 0 +0 121 +0 270 + +fn=(1456) +0 4779 +cfn=(550) +calls=531 0 +0 2655 +0 7434 + +fn=(1462) +0 376 + +fn=(1526) std::basic_filebuf >::basic_filebuf() +0 85 +cfn=(492) +calls=5 0 +0 195 +0 55 +cfn=(1532) +calls=5 0 +0 15 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1219 +0 100 +cfn=(1538) +calls=5 0 +0 415 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1302 +0 20 +cfn=(1544) std::codecvt const& std::use_facet >(std::locale const&) +calls=5 0 +0 415 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1337 +0 25 + +fn=(1544) +0 20 +cfn=(550) +calls=5 0 +0 25 +0 55 +cfn=(764) +calls=5 0 +0 295 +0 20 + +fn=(1618) +0 10 +cfn=(880) +calls=5 0 +0 2719 +0 10 + +fn=(1638) std::basic_istream >& std::getline, std::allocator >(std::basic_istream >&, std::basic_string, std::allocator >&, char) +0 2715 +cfn=(1644) +calls=181 0 +0 5792 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 994 +0 579 +cfn=(1630) +calls=6 0 +0 48 +0 2715 +cfn=(1650) +calls=181 0 +0 8747 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 978 +0 6164 +cob=(4) +cfi=(89) +cfn=(1248) +calls=175 25 +0 7095 +0 1575 +cfn=(1686) +calls=175 0 +0 50836 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 994 +0 2812 +cfn=(1692) +calls=175 0 +0 1225 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1283 +0 377 +cfn=(1798) +calls=5 0 +0 80 +cfn=(1652) +calls=4 0 +0 5956 +0 66 + +fn=(1708) std::basic_string, std::allocator >::basic_string(std::string const&, unsigned long, unsigned long) +0 21199 +cfn=(1710) +calls=1247 0 +0 246202 +0 4988 + +fn=(1798) +0 2752 +cfn=(1804) std::basic_stringbuf, std::allocator >::_M_update_egptr() +calls=344 0 +0 1720 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1434 +0 1032 + +fn=(1818) +0 2824 +cfn=(1824) +calls=353 0 +0 4236 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1226 +0 706 +cfn=(1830) std::ios_base::_M_dispose_callbacks() +calls=353 0 +0 5648 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1164 +0 2824 +cfn=(746) +calls=353 0 +0 4236 + +fn=(2138) std::string::compare(char const*) const +0 10488 +cob=(4) +cfi=(69) +cfn=(642) +calls=1311 26 +0 23544 +0 27652 + +fn=(2220) std::string::resize(unsigned long, char) +0 1152 +cfn=(1332) +calls=96 0 +0 24977 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 958 + +fn=(2314) +0 5957 +cfn=(1338) +calls=259 0 +0 46736 +0 2849 +cfn=(1772) +calls=259 0 +0 136644 +0 1813 +cfn=(524) +calls=259 0 +0 1813 +0 1554 +cfn=(2320) void std::__convert_to_v(char const*, float&, std::_Ios_Iostate&, __locale_struct* const&) +calls=259 0 +0 163547 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1443 +0 9065 +cfn=(1308) +calls=259 0 +0 21238 +0 1295 + +fn=(2448) std::string::_M_replace_safe(unsigned long, unsigned long, char const*, unsigned long) +0 66 +cfn=(1650) +calls=6 0 +0 1254 +0 96 +cob=(4) +cfi=(81) +cfn=(966) +calls=6 56 +0 144 +0 6 + +fn=(2516) std::istream& std::istream::_M_extract(unsigned long&) +0 9 +cfn=(1644) +calls=1 0 +0 65 +0 23 +cfn=(2518) std::num_get > >::do_get(std::istreambuf_iterator >, std::istreambuf_iterator >, std::ios_base&, std::_Ios_Iostate&, unsigned long&) const +calls=1 0 +0 2350 +0 12 +cfn=(1630) +calls=1 0 +0 8 +0 5 + +fn=(2542) std::basic_istringstream, std::allocator >::~basic_istringstream() +0 22 +cfn=(746) +calls=1 0 +0 12 +0 12 +cfn=(1818) +calls=1 0 +0 58 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 994 +0 10 +cfn=(1308) +calls=1 0 +0 82 +0 5 + +fn=(3098) std::basic_ifstream >::basic_ifstream() +0 20 +cfn=(722) +calls=2 0 +0 194 +0 44 +cfn=(728) +calls=2 0 +0 1416 +0 16 +cfn=(1526) +calls=2 0 +0 530 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1228 +0 6 +cfn=(728) +calls=2 0 +0 1416 +0 14 + +fn=(3150) std::istream::seekg(std::fpos<__mbstate_t>) +0 20 +cfn=(3152) +calls=1 0 +0 4619 +0 8 + +fn=(3252) std::basic_streambuf >::xsgetn(char*, long) +0 962 +cfn=(3254) +calls=1 0 +0 127 +0 908 +cob=(4) +cfi=(81) +cfn=(966) +calls=53 56 +0 1440 +0 265 + +fn=(3680) std::ios_base::Init::~Init() +0 756 +cfn=(1498) +calls=1 0 +0 73 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 958 +0 2 +cfn=(1498) +calls=1 0 +0 73 +0 2 +cfn=(1498) +calls=1 0 +0 73 +0 2 +cfn=(3794) +calls=1 0 +0 73 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1264 +0 2 +cfn=(3794) +calls=1 0 +0 73 +0 2 +cfn=(3794) +calls=1 0 +0 73 +0 542 + +fn=(3876) 0x0000000000072380 +0 4 + +fn=(294) +0 1 + +fn=(322) +0 49 + +fn=(370) +0 1 + +fn=(372) +0 57 + +fn=(556) +0 11 +cfn=(524) +calls=1 0 +0 7 +0 4 + +fn=(586) std::__timepunct::_M_initialize_timepunct(__locale_struct*) +0 10 +cfn=(524) +calls=1 0 +0 7 +0 97 + +fn=(696) +0 24 + +fn=(740) +0 13566 + +fn=(834) std::num_put > > const& std::use_facet > > >(std::locale const&) +0 16 +cfn=(550) +calls=4 0 +0 20 +0 44 +cfn=(764) +calls=4 0 +0 236 +0 16 + +fn=(1308) +0 571019610 +cfn=(1142) +calls=571019610 0 +0 46252589218 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 870 + +fn=(1448) std::num_put > >::do_put(std::ostreambuf_iterator >, std::ios_base&, char, unsigned long) const +0 10 +cfn=(1454) +calls=2 0 +0 1196 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1724 +0 8 + +fn=(1550) std::basic_filebuf >::open(char const*, std::_Ios_Openmode) +0 55 +cfn=(1556) +calls=5 0 +0 15 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1163 +0 65 +cfn=(1562) +calls=5 0 +0 5624 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1249 +0 10 +cfn=(1606) +calls=5 0 +0 40 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1317 +0 20 +cfn=(1612) +calls=5 0 +0 3676 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1481 +0 30 +cfn=(1624) +calls=5 0 +0 75 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1395 +0 35 + +fn=(1654) +0 12 + +fn=(1830) +0 5648 + +fn=(1880) +0 56 +cfn=(1556) +calls=7 0 +0 21 +0 68 +cfn=(1886) +calls=5 0 +0 150 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1391 +0 30 +cfn=(1892) +calls=5 0 +0 2341 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1446 +0 70 +cfn=(1904) +calls=5 0 +0 6679 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1110 +0 20 + +fn=(2442) std::string::assign(char const*, unsigned long) +0 126 +cfn=(2448) +calls=6 0 +0 1566 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1076 + +fn=(2726) std::ostream& std::ostream::_M_insert(void const*) +0 13 +cfn=(1400) +calls=1 0 +0 21 +0 21 +cfn=(2728) +calls=1 0 +0 836 +0 32 + +fn=(3246) +0 1325 +cfn=(3252) +calls=53 0 +0 3702 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1309 +0 530 + +fn=(550) +0 24572 + +fn=(604) +0 10 +cob=(4) +cfi=(62) /build/buildd/eglibc-2.11.1/locale/uselocale.c +cfn=(610) uselocale +calls=1 32 +0 21 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1748 +0 898 +cob=(4) +cfi=(63) /build/buildd/eglibc-2.11.1/wcsmbs/wctob.c +cfn=(616) wctob +calls=128 33 +0 2432 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1674 +0 260 +cob=(4) +cfi=(64) /build/buildd/eglibc-2.11.1/wcsmbs/btowc.c +cfn=(622) btowc +calls=1 35 +0 20 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1683 +0 510 +cob=(4) +cfi=(64) +cfn=(622) +calls=255 35 +0 9196 +0 1091 +cfn=(634) +calls=8 0 +0 3013 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1150 +0 16 +cfn=(634) +calls=4 0 +0 793 +0 99 +cob=(4) +cfi=(62) +cfn=(610) +calls=1 32 +0 21 +0 2 + +fn=(684) +0 11 +cfn=(524) +calls=1 0 +0 7 +0 2 +cfn=(512) +calls=1 0 +0 2 +0 4 + +fn=(772) +0 2852 +cfn=(550) +calls=713 0 +0 3565 +0 7843 +cfn=(764) +calls=713 0 +0 67022 +0 2852 + +fn=(1326) std::string::_M_leak_hard() +0 3156 + +fn=(1436) std::ostream& std::ostream::_M_insert(unsigned long) +0 26 +cfn=(1400) +calls=2 0 +0 42 +0 42 +cfn=(1448) +calls=2 0 +0 2938 +0 65 +cfn=(1442) +calls=1 0 +0 1432 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1117 +0 4 +cfn=(1446) +calls=1 0 +0 2 +0 1 + +fn=(1444) +0 5 +cob=(4) +cfi=(81) +cfn=(966) +calls=1 56 +0 113 +0 3 + +fn=(1476) +0 24 +cob=(4) +cfi=(105) /build/buildd/eglibc-2.11.1/libio/putc.c +cfn=(1482) putc +calls=3 29 +0 543 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1665 + +fn=(1564) +0 50 + +fn=(1732) std::string::find_last_not_of(char const*, unsigned long, unsigned long) const +0 5621 +cob=(4) +cfi=(89) +cfn=(1248) +calls=1 25 +0 22 +0 1404 +cob=(4) +cfi=(89) +cfn=(1248) +calls=351 25 +0 8069 +0 3164 + +fn=(1764) std::istream& std::istream::_M_extract(double&) +0 2826 +cfn=(1644) +calls=314 0 +0 17085 +0 5941 +cfn=(1766) std::num_get > >::do_get(std::istreambuf_iterator >, std::istreambuf_iterator >, std::ios_base&, std::_Ios_Iostate&, double&) const +calls=253 0 +0 395031 +0 3341 +cfn=(1630) +calls=70 0 +0 560 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1346 +0 350 + +fn=(1844) +0 5404 + +fn=(1940) +0 5 +cfn=(1904) +calls=5 0 +0 80 + +fn=(2818) +0 15481 + +fn=(3188) std::istream::get(char*, long, char) +0 15 +cfn=(1644) +calls=1 0 +0 32 +0 814 +cfn=(1652) +calls=1 0 +0 115 +0 2 + +fn=(3616) +0 6 +cfn=(3622) std::ostreambuf_iterator > std::num_put > >::_M_insert_float(std::ostreambuf_iterator >, std::ios_base&, char, char, double) const +calls=1 0 +0 6538 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1759 +0 4 + +fn=(3622) +0 26 +cfn=(1456) +calls=1 0 +0 28 +0 9 +cfn=(3628) +calls=1 0 +0 27 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1359 +0 3 +cfn=(524) +calls=1 0 +0 7 +0 10 +cfn=(3630) 0x0000000000089420 +calls=1 0 +0 4570 +0 5 +cfn=(772) +calls=1 0 +0 118 +0 17 +cob=(4) +cfi=(89) +cfn=(1248) +calls=1 25 +0 25 +0 27 +cfn=(1402) +calls=1 0 +0 258 +0 21 +cob=(4) +cfi=(81) +cfn=(966) +calls=1 56 +0 27 +0 1 + +fn=(3630) +0 19 +cob=(4) +cfi=(62) +cfn=(610) +calls=1 32 +0 21 +0 12 +cob=(4) +cfi=(139) /build/buildd/eglibc-2.11.1/libio/vsnprintf.c +cfn=(3640) vsnprintf +calls=1 101 +0 2758 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1729 +0 3 +cob=(4) +cfi=(62) +cfn=(610) +calls=1 32 +0 21 +0 7 + +fn=(3796) +0 6 +cob=(4) +cfi=(107) +cfn=(1506) +calls=3 36 +0 162 + +fn=(3864) 0x000000000005a4c0 +0 10 +cob=(4) +cfi=(153) +cfn=(3726) +calls=1 31 +0 473 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1810 +0 13 + +fn=(3874) 0x0000000000072390 +0 4 + +fn=(2692) +0 110 +cfn=(1456) +calls=5 0 +0 140 +0 125 +cfn=(1462) +calls=5 0 +0 153 +0 140 +cfn=(2694) +calls=5 0 +0 3200 +0 85 + +fn=(580) +0 13 +cfn=(512) +calls=1 0 +0 2 +0 4 +cfn=(586) +calls=1 0 +0 114 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1401 +0 3 + +fn=(678) +0 9 +cfn=(524) +calls=1 0 +0 7 +0 96 + +fn=(792) +0 2840 +cfn=(550) +calls=710 0 +0 3550 +0 7810 +cfn=(764) +calls=710 0 +0 41890 +0 2840 + +fn=(810) +0 28 +cfn=(816) +calls=4 0 +0 332 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1166 +0 16 +cfn=(822) +calls=4 0 +0 332 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1193 +0 12 +cfn=(828) +calls=4 0 +0 332 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1580 +0 16 +cfn=(834) +calls=4 0 +0 332 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1631 +0 12 +cfn=(840) +calls=4 0 +0 332 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1572 +0 16 +cfn=(846) +calls=4 0 +0 332 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1623 +0 20 + +fn=(934) std::basic_string, std::allocator >::basic_string(char const*, std::allocator const&) +0 6868771140 +cob=(4) +cfi=(69) +cfn=(642) +calls=572397595 26 +0 9158423470 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1690 +0 2861987975 +cfn=(942) +calls=572397595 0 +0 105537063253 +0 3434385570 + +fn=(1380) std::basic_string, std::allocator >::~basic_string() +0 20024140331 +cfn=(1308) +calls=571017252 0 +0 46823414711 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1077 +0 7437212116 + +fn=(1726) std::string::find_first_not_of(char const*, unsigned long, unsigned long) const +0 7082 +cob=(4) +cfi=(89) +cfn=(1248) +calls=445 25 +0 10148 +0 3355 + +fn=(1766) +0 5819 +cfn=(1338) +calls=253 0 +0 45900 +0 2783 +cfn=(1772) +calls=253 0 +0 136637 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1951 +0 1771 +cfn=(524) +calls=253 0 +0 1771 +0 1518 +cfn=(1778) +calls=253 0 +0 164214 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1435 +0 9221 +cfn=(1308) +calls=253 0 +0 20746 +0 1265 + +fn=(1804) +0 1720 + +fn=(2320) +0 2590 +cob=(4) +cfi=(112) +cfn=(2326) strtof_l +calls=259 1601 +0 155302 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1770 +0 3885 + +fn=(2402) std::_Rb_tree_insert_and_rebalance(bool, std::_Rb_tree_node_base*, std::_Rb_tree_node_base*, std::_Rb_tree_node_base&) +0 15140729663 +cfn=(2420) +calls=217 0 +0 3491 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1327 +0 510 +cfn=(2420) +calls=102 0 +0 1637 +0 7471 +cfn=(3444) +calls=219 0 +0 3557 +0 1325 +cfn=(3444) +calls=265 0 +0 4337 +0 1274 +cfn=(3444) +calls=102 0 +0 1742 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1336 +0 2246538262 +cfn=(2420) +calls=265 0 +0 4534 +0 530 + +fn=(2518) +0 10 +cfn=(2524) +calls=1 0 +0 417 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1921 +0 2 + +fn=(2702) +0 44 + +ob=(2) +fl=(13) +fn=(224) +0 2 +cob=(5) /lib/libgcc_s.so.1 +cfi=(51) ??? +cfn=(226) 0x0000000000002d80 +calls=1 0 +0 6 +0 1 +cob=(5) +cfi=(51) +cfn=(232) 0x0000000000002e20 +calls=1 0 +0 6 +0 1 +cob=(5) +cfi=(51) +cfn=(238) 0x0000000000013390 +calls=1 0 +0 11 +0 2 + +fn=(440) +0 2 +cob=(10) +cfi=(59) +cfn=(442) +calls=1 0 +0 6 +0 1 +cob=(10) +cfi=(59) +cfn=(448) +calls=1 0 +0 6 +0 1 +cob=(10) +cfi=(59) +cfn=(454) +calls=1 0 +0 11 +0 2 + +fn=(3884) +0 2 +cob=(6) /lib/libm-2.11.1.so +cfi=(52) ??? +cfn=(3886) 0x0000000000003f10 +calls=1 0 +0 2263 +0 2 + +fn=(3804) +0 2 +cob=(10) +cfi=(59) +cfn=(3806) +calls=1 0 +0 2263 +0 2 + +fn=(3862) +0 2 +cob=(7) +cfi=(53) +cfn=(3864) +calls=1 0 +0 2306 +0 2 + +fn=(244) +0 2 +cob=(6) +cfi=(52) +cfn=(246) 0x0000000000003ef0 +calls=1 0 +0 6 +0 1 +cob=(6) +cfi=(52) +cfn=(252) 0x0000000000003f90 +calls=1 0 +0 6 +0 1 +cob=(6) +cfi=(52) +cfn=(258) 0x00000000000447c0 +calls=1 0 +0 11 +0 2 + +fn=(460) +0 2 +cob=(11) /home/tclose/Code/MRtrix3/lib/libmrtrix-0_3_4.so +cfi=(60) ??? +cfn=(462) 0x0000000000013ce0 +calls=1 0 +0 6 +0 1 +cob=(11) +cfi=(60) +cfn=(468) 0x0000000000013d80 +calls=1 0 +0 6 +0 1 +cob=(11) +cfi=(60) +cfn=(474) 0x000000000007c330 +calls=1 0 +0 189529 +0 2 + +fn=(3736) +0 2 +cob=(11) +cfi=(60) +cfn=(3738) 0x0000000000013d00 +calls=1 0 +0 10833 +0 2 + +fn=(3904) +0 2 +cob=(5) +cfi=(51) +cfn=(3906) 0x0000000000002da0 +calls=1 0 +0 2263 +0 2 + +fn=(264) +0 2 +cob=(7) +cfi=(53) +cfn=(266) +calls=1 0 +0 6 +0 1 +cob=(7) +cfi=(53) +cfn=(272) +calls=1 0 +0 6 +0 1 +cob=(7) +cfi=(53) +cfn=(278) +calls=1 0 +0 2196 + +ob=(8) /usr/lib/libgslcblas.so.0.0.0 +fl=(57) ??? +fn=(402) 0x00000000000024d0 +0 6 + +fn=(414) 0x0000000000036cb0 +0 11 + +fn=(2918) cblas_dnrm2 +0 13176 + +fn=(2936) cblas_dtrmv +0 37210 + +fn=(2970) cblas_dgemv +0 256444 + +fn=(2892) cblas_dgemm +0 1037 + +ob=(2) +fl=(13) +fn=(264) +0 2 + +fn=(3824) +0 2 +cob=(9) /usr/lib/libgsl.so.0.14.0 +cfi=(58) ??? +cfn=(3826) 0x000000000004aba0 +calls=1 0 +0 2263 +0 2 + +fn=(176) +0 2 +cob=(3) /usr/lib/valgrind/vgpreload_core-amd64-linux.so +cfi=(39) ??? +cfn=(178) 0x0000000000000510 +calls=1 0 +0 6 +0 1 +cob=(3) +cfi=(39) +cfn=(184) 0x00000000000005b0 +calls=1 0 +0 6 +0 1 +cob=(3) +cfi=(39) +cfn=(190) 0x0000000000000710 +calls=1 0 +0 11 +0 2 + +ob=(8) +fl=(57) +fn=(2892) +0 1268556 + +fn=(2944) cblas_dscal +0 6466 + +fn=(2910) cblas_ddot +0 47580 + +fn=(408) 0x0000000000002570 +0 6 + +fn=(2956) cblas_dsymm +0 94123 + +ob=(2) +fl=(13) +fn=(400) +0 2 +cob=(8) +cfi=(57) +cfn=(402) +calls=1 0 +0 6 +0 1 +cob=(8) +cfi=(57) +cfn=(408) +calls=1 0 +0 6 +0 1 +cob=(8) +cfi=(57) +cfn=(414) +calls=1 0 +0 11 +0 2 + +fn=(3712) +0 2 +cob=(3) +cfi=(39) +cfn=(3714) 0x0000000000000530 +calls=1 0 +0 1542 +0 2 + +fn=(420) +0 2 +cob=(9) +cfi=(58) +cfn=(422) 0x000000000004ab80 +calls=1 0 +0 6 +0 1 +cob=(9) +cfi=(58) +cfn=(428) 0x000000000004ac20 +calls=1 0 +0 6 +0 1 +cob=(9) +cfi=(58) +cfn=(434) 0x00000000001b6ea0 +calls=1 0 +0 11 +0 2 + +fn=(3842) +0 2 +cob=(8) +cfi=(57) +cfn=(3844) 0x00000000000024f0 +calls=1 0 +0 2263 + +ob=(8) +fl=(57) +fn=(2956) +0 1520242 + +fn=(3844) +0 6 + +ob=(2) +fl=(13) +fn=(3842) +0 2 + +fn=(1052) 0x000000000040d710 +0 2 +cob=(12) +cfi=(84) +cfn=(1054) 0x000000000040e38c +calls=1 0 +0 6 +0 1 +cob=(12) +cfi=(84) +cfn=(1060) 0x000000000040e420 +calls=1 0 +0 6 +0 1 +cob=(12) +cfi=(84) +cfn=(1066) 0x00000000004d8fa0 +calls=1 0 +0 217013 +0 2 + +fn=(3702) +0 2 +cob=(12) +cfi=(84) +cfn=(3704) 0x000000000040e3b0 +calls=1 0 +0 18 +0 2 + +ob=(8) +fl=(57) +fn=(3844) +0 4 +cob=(4) +cfi=(153) +cfn=(3726) +calls=1 31 +0 430 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1810 +0 13 + +ob=(3) +fl=(39) +fn=(184) +0 6 + +fn=(178) +0 6 + +fn=(190) +0 11 + +fn=(3714) +0 10 +cob=(4) +cfi=(153) +cfn=(3726) +calls=1 31 +0 430 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1089 + +ob=(5) +fl=(51) +fn=(232) +0 6 + +fn=(226) +0 6 + +fn=(238) +0 11 + +fn=(3906) +0 10 +cob=(4) +cfi=(153) +cfn=(3726) +calls=1 31 +0 430 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1810 +0 13 + +ob=(3) +fl=(39) +fn=(3714) +0 13 + +ob=(11) +fl=(60) +fn=(858) global constructors keyed to quick_scan.cpp +0 3 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 24 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 + +fn=(862) global constructors keyed to dict.cpp +0 5 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 24 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 78 +cob=(6) +cfi=(70) /build/buildd/eglibc-2.11.1/math/../sysdeps/ieee754/flt-32/s_ceilf.c +cfn=(868) ceilf +calls=1 39 +0 15 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1414 +0 8 +cfn=(874) std::tr1::_Hashtable, std::allocator >, std::_Select1st >, std::equal_to, std::tr1::hash, std::tr1::__detail::_Mod_range_hashing, std::tr1::__detail::_Default_ranged_hash, std::tr1::__detail::_Prime_rehash_policy, false, false, true>::_M_allocate_buckets(unsigned long) +calls=1 0 +0 63871 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 2458 +0 8 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 + +fn=(926) global constructors keyed to mri.cpp +0 3 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 24 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 + +fn=(1000) global constructors keyed to patient.cpp +0 3 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 24 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 + +fn=(1020) global constructors keyed to mosaic.cpp +0 3 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 24 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 + +fn=(2028) std::vector >::_M_insert_aux(__gnu_cxx::__normal_iterator > >, MR::Image::NameParserItem const&) +0 48 +cfn=(2034) std::vector >::_M_check_len(unsigned long, char const*) const +calls=2 0 +0 40 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1154 +0 16 +cfn=(2040) std::_Vector_base >::_M_allocate(unsigned long) +calls=2 0 +0 298 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1172 +0 20 +cfn=(2046) MR::Image::NameParserItem::NameParserItem(MR::Image::NameParserItem const&) +calls=2 0 +0 1874 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 874 +0 12 +cfn=(2056) MR::Image::NameParserItem* std::__uninitialized_move_a >(MR::Image::NameParserItem*, MR::Image::NameParserItem*, MR::Image::NameParserItem*, std::allocator&) +calls=2 0 +0 42 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1297 +0 12 +cfn=(2056) +calls=2 0 +0 42 +0 28 + +fn=(2062) MR::Image::NameParserItem::~NameParserItem() +0 16 +cob=(7) +cfi=(53) +cfn=(1380) +calls=2 0 +0 30 + +fn=(2108) void std::__final_insertion_sort<__gnu_cxx::__normal_iterator*, std::vector, std::allocator > > > >(__gnu_cxx::__normal_iterator*, std::vector, std::allocator > > >, __gnu_cxx::__normal_iterator*, std::vector, std::allocator > > >) +0 22 +cfn=(2114) void std::__insertion_sort<__gnu_cxx::__normal_iterator*, std::vector, std::allocator > > > >(__gnu_cxx::__normal_iterator*, std::vector, std::allocator > > >, __gnu_cxx::__normal_iterator*, std::vector, std::allocator > > >) +calls=2 0 +0 44 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1676 +0 12 + +fn=(2202) MR::File::KeyValue::next() +0 3654 +cob=(7) +cfi=(53) +cfn=(1638) +calls=97 0 +0 48451 +0 970 +cob=(7) +cfi=(53) +cfn=(1702) +calls=97 0 +0 5341 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1500 +0 485 +cob=(7) +cfi=(53) +cfn=(1708) +calls=97 0 +0 23920 +0 485 +cob=(7) +cfi=(53) +cfn=(1726) +calls=97 0 +0 4789 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1722 +0 776 +cob=(7) +cfi=(53) +cfn=(1732) +calls=97 0 +0 5006 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1690 +0 873 +cob=(7) +cfi=(53) +cfn=(1708) +calls=97 0 +0 23950 +0 291 +cob=(7) +cfi=(53) +cfn=(1260) +calls=97 0 +0 11931 +0 1067 +cob=(7) +cfi=(53) +cfn=(2138) +calls=97 0 +0 4288 +0 954 +cob=(7) +cfi=(53) +cfn=(1702) +calls=95 0 +0 4472 +0 760 +cob=(7) +cfi=(53) +cfn=(1708) +calls=95 0 +0 19620 +0 475 +cob=(7) +cfi=(53) +cfn=(1726) +calls=95 0 +0 4691 +0 760 +cob=(7) +cfi=(53) +cfn=(1732) +calls=95 0 +0 5141 +0 1140 +cob=(7) +cfi=(53) +cfn=(1708) +calls=95 0 +0 20206 +0 285 +cob=(7) +cfi=(53) +cfn=(1260) +calls=95 0 +0 11495 +0 1520 +cob=(7) +cfi=(53) +cfn=(1708) +calls=95 0 +0 22903 +0 475 +cob=(7) +cfi=(53) +cfn=(1726) +calls=95 0 +0 7920 +0 755 +cob=(7) +cfi=(53) +cfn=(1732) +calls=94 0 +0 4818 +0 1034 +cob=(7) +cfi=(53) +cfn=(1708) +calls=94 0 +0 23484 +0 285 +cob=(7) +cfi=(53) +cfn=(1260) +calls=95 0 +0 9394 +0 1052 +cob=(12) +cfi=(84) +cfn=(1962) std::basic_string, std::allocator > std::operator+, std::allocator >(char const*, std::basic_string, std::allocator > const&) +calls=1 0 +0 381 +0 3 +cob=(7) +cfi=(53) +cfn=(1254) +calls=1 0 +0 20 +0 4 +cob=(7) +cfi=(53) +cfn=(1686) +calls=1 0 +0 371 +0 6 +cob=(12) +cfi=(84) +cfn=(1350) std::basic_string, std::allocator > std::operator+, std::allocator >(std::basic_string, std::allocator > const&, std::basic_string, std::allocator > const&) +calls=1 0 +0 421 +0 4 +cob=(7) +cfi=(53) +cfn=(1254) +calls=1 0 +0 20 +0 4 +cob=(7) +cfi=(53) +cfn=(1686) +calls=1 0 +0 387 +0 2 +cfn=(1980) MR::cmdline_info(std::string const&) +calls=1 0 +0 7 +0 1766 +cob=(7) +cfi=(53) +cfn=(1326) +calls=97 0 +0 1164 +0 1828 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 57 +0 9 +cob=(7) +cfi=(53) +cfn=(1630) +calls=2 0 +0 16 +0 586 +cob=(7) +cfi=(53) +cfn=(1308) +calls=97 0 +0 7954 +0 491 +cob=(7) +cfi=(53) +cfn=(1308) +calls=1 0 +0 82 +0 7 +cob=(7) +cfi=(53) +cfn=(1308) +calls=1 0 +0 126 +0 7 +cob=(7) +cfi=(53) +cfn=(1308) +calls=1 0 +0 82 +0 7 +cob=(7) +cfi=(53) +cfn=(1308) +calls=1 0 +0 82 +0 565 +cob=(7) +cfi=(53) +cfn=(1308) +calls=94 0 +0 7708 +0 664 +cob=(7) +cfi=(53) +cfn=(1308) +calls=95 0 +0 7790 +0 101 +cob=(7) +cfi=(53) +cfn=(1308) +calls=1 0 +0 124 +0 3345 +cob=(7) +cfi=(53) +cfn=(1308) +calls=96 0 +0 7872 +0 968 + +fn=(2240) MR::parse_ints(std::string const&, int) +0 43 +cob=(7) +cfi=(53) +cfn=(2246) +calls=1 0 +0 88 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1634 +0 15 +cob=(7) +cfi=(53) +cfn=(2246) +calls=3 0 +0 266 +0 48 +cob=(7) +cfi=(53) +cfn=(1708) +calls=4 0 +0 804 +0 20 +cob=(7) +cfi=(53) +cfn=(1726) +calls=4 0 +0 196 +0 32 +cob=(7) +cfi=(53) +cfn=(1732) +calls=4 0 +0 204 +0 36 +cob=(7) +cfi=(53) +cfn=(1708) +calls=4 0 +0 891 +0 40 +cob=(7) +cfi=(53) +cfn=(1326) +calls=4 0 +0 48 +0 26 +cob=(4) +cfi=(124) /build/buildd/eglibc-2.11.1/ctype/ctype.c +cfn=(2234) tolower +calls=5 47 +0 60 +0 86 +cob=(7) +cfi=(53) +cfn=(2138) +calls=4 0 +0 176 +0 125 +cob=(7) +cfi=(53) +cfn=(1708) +calls=4 0 +0 748 +0 8 +cob=(7) +cfi=(53) +cfn=(722) +calls=4 0 +0 388 +0 108 +cob=(7) +cfi=(53) +cfn=(728) +calls=4 0 +0 2832 +0 68 +cob=(7) +cfi=(53) +cfn=(492) +calls=4 0 +0 156 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1459 +0 40 +cob=(7) +cfi=(53) +cfn=(1752) +calls=4 0 +0 983 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1514 +0 28 +cob=(7) +cfi=(53) +cfn=(1758) +calls=4 0 +0 84 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 2194 +0 16 +cob=(7) +cfi=(53) +cfn=(728) +calls=4 0 +0 2832 +0 12 +cob=(7) +cfi=(53) +cfn=(2266) +calls=4 0 +0 4625 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1394 +0 76 +cob=(7) +cfi=(53) +cfn=(746) +calls=4 0 +0 48 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1483 +0 44 +cob=(7) +cfi=(53) +cfn=(1818) +calls=4 0 +0 232 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1515 +0 52 +cob=(7) +cfi=(53) +cfn=(1308) +calls=4 0 +0 328 +0 22 +cob=(12) +cfi=(84) +cfn=(2294) std::vector >::_M_insert_aux(__gnu_cxx::__normal_iterator > >, int const&) +calls=3 0 +0 998 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1646 +0 27 +cob=(7) +cfi=(53) +cfn=(1308) +calls=4 0 +0 328 +0 44 +cob=(7) +cfi=(53) +cfn=(1308) +calls=4 0 +0 328 +0 32 +cob=(7) +cfi=(53) +cfn=(1308) +calls=4 0 +0 328 +0 52 + +fn=(2658) std::vector, std::allocator > >::_M_fill_insert(__gnu_cxx::__normal_iterator*, std::vector, std::allocator > > >, unsigned long, MR::RefPtr const&) +0 84 +cob=(7) +cfi=(53) +cfn=(880) +calls=1 0 +0 223 +0 6 + +fn=(3776) MR::Image::Format::NIfTI::~NIfTI() +0 4 + +fn=(3780) MR::Image::Format::MRtrix::~MRtrix() +0 4 + +fn=(478) global constructors keyed to select_cmdline.cpp +0 3 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 102651 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1579 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1778 + +fn=(860) global constructors keyed to mrtrix.cpp +0 3 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 24 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 3 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 24 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 + +fn=(912) global constructors keyed to data_type.cpp +0 3 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 24 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 + +fn=(988) global constructors keyed to progressbar.cpp +0 3 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 24 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 + +fn=(1002) global constructors keyed to header.cpp +0 3 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 24 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 + +fn=(1022) global constructors keyed to confirm.cpp +0 3 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 24 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 + +fn=(1266) MR::App::sort_arguments(int, char**) +0 20 + +fn=(2140) MR::Image::Format::DICOM::read(MR::Image::Header&) const +0 12 +cob=(4) +cfi=(94) /build/buildd/eglibc-2.11.1/io/../sysdeps/unix/sysv/linux/wordsize-64/xstat.c +cfn=(1296) _xstat +calls=1 37 +0 10 +0 15 + +fn=(2348) MR::split(std::string const&, char const*, bool, unsigned long) +0 42 +cob=(4) +cfi=(69) +cfn=(642) +calls=2 26 +0 32 +0 12 +cob=(4) +cfi=(69) +cfn=(642) +calls=6 26 +0 96 +0 40 +cob=(7) +cfi=(53) +cfn=(2246) +calls=8 0 +0 384 +0 80 +cob=(7) +cfi=(53) +cfn=(1708) +calls=8 0 +0 312 +0 32 +cob=(7) +cfi=(53) +cfn=(1254) +calls=2 0 +0 30 +0 150 +cob=(12) +cfi=(84) +cfn=(2358) std::vector >::_M_insert_aux(__gnu_cxx::__normal_iterator > >, std::string const&) +calls=6 0 +0 2036 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1710 +0 6 + +fn=(2426) MR::Image::Axes::Dim::operator=(unsigned long) +0 27 +cob=(7) +cfi=(53) +cfn=(1380) +calls=1 0 +0 7 +0 2 +cob=(7) +cfi=(53) +cfn=(1380) +calls=1 0 +0 7 +0 13 +cob=(4) +cfi=(69) +cfn=(642) +calls=1 26 +0 22 +0 6 +cob=(4) +cfi=(69) +cfn=(642) +calls=2 26 +0 44 +0 12 +cob=(7) +cfi=(53) +cfn=(2442) +calls=3 0 +0 1965 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1534 +0 12 +cob=(4) +cfi=(69) +cfn=(642) +calls=3 26 +0 48 +0 12 +cob=(7) +cfi=(53) +cfn=(2442) +calls=3 0 +0 803 +0 59 +cob=(7) +cfi=(53) +cfn=(1650) +calls=1 0 +0 38 +0 6 +cob=(7) +cfi=(53) +cfn=(1650) +calls=1 0 +0 38 +0 21 +cob=(12) +cfi=(84) +cfn=(2432) std::vector >::_M_fill_insert(__gnu_cxx::__normal_iterator > >, unsigned long, MR::Image::Axes::Axis const&) +calls=1 0 +0 523 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 2086 +0 1 + +fn=(2460) MR::Image::Axes::parse(unsigned long, std::string const&) +0 22 +cob=(7) +cfi=(53) +cfn=(880) +calls=1 0 +0 110 +0 133 +cob=(7) +cfi=(53) +cfn=(1708) +calls=4 0 +0 784 +0 8 +cob=(7) +cfi=(53) +cfn=(722) +calls=4 0 +0 388 +0 84 +cob=(7) +cfi=(53) +cfn=(728) +calls=4 0 +0 2832 +0 64 +cob=(7) +cfi=(53) +cfn=(492) +calls=4 0 +0 156 +0 36 +cob=(7) +cfi=(53) +cfn=(1752) +calls=4 0 +0 748 +0 24 +cob=(7) +cfi=(53) +cfn=(1758) +calls=4 0 +0 84 +0 12 +cob=(7) +cfi=(53) +cfn=(728) +calls=4 0 +0 2832 +0 12 +cob=(7) +cfi=(53) +cfn=(2272) +calls=4 0 +0 1465 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1664 +0 76 +cob=(7) +cfi=(53) +cfn=(746) +calls=4 0 +0 48 +0 44 +cob=(7) +cfi=(53) +cfn=(1818) +calls=4 0 +0 232 +0 112 +cfn=(2470) MR::Image::Axes::check(std::vector > const&, unsigned long) +calls=1 0 +0 139 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 955 +0 37 +cob=(7) +cfi=(53) +cfn=(1308) +calls=4 0 +0 328 +0 48 +cob=(7) +cfi=(53) +cfn=(1308) +calls=4 0 +0 328 +0 20 + +fn=(2640) MR::Image::Handler::Default::execute() +0 55 +cfn=(2646) MR::DataType::bits() const +calls=1 0 +0 22 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 750 +0 5 +cfn=(2646) +calls=1 0 +0 22 +0 19 +cfn=(2652) MR::Image::Handler::Default::map_files() +calls=1 0 +0 33462 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 961 +0 6 + +fn=(914) global constructors keyed to name_parser.cpp +0 3 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 24 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 + +fn=(990) global constructors keyed to app.cpp +0 3 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 24 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 7 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 66 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 + +fn=(1004) global constructors keyed to image.cpp +0 3 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 24 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 + +fn=(1024) global constructors keyed to element.cpp +0 3 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 24 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 + +fn=(1980) +0 21 + +fn=(1996) MR::Image::NameParser::parse(std::string const&, unsigned long) +0 28 +cob=(7) +cfi=(53) +cfn=(1260) +calls=2 0 +0 56 +0 10 +cob=(4) +cfi=(94) +cfn=(1296) +calls=2 37 +0 20 +0 38 +cob=(7) +cfi=(53) +cfn=(1242) +calls=2 0 +0 688 +0 14 +cob=(7) +cfi=(53) +cfn=(1260) +calls=2 0 +0 56 +0 4 +cob=(7) +cfi=(53) +cfn=(1380) +calls=2 0 +0 30 +0 10 +cob=(7) +cfi=(53) +cfn=(1242) +calls=2 0 +0 688 +0 22 +cob=(7) +cfi=(53) +cfn=(1708) +calls=2 0 +0 468 +0 52 +cob=(7) +cfi=(53) +cfn=(2006) +calls=2 0 +0 154 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1466 +0 14 +cfn=(2012) MR::Image::NameParser::insert_str(std::string const&) +calls=2 0 +0 12581 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 911 +0 38 +cob=(7) +cfi=(53) +cfn=(1708) +calls=2 0 +0 754 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1434 +0 14 +cob=(7) +cfi=(53) +cfn=(1380) +calls=2 0 +0 30 +0 2 + +fn=(2012) +0 36 +cob=(7) +cfi=(53) +cfn=(1650) +calls=2 0 +0 76 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1506 +0 12 +cob=(7) +cfi=(53) +cfn=(1260) +calls=2 0 +0 56 +0 8 +cfn=(2022) std::vector >::insert(__gnu_cxx::__normal_iterator > >, MR::Image::NameParserItem const&) +calls=2 0 +0 8512 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1477 +0 4 +cfn=(2062) +calls=2 0 +0 46 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 838 +0 10 + +fn=(2074) MR::Image::NameParser::name(std::vector > const&) +0 58 +cob=(7) +cfi=(53) +cfn=(1254) +calls=2 0 +0 40 +0 8 +cfn=(2080) MR::Path::join(std::string const&, std::string const&) +calls=2 0 +0 3848 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 774 +0 4 +cob=(7) +cfi=(53) +cfn=(1380) +calls=2 0 +0 30 +0 2 + +fn=(2080) +0 60 +cob=(7) +cfi=(53) +cfn=(934) +calls=2 0 +0 458 +0 14 +cob=(7) +cfi=(53) +cfn=(1326) +calls=2 0 +0 24 +0 14 +cob=(7) +cfi=(53) +cfn=(1254) +calls=2 0 +0 40 +0 8 +cob=(7) +cfi=(53) +cfn=(1332) +calls=2 0 +0 574 +0 8 +cob=(7) +cfi=(53) +cfn=(1254) +calls=2 0 +0 40 +0 6 +cob=(7) +cfi=(53) +cfn=(1360) +calls=2 0 +0 644 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1548 +0 4 +cob=(7) +cfi=(53) +cfn=(1380) +calls=2 0 +0 200 +0 4 +cob=(7) +cfi=(53) +cfn=(1380) +calls=2 0 +0 200 +0 2 + +fn=(2652) +0 17 +cob=(12) +cfi=(84) +cfn=(1962) +calls=1 0 +0 405 +0 3 +cob=(7) +cfi=(53) +cfn=(1254) +calls=1 0 +0 20 +0 4 +cob=(7) +cfi=(53) +cfn=(1686) +calls=1 0 +0 307 +0 2 +cfn=(2170) MR::cmdline_debug(std::string const&) +calls=1 0 +0 7 +0 12 +cob=(7) +cfi=(53) +cfn=(880) +calls=1 0 +0 126 +0 55 +cob=(7) +cfi=(53) +cfn=(880) +calls=1 0 +0 180 +0 10 +cob=(7) +cfi=(53) +cfn=(1254) +calls=1 0 +0 20 +0 7 +cfn=(2670) MR::File::MMap::map() +calls=1 0 +0 27692 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 741 +0 23 +cfn=(2664) std::vector >::_M_fill_insert(__gnu_cxx::__normal_iterator > >, unsigned long, unsigned char* const&) +calls=1 0 +0 315 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1332 +0 7 +cfn=(2658) +calls=1 0 +0 313 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1645 +0 8 +cob=(7) +cfi=(53) +cfn=(1308) +calls=1 0 +0 82 +0 7 +cob=(7) +cfi=(53) +cfn=(1308) +calls=1 0 +0 113 +0 9 + +fn=(2834) MR::Image::Handler::Default::~Default() +0 24 +cfn=(2840) MR::File::MMap::~MMap() +calls=1 0 +0 4683 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 747 +0 2 +cob=(7) +cfi=(53) +cfn=(1142) +calls=1 0 +0 81 +0 3 +cob=(7) +cfi=(53) +cfn=(1142) +calls=1 0 +0 81 +0 7 +cob=(7) +cfi=(53) +cfn=(1142) +calls=1 0 +0 81 +0 7 +cob=(7) +cfi=(53) +cfn=(1142) +calls=1 0 +0 81 +0 4 +cob=(7) +cfi=(53) +cfn=(1142) +calls=1 0 +0 81 +0 2 +cob=(7) +cfi=(53) +cfn=(1142) +calls=1 0 +0 81 +0 7 + +fn=(3752) MR::Thread::Mutex::~Mutex() +0 1 +cob=(4) +cfi=(83) /build/buildd/eglibc-2.11.1/nptl/forward.c +cfn=(3758) pthread_mutex_destroy +calls=1 176 +0 5 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1914 + +fn=(3762) std::map, std::allocator > >::~map() +0 3 +cob=(12) +cfi=(84) +cfn=(2618) std::_Rb_tree, std::_Select1st >, std::less, std::allocator > >::_M_erase(std::_Rb_tree_node >*) +calls=1 0 +0 11 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 2038 +0 2 + +fn=(3778) MR::Image::Format::MRI::~MRI() +0 4 + +fn=(3782) MR::Image::Format::Pipe::~Pipe() +0 4 + +fn=(916) global constructors keyed to base.cpp +0 3 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 24 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 + +fn=(1026) global constructors keyed to nifti1_utils.cpp +0 3 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 24 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 + +fn=(1990) MR::Image::ParsedNameList::parse_scan_check(std::string const&, unsigned long) +0 52 +cfn=(1996) +calls=2 0 +0 19582 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 867 +0 6 +cfn=(2068) MR::Image::ParsedNameList::scan(MR::Image::NameParser&) +calls=2 0 +0 9734 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1011 +0 32 +cfn=(2102) void std::__introsort_loop<__gnu_cxx::__normal_iterator*, std::vector, std::allocator > > >, long>(__gnu_cxx::__normal_iterator*, std::vector, std::allocator > > >, __gnu_cxx::__normal_iterator*, std::vector, std::allocator > > >, long) +calls=2 0 +0 42 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1762 +0 6 +cfn=(2108) +calls=2 0 +0 1754 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1730 +0 6 +cfn=(2120) MR::Image::ParsedNameList::count() const +calls=2 0 +0 58 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 876 +0 16 +cfn=(2126) MR::Image::NameParser::~NameParser() +calls=2 0 +0 1979 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 794 +0 18 + +fn=(2022) +0 36 +cfn=(2028) +calls=2 0 +0 6929 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1523 +0 24 + +fn=(2380) void std::vector >::_M_range_insert<__gnu_cxx::__normal_iterator > > >(__gnu_cxx::__normal_iterator > >, __gnu_cxx::__normal_iterator > >, __gnu_cxx::__normal_iterator > >, std::forward_iterator_tag) +0 2154 +cob=(4) +cfi=(113) /build/buildd/eglibc-2.11.1/string/memmove.c +cfn=(1794) memmove +calls=54 47 +0 1296 +0 170 +cob=(7) +cfi=(53) +cfn=(880) +calls=10 0 +0 2398 +0 100 +cob=(4) +cfi=(113) +cfn=(1794) +calls=10 47 +0 835 +0 70 +cob=(4) +cfi=(113) +cfn=(1794) +calls=10 47 +0 620 +0 100 +cob=(4) +cfi=(113) +cfn=(1794) +calls=10 47 +0 240 +0 38 +cob=(7) +cfi=(53) +cfn=(1142) +calls=8 0 +0 725 +0 714 +cob=(4) +cfi=(113) +cfn=(1794) +calls=54 47 +0 3348 +0 324 +cob=(4) +cfi=(113) +cfn=(1794) +calls=54 47 +0 1296 +0 418 + +fn=(2386) std::vector >::~vector() +0 271 +cob=(7) +cfi=(53) +cfn=(1142) +calls=67 0 +0 5460 +0 1 + +fn=(2570) MR::Image::Header::sanitise() +0 18 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 298 +0 2 +cfn=(2170) +calls=1 0 +0 7 +0 2 +cob=(7) +cfi=(53) +cfn=(1380) +calls=1 0 +0 100 +0 8 +cfn=(2576) void MR::DataSet::Stride::sanitise(MR::Image::Axes&) +calls=1 0 +0 265 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1052 +0 3 +cfn=(2582) std::vector > MR::DataSet::Stride::order(MR::Image::Axes const&) +calls=1 0 +0 352 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1144 +0 62 +cob=(7) +cfi=(53) +cfn=(1142) +calls=1 0 +0 81 +0 16 +cob=(9) +cfi=(58) +cfn=(2592) gsl_permutation_alloc +calls=1 0 +0 212 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 955 +0 3 +cob=(9) +cfi=(58) +cfn=(2598) gsl_permutation_data +calls=1 0 +0 2 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 931 +0 36 +cob=(9) +cfi=(58) +cfn=(2598) +calls=1 0 +0 2 +0 38 +cob=(9) +cfi=(58) +cfn=(2598) +calls=1 0 +0 2 +0 38 +cob=(9) +cfi=(58) +cfn=(2598) +calls=1 0 +0 2 +0 3 +cob=(9) +cfi=(58) +cfn=(2598) +calls=1 0 +0 2 +0 7 +cob=(9) +cfi=(58) +cfn=(2598) +calls=1 0 +0 2 +0 3 +cob=(9) +cfi=(58) +cfn=(2598) +calls=1 0 +0 2 +0 8 +cob=(9) +cfi=(58) +cfn=(2598) +calls=1 0 +0 2 +0 3 +cob=(9) +cfi=(58) +cfn=(2598) +calls=1 0 +0 2 +0 9 +cob=(9) +cfi=(58) +cfn=(2598) +calls=1 0 +0 2 +0 21 +cob=(9) +cfi=(58) +cfn=(2604) gsl_permutation_free +calls=1 0 +0 165 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 931 +0 13 +cob=(9) +cfi=(58) +cfn=(2598) +calls=1 0 +0 2 +0 4 +cob=(9) +cfi=(58) +cfn=(2598) +calls=1 0 +0 2 +0 177 + +fn=(2576) +0 265 + +fn=(2582) +0 22 +cob=(7) +cfi=(53) +cfn=(880) +calls=1 0 +0 110 +0 58 +cfn=(2584) void std::__introsort_loop<__gnu_cxx::__normal_iterator > >, long, MR::DataSet::Stride::(anonymous namespace)::Compare >(__gnu_cxx::__normal_iterator > >, __gnu_cxx::__normal_iterator > >, long, MR::DataSet::Stride::(anonymous namespace)::Compare) +calls=1 0 +0 22 +0 6 +cfn=(2586) void std::__insertion_sort<__gnu_cxx::__normal_iterator > >, MR::DataSet::Stride::(anonymous namespace)::Compare >(__gnu_cxx::__normal_iterator > >, __gnu_cxx::__normal_iterator > >, MR::DataSet::Stride::(anonymous namespace)::Compare) +calls=1 0 +0 127 +0 7 + +fn=(918) global constructors keyed to series.cpp +0 3 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 24 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 + +fn=(928) global constructors keyed to axis.cpp +0 5 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 24 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 5 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 5663 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1498 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 + +fn=(972) global constructors keyed to mmap.cpp +0 3 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 24 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 + +fn=(992) global constructors keyed to mapper.cpp +0 3 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 24 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 + +fn=(1028) global constructors keyed to reslice.cpp +0 3 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 24 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 10 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 8 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 + +fn=(1030) global constructors keyed to LU.cpp +0 3 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 24 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 + +fn=(1290) MR::File::Config::init() +0 15 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 315 +0 6 +cob=(4) +cfi=(94) +cfn=(1296) +calls=1 37 +0 14 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1738 +0 3 +cob=(4) +cfi=(95) +cfn=(1302) +calls=1 34 +0 3 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1834 +0 16 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 314 +0 2 +cob=(4) +cfi=(96) /build/buildd/eglibc-2.11.1/stdlib/getenv.c +cfn=(1318) getenv +calls=1 36 +0 138 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1708 +0 7 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 308 +0 17 +cob=(4) +cfi=(94) +cfn=(1296) +calls=1 37 +0 14 +0 3 +cob=(4) +cfi=(95) +cfn=(1302) +calls=1 34 +0 3 +0 23 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 285 +0 7 +cob=(7) +cfi=(53) +cfn=(1326) +calls=1 0 +0 12 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1538 +0 7 +cob=(7) +cfi=(53) +cfn=(1254) +calls=1 0 +0 20 +0 4 +cob=(7) +cfi=(53) +cfn=(1332) +calls=1 0 +0 2283 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1458 +0 7 +cob=(12) +cfi=(84) +cfn=(1350) +calls=1 0 +0 3373 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1238 +0 14 +cob=(7) +cfi=(53) +cfn=(1308) +calls=1 0 +0 82 +0 7 +cob=(7) +cfi=(53) +cfn=(1308) +calls=1 0 +0 82 +0 15 +cob=(7) +cfi=(53) +cfn=(1308) +calls=1 0 +0 952 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1682 +0 12 +cob=(7) +cfi=(53) +cfn=(1308) +calls=1 0 +0 82 +0 7 +cob=(7) +cfi=(53) +cfn=(1308) +calls=1 0 +0 82 +0 15 +cob=(7) +cfi=(53) +cfn=(1308) +calls=1 0 +0 82 +0 5 + +fn=(2040) +0 20 +cob=(7) +cfi=(53) +cfn=(880) +calls=2 0 +0 278 + +fn=(2114) +0 44 + +fn=(2126) +0 12 +cob=(7) +cfi=(53) +cfn=(1380) +calls=2 0 +0 14 +0 4 +cob=(7) +cfi=(53) +cfn=(1380) +calls=2 0 +0 30 +0 4 +cob=(7) +cfi=(53) +cfn=(1380) +calls=2 0 +0 200 +0 26 +cob=(7) +cfi=(53) +cfn=(1380) +calls=2 0 +0 200 +0 20 +cob=(7) +cfi=(53) +cfn=(1142) +calls=2 0 +0 162 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1307 + +fn=(2168) MR::File::KeyValue::open(std::string const&, char const*) +0 40 +cob=(7) +cfi=(53) +cfn=(1650) +calls=2 0 +0 76 +0 12 +cob=(12) +cfi=(84) +cfn=(1962) +calls=2 0 +0 867 +0 6 +cob=(7) +cfi=(53) +cfn=(1254) +calls=2 0 +0 40 +0 8 +cob=(7) +cfi=(53) +cfn=(1686) +calls=2 0 +0 762 +0 4 +cfn=(2170) +calls=2 0 +0 14 +0 32 +cob=(7) +cfi=(53) +cfn=(1550) +calls=2 0 +0 2509 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 2282 +0 14 +cob=(7) +cfi=(53) +cfn=(1630) +calls=2 0 +0 16 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 2154 +0 40 +cob=(7) +cfi=(53) +cfn=(1638) +calls=2 0 +0 1273 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 2531 +0 12 +cob=(4) +cfi=(69) +cfn=(642) +calls=2 26 +0 38 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1690 +0 10 +cob=(7) +cfi=(53) +cfn=(2196) +calls=2 0 +0 149 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1538 +0 24 +cob=(7) +cfi=(53) +cfn=(1308) +calls=2 0 +0 164 +0 8 +cob=(7) +cfi=(53) +cfn=(1260) +calls=2 0 +0 56 +0 26 +cob=(7) +cfi=(53) +cfn=(1326) +calls=2 0 +0 24 +0 18 +cob=(7) +cfi=(53) +cfn=(1308) +calls=2 0 +0 164 +0 14 +cob=(7) +cfi=(53) +cfn=(1308) +calls=2 0 +0 385 +0 26 + +fn=(2306) MR::parse_floats(std::string const&) +0 6436 +cob=(7) +cfi=(53) +cfn=(1702) +calls=195 0 +0 8265 +0 260 +cob=(7) +cfi=(53) +cfn=(1702) +calls=65 0 +0 3040 +0 2860 +cob=(7) +cfi=(53) +cfn=(1708) +calls=260 0 +0 52465 +0 780 +cob=(7) +cfi=(53) +cfn=(2138) +calls=260 0 +0 11450 +0 2852 +cob=(7) +cfi=(53) +cfn=(1708) +calls=259 0 +0 52333 +0 777 +cob=(7) +cfi=(53) +cfn=(722) +calls=259 0 +0 25123 +0 6734 +cob=(7) +cfi=(53) +cfn=(728) +calls=259 0 +0 183372 +0 4144 +cob=(7) +cfi=(53) +cfn=(492) +calls=259 0 +0 10101 +0 2331 +cob=(7) +cfi=(53) +cfn=(1752) +calls=259 0 +0 50060 +0 1554 +cob=(7) +cfi=(53) +cfn=(1758) +calls=259 0 +0 5439 +0 777 +cob=(7) +cfi=(53) +cfn=(728) +calls=259 0 +0 183372 +0 777 +cob=(7) +cfi=(53) +cfn=(2312) +calls=259 0 +0 421149 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1648 +0 4921 +cob=(7) +cfi=(53) +cfn=(746) +calls=259 0 +0 3108 +0 2590 +cob=(7) +cfi=(53) +cfn=(1818) +calls=259 0 +0 15022 +0 3108 +cob=(7) +cfi=(53) +cfn=(1308) +calls=259 0 +0 21238 +0 1429 +cfn=(2336) std::vector >::_M_insert_aux(__gnu_cxx::__normal_iterator > >, float const&) +calls=195 0 +0 60192 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1243 +0 1755 +cob=(7) +cfi=(53) +cfn=(1308) +calls=260 0 +0 21320 +0 1814 +cob=(7) +cfi=(53) +cfn=(1308) +calls=259 0 +0 21238 +0 3371 + +fn=(2454) MR::DataType::parse(std::string const&) +0 36 +cob=(7) +cfi=(53) +cfn=(2220) +calls=2 0 +0 647 +0 12 +cob=(7) +cfi=(53) +cfn=(1326) +calls=2 0 +0 24 +0 24 +cob=(4) +cfi=(124) +cfn=(2234) +calls=2 47 +0 24 +0 64 +cob=(4) +cfi=(124) +cfn=(2234) +calls=16 47 +0 192 +0 96 +cob=(7) +cfi=(53) +cfn=(2138) +calls=2 0 +0 107 +0 34 +cob=(7) +cfi=(53) +cfn=(2138) +calls=2 0 +0 109 +0 9 +cob=(7) +cfi=(53) +cfn=(2138) +calls=1 0 +0 55 +0 5 +cfn=(3136) bool std::operator==, std::allocator >(std::basic_string, std::allocator > const&, char const*) +calls=1 0 +0 64 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1010 +0 5 +cfn=(3136) +calls=1 0 +0 72 +0 16 +cob=(7) +cfi=(53) +cfn=(1308) +calls=2 0 +0 164 +0 10 + +fn=(2638) MR::Image::Handler::Base::prepare() +0 23 +cfn=(2640) +calls=1 0 +0 35302 +0 18 +cob=(7) +cfi=(53) +cfn=(880) +calls=1 0 +0 110 +0 63 +cfn=(2742) std::vector >::operator=(std::vector > const&) +calls=1 0 +0 226 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 794 +0 4 +cob=(7) +cfi=(53) +cfn=(1142) +calls=1 0 +0 81 +0 87 +cob=(7) +cfi=(53) +cfn=(1142) +calls=1 0 +0 81 +0 42 +cob=(7) +cfi=(53) +cfn=(722) +calls=1 0 +0 97 +0 23 +cob=(7) +cfi=(53) +cfn=(728) +calls=1 0 +0 708 +0 16 +cob=(7) +cfi=(53) +cfn=(492) +calls=1 0 +0 39 +0 11 +cob=(7) +cfi=(53) +cfn=(728) +calls=1 0 +0 708 +0 4 +cob=(7) +cfi=(53) +cfn=(1394) +calls=1 0 +0 761 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 2456 +0 11 +cob=(7) +cfi=(53) +cfn=(2684) +calls=1 0 +0 290 +0 9 +cob=(7) +cfi=(53) +cfn=(2684) +calls=3 0 +0 850 +0 16 +cob=(7) +cfi=(53) +cfn=(1394) +calls=4 0 +0 492 +0 32 +cob=(7) +cfi=(53) +cfn=(1394) +calls=1 0 +0 123 +0 25 +cob=(7) +cfi=(53) +cfn=(746) +calls=1 0 +0 12 +0 9 +cob=(7) +cfi=(53) +cfn=(1818) +calls=1 0 +0 58 +0 2 +cob=(7) +cfi=(53) +cfn=(722) +calls=1 0 +0 97 +0 19 +cob=(7) +cfi=(53) +cfn=(728) +calls=1 0 +0 708 +0 15 +cob=(7) +cfi=(53) +cfn=(492) +calls=1 0 +0 39 +0 9 +cob=(7) +cfi=(53) +cfn=(728) +calls=1 0 +0 708 +0 3 +cob=(7) +cfi=(53) +cfn=(1436) +calls=1 0 +0 805 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1648 +0 5 +cob=(7) +cfi=(53) +cfn=(2760) +calls=1 0 +0 2336 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 2108 +0 16 +cob=(7) +cfi=(53) +cfn=(746) +calls=1 0 +0 12 +0 9 +cob=(7) +cfi=(53) +cfn=(1818) +calls=1 0 +0 58 +0 10 +cob=(7) +cfi=(53) +cfn=(1338) +calls=1 0 +0 414 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1450 +0 4 +cob=(7) +cfi=(53) +cfn=(1686) +calls=1 0 +0 64 +0 3 +cob=(7) +cfi=(53) +cfn=(1360) +calls=1 0 +0 86 +0 4 +cob=(7) +cfi=(53) +cfn=(1254) +calls=1 0 +0 20 +0 4 +cob=(7) +cfi=(53) +cfn=(1686) +calls=1 0 +0 478 +0 5 +cob=(12) +cfi=(84) +cfn=(1350) +calls=1 0 +0 557 +0 4 +cob=(7) +cfi=(53) +cfn=(1254) +calls=1 0 +0 20 +0 4 +cob=(7) +cfi=(53) +cfn=(1686) +calls=1 0 +0 374 +0 5 +cob=(12) +cfi=(84) +cfn=(1350) +calls=1 0 +0 337 +0 2 +cfn=(1980) +calls=1 0 +0 7 +0 34 +cob=(7) +cfi=(53) +cfn=(1308) +calls=1 0 +0 82 +0 7 +cob=(7) +cfi=(53) +cfn=(880) +calls=1 0 +0 110 +0 56 +cfn=(2744) void std::__introsort_loop<__gnu_cxx::__normal_iterator > >, long, MR::DataSet::Stride::(anonymous namespace)::Compare > >(__gnu_cxx::__normal_iterator > >, __gnu_cxx::__normal_iterator > >, long, MR::DataSet::Stride::(anonymous namespace)::Compare >) +calls=1 0 +0 22 +0 6 +cob=(12) +cfi=(84) +cfn=(2712) char* std::string::_S_construct(char*, char*, std::allocator const&, std::forward_iterator_tag) +calls=1 0 +0 184 +0 7 +cob=(7) +cfi=(53) +cfn=(1260) +calls=1 0 +0 28 +0 12 +cfn=(2746) void std::__insertion_sort<__gnu_cxx::__normal_iterator > >, MR::DataSet::Stride::(anonymous namespace)::Compare > >(__gnu_cxx::__normal_iterator > >, __gnu_cxx::__normal_iterator > >, MR::DataSet::Stride::(anonymous namespace)::Compare >) +calls=1 0 +0 120 +0 12 +cob=(7) +cfi=(53) +cfn=(1308) +calls=1 0 +0 82 +0 15 +cob=(7) +cfi=(53) +cfn=(1308) +calls=1 0 +0 82 +0 7 +cob=(7) +cfi=(53) +cfn=(1308) +calls=1 0 +0 124 +0 15 +cob=(7) +cfi=(53) +cfn=(1308) +calls=1 0 +0 82 +0 7 +cob=(7) +cfi=(53) +cfn=(1308) +calls=1 0 +0 124 +0 15 +cob=(7) +cfi=(53) +cfn=(1308) +calls=1 0 +0 82 +0 11 +cob=(7) +cfi=(53) +cfn=(1308) +calls=1 0 +0 113 +0 11 +cob=(7) +cfi=(53) +cfn=(1308) +calls=1 0 +0 124 +0 5 + +fn=(2746) +0 120 + +fn=(2840) +0 17 +cob=(12) +cfi=(84) +cfn=(1962) +calls=1 0 +0 381 +0 4 +cob=(7) +cfi=(53) +cfn=(1254) +calls=1 0 +0 20 +0 4 +cob=(7) +cfi=(53) +cfn=(1686) +calls=1 0 +0 553 +0 2 +cfn=(2170) +calls=1 0 +0 7 +0 12 +cob=(4) +cfi=(103) +cfn=(2846) munmap +calls=1 82 +0 5 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1741 +0 4 +cob=(4) +cfi=(106) +cfn=(2852) close +calls=1 82 +0 7 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1673 +0 18 +cob=(7) +cfi=(53) +cfn=(1308) +calls=1 0 +0 82 +0 11 +cob=(7) +cfi=(53) +cfn=(1308) +calls=1 0 +0 129 +0 13 + +fn=(3676) MR::App::~App() +0 31 + +fn=(3784) std::tr1::unordered_map, std::equal_to, std::allocator > >::~unordered_map() +0 109 +cob=(7) +cfi=(53) +cfn=(1142) +calls=1 0 +0 81 + +fn=(468) +0 6 + +fn=(920) global constructors keyed to tree.cpp +0 3 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 24 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 + +fn=(974) global constructors keyed to analyse.cpp +0 3 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 24 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 + +fn=(994) global constructors keyed to default.cpp +0 3 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 24 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 + +fn=(1032) global constructors keyed to study.cpp +0 3 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 24 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 + +fn=(2120) +0 58 + +fn=(2142) MR::Image::Format::MRtrix::read(MR::Image::Header&) const +0 18 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 225 +0 16 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 219 +0 16 +cob=(7) +cfi=(53) +cfn=(1708) +calls=1 0 +0 259 +0 7 +cob=(7) +cfi=(53) +cfn=(1380) +calls=1 0 +0 100 +0 5 +cob=(7) +cfi=(53) +cfn=(1380) +calls=1 0 +0 100 +0 9 +cob=(7) +cfi=(53) +cfn=(1708) +calls=1 0 +0 201 +0 8 +cob=(7) +cfi=(53) +cfn=(1380) +calls=1 0 +0 100 +0 32 +cob=(7) +cfi=(53) +cfn=(722) +calls=1 0 +0 97 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1491 +0 23 +cob=(7) +cfi=(53) +cfn=(728) +calls=1 0 +0 708 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 2322 +0 8 +cob=(7) +cfi=(53) +cfn=(1526) +calls=1 0 +0 265 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1938 +0 5 +cob=(7) +cfi=(53) +cfn=(728) +calls=1 0 +0 708 +0 4 +cfn=(2168) +calls=1 0 +0 13682 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 848 +0 53 +cfn=(2202) +calls=1 0 +0 8334 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 786 +0 348 +cfn=(2202) +calls=87 0 +0 296451 +0 785 +cob=(7) +cfi=(53) +cfn=(2220) +calls=87 0 +0 24670 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1516 +0 522 +cob=(7) +cfi=(53) +cfn=(1326) +calls=87 0 +0 1044 +0 870 +cob=(4) +cfi=(124) +cfn=(2234) +calls=87 47 +0 1044 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1724 +0 2220 +cob=(4) +cfi=(124) +cfn=(2234) +calls=740 47 +0 8880 +0 3830 +cob=(7) +cfi=(53) +cfn=(2138) +calls=87 0 +0 3908 +0 182 +cfn=(2240) +calls=1 0 +0 31910 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 783 +0 3 +cfn=(2300) std::vector >::operator=(std::vector > const&) +calls=1 0 +0 222 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 810 +0 5 +cob=(7) +cfi=(53) +cfn=(1142) +calls=2 0 +0 162 +0 870 +cob=(7) +cfi=(53) +cfn=(1308) +calls=87 0 +0 7134 +0 603 +cob=(7) +cfi=(53) +cfn=(2138) +calls=86 0 +0 3794 +0 178 +cfn=(2306) +calls=1 0 +0 19952 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 776 +0 5 +cfn=(2342) std::vector >::operator=(std::vector > const&) +calls=1 0 +0 222 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 876 +0 513 +cob=(7) +cfi=(53) +cfn=(2138) +calls=85 0 +0 4265 +0 175 +cob=(7) +cfi=(53) +cfn=(1260) +calls=1 0 +0 28 +0 505 +cob=(7) +cfi=(53) +cfn=(2138) +calls=84 0 +0 3776 +0 173 +cob=(7) +cfi=(53) +cfn=(1260) +calls=1 0 +0 28 +0 499 +cob=(7) +cfi=(53) +cfn=(2138) +calls=83 0 +0 4161 +0 171 +cob=(7) +cfi=(53) +cfn=(1260) +calls=1 0 +0 28 +0 493 +cob=(7) +cfi=(53) +cfn=(2138) +calls=82 0 +0 4101 +0 177 +cfn=(2426) +calls=1 0 +0 7286 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 775 +0 589 +cob=(7) +cfi=(53) +cfn=(2138) +calls=82 0 +0 3608 +0 656 +cob=(7) +cfi=(53) +cfn=(2138) +calls=82 0 +0 4112 +0 174 +cfn=(2348) +calls=1 0 +0 1597 +0 4 +cob=(12) +cfi=(84) +cfn=(2366) std::vector >::operator=(std::vector > const&) +calls=1 0 +0 288 +0 4 +cob=(12) +cfi=(84) +cfn=(2374) std::vector >::~vector() +calls=2 0 +0 290 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 846 +0 488 +cob=(7) +cfi=(53) +cfn=(2138) +calls=81 0 +0 3577 +0 172 +cfn=(2348) +calls=1 0 +0 3365 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 749 +0 5 +cob=(12) +cfi=(84) +cfn=(2366) +calls=1 0 +0 346 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 894 +0 2 +cob=(4) +cfi=(122) /build/buildd/eglibc-2.11.1/string/../sysdeps/x86_64/multiarch/../memcmp.S +cfn=(2150) __GI_memcmp +calls=1 25 +0 31 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1698 +0 10 +cfn=(2454) +calls=1 0 +0 777 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 785 +0 483 +cob=(7) +cfi=(53) +cfn=(2138) +calls=80 0 +0 4049 +0 622 +cob=(7) +cfi=(53) +cfn=(2138) +calls=77 0 +0 4368 +0 1721 +cfn=(2306) +calls=3 0 +0 48001 +0 24 +cfn=(2380) +calls=3 0 +0 1156 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1573 +0 128 +cfn=(2386) +calls=64 0 +0 5440 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 758 +0 72 +cfn=(2460) +calls=1 0 +0 13825 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 870 +0 55 +cob=(7) +cfi=(53) +cfn=(1260) +calls=1 0 +0 118 +0 15 +cob=(7) +cfi=(53) +cfn=(1260) +calls=3 0 +0 247 +0 70 +cob=(7) +cfi=(53) +cfn=(1260) +calls=1 0 +0 118 +0 15 +cob=(7) +cfi=(53) +cfn=(1260) +calls=3 0 +0 247 +0 270 +cob=(7) +cfi=(53) +cfn=(1260) +calls=16 0 +0 448 +0 20 +cfn=(2472) T.1670 +calls=1 0 +0 1188 +0 150 +cob=(12) +cfi=(84) +cfn=(2484) MR::Math::Matrix::operator=(MR::Math::Matrix const&) +calls=1 0 +0 1378 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 886 +0 4 +cob=(9) +cfi=(58) +cfn=(2494) gsl_block_float_free +calls=1 0 +0 1807 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 947 +0 14 +cob=(4) +cfi=(122) +cfn=(2150) +calls=1 25 +0 22 +0 9 +cob=(7) +cfi=(53) +cfn=(722) +calls=1 0 +0 97 +0 22 +cob=(7) +cfi=(53) +cfn=(728) +calls=1 0 +0 708 +0 16 +cob=(7) +cfi=(53) +cfn=(492) +calls=1 0 +0 39 +0 9 +cob=(7) +cfi=(53) +cfn=(1752) +calls=1 0 +0 197 +0 6 +cob=(7) +cfi=(53) +cfn=(1758) +calls=1 0 +0 21 +0 3 +cob=(7) +cfi=(53) +cfn=(728) +calls=1 0 +0 708 +0 6 +cob=(7) +cfi=(53) +cfn=(2504) +calls=1 0 +0 1570 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 2395 +0 6 +cob=(7) +cfi=(53) +cfn=(2516) +calls=1 0 +0 2472 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1656 +0 3 +cob=(7) +cfi=(53) +cfn=(2138) +calls=1 0 +0 52 +0 7 +cob=(7) +cfi=(53) +cfn=(1260) +calls=1 0 +0 123 +0 10 +cfn=(1990) +calls=1 0 +0 4284 +0 10 +cob=(7) +cfi=(53) +cfn=(1380) +calls=1 0 +0 15 +0 2 +cob=(7) +cfi=(53) +cfn=(1380) +calls=1 0 +0 15 +0 20 +cob=(7) +cfi=(53) +cfn=(1254) +calls=1 0 +0 20 +0 3 +cob=(7) +cfi=(53) +cfn=(1254) +calls=1 0 +0 20 +0 9 +cfn=(2530) std::vector >::_M_insert_aux(__gnu_cxx::__normal_iterator > >, MR::File::Entry const&) +calls=1 0 +0 314 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1440 +0 6 +cfn=(2536) MR::Image::ParsedNameList::~ParsedNameList() +calls=1 0 +0 296 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 864 +0 2 +cob=(7) +cfi=(53) +cfn=(1380) +calls=1 0 +0 15 +0 2 +cob=(7) +cfi=(53) +cfn=(2542) +calls=1 0 +0 1195 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 2140 +0 4 +cob=(7) +cfi=(53) +cfn=(1142) +calls=1 0 +0 81 +0 2 +cob=(12) +cfi=(84) +cfn=(2374) +calls=1 0 +0 145 +0 2 +cob=(12) +cfi=(84) +cfn=(2374) +calls=1 0 +0 145 +0 2 +cfn=(2386) +calls=1 0 +0 4 +0 2 +cfn=(2386) +calls=1 0 +0 85 +0 2 +cfn=(2386) +calls=1 0 +0 118 +0 2 +cfn=(2386) +calls=1 0 +0 85 +0 4 +cob=(7) +cfi=(53) +cfn=(1142) +calls=1 0 +0 81 +0 2 +cob=(7) +cfi=(53) +cfn=(1380) +calls=1 0 +0 15 +0 2 +cob=(7) +cfi=(53) +cfn=(1380) +calls=1 0 +0 100 +0 2 +cob=(7) +cfi=(53) +cfn=(1380) +calls=1 0 +0 100 +0 2 +cob=(12) +cfi=(84) +cfn=(2552) MR::File::KeyValue::~KeyValue() +calls=1 0 +0 971 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 790 +0 8 +cob=(7) +cfi=(53) +cfn=(1308) +calls=1 0 +0 82 +0 433 +cob=(7) +cfi=(53) +cfn=(1254) +calls=16 0 +0 3425 +0 64 +cob=(7) +cfi=(53) +cfn=(1254) +calls=16 0 +0 240 +0 64 +cob=(12) +cfi=(84) +cfn=(2392) std::_Rb_tree, std::_Select1st >, std::less, std::allocator > >::_M_insert_unique_(std::_Rb_tree_const_iterator >, std::pair const&) +calls=16 0 +0 10614 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 2422 +0 80 +cob=(12) +cfi=(84) +cfn=(2408) std::pair::~pair() +calls=16 0 +0 496 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 766 +0 48 +cob=(7) +cfi=(53) +cfn=(1380) +calls=16 0 +0 112 +0 321 +cfn=(2306) +calls=61 0 +0 1132495 +0 488 +cfn=(2380) +calls=61 0 +0 13690 +0 69 +cfn=(2472) +calls=1 0 +0 619 +0 2210 +cob=(12) +cfi=(84) +cfn=(2484) +calls=1 0 +0 2968 +0 4 +cob=(9) +cfi=(58) +cfn=(2494) +calls=1 0 +0 196 +0 1 + +fn=(2336) +0 5850 +cob=(7) +cfi=(53) +cfn=(880) +calls=195 0 +0 21582 +0 2925 +cob=(4) +cfi=(113) +cfn=(1794) +calls=195 47 +0 9490 +0 1560 +cob=(4) +cfi=(113) +cfn=(1794) +calls=195 47 +0 4680 +0 715 +cob=(7) +cfi=(53) +cfn=(1142) +calls=130 0 +0 10530 +0 2860 + +fn=(2470) +0 139 + +fn=(2558) MR::Image::Header::Header(MR::Image::Header const&) +0 19 +cob=(12) +cfi=(84) +cfn=(2564) std::_Rb_tree, std::_Select1st >, std::less, std::allocator > >::_M_copy(std::_Rb_tree_node > const*, std::_Rb_tree_node >*) +calls=1 0 +0 4094 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 2102 +0 269 +cob=(7) +cfi=(53) +cfn=(880) +calls=1 0 +0 458 +0 62 +cob=(7) +cfi=(53) +cfn=(1254) +calls=4 0 +0 60 +0 12 +cob=(7) +cfi=(53) +cfn=(1254) +calls=4 0 +0 60 +0 2777 +cob=(9) +cfi=(58) +cfn=(2478) gsl_block_float_alloc +calls=1 0 +0 212 +0 8 +cob=(9) +cfi=(58) +cfn=(2478) +calls=1 0 +0 464 +0 3 + +fn=(2586) +0 127 + +fn=(3738) +0 10 +cob=(4) +cfi=(153) +cfn=(3726) +calls=1 31 +0 9000 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1810 +0 13 + +fn=(3768) MR::Image::Format::DICOM::~DICOM() +0 4 + +fn=(3772) MR::Image::Format::Analyse::~Analyse() +0 4 + +fn=(462) +0 6 + +fn=(474) +0 11 +cfn=(478) +calls=1 0 +0 106078 +0 78 +cfn=(1032) +calls=1 0 +0 94 +cfn=(1030) +calls=1 0 +0 94 +cfn=(1028) +calls=1 0 +0 236 +cfn=(1026) +calls=1 0 +0 94 +cfn=(1024) +calls=1 0 +0 94 +cfn=(1022) +calls=1 0 +0 94 +cfn=(1020) +calls=1 0 +0 94 +cfn=(1018) global constructors keyed to xds.cpp +calls=1 0 +0 94 +cfn=(1016) global constructors keyed to dicom.cpp +calls=1 0 +0 94 +cfn=(1014) global constructors keyed to key_value.cpp +calls=1 0 +0 94 +cfn=(1006) global constructors keyed to exec.cpp +calls=1 0 +0 2048 +cfn=(1004) +calls=1 0 +0 94 +cfn=(1002) +calls=1 0 +0 94 +cfn=(1000) +calls=1 0 +0 94 +cfn=(998) global constructors keyed to nifti1_gz.cpp +calls=1 0 +0 94 +cfn=(996) global constructors keyed to args.cpp +calls=1 0 +0 172 +cfn=(994) +calls=1 0 +0 94 +cfn=(992) +calls=1 0 +0 94 +cfn=(990) +calls=1 0 +0 291 +cfn=(988) +calls=1 0 +0 94 +cfn=(976) global constructors keyed to gz.cpp +calls=1 0 +0 1499 +cfn=(974) +calls=1 0 +0 94 +cfn=(972) +calls=1 0 +0 94 +cfn=(970) global constructors keyed to config.cpp +calls=1 0 +0 167 +cfn=(928) +calls=1 0 +0 7332 +cfn=(926) +calls=1 0 +0 94 +cfn=(856) global constructors keyed to pipe.cpp +calls=1 0 +0 94 +cfn=(924) global constructors keyed to list.cpp +calls=1 0 +0 663 +cfn=(922) global constructors keyed to nifti1.cpp +calls=1 0 +0 94 +cfn=(920) +calls=1 0 +0 94 +cfn=(918) +calls=1 0 +0 94 +cfn=(916) +calls=1 0 +0 94 +cfn=(914) +calls=1 0 +0 94 +cfn=(912) +calls=1 0 +0 94 +cfn=(862) +calls=1 0 +0 68010 +cfn=(860) +calls=1 0 +0 94 +cfn=(860) +calls=1 0 +0 94 +cfn=(858) +calls=1 0 +0 94 +cfn=(856) +calls=1 0 +0 94 +0 124 + +fn=(922) +0 3 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 24 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 + +fn=(976) +0 3 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 24 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 1467 + +fn=(996) +0 3 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 24 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 16 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 + +fn=(1006) +0 5 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 24 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(4) +cfi=(83) +cfn=(1012) pthread_mutex_init +calls=1 178 +0 5 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1874 +0 7 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 + +fn=(1014) +0 3 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 24 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 + +fn=(1956) MR::Image::Header::open(std::string const&, bool) +0 55 +cob=(12) +cfi=(84) +cfn=(1962) +calls=1 0 +0 5079 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1270 +0 4 +cob=(7) +cfi=(53) +cfn=(1254) +calls=1 0 +0 20 +0 4 +cob=(7) +cfi=(53) +cfn=(1686) +calls=1 0 +0 600 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1508 +0 2 +cfn=(1980) +calls=1 0 +0 7 +0 2 +cob=(7) +cfi=(53) +cfn=(1380) +calls=1 0 +0 147 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1414 +0 2 +cob=(7) +cfi=(53) +cfn=(1380) +calls=1 0 +0 100 +0 10 +cfn=(1990) +calls=1 0 +0 36041 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1043 +0 6 +cob=(7) +cfi=(53) +cfn=(1254) +calls=1 0 +0 20 +0 5 +cob=(7) +cfi=(53) +cfn=(1260) +calls=1 0 +0 28 +0 2 +cob=(7) +cfi=(53) +cfn=(1380) +calls=1 0 +0 15 +0 13 +cfn=(2558) +calls=1 0 +0 10600 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 811 +0 13 +cfn=(2570) +calls=1 0 +0 6991 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 821 +0 5 +cob=(7) +cfi=(53) +cfn=(1260) +calls=1 0 +0 36 +0 2 +cob=(12) +cfi=(84) +cfn=(2610) MR::Image::Header::~Header() +calls=1 0 +0 3735 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 774 +0 5 +cfn=(2536) +calls=1 0 +0 381 +0 26 +cfn=(2142) +calls=1 0 +0 1787686 +cfn=(2140) +calls=1 0 +0 37 +cfn=(2132) MR::Image::Format::Pipe::read(MR::Image::Header&) const +calls=1 0 +0 1573 +0 9 +cob=(7) +cfi=(53) +cfn=(880) +calls=1 0 +0 110 +0 20 + +fn=(2046) +0 32 +cob=(7) +cfi=(53) +cfn=(1254) +calls=2 0 +0 40 +0 40 +cob=(4) +cfi=(113) +cfn=(1794) +calls=2 47 +0 48 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1698 +0 16 + +fn=(2068) +0 68 +cfn=(2074) +calls=2 0 +0 4764 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 984 +0 4 +cob=(7) +cfi=(53) +cfn=(880) +calls=2 0 +0 220 +0 46 +cob=(4) +cfi=(113) +cfn=(1794) +calls=2 47 +0 48 +0 8 +cob=(7) +cfi=(53) +cfn=(1254) +calls=2 0 +0 40 +0 6 +cob=(7) +cfi=(53) +cfn=(880) +calls=2 0 +0 236 +0 14 +cfn=(2096) MR::RefPtr::~RefPtr() +calls=2 0 +0 20 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 955 +0 4 +cob=(7) +cfi=(53) +cfn=(1380) +calls=2 0 +0 30 +0 10 +cfn=(2090) std::vector, std::allocator > >::_M_insert_aux(__gnu_cxx::__normal_iterator*, std::vector, std::allocator > > >, MR::RefPtr const&) +calls=2 0 +0 576 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1699 +0 2 + +fn=(2090) +0 40 +cob=(7) +cfi=(53) +cfn=(880) +calls=2 0 +0 446 +0 90 + +fn=(2096) +0 20 + +fn=(2132) +0 12 +cob=(7) +cfi=(53) +cfn=(2138) +calls=1 0 +0 44 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1506 +0 11 + +fn=(2170) +0 49 + +fn=(2742) +0 38 +cob=(7) +cfi=(53) +cfn=(880) +calls=1 0 +0 110 +0 5 +cob=(4) +cfi=(113) +cfn=(1794) +calls=1 47 +0 66 +0 7 + +fn=(2744) +0 22 + +fn=(3748) std::vector >::~vector() +0 4 + +fn=(924) +0 3 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 24 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 9 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 9 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 9 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 9 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 9 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 9 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 9 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 10 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 + +fn=(970) +0 3 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 24 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 11 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 + +fn=(1016) +0 3 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 24 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 + +fn=(1236) MR::App::App(int, char**, char const**, MR::Argument const*, MR::Option const*, unsigned long const*, char const*, char const*) +0 46 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 308 +0 5 +cob=(7) +cfi=(53) +cfn=(1242) +calls=1 0 +0 1867 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1650 +0 5 +cob=(7) +cfi=(53) +cfn=(1260) +calls=1 0 +0 28 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1506 +0 33 +cfn=(1266) +calls=1 0 +0 20 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 830 +0 2 +cob=(4) +cfi=(90) /build/buildd/eglibc-2.11.1/time/../sysdeps/unix/sysv/linux/x86_64/time.S +cfn=(1272) time +calls=1 32 +0 8 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1642 +0 2 +cob=(4) +cfi=(92) /build/buildd/eglibc-2.11.1/stdlib/random.c +cfn=(1280) srand +calls=1 211 +0 10226 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1673 +0 1 +cfn=(1290) +calls=1 0 +0 19832 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 776 +0 10 +cob=(7) +cfi=(53) +cfn=(1254) +calls=1 0 +0 20 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1426 +0 17 + +fn=(2102) +0 42 + +fn=(2300) +0 38 +cob=(7) +cfi=(53) +cfn=(880) +calls=1 0 +0 110 +0 5 +cob=(4) +cfi=(113) +cfn=(1794) +calls=1 47 +0 62 +0 7 + +fn=(2472) +0 50 +cob=(9) +cfi=(58) +cfn=(2478) +calls=2 0 +0 802 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 947 +0 8 + +fn=(2530) +0 19 +cob=(7) +cfi=(53) +cfn=(880) +calls=1 0 +0 225 +0 9 +cob=(7) +cfi=(53) +cfn=(1254) +calls=1 0 +0 20 +0 41 + +fn=(2536) +0 38 +cob=(7) +cfi=(53) +cfn=(1380) +calls=2 0 +0 115 +0 10 +cob=(7) +cfi=(53) +cfn=(1142) +calls=2 0 +0 162 +0 6 +cob=(7) +cfi=(53) +cfn=(1142) +calls=2 0 +0 162 +0 22 +cob=(7) +cfi=(53) +cfn=(1142) +calls=2 0 +0 162 + +fn=(3770) MR::Image::Format::XDS::~XDS() +0 4 + +fn=(3774) MR::Image::Format::NIfTI_GZ::~NIfTI_GZ() +0 4 + +fn=(2664) +0 60 +cob=(4) +cfi=(113) +cfn=(1794) +calls=1 47 +0 24 +0 9 +cob=(4) +cfi=(113) +cfn=(1794) +calls=1 47 +0 24 +0 11 +cob=(7) +cfi=(53) +cfn=(880) +calls=1 0 +0 180 +0 7 + +fn=(2670) +0 16 +cob=(12) +cfi=(84) +cfn=(1962) +calls=1 0 +0 389 +0 3 +cob=(7) +cfi=(53) +cfn=(1254) +calls=1 0 +0 20 +0 4 +cob=(7) +cfi=(53) +cfn=(1686) +calls=1 0 +0 326 +0 2 +cfn=(2170) +calls=1 0 +0 7 +0 13 +cob=(4) +cfi=(94) +cfn=(1296) +calls=1 37 +0 10 +0 20 +cob=(4) +cfi=(106) +cfn=(1592) open +calls=1 82 +0 7 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1697 +0 14 +cob=(4) +cfi=(103) +cfn=(1422) mmap +calls=1 82 +0 6 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1741 +0 14 +cob=(7) +cfi=(53) +cfn=(722) +calls=1 0 +0 97 +0 21 +cob=(7) +cfi=(53) +cfn=(728) +calls=1 0 +0 708 +0 16 +cob=(7) +cfi=(53) +cfn=(492) +calls=1 0 +0 39 +0 10 +cob=(7) +cfi=(53) +cfn=(728) +calls=1 0 +0 708 +0 3 +cob=(7) +cfi=(53) +cfn=(2684) +calls=1 0 +0 5000 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1600 +0 12 +cob=(12) +cfi=(84) +cfn=(2712) +calls=1 0 +0 3586 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1414 +0 8 +cob=(7) +cfi=(53) +cfn=(1260) +calls=1 0 +0 28 +0 20 +cob=(7) +cfi=(53) +cfn=(746) +calls=1 0 +0 12 +0 10 +cob=(7) +cfi=(53) +cfn=(1818) +calls=1 0 +0 58 +0 5 +cob=(7) +cfi=(53) +cfn=(722) +calls=1 0 +0 97 +0 18 +cob=(7) +cfi=(53) +cfn=(728) +calls=1 0 +0 708 +0 15 +cob=(7) +cfi=(53) +cfn=(492) +calls=1 0 +0 39 +0 9 +cob=(7) +cfi=(53) +cfn=(728) +calls=1 0 +0 708 +0 3 +cob=(7) +cfi=(53) +cfn=(2726) +calls=1 0 +0 923 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1690 +0 12 +cob=(12) +cfi=(84) +cfn=(2712) +calls=1 0 +0 200 +0 8 +cob=(7) +cfi=(53) +cfn=(1260) +calls=1 0 +0 28 +0 20 +cob=(7) +cfi=(53) +cfn=(746) +calls=1 0 +0 12 +0 8 +cob=(7) +cfi=(53) +cfn=(1818) +calls=1 0 +0 58 +0 6 +cob=(12) +cfi=(84) +cfn=(1962) +calls=1 0 +0 494 +0 4 +cob=(7) +cfi=(53) +cfn=(1254) +calls=1 0 +0 20 +0 4 +cob=(7) +cfi=(53) +cfn=(1686) +calls=1 0 +0 420 +0 6 +cob=(12) +cfi=(84) +cfn=(1350) +calls=1 0 +0 345 +0 4 +cob=(7) +cfi=(53) +cfn=(1254) +calls=1 0 +0 20 +0 4 +cob=(7) +cfi=(53) +cfn=(1686) +calls=1 0 +0 496 +0 6 +cob=(12) +cfi=(84) +cfn=(1350) +calls=1 0 +0 465 +0 4 +cob=(7) +cfi=(53) +cfn=(1254) +calls=1 0 +0 20 +0 4 +cob=(7) +cfi=(53) +cfn=(1686) +calls=1 0 +0 476 +0 4 +cob=(7) +cfi=(53) +cfn=(1254) +calls=1 0 +0 20 +0 2 +cob=(4) +cfi=(69) +cfn=(642) +calls=1 26 +0 22 +0 4 +cob=(7) +cfi=(53) +cfn=(1686) +calls=1 0 +0 370 +0 4 +cob=(7) +cfi=(53) +cfn=(1254) +calls=1 0 +0 20 +0 4 +cob=(7) +cfi=(53) +cfn=(1686) +calls=1 0 +0 649 +0 2 +cfn=(2170) +calls=1 0 +0 7 +0 54 +cob=(7) +cfi=(53) +cfn=(1308) +calls=1 0 +0 82 +0 7 +cob=(7) +cfi=(53) +cfn=(1308) +calls=1 0 +0 113 +0 7 +cob=(7) +cfi=(53) +cfn=(1308) +calls=1 0 +0 124 +0 7 +cob=(7) +cfi=(53) +cfn=(1308) +calls=1 0 +0 82 +0 7 +cob=(7) +cfi=(53) +cfn=(1308) +calls=1 0 +0 82 +0 7 +cob=(7) +cfi=(53) +cfn=(1308) +calls=1 0 +0 82 +0 7 +cob=(7) +cfi=(53) +cfn=(1308) +calls=1 0 +0 113 +0 7 +cob=(7) +cfi=(53) +cfn=(1308) +calls=1 0 +0 124 +0 7 +cob=(7) +cfi=(53) +cfn=(1308) +calls=1 0 +0 82 +0 7 +cob=(7) +cfi=(53) +cfn=(1308) +calls=1 0 +0 82 +0 7 +cob=(7) +cfi=(53) +cfn=(1308) +calls=1 0 +0 113 +0 7 +cob=(7) +cfi=(53) +cfn=(1308) +calls=1 0 +0 124 +0 7 +cob=(7) +cfi=(53) +cfn=(1308) +calls=1 0 +0 82 +0 7 +cob=(7) +cfi=(53) +cfn=(1308) +calls=1 0 +0 82 +0 74 + +fn=(856) +0 3 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 24 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 3 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 24 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 + +fn=(874) +0 8 +cob=(7) +cfi=(53) +cfn=(880) +calls=1 0 +0 62508 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1299 +0 56 + +fn=(998) +0 3 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 24 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 + +fn=(1018) +0 3 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 24 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 + +fn=(1366) MR::App::parse_arguments() +0 390 + +fn=(2034) +0 40 + +fn=(2056) +0 84 + +fn=(2342) +0 38 +cob=(7) +cfi=(53) +cfn=(880) +calls=1 0 +0 110 +0 5 +cob=(4) +cfi=(113) +cfn=(1794) +calls=1 47 +0 62 +0 7 + +fn=(2584) +0 22 + +fn=(2646) +0 44 + +fn=(3136) +0 4 +cob=(7) +cfi=(53) +cfn=(2138) +calls=2 0 +0 124 +0 8 + +fn=(3760) __tcf_0 +0 40 + +ob=(12) +fl=(84) +fn=(2992) std::vector >, std::allocator > > >::_M_insert_aux(__gnu_cxx::__normal_iterator >*, std::vector >, std::allocator > > > >, std::vector > const&) +0 5820 +cob=(7) +cfi=(53) +cfn=(880) +calls=240 0 +0 36512 +0 2640 +cfn=(2994) std::vector >::vector(std::vector > const&) +calls=240 0 +0 53056 +0 1440 +cfn=(2996) std::vector >* std::__uninitialized_move_a >*, std::vector >*, std::allocator > > >(std::vector >*, std::vector >*, std::vector >*, std::allocator > >&) +calls=240 0 +0 102311 +0 1440 +cfn=(2996) +calls=240 0 +0 5040 +0 3300 +cob=(7) +cfi=(53) +cfn=(1142) +calls=420 0 +0 34020 +0 2100 +cob=(7) +cfi=(53) +cfn=(1142) +calls=180 0 +0 14580 +0 6120 + +fn=(3478) BTS::Fibre::Tract::Tensor_tpl::init() +0 828338 +cob=(7) +cfi=(53) +cfn=(934) +calls=59167 0 +0 16345116 +0 710004 +cob=(7) +cfi=(53) +cfn=(1380) +calls=59167 0 +0 887505 +0 355002 +cob=(7) +cfi=(53) +cfn=(934) +calls=59167 0 +0 16413153 +0 591670 +cob=(7) +cfi=(53) +cfn=(2414) +calls=59167 0 +0 1005839 +0 473336 +cob=(7) +cfi=(53) +cfn=(2414) +calls=59167 0 +0 1005839 +0 355002 +cob=(7) +cfi=(53) +cfn=(1380) +calls=59167 0 +0 887505 +0 769171 +cob=(7) +cfi=(53) +cfn=(1254) +calls=59167 0 +0 1183340 +0 295835 +cfn=(3480) std::_Rb_tree, std::_Select1st >, std::less, std::allocator > >::_M_insert_unique_(std::_Rb_tree_const_iterator >, std::pair const&) +calls=59167 0 +0 18193177 +0 177501 +cob=(7) +cfi=(53) +cfn=(1380) +calls=59167 0 +0 887505 +0 295835 +cob=(7) +cfi=(53) +cfn=(1254) +calls=59167 0 +0 1183340 +0 295835 +cfn=(3480) +calls=59167 0 +0 17947063 +0 177501 +cob=(7) +cfi=(53) +cfn=(1380) +calls=59167 0 +0 887505 +0 177501 + +fn=(3484) std::_Rb_tree, std::_Select1st >, std::less, std::allocator > >::_M_insert_(std::_Rb_tree_node_base const*, std::_Rb_tree_node_base const*, std::pair const&) +0 1656676 +cob=(7) +cfi=(53) +cfn=(880) +calls=118334 0 +0 19395979 +0 710004 +cob=(7) +cfi=(53) +cfn=(1254) +calls=118334 0 +0 2366680 +0 828338 +cob=(7) +cfi=(53) +cfn=(2402) +calls=118334 0 +0 3845855 +0 1242507 + +fn=(1040) +0 11 +cob=(4) +cfi=(85) /build/buildd/eglibc-2.11.1/csu/libc-start.c +cfn=(1048) (below main) +calls=1 96 +0 1323498943661 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1850 + +fn=(1050) __libc_csu_init +0 15 +cob=(2) +cfi=(13) +cfn=(1052) +calls=1 0 +0 217031 +0 10 + +fn=(1088) global constructors keyed to basic_strand.cpp +0 5 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 24 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 319 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 344 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 324 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 319 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 323 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 10 + +fn=(1094) global constructors keyed to file.cpp +0 4 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 24 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 6 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 24 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 + +fn=(1110) global constructors keyed to flatness.cpp +0 6 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 24 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 319 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 344 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 324 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 319 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 323 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 5 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 8 + +fn=(1122) T.4971 +0 6 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 24 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 319 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 344 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 324 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 319 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 323 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 315 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 314 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 285 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 315 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 50 +cfn=(1126) MR::Option::append(MR::Argument const&) +calls=1 0 +0 1577 +0 3 +cfn=(1134) MR::Option::Option(MR::Option const&) +calls=1 0 +0 275 +0 4 +cfn=(1136) MR::Option::~Option() +calls=1 0 +0 3034 +0 23 +cfn=(1126) +calls=1 0 +0 193 +0 3 +cfn=(1134) +calls=1 0 +0 275 +0 4 +cfn=(1136) +calls=1 0 +0 85 +0 23 +cfn=(1126) +calls=1 0 +0 193 +0 3 +cfn=(1134) +calls=1 0 +0 275 +0 4 +cfn=(1136) +calls=1 0 +0 85 +0 40 +cfn=(1126) +calls=1 0 +0 193 +0 3 +cfn=(1134) +calls=1 0 +0 275 +0 4 +cfn=(1136) +calls=1 0 +0 85 +0 28 +cfn=(1126) +calls=1 0 +0 193 +0 3 +cfn=(1134) +calls=1 0 +0 275 +0 4 +cfn=(1136) +calls=1 0 +0 85 +0 28 +cfn=(1126) +calls=1 0 +0 193 +0 3 +cfn=(1134) +calls=1 0 +0 275 +0 4 +cfn=(1136) +calls=1 0 +0 85 +0 28 +cfn=(1126) +calls=1 0 +0 193 +0 3 +cfn=(1134) +calls=1 0 +0 275 +0 4 +cfn=(1136) +calls=1 0 +0 85 +0 26 +cfn=(1126) +calls=1 0 +0 193 +0 3 +cfn=(1134) +calls=1 0 +0 275 +0 4 +cfn=(1136) +calls=1 0 +0 85 +0 28 +cfn=(1126) +calls=1 0 +0 193 +0 3 +cfn=(1134) +calls=1 0 +0 275 +0 4 +cfn=(1136) +calls=1 0 +0 85 +0 40 +cfn=(1126) +calls=1 0 +0 193 +0 3 +cfn=(1134) +calls=1 0 +0 275 +0 4 +cfn=(1136) +calls=1 0 +0 85 +0 25 +cfn=(1126) +calls=1 0 +0 193 +0 3 +cfn=(1134) +calls=1 0 +0 275 +0 4 +cfn=(1136) +calls=1 0 +0 85 +0 28 +cfn=(1126) +calls=1 0 +0 193 +0 3 +cfn=(1134) +calls=1 0 +0 275 +0 4 +cfn=(1136) +calls=1 0 +0 85 +0 26 +cfn=(1126) +calls=1 0 +0 193 +0 3 +cfn=(1134) +calls=1 0 +0 275 +0 4 +cfn=(1136) +calls=1 0 +0 85 +0 40 +cfn=(1126) +calls=1 0 +0 193 +0 3 +cfn=(1134) +calls=1 0 +0 275 +0 4 +cfn=(1136) +calls=1 0 +0 85 +0 23 +cfn=(1126) +calls=1 0 +0 193 +0 3 +cfn=(1134) +calls=1 0 +0 275 +0 3 +cfn=(1136) +calls=1 0 +0 85 +0 3 +cfn=(1134) +calls=1 0 +0 44 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 8 + +fn=(1152) global constructors keyed to image_diff.cpp +0 5 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 24 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 319 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 344 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 582 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 294 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 324 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 335 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 323 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 7 + +fn=(1194) global constructors keyed to KMrand.cpp +0 7 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 319 +0 6 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 344 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 324 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 319 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 323 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 + +fn=(1210) global constructors keyed to flat_top_quadratic.cpp +0 6 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 24 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 319 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 344 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 324 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 319 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 407 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 323 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 5 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 334 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 5 + +fn=(2358) +0 6377165 +cob=(7) +cfi=(53) +cfn=(880) +calls=296842 0 +0 32940630 +0 2968420 +cob=(7) +cfi=(53) +cfn=(1254) +calls=296842 0 +0 5936810 +0 1781052 +cfn=(2360) std::string* std::__uninitialized_move_a >(std::string*, std::string*, std::string*, std::allocator&) +calls=296842 0 +0 10036694 +0 1781052 +cfn=(2360) +calls=296842 0 +0 5046314 +0 2368152 +cob=(7) +cfi=(53) +cfn=(1380) +calls=146775 0 +0 2201593 +0 6 +cob=(7) +cfi=(53) +cfn=(1380) +calls=2 0 +0 14 +0 1180788 +cob=(7) +cfi=(53) +cfn=(1142) +calls=146775 0 +0 11888775 +0 6520648 + +fn=(2620) MR::Math::Matrix::Matrix(MR::Math::Matrix const&) +0 3322 +cob=(9) +cfi=(58) +cfn=(1868) gsl_block_alloc +calls=2 0 +0 3070 +0 8 + +fn=(2972) BTS::Diffusion::Model::init(MR::Math::Matrix const&, MR::Math::Matrix const&, bool) +0 39 +cfn=(2862) MR::Math::Vector::initialize(unsigned long) +calls=1 0 +0 233 +0 180 +cfn=(2862) +calls=60 0 +0 13980 +0 2565 +cfn=(2862) +calls=61 0 +0 14415 +0 5607 +cfn=(2862) +calls=54 0 +0 12582 +0 4726 +cob=(9) +cfi=(58) +cfn=(2626) gsl_block_free +calls=61 0 +0 10065 +0 244 +cob=(9) +cfi=(58) +cfn=(2626) +calls=61 0 +0 10065 +0 672 +cfn=(2862) +calls=60 0 +0 13980 +0 2760 +cfn=(2978) BTS::Diffusion::Model::SH_to_coeffs(MR::Math::Vector, bool) +calls=60 0 +0 514373 +0 4440 +cob=(9) +cfi=(58) +cfn=(2626) +calls=60 0 +0 9900 +0 240 +cob=(9) +cfi=(58) +cfn=(2626) +calls=60 0 +0 9900 +0 180 +cob=(9) +cfi=(58) +cfn=(2626) +calls=60 0 +0 9900 +0 300 +cob=(9) +cfi=(58) +cfn=(1868) +calls=60 0 +0 12720 +0 328 +cfn=(2974) std::vector >::_M_insert_aux(__gnu_cxx::__normal_iterator > >, BTS::Diffusion::Response const&) +calls=7 0 +0 51005 +0 7 + +fn=(3008) BTS::Image::Expected::Buffer_tpl::Buffer_tpl(BTS::Triple const&, BTS::Triple const&, BTS::Diffusion::Model const&, unsigned int, unsigned int, double, BTS::Triple const&, bool) +0 60 +cfn=(3010) BTS::Diffusion::Model::Model(BTS::Diffusion::Model const&) +calls=1 0 +0 33518 +0 16 +cob=(6) +cfi=(134) /build/buildd/eglibc-2.11.1/math/../sysdeps/ieee754/dbl-64/s_ceil.c +cfn=(3016) ceil +calls=1 44 +0 24 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1398 +0 5 +cfn=(3018) std::_Rb_tree, std::allocator > >, std::_Select1st, std::allocator > > >, std::less, std::allocator, std::allocator > > > >::_M_erase(std::_Rb_tree_node, std::allocator > > >*) +calls=1 0 +0 11 +0 12 + +fn=(3018) +0 22 + +fn=(3060) BTS::Image::Expected::Buffer_tpl::Buffer_tpl(BTS::Image::Expected::Buffer_tpl const&) +0 50 +cfn=(3010) +calls=1 0 +0 30128 +0 14 +cob=(6) +cfi=(134) +cfn=(3016) +calls=1 44 +0 24 +0 5 +cfn=(3018) +calls=1 0 +0 11 +0 10 + +fn=(3228) __gnu_cxx::__normal_iterator > > std::__find<__gnu_cxx::__normal_iterator > >, std::string>(__gnu_cxx::__normal_iterator > >, __gnu_cxx::__normal_iterator > >, std::string const&, std::random_access_iterator_tag) +0 148 + +fn=(3232) BTS::Fibre::Properties::Extended::add_properties(BTS::Fibre::Properties::Header const&, std::vector > const&) +0 33 + +fn=(3234) BTS::Fibre::Base::Reader::next(BTS::Fibre::Tract&, BTS::Fibre::Properties&) +0 65 +cfn=(2618) +calls=5 0 +0 55 +0 40 +cfn=(3236) BTS::Fibre::Base::Reader::next_basic(BTS::Fibre::Tract&) +calls=5 0 +0 29380 +0 108 +cob=(7) +cfi=(53) +cfn=(1638) +calls=4 0 +0 1857 +0 36 +cfn=(3258) BTS::Fibre::Properties::Extended::parse_line(std::string const&) +calls=4 0 +0 17571 +0 60 +cfn=(3260) std::map, std::allocator > >::operator[](std::string const&) +calls=4 0 +0 1516 +0 24 +cfn=(3260) +calls=4 0 +0 1734 +0 24 +cob=(7) +cfi=(53) +cfn=(1260) +calls=8 0 +0 224 +0 72 +cfn=(2374) +calls=4 0 +0 548 +0 8 +cob=(7) +cfi=(53) +cfn=(1380) +calls=4 0 +0 400 +0 16 +cfn=(3262) BTS::Fibre::Tract::set_intrinsic_properties(BTS::Fibre::Properties&) +calls=4 0 +0 32537 +0 44 + +fn=(3274) BTS::Fibre::Tract::~Tract() +0 1302902048 +cob=(7) +cfi=(53) +cfn=(1142) +calls=125886783 0 +0 10196829423 +0 546471371 +cob=(7) +cfi=(53) +cfn=(1142) +calls=42036260 0 +0 3404937060 +0 252217560 +cfn=(3230) std::_Rb_tree, std::_Select1st >, std::less, std::allocator > >::_M_erase(std::_Rb_tree_node >*) +calls=42036260 0 +0 17571156680 +0 252217560 + +fn=(3308) double BTS::Prob::Likelihood::ImageDiff::log_prob_tpl(BTS::Fibre::Tract::Set const&, BTS::Fibre::Tract::Set&, BTS::Fibre::Tract::Set::Tensor&) +0 18 +cfn=(3310) BTS::Image::Expected::Quartic::Buffer::expected_image(BTS::Fibre::Tract::Set const&, std::vector, std::allocator > >&, std::vector, std::allocator > >&) +calls=1 0 +0 1321052384417 +0 10 +cfn=(2618) +calls=1 0 +0 554 +0 13 +cfn=(2564) +calls=1 0 +0 759 +0 40 +cfn=(3462) std::vector >::operator=(std::vector > const&) +calls=1 0 +0 1321 +0 5 +cfn=(2366) +calls=1 0 +0 45 +0 5 +cfn=(2366) +calls=1 0 +0 45 +0 5 +cfn=(3552) std::vector >, std::allocator > > >::operator=(std::vector >, std::allocator > > > const&) +calls=1 0 +0 58 +0 10 +cfn=(3086) std::_Rb_tree, std::_Select1st >, std::less, std::allocator > >::_M_erase(std::_Rb_tree_node >*) +calls=1 0 +0 11 +0 20 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 375 +0 4 +cfn=(3298) std::map, std::allocator > >::operator[](std::string const&) +calls=1 0 +0 102 +0 5 +cob=(7) +cfi=(53) +cfn=(1380) +calls=1 0 +0 100 +0 2 +cfn=(3554) unsigned int BTS::Fibre::Unzipper::size >(BTS::Fibre::Set const&) +calls=1 0 +0 10608 +0 3 +cfn=(3554) +calls=1 0 +0 9432 +0 5 +cfn=(3360) MR::Math::Matrix::initialize(unsigned long, unsigned long) +calls=1 0 +0 3909 +0 96767 +cfn=(3368) MR::Math::Matrix::operator=(MR::Math::Matrix const&) +calls=1 0 +0 97602 +0 4 +cob=(9) +cfi=(58) +cfn=(2626) +calls=1 0 +0 216 +0 97119 +cfn=(3554) +calls=1 0 +0 9512 +0 35 +cfn=(3556) unsigned int BTS::Fibre::Unzipper::size(BTS::Fibre::Tract const&) +calls=1 0 +0 2086 +0 18 +cfn=(3556) +calls=3 0 +0 6258 +0 82 +cfn=(3558) std::vector >::_M_insert_aux(__gnu_cxx::__normal_iterator > >, unsigned int const&) +calls=3 0 +0 940 +0 12 +cfn=(3558) +calls=3 0 +0 940 +0 23 +cfn=(3560) BTS::Image::Expected::Quartic::Buffer::dim(unsigned int) const +calls=1 0 +0 3 +0 15 +cfn=(3560) +calls=3 0 +0 9 +0 29 +cfn=(3560) +calls=3 0 +0 9 +0 45 +cfn=(3560) +calls=9 0 +0 27 +0 78 +cfn=(3560) +calls=9 0 +0 27 +0 135 +cfn=(3560) +calls=27 0 +0 81 +0 207 +cfn=(3316) BTS::Image::Expected::Quartic::Buffer::num_encodings() const +calls=27 0 +0 162 +0 6588 +cfn=(3316) +calls=1647 0 +0 9882 +0 14877 +cfn=(3562) BTS::Image::Expected::Quartic::Buffer::operator()(int, int, int) +calls=1647 0 +0 269130 +0 23058 +cfn=(2784) BTS::Image::Buffer_tpl::operator()(BTS::Image::Coord const&) +calls=1647 0 +0 206790 +0 16470 +cfn=(3564) BTS::Prob::Likelihood::ImageDiff::Gaussian::log_prob(double, double&, double&) +calls=1647 0 +0 11529 +0 60939 +cfn=(3224) BTS::Fibre::Tract::Tract() +calls=1647 0 +0 3158642 +0 14823 +cob=(7) +cfi=(53) +cfn=(880) +calls=1647 0 +0 1423098 +0 44469 +cfn=(3268) BTS::Fibre::Tract::Tract(BTS::Fibre::Tract const&) +calls=6588 0 +0 10973424 +0 32940 +cfn=(3274) +calls=1647 0 +0 909144 +0 41175 +cob=(7) +cfi=(53) +cfn=(934) +calls=1647 0 +0 385398 +0 6588 +cfn=(3298) +calls=1647 0 +0 523746 +0 8235 +cob=(7) +cfi=(53) +cfn=(1380) +calls=1647 0 +0 24705 +0 9882 +cfn=(2618) +calls=1647 0 +0 18117 +0 6588 +cfn=(3360) +calls=1647 0 +0 3350624 +0 159879963 +cfn=(3448) BTS::Image::Buffer_tpl >::operator()(BTS::Image::Coord const&) +calls=4453 0 +0 562786 +0 44530 +cfn=(3466) std::vector >::operator=(std::vector > const&) +calls=4453 0 +0 3037739 +0 115778 +cfn=(3486) BTS::Image::Buffer_tpl >::operator()(BTS::Image::Coord const&) +calls=4453 0 +0 562786 +0 22265 +cfn=(3566) BTS::Fibre::Flattener::flatten(BTS::Fibre::Tract::Tensor const&) +calls=4453 0 +0 894404448 +0 80803650 +cob=(9) +cfi=(58) +cfn=(2626) +calls=4453 0 +0 903959 +0 65880 +cfn=(3596) MR::Math::Vector BTS::Fibre::Unzipper::unzip >(BTS::Fibre::Set const&) +calls=1647 0 +0 43329093 +0 6588 +cfn=(3596) +calls=1647 0 +0 43171713 +0 6588 +cfn=(3604) MR::Math::Matrix BTS::Math::outer(MR::Math::Vector const&, MR::Math::Vector const&) +calls=1647 0 +0 212664361 +0 6588 +cob=(9) +cfi=(58) +cfn=(2626) +calls=1647 0 +0 312930 +0 6588 +cob=(9) +cfi=(58) +cfn=(2626) +calls=1647 0 +0 312930 +0 928710360 +cob=(7) +cfi=(53) +cfn=(880) +calls=1647 0 +0 545706 +0 49410 +cfn=(3268) +calls=6588 0 +0 15235177 +0 36234 +cfn=(3606) BTS::Fibre::Properties::Extended::Extended(BTS::Fibre::Properties::Extended const&) +calls=1647 0 +0 191052 +0 8235 +cob=(7) +cfi=(53) +cfn=(934) +calls=1647 0 +0 546804 +0 6588 +cfn=(3298) +calls=1647 0 +0 713151 +0 8235 +cob=(7) +cfi=(53) +cfn=(1380) +calls=1647 0 +0 24705 +0 4183380 +cfn=(3302) BTS::Fibre::Properties::Extended::~Extended() +calls=1647 0 +0 92232 +0 4941 +cfn=(3608) std::vector >::~vector() +calls=1647 0 +0 5497686 +0 6588 +cfn=(2618) +calls=1647 0 +0 18117 +0 11529 +cfn=(3230) +calls=1647 0 +0 354105 +0 6588 +cob=(9) +cfi=(58) +cfn=(2626) +calls=1647 0 +0 2411147 +0 6588 +cob=(9) +cfi=(58) +cfn=(2626) +calls=1647 0 +0 576450 +0 9882 +cfn=(3302) +calls=1647 0 +0 92232 +0 4941 +cfn=(3608) +calls=1647 0 +0 5497686 +0 6588 +cfn=(2618) +calls=1647 0 +0 18117 +0 9882 +cfn=(3230) +calls=1647 0 +0 354105 +0 106201 +cob=(7) +cfi=(53) +cfn=(880) +calls=2135 0 +0 244610 +0 68320 +cob=(7) +cfi=(53) +cfn=(880) +calls=2135 0 +0 244610 +0 136640 +cob=(7) +cfi=(53) +cfn=(880) +calls=6405 0 +0 733830 +0 333060 +cob=(7) +cfi=(53) +cfn=(1142) +calls=2135 0 +0 172935 +0 10675 +cob=(7) +cfi=(53) +cfn=(934) +calls=2135 0 +0 485865 +0 8540 +cfn=(3298) +calls=2135 0 +0 688690 +0 10675 +cob=(7) +cfi=(53) +cfn=(1380) +calls=2135 0 +0 32025 +0 10675 +cob=(7) +cfi=(53) +cfn=(934) +calls=2135 0 +0 488000 +0 8540 +cfn=(3298) +calls=2135 0 +0 864980 +0 10675 +cob=(7) +cfi=(53) +cfn=(1380) +calls=2135 0 +0 32025 +0 12810 +cfn=(3466) +calls=2135 0 +0 1461865 +0 12810 +cfn=(3274) +calls=2135 0 +0 1703730 +0 154728 +cob=(7) +cfi=(53) +cfn=(1142) +calls=1 0 +0 81 +0 6 +cob=(7) +cfi=(53) +cfn=(1142) +calls=1 0 +0 81 +0 10 + +fn=(3318) std::vector, std::allocator > >::_M_insert_aux(__gnu_cxx::__normal_iterator*, std::vector, std::allocator > > >, BTS::Image::Container::Buffer const&) +0 71 +cob=(7) +cfi=(53) +cfn=(880) +calls=3 0 +0 5746 +0 27 +cfn=(3320) BTS::Image::Container::Buffer::Buffer(BTS::Image::Container::Buffer const&) +calls=3 0 +0 96 +0 18 +cfn=(3322) BTS::Image::Container::Buffer* std::__uninitialized_move_a*, BTS::Image::Container::Buffer*, std::allocator > >(BTS::Image::Container::Buffer*, BTS::Image::Container::Buffer*, BTS::Image::Container::Buffer*, std::allocator >&) +calls=3 0 +0 33697569 +0 18 +cfn=(3322) +calls=3 0 +0 51 +0 32 +cfn=(3324) std::_Rb_tree >, std::_Select1st > >, std::less, std::allocator > > >::_M_erase(std::_Rb_tree_node > >*) +calls=2 0 +0 6898379 +0 4 +cfn=(3324) +calls=1 0 +0 4040576 +0 19 +cob=(7) +cfi=(53) +cfn=(1142) +calls=2 0 +0 200 +0 84 + +fn=(3370) BTS::Fibre::Strand::create_tangent_matrix(unsigned int, unsigned int, bool) +0 14 +cfn=(3360) +calls=1 0 +0 473 +0 215 +cob=(6) +cfi=(137) /build/buildd/eglibc-2.11.1/math/../sysdeps/ieee754/dbl-64/s_sin.c +cfn=(3376) sin +calls=2 90 +0 94 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1416 +0 290 +cob=(6) +cfi=(137) +cfn=(3376) +calls=58 90 +0 6746 +0 503 + +fn=(3390) std::map, std::allocator >, std::less, std::allocator, std::allocator > > > >::operator[](BTS::Image::Coord const&) +0 8043657 +cfn=(3392) std::_Rb_tree, std::allocator > >, std::_Select1st, std::allocator > > >, std::less, std::allocator, std::allocator > > > >::_M_insert_unique_(std::_Rb_tree_const_iterator, std::allocator > > >, std::pair, std::allocator > > const&) +calls=102 0 +0 29252 +0 408 +cfn=(3398) std::_Rb_tree, std::less, std::allocator >::_M_erase(std::_Rb_tree_node*) +calls=102 0 +0 1122 +0 306 +cfn=(3398) +calls=102 0 +0 1122 +0 332910 + +fn=(3400) BTS::Image::Expected::Buffer_tpl::create_neighbourhood(BTS::Image::Coord const&) +0 14178 +cfn=(3402) BTS::Image::Buffer_tpl::operator()(BTS::Image::Coord const&) +calls=816 0 +0 5724569 +0 29173 +cob=(7) +cfi=(53) +cfn=(2818) +calls=126 0 +0 2020 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 2037 +0 4458 +cfn=(3438) std::_Rb_tree, std::less, std::allocator >::_M_insert_(std::_Rb_tree_node_base const*, std::_Rb_tree_node_base const*, BTS::Image::Expected::Quartic::Voxel* const&) +calls=816 0 +0 175908 +0 1734 + +fn=(3402) +0 227111 +cfn=(3404) non-virtual thunk to BTS::Image::Expected::Quartic::Buffer::new_voxel(BTS::Image::Coord const&) +calls=237 0 +0 3580939 +0 145134 +cfn=(3422) BTS::Image::Expected::Quartic::Voxel::Voxel() +calls=237 0 +0 101673 +0 1896 +cfn=(3424) BTS::Image::Expected::Voxel::Voxel(BTS::Image::Expected::Voxel const&) +calls=237 0 +0 123714 +0 2133 +cfn=(3426) std::_Rb_tree, std::_Select1st >, std::less, std::allocator > >::_M_insert_unique_(std::_Rb_tree_const_iterator >, std::pair const&) +calls=237 0 +0 269512 +0 711 +cfn=(3432) BTS::Image::Expected::Quartic::Voxel::~Voxel() +calls=237 0 +0 37920 +0 474 +cfn=(3432) +calls=237 0 +0 37920 +0 948 +cfn=(3436) BTS::Image::Expected::Voxel::operator=(BTS::Image::Expected::Voxel const&) +calls=237 0 +0 1350211 +0 1185 +cfn=(3432) +calls=237 0 +0 95761 +0 1634 + +fn=(3424) +0 16590 +cob=(4) +cfi=(113) +cfn=(1794) +calls=474 47 +0 11376 +0 41712 +cfn=(3414) BTS::Fibre::Strand::Section::Tensor::Tensor() +calls=474 0 +0 171114 +0 6636 + +fn=(3426) +0 4339 +cob=(7) +cfi=(53) +cfn=(2812) +calls=208 0 +0 3317 +0 1500 +cfn=(3430) std::_Rb_tree, std::_Select1st >, std::less, std::allocator > >::_M_insert_(std::_Rb_tree_node_base const*, std::_Rb_tree_node_base const*, std::pair const&) +calls=92 0 +0 102131 +0 2148 +cfn=(3428) std::_Rb_tree, std::_Select1st >, std::less, std::allocator > >::_M_insert_unique(std::pair const&) +calls=1 0 +0 841 +0 41 +cfn=(3430) +calls=3 0 +0 2627 +0 2138 +cfn=(3430) +calls=141 0 +0 150282 +0 148 + +fn=(3432) +0 19197 +cfn=(3434) BTS::Fibre::Strand::Section::~Section() +calls=711 0 +0 10665 +0 2844 +cfn=(3434) +calls=711 0 +0 10665 +0 2133 +cfn=(3434) +calls=711 0 +0 10665 +0 2844 +cfn=(3434) +calls=711 0 +0 10665 +0 2844 +cfn=(3434) +calls=711 0 +0 10665 +0 2133 +cfn=(3434) +calls=711 0 +0 10665 +0 8769 +cob=(7) +cfi=(53) +cfn=(1142) +calls=237 0 +0 27753 +0 5925 +cob=(7) +cfi=(53) +cfn=(1142) +calls=237 0 +0 29851 +0 3318 + +fn=(3460) BTS::Image::Container::Voxel::~Voxel() +0 13505 +cfn=(3274) +calls=365 0 +0 201480 +0 65700 +cfn=(3274) +calls=21900 0 +0 12088800 +0 71540 +cob=(7) +cfi=(53) +cfn=(1142) +calls=365 0 +0 39462 +0 2920 + +fn=(3494) BTS::Fibre::Tract::Tensor_tpl::~Tensor_tpl() +0 516628 +cfn=(3476) BTS::Fibre::BasicStrand::Tensor_tpl::~Tensor_tpl() +calls=36902 0 +0 105416928 +0 147608 +cfn=(3476) +calls=73804 0 +0 210841873 +0 479726 +cob=(7) +cfi=(53) +cfn=(1142) +calls=36902 0 +0 2989062 +0 73804 +cfn=(3274) +calls=36902 0 +0 23880816 +0 73804 +cfn=(3274) +calls=36902 0 +0 23880816 +0 221412 +cfn=(3496) std::_Rb_tree, std::_Select1st >, std::less, std::allocator > >::_M_erase(std::_Rb_tree_node >*) +calls=36902 0 +0 15425036 +0 147608 + +fn=(3496) +0 405922 +cfn=(3497) std::_Rb_tree, std::_Select1st >, std::less, std::allocator > >::_M_erase(std::_Rb_tree_node >*)'2 +calls=36902 0 +0 405922 +0 110706 +cfn=(3497) +calls=36902 0 +0 405922 +0 221412 +cob=(7) +cfi=(53) +cfn=(1380) +calls=73804 0 +0 7380400 +0 221412 +cob=(7) +cfi=(53) +cfn=(1142) +calls=73804 0 +0 5978124 +0 295216 + +fn=(3497) +0 811844 + +fn=(3528) BTS::Triple::zero() +0 22586880 +cfn=(3526) T.2795 +calls=1328640 0 +0 3985920 +0 2657280 +cfn=(3526) +calls=1328640 0 +0 3985920 +0 15943680 +cfn=(3526) +calls=1328640 0 +0 3985920 +0 2657280 +cfn=(3526) +calls=1328640 0 +0 3985920 +0 15943680 +cfn=(3526) +calls=1328640 0 +0 3985920 +0 2657280 +cfn=(3526) +calls=1328640 0 +0 3985920 +0 7971840 + +fn=(3532) BTS::Image::Expected::Direction::signal_hessian(BTS::Fibre::Strand::Section const&, BTS::Fibre::Strand::Section::Tensor&, double, double, BTS::Triple const&, BTS::Fibre::Strand::Section const&, BTS::Coord::Tensor const&, BTS::Fibre::Strand::Section::Tensor const&) +0 4822298880 +cfn=(3380) BTS::Triple::outer(BTS::Triple const&) const +calls=40523520 0 +0 1580417280 +0 202617600 +cfn=(3380) +calls=40523520 0 +0 1580417280 +0 3849734400 +cfn=(3380) +calls=40523520 0 +0 1580417280 +0 2188270080 + +fn=(3566) +0 44530 +cfn=(3304) unsigned int BTS::Fibre::Properties::Intrinsic::num_intrinsic_keys() +calls=4453 0 +0 9344346 +0 262727 +cfn=(3360) +calls=4453 0 +0 13108534 +0 22265 +cfn=(3568) void BTS::Fibre::Flattener::flatten_intrinsic(BTS::Fibre::Tract::Tensor const&, MR::Math::Matrix&, unsigned int&) +calls=4453 0 +0 75638658 +0 325069 +cfn=(3594) BTS::Fibre::Flattener::flatten_element(BTS::Fibre::Tract const&, MR::Math::Matrix&, unsigned int&) +calls=13359 0 +0 88744569 +0 213744 +cfn=(3594) +calls=26718 0 +0 176466656 +0 160308 +cfn=(3594) +calls=40077 0 +0 264781175 +0 160308 +cfn=(3594) +calls=40077 0 +0 264623917 +0 507642 + +fn=(3584) MR::Math::Vector::Vector(unsigned long) +0 1033096 +cob=(9) +cfi=(58) +cfn=(1868) +calls=129137 0 +0 29323188 +0 1678781 + +fn=(3590) BTS::Fibre::Properties::Intrinsic_tpl::intrinsic_property(std::string const&) const +0 6026556 +cob=(7) +cfi=(53) +cfn=(2414) +calls=284626 0 +0 7257963 +0 863760 +cob=(7) +cfi=(53) +cfn=(2414) +calls=287920 0 +0 7240822 +0 3011631 +cob=(7) +cfi=(53) +cfn=(2414) +calls=287920 0 +0 9660143 +0 2591280 + +fn=(3694) std::_Rb_tree, std::less, std::allocator > > > >, std::_Select1st, std::less, std::allocator > > > > >, std::less, std::allocator, std::less, std::allocator > > > > > >::_M_erase(std::_Rb_tree_node, std::less, std::allocator > > > > >*) +0 29 +cfn=(3695) std::_Rb_tree, std::less, std::allocator > > > >, std::_Select1st, std::less, std::allocator > > > > >, std::less, std::allocator, std::less, std::allocator > > > > > >::_M_erase(std::_Rb_tree_node, std::less, std::allocator > > > > >*)'2 +calls=2 0 +0 22 +0 8 +cfn=(3348) std::_Rb_tree >, std::_Select1st > >, std::less, std::allocator > > >::_M_erase(std::_Rb_tree_node > >*) +calls=2 0 +0 614 +0 6 +cob=(7) +cfi=(53) +cfn=(1142) +calls=2 0 +0 162 +0 16 + +fn=(3695) +0 22 + +fn=(2996) +0 13620 +cob=(7) +cfi=(53) +cfn=(880) +calls=420 0 +0 51851 +0 5460 +cob=(4) +cfi=(113) +cfn=(1794) +calls=420 47 +0 28560 +0 7860 + +fn=(3476) +0 1931149 +cfn=(3274) +calls=129543 0 +0 103375314 +0 518172 +cfn=(3274) +calls=129543 0 +0 103375314 +0 388629 +cfn=(3274) +calls=129543 0 +0 103375314 +0 980928 +cob=(7) +cfi=(53) +cfn=(1142) +calls=43181 0 +0 4591645 +0 407340 + +fn=(3482) std::_Rb_tree, std::_Select1st >, std::less, std::allocator > >::_M_insert_unique(std::pair const&) +0 1597509 +cfn=(3484) +calls=59167 0 +0 14938992 +0 295835 + +fn=(1092) global constructors keyed to sheer.cpp +0 6 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 24 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 319 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 344 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 324 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 319 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 323 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 5 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 315 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 14 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 24 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 319 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 344 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 324 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 319 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 323 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 5 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 313 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 8 + +fn=(1102) global constructors keyed to uniform.cpp +0 6 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 24 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 319 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 344 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 324 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 319 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 323 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 5 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 313 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 8 + +fn=(1112) global constructors keyed to set.cpp +0 6 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 24 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 319 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 344 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 324 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 319 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 323 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 5 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 315 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 5 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 312 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 32 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 24 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 319 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 344 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 324 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 319 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 323 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 10 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 24 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 319 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 344 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 324 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 319 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 323 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 5 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 315 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 5 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 319 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 33 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 24 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 319 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 344 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 324 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 319 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 323 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 5 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 27 + +fn=(1114) global constructors keyed to roi.cpp +0 3 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 24 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 + +fn=(1170) global constructors keyed to prior.cpp +0 5 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 24 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 319 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 344 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 324 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 319 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 323 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 + +fn=(1200) global constructors keyed to common.cpp +0 3 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 24 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 5 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 24 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 319 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 344 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 324 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 319 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 323 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 + +fn=(1202) global constructors keyed to KMterm.cpp +0 7 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 319 +0 6 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 344 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 324 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 319 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 323 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 + +fn=(1948) std::vector >::_M_insert_aux(__gnu_cxx::__normal_iterator > >, BTS::Diffusion::Encoding const&) +0 288 +cob=(7) +cfi=(53) +cfn=(880) +calls=14 0 +0 11522 +0 2238 +cob=(7) +cfi=(53) +cfn=(1142) +calls=12 0 +0 1259 +0 286 + +fn=(1962) +0 80 +cob=(4) +cfi=(69) +cfn=(642) +calls=8 26 +0 194 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1690 +0 72 +cob=(7) +cfi=(53) +cfn=(1338) +calls=8 0 +0 1696 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1450 +0 32 +cob=(7) +cfi=(53) +cfn=(1686) +calls=8 0 +0 535 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1508 +0 24 +cob=(7) +cfi=(53) +cfn=(1360) +calls=8 0 +0 659 +0 56 + +fn=(2360) +0 7111050 +cob=(7) +cfi=(53) +cfn=(1254) +calls=146777 0 +0 2935510 +0 5036448 + +fn=(2396) std::_Rb_tree, std::_Select1st >, std::less, std::allocator > >::_M_insert_(std::_Rb_tree_node_base const*, std::_Rb_tree_node_base const*, std::pair const&) +0 561 +cob=(7) +cfi=(53) +cfn=(880) +calls=7 0 +0 786 +0 76 +cob=(7) +cfi=(53) +cfn=(880) +calls=38 0 +0 6059 +0 315 +cob=(7) +cfi=(53) +cfn=(1254) +calls=45 0 +0 900 +0 135 +cob=(7) +cfi=(53) +cfn=(1254) +calls=45 0 +0 755 +0 225 +cob=(7) +cfi=(53) +cfn=(2402) +calls=45 0 +0 4077 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 2251 +0 1325 + +fn=(2436) MR::Image::Axes::Axis* std::__uninitialized_move_a >(MR::Image::Axes::Axis*, MR::Image::Axes::Axis*, MR::Image::Axes::Axis*, std::allocator&) +0 42 + +fn=(2610) +0 16 +cob=(11) +cfi=(60) +cfn=(2834) +calls=1 0 +0 5972 +0 25 +cob=(7) +cfi=(53) +cfn=(1380) +calls=1 0 +0 100 +0 10 +cob=(7) +cfi=(53) +cfn=(1142) +calls=1 0 +0 81 +0 8 +cob=(9) +cfi=(58) +cfn=(2494) +calls=2 0 +0 407 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 947 +0 14 +cfn=(2616) MR::Image::Axes::Axis::~Axis() +calls=2 0 +0 46 +0 12 +cfn=(2616) +calls=6 0 +0 138 +0 32 +cob=(7) +cfi=(53) +cfn=(1142) +calls=2 0 +0 162 +0 8 +cob=(9) +cfi=(58) +cfn=(2494) +calls=2 0 +0 330 +0 4 +cob=(7) +cfi=(53) +cfn=(1380) +calls=2 0 +0 22 +0 6 +cfn=(2618) +calls=2 0 +0 4360 +0 8 + +fn=(2712) +0 45 +cob=(7) +cfi=(53) +cfn=(952) +calls=3 0 +0 419 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1682 +0 24 +cob=(4) +cfi=(81) +cfn=(966) +calls=3 56 +0 62 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1708 +0 30 + +fn=(2802) std::vector >::operator=(std::vector > const&) +0 10032 +cob=(7) +cfi=(53) +cfn=(880) +calls=264 0 +0 80881 +0 1320 +cob=(4) +cfi=(113) +cfn=(1794) +calls=264 47 +0 56760 +0 1848 + +fn=(2854) BTS::Diffusion::Model::factory(MR::Math::Matrix const&, MR::Math::Matrix const&, double, double, bool) +0 23 +cob=(7) +cfi=(53) +cfn=(1142) +calls=1 0 +0 114 +0 15 +cfn=(2856) BTS::Diffusion::Model::Model(MR::Math::Matrix const&, double, double, bool) +calls=1 0 +0 7042633 +0 3 +cfn=(2998) std::vector >::operator=(std::vector > const&) +calls=1 0 +0 30988 +0 249 +cob=(9) +cfi=(58) +cfn=(2626) +calls=61 0 +0 10065 +0 185 + +fn=(2998) +0 48 +cob=(7) +cfi=(53) +cfn=(880) +calls=1 0 +0 1475 +0 921 +cfn=(2862) +calls=61 0 +0 23202 +0 5342 + +fn=(3006) BTS::Image::Expected::Quartic::Buffer::Buffer(BTS::Triple const&, BTS::Triple const&, BTS::Diffusion::Model const&, unsigned int, unsigned int, double, BTS::Triple const&, bool) +0 14 +cfn=(3008) +calls=1 0 +0 35044 +0 7 +cfn=(3020) BTS::Image::Expected::Quartic::Buffer::init() +calls=1 0 +0 1757 +0 4 + +fn=(3066) BTS::Prob::Likelihood::ImageDiff::set_assumed_snr(double) +0 8 +cfn=(3068) BTS::Image::Observed::Buffer::average_b0() const +calls=1 0 +0 39375 +0 13 + +fn=(3202) MR::DWI::Tractography::ROISet::~ROISet() +0 80 + +fn=(3258) +0 48 +cob=(7) +cfi=(53) +cfn=(722) +calls=4 0 +0 388 +0 88 +cob=(7) +cfi=(53) +cfn=(728) +calls=4 0 +0 2832 +0 64 +cob=(7) +cfi=(53) +cfn=(492) +calls=4 0 +0 156 +0 36 +cob=(7) +cfi=(53) +cfn=(1752) +calls=4 0 +0 849 +0 24 +cob=(7) +cfi=(53) +cfn=(1758) +calls=4 0 +0 84 +0 12 +cob=(7) +cfi=(53) +cfn=(728) +calls=4 0 +0 2832 +0 48 +cob=(7) +cfi=(53) +cfn=(1638) +calls=4 0 +0 1742 +0 32 +cob=(7) +cfi=(53) +cfn=(1638) +calls=8 0 +0 4556 +0 56 +cob=(7) +cfi=(53) +cfn=(1380) +calls=4 0 +0 400 +0 36 +cob=(7) +cfi=(53) +cfn=(1380) +calls=4 0 +0 400 +0 20 +cob=(7) +cfi=(53) +cfn=(746) +calls=4 0 +0 48 +0 36 +cob=(7) +cfi=(53) +cfn=(1818) +calls=4 0 +0 232 +0 92 +cfn=(2358) +calls=8 0 +0 2452 +0 8 + +fn=(3268) +0 46038408 +cob=(7) +cfi=(53) +cfn=(880) +calls=1180472 0 +0 210832492 +0 96636444 +cob=(7) +cfi=(53) +cfn=(880) +calls=3120882 0 +0 364021629 +0 206125588 +cfn=(3226) BTS::Fibre::Tract::init() +calls=1180472 0 +0 1700719310 +0 9443776 + +fn=(3302) +0 79112 +cob=(7) +cfi=(53) +cfn=(1380) +calls=9889 0 +0 69223 +0 29667 +cfn=(3086) +calls=9889 0 +0 108779 +0 267003 + +fn=(3316) +0 247137132 + +fn=(3320) +0 96 + +fn=(3354) std::_Rb_tree >, std::_Select1st > >, std::less, std::allocator > > >::_M_insert_unique(std::pair > const&) +0 50 +cfn=(3356) std::_Rb_tree >, std::_Select1st > >, std::less, std::allocator > > >::_M_insert_(std::_Rb_tree_node_base const*, std::_Rb_tree_node_base const*, std::pair > const&) +calls=2 0 +0 510 +0 4 + +fn=(3410) BTS::Image::Expected::Voxel::Voxel(BTS::Image::Expected::Buffer&, BTS::Image::Coord const&, BTS::Diffusion::Model&) +0 4503 +cfn=(3412) BTS::Image::Observed::Voxel::Voxel(unsigned int, BTS::Image::Coord const&) +calls=237 0 +0 180915 +0 12798 +cfn=(3414) +calls=237 0 +0 85557 +0 379437 +cfn=(3420) std::vector >::_M_insert_aux(__gnu_cxx::__normal_iterator > >, BTS::Image::Expected::Direction const&) +calls=1659 0 +0 2905405 +0 6873 + +fn=(3418) T.6698 +0 1458880848 + +fn=(3434) +0 4255033605 + +fn=(3458) std::_Rb_tree >, std::_Select1st > >, std::less, std::allocator > > >::_M_insert_(std::_Rb_tree_node_base const*, std::_Rb_tree_node_base const*, std::pair > const&) +0 4968 +cob=(7) +cfi=(53) +cfn=(880) +calls=196 0 +0 33269 +0 338 +cob=(7) +cfi=(53) +cfn=(880) +calls=169 0 +0 28733 +0 14965 +cob=(7) +cfi=(53) +cfn=(2402) +calls=365 0 +0 26531 +0 6580 + +fn=(3464) BTS::Fibre::Tract* std::__uninitialized_copy_a<__gnu_cxx::__normal_iterator > >, BTS::Fibre::Tract*, BTS::Fibre::Tract>(__gnu_cxx::__normal_iterator > >, __gnu_cxx::__normal_iterator > >, BTS::Fibre::Tract*, std::allocator&) +0 116070 +cfn=(3268) +calls=22265 0 +0 39778251 +0 114245 + +fn=(3486) +0 50780717 +cfn=(3488) BTS::Image::Container::Buffer::new_voxel(BTS::Image::Coord const&) +calls=365 0 +0 126124096 +0 30274212 +cfn=(3498) BTS::Image::Container::Voxel::Voxel(BTS::Image::Container::Voxel const&) +calls=365 0 +0 16425 +0 1460 +cfn=(3500) std::_Rb_tree >, std::_Select1st > >, std::less, std::allocator > > >::_M_insert_unique_(std::_Rb_tree_const_iterator > >, std::pair > const&) +calls=365 0 +0 139111 +0 1095 +cfn=(3506) BTS::Image::Container::Voxel::~Voxel() +calls=365 0 +0 6570 +0 730 +cfn=(3506) +calls=365 0 +0 6570 +0 1095 +cfn=(3508) std::vector >::operator=(std::vector > const&) +calls=365 0 +0 120856035 +0 2190 +cfn=(3506) +calls=365 0 +0 38230928 +0 2159 + +fn=(3506) +0 13505 +cfn=(3512) BTS::Fibre::Tract::Tensor::~Tensor() +calls=365 0 +0 623785 +0 65700 +cfn=(3512) +calls=21900 0 +0 37427100 +0 71540 +cob=(7) +cfi=(53) +cfn=(1142) +calls=365 0 +0 39518 +0 2920 + +fn=(3524) BTS::Triple::norm(BTS::Triple&, BTS::Coord::Tensor&) const +0 41187840 + +fn=(3538) BTS::Fibre::Strand::Strand(BTS::Fibre::Strand const&) +0 9725644800 +cob=(7) +cfi=(53) +cfn=(880) +calls=324188160 0 +0 35660698704 +0 24314112000 +cob=(7) +cfi=(53) +cfn=(934) +calls=324188160 0 +0 72293986929 +0 3241881600 +cob=(7) +cfi=(53) +cfn=(1254) +calls=324188160 0 +0 6483763200 +0 1620940800 +cfn=(3078) std::_Rb_tree, std::_Select1st >, std::less, std::allocator > >::_M_insert_unique_(std::_Rb_tree_const_iterator >, std::pair const&) +calls=324188160 0 +0 80723019959 +0 972564480 +cob=(7) +cfi=(53) +cfn=(1380) +calls=324188160 0 +0 4862822400 +0 1620940800 +cob=(7) +cfi=(53) +cfn=(1380) +calls=324188160 0 +0 4862822400 +0 2593505280 + +fn=(3546) BTS::Fibre::Tract::Section::~Section() +0 1245600 + +fn=(3568) +0 57889 +cfn=(3570) std::vector > BTS::Fibre::Properties::Intrinsic_tpl::intrinsic_keys() +calls=4453 0 +0 12054271 +0 75701 +cfn=(3572) void std::__introsort_loop<__gnu_cxx::__normal_iterator > >, long>(__gnu_cxx::__normal_iterator > >, __gnu_cxx::__normal_iterator > >, long) +calls=4453 0 +0 93513 +0 13359 +cfn=(3574) void std::__final_insertion_sort<__gnu_cxx::__normal_iterator > > >(__gnu_cxx::__normal_iterator > >, __gnu_cxx::__normal_iterator > >) +calls=4453 0 +0 890600 +0 31171 +cfn=(3580) BTS::Fibre::Properties::Intrinsic_tpl::intrinsic_property(std::string const&) const +calls=4453 0 +0 574437 +0 13359 +cfn=(3580) +calls=4453 0 +0 561078 +0 26718 +cfn=(3582) MR::Math::Vector BTS::Fibre::Unzipper::unzip(BTS::Fibre::Tract const&) +calls=8906 0 +0 56388339 +0 1727764 +cob=(9) +cfi=(58) +cfn=(2626) +calls=8906 0 +0 1692140 +0 35624 +cfn=(2374) +calls=4453 0 +0 1367071 +0 35624 + +fn=(3574) +0 1500600 +cfn=(3576) void std::__insertion_sort<__gnu_cxx::__normal_iterator > > >(__gnu_cxx::__normal_iterator > >, __gnu_cxx::__normal_iterator > >) +calls=150060 0 +0 27224178 +0 750300 + +fn=(3582) +0 903959 +cfn=(3556) +calls=129137 0 +0 281167910 +0 387411 +cfn=(3584) +calls=129137 0 +0 32035065 +0 645685 +cfn=(3586) void BTS::Fibre::Unzipper::unzip_element(BTS::Fibre::Tract const&, MR::Math::Vector&, unsigned int&) +calls=129137 0 +0 487607465 +0 645685 + +fn=(3604) +0 18117 +cfn=(3360) +calls=1647 0 +0 6049858 +0 206596386 + +fn=(3704) +0 18 + +fn=(2994) +0 6900 +cob=(7) +cfi=(53) +cfn=(880) +calls=300 0 +0 33016 +0 3900 +cob=(4) +cfi=(113) +cfn=(1794) +calls=300 47 +0 20400 +0 2100 + +fn=(1156) global constructors keyed to section.cpp +0 6 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 24 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 319 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 344 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 324 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 319 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 323 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 9 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 315 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 18 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 24 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 319 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 344 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 324 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 319 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 323 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 9 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 12 + +fn=(1164) global constructors keyed to gaussian.cpp +0 5 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 24 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 407 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 319 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 344 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 324 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 319 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 323 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 + +fn=(1182) global constructors keyed to KMfilterCenters.cpp +0 7 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 319 +0 6 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 344 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 324 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 319 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 323 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 + +fn=(1198) global constructors keyed to model.cpp +0 5 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 24 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 319 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 344 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 324 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 407 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 319 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 323 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 + +fn=(1208) global constructors keyed to midpoint_in_cube.cpp +0 6 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 24 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 319 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 344 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 324 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 319 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 323 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 5 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 319 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 8 + +fn=(1214) global constructors keyed to distribution.cpp +0 3 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 24 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 + +fn=(1512) MR::Math::Matrix::load(std::string const&) +0 16 +cob=(7) +cfi=(53) +cfn=(722) +calls=1 0 +0 97 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1491 +0 22 +cob=(7) +cfi=(53) +cfn=(728) +calls=1 0 +0 708 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 2322 +0 7 +cob=(7) +cfi=(53) +cfn=(1526) +calls=1 0 +0 4123 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1938 +0 3 +cob=(7) +cfi=(53) +cfn=(728) +calls=1 0 +0 708 +0 4 +cob=(7) +cfi=(53) +cfn=(1550) +calls=1 0 +0 11370 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 2282 +0 7 +cob=(7) +cfi=(53) +cfn=(1630) +calls=1 0 +0 8 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 2154 +0 5 +cfn=(1632) MR::Math::operator>>(std::istream&, MR::Math::Matrix&) +calls=1 0 +0 787989 +0 9 +cob=(7) +cfi=(53) +cfn=(1880) +calls=1 0 +0 10007 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 2010 +0 2 +cob=(7) +cfi=(53) +cfn=(1940) +calls=1 0 +0 17 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1619 +0 5 +cob=(7) +cfi=(53) +cfn=(746) +calls=1 0 +0 12 +0 9 +cob=(7) +cfi=(53) +cfn=(1818) +calls=1 0 +0 58 +0 12 + +fn=(1946) BTS::Diffusion::Encoding::Set::set(MR::Math::Matrix const&) +0 6294 +cfn=(1948) +calls=14 0 +0 15593 +0 72 + +fn=(2434) void std::__uninitialized_fill_n_a(MR::Image::Axes::Axis*, unsigned long, MR::Image::Axes::Axis const&, std::allocator&) +0 65 +cob=(7) +cfi=(53) +cfn=(1254) +calls=4 0 +0 60 +0 12 +cob=(7) +cfi=(53) +cfn=(1254) +calls=4 0 +0 60 +0 24 + +fn=(2552) +0 40 +cob=(7) +cfi=(53) +cfn=(1880) +calls=2 0 +0 1284 +0 4 +cob=(7) +cfi=(53) +cfn=(1940) +calls=2 0 +0 34 +0 10 +cob=(7) +cfi=(53) +cfn=(746) +calls=2 0 +0 24 +0 24 +cob=(7) +cfi=(53) +cfn=(1818) +calls=2 0 +0 116 +0 60 +cob=(7) +cfi=(53) +cfn=(1308) +calls=2 0 +0 164 +0 12 +cob=(7) +cfi=(53) +cfn=(1308) +calls=1 0 +0 82 +0 25 + +fn=(2786) BTS::Image::Observed::Buffer::new_voxel(BTS::Image::Coord const&) +0 81 +cfn=(2788) BTS::Image::Observed::Voxel::Voxel(BTS::Image::Observed::Buffer&, BTS::Image::Coord const&) +calls=27 0 +0 15370 +0 81 + +fn=(2792) BTS::Image::Observed::Voxel::Voxel(BTS::Image::Observed::Voxel const&) +0 864 +cob=(4) +cfi=(113) +cfn=(1794) +calls=27 47 +0 648 +0 594 + +fn=(2858) MR::Math::Matrix::Matrix(unsigned long, unsigned long) +0 7105 +cob=(9) +cfi=(58) +cfn=(1868) +calls=245 0 +0 100407 +0 1225 + +fn=(2862) +0 4392 +cob=(9) +cfi=(58) +cfn=(1868) +calls=549 0 +0 147975 +0 7137 + +fn=(2978) +0 7680 +cob=(6) +cfi=(131) /build/buildd/eglibc-2.11.1/math/w_pow.c +cfn=(2984) pow +calls=300 29 +0 75780 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1382 +0 2640 +cob=(7) +cfi=(53) +cfn=(1142) +calls=60 0 +0 4860 +0 300 +cob=(7) +cfi=(53) +cfn=(880) +calls=60 0 +0 6600 +0 1320 +cob=(7) +cfi=(53) +cfn=(1142) +calls=60 0 +0 4860 +0 300 +cob=(7) +cfi=(53) +cfn=(880) +calls=60 0 +0 6600 +0 1320 +cob=(7) +cfi=(53) +cfn=(1142) +calls=60 0 +0 4860 +0 300 +cob=(7) +cfi=(53) +cfn=(880) +calls=60 0 +0 6600 +0 1380 +cfn=(2994) +calls=60 0 +0 13260 +0 420 +cob=(7) +cfi=(53) +cfn=(1142) +calls=60 0 +0 4860 +0 300 +cob=(7) +cfi=(53) +cfn=(880) +calls=60 0 +0 6600 +0 1320 +cob=(7) +cfi=(53) +cfn=(1142) +calls=60 0 +0 4860 +0 13740 +cfn=(2862) +calls=60 0 +0 13980 +0 17160 +cob=(7) +cfi=(53) +cfn=(1142) +calls=300 0 +0 24300 +0 1140 +cob=(7) +cfi=(53) +cfn=(1142) +calls=60 0 +0 7072 +0 1020 +cob=(7) +cfi=(53) +cfn=(880) +calls=60 0 +0 6600 +0 1260 +cfn=(2992) +calls=60 0 +0 70446 +0 420 +cfn=(2992) +calls=60 0 +0 51498 +0 420 +cfn=(2992) +calls=60 0 +0 119132 +0 420 +cfn=(2992) +calls=60 0 +0 27303 +0 60 + +fn=(3000) BTS::Image::Expected::Buffer::factory(std::string const&, BTS::Triple const&, BTS::Triple const&, BTS::Diffusion::Model const&, unsigned int, unsigned int, double, BTS::Triple const&, bool, double) +0 19 +cob=(7) +cfi=(53) +cfn=(2138) +calls=1 0 +0 44 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1506 +0 14 +cob=(7) +cfi=(53) +cfn=(2138) +calls=1 0 +0 44 +0 5 +cob=(7) +cfi=(53) +cfn=(2138) +calls=1 0 +0 64 +0 4 +cob=(7) +cfi=(53) +cfn=(880) +calls=1 0 +0 383 +0 13 +cfn=(3006) +calls=1 0 +0 36826 +0 1 + +fn=(3064) BTS::Image::Expected::Quartic::Buffer::dims() const +0 2 + +fn=(3106) BTS::Fibre::Base::Reader::open(std::string const&) +0 12 +cob=(7) +cfi=(53) +cfn=(1260) +calls=1 0 +0 28 +0 35 +cfn=(3108) MR::DWI::Tractography::Reader::open(std::string const&, MR::DWI::Tractography::Properties&) +calls=1 0 +0 63571 +0 6 +cfn=(2618) +calls=1 0 +0 11 +0 10 +cfn=(2564) +calls=1 0 +0 1161 +0 33 +cfn=(3174) std::basic_string, std::allocator > std::operator+, std::allocator >(std::basic_string, std::allocator > const&, char const*) +calls=1 0 +0 400 +0 4 +cob=(7) +cfi=(53) +cfn=(1254) +calls=1 0 +0 20 +0 4 +cob=(4) +cfi=(94) +cfn=(1296) +calls=1 37 +0 10 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1738 +0 8 +cob=(7) +cfi=(53) +cfn=(1380) +calls=1 0 +0 15 +0 7 +cob=(7) +cfi=(53) +cfn=(1550) +calls=1 0 +0 1097 +0 7 +cob=(7) +cfi=(53) +cfn=(1630) +calls=1 0 +0 8 +0 4 +cfn=(3180) BTS::Fibre::Properties::Extended::read_header(std::basic_ifstream >&) +calls=1 0 +0 9832 +0 3 +cfn=(2366) +calls=1 0 +0 248 +0 2 +cfn=(3198) BTS::Fibre::Properties::Header::~Header() +calls=1 0 +0 137 +0 2 +cob=(7) +cfi=(53) +cfn=(1380) +calls=1 0 +0 100 +0 2 +cfn=(3200) MR::DWI::Tractography::Properties::~Properties() +calls=1 0 +0 820 +0 8 + +fn=(3108) +0 16 +cfn=(2618) +calls=1 0 +0 11 +0 15 +cfn=(3110) MR::DWI::Tractography::ROISet::clear() +calls=1 0 +0 21 +0 2 +cfn=(3110) +calls=1 0 +0 21 +0 2 +cfn=(3110) +calls=1 0 +0 21 +0 11 +cfn=(2618) +calls=1 0 +0 11 +0 15 +cob=(7) +cfi=(53) +cfn=(722) +calls=1 0 +0 97 +0 22 +cob=(7) +cfi=(53) +cfn=(728) +calls=1 0 +0 708 +0 7 +cob=(7) +cfi=(53) +cfn=(1526) +calls=1 0 +0 265 +0 3 +cob=(7) +cfi=(53) +cfn=(728) +calls=1 0 +0 708 +0 4 +cob=(11) +cfi=(60) +cfn=(2168) +calls=1 0 +0 3344 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1096 +0 29 +cob=(11) +cfi=(60) +cfn=(2202) +calls=1 0 +0 3546 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 992 +0 14 +cob=(11) +cfi=(60) +cfn=(2202) +calls=7 0 +0 21528 +0 65 +cob=(7) +cfi=(53) +cfn=(2220) +calls=7 0 +0 1770 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1516 +0 42 +cob=(7) +cfi=(53) +cfn=(1326) +calls=7 0 +0 84 +0 84 +cob=(4) +cfi=(124) +cfn=(2234) +calls=7 47 +0 84 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1724 +0 177 +cob=(4) +cfi=(124) +cfn=(2234) +calls=59 47 +0 708 +0 299 +cob=(7) +cfi=(53) +cfn=(2138) +calls=7 0 +0 350 +0 84 +cob=(7) +cfi=(53) +cfn=(1308) +calls=7 0 +0 574 +0 35 +cob=(7) +cfi=(53) +cfn=(2138) +calls=7 0 +0 310 +0 42 +cob=(7) +cfi=(53) +cfn=(2138) +calls=7 0 +0 319 +0 18 +cob=(7) +cfi=(53) +cfn=(1260) +calls=1 0 +0 28 +0 25 +cob=(7) +cfi=(53) +cfn=(2138) +calls=6 0 +0 318 +0 233 +cob=(7) +cfi=(53) +cfn=(1260) +calls=5 0 +0 140 +0 9 +cob=(11) +cfi=(60) +cfn=(2454) +calls=1 0 +0 2002 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 984 +0 26 +cob=(7) +cfi=(53) +cfn=(1254) +calls=5 0 +0 1052 +0 15 +cob=(7) +cfi=(53) +cfn=(1254) +calls=5 0 +0 75 +0 20 +cfn=(2392) +calls=5 0 +0 1581 +0 15 +cob=(7) +cfi=(53) +cfn=(1380) +calls=5 0 +0 35 +0 10 +cob=(7) +cfi=(53) +cfn=(1380) +calls=5 0 +0 75 +0 36 +cob=(7) +cfi=(53) +cfn=(722) +calls=1 0 +0 97 +0 22 +cob=(7) +cfi=(53) +cfn=(728) +calls=1 0 +0 708 +0 16 +cob=(7) +cfi=(53) +cfn=(492) +calls=1 0 +0 39 +0 9 +cob=(7) +cfi=(53) +cfn=(1752) +calls=1 0 +0 196 +0 6 +cob=(7) +cfi=(53) +cfn=(1758) +calls=1 0 +0 21 +0 3 +cob=(7) +cfi=(53) +cfn=(728) +calls=1 0 +0 708 +0 6 +cob=(7) +cfi=(53) +cfn=(2504) +calls=1 0 +0 557 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 2395 +0 6 +cob=(7) +cfi=(53) +cfn=(2272) +calls=1 0 +0 500 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1664 +0 3 +cob=(7) +cfi=(53) +cfn=(2138) +calls=1 0 +0 52 +0 5 +cob=(7) +cfi=(53) +cfn=(1260) +calls=1 0 +0 123 +0 5 +cob=(7) +cfi=(53) +cfn=(1550) +calls=1 0 +0 1274 +0 8 +cob=(7) +cfi=(53) +cfn=(1630) +calls=1 0 +0 8 +0 9 +cob=(7) +cfi=(53) +cfn=(3150) +calls=1 0 +0 4647 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1754 +0 13 +cob=(7) +cfi=(53) +cfn=(1380) +calls=1 0 +0 100 +0 5 +cob=(7) +cfi=(53) +cfn=(746) +calls=1 0 +0 12 +0 11 +cob=(7) +cfi=(53) +cfn=(1818) +calls=1 0 +0 58 +0 6 +cfn=(2552) +calls=1 0 +0 908 +0 18 +cob=(7) +cfi=(53) +cfn=(1308) +calls=1 0 +0 82 +0 44 + +fn=(3180) +0 11 +cfn=(3182) BTS::Fibre::Properties::Extended::read_preamble(std::basic_ifstream >&) +calls=1 0 +0 4258 +0 23 +cob=(7) +cfi=(53) +cfn=(1638) +calls=1 0 +0 557 +0 7 +cob=(7) +cfi=(53) +cfn=(722) +calls=1 0 +0 97 +0 25 +cob=(7) +cfi=(53) +cfn=(728) +calls=1 0 +0 708 +0 16 +cob=(7) +cfi=(53) +cfn=(492) +calls=1 0 +0 39 +0 9 +cob=(7) +cfi=(53) +cfn=(1752) +calls=1 0 +0 374 +0 6 +cob=(7) +cfi=(53) +cfn=(1758) +calls=1 0 +0 21 +0 3 +cob=(7) +cfi=(53) +cfn=(728) +calls=1 0 +0 708 +0 14 +cob=(7) +cfi=(53) +cfn=(1638) +calls=1 0 +0 605 +0 8 +cob=(7) +cfi=(53) +cfn=(1638) +calls=2 0 +0 1261 +0 14 +cob=(7) +cfi=(53) +cfn=(1380) +calls=1 0 +0 100 +0 10 +cob=(7) +cfi=(53) +cfn=(1380) +calls=1 0 +0 100 +0 5 +cob=(7) +cfi=(53) +cfn=(746) +calls=1 0 +0 12 +0 11 +cob=(7) +cfi=(53) +cfn=(1818) +calls=1 0 +0 58 +0 2 +cob=(7) +cfi=(53) +cfn=(1380) +calls=1 0 +0 100 +0 23 +cfn=(2358) +calls=2 0 +0 645 +0 2 + +fn=(3220) BTS::Fibre::Properties::Header::Header(BTS::Fibre::Properties::Header const&) +0 25 +cob=(7) +cfi=(53) +cfn=(880) +calls=1 0 +0 110 +0 22 +cob=(7) +cfi=(53) +cfn=(1254) +calls=2 0 +0 40 +0 20 + +fn=(3298) +0 1459182768 +cob=(7) +cfi=(53) +cfn=(1254) +calls=81061197 0 +0 1621223940 +0 405305985 +cfn=(3078) +calls=81061197 0 +0 20184566834 +0 243183591 +cob=(7) +cfi=(53) +cfn=(1380) +calls=81061197 0 +0 1215917955 +0 648493856 + +fn=(3300) BTS::Fibre::Set::~Set() +0 59337 +cfn=(3302) +calls=6593 0 +0 369208 +0 65930 +cfn=(2618) +calls=6593 0 +0 72523 +0 39558 +cfn=(3230) +calls=6593 0 +0 1137505 +0 26390 +cfn=(3302) +calls=2 0 +0 112 +0 32 +cfn=(3274) +calls=8 0 +0 6384 +0 32 +cob=(7) +cfi=(53) +cfn=(1142) +calls=2 0 +0 212 +0 6 +cfn=(2618) +calls=2 0 +0 1788 +0 12 +cfn=(3230) +calls=2 0 +0 430 +0 8 + +fn=(3314) non-virtual thunk to BTS::Image::Expected::Quartic::Buffer::num_encodings() const +0 82375696 +cfn=(3316) +calls=41187848 0 +0 247127088 + +fn=(3338) std::vector >::reserve(unsigned long) +0 152 +cob=(7) +cfi=(53) +cfn=(880) +calls=4 0 +0 131574383 +0 24 +cfn=(3340) BTS::Fibre::Tract::Section* std::__uninitialized_copy_a(BTS::Fibre::Tract::Section*, BTS::Fibre::Tract::Section*, BTS::Fibre::Tract::Section*, std::allocator&) +calls=4 0 +0 16 +0 76 + +fn=(3346) std::_Rb_tree, std::less, std::allocator > > > >, std::_Select1st, std::less, std::allocator > > > > >, std::less, std::allocator, std::less, std::allocator > > > > > >::_M_insert_(std::_Rb_tree_node_base const*, std::_Rb_tree_node_base const*, std::pair, std::less, std::allocator > > > > const&) +0 26 +cob=(7) +cfi=(53) +cfn=(880) +calls=2 0 +0 639 +0 38 +cob=(7) +cfi=(53) +cfn=(2402) +calls=2 0 +0 60 +0 22 + +fn=(3368) +0 99846 +cob=(9) +cfi=(58) +cfn=(1868) +calls=2 0 +0 638 +0 10 + +fn=(3382) BTS::Image::Expected::Buffer_tpl::get_neighbourhood(BTS::Triple) +0 996480 +cob=(6) +cfi=(138) /build/buildd/eglibc-2.11.1/math/../sysdeps/ieee754/dbl-64/s_floor.c +cfn=(3388) floor +calls=83040 44 +0 2999044 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1422 +0 415200 +cob=(6) +cfi=(138) +cfn=(3388) +calls=83040 44 +0 3022106 +0 498240 +cob=(6) +cfi=(138) +cfn=(3388) +calls=83040 44 +0 3021468 +0 747360 +cfn=(3390) +calls=83040 0 +0 8398253 +0 913950 +cfn=(3400) +calls=102 0 +0 5954077 +0 306 +cfn=(3390) +calls=102 0 +0 10524 +0 612 +cfn=(3398) +calls=102 0 +0 1122 +0 1122 +cfn=(3446) std::_Rb_tree, std::less, std::allocator >::_M_copy(std::_Rb_tree_node const*, std::_Rb_tree_node*) +calls=102 0 +0 198290 +0 3646 +cfn=(3398) +calls=102 0 +0 84014 +0 102 + +fn=(3392) +0 1827 +cob=(7) +cfi=(53) +cfn=(2812) +calls=76 0 +0 1272 +0 645 +cfn=(3396) std::_Rb_tree, std::allocator > >, std::_Select1st, std::allocator > > >, std::less, std::allocator, std::allocator > > > >::_M_insert_(std::_Rb_tree_node_base const*, std::_Rb_tree_node_base const*, std::pair, std::allocator > > const&) +calls=53 0 +0 11955 +0 899 +cfn=(3394) std::_Rb_tree, std::allocator > >, std::_Select1st, std::allocator > > >, std::less, std::allocator, std::allocator > > > >::_M_insert_unique(std::pair, std::allocator > > const&) +calls=1 0 +0 467 +0 763 +cfn=(3396) +calls=48 0 +0 11376 +0 48 + +fn=(3438) +0 10914 +cob=(7) +cfi=(53) +cfn=(880) +calls=102 0 +0 12082 +0 1428 +cob=(7) +cfi=(53) +cfn=(880) +calls=714 0 +0 88322 +0 8160 +cob=(7) +cfi=(53) +cfn=(2402) +calls=816 0 +0 41640 +0 13362 + +fn=(3446) +0 831420 +cob=(7) +cfi=(53) +cfn=(880) +calls=83142 0 +0 9155443 +0 1330272 +cfn=(3447) std::_Rb_tree, std::less, std::allocator >::_M_copy(std::_Rb_tree_node const*, std::_Rb_tree_node*)'2 +calls=83142 0 +0 33913001 +0 665136 +cob=(7) +cfi=(53) +cfn=(880) +calls=83142 0 +0 9156203 +0 214782 +cob=(7) +cfi=(53) +cfn=(880) +calls=107391 0 +0 11826603 +0 2901353 +cfn=(3447) +calls=106106 0 +0 21229613 +0 1450232 + +fn=(3447) +0 2981660 +cob=(7) +cfi=(53) +cfn=(880) +calls=298166 0 +0 32838335 +0 3988880 +cfn=(3447) +calls=102722 0 +0 18067905 +0 1341520 +cob=(7) +cfi=(53) +cfn=(880) +calls=86075 0 +0 9478254 +0 14440 +cob=(7) +cfi=(53) +cfn=(880) +calls=7220 0 +0 795368 +0 1237619 +cfn=(3447) +calls=6196 0 +0 881073 +0 2466538 + +fn=(3452) BTS::Image::Container::Voxel::Voxel(BTS::Image::Container::Voxel const&) +0 16425 + +fn=(3462) +0 9899 +cfn=(3466) +calls=1 0 +0 302 +0 15 +cfn=(3466) +calls=3 0 +0 906 +0 6989 +cob=(7) +cfi=(53) +cfn=(880) +calls=365 0 +0 273198 +0 2190 +cfn=(3464) +calls=365 0 +0 40008566 +0 4380 + +fn=(3466) +0 42570640 +cfn=(3468) std::vector, std::allocator > >::operator=(std::vector, std::allocator > > const&) +calls=1064266 0 +0 286326374 +0 10642660 +cfn=(3468) +calls=2128532 0 +0 572810668 +0 25542384 + +fn=(3518) BTS::Coord::Tensor_tpl* std::__uninitialized_copy_a<__gnu_cxx::__normal_iterator const*, std::vector, std::allocator > > >, BTS::Coord::Tensor_tpl*, BTS::Coord::Tensor_tpl >(__gnu_cxx::__normal_iterator const*, std::vector, std::allocator > > >, __gnu_cxx::__normal_iterator const*, std::vector, std::allocator > > >, BTS::Coord::Tensor_tpl*, std::allocator >&) +0 1870260 +cfn=(3472) BTS::Coord::Tensor_tpl::Tensor_tpl(BTS::Coord::Tensor_tpl const&) +calls=200385 0 +0 3261110391 +0 1536285 + +fn=(3602) std::vector > BTS::Fibre::Properties::Intrinsic_tpl::intrinsic_keys >() +0 62586 +cfn=(3296) T.2918 +calls=3294 0 +0 2078514 +0 9882 +cfn=(2618) +calls=3294 0 +0 36234 +0 19764 +cob=(7) +cfi=(53) +cfn=(2824) +calls=3294 0 +0 59292 +0 36234 +cfn=(2358) +calls=3294 0 +0 768478 +0 9882 +cfn=(3300) +calls=3294 0 +0 744444 +0 23058 + +fn=(3686) std::_Rb_tree, std::allocator > >, std::_Select1st, std::allocator > > >, std::less, std::allocator, std::allocator > > > >::_M_erase(std::_Rb_tree_node, std::allocator > > >*) +0 11 + +fn=(3690) BTS::Image::Observed::Buffer::~Buffer() +0 16 +cfn=(2618) +calls=1 0 +0 11 +0 6 +cfn=(2628) std::_Rb_tree, std::_Select1st >, std::less, std::allocator > >::_M_erase(std::_Rb_tree_node >*) +calls=1 0 +0 15 +0 4 + +fn=(1096) global constructors keyed to curvature.cpp +0 6 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 24 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 319 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 344 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 324 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 319 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 323 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 407 +0 5 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 310 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 8 + +fn=(1104) global constructors keyed to base_intensity.cpp +0 5 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 24 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 319 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 344 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 324 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 319 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 323 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 + +fn=(1128) std::vector >::_M_insert_aux(__gnu_cxx::__normal_iterator > >, MR::Argument const&) +0 300 +cob=(7) +cfi=(53) +cfn=(880) +calls=15 0 +0 1735 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1299 +0 750 + +fn=(1174) global constructors keyed to log.cpp +0 6 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 24 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 319 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 344 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 324 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 319 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 323 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 5 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 323 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 5 + +fn=(1212) global constructors keyed to end_in_sphere.cpp +0 6 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 24 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 319 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 344 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 324 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 319 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 323 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 5 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 318 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 8 + +fn=(1218) global constructors keyed to KCtree.cpp +0 7 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 319 +0 6 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 344 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 324 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 319 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 323 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 2 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 24 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 + +fn=(1632) +0 842 +cob=(7) +cfi=(53) +cfn=(1638) +calls=62 0 +0 40729 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 2531 +0 926 +cob=(7) +cfi=(53) +cfn=(1702) +calls=61 0 +0 3225 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1500 +0 305 +cob=(7) +cfi=(53) +cfn=(1708) +calls=61 0 +0 13781 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1434 +0 305 +cob=(7) +cfi=(53) +cfn=(1726) +calls=61 0 +0 2989 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1722 +0 488 +cob=(7) +cfi=(53) +cfn=(1732) +calls=61 0 +0 3111 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1690 +0 549 +cob=(7) +cfi=(53) +cfn=(1708) +calls=61 0 +0 13803 +0 183 +cob=(7) +cfi=(53) +cfn=(1260) +calls=61 0 +0 7503 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1506 +0 854 +cob=(7) +cfi=(53) +cfn=(880) +calls=61 0 +0 6853 +0 366 +cob=(7) +cfi=(53) +cfn=(880) +calls=61 0 +0 6837 +0 1333 +cob=(7) +cfi=(53) +cfn=(722) +calls=61 0 +0 5917 +0 1708 +cob=(7) +cfi=(53) +cfn=(728) +calls=61 0 +0 43188 +0 976 +cob=(7) +cfi=(53) +cfn=(492) +calls=61 0 +0 2379 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1459 +0 549 +cob=(7) +cfi=(53) +cfn=(1752) +calls=61 0 +0 12966 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1514 +0 366 +cob=(7) +cfi=(53) +cfn=(1758) +calls=61 0 +0 1281 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 2194 +0 183 +cob=(7) +cfi=(53) +cfn=(728) +calls=61 0 +0 43188 +0 732 +cob=(7) +cfi=(53) +cfn=(1764) +calls=61 0 +0 2806 +0 732 +cob=(7) +cfi=(53) +cfn=(1764) +calls=244 0 +0 411346 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1656 +0 2196 +cfn=(1788) std::vector >::_M_insert_aux(__gnu_cxx::__normal_iterator > >, double const&) +calls=183 0 +0 73905 +0 2247 +cob=(7) +cfi=(53) +cfn=(746) +calls=61 0 +0 732 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1483 +0 671 +cob=(7) +cfi=(53) +cfn=(1818) +calls=61 0 +0 5928 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1515 +0 3504 +cob=(7) +cfi=(53) +cfn=(1326) +calls=61 0 +0 732 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1538 +0 857 +cob=(7) +cfi=(53) +cfn=(1142) +calls=61 0 +0 4941 +0 122 +cob=(7) +cfi=(53) +cfn=(1142) +calls=61 0 +0 4941 +0 183 +cob=(7) +cfi=(53) +cfn=(1142) +calls=61 0 +0 4941 +0 127 +cob=(7) +cfi=(53) +cfn=(1142) +calls=1 0 +0 114 +0 42 +cfn=(1742) std::vector >, false>, std::allocator >, false> > >::_M_insert_aux(__gnu_cxx::__normal_iterator >, false>*, std::vector >, false>, std::allocator >, false> > > >, MR::RefPtr >, false> const&) +calls=7 0 +0 4123 +0 13 +cob=(9) +cfi=(58) +cfn=(1868) +calls=1 0 +0 2575 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 859 +0 372 +cob=(7) +cfi=(53) +cfn=(1308) +calls=61 0 +0 5002 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1682 +0 1159 +cob=(7) +cfi=(53) +cfn=(1308) +calls=61 0 +0 5002 +0 427 +cob=(7) +cfi=(53) +cfn=(1308) +calls=61 0 +0 5002 +0 549 + +fn=(2294) +0 90 +cob=(7) +cfi=(53) +cfn=(880) +calls=3 0 +0 404 +0 45 +cob=(4) +cfi=(113) +cfn=(1794) +calls=3 47 +0 146 +0 24 +cob=(4) +cfi=(113) +cfn=(1794) +calls=3 47 +0 72 +0 11 +cob=(7) +cfi=(53) +cfn=(1142) +calls=2 0 +0 162 +0 44 + +fn=(2432) +0 38 +cob=(7) +cfi=(53) +cfn=(880) +calls=1 0 +0 166 +0 11 +cfn=(2434) +calls=1 0 +0 221 +0 6 +cfn=(2436) +calls=1 0 +0 21 +0 8 +cfn=(2436) +calls=1 0 +0 21 +0 31 + +fn=(2564) +0 72 +cob=(7) +cfi=(53) +cfn=(880) +calls=6 0 +0 676 +0 42 +cob=(7) +cfi=(53) +cfn=(1254) +calls=6 0 +0 120 +0 18 +cob=(7) +cfi=(53) +cfn=(1254) +calls=6 0 +0 120 +0 66 +cfn=(2565) std::_Rb_tree, std::_Select1st >, std::less, std::allocator > >::_M_copy(std::_Rb_tree_node > const*, std::_Rb_tree_node >*)'2 +calls=6 0 +0 5249 +0 48 +cob=(7) +cfi=(53) +cfn=(880) +calls=6 0 +0 889 +0 2 +cob=(7) +cfi=(53) +cfn=(880) +calls=1 0 +0 166 +0 49 +cob=(7) +cfi=(53) +cfn=(1254) +calls=7 0 +0 140 +0 21 +cob=(7) +cfi=(53) +cfn=(1254) +calls=7 0 +0 140 +0 72 +cfn=(2565) +calls=4 0 +0 1144 +0 86 + +fn=(2565) +0 252 +cob=(7) +cfi=(53) +cfn=(880) +calls=21 0 +0 3481 +0 147 +cob=(7) +cfi=(53) +cfn=(1254) +calls=21 0 +0 420 +0 63 +cob=(7) +cfi=(53) +cfn=(1254) +calls=21 0 +0 420 +0 183 +cfn=(2565) +calls=9 0 +0 5072 +0 84 +cob=(7) +cfi=(53) +cfn=(880) +calls=3 0 +0 498 +0 4 +cob=(7) +cfi=(53) +cfn=(880) +calls=2 0 +0 332 +0 35 +cob=(7) +cfi=(53) +cfn=(1254) +calls=5 0 +0 100 +0 15 +cob=(7) +cfi=(53) +cfn=(1254) +calls=5 0 +0 100 +0 48 +cfn=(2565) +calls=2 0 +0 494 +0 211 + +fn=(2616) +0 40 +cob=(7) +cfi=(53) +cfn=(1380) +calls=8 0 +0 56 +0 32 +cob=(7) +cfi=(53) +cfn=(1380) +calls=8 0 +0 56 + +fn=(2632) MR::Image::Voxel::Voxel(MR::Image::Header const&) +0 24 +cob=(7) +cfi=(53) +cfn=(880) +calls=1 0 +0 126 +0 26 +cob=(11) +cfi=(60) +cfn=(2638) +calls=1 0 +0 57609 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1144 +0 24 + +fn=(2784) +0 283147 +cfn=(2786) +calls=27 0 +0 15532 +0 131840 +cfn=(2792) +calls=27 0 +0 2106 +0 108 +cfn=(2794) std::_Rb_tree, std::_Select1st >, std::less, std::allocator > >::_M_insert_unique_(std::_Rb_tree_const_iterator >, std::pair const&) +calls=27 0 +0 16891 +0 81 +cfn=(2800) BTS::Image::Observed::Voxel::~Voxel() +calls=27 0 +0 189 +0 54 +cfn=(2800) +calls=27 0 +0 189 +0 81 +cfn=(2802) +calls=27 0 +0 12723 +0 486 +cfn=(2800) +calls=27 0 +0 3510 +0 102 + +fn=(2790) BTS::Image::Observed::Buffer::num_encodings() const +0 108 + +fn=(2800) +0 513 +cob=(7) +cfi=(53) +cfn=(1142) +calls=27 0 +0 3321 +0 54 + +fn=(3010) +0 56 +cob=(7) +cfi=(53) +cfn=(880) +calls=2 0 +0 6271 +0 1612 +cob=(9) +cfi=(58) +cfn=(1868) +calls=122 0 +0 44541 +0 11166 + +fn=(3048) BTS::Prob::Likelihood::factory(std::string const&, BTS::Image::Observed::Buffer const&, BTS::Image::Expected::Buffer*, double, bool, double) +0 13 +cob=(7) +cfi=(53) +cfn=(2138) +calls=1 0 +0 59 +0 4 +cob=(7) +cfi=(53) +cfn=(880) +calls=1 0 +0 393 +0 8 +cfn=(3050) BTS::Prob::Likelihood::ImageDiff::ImageDiff(BTS::Image::Observed::Buffer const&, BTS::Image::Expected::Buffer*, double, bool, double) +calls=1 0 +0 89393 +0 10 + +fn=(3050) +0 17 +cfn=(3052) BTS::Image::Observed::Buffer::Buffer(BTS::Image::Observed::Buffer const&) +calls=1 0 +0 19378 +0 3 +cfn=(3056) BTS::Image::Expected::Quartic::Buffer::clone() const +calls=1 0 +0 30524 +0 17 +cfn=(3062) BTS::Image::Expected::Buffer::dims_match(BTS::Image::Observed::Buffer const&) +calls=1 0 +0 25 +0 5 +cfn=(3066) +calls=1 0 +0 39396 +0 3 +cfn=(3076) BTS::Image::Expected::Quartic::Buffer::zero() +calls=1 0 +0 17 +0 8 + +fn=(3068) +0 14 +cfn=(3070) BTS::Image::Observed::Voxel::b0() const +calls=1 0 +0 1433 +0 52 +cfn=(3070) +calls=26 0 +0 37258 +0 108 +cob=(7) +cfi=(53) +cfn=(2824) +calls=27 0 +0 417 +0 93 + +fn=(3070) +0 18468 +cfn=(3072) BTS::Image::Observed::Voxel::encoding(unsigned int) const +calls=1647 0 +0 13176 +0 7047 + +fn=(3080) std::_Rb_tree, std::_Select1st >, std::less, std::allocator > >::_M_insert_unique(std::pair const&) +0 12173565028 +cfn=(3082) std::_Rb_tree, std::_Select1st >, std::less, std::allocator > >::_M_insert_(std::_Rb_tree_node_base const*, std::_Rb_tree_node_base const*, std::pair const&) +calls=529285436 0 +0 105412270717 +0 2117141744 + +fn=(3086) +0 108812 + +fn=(3092) BTS::Fibre::Set::load(std::string const&) +0 19 +cob=(7) +cfi=(53) +cfn=(3098) +calls=1 0 +0 3056 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1962 +0 18 +cob=(7) +cfi=(53) +cfn=(3098) +calls=1 0 +0 1828 +0 4 +cfn=(3104) void BTS::Fibre::Set::load_tpl >(std::string const&, BTS::Fibre::Base::Reader&) +calls=1 0 +0 202935 +0 2 +cfn=(3276) BTS::Fibre::Base::Reader::~Reader() +calls=1 0 +0 7843 +0 14 +cob=(7) +cfi=(53) +cfn=(1708) +calls=1 0 +0 206 +0 8 +cob=(7) +cfi=(53) +cfn=(1380) +calls=1 0 +0 100 +0 7 + +fn=(3174) +0 6 +cob=(7) +cfi=(53) +cfn=(1254) +calls=1 0 +0 20 +0 2 +cob=(4) +cfi=(69) +cfn=(642) +calls=1 26 +0 16 +0 4 +cob=(7) +cfi=(53) +cfn=(1686) +calls=1 0 +0 347 +0 5 + +fn=(3230) +0 5814792346 +cfn=(3231) std::_Rb_tree, std::_Select1st >, std::less, std::allocator > >::_M_erase(std::_Rb_tree_node >*)'2 +calls=528617486 0 +0 5814792346 +0 126976071 +cfn=(3231) +calls=42325357 0 +0 465578927 +0 1712828529 +cob=(7) +cfi=(53) +cfn=(1380) +calls=570942843 0 +0 57069054090 +0 1712828529 +cob=(7) +cfi=(53) +cfn=(1142) +calls=570942843 0 +0 46246370283 +0 3256355630 + +fn=(3231) +0 6280371273 + +fn=(3272) BTS::Fibre::Properties::Extended::add_row(BTS::Fibre::Properties const&) +0 96 +cob=(7) +cfi=(53) +cfn=(1380) +calls=4 0 +0 28 +0 36 +cfn=(2374) +calls=4 0 +0 60 +0 52 + +fn=(3294) unsigned int BTS::Fibre::Properties::Intrinsic::num_intrinsic_keys >() +0 46186 +cfn=(3296) +calls=3299 0 +0 2082374 +0 9897 +cfn=(2618) +calls=3299 0 +0 36289 +0 23093 +cob=(7) +cfi=(53) +cfn=(2824) +calls=3299 0 +0 59382 +0 19794 +cfn=(3300) +calls=3299 0 +0 1025989 +0 19794 + +fn=(3304) +0 35688 +cfn=(3224) +calls=4461 0 +0 6630732 +0 35688 +cob=(7) +cfi=(53) +cfn=(2824) +calls=8922 0 +0 133830 +0 35688 +cfn=(3274) +calls=4461 0 +0 2462472 +0 26766 + +fn=(3356) +0 30 +cob=(7) +cfi=(53) +cfn=(880) +calls=2 0 +0 334 +0 60 +cob=(7) +cfi=(53) +cfn=(2402) +calls=2 0 +0 60 +0 26 + +fn=(3394) +0 14 +cfn=(3396) +calls=1 0 +0 441 +0 12 + +fn=(3396) +0 1182 +cob=(7) +cfi=(53) +cfn=(880) +calls=54 0 +0 6228 +0 96 +cob=(7) +cfi=(53) +cfn=(880) +calls=48 0 +0 5280 +0 2142 +cob=(7) +cfi=(53) +cfn=(2402) +calls=102 0 +0 7277 +0 1567 + +fn=(3408) BTS::Image::Expected::Quartic::Voxel::Voxel(BTS::Image::Expected::Quartic::Buffer&, BTS::Image::Coord const&) +0 1659 +cfn=(3410) +calls=237 0 +0 3575488 +0 1896 + +fn=(3416) BTS::Triple::invalidate() +0 1053636168 +cfn=(3418) +calls=81048936 0 +0 243146808 +0 162097872 +cfn=(3418) +calls=81048936 0 +0 243146808 +0 810489360 +cfn=(3418) +calls=81048936 0 +0 243146808 +0 162097872 +cfn=(3418) +calls=81048936 0 +0 243146808 +0 810489360 +cfn=(3418) +calls=81048936 0 +0 243146808 +0 162097872 +cfn=(3418) +calls=81048936 0 +0 243146808 +0 405244680 + +fn=(3422) +0 40527 +cfn=(3416) +calls=237 0 +0 14694 +0 22989 +cfn=(3416) +calls=237 0 +0 14694 +0 8769 + +fn=(3456) std::_Rb_tree >, std::_Select1st > >, std::less, std::allocator > > >::_M_insert_unique(std::pair > const&) +0 56 +cfn=(3458) +calls=4 0 +0 1288 +0 48 + +fn=(3472) +0 3629208 +cfn=(3224) +calls=329928 0 +0 476787236 +0 1319712 +cfn=(3224) +calls=329928 0 +0 477854547 +0 989784 +cfn=(3224) +calls=329928 0 +0 477931151 +0 31013232 +cfn=(3268) +calls=329928 0 +0 753519770 +0 1319712 +cfn=(3268) +calls=329928 0 +0 760359690 +0 989784 +cfn=(3268) +calls=329928 0 +0 760364852 +0 989784 +cfn=(3466) +calls=329928 0 +0 294513712 +0 2309496 +cfn=(3466) +calls=329928 0 +0 294634899 +0 2309496 +cfn=(3466) +calls=329928 0 +0 294682316 +0 1979568 +cfn=(3274) +calls=329928 0 +0 263282544 +0 659856 +cfn=(3274) +calls=329928 0 +0 263282544 +0 659856 +cfn=(3274) +calls=329928 0 +0 263282544 +0 2639424 + +fn=(3504) std::_Rb_tree >, std::_Select1st > >, std::less, std::allocator > > >::_M_insert_(std::_Rb_tree_node_base const*, std::_Rb_tree_node_base const*, std::pair > const&) +0 4968 +cob=(7) +cfi=(53) +cfn=(880) +calls=196 0 +0 34907 +0 338 +cob=(7) +cfi=(53) +cfn=(880) +calls=169 0 +0 30594 +0 14965 +cob=(7) +cfi=(53) +cfn=(2402) +calls=365 0 +0 26531 +0 6663 + +fn=(3530) BTS::Coord::Tensor_tpl::Tensor_tpl() +0 8023656960 +cfn=(3416) +calls=81047040 0 +0 5024916480 +0 162094080 + +fn=(3540) BTS::Fibre::Strand::~Strand() +0 5835386880 +cfn=(3230) +calls=486282240 0 +0 104550681600 +0 4376540160 +cob=(7) +cfi=(53) +cfn=(1142) +calls=486282240 0 +0 39388861440 + +fn=(3556) +0 1850277 +cfn=(3224) +calls=142329 0 +0 215495754 +0 1138632 +cob=(7) +cfi=(53) +cfn=(2824) +calls=284658 0 +0 4269870 +0 5977818 +cob=(7) +cfi=(53) +cfn=(1142) +calls=142329 0 +0 11528649 +0 853974 +cfn=(3230) +calls=142329 0 +0 59493522 +0 8112753 + +fn=(3564) +0 11529 + +fn=(3576) +0 2981436 +cob=(7) +cfi=(53) +cfn=(1254) +calls=146766 0 +0 2935320 +0 440298 +cfn=(3578) void std::__unguarded_linear_insert<__gnu_cxx::__normal_iterator > >, std::string>(__gnu_cxx::__normal_iterator > >, std::string) +calls=146766 0 +0 7631832 +0 293532 +cob=(7) +cfi=(53) +cfn=(1380) +calls=146766 0 +0 2201490 +0 440298 +cob=(7) +cfi=(53) +cfn=(1380) +calls=146766 0 +0 2201490 +0 733830 +cob=(7) +cfi=(53) +cfn=(1254) +calls=146766 0 +0 2935320 +0 440298 +cob=(7) +cfi=(53) +cfn=(2414) +calls=146766 0 +0 2495022 +0 1494012 + +fn=(3692) std::map, std::less, std::allocator > > >, std::less, std::allocator, std::less, std::allocator > > > > > >::~map() +0 9 +cfn=(3694) +calls=3 0 +0 857 +0 6 + +fn=(1070) global constructors keyed to end_out_sphere.cpp +0 6 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 24 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1579 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1778 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1498 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 319 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 344 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 407 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 324 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 319 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 323 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 5 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 319 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 37 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 5 + +fn=(1098) global constructors keyed to gaussian_intensity.cpp +0 6 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 24 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 319 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 344 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 324 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 319 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 323 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 5 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 308 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 8 + +fn=(1116) global constructors keyed to all_in_cube.cpp +0 6 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 24 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 319 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 344 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 324 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 319 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 323 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 5 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 319 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 14 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 24 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 319 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 344 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 324 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 407 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 319 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 323 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 5 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 319 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 8 + +fn=(1120) global constructors keyed to dummy.cpp +0 1 +cfn=(1122) +calls=1 0 +0 18033 + +fn=(1136) +0 63 +cob=(7) +cfi=(53) +cfn=(1142) +calls=15 0 +0 2857 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1307 +0 1 + +fn=(1178) global constructors keyed to KCutil.cpp +0 7 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 319 +0 6 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 344 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 324 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 319 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 323 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 + +fn=(1188) global constructors keyed to KMlocal.cpp +0 7 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 319 +0 6 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 344 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 324 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 319 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 323 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 + +fn=(1190) global constructors keyed to KMeans.cpp +0 5 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 24 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 319 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 344 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 324 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 319 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 323 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 + +fn=(1206) global constructors keyed to KMdata.cpp +0 7 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 319 +0 6 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 344 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 324 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 319 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 323 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 + +fn=(1230) main +0 19 +cob=(11) +cfi=(60) +cfn=(1236) +calls=1 0 +0 41933 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1496 +0 5 +cob=(11) +cfi=(60) +cfn=(1366) +calls=1 0 +0 390 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1024 +0 3 +cfn=(1368) MyApp::execute() +calls=1 0 +0 1323498586263 +0 4 +cob=(11) +cfi=(60) +cfn=(3676) +calls=1 0 +0 31 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 792 +0 5 + +fn=(2366) +0 213 +cob=(7) +cfi=(53) +cfn=(880) +calls=3 0 +0 388 +0 18 +cfn=(2368) std::string* std::__uninitialized_copy_a<__gnu_cxx::__normal_iterator > >, std::string*, std::string>(__gnu_cxx::__normal_iterator > >, __gnu_cxx::__normal_iterator > >, std::string*, std::allocator&) +calls=3 0 +0 323 +0 30 + +fn=(2408) +0 80 +cob=(7) +cfi=(53) +cfn=(1380) +calls=16 0 +0 112 +0 64 +cob=(7) +cfi=(53) +cfn=(1380) +calls=16 0 +0 240 + +fn=(2804) double MR::Image::(anonymous namespace)::__getLE(void const*, unsigned long) +0 4941 + +fn=(2806) void MR::DataSet::Loop::next_impl >(unsigned long, MR::Image::Voxel&) +0 25297 + +fn=(2856) +0 20 +cfn=(2858) +calls=1 0 +0 2646 +0 14 +cfn=(2860) BTS::Diffusion::Model::tensor_m0_SH(double, double, double) +calls=1 0 +0 109329 +0 420 +cfn=(2860) +calls=60 0 +0 6211320 +0 2806 +cob=(9) +cfi=(58) +cfn=(2626) +calls=61 0 +0 10065 +0 369 +cfn=(2972) +calls=1 0 +0 705406 +0 4 +cob=(9) +cfi=(58) +cfn=(2626) +calls=1 0 +0 226 +0 8 + +fn=(3062) +0 4 +cfn=(3064) +calls=1 0 +0 2 +0 19 + +fn=(3084) BTS::Fibre::Tract::Set::load(std::string const&, unsigned int) +0 17 +cfn=(2618) +calls=1 0 +0 11 +0 23 +cfn=(3086) +calls=1 0 +0 11 +0 10 +cfn=(3088) BTS::File::has_or_txt_extension(std::string const&, std::string const&) +calls=1 0 +0 786 +0 13 +cfn=(3092) +calls=1 0 +0 218002 +0 1 + +fn=(3104) +0 20 +cfn=(2618) +calls=1 0 +0 11 +0 23 +cfn=(3086) +calls=1 0 +0 11 +0 9 +cfn=(3106) +calls=1 0 +0 79343 +0 12 +cfn=(2564) +calls=1 0 +0 955 +0 34 +cfn=(2618) +calls=1 0 +0 11 +0 12 +cfn=(2564) +calls=1 0 +0 1392 +0 31 +cfn=(2618) +calls=1 0 +0 690 +0 5 +cfn=(3204) BTS::Fibre::Properties::Intrinsic::set_intrinsic_properties(BTS::Fibre::Properties&) +calls=1 0 +0 7889 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 57 +0 6 +cfn=(3220) +calls=1 0 +0 217 +0 2 +cfn=(3222) void BTS::Fibre::Properties::Intrinsic::remove_intrinsic_keys(BTS::Fibre::Properties::Header&) +calls=1 0 +0 2343 +0 29 +cob=(7) +cfi=(53) +cfn=(880) +calls=1 0 +0 168 +0 11 +cfn=(2368) +calls=1 0 +0 81 +0 3 +cfn=(3222) +calls=1 0 +0 2227 +0 7 +cfn=(3232) +calls=1 0 +0 33 +0 2 +cfn=(3198) +calls=1 0 +0 96 +0 2 +cfn=(2374) +calls=1 0 +0 15 +0 2 +cfn=(3198) +calls=1 0 +0 96 +0 2 +cob=(7) +cfi=(53) +cfn=(1380) +calls=1 0 +0 7 +0 4 +cfn=(3224) +calls=1 0 +0 1431 +0 19 +cfn=(3234) +calls=1 0 +0 23640 +0 16 +cfn=(3234) +calls=4 0 +0 62679 +0 78 +cfn=(3268) +calls=1 0 +0 1932 +0 6 +cfn=(3272) +calls=1 0 +0 68 +0 9 +cfn=(3272) +calls=3 0 +0 204 +0 12 +cfn=(2618) +calls=4 0 +0 44 +0 20 +cfn=(3266) std::vector >::_M_insert_aux(__gnu_cxx::__normal_iterator > >, BTS::Fibre::Tract const&) +calls=3 0 +0 16350 +0 12 +cfn=(2618) +calls=1 0 +0 11 +0 2 +cfn=(3274) +calls=1 0 +0 528 +0 12 + +fn=(3200) +0 7 +cfn=(2618) +calls=1 0 +0 11 +0 2 +cfn=(2374) +calls=1 0 +0 15 +0 2 +cfn=(3202) +calls=1 0 +0 20 +0 2 +cfn=(3202) +calls=1 0 +0 20 +0 2 +cfn=(3202) +calls=1 0 +0 20 +0 2 +cfn=(3202) +calls=1 0 +0 20 +0 3 +cfn=(2618) +calls=1 0 +0 690 +0 4 + +fn=(3206) double BTS::to(std::string const&) +0 99 +cob=(7) +cfi=(53) +cfn=(722) +calls=9 0 +0 873 +0 198 +cob=(7) +cfi=(53) +cfn=(728) +calls=9 0 +0 6372 +0 144 +cob=(7) +cfi=(53) +cfn=(492) +calls=9 0 +0 351 +0 81 +cob=(7) +cfi=(53) +cfn=(1752) +calls=9 0 +0 1646 +0 54 +cob=(7) +cfi=(53) +cfn=(1758) +calls=9 0 +0 189 +0 27 +cob=(7) +cfi=(53) +cfn=(728) +calls=9 0 +0 6372 +0 27 +cob=(7) +cfi=(53) +cfn=(1764) +calls=9 0 +0 12328 +0 90 +cob=(7) +cfi=(53) +cfn=(1380) +calls=9 0 +0 900 +0 45 +cob=(7) +cfi=(53) +cfn=(746) +calls=9 0 +0 108 +0 81 +cob=(7) +cfi=(53) +cfn=(1818) +calls=9 0 +0 522 +0 81 + +fn=(3276) +0 13 +cob=(7) +cfi=(53) +cfn=(1880) +calls=1 0 +0 640 +0 5 +cob=(7) +cfi=(53) +cfn=(1880) +calls=1 0 +0 1411 +0 4 +cob=(7) +cfi=(53) +cfn=(3282) +calls=1 0 +0 2463 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1962 +0 2 +cfn=(3198) +calls=1 0 +0 307 +0 3 +cfn=(2618) +calls=1 0 +0 860 +0 2 +cob=(7) +cfi=(53) +cfn=(1380) +calls=1 0 +0 15 +0 7 +cob=(7) +cfi=(53) +cfn=(3282) +calls=1 0 +0 149 + +fn=(3312) void BTS::Image::Expected::Buffer_tpl::expected_image(BTS::Fibre::Tract::Set const&, BTS::Image::Container::Buffer::Set&, BTS::Image::Container::Buffer::Set&) +0 113 +cfn=(3334) void BTS::Image::Expected::Buffer_tpl::part_image(BTS::Fibre::Tract const&, BTS::Image::Container::Buffer&, BTS::Image::Container::Buffer&) +calls=4 0 +0 1318538253951 +0 80 +cfn=(3314) +calls=4 0 +0 32 +0 114 +cfn=(3324) +calls=1 0 +0 19 +0 15 +cfn=(3324) +calls=3 0 +0 57 +0 16 +cfn=(3314) +calls=4 0 +0 32 +0 114 +cfn=(3332) std::_Rb_tree >, std::_Select1st > >, std::less, std::allocator > > >::_M_erase(std::_Rb_tree_node > >*) +calls=1 0 +0 19 +0 15 +cfn=(3332) +calls=3 0 +0 57 +0 40 +cfn=(3318) +calls=3 0 +0 44642890 +0 24 +cfn=(3326) std::vector, std::allocator > >::_M_insert_aux(__gnu_cxx::__normal_iterator*, std::vector, std::allocator > > >, BTS::Image::Container::Buffer const&) +calls=3 0 +0 2469486810 +0 12 + +fn=(3324) +0 98 +cfn=(3325) std::_Rb_tree >, std::_Select1st > >, std::less, std::allocator > > >::_M_erase(std::_Rb_tree_node > >*)'2 +calls=3 0 +0 4040567 +0 84 +cfn=(3325) +calls=21 0 +0 5716237 +0 4560 +cfn=(3274) +calls=1464 0 +0 1168272 +0 4488 +cob=(7) +cfi=(53) +cfn=(1142) +calls=24 0 +0 2605 +0 72 +cob=(7) +cfi=(53) +cfn=(1142) +calls=24 0 +0 1944 +0 104 + +fn=(3325) +0 3226 +cfn=(3325) +calls=112 0 +0 9709203 +0 344 +cfn=(3325) +calls=86 0 +0 3549467 +0 37620 +cfn=(3274) +calls=12078 0 +0 9638244 +0 37026 +cob=(7) +cfi=(53) +cfn=(1142) +calls=198 0 +0 21540 +0 594 +cob=(7) +cfi=(53) +cfn=(1142) +calls=198 0 +0 16038 +0 2172 + +fn=(3326) +0 71 +cob=(7) +cfi=(53) +cfn=(880) +calls=3 0 +0 16520 +0 27 +cfn=(3328) BTS::Image::Container::Buffer::Buffer(BTS::Image::Container::Buffer const&) +calls=3 0 +0 96 +0 18 +cfn=(3330) BTS::Image::Container::Buffer* std::__uninitialized_move_a*, BTS::Image::Container::Buffer*, std::allocator > >(BTS::Image::Container::Buffer*, BTS::Image::Container::Buffer*, BTS::Image::Container::Buffer*, std::allocator >&) +calls=3 0 +0 2141456979 +0 18 +cfn=(3330) +calls=3 0 +0 51 +0 32 +cfn=(3332) +calls=2 0 +0 206855230 +0 4 +cfn=(3332) +calls=1 0 +0 121157474 +0 19 +cob=(7) +cfi=(53) +cfn=(1142) +calls=2 0 +0 187 +0 84 + +fn=(3332) +0 98 +cfn=(3333) std::_Rb_tree >, std::_Select1st > >, std::less, std::allocator > > >::_M_erase(std::_Rb_tree_node > >*)'2 +calls=3 0 +0 121158107 +0 84 +cfn=(3333) +calls=21 0 +0 171394171 +0 4560 +cfn=(3512) +calls=1464 0 +0 35446472 +0 4488 +cob=(7) +cfi=(53) +cfn=(1142) +calls=24 0 +0 2680 +0 72 +cob=(7) +cfi=(53) +cfn=(1142) +calls=24 0 +0 1944 +0 104 + +fn=(3333) +0 3226 +cfn=(3333) +calls=112 0 +0 291076482 +0 344 +cfn=(3333) +calls=86 0 +0 106384178 +0 37620 +cfn=(3512) +calls=12078 0 +0 292433170 +0 37026 +cob=(7) +cfi=(53) +cfn=(1142) +calls=198 0 +0 22088 +0 594 +cob=(7) +cfi=(53) +cfn=(1142) +calls=198 0 +0 16038 +0 2172 + +fn=(3336) BTS::Fibre::Tract::sections(unsigned int, unsigned int, BTS::Triple const&, BTS::Triple const&) const +0 116 +cfn=(3338) +calls=4 0 +0 131574651 +0 128 +cfn=(3342) std::_Rb_tree, std::less, std::allocator > > > >, std::_Select1st, std::less, std::allocator > > > > >, std::less, std::allocator, std::less, std::allocator > > > > > >::_M_insert_unique_(std::_Rb_tree_const_iterator, std::less, std::allocator > > > > >, std::pair, std::less, std::allocator > > > > const&) +calls=1 0 +0 380 +0 5 +cfn=(3348) +calls=1 0 +0 11 +0 3 +cfn=(3348) +calls=1 0 +0 11 +0 75 +cfn=(3350) MR::Math::Matrix::Matrix(MR::Math::Matrix const&) +calls=1 0 +0 31 +0 4 +cfn=(3352) std::_Rb_tree >, std::_Select1st > >, std::less, std::allocator > > >::_M_insert_unique_(std::_Rb_tree_const_iterator > >, std::pair > const&) +calls=1 0 +0 304 +0 33 +cfn=(3358) BTS::Fibre::Strand::create_position_matrix(unsigned int, unsigned int, bool) +calls=1 0 +0 9271 +0 3 +cfn=(3368) +calls=1 0 +0 1447 +0 5 +cob=(9) +cfi=(58) +cfn=(2626) +calls=1 0 +0 196 +0 116 +cfn=(3342) +calls=1 0 +0 501 +0 4 +cfn=(3348) +calls=1 0 +0 11 +0 3 +cfn=(3348) +calls=1 0 +0 11 +0 82 +cfn=(3350) +calls=1 0 +0 31 +0 4 +cfn=(3352) +calls=1 0 +0 302 +0 49969737 +cfn=(3370) +calls=1 0 +0 9751 +0 3 +cfn=(3368) +calls=1 0 +0 1445 +0 5 +cob=(9) +cfi=(58) +cfn=(2626) +calls=1 0 +0 196 +0 37 + +fn=(3340) +0 16 + +fn=(3360) +0 224750 +cob=(9) +cfi=(58) +cfn=(1868) +calls=7750 0 +0 22250210 +0 38750 + +fn=(3406) BTS::Image::Expected::Quartic::Buffer::new_voxel(BTS::Image::Coord const&) +0 711 +cfn=(3408) +calls=237 0 +0 3579043 +0 711 + +fn=(3474) T.6704 +0 5110 +cob=(7) +cfi=(53) +cfn=(880) +calls=365 0 +0 40150 +0 26645 +cob=(7) +cfi=(53) +cfn=(880) +calls=1095 0 +0 187028 +0 29565 +cfn=(3472) +calls=3285 0 +0 49983949 +0 29200 + +fn=(3512) +0 143228 +cfn=(3494) +calls=35807 0 +0 365787299 + +fn=(3522) BTS::Image::Expected::Quartic::Voxel::interpolate(BTS::Triple const&, BTS::Triple&, BTS::Coord::Tensor&) +0 95662080 + +fn=(3548) std::_Rb_tree >, std::_Select1st > >, std::less, std::allocator > > >::_M_copy(std::_Rb_tree_node > > const*, std::_Rb_tree_node > >*) +0 36 +cob=(7) +cfi=(53) +cfn=(880) +calls=3 0 +0 460 +0 81 +cob=(7) +cfi=(53) +cfn=(880) +calls=3 0 +0 24430 +0 954 +cfn=(3268) +calls=183 0 +0 446664 +0 978 +cfn=(3549) std::_Rb_tree >, std::_Select1st > >, std::less, std::allocator > > >::_M_copy(std::_Rb_tree_node > > const*, std::_Rb_tree_node > >*)'2 +calls=3 0 +0 12454817 +0 30 +cob=(7) +cfi=(53) +cfn=(880) +calls=3 0 +0 531 +0 36 +cob=(7) +cfi=(53) +cfn=(880) +calls=18 0 +0 3186 +0 651 +cob=(7) +cfi=(53) +cfn=(880) +calls=21 0 +0 6797 +0 6657 +cfn=(3268) +calls=1281 0 +0 3165680 +0 6763 +cfn=(3549) +calls=16 0 +0 17578334 +0 127 + +fn=(3549) +0 1344 +cob=(7) +cfi=(53) +cfn=(880) +calls=112 0 +0 19788 +0 3024 +cob=(7) +cfi=(53) +cfn=(880) +calls=112 0 +0 36723 +0 35616 +cfn=(3268) +calls=6832 0 +0 16866786 +0 36280 +cfn=(3549) +calls=54 0 +0 29872880 +0 699 +cob=(7) +cfi=(53) +cfn=(880) +calls=51 0 +0 8919 +0 70 +cob=(7) +cfi=(53) +cfn=(880) +calls=35 0 +0 6231 +0 2666 +cob=(7) +cfi=(53) +cfn=(880) +calls=86 0 +0 28642 +0 27262 +cfn=(3268) +calls=5246 0 +0 12930120 +0 27590 +cfn=(3549) +calls=39 0 +0 10889046 +0 1391 + +fn=(3558) +0 180 +cob=(7) +cfi=(53) +cfn=(880) +calls=6 0 +0 692 +0 90 +cob=(4) +cfi=(113) +cfn=(1794) +calls=6 47 +0 292 +0 48 +cob=(4) +cfi=(113) +cfn=(1794) +calls=6 47 +0 144 +0 22 +cob=(7) +cfi=(53) +cfn=(1142) +calls=4 0 +0 324 +0 88 + +fn=(3562) +0 11529 +cfn=(3402) +calls=1647 0 +0 254307 +0 3294 + +fn=(3578) +0 1907958 +cob=(7) +cfi=(53) +cfn=(2414) +calls=146766 0 +0 2495022 +0 1614426 +cob=(7) +cfi=(53) +cfn=(1260) +calls=146766 0 +0 1614426 + +fn=(3592) void BTS::Fibre::Unzipper::unzip_intrinsic(BTS::Fibre::BasicStrand const&, MR::Math::Vector&, unsigned int&) +0 2561634 +cfn=(2374) +calls=426939 0 +0 6404085 +0 853878 + +fn=(3596) +0 32940 +cfn=(3294) +calls=3294 0 +0 3317058 +0 52704 +cfn=(3556) +calls=3294 0 +0 6879824 +0 59292 +cfn=(3556) +calls=9882 0 +0 20639472 +0 115290 +cob=(9) +cfi=(58) +cfn=(1868) +calls=3294 0 +0 1058960 +0 42822 +cfn=(3598) void BTS::Fibre::Unzipper::unzip_element >(BTS::Fibre::Set const&, MR::Math::Vector&, unsigned int&) +calls=3294 0 +0 54276092 +0 26352 + +fn=(3684) BTS::Image::Expected::Buffer_tpl::~Buffer_tpl() +0 10 +cfn=(3686) +calls=1 0 +0 11 +0 13 +cfn=(2618) +calls=1 0 +0 11 +0 6 +cfn=(3688) std::_Rb_tree, std::_Select1st >, std::less, std::allocator > >::_M_erase(std::_Rb_tree_node >*) +calls=1 0 +0 11 +0 4 + +fn=(3480) +0 1538342 +cob=(7) +cfi=(53) +cfn=(2414) +calls=59167 0 +0 1005839 +0 1301674 +cfn=(3482) +calls=59167 0 +0 16832336 +0 295835 +cfn=(3484) +calls=59167 0 +0 15107047 +0 59167 + +fn=(1118) global constructors keyed to midpoint_in_sphere.cpp +0 6 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 24 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 319 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 344 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 324 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 319 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 323 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 5 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 318 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 8 + +fn=(1158) global constructors keyed to voxel.cpp +0 5 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 24 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 407 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 319 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 344 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 324 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 319 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 323 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 9 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 24 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 319 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 344 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 324 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 319 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 323 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 12 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 24 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 319 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 344 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 324 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 319 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 323 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 9 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 24 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 319 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 344 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 324 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 319 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 323 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 12 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 24 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 319 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 344 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 324 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 319 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 323 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 12 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 24 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 407 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 319 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 344 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 324 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 319 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 323 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 7 + +fn=(1160) global constructors keyed to base_width.cpp +0 6 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 24 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 319 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 344 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 324 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 319 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 323 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 5 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 8 + +fn=(1166) global constructors keyed to spread.cpp +0 6 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 24 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 319 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 344 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 324 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 319 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 323 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 5 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 314 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 8 + +fn=(1388) std::vector >::~vector() +0 375 + +fn=(3020) +0 10 +cob=(4) +cfi=(135) +cfn=(3028) 0x000000000012aa40 +calls=2 81 +0 106 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1699 + +fn=(3056) +0 6 +cob=(7) +cfi=(53) +cfn=(880) +calls=1 0 +0 187 +0 4 +cfn=(3058) BTS::Image::Expected::Quartic::Buffer::Buffer(BTS::Image::Expected::Quartic::Buffer const&) +calls=1 0 +0 30322 +0 5 + +fn=(3058) +0 11 +cfn=(3060) +calls=1 0 +0 30242 +0 7 +cfn=(3020) +calls=1 0 +0 58 +0 4 + +fn=(3074) BTS::Image::Observed::Buffer::encoding(unsigned int) const +0 6588 + +fn=(3078) +0 7498878769 +cfn=(3082) +calls=42993307 0 +0 8745362650 +0 6123092945 +cfn=(3080) +calls=529285436 0 +0 119702977489 +0 529285436 + +fn=(3110) +0 63 + +fn=(3182) +0 37 +cob=(7) +cfi=(53) +cfn=(3188) +calls=1 0 +0 978 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1434 +0 3 +cob=(4) +cfi=(97) /build/buildd/eglibc-2.11.1/string/../sysdeps/x86_64/multiarch/../strcmp.S +cfn=(3196) __strcmp_ssse3 +calls=1 90 +0 92 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1701 +0 13 + +fn=(3198) +0 38 +cob=(7) +cfi=(53) +cfn=(1380) +calls=2 0 +0 115 +0 4 +cob=(7) +cfi=(53) +cfn=(1380) +calls=2 0 +0 115 +0 40 +cob=(7) +cfi=(53) +cfn=(1142) +calls=4 0 +0 324 + +fn=(3238) BTS::Fibre::Base::Reader::read_triple() +0 1643 +cob=(7) +cfi=(53) +cfn=(3244) +calls=53 0 +0 10152 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1434 +0 53 + +fn=(3256) std::vector, std::allocator > >::_M_insert_aux(__gnu_cxx::__normal_iterator*, std::vector, std::allocator > > >, BTS::Triple const&) +0 10698210072 +cob=(7) +cfi=(53) +cfn=(880) +calls=486282276 0 +0 53491123548 +0 22693172880 +cob=(7) +cfi=(53) +cfn=(1142) +calls=324188184 0 +0 26259242904 +0 10049833704 + +fn=(3260) +0 272 +cob=(7) +cfi=(53) +cfn=(1254) +calls=8 0 +0 160 +0 32 +cob=(7) +cfi=(53) +cfn=(1254) +calls=8 0 +0 120 +0 32 +cfn=(2392) +calls=8 0 +0 2274 +0 24 +cob=(7) +cfi=(53) +cfn=(1380) +calls=8 0 +0 56 +0 16 +cob=(7) +cfi=(53) +cfn=(1380) +calls=8 0 +0 120 +0 16 +cob=(7) +cfi=(53) +cfn=(1380) +calls=8 0 +0 56 +0 72 + +fn=(3266) +0 72 +cob=(7) +cfi=(53) +cfn=(880) +calls=3 0 +0 430 +0 33 +cfn=(3268) +calls=3 0 +0 6086 +0 18 +cfn=(3270) BTS::Fibre::Tract* std::__uninitialized_move_a >(BTS::Fibre::Tract*, BTS::Fibre::Tract*, BTS::Fibre::Tract*, std::allocator&) +calls=3 0 +0 6929 +0 18 +cfn=(3270) +calls=3 0 +0 51 +0 28 +cfn=(3274) +calls=2 0 +0 1596 +0 4 +cfn=(3274) +calls=1 0 +0 798 +0 16 +cob=(7) +cfi=(53) +cfn=(1142) +calls=2 0 +0 193 +0 78 + +fn=(3344) std::_Rb_tree, std::less, std::allocator > > > >, std::_Select1st, std::less, std::allocator > > > > >, std::less, std::allocator, std::less, std::allocator > > > > > >::_M_insert_unique(std::pair, std::less, std::allocator > > > > const&) +0 50 +cfn=(3346) +calls=2 0 +0 785 +0 4 + +fn=(3348) +0 50 +cfn=(3349) std::_Rb_tree >, std::_Select1st > >, std::less, std::allocator > > >::_M_erase(std::_Rb_tree_node > >*)'2 +calls=2 0 +0 22 +0 10 +cob=(9) +cfi=(58) +cfn=(2626) +calls=2 0 +0 380 +0 6 +cob=(7) +cfi=(53) +cfn=(1142) +calls=2 0 +0 162 +0 28 + +fn=(3349) +0 22 + +fn=(3350) +0 62 + +fn=(3412) +0 4503 +cob=(7) +cfi=(53) +cfn=(880) +calls=237 0 +0 111237 +0 65175 + +fn=(3414) +0 75366 +cfn=(3416) +calls=711 0 +0 44082 +0 68967 +cfn=(3416) +calls=711 0 +0 44082 +0 24174 + +fn=(3468) +0 134097924 +cob=(7) +cfi=(53) +cfn=(880) +calls=3192786 0 +0 574978176 +0 150060942 + +fn=(3510) BTS::Fibre::Tract::Tensor* std::__uninitialized_copy_a<__gnu_cxx::__normal_iterator > >, BTS::Fibre::Tract::Tensor*, BTS::Fibre::Tract::Tensor>(__gnu_cxx::__normal_iterator > >, __gnu_cxx::__normal_iterator > >, BTS::Fibre::Tract::Tensor*, std::allocator&) +0 116070 +cfn=(3492) BTS::Fibre::Tract::Tensor::Tensor(BTS::Fibre::Tract::Tensor const&) +calls=22265 0 +0 120166928 +0 114245 + +fn=(3520) BTS::Image::Expected::Quartic::Voxel::interpolate(BTS::Fibre::Strand::Section const&, BTS::Fibre::Strand::Section&, BTS::Fibre::Strand::Section::Tensor&) +0 39859200 +cfn=(3522) +calls=664320 0 +0 95662080 +0 3321600 +cfn=(3524) +calls=664320 0 +0 41187840 +0 7971840 +cfn=(3526) +calls=664320 0 +0 1992960 +0 1328640 +cfn=(3526) +calls=664320 0 +0 1992960 +0 15943680 +cfn=(3528) +calls=664320 0 +0 47166720 +0 1328640 +cfn=(3528) +calls=664320 0 +0 47166720 +0 7307520 +cfn=(3526) +calls=664320 0 +0 1992960 +0 1328640 +cfn=(3526) +calls=664320 0 +0 1992960 +0 68424960 + +fn=(3534) BTS::Fibre::Tract::add_section_gradient(BTS::Fibre::Tract::Section const&, BTS::Fibre::Tract::Section const&) +0 6726904320 +cfn=(3256) +calls=243141120 0 +0 61595794553 +0 2917693440 +cob=(7) +cfi=(53) +cfn=(880) +calls=81047040 0 +0 8915174544 +0 6321669120 +cob=(7) +cfi=(53) +cfn=(934) +calls=81047040 0 +0 18073497212 +0 1296752640 +cob=(7) +cfi=(53) +cfn=(1380) +calls=81047040 0 +0 1215705600 +0 567329280 +cob=(7) +cfi=(53) +cfn=(1142) +calls=81047040 0 +0 6564810240 +0 243141120 +cfn=(3536) BTS::Fibre::BasicStrand::operator+=(BTS::Fibre::BasicStrand const&) +calls=81047040 0 +0 7051092480 +0 486282240 +cfn=(3538) +calls=81047040 0 +0 62244192136 +0 4943869440 +cfn=(3536) +calls=81047040 0 +0 7051092480 +0 162094080 +cfn=(3540) +calls=81047040 0 +0 25691911680 +0 486282240 +cfn=(3538) +calls=81047040 0 +0 62244156575 +0 4943869440 +cfn=(3536) +calls=81047040 0 +0 7051092480 +0 162094080 +cfn=(3540) +calls=81047040 0 +0 25691911680 +0 6564810240 +cfn=(3256) +calls=243141120 0 +0 61595779319 +0 2917693440 +cob=(7) +cfi=(53) +cfn=(880) +calls=81047040 0 +0 8915174400 +0 6159575040 +cob=(7) +cfi=(53) +cfn=(934) +calls=81047040 0 +0 18073489920 +0 243141120 +cfn=(3298) +calls=81047040 0 +0 25772987055 +0 324188160 +cob=(7) +cfi=(53) +cfn=(1380) +calls=81047040 0 +0 1215705600 +0 567329280 +cob=(7) +cfi=(53) +cfn=(1142) +calls=81047040 0 +0 6564810240 +0 243141120 +cfn=(3536) +calls=81047040 0 +0 7051092480 +0 486282240 +cfn=(3538) +calls=81047040 0 +0 62244197902 +0 4943869440 +cfn=(3536) +calls=81047040 0 +0 7051092480 +0 162094080 +cfn=(3540) +calls=81047040 0 +0 25691911680 +0 486282240 +cfn=(3538) +calls=81047040 0 +0 62244156739 +0 4943869440 +cfn=(3536) +calls=81047040 0 +0 7051092480 +0 162094080 +cfn=(3540) +calls=81047040 0 +0 25691911680 +0 972564480 +cfn=(3540) +calls=81047040 0 +0 25691911680 +0 162094080 +cfn=(3540) +calls=81047040 0 +0 25691911680 +0 2836646400 +cob=(7) +cfi=(53) +cfn=(1254) +calls=81047040 0 +0 1620940800 +0 486282240 +cfn=(3078) +calls=81047040 0 +0 20180745258 +0 243141120 +cob=(7) +cfi=(53) +cfn=(1380) +calls=81047040 0 +0 1215705600 +0 81047040 + +fn=(3550) std::_Rb_tree >, std::_Select1st > >, std::less, std::allocator > > >::_M_copy(std::_Rb_tree_node > > const*, std::_Rb_tree_node > >*) +0 36 +cob=(7) +cfi=(53) +cfn=(880) +calls=3 0 +0 415 +0 81 +cob=(7) +cfi=(53) +cfn=(880) +calls=3 0 +0 4649910 +0 954 +cfn=(3492) +calls=183 0 +0 28123350 +0 975 +cfn=(3551) std::_Rb_tree >, std::_Select1st > >, std::less, std::allocator > > >::_M_copy(std::_Rb_tree_node > > const*, std::_Rb_tree_node > >*)'2 +calls=3 0 +0 787726194 +0 30 +cob=(7) +cfi=(53) +cfn=(880) +calls=3 0 +0 585 +0 36 +cob=(7) +cfi=(53) +cfn=(880) +calls=18 0 +0 3510 +0 651 +cob=(7) +cfi=(53) +cfn=(880) +calls=21 0 +0 26775 +0 6657 +cfn=(3492) +calls=1281 0 +0 202427820 +0 6763 +cfn=(3551) +calls=16 0 +0 1118481753 +0 127 + +fn=(3551) +0 1344 +cob=(7) +cfi=(53) +cfn=(880) +calls=112 0 +0 21365 +0 3024 +cob=(7) +cfi=(53) +cfn=(880) +calls=112 0 +0 146228 +0 35616 +cfn=(3492) +calls=6832 0 +0 1076803581 +0 36168 +cfn=(3551) +calls=54 0 +0 1893246970 +0 699 +cob=(7) +cfi=(53) +cfn=(880) +calls=51 0 +0 9918 +0 70 +cob=(7) +cfi=(53) +cfn=(880) +calls=35 0 +0 6825 +0 2666 +cob=(7) +cfi=(53) +cfn=(880) +calls=86 0 +0 109947 +0 27262 +cfn=(3492) +calls=5246 0 +0 828974253 +0 27590 +cfn=(3551) +calls=39 0 +0 694216984 +0 1391 + +fn=(3594) +0 961848 +cfn=(3582) +calls=120231 0 +0 747004841 +0 23324814 +cob=(9) +cfi=(58) +cfn=(2626) +calls=120231 0 +0 22843890 +0 480924 + +fn=(3598) +0 39528 +cfn=(3600) void BTS::Fibre::Unzipper::unzip_intrinsic >(BTS::Fibre::Set const&, MR::Math::Vector&, unsigned int&) +calls=3294 0 +0 5264788 +0 52704 +cfn=(3588) void BTS::Fibre::Unzipper::unzip_intrinsic(BTS::Fibre::Tract const&, MR::Math::Vector&, unsigned int&) +calls=3294 0 +0 11065156 +0 79056 +cfn=(3588) +calls=9882 0 +0 33189612 +0 210816 +cfn=(3592) +calls=13176 0 +0 303048 +0 210816 +cfn=(3592) +calls=26352 0 +0 606096 +0 3254472 + +fn=(3688) +0 11 + +fn=(3696) __tcf_0 +0 101 +cob=(7) +cfi=(53) +cfn=(1142) +calls=15 0 +0 1215 +0 44 + +fn=(3750) MR::Math::Matrix::~Matrix() +0 4 + +fn=(1060) +0 6 + +fn=(1108) global constructors keyed to triple.cpp +0 4 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 24 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 51 + +fn=(1126) +0 165 +cfn=(1128) +calls=15 0 +0 4084 +0 30 + +fn=(1134) +0 377 +cob=(7) +cfi=(53) +cfn=(880) +calls=15 0 +0 2925 +0 867 + +fn=(1154) global constructors keyed to tract.cpp +0 5 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 24 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 319 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 344 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 324 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 319 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 323 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 13 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 24 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 319 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 344 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 324 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 319 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 323 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 12 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 5 + +fn=(1162) global constructors keyed to strand.cpp +0 5 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 24 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 319 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 344 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 324 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 319 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 323 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 13 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 24 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 319 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 344 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 324 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 319 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 323 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 5 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 318 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 5 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 314 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 5 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 304 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 5 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 11 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 10 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 10 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 5 + +fn=(1172) global constructors keyed to width.cpp +0 6 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 24 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 319 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 344 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 407 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 324 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 319 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 323 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 5 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 308 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 5 + +fn=(1184) global constructors keyed to track.cpp +0 6 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 24 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 319 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 344 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 324 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 319 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 323 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 5 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 308 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 5 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 314 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 5 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 304 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 12 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 315 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 5 + +fn=(1186) global constructors keyed to walker.cpp +0 3 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 24 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 + +fn=(1204) global constructors keyed to dummy_intrinsic_properties.cpp +0 3 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 24 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 + +fn=(1350) +0 36 +cob=(7) +cfi=(53) +cfn=(1254) +calls=6 0 +0 120 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1426 +0 18 +cob=(7) +cfi=(53) +cfn=(1360) +calls=6 0 +0 2320 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1548 +0 30 + +fn=(1788) +0 5490 +cob=(7) +cfi=(53) +cfn=(880) +calls=183 0 +0 35180 +0 2745 +cob=(4) +cfi=(113) +cfn=(1794) +calls=183 47 +0 9699 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1698 +0 1464 +cob=(4) +cfi=(113) +cfn=(1794) +calls=183 47 +0 4392 +0 671 +cob=(7) +cfi=(53) +cfn=(1142) +calls=122 0 +0 9882 +0 2684 + +fn=(1950) BTS::Image::Observed::Buffer::load(std::string const&, BTS::Diffusion::Encoding::Set const&) +0 13 +cob=(11) +cfi=(60) +cfn=(1956) +calls=1 0 +0 1861032 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1072 +0 15 +cfn=(2620) +calls=1 0 +0 5932 +0 4 +cfn=(1946) +calls=1 0 +0 7105 +0 4 +cob=(9) +cfi=(58) +cfn=(2626) +calls=1 0 +0 198 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 877 +0 22 +cfn=(2620) +calls=1 0 +0 468 +0 24 +cfn=(2628) +calls=1 0 +0 15 +0 29 +cfn=(2630) std::vector >::operator=(std::vector > const&) +calls=1 0 +0 1246 +0 4 +cfn=(2632) +calls=1 0 +0 58953 +0 15 +cob=(4) +cfi=(126) /build/buildd/eglibc-2.11.1/time/../sysdeps/unix/sysv/linux/x86_64/gettimeofday.S +cfn=(2780) gettimeofday +calls=1 29 +0 12 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1795 +0 21494 +cfn=(2784) +calls=1647 0 +0 260249 +0 23058 +cfn=(2804) +calls=1647 0 +0 4941 +0 44469 +cfn=(2806) +calls=549 0 +0 25297 +0 8241 +cfn=(2392) +calls=1 0 +0 289 +0 60 +cfn=(2392) +calls=15 0 +0 6537 +0 32 +cob=(7) +cfi=(53) +cfn=(2824) +calls=16 0 +0 1491 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1971 +0 50 +cfn=(2832) MR::ProgressBar::~ProgressBar() +calls=1 0 +0 16 +0 4 +cob=(7) +cfi=(53) +cfn=(1142) +calls=1 0 +0 81 +0 4 +cob=(9) +cfi=(58) +cfn=(2626) +calls=1 0 +0 165 +0 4 +cob=(7) +cfi=(53) +cfn=(1142) +calls=1 0 +0 114 +0 2 +cfn=(2610) +calls=1 0 +0 8973 +0 7694 + +fn=(2392) +0 520 +cob=(7) +cfi=(53) +cfn=(2812) +calls=1 0 +0 11 +0 398 +cfn=(2394) std::_Rb_tree, std::_Select1st >, std::less, std::allocator > >::_M_insert_unique(std::pair const&) +calls=7 0 +0 3987 +0 155 +cob=(7) +cfi=(53) +cfn=(2414) +calls=37 0 +0 723 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1532 +0 259 +cfn=(2396) +calls=37 0 +0 13413 +0 42 +cfn=(2396) +calls=1 0 +0 254 +0 1 + +fn=(2618) +0 127179 +cfn=(2619) std::_Rb_tree, std::_Select1st >, std::less, std::allocator > >::_M_erase(std::_Rb_tree_node >*)'2 +calls=13 0 +0 9036 +0 36 +cfn=(2619) +calls=12 0 +0 1118 +0 75 +cob=(7) +cfi=(53) +cfn=(1380) +calls=25 0 +0 1225 +0 50 +cob=(7) +cfi=(53) +cfn=(1380) +calls=25 0 +0 885 +0 75 +cob=(7) +cfi=(53) +cfn=(1142) +calls=25 0 +0 2025 +0 72694 + +fn=(2619) +0 709 +cfn=(2619) +calls=39 0 +0 10073 +0 45 +cfn=(2619) +calls=15 0 +0 1321 +0 162 +cob=(7) +cfi=(53) +cfn=(1380) +calls=54 0 +0 2085 +0 108 +cob=(7) +cfi=(53) +cfn=(1380) +calls=54 0 +0 2085 +0 162 +cob=(7) +cfi=(53) +cfn=(1142) +calls=54 0 +0 4374 +0 424 + +fn=(2796) std::_Rb_tree, std::_Select1st >, std::less, std::allocator > >::_M_insert_unique(std::pair const&) +0 14 +cfn=(2798) std::_Rb_tree, std::_Select1st >, std::less, std::allocator > >::_M_insert_(std::_Rb_tree_node_base const*, std::_Rb_tree_node_base const*, std::pair const&) +calls=1 0 +0 247 +0 12 + +fn=(2864) MR::Math::Vector& MR::Math::SH::FA2SH(MR::Math::Vector&, double, double, double, int, int) +0 2623 +cfn=(2862) +calls=61 0 +0 26824 +0 549 +cfn=(2858) +calls=61 0 +0 39845 +0 2318 +cob=(6) +cfi=(127) /build/buildd/eglibc-2.11.1/math/../sysdeps/x86_64/fpu/s_sincos.S +cfn=(2870) sincos +calls=61 34 +0 549 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1430 +0 42273 +cob=(6) +cfi=(127) +cfn=(2870) +calls=6039 34 +0 54351 +0 97600 +cob=(6) +cfi=(128) /build/buildd/eglibc-2.11.1/math/../sysdeps/ieee754/dbl-64/w_exp.c +cfn=(2876) exp +calls=6100 38 +0 700400 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1390 +0 1439844 +cfn=(2858) +calls=61 0 +0 23241 +0 549 +cfn=(2858) +calls=61 0 +0 19764 +0 305 +cfn=(2858) +calls=61 0 +0 23241 +0 276025 +cob=(9) +cfi=(58) +cfn=(2886) gsl_blas_dgemm +calls=61 0 +0 1273115 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 843 +0 122 +cob=(9) +cfi=(58) +cfn=(2898) gsl_linalg_cholesky_decomp +calls=61 0 +0 118003 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1027 +0 122 +cob=(9) +cfi=(58) +cfn=(2924) gsl_linalg_cholesky_invert +calls=61 0 +0 216316 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1027 +0 488 +cob=(9) +cfi=(58) +cfn=(2950) gsl_blas_dsymm +calls=61 0 +0 1617799 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 843 +0 244 +cob=(9) +cfi=(58) +cfn=(2626) +calls=61 0 +0 11285 +0 244 +cob=(9) +cfi=(58) +cfn=(2626) +calls=61 0 +0 11956 +0 183 +cfn=(2958) MR::Math::Vector::allocate(unsigned long) +calls=61 0 +0 854 +0 427 +cob=(9) +cfi=(58) +cfn=(2964) gsl_blas_dgemv +calls=61 0 +0 259120 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 835 +0 244 +cob=(9) +cfi=(58) +cfn=(2626) +calls=61 0 +0 11285 +0 244 +cob=(9) +cfi=(58) +cfn=(2626) +calls=61 0 +0 11285 +0 244 +cob=(9) +cfi=(58) +cfn=(2626) +calls=61 0 +0 12749 +0 1098 + +fn=(3076) +0 17 + +fn=(3082) +0 8011902402 +cob=(7) +cfi=(53) +cfn=(880) +calls=572278743 0 +0 63138838626 +0 3433672458 +cob=(7) +cfi=(53) +cfn=(1254) +calls=572278743 0 +0 11445574860 +0 4005951201 +cob=(7) +cfi=(53) +cfn=(2402) +calls=572278743 0 +0 17383328825 +0 6738364995 + +fn=(3222) +0 24 +cfn=(3224) +calls=2 0 +0 2978 +0 30 +cfn=(3228) +calls=2 0 +0 70 +0 12 +cfn=(3228) +calls=2 0 +0 78 +0 46 +cob=(7) +cfi=(53) +cfn=(1260) +calls=2 0 +0 72 +0 14 +cob=(7) +cfi=(53) +cfn=(1380) +calls=2 0 +0 30 +0 6 +cob=(7) +cfi=(53) +cfn=(1380) +calls=2 0 +0 30 +0 8 +cob=(7) +cfi=(53) +cfn=(2824) +calls=4 0 +0 60 +0 84 +cob=(7) +cfi=(53) +cfn=(1142) +calls=2 0 +0 162 +0 14 +cfn=(3230) +calls=2 0 +0 836 +0 16 + +fn=(3236) +0 172 +cob=(7) +cfi=(53) +cfn=(1142) +calls=12 0 +0 972 +0 90 +cfn=(3238) +calls=5 0 +0 3874 +0 685 +cfn=(3238) +calls=36 0 +0 7056 +0 1212 +cfn=(3256) +calls=36 0 +0 9236 +0 401 +cob=(7) +cfi=(53) +cfn=(880) +calls=12 0 +0 1378 +0 804 +cfn=(3238) +calls=12 0 +0 2352 +0 156 +cob=(7) +cfi=(53) +cfn=(1142) +calls=12 0 +0 972 +0 20 + +fn=(3292) BTS::Fibre::Set::Set(BTS::Fibre::Set const&) +0 32 +cfn=(2564) +calls=1 0 +0 759 +0 56 +cob=(7) +cfi=(53) +cfn=(880) +calls=1 0 +0 658 +0 37 +cfn=(3268) +calls=4 0 +0 9791 +0 132 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 250 +0 12 +cob=(7) +cfi=(53) +cfn=(1254) +calls=1 0 +0 20 +0 6 +cfn=(3078) +calls=1 0 +0 307 +0 3 +cob=(7) +cfi=(53) +cfn=(1380) +calls=1 0 +0 15 +0 23 + +fn=(3296) +0 342836 +cob=(7) +cfi=(53) +cfn=(934) +calls=6593 0 +0 1542836 +0 19779 +cfn=(3298) +calls=6593 0 +0 2097205 +0 26372 +cob=(7) +cfi=(53) +cfn=(1380) +calls=6593 0 +0 98895 +0 32965 + +fn=(3322) +0 124 +cfn=(3548) +calls=3 0 +0 33697212 +0 284 + +fn=(3352) +0 40 +cfn=(3354) +calls=2 0 +0 564 +0 2 + +fn=(3358) +0 20 +cfn=(3360) +calls=1 0 +0 312 +0 271 +cob=(6) +cfi=(137) +cfn=(3366) cos +calls=2 348 +0 152 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1382 +0 232 +cob=(6) +cfi=(137) +cfn=(3366) +calls=58 348 +0 6225 +0 677 + +fn=(3378) BTS::Diffusion::Response::weighting(BTS::Triple const&, BTS::Triple&, BTS::Coord::Tensor&) +0 1156498080 +cfn=(3380) +calls=14947200 0 +0 582940800 +0 209260800 +cfn=(3380) +calls=4982400 0 +0 194313600 +0 737395200 +cfn=(3380) +calls=19929600 0 +0 777254400 +0 79718400 +cfn=(3380) +calls=19929600 0 +0 777254400 +0 856972800 +cfn=(3380) +calls=19929600 0 +0 777254400 +0 1879112160 + +fn=(3398) +0 916704 +cfn=(3399) std::_Rb_tree, std::less, std::allocator >::_M_erase(std::_Rb_tree_node*)'2 +calls=83142 0 +0 25457931 +0 571599 +cfn=(3399) +calls=190533 0 +0 17388221 +0 821025 +cob=(7) +cfi=(53) +cfn=(1142) +calls=273675 0 +0 22167675 +0 1154817 + +fn=(3399) +0 5848616 +cfn=(3399) +calls=298166 0 +0 16254654 +0 279885 +cfn=(3399) +calls=93295 0 +0 1658237 +0 1174383 +cob=(7) +cfi=(53) +cfn=(1142) +calls=391461 0 +0 31708341 +0 3834927 + +fn=(3428) +0 14 +cfn=(3430) +calls=1 0 +0 815 +0 12 + +fn=(3430) +0 2886 +cob=(7) +cfi=(53) +cfn=(880) +calls=93 0 +0 42535 +0 288 +cob=(7) +cfi=(53) +cfn=(880) +calls=144 0 +0 58465 +0 2370 +cfn=(3424) +calls=237 0 +0 123714 +0 2370 +cob=(7) +cfi=(53) +cfn=(2402) +calls=237 0 +0 18923 +0 4304 + +fn=(3450) BTS::Image::Container::Buffer::new_voxel(BTS::Image::Coord const&) +0 5110 +cfn=(3224) +calls=365 0 +0 533851 +0 3650 +cob=(7) +cfi=(53) +cfn=(880) +calls=365 0 +0 6562624 +0 114245 +cfn=(3268) +calls=22265 0 +0 40727184 +0 90520 +cfn=(3274) +calls=365 0 +0 201480 +0 4745 + +fn=(3488) +0 1460 +cfn=(3490) BTS::Image::Voxel::Voxel(unsigned int) +calls=365 0 +0 126120081 +0 2555 + +fn=(3502) std::_Rb_tree >, std::_Select1st > >, std::less, std::allocator > > >::_M_insert_unique(std::pair > const&) +0 56 +cfn=(3504) +calls=4 0 +0 1099 +0 48 + +fn=(3526) +0 31887360 + +fn=(3560) +0 156 + +fn=(3570) +0 1907958 +cfn=(3224) +calls=146766 0 +0 217661542 +0 1174128 +cob=(7) +cfi=(53) +cfn=(2824) +calls=293532 0 +0 4402980 +0 3228852 +cfn=(2358) +calls=293532 0 +0 90254502 +0 5577108 +cob=(7) +cfi=(53) +cfn=(1142) +calls=146766 0 +0 11888046 +0 880596 +cfn=(3230) +calls=146766 0 +0 36397968 +0 1174128 + +fn=(3588) +0 1707756 +cfn=(3570) +calls=142313 0 +0 362493537 +0 2277008 +cfn=(3572) +calls=142313 0 +0 2988573 +0 426939 +cfn=(3574) +calls=142313 0 +0 28462600 +0 1992382 +cfn=(3590) +calls=142313 0 +0 18358377 +0 1423130 +cfn=(3590) +calls=142313 0 +0 17931438 +0 1707756 +cfn=(2374) +calls=142313 0 +0 43690091 +0 1138504 + +fn=(3600) +0 39528 +cfn=(3602) +calls=3294 0 +0 3848368 +0 52704 +cfn=(3572) +calls=3294 0 +0 69174 +0 9882 +cfn=(3574) +calls=3294 0 +0 121878 +0 46116 +cfn=(3590) +calls=3294 0 +0 362340 +0 23058 +cfn=(2374) +calls=3294 0 +0 665388 +0 26352 + +fn=(1054) +0 6 + +fn=(1066) +0 11 +cfn=(1070) +calls=1 0 +0 8529 +0 150 +cfn=(1162) +calls=1 0 +0 2841 +cfn=(1116) +calls=1 0 +0 3233 +cfn=(1218) +calls=1 0 +0 2459 +cfn=(1158) +calls=1 0 +0 3183 +cfn=(1216) global constructors keyed to KMcenters.cpp +calls=1 0 +0 2367 +cfn=(1112) +calls=1 0 +0 3631 +cfn=(1092) +calls=1 0 +0 3229 +cfn=(1200) +calls=1 0 +0 94 +cfn=(1106) global constructors keyed to buffer.cpp +calls=1 0 +0 3572 +cfn=(1154) +calls=1 0 +0 2841 +cfn=(1214) +calls=1 0 +0 94 +cfn=(1212) +calls=1 0 +0 3232 +cfn=(1100) global constructors keyed to momentum.cpp +calls=1 0 +0 2838 +cfn=(1210) +calls=1 0 +0 3590 +cfn=(1112) +calls=1 0 +0 2838 +cfn=(1208) +calls=1 0 +0 3233 +cfn=(1206) +calls=1 0 +0 2367 +cfn=(1106) +calls=1 0 +0 3573 +cfn=(1204) +calls=1 0 +0 94 +cfn=(1202) +calls=1 0 +0 2367 +cfn=(1200) +calls=1 0 +0 2838 +cfn=(1106) +calls=1 0 +0 2838 +cfn=(1198) +calls=1 0 +0 3183 +cfn=(1196) global constructors keyed to extended.cpp +calls=1 0 +0 521 +cfn=(1194) +calls=1 0 +0 2367 +cfn=(1106) +calls=1 0 +0 3222 +cfn=(1180) global constructors keyed to tensor.cpp +calls=1 0 +0 2838 +cfn=(1192) global constructors keyed to KM_ANN.cpp +calls=1 0 +0 2712 +cfn=(1158) +calls=1 0 +0 2841 +cfn=(1190) +calls=1 0 +0 2459 +cfn=(1180) +calls=1 0 +0 477 +cfn=(1188) +calls=1 0 +0 2367 +cfn=(1186) +calls=1 0 +0 94 +cfn=(1106) +calls=1 0 +0 3563 +cfn=(1184) +calls=1 0 +0 4372 +cfn=(1158) +calls=1 0 +0 2838 +cfn=(1182) +calls=1 0 +0 2367 +cfn=(1180) +calls=1 0 +0 822 +cfn=(1178) +calls=1 0 +0 2367 +cfn=(1176) global constructors keyed to state.cpp +calls=1 0 +0 480 +cfn=(1158) +calls=1 0 +0 2841 +cfn=(1174) +calls=1 0 +0 3234 +cfn=(1172) +calls=1 0 +0 3564 +cfn=(1170) +calls=1 0 +0 2838 +cfn=(1158) +calls=1 0 +0 2841 +cfn=(1112) +calls=1 0 +0 3638 +cfn=(1168) global constructors keyed to likelihood.cpp +calls=1 0 +0 3398 +cfn=(1166) +calls=1 0 +0 3228 +cfn=(1156) +calls=1 0 +0 3237 +cfn=(1164) +calls=1 0 +0 3183 +cfn=(1162) +calls=1 0 +0 4586 +cfn=(1160) +calls=1 0 +0 3223 +cfn=(1158) +calls=1 0 +0 3186 +cfn=(1156) +calls=1 0 +0 3231 +cfn=(1100) +calls=1 0 +0 2838 +cfn=(1154) +calls=1 0 +0 3227 +cfn=(1152) +calls=1 0 +0 3362 +cfn=(1120) +calls=1 0 +0 18034 +cfn=(1094) +calls=1 0 +0 477 +cfn=(1118) +calls=1 0 +0 3232 +cfn=(1116) +calls=1 0 +0 3578 +cfn=(1114) +calls=1 0 +0 94 +cfn=(1112) +calls=1 0 +0 3242 +cfn=(1110) +calls=1 0 +0 3223 +cfn=(1108) +calls=1 0 +0 526 +cfn=(1106) +calls=1 0 +0 3578 +cfn=(1104) +calls=1 0 +0 2838 +cfn=(1102) +calls=1 0 +0 3227 +cfn=(1100) +calls=1 0 +0 94 +cfn=(1098) +calls=1 0 +0 3222 +cfn=(1096) +calls=1 0 +0 3569 +cfn=(1094) +calls=1 0 +0 94 +cfn=(1092) +calls=1 0 +0 3227 +cfn=(1090) global constructors keyed to properties.cpp +calls=1 0 +0 94 +cfn=(1088) +calls=1 0 +0 2845 +0 232 + +fn=(1090) +0 3 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 24 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 + +fn=(1100) +0 5 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 24 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 319 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 344 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 324 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 319 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 323 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 9 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 24 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 319 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 344 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 324 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 319 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 323 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 7 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 24 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 + +fn=(1168) +0 5 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 24 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 319 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 344 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 324 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 319 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 323 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 407 +0 38 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 49 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 7 + +fn=(1176) +0 5 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 24 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 5 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 + +fn=(1386) std::vector >::operator=(std::vector > const&) +0 1128 + +fn=(2368) +0 112 +cob=(7) +cfi=(53) +cfn=(1254) +calls=12 0 +0 200 +0 92 + +fn=(2484) +0 2879 +cob=(9) +cfi=(58) +cfn=(2478) +calls=2 0 +0 510 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 947 +0 10 + +fn=(2630) +0 31 +cob=(7) +cfi=(53) +cfn=(880) +calls=1 0 +0 343 +0 872 + +fn=(2788) +0 297 +cfn=(2790) +calls=27 0 +0 108 +0 324 +cob=(7) +cfi=(53) +cfn=(880) +calls=27 0 +0 7216 +0 7425 + +fn=(2798) +0 345 +cob=(7) +cfi=(53) +cfn=(880) +calls=7 0 +0 2148 +0 40 +cob=(7) +cfi=(53) +cfn=(880) +calls=20 0 +0 5721 +0 864 +cob=(4) +cfi=(113) +cfn=(1794) +calls=27 47 +0 648 +0 621 +cob=(7) +cfi=(53) +cfn=(2402) +calls=27 0 +0 1217 +0 576 + +fn=(2976) BTS::Diffusion::Response* std::__uninitialized_copy_a(BTS::Diffusion::Response*, BTS::Diffusion::Response*, BTS::Diffusion::Response*, std::allocator&) +0 1131 +cfn=(2862) +calls=63 0 +0 24098 +0 5412 + +fn=(3052) +0 23 +cfn=(3054) std::_Rb_tree, std::_Select1st >, std::less, std::allocator > >::_M_copy(std::_Rb_tree_node > const*, std::_Rb_tree_node >*) +calls=1 0 +0 18214 +0 88 +cob=(7) +cfi=(53) +cfn=(880) +calls=1 0 +0 179 +0 874 + +fn=(3054) +0 12 +cob=(7) +cfi=(53) +cfn=(880) +calls=1 0 +0 195 +0 26 +cob=(7) +cfi=(53) +cfn=(880) +calls=1 0 +0 180 +0 13 +cob=(4) +cfi=(113) +cfn=(1794) +calls=1 47 +0 215 +0 27 +cfn=(3055) std::_Rb_tree, std::_Select1st >, std::less, std::allocator > >::_M_copy(std::_Rb_tree_node > const*, std::_Rb_tree_node >*)'2 +calls=1 0 +0 11480 +0 8 +cob=(7) +cfi=(53) +cfn=(880) +calls=1 0 +0 195 +0 4 +cob=(7) +cfi=(53) +cfn=(880) +calls=2 0 +0 390 +0 78 +cob=(7) +cfi=(53) +cfn=(880) +calls=3 0 +0 540 +0 39 +cob=(4) +cfi=(113) +cfn=(1794) +calls=3 47 +0 645 +0 86 +cfn=(3055) +calls=2 0 +0 4058 +0 23 + +fn=(3055) +0 204 +cob=(7) +cfi=(53) +cfn=(880) +calls=17 0 +0 3315 +0 442 +cob=(7) +cfi=(53) +cfn=(880) +calls=17 0 +0 3060 +0 221 +cob=(4) +cfi=(113) +cfn=(1794) +calls=17 47 +0 3655 +0 423 +cfn=(3055) +calls=8 0 +0 14888 +0 79 +cob=(7) +cfi=(53) +cfn=(880) +calls=5 0 +0 975 +0 2 +cob=(7) +cfi=(53) +cfn=(880) +calls=1 0 +0 195 +0 156 +cob=(7) +cfi=(53) +cfn=(880) +calls=6 0 +0 1080 +0 78 +cob=(4) +cfi=(113) +cfn=(1794) +calls=6 47 +0 1290 +0 180 +cfn=(3055) +calls=6 0 +0 6762 +0 183 + +fn=(3090) BTS::File::has_extension(std::string const&, std::string const&) +0 22 +cob=(7) +cfi=(53) +cfn=(1708) +calls=1 0 +0 206 +0 9 +cob=(7) +cfi=(53) +cfn=(1380) +calls=1 0 +0 100 +0 9 + +fn=(3208) std::_Rb_tree, std::_Select1st >, std::less, std::allocator > >::erase(std::string const&) +0 820 +cfn=(2618) +calls=4 0 +0 928 +0 219 +cob=(7) +cfi=(53) +cfn=(2830) +calls=5 0 +0 50 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1971 +0 20 +cob=(7) +cfi=(53) +cfn=(3218) +calls=5 0 +0 259 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 2171 +0 15 +cob=(7) +cfi=(53) +cfn=(1380) +calls=5 0 +0 415 +0 10 +cob=(7) +cfi=(53) +cfn=(1380) +calls=5 0 +0 75 +0 10 +cob=(7) +cfi=(53) +cfn=(1142) +calls=5 0 +0 405 +0 111 + +fn=(3224) +0 41189760 +cob=(7) +cfi=(53) +cfn=(880) +calls=1287180 0 +0 144025430 +0 142876980 +cfn=(3226) +calls=1287180 0 +0 1540279829 +0 10297440 + +fn=(3226) +0 601876408 +cob=(7) +cfi=(53) +cfn=(934) +calls=42991172 0 +0 9669743026 +0 515894064 +cob=(7) +cfi=(53) +cfn=(1380) +calls=42991172 0 +0 644867580 +0 257947032 +cob=(7) +cfi=(53) +cfn=(934) +calls=42991172 0 +0 9713540435 +0 429911720 +cob=(7) +cfi=(53) +cfn=(2414) +calls=42991172 0 +0 730849924 +0 343929376 +cob=(7) +cfi=(53) +cfn=(2414) +calls=42991172 0 +0 730849924 +0 257947032 +cob=(7) +cfi=(53) +cfn=(1380) +calls=42991172 0 +0 644867580 +0 558885236 +cob=(7) +cfi=(53) +cfn=(1254) +calls=42991172 0 +0 859823440 +0 214955860 +cfn=(3078) +calls=42991172 0 +0 10788842090 +0 128973516 +cob=(7) +cfi=(53) +cfn=(1380) +calls=42991172 0 +0 644867580 +0 214955860 +cob=(7) +cfi=(53) +cfn=(1254) +calls=42991172 0 +0 859823440 +0 214955860 +cfn=(3078) +calls=42991172 0 +0 10722422507 +0 128973516 +cob=(7) +cfi=(53) +cfn=(1380) +calls=42991172 0 +0 644867580 +0 128973516 + +fn=(3306) BTS::Prob::Likelihood::ImageDiff::log_prob(BTS::Fibre::Tract::Set const&, BTS::Fibre::Tract::Set&, BTS::Fibre::Tract::Set::Tensor&) +0 1 +cfn=(3308) +calls=1 0 +0 1323487772479 + +fn=(3310) +0 4 +cfn=(3312) +calls=1 0 +0 1321052384410 +0 3 + +fn=(3334) +0 72 +cfn=(3336) +calls=4 0 +0 181568913 +0 25825492 +cfn=(3378) +calls=5065440 0 +0 8027975040 +0 26572800 +cfn=(3382) +calls=83040 0 +0 27267338 +0 1245600 +cfn=(3446) +calls=83040 0 +0 92475768 +0 1865012 +cfn=(3546) +calls=83040 0 +0 1245600 +0 166096 +cob=(7) +cfi=(53) +cfn=(1142) +calls=4 0 +0 58078 +0 57999947 +cfn=(3448) +calls=365 0 +0 101267326 +0 7300 +cfn=(3268) +calls=365 0 +0 705465 +0 191260 +cfn=(3466) +calls=22265 0 +0 18718092 +0 270465 +cfn=(3274) +calls=365 0 +0 291270 +0 1992960 +cfn=(3448) +calls=664320 0 +0 80417440 +0 51295711 +cfn=(3268) +calls=365 0 +0 705180 +0 1460 +cfn=(3268) +calls=365 0 +0 781538 +0 1825 +cfn=(3470) BTS::Fibre::BasicStrand::Tensor_tpl::Tensor_tpl(int, BTS::Fibre::Tract const&) +calls=365 0 +0 24483229 +0 1825 +cfn=(3474) +calls=365 0 +0 50301647 +0 730 +cfn=(3476) +calls=365 0 +0 2685004 +0 730 +cfn=(3478) +calls=365 0 +0 429605 +0 2190 +cfn=(3486) +calls=365 0 +0 285463167 +0 260245 +cfn=(3514) std::vector, std::allocator > >::operator=(std::vector, std::allocator > > const&) +calls=22265 0 +0 3282116979 +0 66795 +cfn=(3466) +calls=22265 0 +0 14939815 +0 155855 +cfn=(3466) +calls=22265 0 +0 14939815 +0 293825 +cfn=(3494) +calls=365 0 +0 8847833 +0 1460 +cfn=(3494) +calls=365 0 +0 8837664 +0 1992960 +cfn=(3486) +calls=664320 0 +0 80417440 +0 7307520 +cfn=(3520) +calls=664320 0 +0 385969920 +0 9300480 +cfn=(3314) +calls=664320 0 +0 5314560 +0 162094080 +cfn=(3314) +calls=40523520 0 +0 324188160 +0 2311169280 +cfn=(3530) +calls=40523520 0 +0 6605333760 +0 121570560 +cfn=(3530) +calls=40523520 0 +0 6605333760 +0 3768687360 +cfn=(3532) +calls=40523520 0 +0 15804172800 +0 932040960 +cfn=(3534) +calls=40523520 0 +0 374599589215 +0 4700728320 +cob=(7) +cfi=(53) +cfn=(880) +calls=40523520 0 +0 4457587200 +0 1337276160 +cob=(7) +cfi=(53) +cfn=(880) +calls=40523520 0 +0 4457587200 +0 2593505280 +cob=(7) +cfi=(53) +cfn=(880) +calls=121570560 0 +0 13372761600 +0 6321669120 +cob=(7) +cfi=(53) +cfn=(1142) +calls=40523520 0 +0 3282405120 +0 81047040 +cfn=(3226) +calls=40523520 0 +0 47412544963 +0 162094080 +cfn=(3534) +calls=40523520 0 +0 374599586158 +0 567329280 +cfn=(3536) +calls=40523520 0 +0 3525546240 +0 405235200 +cfn=(3536) +calls=81047040 0 +0 7051092480 +0 381245276160 +cfn=(3274) +calls=40523520 0 +0 32337768960 +0 243141120 +cfn=(3434) +calls=40523520 0 +0 607852800 +0 162094080 +cfn=(3434) +calls=40523520 0 +0 607852800 +0 162094080 +cfn=(3434) +calls=40523520 0 +0 607852800 +0 162094080 +cfn=(3434) +calls=40523520 0 +0 607852800 +0 162094080 +cfn=(3434) +calls=40523520 0 +0 607852800 +0 162094080 +cfn=(3434) +calls=40523520 0 +0 607852800 +0 121570560 +cfn=(3434) +calls=40523520 0 +0 607852800 +0 892846080 +cob=(7) +cfi=(53) +cfn=(2824) +calls=664320 0 +0 9628322 +0 1330100 +cfn=(3492) +calls=365 0 +0 50871544 +0 27523043 +cfn=(3398) +calls=83040 0 +0 68390592 +0 27247753 + +fn=(3342) +0 40 +cfn=(3344) +calls=2 0 +0 839 +0 2 + +fn=(3404) +0 474 +cfn=(3406) +calls=237 0 +0 3580465 + +fn=(3436) +0 2607 +cfn=(2802) +calls=237 0 +0 138118 +0 353841 +cfn=(3420) +calls=1659 0 +0 850431 +0 5214 + +fn=(3498) +0 16425 + +fn=(3508) +0 16790 +cob=(7) +cfi=(53) +cfn=(880) +calls=365 0 +0 434702 +0 2190 +cfn=(3510) +calls=365 0 +0 120397243 +0 5110 + +fn=(3516) std::vector, std::allocator > >::operator=(std::vector, std::allocator > > const&) +0 3072570 +cob=(7) +cfi=(53) +cfn=(880) +calls=66795 0 +0 11410373 +0 400770 +cfn=(3518) +calls=66795 0 +0 3264516936 +0 801540 + +fn=(3536) +0 52883193600 + +fn=(3554) +0 24 +cfn=(3294) +calls=3 0 +0 3610 +0 48 +cfn=(3556) +calls=3 0 +0 6925 +0 54 +cfn=(3556) +calls=9 0 +0 18774 +0 117 + +fn=(3572) +0 3151260 + +fn=(3606) +0 191052 + +fn=(3682) BTS::Image::Expected::Trilinear::Buffer::~Buffer() +0 7 +cfn=(3684) +calls=1 0 +0 66 + +fn=(1106) +0 6 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 24 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 319 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 344 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 407 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 324 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 319 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 323 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 5 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 313 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 14 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 24 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 319 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 344 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 324 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 319 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 407 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 323 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 13 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 10 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 24 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 319 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 344 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 324 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 319 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 323 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 10 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 24 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 319 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 344 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 324 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 319 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 323 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 5 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 308 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 14 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 24 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 319 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 344 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 324 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 407 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 319 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 323 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 5 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 304 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 14 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 24 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 319 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 344 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 407 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 324 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 319 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 323 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 5 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 319 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 8 + +fn=(1180) +0 5 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 24 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 319 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 344 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 324 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 319 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 323 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 8 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 24 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 7 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 24 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 407 +0 3 + +fn=(1192) +0 7 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 319 +0 6 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 344 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 324 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 319 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 407 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 323 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 + +fn=(1196) +0 5 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 24 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 5 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 350 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 + +fn=(1216) +0 7 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 319 +0 6 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 344 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 324 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 319 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 323 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 + +fn=(1368) +0 11 +cob=(4) +cfi=(90) +cfn=(1272) +calls=1 32 +0 8 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1642 +0 5 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 234 +0 5 +cfn=(1374) MR::App::get_options(std::string const&) +calls=1 0 +0 28 +0 2 +cob=(7) +cfi=(53) +cfn=(1380) +calls=1 0 +0 1177 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1414 +0 5 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 233 +0 5 +cfn=(1374) +calls=1 0 +0 28 +0 3 +cfn=(1386) +calls=1 0 +0 47 +0 2 +cfn=(1388) +calls=1 0 +0 15 +0 2 +cob=(7) +cfi=(53) +cfn=(1380) +calls=1 0 +0 100 +0 5 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 230 +0 5 +cfn=(1374) +calls=1 0 +0 28 +0 3 +cfn=(1386) +calls=1 0 +0 47 +0 2 +cfn=(1388) +calls=1 0 +0 15 +0 2 +cob=(7) +cfi=(53) +cfn=(1380) +calls=1 0 +0 100 +0 5 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 235 +0 5 +cfn=(1374) +calls=1 0 +0 28 +0 3 +cfn=(1386) +calls=1 0 +0 47 +0 2 +cfn=(1388) +calls=1 0 +0 15 +0 2 +cob=(7) +cfi=(53) +cfn=(1380) +calls=1 0 +0 100 +0 5 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 225 +0 5 +cfn=(1374) +calls=1 0 +0 28 +0 3 +cfn=(1386) +calls=1 0 +0 47 +0 2 +cfn=(1388) +calls=1 0 +0 15 +0 2 +cob=(7) +cfi=(53) +cfn=(1380) +calls=1 0 +0 100 +0 5 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 219 +0 5 +cfn=(1374) +calls=1 0 +0 28 +0 3 +cfn=(1386) +calls=1 0 +0 47 +0 2 +cfn=(1388) +calls=1 0 +0 15 +0 2 +cob=(7) +cfi=(53) +cfn=(1380) +calls=1 0 +0 100 +0 10 +cob=(7) +cfi=(53) +cfn=(1394) +calls=1 0 +0 5148 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 2456 +0 3 +cob=(7) +cfi=(53) +cfn=(1436) +calls=1 0 +0 4864 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1648 +0 12 +cob=(7) +cfi=(53) +cfn=(1474) +calls=1 0 +0 1910 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1412 +0 2 +cob=(7) +cfi=(53) +cfn=(1498) +calls=1 0 +0 1762 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1444 +0 5 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 224 +0 5 +cfn=(1374) +calls=1 0 +0 28 +0 3 +cfn=(1386) +calls=1 0 +0 47 +0 2 +cfn=(1388) +calls=1 0 +0 15 +0 2 +cob=(7) +cfi=(53) +cfn=(1380) +calls=1 0 +0 100 +0 5 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 238 +0 5 +cfn=(1374) +calls=1 0 +0 28 +0 3 +cfn=(1386) +calls=1 0 +0 47 +0 2 +cfn=(1388) +calls=1 0 +0 15 +0 2 +cob=(7) +cfi=(53) +cfn=(1380) +calls=1 0 +0 100 +0 11 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 271 +0 14 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 238 +0 5 +cfn=(1374) +calls=1 0 +0 28 +0 3 +cfn=(1386) +calls=1 0 +0 47 +0 2 +cfn=(1388) +calls=1 0 +0 15 +0 2 +cob=(7) +cfi=(53) +cfn=(1380) +calls=1 0 +0 100 +0 11 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 249 +0 5 +cfn=(1374) +calls=1 0 +0 28 +0 3 +cfn=(1386) +calls=1 0 +0 47 +0 2 +cfn=(1388) +calls=1 0 +0 15 +0 2 +cob=(7) +cfi=(53) +cfn=(1380) +calls=1 0 +0 100 +0 11 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 234 +0 5 +cfn=(1374) +calls=1 0 +0 28 +0 3 +cfn=(1386) +calls=1 0 +0 47 +0 2 +cfn=(1388) +calls=1 0 +0 15 +0 2 +cob=(7) +cfi=(53) +cfn=(1380) +calls=1 0 +0 100 +0 12 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 225 +0 5 +cfn=(1374) +calls=1 0 +0 28 +0 3 +cfn=(1386) +calls=1 0 +0 47 +0 2 +cfn=(1388) +calls=1 0 +0 15 +0 2 +cob=(7) +cfi=(53) +cfn=(1380) +calls=1 0 +0 100 +0 10 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 228 +0 5 +cfn=(1374) +calls=1 0 +0 28 +0 3 +cfn=(1386) +calls=1 0 +0 47 +0 2 +cfn=(1388) +calls=1 0 +0 15 +0 2 +cob=(7) +cfi=(53) +cfn=(1380) +calls=1 0 +0 100 +0 25 +cfn=(1512) +calls=1 0 +0 829014 +0 12 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 234 +0 13 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 243 +0 5 +cfn=(1374) +calls=1 0 +0 28 +0 3 +cfn=(1386) +calls=1 0 +0 47 +0 2 +cfn=(1388) +calls=1 0 +0 15 +0 2 +cob=(7) +cfi=(53) +cfn=(1380) +calls=1 0 +0 100 +0 11 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 245 +0 5 +cfn=(1374) +calls=1 0 +0 28 +0 3 +cfn=(1386) +calls=1 0 +0 47 +0 2 +cfn=(1388) +calls=1 0 +0 15 +0 2 +cob=(7) +cfi=(53) +cfn=(1380) +calls=1 0 +0 100 +0 11 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 219 +0 5 +cfn=(1374) +calls=1 0 +0 28 +0 3 +cfn=(1386) +calls=1 0 +0 47 +0 2 +cfn=(1388) +calls=1 0 +0 15 +0 2 +cob=(7) +cfi=(53) +cfn=(1380) +calls=1 0 +0 100 +0 11 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 234 +0 5 +cfn=(1374) +calls=1 0 +0 28 +0 3 +cfn=(1386) +calls=1 0 +0 47 +0 2 +cfn=(1388) +calls=1 0 +0 15 +0 2 +cob=(7) +cfi=(53) +cfn=(1380) +calls=1 0 +0 100 +0 11 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 241 +0 5 +cfn=(1374) +calls=1 0 +0 28 +0 3 +cfn=(1386) +calls=1 0 +0 47 +0 2 +cfn=(1388) +calls=1 0 +0 15 +0 2 +cob=(7) +cfi=(53) +cfn=(1380) +calls=1 0 +0 100 +0 11 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 234 +0 5 +cfn=(1374) +calls=1 0 +0 28 +0 3 +cfn=(1386) +calls=1 0 +0 47 +0 2 +cfn=(1388) +calls=1 0 +0 15 +0 2 +cob=(7) +cfi=(53) +cfn=(1380) +calls=1 0 +0 100 +0 11 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 235 +0 5 +cfn=(1374) +calls=1 0 +0 28 +0 3 +cfn=(1386) +calls=1 0 +0 47 +0 2 +cfn=(1388) +calls=1 0 +0 15 +0 2 +cob=(7) +cfi=(53) +cfn=(1380) +calls=1 0 +0 100 +0 10 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 219 +0 11 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 219 +0 5 +cfn=(1374) +calls=1 0 +0 28 +0 3 +cfn=(1386) +calls=1 0 +0 47 +0 2 +cfn=(1388) +calls=1 0 +0 15 +0 2 +cob=(7) +cfi=(53) +cfn=(1380) +calls=1 0 +0 100 +0 11 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 223 +0 5 +cfn=(1374) +calls=1 0 +0 28 +0 3 +cfn=(1386) +calls=1 0 +0 47 +0 2 +cfn=(1388) +calls=1 0 +0 15 +0 2 +cob=(7) +cfi=(53) +cfn=(1380) +calls=1 0 +0 100 +0 11 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 230 +0 5 +cfn=(1374) +calls=1 0 +0 28 +0 3 +cfn=(1386) +calls=1 0 +0 47 +0 2 +cfn=(1388) +calls=1 0 +0 15 +0 2 +cob=(7) +cfi=(53) +cfn=(1380) +calls=1 0 +0 100 +0 13 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 235 +0 5 +cfn=(1374) +calls=1 0 +0 28 +0 3 +cfn=(1386) +calls=1 0 +0 47 +0 2 +cfn=(1388) +calls=1 0 +0 15 +0 2 +cob=(7) +cfi=(53) +cfn=(1380) +calls=1 0 +0 100 +0 12 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 57 +0 5 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 219 +0 5 +cfn=(1374) +calls=1 0 +0 28 +0 3 +cfn=(1386) +calls=1 0 +0 47 +0 2 +cfn=(1388) +calls=1 0 +0 15 +0 2 +cob=(7) +cfi=(53) +cfn=(1380) +calls=1 0 +0 100 +0 13 +cfn=(1946) +calls=1 0 +0 14854 +0 5 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 466 +0 41 +cfn=(1950) +calls=1 0 +0 2354071 +0 2 +cob=(7) +cfi=(53) +cfn=(1380) +calls=1 0 +0 100 +0 4 +cob=(7) +cfi=(53) +cfn=(1142) +calls=1 0 +0 114 +0 9 +cfn=(2854) +calls=1 0 +0 7084275 +0 16 +cfn=(3000) +calls=1 0 +0 38923 +0 7 +cfn=(3048) +calls=1 0 +0 89880 +0 6 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 349 +0 53 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 319 +0 13 +cob=(7) +cfi=(53) +cfn=(1380) +calls=1 0 +0 15 +0 3 +cfn=(2618) +calls=1 0 +0 11 +0 7 +cfn=(3084) +calls=1 0 +0 218874 +0 2 +cob=(7) +cfi=(53) +cfn=(1380) +calls=1 0 +0 100 +0 5 +cfn=(3292) +calls=1 0 +0 12101 +0 4 +cfn=(3294) +calls=1 0 +0 1123 +0 16 +cfn=(3304) +calls=1 0 +0 2217 +0 15 +cfn=(3304) +calls=3 0 +0 6129 +0 226 +cfn=(3294) +calls=1 0 +0 1007 +0 16 +cfn=(3304) +calls=1 0 +0 2043 +0 15 +cfn=(3304) +calls=3 0 +0 6129 +0 69984 +cfn=(3306) +calls=1 0 +0 1323487772480 +0 3 +cob=(7) +cfi=(53) +cfn=(3614) +calls=1 0 +0 8381 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1632 +0 12 +cob=(7) +cfi=(53) +cfn=(1474) +calls=1 0 +0 245 +0 2 +cob=(7) +cfi=(53) +cfn=(1498) +calls=1 0 +0 73 +0 4 +cob=(7) +cfi=(53) +cfn=(1394) +calls=1 0 +0 251 +0 11 +cob=(7) +cfi=(53) +cfn=(1474) +calls=1 0 +0 245 +0 2 +cob=(7) +cfi=(53) +cfn=(1498) +calls=1 0 +0 73 +0 4 +cob=(9) +cfi=(58) +cfn=(2626) +calls=1 0 +0 1388 +0 5 +cfn=(3300) +calls=1 0 +0 4177 +0 5 +cfn=(3300) +calls=1 0 +0 4857 +0 250 +cob=(9) +cfi=(58) +cfn=(2626) +calls=61 0 +0 10065 +0 187 +cob=(7) +cfi=(53) +cfn=(1142) +calls=1 0 +0 108 +0 7 +cob=(7) +cfi=(53) +cfn=(1142) +calls=1 0 +0 108 +0 7 +cfn=(2618) +calls=1 0 +0 4900 +0 7 +cfn=(2628) +calls=1 0 +0 5909 +0 2 +cob=(7) +cfi=(53) +cfn=(1380) +calls=1 0 +0 7 +0 2 +cob=(7) +cfi=(53) +cfn=(1380) +calls=1 0 +0 100 +0 2 +cob=(7) +cfi=(53) +cfn=(1380) +calls=1 0 +0 100 +0 5 +cob=(9) +cfi=(58) +cfn=(2626) +calls=1 0 +0 203 +0 5 +cob=(7) +cfi=(53) +cfn=(1380) +calls=1 0 +0 100 +0 2 +cob=(7) +cfi=(53) +cfn=(1380) +calls=1 0 +0 7 +0 2 +cfn=(1388) +calls=1 0 +0 15 +0 14 +cob=(7) +cfi=(53) +cfn=(1254) +calls=1 0 +0 20 +0 5 +cfn=(3078) +calls=1 0 +0 334 +0 3 +cob=(7) +cfi=(53) +cfn=(1380) +calls=1 0 +0 15 +0 6 +cob=(9) +cfi=(58) +cfn=(1868) +calls=1 0 +0 663 +0 3 + +fn=(1374) +0 700 + +fn=(1742) +0 158 +cob=(7) +cfi=(53) +cfn=(880) +calls=7 0 +0 1764 +0 1496 +cob=(7) +cfi=(53) +cfn=(1142) +calls=6 0 +0 548 +0 157 + +fn=(2374) +0 5066308 +cob=(7) +cfi=(53) +cfn=(1380) +calls=150068 0 +0 15006088 +0 293564 +cob=(7) +cfi=(53) +cfn=(1380) +calls=146782 0 +0 14676744 +0 3221861 +cob=(7) +cfi=(53) +cfn=(1142) +calls=150068 0 +0 12155508 +0 1707780 + +fn=(2394) +0 161 +cfn=(2396) +calls=7 0 +0 3798 +0 28 + +fn=(2628) +0 32 +cfn=(2629) std::_Rb_tree, std::_Select1st >, std::less, std::allocator > >::_M_erase(std::_Rb_tree_node >*)'2 +calls=1 0 +0 3711 +0 9 +cfn=(2629) +calls=3 0 +0 1351 +0 24 +cob=(7) +cfi=(53) +cfn=(1142) +calls=4 0 +0 450 +0 12 +cob=(7) +cfi=(53) +cfn=(1142) +calls=4 0 +0 324 +0 26 + +fn=(2629) +0 328 +cfn=(2629) +calls=17 0 +0 5045 +0 18 +cfn=(2629) +calls=6 0 +0 2268 +0 138 +cob=(7) +cfi=(53) +cfn=(1142) +calls=23 0 +0 2438 +0 69 +cob=(7) +cfi=(53) +cfn=(1142) +calls=23 0 +0 1863 +0 208 + +fn=(2794) +0 442 +cob=(7) +cfi=(53) +cfn=(2812) +calls=20 0 +0 1605 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1979 +0 130 +cfn=(2798) +calls=6 0 +0 2925 +0 206 +cfn=(2796) +calls=1 0 +0 273 +0 79 +cfn=(2798) +calls=6 0 +0 2482 +0 216 +cfn=(2798) +calls=14 0 +0 6526 +0 28 + +fn=(2832) +0 9 +cob=(7) +cfi=(53) +cfn=(1380) +calls=1 0 +0 7 + +fn=(2860) +0 549 +cfn=(2862) +calls=61 0 +0 14245 +0 488 +cfn=(2864) +calls=61 0 +0 6305123 +0 244 + +fn=(2958) +0 854 + +fn=(2974) +0 427 +cfn=(2862) +calls=7 0 +0 1965 +0 586 +cfn=(2976) +calls=7 0 +0 30494 +0 49 +cfn=(2976) +calls=7 0 +0 147 +0 294 +cob=(9) +cfi=(58) +cfn=(2626) +calls=63 0 +0 10395 +0 215 +cob=(7) +cfi=(53) +cfn=(1142) +calls=6 0 +0 731 +0 73 +cob=(7) +cfi=(53) +cfn=(880) +calls=7 0 +0 5577 +0 52 + +fn=(3072) +0 6588 +cfn=(3074) +calls=1647 0 +0 6588 + +fn=(3088) +0 20 +cfn=(3090) +calls=1 0 +0 346 +0 14 +cob=(7) +cfi=(53) +cfn=(1708) +calls=1 0 +0 291 +0 8 +cob=(7) +cfi=(53) +cfn=(1380) +calls=1 0 +0 100 +0 7 + +fn=(3204) +0 1592 +cfn=(3206) +calls=9 0 +0 30588 +0 36 +cfn=(3208) +calls=9 0 +0 7479 +0 18 +cob=(7) +cfi=(53) +cfn=(2830) +calls=9 0 +0 129 +0 72 + +fn=(3262) +0 24 +cfn=(3204) +calls=4 0 +0 32025 +0 8 +cfn=(3264) BTS::Fibre::Tract::normalize_base_width() +calls=4 0 +0 460 +0 20 + +fn=(3264) +0 460 + +fn=(3270) +0 81 +cfn=(3268) +calls=3 0 +0 6840 +0 59 + +fn=(3328) +0 96 + +fn=(3330) +0 124 +cfn=(3550) +calls=3 0 +0 2141456622 +0 284 + +fn=(3380) +0 7850269440 + +fn=(3420) +0 68256 +cob=(7) +cfi=(53) +cfn=(880) +calls=3318 0 +0 2953326 +0 397686 +cob=(7) +cfi=(53) +cfn=(1142) +calls=2844 0 +0 268786 +0 67782 + +fn=(3448) +0 50780717 +cfn=(3450) +calls=365 0 +0 48243409 +0 30274212 +cfn=(3452) +calls=365 0 +0 16425 +0 1460 +cfn=(3454) std::_Rb_tree >, std::_Select1st > >, std::less, std::allocator > > >::_M_insert_unique_(std::_Rb_tree_const_iterator > >, std::pair > const&) +calls=365 0 +0 135529 +0 1095 +cfn=(3460) +calls=365 0 +0 6570 +0 730 +cfn=(3460) +calls=365 0 +0 6570 +0 1095 +cfn=(3462) +calls=365 0 +0 40305124 +0 2190 +cfn=(3460) +calls=365 0 +0 12470267 +0 2159 + +fn=(3454) +0 6484 +cob=(7) +cfi=(53) +cfn=(2812) +calls=296 0 +0 4733 +0 2440 +cfn=(3458) +calls=192 0 +0 58769 +0 3174 +cfn=(3456) +calls=4 0 +0 1392 +0 300 +cfn=(3458) +calls=22 0 +0 7064 +0 2686 +cfn=(3458) +calls=147 0 +0 48263 +0 224 + +fn=(3470) +0 5110 +cfn=(3224) +calls=365 0 +0 522315 +0 1095 +cfn=(3224) +calls=365 0 +0 522315 +0 1095 +cfn=(3224) +calls=365 0 +0 522315 +0 31025 +cfn=(3268) +calls=365 0 +0 781242 +0 1460 +cfn=(3268) +calls=365 0 +0 781346 +0 1460 +cfn=(3268) +calls=365 0 +0 781221 +0 1460 +cfn=(3268) +calls=365 0 +0 781055 +0 1095 +cfn=(3466) +calls=365 0 +0 320967 +0 2555 +cfn=(3466) +calls=365 0 +0 321069 +0 2555 +cfn=(3466) +calls=365 0 +0 321229 +0 2190 +cfn=(3274) +calls=365 0 +0 291270 +0 730 +cfn=(3274) +calls=365 0 +0 291270 +0 730 +cfn=(3274) +calls=365 0 +0 291270 +0 730 +cfn=(3274) +calls=365 0 +0 291270 +0 4745 +cob=(7) +cfi=(53) +cfn=(880) +calls=365 0 +0 61639 +0 8395 +cfn=(3472) +calls=1095 0 +0 16649881 +0 6205 +cfn=(3274) +calls=365 0 +0 291270 +0 1095 +cfn=(3274) +calls=365 0 +0 291270 +0 1095 +cfn=(3274) +calls=365 0 +0 291270 +0 2920 + +fn=(3490) +0 9490 +cfn=(3224) +calls=365 0 +0 522315 +0 1095 +cfn=(3224) +calls=365 0 +0 522315 +0 2920 +cob=(7) +cfi=(53) +cfn=(880) +calls=365 0 +0 40150 +0 38690 +cfn=(3478) +calls=365 0 +0 429605 +0 4745 +cob=(7) +cfi=(53) +cfn=(880) +calls=365 0 +0 2950619 +0 114975 +cfn=(3492) +calls=22265 0 +0 120765937 +0 91980 +cfn=(3494) +calls=365 0 +0 622325 +0 2920 + +fn=(3492) +0 1460925 +cfn=(3268) +calls=58437 0 +0 107025564 +0 350622 +cfn=(3268) +calls=58437 0 +0 107082789 +0 1110303 +cob=(7) +cfi=(53) +cfn=(880) +calls=58437 0 +0 9590824 +0 3798267 +cob=(7) +cfi=(53) +cfn=(880) +calls=41721 0 +0 7625091 +0 2328777 +cfn=(3472) +calls=125163 0 +0 2103560496 +0 2028303 +cfn=(3478) +calls=58437 0 +0 81470208 +0 701244 + +fn=(3500) +0 6484 +cob=(7) +cfi=(53) +cfn=(2812) +calls=296 0 +0 4733 +0 2440 +cfn=(3504) +calls=192 0 +0 60596 +0 3174 +cfn=(3502) +calls=4 0 +0 1203 +0 300 +cfn=(3504) +calls=22 0 +0 7311 +0 2686 +cfn=(3504) +calls=147 0 +0 49960 +0 224 + +fn=(3514) +0 1090985 +cfn=(3516) +calls=22265 0 +0 1098776209 +0 222650 +cfn=(3516) +calls=44530 0 +0 2181425980 +0 601155 + +fn=(3552) +0 58 + +fn=(3580) +0 187026 +cob=(7) +cfi=(53) +cfn=(2414) +calls=8906 0 +0 227103 +0 26718 +cob=(7) +cfi=(53) +cfn=(2414) +calls=8906 0 +0 222650 +0 93513 +cob=(7) +cfi=(53) +cfn=(2414) +calls=8906 0 +0 298351 +0 80154 + +fn=(3586) +0 1420507 +cfn=(3588) +calls=129137 0 +0 440343323 +0 1937055 +cfn=(3592) +calls=129137 0 +0 2970151 +0 1807918 +cfn=(3592) +calls=258274 0 +0 5940302 +0 33188209 + +fn=(3608) +0 39528 +cfn=(3274) +calls=3294 0 +0 2628612 +0 29646 +cfn=(3274) +calls=9882 0 +0 7885836 +0 49410 + +ob=(13) /usr/lib/valgrind/callgrind-amd64-linux +fl=(91) /build/buildd/valgrind-3.6.0~svn20100212/coregrind/m_trampoline.S +fn=(1274) vgPlain_amd64_linux_REDIR_FOR_vtime +165 2 ++1 2 ++1 2 + +fn=(2782) vgPlain_amd64_linux_REDIR_FOR_vgettimeofday +155 1 ++1 1 ++1 1 + +ob=(12) +fl=(84) +fn=(3608) +0 13176 +cob=(7) +cfi=(53) +cfn=(1142) +calls=3294 0 +0 349164 + +ob=(9) +fl=(58) +fn=(2494) +0 36 +cob=(4) +cfi=(71) +cfn=(1148) +calls=6 3692 +0 576 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1642 +0 18 +cob=(4) +cfi=(71) +cfn=(1148) +calls=6 3692 +0 468 + +fn=(2902) gsl_vector_subvector +0 17385 + +fn=(2926) gsl_matrix_submatrix +0 8052 + +fn=(2598) +0 24 + +fn=(2898) +0 20069 +cfn=(2900) gsl_matrix_row +calls=549 0 +0 9333 +0 2196 +cfn=(2900) +calls=549 0 +0 9333 +0 2928 +cfn=(2902) +calls=366 0 +0 6954 +0 1830 +cfn=(2902) +calls=366 0 +0 6954 +0 1464 +cfn=(2904) gsl_blas_ddot +calls=366 0 +0 18878 +0 1098 +cfn=(2900) +calls=183 0 +0 3111 +0 915 +cfn=(2902) +calls=183 0 +0 3477 +0 366 +cfn=(2912) gsl_blas_dnrm2 +calls=183 0 +0 14762 +0 14335 + +fn=(2900) +0 21777 + +fn=(2930) gsl_blas_dtrmv +0 5124 +cob=(8) +cfi=(57) +cfn=(2936) +calls=244 0 +0 37210 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 872 +0 488 + +fn=(428) +0 6 + +fn=(2604) +0 6 +cob=(4) +cfi=(71) +cfn=(1148) +calls=1 3692 +0 78 +0 3 +cob=(4) +cfi=(71) +cfn=(1148) +calls=1 3692 +0 78 + +fn=(2886) +0 2379 +cob=(8) +cfi=(57) +cfn=(2892) +calls=61 0 +0 1269593 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 838 +0 305 + +fn=(2904) +0 15372 +cob=(8) +cfi=(57) +cfn=(2910) +calls=1281 0 +0 47580 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 822 +0 5124 + +fn=(2964) +0 1342 +cob=(8) +cfi=(57) +cfn=(2970) +calls=61 0 +0 256444 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 846 +0 488 + +fn=(422) +0 6 + +fn=(434) +0 11 + +fn=(2592) +0 8 +cob=(4) +cfi=(71) +cfn=(886) +calls=1 3615 +0 95 +0 5 +cob=(4) +cfi=(71) +cfn=(886) +calls=1 3615 +0 95 +0 9 + +fn=(2928) gsl_matrix_subcolumn +0 40687 + +fn=(1868) +0 1129304 +cob=(4) +cfi=(71) +cfn=(886) +calls=141163 3615 +0 13467749 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1742 +0 705815 +cob=(4) +cfi=(71) +cfn=(886) +calls=141163 3615 +0 36369870 +0 1270467 + +fn=(2912) +0 732 +cob=(8) +cfi=(57) +cfn=(2918) +calls=183 0 +0 13176 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 854 + +fn=(2924) +0 8174 +cfn=(2926) +calls=244 0 +0 8052 +0 4880 +cfn=(2928) +calls=244 0 +0 5612 +0 3904 +cfn=(2930) +calls=244 0 +0 43694 +0 976 +cfn=(2938) gsl_blas_dscal +calls=244 0 +0 8288 +0 2013 +cfn=(2928) +calls=61 0 +0 1403 +0 1830 +cfn=(2928) +calls=183 0 +0 4209 +0 2196 +cfn=(2928) +calls=366 0 +0 8418 +0 10370 +cfn=(2928) +calls=610 0 +0 14030 +0 8540 +cfn=(2904) +calls=610 0 +0 31720 +0 6954 +cfn=(2928) +calls=244 0 +0 5612 +0 3416 +cfn=(2904) +calls=244 0 +0 15616 +0 3294 +cfn=(2928) +calls=61 0 +0 1403 +0 854 +cfn=(2904) +calls=61 0 +0 2684 +0 8174 + +fn=(2938) +0 976 +cob=(8) +cfi=(57) +cfn=(2944) +calls=244 0 +0 6466 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 846 + +fn=(2478) +0 48 +cob=(4) +cfi=(71) +cfn=(886) +calls=6 3615 +0 586 +0 30 +cob=(4) +cfi=(71) +cfn=(886) +calls=6 3615 +0 1270 +0 54 + +fn=(2626) +0 846246 +cob=(4) +cfi=(71) +cfn=(1148) +calls=141041 3692 +0 16935027 +0 423123 +cob=(4) +cfi=(71) +cfn=(1148) +calls=141041 3692 +0 11001198 + +fn=(2950) +0 1891 +cob=(8) +cfi=(57) +cfn=(2956) +calls=61 0 +0 1614365 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 872 +0 671 + +fn=(3826) +0 10 +cob=(4) +cfi=(153) +cfn=(3726) +calls=1 31 +0 430 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1810 +0 13 + +ob=(6) +fl=(134) +fn=(3016) +44 12 ++1 2 +-1 4 ++1 6 ++1 4 ++1 4 ++6 6 ++1 8 ++26 2 + +fl=(137) +fn=(3376) +90 300 ++11 120 ++1 120 ++1 120 ++1 120 ++3 120 ++1 3 ++2 3 ++1 3 +-3 3 ++2 36 ++3 3 +-2 3 ++2 21 +785 3 +339 354 +116 114 ++1 27 ++6 9 +-5 9 +-1 9 ++3 18 +-3 9 ++4 18 +-4 9 ++1 9 +-1 9 ++5 9 +-4 9 ++5 18 ++1 18 +-5 9 +-1 9 ++6 9 +-5 9 ++1 45 ++1 9 +-1 9 ++1 54 ++6 90 ++3 9 +-3 9 ++1 18 ++2 81 ++4 144 ++2 110 ++1 66 ++5 12 ++1 12 +-1 36 ++1 12 +-1 12 ++1 48 ++2 12 ++3 12 +-2 12 ++7 12 +-8 12 ++1 24 ++5 24 ++2 24 +-7 24 ++5 24 ++2 12 +-7 12 ++7 48 +-7 24 ++7 12 +-7 12 ++7 144 ++3 12 +-3 12 ++1 24 ++2 72 +-11 10 ++3 10 +-2 10 ++7 10 +-8 10 ++1 20 ++5 20 ++2 20 +-7 20 ++5 20 ++2 10 +-7 10 ++7 40 +-7 20 ++7 10 +-7 10 ++7 120 ++3 10 +-3 10 ++1 20 ++2 140 +827 3 +339 1 +-78 1 ++78 5 +160 52 ++1 52 ++3 26 +-3 26 ++3 26 ++2 26 +-5 26 ++1 26 ++1 52 +-1 26 ++3 26 +-1 26 +-2 26 ++4 26 +-2 130 ++3 26 ++1 26 +-1 26 ++1 26 +-1 26 ++1 26 ++1 78 +-1 26 ++1 78 ++2 104 ++3 18 ++1 18 +-1 18 ++1 93 ++1 39 ++2 54 ++2 3 +-2 3 ++1 6 ++1 6 ++1 8 ++1 18 +694 4 +316 6 +138 20 ++1 10 +-1 20 ++1 10 +-1 10 ++1 30 +659 8 ++1 6 ++1 4 ++1 1 ++1 1 +-1 2 ++1 1 +-1 1 ++1 2 ++8 1 ++3 1 ++1 1 ++4 1 +-8 1 ++8 1 +-4 1 ++2 1 ++2 1 ++2 1 +-4 1 ++6 1 +-2 1 +-4 1 ++2 1 ++4 6 +-2 1 ++2 17 ++1 1 +-1 3 ++1 2 +-1 2 ++2 1 +-2 1 ++2 1 ++1 1 +-3 1 +-12 1 ++3 1 ++1 1 ++4 1 +-8 1 ++8 1 +-4 1 ++2 1 ++2 1 ++2 1 +-4 1 ++6 1 +-2 1 +-4 1 ++2 1 ++4 6 +-2 1 ++2 17 ++1 1 +-1 3 ++1 2 +-1 2 ++2 1 +-2 1 ++2 1 ++1 1 +-3 1 ++2 1 ++1 1 ++2 6 +-3 1 ++1 1 ++2 8 +209 16 ++1 20 ++1 4 ++6 4 +-5 4 +-1 4 ++10 4 +-9 4 +-1 4 ++8 4 +-8 4 ++1 4 ++2 4 ++7 4 +-4 4 ++4 4 +-4 4 +-5 4 ++5 4 ++4 12 +-9 8 ++7 4 +-7 4 ++9 4 +-8 4 ++6 4 +-6 4 ++6 8 ++2 4 +-2 4 ++2 4 +-2 8 ++2 8 +-2 4 ++2 40 ++1 4 +-1 4 ++1 4 ++1 8 ++1 8 +-13 4 ++6 4 +-5 4 +-1 4 ++10 4 +-9 4 +-1 4 ++8 4 +-8 4 ++1 4 ++2 4 ++7 4 +-4 4 ++4 4 +-4 4 +-5 4 ++5 4 ++4 12 +-9 8 ++7 4 +-7 4 ++9 4 +-8 4 ++6 4 +-6 4 ++6 8 ++2 4 +-2 4 ++2 4 +-2 8 ++2 8 +-2 4 ++2 40 ++1 4 +-1 4 ++1 4 ++1 8 ++1 16 ++1 91 +667 1 ++1 1 +-1 2 ++1 1 +-1 1 ++1 3 ++1 2 +224 12 +-39 72 ++4 9 ++6 9 +-3 9 +-3 9 ++10 9 +-10 9 ++1 9 +-1 9 ++5 9 ++1 18 ++4 9 +-9 9 ++2 9 ++7 45 +-8 9 ++1 9 ++7 9 +-8 9 ++1 18 ++7 9 +-7 9 ++7 9 +-7 18 ++7 18 +-7 9 ++7 18 +-7 9 ++7 63 ++1 9 +-1 27 ++1 9 ++1 18 ++1 18 +-13 6 ++6 6 +-3 6 +-3 6 ++10 6 +-10 6 ++1 6 +-1 6 ++5 6 ++1 12 ++4 6 +-9 6 ++2 6 ++7 30 +-8 6 ++1 6 ++7 6 +-8 6 ++1 12 ++7 6 +-7 6 ++7 6 +-7 12 ++7 12 +-7 6 ++7 12 +-7 6 ++7 42 ++1 6 +-1 18 ++1 6 ++1 12 ++1 26 ++1 117 +800 2 ++1 1 +-1 2 ++4 1 ++3 1 ++1 1 ++5 1 +-9 1 ++9 1 +-5 1 ++2 1 ++3 1 ++2 1 +-5 1 ++7 1 +-2 1 +-5 1 ++3 1 ++4 6 +-2 1 ++2 17 ++1 1 +-1 5 ++1 2 +-1 1 ++2 1 ++1 1 +-3 1 ++2 2 ++1 1 ++1 2 ++1 8 ++1 4 ++4 2 +202 24 +-14 36 +-7 6 + +fn=(3366) +348 240 ++5 120 ++2 180 ++2 120 ++2 120 ++1 36 ++1 12 ++8 12 +-8 12 ++3 12 +-3 12 ++3 12 ++7 36 +-10 12 ++1 12 +-1 12 ++5 12 +-4 12 ++9 12 +-2 12 ++2 12 +-2 24 ++2 24 +-8 12 ++1 12 ++7 12 +-8 12 ++1 60 ++7 12 +-7 12 ++7 144 ++1 12 +-1 12 ++1 12 ++2 84 ++4 96 ++1 132 ++1 66 ++1 22 +-1 22 ++1 22 ++1 44 +-1 22 ++2 47 ++1 39 ++2 3 +-2 3 ++1 3 +-1 3 ++1 3 ++1 6 ++1 8 ++47 16 +587 240 +360 24 ++53 52 ++1 52 ++3 26 +-3 26 ++3 26 +-3 26 ++1 26 ++1 26 ++1 26 +-1 26 +-1 26 ++3 26 +-1 26 +-2 26 ++2 26 ++2 26 +-2 78 ++3 52 ++1 26 +-1 26 ++1 26 ++1 78 +-1 26 ++1 26 ++2 104 ++35 106 ++1 14 ++6 14 +-5 14 +-1 14 ++8 14 ++2 28 +-9 14 +-1 28 ++1 14 ++2 14 ++7 14 +-4 14 ++4 14 +-4 14 +-5 14 ++5 14 ++4 42 +-9 28 ++7 14 +-7 14 ++9 14 +-8 14 ++6 14 +-6 14 ++6 70 ++2 14 +-2 14 ++2 168 ++1 14 +-1 14 ++1 14 ++1 28 ++1 28 +-13 4 ++6 4 +-5 4 +-1 4 ++8 4 ++2 8 +-9 4 +-1 8 ++1 4 ++2 4 ++7 4 +-4 4 ++4 4 +-4 4 +-5 4 ++5 4 ++4 12 +-9 8 ++7 4 +-7 4 ++9 4 +-8 4 ++6 4 +-6 4 ++6 20 ++2 4 +-2 4 ++2 48 ++1 4 +-1 4 ++1 4 ++1 8 ++1 26 ++1 72 +1125 42 +391 57 ++1 50 ++1 10 ++6 10 +-6 30 ++1 10 +-1 10 ++3 10 ++2 10 +-4 10 ++5 20 ++4 20 +-8 10 ++1 10 ++7 20 +-8 10 ++8 30 +-7 40 ++7 20 +-7 10 ++7 10 +-7 10 ++7 80 ++1 10 +-1 30 ++2 10 +-1 10 ++1 20 ++1 20 +-13 9 ++6 9 +-6 27 ++1 9 +-1 9 ++3 9 ++2 9 +-4 9 ++5 18 ++4 18 +-8 9 ++1 9 ++7 18 +-8 9 ++8 27 +-7 36 ++7 18 +-7 9 ++7 9 +-7 9 ++7 72 ++1 9 +-1 27 ++2 9 +-1 9 ++1 18 ++1 38 ++47 104 ++75 52 ++21 84 +391 36 +-4 6 ++35 78 +-16 27 ++21 8 ++1 8 +-1 8 ++1 8 ++1 17 ++1 13 ++2 1 +-2 2 ++1 2 ++1 2 ++1 5 ++4 26 ++2 4 ++6 4 +-6 12 ++1 4 +-1 4 ++3 4 ++2 4 +-4 4 ++5 8 ++4 8 +-8 4 ++1 4 ++7 8 +-8 4 ++8 12 +-7 16 ++7 8 +-7 4 ++7 4 +-7 4 ++7 32 ++1 4 +-1 12 ++2 4 +-1 4 ++1 8 ++1 8 +-13 3 ++6 3 +-6 9 ++1 3 +-1 3 ++3 3 ++2 3 +-4 3 ++5 6 ++4 6 +-8 3 ++1 3 ++7 6 +-8 3 ++8 9 +-7 12 ++7 6 +-7 3 ++7 3 +-7 3 ++7 24 ++1 3 +-1 9 ++2 3 +-1 3 ++1 6 ++1 15 ++21 27 +-21 12 +-14 18 + +fl=(130) /build/buildd/eglibc-2.11.1/math/../sysdeps/ieee754/dbl-64/s_finite.c +fn=(2880) finite +33 38400 ++2 6400 + +fl=(52) +fn=(246) +0 6 + +fn=(258) +0 11 + +fn=(3886) +0 10 +cob=(4) +cfi=(153) +cfn=(3726) +calls=1 31 +0 430 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1810 +0 13 + +fn=(252) +0 6 + +fl=(132) /build/buildd/eglibc-2.11.1/math/../sysdeps/ieee754/dbl-64/e_pow.c +fn=(2986) __ieee754_pow +58 600 ++17 300 +-17 2100 ++14 300 ++1 300 ++1 300 ++63 300 +-71 300 ++2 300 +-1 300 ++1 600 ++10 540 ++3 540 +-3 360 +-9 900 ++2 900 ++1 1200 ++1 900 ++1 720 ++1 1140 ++80 1800 ++48 360 +78 180 +203 180 ++4 180 +-3 360 ++3 360 ++3 720 ++5 1260 ++1 180 ++1 540 ++1 360 ++37 180 ++1 180 +-2 180 ++1 180 ++1 360 ++1 180 +-2 180 ++5 180 +-3 180 +-1 180 +-1 180 ++2 180 ++3 180 ++2 180 +-5 180 ++1 180 ++2 180 ++2 180 +-2 180 ++2 180 +-4 180 ++2 180 ++1 180 ++1 180 +-1 180 ++1 3240 ++1 180 +-1 180 ++1 180 ++2 540 +83 180 ++10 360 +-10 180 ++3 180 +-1 180 +-2 180 ++3 180 +-2 540 ++3 360 +-2 180 ++2 180 ++2 180 ++1 180 +-1 180 ++1 720 ++1 360 ++2 360 ++1 2520 +cfi=(129) /build/buildd/eglibc-2.11.1/math/../sysdeps/ieee754/dbl-64/e_exp.c +cfn=(2990) __exp1 +calls=180 +70 +* 15840 ++1 1800 +-22 240 +211 1620 + +fl=(129) +fn=(2990) +164 540 ++1 360 ++1 360 ++2 540 ++1 180 ++19 180 ++6 180 +-25 360 ++25 180 +-24 180 ++2 180 ++5 180 +-5 180 +-2 360 ++4 180 ++1 180 ++5 180 +-5 180 ++2 360 ++2 180 ++1 180 +-1 180 ++6 180 ++1 180 +-6 180 ++1 180 ++4 180 ++1 180 +-1 180 ++3 180 ++1 180 +-4 180 ++4 360 +-9 180 ++9 180 +-1 180 ++1 180 +-8 1080 ++7 720 ++1 180 +-1 180 ++1 900 ++2 720 ++1 180 +-1 180 ++3 180 +-2 180 ++2 1260 +-11 900 ++11 360 ++58 360 + +fn=(2878) __ieee754_exp +57 12200 ++1 12200 ++1 12200 ++2 18300 ++2 6000 ++19 6000 +-19 12000 ++6 6000 +-1 6000 +-5 6000 ++1 6000 ++2 6000 ++5 6000 +-5 6000 +-2 12000 ++4 6000 ++3 6000 +-2 12000 ++2 6000 +-2 6000 ++4 6000 ++1 6000 +-1 6000 ++2 6000 ++4 6000 ++1 6000 +-6 6000 ++5 6000 ++1 6000 +-1 6000 ++3 6000 ++1 6000 +-4 6000 ++4 18000 +-9 6000 ++8 24000 +-7 12000 ++8 6000 +-8 18000 ++8 6000 +-8 6000 ++7 6000 ++1 6000 +-1 6000 ++1 24000 ++2 30000 ++1 12000 ++2 36000 ++36 6000 +-1 30000 ++1 6000 ++23 12000 +-55 300 ++55 200 + +fl=(128) +fn=(2876) +38 12200 ++5 12200 +cfi=(129) +cfn=(2878) +calls=6100 +14 +* 517400 ++1 6100 +-1 6100 ++1 18300 ++1 18300 +cfi=(130) +cfn=(2880) +calls=6100 -12 +* 42700 +* 24400 ++1 12200 ++2 12200 ++5 18300 + +fl=(138) +fn=(3388) +44 1494720 ++1 249120 +-1 498240 ++1 747360 ++1 498240 ++1 498240 ++7 508746 ++1 339164 ++1 678328 ++1 339164 ++1 678328 ++21 1017492 ++2 169582 +-2 477228 ++2 79538 +-33 318152 ++1 318152 ++1 126855 ++5 4 ++2 5965 + +fl=(133) /build/buildd/eglibc-2.11.1/math/../sysdeps/ieee754/dbl-64/s_isnan.c +fn=(2988) isnan +33 1800 ++2 600 +-2 600 ++2 5400 ++3 600 + +fl=(131) +fn=(2984) +29 900 ++5 300 +cfi=(132) +cfn=(2986) +calls=300 +24 +* 55080 ++1 300 +-1 300 ++1 1200 +cfi=(133) +cfn=(2988) +calls=300 -2 +* 4500 +* 600 ++1 600 +cfi=(133) +cfn=(2988) +calls=300 -3 +* 4500 +* 600 ++29 900 +-23 1200 ++11 900 +cfi=(130) +cfn=(2880) +calls=300 -20 +* 2100 +* 900 ++8 900 + +fl=(127) +fn=(2870) +34 6100 ++1 6100 ++1 6100 ++1 6100 ++1 6100 ++1 6100 ++1 6100 ++1 6100 ++3 6100 + +fl=(70) +fn=(868) +39 1 ++1 4 ++1 2 ++1 2 ++6 1 ++1 1 +-1 1 ++1 2 ++12 1 + +ob=(4) +fl=(118) /build/buildd/eglibc-2.11.1/stdlib/../sysdeps/ieee754/dbl-64/mpn2dbl.c +fn=(1842) __mpn_construct_double +40 245 +-6 980 ++6 490 ++1 1470 ++7 245 + +fl=(86) /build/buildd/eglibc-2.11.1/setjmp/../sysdeps/x86_64/bsd-_setjmp.S +fn=(1224) _setjmp +34 1 ++2 1 +cfi=(87) /build/buildd/eglibc-2.11.1/setjmp/../sysdeps/x86_64/setjmp.S +cfn=(1226) __sigsetjmp +calls=1 -10 +* 27 + +fl=(148) /build/buildd/eglibc-2.11.1/stdlib/../sysdeps/x86_64/rshift.S +fn=(3658) __mpn_rshift +25 2 ++1 2 ++1 2 ++1 2 ++1 2 ++1 2 ++1 2 ++1 2 ++1 2 ++1 2 ++1 2 ++1 2 ++1 4 ++3 2 ++1 2 ++1 2 ++1 2 ++1 2 ++1 2 ++1 2 ++12 2 ++1 2 ++1 2 ++1 2 + +fl=(46) +fn=(208) __libc_global_ctors +19 1 ++7 1 +-7 5 ++1 1 +cfi=(47) /build/buildd/eglibc-2.11.1/string/../sysdeps/x86_64/cacheinfo.c +cfn=(210) init_cacheinfo +calls=1 487 +* 6258 +-1 1 ++1 1 +cfi=(50) /build/buildd/eglibc-2.11.1/elf/dl-altinit.c +cfn=(222) dlinit_alt +calls=1 +13 +* 4 +-1 6 ++10 2 + +fn=(3924) +19 1 ++17 1 +-17 2 ++20 2 + +fl=(142) /build/buildd/eglibc-2.11.1/string/../sysdeps/x86_64/strchrnul.S +fn=(3646) strchrnul +27 2 ++1 2 ++1 2 ++1 2 ++1 2 ++1 2 ++1 2 ++1 2 ++1 2 ++1 2 ++1 2 ++1 2 ++1 2 ++1 2 ++1 2 ++1 2 ++1 2 ++1 2 ++1 2 ++1 2 ++12 2 ++1 2 ++1 2 + +fl=(50) +fn=(222) +33 3 ++1 1 + +fl=(85) +fn=(1048) +96 7 ++10 1 +-10 3 ++10 3 ++52 1 +-52 1 ++52 1 ++1 4 +cfi=(56) +cfn=(362) +calls=1 57 +* 62 ++22 4 ++3 2 ++1 5 +cob=(12) +cfi=(84) +cfn=(1050) +calls=1 0 +* 217056 ++4 4 ++15 2 ++9 2 +cfi=(86) +cfn=(1224) +calls=1 34 +* 29 ++1 2 ++5 2 ++1 2 ++3 2 ++3 5 +cob=(12) +cfi=(84) +cfn=(1230) +calls=1 0 +* 1323498631965 ++32 2 +cfi=(151) /build/buildd/eglibc-2.11.1/stdlib/exit.c +cfn=(3678) exit +calls=1 49 +* 94492 +106 2 + +fl=(105) +fn=(1482) +29 3 ++3 3 +-3 6 ++3 42 ++1 9 +fi=(104) /build/buildd/eglibc-2.11.1/libio/libioP.h +984 6 ++1 33 +fe=(105) +36 9 +-3 9 +cfi=(100) /build/buildd/eglibc-2.11.1/libio/genops.c +cfn=(1484) __overflow +calls=3 246 +* 417 +* 6 + +fl=(61) +fn=(538) +46 10 ++12 1 +-12 1 ++12 1 ++8 2 ++3 4 ++6 4 ++1 3 +281 9 +63 2 ++12 3 +280 2 + +fl=(72) /build/buildd/eglibc-2.11.1/malloc/hooks.c +fn=(888) malloc_hook_ini +36 1 +-1 2 ++1 1 ++1 1 +cfi=(73) /build/buildd/eglibc-2.11.1/malloc/arena.c +cfn=(890) ptmalloc_init +calls=1 467 +* 59667 ++1 1 ++1 1 +-1 1 +cfi=(71) +cfn=(887) malloc'2 +calls=1 3615 +* 1059 + +fl=(89) +fn=(1248) +25 1545 ++1 1545 ++1 1545 ++1 1545 ++1 1545 ++1 1545 ++1 1545 ++1 1545 ++1 1545 ++1 1545 ++1 1545 ++1 1545 ++1 1545 ++1 1545 ++1 1545 ++1 1545 ++1 1545 ++1 1545 ++1 1184 ++1 1184 ++2 882 ++1 882 ++1 882 ++1 882 ++1 882 ++1 882 ++1 525 ++1 525 ++2 971 ++1 971 ++2 718 ++1 718 ++1 718 ++1 718 ++1 718 ++1 718 ++1 574 + +fl=(62) +fn=(610) +32 4 ++2 8 +-2 4 ++2 4 ++3 8 ++29 4 +-28 4 ++28 8 ++1 12 ++2 12 ++4 12 ++1 4 + +fl=(115) /build/buildd/eglibc-2.11.1/stdlib/mul.c +fn=(1832) __mpn_mul +58 4428 ++6 369 +-6 369 ++6 369 ++12 1107 ++5 369 ++1 738 ++9 738 +cfi=(116) /build/buildd/eglibc-2.11.1/stdlib/../sysdeps/x86_64/mul_1.S +cfn=(1834) __mpn_mul_1 +calls=369 -65 +* 5559 ++2 369 ++5 369 +-5 369 ++5 369 ++54 2952 + +fl=(63) +fn=(616) +33 896 ++9 256 ++5 128 ++1 128 +-1 128 ++38 896 + +fl=(154) /build/buildd/eglibc-2.11.1/nptl/../nptl/sysdeps/unix/sysv/linux/unregister-atfork.c +fn=(3728) __unregister_atfork +29 8 ++8 8 +-8 16 ++11 16 ++1 32 ++5 8 +-6 24 ++82 16 + +fl=(92) +fn=(1280) +211 2 ++1 6 ++1 3 +cfi=(93) /build/buildd/eglibc-2.11.1/stdlib/random_r.c +cfn=(1282) srandom_r +calls=1 -48 +* 10209 ++1 4 ++1 2 + +fl=(98) +fn=(1408) +37 4 ++1 4 +-1 4 ++1 4 +-1 28 ++4 8 ++2 60 ++1 18 +fi=(104) +984 8 ++1 24 +fe=(98) +51 8 ++4 28 +-11 1 ++1 5 +cfi=(99) /build/buildd/eglibc-2.11.1/libio/fileops.c +cfn=(1410) _IO_file_xsputn@@GLIBC_2.2.5 +calls=1 1296 +* 2273 +* 15 +cfi=(99) +cfn=(1410) +calls=3 1296 +* 476 +* 16 +fi=(104) +985 24 +fe=(98) + +fl=(47) +fn=(210) +487 4 ++13 3 +673 5 +501 1 +cfi=(48) /build/buildd/eglibc-2.11.1/csu/../sysdeps/x86_64/multiarch/init-arch.c +cfn=(212) __init_cpu_features +calls=1 49 +* 44 +* 1 ++6 2 ++2 3 +cfn=(214) handle_intel +calls=1 256 +* 2197 ++4 2 +-4 1 ++4 1 +cfn=(214) +calls=1 256 +* 2211 ++2 1 +-2 1 ++2 2 ++12 1 ++17 1 +-18 1 ++1 1 ++10 3 ++7 1 +-7 1 ++7 2 ++7 6 ++6 2 +-6 8 ++6 4 ++3 15 ++2 1 ++6 6 ++7 1 +-7 1 ++11 2 ++27 2 ++56 2 ++2 1 ++1 1 +-1 2 ++4 2 ++2 1 ++1 1 +-1 3 +-63 7 +-88 3 +cfn=(214) +calls=1 256 +* 1694 +* 3 + +fn=(216) intel_check_word +163 132 ++1 24 ++8 12 +-2 72 ++16 66 ++9 2 +-1 1 ++28 5 +-1 1 ++1 1 +cfi=(49) /build/buildd/eglibc-2.11.1/stdlib/bsearch.c +cfn=(218) bsearch +calls=1 27 +* 153 +* 145 +-1 29 ++1 29 +cfi=(49) +cfn=(218) +calls=29 27 +* 4845 ++2 60 ++2 28 ++14 10 ++6 28 +-74 56 ++2 30 ++2 60 +-4 10 ++79 80 +-10 4 +-13 2 ++2 4 ++2 2 ++19 16 + +fn=(220) intel_02_known_compare +152 784 ++3 378 ++1 196 + +fn=(214) +256 24 ++1 12 ++7 3 ++1 9 ++8 6 ++5 3 +-5 6 ++5 3 ++7 15 +cfn=(216) +calls=3 163 +* 2415 ++1 6 ++3 15 +cfn=(216) +calls=3 163 +* 1791 ++1 6 ++3 15 +cfn=(216) +calls=3 163 +* 69 ++1 6 ++3 15 +cfn=(216) +calls=3 163 +* 1632 ++1 6 +-31 2 ++13 3 ++1 3 +-1 6 ++22 7 ++5 24 + +fl=(77) /build/buildd/eglibc-2.11.1/malloc/morecore.c +fn=(906) __default_morecore +48 487 ++1 487 +cfi=(78) /build/buildd/eglibc-2.11.1/misc/sbrk.c +cfn=(908) sbrk +calls=487 -14 +* 23423 ++1 1461 ++3 974 + +fl=(100) +fn=(1930) _IO_default_finish +687 10 ++2 15 ++6 15 ++3 15 ++6 5 ++6 5 +-6 5 +cfn=(1916) _IO_un_link +calls=5 64 +* 50 + +fn=(1414) _IO_doallocbuf +419 1 ++1 1 +-1 1 ++1 1 ++6 2 +-4 2 ++1 3 +cfi=(101) /build/buildd/eglibc-2.11.1/libio/filedoalloc.c +cfn=(1416) _IO_file_doallocate +calls=1 88 +* 89 +* 2 + +fn=(1588) _IO_link_in +104 40 ++1 30 ++4 5 +-2 10 ++2 25 ++1 55 ++1 5 ++1 75 ++4 5 ++2 5 +-4 5 ++1 5 +-1 5 ++4 35 ++2 5 +-1 5 ++1 45 ++1 10 ++3 40 +-6 30 + +fn=(1916) +64 60 ++1 30 ++4 30 ++1 55 ++1 5 ++1 75 ++2 15 ++2 10 ++4 2 ++3 4 ++1 8 ++6 5 ++2 40 ++2 5 +-1 5 ++1 45 ++1 10 ++3 60 +-15 4 ++3 2 ++1 2 +-1 2 ++2 2 ++4 30 +-14 3 ++2 3 +-2 6 + +fn=(3926) _IO_cleanup +1007 1 ++3 1 +-3 4 ++3 1 +cfn=(3928) _IO_flush_all_lockp +calls=1 823 +* 82 +-59 1 ++59 1 +-59 2 ++11 2 +-9 21 ++9 13 ++7 5 ++10 5 +cfi=(99) +cfn=(3930) _IO_file_setbuf@@GLIBC_2.2.5 +calls=1 453 +* 78 ++2 2 ++6 3 +-36 9 ++71 7 +-51 1 ++4 1 +-4 1 ++2 1 ++2 1 +-2 1 ++3 1 +-2 1 ++2 3 ++6 12 + +fn=(1582) _IO_no_init +648 54 ++1 6 +cfn=(1584) _IO_old_init +calls=6 -13 +* 141 ++3 6 +-2 6 ++2 6 ++2 5 ++1 5 ++1 5 ++1 5 ++1 5 ++1 5 ++1 5 ++1 5 ++1 5 ++1 5 ++1 5 ++1 5 ++2 5 ++3 5 ++1 30 +-1 1 ++1 6 + +fn=(1584) +636 6 +-21 6 ++1 6 +-1 6 ++2 6 ++1 6 ++1 6 ++17 6 +-16 6 ++1 6 ++1 6 ++1 6 ++1 6 ++1 6 ++2 6 ++1 6 ++1 6 ++1 6 ++1 6 ++5 6 ++1 21 + +fn=(1920) _IO_unsave_markers +1117 10 ++20 10 ++1 5 + +fn=(3932) _IO_default_setbuf +562 5 ++1 1 +-1 2 ++1 1 +cfi=(99) +cfn=(1508) _IO_file_sync@@GLIBC_2.2.5 +calls=1 899 +* 13 +* 2 ++2 2 ++2 1 ++1 5 +cfn=(1424) _IO_setb +calls=1 404 +* 19 ++7 3 ++1 3 ++2 6 + +fn=(1428) _IO_default_xsputn +452 3 ++3 6 +-3 9 ++1 3 +-1 9 ++1 3 ++2 4 ++5 172 ++25 254 +cfi=(99) +cfn=(1412) _IO_file_overflow@@GLIBC_2.2.5 +calls=42 837 +* 1386 +* 126 ++2 42 ++1 42 ++1 2 ++1 18 + +fn=(3928) +823 8 ++6 6 ++1 2 ++5 1 +-1 1 ++2 2 +-2 1 ++2 3 ++33 2 ++4 9 +-37 8 ++6 2 +-4 2 ++4 5 +-4 1 ++4 2 ++14 3 +-2 3 ++2 3 ++7 6 +-21 12 + +fn=(1424) +404 32 ++1 8 +-1 8 ++1 18 ++4 8 +-2 8 ++1 8 ++1 8 ++3 7 ++1 32 +-3 2 + +fn=(1484) +246 9 ++2 9 +cfi=(99) +cfn=(1412) +calls=3 837 +* 399 + +fl=(69) +fn=(642) +26 572399506 ++1 572399506 ++1 572399506 ++1 572399506 ++1 572399506 ++1 572399506 ++1 572399506 ++1 572399506 ++1 572399506 ++1 572399506 ++1 572399506 ++1 572399506 ++2 10786 ++1 10786 ++1 10786 ++1 10786 ++1 10786 ++1 10786 ++2 572399506 ++1 572399506 ++1 572399506 ++1 572399506 + +fl=(93) +fn=(1282) +165 5 ++8 2 ++44 5 +-42 1 ++1 2 ++3 1 ++2 3 ++3 1 +-1 1 ++1 1 ++5 1 ++1 4 ++7 13 ++2 3 ++1 1 +-10 3 ++7 348 ++2 87 ++1 29 +-10 87 ++13 1 ++2 1 +-1 1 ++2 1 +-3 1 ++3 1 +-3 1 ++3 2 ++3 3 +cfn=(1284) random_r +calls=1 367 +* 26 +* 927 +cfn=(1284) +calls=309 367 +* 8024 +-3 622 + +fn=(1284) +367 1240 ++5 310 +-2 310 ++2 620 ++9 310 ++1 310 ++1 310 ++3 930 ++3 310 +-1 310 ++2 310 +-2 310 ++2 310 ++7 300 ++4 300 +-3 600 ++4 900 +-9 20 ++8 10 ++1 30 + +fl=(141) /build/buildd/eglibc-2.11.1/stdio-common/vfprintf.c +fn=(3644) vfprintf +210 10 ++35 1 +-35 1 ++35 2 +1288 3 ++4 5 ++11 2 ++11 1 +fi=(157) /build/buildd/eglibc-2.11.1/stdio-common/printf-parse.h +99 2 +fe=(141) +1314 5 +fi=(157) +99 1 +cfi=(142) +cfn=(3646) +calls=1 -72 +* 23 +fe=(141) +1329 1 +fi=(157) +99 1 +fe=(141) +1329 2 ++4 7 +cfi=(100) +cfn=(1428) +calls=1 452 +* 18 +* 2 +1996 2 ++1 3 +1288 2 +2000 8 +1333 4 ++4 1 +-4 1 ++4 2 +1808 1 +1337 4 +1808 1 +1948 1 +1337 4 +1948 1 +1337 1 +1948 1 ++3 1 +-3 3 ++3 1 ++61 2 +1383 18 +1951 1 +1383 15 +1951 1 +1383 1 +1632 2 ++8 1 +fi=(157) +99 3 +cfi=(142) +cfn=(3646) +calls=1 -72 +* 23 +fe=(141) +1644 1 +fi=(157) +99 1 +fe=(141) +1644 11 +cfi=(100) +cfn=(1428) +calls=1 452 +* 18 +* 12 ++2 2 +1526 1 ++1 3 ++43 14 +1383 1 +1546 5 ++67 50 +cfi=(143) /build/buildd/eglibc-2.11.1/stdio-common/printf_fp.c +cfn=(3648) __printf_fp +calls=1 163 +* 2262 +* 10 +-46 2 +-35 1 +-1 1 ++1 4 ++4 8 ++3 1 +-3 1 ++3 6 ++74 10 + +fl=(101) +fn=(1416) +88 4 ++15 6 +cfi=(99) +cfn=(1418) _IO_file_stat +calls=1 1233 +* 14 +* 2 ++2 4 ++12 3 ++3 6 +cfi=(103) +cfn=(1422) +calls=1 -38 +* 6 +* 3 ++1 4 +cfi=(100) +cfn=(1424) +calls=1 404 +* 18 +* 1 ++2 4 +-13 1 +-2 9 ++8 1 +-3 1 ++3 2 + +fl=(82) +fn=(986) +44 114 ++1 114 ++1 114 ++4 114 ++1 114 ++1 114 ++1 114 ++2 114 ++1 114 ++2 96 ++5 96 ++1 96 ++1 96 ++1 96 ++1 96 +315 1 ++1 1 ++1 1 ++1 1 +-2 66 ++1 66 ++1 66 ++20 1 ++1 1 ++1 1 +-1 6 ++1 6 ++23 2 ++1 2 ++1 2 ++1 2 ++23 2 ++1 2 ++1 2 ++1 2 +-2 2 ++1 2 ++1 2 ++24 3 ++1 3 ++24 2 ++1 2 ++1 2 ++22 1 ++1 1 ++1 1 ++1 1 ++1 1 +-3 3 ++1 3 ++1 3 ++1 3 +-2 3 ++1 3 ++1 3 ++22 2 ++1 2 ++1 2 ++1 2 ++1 2 ++1 2 +-4 1 ++1 1 ++1 1 ++1 1 ++1 1 +-3 1 ++1 1 ++1 1 ++1 1 ++8 18 ++1 18 ++1 18 ++1 18 ++1 18 ++1 18 ++1 18 ++5 18 ++1 18 ++1 18 ++1 18 ++1 18 ++80 18 ++1 18 +746 18 ++1 18 ++2 18 ++1 18 +891 18 ++1 18 ++1 18 +1008 18 ++1 18 ++1 36 ++4 18 ++1 18 ++1 18 ++1 18 ++1 18 ++1 18 ++1 18 ++1 18 ++1 18 ++1 18 ++2 18 ++1 18 +-12 126 ++1 126 ++1 126 ++1 126 ++1 126 ++1 126 ++1 126 ++1 126 ++1 126 ++1 126 ++2 126 ++1 126 ++1 18 ++5 18 ++1 18 ++1 18 ++1 18 ++1 18 + +fl=(66) /build/buildd/eglibc-2.11.1/elf/dl-profstub.c +fn=(626) _dl_mcount_wrapper_check +39 384 ++1 128 + +fl=(145) /build/buildd/eglibc-2.11.1/math/../sysdeps/ieee754/dbl-64/s_isinf.c +fn=(3652) isinf +23 4 ++1 1 ++1 1 +-1 3 ++1 6 ++2 1 + +fl=(124) +fn=(2234) +47 10076 ++1 916 + +fl=(87) +fn=(1226) +26 1 ++2 1 ++1 2 ++1 1 ++4 1 ++1 1 ++1 1 ++1 1 ++1 1 ++2 2 ++2 1 ++1 1 ++2 2 ++2 1 ++9 1 +cfi=(88) /build/buildd/eglibc-2.11.1/setjmp/sigjmp.c +cfn=(1228) __sigjmp_save +calls=1 -26 +* 9 + +fl=(119) /build/buildd/eglibc-2.11.1/stdlib/grouping.c +fn=(1862) __correctly_grouped_prefixmb +56 18 ++6 18 +-6 126 ++6 18 +202 144 + +fl=(122) +fn=(2150) +25 2 ++1 2 ++1 2 ++1 2 ++1 2 ++1 2 ++1 2 ++1 2 ++3 2 ++1 2 ++9 2 ++1 2 ++9 2 ++1 2 ++1 2 ++1 2 ++1 2 ++1 2 ++39 2 ++1 2 ++1 1 ++1 1 ++1 1 ++1 1 ++1 1 ++1 1 ++1 1 ++1 1 ++1 1 ++1 1 ++1 1 ++4 1 ++1 1 + +fl=(153) +fn=(3726) +31 16 ++18 8 +-18 8 ++18 8 +-18 40 ++4 32 ++4 1367 ++5 1416 ++2 59 ++1 59 ++2 236 +-5 118 ++7 59 ++5 59 +-2 118 ++2 118 +cob=(7) +cfi=(53) +cfn=(3876) +calls=1 -56 +* 4 +cob=(7) +cfi=(53) +cfn=(3874) +calls=1 -56 +* 4 +cob=(11) +cfi=(60) +cfn=(3784) +calls=1 -56 +* 190 +cob=(11) +cfi=(60) +cfn=(3782) +calls=1 -56 +* 4 +cob=(11) +cfi=(60) +cfn=(3780) +calls=1 -56 +* 4 +cob=(11) +cfi=(60) +cfn=(3778) +calls=1 -56 +* 4 +cob=(11) +cfi=(60) +cfn=(3776) +calls=1 -56 +* 4 +cob=(11) +cfi=(60) +cfn=(3774) +calls=1 -56 +* 4 +cob=(11) +cfi=(60) +cfn=(3772) +calls=1 -56 +* 4 +cob=(11) +cfi=(60) +cfn=(3770) +calls=1 -56 +* 4 +cob=(11) +cfi=(60) +cfn=(3768) +calls=1 -56 +* 4 +cob=(11) +cfi=(60) +cfn=(3762) +calls=1 -56 +* 2054 +cob=(7) +cfi=(53) +cfn=(1380) +calls=2 -56 +* 200 +cob=(11) +cfi=(60) +cfn=(3760) +calls=1 -56 +* 40 +cob=(12) +cfi=(84) +cfn=(1136) +calls=1 -56 +* 4 +cob=(11) +cfi=(60) +cfn=(3752) +calls=1 -56 +* 1920 +cob=(12) +cfi=(84) +cfn=(3750) +calls=1 -56 +* 4 +cob=(11) +cfi=(60) +cfn=(3748) +calls=1 -56 +* 4 +cob=(7) +cfi=(53) +cfn=(3680) +calls=40 -56 +* 3152 ++4 177 +-21 179 +-4 48 ++32 32 ++4 48 +-4 24 ++12 16 ++3 8 +-2 8 ++2 48 +-2 8 +cfi=(154) +cfn=(3728) +calls=8 -51 +* 128 + +fl=(81) +fn=(966) +56 572400102 ++2 572400102 ++2 572400102 ++3 572400039 ++1 572400039 ++2 529335853 ++1 529335853 ++2 529335853 ++1 529335853 ++5 529335853 ++1 529335853 +-1 43064186 ++1 43064186 ++2 43063295 ++1 43063295 ++2 43063295 ++1 86126590 ++5 43063295 ++1 43063295 +-1 529336744 ++1 529336744 ++2 10841 ++1 10841 ++2 10841 ++1 10841 ++5 10841 ++1 10841 +-1 572389198 ++1 572389198 ++2 572399161 ++1 572399161 ++2 572399161 ++1 572399161 ++5 572399161 ++1 572399161 +-1 878 ++1 1339 ++5 461 ++1 461 ++1 461 ++1 461 ++2 461 ++2 461 ++1 461 ++2 461 ++8 572400039 ++8 598 ++6 598 ++2 598 ++1 598 ++3 200 ++1 400 ++5 200 ++1 200 ++2 200 ++2 200 ++1 200 ++2 200 +-8 864 ++1 864 ++2 864 ++2 864 ++1 864 ++2 1064 ++9 200 ++1 200 +-1 398 ++1 398 ++3 598 ++1 598 ++1 598 ++5 460 ++2 460 ++1 460 ++1 460 ++1 460 ++2 460 ++1 460 ++1 460 ++1 460 ++2 460 ++1 460 ++2 460 ++2 23 ++2 23 ++1 23 ++1 23 ++1 23 ++2 23 ++1 23 ++1 23 ++1 23 ++2 23 ++1 23 ++2 40 ++5 17 ++6 17 ++1 17 +-7 581 ++6 581 ++1 581 ++2 63 + +fn=(3666) mempcpy +56 1 ++4 1 ++3 1 ++1 1 ++2 1 ++1 1 ++2 1 ++1 1 ++5 1 ++1 1 ++11 1 ++1 1 ++11 1 ++1 1 ++11 1 ++1 1 ++21 1 ++4 1 + +fl=(102) /build/buildd/eglibc-2.11.1/io/../sysdeps/unix/sysv/linux/wordsize-64/fxstat.c +fn=(1420) _fxstat +37 1 +-1 1 ++1 1 ++1 6 ++4 1 + +fl=(45) /build/buildd/eglibc-2.11.1/string/../sysdeps/x86_64/multiarch/../strrchr.S +fn=(206) __GI_strrchr +26 1 ++1 1 ++1 1 ++1 1 ++1 1 ++1 1 ++1 1 ++1 1 ++1 1 ++1 1 ++1 1 ++1 1 ++1 1 ++1 1 ++1 1 ++1 1 ++1 1 ++1 1 ++1 1 ++1 1 ++1 1 ++1 1 ++1 1 ++13 1 ++1 1 ++1 1 ++1 1 ++7 1 ++1 1 ++1 1 ++1 1 ++1 1 ++2 1 + +fl=(155) /build/buildd/eglibc-2.11.1/posix/../sysdeps/unix/sysv/linux/_exit.c +fn=(3934) _Exit +33 3 ++2 2 + +fl=(108) +fn=(1576) __fopen_internal +68 35 ++8 5 +-8 5 ++8 5 +cfi=(71) +cfn=(886) +calls=5 3615 +* 1049 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 -46 +* 1095 ++2 5 +-2 5 ++2 5 ++3 5 ++3 25 +-3 5 ++3 5 +cfi=(100) +cfn=(1582) +calls=5 648 +* 285 ++4 5 ++1 5 +-1 5 ++1 5 +cfi=(99) +cfn=(1586) _IO_file_init@@GLIBC_2.2.5 +calls=5 +59 +* 450 ++4 25 +cfi=(99) +cfn=(1590) _IO_file_fopen@@GLIBC_2.2.5 +calls=5 258 +* 587 +* 10 ++2 5 ++5 25 +-5 5 +cfn=(1600) __fopen_maybe_mmap +calls=5 -50 +* 20 + +fn=(1600) +45 5 +-2 5 ++2 5 ++15 5 + +fn=(1574) +107 10 +cfn=(1576) +calls=5 -39 +* 3681 + +fl=(117) /build/buildd/eglibc-2.11.1/stdlib/../sysdeps/x86_64/lshift.S +fn=(1838) __mpn_lshift +26 856 ++1 856 ++1 856 ++1 856 ++1 856 ++1 856 ++1 856 ++1 856 ++1 856 ++1 856 ++19 856 ++2 856 ++1 856 ++1 856 ++1 856 + +fl=(147) /build/buildd/eglibc-2.11.1/stdlib/cmp.c +fn=(3656) __mpn_cmp +43 12 ++2 4 ++1 4 ++1 8 ++8 20 + +fl=(44) /build/buildd/eglibc-2.11.1/misc/init-misc.c +fn=(204) __init_misc +31 3 ++1 1 +-1 1 ++1 4 ++2 3 +cfi=(45) +cfn=(206) +calls=1 -8 +* 33 ++1 2 ++4 3 ++2 4 +-5 3 + +fl=(73) +fn=(890) +467 5 ++8 3 ++1 1 +-66 1 ++2 1 ++1 1 ++1 1 ++1 1 +cfi=(74) /build/buildd/eglibc-2.11.1/misc/../sysdeps/unix/sysv/linux/getpagesize.c +cfn=(892) getpagesize +calls=1 29 +* 6 +519 1 +415 1 ++96 1 +-1 1 ++1 1 ++8 1 ++8 2 ++1 1 +-3 1 ++3 1 +-1 1 ++1 10 +cfi=(76) /build/buildd/eglibc-2.11.1/nptl/../nptl/sysdeps/unix/sysv/linux/register-atfork.c +cfn=(900) __linkin_atfork +calls=1 117 +* 9 ++11 2 ++2 6 +382 90 ++16 45 +-18 138 +622 2 ++5 2 ++1 2 ++2 1 ++1 6 +521 5 +cfi=(75) /build/buildd/eglibc-2.11.1/elf/dl-addr.c +cfn=(894) _dl_addr +calls=1 127 +* 59307 +-2 2 ++2 3 +382 5 + +fl=(135) +fn=(3026) +62 1 ++1 1 ++2 1 ++1 1 ++1 1 ++1 1 ++1 1 + +fn=(3028) +81 2 ++1 2 ++1 2 ++4 2 ++1 2 ++1 2 ++1 2 ++3 2 ++1 2 ++1 2 ++1 2 ++1 2 ++1 2 +1093 2 ++3 2 ++1 2 ++1 2 ++1 2 ++1 2 ++4 2 ++1 2 ++1 2 ++1 2 ++1 2 ++26 2 ++1 2 ++1 2 ++1 2 ++1 2 ++1 2 ++1 2 ++2 12 ++2 2 ++1 2 ++1 2 ++2 4 ++1 4 ++1 4 ++6 2 ++1 2 +1289 2 ++1 2 ++5 2 ++1 2 ++1 2 + +fl=(48) +fn=(212) +49 1 +-5 1 ++5 1 ++3 1 +-3 1 ++3 5 ++42 2 +-63 1 ++23 1 +-23 2 ++6 1 +-6 1 ++6 1 +-6 1 ++29 1 +-22 1 +-1 1 ++23 1 +-22 1 ++22 1 +-29 1 ++7 1 ++23 1 +-24 1 ++1 1 ++23 1 ++5 2 ++2 1 ++1 1 +-1 1 ++1 7 + +fl=(90) +fn=(1272) +32 2 ++3 2 ++1 2 +cob=(13) +cfi=(91) +cfn=(1274) +calls=2 165 +* 6 ++2 2 ++2 2 + +fl=(103) +fn=(3172) __lseek_nocancel +82 5 + +fn=(1422) +82 2140 ++1 428 + +fn=(2846) +82 8 ++1 2 + +fn=(3170) +82 2 +cfn=(3172) +calls=1 * +* 5 + +fl=(78) +fn=(908) +35 2435 ++8 3406 ++4 974 ++4 2916 ++3 486 +cfi=(79) /build/buildd/eglibc-2.11.1/misc/../sysdeps/unix/sysv/linux/x86_64/brk.c +cfn=(910) brk +calls=486 -25 +* 7532 +-3 1458 ++7 2922 +-14 2 +cfi=(79) +cfn=(910) +calls=1 -15 +* 12 +* 5 ++7 1275 + +fl=(88) +fn=(1228) +30 1 +-1 2 ++1 2 ++5 1 +-5 1 ++5 2 + +fl=(67) /build/buildd/eglibc-2.11.1/iconv/gconv_simple.c +fn=(628) __gconv_btwoc_ascii +52 512 ++4 128 + +fl=(97) +fn=(3196) +90 1 ++1 1 ++2 1 ++1 1 ++1 1 ++1 1 ++1 1 ++1 1 ++1 1 ++1 1 ++1 1 ++1 1 ++1 1 ++1 1 ++1 1 ++1 1 ++1 1 ++1 1 ++1 1 ++5 1 ++1 1 ++9 1 ++1 1 ++1 1 ++1 1 ++1 1 ++1 1 ++1 1 ++1 1 ++1 1 ++5 1 ++1 1 ++1 1 ++1 1 ++1 1 ++1 1 +1073 1 ++1 1 ++1 1 ++1 1 ++1 1 ++1 1 ++1 1 ++1 1 ++1 1 ++1 1 ++1 1 ++1 1 ++1 1 ++4 1 ++1 1 ++1 1 ++6 1 ++1 1 ++1 2 ++4 1 ++1 1 ++3 1 ++1 1 ++1 1 ++7 1 ++3 1 ++1 1 ++1 1 ++1 1 ++1 1 ++1 1 ++7 1 ++1 1 ++2 1 ++1 1 ++2 1 ++1 1 ++1 1 ++7 1 ++3 1 ++1 1 ++1 1 ++1 1 ++1 1 ++1 1 +2052 1 ++2 1 ++1 1 ++1 1 ++1 1 ++6 1 ++6 1 ++1 1 ++2 1 ++1 1 + +fn=(1320) __GI_strncmp +84 1 ++1 1 ++1 1 ++1 1 ++1 1 ++2 1 ++1 1 ++2 1 ++1 1 ++1 1 ++1 1 ++1 1 ++1 1 ++1 1 ++1 1 ++1 1 ++1 1 ++1 1 ++1 1 ++1 1 ++1 1 ++1 1 ++1 1 ++1 1 +2063 1 ++3 1 ++1 1 ++9 1 ++1 1 + +fl=(99) +fn=(1508) +899 10 ++5 10 +-5 10 ++5 30 ++2 10 ++1 20 ++17 20 ++4 20 + +fn=(1412) +837 230 ++1 46 +-1 46 ++1 92 ++7 272 ++35 92 ++3 90 ++3 45 ++1 45 +-1 90 ++1 180 ++5 45 ++1 225 +-45 2 ++12 3 ++9 2 ++4 1 ++4 1 +-1 1 +-5 1 ++1 1 ++4 1 +-3 1 ++1 1 ++3 1 +-3 2 ++3 3 ++1 4 ++3 1 ++12 3 +-12 1 ++12 1 +-12 1 +cfn=(1426) _IO_do_write@@GLIBC_2.2.5 +calls=1 501 +* 17 ++6 9 ++3 3 +-1 9 +cfn=(1426) +calls=3 501 +* 273 +* 6 +-39 2 +cfi=(100) +cfn=(1414) +calls=1 419 +* 102 ++1 6 + +fn=(1426) +501 24 ++1 4 +-1 8 ++1 8 ++2 24 ++11 9 ++7 12 ++8 15 +cfn=(1486) _IO_file_write@@GLIBC_2.2.5 +calls=3 1269 +* 126 ++1 3 +-1 3 ++1 6 ++5 3 +-2 3 ++2 3 +-2 9 ++1 6 ++1 3 +-34 3 ++34 3 +-34 3 ++29 6 ++5 6 + +fn=(1410) +1296 8 ++6 4 +-6 24 ++6 4 +-6 8 ++6 4 ++7 4 +-12 4 ++12 12 ++17 5 ++32 4 +cfn=(1412) +calls=1 837 +* 172 +* 2 ++7 2 ++1 6 ++2 3 ++11 2 ++1 4 +cfi=(100) +cfn=(1428) +calls=1 452 +* 2043 +* 2 +-50 9 ++4 6 +-42 3 ++56 3 +-56 12 ++58 3 +-58 3 ++58 3 ++2 9 ++2 9 ++28 8 ++1 32 +-72 6 ++1 6 +-1 3 ++1 6 ++3 9 ++2 12 +-2 50 ++2 66 +-25 15 ++57 12 +-1 6 ++1 88 +-1 47 +-18 6 + +fn=(1586) +148 15 ++5 5 +-1 5 +-4 5 ++4 5 ++3 5 +cfi=(100) +cfn=(1588) +calls=5 -51 +* 385 ++1 5 ++1 20 + +fn=(1486) +1269 3 ++2 3 +-2 18 ++2 3 +-2 3 ++2 6 ++11 3 +-11 6 ++2 6 ++3 12 +cfi=(106) +cfn=(1488) write +calls=3 82 +* 21 ++1 6 ++9 9 ++3 18 +-6 9 + +fn=(1590) +258 45 ++11 10 +423 35 +271 15 ++25 5 +-10 5 ++10 5 +-10 5 ++10 31 +-7 2 ++7 35 +-25 20 ++65 5 +228 10 ++4 15 +cfi=(106) +cfn=(1592) +calls=5 82 +* 35 +* 5 ++4 10 ++3 5 +-1 5 ++1 10 ++1 10 +-1 5 ++1 5 ++7 10 +cfi=(100) +cfn=(1588) +calls=5 104 +* 55 ++97 15 +cfi=(109) /build/buildd/eglibc-2.11.1/string/../string/strstr.c +cfn=(1596) __GI_strstr +calls=5 53 +* 135 +* 5 ++1 15 +fi=(123) /build/buildd/eglibc-2.11.1/libio/../iconv/gconv_charset.h +39 3 +fe=(99) +289 10 ++13 6 + +fn=(1928) _IO_file_finish@@GLIBC_2.2.5 +206 5 ++1 5 +-1 5 ++1 5 ++6 10 ++1 5 +-1 5 +cfi=(100) +cfn=(1930) +calls=5 687 +* 120 + +fn=(1418) +1233 1 ++2 3 +cfi=(102) +cfn=(1420) +calls=1 37 +* 10 + +fn=(3930) +453 2 ++1 1 +cfi=(100) +cfn=(3932) +calls=1 562 +* 63 +* 2 ++4 1 +-1 3 ++2 3 ++3 3 + +fn=(1918) _IO_file_close_it@@GLIBC_2.2.5 +163 5 ++2 5 +-2 10 ++2 5 +-2 5 ++2 5 ++3 25 ++6 10 +cfi=(100) +cfn=(1920) +calls=5 1117 +* 25 ++2 15 +cfn=(1922) _IO_file_close +calls=5 1260 +* 35 ++4 5 +-4 5 ++4 10 ++9 25 +cfi=(100) +cfn=(1424) +calls=5 404 +* 85 ++1 10 ++3 5 +-3 5 ++1 15 ++2 5 +cfi=(100) +cfn=(1916) +calls=5 64 +* 50 ++5 5 +-4 5 ++1 5 ++1 5 ++2 5 ++1 25 + +fn=(1922) +1260 10 +cfi=(106) +cfn=(1924) __close_nocancel +calls=5 82 +* 25 + +fl=(146) /build/buildd/eglibc-2.11.1/stdlib/../sysdeps/ieee754/dbl-64/dbl2mpn.c +fn=(3654) __mpn_extract_double +36 2 ++2 3 ++1 1 ++9 1 +-9 4 ++9 2 ++9 1 +-9 1 ++9 1 +-9 1 ++9 1 ++47 2 ++4 1 +-4 1 ++4 1 + +fl=(94) +fn=(1296) +37 7 +-1 7 ++1 7 ++1 42 ++4 5 +-4 10 + +fl=(71) +fn=(886) +3615 13981188852 ++5 4660396284 ++1 4660396284 ++3 4660396282 ++33 20971783269 ++3 6990594423 +cfn=(902) _int_malloc +calls=2330198141 4247 +* 112729870269 ++1 2330198141 +-1 2330198141 ++1 2330198141 ++20 9320792564 ++1 20971783264 ++3 16311386987 +-63 1 ++63 5 +-63 1 +cfi=(72) +cfn=(888) +calls=1 36 +* 60734 + +fn=(887) +3615 6 ++5 2 ++1 2 ++3 2 ++33 9 ++3 3 +cfn=(902) +calls=1 4247 +* 1012 ++1 1 +-1 1 ++1 1 ++20 4 ++1 9 ++3 7 + +fn=(904) malloc_consolidate +5074 109968 ++22 27492 ++1 13745 ++2 13745 ++17 13745 ++2 27490 ++5 13745 ++2 27490 +-2 123705 ++2 247410 ++2 110478 ++22 1825717 ++1 18962437 ++4 3909891 ++4 3909891 +-3 3909891 ++1 3909891 ++2 3909891 ++1 533144 ++1 533144 ++3 533144 ++1 533144 ++1 533144 +-2 533144 ++3 533144 +-3 533144 ++12 533144 +-3 533144 ++3 533144 +-12 3376747 ++1 3376747 ++1 3376747 +-2 3376747 ++3 3376747 +-3 3376747 ++12 3376747 +-3 3376747 ++3 3376748 +-3 1 ++3 1 +-41 3909892 +-3 3909892 ++3 7819784 ++1 3909892 ++1 7819784 ++2 7819784 ++1 1744626 ++2 1744626 +-1 1744626 ++2 18328377 ++3 7819784 ++1 7819782 ++6 4168348 ++26 646015 +-7 1 ++1 1 +-1 3 +2479 3 ++5 3 ++5 1 ++2 1 +-2 1 ++2 1 +5184 109968 +2480 1 +5070 2 +2480 3 +-2 2 ++2 378 +-2 253 ++10 3 +5142 216 ++8 1178 +-8 112 ++8 25 +-8 24 ++8 3 + +fn=(1148) +3692 4649346090 ++5 4649346090 ++1 4649346090 ++5 4649346090 ++6 2324673045 +-3 2324673045 ++3 4649346090 ++15 6974019132 ++12 13948038264 ++2 6974019132 +cfn=(1150) _int_free +calls=2324673044 4762 +* 109266899123 ++1 9298692176 ++2 6974019135 +-29 7 ++4 1 ++1 1 +-1 1 ++1 2 +3531 2 ++1 1 ++6 6 ++10 1 +-3 1 ++1 1 ++2 1 +cfi=(103) +cfn=(2846) +calls=1 82 +* 5 ++3 2 + +fn=(902) +4247 20971783440 ++30 18641585280 ++8 4660396320 ++1 6989820393 ++1 2329940131 ++12 2329940131 +-12 2329940131 ++14 4659880262 ++1 13923436458 ++7 2320572743 ++3 2320572743 +-3 2320572743 ++4 6961718229 +4750 20971783440 +4327 19250834 ++1 28844475 ++1 48074125 ++2 28844475 ++1 433742 ++3 216870 ++1 433740 ++6 216870 ++1 216870 ++2 216870 +-4 216870 ++4 433740 ++4 216870 +-1 216870 ++1 433740 ++19 92956 ++1 31776 ++1 39956 +cfn=(904) +calls=9989 5074 +* 154135595 +* 19978 +4736 9989 +4405 9989 +-16 9989 +4736 9989 +4501 19978 +4736 9989 +4405 9989 +4736 9989 +4389 29967 +4736 9398558 +4405 9398558 +-16 9398558 +4736 9398558 +4501 18797116 +4736 9398558 +4405 9398558 +4736 9398558 +4389 28195674 +4736 456 +4389 1811850 ++3 4275122 +-2 4275122 ++1 8550244 ++1 8550244 ++3 4275122 ++10 16362712 ++35 646656 +-5 646656 ++1 646656 ++4 646656 ++13 1206988 ++1 1169152 ++1 1753728 ++1 584576 ++45 2338304 ++4 584576 +-4 1169152 ++1 584576 ++1 584576 +-2 584576 ++7 584576 +-4 584576 ++1 584576 ++3 584576 +-7 75672 ++4 18918 +-4 37836 ++1 18918 ++1 18918 +-2 18918 ++7 18918 +-4 18918 ++1 18918 ++3 18918 ++9 11474750 ++1 42324 ++3 31743 ++1 9192 ++66 5732805 ++4 5732805 +-4 5732805 ++1 17198415 ++1 5732805 ++2 5732805 +-2 5732805 ++2 5732805 +-1 5732805 ++1 5732805 +-1 5732805 ++6 23092142 ++11 745236 ++3 1127312 +-2 563656 +-1 1127312 ++7 372618 ++3 745236 ++1 40586 ++1 40586 ++1 40586 +-2 121758 ++60 40586 +4459 89064 ++1 3348 ++1 3348 ++3 6696 +-4 15570 ++1 15570 ++3 31140 ++4 15924 +-2 3981 ++3 7962 ++9 9681 ++1 31590 ++2 12568 ++1 37704 +-23 106752 ++15 754 +-1 754 ++1 754 ++1 3016 +-16 33560 +-91 2226 ++39 3833404 +-2 15056030 ++6 3628466 ++1 7256932 ++4 3628466 +-3 7256932 ++1 3628466 ++1 7256932 ++1 3628466 ++2 3449524 ++1 3449524 ++3 3449524 ++3 3449524 +-3 20697144 ++2 6899048 +-2 3449524 ++6 3449524 +-4 3449524 ++5 13798096 +-7 178942 ++3 178942 +-3 1073652 ++2 357884 +-2 178942 ++6 178942 +-4 178942 ++5 715768 ++69 59748 +-39 73925 +-91 40112 ++91 1775 +-91 2868 +4599 64687356 ++2 64646716 ++2 145887 +4485 3227 ++6 974 +-1 974 ++1 974 ++1 974 ++1 1948 ++2 6454 +-53 43162 +-1 86324 ++1 86324 ++4 43162 +-1 43162 ++1 86324 +-78 32 +-35 4 +cfn=(904) +calls=1 5074 +* 670 +* 3 +4487 4506 +4697 5400773 ++1 5400773 +-1 5400773 ++1 10801546 ++2 10801546 ++33 1886 ++1 912 ++1 2280 +cfn=(904) +calls=456 5074 +* 200150 +* 456 ++14 1368 +-14 456 ++14 456 +4393 664064 +4625 664064 ++3 332032 +-3 332032 ++3 332032 ++2 332032 ++3 332032 +-3 664064 ++3 3356713 ++3 664064 ++1 253939 ++1 253939 +-1 253939 ++1 507878 ++37 336602 +-1 336602 ++1 1014376 +4524 4570 ++1 22850 +-1 110 ++1 550 ++6 13864 ++3 23 ++1 23 +-1 23 ++1 23 +-1 23 ++1 23 +-1 4547 ++1 4547 +-1 4547 ++1 4547 +-1 4547 ++1 45677 ++3 9140 ++1 59 ++1 236 +4649 78093 ++1 234279 +-6 78093 ++17 78093 +-6 78093 ++1 78093 ++2 78093 +-1 78093 ++4 78093 ++1 72934 ++1 156186 ++2 11501 ++1 11501 ++2 11501 ++3 11501 +-3 34503 ++3 11501 +-3 34503 ++2 11501 +-2 11501 ++2 34503 +-2 66592 ++3 66592 +-3 199776 ++3 66592 +-3 199776 ++2 66592 +-2 66592 ++2 199776 +4531 26 +4704 21599320 +-2 5399830 ++2 21599320 ++2 5399830 +-2 5399830 ++2 5399830 +-3 5399830 ++1 5399830 ++2 5399830 +-2 5399830 ++6 5399830 +-1 5399830 +-3 5399830 ++4 16199490 +2990 1948 ++13 487 +-13 487 ++13 490 ++14 5 ++7 2 ++60 486 ++9 972 +-9 486 ++9 3883 ++10 1458 ++4 1458 +3418 1458 ++1 486 ++8 1944 ++4 1458 +-2 486 ++2 1458 ++1 486 +-1 486 ++1 486 +-2 486 ++1 972 ++1 486 ++2 486 +4745 3409 +3074 972 +4549 4511 ++1 13533 ++9 4511 +-14 4511 ++10 4511 ++1 4511 ++2 4511 +-1 4511 ++2 4511 ++2 16 ++1 16 ++2 16 ++3 16 +-3 48 ++3 16 +-3 48 ++2 16 +-2 16 ++2 48 +-2 4495 ++3 4495 +-3 13485 ++3 4495 +-3 13485 ++2 4495 +-2 4495 ++2 13485 ++67 131391 +3169 2430 ++19 486 +-19 486 ++19 2430 ++8 486 +-8 486 ++8 486 ++1 2430 +cfi=(77) +cfn=(906) +calls=486 48 +* 26805 ++2 486 +-2 486 ++2 1458 ++2 122 ++1 122 +4746 122 +3247 972 ++1 1 ++1 2 ++6 1 +-6 1 ++6 1 +-6 970 ++6 485 +-6 485 ++6 1447 ++1 300 +-40 850 ++1 4 ++3 3 ++4 2 +-4 1272 ++4 1700 ++34 3406 ++40 5 ++19 1 ++3 2 ++1 3 ++2 3 ++1 4 +cfi=(77) +cfn=(906) +calls=1 48 +* 27 ++12 3 ++5 2 ++1 2 +4746 1 +3360 1 ++1 2 +-1 1 ++1 2 ++1 1 ++11 2 +-13 425 ++1 850 +-1 425 ++1 850 ++1 425 ++11 850 ++6 850 ++1 850 ++15 425 +-15 425 ++8 425 ++3 425 ++4 425 ++4 696 +cfn=(1150) +calls=232 4762 +* 11363 +* 232 +-40 2550 +-70 2 ++61 850 ++3 1275 +3226 3400 +cfi=(103) +cfn=(1422) +calls=425 82 +* 2550 ++2 425 +-2 425 ++2 850 ++12 425 ++6 850 +-14 1275 +3099 970 +-73 7 +cfi=(103) +cfn=(1422) +calls=1 82 +* 6 ++2 1 +-2 1 ++2 1 ++14 3 ++13 3 ++5 5 ++1 1 ++2 1 ++1 1 +-1 1 ++1 1 ++1 1 ++9 2 +4531 9068 ++4 59241 + +fn=(984) calloc +4017 18 +-13 18 ++13 18 +-3 18 ++3 18 +-13 108 ++10 18 ++3 36 ++8 36 ++1 36 ++15 198 ++7 18 ++8 18 +-7 36 ++7 36 ++7 54 +cfn=(902) +calls=18 4247 +* 2281 +* 18 ++3 72 ++2 198 ++74 162 +-36 18 +-3 18 ++3 72 ++10 18 ++1 36 ++1 36 ++2 36 ++1 54 +cfi=(82) +cfn=(986) +calls=18 44 +* 2448 +* 18 + +fn=(1150) +4762 20922059484 ++15 6974019828 ++6 13948039656 ++13 4649346552 ++13 4649346552 ++79 379716 ++21 569574 ++6 189858 +-10 189858 ++10 189858 ++8 569574 ++7 379716 +-1 189858 ++2 379716 ++6 569574 ++4 379716 ++1 1100 ++2 1100 +-1 1100 ++2 12350 ++3 379716 ++2 379344 ++7 180589 ++8 180589 ++1 180589 ++1 361178 +-2 9083 ++1 9083 ++1 18166 ++7 189672 +-2 189672 ++1 189672 ++1 189672 ++2 10182 ++1 10182 ++2 10182 ++3 10182 +-2 10182 ++2 10182 ++1 10182 +-1 10182 ++31 20364 +-34 179490 ++3 179490 +-2 179490 ++2 179490 ++1 179490 +-1 179490 ++31 359352 ++1 6606 ++3 9909 +4821 2324483418 +-1 6973450254 ++2 4648966836 ++27 6973450254 ++4 2324483418 +-1 2324483418 ++1 2324483418 ++20 6973450254 ++6 2324483418 ++1 2324483418 +5053 18597386208 +-99 101315 ++1 18166 ++60 6600 +cfn=(904) +calls=3300 +59 +* 2302912 +* 3300 +-21 186 ++2 186 +-1 744 ++24 9909 ++1 6606 +3465 1 ++4 7 ++2 2 +4917 3318 ++37 25592 +-9 936 + +fl=(79) +fn=(910) +29 487 ++3 2922 ++2 1461 ++7 974 +-5 1275 ++1 425 + +fl=(96) +fn=(1318) +36 8 ++1 1 +cfi=(69) +cfn=(642) +calls=1 -11 +* 16 +* 1 ++4 4 ++56 8 +-56 2 ++3 2 ++37 1 +-8 1 ++6 1 +-1 1 ++3 3 ++3 18 ++6 4 +cfi=(97) +cfn=(1320) +calls=1 -6 +* 29 +* 2 ++1 2 +-10 32 ++11 2 + +fl=(113) +fn=(1794) +47 2514 ++5 5028 +-5 12570 ++1 2514 +-1 2514 ++5 5028 ++5 7542 ++3 4588 ++1 2294 ++12 9176 ++6 13049 ++30 17598 +-36 5735 +cfi=(114) /build/buildd/eglibc-2.11.1/string/wordcopy.c +cfn=(1796) _wordcopy_fwd_aligned +calls=1147 -35 +* 69784 +* 1147 + +fl=(111) +fn=(1672) +37 42 ++7 7 + +fl=(49) +fn=(218) +27 390 ++7 468 ++2 196 ++2 196 +-2 196 ++1 784 ++1 392 +cfi=(47) +cfn=(220) +calls=196 152 +* 1358 ++1 392 ++2 70 ++1 63 +-8 211 ++14 99 +-14 12 ++14 171 + +fl=(74) +fn=(892) +29 5 ++15 1 + +fl=(107) +fn=(1506) +36 9 +-1 18 ++1 9 ++6 135 ++1 27 +cfi=(99) +cfn=(1508) +calls=9 899 +* 117 +* 18 +fi=(104) +984 9 +fe=(107) +43 9 +fi=(104) +984 9 ++1 99 +fe=(107) +47 27 + +fl=(75) +fn=(894) +127 9 ++5 1 +-5 2 ++5 2 +cob=(1) +cfi=(2) +cfn=(896) +calls=1 835 +* 2 ++3 5 ++1 4 ++1 40 ++1 2 +31 2 ++1 2 ++3 3 ++5 1 ++6 1 +-6 1 ++1 3 ++2 3 ++3 1 ++5 3 ++74 1 +-74 1 ++74 4 +-72 1 ++19 1 +-18 2 +-1 1010 ++19 1010 +-18 2020 ++2 3600 ++14 1248 ++2 3744 +-10 2496 ++1 1248 +-1 4296 ++1 900 +-1 1800 ++2 8592 ++1 6435 +-3 5518 ++3 614 +-3 5278 ++10 5307 +-21 4042 ++85 27 +-36 2 ++1 2 ++1 2 ++3 2 ++41 2 +cob=(1) +cfi=(2) +cfn=(898) +calls=1 841 +* 2 ++3 9 +-32 1 ++1 3 + +fl=(126) +fn=(2780) +29 1 ++3 1 ++1 2 ++4 1 +cob=(13) +cfi=(91) +cfn=(2782) +calls=1 155 +* 3 ++2 1 ++1 1 ++3 1 ++2 1 + +fl=(76) +fn=(900) +117 1 ++2 4 +-1 3 ++2 1 + +fl=(106) +fn=(1488) +82 6 +cfn=(1490) __write_nocancel +calls=3 * +* 15 + +fn=(2852) +82 2 +cfn=(1924) +calls=1 * +* 5 + +fn=(1490) +82 15 + +fn=(1592) +82 12 +cfn=(1594) __open_nocancel +calls=6 * +* 30 + +fn=(1678) +82 12 +cfn=(1680) __read_nocancel +calls=6 * +* 30 + +fn=(1594) +82 30 + +fn=(1680) +82 30 + +fn=(1924) +82 30 + +fl=(95) +fn=(1302) +34 14 ++2 7 + +fl=(56) +fn=(364) __new_exitfn +73 608 ++6 608 +-6 608 ++6 3040 ++2 3040 ++2 1824 ++1 3035 +-3 1 ++10 1 +-10 3 ++13 1214 ++25 589 ++1 589 +-1 589 ++1 589 +-1 589 ++7 589 ++1 589 ++3 1178 +-4 19 ++1 19 ++3 1254 ++3 1824 +-39 18 ++4 38 ++2 36 ++1 54 +cfi=(71) +cfn=(984) +calls=18 4017 +* 6169 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 -71 +* 1060 ++2 54 ++2 36 ++1 18 ++6 18 ++1 36 +-1 1 ++1 2 +-32 2 + +fn=(362) +57 1216 +-22 608 ++22 3040 +-22 608 +cfn=(364) +calls=608 +38 +* 29941 ++2 1824 ++4 1216 ++3 608 +-1 608 ++2 608 ++2 1216 ++12 3648 + +fl=(83) +fn=(1012) +178 5 + +fn=(3758) +176 5 + +fl=(64) +fn=(622) +35 768 ++5 256 +-5 768 ++5 1280 ++5 512 ++4 384 +fi=(65) /build/buildd/eglibc-2.11.1/wcsmbs/./wcsmbsload.h ++23 384 +fe=(64) +-20 128 +-2 256 ++2 384 ++5 256 ++3 256 +cfi=(66) +cfn=(626) +calls=128 -21 +* 512 +* 384 +cfi=(67) +cfn=(628) +calls=128 -8 +* 640 ++42 1536 +fi=(65) +-28 512 +fe=(64) + +fl=(151) +fn=(3678) +49 5 +-7 57 ++36 57 +-32 19 ++32 19 +-32 19 ++32 1647 +-32 549 ++32 549 +-32 549 ++3 1216 ++1 3217 +-4 118 ++37 19 ++1 19 +-1 19 ++1 19 ++7 6 +cfi=(100) +cfn=(3926) +calls=1 1007 +* 261 +* 3 ++2 3 +cfi=(155) +cfn=(3934) +calls=1 -60 +* 5 +-19 549 ++4 549 +-4 1098 ++4 549 +-2 1098 ++2 549 +cob=(1) +cfi=(152) +cfn=(3698) +calls=1 +43 +* 28726 +cob=(12) +cfi=(84) +cfn=(3434) +calls=1 -78 +* 15 +cob=(12) +cfi=(84) +cfn=(3696) +calls=1 -78 +* 1360 +cob=(12) +cfi=(84) +cfn=(3692) +calls=3 -78 +* 872 +cob=(12) +cfi=(84) +cfn=(3690) +calls=1 -78 +* 52 +cob=(12) +cfi=(84) +cfn=(3682) +calls=1 -78 +* 73 +cob=(7) +cfi=(53) +cfn=(3680) +calls=68 -78 +* 816 +cob=(7) +cfi=(53) +cfn=(1380) +calls=473 -78 +* 47300 +* 549 ++9 36 +cfi=(71) +cfn=(1148) +calls=18 3692 +* 1890 +* 36 + +fl=(140) /build/buildd/eglibc-2.11.1/libio/strops.c +fn=(3642) _IO_str_init_static_internal +40 6 ++4 1 +-4 2 ++4 1 ++6 5 +cfi=(100) +cfn=(1424) +calls=1 404 +* 17 ++5 1 +-3 1 ++1 1 ++1 1 ++1 1 ++2 1 ++1 1 ++1 1 ++9 1 ++1 6 +-23 5 + +fl=(40) +fn=(196) +52 6 ++6 1 +-6 2 ++6 2 ++17 1 +-2 1 ++1 1 +fi=(42) /build/buildd/eglibc-2.11.1/csu/../sysdeps/unix/sysv/linux/x86_64/init-first.c +-41 2 +fe=(40) ++42 1 +fi=(42) +-42 2 +fi=(41) /build/buildd/eglibc-2.11.1/csu/../sysdeps/generic/dl-hash.h ++2 3 +fe=(40) ++32 1 +-9 1 ++9 4 +fi=(41) +-29 1 +-1 2 ++1 3 ++3 1 +-1 3 ++1 3 +fi=(42) +-8 2 ++2 2 +-2 1 ++2 1 +cfi=(43) /build/buildd/eglibc-2.11.1/elf/../sysdeps/unix/sysv/linux/dl-vdso.c +cfn=(202) _dl_vdso_vsym +calls=1 -8 +* 8 ++8 1 +-5 2 ++5 1 +-5 1 ++2 2 ++1 1 ++2 1 +cfi=(43) +cfn=(202) +calls=1 -16 +* 8 +fe=(40) ++46 3 +fi=(42) +-45 2 ++1 1 +fe=(40) ++44 1 +cfi=(44) +cfn=(204) +calls=1 -58 +* 57 ++8 1 +cfi=(46) +cfn=(208) +calls=1 -78 +* 6280 ++2 6 +fi=(41) +-55 1 +-1 3 ++1 3 ++2 4 ++1 5 ++3 4 +-3 1 ++4 2 ++13 1 ++1 2 +-18 2 ++3 12 +-3 3 ++4 6 ++13 3 ++1 6 +-18 8 +fe=(40) + +fl=(80) +fn=(940) +32 3 ++1 3 ++2 3 ++1 3 ++1 3 ++2 3 + +fl=(116) +fn=(1834) +26 376 ++1 376 ++1 376 ++1 376 ++1 376 ++2 376 ++1 376 ++1 376 ++1 376 ++1 376 ++1 376 ++1 376 ++1 376 +-7 3 ++1 3 ++1 3 ++1 3 ++1 3 ++1 3 ++1 3 ++1 3 ++1 376 ++1 376 + +fl=(120) +fn=(1914) +43 15 ++14 5 +-14 5 ++14 10 ++3 80 ++1 10 +fi=(104) +984 10 ++1 30 +fe=(120) +66 20 +cfi=(99) +cfn=(1928) +calls=5 206 +* 160 ++1 15 ++18 30 ++2 5 ++1 10 +cfi=(71) +cfn=(1148) +calls=5 3692 +* 635 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 -58 +* 1009 ++4 25 +-10 10 +-20 10 +cfi=(99) +cfn=(1918) +calls=5 163 +* 415 +* 15 +-4 5 +cfi=(100) +cfn=(1916) +calls=5 +6 +* 418 +* 15 +fi=(104) +985 30 +fe=(120) + +fl=(121) +fn=(2148) +29 1 ++1 1 ++2 1 ++1 1 ++1 1 ++2 1 + +fl=(139) +fn=(3640) +101 8 ++9 1 +-9 1 ++9 3 ++6 5 +-11 1 ++11 1 +cfi=(100) +cfn=(1582) +calls=1 648 +* 41 ++1 1 ++2 4 ++3 1 +-5 1 ++1 1 ++1 1 +cfi=(140) +cfn=(3642) +calls=1 -79 +* 52 ++1 4 +cfi=(141) +cfn=(3644) +calls=1 +90 +* 2621 ++2 2 ++1 2 ++2 7 + +fl=(114) +fn=(1796) +38 6882 ++71 3063 ++1 3063 ++2 3063 ++1 3063 ++2 3063 ++1 3063 ++2 3063 ++1 3063 ++3 3063 ++3 6126 +-13 3 ++1 3 ++2 3 ++1 3 ++2 3 ++1 3 ++3 3 ++3 6 +-7 129 ++1 129 ++3 129 ++3 258 +-4 2048 +-24 2048 ++1 2048 ++2 2048 ++1 2048 ++2 2048 ++1 2048 ++2 2048 ++1 4096 +-7 4 ++1 4 ++2 4 ++1 4 ++2 4 ++1 8 +-29 8 ++2 4 ++2 4 ++1 4 +-42 129 ++3 387 ++1 129 ++8 3 ++3 9 ++1 3 ++2 1011 ++3 3033 ++1 1011 ++67 2294 + +fl=(112) +fn=(1836) str_to_mpn +283 245 +fi=(158) /build/buildd/eglibc-2.11.1/stdlib/../stdlib/gmp.h +447 245 +fe=(112) +283 980 ++6 245 +-6 980 ++6 245 +-6 1225 ++6 245 ++39 490 +-5 5136 ++3 332 ++7 332 ++3 166 ++3 166 +-3 332 ++1 166 ++2 166 +-3 166 ++3 166 +-3 1118 ++3 1118 +-3 2236 ++1 1118 ++2 1118 +-3 1118 ++3 1118 +-46 2078 ++48 735 ++9 245 +-2 490 ++2 245 +-2 245 ++2 245 ++2 245 ++1 245 ++12 2205 +-82 247 +fi=(158) +447 247 +fe=(112) +283 988 ++6 247 +-6 988 ++6 247 +-6 1235 ++6 247 ++39 494 +-5 5184 ++3 328 ++7 328 ++3 164 ++3 164 +-3 328 ++1 164 ++2 164 +-3 164 ++3 164 +-3 1132 ++3 1132 +-3 2264 ++1 1132 ++2 1132 +-3 1132 ++3 1132 +-46 2098 ++48 741 ++9 247 +-2 494 ++2 247 +-2 247 ++2 247 ++2 247 ++1 247 ++12 2223 + +fn=(2328) ____strtof_l_internal +416 2331 ++56 259 +-2 259 +-54 259 ++56 259 ++15 518 ++17 259 ++1 1036 +cfi=(69) +cfn=(642) +calls=259 26 +* 4144 ++22 518 +-22 259 ++22 259 +-6 259 ++6 777 ++3 518 ++1 777 ++3 518 ++5 483 ++13 777 ++1 1295 ++75 774 ++19 518 ++1 972 ++1 390 +-1 390 ++17 259 ++6 518 ++1 1167 ++6 390 ++1 780 +-7 546 ++42 1957 ++13 490 ++16 245 +-2 245 ++2 245 ++42 490 ++9 490 ++1 1043 +-1 546 ++7 182 ++1 182 +-1 182 ++1 728 ++1 546 ++4 3964 ++3 925 +-1 925 ++1 1850 +-7 2775 ++7 132 +-1 132 ++1 264 +-7 1271 +561 777 +1585 2072 +678 543 +-6 362 +819 126 ++5 2 ++1 2 ++8 3 ++5 2 ++5 5 ++7 3 ++2 1 +-2 1 ++2 1 +-2 3 ++2 1 +-2 1 ++2 1 ++28 4 ++2 6 ++2 2 ++1 2 ++7 1 +-7 2 ++7 1 ++2 245 ++8 1162 ++19 490 ++1 245 ++2 490 ++3 719 ++26 490 ++77 1402 ++2 228 ++1 228 ++3 228 +-4 228 ++4 456 +-4 17 ++1 17 ++3 17 +-4 17 ++4 34 ++6 490 ++6 245 +-15 245 ++15 2492 +1221 910 ++8 546 ++20 182 +-20 728 ++20 182 +-20 364 ++20 182 +-20 364 ++14 182 ++1 546 +-1 182 ++1 546 +cfi=(81) +cfn=(966) +calls=182 56 +* 3276 ++18 722 +-3 360 ++1 360 +-24 1084 ++3 363 ++2 726 ++8 1629 +cfi=(115) +cfn=(1832) +calls=181 58 +* 9050 ++4 181 ++1 181 +-1 181 ++1 181 ++1 362 ++7 181 +-7 362 ++7 363 ++2 728 ++4 2184 +cfn=(1836) +calls=182 283 +* 22154 ++17 182 ++2 182 +-2 546 ++2 364 ++4 910 +cfi=(117) +cfn=(1838) +calls=182 26 +* 2730 ++1 910 +cfi=(117) +cfn=(1838) +calls=182 26 +* 2730 ++1 546 ++13 182 +-2 182 ++2 182 +1577 910 +cfn=(1840) round_and_return +calls=182 182 +* 7434 +* 182 +818 364 ++1 493 ++73 244 +-7 244 ++7 244 ++2 546 ++8 189 +718 244 ++22 488 ++1 244 +1045 66 +537 392 ++91 1560 +1045 6 +927 80 ++9 32 ++2 32 ++10 48 +-1 16 ++1 16 +-1 16 ++2 16 +-1 32 +-1 32 +795 252 +-52 490 +1051 1071 +cfn=(1836) +calls=63 283 +* 5796 +* 63 ++6 189 +828 4 +1101 63 ++1 126 +-1 126 ++1 63 ++4 126 ++9 126 ++32 126 ++3 504 ++2 126 ++8 126 ++2 630 +cfi=(117) +cfn=(1838) +calls=63 26 +* 945 ++4 189 ++15 441 +cfn=(1840) +calls=63 182 +* 2268 +* 63 +764 28 +-65 84 +cfi=(119) +cfn=(1862) +calls=14 56 +* 252 ++5 98 +1030 85 +1313 182 ++1 182 ++5 182 ++38 364 +-38 364 ++38 3640 ++4 1456 +1097 126 +1265 765 +cfi=(81) +cfn=(966) +calls=153 56 +* 2754 +* 306 + +fn=(1786) ____strtod_l_internal +416 2277 ++56 253 +-2 253 +-54 253 ++56 253 ++15 506 ++17 253 ++1 1012 +cfi=(69) +cfn=(642) +calls=253 26 +* 4048 ++22 506 +-22 253 ++22 253 +-6 253 ++6 759 ++3 506 ++1 759 ++3 506 ++5 474 ++13 759 ++1 1265 ++75 778 ++19 506 ++1 944 ++1 370 +-1 370 ++17 253 ++6 506 ++1 1129 ++6 370 ++1 740 +-7 514 ++42 1989 ++13 498 ++16 249 +-2 249 ++2 249 ++42 498 ++9 498 ++1 1061 +-1 552 ++7 184 ++1 184 +-1 184 ++1 736 ++1 552 ++4 3996 ++3 929 +-1 929 ++1 1858 +-7 2787 ++7 140 +-1 140 ++1 280 +-7 1305 +561 759 +1585 2024 +678 543 +-6 362 +819 130 ++5 2 ++1 2 ++8 3 ++5 2 ++5 5 ++7 3 ++2 1 +-2 1 ++2 1 +-2 3 ++2 1 +-2 1 ++2 1 ++28 4 ++2 6 ++2 2 ++1 2 ++7 1 +-7 2 ++7 1 ++2 245 ++8 1168 ++19 498 ++1 249 ++2 498 ++3 719 ++26 490 ++77 1402 ++2 228 ++1 228 ++3 228 +-4 228 ++4 456 +-4 17 ++1 17 ++3 17 +-4 17 ++4 34 ++6 490 ++6 245 +-15 245 ++15 2448 +1221 900 ++8 540 ++20 180 +-20 720 ++20 180 +-20 360 ++20 180 +-20 360 ++14 180 ++1 540 +-1 180 ++1 540 +cfi=(81) +cfn=(966) +calls=180 56 +* 3240 ++18 712 +-3 361 ++1 361 +-24 1082 ++3 365 ++2 730 ++8 1665 +cfi=(115) +cfn=(1832) +calls=185 58 +* 9250 ++4 185 ++1 185 +-1 185 ++1 185 ++1 370 ++7 185 +-7 370 ++7 365 ++2 720 ++4 2160 +cfn=(1836) +calls=180 283 +* 22182 ++17 180 ++2 180 +-2 540 ++2 360 ++4 900 +cfi=(117) +cfn=(1838) +calls=180 26 +* 2700 ++1 900 +cfi=(117) +cfn=(1838) +calls=180 26 +* 2700 ++1 540 ++13 180 +-2 180 ++2 180 +1577 900 +cfn=(1840) +calls=180 182 +* 7850 +* 180 +818 368 ++1 501 ++73 248 +-7 248 ++7 248 ++2 552 ++3 4 +-3 12 ++8 195 +718 248 ++22 496 ++1 248 +1045 36 +537 380 ++91 1480 +1045 4 +927 80 ++9 32 ++2 32 ++10 48 +-1 16 ++1 16 +-1 16 ++2 16 +-1 32 +-1 32 +795 260 +-52 498 +1051 1139 +cfn=(1836) +calls=67 283 +* 6004 +* 67 ++6 201 +828 4 +1101 67 ++1 134 +-1 134 ++1 67 ++4 134 ++9 134 ++32 134 ++3 520 ++2 130 ++8 130 ++2 650 +cfi=(117) +cfn=(1838) +calls=65 26 +* 975 ++4 195 ++15 455 +cfn=(1840) +calls=65 182 +* 2535 +* 65 +764 8 +-65 24 +cfi=(119) +cfn=(1862) +calls=4 56 +* 72 ++5 28 +1030 85 +1313 180 ++1 180 ++5 180 ++38 360 +-38 360 ++38 360 +-38 2 ++38 3199 ++4 1440 +-4 6 ++2 1 +-2 1 ++2 1 +390 6 +1357 18 +389 15 +cfi=(117) +cfn=(1838) +calls=3 26 +* 45 ++1 18 +1097 134 ++89 14 +cfi=(81) +cfn=(966) +calls=2 56 +* 36 +* 22 ++79 785 +cfi=(81) +cfn=(966) +calls=157 56 +* 2826 +* 314 ++92 4 + +fn=(1840) +182 1470 ++1 245 +-1 735 ++1 490 ++56 784 +fi=(158) +448 98 +fe=(112) +245 98 +fi=(158) +449 98 +fe=(112) +245 98 ++10 196 ++8 490 ++3 735 ++1 1225 +-1 245 +cfi=(125) /build/buildd/eglibc-2.11.1/stdlib/../sysdeps/ieee754/flt-32/mpn2flt.c +cfn=(2330) __mpn_construct_float +calls=245 34 +* 2695 +-84 1470 ++1 245 +-1 735 ++1 490 ++56 739 +fi=(158) +448 83 +fe=(112) +245 166 +fi=(158) +449 83 +fe=(112) +245 83 ++10 166 ++8 490 ++3 735 ++1 1225 +-1 245 +cfi=(118) +cfn=(1842) +calls=245 40 +* 3430 + +fn=(2326) +1601 777 +cfn=(2328) +calls=259 416 +* 154525 + +fn=(1784) +1601 759 +cfn=(1786) +calls=253 416 +* 155089 + +fl=(150) /build/buildd/eglibc-2.11.1/stdlib/divrem.c +fn=(3664) __mpn_divrem +57 70 ++3 7 +-3 14 ++3 7 +245 63 +73 7 ++1 7 ++2 21 ++6 21 ++1 14 +-38 18 ++38 6 ++1 6 +-1 6 ++1 12 +-1 18 ++4 7 +-2 7 ++2 14 ++3 7 ++2 7 + +fl=(125) +fn=(2330) +34 245 ++2 245 +-2 735 ++2 1225 ++6 245 + +fl=(43) +fn=(202) +27 2 ++1 4 ++4 4 ++14 2 ++4 4 + +fl=(109) +fn=(1596) +53 45 ++10 15 ++2 10 +fi=(110) /build/buildd/eglibc-2.11.1/string/../string/str-two-way.h +273 5 +fe=(109) +89 45 +-26 15 + +fl=(136) +fn=(3194) +62 1 ++1 1 ++3 1 ++1 1 ++1 1 ++1 1 ++1 1 ++1 1 ++2 1 + +fl=(68) +fn=(640) +28 45 ++6 9 +-6 18 ++3 9 +cfi=(69) +cfn=(642) +calls=9 -5 +* 156 ++3 9 +-3 9 ++3 18 ++8 40 ++1 80 +-8 40 ++2 80 +cfi=(69) +cfn=(642) +calls=40 -11 +* 724 +* 18 +cfi=(69) +cfn=(642) +calls=9 -11 +* 144 ++2 391 ++9 9 ++1 9 +-1 9 ++1 45 + +fl=(144) /build/buildd/eglibc-2.11.1/math/../sysdeps/ieee754/dbl-64/s_isnan.c +fn=(3650) isnan +33 3 ++2 1 +-2 1 ++2 9 ++3 1 + +fl=(143) +fn=(3648) +163 10 ++33 1 ++2 1 ++22 4 ++59 1 +-59 2 ++59 1 ++2 6 ++1 1 ++23 3 ++96 1 ++3 1 +-3 1 ++3 3 +cfi=(144) +cfn=(3650) +calls=1 33 +* 15 +* 4 +-66 3 ++16 2 ++65 4 +cfi=(145) +cfn=(3652) +calls=1 23 +* 16 +* 4 +1265 9 +435 10 +cfi=(146) +cfn=(3654) +calls=1 36 +* 23 +* 1 ++4 2 ++36 1 ++12 1 +-12 9 ++4 4 ++1 2 ++1 2 +-2 1 ++1 1 +-1 1 ++2 1 ++7 1 +-8 1 ++1 1 ++7 1 ++9 3 ++15 4 +-18 2 ++59 4 +-59 2 ++59 4 +-6 1 +-1 1 ++1 6 +cfi=(81) +cfn=(966) +calls=1 56 +* 23 +* 1 ++15 15 ++11 26 +-2 24 +-54 12 ++4 48 +-4 1 ++4 4 ++2 8 ++30 24 +cfi=(115) +cfn=(1832) +calls=3 58 +* 174 ++4 9 ++2 12 +-54 17 +cfi=(117) +cfn=(1838) +calls=1 26 +* 15 ++3 9 ++1 1 +-1 1 ++1 1 ++1 5 ++52 20 +cfi=(147) +cfn=(3656) +calls=4 43 +* 48 +* 13 ++3 5 +cfi=(81) +cfn=(966) +calls=1 56 +* 23 ++1 2 ++2 1 +-2 1 ++1 2 +-1 1 ++1 2 ++1 4 +fi=(149) /build/buildd/eglibc-2.11.1/stdio-common/../include/ctype.h +47 1 +fe=(143) +834 1 +fi=(149) +47 1 +fe=(143) +834 1 +fi=(149) +47 2 +fe=(143) +844 3 ++2 1 +-2 1 ++2 1 ++10 2 ++20 7 ++1 3 ++7 1 +-3 1 ++5 1 +-5 1 ++3 1 ++2 1 +-2 1 ++2 2 ++14 6 ++4 4 ++12 6 ++7 2 +fi=(159) /build/buildd/eglibc-2.11.1/stdio-common/../nptl/sysdeps/pthread/allocalim.h +28 2 +fe=(143) +933 7 ++1 1 ++3 1 +-3 1 ++3 2 ++3 1 +-3 1 ++3 13 ++2 1 ++1 2 +cfn=(3662) hack_digit.15661 +calls=1 236 +* 114 +* 2 +-3 11 ++6 10 ++3 3 ++8 5 ++22 1 +-15 1 ++15 7 +cfn=(3662) +calls=1 236 +* 103 ++1 8 +1102 5 ++7 3 ++3 2 ++6 3 ++2 3 ++19 1 ++1 1 +-1 1 ++1 5 ++4 3 ++14 3 ++6 3 ++2 7 ++2 1 +-2 1 ++2 4 ++3 2 ++7 5 ++9 3 ++47 3 ++17 5 ++3 3 ++7 3 +-92 2 +-5 3 +574 1 ++6 6 +-6 1 ++6 1 ++4 7 ++4 1 ++2 3 +1173 3 ++78 137 +-58 3 ++4 3 +cfi=(69) +cfn=(642) +calls=1 26 +* 16 +* 1 ++2 5 ++6 5 ++1 3 ++11 6 ++1 1 ++6 2 +-6 1 ++6 8 ++3 20 ++3 20 +-6 33 ++1 33 ++1 3 +cfi=(81) +cfn=(3666) +calls=1 56 +* 18 +* 2 ++25 5 +464 4 +877 3 ++80 12 ++15 5 +-6 5 ++2 5 +-5 22 ++4 10 +cfn=(3662) +calls=5 236 +* 565 ++1 5 +-1 5 ++1 5 +-4 10 +1175 2 +604 2 ++15 6 ++16 4 ++2 1 +-2 4 +cfi=(148) +cfn=(3658) +calls=1 25 +* 25 ++16 2 +-1 1 ++1 3 +-1 1 ++1 3 +cfi=(148) +cfn=(3658) +calls=1 25 +* 25 ++3 9 +-38 3 +1149 4 +584 5 + +fn=(3662) +236 28 ++3 21 ++2 21 ++7 21 ++4 49 +cfi=(150) +cfn=(3664) +calls=7 57 +* 339 ++1 28 ++4 7 +-1 7 +-3 7 ++1 7 ++3 35 ++11 21 +cfi=(116) +cfn=(1834) +calls=7 26 +* 105 ++1 14 ++1 36 ++4 12 +-4 6 ++4 12 +-4 1 ++4 2 +-4 1 ++4 2 + +totals: 1323501268167 diff --git a/profiles/callgrind.out.16517 b/profiles/callgrind.out.16517 new file mode 100755 index 0000000..e69de29 diff --git a/profiles/callgrind.out.3008 b/profiles/callgrind.out.3008 new file mode 100755 index 0000000..653a7a6 --- /dev/null +++ b/profiles/callgrind.out.3008 @@ -0,0 +1,37718 @@ +version: 1 +creator: callgrind-3.6.0.SVN-Debian +pid: 3008 +cmd: test_gradient fibre/tract/random-p_0-16-4.tst analysis/test_gradient/prob_likelihood_log_prob_call.tst -object Prob::Likelihood::ImageDiff::Gaussian -func log_prob -hess -obs image/tract/single/y/gauss/snr20/a.mif +part: 1 + + +desc: I1 cache: +desc: D1 cache: +desc: L2 cache: + +desc: Timerange: Basic block 0 - 856665900000 +desc: Trigger: Program termination + +positions: line +events: Ir +summary: 7351907657194 + + +ob=(10) /lib/libz.so.1.2.3.3 +fl=(59) ??? +fn=(448) 0x0000000000002300 +0 6 + +fn=(442) 0x0000000000002260 +0 6 + +fn=(454) 0x000000000000ed00 +0 11 + +ob=(7) /usr/lib/libstdc++.so.6.0.13 +fl=(53) ??? +fn=(2852) std::_Rb_tree_increment(std::_Rb_tree_node_base*) +0 141593184 + +fn=(550) std::locale::id::_M_id() const +0 57307 + +fn=(604) std::ctype::_M_initialize_ctype() +0 10 +cob=(4) /lib/libc-2.11.1.so +cfi=(62) /build/buildd/eglibc-2.11.1/locale/uselocale.c +cfn=(610) uselocale +calls=1 32 +0 21 +cob=(1) /lib/ld-2.11.1.so +cfi=(54) /build/buildd/eglibc-2.11.1/elf/../sysdeps/x86_64/dl-trampoline.S +cfn=(356) _dl_runtime_resolve +calls=1 30 +0 1748 +0 898 +cob=(4) +cfi=(63) /build/buildd/eglibc-2.11.1/wcsmbs/wctob.c +cfn=(616) wctob +calls=128 33 +0 2432 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1674 +0 260 +cob=(4) +cfi=(64) /build/buildd/eglibc-2.11.1/wcsmbs/btowc.c +cfn=(622) btowc +calls=1 35 +0 20 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1657 +0 510 +cob=(4) +cfi=(64) +cfn=(622) +calls=255 35 +0 9196 +0 1091 +cfn=(634) std::ctype::_M_convert_to_wmask(unsigned short) const +calls=8 0 +0 3013 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1150 +0 16 +cfn=(634) +calls=4 0 +0 793 +0 99 +cob=(4) +cfi=(62) +cfn=(610) +calls=1 32 +0 21 +0 2 + +fn=(684) std::messages::messages(unsigned long) +0 11 +cfn=(524) std::locale::facet::_S_get_c_locale() +calls=1 0 +0 7 +0 2 +cfn=(512) std::locale::facet::_S_get_c_name() +calls=1 0 +0 2 +0 4 + +fn=(772) std::ctype const& std::use_facet >(std::locale const&) +0 7004 +cfn=(550) +calls=1751 0 +0 8755 +0 19261 +cfn=(764) __dynamic_cast +calls=1751 0 +0 164594 +0 7004 + +fn=(1372) std::string::_M_leak_hard() +0 3408 + +fn=(1514) std::basic_streambuf >::xsputn(char const*, long) +0 13564 +cfn=(3578) std::basic_filebuf >::overflow(int) +calls=2 0 +0 108 +cfn=(1516) std::basic_stringbuf, std::allocator >::overflow(int) +calls=333 0 +0 123331 +0 11922 +cob=(4) +cfi=(81) /build/buildd/eglibc-2.11.1/string/../sysdeps/x86_64/memcpy.S +cfn=(966) memcpy +calls=488 56 +0 12012 +0 2440 + +fn=(1594) std::string::compare(char const*) const +0 12768 +cob=(4) +cfi=(69) /build/buildd/eglibc-2.11.1/string/../sysdeps/x86_64/multiarch/../strlen.S +cfn=(642) __GI_strlen +calls=1596 26 +0 29328 +0 33706 + +fn=(1614) std::__basic_file::__basic_file(pthread_mutex_t*) +0 27 + +fn=(1706) std::basic_filebuf >::_M_set_buffer(long) +0 431 + +fn=(1800) std::string::find_last_not_of(char const*, unsigned long, unsigned long) const +0 6069 +cob=(4) +cfi=(89) /build/buildd/eglibc-2.11.1/string/../sysdeps/x86_64/memchr.S +cfn=(1252) memchr +calls=1 25 +0 22 +0 1516 +cob=(4) +cfi=(89) +cfn=(1252) +calls=379 25 +0 8693 +0 3416 + +fn=(1824) std::num_get > >::do_get(std::istreambuf_iterator >, std::istreambuf_iterator >, std::ios_base&, std::_Ios_Iostate&, double&) const +0 6026 +cfn=(1384) std::string::reserve(unsigned long) +calls=262 0 +0 47557 +0 2882 +cfn=(1830) std::num_get > >::_M_extract_float(std::istreambuf_iterator >, std::istreambuf_iterator >, std::ios_base&, std::_Ios_Iostate&, std::string&) const +calls=262 0 +0 139732 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1951 +0 1834 +cfn=(524) +calls=262 0 +0 1834 +0 1572 +cfn=(1842) void std::__convert_to_v(char const*, double&, std::_Ios_Iostate&, __locale_struct* const&) +calls=262 0 +0 169124 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1435 +0 9536 +cfn=(1310) std::string::_Rep::_M_destroy(std::allocator const&) +calls=262 0 +0 21484 +0 1310 + +fn=(1832) 0x000000000008ba20 +0 7803 +cfn=(550) +calls=867 0 +0 4335 +0 12138 + +fn=(1904) 0x000000000008a140 +0 2352 + +fn=(2310) std::num_get > >::do_get(std::istreambuf_iterator >, std::istreambuf_iterator >, std::ios_base&, std::_Ios_Iostate&, long&) const +0 100 +cfn=(2316) std::istreambuf_iterator > std::num_get > >::_M_extract_int(std::istreambuf_iterator >, std::istreambuf_iterator >, std::ios_base&, std::_Ios_Iostate&, long&) const +calls=10 0 +0 2801 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1905 +0 20 + +fn=(3162) std::ostream::put(char) +0 30 +cfn=(1512) std::ostream::sentry::sentry(std::ostream&) +calls=3 0 +0 63 +0 67 +cfn=(3164) __gnu_cxx::stdio_sync_filebuf >::overflow(int) +calls=1 0 +0 1854 +0 2 + +fn=(3294) std::__num_base::_S_format_float(std::ios_base const&, char*, char) +0 135 + +fn=(3360) std::basic_ifstream >::basic_ifstream() +0 30 +cfn=(722) std::ios_base::ios_base() +calls=3 0 +0 291 +0 66 +cfn=(728) std::basic_ios >::init(std::basic_streambuf >*) +calls=3 0 +0 2124 +0 24 +cfn=(1608) std::basic_filebuf >::basic_filebuf() +calls=3 0 +0 795 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1228 +0 9 +cfn=(728) +calls=3 0 +0 2124 +0 21 + +fn=(3586) std::basic_filebuf >::_M_convert_to_external(char*, long) +0 38 +cfn=(1740) std::codecvt::do_always_noconv() const +calls=2 0 +0 4 +0 32 +cfn=(3592) std::__basic_file::xsputn(char const*, long) +calls=2 0 +0 1775 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1114 +0 6 + +fn=(580) std::__timepunct::__timepunct(std::__timepunct_cache*, unsigned long) +0 13 +cfn=(512) +calls=1 0 +0 2 +0 4 +cfn=(586) std::__timepunct::_M_initialize_timepunct(__locale_struct*) +calls=1 0 +0 114 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1401 +0 3 + +fn=(678) std::__timepunct::_M_initialize_timepunct(__locale_struct*) +0 9 +cfn=(524) +calls=1 0 +0 7 +0 96 + +fn=(792) bool std::has_facet > > >(std::locale const&) +0 6972 +cfn=(550) +calls=1743 0 +0 8715 +0 19173 +cfn=(764) +calls=1743 0 +0 102837 +0 6972 + +fn=(810) std::basic_ios >::_M_cache_locale(std::locale const&) +0 28 +cfn=(816) bool std::has_facet >(std::locale const&) +calls=4 0 +0 332 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1166 +0 16 +cfn=(822) std::ctype const& std::use_facet >(std::locale const&) +calls=4 0 +0 332 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1193 +0 12 +cfn=(828) bool std::has_facet > > >(std::locale const&) +calls=4 0 +0 332 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1580 +0 16 +cfn=(834) std::num_put > > const& std::use_facet > > >(std::locale const&) +calls=4 0 +0 332 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1631 +0 12 +cfn=(840) bool std::has_facet > > >(std::locale const&) +calls=4 0 +0 332 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1572 +0 16 +cfn=(846) std::num_get > > const& std::use_facet > > >(std::locale const&) +calls=4 0 +0 332 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1623 +0 20 + +fn=(934) std::basic_string, std::allocator >::basic_string(char const*, std::allocator const&) +0 8262481824 +cob=(4) +cfi=(69) +cfn=(642) +calls=688540152 26 +0 15147882504 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1690 +0 3442700760 +cfn=(942) 0x00000000000a8880 +calls=688540152 0 +0 127218055013 +0 4131240912 + +fn=(1534) std::basic_stringbuf, std::allocator >::str() const +0 6240 +cfn=(1540) std::basic_string, std::allocator >::basic_string(char*, char*, std::allocator const&) +calls=324 0 +0 56891 +0 972 +cfn=(1264) std::string::assign(std::string const&) +calls=324 0 +0 9072 +0 3306 +cfn=(1540) +calls=6 0 +0 1765 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1073 +0 18 +cfn=(1264) +calls=6 0 +0 168 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 992 +0 2664 + +fn=(1556) std::ios_base::~ios_base() +0 5600 +cfn=(1562) std::ios_base::_M_call_callbacks(std::ios_base::event) +calls=700 0 +0 8400 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1226 +0 1400 +cfn=(1568) std::ios_base::_M_dispose_callbacks() +calls=700 0 +0 11200 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1164 +0 5600 +cfn=(746) std::locale::~locale() +calls=700 0 +0 8400 + +fn=(1580) std::string::_M_replace_safe(unsigned long, unsigned long, char const*, unsigned long) +0 121 +cfn=(1586) std::string::_M_mutate(unsigned long, unsigned long, unsigned long) +calls=11 0 +0 2158 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 978 +0 176 +cob=(4) +cfi=(81) +cfn=(966) +calls=11 56 +0 375 +0 11 + +fn=(1620) bool std::has_facet >(std::locale const&) +0 36 +cfn=(550) +calls=9 0 +0 45 +0 99 +cfn=(764) +calls=9 0 +0 531 +0 36 + +fn=(1722) std::ctype::do_widen(char const*, char const*, char*) const +0 5 +cob=(4) +cfi=(81) +cfn=(966) +calls=1 56 +0 113 +0 3 + +fn=(1778) std::basic_streambuf >::sbumpc() +0 1477 + +fn=(1794) std::string::find_first_not_of(char const*, unsigned long, unsigned long) const +0 7658 +cob=(4) +cfi=(89) +cfn=(1252) +calls=482 25 +0 11013 +0 3625 + +fn=(2302) std::istream::operator>>(int&) +0 28 +cfn=(2308) std::istream& std::istream::_M_extract(long&) +calls=4 0 +0 3445 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1080 +0 72 + +fn=(2308) +0 90 +cfn=(1736) std::istream::sentry::sentry(std::istream&, bool) +calls=10 0 +0 514 +0 230 +cfn=(2310) +calls=10 0 +0 4826 +0 120 +cfn=(1712) std::basic_ios >::clear(std::_Ios_Iostate) +calls=10 0 +0 80 +0 50 + +fn=(2316) +0 160 +cfn=(1832) +calls=10 0 +0 280 +0 2085 +cfn=(1860) std::basic_stringbuf, std::allocator >::underflow() +calls=1 0 +0 16 +0 71 +cfn=(1860) +calls=9 0 +0 144 +0 45 + +fn=(2438) std::string::compare(std::string const&) const +0 11657220930 + +fn=(2546) std::num_get > >::do_get(std::istreambuf_iterator >, std::istreambuf_iterator >, std::ios_base&, std::_Ios_Iostate&, unsigned long&) const +0 10 +cfn=(2552) std::istreambuf_iterator > std::num_get > >::_M_extract_int(std::istreambuf_iterator >, std::istreambuf_iterator >, std::ios_base&, std::_Ios_Iostate&, unsigned long&) const +calls=1 0 +0 417 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1921 +0 2 + +fn=(2758) std::ostreambuf_iterator > std::num_put > >::_M_insert_int(std::ostreambuf_iterator >, std::ios_base&, char, unsigned long) const +0 7150 +cfn=(1832) +calls=325 0 +0 9100 +0 6825 +cfn=(2724) 0x00000000000874e0 +calls=325 0 +0 7093 +0 7474 +cfn=(3128) __gnu_cxx::stdio_sync_filebuf >::xsputn(char const*, long) +calls=1 0 +0 247 +cfn=(1514) +calls=324 0 +0 128121 +0 5547 + +fn=(2834) std::_Rb_tree_decrement(std::_Rb_tree_node_base const*) +0 904 +cfn=(2840) std::_Rb_tree_decrement(std::_Rb_tree_node_base*) +calls=904 0 +0 13728 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1313 + +fn=(2846) std::_Rb_tree_increment(std::_Rb_tree_node_base const*) +0 10312467 +cfn=(2852) +calls=10312467 0 +0 141485262 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1247 + +fn=(296) 0x00000000000ac590 +0 49 + +fn=(532) std::locale::facet::_S_create_c_locale(__locale_struct*&, char const*, __locale_struct*) +0 4 +cob=(4) +cfi=(61) /build/buildd/eglibc-2.11.1/locale/newlocale.c +cfn=(538) newlocale +calls=1 46 +0 42 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1796 +0 5 + +fn=(544) std::locale::_Impl::_M_install_facet(std::locale::id const*, std::locale::facet const*) +0 364 +cfn=(550) +calls=28 0 +0 392 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1024 +0 6328 + +fn=(634) +0 100 +cob=(4) +cfi=(68) /build/buildd/eglibc-2.11.1/wctype/wctype_l.c +cfn=(640) wctype_l +calls=1 28 +0 134 +0 13 +cob=(4) +cfi=(68) +cfn=(640) +calls=1 28 +0 254 +0 17 +cob=(4) +cfi=(68) +cfn=(640) +calls=1 28 +0 387 +0 3 +cob=(4) +cfi=(68) +cfn=(640) +calls=1 28 +0 230 +0 3 +cob=(4) +cfi=(68) +cfn=(640) +calls=1 28 +0 350 +0 3 +cob=(4) +cfi=(68) +cfn=(640) +calls=1 28 +0 98 +0 3 +cob=(4) +cfi=(68) +cfn=(640) +calls=1 28 +0 171 +0 3 +cob=(4) +cfi=(68) +cfn=(640) +calls=1 28 +0 74 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1796 +0 3 +cob=(4) +cfi=(68) +cfn=(640) +calls=1 28 +0 164 + +fn=(654) std::numpunct::_M_initialize_numpunct(__locale_struct*) +0 345 + +fn=(672) std::__timepunct::__timepunct(std::__timepunct_cache*, unsigned long) +0 13 +cfn=(512) +calls=1 0 +0 2 +0 4 +cfn=(678) +calls=1 0 +0 112 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1409 +0 3 + +fn=(688) 0x000000000006a230 +0 38054 +cfn=(696) __cxa_guard_acquire +calls=1 0 +0 24 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 980 +0 6 +cfn=(708) __cxa_guard_release +calls=1 0 +0 5 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1056 +0 1 + +fn=(746) +0 37800 + +fn=(786) std::num_put > > const& std::use_facet > > >(std::locale const&) +0 6972 +cfn=(550) +calls=1743 0 +0 8715 +0 19173 +cfn=(764) +calls=1743 0 +0 102837 +0 6972 + +fn=(840) +0 16 +cfn=(550) +calls=4 0 +0 20 +0 44 +cfn=(764) +calls=4 0 +0 236 +0 16 + +fn=(1174) operator delete(void*) +0 29623820190 +cob=(4) +cfi=(71) /build/buildd/eglibc-2.11.1/malloc/malloc.c +cfn=(1180) free +calls=9874606730 3692 +0 770221890094 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1642 + +fn=(1384) +0 35376 +cfn=(1390) std::string::_Rep::_M_clone(std::allocator const&, unsigned long) +calls=2211 0 +0 430895 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1075 +0 24075 +cfn=(1310) +calls=12 0 +0 984 +0 4164 + +fn=(1406) std::string::append(std::string const&) +0 7584 +cfn=(1384) +calls=350 0 +0 78225 +0 2208 +cob=(4) +cfi=(81) +cfn=(966) +calls=39 56 +0 1111 +0 4923 + +fn=(1448) 0x00000000000a8b30 +0 24789 +cfn=(952) std::string::_Rep::_S_create(unsigned long, unsigned long, std::allocator const&) +calls=1651 0 +0 223759 +0 11716 +cob=(4) +cfi=(81) +cfn=(966) +calls=1278 56 +0 40326 +0 17659 + +fn=(1468) std::basic_string, std::allocator >::~basic_string() +0 24146393518 +cfn=(1310) +calls=687160390 0 +0 56347152232 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1077 +0 8967712350 + +fn=(1540) +0 2640 +cfn=(1448) +calls=330 0 +0 54696 +0 1320 + +fn=(1568) +0 11200 + +fn=(1574) std::string::assign(char const*, unsigned long) +0 240 +cfn=(1580) +calls=11 0 +0 3819 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1076 + +fn=(1638) std::__basic_file::is_open() const +0 168 + +fn=(1738) std::basic_filebuf >::underflow() +0 396 +cfn=(1740) +calls=11 0 +0 22 +0 66 +cfn=(1746) std::__basic_file::xsgetn(char*, long) +calls=11 0 +0 4830 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1121 +0 36 +cfn=(1706) +calls=1 0 +0 15 +0 53 +cfn=(1706) +calls=10 0 +0 160 +0 70 + +fn=(1952) std::__basic_file::close() +0 55 +cfn=(1638) +calls=11 0 +0 33 +0 109 +cob=(4) +cfi=(96) /build/buildd/eglibc-2.11.1/csu/errno-loc.c +cfn=(1356) __errno_location +calls=7 34 +0 21 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1834 +0 28 +cob=(4) +cfi=(115) /build/buildd/eglibc-2.11.1/libio/iofclose.c +cfn=(1962) fclose@@GLIBC_2.2.5 +calls=7 43 +0 3834 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1698 +0 35 + +fn=(2232) std::string::compare(unsigned long, unsigned long, char const*) const +0 48 +cob=(4) +cfi=(69) +cfn=(642) +calls=3 26 +0 66 +0 119 + +fn=(2348) std::istream& std::istream::_M_extract(float&) +0 2331 +cfn=(1736) +calls=259 0 +0 12432 +0 5957 +cfn=(2350) std::num_get > >::do_get(std::istreambuf_iterator >, std::istreambuf_iterator >, std::ios_base&, std::_Ios_Iostate&, float&) const +calls=259 0 +0 393742 +0 3108 +cfn=(1712) +calls=259 0 +0 2072 +0 1295 + +fn=(3346) std::_Rb_tree_rotate_right(std::_Rb_tree_node_base*, std::_Rb_tree_node_base*&) +0 9608 + +fn=(3414) std::basic_filebuf >::seekpos(std::fpos<__mbstate_t>, std::_Ios_Openmode) +0 20 +cfn=(1638) +calls=2 0 +0 6 +0 22 +cfn=(3420) std::basic_filebuf >::_M_seek(long, std::_Ios_Seekdir, __mbstate_t) +calls=2 0 +0 3163 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1527 +0 12 + +fn=(3592) +0 32 +cob=(4) +cfi=(104) /build/buildd/eglibc-2.11.1/io/../sysdeps/unix/syscall-template.S +cfn=(3176) write +calls=2 82 +0 14 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1665 +0 32 +cfn=(1752) std::__basic_file::fd() +calls=2 0 +0 18 +0 14 + +fn=(282) 0x00000000000c9500 +0 11 + +fn=(292) 0x00000000000c8ea0 +0 52 + +fn=(368) 0x00000000000639f0 +0 1 + +fn=(492) std::locale::locale() +0 19026 +cfn=(494) 0x000000000006c5c0 +calls=3171 0 +0 89969 +0 3171 +cfn=(688) +calls=3171 0 +0 40126 +0 38052 + +fn=(518) std::ctype::ctype(unsigned short const*, bool, unsigned long) +0 14 +cfn=(524) +calls=1 0 +0 3244 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1149 +0 94 + +fn=(526) 0x0000000000069060 +0 4 +cfn=(532) +calls=1 0 +0 1847 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1384 + +fn=(722) +0 41354 +cfn=(492) +calls=713 0 +0 27807 + +fn=(758) bool std::has_facet >(std::locale const&) +0 6972 +cfn=(550) +calls=1743 0 +0 8715 +0 19173 +cfn=(764) +calls=1743 0 +0 163842 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 959 +0 6972 + +fn=(778) bool std::has_facet > > >(std::locale const&) +0 6972 +cfn=(550) +calls=1743 0 +0 8715 +0 19173 +cfn=(764) +calls=1743 0 +0 102837 +0 6972 + +fn=(780) __cxxabiv1::__si_class_type_info::__do_dyncast(long, __cxxabiv1::__class_type_info::__sub_kind, __cxxabiv1::__class_type_info const*, void const*, __cxxabiv1::__class_type_info const*, void const*, __cxxabiv1::__class_type_info::__dyncast_result&) const +0 119238 + +fn=(828) +0 16 +cfn=(550) +calls=4 0 +0 20 +0 44 +cfn=(764) +calls=4 0 +0 236 +0 16 + +fn=(1608) +0 153 +cfn=(492) +calls=9 0 +0 351 +0 99 +cfn=(1614) +calls=9 0 +0 27 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1219 +0 180 +cfn=(1620) +calls=9 0 +0 747 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1302 +0 36 +cfn=(1626) std::codecvt const& std::use_facet >(std::locale const&) +calls=9 0 +0 747 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1337 +0 45 + +fn=(1626) +0 36 +cfn=(550) +calls=9 0 +0 45 +0 99 +cfn=(764) +calls=9 0 +0 531 +0 36 + +fn=(1788) std::string::find(char, unsigned long) const +0 5320 +cob=(4) +cfi=(89) +cfn=(1252) +calls=532 25 +0 17233 +0 2660 + +fn=(2282) std::string::find_first_of(char const*, unsigned long, unsigned long) const +0 240 +cob=(4) +cfi=(89) +cfn=(1252) +calls=10 25 +0 220 +0 232 +cob=(4) +cfi=(89) +cfn=(1252) +calls=58 25 +0 1387 +0 471 + +fn=(2788) std::num_put > >::do_put(std::ostreambuf_iterator >, std::ios_base&, char, unsigned long) const +0 1620 +cfn=(2758) +calls=324 0 +0 170831 +0 1296 + +fn=(3288) std::ostreambuf_iterator > std::num_put > >::_M_insert_float(std::ostreambuf_iterator >, std::ios_base&, char, char, double) const +0 130 +cfn=(1832) +calls=5 0 +0 140 +0 45 +cfn=(3294) +calls=5 0 +0 135 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1309 +0 15 +cfn=(524) +calls=5 0 +0 35 +0 50 +cfn=(3296) 0x0000000000089420 +calls=5 0 +0 10202 +0 25 +cfn=(772) +calls=5 0 +0 590 +0 85 +cob=(4) +cfi=(89) +cfn=(1252) +calls=5 25 +0 113 +0 107 +cfn=(1514) +calls=5 0 +0 2046 +0 105 +cob=(4) +cfi=(81) +cfn=(966) +calls=5 56 +0 97 +0 5 + +fn=(3296) +0 95 +cob=(4) +cfi=(62) +cfn=(610) +calls=5 32 +0 105 +0 60 +cob=(4) +cfi=(138) /build/buildd/eglibc-2.11.1/libio/vsnprintf.c +cfn=(3306) vsnprintf +calls=5 101 +0 8058 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1729 +0 15 +cob=(4) +cfi=(62) +cfn=(610) +calls=5 32 +0 105 +0 35 + +fn=(524) +0 3751 +cfn=(526) +calls=1 0 +0 3235 +0 3 + +fn=(568) std::moneypunct::_M_initialize_moneypunct(__locale_struct*, char const*) +0 112 + +fn=(728) +0 10458 +cfn=(734) std::ios_base::_M_init() +calls=1743 0 +0 155355 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1040 +0 5229 +cfn=(752) std::basic_ios >::_M_cache_locale(std::locale const&) +calls=1743 0 +0 1052048 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1416 +0 22659 + +fn=(764) +0 283716 +cfn=(780) +calls=7014 0 +0 119238 +cfn=(766) __cxxabiv1::__vmi_class_type_info::__do_dyncast(long, __cxxabiv1::__class_type_info::__sub_kind, __cxxabiv1::__class_type_info const*, void const*, __cxxabiv1::__class_type_info const*, void const*, __cxxabiv1::__class_type_info::__dyncast_result&) const +calls=3494 0 +0 181688 +0 157620 + +fn=(942) +0 10328107697 +cfn=(952) +calls=688540511 0 +0 89003761721 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1077 +0 5508323960 +cob=(4) +cfi=(81) +cfn=(966) +calls=688540479 56 +0 15492521052 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1708 +0 6885405246 + +fn=(952) +0 9639619826 +cfn=(880) operator new(unsigned long) +calls=450 0 +0 51673 +0 688543984 +cfn=(880) +calls=688543984 0 +0 75921937168 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 869 +0 2754177736 + +fn=(1506) std::basic_ostream >& std::__ostream_insert >(std::basic_ostream >&, char const*, long) +0 6706 +cfn=(1512) +calls=479 0 +0 10059 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1011 +0 15328 +cfn=(3572) std::basic_filebuf >::xsputn(char const*, long) +calls=470 0 +0 48844 +cfn=(3128) +calls=1 0 +0 2675 +cfn=(1514) +calls=8 0 +0 4049 +0 1437 + +fn=(1632) std::basic_filebuf >::open(char const*, std::_Ios_Openmode) +0 132 +cfn=(1638) +calls=12 0 +0 36 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1129 +0 156 +cfn=(1644) std::__basic_file::open(char const*, std::_Ios_Openmode, int) +calls=12 0 +0 10039 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1249 +0 24 +cfn=(1688) std::basic_filebuf >::is_open() const +calls=12 0 +0 96 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1351 +0 48 +cfn=(1694) std::basic_filebuf >::_M_allocate_internal_buffer() +calls=12 0 +0 17912 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1481 +0 72 +cfn=(1706) +calls=12 0 +0 180 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1395 +0 84 + +fn=(1694) +0 96 +cfn=(1700) operator new[](unsigned long) +calls=12 0 +0 16891 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 877 +0 48 + +fn=(1746) +0 110 +cfn=(1752) +calls=11 0 +0 1781 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1059 +0 44 +cob=(4) +cfi=(104) +cfn=(1764) read +calls=11 82 +0 77 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1649 +0 110 + +fn=(1752) +0 30 +cob=(4) +cfi=(107) /build/buildd/eglibc-2.11.1/libio/fileno.c +cfn=(1758) fileno +calls=15 37 +0 105 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1682 + +fn=(1830) +0 8336 +cfn=(1832) +calls=521 0 +0 14588 +0 220534 +cfn=(1892) 0x000000000008a190 +calls=196 0 +0 5488 +0 784 +cfn=(1904) +calls=196 0 +0 2352 +0 13897 +cfn=(1860) +calls=11 0 +0 176 +0 2079 +cfn=(1860) +calls=324 0 +0 6618 +0 1620 + +fn=(1860) +0 2880 +cfn=(1866) std::basic_stringbuf, std::allocator >::_M_update_egptr() +calls=360 0 +0 1800 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1434 +0 1080 + +fn=(1892) +0 5488 + +fn=(1934) std::basic_filebuf >::_M_terminate_output() +0 270 + +fn=(1940) std::basic_filebuf >::_M_destroy_internal_buffer() +0 56 +cfn=(1946) operator delete[](void*) +calls=7 0 +0 816 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 888 +0 77 + +fn=(2750) std::ostream& std::ostream::_M_insert(void const*) +0 13 +cfn=(1512) +calls=1 0 +0 21 +0 21 +cfn=(2752) std::num_put > >::do_put(std::ostreambuf_iterator >, std::ios_base&, char, void const*) const +calls=1 0 +0 2496 +0 32 + +fn=(3128) +0 10 +cob=(4) +cfi=(131) /build/buildd/eglibc-2.11.1/libio/iofwrite.c +cfn=(3134) fwrite +calls=2 37 +0 1187 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1725 + +fn=(3164) +0 8 +cob=(4) +cfi=(134) /build/buildd/eglibc-2.11.1/libio/putc.c +cfn=(3170) putc +calls=1 29 +0 181 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1665 + +fn=(3426) std::__basic_file::seekoff(long, std::_Ios_Seekdir) +0 12 +cfn=(1752) +calls=2 0 +0 18 +0 14 +cob=(4) +cfi=(120) /build/buildd/eglibc-2.11.1/misc/../sysdeps/unix/syscall-template.S +cfn=(3432) lseek +calls=2 82 +0 14 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1721 + +fn=(3550) std::basic_ofstream >::basic_ofstream() +0 20 +cfn=(722) +calls=2 0 +0 194 +0 42 +cfn=(728) +calls=2 0 +0 1416 +0 16 +cfn=(1608) +calls=2 0 +0 530 +0 6 +cfn=(728) +calls=2 0 +0 1416 +0 14 + +fn=(2840) +0 15890 + +fn=(3282) std::num_put > >::do_put(std::ostreambuf_iterator >, std::ios_base&, char, double) const +0 30 +cfn=(3288) +calls=5 0 +0 15234 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1759 +0 20 + +fn=(272) 0x000000000005a540 +0 6 + +fn=(512) +0 10 + +fn=(562) std::numpunct::_M_initialize_numpunct(__locale_struct*) +0 410 + +fn=(708) +0 5 + +fn=(822) +0 16 +cfn=(550) +calls=4 0 +0 20 +0 44 +cfn=(764) +calls=4 0 +0 236 +0 16 + +fn=(1246) std::string::find_last_of(char const*, unsigned long, unsigned long) const +0 448 +cob=(4) +cfi=(89) +cfn=(1252) +calls=50 25 +0 1158 +0 44 +cob=(4) +cfi=(89) +cfn=(1252) +calls=11 25 +0 266 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1682 +0 353 + +fn=(1258) std::basic_string, std::allocator >::basic_string(std::string const&) +0 20744681394 +cfn=(1390) +calls=24 0 +0 4762 +0 6914893136 + +fn=(1390) +0 24585 +cfn=(952) +calls=2235 0 +0 340380 +0 37713 +cob=(4) +cfi=(81) +cfn=(966) +calls=1047 56 +0 30885 +0 2094 + +fn=(1512) +0 17157 + +fn=(1646) 0x00000000000c8480 +0 120 + +fn=(1724) std::ctype::do_widen(char) const +0 2 + +fn=(1946) +0 7 +cfn=(1174) +calls=7 0 +0 809 + +fn=(2256) std::string::resize(unsigned long, char) +0 1272 +cfn=(1378) std::string::append(unsigned long, char) +calls=106 0 +0 27617 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 958 + +fn=(2350) +0 5957 +cfn=(1384) +calls=259 0 +0 46620 +0 2849 +cfn=(1830) +calls=259 0 +0 136740 +0 1813 +cfn=(524) +calls=259 0 +0 1813 +0 1554 +cfn=(2356) void std::__convert_to_v(char const*, float&, std::_Ios_Iostate&, __locale_struct* const&) +calls=259 0 +0 163349 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1443 +0 9071 +cfn=(1310) +calls=259 0 +0 21238 +0 1295 + +fn=(2426) std::_Rb_tree_insert_and_rebalance(bool, std::_Rb_tree_node_base*, std::_Rb_tree_node_base*, std::_Rb_tree_node_base&) +0 19967502462 +cfn=(2444) std::_Rb_tree_rotate_left(std::_Rb_tree_node_base*, std::_Rb_tree_node_base*&) +calls=238 0 +0 3831 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1327 +0 610 +cfn=(2444) +calls=122 0 +0 1971 +0 7503 +cfn=(3346) +calls=228 0 +0 3697 +0 1170 +cfn=(3346) +calls=234 0 +0 3821 +0 1290 +cfn=(3346) +calls=122 0 +0 2090 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1310 +0 2409930493 +cfn=(2444) +calls=234 0 +0 4008 +0 468 + +fn=(2532) std::basic_istream >& std::operator>>, std::allocator >(std::basic_istream >&, std::basic_string, std::allocator >&) +0 42 +cfn=(1736) +calls=3 0 +0 144 +0 54 +cfn=(1586) +calls=3 0 +0 114 +0 36 +cfn=(2538) std::locale::locale(std::locale const&) +calls=3 0 +0 18 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1013 +0 6 +cfn=(772) +calls=3 0 +0 354 +0 9 +cfn=(746) +calls=3 0 +0 36 +0 108 +cfn=(1772) std::string::append(char const*, unsigned long) +calls=3 0 +0 672 +0 78 + +fn=(2538) +0 18 + +fn=(3420) +0 22 +cfn=(1934) +calls=2 0 +0 60 +0 26 +cfn=(3426) +calls=2 0 +0 1779 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1240 +0 36 + +fn=(3482) std::istream::read(char*, long) +0 1272 +cfn=(1736) +calls=106 0 +0 3392 +0 1590 +cfn=(3484) std::basic_filebuf >::xsgetn(char*, long) +calls=106 0 +0 12423 +0 318 + +fn=(3492) std::basic_streambuf >::uflow() +0 8 +cfn=(1738) +calls=2 0 +0 230 +0 16 + +fn=(3580) std::basic_filebuf >::sync() +0 20 +cfn=(3578) +calls=2 0 +0 4521 +0 4 + +fn=(3280) std::ostream& std::ostream::_M_insert(double) +0 60 +cfn=(1512) +calls=5 0 +0 105 +0 105 +cfn=(3282) +calls=5 0 +0 17043 +0 155 + +fn=(266) 0x000000000005a4a0 +0 6 + +fn=(278) 0x00000000000d1200 +0 11 +cfn=(282) +calls=1 0 +0 11 +0 16 +cfn=(372) 0x000000000005c2d0 +calls=1 0 +0 57 +cfn=(370) 0x000000000005fef0 +calls=1 0 +0 1 +cfn=(368) +calls=1 0 +0 1 +cfn=(348) 0x0000000000072400 +calls=1 0 +0 1917 +cfn=(322) 0x0000000000087050 +calls=1 0 +0 49 +cfn=(296) +calls=1 0 +0 49 +cfn=(294) 0x00000000000c3ba0 +calls=1 0 +0 1 +cfn=(292) +calls=1 0 +0 52 +0 31 + +fn=(348) +0 8 +cob=(4) +cfi=(56) /build/buildd/eglibc-2.11.1/stdlib/cxa_atexit.c +cfn=(362) __cxa_atexit +calls=1 57 +0 62 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1778 +0 7 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 + +fn=(486) std::ios_base::Init::Init() +0 2124 +cfn=(492) +calls=1 0 +0 66714 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 952 +0 16 +cfn=(492) +calls=1 0 +0 39 +0 14 +cfn=(492) +calls=1 0 +0 39 +0 6 +cfn=(722) +calls=1 0 +0 97 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 970 +0 15 +cfn=(728) +calls=1 0 +0 14869 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1451 +0 3 +cfn=(722) +calls=1 0 +0 97 +0 16 +cfn=(728) +calls=1 0 +0 708 +0 3 +cfn=(722) +calls=1 0 +0 97 +0 14 +cfn=(728) +calls=1 0 +0 708 +0 3 +cfn=(722) +calls=1 0 +0 97 +0 14 +cfn=(728) +calls=1 0 +0 708 +0 16 +cfn=(492) +calls=1 0 +0 39 +0 16 +cfn=(492) +calls=1 0 +0 39 +0 14 +cfn=(492) +calls=1 0 +0 39 +0 6 +cfn=(722) +calls=1 0 +0 97 +0 15 +cfn=(804) std::basic_ios >::init(std::basic_streambuf >*) +calls=1 0 +0 10843 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1453 +0 3 +cfn=(722) +calls=1 0 +0 97 +0 16 +cfn=(804) +calls=1 0 +0 638 +0 3 +cfn=(722) +calls=1 0 +0 97 +0 14 +cfn=(804) +calls=1 0 +0 638 +0 3 +cfn=(722) +calls=1 0 +0 97 +0 14 +cfn=(804) +calls=1 0 +0 638 +0 562 + +fn=(494) +0 5 +cfn=(506) std::locale::_Impl::_Impl(unsigned long) +calls=1 0 +0 63584 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1006 +0 25374 + +fn=(574) std::moneypunct::_M_initialize_moneypunct(__locale_struct*, char const*) +0 112 + +fn=(592) std::messages::messages(unsigned long) +0 11 +cfn=(524) +calls=1 0 +0 7 +0 2 +cfn=(512) +calls=1 0 +0 2 +0 4 + +fn=(648) std::codecvt::codecvt(unsigned long) +0 11 +cfn=(524) +calls=1 0 +0 7 +0 4 + +fn=(666) std::moneypunct::_M_initialize_moneypunct(__locale_struct*, char const*) +0 101 + +fn=(734) +0 15723 +cfn=(492) +calls=1747 0 +0 68133 +0 5241 +cfn=(740) std::locale::operator=(std::locale const&) +calls=1747 0 +0 33193 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 995 +0 3494 +cfn=(746) +calls=1747 0 +0 20964 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 976 +0 6988 + +fn=(752) +0 12201 +cfn=(758) +calls=1743 0 +0 206633 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1190 +0 6972 +cfn=(772) +calls=1743 0 +0 205674 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1219 +0 5229 +cfn=(778) +calls=1743 0 +0 144669 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1580 +0 6972 +cfn=(786) +calls=1743 0 +0 144669 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1599 +0 5229 +cfn=(792) +calls=1743 0 +0 144669 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1572 +0 6972 +cfn=(798) std::num_get > > const& std::use_facet > > >(std::locale const&) +calls=1743 0 +0 144669 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1615 +0 8715 + +fn=(798) +0 6972 +cfn=(550) +calls=1743 0 +0 8715 +0 19173 +cfn=(764) +calls=1743 0 +0 102837 +0 6972 + +fn=(880) +0 88921194984 +cob=(4) +cfi=(71) +cfn=(886) malloc +calls=9880132776 3615 +0 939669252630 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1742 +0 59280796656 + +fn=(1298) std::string::compare(unsigned long, unsigned long, char const*, unsigned long) const +0 5715 + +fn=(1310) +0 687163171 +cfn=(1174) +calls=687163171 0 +0 55660225516 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 870 + +fn=(1378) +0 3270 +cfn=(1384) +calls=109 0 +0 21616 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 950 +0 863 +cob=(4) +cfi=(82) /build/buildd/eglibc-2.11.1/string/../sysdeps/x86_64/memset.S +cfn=(986) memset +calls=106 44 +0 1917 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1690 +0 551 + +fn=(1522) std::string::swap(std::string&) +0 3663 + +fn=(1550) std::basic_stringstream, std::allocator >::~basic_stringstream() +0 7776 +cfn=(746) +calls=324 0 +0 3888 +0 6804 +cfn=(1556) +calls=324 0 +0 21182 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 994 +0 3240 +cfn=(1310) +calls=324 0 +0 34491 +0 1620 + +fn=(1562) +0 8400 + +fn=(1736) +0 29214 +cfn=(1712) +calls=61 0 +0 488 +0 11722 + +fn=(1740) +0 966 + +fn=(1812) std::basic_string, std::allocator >::basic_string(char const*, unsigned long, std::allocator const&) +0 2904 +cfn=(942) +calls=363 0 +0 67448 +0 1452 + +fn=(2056) std::string::rfind(char, unsigned long) const +0 98 + +fn=(2552) +0 16 +cfn=(1832) +calls=1 0 +0 28 +0 352 +cfn=(1860) +calls=1 0 +0 16 +0 5 + +fn=(2722) std::ostreambuf_iterator > std::num_put > >::_M_insert_int(std::ostreambuf_iterator >, std::ios_base&, char, long) const +0 110 +cfn=(1832) +calls=5 0 +0 140 +0 125 +cfn=(2724) +calls=5 0 +0 153 +0 140 +cfn=(1514) +calls=5 0 +0 905 +0 85 + +fn=(3186) std::ostream::flush() +0 30 +cfn=(3580) +calls=2 0 +0 4545 +cfn=(3188) __gnu_cxx::stdio_sync_filebuf >::sync() +calls=1 0 +0 1745 +0 21 + +fn=(3188) +0 2 +cob=(4) +cfi=(135) /build/buildd/eglibc-2.11.1/libio/iofflush.c +cfn=(3194) fflush +calls=1 36 +0 54 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1689 + +fn=(3452) std::istream::get(char*, long, char) +0 60 +cfn=(1736) +calls=4 0 +0 128 +0 3256 +cfn=(1738) +calls=4 0 +0 460 +0 8 + +fn=(3490) std::basic_streambuf >::xsgetn(char*, long) +0 1924 +cfn=(3492) +calls=2 0 +0 254 +0 1816 +cob=(4) +cfi=(81) +cfn=(966) +calls=106 56 +0 2880 +0 530 + +fn=(3572) +0 6580 +cfn=(1740) +calls=470 0 +0 940 +0 11758 +cfn=(1514) +calls=470 0 +0 28256 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1310 + +fn=(3612) std::basic_ifstream >::close() +0 12 +cfn=(1928) std::basic_filebuf >::close() +calls=3 0 +0 1977 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1272 +0 12 + +fn=(506) +0 217 +cfn=(512) +calls=1 0 +0 2 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1153 +0 56 +cfn=(518) +calls=1 0 +0 4501 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1014 +0 4 +cfn=(544) +calls=1 0 +0 1277 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1354 +0 3 +cfn=(556) std::codecvt::codecvt(unsigned long) +calls=1 0 +0 22 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1130 +0 4 +cfn=(544) +calls=1 0 +0 253 +0 23 +cfn=(562) +calls=1 0 +0 410 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1356 +0 5 +cfn=(544) +calls=1 0 +0 253 +0 8 +cfn=(544) +calls=1 0 +0 253 +0 8 +cfn=(544) +calls=1 0 +0 253 +0 5 +cfn=(524) +calls=1 0 +0 7 +0 5 +cfn=(544) +calls=1 0 +0 253 +0 35 +cfn=(568) +calls=1 0 +0 112 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1464 +0 5 +cfn=(544) +calls=1 0 +0 253 +0 35 +cfn=(574) +calls=1 0 +0 112 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1464 +0 5 +cfn=(544) +calls=1 0 +0 253 +0 8 +cfn=(544) +calls=1 0 +0 253 +0 8 +cfn=(544) +calls=1 0 +0 253 +0 56 +cfn=(580) +calls=1 0 +0 1537 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1273 +0 5 +cfn=(544) +calls=1 0 +0 253 +0 8 +cfn=(544) +calls=1 0 +0 253 +0 8 +cfn=(544) +calls=1 0 +0 253 +0 3 +cfn=(592) +calls=1 0 +0 26 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1020 +0 4 +cfn=(544) +calls=1 0 +0 253 +0 3 +cfn=(598) std::ctype::ctype(unsigned long) +calls=1 0 +0 25803 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 978 +0 4 +cfn=(544) +calls=1 0 +0 253 +0 3 +cfn=(648) +calls=1 0 +0 22 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1148 +0 4 +cfn=(544) +calls=1 0 +0 253 +0 23 +cfn=(654) +calls=1 0 +0 345 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1372 +0 4 +cfn=(544) +calls=1 0 +0 253 +0 8 +cfn=(544) +calls=1 0 +0 253 +0 8 +cfn=(544) +calls=1 0 +0 253 +0 5 +cfn=(524) +calls=1 0 +0 7 +0 5 +cfn=(544) +calls=1 0 +0 253 +0 35 +cfn=(660) std::moneypunct::_M_initialize_moneypunct(__locale_struct*, char const*) +calls=1 0 +0 101 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1464 +0 4 +cfn=(544) +calls=1 0 +0 253 +0 35 +cfn=(666) +calls=1 0 +0 101 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1472 +0 4 +cfn=(544) +calls=1 0 +0 253 +0 8 +cfn=(544) +calls=1 0 +0 253 +0 8 +cfn=(544) +calls=1 0 +0 253 +0 56 +cfn=(672) +calls=1 0 +0 1543 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1291 +0 4 +cfn=(544) +calls=1 0 +0 253 +0 8 +cfn=(544) +calls=1 0 +0 253 +0 8 +cfn=(544) +calls=1 0 +0 253 +0 3 +cfn=(684) +calls=1 0 +0 26 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 996 +0 4 +cfn=(544) +calls=1 0 +0 253 +0 3 +cfn=(550) +calls=1 0 +0 5 +0 5 +cfn=(550) +calls=1 0 +0 5 +0 5 +cfn=(550) +calls=1 0 +0 5 +0 5 +cfn=(550) +calls=1 0 +0 5 +0 5 +cfn=(550) +calls=1 0 +0 5 +0 5 +cfn=(550) +calls=1 0 +0 5 +0 5 +cfn=(550) +calls=1 0 +0 5 +0 5 +cfn=(550) +calls=1 0 +0 5 +0 10 + +fn=(598) +0 11 +cfn=(524) +calls=1 0 +0 7 +0 4 +cfn=(604) +calls=1 0 +0 24611 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1167 +0 3 + +fn=(660) +0 101 + +fn=(766) +0 181688 + +fn=(804) +0 24 +cfn=(734) +calls=4 0 +0 352 +0 12 +cfn=(810) +calls=4 0 +0 10877 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1440 +0 52 + +fn=(816) +0 16 +cfn=(550) +calls=4 0 +0 20 +0 44 +cfn=(764) +calls=4 0 +0 236 +0 16 + +fn=(846) +0 16 +cfn=(550) +calls=4 0 +0 20 +0 44 +cfn=(764) +calls=4 0 +0 236 +0 16 + +fn=(1446) std::basic_string, std::allocator >::basic_string(std::string const&, unsigned long, unsigned long) +0 22508 +cfn=(1448) +calls=1324 0 +0 263553 +0 5296 + +fn=(1586) +0 5604 +cfn=(952) +calls=34 0 +0 4977 +0 4448 +cfn=(1310) +calls=1 0 +0 82 +0 101 + +fn=(1688) +0 36 +cfn=(1638) +calls=12 0 +0 36 +0 24 + +fn=(1712) +0 3520 + +fn=(1772) +0 27600 +cfn=(1384) +calls=888 0 +0 214712 +0 6474 +cob=(4) +cfi=(81) +cfn=(966) +calls=549 56 +0 18381 +0 5585 + +fn=(1866) +0 1800 + +fn=(2544) std::istream& std::istream::_M_extract(unsigned long&) +0 9 +cfn=(1736) +calls=1 0 +0 65 +0 23 +cfn=(2546) +calls=1 0 +0 2350 +0 12 +cfn=(1712) +calls=1 0 +0 8 +0 5 + +fn=(2570) std::basic_istringstream, std::allocator >::~basic_istringstream() +0 22 +cfn=(746) +calls=1 0 +0 12 +0 12 +cfn=(1556) +calls=1 0 +0 58 +0 10 +cfn=(1310) +calls=1 0 +0 82 +0 5 + +fn=(2714) std::ostream& std::ostream::_M_insert(long) +0 65 +cfn=(1512) +calls=5 0 +0 105 +0 86 +cfn=(2716) std::num_put > >::do_put(std::ostreambuf_iterator >, std::ios_base&, char, long) const +calls=3 0 +0 622 +0 22 +cfn=(2716) +calls=2 0 +0 2821 +0 124 + +fn=(2716) +0 25 +cfn=(2722) +calls=5 0 +0 1658 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1740 +0 20 + +fn=(2724) +0 7246 + +fn=(2752) +0 13 +cfn=(2758) +calls=1 0 +0 726 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1750 +0 7 + +fn=(3412) std::istream::seekg(std::fpos<__mbstate_t>) +0 40 +cfn=(3414) +calls=2 0 +0 4750 +0 16 + +fn=(3484) +0 2650 +cfn=(3490) +calls=106 0 +0 7404 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1309 +0 1060 + +fn=(294) +0 1 + +fn=(322) +0 49 + +fn=(370) +0 1 + +fn=(372) +0 57 + +fn=(556) +0 11 +cfn=(524) +calls=1 0 +0 7 +0 4 + +fn=(586) +0 10 +cfn=(524) +calls=1 0 +0 7 +0 97 + +fn=(696) +0 24 + +fn=(740) +0 33193 + +fn=(834) +0 16 +cfn=(550) +calls=4 0 +0 20 +0 44 +cfn=(764) +calls=4 0 +0 236 +0 16 + +fn=(1264) +0 12937579 +cfn=(1310) +calls=353 0 +0 28946 +0 6278 + +fn=(1500) std::basic_ostream >& std::operator<< >(std::basic_ostream >&, char const*) +0 2124 +cob=(4) +cfi=(69) +cfn=(642) +calls=236 26 +0 3782 +0 944 +cfn=(1506) +calls=236 0 +0 42750 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1522 +0 1180 + +fn=(1516) +0 12654 +cfn=(1384) +calls=333 0 +0 85333 +0 6327 +cfn=(1522) +calls=333 0 +0 3663 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 999 +0 2331 +cfn=(1528) std::basic_stringbuf, std::allocator >::_M_sync(char*, unsigned long, unsigned long) +calls=333 0 +0 9320 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1372 +0 1332 + +fn=(1528) +0 16943 + +fn=(1644) +0 96 +cfn=(1646) +calls=12 0 +0 120 +0 60 +cfn=(1638) +calls=12 0 +0 36 +0 60 +cob=(4) +cfi=(101) /build/buildd/eglibc-2.11.1/libio/../sysdeps/wordsize-64/../../libio/iofopen.c +cfn=(1656) fopen@@GLIBC_2.2.5 +calls=12 107 +0 7812 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1723 +0 132 + +fn=(1700) +0 24 +cfn=(880) +calls=12 0 +0 16843 +0 24 + +fn=(1720) std::ctype::_M_widen_init() const +0 1041 +cfn=(1722) +calls=1 0 +0 121 +0 270 + +fn=(1730) std::basic_istream >& std::getline, std::allocator >(std::basic_istream >&, std::basic_string, std::allocator >&, char) +0 3390 +cfn=(1736) +calls=226 0 +0 7232 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 994 +0 768 +cfn=(1712) +calls=15 0 +0 120 +0 3390 +cfn=(1586) +calls=226 0 +0 12674 +0 7486 +cob=(4) +cfi=(89) +cfn=(1252) +calls=211 25 +0 8195 +0 1899 +cfn=(1772) +calls=211 0 +0 59666 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 994 +0 3406 +cfn=(1778) +calls=211 0 +0 1477 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1283 +0 479 +cfn=(1860) +calls=14 0 +0 224 +cfn=(1738) +calls=5 0 +0 6079 +0 151 + +fn=(1822) std::istream& std::istream::_M_extract(double&) +0 2907 +cfn=(1736) +calls=323 0 +0 17517 +0 6148 +cfn=(1824) +calls=262 0 +0 406277 +0 3449 +cfn=(1712) +calls=79 0 +0 632 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1346 +0 395 + +fn=(1842) +0 2620 +cob=(4) +cfi=(108) /build/buildd/eglibc-2.11.1/stdlib/strtod_l.c +cfn=(1848) strtod_l +calls=262 1601 +0 160524 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1788 +0 4192 + +fn=(1928) +0 56 +cfn=(1638) +calls=7 0 +0 21 +0 70 +cfn=(1934) +calls=7 0 +0 210 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1391 +0 42 +cfn=(1940) +calls=7 0 +0 1837 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1446 +0 98 +cfn=(1952) +calls=7 0 +0 7583 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1110 +0 28 + +fn=(1990) std::__basic_file::~__basic_file() +0 4 +cfn=(1952) +calls=4 0 +0 64 + +fn=(2356) +0 2590 +cob=(4) +cfi=(108) +cfn=(2362) strtof_l +calls=259 1601 +0 155113 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1770 +0 3876 + +fn=(2444) +0 9810 + +fn=(2786) std::ostream& std::ostream::_M_insert(unsigned long) +0 4212 +cfn=(1512) +calls=324 0 +0 6804 +0 6804 +cfn=(2788) +calls=324 0 +0 173747 +0 10368 + +fn=(3540) std::_Rb_tree_rebalance_for_erase(std::_Rb_tree_node_base*, std::_Rb_tree_node_base&) +0 408 + +fn=(3578) +0 74 +cfn=(3586) +calls=2 0 +0 2969 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1444 +0 10 +cfn=(1706) +calls=2 0 +0 38 +0 36 +cfn=(1706) +calls=2 0 +0 38 +0 20 + +ob=(4) +fl=(141) /build/buildd/eglibc-2.11.1/string/../sysdeps/x86_64/strchrnul.S +fn=(3312) strchrnul +27 50 ++1 50 ++1 50 ++1 50 ++1 50 ++1 50 ++1 50 ++1 50 ++1 50 ++1 50 ++1 50 ++1 50 ++1 50 ++1 50 ++1 50 ++1 50 ++1 50 ++1 50 ++1 50 ++1 50 ++12 50 ++1 50 ++1 50 + +fl=(81) +fn=(966) +56 688544694 ++2 688544694 ++2 688544694 ++3 688544627 ++1 688544627 ++2 344232586 ++1 344232586 ++2 344232586 ++1 344232586 ++5 344232586 ++1 344232586 +-1 344312041 ++1 344312041 ++2 344311084 ++1 344311084 ++2 344311084 ++1 688622168 ++5 344311084 ++1 344311084 +-1 344233543 ++1 344233543 ++2 80764 ++1 80764 ++2 80764 ++1 80764 ++5 80764 ++1 80764 +-1 688463863 ++1 688463863 ++2 688542620 ++1 688542620 ++2 688542620 ++1 688542620 ++5 688542620 ++1 688542620 +-1 2007 ++1 3625 ++5 1618 ++1 1618 ++1 1618 ++1 1618 ++2 1618 ++2 1618 ++1 1618 ++2 1618 ++8 688544627 ++8 617 ++6 617 ++2 617 ++1 617 ++3 208 ++1 416 ++5 208 ++1 208 ++2 208 ++2 208 ++1 208 ++2 208 +-8 890 ++1 890 ++2 890 ++2 890 ++1 890 ++2 1098 ++9 208 ++1 208 +-1 409 ++1 409 ++3 617 ++1 617 ++1 617 ++5 478 ++2 478 ++1 478 ++1 478 ++1 478 ++2 478 ++1 478 ++1 478 ++1 478 ++2 478 ++1 478 ++2 478 ++2 18 ++2 18 ++1 18 ++1 18 ++1 18 ++2 18 ++1 18 ++1 18 ++1 18 ++2 18 ++1 18 ++2 32 ++5 14 ++6 14 ++1 14 +-7 603 ++6 603 ++1 603 ++2 67 + +fn=(3328) mempcpy +56 9 ++4 9 ++3 9 ++1 9 ++2 9 ++1 9 ++2 9 ++1 9 ++5 9 ++1 9 ++2 8 ++1 8 ++2 8 ++1 8 ++5 8 ++1 8 +-1 1 ++1 1 ++2 8 ++1 8 ++2 8 ++1 8 ++5 8 ++1 8 +-1 1 ++1 1 ++2 8 ++1 8 ++2 8 ++1 16 ++5 8 ++1 8 +-1 1 ++1 9 ++5 8 ++1 8 ++1 8 ++1 8 ++2 8 ++2 8 ++1 8 ++2 8 ++6 9 ++4 9 + +fl=(153) /build/buildd/eglibc-2.11.1/debug/fprintf_chk.c +fn=(3934) __fprintf_chk +28 120 ++4 120 ++1 16 ++1 8 ++2 16 ++1 16 +-1 40 ++1 8 +cfi=(140) /build/buildd/eglibc-2.11.1/stdio-common/vfprintf.c +cfn=(3310) vfprintf +calls=8 210 +* 13308 ++3 8 +-3 8 ++3 8 ++1 24 +fi=(157) /build/buildd/eglibc-2.11.1/debug/../libio/libioP.h +993 8 ++1 8 +-1 8 ++1 8 ++1 88 +fe=(153) +45 40 + +fl=(73) /build/buildd/eglibc-2.11.1/malloc/arena.c +fn=(890) ptmalloc_init +467 5 ++8 3 ++1 1 +-66 1 ++2 1 ++1 1 ++1 1 ++1 1 +cfi=(74) /build/buildd/eglibc-2.11.1/misc/../sysdeps/unix/sysv/linux/getpagesize.c +cfn=(892) getpagesize +calls=1 29 +* 6 +519 1 +415 1 ++96 1 +-1 1 ++1 1 ++8 1 ++8 2 ++1 1 +-3 1 ++3 1 +-1 1 ++1 10 +cfi=(76) /build/buildd/eglibc-2.11.1/nptl/../nptl/sysdeps/unix/sysv/linux/register-atfork.c +cfn=(900) __linkin_atfork +calls=1 117 +* 9 ++11 2 ++2 6 +382 92 ++16 46 +-18 141 +622 2 ++5 2 ++1 2 ++2 1 ++1 6 +521 5 +cfi=(75) /build/buildd/eglibc-2.11.1/elf/dl-addr.c +cfn=(894) _dl_addr +calls=1 127 +* 59307 +-2 2 ++2 3 +382 5 + +fl=(89) +fn=(1252) +25 1739 ++1 1739 ++1 1739 ++1 1739 ++1 1739 ++1 1739 ++1 1739 ++1 1739 ++1 1739 ++1 1739 ++1 1739 ++1 1739 ++1 1739 ++1 1739 ++1 1739 ++1 1739 ++1 1739 ++1 1739 ++1 1302 ++1 1302 ++2 924 ++1 924 ++1 924 ++1 924 ++1 924 ++1 924 ++1 540 ++1 540 ++2 1105 ++1 1105 ++2 821 ++1 821 ++1 821 ++1 821 ++1 821 ++1 821 ++1 634 + +fl=(48) /build/buildd/eglibc-2.11.1/csu/../sysdeps/x86_64/multiarch/init-arch.c +fn=(212) __init_cpu_features +49 1 +-5 1 ++5 1 ++3 1 +-3 1 ++3 5 ++42 2 +-63 1 ++23 1 +-23 2 ++6 1 +-6 1 ++6 1 +-6 1 ++29 1 +-22 1 +-1 1 ++23 1 +-22 1 ++22 1 +-29 1 ++7 1 ++23 1 +-24 1 ++1 1 ++23 1 ++5 2 ++2 1 ++1 1 +-1 1 ++1 7 + +fl=(108) +fn=(2362) +1601 777 +cfn=(2364) ____strtof_l_internal +calls=259 416 +* 154336 + +fn=(1850) ____strtod_l_internal +416 2358 ++56 262 +-2 262 +-54 262 ++56 262 ++15 524 ++17 262 ++1 1048 +cfi=(69) +cfn=(642) +calls=262 26 +* 4192 ++22 524 +-22 262 ++22 262 +-6 262 ++6 786 ++3 524 ++1 786 ++3 524 ++5 501 ++13 786 ++1 1310 ++75 824 ++19 524 ++1 973 ++1 374 +-1 374 ++17 262 ++6 524 ++1 1160 ++6 374 ++1 748 +-7 532 ++42 2055 ++13 516 ++16 258 +-2 258 ++2 258 ++42 516 ++9 516 ++1 1102 +-1 564 ++7 188 ++1 188 +-1 188 ++1 752 ++1 564 ++4 4068 ++3 945 +-1 945 ++1 1890 +-7 2835 ++7 144 +-1 144 ++1 288 +-7 1333 +561 786 +1585 2096 +678 549 +-6 366 +819 140 ++5 2 ++1 2 ++8 3 ++5 2 ++5 5 ++7 3 ++2 1 +-2 1 ++2 1 +-2 3 ++2 1 +-2 1 ++2 1 ++28 4 ++2 6 ++2 2 ++1 2 ++7 1 +-7 2 ++7 1 ++2 254 ++8 1208 ++19 516 ++1 258 ++2 516 ++3 746 ++26 508 ++77 1456 ++2 237 ++1 237 ++3 237 +-4 237 ++4 474 +-4 17 ++1 17 ++3 17 +-4 17 ++4 34 ++6 508 ++6 254 +-15 254 ++15 2488 +1221 920 ++8 552 ++20 184 +-20 736 ++20 184 +-20 368 ++20 184 +-20 368 ++14 184 ++1 552 +-1 184 ++1 552 +cfi=(81) +cfn=(966) +calls=184 56 +* 3312 ++18 726 +-3 368 ++1 368 +-24 1104 ++3 373 ++2 746 ++8 1701 +cfi=(110) /build/buildd/eglibc-2.11.1/stdlib/mul.c +cfn=(1880) __mpn_mul +calls=189 58 +* 9450 ++4 189 ++1 189 +-1 189 ++1 189 ++1 378 ++7 189 +-7 378 ++7 373 ++2 736 ++4 2208 +cfn=(1884) str_to_mpn +calls=184 283 +* 22630 ++17 184 ++2 184 +-2 552 ++2 368 ++4 920 +cfi=(112) /build/buildd/eglibc-2.11.1/stdlib/../sysdeps/x86_64/lshift.S +cfn=(1886) __mpn_lshift +calls=184 26 +* 2760 ++1 920 +cfi=(112) +cfn=(1886) +calls=184 26 +* 2760 ++1 552 ++13 184 +-2 184 ++2 184 +1577 920 +cfn=(1888) round_and_return +calls=184 182 +* 8006 +* 184 +818 376 ++1 519 ++73 257 +-7 257 ++7 257 ++2 564 ++3 4 +-3 12 ++8 210 +718 255 ++22 510 ++1 255 +1045 36 +537 380 ++91 1496 +1045 4 +927 80 ++9 32 ++2 32 ++10 48 +-1 16 ++1 16 +-1 16 ++2 16 +-1 32 +-1 32 +795 280 +-52 516 +1051 1258 +cfn=(1884) +calls=74 283 +* 6368 +* 74 ++6 222 +828 4 +1101 74 ++1 148 +-1 148 ++1 74 ++4 148 ++9 148 ++32 148 ++3 560 ++2 140 ++8 140 ++2 700 +cfi=(112) +cfn=(1886) +calls=70 26 +* 1050 ++4 210 ++15 490 +cfn=(1888) +calls=70 182 +* 2730 +* 70 +764 8 +-65 24 +cfi=(114) /build/buildd/eglibc-2.11.1/stdlib/grouping.c +cfn=(1910) __correctly_grouped_prefixmb +calls=4 56 +* 72 ++5 28 +1030 85 +1313 184 ++1 184 ++5 184 ++38 368 +-38 368 ++38 368 +-38 2 ++38 3235 ++4 1472 +-4 10 ++2 1 +-2 1 ++2 1 +390 10 +1357 30 +389 25 +cfi=(112) +cfn=(1886) +calls=5 26 +* 75 ++1 30 +1097 148 ++89 28 +cfi=(81) +cfn=(966) +calls=4 56 +* 72 +* 44 ++79 805 +cfi=(81) +cfn=(966) +calls=161 56 +* 2898 +* 322 ++92 4 + +fn=(1884) +283 245 +fi=(158) /build/buildd/eglibc-2.11.1/stdlib/../stdlib/gmp.h +447 245 +fe=(108) +283 980 ++6 245 +-6 980 ++6 245 +-6 1225 ++6 245 ++39 490 +-5 5136 ++3 332 ++7 332 ++3 166 ++3 166 +-3 332 ++1 166 ++2 166 +-3 166 ++3 166 +-3 1118 ++3 1118 +-3 2236 ++1 1118 ++2 1118 +-3 1118 ++3 1118 +-46 2078 ++48 735 ++9 245 +-2 490 ++2 245 +-2 245 ++2 245 ++2 245 ++1 245 ++12 2205 +-82 258 +fi=(158) +447 258 +fe=(108) +283 1032 ++6 258 +-6 1032 ++6 258 +-6 1290 ++6 258 ++39 516 +-5 5292 ++3 336 ++7 336 ++3 168 ++3 168 +-3 336 ++1 168 ++2 168 +-3 168 ++3 168 +-3 1155 ++3 1155 +-3 2310 ++1 1155 ++2 1155 +-3 1155 ++3 1155 +-46 2130 ++48 774 ++9 258 +-2 516 ++2 258 +-2 258 ++2 258 ++2 258 ++1 258 ++12 2322 + +fn=(1888) +182 1470 ++1 245 +-1 735 ++1 490 ++56 784 +fi=(158) +448 98 +fe=(108) +245 98 +fi=(158) +449 98 +fe=(108) +245 98 ++10 196 ++8 490 ++3 735 ++1 1225 +-1 245 +cfi=(119) /build/buildd/eglibc-2.11.1/stdlib/../sysdeps/ieee754/flt-32/mpn2flt.c +cfn=(2366) __mpn_construct_float +calls=245 34 +* 2695 +-84 1524 ++1 254 +-1 762 ++1 508 ++56 757 +fi=(158) +448 83 +fe=(108) +245 166 +fi=(158) +449 83 +fe=(108) +245 83 ++10 166 ++8 508 ++3 762 ++1 1270 +-1 254 +cfi=(113) /build/buildd/eglibc-2.11.1/stdlib/../sysdeps/ieee754/dbl-64/mpn2dbl.c +cfn=(1890) __mpn_construct_double +calls=254 40 +* 3556 + +fn=(1848) +1601 786 +cfn=(1850) +calls=262 416 +* 159738 + +fn=(2364) +416 2331 ++56 259 +-2 259 +-54 259 ++56 259 ++15 518 ++17 259 ++1 1036 +cfi=(69) +cfn=(642) +calls=259 26 +* 4144 ++22 518 +-22 259 ++22 259 +-6 259 ++6 777 ++3 518 ++1 777 ++3 518 ++5 474 ++13 777 ++1 1295 ++75 768 ++19 512 ++1 960 ++1 384 +-1 384 ++17 256 ++6 512 ++1 1152 ++6 384 ++1 768 +-7 534 ++42 1957 ++13 490 ++16 245 +-2 245 ++2 245 ++42 490 ++9 490 ++1 1043 +-1 546 ++7 182 ++1 182 +-1 182 ++1 728 ++1 546 ++4 3964 ++3 925 +-1 925 ++1 1850 +-7 2775 ++7 132 +-1 132 ++1 264 +-7 1271 +561 777 ++3 9 ++2 6 ++11 6 ++47 15 +1585 2072 +678 543 +-6 362 +819 126 ++5 2 ++1 2 ++8 3 ++5 2 ++5 5 ++7 3 ++2 1 +-2 1 ++2 1 +-2 3 ++2 1 +-2 1 ++2 1 ++28 4 ++2 6 ++2 2 ++1 2 ++7 1 +-7 2 ++7 1 ++2 245 ++8 1162 ++19 490 ++1 245 ++2 490 ++3 719 ++26 490 ++77 1402 ++2 228 ++1 228 ++3 228 +-4 228 ++4 456 +-4 17 ++1 17 ++3 17 +-4 17 ++4 34 ++6 490 ++6 245 +-15 245 ++15 2492 +1221 910 ++8 546 ++20 182 +-20 728 ++20 182 +-20 364 ++20 182 +-20 364 ++14 182 ++1 546 +-1 182 ++1 546 +cfi=(81) +cfn=(966) +calls=182 56 +* 3276 ++18 722 +-3 360 ++1 360 +-24 1084 ++3 363 ++2 726 ++8 1629 +cfi=(110) +cfn=(1880) +calls=181 58 +* 9050 ++4 181 ++1 181 +-1 181 ++1 181 ++1 362 ++7 181 +-7 362 ++7 363 ++2 728 ++4 2184 +cfn=(1884) +calls=182 283 +* 22154 ++17 182 ++2 182 +-2 546 ++2 364 ++4 910 +cfi=(112) +cfn=(1886) +calls=182 26 +* 2730 ++1 910 +cfi=(112) +cfn=(1886) +calls=182 26 +* 2730 ++1 546 ++13 182 +-2 182 ++2 182 +1577 910 +cfn=(1888) +calls=182 182 +* 7434 +* 182 +818 364 ++1 493 ++73 244 +-7 244 ++7 244 ++2 546 ++8 189 +718 244 ++22 488 ++1 244 +1045 51 +537 404 ++91 1536 +1045 6 +927 80 ++9 32 ++2 32 ++10 48 +-1 16 ++1 16 +-1 16 ++2 16 +-1 32 +-1 32 +795 252 +-52 490 +1051 1071 +cfn=(1884) +calls=63 283 +* 5796 +* 63 ++6 189 +828 4 +1101 63 ++1 126 +-1 126 ++1 63 ++4 126 ++9 126 ++32 126 ++3 504 ++2 126 ++8 126 ++2 630 +cfi=(112) +cfn=(1886) +calls=63 26 +* 945 ++4 189 ++15 441 +cfn=(1888) +calls=63 182 +* 2268 +* 63 +764 22 +-65 66 +cfi=(114) +cfn=(1910) +calls=11 56 +* 198 ++5 77 +1030 85 +1313 182 ++1 182 ++5 182 ++38 364 +-38 364 ++38 3640 ++4 1456 +1097 126 +1265 765 +cfi=(81) +cfn=(966) +calls=153 56 +* 2754 +* 306 + +fl=(110) +fn=(1880) +58 4452 ++6 371 +-6 371 ++6 371 ++12 1113 ++5 371 ++1 742 ++9 742 +cfi=(111) /build/buildd/eglibc-2.11.1/stdlib/../sysdeps/x86_64/mul_1.S +cfn=(1882) __mpn_mul_1 +calls=371 -65 +* 5573 ++2 371 ++5 371 +-5 371 ++5 371 ++54 2968 + +fl=(78) /build/buildd/eglibc-2.11.1/misc/sbrk.c +fn=(908) sbrk +35 2435 ++8 3406 ++4 974 ++4 2916 ++3 486 +cfi=(79) /build/buildd/eglibc-2.11.1/misc/../sysdeps/unix/sysv/linux/x86_64/brk.c +cfn=(910) brk +calls=486 -25 +* 7536 +-3 1458 ++7 2922 +-14 2 +cfi=(79) +cfn=(910) +calls=1 -15 +* 12 +* 5 ++7 1278 + +fl=(67) /build/buildd/eglibc-2.11.1/iconv/gconv_simple.c +fn=(628) __gconv_btwoc_ascii +52 512 ++4 128 + +fl=(93) /build/buildd/eglibc-2.11.1/stdlib/random.c +fn=(1334) srand +211 2 ++1 6 ++1 3 +cfi=(94) /build/buildd/eglibc-2.11.1/stdlib/random_r.c +cfn=(1336) srandom_r +calls=1 -48 +* 10209 ++1 4 ++1 2 + +fl=(71) +fn=(886) +3615 59294267520 ++5 19764755840 ++1 19764755840 ++3 19764755838 ++33 88941401271 ++3 29647133757 +cfn=(902) _int_malloc +calls=9882377919 4247 +* 475605678163 ++1 9882377919 +-1 9882377919 ++1 9882377919 ++20 39529511676 ++1 88941401266 ++3 69176645433 +-63 1 ++63 5 +-63 1 +cfi=(72) /build/buildd/eglibc-2.11.1/malloc/hooks.c +cfn=(888) malloc_hook_ini +calls=1 36 +* 60740 + +fn=(887) malloc'2 +3615 6 ++5 2 ++1 2 ++3 2 ++33 9 ++3 3 +cfn=(902) +calls=1 4247 +* 1012 ++1 1 +-1 1 ++1 1 ++20 4 ++1 9 ++3 7 + +fn=(904) malloc_consolidate +5074 728736 ++22 182184 ++1 91091 ++2 91091 ++17 91091 ++2 182182 ++5 91091 ++2 182182 +-2 819819 ++2 1639638 ++2 745454 ++22 1949605 ++1 20202097 ++4 6413313 ++4 6413313 +-3 6413313 ++1 6413313 ++2 6413313 ++1 533997 ++1 533997 ++3 533997 ++1 533997 ++1 533997 +-2 533997 ++3 533997 +-3 533997 ++12 533997 +-3 533997 ++3 533997 +-12 5879316 ++1 5879316 ++1 5879316 +-2 5879316 ++3 5879316 +-3 5879316 ++12 5879316 +-3 5879316 ++3 5879320 +-3 4 ++3 4 +-41 6413317 +-3 6413317 ++3 12826634 ++1 6413317 ++1 12826634 ++2 12826634 ++1 1760261 ++2 1760261 +-1 1760261 ++2 18486266 ++3 12826634 ++1 12826626 ++6 8927416 ++26 4281277 +-7 4 ++1 4 +-1 12 +2479 3 ++5 3 ++5 1 ++2 1 +-2 1 ++2 1 +5184 728736 +2480 1 +5070 2 +2480 3 +-2 2 ++2 378 +-2 253 ++10 3 +5142 249 ++8 1536 +-8 83 ++8 36 +-8 39 ++8 3 + +fn=(1180) +3692 19753702682 ++5 19753702682 ++1 19753702682 ++5 19753702682 ++6 9876851341 +-3 9876851341 ++3 19753702682 ++15 29630554020 ++12 59261108040 ++2 29630554020 +cfn=(1182) _int_free +calls=9876851340 4762 +* 464262912944 ++1 39507405360 ++2 29630554023 +-29 7 ++4 1 ++1 1 +-1 1 ++1 2 +3531 2 ++1 1 ++6 6 ++10 1 +-3 1 ++1 1 ++2 1 +cfi=(120) +cfn=(2868) munmap +calls=1 82 +* 5 ++3 2 + +fn=(902) +4247 88941401451 ++30 79059023512 ++8 19764755878 ++1 29643313458 ++1 9881104486 ++12 9881104486 +-12 9881104486 ++14 19762208972 ++1 59215396344 ++7 9869232724 ++3 9869232724 +-3 9869232724 ++4 29607698172 +4750 88941401451 +4327 26290430 ++1 39241023 ++1 65401705 ++2 39241023 ++1 3371160 ++3 1685579 ++1 3371158 ++6 1685579 ++1 1685579 ++2 1685579 +-4 1685579 ++4 3371158 ++4 1685579 +-1 1685579 ++1 3371158 ++19 589552 ++1 194622 ++1 257000 +cfn=(904) +calls=64250 5074 +* 220270797 +* 128500 +4736 64250 +4405 64250 +-16 64250 +4736 64250 +4501 128500 +4736 64250 +4405 64250 +4736 64250 +4389 192750 +4736 11395386 +4405 11395386 +-16 11395386 +4736 11395386 +4501 22790772 +4736 11395386 +4405 11395386 +4736 11395386 +4389 34186158 +4736 453 +4389 12280536 ++3 7954909 +-2 7954909 ++1 15909818 ++1 15909818 ++3 7954909 ++10 26835104 ++35 4289799 +-5 4289799 ++1 4289799 ++4 4289799 ++13 8186118 ++1 7929520 ++1 11894280 ++1 3964760 ++45 15859040 ++4 3964760 +-4 7929520 ++1 3964760 ++1 3964760 +-2 3964760 ++7 3964760 +-4 3964760 ++1 3964760 ++3 3964760 +-7 513196 ++4 128299 +-4 256598 ++1 128299 ++1 128299 +-2 128299 ++7 128299 +-4 128299 ++1 128299 ++3 128299 ++9 15196478 ++1 259440 ++3 194580 ++1 7670 ++66 7594474 ++4 7594474 +-4 7594474 ++1 22783422 ++1 7594474 ++2 7594474 +-2 7594474 ++2 7594474 +-1 7594474 ++1 7594474 +-1 7594474 ++6 30728242 ++11 4563108 ++3 2361244 +-2 1180622 +-1 2361244 ++7 2281554 ++3 4563108 ++1 93717 ++1 93717 ++1 93717 +-2 281151 ++60 93717 +4459 572884 ++1 14922 ++1 14922 ++3 29844 +-4 113377 ++1 113377 ++3 226754 ++4 154280 +-2 38570 ++3 77140 ++9 9729 ++1 30896 ++2 12205 ++1 36615 +-23 923760 ++15 35327 +-1 35327 ++1 35327 ++1 141308 +-16 189895 +-91 2238 ++39 4901100 +-2 17422152 ++6 3665110 ++1 7330220 ++4 3665110 +-3 7330220 ++1 3665110 ++1 7330220 ++1 3665110 ++2 3447358 ++1 3447358 ++3 3447358 ++3 3447358 +-3 20684148 ++2 6894716 +-2 3447358 ++6 3447358 +-4 3447358 ++5 13789432 +-7 217752 ++3 217752 +-3 1306512 ++2 435504 +-2 217752 ++6 217752 +-4 217752 ++5 871008 ++69 358916 +-39 592975 +-91 294115 ++91 1825 +-91 2871 +4599 64829526 ++2 64812820 ++2 316456 +4485 3243 ++6 961 +-1 961 ++1 961 ++1 961 ++1 1922 ++2 6486 +-53 196740 +-1 393480 ++1 393480 ++4 196740 +-1 196740 ++1 393480 +-78 272 +-35 4 +cfn=(904) +calls=1 5074 +* 670 +* 3 +4487 4564 +4697 5406637 ++1 5406637 +-1 5406637 ++1 10813274 ++2 10813274 ++33 1880 ++1 906 ++1 2265 +cfn=(904) +calls=453 5074 +* 180501 +* 453 ++14 1359 +-14 453 ++14 453 +4393 4375674 +4625 4375674 ++3 2187837 +-3 2187837 ++3 2187837 ++2 2187837 ++3 2187837 +-3 4375674 ++3 22114797 ++3 4375674 ++1 1931370 ++1 1931370 +-1 1931370 ++1 3862740 ++37 2191602 +-1 2191602 ++1 6578571 +4524 3765 ++1 18825 +-1 621 ++1 3105 ++6 11429 ++3 19 ++1 19 +-1 19 ++1 19 +-1 19 ++1 19 +-1 3746 ++1 3746 +-1 3746 ++1 3746 +-1 3746 ++1 37631 ++3 7530 ++1 69 ++1 276 +4649 256467 ++1 769401 +-6 256467 ++17 256467 +-6 256467 ++1 256467 ++2 256467 +-1 256467 ++4 256467 ++1 196267 ++1 512934 ++2 66648 ++1 66648 ++2 66648 ++3 66648 +-3 199944 ++3 66648 +-3 199944 ++2 66648 +-2 66648 ++2 199944 +-2 189819 ++3 189819 +-3 569457 ++3 189819 +-3 569457 ++2 189819 +-2 189819 ++2 569457 +4531 26 +4704 21622788 +-2 5405697 ++2 21622788 ++2 5405697 +-2 5405697 ++2 5405697 +-3 5405697 ++1 5405697 ++2 5405697 +-2 5405697 ++6 5405697 +-1 5405697 +-3 5405697 ++4 16217091 +2990 1948 ++13 487 +-13 487 ++13 490 ++14 5 ++7 2 ++60 486 ++9 972 +-9 486 ++9 3883 ++10 1458 ++4 1458 +3418 1458 ++1 486 ++8 1944 ++4 1458 +-2 486 ++2 1458 ++1 486 +-1 486 ++1 486 +-2 486 ++1 972 ++1 486 ++2 486 +4745 3409 +3074 972 +4549 3696 ++1 11088 ++9 3696 +-14 3696 ++10 3696 ++1 3696 ++2 3696 +-1 3696 ++2 3696 ++5 3696 ++3 3696 +-3 11088 ++3 3696 +-3 11088 ++2 3696 +-2 3696 ++2 11088 ++67 997828 +3169 2430 ++19 486 +-19 486 ++19 2430 ++8 486 +-8 486 ++8 486 ++1 2430 +cfi=(77) /build/buildd/eglibc-2.11.1/malloc/morecore.c +cfn=(906) __default_morecore +calls=486 48 +* 26812 ++2 486 +-2 486 ++2 1458 ++2 120 ++1 120 +4746 120 +3247 972 ++1 1 ++1 2 ++6 1 +-6 1 ++6 1 +-6 970 ++6 485 +-6 485 ++6 1447 ++1 295 +-40 852 ++1 4 ++3 3 ++4 2 +-4 1275 ++4 1704 ++34 3414 ++40 5 ++19 1 ++3 2 ++1 3 ++2 3 ++1 4 +cfi=(77) +cfn=(906) +calls=1 48 +* 27 ++12 3 ++5 2 ++1 2 +4746 1 +3360 1 ++1 2 +-1 1 ++1 2 ++1 1 ++11 2 +-13 426 ++1 852 +-1 426 ++1 852 ++1 426 ++11 852 ++6 852 ++1 852 ++15 426 +-15 426 ++8 426 ++3 426 ++4 426 ++4 639 +cfn=(1182) +calls=213 4762 +* 10715 +* 213 +-40 2556 +-70 2 ++61 852 ++3 1278 +3226 3408 +cfi=(120) +cfn=(2708) mmap +calls=426 82 +* 2556 ++2 426 +-2 426 ++2 852 ++12 426 ++6 852 +-14 1278 +3099 970 +-73 7 +cfi=(120) +cfn=(2708) +calls=1 82 +* 6 ++2 1 +-2 1 ++2 1 ++14 3 ++13 3 ++5 5 ++1 1 ++2 1 ++1 1 +-1 1 ++1 1 ++1 1 ++9 2 +4531 7466 ++4 48776 + +fn=(984) calloc +4017 19 +-13 19 ++13 19 +-3 19 ++3 19 +-13 114 ++10 19 ++3 38 ++8 38 ++1 38 ++15 209 ++7 19 ++8 19 +-7 38 ++7 38 ++7 57 +cfn=(902) +calls=19 4247 +* 2398 +* 19 ++3 76 ++2 209 ++74 171 +-36 19 +-3 19 ++3 76 ++10 19 ++1 38 ++1 38 ++2 38 ++1 57 +cfi=(82) +cfn=(986) +calls=19 44 +* 2584 +* 19 + +fn=(1182) +4762 88891663977 ++15 29630554659 ++6 59261109318 ++13 19753703106 ++13 19753703106 ++79 2410356 ++21 3615534 ++6 1205178 +-10 1205178 ++10 1205178 ++8 3615534 ++7 2410356 +-1 1205178 ++2 2410356 ++6 3615534 ++4 2410356 ++1 1093 ++2 1093 +-1 1093 ++2 12268 ++3 2410356 ++2 2409284 ++7 1116324 ++8 1116324 ++1 1116324 ++1 2232648 +-2 88318 ++1 88318 ++1 176636 ++7 1204642 +-2 1204642 ++1 1204642 ++1 1204642 ++2 75885 ++1 75885 ++2 75885 ++3 75885 +-2 75885 ++2 75885 ++1 75885 +-1 75885 ++31 151770 +-34 1128757 ++3 1128757 +-2 1128757 ++2 1128757 ++1 1128757 +-1 1128757 ++31 2258586 ++1 52798 ++3 79197 +4821 9875646375 +-1 29626939125 ++2 19751292750 ++27 29626939125 ++4 9875646375 +-1 9875646375 ++1 9875646375 ++20 29626939125 ++6 9875646375 ++1 9875646375 +5053 79014812424 +-99 1058758 ++1 176636 ++60 52776 +cfn=(904) +calls=26388 +59 +* 18478890 +* 26388 +-21 536 ++2 536 +-1 2144 ++24 79197 ++1 52798 +3465 1 ++4 7 ++2 2 +4917 5412 ++37 634410 +-9 845 + +fl=(79) +fn=(910) +29 487 ++3 2922 ++2 1461 ++7 974 +-5 1278 ++1 426 + +fl=(99) /build/buildd/eglibc-2.11.1/string/../sysdeps/x86_64/multiarch/memcmp.S +fn=(1474) bcmp +29 2 ++1 2 ++2 2 ++1 2 ++1 2 ++2 2 + +fl=(121) /build/buildd/eglibc-2.11.1/time/../sysdeps/unix/sysv/linux/x86_64/gettimeofday.S +fn=(2802) gettimeofday +29 2 ++3 2 ++1 4 ++4 2 +cob=(13) /usr/lib/valgrind/callgrind-amd64-linux +cfi=(92) /build/buildd/valgrind-3.6.0~svn20100212/coregrind/m_trampoline.S +cfn=(2804) vgPlain_amd64_linux_REDIR_FOR_vgettimeofday +calls=2 155 +* 6 ++2 2 ++1 2 ++3 2 ++2 2 + +fl=(140) +fn=(3310) +210 130 ++35 13 +-35 13 ++35 26 +1288 40 ++4 65 ++11 26 ++11 5 +fi=(154) /build/buildd/eglibc-2.11.1/stdio-common/printf-parse.h +99 10 +fe=(140) +1314 25 +fi=(154) +99 5 +cfi=(141) +cfn=(3312) +calls=5 -72 +* 115 +fe=(140) +1329 5 +fi=(154) +99 5 +fe=(140) +1329 10 ++4 35 +cfi=(102) /build/buildd/eglibc-2.11.1/libio/genops.c +cfn=(3150) _IO_default_xsputn +calls=5 452 +* 90 +* 10 +1996 10 ++1 15 +1288 24 +2000 104 +1306 32 +cfn=(3936) buffered_vfprintf +calls=8 2221 +* 12989 +* 16 ++27 20 ++4 5 +-4 5 ++4 10 +1808 5 +1337 20 +1808 5 +1948 5 +1337 20 +1948 5 +1337 5 +1948 5 ++3 5 +-3 15 ++3 5 ++61 10 +1383 90 +1951 5 +1383 75 +1951 5 +1383 5 +1632 10 ++8 5 +fi=(154) +99 15 +cfi=(141) +cfn=(3312) +calls=5 -72 +* 115 +fe=(140) +1644 5 +fi=(154) +99 5 +fe=(140) +1644 55 +cfi=(102) +cfn=(3150) +calls=5 452 +* 90 +* 60 ++2 10 +1526 5 ++1 15 ++43 70 +1383 5 +1546 25 ++67 250 +cfi=(142) /build/buildd/eglibc-2.11.1/stdio-common/printf_fp.c +cfn=(3314) __printf_fp +calls=5 163 +* 5578 +* 50 +-46 10 +-35 5 +-1 5 ++1 20 ++4 40 ++3 5 +-3 5 ++3 30 ++74 50 + +fn=(3311) vfprintf'2 +210 80 ++35 8 +-35 8 ++35 16 +1288 24 ++4 40 ++11 16 ++11 8 +fi=(154) +99 16 +fe=(140) +1314 40 +fi=(154) +99 8 +cfi=(141) +cfn=(3312) +calls=8 -72 +* 184 +fe=(140) +1329 8 +fi=(154) +99 8 +fe=(140) +1329 16 ++4 56 +cfi=(102) +cfn=(3150) +calls=8 452 +* 408 +* 16 +1996 16 ++1 24 +1288 16 +2000 64 +1333 32 ++4 8 +-4 8 ++4 16 +1808 8 +1337 32 +1808 8 +1948 8 +1337 32 +1948 8 +1337 8 +1948 8 ++3 8 +-3 24 ++3 8 ++61 16 +1383 576 +1951 32 +1383 480 +1951 32 +1383 32 +1608 136 +1383 24 +1632 64 ++8 32 +fi=(154) +99 96 +cfi=(141) +cfn=(3312) +calls=32 -72 +* 736 +fe=(140) +1644 32 +fi=(154) +99 32 +fe=(140) +1644 352 +cfi=(102) +cfn=(3150) +calls=32 452 +* 1152 +* 384 ++2 64 +-16 48 +-17 88 +cfi=(155) /build/buildd/eglibc-2.11.1/stdio-common/_itoa.c +cfn=(3940) _itoa_word +calls=8 176 +* 176 +* 448 +cfi=(102) +cfn=(3150) +calls=8 452 +* 408 +* 224 +fi=(154) +75 24 ++2 56 +fe=(140) +1495 16 ++7 8 +-9 8 ++9 8 ++18 16 ++3 112 +1383 8 +1613 80 ++1 304 +-1 192 +cfi=(156) /build/buildd/eglibc-2.11.1/libio/iopadn.c +cfn=(3942) _IO_padn +calls=8 41 +* 744 +* 88 ++1 144 +cfi=(102) +cfn=(3150) +calls=16 452 +* 1616 +* 672 + +fn=(3936) +2221 48 ++8 24 ++20 8 +-10 8 +-6 8 ++6 32 ++1 8 ++9 8 ++1 8 +-8 8 ++5 8 ++3 8 ++4 8 +cfn=(3311) +calls=8 210 +* 11056 ++6 8 +-6 8 ++6 40 ++1 56 ++12 40 ++2 32 +cfi=(103) /build/buildd/eglibc-2.11.1/libio/fileops.c +cfn=(3136) _IO_file_xsputn@@GLIBC_2.2.5 +calls=8 1296 +* 1389 +* 24 ++6 64 ++1 16 +-53 16 ++56 56 + +fl=(49) /build/buildd/eglibc-2.11.1/stdlib/bsearch.c +fn=(218) bsearch +27 390 ++7 468 ++2 196 ++2 196 +-2 196 ++1 784 ++1 392 +cfi=(47) /build/buildd/eglibc-2.11.1/string/../sysdeps/x86_64/cacheinfo.c +cfn=(220) intel_02_known_compare +calls=196 152 +* 1358 ++1 392 ++2 70 ++1 63 +-8 211 ++14 99 +-14 12 ++14 171 + +fl=(74) +fn=(892) +29 5 ++15 1 + +fl=(94) +fn=(1336) +165 5 ++8 2 ++44 5 +-42 1 ++1 2 ++3 1 ++2 3 ++3 1 +-1 1 ++1 1 ++5 1 ++1 4 ++7 13 ++2 3 ++1 1 +-10 3 ++7 348 ++2 87 ++1 29 +-10 87 ++13 1 ++2 1 +-1 1 ++2 1 +-3 1 ++3 1 +-3 1 ++3 2 ++3 3 +cfn=(1338) random_r +calls=1 367 +* 26 +* 927 +cfn=(1338) +calls=309 367 +* 8024 +-3 622 + +fn=(1338) +367 1240 ++5 310 +-2 310 ++2 620 ++9 310 ++1 310 ++1 310 ++3 930 ++3 310 +-1 310 ++2 310 +-2 310 ++2 310 ++7 300 ++4 300 +-3 600 ++4 900 +-9 20 ++8 10 ++1 30 + +fl=(131) +fn=(3134) +37 2 ++1 2 +-1 2 ++1 2 +-1 14 ++4 4 ++2 30 ++1 8 +fi=(116) /build/buildd/eglibc-2.11.1/libio/libioP.h +984 4 ++1 12 +fe=(131) +51 4 ++4 14 +-11 1 ++1 5 +cfi=(103) +cfn=(3136) +calls=1 1296 +* 881 +* 5 +cfi=(103) +cfn=(3136) +calls=1 1296 +* 177 +* 8 +fi=(116) +985 12 +fe=(131) + +fl=(130) /build/buildd/eglibc-2.11.1/string/../sysdeps/x86_64/multiarch/strcpy.S +fn=(3048) strncpy +62 1 ++1 1 ++2 1 ++1 1 ++1 1 ++1 1 ++1 1 + +fn=(3050) 0x000000000012aa40 +81 3 ++1 3 ++1 3 ++4 3 ++1 3 ++1 3 ++1 3 ++3 3 ++1 3 ++1 3 ++1 3 ++1 3 ++1 3 +1093 3 ++3 3 ++1 3 ++1 3 ++1 3 ++1 3 ++4 3 ++1 3 ++1 3 ++1 3 ++1 3 ++26 3 ++1 3 ++1 3 ++1 3 ++1 3 ++1 3 ++1 3 ++2 18 ++2 3 ++1 3 ++1 3 ++2 6 ++1 6 ++1 6 ++6 3 ++1 3 +1289 3 ++1 3 ++5 3 ++1 3 ++1 3 + +fl=(75) +fn=(894) +127 9 ++5 1 +-5 2 ++5 2 +cob=(1) +cfi=(2) /build/buildd/eglibc-2.11.1/elf/rtld.c +cfn=(896) rtld_lock_default_lock_recursive +calls=1 835 +* 2 ++3 5 ++1 4 ++1 40 ++1 2 +31 2 ++1 2 ++3 3 ++5 1 ++6 1 +-6 1 ++1 3 ++2 3 ++3 1 ++5 3 ++74 1 +-74 1 ++74 4 +-72 1 ++19 1 +-18 2 +-1 1010 ++19 1010 +-18 2020 ++2 3600 ++14 1248 ++2 3744 +-10 2496 ++1 1248 +-1 4296 ++1 900 +-1 1800 ++2 8592 ++1 6435 +-3 5518 ++3 614 +-3 5278 ++10 5307 +-21 4042 ++85 27 +-36 2 ++1 2 ++1 2 ++3 2 ++41 2 +cob=(1) +cfi=(2) +cfn=(898) rtld_lock_default_unlock_recursive +calls=1 841 +* 2 ++3 9 +-32 1 ++1 3 + +fl=(144) /build/buildd/eglibc-2.11.1/math/../sysdeps/ieee754/dbl-64/s_isinf.c +fn=(3318) isinf +23 20 ++1 5 ++1 5 +-1 15 ++1 30 ++2 5 + +fl=(76) +fn=(900) +117 1 ++2 4 +-1 3 ++2 1 + +fl=(149) /build/buildd/eglibc-2.11.1/stdlib/divrem.c +fn=(3336) __mpn_divrem +57 60 ++3 6 +-3 12 ++3 6 +245 54 +73 6 ++1 6 ++2 18 ++6 18 ++1 12 +-38 3 ++38 1 ++1 1 +-1 1 ++1 2 +-1 3 ++4 6 +-2 6 ++2 12 ++3 6 ++2 6 +-14 6 + +fl=(85) /build/buildd/eglibc-2.11.1/csu/libc-start.c +fn=(1048) (below main) +96 7 ++10 1 +-10 3 ++10 3 ++52 1 +-52 1 ++52 1 ++1 4 +cfi=(56) +cfn=(362) +calls=1 57 +* 62 ++22 4 ++3 2 ++1 5 +cob=(12) /home/tclose/Code/Tractography/bin/test_gradient +cfi=(84) ??? +cfn=(1050) __libc_csu_init +calls=1 0 +* 253315 ++4 4 ++15 2 ++9 2 +cfi=(86) /build/buildd/eglibc-2.11.1/setjmp/../sysdeps/x86_64/bsd-_setjmp.S +cfn=(1228) _setjmp +calls=1 34 +* 29 ++1 2 ++5 2 ++1 2 ++3 2 ++3 5 +cob=(12) +cfi=(84) +cfn=(1234) main +calls=1 0 +* 7351904993215 +106 2 + +fl=(56) +fn=(364) __new_exitfn +73 623 ++6 623 +-6 623 ++6 3115 ++2 3115 ++2 1869 ++1 3110 +-3 1 ++10 1 +-10 3 ++13 1244 ++25 603 ++1 603 +-1 603 ++1 603 +-1 603 ++7 603 ++1 603 ++3 1206 +-4 20 ++1 20 ++3 1286 ++3 1869 +-39 19 ++4 40 ++2 38 ++1 57 +cfi=(71) +cfn=(984) +calls=19 4017 +* 6502 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 -71 +* 1060 ++2 57 ++2 38 ++1 19 ++6 19 ++1 38 +-1 1 ++1 2 +-32 2 + +fn=(362) +57 1246 +-22 623 ++22 3115 +-22 623 +cfn=(364) +calls=623 +38 +* 30841 ++2 1869 ++4 1246 ++3 623 +-1 623 ++2 623 ++2 1246 ++12 3738 + +fl=(83) /build/buildd/eglibc-2.11.1/nptl/forward.c +fn=(1012) pthread_mutex_init +178 5 + +fl=(150) /build/buildd/eglibc-2.11.1/string/../sysdeps/x86_64/multiarch/strcmp.S +fn=(3458) strcmp +62 1 ++1 1 ++3 1 ++1 1 ++1 1 ++1 1 ++1 1 ++1 1 ++2 1 + +fl=(87) /build/buildd/eglibc-2.11.1/setjmp/../sysdeps/x86_64/setjmp.S +fn=(1230) __sigsetjmp +26 1 ++2 1 ++1 2 ++1 1 ++4 1 ++1 1 ++1 1 ++1 1 ++1 1 ++2 2 ++2 1 ++1 1 ++2 2 ++2 1 ++9 1 +cfi=(88) /build/buildd/eglibc-2.11.1/setjmp/sigjmp.c +cfn=(1232) __sigjmp_save +calls=1 -26 +* 9 + +fl=(45) /build/buildd/eglibc-2.11.1/string/../sysdeps/x86_64/multiarch/../strrchr.S +fn=(206) __GI_strrchr +26 1 ++1 1 ++1 1 ++1 1 ++1 1 ++1 1 ++1 1 ++1 1 ++1 1 ++1 1 ++1 1 ++1 1 ++1 1 ++1 1 ++1 1 ++1 1 ++1 1 ++1 1 ++1 1 ++1 1 ++1 1 ++1 1 ++1 1 ++2 1 ++1 1 ++1 1 ++1 1 ++1 1 ++1 1 ++1 1 ++1 1 ++1 1 ++1 1 ++2 1 ++1 1 ++1 1 ++1 1 ++7 1 ++1 1 ++1 1 ++1 1 ++1 1 ++2 1 + +fl=(64) +fn=(622) +35 768 ++5 256 +-5 768 ++5 1280 ++5 512 ++4 384 +fi=(65) /build/buildd/eglibc-2.11.1/wcsmbs/./wcsmbsload.h ++23 384 +fe=(64) +-20 128 +-2 256 ++2 384 ++5 256 ++3 256 +cfi=(66) /build/buildd/eglibc-2.11.1/elf/dl-profstub.c +cfn=(626) _dl_mcount_wrapper_check +calls=128 -21 +* 512 +* 384 +cfi=(67) +cfn=(628) +calls=128 -8 +* 640 ++42 1536 +fi=(65) +-28 512 +fe=(64) + +fl=(115) +fn=(1962) +43 21 ++14 7 +-14 7 ++14 14 ++3 112 ++1 14 +fi=(116) +984 14 ++1 42 +fe=(115) +66 28 +cfi=(103) +cfn=(1978) _IO_file_finish@@GLIBC_2.2.5 +calls=7 206 +* 224 ++1 21 ++18 42 ++2 7 ++1 14 +cfi=(71) +cfn=(1180) +calls=7 3692 +* 888 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 -58 +* 1009 ++4 35 +-10 14 +-20 14 +cfi=(103) +cfn=(1966) _IO_file_close_it@@GLIBC_2.2.5 +calls=7 163 +* 581 +* 21 +-4 7 +cfi=(102) +cfn=(1964) _IO_un_link +calls=7 +6 +* 635 +* 21 +fi=(116) +985 42 +fe=(115) + +fl=(44) /build/buildd/eglibc-2.11.1/misc/init-misc.c +fn=(204) __init_misc +31 3 ++1 1 +-1 1 ++1 4 ++2 3 +cfi=(45) +cfn=(206) +calls=1 -8 +* 43 ++1 2 ++4 3 ++2 4 +-5 3 + +fl=(80) /build/buildd/eglibc-2.11.1/string/../sysdeps/x86_64/multiarch/strlen.S +fn=(940) strlen +32 3 ++1 3 ++2 3 ++1 3 ++1 3 ++2 3 + +fl=(112) +fn=(1886) +26 875 ++1 875 ++1 875 ++1 875 ++1 875 ++1 875 ++1 875 ++1 875 ++1 875 ++1 875 ++19 875 ++2 875 ++1 875 ++1 875 ++1 875 + +fl=(118) /build/buildd/eglibc-2.11.1/ctype/ctype.c +fn=(2270) tolower +47 10945 ++1 995 + +fl=(103) +fn=(1668) _IO_file_init@@GLIBC_2.2.5 +148 36 ++5 12 +-1 12 +-4 12 ++4 12 ++3 12 +cfi=(102) +cfn=(1670) _IO_link_in +calls=12 -51 +* 924 ++1 12 ++1 48 + +fn=(1672) _IO_file_fopen@@GLIBC_2.2.5 +258 108 ++11 24 +423 84 +271 46 ++25 2 +-10 2 ++10 2 +-10 2 ++10 14 +-10 10 ++10 10 +-10 10 ++10 77 +-7 7 ++7 62 +-25 40 ++65 12 +228 24 ++4 36 +cfi=(104) +cfn=(1674) open +calls=12 82 +* 84 +* 12 ++4 24 ++3 12 +-1 12 ++1 24 ++1 24 +-1 12 ++1 12 ++7 24 +cfi=(102) +cfn=(1670) +calls=12 104 +* 132 ++97 36 +cfi=(105) /build/buildd/eglibc-2.11.1/string/../string/strstr.c +cfn=(1678) __GI_strstr +calls=12 53 +* 324 +* 12 ++1 36 +fi=(117) /build/buildd/eglibc-2.11.1/libio/../iconv/gconv_charset.h +39 5 +fe=(103) +289 24 ++13 10 + +fn=(3144) _IO_file_stat +1233 1 ++2 3 +cfi=(133) /build/buildd/eglibc-2.11.1/io/../sysdeps/unix/sysv/linux/wordsize-64/fxstat.c +cfn=(3146) _fxstat +calls=1 37 +* 10 + +fn=(3148) _IO_do_write@@GLIBC_2.2.5 +501 60 ++1 10 +-1 20 ++1 20 ++2 60 ++11 3 ++7 4 ++8 5 +cfn=(3174) _IO_file_write@@GLIBC_2.2.5 +calls=1 1269 +* 42 ++1 1 +-1 1 ++1 2 ++5 1 +-2 1 ++2 1 +-2 3 ++1 2 ++1 1 +-34 1 ++34 1 +-34 1 ++29 2 ++5 2 + +fn=(3138) _IO_file_overflow@@GLIBC_2.2.5 +837 115 ++1 23 +-1 23 ++1 46 ++7 130 ++35 46 ++3 28 ++3 14 ++1 14 +-1 28 ++1 56 ++5 14 ++1 70 +-45 4 ++12 6 ++9 4 ++4 2 ++4 2 +-1 2 +-5 2 ++1 2 ++4 2 +-3 2 ++1 2 ++3 2 +-3 4 ++3 6 ++1 8 ++3 9 ++12 27 +-12 9 ++12 9 +-12 9 +cfn=(3148) +calls=9 501 +* 153 ++6 3 ++3 1 +-1 3 +cfn=(3148) +calls=1 501 +* 91 +* 2 +-39 4 +cfi=(102) +cfn=(3140) _IO_doallocbuf +calls=2 419 +* 134 ++1 12 + +fn=(3136) +1296 20 ++6 10 +-6 60 ++6 10 +-6 20 ++6 10 ++7 10 +-12 10 ++12 30 ++17 45 ++32 36 +cfn=(3138) +calls=9 837 +* 561 +* 18 ++7 18 ++1 30 ++2 27 ++11 18 ++1 4 +cfi=(102) +cfn=(3150) +calls=1 452 +* 651 +* 2 +-50 3 ++4 2 +-42 1 ++56 1 +-56 4 ++58 1 +-58 1 ++58 1 ++2 3 ++2 3 ++28 20 ++1 80 +-72 2 ++1 2 +-1 1 ++1 2 ++3 3 ++2 4 +-2 20 ++2 27 +-25 5 ++57 4 +-1 2 ++1 36 +-1 19 +515 24 ++15 40 +cfn=(3174) +calls=8 1269 +* 336 +* 8 ++1 24 ++5 8 +-2 8 ++2 8 +-2 24 ++1 16 ++1 8 +1371 8 ++1 8 +536 8 +1372 8 +-42 2 +522 40 ++9 16 ++5 16 + +fn=(1966) +163 7 ++2 7 +-2 14 ++2 7 +-2 7 ++2 7 ++3 35 ++6 14 +cfi=(102) +cfn=(1968) _IO_unsave_markers +calls=7 1117 +* 35 ++2 21 +cfn=(1970) _IO_file_close +calls=7 1260 +* 49 ++4 7 +-4 7 ++4 14 ++9 35 +cfi=(102) +cfn=(1974) _IO_setb +calls=7 404 +* 119 ++1 14 ++3 7 +-3 7 ++1 21 ++2 7 +cfi=(102) +cfn=(1964) +calls=7 64 +* 70 ++5 7 +-4 7 ++1 7 ++1 7 ++2 7 ++1 35 + +fn=(1970) +1260 14 +cfi=(104) +cfn=(1972) __close_nocancel +calls=7 82 +* 35 + +fn=(1978) +206 7 ++1 7 +-1 7 ++1 7 ++6 14 ++1 7 +-1 7 +cfi=(102) +cfn=(1980) _IO_default_finish +calls=7 687 +* 168 + +fn=(3174) +1269 9 ++2 9 +-2 54 ++2 9 +-2 9 ++2 18 ++11 9 +-11 18 ++2 18 ++3 36 +cfi=(104) +cfn=(3176) +calls=9 82 +* 63 ++1 18 ++9 27 ++3 54 +-6 27 + +fn=(3196) _IO_file_sync@@GLIBC_2.2.5 +899 1 ++5 1 +-5 1 ++5 3 ++2 1 ++1 2 ++17 2 ++4 2 + +fl=(88) +fn=(1232) +30 1 +-1 2 ++1 2 ++5 1 +-5 1 ++5 2 + +fl=(114) +fn=(1910) +56 15 ++6 15 +-6 105 ++6 15 +202 120 + +fl=(145) /build/buildd/eglibc-2.11.1/stdlib/../sysdeps/ieee754/dbl-64/dbl2mpn.c +fn=(3320) __mpn_extract_double +36 10 ++2 15 ++1 5 ++9 5 +-9 20 ++9 10 ++9 5 +-9 5 ++9 5 +-9 5 ++9 5 ++4 2 ++43 8 ++4 4 +-4 4 ++4 4 +-45 1 ++45 2 + +fl=(91) /build/buildd/eglibc-2.11.1/time/../sysdeps/unix/sysv/linux/x86_64/time.S +fn=(1326) time +32 2 ++3 2 ++1 2 +cob=(13) +cfi=(92) +cfn=(1328) vgPlain_amd64_linux_REDIR_FOR_vtime +calls=2 165 +* 6 ++2 2 ++2 2 + +fl=(109) /build/buildd/eglibc-2.11.1/string/wordcopy.c +fn=(1858) _wordcopy_fwd_aligned +38 7044 ++71 3279 ++1 3279 ++2 3279 ++1 3279 ++2 3279 ++1 3279 ++2 3279 ++1 3279 ++3 3279 ++3 6558 +-13 3 ++1 3 ++2 3 ++1 3 ++2 3 ++1 3 ++3 3 ++3 6 +-7 129 ++1 129 ++3 129 ++3 258 +-4 2237 +-24 2237 ++1 2237 ++2 2237 ++1 2237 ++2 2237 ++1 2237 ++2 2237 ++1 4474 +-7 4 ++1 4 ++2 4 ++1 4 ++2 4 ++1 8 +-29 8 ++2 4 ++2 4 ++1 4 +-42 129 ++3 387 ++1 129 ++8 3 ++3 9 ++1 3 ++2 1038 ++3 3114 ++1 1038 ++67 2348 + +fl=(68) +fn=(640) +28 45 ++6 9 +-6 18 ++3 9 +cfi=(69) +cfn=(642) +calls=9 -5 +* 156 ++3 9 +-3 9 ++3 18 ++8 40 ++1 80 +-8 40 ++2 80 +cfi=(69) +cfn=(642) +calls=40 -11 +* 724 +* 18 +cfi=(69) +cfn=(642) +calls=9 -11 +* 144 ++2 391 ++9 9 ++1 9 +-1 9 ++1 45 + +fl=(90) /build/buildd/eglibc-2.11.1/string/memmove.c +fn=(1282) memmove +47 2654 ++5 5308 +-5 13270 ++1 2654 +-1 2654 ++5 5308 ++5 7962 ++3 4696 ++1 2348 ++12 9392 ++6 14610 ++30 18578 +-36 5870 +cfi=(109) +cfn=(1858) +calls=1174 -35 +* 74401 +* 1174 + +fl=(95) /build/buildd/eglibc-2.11.1/io/../sysdeps/unix/sysv/linux/wordsize-64/xstat.c +fn=(1350) _xstat +37 10 +-1 10 ++1 10 ++1 60 ++4 8 +-4 10 + +fl=(120) +fn=(2708) +82 2145 ++1 429 + +fn=(3432) +82 4 +cfn=(3434) __lseek_nocancel +calls=2 * +* 10 + +fn=(2868) +82 8 ++1 2 + +fn=(3434) +82 10 + +fl=(102) +fn=(1670) +104 96 ++1 72 ++4 12 +-2 24 ++2 60 ++1 132 ++1 12 ++1 180 ++4 12 ++2 12 +-4 12 ++1 12 +-1 12 ++4 84 ++2 12 +-1 12 ++1 108 ++1 24 ++3 96 +-6 72 + +fn=(1980) +687 14 ++2 21 ++6 21 ++3 21 ++6 7 ++6 7 +-6 7 +cfn=(1964) +calls=7 64 +* 70 + +fn=(3172) __overflow +246 3 ++2 3 +cfi=(103) +cfn=(3138) +calls=1 837 +* 133 + +fn=(1964) +64 84 ++1 42 ++4 42 ++1 77 ++1 7 ++1 105 ++2 21 ++2 14 ++4 5 ++3 10 ++1 14 + +ob=(8) /usr/lib/libgslcblas.so.0.0.0 +fl=(57) ??? +fn=(2936) cblas_ddot +0 47580 + +fn=(2982) cblas_dsymm +0 1614365 + +fn=(408) 0x0000000000002570 +0 6 + +ob=(4) +fl=(102) +fn=(1964) +84 18 +-1 24 ++7 7 ++2 56 ++2 7 +-1 7 ++1 63 ++1 14 ++3 84 +-15 4 ++3 2 ++1 2 +-1 2 ++2 2 +-2 3 ++1 3 +-1 3 ++2 3 ++4 42 +-14 2 ++2 2 +-2 4 + +fn=(1968) +1117 14 ++20 14 ++1 7 + +fn=(3150) +452 83 ++3 166 +-3 249 ++1 83 +-1 249 ++1 83 ++2 140 ++5 280 ++2 168 ++3 112 ++10 96 ++4 144 ++2 48 +-2 48 ++2 48 ++2 48 ++2 96 +-2 8 ++2 96 +cfi=(103) +cfn=(3138) +calls=13 837 +* 429 +* 39 ++2 13 ++1 13 +-20 16 ++5 8 +-5 8 +cfi=(81) +cfn=(3328) +calls=8 56 +* 320 +* 16 ++21 114 ++1 498 +-42 144 ++32 192 +-1 96 ++1 448 +-1 272 + +fn=(1664) _IO_no_init +648 153 ++1 17 +cfn=(1666) _IO_old_init +calls=17 -13 +* 393 ++3 17 +-2 17 ++2 17 ++2 12 ++1 12 ++1 12 ++1 12 ++1 12 ++1 12 ++1 12 ++1 12 ++1 12 ++1 12 ++1 12 ++1 12 ++2 12 ++3 12 ++1 72 +-1 5 ++1 30 + +fn=(1666) +636 17 +-21 17 ++1 17 +-1 17 ++2 17 ++1 17 ++1 17 ++17 17 +-16 17 ++1 17 ++1 17 ++1 17 ++1 17 ++1 17 ++2 17 ++1 17 ++1 17 ++1 17 ++1 17 ++5 17 ++1 53 + +fn=(1974) +404 56 ++1 14 +-1 14 ++1 28 ++4 14 +-2 14 ++1 14 ++1 14 ++3 13 ++1 56 +-3 2 + +fn=(3140) +419 2 ++1 2 +-1 2 ++1 2 ++6 2 +-4 7 ++1 3 +cfi=(132) /build/buildd/eglibc-2.11.1/libio/filedoalloc.c +cfn=(3142) _IO_file_doallocate +calls=1 88 +* 89 +* 2 ++2 3 ++1 1 +-1 2 +cfn=(1974) +calls=1 -21 +* 17 + +fl=(119) +fn=(2366) +34 245 ++2 245 +-2 735 ++2 1225 ++6 245 + +fl=(46) /build/buildd/eglibc-2.11.1/elf/soinit.c +fn=(208) __libc_global_ctors +19 1 ++7 1 +-7 5 ++1 1 +cfi=(47) +cfn=(210) init_cacheinfo +calls=1 487 +* 6258 +-1 1 ++1 1 +cfi=(50) /build/buildd/eglibc-2.11.1/elf/dl-altinit.c +cfn=(222) dlinit_alt +calls=1 +13 +* 4 +-1 6 ++10 2 + +fl=(105) +fn=(1678) +53 108 ++10 36 ++2 24 +fi=(106) /build/buildd/eglibc-2.11.1/string/../string/str-two-way.h +273 12 +fe=(105) +89 108 +-26 36 + +fl=(132) +fn=(3142) +88 4 ++15 6 +cfi=(103) +cfn=(3144) +calls=1 1233 +* 14 +* 2 ++2 4 ++12 3 ++3 6 +cfi=(120) +cfn=(2708) +calls=1 -38 +* 6 +* 3 ++1 4 +cfi=(102) +cfn=(1974) +calls=1 404 +* 18 +* 1 ++2 4 +-13 1 +-2 9 ++8 1 +-3 1 ++3 2 + +fl=(148) /build/buildd/eglibc-2.11.1/stdlib/cmp.c +fn=(3334) __mpn_cmp +43 6 ++2 2 ++1 2 ++1 4 +-15 4 ++13 1 ++1 3 ++1 2 +-4 4 ++12 1 ++1 1 +-1 5 + +fl=(50) +fn=(222) +33 3 ++1 1 + +fl=(104) +fn=(1972) +82 40 + +fn=(1676) __open_nocancel +82 65 + +fn=(3176) +82 22 +cfn=(3178) __write_nocancel +calls=11 * +* 55 + +fn=(1764) +82 22 +cfn=(1766) __read_nocancel +calls=11 * +* 55 + +fn=(2874) close +82 2 +cfn=(1972) +calls=1 * +* 5 + +fn=(3178) +82 55 + +fn=(1674) +82 26 +cfn=(1676) +calls=13 * +* 65 + +fn=(1766) +82 55 + +fl=(61) +fn=(538) +46 10 ++12 1 +-12 1 ++12 1 ++8 2 ++3 4 ++6 4 ++1 3 +281 9 +63 2 ++12 3 +280 2 + +fl=(72) +fn=(888) +36 1 +-1 2 ++1 1 ++1 1 +cfi=(73) +cfn=(890) +calls=1 467 +* 59673 ++1 1 ++1 1 +-1 1 +cfi=(71) +cfn=(887) +calls=1 3615 +* 1059 + +fl=(135) +fn=(3194) +36 1 +-1 2 ++1 1 ++6 15 ++1 3 +cfi=(103) +cfn=(3196) +calls=1 899 +* 13 +* 2 +fi=(116) +984 1 +fe=(135) +43 1 +fi=(116) +984 1 ++1 11 +fe=(135) +47 3 + +fl=(62) +fn=(610) +32 12 ++2 24 +-2 12 ++2 12 ++3 24 ++29 12 +-28 12 ++28 24 ++1 36 ++2 36 ++4 36 ++1 12 + +fl=(155) +fn=(3940) +176 32 ++10 16 ++9 112 ++9 16 + +fl=(63) +fn=(616) +33 896 ++9 256 ++5 128 ++1 128 +-1 128 ++38 896 + +fl=(100) /build/buildd/eglibc-2.11.1/string/../sysdeps/x86_64/multiarch/../memcmp.S +fn=(1476) __GI_memcmp +25 24 ++1 24 ++1 24 ++1 24 ++1 24 ++1 24 ++1 24 ++1 24 ++3 24 ++1 24 ++1 7 ++1 7 ++1 7 ++1 7 ++1 7 ++1 7 ++1 7 ++2 21 ++1 21 ++1 5 ++1 5 ++1 5 ++1 5 ++1 1 ++1 1 ++1 1 ++2 17 ++1 17 ++1 3 ++1 3 ++1 3 ++1 3 ++1 1 ++1 1 ++1 1 ++2 14 ++1 14 ++1 10 ++1 10 ++1 10 ++1 10 ++1 10 ++1 10 ++1 10 ++2 6 ++1 6 ++1 6 ++1 6 ++1 6 ++1 6 ++1 6 ++1 4 ++1 4 ++1 4 ++1 4 ++1 4 ++7 4 ++2 7 ++4 15 ++1 15 ++1 11 ++1 11 ++1 11 ++1 11 ++1 11 ++1 11 ++1 11 ++1 11 ++1 11 ++1 11 ++1 11 ++4 6 ++1 6 + +fl=(156) +fn=(3942) +41 24 ++7 8 +-7 48 ++7 16 ++10 48 ++14 72 +-6 16 ++2 40 +cfi=(102) +cfn=(3150) +calls=8 452 +* 456 ++1 8 ++2 8 + +fl=(96) +fn=(1356) +34 18 ++2 9 + +fl=(134) +fn=(3170) +29 1 ++3 1 +-3 2 ++3 14 ++1 3 +fi=(116) +984 2 ++1 11 +fe=(134) +36 3 +-3 3 +cfi=(102) +cfn=(3172) +calls=1 246 +* 139 +* 2 + +fl=(139) /build/buildd/eglibc-2.11.1/libio/strops.c +fn=(3308) _IO_str_init_static_internal +40 30 ++4 5 +-4 10 ++4 5 ++6 25 +cfi=(102) +cfn=(1974) +calls=5 404 +* 85 ++5 5 +-3 5 ++1 5 ++1 5 ++1 5 ++2 5 ++1 5 ++1 5 ++9 5 ++1 30 +-23 25 + +fl=(101) +fn=(1682) __fopen_maybe_mmap +45 12 +-2 12 ++2 12 ++15 12 + +fn=(1658) __fopen_internal +68 84 ++8 12 +-8 12 ++8 12 +cfi=(71) +cfn=(886) +calls=12 3615 +* 3022 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 -46 +* 1095 ++2 12 +-2 12 ++2 12 ++3 12 ++3 60 +-3 12 ++3 12 +cfi=(102) +cfn=(1664) +calls=12 648 +* 684 ++4 12 ++1 12 +-1 12 ++1 12 +cfi=(103) +cfn=(1668) +calls=12 +59 +* 1080 ++4 60 +cfi=(103) +cfn=(1672) +calls=12 258 +* 1391 + +ob=(8) +fl=(57) +fn=(2996) cblas_dgemv +0 256444 + +fn=(402) 0x00000000000024d0 +0 6 + +fn=(414) 0x0000000000036cb0 +0 11 + +fn=(2944) cblas_dnrm2 +0 13176 + +fn=(2962) cblas_dtrmv +0 37210 + +fn=(2918) cblas_dgemm +0 15677 + +ob=(4) +fl=(101) +fn=(1658) +93 24 ++2 12 ++5 60 +-5 12 +cfn=(1682) +calls=12 -50 +* 48 + +fn=(1656) +107 24 +cfn=(1658) +calls=12 -39 +* 7788 + +fl=(133) +fn=(3146) +37 1 +-1 1 ++1 1 ++1 6 ++4 1 + +fl=(40) /build/buildd/eglibc-2.11.1/csu/../sysdeps/unix/sysv/linux/x86_64/../init-first.c +fn=(196) _init +52 6 ++6 1 +-6 2 ++6 2 ++17 1 +-2 1 ++1 1 +fi=(42) /build/buildd/eglibc-2.11.1/csu/../sysdeps/unix/sysv/linux/x86_64/init-first.c +-41 2 +fe=(40) ++42 1 +fi=(42) +-42 2 +fi=(41) /build/buildd/eglibc-2.11.1/csu/../sysdeps/generic/dl-hash.h ++2 3 +fe=(40) ++32 1 +-9 1 ++9 4 +fi=(41) +-29 1 +-1 2 ++1 3 ++3 1 +-1 3 ++1 3 +fi=(42) +-8 2 ++2 2 +-2 1 ++2 1 +cfi=(43) /build/buildd/eglibc-2.11.1/elf/../sysdeps/unix/sysv/linux/dl-vdso.c +cfn=(202) _dl_vdso_vsym +calls=1 -8 +* 8 ++8 1 +-5 2 ++5 1 +-5 1 ++2 2 ++1 1 ++2 1 +cfi=(43) +cfn=(202) +calls=1 -16 +* 8 +fe=(40) ++46 3 +fi=(42) +-45 2 ++1 1 +fe=(40) ++44 1 +cfi=(44) +cfn=(204) +calls=1 -58 +* 67 ++8 1 +cfi=(46) +cfn=(208) +calls=1 -78 +* 6280 ++2 6 +fi=(41) +-55 1 +-1 3 ++1 3 ++2 4 ++1 5 ++3 4 +-3 1 ++4 2 ++13 1 ++1 2 +-18 2 ++3 12 +-3 3 ++4 6 ++13 3 ++1 6 +-18 8 +fe=(40) + +fl=(138) +fn=(3306) +101 40 ++9 5 +-9 5 ++9 15 ++6 25 +-11 5 ++11 5 +cfi=(102) +cfn=(1664) +calls=5 648 +* 205 ++1 5 ++2 20 ++3 5 +-5 5 ++1 5 ++1 5 +cfi=(139) +cfn=(3308) +calls=5 -79 +* 260 ++1 20 +cfi=(140) +cfn=(3310) +calls=5 +90 +* 7373 ++2 10 ++1 10 ++2 35 + +fl=(47) +fn=(210) +487 4 ++13 3 +673 5 +501 1 +cfi=(48) +cfn=(212) +calls=1 49 +* 44 +* 1 ++6 2 ++2 3 +cfn=(214) handle_intel +calls=1 256 +* 2197 ++4 2 +-4 1 ++4 1 +cfn=(214) +calls=1 256 +* 2211 ++2 1 +-2 1 ++2 2 ++12 1 ++17 1 +-18 1 ++1 1 ++10 3 ++7 1 +-7 1 ++7 2 ++7 6 ++6 2 +-6 8 ++6 4 ++3 15 ++2 1 ++6 6 ++7 1 +-7 1 ++11 2 ++27 2 ++56 2 ++2 1 ++1 1 +-1 2 ++4 2 ++2 1 ++1 1 +-1 3 +-63 7 +-88 3 +cfn=(214) +calls=1 256 +* 1694 +* 3 + +fn=(216) intel_check_word +163 132 ++1 24 ++8 12 +-2 72 ++16 66 ++9 2 +-1 1 ++28 5 +-1 1 ++1 1 +cfi=(49) +cfn=(218) +calls=1 27 +* 153 +* 145 +-1 29 ++1 29 +cfi=(49) +cfn=(218) +calls=29 27 +* 4845 ++2 60 ++2 28 ++14 10 ++6 28 +-74 56 ++2 30 ++2 60 +-4 10 ++79 80 +-10 4 +-13 2 ++2 4 ++2 2 ++19 16 + +fn=(220) +152 784 ++3 378 ++1 196 + +fn=(214) +256 24 ++1 12 ++7 3 ++1 9 ++8 6 ++5 3 +-5 6 ++5 3 ++7 15 +cfn=(216) +calls=3 163 +* 2415 ++1 6 ++3 15 +cfn=(216) +calls=3 163 +* 1791 ++1 6 ++3 15 +cfn=(216) +calls=3 163 +* 69 ++1 6 ++3 15 +cfn=(216) +calls=3 163 +* 1632 ++1 6 +-31 2 ++13 3 ++1 3 +-1 6 ++22 7 ++5 24 + +fl=(77) +fn=(906) +48 487 ++1 487 +cfi=(78) +cfn=(908) +calls=487 -14 +* 23430 ++1 1461 ++3 974 + +fl=(98) /build/buildd/eglibc-2.11.1/string/../sysdeps/x86_64/multiarch/../strcmp.S +fn=(3460) __strcmp_ssse3 +90 4 ++1 4 ++2 4 ++1 4 ++1 4 ++1 4 ++1 4 ++1 4 ++1 4 ++1 4 ++1 4 ++1 4 ++1 4 ++1 4 ++1 4 ++1 4 ++1 4 ++1 4 ++1 4 ++5 4 ++1 4 ++9 4 ++1 4 ++1 4 ++1 4 ++1 4 ++1 4 ++1 4 ++1 4 ++1 4 ++5 4 ++1 4 ++1 4 ++1 4 ++1 4 ++1 4 +1073 4 ++1 4 ++1 4 ++1 4 ++1 4 ++1 4 ++1 4 ++1 4 ++1 4 ++1 4 ++1 4 ++1 4 ++1 4 ++4 4 ++1 4 ++1 4 ++6 4 ++1 4 ++1 8 ++4 4 ++1 4 ++3 4 ++1 4 ++1 4 ++7 4 ++3 4 ++1 4 ++1 4 ++1 4 ++1 4 ++1 4 ++7 4 ++1 4 ++2 4 ++1 4 ++2 4 ++1 4 ++1 4 ++7 4 ++3 4 ++1 4 ++1 4 ++1 4 ++1 4 ++1 4 +2052 4 ++2 4 ++1 4 ++1 4 ++1 4 ++6 4 ++6 4 ++1 4 ++2 4 ++1 4 + +fn=(1364) __GI_strncmp +84 1 ++1 1 ++1 1 ++1 1 ++1 1 ++2 1 ++1 1 ++2 1 ++1 1 ++1 1 ++1 1 ++1 1 ++1 1 ++1 1 ++1 1 ++1 1 ++1 1 ++1 1 ++1 1 ++1 1 ++1 1 ++1 1 ++1 1 ++1 1 +2063 1 ++3 1 ++1 1 ++9 1 ++1 1 + +fl=(69) +fn=(642) +26 688543263 ++1 688543263 ++1 688543263 ++1 688543263 ++1 688543263 ++1 688543263 ++1 688543263 ++1 688543263 ++1 688543263 ++1 688543263 ++1 688543263 ++1 688543263 ++2 688541310 ++1 688541310 ++1 688541310 ++1 688541310 ++1 688541310 ++1 688541310 ++2 688543263 ++1 688543263 ++1 688543263 ++1 688543263 + +fl=(111) +fn=(1882) +26 393 ++1 393 ++1 393 ++1 393 ++1 393 ++2 393 ++1 393 ++1 393 ++1 393 ++1 393 ++1 393 ++1 393 ++1 393 +-7 1 ++1 1 ++1 1 ++1 1 ++1 1 ++1 1 ++1 1 ++1 1 ++1 393 ++1 393 + +fl=(97) /build/buildd/eglibc-2.11.1/stdlib/getenv.c +fn=(1362) getenv +36 8 ++1 1 +cfi=(69) +cfn=(642) +calls=1 -11 +* 16 +* 1 ++4 4 ++56 8 +-56 2 ++3 2 ++37 1 +-8 1 ++6 1 +-1 1 ++3 3 ++3 20 ++6 4 +cfi=(98) +cfn=(1364) +calls=1 -6 +* 29 +* 2 ++1 2 +-10 36 ++11 2 + +fl=(43) +fn=(202) +27 2 ++1 4 ++4 4 ++14 2 ++4 4 + +fl=(82) +fn=(986) +44 125 ++1 125 ++1 125 ++4 125 ++1 125 ++1 125 ++1 125 ++2 125 ++1 125 ++2 106 ++5 106 ++1 106 ++1 106 ++1 106 ++1 106 +315 1 ++1 1 ++1 1 ++1 1 +-2 67 ++1 67 ++1 67 ++20 2 ++1 2 ++1 2 +-1 8 ++1 8 ++23 2 ++1 2 ++1 2 ++1 2 ++23 5 ++1 5 ++1 5 ++1 5 +-2 2 ++1 2 ++1 2 ++24 4 ++1 4 ++24 5 ++1 5 ++1 5 ++22 1 ++1 1 ++1 1 ++1 1 ++1 1 +-3 2 ++1 2 ++1 2 ++1 2 +-2 3 ++1 3 ++1 3 ++22 2 ++1 2 ++1 2 ++1 2 ++1 2 ++1 2 +-4 1 ++1 1 ++1 1 ++1 1 ++1 1 +-3 1 ++1 1 ++1 1 ++1 1 ++8 19 ++1 19 ++1 19 ++1 19 ++1 19 ++1 19 ++1 19 ++5 19 ++1 19 ++1 19 ++1 19 ++1 19 ++80 19 ++1 19 +746 19 ++1 19 ++2 19 ++1 19 +891 19 ++1 19 ++1 19 +1008 19 ++1 19 ++1 38 ++4 19 ++1 19 ++1 19 ++1 19 ++1 19 ++1 19 ++1 19 ++1 19 ++1 19 ++1 19 ++2 19 ++1 19 +-12 133 ++1 133 ++1 133 ++1 133 ++1 133 ++1 133 ++1 133 ++1 133 ++1 133 ++1 133 ++2 133 ++1 133 ++1 19 ++5 19 ++1 19 ++1 19 ++1 19 ++1 19 + +fl=(143) /build/buildd/eglibc-2.11.1/math/../sysdeps/ieee754/dbl-64/s_isnan.c +fn=(3316) isnan +33 15 ++2 5 +-2 5 ++2 45 ++3 5 + +fl=(142) +fn=(3326) hack_digit.15661 +236 120 ++3 110 ++2 81 ++7 18 ++4 42 +cfi=(149) +cfn=(3336) +calls=6 57 +* 251 ++1 24 ++4 6 +-1 6 +-3 6 ++1 6 ++3 45 ++1 5 +-1 10 ++6 5 ++1 5 ++10 10 +-10 5 ++10 10 +-6 3 +cfi=(111) +cfn=(1882) +calls=1 26 +* 15 ++1 2 ++1 6 ++4 2 +-4 1 ++4 2 +-31 42 ++1 21 +-1 21 ++1 21 +-1 42 ++1 21 +cfi=(111) +cfn=(1882) +calls=21 26 +* 315 +* 21 ++30 21 +-30 21 ++30 21 +-30 21 ++30 42 +-35 60 ++35 12 + +fn=(3314) +163 50 ++33 5 ++2 5 ++22 20 ++59 5 +-59 10 ++59 5 ++2 30 ++1 5 ++23 15 ++96 5 ++3 5 +-3 5 ++3 15 +cfi=(143) +cfn=(3316) +calls=5 33 +* 75 +* 20 +-66 15 ++16 10 ++65 20 +cfi=(144) +cfn=(3318) +calls=5 23 +* 80 +* 20 +1265 45 +435 50 +cfi=(145) +cfn=(3320) +calls=5 36 +* 115 +* 5 ++4 10 ++36 5 ++12 5 +-12 45 ++4 20 ++1 10 ++1 10 +-2 5 ++1 5 +-1 5 ++2 5 ++7 5 +-8 5 ++1 5 ++7 5 ++9 6 ++15 8 +-18 4 ++59 8 +-59 4 ++59 8 +-6 2 +-1 2 ++1 12 +cfi=(81) +cfn=(966) +calls=2 56 +* 46 +* 2 ++15 6 ++11 52 +-2 48 +-54 24 ++4 96 +-4 2 ++4 8 ++2 4 +-18 34 +cfi=(112) +cfn=(1886) +calls=2 26 +* 30 ++3 18 ++1 2 +-1 2 ++1 2 ++1 10 ++52 10 +cfi=(148) +cfn=(3334) +calls=2 43 +* 35 +* 8 ++3 10 +cfi=(81) +cfn=(966) +calls=2 56 +* 46 ++1 4 ++2 2 +-2 2 ++1 4 +-1 2 ++1 4 ++1 8 ++91 6 +828 8 +cfi=(112) +cfn=(1886) +calls=2 26 +* 30 ++1 6 ++1 2 +-1 2 +fi=(147) /build/buildd/eglibc-2.11.1/stdio-common/../include/ctype.h +47 2 +fe=(142) +834 2 +fi=(147) +47 2 +fe=(142) +834 2 +fi=(147) +47 7 +fe=(142) +834 3 +fi=(147) +47 3 +fe=(142) +834 3 +fi=(147) +47 6 +fe=(142) +844 15 ++2 5 +-2 5 ++2 5 ++10 10 ++20 35 ++1 17 ++23 30 ++4 20 ++12 30 ++7 10 +fi=(159) /build/buildd/eglibc-2.11.1/stdio-common/../nptl/sysdeps/pthread/allocalim.h +28 10 +fe=(142) +933 35 ++1 5 ++3 5 +-3 5 ++3 12 ++3 4 +-3 4 ++3 52 ++2 4 ++1 8 +cfn=(3326) +calls=4 236 +* 274 +-1 2 ++1 4 +cfn=(3326) +calls=2 236 +* 181 +* 12 +-3 48 ++6 32 + +ob=(8) +fl=(57) +fn=(2918) +0 1253916 + +ob=(4) +fl=(142) +fn=(3314) +946 8 ++3 6 ++8 15 ++22 5 +-15 5 ++15 35 +cfn=(3326) +calls=5 236 +* 298 ++1 40 +1102 48 +-8 15 ++11 15 +-3 40 ++7 38 ++3 4 +-3 1 ++3 6 ++6 15 ++46 15 ++2 35 ++2 5 +-2 5 ++2 20 ++3 10 ++7 25 ++9 15 ++47 15 ++17 25 ++3 15 ++7 15 +-92 10 +-5 15 +574 2 ++6 12 +-6 2 ++6 2 ++4 32 ++4 2 ++2 6 +1173 15 ++78 169 +-58 15 ++4 15 +cfi=(69) +cfn=(642) +calls=5 26 +* 80 +* 5 ++2 25 ++6 25 ++1 15 ++11 30 ++1 5 ++6 10 +-6 5 ++6 40 ++3 22 ++3 22 +-6 36 ++1 36 ++1 3 +cfi=(81) +cfn=(3328) +calls=1 56 +* 18 +* 2 ++25 25 +464 20 +877 12 ++14 5 +-1 5 ++1 27 ++7 4 +-6 8 ++6 4 +-6 4 ++6 9 +-6 2 ++6 1 +-6 1 ++6 2 ++50 6 ++9 62 ++15 16 +-6 16 ++2 16 +-5 32 ++3 3 ++2 3 +-5 58 ++4 38 +cfn=(3326) +calls=19 236 +* 745 ++1 19 +-1 19 ++1 19 ++2 36 ++2 6 +-8 58 +1175 10 +604 4 ++2 2 ++1 8 ++3 6 ++9 4 ++32 4 +-1 2 ++1 6 +-1 2 ++1 6 +cfi=(146) /build/buildd/eglibc-2.11.1/stdlib/../sysdeps/x86_64/rshift.S +cfn=(3322) __mpn_rshift +calls=2 25 +* 50 ++3 18 +957 1 +-2 1 ++2 1 +-1 1 ++1 4 +668 1 +-4 1 ++4 4 +cfi=(112) +cfn=(1886) +calls=1 26 +* 15 ++1 2 ++4 1 ++20 1 +-24 1 ++24 3 +-24 1 ++4 1 ++48 1 +-49 1 ++21 1 +-20 2 ++48 1 +-28 1 +-20 1 ++20 1 +-15 1 ++2 2 +-2 10 ++2 20 ++7 5 ++9 1 ++4 1 +-4 3 ++2 3 ++3 1 +-1 1 ++1 2 +-1 1 ++1 1 +-1 1 ++1 3 ++8 4 ++22 4 ++8 1 ++1 4 ++4 1 +-5 1 ++5 1 ++4 6 ++1 2 ++7 1 ++3 6 ++12 5 +cfi=(146) +cfn=(3322) +calls=1 25 +* 25 ++2 3 ++19 44 +-2 20 +-97 7 +cfi=(110) +cfn=(1880) +calls=1 58 +* 58 +* 1 +-64 8 ++18 22 +cfi=(146) +cfn=(3322) +calls=2 25 +* 50 +* 2 ++67 4 +816 3 + +fl=(146) +fn=(3322) +25 5 ++1 5 ++1 5 ++1 5 ++1 5 ++1 5 ++1 5 ++1 5 ++1 5 ++1 5 ++1 5 ++1 5 ++1 10 ++3 5 ++1 5 ++1 5 ++1 5 ++1 5 ++1 5 ++1 5 ++12 5 ++1 5 ++1 5 ++1 5 + +fl=(66) +fn=(626) +39 384 ++1 128 + +ob=(8) +fl=(57) +fn=(2970) cblas_dscal +0 6466 + +ob=(13) +fl=(92) +fn=(1328) +165 2 ++1 2 ++1 2 + +fn=(2804) +155 2 ++1 2 ++1 2 + +ob=(4) +fl=(107) +fn=(1758) +37 90 ++7 15 + +fl=(86) +fn=(1228) +34 1 ++2 1 +cfi=(87) +cfn=(1230) +calls=1 -10 +* 27 + +fl=(113) +fn=(1890) +40 254 +-6 1016 ++6 508 ++1 1524 ++7 254 + +ob=(1) +fl=(20) /build/buildd/eglibc-2.11.1/io/../sysdeps/unix/syscall-template.S +fn=(92) read +82 36 ++1 9 + +fn=(90) open +82 248 ++1 62 ++1 312 + +fn=(104) close +82 40 ++1 10 + +fn=(56) access +82 36 ++1 9 ++1 54 + +fl=(18) /build/buildd/eglibc-2.11.1/posix/../sysdeps/unix/syscall-template.S +fn=(50) uname +82 4 ++1 1 + +fl=(17) /build/buildd/eglibc-2.11.1/elf/../sysdeps/unix/sysv/linux/dl-sysdep.c +fn=(48) _dl_discover_osversion +67 4 ++2 3 ++85 5 +-45 3 +cfi=(18) +cfn=(50) +calls=1 -27 +* 5 +* 3 ++12 2 ++10 12 ++4 3 +-2 9 ++2 10 ++3 4 +-3 4 ++7 3 +-1 3 ++2 3 ++2 14 ++5 2 + +fl=(54) +fn=(356) +30 388 ++2 388 ++1 388 ++1 388 ++1 388 ++1 388 ++1 388 ++1 388 ++1 388 ++1 388 ++1 388 +cfi=(55) /build/buildd/eglibc-2.11.1/elf/../elf/dl-runtime.c +cfn=(358) _dl_fixup +calls=388 +32 +* 536758 ++1 388 ++1 388 ++1 388 ++1 388 ++1 388 ++1 388 ++1 388 ++1 388 ++1 388 ++2 388 + +fl=(33) /build/buildd/eglibc-2.11.1/string/memmove.c +fn=(124) memmove +47 1 ++5 2 +-5 5 ++1 1 +-1 1 ++5 2 ++5 3 ++22 51 ++30 7 + +fl=(26) /build/buildd/eglibc-2.11.1/elf/dl-misc.c +fn=(116) _dl_sysdep_read_whole_file +44 2 ++3 1 +-3 4 ++3 1 +-3 1 ++3 1 +cfi=(20) +cfn=(90) +calls=1 +35 +* 5 ++1 1 +-1 1 ++1 2 ++2 4 +cfi=(27) /build/buildd/eglibc-2.11.1/io/../sysdeps/unix/sysv/linux/wordsize-64/fxstat.c +cfn=(96) _fxstat +calls=1 -13 +* 10 +* 2 ++2 1 ++3 1 +-3 1 ++3 1 ++13 2 +cfi=(20) +cfn=(104) +calls=1 +14 +* 5 ++3 7 +-14 7 +cfi=(21) /build/buildd/eglibc-2.11.1/misc/../sysdeps/unix/syscall-template.S +cfn=(60) mmap +calls=1 +25 +* 6 +* 2 + +fn=(84) _dl_name_match_p +301 10275 ++1 4110 +cfi=(16) /build/buildd/eglibc-2.11.1/string/../sysdeps/x86_64/multiarch/../strcmp.S +cfn=(44) strcmp +calls=2055 63 +* 14392 +* 4110 ++3 2055 ++2 4110 ++4 2046 +-4 6138 ++1 6249 +cfi=(16) +cfn=(44) +calls=2083 63 +* 47282 +* 4166 ++6 37 +-7 37 ++7 2129 +-7 2018 ++7 6054 + +fl=(28) /build/buildd/eglibc-2.11.1/string/../string/memset.c +fn=(100) memset +32 11 +-2 22 ++2 11 ++5 22 ++1 33 ++1 33 ++3 33 ++4 22 ++8 22 ++1 43 ++2 7 ++1 7 ++1 7 ++1 7 ++1 7 ++1 7 ++1 7 ++1 14 +-9 14 ++2 70 ++1 70 ++1 70 ++1 70 ++1 70 ++1 70 ++1 70 ++1 140 +-9 140 +-30 14 ++43 7 ++3 14 ++1 14 +-4 4 ++3 8 ++1 41 ++2 22 +-2 22 ++2 54 +-2 54 +-47 11 ++53 11 ++4 22 ++8 11 + +fl=(29) /build/buildd/eglibc-2.11.1/elf/dl-deps.c +fn=(106) _dl_map_object_deps +149 1 ++1 1 +-1 2 ++1 1 +-1 2 ++1 1 +-1 1 ++1 2 +-1 4 ++1 1 +-1 1 ++1 2 ++16 1 +-16 1 ++14 1 ++1 1 ++1 1 ++6 3 ++10 1 +-10 1 ++10 1 +-36 5 ++20 1 +-2 1 ++19 1 +-17 1 ++6 1 +-6 1 +-2 1 ++2 1 +-2 1 ++1 1 ++1 1 ++6 3 ++10 1 +-10 1 ++10 5 ++19 1 +-15 1 +338 2 +203 1 ++1 1 +-18 2 +338 1 +201 1 +338 1 +204 1 +338 5 +208 2 ++5 1 ++4 2 +-9 20 ++5 10 ++4 20 ++2 2 ++3 22 ++2 9 ++11 9 +-4 9 +-7 9 ++6 9 ++1 9 +-7 9 ++5 9 ++3 18 ++3 63 ++50 50 ++1 51 +-51 860 ++1 430 ++6 125 +cfi=(22) /build/buildd/eglibc-2.11.1/string/../sysdeps/x86_64/multiarch/../strchr.S +cfn=(62) index +calls=25 26 +* 787 +* 75 ++5 125 +-3 25 ++3 25 +cfi=(24) /build/buildd/eglibc-2.11.1/elf/dl-error.c +cfn=(74) _dl_catch_error +calls=25 -87 +* 58514 ++2 75 ++15 25 ++2 50 ++5 9 ++6 9 ++2 9 +-8 18 ++5 9 +-2 9 ++1 9 ++2 9 ++4 54 +-59 8 ++13 4 +466 22 ++2 27 ++2 27 +cfi=(14) /build/buildd/eglibc-2.11.1/elf/dl-minimal.c +cfn=(36) malloc +calls=9 96 +* 252 ++2 9 +-2 9 ++2 9 ++4 36 +-1 9 ++2 9 +-1 18 +cfi=(15) /build/buildd/eglibc-2.11.1/string/../sysdeps/x86_64/memcpy.S +cfn=(42) memcpy +calls=9 56 +* 253 ++1 36 +cfi=(15) +cfn=(42) +calls=9 56 +* 253 ++3 9 ++4 66 ++2 11 ++1 72 +217 42 ++1 10 +-1 20 ++2 63 +487 4 ++4 2 ++4 5 ++11 4 +cfi=(14) +cfn=(36) +calls=1 96 +* 28 ++2 1 +-2 1 ++2 1 ++5 2 ++1 1 +-1 1 ++1 1 +-1 1 ++1 1 +-1 1 ++1 4 ++8 5 ++4 2 +-10 3 ++6 50 ++4 20 +-10 30 ++13 2 ++46 5 ++2 4 ++35 3 ++7 1 ++6 2 +-6 1 ++6 2 +-6 9 ++6 18 +-6 9 ++6 212 ++5 38 ++4 27 ++1 18 +-1 111 ++1 83 ++3 299 +-1 544 +-7 138 +-13 40 ++40 2 ++10 1 +-8 1 ++8 1 ++3 2 ++3 8 +-30 13 ++6 1 +-6 1 +cfi=(33) +cfn=(124) +calls=1 47 +* 73 ++2 1 ++6 5 +-6 1 ++6 1 +491 2 ++1 3 +288 760 +612 8 +cfi=(15) +cfn=(42) +calls=1 56 +* 64 ++5 4 + +fn=(108) openaux +62 50 ++4 25 +-4 25 ++7 25 +-4 50 ++1 25 +-1 50 ++1 100 +-1 75 +cfi=(19) /build/buildd/eglibc-2.11.1/elf/dl-load.c +cfn=(82) _dl_map_object +calls=25 1958 +* 56564 +* 25 ++5 75 + +fl=(36) /build/buildd/eglibc-2.11.1/elf/dl-reloc.c +fn=(146) _dl_relocate_object +158 66 ++10 22 +-10 33 ++14 11 +-14 22 ++14 11 ++1 55 ++6 22 ++6 33 ++4 22 ++8 33 ++45 11 +fi=(5) /build/buildd/eglibc-2.11.1/elf/../sysdeps/x86_64/dl-machine.h +96 22 +fe=(36) +242 22 +fi=(5) +96 11 ++39 3 +fe=(36) +268 320 +156 20 +fi=(5) +295 10 +fe=(36) +-27 10 +fi=(5) ++27 10 +fi=(4) /build/buildd/eglibc-2.11.1/elf/do-rel.h +65 10 +-8 10 ++1 10 ++1 10 ++6 10 +fe=(36) +268 2 +156 2 +fi=(5) +295 1 +fe=(36) +-27 1 +fi=(5) ++27 1 +fi=(4) +65 1 +-8 1 ++1 1 ++1 1 ++6 12 +-8 11 ++1 11 ++1 11 ++6 11 ++3 32 +fi=(5) +476 10 +-1 20 ++4 20 +-3 1501 +-1 3002 ++4 3002 ++2 4533 ++1 1511 +fi=(4) +68 4533 +fe=(36) +268 165 ++3 33 ++40 11 ++3 22 ++13 22 ++1 22 +cfn=(160) _dl_protect_relro +calls=11 +8 +* 275 +* 11 ++1 88 +fi=(5) +135 20 +-39 20 ++6 20 ++4 30 ++13 10 +-8 10 ++8 20 ++13 10 ++3 10 +-3 10 ++3 30 +fe=(36) ++51 33 ++82 9 +fi=(4) +75 11 ++2 11 +-2 22 ++1 11 ++1 102 ++14 10 +-12 10 ++12 21 +-12 1 ++12 2 ++10 22 ++10 33 ++4 10 ++2 10 +-2 10 ++2 10 +fi=(5) +296 30 +fi=(4) +119 20 ++1 10 ++2 20 +-2 10 +-1 10 +fi=(5) +267 10 +fi=(4) +119 10 +fi=(5) +270 10 +fi=(4) +119 10 ++1 30 +fi=(5) +270 10 +fi=(4) +119 5974 ++1 2987 ++2 5974 +-2 2987 +-1 2987 +fi=(5) +267 2987 +fi=(4) +119 2987 +fi=(5) +270 2987 +fi=(4) +119 2987 ++1 8961 +fi=(5) +270 2987 ++18 5994 ++7 55349 +fi=(4) +120 3688 +fi=(5) +295 5532 +fi=(4) +120 1844 +fi=(5) +295 7397 +fi=(4) +120 14 +fi=(5) +295 21 +fi=(4) +120 7 +fi=(5) +295 22240 +cfi=(6) /build/buildd/eglibc-2.11.1/elf/dl-lookup.c +cfn=(152) _dl_lookup_symbol_x +calls=1851 698 +* 1814887 +* 7404 ++1 8991 ++4 2977 +-4 5954 ++4 8931 ++9 17982 ++85 2983 +fi=(4) +117 5966 +fi=(5) +394 2983 +fi=(4) +117 2993 +fi=(5) +377 30 ++4 30 ++5 20 +fi=(4) +117 10 +fi=(5) +386 20 +fi=(4) +117 20 +fi=(5) +335 3 ++1 2 +fi=(4) +117 1 +fi=(5) +336 1 +fi=(4) +117 2 +fi=(5) +327 6 ++1 3 +fi=(4) +117 3 +fi=(5) +328 3 +fi=(4) +117 6 +fi=(5) +295 14 +fi=(4) +104 30 +fi=(5) +466 9 +fi=(4) +105 9 +fi=(5) +466 18 ++1 18 +fi=(4) +104 9 +fi=(5) +465 9 +fi=(4) +104 9 +fi=(5) +467 9 +fi=(4) +104 9 +fi=(5) +467 5236 +fi=(4) +104 2618 +fi=(5) +465 2618 +fi=(4) +104 2618 +fi=(5) +467 2618 +fi=(4) +104 2618 +fi=(5) +466 2618 +fi=(4) +105 2618 +fi=(5) +466 2618 +fi=(4) +127 5 ++1 2 ++1 2 +-1 1 +fi=(5) +267 1 +fi=(4) +128 1 +fi=(5) +270 1 +fi=(4) +128 3 +fi=(5) +270 1 +fi=(4) +128 4 ++1 4 +-1 2 +fi=(5) +267 2 +fi=(4) +128 2 +fi=(5) +270 2 +fi=(4) +128 6 +fi=(5) +270 2 ++18 6 ++7 117 +cfi=(6) +cfn=(152) +calls=3 698 +* 2668 +* 12 ++1 9 ++4 1 +-4 2 ++4 3 ++9 18 ++85 9 +fi=(4) +127 10 +fi=(5) +295 28349 +fe=(36) + +fn=(160) +336 11 +-2 22 ++1 22 ++1 33 ++2 22 ++2 22 ++1 33 +cfi=(21) +cfn=(98) mprotect +calls=11 82 +* 55 +-1 22 ++7 33 + +fl=(32) /build/buildd/eglibc-2.11.1/elf/dl-tls.c +fn=(162) _dl_add_to_slotinfo +820 2 ++9 2 +-9 6 ++6 4 ++8 6 ++42 2 +-1 6 ++1 4 ++1 8 + +fn=(122) _dl_next_tls_modid +54 2 ++3 6 ++48 4 ++4 4 + +fn=(138) _dl_determine_tlsoffset +116 7 ++6 3 ++3 2 ++36 3 ++2 9 +-38 1 ++38 2 ++3 4 ++4 4 +-4 6 ++2 4 ++2 6 ++12 4 ++4 10 ++2 8 ++10 2 +-37 4 ++37 2 +-37 5 ++41 1 +-1 1 ++52 1 +-51 4 ++52 8 + +fn=(140) _dl_allocate_tls_storage +332 1 ++13 1 +-13 2 ++2 1 ++11 2 +cfi=(14) +cfn=(40) __libc_memalign +calls=1 53 +* 50 ++1 1 +-1 1 ++1 1 ++7 1 ++4 305 +-58 1 ++1 1 +-1 1 ++1 2 +cfi=(14) +cfn=(32) calloc +calls=1 111 +* 37 ++1 2 ++3 1 ++6 2 ++64 5 + +fn=(164) _dl_allocate_tls_init +380 7 ++1 1 +-1 1 ++1 1 ++12 1 +-8 1 ++8 5 ++5 7 ++6 11 ++22 4 ++1 6 ++2 4 ++1 6 ++8 6 ++1 6 ++1 10 +cfi=(15) +cfn=(58) mempcpy +calls=2 56 +* 37 +* 8 +cfi=(28) +cfn=(100) +calls=2 32 +* 112 +* 6 +-42 6 ++6 9 ++3 1 ++1 2 +-1 1 ++1 2 ++6 2 ++2 2 +-2 4 ++2 4 ++38 1 ++3 9 + +fl=(19) +fn=(82) +1958 364 ++7 52 ++1 52 ++3 156 ++12 372 +-12 558 ++5 609 ++1 406 ++2 609 +cfi=(26) +cfn=(84) +calls=203 301 +* 12464 +* 406 +2240 234 +2001 9 +-1 18 ++10 9 +-1 18 ++26 18 +-2 9 ++2 9 +cfi=(22) +cfn=(62) +calls=9 26 +* 282 +* 18 +2172 2 ++1 3 +cfn=(86) expand_dynamic_string_token +calls=1 314 +* 231 ++2 1 +-3 1 ++3 1 ++4 9 +cfn=(88) open_verify +calls=1 1565 +* 202 ++3 1 +-3 1 ++3 1 ++11 27 ++3 18 ++41 9 ++1 63 +-1 9 ++1 27 +cfn=(94) _dl_map_object_from_fd +calls=9 839 +* 13988 +* 18 +2000 18 ++39 16 +cfi=(9) /build/buildd/eglibc-2.11.1/string/../sysdeps/x86_64/multiarch/../rtld-strlen.S +cfn=(18) strlen +calls=8 29 +* 432 +* 8 ++2 8 +-2 8 ++2 8 ++7 32 ++33 24 ++1 112 +cfn=(110) open_path +calls=8 1809 +* 9409 ++6 8 +-6 8 ++6 8 ++7 2 ++71 16 +-78 14 +599 21 +2095 21 ++6 14 +cfi=(31) /build/buildd/eglibc-2.11.1/elf/dl-cache.c +cfn=(114) _dl_load_cache_lookup +calls=7 182 +* 9571 ++2 7 +-2 7 ++2 7 ++4 21 ++12 14 ++22 70 +cfn=(88) +calls=7 1565 +* 1484 ++3 21 ++2 21 +cfn=(120) local_strdup +calls=7 160 +* 983 ++1 7 +-1 7 ++1 14 +-90 8 +-5 16 ++5 8 ++3 16 +-3 8 ++3 16 +-3 8 ++3 56 +-3 24 +599 24 +2058 24 ++13 40 ++1 40 +599 24 +1982 186 +-1 372 ++4 117 ++2 117 +-2 234 ++2 351 +cfi=(16) +cfn=(44) +calls=117 63 +* 2996 +* 351 + +fn=(52) _dl_init_paths +622 1 ++15 2 +-15 8 ++15 3 +cfi=(7) /build/buildd/eglibc-2.11.1/elf/../elf/dl-sysdep.c +cfn=(54) _dl_important_hwcaps +calls=1 353 +* 355 ++4 1 +-4 1 ++4 1 +cfi=(14) +cfn=(36) +calls=1 96 +* 28 ++2 1 +-2 2 ++2 1 ++7 7 ++4 2 +cfi=(14) +cfn=(36) +calls=1 96 +* 53 +* 1 ++3 3 ++7 1 ++22 1 +-3 1 ++1 2 ++2 1 +-23 1 ++23 4 +-22 1 ++18 1 ++4 2 +-12 1 +-2 1 ++3 1 ++2 1 +-3 1 ++4 2 ++4 1 +-3 1 ++3 1 +-8 3 +-2 3 ++3 3 ++2 3 +-3 3 ++4 6 ++4 3 +-3 3 ++3 3 ++1 8 +-1 52 ++2 4 +-1 12 ++1 4 +-1 48 ++1 8 +-1 4 ++1 4 +-1 16 ++1 4 +-1 12 ++3 4 +-14 4 ++14 24 ++7 1 ++4 1 +-5 1 ++6 2 ++2 4 ++2 3 ++32 5 ++8 3 +cfi=(22) +cfn=(62) +calls=1 26 +* 52 +* 2 ++2 2 +cfi=(9) +cfn=(18) +calls=1 29 +* 86 +* 8 +cfi=(15) +cfn=(42) +calls=1 56 +* 62 +* 1 ++17 7 ++2 1 ++1 2 ++1 1 +-4 3 ++2 44 ++1 88 ++1 44 +-4 133 ++7 1 +cfi=(14) +cfn=(36) +calls=1 96 +* 28 ++2 1 +-2 1 ++2 1 ++6 7 +cfn=(64) fillin_rpath +calls=1 384 +* 1630 ++4 3 ++6 1 +-52 1 ++58 2 ++1 8 +-75 1 +-2 1 ++2 2 ++11 2 + +fn=(86) +314 8 ++10 1 +-10 1 ++10 2 +cfi=(22) +cfn=(62) +calls=1 26 +* 43 +* 2 +161 2 +cfi=(9) +cfn=(18) +calls=1 29 +* 81 +* 1 ++1 2 +cfi=(14) +cfn=(36) +calls=1 -66 +* 28 ++2 2 ++3 2 +339 3 +167 1 +339 4 +167 1 +cfi=(15) +cfn=(42) +calls=1 56 +* 47 + +fn=(88) +1565 671 ++36 61 +-36 183 ++36 242 ++21 244 +cfi=(20) +cfn=(90) +calls=61 82 +* 617 ++1 61 +-1 61 ++1 61 ++11 27 +-1 9 ++1 45 +cfi=(20) +cfn=(92) +calls=9 82 +* 45 +* 18 ++7 27 +-7 9 ++7 9 ++16 126 ++50 18 ++5 18 ++2 27 ++6 18 ++7 9 ++1 9 ++1 9 +-2 36 ++1 27 ++16 36 ++15 18 +-15 480 ++1 169 ++4 45 ++1 27 ++14 63 ++2 27 ++5 2 ++1 2 +-13 123 ++16 4 ++6 2 +-3 2 ++1 2 ++1 2 ++1 4 ++14 563 +-13 2 +-1 22 + +fn=(110) +1809 64 ++1 8 +-1 40 ++7 8 +-7 8 ++1 8 ++6 16 ++5 32 ++52 16 +-52 8 ++52 8 +-52 56 ++75 24 +-63 69 ++7 92 +cfi=(15) +cfn=(58) +calls=23 56 +* 617 ++1 23 +-1 23 ++1 161 ++20 16 ++26 3 +-46 479 ++3 184 ++4 318 +cfi=(15) +cfn=(58) +calls=53 56 +* 1032 +* 212 +cfi=(15) +cfn=(58) +calls=53 56 +* 1355 +* 53 +-1 53 ++7 106 ++3 371 +cfn=(88) +calls=53 1565 +* 2596 +* 53 ++2 159 ++26 180 ++2 134 ++39 22 +-41 22 ++41 110 ++7 22 +-2 22 ++2 118 +-67 16 ++1 48 ++79 8 +-79 16 ++6 16 ++3 8 +-3 8 ++3 24 +cfi=(30) /build/buildd/eglibc-2.11.1/io/../sysdeps/unix/sysv/linux/wordsize-64/xstat.c +cfn=(112) _xstat +calls=8 37 +* 98 +-1 16 ++1 8 ++2 12 ++7 24 ++27 3 +cfi=(14) +cfn=(36) +calls=1 96 +* 28 +* 1 ++1 2 +-1 1 ++1 1 ++2 4 +cfi=(15) +cfn=(42) +calls=1 56 +* 51 ++1 2 ++34 72 +-14 21 ++10 14 +-66 6 + +fn=(64) +384 16 ++4 3 +cfi=(14) +cfn=(66) strsep +calls=1 -68 +* 24 +* 9 +cfi=(14) +cfn=(66) +calls=3 -68 +* 866 +* 12 ++3 6 +cfi=(9) +cfn=(18) +calls=3 29 +* 162 ++4 3 +-4 3 ++4 4 ++15 6 ++29 54 ++1 30 +-38 8 ++5 6 ++51 9 ++3 12 +cfi=(14) +cfn=(36) +calls=3 96 +* 84 ++3 3 +-3 3 ++3 3 ++4 3 ++2 9 +-2 6 ++2 3 +cfi=(15) +cfn=(58) +calls=3 56 +* 81 +* 3 ++3 3 +-2 6 ++2 3 ++1 1 ++5 2 ++1 1 +-1 2 ++1 2 +-1 4 ++1 2 +-1 4 ++1 41 ++1 2 +-1 6 ++1 2 +-1 32 +-98 2 ++98 3 ++1 13 +-1 2 ++1 2 +-1 8 ++1 2 +-1 6 ++4 3 +-1 6 ++1 3 ++7 6 ++1 3 ++3 9 ++5 1 ++3 9 +-14 6 +-9 2 + +fn=(94) +839 108 ++11 9 +-11 9 ++11 9 +-11 9 ++11 9 +cfi=(23) /build/buildd/eglibc-2.11.1/elf/dl-debug.c +cfn=(68) _dl_debug_initialize +calls=9 52 +* 81 ++4 27 +-4 9 ++4 9 +cfi=(27) +cfn=(96) +calls=9 37 +* 90 +* 18 ++11 63 ++1 27 +-1 162 ++1 216 ++17 18 ++22 27 ++9 18 ++21 36 ++31 27 ++3 63 +cfi=(12) /build/buildd/eglibc-2.11.1/elf/dl-object.c +cfn=(28) _dl_new_object +calls=9 36 +* 4249 ++1 9 +-1 9 ++1 9 +-52 9 ++63 9 ++1 9 +-64 9 ++63 9 ++2 9 ++3 9 +-4 9 ++1 9 ++2 36 ++1 27 ++1 18 ++22 9 ++8 9 +-25 9 ++17 9 ++8 18 +-8 36 ++8 18 +-8 9 ++8 18 +-8 9 ++8 18 ++89 18 +-47 9 ++47 27 +-47 9 ++47 27 +-88 116 ++6 27 ++1 36 +-8 552 ++1 414 ++60 6 ++4 2 ++1 4 ++1 6 ++4 4 ++3 4 ++4 8 ++6 2 +cfi=(32) +cfn=(122) +calls=2 54 +* 16 +* 6 ++1 2 +-67 90 ++6 108 ++8 18 ++1 18 +-1 18 ++1 18 +-1 36 ++1 18 ++1 126 ++2 54 ++1 54 ++1 54 ++4 18 +-4 18 ++4 45 ++5 81 ++11 9 +-11 81 ++11 9 +-46 6 ++1 2 +1160 27 ++1 27 +-5 18 ++1 9 +-70 8 ++78 36 +982 9 +1178 18 +982 9 +1178 36 ++2 9 +-2 9 ++2 9 ++19 72 +cfi=(21) +cfn=(60) +calls=9 82 +* 54 ++4 9 +-4 9 ++4 18 ++7 27 ++1 9 ++2 9 +-2 9 ++2 9 ++10 18 ++35 54 ++1 27 ++2 36 ++7 72 ++6 9 ++2 9 +-2 9 ++1 9 ++2 18 +-1 36 ++8 18 ++3 18 ++11 72 +cfi=(28) +cfn=(100) +calls=9 32 +* 1296 ++1 54 ++5 18 ++15 18 +-73 90 ++4 18 +-2 18 ++2 90 +cfi=(21) +cfn=(60) +calls=9 82 +* 54 +-2 18 +-29 63 +cfi=(21) +cfn=(98) +calls=9 82 +* 45 +* 9 +1323 9 +-77 9 ++77 18 ++9 9 +fi=(3) /build/buildd/eglibc-2.11.1/elf/dynamic-link.h +113 9 +fe=(19) +1332 9 +fi=(3) +113 9 ++6 9 +-2 9 ++2 18 ++7 9 ++5 9 ++3 9 ++1 9 +-3 9 +-5 18 +-1 212 ++1 132 ++10 44 +-18 132 ++18 9 +-18 27 ++2 410 ++8 152 ++8 152 +-18 456 ++25 27 ++20 36 ++1 36 ++1 36 ++1 36 ++2 36 ++5 36 ++1 35 ++1 36 ++6 27 ++5 18 ++7 18 ++1 36 ++16 27 ++5 1 ++2 1 +-2 2 ++2 1 ++2 2 ++2 2 ++3 27 ++2 2 ++2 2 ++3 18 +fe=(19) +1338 27 ++16 27 ++19 18 ++2 45 ++51 27 ++1 4 ++3 4 +cfi=(20) +cfn=(104) +calls=2 82 +* 10 +* 14 +cfi=(20) +cfn=(104) +calls=7 82 +* 35 +* 18 ++8 18 ++3 18 ++2 9 +-2 9 ++2 9 ++16 18 +cfi=(6) +cfn=(10) _dl_setup_hash +calls=9 843 +* 261 ++4 18 ++1 18 ++17 18 ++4 9 ++5 9 +-5 9 ++1 18 ++4 9 ++8 9 +-1 18 ++20 81 +-35 2 +fi=(3) +128 36 ++3 36 ++3 36 ++1 36 +fe=(19) +1263 21 +-2 21 ++2 7 +-2 7 ++3 7 +-3 7 ++2 7 ++1 42 ++2 28 ++42 24 +cfi=(21) +cfn=(60) +calls=3 82 +* 18 ++3 6 + +fn=(120) +160 28 ++1 7 +cfi=(9) +cfn=(18) +calls=7 29 +* 453 +* 7 ++1 14 +cfi=(14) +cfn=(36) +calls=7 -66 +* 196 ++2 14 ++3 14 ++1 14 +-1 7 ++1 7 +-1 7 +cfi=(15) +cfn=(42) +calls=7 56 +* 215 + +fl=(21) +fn=(98) +82 80 ++1 20 + +fn=(170) munmap +82 4 ++1 1 + +fn=(60) +82 140 ++1 28 + +fl=(24) +fn=(126) _dl_receive_error +198 10 ++1 1 +cfi=(2) +cfn=(76) _dl_initial_error_catch_tsd +calls=1 794 +* 2 ++5 1 +-1 1 +-4 1 ++9 1 ++2 1 +-3 1 ++3 1 +cfi=(2) +cfn=(128) version_check_doit +calls=1 658 +* 26410 ++2 1 ++1 1 ++1 8 + +fn=(74) +160 182 ++9 26 ++2 26 +cfi=(2) +cfn=(76) +calls=26 794 +* 52 +* 26 ++1 26 ++2 52 +-2 26 ++2 26 +cfi=(25) /build/buildd/eglibc-2.11.1/setjmp/../sysdeps/x86_64/setjmp.S +cfn=(78) __sigsetjmp +calls=26 26 +* 494 ++1 26 +-1 26 ++1 26 ++2 52 ++1 26 +-1 26 ++1 26 +cfi=(29) +cfn=(108) +calls=25 62 +* 57089 +cfi=(2) +cfn=(80) map_doit +calls=1 627 +* 2192 ++1 78 ++1 26 ++1 26 +-1 26 ++2 26 +-1 26 ++1 26 ++10 104 + +fl=(27) +fn=(96) +37 10 +-1 10 ++1 10 ++1 60 ++4 10 + +fl=(23) +fn=(68) +52 22 ++5 11 +-5 11 ++5 22 ++4 1 +-1 1 ++1 1 ++1 2 +-1 1 ++1 3 ++1 2 ++4 11 +-10 20 + +fn=(70) _dl_debug_state +77 2 + +fl=(6) +fn=(156) check_match.12169 +132 13320 ++1 4440 ++2 4440 ++2 11100 ++10 6660 ++3 4440 ++5 2220 +-1 2220 ++1 2220 +-1 2220 ++1 2220 ++2 3002 ++19 3002 ++1 7505 ++1 1501 +-1 3002 ++1 4500 +cfi=(16) +cfn=(44) +calls=1500 63 +* 129168 +-1 3000 ++46 15540 +-73 1590 +cfi=(16) +cfn=(44) +calls=318 -87 +* 57763 +* 954 ++29 3 +-2 4 ++28 2157 ++2 8628 +-72 4438 + +fn=(152) +698 6726 +459 2242 +698 8968 +459 2242 +698 15694 +459 11210 ++1 4484 +-1 2242 ++1 6726 +-1 6726 ++1 164080 +-1 82040 ++1 246120 +-1 250604 +700 2242 ++4 2242 ++4 2242 +-8 2242 ++1 4484 ++7 5244 ++5 11210 ++6 20178 ++8 44 +-8 110 ++2 33630 +cfn=(154) do_lookup_x +calls=2242 82 +* 1349271 ++3 4484 +-5 2242 ++33 4484 ++23 6660 ++1 13320 ++35 8880 ++14 6660 ++3 6660 +962 2220 +833 2220 ++1 2220 ++1 17936 +-81 154 ++17 44 ++1 22 ++54 2 + +fn=(10) +843 11 ++4 33 ++5 11 ++3 22 ++2 11 +-1 11 ++3 33 ++5 11 +-4 11 ++1 11 ++3 11 +-3 11 ++7 11 +-5 11 ++1 11 ++4 22 +-7 11 ++5 11 ++2 33 ++13 22 + +fn=(154) +82 22420 ++1 2242 +-6 2242 ++5 4484 +-5 20178 +272 2242 +-42 6726 ++4 2242 +-4 2242 ++42 2242 +-38 2242 +98 2242 +-3 2242 ++1 2242 ++2 2242 ++3 2242 +-3 2242 ++3 2242 +-3 10835 +-3 10835 ++1 10835 ++2 10835 ++3 10835 +-3 10835 ++3 10835 ++4 26154 ++4 26154 ++4 26154 ++7 39231 ++4 13077 ++1 13077 +226 13077 +124 26154 ++1 26154 +226 13077 ++1 26154 ++4 13077 ++3 13077 +-3 26154 ++3 143847 ++24 10857 ++24 21714 +444 32571 ++1 9455 +-1 26696 ++4 43450 ++4 17936 +287 12128 ++4 8664 ++14 2220 +-1 2220 ++1 4440 ++1 2220 +445 8345 +cfi=(26) +cfn=(84) +calls=1669 301 +* 91428 +-1 8345 +241 16632 ++1 5544 ++2 18557 ++10 11209 +-7 30500 ++2 4440 ++1 2220 +-1 2220 ++1 8880 +-1 6660 ++1 8880 +cfn=(156) +calls=2220 132 +* 301257 ++1 13320 ++45 1724 +fi=(37) /build/buildd/eglibc-2.11.1/elf/../sysdeps/generic/dl-hash.h +65 8880 +fe=(6) + +fl=(16) +fn=(44) +63 6120 ++1 6120 ++1 6120 ++1 3471 ++1 3471 ++1 3471 ++1 3471 +cfn=(45) strcmp'2 +calls=3471 -6 +* 212584 ++5 2649 ++1 2649 ++1 2649 ++1 2649 + +fn=(45) +63 29826 ++1 29826 ++1 29826 ++1 28256 ++1 28256 ++1 28256 ++1 28256 +cfn=(45) +calls=26355 -6 +* 1822957 ++2 1901 ++1 1901 ++2 1570 ++1 1570 ++1 1570 ++1 1570 + +fl=(12) +fn=(28) +36 90 ++3 10 +-3 40 ++3 10 +cfi=(9) +cfn=(18) +calls=10 -10 +* 523 ++6 10 +-6 10 ++7 20 ++6 40 +cfi=(14) +cfn=(32) +calls=10 +59 +* 451 ++3 10 +-3 10 ++3 20 ++4 10 ++5 10 +-6 10 ++4 10 ++2 10 +-5 10 ++3 10 ++2 20 +cfi=(15) +cfn=(42) +calls=10 -8 +* 273 ++2 10 +-2 10 ++5 10 +-1 10 +-2 10 ++3 40 ++3 10 +-3 10 ++3 10 ++9 10 +-7 10 ++4 10 ++3 10 +-47 5 ++49 2 +-2 2 ++2 30 +-2 30 ++18 20 +-6 10 ++1 10 ++5 10 +-6 10 ++6 39 ++3 216 ++7 9 +-5 9 ++2 9 ++3 63 ++4 27 ++1 18 ++1 9 ++3 9 +-3 9 ++3 9 +-5 3 ++1 2 ++1 1 ++3 1 +-3 1 ++3 2 ++4 27 ++4 63 ++8 1 ++6 1 +-3 2 ++3 11 +-3 18 ++3 18 ++2 18 +cfi=(9) +cfn=(18) +calls=9 29 +* 470 +* 9 ++4 9 +-4 9 ++4 9 ++64 9 ++4 90 +46 100 ++27 20 ++39 5 ++10 1 ++4 4 ++24 18 +cfi=(14) +cfn=(36) +calls=9 -54 +* 252 ++1 9 +-1 9 ++1 27 ++45 27 +cfi=(15) +cfn=(58) +calls=9 56 +* 309 +* 9 ++6 274 +-1 137 ++1 146 +-1 9 ++1 9 ++2 18 ++3 18 + +fl=(15) +fn=(58) +56 145 ++4 145 ++3 145 ++1 145 ++2 52 ++1 52 ++2 52 ++1 52 ++5 52 ++1 52 +-1 93 ++1 93 ++2 85 ++1 85 ++2 85 ++1 85 ++5 85 ++1 85 +-1 60 ++1 60 ++2 60 ++1 60 ++2 60 ++1 60 ++5 60 ++1 60 +-1 85 ++1 85 ++2 74 ++1 74 ++2 74 ++1 148 ++5 74 ++1 74 +-1 71 ++1 98 ++5 27 ++1 27 ++1 27 ++1 27 ++2 27 ++2 27 ++1 27 ++2 27 ++6 145 ++4 145 ++12 2 ++2 2 ++1 2 ++26 2 ++1 2 ++3 2 ++1 2 ++1 2 ++5 2 ++2 2 ++1 2 ++1 2 ++1 2 ++2 2 ++1 2 ++1 2 ++1 2 ++2 2 ++1 2 ++2 2 ++22 2 ++2 2 + +fn=(42) +56 40 ++2 40 ++2 40 ++3 40 ++1 40 ++2 11 ++1 11 ++2 11 ++1 11 ++5 11 ++1 11 +-1 29 ++1 29 ++2 11 ++1 11 ++2 11 ++1 22 ++5 11 ++1 11 +-1 29 ++1 29 ++2 8 ++1 8 ++2 8 ++1 8 ++5 8 ++1 8 +-1 32 ++1 32 ++2 22 ++1 22 ++2 22 ++1 22 ++5 22 ++1 22 +-1 18 ++1 42 ++5 24 ++1 24 ++1 24 ++1 24 ++2 24 ++2 24 ++1 24 ++2 24 ++8 40 ++8 10 ++6 10 ++2 10 ++1 10 ++3 2 ++1 4 ++5 2 ++1 2 ++2 2 ++2 2 ++1 2 ++2 2 +-8 7 ++1 7 ++2 7 ++2 7 ++1 7 ++2 9 ++9 2 ++1 2 +-1 8 ++1 8 ++3 10 ++1 10 ++1 10 ++5 10 ++2 10 ++1 10 ++1 10 ++1 10 ++2 10 ++1 10 ++1 10 ++1 10 ++2 10 ++1 10 ++2 10 ++2 1 ++2 1 ++1 1 ++1 1 ++1 1 ++2 1 ++1 1 ++1 1 ++1 1 ++2 1 ++1 1 ++2 2 ++5 1 ++6 1 ++1 1 +-7 9 ++6 9 ++1 9 + +fl=(14) +fn=(36) +96 171 +cfn=(40) +calls=57 -43 +* 1556 + +fn=(66) +320 6 ++3 18 ++2 6 ++1 12 ++4 32 ++5 8 +-5 264 ++5 356 ++2 720 ++8 90 +-15 272 ++18 2 ++4 8 +-13 4 ++2 4 ++7 2 ++4 4 + +fn=(32) +111 22 +-3 22 ++3 44 +-3 22 ++3 44 ++4 44 +cfn=(36) +calls=22 -19 +* 722 + +fn=(40) +53 232 ++1 231 ++11 171 ++3 57 +-3 57 ++3 114 +-3 3 ++3 1 +-3 1 ++3 210 ++4 24 ++1 18 ++6 42 +cfi=(21) +cfn=(60) +calls=6 +3 +* 36 ++2 12 ++3 12 ++1 12 +-1 6 ++1 12 ++3 6 ++1 6 ++2 24 +-3 52 ++1 52 ++2 208 +-31 2 +-1 5 + +fl=(8) /build/buildd/eglibc-2.11.1/elf/../sysdeps/unix/sysv/linux/x86_64/brk.c +fn=(14) brk +29 1 ++3 4 ++2 2 +-2 1 ++2 1 ++7 2 + +fl=(31) +fn=(168) _dl_unload_cache +306 1 ++1 4 ++2 2 +cfi=(21) +cfn=(170) +calls=1 82 +* 5 ++1 1 ++2 2 + +fn=(118) _dl_cache_libcmp +169 216 +-29 144 ++2 216 ++20 216 ++2 144 ++4 72 ++1 144 +cfn=(119) _dl_cache_libcmp'2 +calls=72 * +* 6029 + +fn=(119) +169 1086 +-29 746 ++2 1086 ++2 33 ++6 22 ++1 11 +-1 11 ++2 11 +-1 22 ++1 33 ++2 44 ++2 22 ++6 1053 ++2 702 ++4 290 ++1 580 +cfn=(119) +calls=290 * +* 19015 ++3 22 ++1 11 +-8 244 + +fn=(114) +182 56 ++8 14 ++3 21 ++45 14 ++6 21 ++15 14 +-6 7 ++6 7 +cfi=(20) +cfn=(56) +calls=7 82 +* 77 +* 7 ++17 35 +-23 7 ++23 14 +-23 7 ++23 1090 +cfn=(118) +calls=61 169 +* 5686 +* 317 ++21 63 +196 4 +cfi=(26) +cfn=(116) +calls=1 44 +* 68 ++8 2 ++1 1 +-1 2 ++1 3 +-1 13 ++8 1 +-3 2 ++3 3 ++3 1 ++1 2 +-1 1 ++1 1 ++19 2 +-17 2 +-2 22 ++60 141 +cfn=(118) +calls=4 169 +* 356 +* 35 +cfn=(118) +calls=7 169 +* 1139 +* 285 ++16 28 + +fl=(2) +fn=(80) +627 2 ++2 2 +-2 1 ++2 6 +cfi=(19) +cfn=(82) +calls=1 1958 +* 2177 +* 1 ++3 3 + +fn=(142) security_init +848 4 ++2 1 +fi=(35) /build/buildd/eglibc-2.11.1/elf/../sysdeps/unix/sysv/linux/dl-osinfo.h +68 1 ++4 1 ++3 2 ++48 7 +fe=(2) +852 1 ++6 3 ++2 1 +fi=(35) +132 2 ++11 1 +fe=(2) +863 1 ++2 1 ++6 1 ++1 5 + +fn=(2) _dl_start +363 9 ++18 4 +fi=(5) +76 2 +fe=(2) +381 1 ++29 2 +-3 1 +fi=(3) +119 1 +fe=(2) +410 1 +fi=(3) +119 2 ++3 1 ++4 1 ++5 1 ++3 1 ++1 1 +-3 1 +-5 2 +-5 13 ++15 13 +-18 39 ++18 1 +-18 3 ++2 36 ++5 20 ++1 12 ++10 4 +-18 13 ++25 2 ++20 4 ++1 4 ++1 4 ++1 4 ++2 4 ++5 4 ++1 4 ++1 4 ++6 3 ++5 2 ++7 3 ++1 3 ++8 3 ++2 3 ++3 2 ++1 2 +fe=(2) +538 2 ++7 1 +286 2 ++12 2 +cfi=(6) +cfn=(10) +calls=1 843 +* 29 ++1 1 ++1 1 ++1 1 +-2 1 ++3 1 +-2 1 ++1 1 ++1 1 ++21 1 ++10 1 +-10 3 ++10 1 +-6 1 +-4 1 ++10 1 +cfi=(7) +cfn=(12) _dl_sysdep_start +calls=1 88 +* 2209197 +* 1 ++9 1 ++7 1 +-4 1 ++4 1 +570 9 +fi=(3) +128 4 ++3 4 +fe=(2) +543 14 +fi=(4) +76 1 +-1 1 ++2 1 +-2 1 ++2 1 ++2 8 ++25 2 +fi=(5) +466 14 +fi=(4) +105 14 +fi=(5) +466 14 ++1 28 +-2 14 +fi=(4) +104 28 +fi=(5) +467 14 +fi=(4) +104 15 ++5 2 ++11 8 ++2 8 +fi=(5) +288 24 +fi=(4) +120 24 +fi=(5) +296 24 ++4 8 +-4 16 ++4 24 ++6 24 ++1 16 +fi=(4) +117 27 +fi=(3) ++17 4 ++1 4 +fe=(2) +286 67 + +fn=(128) +658 2 ++3 4 +cfi=(34) /build/buildd/eglibc-2.11.1/elf/dl-version.c +cfn=(130) _dl_check_all_versions +calls=1 383 +* 26400 +-1 2 ++4 2 + +fn=(896) +835 1 ++1 1 + +fn=(22) dl_main +886 1 ++19 1 ++7 1 +-26 6 ++32 1 +-32 4 ++27 1 +-5 1 ++10 1 ++3 1 +-16 1 ++7 1 +-4 1 ++5 1 ++8 1 +cfn=(24) process_envvars +calls=1 2494 +* 540 ++7 4 +1090 7 +cfi=(12) +cfn=(28) +calls=1 36 +* 248 ++2 1 +-2 1 ++2 1 ++1 2 ++2 1 ++1 2 +-2 1 ++1 1 ++1 2 ++29 1 +-3 1 ++3 1 +-8 1 ++1 1 ++2 1 ++5 6 ++1 28 +-1 27 ++1 52 ++95 2 ++1 3 +-5 2 ++1 1 +-88 3 ++1 1 ++49 2 ++1 2 +-1 8 ++2 4 ++1 2 ++3 2 ++1 2 +-1 2 ++1 2 ++1 2 ++1 6 ++1 2 +-46 1 ++10 1 +-10 1 ++10 1 +-7 2 +-3 1 ++10 1 ++68 2 +-87 3 ++1 1 ++92 3 ++3 2 ++2 2 ++2 3 ++13 3 ++1 6 +cfi=(16) +cfn=(44) +calls=1 63 +* 7 +-1 2 ++11 1 +-3 1 +-2 1 ++3 1 ++2 2 ++1 2 ++4 2 ++2 2 +fi=(3) +104 1 ++9 2 ++6 1 +-2 1 ++2 2 ++7 1 ++5 1 ++3 1 ++1 1 +-3 1 +-5 2 +-1 16 ++1 9 ++10 3 +-18 9 ++18 1 +-18 3 ++2 54 ++8 23 ++8 23 +-18 69 ++25 3 ++38 3 ++5 2 ++7 2 ++1 4 ++16 3 ++14 3 ++7 2 +fe=(2) +1271 2 +cfi=(6) +cfn=(10) +calls=1 843 +* 29 ++3 2 ++20 4 +fi=(3) +128 4 +fe=(2) +1383 1 +cfi=(17) +cfn=(48) +calls=1 67 +* 92 +* 8 ++5 2 +cfi=(19) +cfn=(52) +calls=1 622 +* 2979 ++3 3 +cfi=(23) +cfn=(68) +calls=1 52 +* 18 ++7 1 +-7 1 ++2 1 ++5 1 ++4 1 ++3 1 +-2 1 ++3 1 +-2 1 +-2 2 ++9 1 +-9 1 ++1 1 ++8 1 ++5 1 ++4 1 +-3 2 ++3 1 ++4 1 +-5 1 ++5 2 ++1 2 ++1 1 +-1 2 ++1 3 ++2 2 ++1 2 ++5 2 ++5 4 +1620 3 ++3 2 ++4 3 ++5 2 ++1 1 +cfi=(23) +cfn=(70) +calls=1 77 +* 1 ++4 3 ++15 3 ++4 4 ++31 3 +cfi=(20) +cfn=(56) +calls=1 82 +* 11 +* 2 ++77 1 ++11 1 +-11 3 ++17 1 ++1 2 +-1 1 ++1 2 +-1 1 ++1 3 +cfi=(29) +cfn=(106) +calls=1 149 +* 65617 ++1 1 ++2 5 ++3 1 +-3 2 ++3 1 +-3 1 ++3 1 +-3 1 ++3 1 ++1 5 +-1 2 ++1 40 +-1 21 ++4 3 ++1 3 ++1 1 ++2 2 ++1 52 +-1 27 +fi=(3) +131 4 ++3 4 ++1 4 +fe=(2) +1797 2 ++13 1 +-1 2 ++1 1 ++2 4 ++5 1 +-5 1 ++4 2 ++12 1 ++2 3 ++1 1 ++1 1 +-1 1 ++1 3 ++11 2 ++2 3 +-2 2 ++1 4 ++1 1 +cfi=(24) +cfn=(126) +calls=1 198 +* 26440 ++10 1 ++1 1 +-1 1 ++1 1 ++3 2 ++3 1 +cfn=(142) +calls=1 848 +* 32 ++2 2 +2093 3 +2239 1 ++2 7 ++6 1 +-6 1 ++6 1 ++9 4 ++1 1 ++5 2 +cfi=(32) +cfn=(164) +calls=1 380 +* 283 ++4 2 ++8 4 ++15 1 ++2 1 ++1 1 +-3 1 ++3 3 +-3 1 ++3 1 +cfi=(36) +cfn=(146) +calls=1 158 +* 9144 ++1 1 ++2 9 ++8 1 +cfi=(7) +cfn=(166) _dl_sysdep_start_cleanup +calls=1 251 +* 1 ++4 3 ++20 3 +cfi=(23) +cfn=(68) +calls=1 52 +* 9 ++1 1 ++1 1 +cfi=(23) +cfn=(70) +calls=1 77 +* 1 ++4 1 +cfi=(31) +cfn=(168) +calls=1 306 +* 15 ++5 8 +2149 2 ++4 4 ++48 2 ++7 1 +-7 1 ++7 1 ++3 45 ++3 4 ++22 11 ++2 22 +-18 22 ++2 22 ++6 33 ++1 70 +cfi=(36) +cfn=(146) +calls=10 158 +* 2097933 ++4 26 ++1 4 +cfi=(32) +cfn=(162) +calls=2 820 +* 40 +* 2 +1828 2 +1412 4 +-11 4 +1857 1 +cfn=(136) init_tls +calls=1 780 +* 687 +* 3 +-89 9 ++4 3 ++1 1 ++1 2 ++1 2 +1663 59 +cfi=(15) +cfn=(42) +calls=1 56 +* 92 +* 1 ++3 4 ++3 3 +cfi=(14) +cfn=(66) +calls=1 320 +* 909 +* 3 +cfi=(14) +cfn=(66) +calls=1 320 +* 9 +* 6 ++1 4 ++3 4 +cfn=(72) do_preload +calls=1 800 +* 2277 +* 2 ++2 1 ++2 12 +2224 1 ++1 1 +-3 2 + +fn=(24) +2494 1 ++8 2 +-8 4 ++23 1 +-23 4 ++8 1 +-8 1 ++8 2 +-7 1 ++6 2 +fi=(160) /build/buildd/eglibc-2.11.1/elf/../sysdeps/unix/sysv/linux/dl-librecon.h +32 1 +fe=(2) +2501 1 +-6 1 +fi=(160) +32 2 +fe=(2) +2504 2 +cfi=(11) /build/buildd/eglibc-2.11.1/elf/dl-environ.c +cfn=(26) _dl_next_ld_env_entry +calls=1 31 +* 54 +* 4 +cfi=(11) +cfn=(26) +calls=2 31 +* 258 +* 9 ++4 6 +-4 2 ++4 38 ++1 19 +-1 57 ++9 12 +2666 1 +-4 1 ++4 1 +-4 1 ++4 1 ++30 2 ++21 8 +2591 17 +-53 5 ++7 12 ++2 2 ++1 1 ++45 2 ++1 1 + +fn=(72) +800 6 ++6 1 ++1 1 ++6 5 +-11 1 ++6 1 ++1 1 ++2 1 ++2 1 +cfi=(24) +cfn=(74) +calls=1 160 +* 2249 ++1 2 ++2 3 ++12 5 + +fn=(76) +794 54 + +fn=(136) +780 1 +-56 1 +-4 1 +-2 1 ++2 1 ++4 1 ++60 3 +-54 1 ++3 4 +cfi=(14) +cfn=(32) +calls=1 111 +* 62 ++12 1 +-12 1 ++7 1 ++1 1 ++4 1 ++2 5 ++2 22 ++4 2 ++2 2 +-2 4 +-5 2 +-1 4 ++1 9 +-1 19 ++10 2 ++3 1 +cfi=(32) +cfn=(138) +calls=1 116 +* 101 ++7 1 +cfi=(32) +cfn=(140) +calls=1 332 +* 418 ++1 1 +-1 1 ++1 1 ++6 1 ++4 1 +-4 1 ++4 6 ++3 1 ++2 1 + +fn=(898) +841 1 ++1 1 + +fl=(30) +fn=(112) +37 8 +-1 8 ++1 8 ++1 48 ++4 2 +-4 24 + +fl=(10) /build/buildd/eglibc-2.11.1/elf/../misc/sbrk.c +fn=(20) sbrk +35 3 ++8 1 +-8 1 ++8 5 ++4 2 ++11 5 + +fl=(22) +fn=(62) +26 36 ++1 36 ++1 36 ++1 36 ++1 36 ++1 36 ++1 36 ++1 36 ++1 36 ++1 36 ++1 36 ++1 36 ++1 36 ++1 36 ++1 36 ++1 36 ++1 36 ++1 36 ++1 36 ++1 36 ++1 36 ++2 29 ++1 29 ++1 29 ++1 29 ++1 29 ++1 29 ++1 29 ++1 29 ++1 29 ++2 36 ++1 36 ++1 1 ++1 1 ++1 1 ++1 1 ++1 35 ++1 36 + +fl=(38) /build/buildd/eglibc-2.11.1/elf/dl-init.c +fn=(174) _dl_init +93 11 ++5 1 +-4 1 ++1 1 ++3 2 ++7 2 ++27 2 ++1 24 ++1 11 +-1 11 ++1 22 +-97 33 ++9 10 +-3 20 ++3 30 ++5 27 ++5 16 ++8 16 ++6 48 +cob=(2) ??? +cfi=(13) ??? +cfn=(460) 0x0000000004e4e288 +calls=1 -70 +* 189433 +cob=(2) +cfi=(13) +cfn=(440) 0x0000000004c26f38 +calls=1 -70 +* 29 +cob=(2) +cfi=(13) +cfn=(420) 0x00000000051210f8 +calls=1 -70 +* 29 +cob=(2) +cfi=(13) +cfn=(400) 0x00000000054e0450 +calls=1 -70 +* 29 +cob=(2) +cfi=(13) +cfn=(264) 0x000000000576fec8 +calls=1 -70 +* 2214 +cob=(2) +cfi=(13) +cfn=(244) 0x0000000005a2fe00 +calls=1 -70 +* 29 +cob=(2) +cfi=(13) +cfn=(224) 0x0000000005cb1a98 +calls=1 -70 +* 29 +cob=(4) +cfi=(40) +cfn=(196) +calls=1 -18 +* 6499 ++4 8 ++1 16 ++65 8 +-88 2 +-6 4 +-9 4 ++9 1 +-3 2 ++3 3 ++5 3 ++5 2 ++8 2 ++6 7 +cob=(2) +cfi=(13) +cfn=(176) 0x0000000004a234c8 +calls=1 -70 +* 29 +* 1 ++4 1 ++1 2 ++26 2 + +fl=(7) +fn=(54) +353 6 ++3 1 +-3 2 ++3 1 +-1 1 ++1 1 ++9 1 +-12 4 ++12 1 ++10 3 ++44 4 +cfi=(20) +cfn=(56) +calls=1 82 +* 11 +* 3 +-2 1 ++17 1 +-17 1 ++17 5 ++3 2 ++22 2 ++8 2 ++2 1 ++1 1 +-1 2 ++1 4 ++8 1 +-4 2 ++1 1 +-1 1 ++4 1 ++3 2 ++4 6 ++1 2 ++18 10 ++1 3 +cfi=(14) +cfn=(36) +calls=1 96 +* 28 ++1 1 +-1 2 ++1 1 ++7 2 ++22 3 ++3 1 +-3 3 ++3 1 ++28 2 +-7 1 ++7 4 ++1 1 +-1 1 ++1 1 +-1 1 ++1 1 +-1 1 ++1 3 +-1 3 ++1 3 +-1 3 ++1 3 +-1 5 ++5 2 +-5 3 ++5 3 ++3 1 +-3 1 ++3 1 +-3 3 ++3 1 +-3 1 ++3 7 ++2 16 +-2 4 ++1 12 +-1 2 ++1 12 +-1 10 ++4 4 ++3 1 ++2 2 +-1 1 +-1 2 ++2 3 ++13 13 ++3 3 +-3 3 ++3 3 ++3 4 ++3 8 +379 3 ++63 4 ++98 5 +cfi=(15) +cfn=(58) +calls=1 56 +* 22 +* 1 ++1 1 +-1 1 ++1 2 +cfi=(15) +cfn=(58) +calls=1 56 +* 22 +* 3 + +fn=(166) +251 1 + +fn=(12) +88 8 ++25 1 +-1 1 ++1 146 ++3 1 +-3 1 ++6 2 +-2 1 +-1 1 ++3 1 +-6 1 ++6 4 ++1 1 +-1 7 ++1 105 ++3 2 +-4 49 +fi=(17) +-83 2 +cfi=(8) +cfn=(14) +calls=1 -7 +* 11 +fi=(5) +226 5 +fe=(7) ++2 2 +cfi=(10) +cfn=(20) +calls=1 35 +* 17 +* 3 ++12 3 ++3 4 +cfi=(2) +cfn=(22) +calls=1 886 +* 2208726 ++2 9 +-67 1 +-59 4 ++34 1 +-34 4 ++43 1 +-43 4 ++40 1 +-40 4 ++37 1 +-37 5 ++13 1 +-13 4 ++10 1 +-10 4 ++7 1 +-7 4 +226 1 +cfi=(9) +cfn=(18) +calls=1 29 +* 39 +* 2 + +fl=(9) +fn=(18) +29 40 ++1 40 ++1 40 ++1 40 ++2 23 ++1 23 ++2 23 ++1 23 +-1 75 ++1 75 ++1 97 ++1 97 ++1 97 ++2 78 ++5 39 ++1 39 ++1 39 ++1 39 ++3 39 +-6 5 ++1 5 ++1 5 ++1 5 ++3 5 ++1 42 ++1 42 ++1 42 ++2 42 ++3 35 ++1 35 ++1 35 ++1 35 ++3 35 ++1 26 ++1 26 ++1 26 ++2 26 ++3 16 ++1 16 ++1 16 ++1 16 ++3 16 ++1 11 ++1 11 ++1 11 ++2 11 ++3 6 ++1 6 ++1 6 ++1 6 ++3 6 ++1 5 ++1 5 ++1 5 ++2 5 ++3 39 ++2 39 ++1 39 ++1 32 ++2 32 ++1 32 ++1 28 ++2 28 ++1 28 ++1 25 ++2 25 ++1 25 ++1 21 ++2 21 ++2 21 ++1 21 ++1 16 ++2 16 ++1 16 ++1 14 ++2 14 ++1 14 ++1 8 ++2 8 ++1 8 +-1 32 ++1 32 + +fl=(1) ??? +fn=(0) 0x0000000000000af0 +0 2 +cfi=(2) +cfn=(2) +calls=1 363 +0 2209962 +0 14 +cfi=(38) +cfn=(174) +calls=1 93 +0 198676 +0 3 +cob=(12) +cfi=(84) +cfn=(1040) 0x00000000004114e0 +calls=1 0 +0 7351905248537 + +fl=(11) +fn=(26) +31 3 ++3 11 ++2 92 ++11 44 +-13 133 ++17 1 +-14 20 ++5 2 +-3 2 ++3 2 ++2 2 + +fl=(34) +fn=(134) match_symbol +82 460 ++9 46 +-8 46 +-1 138 ++1 46 ++8 46 ++6 138 ++15 46 ++1 92 ++2 46 ++5 92 ++14 572 ++12 720 ++4 480 +-30 480 ++19 276 +cfi=(16) +cfn=(44) +calls=46 -76 +* 3816 +* 138 ++34 46 ++1 322 + +fn=(132) _dl_check_map_versions +180 99 ++15 11 +-15 22 ++15 22 ++2 11 ++3 11 +-3 11 ++2 11 ++1 11 ++2 11 +-3 11 ++3 11 ++3 27 ++4 9 +-4 9 ++4 18 ++10 27 ++7 9 +62 9 +226 18 +62 54 +226 11 +62 11 +226 22 +62 106 ++1 163 +-1 326 ++2 549 +cfi=(26) +cfn=(84) +calls=183 301 +* 11316 +* 366 +230 40 ++4 60 ++5 80 ++20 52 +-16 440 +cfn=(134) +calls=9 82 +* 1651 +* 222 +cfn=(134) +calls=37 82 +* 6395 +* 230 ++11 138 ++9 80 ++5 33 ++1 15 ++8 22 ++3 24 ++10 108 +-10 216 ++6 162 +-6 24 ++6 18 ++8 22 ++83 99 +-77 10 +-1 30 +cfi=(14) +cfn=(32) +calls=10 111 +* 370 ++2 10 +-2 20 ++2 10 ++11 10 ++2 10 +-5 10 ++3 20 ++2 10 ++3 45 ++4 18 ++4 54 ++1 36 ++1 27 ++1 27 ++2 27 +-9 22 ++4 66 ++1 44 ++1 33 ++1 33 ++2 33 +-5 22 ++10 22 +-10 66 ++1 33 ++1 33 ++1 33 ++2 33 ++5 30 +-10 90 ++1 45 ++1 45 ++1 45 ++2 45 ++8 60 ++5 33 ++1 11 ++4 20 ++3 30 ++20 108 +-14 54 +-2 54 ++2 60 +-2 6 ++2 6 ++5 108 ++1 54 +-1 270 ++1 54 ++1 54 +-1 108 ++4 186 + +fn=(130) +383 5 ++4 1 +-4 1 ++4 1 +-4 1 ++4 3 ++1 33 +-1 11 ++1 11 +-1 22 ++5 7 +-3 44 +cfn=(132) +calls=11 180 +* 26216 +-1 44 + +fl=(25) +fn=(78) +26 26 ++2 26 ++1 52 ++1 26 ++4 26 ++1 26 ++1 26 ++1 26 ++1 26 ++2 52 ++2 26 ++1 26 ++2 52 ++2 26 ++4 26 ++1 26 + +fl=(55) +fn=(358) +73 388 ++6 776 +-6 388 ++6 388 +-6 1164 ++6 388 ++1 388 +-4 388 ++3 388 +-3 388 ++4 388 ++1 388 +-1 1940 ++6 388 +-5 388 +-1 388 ++6 388 ++4 776 ++4 1164 ++5 2328 ++1 1164 ++8 1552 ++7 776 ++3 3880 +cfi=(6) +cfn=(152) +calls=388 698 +* 503896 +* 388 ++4 1164 ++4 1552 ++6 2716 ++8 388 ++7 1552 ++4 1164 +fi=(5) ++85 388 +fe=(55) +-81 2328 + +ob=(5) /lib/libgcc_s.so.1 +fl=(51) ??? +fn=(232) 0x0000000000002e20 +0 6 + +fn=(226) 0x0000000000002d80 +0 6 + +fn=(238) 0x0000000000013390 +0 11 + +ob=(1) +fl=(55) +fn=(358) +100 210 ++48 7 +cob=(4) +cfi=(150) +cfn=(3458) +calls=1 -86 +* 9 +cob=(4) +cfi=(130) +cfn=(3048) +calls=1 -86 +* 7 +cob=(4) +cfi=(99) +cfn=(1474) +calls=2 29 +* 12 +cob=(4) +cfi=(80) +cfn=(940) +calls=3 32 +* 18 +* 7 + +ob=(2) +fl=(13) +fn=(244) +0 2 +cob=(6) /lib/libm-2.11.1.so +cfi=(52) ??? +cfn=(246) 0x0000000000003ef0 +calls=1 0 +0 6 +0 1 +cob=(6) +cfi=(52) +cfn=(252) 0x0000000000003f90 +calls=1 0 +0 6 +0 1 +cob=(6) +cfi=(52) +cfn=(258) 0x00000000000447c0 +calls=1 0 +0 11 +0 2 + +fn=(460) +0 2 +cob=(11) /home/tclose/Code/MRtrix3/lib/libmrtrix-0_3_4.so +cfi=(60) ??? +cfn=(462) 0x0000000000013ce0 +calls=1 0 +0 6 +0 1 +cob=(11) +cfi=(60) +cfn=(468) 0x0000000000013d80 +calls=1 0 +0 6 +0 1 +cob=(11) +cfi=(60) +cfn=(474) 0x000000000007c360 +calls=1 0 +0 189415 +0 2 + +fn=(1052) 0x00000000004107f8 +0 2 +cob=(12) +cfi=(84) +cfn=(1054) 0x000000000041150c +calls=1 0 +0 6 +0 1 +cob=(12) +cfi=(84) +cfn=(1060) 0x00000000004115a0 +calls=1 0 +0 6 +0 1 +cob=(12) +cfi=(84) +cfn=(1066) 0x0000000000520b60 +calls=1 0 +0 253272 +0 2 + +fn=(264) +0 2 +cob=(7) +cfi=(53) +cfn=(266) +calls=1 0 +0 6 +0 1 +cob=(7) +cfi=(53) +cfn=(272) +calls=1 0 +0 6 +0 1 +cob=(7) +cfi=(53) +cfn=(278) +calls=1 0 +0 2196 +0 2 + +fn=(400) +0 2 +cob=(8) +cfi=(57) +cfn=(402) +calls=1 0 +0 6 +0 1 +cob=(8) +cfi=(57) +cfn=(408) +calls=1 0 +0 6 +0 1 +cob=(8) +cfi=(57) +cfn=(414) +calls=1 0 +0 11 +0 2 + +fn=(176) +0 2 +cob=(3) /usr/lib/valgrind/vgpreload_core-amd64-linux.so +cfi=(39) ??? +cfn=(178) 0x0000000000000510 +calls=1 0 +0 6 +0 1 +cob=(3) +cfi=(39) +cfn=(184) 0x00000000000005b0 +calls=1 0 +0 6 +0 1 +cob=(3) +cfi=(39) +cfn=(190) 0x0000000000000710 +calls=1 0 +0 11 +0 2 + +fn=(420) +0 2 +cob=(9) /usr/lib/libgsl.so.0.14.0 +cfi=(58) ??? +cfn=(422) 0x000000000004ab80 +calls=1 0 +0 6 +0 1 +cob=(9) +cfi=(58) +cfn=(428) 0x000000000004ac20 +calls=1 0 +0 6 +0 1 +cob=(9) +cfi=(58) +cfn=(434) 0x00000000001b6ea0 +calls=1 0 +0 11 +0 2 + +fn=(224) +0 2 +cob=(5) +cfi=(51) +cfn=(226) +calls=1 0 +0 6 +0 1 +cob=(5) +cfi=(51) +cfn=(232) +calls=1 0 +0 6 +0 1 +cob=(5) +cfi=(51) +cfn=(238) +calls=1 0 +0 11 +0 2 + +fn=(440) +0 2 +cob=(10) +cfi=(59) +cfn=(442) +calls=1 0 +0 6 +0 1 +cob=(10) +cfi=(59) +cfn=(448) +calls=1 0 +0 6 +0 1 +cob=(10) +cfi=(59) +cfn=(454) +calls=1 0 +0 11 +0 2 + +ob=(11) +fl=(60) +fn=(918) global constructors keyed to series.cpp +0 3 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 24 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 + +fn=(928) global constructors keyed to axis.cpp +0 5 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 24 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 5 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 5663 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1498 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 + +fn=(972) global constructors keyed to mmap.cpp +0 3 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 24 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 + +fn=(992) global constructors keyed to mapper.cpp +0 3 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 24 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 + +fn=(1028) global constructors keyed to reslice.cpp +0 3 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 24 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 10 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 8 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 + +fn=(1030) global constructors keyed to LU.cpp +0 3 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 24 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 + +fn=(1276) std::vector >::_M_insert_aux(__gnu_cxx::__normal_iterator > >, char const* const&) +0 143 +cob=(7) +cfi=(53) +cfn=(880) +calls=5 0 +0 582 +0 75 +cob=(4) +cfi=(90) +cfn=(1282) +calls=5 47 +0 169 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1698 +0 40 +cob=(4) +cfi=(90) +cfn=(1282) +calls=5 47 +0 120 +0 16 +cob=(7) +cfi=(53) +cfn=(1174) +calls=1 0 +0 81 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1307 +0 64 + +fn=(2090) std::_Vector_base >::_M_allocate(unsigned long) +0 20 +cob=(7) +cfi=(53) +cfn=(880) +calls=2 0 +0 220 + +fn=(2148) void std::__introsort_loop<__gnu_cxx::__normal_iterator*, std::vector, std::allocator > > >, long>(__gnu_cxx::__normal_iterator*, std::vector, std::allocator > > >, __gnu_cxx::__normal_iterator*, std::vector, std::allocator > > >, long) +0 42 + +fn=(2482) MR::DataType::parse(std::string const&) +0 54 +cob=(7) +cfi=(53) +cfn=(2256) +calls=3 0 +0 1131 +0 18 +cob=(7) +cfi=(53) +cfn=(1372) +calls=3 0 +0 36 +0 36 +cob=(4) +cfi=(118) +cfn=(2270) +calls=3 47 +0 36 +0 96 +cob=(4) +cfi=(118) +cfn=(2270) +calls=24 47 +0 288 +0 144 +cob=(7) +cfi=(53) +cfn=(1594) +calls=3 0 +0 156 +0 51 +cob=(7) +cfi=(53) +cfn=(1594) +calls=3 0 +0 158 +0 14 +cob=(7) +cfi=(53) +cfn=(1594) +calls=2 0 +0 110 +0 10 +cfn=(3398) bool std::operator==, std::allocator >(std::basic_string, std::allocator > const&, char const*) +calls=2 0 +0 128 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1010 +0 10 +cfn=(3398) +calls=2 0 +0 144 +0 26 +cob=(7) +cfi=(53) +cfn=(1310) +calls=3 0 +0 246 +0 15 + +fn=(2692) std::vector >::_M_fill_insert(__gnu_cxx::__normal_iterator > >, unsigned long, unsigned char* const&) +0 60 +cob=(4) +cfi=(90) +cfn=(1282) +calls=1 47 +0 24 +0 9 +cob=(4) +cfi=(90) +cfn=(1282) +calls=1 47 +0 24 +0 11 +cob=(7) +cfi=(53) +cfn=(880) +calls=1 0 +0 223 +0 7 + +fn=(2698) MR::File::MMap::map() +0 16 +cob=(12) +cfi=(84) +cfn=(2012) std::basic_string, std::allocator > std::operator+, std::allocator >(char const*, std::basic_string, std::allocator > const&) +calls=1 0 +0 494 +0 3 +cob=(7) +cfi=(53) +cfn=(1258) +calls=1 0 +0 20 +0 4 +cob=(7) +cfi=(53) +cfn=(1772) +calls=1 0 +0 326 +0 2 +cfn=(2206) MR::cmdline_debug(std::string const&) +calls=1 0 +0 7 +0 13 +cob=(4) +cfi=(95) +cfn=(1350) +calls=1 37 +0 10 +0 20 +cob=(4) +cfi=(104) +cfn=(1674) +calls=1 82 +0 7 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1697 +0 14 +cob=(4) +cfi=(120) +cfn=(2708) +calls=1 82 +0 6 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1707 +0 14 +cob=(7) +cfi=(53) +cfn=(722) +calls=1 0 +0 97 +0 21 +cob=(7) +cfi=(53) +cfn=(728) +calls=1 0 +0 708 +0 16 +cob=(7) +cfi=(53) +cfn=(492) +calls=1 0 +0 39 +0 10 +cob=(7) +cfi=(53) +cfn=(728) +calls=1 0 +0 708 +0 3 +cob=(7) +cfi=(53) +cfn=(2714) +calls=1 0 +0 2705 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1600 +0 12 +cob=(12) +cfi=(84) +cfn=(2736) char* std::string::_S_construct(char*, char*, std::allocator const&, std::forward_iterator_tag) +calls=1 0 +0 3586 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1414 +0 8 +cob=(7) +cfi=(53) +cfn=(1264) +calls=1 0 +0 28 +0 20 +cob=(7) +cfi=(53) +cfn=(746) +calls=1 0 +0 12 +0 10 +cob=(7) +cfi=(53) +cfn=(1556) +calls=1 0 +0 58 +0 5 +cob=(7) +cfi=(53) +cfn=(722) +calls=1 0 +0 97 +0 18 +cob=(7) +cfi=(53) +cfn=(728) +calls=1 0 +0 708 +0 15 +cob=(7) +cfi=(53) +cfn=(492) +calls=1 0 +0 39 +0 9 +cob=(7) +cfi=(53) +cfn=(728) +calls=1 0 +0 708 +0 3 +cob=(7) +cfi=(53) +cfn=(2750) +calls=1 0 +0 2583 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1682 +0 12 +cob=(12) +cfi=(84) +cfn=(2736) +calls=1 0 +0 200 +0 8 +cob=(7) +cfi=(53) +cfn=(1264) +calls=1 0 +0 28 +0 20 +cob=(7) +cfi=(53) +cfn=(746) +calls=1 0 +0 12 +0 8 +cob=(7) +cfi=(53) +cfn=(1556) +calls=1 0 +0 58 +0 6 +cob=(12) +cfi=(84) +cfn=(2012) +calls=1 0 +0 554 +0 4 +cob=(7) +cfi=(53) +cfn=(1258) +calls=1 0 +0 20 +0 4 +cob=(7) +cfi=(53) +cfn=(1772) +calls=1 0 +0 537 +0 6 +cob=(12) +cfi=(84) +cfn=(1396) std::basic_string, std::allocator > std::operator+, std::allocator >(std::basic_string, std::allocator > const&, std::basic_string, std::allocator > const&) +calls=1 0 +0 336 +0 4 +cob=(7) +cfi=(53) +cfn=(1258) +calls=1 0 +0 20 +0 4 +cob=(7) +cfi=(53) +cfn=(1772) +calls=1 0 +0 370 +0 6 +cob=(12) +cfi=(84) +cfn=(1396) +calls=1 0 +0 392 +0 4 +cob=(7) +cfi=(53) +cfn=(1258) +calls=1 0 +0 20 +0 4 +cob=(7) +cfi=(53) +cfn=(1772) +calls=1 0 +0 526 +0 4 +cob=(7) +cfi=(53) +cfn=(1258) +calls=1 0 +0 20 +0 2 +cob=(4) +cfi=(69) +cfn=(642) +calls=1 26 +0 22 +0 4 +cob=(7) +cfi=(53) +cfn=(1772) +calls=1 0 +0 340 +0 4 +cob=(7) +cfi=(53) +cfn=(1258) +calls=1 0 +0 20 +0 4 +cob=(7) +cfi=(53) +cfn=(1772) +calls=1 0 +0 362 +0 2 +cfn=(2206) +calls=1 0 +0 7 +0 54 +cob=(7) +cfi=(53) +cfn=(1310) +calls=1 0 +0 82 +0 7 +cob=(7) +cfi=(53) +cfn=(1310) +calls=1 0 +0 113 +0 7 +cob=(7) +cfi=(53) +cfn=(1310) +calls=1 0 +0 124 +0 7 +cob=(7) +cfi=(53) +cfn=(1310) +calls=1 0 +0 82 +0 7 +cob=(7) +cfi=(53) +cfn=(1310) +calls=1 0 +0 82 +0 7 +cob=(7) +cfi=(53) +cfn=(1310) +calls=1 0 +0 82 +0 7 +cob=(7) +cfi=(53) +cfn=(1310) +calls=1 0 +0 126 +0 7 +cob=(7) +cfi=(53) +cfn=(1310) +calls=1 0 +0 126 +0 7 +cob=(7) +cfi=(53) +cfn=(1310) +calls=1 0 +0 82 +0 7 +cob=(7) +cfi=(53) +cfn=(1310) +calls=1 0 +0 82 +0 7 +cob=(7) +cfi=(53) +cfn=(1310) +calls=1 0 +0 113 +0 7 +cob=(7) +cfi=(53) +cfn=(1310) +calls=1 0 +0 126 +0 7 +cob=(7) +cfi=(53) +cfn=(1310) +calls=1 0 +0 82 +0 7 +cob=(7) +cfi=(53) +cfn=(1310) +calls=1 0 +0 82 +0 74 + +fn=(468) +0 6 + +fn=(920) global constructors keyed to tree.cpp +0 3 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 24 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 + +fn=(974) global constructors keyed to analyse.cpp +0 3 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 24 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 + +fn=(994) global constructors keyed to default.cpp +0 3 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 24 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 + +fn=(1032) global constructors keyed to study.cpp +0 3 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 24 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 + +fn=(1304) std::vector >::_M_insert_aux(__gnu_cxx::__normal_iterator > >, unsigned long const&) +0 112 +cob=(7) +cfi=(53) +cfn=(880) +calls=4 0 +0 610 +0 60 +cob=(4) +cfi=(90) +cfn=(1282) +calls=4 47 +0 96 +0 32 +cob=(4) +cfi=(90) +cfn=(1282) +calls=4 47 +0 96 +0 60 + +fn=(1424) std::vector >::_M_insert_aux(__gnu_cxx::__normal_iterator > >, MR::ArgBase const&) +0 93 +cob=(7) +cfi=(53) +cfn=(880) +calls=5 0 +0 550 +0 133 +cob=(7) +cfi=(53) +cfn=(1174) +calls=1 0 +0 81 +0 89 + +fn=(2030) MR::cmdline_info(std::string const&) +0 21 + +fn=(2046) MR::Image::NameParser::parse(std::string const&, unsigned long) +0 28 +cob=(7) +cfi=(53) +cfn=(1264) +calls=2 0 +0 56 +0 10 +cob=(4) +cfi=(95) +cfn=(1350) +calls=2 37 +0 20 +0 38 +cob=(7) +cfi=(53) +cfn=(1246) +calls=2 0 +0 432 +0 14 +cob=(7) +cfi=(53) +cfn=(1264) +calls=2 0 +0 56 +0 4 +cob=(7) +cfi=(53) +cfn=(1468) +calls=2 0 +0 30 +0 10 +cob=(7) +cfi=(53) +cfn=(1246) +calls=2 0 +0 432 +0 22 +cob=(7) +cfi=(53) +cfn=(1446) +calls=2 0 +0 410 +0 52 +cob=(7) +cfi=(53) +cfn=(2056) +calls=2 0 +0 98 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1466 +0 14 +cfn=(2062) MR::Image::NameParser::insert_str(std::string const&) +calls=2 0 +0 10825 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 911 +0 38 +cob=(7) +cfi=(53) +cfn=(1446) +calls=2 0 +0 438 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1434 +0 14 +cob=(7) +cfi=(53) +cfn=(1468) +calls=2 0 +0 30 +0 2 + +fn=(2102) MR::Image::NameParserItem* std::__uninitialized_move_a >(MR::Image::NameParserItem*, MR::Image::NameParserItem*, MR::Image::NameParserItem*, std::allocator&) +0 84 + +fn=(2336) std::vector >::operator=(std::vector > const&) +0 38 +cob=(7) +cfi=(53) +cfn=(880) +calls=1 0 +0 110 +0 5 +cob=(4) +cfi=(90) +cfn=(1282) +calls=1 47 +0 62 +0 7 + +fn=(2674) MR::DataType::bits() const +0 44 + +fn=(462) +0 6 + +fn=(474) +0 11 +cfn=(478) global constructors keyed to select_cmdline.cpp +calls=1 0 +0 105958 +0 78 +cfn=(1032) +calls=1 0 +0 94 +cfn=(1030) +calls=1 0 +0 94 +cfn=(1028) +calls=1 0 +0 236 +cfn=(1026) global constructors keyed to nifti1_utils.cpp +calls=1 0 +0 94 +cfn=(1024) global constructors keyed to element.cpp +calls=1 0 +0 94 +cfn=(1022) global constructors keyed to confirm.cpp +calls=1 0 +0 94 +cfn=(1020) global constructors keyed to mosaic.cpp +calls=1 0 +0 94 +cfn=(1018) global constructors keyed to xds.cpp +calls=1 0 +0 94 +cfn=(1016) global constructors keyed to dicom.cpp +calls=1 0 +0 94 +cfn=(1014) global constructors keyed to key_value.cpp +calls=1 0 +0 94 +cfn=(1006) global constructors keyed to exec.cpp +calls=1 0 +0 2048 +cfn=(1004) global constructors keyed to image.cpp +calls=1 0 +0 94 +cfn=(1002) global constructors keyed to header.cpp +calls=1 0 +0 94 +cfn=(1000) global constructors keyed to patient.cpp +calls=1 0 +0 94 +cfn=(998) global constructors keyed to nifti1_gz.cpp +calls=1 0 +0 94 +cfn=(996) global constructors keyed to args.cpp +calls=1 0 +0 172 +cfn=(994) +calls=1 0 +0 94 +cfn=(992) +calls=1 0 +0 94 +cfn=(990) global constructors keyed to app.cpp +calls=1 0 +0 291 +cfn=(988) global constructors keyed to progressbar.cpp +calls=1 0 +0 94 +cfn=(976) global constructors keyed to gz.cpp +calls=1 0 +0 1499 +cfn=(974) +calls=1 0 +0 94 +cfn=(972) +calls=1 0 +0 94 +cfn=(970) global constructors keyed to config.cpp +calls=1 0 +0 167 +cfn=(928) +calls=1 0 +0 7332 +cfn=(926) global constructors keyed to mri.cpp +calls=1 0 +0 94 +cfn=(856) global constructors keyed to pipe.cpp +calls=1 0 +0 94 +cfn=(924) global constructors keyed to list.cpp +calls=1 0 +0 663 +cfn=(922) global constructors keyed to nifti1.cpp +calls=1 0 +0 94 +cfn=(920) +calls=1 0 +0 94 +cfn=(918) +calls=1 0 +0 94 +cfn=(916) global constructors keyed to base.cpp +calls=1 0 +0 94 +cfn=(914) global constructors keyed to name_parser.cpp +calls=1 0 +0 94 +cfn=(912) global constructors keyed to data_type.cpp +calls=1 0 +0 94 +cfn=(862) global constructors keyed to dict.cpp +calls=1 0 +0 68016 +cfn=(860) global constructors keyed to mrtrix.cpp +calls=1 0 +0 94 +cfn=(860) +calls=1 0 +0 94 +cfn=(858) global constructors keyed to quick_scan.cpp +calls=1 0 +0 94 +cfn=(856) +calls=1 0 +0 94 +0 124 + +fn=(922) +0 3 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 24 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 + +fn=(976) +0 3 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 24 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 1467 + +fn=(996) +0 3 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 24 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 16 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 + +fn=(1006) +0 5 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 24 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(4) +cfi=(83) +cfn=(1012) +calls=1 178 +0 5 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1874 +0 7 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 + +fn=(1014) +0 3 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 24 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 + +fn=(2040) MR::Image::ParsedNameList::parse_scan_check(std::string const&, unsigned long) +0 52 +cfn=(2046) +calls=2 0 +0 16884 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 867 +0 6 +cfn=(2114) MR::Image::ParsedNameList::scan(MR::Image::NameParser&) +calls=2 0 +0 9871 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1011 +0 32 +cfn=(2148) +calls=2 0 +0 42 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1728 +0 6 +cfn=(2154) void std::__final_insertion_sort<__gnu_cxx::__normal_iterator*, std::vector, std::allocator > > > >(__gnu_cxx::__normal_iterator*, std::vector, std::allocator > > >, __gnu_cxx::__normal_iterator*, std::vector, std::allocator > > >) +calls=2 0 +0 1754 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1730 +0 6 +cfn=(2166) MR::Image::ParsedNameList::count() const +calls=2 0 +0 58 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 876 +0 16 +cfn=(2172) MR::Image::NameParser::~NameParser() +calls=2 0 +0 672 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 794 +0 18 + +fn=(2096) MR::Image::NameParserItem::NameParserItem(MR::Image::NameParserItem const&) +0 32 +cob=(7) +cfi=(53) +cfn=(1258) +calls=2 0 +0 40 +0 40 +cob=(4) +cfi=(90) +cfn=(1282) +calls=2 47 +0 48 +0 16 + +fn=(2108) MR::Image::NameParserItem::~NameParserItem() +0 16 +cob=(7) +cfi=(53) +cfn=(1468) +calls=2 0 +0 30 + +fn=(2154) +0 22 +cfn=(2160) void std::__insertion_sort<__gnu_cxx::__normal_iterator*, std::vector, std::allocator > > > >(__gnu_cxx::__normal_iterator*, std::vector, std::allocator > > >, __gnu_cxx::__normal_iterator*, std::vector, std::allocator > > >) +calls=2 0 +0 44 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1676 +0 12 + +fn=(2204) MR::File::KeyValue::open(std::string const&, char const*) +0 60 +cob=(7) +cfi=(53) +cfn=(1586) +calls=3 0 +0 114 +0 18 +cob=(12) +cfi=(84) +cfn=(2012) +calls=3 0 +0 1248 +0 9 +cob=(7) +cfi=(53) +cfn=(1258) +calls=3 0 +0 60 +0 12 +cob=(7) +cfi=(53) +cfn=(1772) +calls=3 0 +0 1103 +0 6 +cfn=(2206) +calls=3 0 +0 21 +0 48 +cob=(7) +cfi=(53) +cfn=(1632) +calls=3 0 +0 11197 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 2282 +0 21 +cob=(7) +cfi=(53) +cfn=(1712) +calls=3 0 +0 24 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 2154 +0 60 +cob=(7) +cfi=(53) +cfn=(1730) +calls=3 0 +0 1890 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 2531 +0 18 +cob=(4) +cfi=(69) +cfn=(642) +calls=3 26 +0 66 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1690 +0 15 +cob=(7) +cfi=(53) +cfn=(2232) +calls=3 0 +0 233 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1538 +0 36 +cob=(7) +cfi=(53) +cfn=(1310) +calls=3 0 +0 246 +0 12 +cob=(7) +cfi=(53) +cfn=(1264) +calls=3 0 +0 84 +0 39 +cob=(7) +cfi=(53) +cfn=(1372) +calls=3 0 +0 36 +0 27 +cob=(7) +cfi=(53) +cfn=(1310) +calls=3 0 +0 246 +0 21 +cob=(7) +cfi=(53) +cfn=(1310) +calls=3 0 +0 288 +0 39 + +fn=(2378) std::vector >::operator=(std::vector > const&) +0 38 +cob=(7) +cfi=(53) +cfn=(880) +calls=1 0 +0 110 +0 5 +cob=(4) +cfi=(90) +cfn=(1282) +calls=1 47 +0 62 +0 7 + +fn=(2686) std::vector, std::allocator > >::_M_fill_insert(__gnu_cxx::__normal_iterator*, std::vector, std::allocator > > >, unsigned long, MR::RefPtr const&) +0 84 +cob=(7) +cfi=(53) +cfn=(880) +calls=1 0 +0 126 +0 6 + +fn=(2862) MR::File::MMap::~MMap() +0 17 +cob=(12) +cfi=(84) +cfn=(2012) +calls=1 0 +0 377 +0 4 +cob=(7) +cfi=(53) +cfn=(1258) +calls=1 0 +0 20 +0 4 +cob=(7) +cfi=(53) +cfn=(1772) +calls=1 0 +0 460 +0 2 +cfn=(2206) +calls=1 0 +0 7 +0 12 +cob=(4) +cfi=(120) +cfn=(2868) +calls=1 82 +0 5 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1741 +0 4 +cob=(4) +cfi=(104) +cfn=(2874) +calls=1 82 +0 7 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1673 +0 18 +cob=(7) +cfi=(53) +cfn=(1310) +calls=1 0 +0 82 +0 11 +cob=(7) +cfi=(53) +cfn=(1310) +calls=1 0 +0 113 +0 13 + +fn=(3928) MR::(anonymous namespace)::display_func_cmdline(MR::ProgressInfo&) +0 56 +cob=(4) +cfi=(153) +cfn=(3934) +calls=8 28 +0 13860 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1870 +0 48 + +fn=(2856) MR::Image::Handler::Default::~Default() +0 24 +cfn=(2862) +calls=1 0 +0 4570 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 747 +0 2 +cob=(7) +cfi=(53) +cfn=(1174) +calls=1 0 +0 81 +0 3 +cob=(7) +cfi=(53) +cfn=(1174) +calls=1 0 +0 81 +0 7 +cob=(7) +cfi=(53) +cfn=(1174) +calls=1 0 +0 81 +0 7 +cob=(7) +cfi=(53) +cfn=(1174) +calls=1 0 +0 81 +0 4 +cob=(7) +cfi=(53) +cfn=(1174) +calls=1 0 +0 81 +0 2 +cob=(7) +cfi=(53) +cfn=(1174) +calls=1 0 +0 81 +0 7 + +fn=(924) +0 3 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 24 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 9 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 9 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 9 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 9 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 9 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 9 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 9 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 10 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 + +fn=(970) +0 3 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 24 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 11 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 + +fn=(1016) +0 3 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 24 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 + +fn=(1240) MR::App::App(int, char**, char const**, MR::Argument const*, MR::Option const*, unsigned long const*, char const*, char const*) +0 46 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 318 +0 5 +cob=(7) +cfi=(53) +cfn=(1246) +calls=1 0 +0 2127 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1650 +0 5 +cob=(7) +cfi=(53) +cfn=(1264) +calls=1 0 +0 28 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1506 +0 33 +cfn=(1270) MR::App::sort_arguments(int, char**) +calls=1 0 +0 28851 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 830 +0 2 +cob=(4) +cfi=(91) +cfn=(1326) +calls=1 32 +0 8 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1642 +0 2 +cob=(4) +cfi=(93) +cfn=(1334) +calls=1 211 +0 10226 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1673 +0 1 +cfn=(1344) MR::File::Config::init() +calls=1 0 +0 17122 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 776 +0 10 +cob=(7) +cfi=(53) +cfn=(1258) +calls=1 0 +0 20 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1426 +0 17 + +fn=(2182) MR::Image::Format::MRtrix::read(MR::Image::Header&) const +0 18 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 225 +0 16 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 219 +0 16 +cob=(7) +cfi=(53) +cfn=(1446) +calls=1 0 +0 201 +0 7 +cob=(7) +cfi=(53) +cfn=(1468) +calls=1 0 +0 100 +0 5 +cob=(7) +cfi=(53) +cfn=(1468) +calls=1 0 +0 100 +0 9 +cob=(7) +cfi=(53) +cfn=(1446) +calls=1 0 +0 201 +0 8 +cob=(7) +cfi=(53) +cfn=(1468) +calls=1 0 +0 100 +0 32 +cob=(7) +cfi=(53) +cfn=(722) +calls=1 0 +0 97 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1491 +0 23 +cob=(7) +cfi=(53) +cfn=(728) +calls=1 0 +0 708 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 2322 +0 8 +cob=(7) +cfi=(53) +cfn=(1608) +calls=1 0 +0 265 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1938 +0 5 +cob=(7) +cfi=(53) +cfn=(728) +calls=1 0 +0 708 +0 4 +cfn=(2204) +calls=1 0 +0 21097 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 848 +0 53 +cfn=(2238) MR::File::KeyValue::next() +calls=1 0 +0 8155 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 786 +0 348 +cfn=(2238) +calls=87 0 +0 297572 +0 785 +cob=(7) +cfi=(53) +cfn=(2256) +calls=87 0 +0 24670 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1516 +0 522 +cob=(7) +cfi=(53) +cfn=(1372) +calls=87 0 +0 1044 +0 870 +cob=(4) +cfi=(118) +cfn=(2270) +calls=87 47 +0 1044 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1724 +0 2220 +cob=(4) +cfi=(118) +cfn=(2270) +calls=740 47 +0 8880 +0 3830 +cob=(7) +cfi=(53) +cfn=(1594) +calls=87 0 +0 3908 +0 182 +cfn=(2276) MR::parse_ints(std::string const&, int) +calls=1 0 +0 31607 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 783 +0 3 +cfn=(2336) +calls=1 0 +0 222 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 810 +0 5 +cob=(7) +cfi=(53) +cfn=(1174) +calls=2 0 +0 162 +0 870 +cob=(7) +cfi=(53) +cfn=(1310) +calls=87 0 +0 7134 +0 603 +cob=(7) +cfi=(53) +cfn=(1594) +calls=86 0 +0 3794 +0 178 +cfn=(2342) MR::parse_floats(std::string const&) +calls=1 0 +0 19852 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 776 +0 5 +cfn=(2378) +calls=1 0 +0 222 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 834 +0 513 +cob=(7) +cfi=(53) +cfn=(1594) +calls=85 0 +0 4265 +0 175 +cob=(7) +cfi=(53) +cfn=(1264) +calls=1 0 +0 28 +0 505 +cob=(7) +cfi=(53) +cfn=(1594) +calls=84 0 +0 3776 +0 173 +cob=(7) +cfi=(53) +cfn=(1264) +calls=1 0 +0 28 +0 499 +cob=(7) +cfi=(53) +cfn=(1594) +calls=83 0 +0 4161 +0 171 +cob=(7) +cfi=(53) +cfn=(1264) +calls=1 0 +0 28 +0 493 +cob=(7) +cfi=(53) +cfn=(1594) +calls=82 0 +0 4101 +0 177 +cfn=(2462) MR::Image::Axes::Dim::operator=(unsigned long) +calls=1 0 +0 6131 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 817 +0 589 +cob=(7) +cfi=(53) +cfn=(1594) +calls=82 0 +0 3608 +0 656 +cob=(7) +cfi=(53) +cfn=(1594) +calls=82 0 +0 4112 +0 174 +cfn=(2384) MR::split(std::string const&, char const*, bool, unsigned long) +calls=1 0 +0 2580 +0 4 +cob=(12) +cfi=(84) +cfn=(2402) std::vector >::operator=(std::vector > const&) +calls=1 0 +0 360 +0 4 +cob=(12) +cfi=(84) +cfn=(2410) std::vector >::~vector() +calls=2 0 +0 338 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 854 +0 488 +cob=(7) +cfi=(53) +cfn=(1594) +calls=81 0 +0 3577 +0 172 +cfn=(2384) +calls=1 0 +0 5540 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 749 +0 5 +cob=(12) +cfi=(84) +cfn=(2402) +calls=1 0 +0 320 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 902 +0 2 +cob=(4) +cfi=(100) +cfn=(1476) +calls=1 25 +0 31 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1698 +0 10 +cfn=(2482) +calls=1 0 +0 966 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 785 +0 483 +cob=(7) +cfi=(53) +cfn=(1594) +calls=80 0 +0 4049 +0 622 +cob=(7) +cfi=(53) +cfn=(1594) +calls=77 0 +0 4368 +0 1721 +cfn=(2342) +calls=3 0 +0 48059 +0 24 +cfn=(2450) void std::vector >::_M_range_insert<__gnu_cxx::__normal_iterator > > >(__gnu_cxx::__normal_iterator > >, __gnu_cxx::__normal_iterator > >, __gnu_cxx::__normal_iterator > >, std::forward_iterator_tag) +calls=3 0 +0 1156 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1573 +0 128 +cfn=(2456) std::vector >::~vector() +calls=64 0 +0 5440 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 758 +0 72 +cfn=(2488) MR::Image::Axes::parse(unsigned long, std::string const&) +calls=1 0 +0 13825 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 912 +0 55 +cob=(7) +cfi=(53) +cfn=(1264) +calls=1 0 +0 123 +0 15 +cob=(7) +cfi=(53) +cfn=(1264) +calls=3 0 +0 257 +0 70 +cob=(7) +cfi=(53) +cfn=(1264) +calls=1 0 +0 123 +0 15 +cob=(7) +cfi=(53) +cfn=(1264) +calls=3 0 +0 257 +0 270 +cob=(7) +cfi=(53) +cfn=(1264) +calls=16 0 +0 448 +0 20 +cfn=(2500) T.1670 +calls=1 0 +0 1188 +0 150 +cob=(12) +cfi=(84) +cfn=(2512) MR::Math::Matrix::operator=(MR::Math::Matrix const&) +calls=1 0 +0 1378 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 886 +0 4 +cob=(9) +cfi=(58) +cfn=(2522) gsl_block_float_free +calls=1 0 +0 1807 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 939 +0 14 +cob=(4) +cfi=(100) +cfn=(1476) +calls=1 25 +0 22 +0 9 +cob=(7) +cfi=(53) +cfn=(722) +calls=1 0 +0 97 +0 22 +cob=(7) +cfi=(53) +cfn=(728) +calls=1 0 +0 708 +0 16 +cob=(7) +cfi=(53) +cfn=(492) +calls=1 0 +0 39 +0 9 +cob=(7) +cfi=(53) +cfn=(1812) +calls=1 0 +0 197 +0 6 +cob=(7) +cfi=(53) +cfn=(1528) +calls=1 0 +0 21 +0 3 +cob=(7) +cfi=(53) +cfn=(728) +calls=1 0 +0 708 +0 6 +cob=(7) +cfi=(53) +cfn=(2532) +calls=1 0 +0 1570 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 2395 +0 6 +cob=(7) +cfi=(53) +cfn=(2544) +calls=1 0 +0 2472 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1656 +0 3 +cob=(7) +cfi=(53) +cfn=(1594) +calls=1 0 +0 52 +0 7 +cob=(7) +cfi=(53) +cfn=(1264) +calls=1 0 +0 123 +0 10 +cfn=(2040) +calls=1 0 +0 4064 +0 10 +cob=(7) +cfi=(53) +cfn=(1468) +calls=1 0 +0 15 +0 2 +cob=(7) +cfi=(53) +cfn=(1468) +calls=1 0 +0 15 +0 20 +cob=(7) +cfi=(53) +cfn=(1258) +calls=1 0 +0 20 +0 3 +cob=(7) +cfi=(53) +cfn=(1258) +calls=1 0 +0 20 +0 9 +cfn=(2558) std::vector >::_M_insert_aux(__gnu_cxx::__normal_iterator > >, MR::File::Entry const&) +calls=1 0 +0 255 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1440 +0 6 +cfn=(2564) MR::Image::ParsedNameList::~ParsedNameList() +calls=1 0 +0 296 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 838 +0 2 +cob=(7) +cfi=(53) +cfn=(1468) +calls=1 0 +0 15 +0 2 +cob=(7) +cfi=(53) +cfn=(2570) +calls=1 0 +0 201 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 2106 +0 4 +cob=(7) +cfi=(53) +cfn=(1174) +calls=1 0 +0 81 +0 2 +cob=(12) +cfi=(84) +cfn=(2410) +calls=1 0 +0 169 +0 2 +cob=(12) +cfi=(84) +cfn=(2410) +calls=1 0 +0 169 +0 2 +cfn=(2456) +calls=1 0 +0 4 +0 2 +cfn=(2456) +calls=1 0 +0 85 +0 2 +cfn=(2456) +calls=1 0 +0 158 +0 2 +cfn=(2456) +calls=1 0 +0 85 +0 4 +cob=(7) +cfi=(53) +cfn=(1174) +calls=1 0 +0 81 +0 2 +cob=(7) +cfi=(53) +cfn=(1468) +calls=1 0 +0 15 +0 2 +cob=(7) +cfi=(53) +cfn=(1468) +calls=1 0 +0 100 +0 2 +cob=(7) +cfi=(53) +cfn=(1468) +calls=1 0 +0 100 +0 2 +cob=(12) +cfi=(84) +cfn=(2576) MR::File::KeyValue::~KeyValue() +calls=1 0 +0 955 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 790 +0 8 +cob=(7) +cfi=(53) +cfn=(1310) +calls=1 0 +0 82 +0 433 +cob=(7) +cfi=(53) +cfn=(1258) +calls=16 0 +0 3427 +0 64 +cob=(7) +cfi=(53) +cfn=(1258) +calls=16 0 +0 240 +0 64 +cob=(12) +cfi=(84) +cfn=(2416) std::_Rb_tree, std::_Select1st >, std::less, std::allocator > >::_M_insert_unique_(std::_Rb_tree_const_iterator >, std::pair const&) +calls=16 0 +0 10533 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 2422 +0 80 +cob=(12) +cfi=(84) +cfn=(2432) std::pair::~pair() +calls=16 0 +0 496 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 766 +0 48 +cob=(7) +cfi=(53) +cfn=(1468) +calls=16 0 +0 112 +0 321 +cfn=(2342) +calls=61 0 +0 1132769 +0 488 +cfn=(2450) +calls=61 0 +0 13979 +0 69 +cfn=(2500) +calls=1 0 +0 411 +0 2210 +cob=(12) +cfi=(84) +cfn=(2512) +calls=1 0 +0 3211 +0 4 +cob=(9) +cfi=(58) +cfn=(2522) +calls=1 0 +0 209 +0 1 + +fn=(2238) +0 4034 +cob=(7) +cfi=(53) +cfn=(1730) +calls=107 0 +0 53515 +0 1070 +cob=(7) +cfi=(53) +cfn=(1788) +calls=107 0 +0 5799 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1474 +0 535 +cob=(7) +cfi=(53) +cfn=(1446) +calls=107 0 +0 25944 +0 535 +cob=(7) +cfi=(53) +cfn=(1794) +calls=107 0 +0 5291 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1722 +0 856 +cob=(7) +cfi=(53) +cfn=(1800) +calls=107 0 +0 5512 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1690 +0 963 +cob=(7) +cfi=(53) +cfn=(1446) +calls=107 0 +0 26900 +0 321 +cob=(7) +cfi=(53) +cfn=(1264) +calls=107 0 +0 13161 +0 1177 +cob=(7) +cfi=(53) +cfn=(1594) +calls=107 0 +0 4738 +0 1046 +cob=(7) +cfi=(53) +cfn=(1788) +calls=104 0 +0 4872 +0 832 +cob=(7) +cfi=(53) +cfn=(1446) +calls=104 0 +0 21379 +0 520 +cob=(7) +cfi=(53) +cfn=(1794) +calls=104 0 +0 5144 +0 832 +cob=(7) +cfi=(53) +cfn=(1800) +calls=104 0 +0 5616 +0 1248 +cob=(7) +cfi=(53) +cfn=(1446) +calls=104 0 +0 22084 +0 312 +cob=(7) +cfi=(53) +cfn=(1264) +calls=104 0 +0 12507 +0 1664 +cob=(7) +cfi=(53) +cfn=(1446) +calls=104 0 +0 25136 +0 520 +cob=(7) +cfi=(53) +cfn=(1794) +calls=104 0 +0 8676 +0 827 +cob=(7) +cfi=(53) +cfn=(1800) +calls=103 0 +0 5273 +0 1133 +cob=(7) +cfi=(53) +cfn=(1446) +calls=103 0 +0 25721 +0 312 +cob=(7) +cfi=(53) +cfn=(1264) +calls=104 0 +0 9797 +0 1151 +cob=(12) +cfi=(84) +cfn=(2012) +calls=1 0 +0 381 +0 3 +cob=(7) +cfi=(53) +cfn=(1258) +calls=1 0 +0 20 +0 4 +cob=(7) +cfi=(53) +cfn=(1772) +calls=1 0 +0 369 +0 6 +cob=(12) +cfi=(84) +cfn=(1396) +calls=1 0 +0 817 +0 4 +cob=(7) +cfi=(53) +cfn=(1258) +calls=1 0 +0 20 +0 4 +cob=(7) +cfi=(53) +cfn=(1772) +calls=1 0 +0 374 +0 2 +cfn=(2030) +calls=1 0 +0 7 +0 1946 +cob=(7) +cfi=(53) +cfn=(1372) +calls=107 0 +0 1284 +0 2014 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 57 +0 13 +cob=(7) +cfi=(53) +cfn=(1712) +calls=3 0 +0 24 +0 648 +cob=(7) +cfi=(53) +cfn=(1310) +calls=107 0 +0 8774 +0 541 +cob=(7) +cfi=(53) +cfn=(1310) +calls=1 0 +0 82 +0 7 +cob=(7) +cfi=(53) +cfn=(1310) +calls=1 0 +0 113 +0 7 +cob=(7) +cfi=(53) +cfn=(1310) +calls=1 0 +0 82 +0 7 +cob=(7) +cfi=(53) +cfn=(1310) +calls=1 0 +0 82 +0 619 +cob=(7) +cfi=(53) +cfn=(1310) +calls=103 0 +0 8446 +0 727 +cob=(7) +cfi=(53) +cfn=(1310) +calls=104 0 +0 8528 +0 110 +cob=(7) +cfi=(53) +cfn=(1310) +calls=1 0 +0 82 +0 3671 +cob=(7) +cfi=(53) +cfn=(1310) +calls=106 0 +0 8692 +0 1068 + +fn=(2276) +0 43 +cob=(7) +cfi=(53) +cfn=(2282) +calls=1 0 +0 88 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1634 +0 15 +cob=(7) +cfi=(53) +cfn=(2282) +calls=3 0 +0 266 +0 48 +cob=(7) +cfi=(53) +cfn=(1446) +calls=4 0 +0 748 +0 20 +cob=(7) +cfi=(53) +cfn=(1794) +calls=4 0 +0 196 +0 32 +cob=(7) +cfi=(53) +cfn=(1800) +calls=4 0 +0 204 +0 36 +cob=(7) +cfi=(53) +cfn=(1446) +calls=4 0 +0 907 +0 40 +cob=(7) +cfi=(53) +cfn=(1372) +calls=4 0 +0 48 +0 26 +cob=(4) +cfi=(118) +cfn=(2270) +calls=5 47 +0 60 +0 86 +cob=(7) +cfi=(53) +cfn=(1594) +calls=4 0 +0 176 +0 125 +cob=(7) +cfi=(53) +cfn=(1446) +calls=4 0 +0 748 +0 8 +cob=(7) +cfi=(53) +cfn=(722) +calls=4 0 +0 388 +0 108 +cob=(7) +cfi=(53) +cfn=(728) +calls=4 0 +0 2832 +0 68 +cob=(7) +cfi=(53) +cfn=(492) +calls=4 0 +0 156 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1459 +0 40 +cob=(7) +cfi=(53) +cfn=(1812) +calls=4 0 +0 754 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1514 +0 28 +cob=(7) +cfi=(53) +cfn=(1528) +calls=4 0 +0 84 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 2194 +0 16 +cob=(7) +cfi=(53) +cfn=(728) +calls=4 0 +0 2832 +0 12 +cob=(7) +cfi=(53) +cfn=(2302) +calls=4 0 +0 4625 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1394 +0 76 +cob=(7) +cfi=(53) +cfn=(746) +calls=4 0 +0 48 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1483 +0 44 +cob=(7) +cfi=(53) +cfn=(1556) +calls=4 0 +0 232 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1515 +0 52 +cob=(7) +cfi=(53) +cfn=(1310) +calls=4 0 +0 328 +0 22 +cob=(12) +cfi=(84) +cfn=(2330) std::vector >::_M_insert_aux(__gnu_cxx::__normal_iterator > >, int const&) +calls=3 0 +0 956 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1654 +0 27 +cob=(7) +cfi=(53) +cfn=(1310) +calls=4 0 +0 328 +0 44 +cob=(7) +cfi=(53) +cfn=(1310) +calls=4 0 +0 328 +0 32 +cob=(7) +cfi=(53) +cfn=(1310) +calls=4 0 +0 328 +0 52 + +fn=(2462) +0 27 +cob=(7) +cfi=(53) +cfn=(1468) +calls=1 0 +0 7 +0 2 +cob=(7) +cfi=(53) +cfn=(1468) +calls=1 0 +0 7 +0 13 +cob=(4) +cfi=(69) +cfn=(642) +calls=1 26 +0 22 +0 6 +cob=(4) +cfi=(69) +cfn=(642) +calls=2 26 +0 44 +0 12 +cob=(7) +cfi=(53) +cfn=(1574) +calls=3 0 +0 777 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1534 +0 12 +cob=(4) +cfi=(69) +cfn=(642) +calls=3 26 +0 48 +0 12 +cob=(7) +cfi=(53) +cfn=(1574) +calls=3 0 +0 789 +0 59 +cob=(7) +cfi=(53) +cfn=(1586) +calls=1 0 +0 38 +0 6 +cob=(7) +cfi=(53) +cfn=(1586) +calls=1 0 +0 38 +0 21 +cob=(12) +cfi=(84) +cfn=(2468) std::vector >::_M_fill_insert(__gnu_cxx::__normal_iterator > >, unsigned long, MR::Image::Axes::Axis const&) +calls=1 0 +0 570 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 2086 +0 1 + +fn=(2558) +0 19 +cob=(7) +cfi=(53) +cfn=(880) +calls=1 0 +0 166 +0 9 +cob=(7) +cfi=(53) +cfn=(1258) +calls=1 0 +0 20 +0 41 + +fn=(2564) +0 38 +cob=(7) +cfi=(53) +cfn=(1468) +calls=2 0 +0 115 +0 10 +cob=(7) +cfi=(53) +cfn=(1174) +calls=2 0 +0 162 +0 6 +cob=(7) +cfi=(53) +cfn=(1174) +calls=2 0 +0 162 +0 22 +cob=(7) +cfi=(53) +cfn=(1174) +calls=2 0 +0 162 + +fn=(2594) MR::Image::Header::sanitise() +0 18 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 298 +0 2 +cfn=(2206) +calls=1 0 +0 7 +0 2 +cob=(7) +cfi=(53) +cfn=(1468) +calls=1 0 +0 100 +0 8 +cfn=(2600) void MR::DataSet::Stride::sanitise(MR::Image::Axes&) +calls=1 0 +0 265 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1026 +0 3 +cfn=(2606) std::vector > MR::DataSet::Stride::order(MR::Image::Axes const&) +calls=1 0 +0 352 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1144 +0 62 +cob=(7) +cfi=(53) +cfn=(1174) +calls=1 0 +0 81 +0 16 +cob=(9) +cfi=(58) +cfn=(2616) gsl_permutation_alloc +calls=1 0 +0 212 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 955 +0 3 +cob=(9) +cfi=(58) +cfn=(2622) gsl_permutation_data +calls=1 0 +0 2 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 931 +0 36 +cob=(9) +cfi=(58) +cfn=(2622) +calls=1 0 +0 2 +0 38 +cob=(9) +cfi=(58) +cfn=(2622) +calls=1 0 +0 2 +0 38 +cob=(9) +cfi=(58) +cfn=(2622) +calls=1 0 +0 2 +0 3 +cob=(9) +cfi=(58) +cfn=(2622) +calls=1 0 +0 2 +0 7 +cob=(9) +cfi=(58) +cfn=(2622) +calls=1 0 +0 2 +0 3 +cob=(9) +cfi=(58) +cfn=(2622) +calls=1 0 +0 2 +0 8 +cob=(9) +cfi=(58) +cfn=(2622) +calls=1 0 +0 2 +0 3 +cob=(9) +cfi=(58) +cfn=(2622) +calls=1 0 +0 2 +0 9 +cob=(9) +cfi=(58) +cfn=(2622) +calls=1 0 +0 2 +0 21 +cob=(9) +cfi=(58) +cfn=(2628) gsl_permutation_free +calls=1 0 +0 165 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 931 +0 13 +cob=(9) +cfi=(58) +cfn=(2622) +calls=1 0 +0 2 +0 4 +cob=(9) +cfi=(58) +cfn=(2622) +calls=1 0 +0 2 +0 177 + +fn=(2600) +0 265 + +fn=(2606) +0 22 +cob=(7) +cfi=(53) +cfn=(880) +calls=1 0 +0 110 +0 58 +cfn=(2608) void std::__introsort_loop<__gnu_cxx::__normal_iterator > >, long, MR::DataSet::Stride::(anonymous namespace)::Compare >(__gnu_cxx::__normal_iterator > >, __gnu_cxx::__normal_iterator > >, long, MR::DataSet::Stride::(anonymous namespace)::Compare) +calls=1 0 +0 22 +0 6 +cfn=(2610) void std::__insertion_sort<__gnu_cxx::__normal_iterator > >, MR::DataSet::Stride::(anonymous namespace)::Compare >(__gnu_cxx::__normal_iterator > >, __gnu_cxx::__normal_iterator > >, MR::DataSet::Stride::(anonymous namespace)::Compare) +calls=1 0 +0 127 +0 7 + +fn=(2668) MR::Image::Handler::Default::execute() +0 55 +cfn=(2674) +calls=1 0 +0 22 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 750 +0 5 +cfn=(2674) +calls=1 0 +0 22 +0 19 +cfn=(2680) MR::Image::Handler::Default::map_files() +calls=1 0 +0 32716 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 961 +0 6 + +fn=(2498) MR::Image::Axes::check(std::vector > const&, unsigned long) +0 139 + +fn=(856) +0 3 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 24 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 3 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 24 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 + +fn=(874) std::tr1::_Hashtable, std::allocator >, std::_Select1st >, std::equal_to, std::tr1::hash, std::tr1::__detail::_Mod_range_hashing, std::tr1::__detail::_Default_ranged_hash, std::tr1::__detail::_Prime_rehash_policy, false, false, true>::_M_allocate_buckets(unsigned long) +0 8 +cob=(7) +cfi=(53) +cfn=(880) +calls=1 0 +0 62514 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1299 +0 56 + +fn=(998) +0 3 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 24 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 + +fn=(1018) +0 3 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 24 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 + +fn=(1412) MR::App::parse_arguments() +0 85 +cfn=(1418) MR::ArgBase::ArgBase(MR::Argument const&, char const*) +calls=2 0 +0 58 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 866 +0 3105 +cfn=(1418) +calls=3 0 +0 87 +0 42 +cfn=(1424) +calls=3 0 +0 504 +0 34 +cfn=(1424) +calls=2 0 +0 442 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1421 +0 57 +cob=(12) +cfi=(84) +cfn=(1430) std::vector >::_M_insert_aux(__gnu_cxx::__normal_iterator > >, MR::OptBase const&) +calls=3 0 +0 2008 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1926 +0 6 + +fn=(1418) +0 145 + +fn=(2084) std::vector >::_M_check_len(unsigned long, char const*) const +0 40 + +fn=(2120) MR::Image::NameParser::name(std::vector > const&) +0 58 +cob=(7) +cfi=(53) +cfn=(1258) +calls=2 0 +0 40 +0 8 +cfn=(2126) MR::Path::join(std::string const&, std::string const&) +calls=2 0 +0 4171 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 774 +0 4 +cob=(7) +cfi=(53) +cfn=(1468) +calls=2 0 +0 30 +0 2 + +fn=(2126) +0 60 +cob=(7) +cfi=(53) +cfn=(934) +calls=2 0 +0 400 +0 14 +cob=(7) +cfi=(53) +cfn=(1372) +calls=2 0 +0 24 +0 14 +cob=(7) +cfi=(53) +cfn=(1258) +calls=2 0 +0 40 +0 8 +cob=(7) +cfi=(53) +cfn=(1378) +calls=2 0 +0 957 +0 8 +cob=(7) +cfi=(53) +cfn=(1258) +calls=2 0 +0 40 +0 6 +cob=(7) +cfi=(53) +cfn=(1406) +calls=2 0 +0 642 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1548 +0 4 +cob=(7) +cfi=(53) +cfn=(1468) +calls=2 0 +0 200 +0 4 +cob=(7) +cfi=(53) +cfn=(1468) +calls=2 0 +0 200 +0 2 + +fn=(2206) +0 56 + +fn=(2384) +0 42 +cob=(4) +cfi=(69) +cfn=(642) +calls=2 26 +0 32 +0 12 +cob=(4) +cfi=(69) +cfn=(642) +calls=6 26 +0 96 +0 40 +cob=(7) +cfi=(53) +cfn=(2282) +calls=8 0 +0 2196 +0 80 +cob=(7) +cfi=(53) +cfn=(1446) +calls=8 0 +0 1488 +0 32 +cob=(7) +cfi=(53) +cfn=(1258) +calls=2 0 +0 30 +0 150 +cob=(12) +cfi=(84) +cfn=(2390) std::vector >::_M_insert_aux(__gnu_cxx::__normal_iterator > >, std::string const&) +calls=6 0 +0 2158 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1710 +0 54 + +fn=(2680) +0 17 +cob=(12) +cfi=(84) +cfn=(2012) +calls=1 0 +0 498 +0 3 +cob=(7) +cfi=(53) +cfn=(1258) +calls=1 0 +0 20 +0 4 +cob=(7) +cfi=(53) +cfn=(1772) +calls=1 0 +0 383 +0 2 +cfn=(2206) +calls=1 0 +0 7 +0 12 +cob=(7) +cfi=(53) +cfn=(880) +calls=1 0 +0 126 +0 55 +cob=(7) +cfi=(53) +cfn=(880) +calls=1 0 +0 180 +0 10 +cob=(7) +cfi=(53) +cfn=(1258) +calls=1 0 +0 20 +0 7 +cfn=(2698) +calls=1 0 +0 26839 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 741 +0 23 +cfn=(2692) +calls=1 0 +0 358 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1366 +0 7 +cfn=(2686) +calls=1 0 +0 216 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1603 +0 8 +cob=(7) +cfi=(53) +cfn=(1310) +calls=1 0 +0 82 +0 7 +cob=(7) +cfi=(53) +cfn=(1310) +calls=1 0 +0 113 +0 9 + +fn=(858) +0 3 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 24 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 + +fn=(862) +0 5 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 24 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 78 +cob=(6) +cfi=(70) /build/buildd/eglibc-2.11.1/math/../sysdeps/ieee754/flt-32/s_ceilf.c +cfn=(868) ceilf +calls=1 39 +0 15 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1414 +0 8 +cfn=(874) +calls=1 0 +0 63877 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 2458 +0 8 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 + +fn=(926) +0 3 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 24 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 + +fn=(1000) +0 3 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 24 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 + +fn=(1020) +0 3 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 24 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 + +fn=(1320) std::vector >::_M_insert_aux(__gnu_cxx::__normal_iterator > >, MR::ParsedOption const&) +0 68 +cob=(7) +cfi=(53) +cfn=(880) +calls=3 0 +0 500 +0 99 +cob=(4) +cfi=(90) +cfn=(1282) +calls=3 47 +0 72 +0 86 +cob=(7) +cfi=(53) +cfn=(880) +calls=3 0 +0 415 +0 39 +cob=(4) +cfi=(90) +cfn=(1282) +calls=3 47 +0 219 +0 76 +cob=(7) +cfi=(53) +cfn=(1174) +calls=3 0 +0 243 +0 23 +cob=(7) +cfi=(53) +cfn=(1174) +calls=2 0 +0 162 +0 78 + +fn=(2078) std::vector >::_M_insert_aux(__gnu_cxx::__normal_iterator > >, MR::Image::NameParserItem const&) +0 48 +cfn=(2084) +calls=2 0 +0 40 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1154 +0 16 +cfn=(2090) +calls=2 0 +0 240 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1172 +0 20 +cfn=(2096) +calls=2 0 +0 176 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 874 +0 12 +cfn=(2102) +calls=2 0 +0 42 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1297 +0 12 +cfn=(2102) +calls=2 0 +0 42 +0 28 + +fn=(2174) MR::Image::Format::Pipe::read(MR::Image::Header&) const +0 12 +cob=(7) +cfi=(53) +cfn=(1594) +calls=1 0 +0 44 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1506 +0 11 + +fn=(2582) MR::Image::Header::Header(MR::Image::Header const&) +0 19 +cob=(12) +cfi=(84) +cfn=(2588) std::_Rb_tree, std::_Select1st >, std::less, std::allocator > >::_M_copy(std::_Rb_tree_node > const*, std::_Rb_tree_node >*) +calls=1 0 +0 4662 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 2102 +0 269 +cob=(7) +cfi=(53) +cfn=(880) +calls=1 0 +0 168 +0 62 +cob=(7) +cfi=(53) +cfn=(1258) +calls=4 0 +0 75 +0 12 +cob=(7) +cfi=(53) +cfn=(1258) +calls=4 0 +0 75 +0 2777 +cob=(9) +cfi=(58) +cfn=(2506) gsl_block_float_alloc +calls=1 0 +0 212 +0 8 +cob=(9) +cfi=(58) +cfn=(2506) +calls=1 0 +0 262 +0 3 + +fn=(2610) +0 127 + +fn=(2776) void std::__insertion_sort<__gnu_cxx::__normal_iterator > >, MR::DataSet::Stride::(anonymous namespace)::Compare > >(__gnu_cxx::__normal_iterator > >, __gnu_cxx::__normal_iterator > >, MR::DataSet::Stride::(anonymous namespace)::Compare >) +0 120 + +fn=(2500) +0 50 +cob=(9) +cfi=(58) +cfn=(2506) +calls=2 0 +0 594 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 947 +0 8 + +fn=(478) +0 3 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 102531 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1579 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1778 + +fn=(860) +0 3 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 24 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 3 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 24 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 + +fn=(912) +0 3 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 24 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 + +fn=(988) +0 3 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 24 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 + +fn=(1002) +0 3 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 24 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 + +fn=(1022) +0 3 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 24 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 + +fn=(2160) +0 44 + +fn=(2172) +0 12 +cob=(7) +cfi=(53) +cfn=(1468) +calls=2 0 +0 14 +0 4 +cob=(7) +cfi=(53) +cfn=(1468) +calls=2 0 +0 30 +0 4 +cob=(7) +cfi=(53) +cfn=(1468) +calls=2 0 +0 200 +0 26 +cob=(7) +cfi=(53) +cfn=(1468) +calls=2 0 +0 200 +0 20 +cob=(7) +cfi=(53) +cfn=(1174) +calls=2 0 +0 162 + +fn=(2488) +0 22 +cob=(7) +cfi=(53) +cfn=(880) +calls=1 0 +0 110 +0 133 +cob=(7) +cfi=(53) +cfn=(1446) +calls=4 0 +0 784 +0 8 +cob=(7) +cfi=(53) +cfn=(722) +calls=4 0 +0 388 +0 84 +cob=(7) +cfi=(53) +cfn=(728) +calls=4 0 +0 2832 +0 64 +cob=(7) +cfi=(53) +cfn=(492) +calls=4 0 +0 156 +0 36 +cob=(7) +cfi=(53) +cfn=(1812) +calls=4 0 +0 748 +0 24 +cob=(7) +cfi=(53) +cfn=(1528) +calls=4 0 +0 84 +0 12 +cob=(7) +cfi=(53) +cfn=(728) +calls=4 0 +0 2832 +0 12 +cob=(7) +cfi=(53) +cfn=(2308) +calls=4 0 +0 1465 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1664 +0 76 +cob=(7) +cfi=(53) +cfn=(746) +calls=4 0 +0 48 +0 44 +cob=(7) +cfi=(53) +cfn=(1556) +calls=4 0 +0 232 +0 112 +cfn=(2498) +calls=1 0 +0 139 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 955 +0 37 +cob=(7) +cfi=(53) +cfn=(1310) +calls=4 0 +0 328 +0 48 +cob=(7) +cfi=(53) +cfn=(1310) +calls=4 0 +0 328 +0 20 + +fn=(2666) MR::Image::Handler::Base::prepare() +0 23 +cfn=(2668) +calls=1 0 +0 34556 +0 18 +cob=(7) +cfi=(53) +cfn=(880) +calls=1 0 +0 110 +0 63 +cfn=(2772) std::vector >::operator=(std::vector > const&) +calls=1 0 +0 226 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 794 +0 4 +cob=(7) +cfi=(53) +cfn=(1174) +calls=1 0 +0 81 +0 87 +cob=(7) +cfi=(53) +cfn=(1174) +calls=1 0 +0 81 +0 42 +cob=(7) +cfi=(53) +cfn=(722) +calls=1 0 +0 97 +0 23 +cob=(7) +cfi=(53) +cfn=(728) +calls=1 0 +0 708 +0 16 +cob=(7) +cfi=(53) +cfn=(492) +calls=1 0 +0 39 +0 11 +cob=(7) +cfi=(53) +cfn=(728) +calls=1 0 +0 708 +0 4 +cob=(7) +cfi=(53) +cfn=(1506) +calls=1 0 +0 631 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 2456 +0 11 +cob=(7) +cfi=(53) +cfn=(2714) +calls=1 0 +0 290 +0 9 +cob=(7) +cfi=(53) +cfn=(2714) +calls=3 0 +0 850 +0 16 +cob=(7) +cfi=(53) +cfn=(1506) +calls=4 0 +0 492 +0 32 +cob=(7) +cfi=(53) +cfn=(1506) +calls=1 0 +0 123 +0 25 +cob=(7) +cfi=(53) +cfn=(746) +calls=1 0 +0 12 +0 9 +cob=(7) +cfi=(53) +cfn=(1556) +calls=1 0 +0 58 +0 2 +cob=(7) +cfi=(53) +cfn=(722) +calls=1 0 +0 97 +0 19 +cob=(7) +cfi=(53) +cfn=(728) +calls=1 0 +0 708 +0 15 +cob=(7) +cfi=(53) +cfn=(492) +calls=1 0 +0 39 +0 9 +cob=(7) +cfi=(53) +cfn=(728) +calls=1 0 +0 708 +0 3 +cob=(7) +cfi=(53) +cfn=(2786) +calls=1 0 +0 715 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1648 +0 5 +cob=(7) +cfi=(53) +cfn=(1534) +calls=1 0 +0 257 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 2082 +0 16 +cob=(7) +cfi=(53) +cfn=(746) +calls=1 0 +0 12 +0 9 +cob=(7) +cfi=(53) +cfn=(1556) +calls=1 0 +0 58 +0 10 +cob=(7) +cfi=(53) +cfn=(1384) +calls=1 0 +0 180 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1450 +0 4 +cob=(7) +cfi=(53) +cfn=(1772) +calls=1 0 +0 64 +0 3 +cob=(7) +cfi=(53) +cfn=(1406) +calls=1 0 +0 82 +0 4 +cob=(7) +cfi=(53) +cfn=(1258) +calls=1 0 +0 20 +0 4 +cob=(7) +cfi=(53) +cfn=(1772) +calls=1 0 +0 326 +0 5 +cob=(12) +cfi=(84) +cfn=(1396) +calls=1 0 +0 319 +0 4 +cob=(7) +cfi=(53) +cfn=(1258) +calls=1 0 +0 20 +0 4 +cob=(7) +cfi=(53) +cfn=(1772) +calls=1 0 +0 496 +0 5 +cob=(12) +cfi=(84) +cfn=(1396) +calls=1 0 +0 409 +0 2 +cfn=(2030) +calls=1 0 +0 7 +0 34 +cob=(7) +cfi=(53) +cfn=(1310) +calls=1 0 +0 82 +0 7 +cob=(7) +cfi=(53) +cfn=(880) +calls=1 0 +0 110 +0 56 +cfn=(2774) void std::__introsort_loop<__gnu_cxx::__normal_iterator > >, long, MR::DataSet::Stride::(anonymous namespace)::Compare > >(__gnu_cxx::__normal_iterator > >, __gnu_cxx::__normal_iterator > >, long, MR::DataSet::Stride::(anonymous namespace)::Compare >) +calls=1 0 +0 22 +0 6 +cob=(12) +cfi=(84) +cfn=(2736) +calls=1 0 +0 184 +0 7 +cob=(7) +cfi=(53) +cfn=(1264) +calls=1 0 +0 28 +0 12 +cfn=(2776) +calls=1 0 +0 120 +0 12 +cob=(7) +cfi=(53) +cfn=(1310) +calls=1 0 +0 82 +0 15 +cob=(7) +cfi=(53) +cfn=(1310) +calls=1 0 +0 82 +0 7 +cob=(7) +cfi=(53) +cfn=(1310) +calls=1 0 +0 82 +0 15 +cob=(7) +cfi=(53) +cfn=(1310) +calls=1 0 +0 82 +0 7 +cob=(7) +cfi=(53) +cfn=(1310) +calls=1 0 +0 113 +0 15 +cob=(7) +cfi=(53) +cfn=(1310) +calls=1 0 +0 82 +0 11 +cob=(7) +cfi=(53) +cfn=(1310) +calls=1 0 +0 126 +0 11 +cob=(7) +cfi=(53) +cfn=(1310) +calls=1 0 +0 126 +0 5 + +fn=(914) +0 3 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 24 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 + +fn=(990) +0 3 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 24 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 7 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 66 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 + +fn=(1004) +0 3 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 24 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 + +fn=(1024) +0 3 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 24 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 + +fn=(2062) +0 36 +cob=(7) +cfi=(53) +cfn=(1586) +calls=2 0 +0 76 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1506 +0 12 +cob=(7) +cfi=(53) +cfn=(1264) +calls=2 0 +0 56 +0 8 +cfn=(2072) std::vector >::insert(__gnu_cxx::__normal_iterator > >, MR::Image::NameParserItem const&) +calls=2 0 +0 6756 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1477 +0 4 +cfn=(2108) +calls=2 0 +0 46 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 838 +0 10 + +fn=(2166) +0 58 + +fn=(2342) +0 6436 +cob=(7) +cfi=(53) +cfn=(1788) +calls=195 0 +0 8277 +0 260 +cob=(7) +cfi=(53) +cfn=(1788) +calls=65 0 +0 3040 +0 2860 +cob=(7) +cfi=(53) +cfn=(1446) +calls=260 0 +0 52580 +0 780 +cob=(7) +cfi=(53) +cfn=(1594) +calls=260 0 +0 11450 +0 2852 +cob=(7) +cfi=(53) +cfn=(1446) +calls=259 0 +0 52390 +0 777 +cob=(7) +cfi=(53) +cfn=(722) +calls=259 0 +0 25123 +0 6734 +cob=(7) +cfi=(53) +cfn=(728) +calls=259 0 +0 183372 +0 4144 +cob=(7) +cfi=(53) +cfn=(492) +calls=259 0 +0 10101 +0 2331 +cob=(7) +cfi=(53) +cfn=(1812) +calls=259 0 +0 50362 +0 1554 +cob=(7) +cfi=(53) +cfn=(1528) +calls=259 0 +0 5439 +0 777 +cob=(7) +cfi=(53) +cfn=(728) +calls=259 0 +0 183372 +0 777 +cob=(7) +cfi=(53) +cfn=(2348) +calls=259 0 +0 420937 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1648 +0 4921 +cob=(7) +cfi=(53) +cfn=(746) +calls=259 0 +0 3108 +0 2590 +cob=(7) +cfi=(53) +cfn=(1556) +calls=259 0 +0 15022 +0 3108 +cob=(7) +cfi=(53) +cfn=(1310) +calls=259 0 +0 21238 +0 1429 +cfn=(2372) std::vector >::_M_insert_aux(__gnu_cxx::__normal_iterator > >, float const&) +calls=195 0 +0 60150 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1243 +0 1755 +cob=(7) +cfi=(53) +cfn=(1310) +calls=260 0 +0 21320 +0 1814 +cob=(7) +cfi=(53) +cfn=(1310) +calls=259 0 +0 21238 +0 3371 + +fn=(2450) +0 2154 +cob=(4) +cfi=(90) +cfn=(1282) +calls=54 47 +0 1296 +0 170 +cob=(7) +cfi=(53) +cfn=(880) +calls=10 0 +0 2687 +0 100 +cob=(4) +cfi=(90) +cfn=(1282) +calls=10 47 +0 835 +0 70 +cob=(4) +cfi=(90) +cfn=(1282) +calls=10 47 +0 620 +0 100 +cob=(4) +cfi=(90) +cfn=(1282) +calls=10 47 +0 240 +0 38 +cob=(7) +cfi=(53) +cfn=(1174) +calls=8 0 +0 725 +0 714 +cob=(4) +cfi=(90) +cfn=(1282) +calls=54 47 +0 3348 +0 324 +cob=(4) +cfi=(90) +cfn=(1282) +calls=54 47 +0 1296 +0 418 + +fn=(2456) +0 271 +cob=(7) +cfi=(53) +cfn=(1174) +calls=67 0 +0 5500 +0 1 + +fn=(2772) +0 38 +cob=(7) +cfi=(53) +cfn=(880) +calls=1 0 +0 110 +0 5 +cob=(4) +cfi=(90) +cfn=(1282) +calls=1 47 +0 66 +0 7 + +fn=(2774) +0 22 + +fn=(916) +0 3 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 24 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 + +fn=(1026) +0 3 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 24 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 + +fn=(1270) +0 128 +cfn=(1292) MR::App::match_option(char const*) const +calls=4 0 +0 18326 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 804 +0 189 +cob=(4) +cfi=(90) +cfn=(1282) +calls=1 47 +0 24 +0 176 +cfn=(1276) +calls=3 0 +0 672 +0 14 +cfn=(1276) +calls=2 0 +0 3623 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1315 +0 27 +cfn=(1320) +calls=3 0 +0 2080 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1467 +0 6 + +fn=(1292) +0 56 +cob=(7) +cfi=(53) +cfn=(934) +calls=4 0 +0 1068 +0 3492 +cob=(7) +cfi=(53) +cfn=(1298) +calls=216 0 +0 5233 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1562 +0 456 +cfn=(1304) +calls=4 0 +0 1066 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1251 +0 56 +cob=(7) +cfi=(53) +cfn=(1298) +calls=4 0 +0 96 +0 112 +cob=(7) +cfi=(53) +cfn=(1298) +calls=16 0 +0 386 +0 192 +cob=(7) +cfi=(53) +cfn=(1174) +calls=4 0 +0 324 +0 72 +cob=(7) +cfi=(53) +cfn=(1310) +calls=4 0 +0 1198 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1682 +0 24 + +fn=(1344) +0 15 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 315 +0 6 +cob=(4) +cfi=(95) +cfn=(1350) +calls=1 37 +0 14 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1738 +0 3 +cob=(4) +cfi=(96) +cfn=(1356) +calls=1 34 +0 3 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1834 +0 16 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 229 +0 2 +cob=(4) +cfi=(97) +cfn=(1362) +calls=1 36 +0 144 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1708 +0 7 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 229 +0 17 +cob=(4) +cfi=(95) +cfn=(1350) +calls=1 37 +0 14 +0 3 +cob=(4) +cfi=(96) +cfn=(1356) +calls=1 34 +0 3 +0 23 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 285 +0 7 +cob=(7) +cfi=(53) +cfn=(1372) +calls=1 0 +0 12 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1538 +0 7 +cob=(7) +cfi=(53) +cfn=(1258) +calls=1 0 +0 20 +0 4 +cob=(7) +cfi=(53) +cfn=(1378) +calls=1 0 +0 2283 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1458 +0 7 +cob=(12) +cfi=(84) +cfn=(1396) +calls=1 0 +0 3373 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1238 +0 14 +cob=(7) +cfi=(53) +cfn=(1310) +calls=1 0 +0 82 +0 7 +cob=(7) +cfi=(53) +cfn=(1310) +calls=1 0 +0 82 +0 15 +cob=(7) +cfi=(53) +cfn=(1310) +calls=1 0 +0 82 +0 12 +cob=(7) +cfi=(53) +cfn=(1310) +calls=1 0 +0 82 +0 7 +cob=(7) +cfi=(53) +cfn=(1310) +calls=1 0 +0 82 +0 15 +cob=(7) +cfi=(53) +cfn=(1310) +calls=1 0 +0 82 +0 5 + +fn=(2006) MR::Image::Header::open(std::string const&, bool) +0 55 +cob=(12) +cfi=(84) +cfn=(2012) +calls=1 0 +0 5239 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1270 +0 4 +cob=(7) +cfi=(53) +cfn=(1258) +calls=1 0 +0 20 +0 4 +cob=(7) +cfi=(53) +cfn=(1772) +calls=1 0 +0 329 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1508 +0 2 +cfn=(2030) +calls=1 0 +0 7 +0 2 +cob=(7) +cfi=(53) +cfn=(1468) +calls=1 0 +0 100 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1440 +0 2 +cob=(7) +cfi=(53) +cfn=(1468) +calls=1 0 +0 100 +0 10 +cfn=(2040) +calls=1 0 +0 32359 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1043 +0 6 +cob=(7) +cfi=(53) +cfn=(1258) +calls=1 0 +0 20 +0 5 +cob=(7) +cfi=(53) +cfn=(1264) +calls=1 0 +0 28 +0 2 +cob=(7) +cfi=(53) +cfn=(1468) +calls=1 0 +0 15 +0 13 +cfn=(2582) +calls=1 0 +0 10706 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 811 +0 13 +cfn=(2594) +calls=1 0 +0 6965 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 821 +0 5 +cob=(7) +cfi=(53) +cfn=(1264) +calls=1 0 +0 36 +0 2 +cob=(12) +cfi=(84) +cfn=(2634) MR::Image::Header::~Header() +calls=1 0 +0 3775 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 774 +0 5 +cfn=(2564) +calls=1 0 +0 381 +0 26 +cfn=(2182) +calls=1 0 +0 1797277 +cfn=(2180) MR::Image::Format::DICOM::read(MR::Image::Header&) const +calls=1 0 +0 37 +cfn=(2174) +calls=1 0 +0 1573 +0 9 +cob=(7) +cfi=(53) +cfn=(880) +calls=1 0 +0 168 +0 20 + +fn=(2072) +0 36 +cfn=(2078) +calls=2 0 +0 5173 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1523 +0 24 + +fn=(2114) +0 68 +cfn=(2120) +calls=2 0 +0 5087 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 984 +0 4 +cob=(7) +cfi=(53) +cfn=(880) +calls=2 0 +0 220 +0 46 +cob=(4) +cfi=(90) +cfn=(1282) +calls=2 47 +0 48 +0 8 +cob=(7) +cfi=(53) +cfn=(1258) +calls=2 0 +0 40 +0 6 +cob=(7) +cfi=(53) +cfn=(880) +calls=2 0 +0 220 +0 14 +cfn=(2142) MR::RefPtr::~RefPtr() +calls=2 0 +0 20 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 955 +0 4 +cob=(7) +cfi=(53) +cfn=(1468) +calls=2 0 +0 30 +0 10 +cfn=(2136) std::vector, std::allocator > >::_M_insert_aux(__gnu_cxx::__normal_iterator*, std::vector, std::allocator > > >, MR::RefPtr const&) +calls=2 0 +0 406 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1699 +0 2 + +fn=(2136) +0 40 +cob=(7) +cfi=(53) +cfn=(880) +calls=2 0 +0 276 +0 90 + +fn=(2142) +0 20 + +fn=(2180) +0 12 +cob=(4) +cfi=(95) +cfn=(1350) +calls=1 37 +0 10 +0 15 + +fn=(2372) +0 5850 +cob=(7) +cfi=(53) +cfn=(880) +calls=195 0 +0 21540 +0 2925 +cob=(4) +cfi=(90) +cfn=(1282) +calls=195 47 +0 9490 +0 1560 +cob=(4) +cfi=(90) +cfn=(1282) +calls=195 47 +0 4680 +0 715 +cob=(7) +cfi=(53) +cfn=(1174) +calls=130 0 +0 10530 +0 2860 + +fn=(2608) +0 22 + +fn=(3398) +0 8 +cob=(7) +cfi=(53) +cfn=(1594) +calls=4 0 +0 248 +0 16 + +ob=(12) +fl=(84) +fn=(2824) std::vector >::operator=(std::vector > const&) +0 10032 +cob=(7) +cfi=(53) +cfn=(880) +calls=264 0 +0 79524 +0 1320 +cob=(4) +cfi=(90) +cfn=(1282) +calls=264 47 +0 56760 +0 1848 + +fn=(1148) global constructors keyed to state.cpp +0 5 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 24 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 5 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 + +fn=(1152) global constructors keyed to KCutil.cpp +0 7 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 319 +0 6 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 344 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 330 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 313 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 317 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 + +fn=(1188) global constructors keyed to walker.cpp +0 6 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 24 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 5 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 304 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 5 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 360 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 5 + +fn=(1200) global constructors keyed to KMrand.cpp +0 7 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 319 +0 6 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 344 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 330 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 313 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 317 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 + +fn=(1212) global constructors keyed to midpoint_in_cube.cpp +0 6 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 24 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 319 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 344 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 330 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 313 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 317 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 5 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 313 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 8 + +fn=(1214) global constructors keyed to flat_top_quadratic.cpp +0 6 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 24 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 319 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 344 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 330 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 313 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 317 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 5 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 328 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 5 + +fn=(1218) global constructors keyed to distribution.cpp +0 3 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 24 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 + +fn=(1396) +0 2088 +cob=(7) +cfi=(53) +cfn=(1258) +calls=348 0 +0 6950 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1426 +0 1044 +cob=(7) +cfi=(53) +cfn=(1406) +calls=348 0 +0 92628 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1548 +0 1740 + +fn=(1434) MyApp::execute() +0 18 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 253 +0 7 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 316 +0 4 +cob=(7) +cfi=(53) +cfn=(1258) +calls=1 0 +0 20 +0 4 +cfn=(1436) BTS::File::extension(std::string) +calls=1 0 +0 6478 +0 4 +cob=(7) +cfi=(53) +cfn=(1258) +calls=1 0 +0 20 +0 4 +cfn=(1436) +calls=1 0 +0 448 +0 7 +cob=(4) +cfi=(100) +cfn=(1476) +calls=1 25 +0 27 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1698 +0 4 +cob=(7) +cfi=(53) +cfn=(1468) +calls=1 0 +0 1177 +0 2 +cob=(7) +cfi=(53) +cfn=(1468) +calls=1 0 +0 15 +0 2 +cob=(7) +cfi=(53) +cfn=(1468) +calls=1 0 +0 100 +0 2 +cob=(7) +cfi=(53) +cfn=(1468) +calls=1 0 +0 15 +0 7 +cob=(7) +cfi=(53) +cfn=(1258) +calls=1 0 +0 20 +0 5 +cfn=(1436) +calls=1 0 +0 448 +0 3 +cfn=(1482) T.14247 +calls=1 0 +0 7620 +0 3 +cob=(7) +cfi=(53) +cfn=(1500) +calls=1 0 +0 5442 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 2082 +0 4 +cob=(7) +cfi=(53) +cfn=(1534) +calls=1 0 +0 2330 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 2082 +0 2 +cob=(7) +cfi=(53) +cfn=(1550) +calls=1 0 +0 3791 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 2082 +0 4 +cob=(7) +cfi=(53) +cfn=(1258) +calls=1 0 +0 20 +0 10 +cob=(7) +cfi=(53) +cfn=(1246) +calls=1 0 +0 160 +0 7 +cob=(7) +cfi=(53) +cfn=(1446) +calls=1 0 +0 402 +0 4 +cob=(7) +cfi=(53) +cfn=(1264) +calls=1 0 +0 28 +0 2 +cob=(7) +cfi=(53) +cfn=(1468) +calls=1 0 +0 15 +0 5 +cfn=(1396) +calls=1 0 +0 425 +0 6 +cfn=(1396) +calls=1 0 +0 431 +0 2 +cob=(7) +cfi=(53) +cfn=(1468) +calls=1 0 +0 100 +0 2 +cob=(7) +cfi=(53) +cfn=(1468) +calls=1 0 +0 100 +0 2 +cob=(7) +cfi=(53) +cfn=(1468) +calls=1 0 +0 15 +0 2 +cob=(7) +cfi=(53) +cfn=(1468) +calls=1 0 +0 100 +0 2 +cob=(7) +cfi=(53) +cfn=(1468) +calls=1 0 +0 100 +0 2 +cob=(7) +cfi=(53) +cfn=(1468) +calls=1 0 +0 15 +0 5 +cob=(7) +cfi=(53) +cfn=(1258) +calls=1 0 +0 20 +0 4 +cfn=(1436) +calls=1 0 +0 448 +0 2 +cfn=(1482) +calls=1 0 +0 2348 +0 3 +cob=(7) +cfi=(53) +cfn=(1500) +calls=1 0 +0 528 +0 4 +cob=(7) +cfi=(53) +cfn=(1534) +calls=1 0 +0 264 +0 2 +cob=(7) +cfi=(53) +cfn=(1550) +calls=1 0 +0 420 +0 4 +cob=(7) +cfi=(53) +cfn=(1258) +calls=1 0 +0 20 +0 8 +cob=(7) +cfi=(53) +cfn=(1246) +calls=1 0 +0 160 +0 7 +cob=(7) +cfi=(53) +cfn=(1446) +calls=1 0 +0 410 +0 4 +cob=(7) +cfi=(53) +cfn=(1264) +calls=1 0 +0 28 +0 2 +cob=(7) +cfi=(53) +cfn=(1468) +calls=1 0 +0 15 +0 5 +cfn=(1396) +calls=1 0 +0 381 +0 6 +cfn=(1396) +calls=1 0 +0 481 +0 2 +cob=(7) +cfi=(53) +cfn=(1468) +calls=1 0 +0 100 +0 2 +cob=(7) +cfi=(53) +cfn=(1468) +calls=1 0 +0 100 +0 2 +cob=(7) +cfi=(53) +cfn=(1468) +calls=1 0 +0 15 +0 2 +cob=(7) +cfi=(53) +cfn=(1468) +calls=1 0 +0 100 +0 2 +cob=(7) +cfi=(53) +cfn=(1468) +calls=1 0 +0 100 +0 2 +cob=(7) +cfi=(53) +cfn=(1468) +calls=1 0 +0 15 +0 10 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 319 +0 6 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 225 +0 27 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 228 +0 5 +cfn=(1588) MR::App::get_options(std::string const&) +calls=1 0 +0 2289 +0 5 +cfn=(1596) std::vector >::operator=(std::vector > const&) +calls=1 0 +0 505 +0 2 +cfn=(1598) std::vector >::~vector() +calls=1 0 +0 185 +0 2 +cob=(7) +cfi=(53) +cfn=(1468) +calls=1 0 +0 100 +0 53 +cob=(7) +cfi=(53) +cfn=(1574) +calls=1 0 +0 418 +0 5 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 224 +0 5 +cfn=(1588) +calls=1 0 +0 280 +0 3 +cfn=(1596) +calls=1 0 +0 136 +0 2 +cfn=(1598) +calls=1 0 +0 15 +0 2 +cob=(7) +cfi=(53) +cfn=(1468) +calls=1 0 +0 100 +0 11 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 233 +0 5 +cfn=(1588) +calls=1 0 +0 682 +0 3 +cfn=(1596) +calls=1 0 +0 218 +0 2 +cfn=(1598) +calls=1 0 +0 185 +0 2 +cob=(7) +cfi=(53) +cfn=(1468) +calls=1 0 +0 100 +0 24 +cob=(7) +cfi=(53) +cfn=(1574) +calls=1 0 +0 108 +0 5 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 234 +0 5 +cfn=(1588) +calls=1 0 +0 544 +0 3 +cfn=(1596) +calls=1 0 +0 102 +0 2 +cfn=(1598) +calls=1 0 +0 103 +0 2 +cob=(7) +cfi=(53) +cfn=(1468) +calls=1 0 +0 100 +0 10 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 223 +0 5 +cfn=(1588) +calls=1 0 +0 280 +0 3 +cfn=(1596) +calls=1 0 +0 136 +0 2 +cfn=(1598) +calls=1 0 +0 15 +0 2 +cob=(7) +cfi=(53) +cfn=(1468) +calls=1 0 +0 100 +0 11 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 319 +0 5 +cfn=(1588) +calls=1 0 +0 280 +0 3 +cfn=(1596) +calls=1 0 +0 47 +0 2 +cfn=(1598) +calls=1 0 +0 15 +0 2 +cob=(7) +cfi=(53) +cfn=(1468) +calls=1 0 +0 100 +0 11 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 225 +0 5 +cfn=(1588) +calls=1 0 +0 280 +0 3 +cfn=(1596) +calls=1 0 +0 47 +0 2 +cfn=(1598) +calls=1 0 +0 15 +0 2 +cob=(7) +cfi=(53) +cfn=(1468) +calls=1 0 +0 100 +0 11 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 234 +0 5 +cfn=(1588) +calls=1 0 +0 280 +0 3 +cfn=(1596) +calls=1 0 +0 47 +0 2 +cfn=(1598) +calls=1 0 +0 15 +0 2 +cob=(7) +cfi=(53) +cfn=(1468) +calls=1 0 +0 100 +0 9 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 356 +0 15 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 244 +0 5 +cfn=(1588) +calls=1 0 +0 280 +0 3 +cfn=(1596) +calls=1 0 +0 47 +0 2 +cfn=(1598) +calls=1 0 +0 15 +0 2 +cob=(7) +cfi=(53) +cfn=(1468) +calls=1 0 +0 100 +0 11 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 243 +0 5 +cfn=(1588) +calls=1 0 +0 280 +0 3 +cfn=(1596) +calls=1 0 +0 47 +0 2 +cfn=(1598) +calls=1 0 +0 15 +0 2 +cob=(7) +cfi=(53) +cfn=(1468) +calls=1 0 +0 100 +0 11 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 234 +0 5 +cfn=(1588) +calls=1 0 +0 280 +0 3 +cfn=(1596) +calls=1 0 +0 47 +0 2 +cfn=(1598) +calls=1 0 +0 15 +0 2 +cob=(7) +cfi=(53) +cfn=(1468) +calls=1 0 +0 100 +0 10 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 225 +0 5 +cfn=(1588) +calls=1 0 +0 280 +0 3 +cfn=(1596) +calls=1 0 +0 47 +0 2 +cfn=(1598) +calls=1 0 +0 15 +0 2 +cob=(7) +cfi=(53) +cfn=(1468) +calls=1 0 +0 100 +0 10 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 228 +0 5 +cfn=(1588) +calls=1 0 +0 280 +0 3 +cfn=(1596) +calls=1 0 +0 47 +0 2 +cfn=(1598) +calls=1 0 +0 15 +0 2 +cob=(7) +cfi=(53) +cfn=(1468) +calls=1 0 +0 100 +0 25 +cfn=(1602) MR::Math::Matrix::load(std::string const&) +calls=1 0 +0 820838 +0 22 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 234 +0 5 +cfn=(1588) +calls=1 0 +0 280 +0 3 +cfn=(1596) +calls=1 0 +0 47 +0 2 +cfn=(1598) +calls=1 0 +0 15 +0 2 +cob=(7) +cfi=(53) +cfn=(1468) +calls=1 0 +0 100 +0 11 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 234 +0 5 +cfn=(1588) +calls=1 0 +0 280 +0 3 +cfn=(1596) +calls=1 0 +0 47 +0 2 +cfn=(1598) +calls=1 0 +0 15 +0 2 +cob=(7) +cfi=(53) +cfn=(1468) +calls=1 0 +0 100 +0 11 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 234 +0 5 +cfn=(1588) +calls=1 0 +0 280 +0 3 +cfn=(1596) +calls=1 0 +0 47 +0 2 +cfn=(1598) +calls=1 0 +0 15 +0 2 +cob=(7) +cfi=(53) +cfn=(1468) +calls=1 0 +0 100 +0 26 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 234 +0 16 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 249 +0 5 +cfn=(1588) +calls=1 0 +0 280 +0 3 +cfn=(1596) +calls=1 0 +0 47 +0 2 +cfn=(1598) +calls=1 0 +0 15 +0 2 +cob=(7) +cfi=(53) +cfn=(1468) +calls=1 0 +0 100 +0 11 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 239 +0 5 +cfn=(1588) +calls=1 0 +0 280 +0 3 +cfn=(1596) +calls=1 0 +0 47 +0 2 +cfn=(1598) +calls=1 0 +0 15 +0 2 +cob=(7) +cfi=(53) +cfn=(1468) +calls=1 0 +0 100 +0 11 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 225 +0 5 +cfn=(1588) +calls=1 0 +0 280 +0 3 +cfn=(1596) +calls=1 0 +0 47 +0 2 +cfn=(1598) +calls=1 0 +0 15 +0 2 +cob=(7) +cfi=(53) +cfn=(1468) +calls=1 0 +0 100 +0 11 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 234 +0 5 +cfn=(1588) +calls=1 0 +0 280 +0 3 +cfn=(1596) +calls=1 0 +0 47 +0 2 +cfn=(1598) +calls=1 0 +0 15 +0 2 +cob=(7) +cfi=(53) +cfn=(1468) +calls=1 0 +0 100 +0 11 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 235 +0 5 +cfn=(1588) +calls=1 0 +0 280 +0 3 +cfn=(1596) +calls=1 0 +0 47 +0 2 +cfn=(1598) +calls=1 0 +0 15 +0 2 +cob=(7) +cfi=(53) +cfn=(1468) +calls=1 0 +0 100 +0 10 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 234 +0 5 +cfn=(1588) +calls=1 0 +0 280 +0 3 +cfn=(1596) +calls=1 0 +0 47 +0 2 +cfn=(1598) +calls=1 0 +0 15 +0 2 +cob=(7) +cfi=(53) +cfn=(1468) +calls=1 0 +0 100 +0 11 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 241 +0 5 +cfn=(1588) +calls=1 0 +0 280 +0 3 +cfn=(1596) +calls=1 0 +0 47 +0 2 +cfn=(1598) +calls=1 0 +0 15 +0 2 +cob=(7) +cfi=(53) +cfn=(1468) +calls=1 0 +0 100 +0 16 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 225 +0 12 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 225 +0 5 +cfn=(1588) +calls=1 0 +0 280 +0 3 +cfn=(1596) +calls=1 0 +0 47 +0 2 +cfn=(1598) +calls=1 0 +0 15 +0 2 +cob=(7) +cfi=(53) +cfn=(1468) +calls=1 0 +0 100 +0 11 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 229 +0 5 +cfn=(1588) +calls=1 0 +0 280 +0 3 +cfn=(1596) +calls=1 0 +0 47 +0 2 +cfn=(1598) +calls=1 0 +0 15 +0 2 +cob=(7) +cfi=(53) +cfn=(1468) +calls=1 0 +0 100 +0 11 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 230 +0 5 +cfn=(1588) +calls=1 0 +0 280 +0 3 +cfn=(1596) +calls=1 0 +0 47 +0 2 +cfn=(1598) +calls=1 0 +0 15 +0 2 +cob=(7) +cfi=(53) +cfn=(1468) +calls=1 0 +0 100 +0 10 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 235 +0 5 +cfn=(1588) +calls=1 0 +0 280 +0 3 +cfn=(1596) +calls=1 0 +0 47 +0 2 +cfn=(1598) +calls=1 0 +0 15 +0 2 +cob=(7) +cfi=(53) +cfn=(1468) +calls=1 0 +0 100 +0 14 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 234 +0 5 +cfn=(1588) +calls=1 0 +0 280 +0 3 +cfn=(1596) +calls=1 0 +0 47 +0 2 +cfn=(1598) +calls=1 0 +0 15 +0 2 +cob=(7) +cfi=(53) +cfn=(1468) +calls=1 0 +0 100 +0 11 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 245 +0 5 +cfn=(1588) +calls=1 0 +0 280 +0 3 +cfn=(1596) +calls=1 0 +0 47 +0 2 +cfn=(1598) +calls=1 0 +0 15 +0 2 +cob=(7) +cfi=(53) +cfn=(1468) +calls=1 0 +0 100 +0 16 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 230 +0 5 +cfn=(1588) +calls=1 0 +0 280 +0 3 +cfn=(1596) +calls=1 0 +0 47 +0 2 +cfn=(1598) +calls=1 0 +0 15 +0 2 +cob=(7) +cfi=(53) +cfn=(1468) +calls=1 0 +0 100 +0 17 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 234 +0 5 +cfn=(1588) +calls=1 0 +0 280 +0 3 +cfn=(1596) +calls=1 0 +0 47 +0 2 +cfn=(1598) +calls=1 0 +0 15 +0 2 +cob=(7) +cfi=(53) +cfn=(1468) +calls=1 0 +0 100 +0 19 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 239 +0 5 +cfn=(1588) +calls=1 0 +0 280 +0 3 +cfn=(1596) +calls=1 0 +0 47 +0 2 +cfn=(1598) +calls=1 0 +0 15 +0 2 +cob=(7) +cfi=(53) +cfn=(1468) +calls=1 0 +0 100 +0 19 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 234 +0 5 +cfn=(1588) +calls=1 0 +0 280 +0 3 +cfn=(1596) +calls=1 0 +0 47 +0 2 +cfn=(1598) +calls=1 0 +0 15 +0 2 +cob=(7) +cfi=(53) +cfn=(1468) +calls=1 0 +0 100 +0 19 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 230 +0 5 +cfn=(1588) +calls=1 0 +0 280 +0 3 +cfn=(1596) +calls=1 0 +0 47 +0 2 +cfn=(1598) +calls=1 0 +0 15 +0 2 +cob=(7) +cfi=(53) +cfn=(1468) +calls=1 0 +0 100 +0 19 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 234 +0 5 +cfn=(1588) +calls=1 0 +0 280 +0 3 +cfn=(1596) +calls=1 0 +0 47 +0 2 +cfn=(1598) +calls=1 0 +0 15 +0 2 +cob=(7) +cfi=(53) +cfn=(1468) +calls=1 0 +0 100 +0 25 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 223 +0 5 +cfn=(1588) +calls=1 0 +0 280 +0 3 +cfn=(1596) +calls=1 0 +0 47 +0 2 +cfn=(1598) +calls=1 0 +0 15 +0 2 +cob=(7) +cfi=(53) +cfn=(1468) +calls=1 0 +0 100 +0 17 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 234 +0 5 +cfn=(1588) +calls=1 0 +0 280 +0 3 +cfn=(1596) +calls=1 0 +0 47 +0 2 +cfn=(1598) +calls=1 0 +0 15 +0 2 +cob=(7) +cfi=(53) +cfn=(1468) +calls=1 0 +0 100 +0 17 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 230 +0 5 +cfn=(1588) +calls=1 0 +0 280 +0 3 +cfn=(1596) +calls=1 0 +0 47 +0 2 +cfn=(1598) +calls=1 0 +0 15 +0 2 +cob=(7) +cfi=(53) +cfn=(1468) +calls=1 0 +0 100 +0 20 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 238 +0 5 +cfn=(1588) +calls=1 0 +0 280 +0 3 +cfn=(1596) +calls=1 0 +0 47 +0 2 +cfn=(1598) +calls=1 0 +0 15 +0 2 +cob=(7) +cfi=(53) +cfn=(1468) +calls=1 0 +0 100 +0 17 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 235 +0 5 +cfn=(1588) +calls=1 0 +0 280 +0 3 +cfn=(1596) +calls=1 0 +0 47 +0 2 +cfn=(1598) +calls=1 0 +0 15 +0 2 +cob=(7) +cfi=(53) +cfn=(1468) +calls=1 0 +0 100 +0 20 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 235 +0 5 +cfn=(1588) +calls=1 0 +0 280 +0 3 +cfn=(1596) +calls=1 0 +0 47 +0 2 +cfn=(1598) +calls=1 0 +0 15 +0 2 +cob=(7) +cfi=(53) +cfn=(1468) +calls=1 0 +0 100 +0 19 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 240 +0 5 +cfn=(1588) +calls=1 0 +0 280 +0 3 +cfn=(1596) +calls=1 0 +0 47 +0 2 +cfn=(1598) +calls=1 0 +0 15 +0 2 +cob=(7) +cfi=(53) +cfn=(1468) +calls=1 0 +0 100 +0 21 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 239 +0 5 +cfn=(1588) +calls=1 0 +0 280 +0 3 +cfn=(1596) +calls=1 0 +0 47 +0 2 +cfn=(1598) +calls=1 0 +0 15 +0 2 +cob=(7) +cfi=(53) +cfn=(1468) +calls=1 0 +0 100 +0 15 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 241 +0 5 +cfn=(1588) +calls=1 0 +0 280 +0 3 +cfn=(1596) +calls=1 0 +0 47 +0 2 +cfn=(1598) +calls=1 0 +0 15 +0 2 +cob=(7) +cfi=(53) +cfn=(1468) +calls=1 0 +0 100 +0 27 +cob=(4) +cfi=(91) +cfn=(1326) +calls=1 32 +0 8 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1642 +0 5 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 235 +0 5 +cfn=(1588) +calls=1 0 +0 280 +0 3 +cfn=(1596) +calls=1 0 +0 47 +0 2 +cfn=(1598) +calls=1 0 +0 15 +0 2 +cob=(7) +cfi=(53) +cfn=(1468) +calls=1 0 +0 100 +0 11 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 245 +0 5 +cfn=(1588) +calls=1 0 +0 280 +0 3 +cfn=(1596) +calls=1 0 +0 47 +0 2 +cfn=(1598) +calls=1 0 +0 15 +0 2 +cob=(7) +cfi=(53) +cfn=(1468) +calls=1 0 +0 100 +0 11 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 238 +0 5 +cfn=(1588) +calls=1 0 +0 280 +0 3 +cfn=(1596) +calls=1 0 +0 47 +0 2 +cfn=(1598) +calls=1 0 +0 15 +0 2 +cob=(7) +cfi=(53) +cfn=(1468) +calls=1 0 +0 100 +0 11 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 239 +0 5 +cfn=(1588) +calls=1 0 +0 280 +0 3 +cfn=(1596) +calls=1 0 +0 47 +0 2 +cfn=(1598) +calls=1 0 +0 15 +0 2 +cob=(7) +cfi=(53) +cfn=(1468) +calls=1 0 +0 100 +0 11 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 240 +0 5 +cfn=(1588) +calls=1 0 +0 280 +0 3 +cfn=(1596) +calls=1 0 +0 47 +0 2 +cfn=(1598) +calls=1 0 +0 15 +0 2 +cob=(7) +cfi=(53) +cfn=(1468) +calls=1 0 +0 100 +0 11 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 239 +0 5 +cfn=(1588) +calls=1 0 +0 280 +0 3 +cfn=(1596) +calls=1 0 +0 47 +0 2 +cfn=(1598) +calls=1 0 +0 15 +0 2 +cob=(7) +cfi=(53) +cfn=(1468) +calls=1 0 +0 100 +0 11 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 245 +0 5 +cfn=(1588) +calls=1 0 +0 280 +0 3 +cfn=(1596) +calls=1 0 +0 47 +0 2 +cfn=(1598) +calls=1 0 +0 15 +0 2 +cob=(7) +cfi=(53) +cfn=(1468) +calls=1 0 +0 100 +0 11 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 234 +0 5 +cfn=(1588) +calls=1 0 +0 280 +0 3 +cfn=(1596) +calls=1 0 +0 47 +0 2 +cfn=(1598) +calls=1 0 +0 15 +0 2 +cob=(7) +cfi=(53) +cfn=(1468) +calls=1 0 +0 100 +0 12 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 57 +0 5 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 219 +0 5 +cfn=(1588) +calls=1 0 +0 280 +0 3 +cfn=(1596) +calls=1 0 +0 47 +0 2 +cfn=(1598) +calls=1 0 +0 15 +0 2 +cob=(7) +cfi=(53) +cfn=(1468) +calls=1 0 +0 100 +0 48 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 229 +0 5 +cfn=(1588) +calls=1 0 +0 680 +0 3 +cfn=(1596) +calls=1 0 +0 218 +0 2 +cfn=(1598) +calls=1 0 +0 185 +0 2 +cob=(7) +cfi=(53) +cfn=(1468) +calls=1 0 +0 100 +0 55 +cob=(7) +cfi=(53) +cfn=(1574) +calls=1 0 +0 317 +0 7 +cfn=(2000) BTS::Image::Observed::Buffer::load(std::string const&, BTS::Diffusion::Encoding::Set const&) +calls=1 0 +0 2353009 +0 11 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 230 +0 46 +cob=(4) +cfi=(100) +cfn=(1476) +calls=4 25 +0 131 +0 43 +cob=(4) +cfi=(100) +cfn=(1476) +calls=1 25 +0 30 +0 6 +cob=(7) +cfi=(53) +cfn=(1468) +calls=1 0 +0 100 +0 40 +cfn=(2880) BTS::Diffusion::Model::factory(MR::Math::Matrix const&, MR::Math::Matrix const&, double, double, bool) +calls=1 0 +0 7079693 +0 17 +cfn=(3026) BTS::Image::Expected::Buffer::factory(std::string const&, BTS::Triple const&, BTS::Triple const&, BTS::Diffusion::Model const&, unsigned int, unsigned int, double, BTS::Triple const&, bool, double) +calls=1 0 +0 38371 +0 25 +cfn=(3072) BTS::Prob::Likelihood::factory(std::string const&, BTS::Image::Observed::Buffer const&, BTS::Image::Expected::Buffer*, double, bool, double) +calls=1 0 +0 90403 +0 11 +cob=(7) +cfi=(53) +cfn=(1446) +calls=1 0 +0 294 +0 3 +cob=(7) +cfi=(53) +cfn=(1594) +calls=1 0 +0 56 +0 5 +cob=(7) +cfi=(53) +cfn=(1468) +calls=1 0 +0 100 +0 42 +cfn=(3120) BTS::Prob::Test::Peaks::Peaks(double, double) +calls=1 0 +0 11 +0 5 +cfn=(3270) BTS::Prob::Test::Peaks::~Peaks() +calls=1 0 +0 2495 +0 14 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 224 +0 3 +cfn=(3272) std::map, std::allocator > >::operator[](std::string const&) +calls=1 0 +0 437 +0 4 +cob=(7) +cfi=(53) +cfn=(1574) +calls=1 0 +0 314 +0 2 +cob=(7) +cfi=(53) +cfn=(1468) +calls=1 0 +0 15 +0 5 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 286 +0 3 +cfn=(3272) +calls=1 0 +0 477 +0 3 +cob=(7) +cfi=(53) +cfn=(1264) +calls=1 0 +0 28 +0 2 +cob=(7) +cfi=(53) +cfn=(1468) +calls=1 0 +0 15 +0 5 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 282 +0 3 +cfn=(3272) +calls=1 0 +0 535 +0 3 +cob=(7) +cfi=(53) +cfn=(1264) +calls=1 0 +0 28 +0 2 +cob=(7) +cfi=(53) +cfn=(1468) +calls=1 0 +0 15 +0 5 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 292 +0 3 +cfn=(3272) +calls=1 0 +0 568 +0 3 +cob=(7) +cfi=(53) +cfn=(1264) +calls=1 0 +0 28 +0 2 +cob=(7) +cfi=(53) +cfn=(1468) +calls=1 0 +0 15 +0 5 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 291 +0 3 +cfn=(3272) +calls=1 0 +0 496 +0 3 +cob=(7) +cfi=(53) +cfn=(1264) +calls=1 0 +0 28 +0 2 +cob=(7) +cfi=(53) +cfn=(1468) +calls=1 0 +0 15 +0 5 +cfn=(3274) std::string BTS::str(double const&) +calls=1 0 +0 12188 +0 5 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 438 +0 3 +cfn=(3272) +calls=1 0 +0 501 +0 3 +cob=(7) +cfi=(53) +cfn=(1264) +calls=1 0 +0 28 +0 2 +cob=(7) +cfi=(53) +cfn=(1468) +calls=1 0 +0 15 +0 3 +cob=(7) +cfi=(53) +cfn=(1468) +calls=1 0 +0 15 +0 4 +cob=(7) +cfi=(53) +cfn=(1594) +calls=1 0 +0 44 +0 6 +cob=(7) +cfi=(53) +cfn=(1594) +calls=1 0 +0 50 +0 11 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 285 +0 4 +cfn=(3272) +calls=1 0 +0 580 +0 4 +cob=(7) +cfi=(53) +cfn=(1264) +calls=1 0 +0 28 +0 2 +cob=(7) +cfi=(53) +cfn=(1468) +calls=1 0 +0 15 +0 7 +cob=(7) +cfi=(53) +cfn=(1446) +calls=1 0 +0 261 +0 3 +cob=(7) +cfi=(53) +cfn=(1594) +calls=1 0 +0 50 +0 4 +cob=(7) +cfi=(53) +cfn=(1468) +calls=1 0 +0 100 +0 7 +cfn=(3274) +calls=1 0 +0 5693 +0 5 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 240 +0 3 +cfn=(3272) +calls=1 0 +0 650 +0 3 +cob=(7) +cfi=(53) +cfn=(1264) +calls=1 0 +0 28 +0 2 +cob=(7) +cfi=(53) +cfn=(1468) +calls=1 0 +0 15 +0 3 +cob=(7) +cfi=(53) +cfn=(1468) +calls=1 0 +0 15 +0 7 +cob=(7) +cfi=(53) +cfn=(1594) +calls=1 0 +0 57 +0 6 +cob=(7) +cfi=(53) +cfn=(1594) +calls=1 0 +0 69 +0 6 +cob=(7) +cfi=(53) +cfn=(1594) +calls=1 0 +0 57 +0 9 +cob=(7) +cfi=(53) +cfn=(1446) +calls=1 0 +0 266 +0 3 +cob=(7) +cfi=(53) +cfn=(1594) +calls=1 0 +0 73 +0 4 +cob=(7) +cfi=(53) +cfn=(1468) +calls=1 0 +0 100 +0 9 +cob=(7) +cfi=(53) +cfn=(1446) +calls=1 0 +0 205 +0 3 +cob=(7) +cfi=(53) +cfn=(1594) +calls=1 0 +0 44 +0 4 +cob=(7) +cfi=(53) +cfn=(1468) +calls=1 0 +0 100 +0 9 +cob=(7) +cfi=(53) +cfn=(1446) +calls=1 0 +0 210 +0 3 +cob=(7) +cfi=(53) +cfn=(1594) +calls=1 0 +0 50 +0 4 +cob=(7) +cfi=(53) +cfn=(1468) +calls=1 0 +0 100 +0 6 +cob=(7) +cfi=(53) +cfn=(1594) +calls=1 0 +0 56 +0 13 +cfn=(3122) BTS::Prob::Test::Peaks::Peaks(unsigned int, double, double, double, double, double, unsigned int) +calls=1 0 +0 53914 +0 10 +cfn=(3266) std::vector >::operator=(std::vector > const&) +calls=1 0 +0 6488 +0 9 +cob=(7) +cfi=(53) +cfn=(1446) +calls=1 0 +0 206 +0 7 +cob=(4) +cfi=(100) +cfn=(1476) +calls=1 25 +0 27 +0 6 +cob=(7) +cfi=(53) +cfn=(1468) +calls=1 0 +0 100 +0 6 +cob=(7) +cfi=(53) +cfn=(880) +calls=1 0 +0 195 +0 81 +cfn=(3102) BTS::Prob::Prior::Tract::factory(double, double&, double, double&, double, double&, double, double, double&, double, double, double&, double, double, double&, double, double, double&, double, unsigned int, unsigned int, double, BTS::Image::Expected::Buffer*, double&, double, double, double&, double, double, double&, double, double, double, double&, double, double&, double, double&, double, double&, double, double, double&, double, std::string const&) +calls=1 0 +0 1948 +0 10 +cob=(7) +cfi=(53) +cfn=(1446) +calls=1 0 +0 206 +0 7 +cob=(4) +cfi=(100) +cfn=(1476) +calls=1 25 +0 36 +0 6 +cob=(7) +cfi=(53) +cfn=(1468) +calls=1 0 +0 100 +0 12 +cob=(7) +cfi=(53) +cfn=(1446) +calls=1 0 +0 206 +0 8 +cob=(4) +cfi=(100) +cfn=(1476) +calls=1 25 +0 18 +0 6 +cob=(7) +cfi=(53) +cfn=(1468) +calls=1 0 +0 100 +0 12 +cfn=(3070) BTS::Image::Expected::Buffer::base_intensity_default(BTS::Image::Observed::Buffer const&, std::string const&, bool) +calls=1 0 +0 747 +0 10 +cob=(7) +cfi=(53) +cfn=(1446) +calls=1 0 +0 206 +0 7 +cob=(4) +cfi=(100) +cfn=(1476) +calls=1 25 +0 18 +0 6 +cob=(7) +cfi=(53) +cfn=(1468) +calls=1 0 +0 100 +0 9 +cfn=(3338) std::string BTS::str(unsigned int const&) +calls=1 0 +0 3617 +0 5 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 446 +0 3 +cfn=(3272) +calls=1 0 +0 2059 +0 3 +cob=(7) +cfi=(53) +cfn=(1264) +calls=1 0 +0 28 +0 2 +cob=(7) +cfi=(53) +cfn=(1468) +calls=1 0 +0 15 +0 3 +cob=(7) +cfi=(53) +cfn=(1468) +calls=1 0 +0 15 +0 5 +cfn=(3274) +calls=1 0 +0 5710 +0 5 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 529 +0 3 +cfn=(3272) +calls=1 0 +0 638 +0 3 +cob=(7) +cfi=(53) +cfn=(1264) +calls=1 0 +0 28 +0 2 +cob=(7) +cfi=(53) +cfn=(1468) +calls=1 0 +0 15 +0 3 +cob=(7) +cfi=(53) +cfn=(1468) +calls=1 0 +0 15 +0 5 +cfn=(3274) +calls=1 0 +0 5106 +0 5 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 475 +0 3 +cfn=(3272) +calls=1 0 +0 595 +0 3 +cob=(7) +cfi=(53) +cfn=(1264) +calls=1 0 +0 28 +0 2 +cob=(7) +cfi=(53) +cfn=(1468) +calls=1 0 +0 15 +0 3 +cob=(7) +cfi=(53) +cfn=(1468) +calls=1 0 +0 15 +0 5 +cfn=(3274) +calls=1 0 +0 5106 +0 5 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 420 +0 3 +cfn=(3272) +calls=1 0 +0 962 +0 3 +cob=(7) +cfi=(53) +cfn=(1264) +calls=1 0 +0 28 +0 2 +cob=(7) +cfi=(53) +cfn=(1468) +calls=1 0 +0 15 +0 3 +cob=(7) +cfi=(53) +cfn=(1468) +calls=1 0 +0 15 +0 5 +cfn=(3338) +calls=1 0 +0 4973 +0 5 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 520 +0 3 +cfn=(3272) +calls=1 0 +0 692 +0 3 +cob=(7) +cfi=(53) +cfn=(1264) +calls=1 0 +0 28 +0 2 +cob=(7) +cfi=(53) +cfn=(1468) +calls=1 0 +0 15 +0 3 +cob=(7) +cfi=(53) +cfn=(1468) +calls=1 0 +0 15 +0 5 +cob=(7) +cfi=(53) +cfn=(1594) +calls=1 0 +0 74 +0 9 +cob=(7) +cfi=(53) +cfn=(1446) +calls=1 0 +0 252 +0 3 +cob=(7) +cfi=(53) +cfn=(1594) +calls=1 0 +0 50 +0 4 +cob=(7) +cfi=(53) +cfn=(1468) +calls=1 0 +0 100 +0 6 +cob=(7) +cfi=(53) +cfn=(1594) +calls=1 0 +0 100 +0 12 +cfn=(3074) BTS::Prob::Likelihood::ImageDiff::ImageDiff(BTS::Image::Observed::Buffer const&, BTS::Image::Expected::Buffer*, double, bool, double) +calls=1 0 +0 90449 +0 7 +cob=(7) +cfi=(53) +cfn=(1594) +calls=1 0 +0 65 +0 24 +cfn=(3268) std::_Rb_tree, std::_Select1st >, std::less, std::allocator > >::_Rb_tree(std::_Rb_tree, std::_Select1st >, std::less, std::allocator > > const&) +calls=1 0 +0 18 +0 28 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 319 +0 3 +cfn=(3348) std::map, std::allocator > >::operator[](std::string const&) +calls=1 0 +0 403 +0 4 +cob=(7) +cfi=(53) +cfn=(1468) +calls=1 0 +0 15 +0 6 +cfn=(2642) std::_Rb_tree, std::_Select1st >, std::less, std::allocator > >::_M_erase(std::_Rb_tree_node >*) +calls=1 0 +0 11 +0 3 +cob=(7) +cfi=(53) +cfn=(3360) +calls=1 0 +0 3056 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1962 +0 17 +cob=(7) +cfi=(53) +cfn=(3360) +calls=1 0 +0 1828 +0 9 +cob=(7) +cfi=(53) +cfn=(3360) +calls=1 0 +0 1828 +0 3 +cfn=(3366) BTS::Fibre::Set::Reader::open(std::string const&) +calls=1 0 +0 89886 +0 3 +cfn=(3468) BTS::Fibre::Set::Reader::next(BTS::Fibre::Set&) +calls=1 0 +0 132468 +0 7 +cfn=(3436) std::basic_string, std::allocator > std::operator+, std::allocator >(std::basic_string, std::allocator > const&, char const*) +calls=1 0 +0 506 +0 6 +cob=(7) +cfi=(53) +cfn=(3550) +calls=1 0 +0 1827 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1970 +0 4 +cfn=(3552) BTS::Fibre::Tensor::Writer2::create(std::string const&, BTS::Fibre::Tract::Set const&) +calls=1 0 +0 869124 +0 2 +cob=(7) +cfi=(53) +cfn=(1468) +calls=1 0 +0 142 +0 6 +cfn=(3436) +calls=1 0 +0 482 +0 6 +cob=(7) +cfi=(53) +cfn=(3550) +calls=1 0 +0 1827 +0 4 +cfn=(3552) +calls=1 0 +0 864351 +0 2 +cob=(7) +cfi=(53) +cfn=(1468) +calls=1 0 +0 142 +0 2 +cob=(7) +cfi=(53) +cfn=(3612) +calls=1 0 +0 1937 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 2010 +0 2 +cob=(7) +cfi=(53) +cfn=(3612) +calls=1 0 +0 658 +0 2 +cob=(7) +cfi=(53) +cfn=(3612) +calls=1 0 +0 678 +0 15 +cob=(7) +cfi=(53) +cfn=(1468) +calls=2 0 +0 200 +0 9 +cfn=(3366) +calls=1 0 +0 68642 +0 12 +cfn=(3468) +calls=1 0 +0 116086 +0 4 +cfn=(3620) unsigned int BTS::Fibre::Unzipper::size >(BTS::Fibre::Set const&) +calls=1 0 +0 9507 +0 3 +cfn=(3620) +calls=1 0 +0 9507 +0 4 +cfn=(3626) MR::Math::Matrix::initialize(unsigned long, unsigned long) +calls=1 0 +0 1377 +0 83199 +cfn=(3620) +calls=1 0 +0 9892 +0 3 +cfn=(3620) +calls=1 0 +0 9507 +0 4 +cfn=(3626) +calls=1 0 +0 767 +0 82853 +cfn=(3628) BTS::Analysis::HessianTester::test(double (BTS::Prob::Likelihood::ImageDiff::Gaussian::*)(BTS::Fibre::Tract::Set const&, BTS::Fibre::Tract::Set&, BTS::Fibre::Tract::Set::Tensor&), BTS::Fibre::Tract::Set&, double, BTS::Fibre::Tract::Set::Tensor&, BTS::Fibre::Tract::Set::Tensor&) +calls=1 0 +0 7351891844380 +0 471 +cfn=(2878) BTS::Prob::Prior::Strand::EndOutSphere::radius_default(BTS::Image::Observed::Buffer const&) +calls=1 0 +0 7 +0 5 +cfn=(2876) BTS::Prob::Prior::Strand::EndInSphere::radius_default(BTS::Image::Observed::Buffer const&) +calls=1 0 +0 6 +0 103 +cob=(7) +cfi=(53) +cfn=(1446) +calls=1 0 +0 206 +0 7 +cob=(4) +cfi=(100) +cfn=(1476) +calls=1 25 +0 27 +0 6 +cob=(7) +cfi=(53) +cfn=(1468) +calls=1 0 +0 100 +0 8 +cob=(7) +cfi=(53) +cfn=(1574) +calls=1 0 +0 2412 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1534 +0 8 +cob=(7) +cfi=(53) +cfn=(1446) +calls=1 0 +0 206 +0 8 +cob=(4) +cfi=(100) +cfn=(1476) +calls=1 25 +0 18 +0 6 +cob=(7) +cfi=(53) +cfn=(1468) +calls=1 0 +0 100 +0 4 + +fn=(1482) +0 22 +cob=(7) +cfi=(53) +cfn=(722) +calls=2 0 +0 194 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1491 +0 48 +cob=(7) +cfi=(53) +cfn=(728) +calls=2 0 +0 1416 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 2322 +0 22 +cob=(7) +cfi=(53) +cfn=(728) +calls=2 0 +0 1416 +0 44 +cob=(7) +cfi=(53) +cfn=(492) +calls=2 0 +0 78 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1459 +0 24 +cob=(7) +cfi=(53) +cfn=(728) +calls=2 0 +0 1416 +0 16 + +fn=(1588) +0 1404 +cob=(7) +cfi=(53) +cfn=(1594) +calls=54 0 +0 2396 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1506 +0 810 +cob=(7) +cfi=(53) +cfn=(1594) +calls=162 0 +0 8152 +0 2462 +cfn=(1430) +calls=4 0 +0 1461 +0 4 + +fn=(1596) +0 1722 +cfn=(1600) std::vector >::operator=(std::vector > const&) +calls=1 0 +0 40 +0 121 +cob=(7) +cfi=(53) +cfn=(1174) +calls=2 0 +0 162 +0 767 +cob=(7) +cfi=(53) +cfn=(880) +calls=2 0 +0 220 +0 77 +cob=(7) +cfi=(53) +cfn=(880) +calls=1 0 +0 195 +0 25 +cob=(7) +cfi=(53) +cfn=(880) +calls=1 0 +0 195 +0 47 + +fn=(1714) MR::Math::operator>>(std::istream&, MR::Math::Matrix&) +0 837 +cob=(7) +cfi=(53) +cfn=(1730) +calls=61 0 +0 30267 +0 4 +cob=(7) +cfi=(53) +cfn=(1730) +calls=1 0 +0 9370 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 2531 +0 926 +cob=(7) +cfi=(53) +cfn=(1788) +calls=61 0 +0 3225 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1474 +0 305 +cob=(7) +cfi=(53) +cfn=(1446) +calls=61 0 +0 13797 +0 305 +cob=(7) +cfi=(53) +cfn=(1794) +calls=61 0 +0 2989 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1722 +0 488 +cob=(7) +cfi=(53) +cfn=(1800) +calls=61 0 +0 3111 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1690 +0 549 +cob=(7) +cfi=(53) +cfn=(1446) +calls=61 0 +0 13869 +0 183 +cob=(7) +cfi=(53) +cfn=(1264) +calls=61 0 +0 7503 +0 854 +cob=(7) +cfi=(53) +cfn=(880) +calls=61 0 +0 6726 +0 366 +cob=(7) +cfi=(53) +cfn=(880) +calls=61 0 +0 6879 +0 1333 +cob=(7) +cfi=(53) +cfn=(722) +calls=61 0 +0 5917 +0 1708 +cob=(7) +cfi=(53) +cfn=(728) +calls=61 0 +0 43188 +0 976 +cob=(7) +cfi=(53) +cfn=(492) +calls=61 0 +0 2379 +0 549 +cob=(7) +cfi=(53) +cfn=(1812) +calls=61 0 +0 12966 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1514 +0 366 +cob=(7) +cfi=(53) +cfn=(1528) +calls=61 0 +0 1281 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 2194 +0 183 +cob=(7) +cfi=(53) +cfn=(728) +calls=61 0 +0 43188 +0 732 +cob=(7) +cfi=(53) +cfn=(1822) +calls=61 0 +0 2806 +0 732 +cob=(7) +cfi=(53) +cfn=(1822) +calls=244 0 +0 411557 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1656 +0 2196 +cfn=(1852) std::vector >::_M_insert_aux(__gnu_cxx::__normal_iterator > >, double const&) +calls=183 0 +0 73886 +0 2247 +cob=(7) +cfi=(53) +cfn=(746) +calls=61 0 +0 732 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1483 +0 671 +cob=(7) +cfi=(53) +cfn=(1556) +calls=61 0 +0 3538 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1515 +0 3201 +cob=(7) +cfi=(53) +cfn=(1720) +calls=1 0 +0 1432 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1736 +0 4 +cob=(7) +cfi=(53) +cfn=(1724) +calls=1 0 +0 2 +0 306 +cob=(7) +cfi=(53) +cfn=(1372) +calls=61 0 +0 732 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1538 +0 857 +cob=(7) +cfi=(53) +cfn=(1174) +calls=61 0 +0 4941 +0 122 +cob=(7) +cfi=(53) +cfn=(1174) +calls=61 0 +0 4941 +0 183 +cob=(7) +cfi=(53) +cfn=(1174) +calls=61 0 +0 4941 +0 127 +cob=(7) +cfi=(53) +cfn=(1174) +calls=1 0 +0 114 +0 42 +cfn=(1806) std::vector >, false>, std::allocator >, false> > >::_M_insert_aux(__gnu_cxx::__normal_iterator >, false>*, std::vector >, false>, std::allocator >, false> > > >, MR::RefPtr >, false> const&) +calls=7 0 +0 4066 +0 13 +cob=(9) +cfi=(58) +cfn=(1916) gsl_block_alloc +calls=1 0 +0 2550 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 859 +0 372 +cob=(7) +cfi=(53) +cfn=(1310) +calls=61 0 +0 5002 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1682 +0 1159 +cob=(7) +cfi=(53) +cfn=(1310) +calls=61 0 +0 5002 +0 427 +cob=(7) +cfi=(53) +cfn=(1310) +calls=61 0 +0 5002 +0 549 + +fn=(1806) +0 158 +cob=(7) +cfi=(53) +cfn=(880) +calls=7 0 +0 1707 +0 1496 +cob=(7) +cfi=(53) +cfn=(1174) +calls=6 0 +0 548 +0 157 + +fn=(2390) +0 51019964 +cob=(7) +cfi=(53) +cfn=(880) +calls=2374861 0 +0 263540610 +0 23748610 +cob=(7) +cfi=(53) +cfn=(1258) +calls=2374861 0 +0 47497220 +0 14249166 +cfn=(2392) std::string* std::__uninitialized_move_a >(std::string*, std::string*, std::string*, std::allocator&) +calls=2374861 0 +0 80304329 +0 14249166 +cfn=(2392) +calls=2374861 0 +0 40372637 +0 18946158 +cob=(7) +cfi=(53) +cfn=(1468) +calls=1174248 0 +0 17613720 +0 726 +cob=(7) +cfi=(53) +cfn=(1468) +calls=242 0 +0 3630 +0 9447198 +cob=(7) +cfi=(53) +cfn=(1174) +calls=1174248 0 +0 95114212 +0 52167847 + +fn=(2576) +0 60 +cob=(7) +cfi=(53) +cfn=(1928) +calls=3 0 +0 1908 +0 6 +cob=(7) +cfi=(53) +cfn=(1990) +calls=3 0 +0 51 +0 15 +cob=(7) +cfi=(53) +cfn=(746) +calls=3 0 +0 36 +0 36 +cob=(7) +cfi=(53) +cfn=(1556) +calls=3 0 +0 174 +0 90 +cob=(7) +cfi=(53) +cfn=(1310) +calls=3 0 +0 246 +0 17 +cob=(7) +cfi=(53) +cfn=(1310) +calls=1 0 +0 82 +0 37 + +fn=(2736) +0 45 +cob=(7) +cfi=(53) +cfn=(952) +calls=3 0 +0 419 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1682 +0 24 +cob=(4) +cfi=(81) +cfn=(966) +calls=3 56 +0 62 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1708 +0 30 + +fn=(2816) std::_Rb_tree, std::_Select1st >, std::less, std::allocator > >::_M_insert_unique_(std::_Rb_tree_const_iterator >, std::pair const&) +0 442 +cob=(7) +cfi=(53) +cfn=(2834) +calls=20 0 +0 1605 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1979 +0 130 +cfn=(2820) std::_Rb_tree, std::_Select1st >, std::less, std::allocator > >::_M_insert_(std::_Rb_tree_node_base const*, std::_Rb_tree_node_base const*, std::pair const&) +calls=6 0 +0 2774 +0 206 +cfn=(2818) std::_Rb_tree, std::_Select1st >, std::less, std::allocator > >::_M_insert_unique(std::pair const&) +calls=1 0 +0 273 +0 79 +cfn=(2820) +calls=6 0 +0 2330 +0 216 +cfn=(2820) +calls=14 0 +0 5417 +0 28 + +fn=(3020) std::vector >::vector(std::vector > const&) +0 6900 +cob=(7) +cfi=(53) +cfn=(880) +calls=300 0 +0 33056 +0 3900 +cob=(4) +cfi=(90) +cfn=(1282) +calls=300 47 +0 20400 +0 2100 + +fn=(3026) +0 19 +cob=(7) +cfi=(53) +cfn=(1594) +calls=1 0 +0 44 +0 14 +cob=(7) +cfi=(53) +cfn=(1594) +calls=1 0 +0 50 +0 5 +cob=(7) +cfi=(53) +cfn=(1594) +calls=1 0 +0 64 +0 4 +cob=(7) +cfi=(53) +cfn=(880) +calls=1 0 +0 383 +0 13 +cfn=(3028) BTS::Image::Expected::Quartic::Buffer::Buffer(BTS::Triple const&, BTS::Triple const&, BTS::Diffusion::Model const&, unsigned int, unsigned int, double, BTS::Triple const&, bool) +calls=1 0 +0 37774 +0 1 + +fn=(3072) +0 13 +cob=(7) +cfi=(53) +cfn=(1594) +calls=1 0 +0 65 +0 4 +cob=(7) +cfi=(53) +cfn=(880) +calls=1 0 +0 368 +0 8 +cfn=(3074) +calls=1 0 +0 89935 +0 10 + +fn=(3074) +0 34 +cfn=(3076) BTS::Image::Observed::Buffer::Buffer(BTS::Image::Observed::Buffer const&) +calls=2 0 +0 39832 +0 6 +cfn=(3080) BTS::Image::Expected::Quartic::Buffer::clone() const +calls=2 0 +0 61570 +0 34 +cfn=(3086) BTS::Image::Expected::Buffer::dims_match(BTS::Image::Observed::Buffer const&) +calls=2 0 +0 50 +0 10 +cfn=(3090) BTS::Prob::Likelihood::ImageDiff::set_assumed_snr(double) +calls=2 0 +0 78792 +0 6 +cfn=(3100) BTS::Image::Expected::Quartic::Buffer::zero() +calls=2 0 +0 34 +0 16 + +fn=(3092) BTS::Image::Observed::Buffer::average_b0() const +0 28 +cfn=(3094) BTS::Image::Observed::Voxel::b0() const +calls=2 0 +0 2866 +0 104 +cfn=(3094) +calls=52 0 +0 74516 +0 216 +cob=(7) +cfi=(53) +cfn=(2846) +calls=54 0 +0 834 +0 186 + +fn=(3094) +0 36936 +cfn=(3096) BTS::Image::Observed::Voxel::encoding(unsigned int) const +calls=3294 0 +0 26352 +0 14094 + +fn=(3120) +0 11 + +fn=(3252) BTS::Prob::Test::Peaks::Peak* std::__uninitialized_move_a >(BTS::Prob::Test::Peaks::Peak*, BTS::Prob::Test::Peaks::Peak*, BTS::Prob::Test::Peaks::Peak*, std::allocator&) +0 140 +cfn=(2888) MR::Math::Vector::initialize(unsigned long) +calls=7 0 +0 3032 +0 287 +cfn=(2888) +calls=7 0 +0 2774 +0 390 + +fn=(3258) BTS::MCMC::State::State(BTS::MCMC::State const&) +0 240 +cob=(9) +cfi=(58) +cfn=(1916) +calls=4 0 +0 848 +0 12 + +fn=(3348) +0 103651152 +cob=(7) +cfi=(53) +cfn=(1258) +calls=2835236 0 +0 56704720 +0 14176180 +cfn=(3350) std::_Rb_tree, std::_Select1st >, std::less, std::allocator > >::_M_insert_unique_(std::_Rb_tree_const_iterator >, std::pair const&) +calls=2835236 0 +0 876756874 +0 8505708 +cob=(7) +cfi=(53) +cfn=(1468) +calls=2835236 0 +0 42528540 +0 25451240 + +fn=(3372) MR::DWI::Tractography::ROISet::clear() +0 126 + +fn=(3504) BTS::Fibre::Tract::Tract(BTS::Fibre::Tract const&) +0 55385440 +cob=(7) +cfi=(53) +cfn=(880) +calls=1384636 0 +0 234325732 +0 115725404 +cob=(7) +cfi=(53) +cfn=(880) +calls=3595026 0 +0 418411146 +0 245680084 +cob=(7) +cfi=(53) +cfn=(934) +calls=1384636 0 +0 399557083 +0 6923180 +cfn=(3348) +calls=1384636 0 +0 525564832 +0 6923180 +cob=(7) +cfi=(53) +cfn=(1468) +calls=1384636 0 +0 20769540 +0 8307816 +cob=(7) +cfi=(53) +cfn=(934) +calls=1384636 0 +0 400719343 +0 4153908 +cfn=(3348) +calls=1384636 0 +0 579707716 +0 6923180 +cob=(7) +cfi=(53) +cfn=(1468) +calls=1384636 0 +0 20769540 +0 11077088 + +fn=(3544) BTS::Fibre::Properties::Extended::add_row(BTS::Fibre::Properties const&) +0 192 +cob=(7) +cfi=(53) +cfn=(1468) +calls=8 0 +0 56 +0 72 +cfn=(2410) +calls=8 0 +0 120 +0 104 + +fn=(3568) unsigned int BTS::Fibre::Properties::Intrinsic::num_intrinsic_keys() +0 9394848 +cfn=(3496) BTS::Fibre::Tract::Tract() +calls=1174356 0 +0 1795761632 +0 9394848 +cob=(7) +cfi=(53) +cfn=(2846) +calls=2348712 0 +0 35230680 +0 9394848 +cfn=(3508) BTS::Fibre::Tract::~Tract() +calls=1174356 0 +0 648244512 +0 7046136 + +fn=(3622) unsigned int BTS::Fibre::Properties::Intrinsic::num_intrinsic_keys >() +0 1504743 +cob=(7) +cfi=(53) +cfn=(934) +calls=26399 0 +0 6177734 +0 79197 +cfn=(3348) +calls=26399 0 +0 8403112 +0 105596 +cob=(7) +cfi=(53) +cfn=(1468) +calls=26399 0 +0 395985 +0 79197 +cfn=(2642) +calls=26399 0 +0 290389 +0 184793 +cob=(7) +cfi=(53) +cfn=(2846) +calls=26399 0 +0 475182 +0 158394 +cfn=(3624) BTS::Fibre::Set::~Set() +calls=26399 0 +0 8210089 +0 184793 + +fn=(3624) +0 475038 +cfn=(3564) BTS::Fibre::Properties::Extended::~Extended() +calls=52782 0 +0 2955792 +0 211192 +cfn=(3508) +calls=32 0 +0 25536 +0 158450 +cob=(7) +cfi=(53) +cfn=(1174) +calls=8 0 +0 848 +0 158346 +cfn=(2642) +calls=52782 0 +0 580602 +0 316692 +cfn=(3510) std::_Rb_tree, std::_Select1st >, std::less, std::allocator > >::_M_erase(std::_Rb_tree_node >*) +calls=52782 0 +0 9106255 +0 211128 + +fn=(3626) +0 1797783 +cob=(9) +cfi=(58) +cfn=(1916) +calls=61991 0 +0 189226503 +0 309955 + +fn=(3628) +0 21 +cfn=(3630) BTS::Fibre::Tract::Set::Set(BTS::Fibre::Tract::Set const&) +calls=1 0 +0 12121 +0 5 +cfn=(3630) +calls=1 0 +0 11725 +0 5 +cfn=(3630) +calls=1 0 +0 11725 +0 948 +cfn=(3620) +calls=1 0 +0 9932 +0 3 +cfn=(3620) +calls=1 0 +0 9507 +0 6 +cfn=(3626) +calls=1 0 +0 745 +0 69510 +cfn=(3620) +calls=1 0 +0 9932 +0 3 +cfn=(3620) +calls=1 0 +0 9507 +0 4 +cfn=(3626) +calls=1 0 +0 612 +0 69511 +cfn=(3634) MR::Math::Matrix::allocate(unsigned long, unsigned long) +calls=1 0 +0 15 +0 181249 +cob=(9) +cfi=(58) +cfn=(2654) gsl_block_free +calls=1 0 +0 205 +0 14 +cfn=(3636) BTS::Prob::Likelihood::ImageDiff::log_prob(BTS::Fibre::Tract::Set const&, BTS::Fibre::Tract::Set&, BTS::Fibre::Tract::Set::Tensor&) +calls=1 0 +0 883781669435 +0 5 +cfn=(3918) MR::Math::Vector BTS::Fibre::Unzipper::unzip >(BTS::Fibre::Set const&) +calls=1 0 +0 28043 +0 6 +cfn=(3626) +calls=1 0 +0 2864 +0 83202 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 263 +0 6 +cfn=(3926) MR::ProgressBar::ProgressBar(std::string const&, unsigned long) +calls=1 0 +0 3754 +0 2 +cob=(7) +cfi=(53) +cfn=(1468) +calls=1 0 +0 15 +0 3874 +cfn=(3946) void BTS::Fibre::Unzipper::zip_intrinsic >(MR::Math::Vector const&, BTS::Fibre::Set&, unsigned int&) +calls=8 0 +0 12768 +0 128 +cfn=(3950) void BTS::Fibre::Unzipper::zip_element(MR::Math::Vector const&, BTS::Fibre::Tract&, unsigned int&) +calls=8 0 +0 30144 +0 168 +cfn=(3950) +calls=24 0 +0 90240 +0 368 +cfn=(3268) +calls=8 0 +0 144 +0 184 +cob=(7) +cfi=(53) +cfn=(880) +calls=8 0 +0 1137 +0 256 +cfn=(3504) +calls=32 0 +0 65522 +0 208 +cfn=(3632) BTS::Fibre::Properties::Extended::Extended(BTS::Fibre::Properties::Extended const&) +calls=8 0 +0 960 +0 32 +cob=(7) +cfi=(53) +cfn=(934) +calls=8 0 +0 1888 +0 32 +cfn=(3348) +calls=8 0 +0 3104 +0 40 +cob=(7) +cfi=(53) +cfn=(1468) +calls=8 0 +0 120 +0 16 +cfn=(3624) +calls=8 0 +0 29040 +0 56 +cfn=(3636) +calls=8 0 +0 6468108997754 +0 70 +cfn=(3918) +calls=7 0 +0 196672 +0 21 +cfn=(3918) +calls=7 0 +0 186788 +0 9100 +cob=(9) +cfi=(58) +cfn=(2654) +calls=7 0 +0 1421 +0 13244 +cfn=(3958) MR::ProgressBar::operator++() +calls=7 0 +0 12455 +0 28 +cob=(9) +cfi=(58) +cfn=(2654) +calls=7 0 +0 1407 +0 91 + +fn=(3642) void BTS::Image::Expected::Buffer_tpl::expected_image(BTS::Fibre::Tract::Set const&, BTS::Image::Container::Buffer::Set&, BTS::Image::Container::Buffer::Set&) +0 1090351 +cfn=(3956) T.6671 +calls=1896 0 +0 5688 +0 3792 +cfn=(3956) +calls=1896 0 +0 5688 +0 41712 +cfn=(3744) BTS::Triple::invalidate() +calls=1896 0 +0 117552 +0 3792 +cfn=(3744) +calls=1896 0 +0 117552 +0 30336 +cfn=(3956) +calls=1896 0 +0 5688 +0 3792 +cfn=(3956) +calls=1896 0 +0 5688 +0 7584 +cob=(7) +cfi=(53) +cfn=(2852) +calls=1896 0 +0 28136 +0 7764 +cfn=(3664) void BTS::Image::Expected::Buffer_tpl::part_image(BTS::Fibre::Tract const&, BTS::Image::Container::Buffer&, BTS::Image::Container::Buffer&) +calls=34 0 +0 7329775575153 +0 582 +cfn=(3644) non-virtual thunk to BTS::Image::Expected::Quartic::Buffer::num_encodings() const +calls=4 0 +0 32 +0 114 +cfn=(3654) std::_Rb_tree >, std::_Select1st > >, std::less, std::allocator > > >::_M_erase(std::_Rb_tree_node > >*) +calls=1 0 +0 19 +0 15 +cfn=(3654) +calls=3 0 +0 57 +0 16 +cfn=(3644) +calls=4 0 +0 32 +0 114 +cfn=(3662) std::_Rb_tree >, std::_Select1st > >, std::less, std::allocator > > >::_M_erase(std::_Rb_tree_node > >*) +calls=1 0 +0 19 +0 15 +cfn=(3662) +calls=3 0 +0 57 +0 170 +cfn=(3644) +calls=30 0 +0 240 +0 330 +cob=(7) +cfi=(53) +cfn=(2852) +calls=30 0 +0 322 +0 8031 +cob=(7) +cfi=(53) +cfn=(2852) +calls=2677 0 +0 39402 +0 5594 +cfn=(3644) +calls=30 0 +0 240 +0 510 +cob=(7) +cfi=(53) +cfn=(2852) +calls=30 0 +0 322 +0 8031 +cob=(7) +cfi=(53) +cfn=(2852) +calls=2677 0 +0 39402 +0 5700 +cfn=(3648) std::vector, std::allocator > >::_M_insert_aux(__gnu_cxx::__normal_iterator*, std::vector, std::allocator > > >, BTS::Image::Container::Buffer const&) +calls=3 0 +0 44967418 +0 24 +cfn=(3656) std::vector, std::allocator > >::_M_insert_aux(__gnu_cxx::__normal_iterator*, std::vector, std::allocator > > >, BTS::Image::Container::Buffer const&) +calls=3 0 +0 2483330722 +0 12 + +fn=(3654) +0 98 +cfn=(3655) std::_Rb_tree >, std::_Select1st > >, std::less, std::allocator > > >::_M_erase(std::_Rb_tree_node > >*)'2 +calls=3 0 +0 4429256 +0 76 +cfn=(3655) +calls=19 0 +0 5413783 +0 2838 +cfn=(3508) +calls=1342 0 +0 1070916 +0 4114 +cob=(7) +cfi=(53) +cfn=(1174) +calls=22 0 +0 2389 +0 66 +cob=(7) +cfi=(53) +cfn=(1174) +calls=22 0 +0 1782 +0 100 + +fn=(3655) +0 3212 +cfn=(3655) +calls=110 0 +0 10582967 +0 360 +cfn=(3655) +calls=90 0 +0 3988017 +0 25800 +cfn=(3508) +calls=12200 0 +0 9735600 +0 37400 +cob=(7) +cfi=(53) +cfn=(1174) +calls=200 0 +0 21691 +0 600 +cob=(7) +cfi=(53) +cfn=(1174) +calls=200 0 +0 16200 +0 2176 + +fn=(3656) +0 71 +cob=(7) +cfi=(53) +cfn=(880) +calls=3 0 +0 16571 +0 27 +cfn=(3658) BTS::Image::Container::Buffer::Buffer(BTS::Image::Container::Buffer const&) +calls=3 0 +0 96 +0 18 +cfn=(3660) BTS::Image::Container::Buffer* std::__uninitialized_move_a*, BTS::Image::Container::Buffer*, std::allocator > >(BTS::Image::Container::Buffer*, BTS::Image::Container::Buffer*, BTS::Image::Container::Buffer*, std::allocator >&) +calls=3 0 +0 2156235276 +0 18 +cfn=(3660) +calls=3 0 +0 51 +0 32 +cfn=(3662) +calls=2 0 +0 206265852 +0 4 +cfn=(3662) +calls=1 0 +0 120812403 +0 19 +cob=(7) +cfi=(53) +cfn=(1174) +calls=2 0 +0 200 +0 84 + +fn=(3662) +0 98 +cfn=(3663) std::_Rb_tree >, std::_Select1st > >, std::less, std::allocator > > >::_M_erase(std::_Rb_tree_node > >*)'2 +calls=3 0 +0 132599453 +0 76 +cfn=(3663) +calls=19 0 +0 162066027 +0 2838 +cfn=(3816) BTS::Fibre::Tract::Tensor::~Tensor() +calls=1342 0 +0 32401313 +0 4114 +cob=(7) +cfi=(53) +cfn=(1174) +calls=22 0 +0 2464 +0 66 +cob=(7) +cfi=(53) +cfn=(1174) +calls=22 0 +0 1782 +0 100 + +fn=(3663) +0 3212 +cfn=(3663) +calls=110 0 +0 316766724 +0 360 +cfn=(3663) +calls=90 0 +0 119341062 +0 25800 +cfn=(3816) +calls=12200 0 +0 294557472 +0 37400 +cob=(7) +cfi=(53) +cfn=(1174) +calls=200 0 +0 22260 +0 600 +cob=(7) +cfi=(53) +cfn=(1174) +calls=200 0 +0 16200 +0 2176 + +fn=(3674) std::_Rb_tree, std::less, std::allocator > > > >, std::_Select1st, std::less, std::allocator > > > > >, std::less, std::allocator, std::less, std::allocator > > > > > >::_M_insert_unique(std::pair, std::less, std::allocator > > > > const&) +0 50 +cfn=(3676) std::_Rb_tree, std::less, std::allocator > > > >, std::_Select1st, std::less, std::allocator > > > > >, std::less, std::allocator, std::less, std::allocator > > > > > >::_M_insert_(std::_Rb_tree_node_base const*, std::_Rb_tree_node_base const*, std::pair, std::less, std::allocator > > > > const&) +calls=2 0 +0 671 +0 4 + +fn=(3678) std::_Rb_tree >, std::_Select1st > >, std::less, std::allocator > > >::_M_erase(std::_Rb_tree_node > >*) +0 44 + +fn=(3680) MR::Math::Matrix::Matrix(MR::Math::Matrix const&) +0 62 + +fn=(3740) BTS::Image::Observed::Voxel::Voxel(unsigned int, BTS::Image::Coord const&) +0 4503 +cob=(7) +cfi=(53) +cfn=(880) +calls=237 0 +0 110141 +0 65175 + +fn=(3742) BTS::Fibre::Strand::Section::Tensor::Tensor() +0 75366 +cfn=(3744) +calls=711 0 +0 44082 +0 68967 +cfn=(3744) +calls=711 0 +0 44082 +0 24174 + +fn=(3802) std::_Rb_tree, std::_Select1st >, std::less, std::allocator > >::_M_insert_unique_(std::_Rb_tree_const_iterator >, std::pair const&) +0 1607606 +cob=(7) +cfi=(53) +cfn=(2438) +calls=61831 0 +0 1051127 +0 1360282 +cfn=(3804) std::_Rb_tree, std::_Select1st >, std::less, std::allocator > >::_M_insert_unique(std::pair const&) +calls=61831 0 +0 17447221 +0 309155 +cfn=(3806) std::_Rb_tree, std::_Select1st >, std::less, std::allocator > >::_M_insert_(std::_Rb_tree_node_base const*, std::_Rb_tree_node_base const*, std::pair const&) +calls=61831 0 +0 15639825 +0 61831 + +fn=(3836) std::vector, std::allocator > >::operator=(std::vector, std::allocator > > const&) +0 3072570 +cob=(7) +cfi=(53) +cfn=(880) +calls=66795 0 +0 11389093 +0 400770 +cfn=(3838) BTS::Coord::Tensor_tpl* std::__uninitialized_copy_a<__gnu_cxx::__normal_iterator const*, std::vector, std::allocator > > >, BTS::Coord::Tensor_tpl*, BTS::Coord::Tensor_tpl >(__gnu_cxx::__normal_iterator const*, std::vector, std::allocator > > >, __gnu_cxx::__normal_iterator const*, std::vector, std::allocator > > >, BTS::Coord::Tensor_tpl*, std::allocator >&) +calls=66795 0 +0 3287595405 +0 801540 + +fn=(3848) BTS::Triple::zero() +0 189123096 +cfn=(3846) T.2790 +calls=11124888 0 +0 33374664 +0 22249776 +cfn=(3846) +calls=11124888 0 +0 33374664 +0 133498656 +cfn=(3846) +calls=11124888 0 +0 33374664 +0 22249776 +cfn=(3846) +calls=11124888 0 +0 33374664 +0 133498656 +cfn=(3846) +calls=11124888 0 +0 33374664 +0 22249776 +cfn=(3846) +calls=11124888 0 +0 33374664 +0 66749328 + +fn=(3870) std::vector >, std::allocator > > >::operator=(std::vector >, std::allocator > > > const&) +0 432 + +fn=(3890) void BTS::Fibre::Flattener::flatten_intrinsic(BTS::Fibre::Tract::Tensor const&, MR::Math::Matrix&, unsigned int&) +0 463112 +cfn=(3892) std::vector > BTS::Fibre::Properties::Intrinsic_tpl::intrinsic_keys() +calls=35624 0 +0 97764208 +0 605608 +cfn=(3894) void std::__introsort_loop<__gnu_cxx::__normal_iterator > >, long>(__gnu_cxx::__normal_iterator > >, __gnu_cxx::__normal_iterator > >, long) +calls=35624 0 +0 748104 +0 106872 +cfn=(3896) void std::__final_insertion_sort<__gnu_cxx::__normal_iterator > > >(__gnu_cxx::__normal_iterator > >, __gnu_cxx::__normal_iterator > >) +calls=35624 0 +0 6626064 +0 249368 +cfn=(3902) BTS::Fibre::Properties::Intrinsic_tpl::intrinsic_property(std::string const&) const +calls=35624 0 +0 4025512 +0 106872 +cfn=(3902) +calls=35624 0 +0 3918640 +0 213744 +cfn=(3904) MR::Math::Vector BTS::Fibre::Unzipper::unzip(BTS::Fibre::Tract const&) +calls=71248 0 +0 451310856 +0 13822112 +cob=(9) +cfi=(58) +cfn=(2654) +calls=71248 0 +0 13537120 +0 284992 +cfn=(2410) +calls=35624 0 +0 10936568 +0 284992 + +fn=(3274) +0 60 +cob=(7) +cfi=(53) +cfn=(722) +calls=5 0 +0 485 +0 120 +cob=(7) +cfi=(53) +cfn=(728) +calls=5 0 +0 3540 +0 60 +cob=(7) +cfi=(53) +cfn=(728) +calls=5 0 +0 3540 +0 110 +cob=(7) +cfi=(53) +cfn=(492) +calls=5 0 +0 195 +0 50 +cob=(7) +cfi=(53) +cfn=(728) +calls=5 0 +0 3540 +0 20 +cob=(7) +cfi=(53) +cfn=(3280) +calls=5 0 +0 17468 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1632 +0 15 +cob=(7) +cfi=(53) +cfn=(1534) +calls=5 0 +0 1745 +0 55 +cob=(7) +cfi=(53) +cfn=(1468) +calls=5 0 +0 668 +0 25 +cob=(7) +cfi=(53) +cfn=(746) +calls=5 0 +0 60 +0 80 +cob=(7) +cfi=(53) +cfn=(1556) +calls=5 0 +0 290 +0 45 + +fn=(1108) global constructors keyed to triple.cpp +0 4 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 24 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 51 + +fn=(1126) global constructors keyed to section.cpp +0 6 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 24 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 407 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 319 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 344 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 330 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 313 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 317 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 9 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 315 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 18 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 24 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 319 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 344 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 330 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 313 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 317 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 9 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 12 + +fn=(1134) global constructors keyed to gaussian.cpp +0 5 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 24 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 319 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 344 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 330 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 313 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 317 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 12 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 24 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 319 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 344 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 330 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 313 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 317 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 + +fn=(1156) T.14265 +0 8 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 24 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 407 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 319 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 344 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 330 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 313 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 317 +0 6 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 71 +cfn=(1158) MR::Option::append(MR::Argument const&) +calls=1 0 +0 1577 +0 3 +cfn=(1166) MR::Option::Option(MR::Option const&) +calls=1 0 +0 275 +0 4 +cfn=(1168) MR::Option::~Option() +calls=1 0 +0 3034 +0 23 +cfn=(1158) +calls=1 0 +0 193 +0 3 +cfn=(1166) +calls=1 0 +0 275 +0 4 +cfn=(1168) +calls=1 0 +0 85 +0 23 +cfn=(1158) +calls=1 0 +0 193 +0 3 +cfn=(1166) +calls=1 0 +0 275 +0 4 +cfn=(1168) +calls=1 0 +0 85 +0 37 +cfn=(1158) +calls=1 0 +0 193 +0 3 +cfn=(1166) +calls=1 0 +0 275 +0 4 +cfn=(1168) +calls=1 0 +0 85 +0 23 +cfn=(1158) +calls=1 0 +0 193 +0 3 +cfn=(1166) +calls=1 0 +0 275 +0 4 +cfn=(1168) +calls=1 0 +0 85 +0 25 +cfn=(1158) +calls=1 0 +0 193 +0 3 +cfn=(1166) +calls=1 0 +0 275 +0 4 +cfn=(1168) +calls=1 0 +0 85 +0 25 +cfn=(1158) +calls=1 0 +0 193 +0 3 +cfn=(1166) +calls=1 0 +0 275 +0 4 +cfn=(1168) +calls=1 0 +0 85 +0 23 +cfn=(1158) +calls=1 0 +0 193 +0 3 +cfn=(1166) +calls=1 0 +0 275 +0 4 +cfn=(1168) +calls=1 0 +0 85 +0 23 +cfn=(1158) +calls=1 0 +0 193 +0 3 +cfn=(1166) +calls=1 0 +0 275 +0 4 +cfn=(1168) +calls=1 0 +0 85 +0 40 +cfn=(1158) +calls=1 0 +0 193 +0 3 +cfn=(1166) +calls=1 0 +0 275 +0 4 +cfn=(1168) +calls=1 0 +0 85 +0 28 +cfn=(1158) +calls=1 0 +0 193 +0 3 +cfn=(1166) +calls=1 0 +0 275 +0 4 +cfn=(1168) +calls=1 0 +0 85 +0 27 +cfn=(1158) +calls=1 0 +0 193 +0 3 +cfn=(1166) +calls=1 0 +0 275 +0 4 +cfn=(1168) +calls=1 0 +0 85 +0 28 +cfn=(1158) +calls=1 0 +0 193 +0 3 +cfn=(1166) +calls=1 0 +0 275 +0 4 +cfn=(1168) +calls=1 0 +0 85 +0 24 +cfn=(1158) +calls=1 0 +0 193 +0 3 +cfn=(1166) +calls=1 0 +0 275 +0 4 +cfn=(1168) +calls=1 0 +0 85 +0 27 +cfn=(1158) +calls=1 0 +0 193 +0 3 +cfn=(1166) +calls=1 0 +0 275 +0 4 +cfn=(1168) +calls=1 0 +0 85 +0 27 +cfn=(1158) +calls=1 0 +0 193 +0 3 +cfn=(1166) +calls=1 0 +0 275 +0 4 +cfn=(1168) +calls=1 0 +0 85 +0 25 +cfn=(1158) +calls=1 0 +0 193 +0 3 +cfn=(1166) +calls=1 0 +0 275 +0 4 +cfn=(1168) +calls=1 0 +0 85 +0 28 +cfn=(1158) +calls=1 0 +0 193 +0 3 +cfn=(1166) +calls=1 0 +0 275 +0 4 +cfn=(1168) +calls=1 0 +0 85 +0 40 +cfn=(1158) +calls=1 0 +0 193 +0 3 +cfn=(1166) +calls=1 0 +0 275 +0 4 +cfn=(1168) +calls=1 0 +0 85 +0 25 +cfn=(1158) +calls=1 0 +0 193 +0 3 +cfn=(1166) +calls=1 0 +0 275 +0 4 +cfn=(1168) +calls=1 0 +0 85 +0 28 +cfn=(1158) +calls=1 0 +0 193 +0 3 +cfn=(1166) +calls=1 0 +0 275 +0 4 +cfn=(1168) +calls=1 0 +0 85 +0 25 +cfn=(1158) +calls=1 0 +0 193 +0 3 +cfn=(1166) +calls=1 0 +0 275 +0 4 +cfn=(1168) +calls=1 0 +0 85 +0 40 +cfn=(1158) +calls=1 0 +0 193 +0 3 +cfn=(1166) +calls=1 0 +0 275 +0 4 +cfn=(1168) +calls=1 0 +0 85 +0 28 +cfn=(1158) +calls=1 0 +0 193 +0 3 +cfn=(1166) +calls=1 0 +0 275 +0 4 +cfn=(1168) +calls=1 0 +0 85 +0 63 +cfn=(1158) +calls=1 0 +0 193 +0 3 +cfn=(1158) +calls=1 0 +0 397 +0 3 +cfn=(1166) +calls=1 0 +0 293 +0 4 +cfn=(1168) +calls=1 0 +0 85 +0 50 +cfn=(1158) +calls=1 0 +0 193 +0 3 +cfn=(1158) +calls=1 0 +0 312 +0 3 +cfn=(1166) +calls=1 0 +0 293 +0 4 +cfn=(1168) +calls=1 0 +0 85 +0 62 +cfn=(1158) +calls=1 0 +0 193 +0 3 +cfn=(1158) +calls=1 0 +0 312 +0 3 +cfn=(1158) +calls=1 0 +0 407 +0 3 +cfn=(1166) +calls=1 0 +0 303 +0 4 +cfn=(1168) +calls=1 0 +0 116 +0 56 +cfn=(1158) +calls=1 0 +0 193 +0 3 +cfn=(1158) +calls=1 0 +0 312 +0 3 +cfn=(1158) +calls=1 0 +0 362 +0 3 +cfn=(1166) +calls=1 0 +0 303 +0 4 +cfn=(1168) +calls=1 0 +0 116 +0 60 +cfn=(1158) +calls=1 0 +0 193 +0 3 +cfn=(1158) +calls=1 0 +0 312 +0 3 +cfn=(1158) +calls=1 0 +0 362 +0 3 +cfn=(1166) +calls=1 0 +0 303 +0 4 +cfn=(1168) +calls=1 0 +0 116 +0 60 +cfn=(1158) +calls=1 0 +0 193 +0 3 +cfn=(1158) +calls=1 0 +0 312 +0 3 +cfn=(1158) +calls=1 0 +0 362 +0 3 +cfn=(1166) +calls=1 0 +0 303 +0 4 +cfn=(1168) +calls=1 0 +0 116 +0 87 +cfn=(1158) +calls=1 0 +0 193 +0 3 +cfn=(1158) +calls=1 0 +0 312 +0 3 +cfn=(1158) +calls=1 0 +0 362 +0 3 +cfn=(1158) +calls=1 0 +0 25 +0 3 +cfn=(1158) +calls=1 0 +0 474 +0 3 +cfn=(1166) +calls=1 0 +0 382 +0 4 +cfn=(1168) +calls=1 0 +0 116 +0 50 +cfn=(1158) +calls=1 0 +0 193 +0 3 +cfn=(1158) +calls=1 0 +0 312 +0 3 +cfn=(1166) +calls=1 0 +0 369 +0 4 +cfn=(1168) +calls=1 0 +0 85 +0 50 +cfn=(1158) +calls=1 0 +0 193 +0 3 +cfn=(1158) +calls=1 0 +0 312 +0 3 +cfn=(1166) +calls=1 0 +0 442 +0 4 +cfn=(1168) +calls=1 0 +0 85 +0 63 +cfn=(1158) +calls=1 0 +0 193 +0 3 +cfn=(1158) +calls=1 0 +0 312 +0 3 +cfn=(1158) +calls=1 0 +0 378 +0 3 +cfn=(1166) +calls=1 0 +0 434 +0 4 +cfn=(1168) +calls=1 0 +0 127 +0 50 +cfn=(1158) +calls=1 0 +0 193 +0 3 +cfn=(1158) +calls=1 0 +0 312 +0 3 +cfn=(1166) +calls=1 0 +0 394 +0 4 +cfn=(1168) +calls=1 0 +0 85 +0 63 +cfn=(1158) +calls=1 0 +0 193 +0 3 +cfn=(1158) +calls=1 0 +0 312 +0 3 +cfn=(1158) +calls=1 0 +0 488 +0 3 +cfn=(1166) +calls=1 0 +0 288 +0 4 +cfn=(1168) +calls=1 0 +0 280 +0 61 +cfn=(1158) +calls=1 0 +0 230 +0 3 +cfn=(1158) +calls=1 0 +0 352 +0 3 +cfn=(1158) +calls=1 0 +0 407 +0 3 +cfn=(1166) +calls=1 0 +0 319 +0 4 +cfn=(1168) +calls=1 0 +0 116 +0 75 +cfn=(1158) +calls=1 0 +0 193 +0 3 +cfn=(1158) +calls=1 0 +0 312 +0 3 +cfn=(1158) +calls=1 0 +0 362 +0 3 +cfn=(1158) +calls=1 0 +0 25 +0 3 +cfn=(1166) +calls=1 0 +0 321 +0 3 +cfn=(1168) +calls=1 0 +0 116 +0 49 +cfn=(1158) +calls=1 0 +0 193 +0 3 +cfn=(1158) +calls=1 0 +0 312 +0 3 +cfn=(1166) +calls=1 0 +0 369 +0 4 +cfn=(1168) +calls=1 0 +0 85 +0 21 +cfn=(1158) +calls=1 0 +0 193 +0 3 +cfn=(1166) +calls=1 0 +0 344 +0 4 +cfn=(1168) +calls=1 0 +0 85 +0 23 +cfn=(1158) +calls=1 0 +0 193 +0 3 +cfn=(1166) +calls=1 0 +0 333 +0 4 +cfn=(1168) +calls=1 0 +0 85 +0 26 +cfn=(1158) +calls=1 0 +0 193 +0 3 +cfn=(1166) +calls=1 0 +0 387 +0 4 +cfn=(1168) +calls=1 0 +0 85 +0 26 +cfn=(1158) +calls=1 0 +0 193 +0 3 +cfn=(1166) +calls=1 0 +0 275 +0 4 +cfn=(1168) +calls=1 0 +0 85 +0 26 +cfn=(1158) +calls=1 0 +0 193 +0 3 +cfn=(1166) +calls=1 0 +0 275 +0 4 +cfn=(1168) +calls=1 0 +0 85 +0 26 +cfn=(1158) +calls=1 0 +0 193 +0 3 +cfn=(1166) +calls=1 0 +0 275 +0 4 +cfn=(1168) +calls=1 0 +0 85 +0 26 +cfn=(1158) +calls=1 0 +0 193 +0 3 +cfn=(1166) +calls=1 0 +0 275 +0 4 +cfn=(1168) +calls=1 0 +0 85 +0 23 +cfn=(1158) +calls=1 0 +0 193 +0 3 +cfn=(1166) +calls=1 0 +0 275 +0 4 +cfn=(1168) +calls=1 0 +0 85 +0 23 +cfn=(1158) +calls=1 0 +0 193 +0 3 +cfn=(1166) +calls=1 0 +0 275 +0 4 +cfn=(1168) +calls=1 0 +0 85 +0 23 +cfn=(1158) +calls=1 0 +0 193 +0 3 +cfn=(1166) +calls=1 0 +0 275 +0 3 +cfn=(1168) +calls=1 0 +0 85 +0 3 +cfn=(1166) +calls=1 0 +0 44 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 130 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 315 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 7 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 312 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 7 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 312 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 7 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 312 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 7 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 312 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 7 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 312 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 1 + +fn=(1186) global constructors keyed to writer.cpp +0 5 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 24 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 5 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 342 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 + +fn=(1216) global constructors keyed to end_in_sphere.cpp +0 6 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 24 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 319 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 344 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 330 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 313 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 317 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 5 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 312 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 8 + +fn=(2012) +0 90 +cob=(4) +cfi=(69) +cfn=(642) +calls=9 26 +0 222 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1690 +0 81 +cob=(7) +cfi=(53) +cfn=(1384) +calls=9 0 +0 2326 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1450 +0 36 +cob=(7) +cfi=(53) +cfn=(1772) +calls=9 0 +0 599 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1508 +0 27 +cob=(7) +cfi=(53) +cfn=(1406) +calls=9 0 +0 699 +0 63 + +fn=(2392) +0 56892414 +cob=(7) +cfi=(53) +cfn=(1258) +calls=1174490 0 +0 23489800 +0 40294752 + +fn=(2402) +0 692 +cfn=(3618) std::string* std::__uninitialized_copy_a(std::string*, std::string*, std::string*, std::allocator&) +calls=1 0 +0 81 +0 324 +cob=(7) +cfi=(53) +cfn=(880) +calls=6 0 +0 1073 +0 36 +cfn=(2404) std::string* std::__uninitialized_copy_a<__gnu_cxx::__normal_iterator > >, std::string*, std::string>(__gnu_cxx::__normal_iterator > >, __gnu_cxx::__normal_iterator > >, std::string*, std::allocator&) +calls=6 0 +0 7466 +0 101 +cob=(7) +cfi=(53) +cfn=(1264) +calls=1 0 +0 123 +0 56 + +fn=(2472) MR::Image::Axes::Axis* std::__uninitialized_move_a >(MR::Image::Axes::Axis*, MR::Image::Axes::Axis*, MR::Image::Axes::Axis*, std::allocator&) +0 42 + +fn=(2588) +0 36 +cob=(7) +cfi=(53) +cfn=(880) +calls=3 0 +0 346 +0 21 +cob=(7) +cfi=(53) +cfn=(1258) +calls=3 0 +0 60 +0 9 +cob=(7) +cfi=(53) +cfn=(1258) +calls=3 0 +0 60 +0 33 +cfn=(2589) std::_Rb_tree, std::_Select1st >, std::less, std::allocator > >::_M_copy(std::_Rb_tree_node > const*, std::_Rb_tree_node >*)'2 +calls=3 0 +0 4362 +0 24 +cob=(7) +cfi=(53) +cfn=(880) +calls=3 0 +0 720 +0 2 +cob=(7) +cfi=(53) +cfn=(880) +calls=1 0 +0 168 +0 28 +cob=(7) +cfi=(53) +cfn=(1258) +calls=4 0 +0 80 +0 12 +cob=(7) +cfi=(53) +cfn=(1258) +calls=4 0 +0 80 +0 36 +cfn=(2589) +calls=1 0 +0 249 +0 44 + +fn=(2589) +0 144 +cob=(7) +cfi=(53) +cfn=(880) +calls=12 0 +0 2457 +0 84 +cob=(7) +cfi=(53) +cfn=(1258) +calls=12 0 +0 240 +0 36 +cob=(7) +cfi=(53) +cfn=(1258) +calls=12 0 +0 240 +0 108 +cfn=(2589) +calls=6 0 +0 5412 +0 54 +cob=(7) +cfi=(53) +cfn=(880) +calls=3 0 +0 498 +0 4 +cob=(7) +cfi=(53) +cfn=(880) +calls=2 0 +0 318 +0 35 +cob=(7) +cfi=(53) +cfn=(1258) +calls=5 0 +0 100 +0 15 +cob=(7) +cfi=(53) +cfn=(1258) +calls=5 0 +0 100 +0 48 +cfn=(2589) +calls=2 0 +0 494 +0 130 + +fn=(2640) MR::Image::Axes::Axis::~Axis() +0 40 +cob=(7) +cfi=(53) +cfn=(1468) +calls=8 0 +0 359 +0 32 +cob=(7) +cfi=(53) +cfn=(1468) +calls=8 0 +0 359 + +fn=(2880) +0 23 +cob=(7) +cfi=(53) +cfn=(1174) +calls=1 0 +0 114 +0 15 +cfn=(2882) BTS::Diffusion::Model::Model(MR::Math::Matrix const&, double, double, bool) +calls=1 0 +0 7036515 +0 3 +cfn=(3024) std::vector >::operator=(std::vector > const&) +calls=1 0 +0 32524 +0 249 +cob=(9) +cfi=(58) +cfn=(2654) +calls=61 0 +0 10065 +0 185 + +fn=(2888) +0 25441392 +cob=(9) +cfi=(58) +cfn=(1916) +calls=1060058 0 +0 243525329 +0 4240232 + +fn=(3004) BTS::Diffusion::Model::SH_to_coeffs(MR::Math::Vector, bool) +0 7680 +cob=(6) +cfi=(126) /build/buildd/eglibc-2.11.1/math/w_pow.c +cfn=(3010) pow +calls=300 29 +0 75780 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1382 +0 2640 +cob=(7) +cfi=(53) +cfn=(1174) +calls=60 0 +0 4860 +0 300 +cob=(7) +cfi=(53) +cfn=(880) +calls=60 0 +0 6600 +0 1320 +cob=(7) +cfi=(53) +cfn=(1174) +calls=60 0 +0 4860 +0 300 +cob=(7) +cfi=(53) +cfn=(880) +calls=60 0 +0 6600 +0 1320 +cob=(7) +cfi=(53) +cfn=(1174) +calls=60 0 +0 4860 +0 300 +cob=(7) +cfi=(53) +cfn=(880) +calls=60 0 +0 6600 +0 1380 +cfn=(3020) +calls=60 0 +0 13260 +0 420 +cob=(7) +cfi=(53) +cfn=(1174) +calls=60 0 +0 4860 +0 300 +cob=(7) +cfi=(53) +cfn=(880) +calls=60 0 +0 6600 +0 1320 +cob=(7) +cfi=(53) +cfn=(1174) +calls=60 0 +0 4860 +0 13740 +cfn=(2888) +calls=60 0 +0 14400 +0 17160 +cob=(7) +cfi=(53) +cfn=(1174) +calls=300 0 +0 24300 +0 1140 +cob=(7) +cfi=(53) +cfn=(1174) +calls=60 0 +0 7061 +0 1020 +cob=(7) +cfi=(53) +cfn=(880) +calls=60 0 +0 6600 +0 1260 +cfn=(3018) std::vector >, std::allocator > > >::_M_insert_aux(__gnu_cxx::__normal_iterator >*, std::vector >, std::allocator > > > >, std::vector > const&) +calls=60 0 +0 71066 +0 420 +cfn=(3018) +calls=60 0 +0 51263 +0 420 +cfn=(3018) +calls=60 0 +0 119365 +0 420 +cfn=(3018) +calls=60 0 +0 27105 +0 60 + +fn=(3086) +0 8 +cfn=(3088) BTS::Image::Expected::Quartic::Buffer::dims() const +calls=2 0 +0 4 +0 38 + +fn=(3254) BTS::Prob::Test::Peaks::Peak::~Peak() +0 95 +cfn=(3256) BTS::MCMC::State::~State() +calls=19 0 +0 3572 +0 76 +cfn=(3256) +calls=19 0 +0 3572 + +fn=(3270) +0 16 +cfn=(3254) +calls=1 0 +0 385 +0 10 +cfn=(3254) +calls=5 0 +0 1925 +0 22 +cob=(7) +cfi=(53) +cfn=(1174) +calls=1 0 +0 127 +0 10 + +fn=(3468) +0 22 +cfn=(3470) BTS::Fibre::Base::Reader >::next(BTS::Fibre::Set&, BTS::Fibre::Properties&) +calls=2 0 +0 122250 +0 60 +cfn=(3474) std::_Rb_tree, std::_Select1st >, std::less, std::allocator > >::_M_erase(std::_Rb_tree_node >*) +calls=2 0 +0 22 +0 40 +cfn=(3524) BTS::Fibre::Set::Reader::extended_elem_header() const +calls=2 0 +0 4906 +0 18 +cfn=(3528) std::vector >::vector(unsigned long, std::string const&, std::allocator const&) +calls=2 0 +0 58 +0 8 +cfn=(3524) +calls=2 0 +0 5092 +0 12 +cfn=(3530) BTS::Fibre::Properties::Extended::add_properties(BTS::Fibre::Properties::Header const&, std::vector > const&) +calls=2 0 +0 66 +0 4 +cfn=(3462) BTS::Fibre::Properties::Header::~Header() +calls=2 0 +0 192 +0 4 +cfn=(2410) +calls=2 0 +0 30 +0 4 +cfn=(3462) +calls=2 0 +0 192 +0 4 +cob=(7) +cfi=(53) +cfn=(1468) +calls=2 0 +0 14 +0 36 +cob=(7) +cfi=(53) +cfn=(1730) +calls=2 0 +0 910 +0 26 +cfn=(3532) BTS::Fibre::Set::Reader::is_row_seperator(std::string const&) +calls=2 0 +0 38 +0 16 +cfn=(3532) +calls=8 0 +0 1450 +0 100 +cfn=(3512) BTS::Fibre::Properties::Extended::parse_line(std::string const&) +calls=8 0 +0 33846 +0 168 +cfn=(3272) +calls=8 0 +0 3032 +0 48 +cfn=(3272) +calls=8 0 +0 3352 +0 48 +cob=(7) +cfi=(53) +cfn=(1264) +calls=16 0 +0 448 +0 184 +cfn=(3534) BTS::Fibre::Tract::set_intrinsic_properties(BTS::Fibre::Properties&) +calls=8 0 +0 65653 +0 24 +cfn=(3544) +calls=8 0 +0 544 +0 104 +cob=(7) +cfi=(53) +cfn=(1730) +calls=8 0 +0 2689 +0 56 +cfn=(2642) +calls=8 0 +0 88 +0 16 +cfn=(2410) +calls=8 0 +0 2456 +0 20 +cob=(7) +cfi=(53) +cfn=(1468) +calls=2 0 +0 200 +0 4 + +fn=(3500) std::vector, std::allocator > >::_M_insert_aux(__gnu_cxx::__normal_iterator*, std::vector, std::allocator > > >, BTS::Triple const&) +0 89577585900 +cob=(7) +cfi=(53) +cfn=(880) +calls=4071708450 0 +0 447888135171 +0 190013061000 +cob=(7) +cfi=(53) +cfn=(1174) +calls=2714472300 0 +0 219872256300 +0 84148641300 + +fn=(3562) BTS::Fibre::Tract::Set::~Set() +0 237186 +cfn=(3564) +calls=26354 0 +0 1475824 +0 316232 +cfn=(3508) +calls=105408 0 +0 84115584 +0 421638 +cob=(7) +cfi=(53) +cfn=(1174) +calls=26352 0 +0 2797778 +0 79062 +cfn=(2642) +calls=26354 0 +0 289894 +0 158124 +cfn=(3510) +calls=26354 0 +0 5666110 +0 105416 + +fn=(3682) std::_Rb_tree >, std::_Select1st > >, std::less, std::allocator > > >::_M_insert_unique_(std::_Rb_tree_const_iterator > >, std::pair > const&) +0 40 +cfn=(3684) std::_Rb_tree >, std::_Select1st > >, std::less, std::allocator > > >::_M_insert_unique(std::pair > const&) +calls=2 0 +0 615 +0 2 + +fn=(3706) BTS::Diffusion::Response::weighting(BTS::Triple const&, BTS::Triple&, BTS::Coord::Tensor&) +0 9683526662 +cfn=(3708) BTS::Triple::outer(BTS::Triple const&) const +calls=125155080 0 +0 4881048120 +0 1752171120 +cfn=(3708) +calls=41718360 0 +0 1627016040 +0 6174317280 +cfn=(3708) +calls=166873440 0 +0 6508064160 +0 667493760 +cfn=(3708) +calls=166873440 0 +0 6508064160 +0 7175557920 +cfn=(3708) +calls=166873440 0 +0 6508064160 +0 15734079474 + +fn=(3726) std::_Rb_tree, std::less, std::allocator >::_M_erase(std::_Rb_tree_node*) +0 7651619 +cfn=(3727) std::_Rb_tree, std::less, std::allocator >::_M_erase(std::_Rb_tree_node*)'2 +calls=695407 0 +0 212817709 +0 4978365 +cfn=(3727) +calls=1659455 0 +0 139600196 +0 7064586 +cob=(7) +cfi=(53) +cfn=(1174) +calls=2354862 0 +0 190743822 +0 9847438 + +fn=(3727) +0 48809308 +cfn=(3727) +calls=2466629 0 +0 130538577 +0 2225295 +cfn=(3727) +calls=741765 0 +0 17185089 +0 9625182 +cob=(7) +cfi=(53) +cfn=(1174) +calls=3208394 0 +0 259879914 +0 31878206 + +fn=(3756) std::_Rb_tree, std::_Select1st >, std::less, std::allocator > >::_M_insert_unique(std::pair const&) +0 14 +cfn=(3758) std::_Rb_tree, std::_Select1st >, std::less, std::allocator > >::_M_insert_(std::_Rb_tree_node_base const*, std::_Rb_tree_node_base const*, std::pair const&) +calls=1 0 +0 815 +0 12 + +fn=(3758) +0 2886 +cob=(7) +cfi=(53) +cfn=(880) +calls=93 0 +0 44801 +0 288 +cob=(7) +cfi=(53) +cfn=(880) +calls=144 0 +0 60104 +0 2370 +cfn=(3752) BTS::Image::Expected::Voxel::Voxel(BTS::Image::Expected::Voxel const&) +calls=237 0 +0 123714 +0 2370 +cob=(7) +cfi=(53) +cfn=(2426) +calls=237 0 +0 17587 +0 4304 + +fn=(3772) BTS::Image::Container::Buffer::new_voxel(BTS::Image::Coord const&) +0 5110 +cfn=(3496) +calls=365 0 +0 536908 +0 3650 +cob=(7) +cfi=(53) +cfn=(880) +calls=365 0 +0 6550572 +0 114245 +cfn=(3504) +calls=22265 0 +0 41304464 +0 90520 +cfn=(3508) +calls=365 0 +0 201480 +0 4745 + +fn=(3810) BTS::Image::Container::Buffer::new_voxel(BTS::Image::Coord const&) +0 1460 +cfn=(3812) BTS::Image::Voxel::Voxel(unsigned int) +calls=365 0 +0 127344424 +0 2555 + +fn=(3812) +0 8395 +cfn=(3496) +calls=365 0 +0 526695 +0 1095 +cfn=(3496) +calls=365 0 +0 526695 +0 2920 +cob=(7) +cfi=(53) +cfn=(880) +calls=365 0 +0 40150 +0 38690 +cfn=(3800) BTS::Fibre::Tract::Tensor_tpl::init() +calls=365 0 +0 433985 +0 3650 +cob=(7) +cfi=(53) +cfn=(880) +calls=365 0 +0 2949731 +0 114975 +cfn=(3814) BTS::Fibre::Tract::Tensor::Tensor(BTS::Fibre::Tract::Tensor const&) +calls=22265 0 +0 121995548 +0 91250 +cfn=(3816) +calls=365 0 +0 607725 +0 2920 + +fn=(3816) +0 1802078 +cfn=(3508) +calls=152424 0 +0 121634352 +0 457272 +cfn=(3508) +calls=152424 0 +0 121634352 +0 304848 +cfn=(3508) +calls=152424 0 +0 121634352 +0 864174 +cob=(7) +cfi=(53) +cfn=(1174) +calls=50808 0 +0 5400087 +0 514358 +cob=(7) +cfi=(53) +cfn=(1174) +calls=39566 0 +0 3204846 +0 79132 +cfn=(3508) +calls=39566 0 +0 26006688 +0 79132 +cfn=(3508) +calls=39566 0 +0 26006688 +0 118698 +cfn=(3818) std::_Rb_tree, std::_Select1st >, std::less, std::allocator > >::_M_erase(std::_Rb_tree_node >*) +calls=39566 0 +0 16538588 +0 316528 + +fn=(3824) std::_Rb_tree >, std::_Select1st > >, std::less, std::allocator > > >::_M_insert_unique(std::pair > const&) +0 56 +cfn=(3826) std::_Rb_tree >, std::_Select1st > >, std::less, std::allocator > > >::_M_insert_(std::_Rb_tree_node_base const*, std::_Rb_tree_node_base const*, std::pair > const&) +calls=4 0 +0 1158 +0 48 + +fn=(3844) BTS::Triple::norm(BTS::Triple&, BTS::Coord::Tensor&) const +0 344871528 + +fn=(3856) BTS::Fibre::BasicStrand::operator+=(BTS::Fibre::BasicStrand const&) +0 442798285977 + +fn=(3858) std::vector, std::allocator > >::vector(std::vector, std::allocator > > const&) +0 15608215449 +cob=(7) +cfi=(53) +cfn=(880) +calls=678618063 0 +0 74647986930 +0 41395701843 + +fn=(3864) BTS::Fibre::Tract::Section::~Section() +0 10276200 + +fn=(3868) std::_Rb_tree >, std::_Select1st > >, std::less, std::allocator > > >::_M_copy(std::_Rb_tree_node > > const*, std::_Rb_tree_node > >*) +0 36 +cob=(7) +cfi=(53) +cfn=(880) +calls=3 0 +0 415 +0 81 +cob=(7) +cfi=(53) +cfn=(880) +calls=3 0 +0 4646970 +0 954 +cfn=(3814) +calls=183 0 +0 28335603 +0 978 +cfn=(3869) std::_Rb_tree >, std::_Select1st > >, std::less, std::allocator > > >::_M_copy(std::_Rb_tree_node > > const*, std::_Rb_tree_node > >*)'2 +calls=3 0 +0 870861248 +0 30 +cob=(7) +cfi=(53) +cfn=(880) +calls=3 0 +0 585 +0 32 +cob=(7) +cfi=(53) +cfn=(880) +calls=16 0 +0 3120 +0 570 +cob=(7) +cfi=(53) +cfn=(880) +calls=19 0 +0 24340 +0 6023 +cfn=(3814) +calls=1159 0 +0 184417920 +0 6121 +cfn=(3869) +calls=15 0 +0 1067929787 +0 118 + +fn=(3869) +0 1320 +cob=(7) +cfi=(53) +cfn=(880) +calls=110 0 +0 20917 +0 2970 +cob=(7) +cfi=(53) +cfn=(880) +calls=110 0 +0 142883 +0 34980 +cfn=(3814) +calls=6710 0 +0 1064826984 +0 35632 +cfn=(3869) +calls=53 0 +0 2081090932 +0 706 +cob=(7) +cfi=(53) +cfn=(880) +calls=54 0 +0 10503 +0 72 +cob=(7) +cfi=(53) +cfn=(880) +calls=36 0 +0 7020 +0 2700 +cob=(7) +cfi=(53) +cfn=(880) +calls=90 0 +0 115253 +0 28530 +cfn=(3814) +calls=5490 0 +0 873530310 +0 28866 +cfn=(3869) +calls=39 0 +0 786381398 +0 1389 + +fn=(3888) BTS::Fibre::Flattener::length(BTS::Fibre::Tract::Tensor const&) +0 106872 +cfn=(3568) +calls=35624 0 +0 75314723 +0 1959320 + +fn=(3924) MR::Math::Matrix BTS::Math::outer(MR::Math::Vector const&, MR::Math::Vector const&) +0 144936 +cfn=(3626) +calls=13176 0 +0 52737481 +0 1652771088 + +fn=(2822) BTS::Image::Observed::Voxel::~Voxel() +0 513 +cob=(7) +cfi=(53) +cfn=(1174) +calls=27 0 +0 3035 +0 54 + +fn=(1070) global constructors keyed to end_out_sphere.cpp +0 6 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 24 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1579 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1778 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1498 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 319 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 344 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 407 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 330 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 313 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 317 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 5 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 319 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 37 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 5 + +fn=(1096) global constructors keyed to common.cpp +0 3 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 24 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 5 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 24 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 319 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 344 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 330 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 313 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 317 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 407 +0 4 + +fn=(1140) global constructors keyed to prior.cpp +0 5 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 24 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 319 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 344 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 330 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 313 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 317 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 + +fn=(1154) global constructors keyed to test_gradient.cpp +0 1 +cfn=(1156) +calls=1 0 +0 49975 + +fn=(1184) global constructors keyed to tensor.cpp +0 5 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 24 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 407 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 319 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 344 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 330 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 313 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 317 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 8 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 24 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 6 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 24 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 24 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 3 + +fn=(1190) global constructors keyed to KMlocal.cpp +0 7 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 319 +0 6 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 344 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 330 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 313 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 317 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 + +fn=(1192) global constructors keyed to KMeans.cpp +0 5 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 24 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 319 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 344 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 330 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 313 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 317 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 + +fn=(1204) global constructors keyed to model.cpp +0 5 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 24 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 319 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 344 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 330 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 313 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 317 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 407 +0 4 + +fn=(1210) global constructors keyed to KMdata.cpp +0 7 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 319 +0 6 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 344 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 330 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 313 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 317 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 + +fn=(1436) +0 56 +cob=(7) +cfi=(53) +cfn=(1246) +calls=4 0 +0 640 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1650 +0 56 +cob=(7) +cfi=(53) +cfn=(1446) +calls=4 0 +0 824 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1434 +0 12 +cob=(7) +cfi=(53) +cfn=(1264) +calls=4 0 +0 112 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1506 +0 8 +cob=(7) +cfi=(53) +cfn=(1468) +calls=4 0 +0 60 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1440 +0 24 + +fn=(1602) +0 16 +cob=(7) +cfi=(53) +cfn=(722) +calls=1 0 +0 97 +0 22 +cob=(7) +cfi=(53) +cfn=(728) +calls=1 0 +0 708 +0 7 +cob=(7) +cfi=(53) +cfn=(1608) +calls=1 0 +0 4123 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1938 +0 3 +cob=(7) +cfi=(53) +cfn=(728) +calls=1 0 +0 708 +0 4 +cob=(7) +cfi=(53) +cfn=(1632) +calls=1 0 +0 11631 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 2282 +0 7 +cob=(7) +cfi=(53) +cfn=(1712) +calls=1 0 +0 8 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 2154 +0 5 +cfn=(1714) +calls=1 0 +0 783365 +0 9 +cob=(7) +cfi=(53) +cfn=(1928) +calls=1 0 +0 10007 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 2010 +0 2 +cob=(7) +cfi=(53) +cfn=(1990) +calls=1 0 +0 17 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1619 +0 5 +cob=(7) +cfi=(53) +cfn=(746) +calls=1 0 +0 12 +0 9 +cob=(7) +cfi=(53) +cfn=(1556) +calls=1 0 +0 58 +0 12 + +fn=(1852) +0 5490 +cob=(7) +cfi=(53) +cfn=(880) +calls=183 0 +0 35161 +0 2745 +cob=(4) +cfi=(90) +cfn=(1282) +calls=183 47 +0 9699 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1698 +0 1464 +cob=(4) +cfi=(90) +cfn=(1282) +calls=183 47 +0 4392 +0 671 +cob=(7) +cfi=(53) +cfn=(1174) +calls=122 0 +0 9882 +0 2684 + +fn=(2432) +0 80 +cob=(7) +cfi=(53) +cfn=(1468) +calls=16 0 +0 112 +0 64 +cob=(7) +cfi=(53) +cfn=(1468) +calls=16 0 +0 240 + +fn=(2470) void std::__uninitialized_fill_n_a(MR::Image::Axes::Axis*, unsigned long, MR::Image::Axes::Axis const&, std::allocator&) +0 65 +cob=(7) +cfi=(53) +cfn=(1258) +calls=4 0 +0 60 +0 12 +cob=(7) +cfi=(53) +cfn=(1258) +calls=4 0 +0 60 +0 24 + +fn=(2884) MR::Math::Matrix::Matrix(unsigned long, unsigned long) +0 7105 +cob=(9) +cfi=(58) +cfn=(1916) +calls=245 0 +0 98433 +0 1225 + +fn=(2886) BTS::Diffusion::Model::tensor_m0_SH(double, double, double) +0 549 +cfn=(2888) +calls=61 0 +0 14672 +0 488 +cfn=(2890) MR::Math::Vector& MR::Math::SH::FA2SH(MR::Math::Vector&, double, double, double, int, int) +calls=61 0 +0 6294369 +0 244 + +fn=(3032) BTS::Diffusion::Model::Model(BTS::Diffusion::Model const&) +0 84 +cob=(7) +cfi=(53) +cfn=(880) +calls=3 0 +0 6546 +0 19716 +cob=(9) +cfi=(58) +cfn=(1916) +calls=183 0 +0 68332 +0 549 + +fn=(3080) +0 12 +cob=(7) +cfi=(53) +cfn=(880) +calls=2 0 +0 374 +0 8 +cfn=(3082) BTS::Image::Expected::Quartic::Buffer::Buffer(BTS::Image::Expected::Quartic::Buffer const&) +calls=2 0 +0 61166 +0 10 + +fn=(3082) +0 22 +cfn=(3084) BTS::Image::Expected::Buffer_tpl::Buffer_tpl(BTS::Image::Expected::Buffer_tpl const&) +calls=2 0 +0 61006 +0 14 +cfn=(3042) BTS::Image::Expected::Quartic::Buffer::init() +calls=2 0 +0 116 +0 8 + +fn=(3098) BTS::Image::Observed::Buffer::encoding(unsigned int) const +0 13176 + +fn=(3104) covariant return thunk to BTS::Prob::Uniform::clone() const +0 2 +cfn=(3105) covariant return thunk to BTS::Prob::Uniform::clone() const'2 +calls=1 0 +0 216 + +fn=(3105) +0 2 +cfn=(3106) BTS::Prob::Uniform::clone() const +calls=1 0 +0 207 +0 7 + +fn=(3106) +0 3 +cob=(7) +cfi=(53) +cfn=(880) +calls=1 0 +0 195 +0 9 + +fn=(3108) non-virtual thunk to BTS::Prob::Uniform::~Uniform() +0 2 +cfn=(3110) BTS::Prob::Uniform::~Uniform() +calls=1 0 +0 91 + +fn=(3116) std::vector >::_M_insert_aux(__gnu_cxx::__normal_iterator > >, BTS::Prob::StrandComponent* const&) +0 59 +cob=(7) +cfi=(53) +cfn=(880) +calls=2 0 +0 305 +0 30 +cob=(4) +cfi=(90) +cfn=(1282) +calls=2 47 +0 97 +0 16 +cob=(4) +cfi=(90) +cfn=(1282) +calls=2 47 +0 48 +0 7 +cob=(7) +cfi=(53) +cfn=(1174) +calls=1 0 +0 81 +0 28 + +fn=(3246) BTS::Prob::Test::Peaks::Peak::Peak(BTS::MCMC::State const&, BTS::MCMC::State const&, double, unsigned int) +0 696 +cob=(9) +cfi=(58) +cfn=(1916) +calls=6 0 +0 1442 +0 30 +cob=(9) +cfi=(58) +cfn=(1916) +calls=6 0 +0 1442 +0 18 + +fn=(3366) +0 22 +cfn=(3368) BTS::Fibre::Base::Reader >::open(std::string const&) +calls=2 0 +0 140732 +0 8 +cfn=(3436) +calls=2 0 +0 698 +0 6 +cob=(7) +cfi=(53) +cfn=(1258) +calls=2 0 +0 40 +0 4 +cfn=(3438) BTS::File::is_file(std::string) +calls=2 0 +0 60 +0 6 +cob=(7) +cfi=(53) +cfn=(1468) +calls=2 0 +0 30 +0 14 +cob=(7) +cfi=(53) +cfn=(1632) +calls=2 0 +0 3150 +0 14 +cob=(7) +cfi=(53) +cfn=(1712) +calls=2 0 +0 16 +0 6 +cfn=(3444) BTS::Fibre::Properties::Extended::read_header(std::basic_ifstream >&) +calls=2 0 +0 12693 +0 6 +cfn=(2402) +calls=2 0 +0 525 +0 4 +cfn=(3462) +calls=2 0 +0 274 +0 6 +cob=(7) +cfi=(53) +cfn=(1468) +calls=2 0 +0 200 +0 14 + +fn=(3444) +0 44 +cfn=(3446) BTS::Fibre::Properties::Extended::read_preamble(std::basic_ifstream >&) +calls=4 0 +0 7627 +0 92 +cob=(7) +cfi=(53) +cfn=(1730) +calls=4 0 +0 2137 +0 28 +cob=(7) +cfi=(53) +cfn=(722) +calls=4 0 +0 388 +0 100 +cob=(7) +cfi=(53) +cfn=(728) +calls=4 0 +0 2832 +0 64 +cob=(7) +cfi=(53) +cfn=(492) +calls=4 0 +0 156 +0 36 +cob=(7) +cfi=(53) +cfn=(1812) +calls=4 0 +0 1125 +0 24 +cob=(7) +cfi=(53) +cfn=(1528) +calls=4 0 +0 84 +0 12 +cob=(7) +cfi=(53) +cfn=(728) +calls=4 0 +0 2832 +0 56 +cob=(7) +cfi=(53) +cfn=(1730) +calls=4 0 +0 1977 +0 24 +cob=(7) +cfi=(53) +cfn=(1730) +calls=6 0 +0 3227 +0 48 +cob=(7) +cfi=(53) +cfn=(1468) +calls=4 0 +0 400 +0 40 +cob=(7) +cfi=(53) +cfn=(1468) +calls=4 0 +0 400 +0 20 +cob=(7) +cfi=(53) +cfn=(746) +calls=4 0 +0 48 +0 44 +cob=(7) +cfi=(53) +cfn=(1556) +calls=4 0 +0 232 +0 8 +cob=(7) +cfi=(53) +cfn=(1468) +calls=4 0 +0 400 +0 78 +cfn=(2390) +calls=6 0 +0 1941 +0 6 + +fn=(3464) MR::DWI::Tractography::Properties::~Properties() +0 14 +cfn=(2642) +calls=2 0 +0 22 +0 4 +cfn=(2410) +calls=2 0 +0 30 +0 4 +cfn=(3466) MR::DWI::Tractography::ROISet::~ROISet() +calls=2 0 +0 40 +0 4 +cfn=(3466) +calls=2 0 +0 40 +0 4 +cfn=(3466) +calls=2 0 +0 40 +0 4 +cfn=(3466) +calls=2 0 +0 40 +0 6 +cfn=(2642) +calls=2 0 +0 1108 +0 8 + +fn=(3512) +0 120 +cob=(7) +cfi=(53) +cfn=(722) +calls=10 0 +0 970 +0 220 +cob=(7) +cfi=(53) +cfn=(728) +calls=10 0 +0 7080 +0 160 +cob=(7) +cfi=(53) +cfn=(492) +calls=10 0 +0 390 +0 90 +cob=(7) +cfi=(53) +cfn=(1812) +calls=10 0 +0 1968 +0 60 +cob=(7) +cfi=(53) +cfn=(1528) +calls=10 0 +0 210 +0 30 +cob=(7) +cfi=(53) +cfn=(728) +calls=10 0 +0 7080 +0 120 +cob=(7) +cfi=(53) +cfn=(1730) +calls=10 0 +0 4339 +0 72 +cob=(7) +cfi=(53) +cfn=(1730) +calls=18 0 +0 8708 +0 132 +cob=(7) +cfi=(53) +cfn=(1468) +calls=10 0 +0 1000 +0 90 +cob=(7) +cfi=(53) +cfn=(1468) +calls=10 0 +0 1000 +0 50 +cob=(7) +cfi=(53) +cfn=(746) +calls=10 0 +0 120 +0 90 +cob=(7) +cfi=(53) +cfn=(1556) +calls=10 0 +0 580 +0 216 +cfn=(2390) +calls=18 0 +0 5370 +0 18 + +fn=(3554) BTS::Fibre::Properties::Header BTS::Fibre::Unzipper::header(BTS::Fibre::Tract::Set const&) +0 36 +cob=(7) +cfi=(53) +cfn=(934) +calls=2 0 +0 114 +0 18 +cob=(7) +cfi=(53) +cfn=(1468) +calls=2 0 +0 30 +0 4 +cob=(7) +cfi=(53) +cfn=(1468) +calls=2 0 +0 200 +0 4 +cob=(7) +cfi=(53) +cfn=(2846) +calls=2 0 +0 36 +0 14 +cfn=(1396) +calls=2 0 +0 564 +0 8 +cfn=(3436) +calls=2 0 +0 664 +0 14 +cfn=(2390) +calls=2 0 +0 482 +0 38 +cfn=(3338) +calls=2 0 +0 6978 +0 18 +cfn=(3338) +calls=6 0 +0 20730 +0 32 +cfn=(3436) +calls=8 0 +0 2360 +0 32 +cfn=(1396) +calls=8 0 +0 2328 +0 32 +cfn=(3436) +calls=8 0 +0 2552 +0 56 +cfn=(3556) void BTS::Fibre::Unzipper::header_element(BTS::Fibre::Tract const&, BTS::Fibre::Properties::Header&, std::string const&) +calls=8 0 +0 1560323 +0 16 +cob=(7) +cfi=(53) +cfn=(1468) +calls=8 0 +0 800 +0 16 +cob=(7) +cfi=(53) +cfn=(1468) +calls=8 0 +0 800 +0 16 +cob=(7) +cfi=(53) +cfn=(1468) +calls=8 0 +0 800 +0 16 +cob=(7) +cfi=(53) +cfn=(1468) +calls=8 0 +0 800 +0 84 +cob=(7) +cfi=(53) +cfn=(1468) +calls=2 0 +0 14 +0 18 + +fn=(3630) +0 632592 +cob=(7) +cfi=(53) +cfn=(880) +calls=13179 0 +0 5624539 +0 461265 +cfn=(3504) +calls=52716 0 +0 121817684 +0 355833 +cfn=(3632) +calls=13179 0 +0 1581480 +0 65895 +cob=(7) +cfi=(53) +cfn=(934) +calls=13179 0 +0 4375389 +0 39537 +cfn=(3348) +calls=13179 0 +0 5706417 +0 52716 +cob=(7) +cfi=(53) +cfn=(1468) +calls=13179 0 +0 197685 +0 144969 + +fn=(3632) +0 1582440 + +fn=(3652) BTS::Image::Container::Buffer* std::__uninitialized_move_a*, BTS::Image::Container::Buffer*, std::allocator > >(BTS::Image::Container::Buffer*, BTS::Image::Container::Buffer*, BTS::Image::Container::Buffer*, std::allocator >&) +0 124 +cfn=(3866) std::_Rb_tree >, std::_Select1st > >, std::less, std::allocator > > >::_M_copy(std::_Rb_tree_node > > const*, std::_Rb_tree_node > >*) +calls=3 0 +0 34035767 +0 272 + +fn=(3666) BTS::Fibre::Tract::sections(unsigned int, unsigned int, BTS::Triple const&, BTS::Triple const&) const +0 986 +cfn=(3668) std::vector >::reserve(unsigned long) +calls=34 0 +0 131699604 +0 1028 +cfn=(3672) std::_Rb_tree, std::less, std::allocator > > > >, std::_Select1st, std::less, std::allocator > > > > >, std::less, std::allocator, std::less, std::allocator > > > > > >::_M_insert_unique_(std::_Rb_tree_const_iterator, std::less, std::allocator > > > > >, std::pair, std::less, std::allocator > > > > const&) +calls=1 0 +0 316 +0 5 +cfn=(3678) +calls=1 0 +0 11 +0 3 +cfn=(3678) +calls=1 0 +0 11 +0 615 +cfn=(3680) +calls=1 0 +0 31 +0 4 +cfn=(3682) +calls=1 0 +0 343 +0 183 +cfn=(3688) BTS::Fibre::Strand::create_position_matrix(unsigned int, unsigned int, bool) +calls=1 0 +0 9291 +0 3 +cfn=(3696) MR::Math::Matrix::operator=(MR::Math::Matrix const&) +calls=1 0 +0 1425 +0 5 +cob=(9) +cfi=(58) +cfn=(2654) +calls=1 0 +0 196 +0 926 +cfn=(3672) +calls=1 0 +0 451 +0 4 +cfn=(3678) +calls=1 0 +0 11 +0 3 +cfn=(3678) +calls=1 0 +0 11 +0 682 +cfn=(3680) +calls=1 0 +0 31 +0 4 +cfn=(3682) +calls=1 0 +0 314 +0 424742667 +cfn=(3698) BTS::Fibre::Strand::create_tangent_matrix(unsigned int, unsigned int, bool) +calls=1 0 +0 9639 +0 3 +cfn=(3696) +calls=1 0 +0 1425 +0 5 +cob=(9) +cfi=(58) +cfn=(2654) +calls=1 0 +0 196 +0 307 + +fn=(3672) +0 40 +cfn=(3674) +calls=2 0 +0 725 +0 2 + +fn=(3732) non-virtual thunk to BTS::Image::Expected::Quartic::Buffer::new_voxel(BTS::Image::Coord const&) +0 474 +cfn=(3734) BTS::Image::Expected::Quartic::Buffer::new_voxel(BTS::Image::Coord const&) +calls=237 0 +0 3577119 + +fn=(3764) BTS::Image::Expected::Voxel::operator=(BTS::Image::Expected::Voxel const&) +0 2607 +cfn=(2824) +calls=237 0 +0 136808 +0 353841 +cfn=(3748) std::vector >::_M_insert_aux(__gnu_cxx::__normal_iterator > >, BTS::Image::Expected::Direction const&) +calls=1659 0 +0 848822 +0 5214 + +fn=(3820) BTS::Image::Container::Voxel::Voxel(BTS::Image::Container::Voxel const&) +0 16425 + +fn=(3830) std::vector >::operator=(std::vector > const&) +0 16425 +cob=(7) +cfi=(53) +cfn=(880) +calls=365 0 +0 438546 +0 2190 +cfn=(3832) BTS::Fibre::Tract::Tensor* std::__uninitialized_copy_a<__gnu_cxx::__normal_iterator > >, BTS::Fibre::Tract::Tensor*, BTS::Fibre::Tract::Tensor>(__gnu_cxx::__normal_iterator > >, __gnu_cxx::__normal_iterator > >, BTS::Fibre::Tract::Tensor*, std::allocator&) +calls=365 0 +0 121600119 +0 4745 + +fn=(3892) +0 12916420 +cfn=(3496) +calls=1174220 0 +0 1762285787 +0 9393760 +cob=(7) +cfi=(53) +cfn=(2846) +calls=2348440 0 +0 35226600 +0 25832840 +cfn=(2390) +calls=2348440 0 +0 722092540 +0 4696880 +cfn=(3508) +calls=1174220 0 +0 448552040 +0 8219540 + +fn=(3894) +0 25212495 + +fn=(3952) void BTS::Fibre::Unzipper::zip_intrinsic(MR::Math::Vector const&, BTS::Fibre::Tract&, unsigned int&) +0 384 +cfn=(3892) +calls=32 0 +0 80704 +0 512 +cfn=(3894) +calls=32 0 +0 672 +0 96 +cfn=(3896) +calls=32 0 +0 5952 +0 224 +cfn=(3948) BTS::Fibre::Properties::Intrinsic_tpl::intrinsic_property(std::string const&) +calls=32 0 +0 3616 +0 96 +cfn=(3948) +calls=32 0 +0 3520 +0 832 +cfn=(2410) +calls=32 0 +0 9824 +0 256 + +fn=(2826) double MR::Image::(anonymous namespace)::__getLE(void const*, unsigned long) +0 4941 + +fn=(2828) void MR::DataSet::Loop::next_impl >(unsigned long, MR::Image::Voxel&) +0 25297 + +fn=(1106) global constructors keyed to buffer.cpp +0 6 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 24 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 319 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 344 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 330 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 313 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 317 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 5 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 313 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 13 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 24 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 319 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 344 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 330 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 313 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 317 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 10 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 24 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 319 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 344 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 330 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 313 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 317 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 5 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 308 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 14 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 24 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 351 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 319 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 344 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 330 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 313 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 317 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 5 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 310 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 14 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 24 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 319 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 344 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 245 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 313 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 317 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 13 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 11 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 24 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 407 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 319 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 344 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 330 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 313 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 317 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 5 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 319 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 8 + +fn=(1116) global constructors keyed to all_in_cube.cpp +0 6 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 24 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 319 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 407 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 344 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 330 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 313 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 317 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 5 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 319 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 14 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 24 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 319 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 407 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 344 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 330 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 313 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 317 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 5 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 319 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 8 + +fn=(1150) global constructors keyed to momentum.cpp +0 5 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 24 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 5 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 359 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 + +fn=(2404) +0 1303 +cob=(7) +cfi=(53) +cfn=(1258) +calls=245 0 +0 4890 +0 1273 + +fn=(2468) +0 38 +cob=(7) +cfi=(53) +cfn=(880) +calls=1 0 +0 213 +0 11 +cfn=(2470) +calls=1 0 +0 221 +0 6 +cfn=(2472) +calls=1 0 +0 21 +0 8 +cfn=(2472) +calls=1 0 +0 21 +0 31 + +fn=(2660) MR::Image::Voxel::Voxel(MR::Image::Header const&) +0 24 +cob=(7) +cfi=(53) +cfn=(880) +calls=1 0 +0 126 +0 26 +cob=(11) +cfi=(60) +cfn=(2666) +calls=1 0 +0 54066 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1144 +0 24 + +fn=(2808) BTS::Image::Observed::Buffer::new_voxel(BTS::Image::Coord const&) +0 81 +cfn=(2810) BTS::Image::Observed::Voxel::Voxel(BTS::Image::Observed::Buffer&, BTS::Image::Coord const&) +calls=27 0 +0 12812 +0 81 + +fn=(2814) BTS::Image::Observed::Voxel::Voxel(BTS::Image::Observed::Voxel const&) +0 864 +cob=(4) +cfi=(90) +cfn=(1282) +calls=27 47 +0 648 +0 594 + +fn=(2876) +0 6 + +fn=(3042) +0 15 +cob=(4) +cfi=(130) +cfn=(3050) +calls=3 81 +0 159 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1699 + +fn=(3100) +0 34 + +fn=(3112) BTS::Prob::Prior::Tract::add_component(BTS::Prob::StrandComponent const&) +0 12 +cfn=(3118) BTS::Prob::Prior::Strand::EndOutSphere::clone() const +calls=1 0 +0 210 +cfn=(3114) BTS::Prob::Prior::Strand::EndInSphere::clone() const +calls=1 0 +0 125 +0 20 +cfn=(3116) +calls=2 0 +0 671 +0 2 + +fn=(3272) +0 1854 +cob=(7) +cfi=(53) +cfn=(1258) +calls=31 0 +0 620 +0 124 +cob=(7) +cfi=(53) +cfn=(1258) +calls=31 0 +0 465 +0 124 +cfn=(2416) +calls=31 0 +0 11736 +0 93 +cob=(7) +cfi=(53) +cfn=(1468) +calls=31 0 +0 217 +0 62 +cob=(7) +cfi=(53) +cfn=(1468) +calls=31 0 +0 465 +0 62 +cob=(7) +cfi=(53) +cfn=(1468) +calls=31 0 +0 217 +0 293 + +fn=(3352) std::_Rb_tree, std::_Select1st >, std::less, std::allocator > >::_M_insert_unique(std::pair const&) +0 7917692983 +cfn=(3354) std::_Rb_tree, std::_Select1st >, std::less, std::allocator > >::_M_insert_(std::_Rb_tree_node_base const*, std::_Rb_tree_node_base const*, std::pair const&) +calls=344247521 0 +0 68599248650 +0 1376990084 + +fn=(3476) BTS::Fibre::Base::Reader >::read_triple() +0 3286 +cob=(7) +cfi=(53) +cfn=(3482) +calls=106 0 +0 18995 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1434 +0 106 + +fn=(3496) +0 110644288 +cob=(7) +cfi=(53) +cfn=(880) +calls=3457634 0 +0 383389196 +0 383797374 +cfn=(3498) BTS::Fibre::Tract::init() +calls=3457634 0 +0 4269168660 +0 27661072 + +fn=(3498) +0 4798733310 +cob=(7) +cfi=(53) +cfn=(934) +calls=342766665 0 +0 78498284610 +0 4113199980 +cob=(7) +cfi=(53) +cfn=(1468) +calls=342766665 0 +0 5141499975 +0 2056599990 +cob=(7) +cfi=(53) +cfn=(934) +calls=342766665 0 +0 78841112460 +0 3427666650 +cob=(7) +cfi=(53) +cfn=(2438) +calls=342766665 0 +0 5827033305 +0 2742133320 +cob=(7) +cfi=(53) +cfn=(2438) +calls=342766665 0 +0 5827033305 +0 2056599990 +cob=(7) +cfi=(53) +cfn=(1468) +calls=342766665 0 +0 5141499975 +0 4455966645 +cob=(7) +cfi=(53) +cfn=(1258) +calls=342766665 0 +0 6855333300 +0 1713833325 +cfn=(3350) +calls=342766665 0 +0 85356028383 +0 1028299995 +cob=(7) +cfi=(53) +cfn=(1468) +calls=342766665 0 +0 5141499975 +0 1713833325 +cob=(7) +cfi=(53) +cfn=(1258) +calls=342766665 0 +0 6855333300 +0 1713833325 +cfn=(3350) +calls=342766665 0 +0 84829101904 +0 1028299995 +cob=(7) +cfi=(53) +cfn=(1468) +calls=342766665 0 +0 5141499975 +0 1028299995 + +fn=(3528) +0 58 + +fn=(3560) unsigned int BTS::Fibre::Properties::Intrinsic::num_intrinsic_keys() +0 114 +cob=(7) +cfi=(53) +cfn=(934) +calls=2 0 +0 468 +0 6 +cfn=(3348) +calls=2 0 +0 636 +0 8 +cob=(7) +cfi=(53) +cfn=(1468) +calls=2 0 +0 30 +0 12 +cfn=(2642) +calls=2 0 +0 22 +0 14 +cob=(7) +cfi=(53) +cfn=(2846) +calls=2 0 +0 36 +0 12 +cfn=(3562) +calls=2 0 +0 622 +0 14 + +fn=(3636) +0 9 +cfn=(3638) double BTS::Prob::Likelihood::ImageDiff::log_prob_tpl(BTS::Fibre::Tract::Set const&, BTS::Fibre::Tract::Set&, BTS::Fibre::Tract::Set::Tensor&) +calls=9 0 +0 7351890667180 + +fn=(3640) BTS::Image::Expected::Quartic::Buffer::expected_image(BTS::Fibre::Tract::Set const&, std::vector, std::allocator > >&, std::vector, std::allocator > >&) +0 36 +cfn=(3642) +calls=9 0 +0 7332305457810 +0 24 + +fn=(3664) +0 612 +cfn=(3666) +calls=34 0 +0 556470739 +0 216240606 +cfn=(3706) +calls=42413666 0 +0 67219402856 +0 222497920 +cfn=(3710) BTS::Image::Expected::Buffer_tpl::get_neighbourhood(BTS::Triple) +calls=695306 0 +0 184953441 +0 10429590 +cfn=(3768) std::_Rb_tree, std::less, std::allocator >::_M_copy(std::_Rb_tree_node const*, std::_Rb_tree_node*) +calls=695306 0 +0 773754894 +0 15893525 +cfn=(3864) +calls=685080 0 +0 10276200 +0 1370292 +cob=(7) +cfi=(53) +cfn=(1174) +calls=33 0 +0 440749 +0 507843779 +cfn=(3770) BTS::Image::Buffer_tpl >::operator()(BTS::Image::Coord const&) +calls=3029 0 +0 102704407 +0 15186772 +cfn=(3504) +calls=365 0 +0 714648 +0 191260 +cfn=(3788) std::vector >::operator=(std::vector > const&) +calls=22265 0 +0 18772000 +0 270465 +cfn=(3508) +calls=365 0 +0 291270 +0 16687332 +cfn=(3770) +calls=5562444 0 +0 697946372 +0 451867726 +cfn=(3504) +calls=3029 0 +0 5931593 +0 12116 +cfn=(3504) +calls=3029 0 +0 6008317 +0 15145 +cfn=(3792) BTS::Fibre::BasicStrand::Tensor_tpl::Tensor_tpl(int, BTS::Fibre::Tract const&) +calls=3029 0 +0 196513459 +0 15145 +cfn=(3796) T.6673 +calls=3029 0 +0 407795773 +0 6058 +cfn=(3798) BTS::Fibre::BasicStrand::Tensor_tpl::~Tensor_tpl() +calls=3029 0 +0 22254116 +0 6058 +cfn=(3800) +calls=3029 0 +0 3601481 +0 9087 +cfn=(3808) BTS::Image::Buffer_tpl >::operator()(BTS::Image::Coord const&) +calls=3029 0 +0 287234438 +0 409029733 +cfn=(3834) std::vector, std::allocator > >::operator=(std::vector, std::allocator > > const&) +calls=22265 0 +0 3305129638 +0 66795 +cfn=(3788) +calls=22265 0 +0 14984345 +0 155855 +cfn=(3788) +calls=22265 0 +0 14984345 +0 293095 +cfn=(3816) +calls=365 0 +0 8824455 +0 6058 +cfn=(3816) +calls=3029 0 +0 73133983 +0 16687332 +cfn=(3808) +calls=5562444 0 +0 697946372 +0 61186884 +cfn=(3840) BTS::Image::Expected::Quartic::Voxel::interpolate(BTS::Fibre::Strand::Section const&, BTS::Fibre::Strand::Section&, BTS::Fibre::Strand::Section::Tensor&) +calls=5562444 0 +0 3231779964 +0 77874216 +cfn=(3644) +calls=5562444 0 +0 44499552 +0 1357236124 +cfn=(3644) +calls=339309031 0 +0 2714472248 +0 19012430678 +cfn=(3850) BTS::Coord::Tensor_tpl::Tensor_tpl() +calls=339309032 0 +0 55307372216 +0 1017927096 +cfn=(3850) +calls=339309032 0 +0 55307372216 +0 31895049008 +cfn=(3852) BTS::Image::Expected::Direction::signal_hessian(BTS::Fibre::Strand::Section const&, BTS::Fibre::Strand::Section::Tensor&, double, double, BTS::Triple const&, BTS::Fibre::Strand::Section const&, BTS::Coord::Tensor const&, BTS::Fibre::Strand::Section::Tensor const&) +calls=339309032 0 +0 132330522480 +0 7804107736 +cfn=(3854) BTS::Fibre::Tract::add_section_gradient(BTS::Fibre::Tract::Section const&, BTS::Fibre::Tract::Section const&) +calls=339309032 0 +0 1293446127936 +0 39359847596 +cob=(7) +cfi=(53) +cfn=(880) +calls=339309031 0 +0 37323993410 +0 11197198023 +cob=(7) +cfi=(53) +cfn=(880) +calls=339309031 0 +0 37323993410 +0 21715777984 +cob=(7) +cfi=(53) +cfn=(880) +calls=1017927093 0 +0 111971982614 +0 52932208836 +cob=(7) +cfi=(53) +cfn=(1174) +calls=339309031 0 +0 27484031511 +0 678618062 +cfn=(3498) +calls=339309031 0 +0 401063391652 +0 1357236124 +cfn=(3854) +calls=339309031 0 +0 1293446133280 +0 4750326434 +cfn=(3856) +calls=339309031 0 +0 29519885697 +0 3393090310 +cfn=(3856) +calls=678618062 0 +0 59039771394 +0 3192219363648 +cfn=(3508) +calls=339309031 0 +0 270768606738 +0 2035854186 +cfn=(3762) BTS::Fibre::Strand::Section::~Section() +calls=339309031 0 +0 5089635465 +0 1357236124 +cfn=(3762) +calls=339309031 0 +0 5089635465 +0 1357236124 +cfn=(3762) +calls=339309031 0 +0 5089635465 +0 1357236124 +cfn=(3762) +calls=339309031 0 +0 5089635465 +0 1357236124 +cfn=(3762) +calls=339309031 0 +0 5089635465 +0 1357236124 +cfn=(3762) +calls=339309031 0 +0 5089635465 +0 1017927093 +cfn=(3762) +calls=339309031 0 +0 5089635465 +0 7475923579 +cob=(7) +cfi=(53) +cfn=(2846) +calls=5562443 0 +0 80389007 +0 11126346 +cfn=(3814) +calls=365 0 +0 51268704 +0 232281554 +cfn=(3726) +calls=695305 0 +0 572616360 +0 236292125 + +fn=(3686) std::_Rb_tree >, std::_Select1st > >, std::less, std::allocator > > >::_M_insert_(std::_Rb_tree_node_base const*, std::_Rb_tree_node_base const*, std::pair > const&) +0 30 +cob=(7) +cfi=(53) +cfn=(880) +calls=2 0 +0 361 +0 24 +cfn=(3626) +calls=2 0 +0 44 +0 16 +cob=(7) +cfi=(53) +cfn=(2426) +calls=2 0 +0 60 +0 26 + +fn=(3708) +0 65731413384 + +fn=(3748) +0 68256 +cob=(7) +cfi=(53) +cfn=(880) +calls=3318 0 +0 2949889 +0 397686 +cob=(7) +cfi=(53) +cfn=(1174) +calls=2844 0 +0 268364 +0 67782 + +fn=(3770) +0 441769042 +cfn=(3772) +calls=365 0 +0 48811694 +0 261162590 +cfn=(3774) BTS::Image::Container::Voxel::Voxel(BTS::Image::Container::Voxel const&) +calls=365 0 +0 16425 +0 1460 +cfn=(3776) std::_Rb_tree >, std::_Select1st > >, std::less, std::allocator > > >::_M_insert_unique_(std::_Rb_tree_const_iterator > >, std::pair > const&) +calls=365 0 +0 136842 +0 1095 +cfn=(3782) BTS::Image::Container::Voxel::~Voxel() +calls=365 0 +0 6570 +0 730 +cfn=(3782) +calls=365 0 +0 6570 +0 1095 +cfn=(3784) std::vector >::operator=(std::vector > const&) +calls=365 0 +0 40851985 +0 2190 +cfn=(3782) +calls=365 0 +0 12448002 +0 2169 + +fn=(3776) +0 6497 +cob=(7) +cfi=(53) +cfn=(2834) +calls=297 0 +0 4822 +0 2430 +cfn=(3780) std::_Rb_tree >, std::_Select1st > >, std::less, std::allocator > > >::_M_insert_(std::_Rb_tree_node_base const*, std::_Rb_tree_node_base const*, std::pair > const&) +calls=189 0 +0 58794 +0 3178 +cfn=(3778) std::_Rb_tree >, std::_Select1st > >, std::less, std::allocator > > >::_M_insert_unique(std::pair > const&) +calls=4 0 +0 1352 +0 272 +cfn=(3780) +calls=20 0 +0 6066 +0 2716 +cfn=(3780) +calls=152 0 +0 50507 +0 208 + +fn=(3788) +0 48572240 +cfn=(3790) std::vector, std::allocator > >::operator=(std::vector, std::allocator > > const&) +calls=1214306 0 +0 316358015 +0 12143060 +cfn=(3790) +calls=2428612 0 +0 633154078 +0 31571956 + +fn=(3822) std::_Rb_tree >, std::_Select1st > >, std::less, std::allocator > > >::_M_insert_unique_(std::_Rb_tree_const_iterator > >, std::pair > const&) +0 6497 +cob=(7) +cfi=(53) +cfn=(2834) +calls=297 0 +0 4822 +0 2430 +cfn=(3826) +calls=189 0 +0 59987 +0 3178 +cfn=(3824) +calls=4 0 +0 1262 +0 272 +cfn=(3826) +calls=20 0 +0 6597 +0 2716 +cfn=(3826) +calls=152 0 +0 51180 +0 208 + +fn=(3854) +0 57682535355 +cfn=(3500) +calls=2035854189 0 +0 515749840362 +0 10857889008 +cfn=(3856) +calls=678618063 0 +0 59039771481 +0 16286833512 +cob=(7) +cfi=(53) +cfn=(880) +calls=678618063 0 +0 74647987042 +0 78041077245 +cfn=(3856) +calls=678618063 0 +0 59039771481 +0 4071708378 +cob=(7) +cfi=(53) +cfn=(1174) +calls=678618063 0 +0 54968063103 +0 16286833512 +cob=(7) +cfi=(53) +cfn=(880) +calls=678618063 0 +0 74647986930 +0 78041077245 +cfn=(3856) +calls=678618063 0 +0 59039771481 +0 4071708378 +cob=(7) +cfi=(53) +cfn=(1174) +calls=678618063 0 +0 54968063103 +0 55646681166 +cfn=(3500) +calls=2035854189 0 +0 515749820523 +0 10857889008 +cfn=(3856) +calls=678618063 0 +0 59039771481 +0 16286833512 +cob=(7) +cfi=(53) +cfn=(880) +calls=678618063 0 +0 74647986930 +0 78041077245 +cfn=(3856) +calls=678618063 0 +0 59039771481 +0 4071708378 +cob=(7) +cfi=(53) +cfn=(1174) +calls=678618063 0 +0 54968063103 +0 6107562567 +cfn=(3858) +calls=678618063 0 +0 131651904222 +0 39359847654 +cfn=(3856) +calls=678618063 0 +0 59039771481 +0 4071708378 +cob=(7) +cfi=(53) +cfn=(1174) +calls=678618063 0 +0 54968063103 +0 10857889007 +cob=(7) +cfi=(53) +cfn=(1174) +calls=678618062 0 +0 54968063022 +0 4071708372 +cob=(7) +cfi=(53) +cfn=(1174) +calls=678618062 0 +0 54968063022 +0 21037159945 + +fn=(3884) BTS::Prob::Likelihood::ImageDiff::Gaussian::log_prob(double, double&, double&) +0 92232 + +fn=(2512) +0 2879 +cob=(9) +cfi=(58) +cfn=(2506) +calls=2 0 +0 753 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 947 +0 10 + +fn=(1060) +0 6 + +fn=(1100) global constructors keyed to peaks.cpp +0 5 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 24 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 319 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 344 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 330 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 313 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 317 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 7 + +fn=(1110) global constructors keyed to flatness.cpp +0 6 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 24 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 319 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 344 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 330 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 313 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 317 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 5 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 8 + +fn=(1118) global constructors keyed to midpoint_in_sphere.cpp +0 6 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 24 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 319 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 344 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 330 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 313 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 317 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 5 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 318 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 8 + +fn=(1128) global constructors keyed to voxel.cpp +0 5 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 24 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 319 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 344 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 330 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 313 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 317 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 9 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 24 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 319 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 344 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 330 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 313 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 317 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 12 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 24 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 319 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 344 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 330 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 313 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 582 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 340 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 9 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 24 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 319 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 344 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 330 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 313 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 317 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 12 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 24 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 319 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 344 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 407 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 330 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 313 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 317 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 12 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 24 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 319 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 344 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 330 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 313 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 317 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 7 + +fn=(1130) global constructors keyed to base_width.cpp +0 6 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 24 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 407 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 319 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 344 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 330 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 313 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 317 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 5 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 315 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 8 + +fn=(1136) global constructors keyed to spread.cpp +0 6 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 24 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 319 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 344 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 330 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 313 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 317 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 5 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 308 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 8 + +fn=(1144) global constructors keyed to log.cpp +0 6 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 24 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 319 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 344 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 407 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 330 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 313 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 317 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 5 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 323 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 5 + +fn=(1220) global constructors keyed to KMcenters.cpp +0 7 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 319 +0 6 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 344 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 407 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 330 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 313 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 317 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 + +fn=(1432) MR::OptBase* std::__uninitialized_copy_a(MR::OptBase*, MR::OptBase*, MR::OptBase*, std::allocator&) +0 230 +cob=(7) +cfi=(53) +cfn=(880) +calls=3 0 +0 585 +0 227 + +fn=(1600) +0 40 + +fn=(2330) +0 90 +cob=(7) +cfi=(53) +cfn=(880) +calls=3 0 +0 362 +0 45 +cob=(4) +cfi=(90) +cfn=(1282) +calls=3 47 +0 146 +0 24 +cob=(4) +cfi=(90) +cfn=(1282) +calls=3 47 +0 72 +0 11 +cob=(7) +cfi=(53) +cfn=(1174) +calls=2 0 +0 162 +0 44 + +fn=(2410) +0 40533099 +cob=(7) +cfi=(53) +cfn=(1468) +calls=1200609 0 +0 120060390 +0 2348480 +cob=(7) +cfi=(53) +cfn=(1468) +calls=1174240 0 +0 117422948 +0 25776210 +cob=(7) +cfi=(53) +cfn=(1174) +calls=1200609 0 +0 97249329 +0 13663200 + +fn=(2416) +0 1000 +cob=(7) +cfi=(53) +cfn=(2834) +calls=6 0 +0 107 +0 156 +cfn=(2420) std::_Rb_tree, std::_Select1st >, std::less, std::allocator > >::_M_insert_(std::_Rb_tree_node_base const*, std::_Rb_tree_node_base const*, std::pair const&) +calls=6 0 +0 3563 +0 605 +cfn=(2418) std::_Rb_tree, std::_Select1st >, std::less, std::allocator > >::_M_insert_unique(std::pair const&) +calls=15 0 +0 6005 +0 211 +cob=(7) +cfi=(53) +cfn=(2438) +calls=49 0 +0 939 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1532 +0 343 +cfn=(2420) +calls=49 0 +0 16767 +0 54 +cfn=(2420) +calls=1 0 +0 292 +0 1 + +fn=(2642) +0 1016327 +cfn=(2643) std::_Rb_tree, std::_Select1st >, std::less, std::allocator > >::_M_erase(std::_Rb_tree_node >*)'2 +calls=15 0 +0 4575 +0 21 +cfn=(2643) +calls=7 0 +0 349 +0 66 +cob=(7) +cfi=(53) +cfn=(1468) +calls=22 0 +0 670 +0 44 +cob=(7) +cfi=(53) +cfn=(1468) +calls=22 0 +0 500 +0 66 +cob=(7) +cfi=(53) +cfn=(1174) +calls=22 0 +0 1782 +0 580768 + +fn=(2643) +0 466 +cfn=(2643) +calls=22 0 +0 4892 +0 30 +cfn=(2643) +calls=10 0 +0 654 +0 96 +cob=(7) +cfi=(53) +cfn=(1468) +calls=32 0 +0 650 +0 64 +cob=(7) +cfi=(53) +cfn=(1468) +calls=32 0 +0 650 +0 96 +cob=(7) +cfi=(53) +cfn=(1174) +calls=32 0 +0 2592 +0 280 + +fn=(2806) BTS::Image::Buffer_tpl::operator()(BTS::Image::Coord const&) +0 1275068 +cfn=(2808) +calls=27 0 +0 12974 +0 587449 +cfn=(2814) +calls=27 0 +0 2106 +0 108 +cfn=(2816) +calls=27 0 +0 15479 +0 81 +cfn=(2822) +calls=27 0 +0 189 +0 54 +cfn=(2822) +calls=27 0 +0 189 +0 81 +cfn=(2824) +calls=27 0 +0 12676 +0 486 +cfn=(2822) +calls=27 0 +0 3224 +0 102 + +fn=(2812) BTS::Image::Observed::Buffer::num_encodings() const +0 108 + +fn=(2882) +0 20 +cfn=(2884) +calls=1 0 +0 2912 +0 14 +cfn=(2886) +calls=1 0 +0 109382 +0 420 +cfn=(2886) +calls=60 0 +0 6200940 +0 2806 +cob=(9) +cfi=(58) +cfn=(2654) +calls=61 0 +0 10065 +0 369 +cfn=(2998) BTS::Diffusion::Model::init(MR::Math::Matrix const&, MR::Math::Matrix const&, bool) +calls=1 0 +0 709349 +0 4 +cob=(9) +cfi=(58) +cfn=(2654) +calls=1 0 +0 226 +0 8 + +fn=(3024) +0 48 +cob=(7) +cfi=(53) +cfn=(880) +calls=1 0 +0 1534 +0 921 +cfn=(2888) +calls=61 0 +0 24679 +0 5342 + +fn=(3030) BTS::Image::Expected::Buffer_tpl::Buffer_tpl(BTS::Triple const&, BTS::Triple const&, BTS::Diffusion::Model const&, unsigned int, unsigned int, double, BTS::Triple const&, bool) +0 56 +cfn=(3032) +calls=1 0 +0 34449 +0 16 +cob=(6) +cfi=(129) /build/buildd/eglibc-2.11.1/math/../sysdeps/ieee754/dbl-64/s_ceil.c +cfn=(3038) ceil +calls=1 44 +0 24 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1398 +0 5 +cfn=(3040) std::_Rb_tree, std::allocator > >, std::_Select1st, std::allocator > > >, std::less, std::allocator, std::allocator > > > >::_M_erase(std::_Rb_tree_node, std::allocator > > >*) +calls=1 0 +0 11 +0 33 + +fn=(3076) +0 46 +cfn=(3078) std::_Rb_tree, std::_Select1st >, std::less, std::allocator > >::_M_copy(std::_Rb_tree_node > const*, std::_Rb_tree_node >*) +calls=2 0 +0 37145 +0 176 +cob=(7) +cfi=(53) +cfn=(880) +calls=2 0 +0 717 +0 1748 + +fn=(3078) +0 24 +cob=(7) +cfi=(53) +cfn=(880) +calls=2 0 +0 439 +0 52 +cob=(7) +cfi=(53) +cfn=(880) +calls=2 0 +0 436 +0 26 +cob=(4) +cfi=(90) +cfn=(1282) +calls=2 47 +0 430 +0 54 +cfn=(3079) std::_Rb_tree, std::_Select1st >, std::less, std::allocator > >::_M_copy(std::_Rb_tree_node > const*, std::_Rb_tree_node >*)'2 +calls=2 0 +0 23552 +0 16 +cob=(7) +cfi=(53) +cfn=(880) +calls=2 0 +0 390 +0 8 +cob=(7) +cfi=(53) +cfn=(880) +calls=4 0 +0 780 +0 156 +cob=(7) +cfi=(53) +cfn=(880) +calls=6 0 +0 1080 +0 78 +cob=(4) +cfi=(90) +cfn=(1282) +calls=6 47 +0 1290 +0 172 +cfn=(3079) +calls=4 0 +0 8116 +0 46 + +fn=(3079) +0 408 +cob=(7) +cfi=(53) +cfn=(880) +calls=34 0 +0 6890 +0 884 +cob=(7) +cfi=(53) +cfn=(880) +calls=34 0 +0 6300 +0 442 +cob=(4) +cfi=(90) +cfn=(1282) +calls=34 47 +0 7310 +0 846 +cfn=(3079) +calls=16 0 +0 30712 +0 158 +cob=(7) +cfi=(53) +cfn=(880) +calls=10 0 +0 2102 +0 4 +cob=(7) +cfi=(53) +cfn=(880) +calls=2 0 +0 390 +0 312 +cob=(7) +cfi=(53) +cfn=(880) +calls=12 0 +0 2160 +0 156 +cob=(4) +cfi=(90) +cfn=(1282) +calls=12 47 +0 2580 +0 360 +cfn=(3079) +calls=12 0 +0 13524 +0 366 + +fn=(3114) +0 4 +cob=(7) +cfi=(53) +cfn=(880) +calls=1 0 +0 110 +0 11 + +fn=(3118) +0 4 +cob=(7) +cfi=(53) +cfn=(880) +calls=1 0 +0 195 +0 11 + +fn=(3268) +0 475020 + +fn=(3470) +0 26 +cfn=(2642) +calls=2 0 +0 22 +0 16 +cfn=(3472) BTS::Fibre::Base::Reader >::next_basic(BTS::Fibre::Set&) +calls=2 0 +0 104228 +0 52 +cob=(7) +cfi=(53) +cfn=(1730) +calls=2 0 +0 878 +0 18 +cfn=(3512) +calls=2 0 +0 6437 +0 30 +cfn=(3272) +calls=2 0 +0 758 +0 6 +cob=(7) +cfi=(53) +cfn=(1264) +calls=2 0 +0 56 +0 20 +cfn=(2410) +calls=2 0 +0 234 +0 4 +cob=(7) +cfi=(53) +cfn=(1468) +calls=2 0 +0 200 +0 8 +cfn=(3514) BTS::Fibre::Properties::Intrinsic::set_intrinsic_properties(BTS::Fibre::Properties&) +calls=2 0 +0 9239 +0 18 + +fn=(3510) +0 3779375061 +cfn=(3511) std::_Rb_tree, std::_Select1st >, std::less, std::allocator > >::_M_erase(std::_Rb_tree_node >*)'2 +calls=343579551 0 +0 3779375061 +0 1030501245 +cfn=(3511) +calls=343500415 0 +0 3778504565 +0 2061239898 +cob=(7) +cfi=(53) +cfn=(1468) +calls=687079966 0 +0 68506137325 +0 2061239898 +cob=(7) +cfi=(53) +cfn=(1174) +calls=687079966 0 +0 55653477246 +0 2748478136 + +fn=(3511) +0 7557879626 + +fn=(3620) +0 211192 +cfn=(3622) +calls=26399 0 +0 26249204 +0 422384 +cfn=(3566) unsigned int BTS::Fibre::Unzipper::size(BTS::Fibre::Tract const&) +calls=26399 0 +0 55692826 +0 475182 +cfn=(3566) +calls=79197 0 +0 167062986 +0 1029561 + +fn=(3658) +0 96 + +fn=(3660) +0 124 +cfn=(3868) +calls=3 0 +0 2156234931 +0 272 + +fn=(3698) +0 14 +cfn=(3626) +calls=1 0 +0 361 +0 215 +cob=(6) +cfi=(151) /build/buildd/eglibc-2.11.1/math/../sysdeps/ieee754/dbl-64/s_sin.c +cfn=(3704) sin +calls=2 90 +0 94 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1416 +0 290 +cob=(6) +cfi=(151) +cfn=(3704) +calls=58 90 +0 6746 +0 503 + +fn=(3718) std::map, std::allocator >, std::less, std::allocator, std::allocator > > > >::operator[](BTS::Image::Coord const&) +0 70237640 +cfn=(3720) std::_Rb_tree, std::allocator > >, std::_Select1st, std::allocator > > >, std::less, std::allocator, std::allocator > > > >::_M_insert_unique_(std::_Rb_tree_const_iterator, std::allocator > > >, std::pair, std::allocator > > const&) +calls=102 0 +0 29156 +0 408 +cfn=(3726) +calls=102 0 +0 1122 +0 306 +cfn=(3726) +calls=102 0 +0 1122 +0 2781974 + +fn=(3728) BTS::Image::Expected::Buffer_tpl::create_neighbourhood(BTS::Image::Coord const&) +0 14178 +cfn=(3730) BTS::Image::Buffer_tpl::operator()(BTS::Image::Coord const&) +calls=816 0 +0 5720740 +0 29328 +cob=(7) +cfi=(53) +cfn=(2840) +calls=132 0 +0 2162 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 2037 +0 4476 +cfn=(3766) std::_Rb_tree, std::less, std::allocator >::_M_insert_(std::_Rb_tree_node_base const*, std::_Rb_tree_node_base const*, BTS::Image::Expected::Quartic::Voxel* const&) +calls=816 0 +0 177920 +0 1734 + +fn=(3730) +0 1287779 +cfn=(3732) +calls=237 0 +0 3577593 +0 736529 +cfn=(3750) BTS::Image::Expected::Quartic::Voxel::Voxel() +calls=237 0 +0 101673 +0 1896 +cfn=(3752) +calls=237 0 +0 123714 +0 2133 +cfn=(3754) std::_Rb_tree, std::_Select1st >, std::less, std::allocator > >::_M_insert_unique_(std::_Rb_tree_const_iterator >, std::pair const&) +calls=237 0 +0 272081 +0 711 +cfn=(3760) BTS::Image::Expected::Quartic::Voxel::~Voxel() +calls=237 0 +0 37920 +0 474 +cfn=(3760) +calls=237 0 +0 37920 +0 948 +cfn=(3764) +calls=237 0 +0 1347292 +0 1185 +cfn=(3760) +calls=237 0 +0 95550 +0 1634 + +fn=(3752) +0 16590 +cob=(4) +cfi=(90) +cfn=(1282) +calls=474 47 +0 11376 +0 41712 +cfn=(3742) +calls=474 0 +0 171114 +0 6636 + +fn=(3754) +0 4339 +cob=(7) +cfi=(53) +cfn=(2834) +calls=208 0 +0 3317 +0 1500 +cfn=(3758) +calls=92 0 +0 103061 +0 2148 +cfn=(3756) +calls=1 0 +0 841 +0 41 +cfn=(3758) +calls=3 0 +0 2589 +0 2138 +cfn=(3758) +calls=141 0 +0 151959 +0 148 + +fn=(3760) +0 19197 +cfn=(3762) +calls=711 0 +0 10665 +0 2844 +cfn=(3762) +calls=711 0 +0 10665 +0 2133 +cfn=(3762) +calls=711 0 +0 10665 +0 2844 +cfn=(3762) +calls=711 0 +0 10665 +0 2844 +cfn=(3762) +calls=711 0 +0 10665 +0 2133 +cfn=(3762) +calls=711 0 +0 10665 +0 8769 +cob=(7) +cfi=(53) +cfn=(1174) +calls=237 0 +0 27642 +0 5925 +cob=(7) +cfi=(53) +cfn=(1174) +calls=237 0 +0 29751 +0 3318 + +fn=(3782) +0 13140 +cfn=(3508) +calls=365 0 +0 201480 +0 43800 +cfn=(3508) +calls=21900 0 +0 12088800 +0 71540 +cob=(7) +cfi=(53) +cfn=(1174) +calls=365 0 +0 39462 +0 2920 + +fn=(3796) +0 42406 +cob=(7) +cfi=(53) +cfn=(880) +calls=3029 0 +0 333190 +0 221117 +cob=(7) +cfi=(53) +cfn=(880) +calls=9087 0 +0 1883200 +0 245349 +cfn=(3794) BTS::Coord::Tensor_tpl::Tensor_tpl(BTS::Coord::Tensor_tpl const&) +calls=27261 0 +0 404828191 +0 242320 + +fn=(3800) +0 865634 +cob=(7) +cfi=(53) +cfn=(934) +calls=61831 0 +0 17314984 +0 741972 +cob=(7) +cfi=(53) +cfn=(1468) +calls=61831 0 +0 927465 +0 370986 +cob=(7) +cfi=(53) +cfn=(934) +calls=61831 0 +0 17379723 +0 618310 +cob=(7) +cfi=(53) +cfn=(2438) +calls=61831 0 +0 1051127 +0 494648 +cob=(7) +cfi=(53) +cfn=(2438) +calls=61831 0 +0 1051127 +0 370986 +cob=(7) +cfi=(53) +cfn=(1468) +calls=61831 0 +0 927465 +0 803803 +cob=(7) +cfi=(53) +cfn=(1258) +calls=61831 0 +0 1236620 +0 309155 +cfn=(3802) +calls=61831 0 +0 18869334 +0 185493 +cob=(7) +cfi=(53) +cfn=(1468) +calls=61831 0 +0 927465 +0 309155 +cob=(7) +cfi=(53) +cfn=(1258) +calls=61831 0 +0 1236620 +0 309155 +cfn=(3802) +calls=61831 0 +0 18607713 +0 185493 +cob=(7) +cfi=(53) +cfn=(1468) +calls=61831 0 +0 927465 +0 185493 + +fn=(3806) +0 1731268 +cob=(7) +cfi=(53) +cfn=(880) +calls=123662 0 +0 19978874 +0 741972 +cob=(7) +cfi=(53) +cfn=(1258) +calls=123662 0 +0 2473240 +0 865634 +cob=(7) +cfi=(53) +cfn=(2426) +calls=123662 0 +0 4019015 +0 1298451 + +fn=(3834) +0 1068720 +cfn=(3836) +calls=22265 0 +0 1106458720 +0 222650 +cfn=(3836) +calls=44530 0 +0 2196800658 +0 578890 + +fn=(3838) +0 1870260 +cfn=(3794) +calls=200385 0 +0 3284188860 +0 1536285 + +fn=(3842) BTS::Image::Expected::Quartic::Voxel::interpolate(BTS::Triple const&, BTS::Triple&, BTS::Coord::Tensor&) +0 800991936 + +fn=(3852) +0 40377774808 +cfn=(3708) +calls=339309032 0 +0 13233052248 +0 1696545160 +cfn=(3708) +calls=339309032 0 +0 13233052248 +0 32234358040 +cfn=(3708) +calls=339309032 0 +0 13233052248 +0 18322687728 + +fn=(3866) +0 36 +cob=(7) +cfi=(53) +cfn=(880) +calls=3 0 +0 460 +0 81 +cob=(7) +cfi=(53) +cfn=(880) +calls=3 0 +0 24348 +0 954 +cfn=(3504) +calls=183 0 +0 451590 +0 978 +cfn=(3867) std::_Rb_tree >, std::_Select1st > >, std::less, std::allocator > > >::_M_copy(std::_Rb_tree_node > > const*, std::_Rb_tree_node > >*)'2 +calls=3 0 +0 13786107 +0 30 +cob=(7) +cfi=(53) +cfn=(880) +calls=3 0 +0 531 +0 32 +cob=(7) +cfi=(53) +cfn=(880) +calls=16 0 +0 2850 +0 589 +cob=(7) +cfi=(53) +cfn=(880) +calls=19 0 +0 6001 +0 6023 +cfn=(3504) +calls=1159 0 +0 2901997 +0 6121 +cfn=(3867) +calls=15 0 +0 16846921 +0 118 + +fn=(3867) +0 1320 +cob=(7) +cfi=(53) +cfn=(880) +calls=110 0 +0 19255 +0 2970 +cob=(7) +cfi=(53) +cfn=(880) +calls=110 0 +0 36187 +0 34980 +cfn=(3504) +calls=6710 0 +0 16728867 +0 35632 +cfn=(3867) +calls=53 0 +0 32834478 +0 706 +cob=(7) +cfi=(53) +cfn=(880) +calls=54 0 +0 9504 +0 72 +cob=(7) +cfi=(53) +cfn=(880) +calls=36 0 +0 6345 +0 2790 +cob=(7) +cfi=(53) +cfn=(880) +calls=90 0 +0 29799 +0 28530 +cfn=(3504) +calls=5490 0 +0 13665816 +0 28866 +cfn=(3867) +calls=39 0 +0 12392259 +0 1389 + +fn=(3882) BTS::Image::Expected::Quartic::Buffer::operator()(int, int, int) +0 92232 +cfn=(3730) +calls=13176 0 +0 1906292 +0 26352 + +fn=(3886) BTS::Fibre::Flattener::flatten(BTS::Fibre::Tract::Tensor const&) +0 427488 +cfn=(3888) +calls=35624 0 +0 77380915 +0 142496 +cfn=(3626) +calls=35624 0 +0 114420732 +0 178120 +cfn=(3890) +calls=35624 0 +0 605004744 +0 2600552 +cfn=(3916) BTS::Fibre::Flattener::flatten_element(BTS::Fibre::Tract const&, MR::Math::Matrix&, unsigned int&) +calls=106872 0 +0 717752158 +0 1709952 +cfn=(3916) +calls=213744 0 +0 1429143519 +0 1282464 +cfn=(3916) +calls=320616 0 +0 2145988465 +0 1282464 +cfn=(3916) +calls=320616 0 +0 2142340546 +0 4061136 + +fn=(3900) void std::__unguarded_linear_insert<__gnu_cxx::__normal_iterator > >, std::string>(__gnu_cxx::__normal_iterator > >, std::string) +0 34052380 +cob=(7) +cfi=(53) +cfn=(1264) +calls=1174220 0 +0 12916420 +0 2348440 + +fn=(3908) void BTS::Fibre::Unzipper::unzip_intrinsic(BTS::Fibre::Tract const&, MR::Math::Vector&, unsigned int&) +0 13662768 +cfn=(3892) +calls=1138564 0 +0 2931371495 +0 18217024 +cfn=(3894) +calls=1138564 0 +0 23909844 +0 3415692 +cfn=(3896) +calls=1138564 0 +0 211772904 +0 15939896 +cfn=(3910) BTS::Fibre::Properties::Intrinsic_tpl::intrinsic_property(std::string const&) const +calls=1138564 0 +0 128657732 +0 11385640 +cfn=(3910) +calls=1138564 0 +0 125242040 +0 13662768 +cfn=(2410) +calls=1138564 0 +0 349539148 +0 9108512 + +fn=(3950) +0 288 +cfn=(3952) +calls=32 0 +0 106688 +0 480 +cfn=(3954) void BTS::Fibre::Unzipper::zip_element(MR::Math::Vector const&, BTS::Fibre::BasicStrand&, unsigned int&) +calls=32 0 +0 3904 +0 448 +cfn=(3954) +calls=64 0 +0 7808 +0 768 + +fn=(1054) +0 6 + +fn=(1066) +0 11 +cfn=(1070) +calls=1 0 +0 8523 +0 156 +cfn=(1132) global constructors keyed to strand.cpp +calls=1 0 +0 2835 +cfn=(1116) +calls=1 0 +0 3572 +cfn=(1112) global constructors keyed to set.cpp +calls=1 0 +0 3616 +cfn=(1222) global constructors keyed to KCtree.cpp +calls=1 0 +0 2453 +cfn=(1128) +calls=1 0 +0 2832 +cfn=(1220) +calls=1 0 +0 2706 +cfn=(1112) +calls=1 0 +0 2832 +cfn=(1092) global constructors keyed to sheer.cpp +calls=1 0 +0 3223 +cfn=(1096) +calls=1 0 +0 94 +cfn=(1106) +calls=1 0 +0 3221 +cfn=(1124) global constructors keyed to tract.cpp +calls=1 0 +0 3180 +cfn=(1218) +calls=1 0 +0 94 +cfn=(1216) +calls=1 0 +0 3220 +cfn=(1214) +calls=1 0 +0 3233 +cfn=(1112) +calls=1 0 +0 3970 +cfn=(1212) +calls=1 0 +0 3221 +cfn=(1210) +calls=1 0 +0 2361 +cfn=(1208) global constructors keyed to KMfilterCenters.cpp +calls=1 0 +0 2361 +cfn=(1206) global constructors keyed to roi.cpp +calls=1 0 +0 94 +cfn=(1106) +calls=1 0 +0 2832 +cfn=(1204) +calls=1 0 +0 3177 +cfn=(1202) global constructors keyed to extended.cpp +calls=1 0 +0 521 +cfn=(1200) +calls=1 0 +0 2361 +cfn=(1106) +calls=1 0 +0 3216 +cfn=(1184) +calls=1 0 +0 3177 +cfn=(1198) global constructors keyed to uniform.cpp +calls=1 0 +0 3227 +cfn=(1196) global constructors keyed to KM_ANN.cpp +calls=1 0 +0 2361 +cfn=(1128) +calls=1 0 +0 2835 +cfn=(1194) global constructors keyed to curvature.cpp +calls=1 0 +0 3557 +cfn=(1192) +calls=1 0 +0 2453 +cfn=(1184) +calls=1 0 +0 477 +cfn=(1190) +calls=1 0 +0 2361 +cfn=(1188) +calls=1 0 +0 909 +cfn=(1106) +calls=1 0 +0 3260 +cfn=(1186) +calls=1 0 +0 513 +cfn=(1184) +calls=1 0 +0 94 +cfn=(1128) +calls=1 0 +0 3375 +cfn=(1106) +calls=1 0 +0 3137 +cfn=(1184) +calls=1 0 +0 477 +cfn=(1154) +calls=1 0 +0 49976 +cfn=(1152) +calls=1 0 +0 2361 +cfn=(1150) +calls=1 0 +0 530 +cfn=(1148) +calls=1 0 +0 480 +cfn=(1146) global constructors keyed to peak.cpp +calls=1 0 +0 2835 +cfn=(1128) +calls=1 0 +0 2835 +cfn=(1144) +calls=1 0 +0 3573 +cfn=(1142) global constructors keyed to width.cpp +calls=1 0 +0 3219 +cfn=(1140) +calls=1 0 +0 2832 +cfn=(1134) +calls=1 0 +0 2835 +cfn=(1128) +calls=1 0 +0 3180 +cfn=(1138) global constructors keyed to likelihood.cpp +calls=1 0 +0 3047 +cfn=(1136) +calls=1 0 +0 3216 +cfn=(1126) +calls=1 0 +0 3576 +cfn=(1134) +calls=1 0 +0 2832 +cfn=(1132) +calls=1 0 +0 4580 +cfn=(1130) +calls=1 0 +0 3568 +cfn=(1128) +calls=1 0 +0 2835 +cfn=(1126) +calls=1 0 +0 3225 +cfn=(1124) +calls=1 0 +0 3221 +cfn=(1122) global constructors keyed to image_diff.cpp +calls=1 0 +0 3180 +cfn=(1120) global constructors keyed to track.cpp +calls=1 0 +0 4366 +cfn=(1094) global constructors keyed to file.cpp +calls=1 0 +0 477 +cfn=(1118) +calls=1 0 +0 3226 +cfn=(1116) +calls=1 0 +0 3572 +cfn=(1114) global constructors keyed to dummy_intrinsic_properties.cpp +calls=1 0 +0 94 +cfn=(1112) +calls=1 0 +0 3236 +cfn=(1110) +calls=1 0 +0 3217 +cfn=(1108) +calls=1 0 +0 526 +cfn=(1106) +calls=1 0 +0 3572 +cfn=(1104) global constructors keyed to base_intensity.cpp +calls=1 0 +0 2832 +cfn=(1102) global constructors keyed to KMterm.cpp +calls=1 0 +0 2361 +cfn=(1100) +calls=1 0 +0 2835 +cfn=(1098) global constructors keyed to gaussian_intensity.cpp +calls=1 0 +0 3222 +cfn=(1096) +calls=1 0 +0 3177 +cfn=(1094) +calls=1 0 +0 94 +cfn=(1092) +calls=1 0 +0 3227 +cfn=(1090) global constructors keyed to properties.cpp +calls=1 0 +0 94 +cfn=(1088) global constructors keyed to basic_strand.cpp +calls=1 0 +0 2839 +0 241 + +fn=(1090) +0 3 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 24 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 + +fn=(1112) +0 6 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 24 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 319 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 344 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 330 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 313 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 317 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 5 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 315 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 5 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 319 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 16 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 24 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 319 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 344 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 330 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 313 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 317 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 10 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 24 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 407 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 319 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 344 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 330 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 313 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 317 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 5 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 5 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 318 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 33 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 24 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 319 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 344 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 330 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 313 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 317 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 5 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 27 + +fn=(1114) +0 3 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 24 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 + +fn=(1122) +0 5 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 24 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 319 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 407 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 344 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 330 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 313 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 317 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 7 + +fn=(1124) +0 5 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 24 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 319 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 344 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 407 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 330 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 313 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 317 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 13 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 24 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 319 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 344 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 330 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 313 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 317 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 12 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 5 + +fn=(1132) +0 5 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 24 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 319 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 344 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 330 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 313 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 317 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 13 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 24 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 319 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 344 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 330 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 313 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 317 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 5 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 318 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 5 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 314 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 5 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 304 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 5 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 11 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 10 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 10 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 5 + +fn=(1160) std::vector >::_M_insert_aux(__gnu_cxx::__normal_iterator > >, MR::Argument const&) +0 1555 +cob=(7) +cfi=(53) +cfn=(880) +calls=74 0 +0 8984 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1299 +0 3359 +cob=(7) +cfi=(53) +cfn=(1174) +calls=25 0 +0 2056 +0 1432 + +fn=(1194) +0 6 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 24 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 407 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 319 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 344 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 330 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 313 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 317 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 5 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 304 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 8 + +fn=(1198) +0 6 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 24 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 319 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 344 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 330 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 313 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 317 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 5 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 319 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 8 + +fn=(1208) +0 7 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 319 +0 6 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 344 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 330 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 313 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 317 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 + +fn=(2648) std::vector >::_M_insert_aux(__gnu_cxx::__normal_iterator > >, BTS::Diffusion::Encoding const&) +0 144 +cob=(7) +cfi=(53) +cfn=(880) +calls=7 0 +0 2186 +0 1119 +cob=(7) +cfi=(53) +cfn=(1174) +calls=6 0 +0 636 +0 143 + +fn=(3028) +0 14 +cfn=(3030) +calls=1 0 +0 35992 +0 7 +cfn=(3042) +calls=1 0 +0 1757 +0 4 + +fn=(3096) +0 13176 +cfn=(3098) +calls=3294 0 +0 13176 + +fn=(3250) BTS::Prob::Test::Peaks::Peak::Peak(BTS::Prob::Test::Peaks::Peak const&) +0 36 +cfn=(2888) +calls=4 0 +0 1474 +0 156 +cfn=(2888) +calls=4 0 +0 1485 +0 176 + +fn=(3340) T.4663 +0 3220 +cob=(7) +cfi=(53) +cfn=(722) +calls=322 0 +0 31234 +0 7084 +cob=(7) +cfi=(53) +cfn=(728) +calls=322 0 +0 227976 +0 3220 +cob=(7) +cfi=(53) +cfn=(728) +calls=322 0 +0 227976 +0 7406 +cob=(7) +cfi=(53) +cfn=(492) +calls=322 0 +0 12558 +0 3220 +cob=(7) +cfi=(53) +cfn=(728) +calls=322 0 +0 227976 +0 2254 + +fn=(3350) +0 17209289590 +cfn=(3354) +calls=344168381 0 +0 69431255513 +0 6195901398 +cfn=(3352) +calls=344247521 0 +0 77893931717 +0 344247521 + +fn=(3446) +0 148 +cob=(7) +cfi=(53) +cfn=(3452) +calls=4 0 +0 3912 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1434 +0 12 +cob=(4) +cfi=(98) +cfn=(3460) +calls=4 90 +0 368 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1701 +0 52 + +fn=(3472) +0 34 +cfn=(3508) +calls=1 0 +0 798 +0 9 +cfn=(3508) +calls=3 0 +0 2394 +0 16 +cfn=(2642) +calls=2 0 +0 22 +0 46 +cfn=(3474) +calls=2 0 +0 22 +0 20 +cfn=(3476) +calls=2 0 +0 3437 +0 18 +cfn=(3494) void BTS::Fibre::Base::Reader >::read >(BTS::Fibre::Set&, BTS::Triple const&) +calls=2 0 +0 97396 +0 16 + +fn=(3502) std::vector >::_M_insert_aux(__gnu_cxx::__normal_iterator > >, BTS::Fibre::Tract const&) +0 108 +cob=(7) +cfi=(53) +cfn=(880) +calls=3 0 +0 484 +0 27 +cfn=(3504) +calls=3 0 +0 6976 +0 18 +cfn=(3506) BTS::Fibre::Tract* std::__uninitialized_move_a >(BTS::Fibre::Tract*, BTS::Fibre::Tract*, BTS::Fibre::Tract*, std::allocator&) +calls=3 0 +0 7915 +0 18 +cfn=(3506) +calls=3 0 +0 51 +0 121 +cob=(7) +cfi=(53) +cfn=(1174) +calls=9 0 +0 729 +0 48 +cob=(7) +cfi=(53) +cfn=(1174) +calls=3 0 +0 243 +0 12 +cfn=(3510) +calls=3 0 +0 1254 +0 19 +cob=(7) +cfi=(53) +cfn=(1174) +calls=2 0 +0 193 +0 54 + +fn=(3516) double BTS::to(std::string const&) +0 198 +cob=(7) +cfi=(53) +cfn=(722) +calls=18 0 +0 1746 +0 396 +cob=(7) +cfi=(53) +cfn=(728) +calls=18 0 +0 12744 +0 288 +cob=(7) +cfi=(53) +cfn=(492) +calls=18 0 +0 702 +0 162 +cob=(7) +cfi=(53) +cfn=(1812) +calls=18 0 +0 3292 +0 108 +cob=(7) +cfi=(53) +cfn=(1528) +calls=18 0 +0 378 +0 54 +cob=(7) +cfi=(53) +cfn=(728) +calls=18 0 +0 12744 +0 54 +cob=(7) +cfi=(53) +cfn=(1822) +calls=18 0 +0 24308 +0 180 +cob=(7) +cfi=(53) +cfn=(1468) +calls=18 0 +0 1800 +0 90 +cob=(7) +cfi=(53) +cfn=(746) +calls=18 0 +0 216 +0 162 +cob=(7) +cfi=(53) +cfn=(1556) +calls=18 0 +0 1044 +0 162 + +fn=(3526) __gnu_cxx::__normal_iterator > > std::__find<__gnu_cxx::__normal_iterator > >, std::string>(__gnu_cxx::__normal_iterator > >, __gnu_cxx::__normal_iterator > >, std::string const&, std::random_access_iterator_tag) +0 296 + +fn=(3532) +0 202 +cob=(7) +cfi=(53) +cfn=(1446) +calls=2 0 +0 402 +0 34 +cob=(7) +cfi=(53) +cfn=(1468) +calls=2 0 +0 200 +0 22 +cob=(7) +cfi=(53) +cfn=(1446) +calls=2 0 +0 402 +0 24 +cob=(7) +cfi=(53) +cfn=(1468) +calls=2 0 +0 200 +0 2 + +fn=(3534) +0 48 +cfn=(3514) +calls=8 0 +0 64629 +0 16 +cfn=(3542) BTS::Fibre::Tract::normalize_base_width() +calls=8 0 +0 920 +0 40 + +fn=(3564) +0 633088 +cob=(7) +cfi=(53) +cfn=(1468) +calls=79136 0 +0 553952 +0 237408 +cfn=(3474) +calls=79136 0 +0 870496 +0 2136672 + +fn=(3638) +0 162 +cfn=(3640) +calls=9 0 +0 7332305457870 +0 80 +cfn=(2642) +calls=8 0 +0 88 +0 160 +cfn=(3784) +calls=8 0 +0 10632 +0 40 +cfn=(2402) +calls=8 0 +0 376 +0 40 +cfn=(2402) +calls=8 0 +0 376 +0 40 +cfn=(3870) +calls=8 0 +0 432 +0 80 +cfn=(3474) +calls=8 0 +0 88 +0 160 +cob=(7) +cfi=(53) +cfn=(934) +calls=8 0 +0 3392 +0 32 +cfn=(3348) +calls=8 0 +0 816 +0 40 +cob=(7) +cfi=(53) +cfn=(1468) +calls=8 0 +0 800 +0 16 +cfn=(3620) +calls=8 0 +0 87803 +0 24 +cfn=(3620) +calls=8 0 +0 76056 +0 32 +cfn=(3626) +calls=8 0 +0 27643 +0 774136 +cfn=(3634) +calls=8 0 +0 120 +0 1214072 +cob=(9) +cfi=(58) +cfn=(2654) +calls=8 0 +0 1728 +0 776944 +cfn=(3620) +calls=8 0 +0 76696 +0 280 +cfn=(3566) +calls=8 0 +0 16864 +0 144 +cfn=(3566) +calls=24 0 +0 50592 +0 656 +cfn=(3872) std::vector >::_M_insert_aux(__gnu_cxx::__normal_iterator > >, unsigned int const&) +calls=24 0 +0 8584 +0 96 +cfn=(3872) +calls=24 0 +0 8584 +0 184 +cfn=(3880) BTS::Image::Expected::Quartic::Buffer::dim(unsigned int) const +calls=8 0 +0 24 +0 120 +cfn=(3880) +calls=24 0 +0 72 +0 232 +cfn=(3880) +calls=24 0 +0 72 +0 360 +cfn=(3880) +calls=72 0 +0 216 +0 624 +cfn=(3880) +calls=72 0 +0 216 +0 1080 +cfn=(3880) +calls=216 0 +0 648 +0 1656 +cfn=(3646) BTS::Image::Expected::Quartic::Buffer::num_encodings() const +calls=216 0 +0 1296 +0 52704 +cfn=(3646) +calls=13176 0 +0 79056 +0 119016 +cfn=(3882) +calls=13176 0 +0 2024876 +0 184464 +cfn=(2806) +calls=13176 0 +0 1654320 +0 131760 +cfn=(3884) +calls=13176 0 +0 92232 +0 487512 +cfn=(3496) +calls=13176 0 +0 19013048 +0 118584 +cob=(7) +cfi=(53) +cfn=(880) +calls=13176 0 +0 21421547 +0 355752 +cfn=(3504) +calls=52704 0 +0 82777401 +0 263520 +cfn=(3508) +calls=13176 0 +0 7273152 +0 329400 +cob=(7) +cfi=(53) +cfn=(934) +calls=13176 0 +0 3083184 +0 210816 +cob=(7) +cfi=(53) +cfn=(1468) +calls=13176 0 +0 197640 +0 79056 +cfn=(2642) +calls=13176 0 +0 144936 +0 52704 +cfn=(3626) +calls=13176 0 +0 24141283 +0 1279072888 +cfn=(3770) +calls=35624 0 +0 4567680 +0 356240 +cfn=(3788) +calls=35624 0 +0 24373160 +0 926224 +cfn=(3808) +calls=35624 0 +0 4567680 +0 178120 +cfn=(3886) +calls=35624 0 +0 7243715751 +0 646439448 +cob=(9) +cfi=(58) +cfn=(2654) +calls=35624 0 +0 7775060 +0 527040 +cfn=(3918) +calls=13176 0 +0 351561512 +0 52704 +cfn=(3918) +calls=13176 0 +0 351249732 +0 52704 +cfn=(3924) +calls=13176 0 +0 1705653505 +0 52704 +cob=(9) +cfi=(58) +cfn=(2654) +calls=13176 0 +0 2671434 +0 52704 +cob=(9) +cfi=(58) +cfn=(2654) +calls=13176 0 +0 2630259 +0 7429195368 +cfn=(3630) +calls=13176 0 +0 141020430 +0 33374808 +cfn=(3562) +calls=13176 0 +0 47828880 +0 52704 +cob=(9) +cfi=(58) +cfn=(2654) +calls=13176 0 +0 19384092 +0 52704 +cob=(9) +cfi=(58) +cfn=(2654) +calls=13176 0 +0 4611600 +0 26352 +cfn=(3562) +calls=13176 0 +0 47833346 +0 813496 +cob=(7) +cfi=(53) +cfn=(880) +calls=17080 0 +0 1956880 +0 546560 +cob=(7) +cfi=(53) +cfn=(880) +calls=17080 0 +0 1956880 +0 1093120 +cob=(7) +cfi=(53) +cfn=(880) +calls=51240 0 +0 5870640 +0 2664480 +cob=(7) +cfi=(53) +cfn=(1174) +calls=17080 0 +0 1383480 +0 85400 +cob=(7) +cfi=(53) +cfn=(934) +calls=17080 0 +0 3989400 +0 170800 +cob=(7) +cfi=(53) +cfn=(1258) +calls=17080 0 +0 341600 +0 102480 +cfn=(3350) +calls=17080 0 +0 4341011 +0 51240 +cob=(7) +cfi=(53) +cfn=(1468) +calls=17080 0 +0 256200 +0 85400 +cob=(7) +cfi=(53) +cfn=(1468) +calls=17080 0 +0 256200 +0 85400 +cob=(7) +cfi=(53) +cfn=(934) +calls=17080 0 +0 4006480 +0 802760 +cob=(7) +cfi=(53) +cfn=(1258) +calls=17080 0 +0 341600 +0 102480 +cfn=(3350) +calls=17080 0 +0 5116743 +0 51240 +cob=(7) +cfi=(53) +cfn=(1468) +calls=17080 0 +0 256200 +0 85400 +cob=(7) +cfi=(53) +cfn=(1468) +calls=17080 0 +0 256200 +0 102480 +cfn=(3788) +calls=17080 0 +0 11729032 +0 102480 +cfn=(3508) +calls=17080 0 +0 13629840 +0 189344 +cob=(7) +cfi=(53) +cfn=(1258) +calls=13176 0 +0 263520 +0 79056 +cfn=(3350) +calls=13176 0 +0 3280824 +0 39528 +cob=(7) +cfi=(53) +cfn=(1468) +calls=13176 0 +0 197640 +0 1233296 +cob=(7) +cfi=(53) +cfn=(1174) +calls=8 0 +0 648 +0 48 +cob=(7) +cfi=(53) +cfn=(1174) +calls=8 0 +0 648 +0 656 + +fn=(3648) +0 71 +cob=(7) +cfi=(53) +cfn=(880) +calls=3 0 +0 5357 +0 27 +cfn=(3650) BTS::Image::Container::Buffer::Buffer(BTS::Image::Container::Buffer const&) +calls=3 0 +0 96 +0 18 +cfn=(3652) +calls=3 0 +0 34036112 +0 18 +cfn=(3652) +calls=3 0 +0 51 +0 32 +cfn=(3654) +calls=2 0 +0 6889807 +0 4 +cfn=(3654) +calls=1 0 +0 4035535 +0 19 +cob=(7) +cfi=(53) +cfn=(1174) +calls=2 0 +0 187 +0 84 + +fn=(3684) +0 50 +cfn=(3686) +calls=2 0 +0 561 +0 4 + +fn=(3738) BTS::Image::Expected::Voxel::Voxel(BTS::Image::Expected::Buffer&, BTS::Image::Coord const&, BTS::Diffusion::Model&) +0 4503 +cfn=(3740) +calls=237 0 +0 179819 +0 12798 +cfn=(3742) +calls=237 0 +0 85557 +0 379437 +cfn=(3748) +calls=1659 0 +0 2903155 +0 6873 + +fn=(3746) T.6667 +0 12215227536 + +fn=(3762) +0 35627512245 + +fn=(3780) +0 4959 +cob=(7) +cfi=(53) +cfn=(880) +calls=193 0 +0 33561 +0 344 +cob=(7) +cfi=(53) +cfn=(880) +calls=172 0 +0 29663 +0 14965 +cob=(7) +cfi=(53) +cfn=(2426) +calls=365 0 +0 26518 +0 6605 + +fn=(3786) BTS::Fibre::Tract* std::__uninitialized_copy_a<__gnu_cxx::__normal_iterator > >, BTS::Fibre::Tract*, BTS::Fibre::Tract>(__gnu_cxx::__normal_iterator > >, __gnu_cxx::__normal_iterator > >, BTS::Fibre::Tract*, std::allocator&) +0 116070 +cfn=(3504) +calls=22265 0 +0 40325441 +0 114245 + +fn=(3792) +0 42406 +cfn=(3496) +calls=3029 0 +0 4380909 +0 9087 +cfn=(3496) +calls=3029 0 +0 4384347 +0 9087 +cfn=(3496) +calls=3029 0 +0 4384373 +0 257465 +cfn=(3504) +calls=3029 0 +0 6019061 +0 12116 +cfn=(3504) +calls=3029 0 +0 6018791 +0 12116 +cfn=(3504) +calls=3029 0 +0 6018613 +0 12116 +cfn=(3504) +calls=3029 0 +0 6018886 +0 9087 +cfn=(3788) +calls=3029 0 +0 2116035 +0 21203 +cfn=(3788) +calls=3029 0 +0 2116362 +0 21203 +cfn=(3788) +calls=3029 0 +0 2116134 +0 18174 +cfn=(3508) +calls=3029 0 +0 2417142 +0 6058 +cfn=(3508) +calls=3029 0 +0 2417142 +0 6058 +cfn=(3508) +calls=3029 0 +0 2417142 +0 6058 +cfn=(3508) +calls=3029 0 +0 2417142 +0 39377 +cob=(7) +cfi=(53) +cfn=(880) +calls=3029 0 +0 440695 +0 69667 +cfn=(3794) +calls=9087 0 +0 134943169 +0 48464 +cfn=(3508) +calls=3029 0 +0 2417142 +0 6058 +cfn=(3508) +calls=3029 0 +0 2417142 +0 6058 +cfn=(3508) +calls=3029 0 +0 2417142 +0 24232 + +fn=(3794) +0 3618960 +cfn=(3496) +calls=361896 0 +0 526879892 +0 1447584 +cfn=(3496) +calls=361896 0 +0 527946230 +0 1085688 +cfn=(3496) +calls=361896 0 +0 528016716 +0 34018224 +cfn=(3504) +calls=361896 0 +0 824452297 +0 1447584 +cfn=(3504) +calls=361896 0 +0 831323124 +0 1085688 +cfn=(3504) +calls=361896 0 +0 831332524 +0 1085688 +cfn=(3788) +calls=361896 0 +0 316745848 +0 2533272 +cfn=(3788) +calls=361896 0 +0 316922246 +0 2533272 +cfn=(3788) +calls=361896 0 +0 316930114 +0 2171376 +cfn=(3508) +calls=361896 0 +0 288793008 +0 723792 +cfn=(3508) +calls=361896 0 +0 288793008 +0 723792 +cfn=(3508) +calls=361896 0 +0 288793008 +0 2533272 + +fn=(3804) +0 1669437 +cfn=(3806) +calls=61831 0 +0 15468629 +0 309155 + +fn=(3808) +0 441769042 +cfn=(3810) +calls=365 0 +0 127348439 +0 261162590 +cfn=(3820) +calls=365 0 +0 16425 +0 1460 +cfn=(3822) +calls=365 0 +0 139149 +0 1095 +cfn=(3828) BTS::Image::Container::Voxel::~Voxel() +calls=365 0 +0 6570 +0 730 +cfn=(3828) +calls=365 0 +0 6570 +0 1095 +cfn=(3830) +calls=365 0 +0 122062025 +0 2190 +cfn=(3828) +calls=365 0 +0 37228941 +0 2169 + +fn=(3814) +0 1285614 +cfn=(3504) +calls=58437 0 +0 108483110 +0 350622 +cfn=(3504) +calls=58437 0 +0 108539565 +0 1110303 +cob=(7) +cfi=(53) +cfn=(880) +calls=58437 0 +0 9581418 +0 3798267 +cob=(7) +cfi=(53) +cfn=(880) +calls=41721 0 +0 7623486 +0 2328777 +cfn=(3794) +calls=125163 0 +0 2117975987 +0 2028303 +cfn=(3800) +calls=58437 0 +0 82171925 +0 467496 + +fn=(3828) +0 13140 +cfn=(3816) +calls=365 0 +0 607725 +0 43800 +cfn=(3816) +calls=21900 0 +0 36463500 +0 71540 +cob=(7) +cfi=(53) +cfn=(1174) +calls=365 0 +0 39456 +0 2920 + +fn=(3832) +0 116070 +cfn=(3814) +calls=22265 0 +0 121369804 +0 114245 + +fn=(3840) +0 333746640 +cfn=(3842) +calls=5562444 0 +0 800991936 +0 27812220 +cfn=(3844) +calls=5562444 0 +0 344871528 +0 66749328 +cfn=(3846) +calls=5562444 0 +0 16687332 +0 11124888 +cfn=(3846) +calls=5562444 0 +0 16687332 +0 133498656 +cfn=(3848) +calls=5562444 0 +0 394933524 +0 11124888 +cfn=(3848) +calls=5562444 0 +0 394933524 +0 61186884 +cfn=(3846) +calls=5562444 0 +0 16687332 +0 11124888 +cfn=(3846) +calls=5562444 0 +0 16687332 +0 572931732 + +fn=(3872) +0 1200 +cfn=(3874) std::vector >::_M_check_len(unsigned long, char const*) const +calls=48 0 +0 864 +0 240 +cfn=(3876) std::_Vector_base >::_M_allocate(unsigned long) +calls=48 0 +0 5968 +0 576 +cfn=(3878) unsigned int* std::__uninitialized_move_a >(unsigned int*, unsigned int*, unsigned int*, std::allocator&) +calls=48 0 +0 3104 +0 240 +cfn=(3878) +calls=48 0 +0 1920 +0 224 +cob=(7) +cfi=(53) +cfn=(1174) +calls=32 0 +0 2592 +0 240 + +fn=(3896) +0 12005950 +cfn=(3898) void std::__insertion_sort<__gnu_cxx::__normal_iterator > > >(__gnu_cxx::__normal_iterator > >, __gnu_cxx::__normal_iterator > >) +calls=1200595 0 +0 201371870 +0 6002975 + +fn=(3902) +0 7944152 + +fn=(3912) void BTS::Fibre::Unzipper::unzip_element(BTS::Fibre::BasicStrand const&, MR::Math::Vector&, unsigned int&) +0 40988304 +cfn=(3914) std::vector > BTS::Fibre::Properties::Intrinsic_tpl::intrinsic_keys() +calls=3415692 0 +0 17078460 +0 20494152 +cfn=(2410) +calls=3415692 0 +0 51235380 +0 286918128 + +fn=(3948) +0 7936 + +fn=(3956) +0 22752 + +fn=(1138) +0 5 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 24 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 319 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 344 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 330 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 313 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 317 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 38 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 49 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 7 + +fn=(1168) +0 196 +cob=(7) +cfi=(53) +cfn=(1174) +calls=49 0 +0 6065 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1307 + +fn=(2000) +0 13 +cob=(11) +cfi=(60) +cfn=(2006) +calls=1 0 +0 1866987 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1072 +0 15 +cfn=(2644) MR::Math::Matrix::Matrix(MR::Math::Matrix const&) +calls=1 0 +0 5775 +0 4 +cfn=(2646) BTS::Diffusion::Encoding::Set::set(MR::Math::Matrix const&) +calls=1 0 +0 7411 +0 4 +cob=(9) +cfi=(58) +cfn=(2654) +calls=1 0 +0 209 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 877 +0 22 +cfn=(2644) +calls=1 0 +0 680 +0 24 +cfn=(2656) std::_Rb_tree, std::_Select1st >, std::less, std::allocator > >::_M_erase(std::_Rb_tree_node >*) +calls=1 0 +0 15 +0 29 +cfn=(2658) std::vector >::operator=(std::vector > const&) +calls=1 0 +0 1265 +0 4 +cfn=(2660) +calls=1 0 +0 55410 +0 15 +cob=(4) +cfi=(121) +cfn=(2802) +calls=1 29 +0 12 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1795 +0 21494 +cfn=(2806) +calls=1647 0 +0 255946 +0 23058 +cfn=(2826) +calls=1647 0 +0 4941 +0 44469 +cfn=(2828) +calls=549 0 +0 25297 +0 8241 +cfn=(2416) +calls=1 0 +0 289 +0 60 +cfn=(2416) +calls=15 0 +0 6514 +0 32 +cob=(7) +cfi=(53) +cfn=(2846) +calls=16 0 +0 1491 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1971 +0 50 +cfn=(2854) MR::ProgressBar::~ProgressBar() +calls=1 0 +0 16 +0 4 +cob=(7) +cfi=(53) +cfn=(1174) +calls=1 0 +0 81 +0 4 +cob=(9) +cfi=(58) +cfn=(2654) +calls=1 0 +0 196 +0 4 +cob=(7) +cfi=(53) +cfn=(1174) +calls=1 0 +0 114 +0 2 +cfn=(2634) +calls=1 0 +0 9403 +0 7694 + +fn=(2418) +0 345 +cfn=(2420) +calls=15 0 +0 5600 +0 60 + +fn=(2646) +0 3147 +cfn=(2648) +calls=7 0 +0 4228 +0 36 + +fn=(3002) BTS::Diffusion::Response* std::__uninitialized_copy_a(BTS::Diffusion::Response*, BTS::Diffusion::Response*, BTS::Diffusion::Response*, std::allocator&) +0 1131 +cfn=(2888) +calls=63 0 +0 24641 +0 5412 + +fn=(3070) +0 40 +cob=(7) +cfi=(53) +cfn=(1446) +calls=1 0 +0 262 +0 8 +cob=(7) +cfi=(53) +cfn=(1468) +calls=1 0 +0 100 +0 11 +cob=(7) +cfi=(53) +cfn=(1446) +calls=1 0 +0 206 +0 7 +cob=(7) +cfi=(53) +cfn=(1468) +calls=1 0 +0 100 +0 13 + +fn=(3084) +0 100 +cfn=(3032) +calls=2 0 +0 60778 +0 28 +cob=(6) +cfi=(129) +cfn=(3038) +calls=2 44 +0 48 +0 10 +cfn=(3040) +calls=2 0 +0 22 +0 20 + +fn=(3256) +0 300 +cfn=(2642) +calls=50 0 +0 550 +0 300 +cob=(9) +cfi=(58) +cfn=(2654) +calls=50 0 +0 8250 + +fn=(3354) +0 9637822628 +cob=(7) +cfi=(53) +cfn=(880) +calls=688415902 0 +0 76073152123 +0 4130495412 +cob=(7) +cfi=(53) +cfn=(1258) +calls=688415902 0 +0 13768318040 +0 4818911314 +cob=(7) +cfi=(53) +cfn=(2426) +calls=688415902 0 +0 22373318965 +0 7228485681 + +fn=(3370) MR::DWI::Tractography::Reader::open(std::string const&, MR::DWI::Tractography::Properties&) +0 32 +cfn=(2642) +calls=2 0 +0 22 +0 30 +cfn=(3372) +calls=2 0 +0 42 +0 4 +cfn=(3372) +calls=2 0 +0 42 +0 4 +cfn=(3372) +calls=2 0 +0 42 +0 22 +cfn=(2642) +calls=2 0 +0 22 +0 30 +cob=(7) +cfi=(53) +cfn=(722) +calls=2 0 +0 194 +0 44 +cob=(7) +cfi=(53) +cfn=(728) +calls=2 0 +0 1416 +0 14 +cob=(7) +cfi=(53) +cfn=(1608) +calls=2 0 +0 530 +0 6 +cob=(7) +cfi=(53) +cfn=(728) +calls=2 0 +0 1416 +0 8 +cob=(11) +cfi=(60) +cfn=(2204) +calls=2 0 +0 6395 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1096 +0 58 +cob=(11) +cfi=(60) +cfn=(2238) +calls=2 0 +0 6357 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 992 +0 32 +cob=(11) +cfi=(60) +cfn=(2238) +calls=16 0 +0 49390 +0 148 +cob=(7) +cfi=(53) +cfn=(2256) +calls=16 0 +0 4046 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1516 +0 96 +cob=(7) +cfi=(53) +cfn=(1372) +calls=16 0 +0 192 +0 192 +cob=(4) +cfi=(118) +cfn=(2270) +calls=16 47 +0 192 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1724 +0 360 +cob=(4) +cfi=(118) +cfn=(2270) +calls=120 47 +0 1440 +0 624 +cob=(7) +cfi=(53) +cfn=(1594) +calls=16 0 +0 704 +0 192 +cob=(7) +cfi=(53) +cfn=(1310) +calls=16 0 +0 1312 +0 80 +cob=(7) +cfi=(53) +cfn=(1594) +calls=16 0 +0 808 +0 96 +cob=(7) +cfi=(53) +cfn=(1594) +calls=16 0 +0 822 +0 40 +cob=(7) +cfi=(53) +cfn=(1264) +calls=2 0 +0 56 +0 58 +cob=(7) +cfi=(53) +cfn=(1594) +calls=14 0 +0 652 +0 766 +cob=(7) +cfi=(53) +cfn=(1264) +calls=12 0 +0 716 +0 20 +cob=(11) +cfi=(60) +cfn=(2482) +calls=2 0 +0 2951 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 984 +0 42 +cob=(7) +cfi=(53) +cfn=(1258) +calls=8 0 +0 1695 +0 24 +cob=(7) +cfi=(53) +cfn=(1258) +calls=8 0 +0 120 +0 32 +cfn=(2416) +calls=8 0 +0 2503 +0 24 +cob=(7) +cfi=(53) +cfn=(1468) +calls=8 0 +0 56 +0 16 +cob=(7) +cfi=(53) +cfn=(1468) +calls=8 0 +0 120 +0 64 +cob=(7) +cfi=(53) +cfn=(722) +calls=2 0 +0 194 +0 44 +cob=(7) +cfi=(53) +cfn=(728) +calls=2 0 +0 1416 +0 32 +cob=(7) +cfi=(53) +cfn=(492) +calls=2 0 +0 78 +0 18 +cob=(7) +cfi=(53) +cfn=(1812) +calls=2 0 +0 392 +0 12 +cob=(7) +cfi=(53) +cfn=(1528) +calls=2 0 +0 42 +0 6 +cob=(7) +cfi=(53) +cfn=(728) +calls=2 0 +0 1416 +0 12 +cob=(7) +cfi=(53) +cfn=(2532) +calls=2 0 +0 1114 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 2395 +0 12 +cob=(7) +cfi=(53) +cfn=(2308) +calls=2 0 +0 1000 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1664 +0 6 +cob=(7) +cfi=(53) +cfn=(1594) +calls=2 0 +0 104 +0 10 +cob=(7) +cfi=(53) +cfn=(1264) +calls=2 0 +0 246 +0 10 +cob=(7) +cfi=(53) +cfn=(1632) +calls=2 0 +0 3101 +0 16 +cob=(7) +cfi=(53) +cfn=(1712) +calls=2 0 +0 16 +0 18 +cob=(7) +cfi=(53) +cfn=(3412) +calls=2 0 +0 4806 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1754 +0 26 +cob=(7) +cfi=(53) +cfn=(1468) +calls=2 0 +0 200 +0 10 +cob=(7) +cfi=(53) +cfn=(746) +calls=2 0 +0 24 +0 22 +cob=(7) +cfi=(53) +cfn=(1556) +calls=2 0 +0 116 +0 12 +cfn=(2576) +calls=2 0 +0 1803 +0 36 +cob=(7) +cfi=(53) +cfn=(1310) +calls=2 0 +0 164 +0 96 + +fn=(3436) +0 3984 +cob=(7) +cfi=(53) +cfn=(1258) +calls=664 0 +0 13240 +0 1328 +cob=(4) +cfi=(69) +cfn=(642) +calls=664 26 +0 14380 +0 2656 +cob=(7) +cfi=(53) +cfn=(1772) +calls=664 0 +0 205450 +0 3320 + +fn=(3438) +0 32 +cob=(4) +cfi=(95) +cfn=(1350) +calls=4 37 +0 40 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1738 +0 48 + +fn=(3474) +0 870628 + +fn=(3514) +0 3100 +cfn=(3516) +calls=18 0 +0 60828 +0 72 +cfn=(3518) std::_Rb_tree, std::_Select1st >, std::less, std::allocator > >::erase(std::string const&) +calls=18 0 +0 7459 +0 36 +cob=(7) +cfi=(53) +cfn=(2852) +calls=18 0 +0 258 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1971 +0 144 + +fn=(3530) +0 66 + +fn=(3556) +0 168 +cob=(7) +cfi=(53) +cfn=(1258) +calls=12 0 +0 240 +0 60 +cob=(7) +cfi=(53) +cfn=(1468) +calls=12 0 +0 180 +0 8 +cob=(7) +cfi=(53) +cfn=(1468) +calls=4 0 +0 60 +0 32 +cob=(7) +cfi=(53) +cfn=(1468) +calls=16 0 +0 1600 +0 32 +cob=(7) +cfi=(53) +cfn=(2846) +calls=16 0 +0 240 +0 112 +cfn=(1396) +calls=16 0 +0 5157 +0 64 +cfn=(3436) +calls=16 0 +0 5475 +0 88 +cfn=(2390) +calls=4 0 +0 1790 +0 148 +cfn=(3338) +calls=8 0 +0 27974 +0 48 +cfn=(3338) +calls=16 0 +0 55370 +0 96 +cfn=(3436) +calls=24 0 +0 8239 +0 96 +cfn=(1396) +calls=24 0 +0 7217 +0 96 +cfn=(3436) +calls=24 0 +0 7656 +0 432 +cfn=(3338) +calls=24 0 +0 83159 +0 144 +cfn=(3338) +calls=48 0 +0 166065 +0 288 +cfn=(3436) +calls=72 0 +0 24849 +0 288 +cfn=(1396) +calls=72 0 +0 21717 +0 288 +cfn=(3436) +calls=72 0 +0 23168 +0 504 +cfn=(3558) void BTS::Fibre::Unzipper::header_element(BTS::Triple const&, BTS::Fibre::Properties::Header&, std::string const&) +calls=72 0 +0 1077095 +0 144 +cob=(7) +cfi=(53) +cfn=(1468) +calls=72 0 +0 7200 +0 144 +cob=(7) +cfi=(53) +cfn=(1468) +calls=72 0 +0 7200 +0 144 +cob=(7) +cfi=(53) +cfn=(1468) +calls=72 0 +0 7200 +0 144 +cob=(7) +cfi=(53) +cfn=(1468) +calls=72 0 +0 7200 +0 768 +cob=(7) +cfi=(53) +cfn=(1468) +calls=24 0 +0 2400 +0 48 +cob=(7) +cfi=(53) +cfn=(1468) +calls=24 0 +0 2400 +0 48 +cob=(7) +cfi=(53) +cfn=(1468) +calls=24 0 +0 2400 +0 48 +cob=(7) +cfi=(53) +cfn=(1468) +calls=24 0 +0 2400 +0 192 + +fn=(3634) +0 135 + +fn=(3646) +0 2069309610 + +fn=(3650) +0 96 + +fn=(3668) +0 1292 +cob=(7) +cfi=(53) +cfn=(880) +calls=34 0 +0 131697326 +0 204 +cfn=(3670) BTS::Fibre::Tract::Section* std::__uninitialized_copy_a(BTS::Fibre::Tract::Section*, BTS::Fibre::Tract::Section*, BTS::Fibre::Tract::Section*, std::allocator&) +calls=34 0 +0 136 +0 646 + +fn=(3676) +0 26 +cob=(7) +cfi=(53) +cfn=(880) +calls=2 0 +0 525 +0 38 +cob=(7) +cfi=(53) +cfn=(2426) +calls=2 0 +0 60 +0 22 + +fn=(3688) +0 20 +cfn=(3626) +calls=1 0 +0 332 +0 271 +cob=(6) +cfi=(151) +cfn=(3694) cos +calls=2 348 +0 152 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1382 +0 232 +cob=(6) +cfi=(151) +cfn=(3694) +calls=58 348 +0 6225 +0 677 + +fn=(3696) +0 2244 +cob=(9) +cfi=(58) +cfn=(1916) +calls=2 0 +0 596 +0 10 + +fn=(3710) +0 8343672 +cob=(6) +cfi=(152) /build/buildd/eglibc-2.11.1/math/../sysdeps/ieee754/dbl-64/s_floor.c +cfn=(3716) floor +calls=695306 44 +0 25089827 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1422 +0 3476530 +cob=(6) +cfi=(152) +cfn=(3716) +calls=695306 44 +0 25321240 +0 4171836 +cob=(6) +cfi=(152) +cfn=(3716) +calls=695306 44 +0 25349212 +0 6257754 +cfn=(3718) +calls=695306 0 +0 73041204 +0 7648876 +cfn=(3728) +calls=102 0 +0 5952575 +0 306 +cfn=(3718) +calls=102 0 +0 10524 +0 612 +cfn=(3726) +calls=102 0 +0 1122 +0 1122 +cfn=(3768) +calls=102 0 +0 197854 +0 3642 +cfn=(3726) +calls=102 0 +0 84009 +0 102 + +fn=(3720) +0 1827 +cob=(7) +cfi=(53) +cfn=(2834) +calls=76 0 +0 1272 +0 645 +cfn=(3724) std::_Rb_tree, std::allocator > >, std::_Select1st, std::allocator > > >, std::less, std::allocator, std::allocator > > > >::_M_insert_(std::_Rb_tree_node_base const*, std::_Rb_tree_node_base const*, std::pair, std::allocator > > const&) +calls=53 0 +0 11955 +0 899 +cfn=(3722) std::_Rb_tree, std::allocator > >, std::_Select1st, std::allocator > > >, std::less, std::allocator, std::allocator > > > >::_M_insert_unique(std::pair, std::allocator > > const&) +calls=1 0 +0 371 +0 763 +cfn=(3724) +calls=48 0 +0 11376 +0 48 + +fn=(3766) +0 10914 +cob=(7) +cfi=(53) +cfn=(880) +calls=102 0 +0 12154 +0 1428 +cob=(7) +cfi=(53) +cfn=(880) +calls=714 0 +0 89686 +0 8160 +cob=(7) +cfi=(53) +cfn=(2426) +calls=816 0 +0 42216 +0 13362 + +fn=(3768) +0 6954080 +cob=(7) +cfi=(53) +cfn=(880) +calls=695408 0 +0 76505560 +0 11126528 +cfn=(3769) std::_Rb_tree, std::less, std::allocator >::_M_copy(std::_Rb_tree_node const*, std::_Rb_tree_node*)'2 +calls=695408 0 +0 283187071 +0 5563264 +cob=(7) +cfi=(53) +cfn=(880) +calls=695408 0 +0 76505493 +0 1928100 +cob=(7) +cfi=(53) +cfn=(880) +calls=964050 0 +0 106059684 +0 24987038 +cfn=(3769) +calls=853521 0 +0 168776721 +0 12359209 + +fn=(3769) +0 24666330 +cob=(7) +cfi=(53) +cfn=(880) +calls=2466633 0 +0 271370879 +0 32916464 +cfn=(3769) +calls=829217 0 +0 143877333 +0 10972872 +cob=(7) +cfi=(53) +cfn=(880) +calls=685939 0 +0 75464869 +0 111652 +cob=(7) +cfi=(53) +cfn=(880) +calls=55826 0 +0 6141855 +0 9996893 +cfn=(3769) +calls=88487 0 +0 12566827 +0 20321978 + +fn=(3774) +0 16425 + +fn=(3784) +0 10207 +cfn=(3788) +calls=8 0 +0 2432 +0 120 +cfn=(3788) +calls=24 0 +0 7296 +0 7367 +cob=(7) +cfi=(53) +cfn=(880) +calls=365 0 +0 272869 +0 2190 +cfn=(3786) +calls=365 0 +0 40555756 +0 4380 + +fn=(3790) +0 153005820 +cob=(7) +cfi=(53) +cfn=(880) +calls=3642822 0 +0 625293639 +0 171212634 + +fn=(3846) +0 266997312 + +fn=(3874) +0 864 + +fn=(3878) +0 1056 +cob=(4) +cfi=(90) +cfn=(1282) +calls=96 47 +0 3488 +0 480 + +fn=(3880) +0 1248 + +fn=(3906) void BTS::Fibre::Unzipper::unzip_element(BTS::Fibre::Tract const&, MR::Math::Vector&, unsigned int&) +0 10247076 +cfn=(3908) +calls=1138564 0 +0 3855885463 +0 17078460 +cfn=(3912) +calls=1138564 0 +0 138904808 +0 15939896 +cfn=(3912) +calls=2277128 0 +0 277809616 +0 27325536 + +fn=(3926) +0 12 +cob=(7) +cfi=(53) +cfn=(1258) +calls=1 0 +0 20 +0 8 +cob=(4) +cfi=(121) +cfn=(2802) +calls=1 29 +0 12 +0 29 +cob=(11) +cfi=(60) +cfn=(3928) +calls=1 0 +0 3668 +0 5 + +fn=(2854) +0 9 +cob=(7) +cfi=(53) +cfn=(1468) +calls=1 0 +0 7 + +fn=(1040) +0 11 +cob=(4) +cfi=(85) +cfn=(1048) +calls=1 96 +0 7351905246676 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1850 + +fn=(1050) +0 15 +cob=(2) +cfi=(13) +cfn=(1052) +calls=1 0 +0 253290 +0 10 + +fn=(1088) +0 5 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 24 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 319 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 344 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 330 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 313 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 317 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 10 + +fn=(1094) +0 4 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 24 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 6 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 24 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 + +fn=(1098) +0 6 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 24 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 319 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 344 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 330 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 313 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 317 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 5 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 314 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 8 + +fn=(1104) +0 5 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 24 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 319 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 344 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 330 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 313 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 317 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 + +fn=(1142) +0 6 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 24 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 319 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 344 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 330 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 313 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 317 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 5 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 314 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 5 + +fn=(1196) +0 7 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 319 +0 6 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 344 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 330 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 313 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 317 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 + +fn=(1206) +0 3 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 24 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 + +fn=(1234) +0 19 +cob=(11) +cfi=(60) +cfn=(1240) +calls=1 0 +0 68324 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1496 +0 5 +cob=(11) +cfi=(60) +cfn=(1412) +calls=1 0 +0 10641 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1024 +0 3 +cfn=(1434) +calls=1 0 +0 7351904911703 + +fn=(1430) +0 141 +cob=(7) +cfi=(53) +cfn=(880) +calls=7 0 +0 940 +0 126 +cob=(7) +cfi=(53) +cfn=(880) +calls=3 0 +0 346 +0 149 +cfn=(1432) +calls=3 0 +0 63 +0 36 +cfn=(1432) +calls=4 0 +0 832 +0 42 +cfn=(1432) +calls=7 0 +0 147 +0 56 +cob=(7) +cfi=(53) +cfn=(1174) +calls=3 0 +0 243 +0 27 +cob=(7) +cfi=(53) +cfn=(1174) +calls=2 0 +0 162 +0 159 + +fn=(2644) +0 3322 +cob=(9) +cfi=(58) +cfn=(1916) +calls=2 0 +0 3125 +0 8 + +fn=(2658) +0 31 +cob=(7) +cfi=(53) +cfn=(880) +calls=1 0 +0 362 +0 872 + +fn=(2818) +0 14 +cfn=(2820) +calls=1 0 +0 247 +0 12 + +fn=(2878) +0 7 + +fn=(2984) MR::Math::Vector::allocate(unsigned long) +0 2534 +cob=(9) +cfi=(58) +cfn=(2654) +calls=60 0 +0 9900 +0 300 +cob=(9) +cfi=(58) +cfn=(1916) +calls=60 0 +0 12720 +0 240 + +fn=(3000) std::vector >::_M_insert_aux(__gnu_cxx::__normal_iterator > >, BTS::Diffusion::Response const&) +0 427 +cfn=(2888) +calls=7 0 +0 2030 +0 586 +cfn=(3002) +calls=7 0 +0 31037 +0 49 +cfn=(3002) +calls=7 0 +0 147 +0 294 +cob=(9) +cfi=(58) +cfn=(2654) +calls=63 0 +0 10395 +0 215 +cob=(7) +cfi=(53) +cfn=(1174) +calls=6 0 +0 729 +0 73 +cob=(7) +cfi=(53) +cfn=(880) +calls=7 0 +0 5723 +0 52 + +fn=(3018) +0 5820 +cob=(7) +cfi=(53) +cfn=(880) +calls=240 0 +0 36813 +0 2640 +cfn=(3020) +calls=240 0 +0 53096 +0 1440 +cfn=(3022) std::vector >* std::__uninitialized_move_a >*, std::vector >*, std::allocator > > >(std::vector >*, std::vector >*, std::vector >*, std::allocator > >&) +calls=240 0 +0 102390 +0 1440 +cfn=(3022) +calls=240 0 +0 5040 +0 3300 +cob=(7) +cfi=(53) +cfn=(1174) +calls=420 0 +0 34020 +0 2100 +cob=(7) +cfi=(53) +cfn=(1174) +calls=180 0 +0 14580 +0 6120 + +fn=(3040) +0 33 + +fn=(3090) +0 16 +cfn=(3092) +calls=2 0 +0 78750 +0 26 + +fn=(3248) std::vector >::_M_insert_aux(__gnu_cxx::__normal_iterator > >, BTS::Prob::Test::Peaks::Peak const&) +0 129 +cob=(7) +cfi=(53) +cfn=(880) +calls=4 0 +0 1115 +0 44 +cfn=(3250) +calls=4 0 +0 3327 +0 24 +cfn=(3252) +calls=4 0 +0 6539 +0 24 +cfn=(3252) +calls=4 0 +0 84 +0 36 +cfn=(3254) +calls=3 0 +0 1155 +0 12 +cfn=(3254) +calls=4 0 +0 1540 +0 28 +cob=(7) +cfi=(53) +cfn=(1174) +calls=3 0 +0 336 +0 78 + +fn=(3266) +0 37 +cob=(7) +cfi=(53) +cfn=(880) +calls=1 0 +0 1293 +0 36 +cfn=(2888) +calls=6 0 +0 2341 +0 174 +cfn=(3268) +calls=6 0 +0 108 +0 30 +cfn=(2888) +calls=6 0 +0 2171 +0 298 + +fn=(3368) +0 22 +cob=(7) +cfi=(53) +cfn=(1264) +calls=2 0 +0 39 +0 70 +cfn=(3370) +calls=2 0 +0 116166 +0 12 +cfn=(2642) +calls=2 0 +0 1245 +0 20 +cfn=(2588) +calls=2 0 +0 1708 +0 66 +cfn=(3436) +calls=2 0 +0 736 +0 8 +cob=(7) +cfi=(53) +cfn=(1258) +calls=2 0 +0 40 +0 4 +cfn=(3438) +calls=2 0 +0 1798 +0 6 +cob=(7) +cfi=(53) +cfn=(1468) +calls=2 0 +0 30 +0 14 +cob=(7) +cfi=(53) +cfn=(1632) +calls=2 0 +0 2578 +0 14 +cob=(7) +cfi=(53) +cfn=(1712) +calls=2 0 +0 16 +0 8 +cfn=(3444) +calls=2 0 +0 13837 +0 6 +cfn=(2402) +calls=2 0 +0 457 +0 4 +cfn=(3462) +calls=2 0 +0 234 +0 6 +cob=(7) +cfi=(53) +cfn=(1468) +calls=2 0 +0 200 +0 4 +cfn=(3464) +calls=2 0 +0 1368 +0 16 + +fn=(3508) +0 10641223834 +cob=(7) +cfi=(53) +cfn=(1174) +calls=1023212298 0 +0 82880196138 +0 4465505356 +cob=(7) +cfi=(53) +cfn=(1174) +calls=343500412 0 +0 27823533372 +0 2061002472 +cfn=(3510) +calls=343500412 0 +0 143383554816 +0 2061002472 + +fn=(3524) +0 100 +cob=(7) +cfi=(53) +cfn=(880) +calls=4 0 +0 626 +0 88 +cob=(7) +cfi=(53) +cfn=(1258) +calls=8 0 +0 160 +0 64 +cfn=(3496) +calls=4 0 +0 5772 +0 60 +cfn=(3526) +calls=4 0 +0 140 +0 24 +cfn=(3526) +calls=4 0 +0 156 +0 92 +cob=(7) +cfi=(53) +cfn=(1264) +calls=4 0 +0 144 +0 28 +cob=(7) +cfi=(53) +cfn=(1468) +calls=4 0 +0 60 +0 12 +cob=(7) +cfi=(53) +cfn=(1468) +calls=4 0 +0 60 +0 16 +cob=(7) +cfi=(53) +cfn=(2846) +calls=8 0 +0 120 +0 32 +cfn=(3508) +calls=4 0 +0 2208 +0 36 + +fn=(3542) +0 920 + +fn=(3566) +0 3416196 +cfn=(3568) +calls=1138732 0 +0 2439152781 +0 56936600 + +fn=(3618) +0 23 +cob=(7) +cfi=(53) +cfn=(1258) +calls=2 0 +0 40 +0 18 + +fn=(3644) +0 689743086 +cfn=(3646) +calls=344871543 0 +0 2069229258 + +fn=(3722) +0 14 +cfn=(3724) +calls=1 0 +0 345 +0 12 + +fn=(3724) +0 1182 +cob=(7) +cfi=(53) +cfn=(880) +calls=54 0 +0 6132 +0 96 +cob=(7) +cfi=(53) +cfn=(880) +calls=48 0 +0 5280 +0 2142 +cob=(7) +cfi=(53) +cfn=(2426) +calls=102 0 +0 7277 +0 1567 + +fn=(3736) BTS::Image::Expected::Quartic::Voxel::Voxel(BTS::Image::Expected::Quartic::Buffer&, BTS::Image::Coord const&) +0 1659 +cfn=(3738) +calls=237 0 +0 3572142 +0 1896 + +fn=(3744) +0 8822108776 +cfn=(3746) +calls=678623752 0 +0 2035871256 +0 1357247504 +cfn=(3746) +calls=678623752 0 +0 2035871256 +0 6786237520 +cfn=(3746) +calls=678623752 0 +0 2035871256 +0 1357247504 +cfn=(3746) +calls=678623752 0 +0 2035871256 +0 6786237520 +cfn=(3746) +calls=678623752 0 +0 2035871256 +0 1357247504 +cfn=(3746) +calls=678623752 0 +0 2035871256 +0 3393118760 + +fn=(3750) +0 40527 +cfn=(3744) +calls=237 0 +0 14694 +0 22989 +cfn=(3744) +calls=237 0 +0 14694 +0 8769 + +fn=(3778) +0 56 +cfn=(3780) +calls=4 0 +0 1248 +0 48 + +fn=(3798) +0 78754 +cfn=(3508) +calls=9087 0 +0 7251426 +0 27261 +cfn=(3508) +calls=9087 0 +0 7251426 +0 18174 +cfn=(3508) +calls=9087 0 +0 7251426 +0 54522 +cob=(7) +cfi=(53) +cfn=(1174) +calls=3029 0 +0 321127 + +fn=(3818) +0 435226 +cfn=(3819) std::_Rb_tree, std::_Select1st >, std::less, std::allocator > >::_M_erase(std::_Rb_tree_node >*)'2 +calls=39566 0 +0 435226 +0 118698 +cfn=(3819) +calls=39566 0 +0 435226 +0 237396 +cob=(7) +cfi=(53) +cfn=(1468) +calls=79132 0 +0 7913200 +0 237396 +cob=(7) +cfi=(53) +cfn=(1174) +calls=79132 0 +0 6409692 +0 316528 + +fn=(3819) +0 870452 + +fn=(3826) +0 4959 +cob=(7) +cfi=(53) +cfn=(880) +calls=193 0 +0 34664 +0 344 +cob=(7) +cfi=(53) +cfn=(880) +calls=172 0 +0 30789 +0 14965 +cob=(7) +cfi=(53) +cfn=(2426) +calls=365 0 +0 26518 +0 6683 + +fn=(3876) +0 432 +cob=(7) +cfi=(53) +cfn=(880) +calls=48 0 +0 5536 + +fn=(3898) +0 23853650 +cob=(7) +cfi=(53) +cfn=(1258) +calls=1174220 0 +0 23484400 +0 22310180 +cob=(7) +cfi=(53) +cfn=(1468) +calls=1174220 0 +0 17613300 +0 5871100 +cob=(7) +cfi=(53) +cfn=(1258) +calls=1174220 0 +0 23484400 +0 3522660 +cfn=(3900) +calls=1174220 0 +0 49317240 +0 2348440 +cob=(7) +cfi=(53) +cfn=(1468) +calls=1174220 0 +0 17613300 +0 11953200 + +fn=(3904) +0 7231672 +cfn=(3566) +calls=1033096 0 +0 2276665079 +0 3099288 +cfn=(2888) +calls=1033096 0 +0 261739384 +0 5165480 +cfn=(3906) +calls=1033096 0 +0 3946577353 +0 5165480 + +fn=(3910) +0 256536472 + +fn=(3916) +0 7694784 +cfn=(3904) +calls=961848 0 +0 6054332880 +0 186598512 +cob=(9) +cfi=(58) +cfn=(2654) +calls=961848 0 +0 182751120 +0 3847392 + +fn=(3918) +0 290037 +cfn=(3620) +calls=26367 0 +0 250825489 +0 79101 +cfn=(2888) +calls=26367 0 +0 11294707 +0 131835 +cfn=(3920) void BTS::Fibre::Unzipper::unzip_intrinsic >(BTS::Fibre::Set const&, MR::Math::Vector&, unsigned int&) +calls=26367 0 +0 41931450 +0 448239 +cfn=(3906) +calls=26367 0 +0 99180512 +0 553707 +cfn=(3906) +calls=79101 0 +0 297432990 +0 1054680 + +fn=(3920) +0 316404 +cfn=(3922) std::vector > BTS::Fibre::Properties::Intrinsic_tpl::intrinsic_keys >() +calls=26367 0 +0 30857310 +0 421872 +cfn=(3894) +calls=26367 0 +0 553707 +0 79101 +cfn=(3896) +calls=26367 0 +0 975579 +0 369138 +cfn=(3910) +calls=26367 0 +0 2636700 +0 184569 +cfn=(2410) +calls=26367 0 +0 5326134 +0 210936 + +fn=(3946) +0 96 +cfn=(3922) +calls=8 0 +0 9408 +0 128 +cfn=(3894) +calls=8 0 +0 168 +0 24 +cfn=(3896) +calls=8 0 +0 296 +0 56 +cfn=(3948) +calls=8 0 +0 800 +0 112 +cfn=(2410) +calls=8 0 +0 1616 +0 64 + +fn=(3954) +0 1152 +cfn=(3914) +calls=96 0 +0 480 +0 576 +cfn=(2410) +calls=96 0 +0 1440 +0 8064 + +fn=(3958) +0 265 +cob=(11) +cfi=(60) +cfn=(3928) +calls=6 0 +0 10428 +0 3 +cob=(11) +cfi=(60) +cfn=(3928) +calls=1 0 +0 1738 +0 21 + +fn=(1092) +0 6 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 24 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 319 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 344 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 330 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 313 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 317 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 5 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 315 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 14 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 24 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 319 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 344 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 330 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 313 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 317 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 5 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 319 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 8 + +fn=(1102) +0 7 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 319 +0 6 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 344 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 330 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 313 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 317 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 + +fn=(1120) +0 6 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 24 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 319 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 344 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 330 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 313 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 317 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 5 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 308 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 5 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 314 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 5 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 304 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 12 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 315 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 5 + +fn=(1146) +0 5 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 24 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 319 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 344 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 330 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 313 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 317 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 7 + +fn=(1158) +0 864 +cfn=(1160) +calls=74 0 +0 18685 +0 148 + +fn=(1166) +0 1193 +cob=(7) +cfi=(53) +cfn=(880) +calls=49 0 +0 10299 +0 3257 + +fn=(1202) +0 5 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 24 +0 5 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 5 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 350 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 + +fn=(1222) +0 7 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 319 +0 6 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 344 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 309 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 330 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 313 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 +cob=(7) +cfi=(53) +cfn=(934) +calls=1 0 +0 317 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 2 +cob=(7) +cfi=(53) +cfn=(486) +calls=1 0 +0 24 +0 4 +cob=(4) +cfi=(56) +cfn=(362) +calls=1 57 +0 62 +0 4 + +fn=(1598) +0 451 +cob=(7) +cfi=(53) +cfn=(1174) +calls=3 0 +0 243 +0 190 +cob=(7) +cfi=(53) +cfn=(1174) +calls=4 0 +0 324 +0 200 + +fn=(2420) +0 915 +cob=(7) +cfi=(53) +cfn=(880) +calls=21 0 +0 3099 +0 100 +cob=(7) +cfi=(53) +cfn=(880) +calls=50 0 +0 7748 +0 497 +cob=(7) +cfi=(53) +cfn=(1258) +calls=71 0 +0 1420 +0 213 +cob=(7) +cfi=(53) +cfn=(1258) +calls=71 0 +0 1145 +0 355 +cob=(7) +cfi=(53) +cfn=(2426) +calls=71 0 +0 6618 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 2251 +0 1861 + +fn=(2634) +0 16 +cob=(11) +cfi=(60) +cfn=(2856) +calls=1 0 +0 5859 +0 25 +cob=(7) +cfi=(53) +cfn=(1468) +calls=1 0 +0 100 +0 10 +cob=(7) +cfi=(53) +cfn=(1174) +calls=1 0 +0 81 +0 8 +cob=(9) +cfi=(58) +cfn=(2522) +calls=2 0 +0 392 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 939 +0 14 +cfn=(2640) +calls=2 0 +0 248 +0 12 +cfn=(2640) +calls=6 0 +0 542 +0 32 +cob=(7) +cfi=(53) +cfn=(1174) +calls=2 0 +0 162 +0 8 +cob=(9) +cfi=(58) +cfn=(2522) +calls=2 0 +0 330 +0 4 +cob=(7) +cfi=(53) +cfn=(1468) +calls=2 0 +0 22 +0 6 +cfn=(2642) +calls=2 0 +0 4360 +0 8 + +fn=(2656) +0 15 + +fn=(2810) +0 297 +cfn=(2812) +calls=27 0 +0 108 +0 324 +cob=(7) +cfi=(53) +cfn=(880) +calls=27 0 +0 4658 +0 7425 + +fn=(2820) +0 345 +cob=(7) +cfi=(53) +cfn=(880) +calls=7 0 +0 1997 +0 40 +cob=(7) +cfi=(53) +cfn=(880) +calls=20 0 +0 4460 +0 864 +cob=(4) +cfi=(90) +cfn=(1282) +calls=27 47 +0 648 +0 621 +cob=(7) +cfi=(53) +cfn=(2426) +calls=27 0 +0 1217 +0 576 + +fn=(2890) +0 2623 +cfn=(2888) +calls=61 0 +0 19111 +0 549 +cfn=(2884) +calls=61 0 +0 37605 +0 2318 +cob=(6) +cfi=(122) /build/buildd/eglibc-2.11.1/math/../sysdeps/x86_64/fpu/s_sincos.S +cfn=(2896) sincos +calls=61 34 +0 549 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1430 +0 42273 +cob=(6) +cfi=(122) +cfn=(2896) +calls=6039 34 +0 54351 +0 97600 +cob=(6) +cfi=(123) /build/buildd/eglibc-2.11.1/math/../sysdeps/ieee754/dbl-64/w_exp.c +cfn=(2902) exp +calls=6100 38 +0 700400 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1390 +0 1439844 +cfn=(2884) +calls=61 0 +0 23241 +0 549 +cfn=(2884) +calls=61 0 +0 19764 +0 305 +cfn=(2884) +calls=61 0 +0 23241 +0 276025 +cob=(9) +cfi=(58) +cfn=(2912) gsl_blas_dgemm +calls=61 0 +0 1273115 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 843 +0 122 +cob=(9) +cfi=(58) +cfn=(2924) gsl_linalg_cholesky_decomp +calls=61 0 +0 118003 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1027 +0 122 +cob=(9) +cfi=(58) +cfn=(2950) gsl_linalg_cholesky_invert +calls=61 0 +0 216342 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1027 +0 488 +cob=(9) +cfi=(58) +cfn=(2976) gsl_blas_dsymm +calls=61 0 +0 1617765 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 843 +0 244 +cob=(9) +cfi=(58) +cfn=(2654) +calls=61 0 +0 11285 +0 244 +cob=(9) +cfi=(58) +cfn=(2654) +calls=61 0 +0 11956 +0 183 +cfn=(2984) +calls=61 0 +0 854 +0 427 +cob=(9) +cfi=(58) +cfn=(2990) gsl_blas_dgemv +calls=61 0 +0 259120 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 835 +0 244 +cob=(9) +cfi=(58) +cfn=(2654) +calls=61 0 +0 11285 +0 244 +cob=(9) +cfi=(58) +cfn=(2654) +calls=61 0 +0 11285 +0 244 +cob=(9) +cfi=(58) +cfn=(2654) +calls=61 0 +0 11956 +0 1098 + +fn=(2998) +0 39 +cfn=(2888) +calls=1 0 +0 240 +0 180 +cfn=(2888) +calls=60 0 +0 14400 +0 2565 +cfn=(2888) +calls=61 0 +0 14832 +0 5607 +cfn=(2888) +calls=54 0 +0 12960 +0 4726 +cob=(9) +cfi=(58) +cfn=(2654) +calls=61 0 +0 10065 +0 244 +cob=(9) +cfi=(58) +cfn=(2654) +calls=61 0 +0 10065 +0 672 +cfn=(2888) +calls=60 0 +0 14400 +0 2760 +cfn=(3004) +calls=60 0 +0 515202 +0 180 +cfn=(2984) +calls=60 0 +0 24840 +0 3480 +cob=(9) +cfi=(58) +cfn=(2654) +calls=60 0 +0 9900 +0 240 +cob=(9) +cfi=(58) +cfn=(2654) +calls=60 0 +0 9900 +0 88 +cfn=(3000) +calls=7 0 +0 51757 +0 7 + +fn=(3022) +0 13620 +cob=(7) +cfi=(53) +cfn=(880) +calls=420 0 +0 51930 +0 5460 +cob=(4) +cfi=(90) +cfn=(1282) +calls=420 47 +0 28560 +0 7860 + +fn=(3088) +0 4 + +fn=(3102) +0 35 +cfn=(3104) +calls=1 0 +0 218 +0 10 +cfn=(3108) +calls=1 0 +0 93 +0 84 +cob=(7) +cfi=(53) +cfn=(1594) +calls=1 0 +0 69 +0 9 +cob=(7) +cfi=(53) +cfn=(1594) +calls=1 0 +0 63 +0 25 +cfn=(3112) +calls=1 0 +0 674 +0 18 +cfn=(3112) +calls=1 0 +0 366 +0 12 +cob=(7) +cfi=(53) +cfn=(1594) +calls=1 0 +0 63 +0 4 +cob=(7) +cfi=(53) +cfn=(880) +calls=1 0 +0 195 +0 10 + +fn=(3110) +0 10 +cob=(7) +cfi=(53) +cfn=(1174) +calls=1 0 +0 81 + +fn=(3122) +0 30 +cob=(7) +cfi=(53) +cfn=(1506) +calls=1 0 +0 2745 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 2456 +0 4 +cob=(7) +cfi=(53) +cfn=(2786) +calls=1 0 +0 583 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1648 +0 13 +cob=(7) +cfi=(53) +cfn=(3162) +calls=1 0 +0 1910 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1412 +0 2 +cob=(7) +cfi=(53) +cfn=(3186) +calls=1 0 +0 1762 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1444 +0 3 +cob=(9) +cfi=(58) +cfn=(3204) gsl_rng_alloc +calls=1 0 +0 312 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 835 +0 4 +cob=(9) +cfi=(58) +cfn=(3206) gsl_rng_set +calls=1 0 +0 171 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 803 +0 20 +cfn=(2888) +calls=1 0 +0 410 +0 15 +cfn=(2888) +calls=5 0 +0 1200 +0 504 +cob=(9) +cfi=(58) +cfn=(3226) gsl_ran_flat +calls=8 0 +0 392 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 803 +0 64 +cob=(9) +cfi=(58) +cfn=(3226) +calls=8 0 +0 392 +0 50 +cfn=(2888) +calls=6 0 +0 1610 +0 60 +cob=(9) +cfi=(58) +cfn=(3236) gsl_ran_rayleigh +calls=6 0 +0 2962 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 875 +0 42 +cob=(9) +cfi=(58) +cfn=(3236) +calls=6 0 +0 1552 +0 24 +cob=(9) +cfi=(58) +cfn=(3236) +calls=6 0 +0 1528 +0 30 +cob=(9) +cfi=(58) +cfn=(3226) +calls=6 0 +0 294 +0 54 +cfn=(3246) +calls=6 0 +0 3628 +0 28 +cfn=(3258) +calls=2 0 +0 550 +0 6 +cfn=(3258) +calls=2 0 +0 550 +0 18 +cfn=(3254) +calls=2 0 +0 770 +0 8 +cfn=(3254) +calls=4 0 +0 1540 +0 12 +cfn=(3256) +calls=6 0 +0 1128 +0 12 +cfn=(3256) +calls=6 0 +0 1128 +0 27 +cob=(9) +cfi=(58) +cfn=(3264) gsl_rng_free +calls=1 0 +0 165 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 827 +0 24 +cfn=(3248) +calls=4 0 +0 14471 +0 4 + +fn=(3338) +0 2576 +cfn=(3340) +calls=322 0 +0 754124 +0 966 +cob=(7) +cfi=(53) +cfn=(2786) +calls=322 0 +0 200637 +0 966 +cob=(7) +cfi=(53) +cfn=(1534) +calls=322 0 +0 78565 +0 644 +cob=(7) +cfi=(53) +cfn=(1550) +calls=322 0 +0 75784 +0 1932 + +fn=(3462) +0 98 +cob=(7) +cfi=(53) +cfn=(1468) +calls=6 0 +0 90 +0 468 +cob=(7) +cfi=(53) +cfn=(1468) +calls=234 0 +0 3510 +0 790 +cob=(7) +cfi=(53) +cfn=(1174) +calls=10 0 +0 876 + +fn=(3466) +0 160 + +fn=(3494) +0 80 +cob=(4) +cfi=(100) +cfn=(1476) +calls=2 25 +0 72 +0 32 +cob=(4) +cfi=(100) +cfn=(1476) +calls=8 25 +0 280 +0 36 +cfn=(3496) +calls=8 0 +0 11586 +0 1400 +cfn=(3476) +calls=72 0 +0 14112 +0 2352 +cfn=(3500) +calls=72 0 +0 18786 +0 672 +cob=(7) +cfi=(53) +cfn=(880) +calls=24 0 +0 2895 +0 1536 +cfn=(3476) +calls=24 0 +0 4704 +0 288 +cob=(7) +cfi=(53) +cfn=(1174) +calls=24 0 +0 1944 +0 76 +cfn=(3504) +calls=5 0 +0 10099 +0 121 +cfn=(3476) +calls=8 0 +0 1568 +0 64 +cfn=(3508) +calls=8 0 +0 6384 +0 20 +cfn=(3502) +calls=3 0 +0 18270 +0 19 + +fn=(3506) +0 81 +cfn=(3504) +calls=3 0 +0 7826 +0 59 + +fn=(3518) +0 1588 +cfn=(2642) +calls=10 0 +0 1640 +0 386 +cob=(7) +cfi=(53) +cfn=(2852) +calls=8 0 +0 80 +0 32 +cob=(7) +cfi=(53) +cfn=(3540) +calls=8 0 +0 408 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 2171 +0 24 +cob=(7) +cfi=(53) +cfn=(1468) +calls=8 0 +0 120 +0 16 +cob=(7) +cfi=(53) +cfn=(1468) +calls=8 0 +0 120 +0 16 +cob=(7) +cfi=(53) +cfn=(1174) +calls=8 0 +0 648 +0 210 + +fn=(3552) +0 26 +cfn=(3554) +calls=2 0 +0 1601047 +0 6 +cfn=(2402) +calls=2 0 +0 7538 +0 8 +cfn=(3462) +calls=2 0 +0 4940 +0 2 +cfn=(3560) +calls=2 0 +0 1994 +0 30 +cfn=(3566) +calls=2 0 +0 4582 +0 36 +cfn=(3566) +calls=6 0 +0 12648 +0 76 +cob=(7) +cfi=(53) +cfn=(1632) +calls=2 0 +0 3727 +0 14 +cob=(7) +cfi=(53) +cfn=(1712) +calls=2 0 +0 16 +0 10 +cob=(7) +cfi=(53) +cfn=(1506) +calls=2 0 +0 1790 +0 18 +cob=(7) +cfi=(53) +cfn=(1506) +calls=2 0 +0 354 +0 1160 +cob=(7) +cfi=(53) +cfn=(1506) +calls=232 0 +0 41224 +0 702 +cob=(7) +cfi=(53) +cfn=(1500) +calls=234 0 +0 46332 +0 490 +cob=(7) +cfi=(53) +cfn=(3162) +calls=2 0 +0 106 +0 4 +cob=(7) +cfi=(53) +cfn=(3186) +calls=2 0 +0 4579 +0 16 + +fn=(3558) +0 1564 +cob=(7) +cfi=(53) +cfn=(1258) +calls=206 0 +0 4120 +0 1030 +cob=(7) +cfi=(53) +cfn=(1468) +calls=206 0 +0 3090 +0 20 +cob=(7) +cfi=(53) +cfn=(1468) +calls=10 0 +0 150 +0 432 +cob=(7) +cfi=(53) +cfn=(1468) +calls=216 0 +0 21600 +0 432 +cob=(7) +cfi=(53) +cfn=(1468) +calls=216 0 +0 21600 +0 432 +cob=(7) +cfi=(53) +cfn=(1468) +calls=216 0 +0 21600 +0 1440 +cfn=(3338) +calls=144 0 +0 498367 +0 216 +cfn=(3338) +calls=72 0 +0 248961 +0 864 +cfn=(3436) +calls=216 0 +0 76254 +0 864 +cfn=(1396) +calls=216 0 +0 63077 +0 864 +cfn=(3436) +calls=216 0 +0 90719 +0 1100 +cfn=(2390) +calls=10 0 +0 17713 +0 586 + +fn=(3670) +0 136 + +fn=(3734) +0 711 +cfn=(3736) +calls=237 0 +0 3575697 +0 711 + +fn=(3850) +0 67183188336 +cfn=(3744) +calls=678618064 0 +0 42074319968 +0 1357236128 + +fn=(3914) +0 17078940 + +fn=(3922) +0 791250 +cfn=(3268) +calls=26375 0 +0 474750 +0 764875 +cob=(7) +cfi=(53) +cfn=(934) +calls=26375 0 +0 6171766 +0 79125 +cfn=(3348) +calls=26375 0 +0 8387378 +0 105500 +cob=(7) +cfi=(53) +cfn=(1468) +calls=26375 0 +0 395625 +0 79125 +cfn=(2642) +calls=26375 0 +0 290125 +0 158250 +cob=(7) +cfi=(53) +cfn=(2846) +calls=26375 0 +0 474750 +0 290125 +cfn=(2390) +calls=26375 0 +0 6153199 +0 79125 +cfn=(3624) +calls=26375 0 +0 5960750 +0 211000 + +ob=(3) +fl=(39) +fn=(184) +0 6 + +fn=(178) +0 6 + +fn=(190) +0 11 + +ob=(9) +fl=(58) +fn=(2506) +0 48 +cob=(4) +cfi=(71) +cfn=(886) +calls=6 3615 +0 586 +0 30 +cob=(4) +cfi=(71) +cfn=(886) +calls=6 3615 +0 1103 +0 54 + +fn=(2952) gsl_matrix_submatrix +0 8052 + +fn=(2924) +0 20069 +cfn=(2926) gsl_matrix_row +calls=549 0 +0 9333 +0 2196 +cfn=(2926) +calls=549 0 +0 9333 +0 2928 +cfn=(2928) gsl_vector_subvector +calls=366 0 +0 6954 +0 1830 +cfn=(2928) +calls=366 0 +0 6954 +0 1464 +cfn=(2930) gsl_blas_ddot +calls=366 0 +0 18878 +0 1098 +cfn=(2926) +calls=183 0 +0 3111 +0 915 +cfn=(2928) +calls=183 0 +0 3477 +0 366 +cfn=(2938) gsl_blas_dnrm2 +calls=183 0 +0 14762 +0 14335 + +fn=(2926) +0 21777 + +fn=(2956) gsl_blas_dtrmv +0 5124 +cob=(8) +cfi=(57) +cfn=(2962) +calls=244 0 +0 37210 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 898 +0 488 + +fn=(3228) 0x000000000011f6b0 +0 1360 + +fn=(2912) +0 2379 +cob=(8) +cfi=(57) +cfn=(2918) +calls=61 0 +0 1269593 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 838 +0 305 + +fn=(2930) +0 15372 +cob=(8) +cfi=(57) +cfn=(2936) +calls=1281 0 +0 47580 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 822 +0 5124 + +fn=(3204) +0 6 +cob=(4) +cfi=(71) +cfn=(886) +calls=1 3615 +0 95 +0 5 +cob=(4) +cfi=(71) +cfn=(886) +calls=1 3615 +0 180 +0 8 +cfn=(3206) +calls=1 0 +0 13 +0 5 + +fn=(2522) +0 36 +cob=(4) +cfi=(71) +cfn=(1180) +calls=6 3692 +0 574 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1642 +0 18 +cob=(4) +cfi=(71) +cfn=(1180) +calls=6 3692 +0 468 + +fn=(428) +0 6 + +fn=(1916) +0 8980464 +cob=(4) +cfi=(71) +cfn=(886) +calls=1122558 3615 +0 106894723 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1742 +0 5612790 +cob=(4) +cfi=(71) +cfn=(886) +calls=1122558 3615 +0 301348579 +0 10103022 + +fn=(2954) gsl_matrix_subcolumn +0 40687 + +fn=(422) +0 6 + +fn=(434) +0 11 + +fn=(2654) +0 6733764 +cob=(4) +cfi=(71) +cfn=(1180) +calls=1122294 3692 +0 135873263 +0 3366882 +cob=(4) +cfi=(71) +cfn=(1180) +calls=1122294 3692 +0 87538932 + +fn=(2938) +0 732 +cob=(8) +cfi=(57) +cfn=(2944) +calls=183 0 +0 13176 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 854 + +fn=(2950) +0 8174 +cfn=(2952) +calls=244 0 +0 8052 +0 4880 +cfn=(2954) +calls=244 0 +0 5612 +0 3904 +cfn=(2956) +calls=244 0 +0 43720 +0 976 +cfn=(2964) gsl_blas_dscal +calls=244 0 +0 8288 +0 2013 +cfn=(2954) +calls=61 0 +0 1403 +0 1830 +cfn=(2954) +calls=183 0 +0 4209 +0 2196 +cfn=(2954) +calls=366 0 +0 8418 +0 10370 +cfn=(2954) +calls=610 0 +0 14030 +0 8540 +cfn=(2930) +calls=610 0 +0 31720 +0 6954 +cfn=(2954) +calls=244 0 +0 5612 +0 3416 +cfn=(2930) +calls=244 0 +0 15616 +0 3294 +cfn=(2954) +calls=61 0 +0 1403 +0 854 +cfn=(2930) +calls=61 0 +0 2684 +0 8174 + +fn=(2964) +0 976 +cob=(8) +cfi=(57) +cfn=(2970) +calls=244 0 +0 6466 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 846 + +fn=(3206) +0 184 + +fn=(3226) +0 132 +cfn=(3228) +calls=22 0 +0 748 +0 198 + +fn=(3264) +0 6 +cob=(4) +cfi=(71) +cfn=(1180) +calls=1 3692 +0 78 +0 3 +cob=(4) +cfi=(71) +cfn=(1180) +calls=1 3692 +0 78 + +fn=(2622) +0 24 + +fn=(2976) +0 1891 +cob=(8) +cfi=(57) +cfn=(2982) +calls=61 0 +0 1614365 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 838 +0 671 + +fn=(2628) +0 6 +cob=(4) +cfi=(71) +cfn=(1180) +calls=1 3692 +0 78 +0 3 +cob=(4) +cfi=(71) +cfn=(1180) +calls=1 3692 +0 78 + +fn=(3236) +0 144 +cfn=(3228) +calls=18 0 +0 612 +0 108 +cob=(6) +cfi=(136) /build/buildd/eglibc-2.11.1/math/w_log.c +cfn=(3242) log +calls=18 31 +0 3574 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 1424 +0 180 + +fn=(2616) +0 8 +cob=(4) +cfi=(71) +cfn=(886) +calls=1 3615 +0 95 +0 5 +cob=(4) +cfi=(71) +cfn=(886) +calls=1 3615 +0 95 +0 9 + +fn=(2928) +0 17385 + +fn=(2990) +0 1342 +cob=(8) +cfi=(57) +cfn=(2996) +calls=61 0 +0 256444 +cob=(1) +cfi=(54) +cfn=(356) +calls=1 30 +0 846 +0 488 + +ob=(6) +fl=(136) +fn=(3242) +31 36 ++5 36 +cfi=(137) /build/buildd/eglibc-2.11.1/math/../sysdeps/ieee754/dbl-64/e_log.c +cfn=(3244) __ieee754_log +calls=18 +14 +* 2908 ++1 18 +-1 18 ++1 108 +cfi=(128) /build/buildd/eglibc-2.11.1/math/../sysdeps/ieee754/dbl-64/s_isnan.c +cfn=(3014) isnan +calls=18 -4 +* 270 +* 126 ++6 54 + +fl=(129) +fn=(3038) +44 18 ++1 3 +-1 6 ++1 9 ++1 6 ++1 6 ++6 9 ++1 12 ++26 3 + +fl=(124) /build/buildd/eglibc-2.11.1/math/../sysdeps/ieee754/dbl-64/e_exp.c +fn=(2904) __ieee754_exp +57 12200 ++1 12200 ++1 12200 ++2 18300 ++2 6000 ++19 6000 +-19 12000 ++6 6000 +-1 6000 +-5 6000 ++1 6000 ++2 6000 ++5 6000 +-5 6000 +-2 12000 ++4 6000 ++3 6000 +-2 12000 ++2 6000 +-2 6000 ++4 6000 ++1 6000 +-1 6000 ++2 6000 ++4 6000 ++1 6000 +-6 6000 ++5 6000 ++1 6000 +-1 6000 ++3 6000 ++1 6000 +-4 6000 ++4 18000 +-9 6000 ++8 24000 +-7 12000 ++8 6000 +-8 18000 ++8 6000 +-8 6000 ++7 6000 ++1 6000 +-1 6000 ++1 24000 ++2 30000 ++1 12000 ++2 36000 ++36 6000 +-1 30000 ++1 6000 ++23 12000 +-55 300 ++55 200 + +fn=(3016) __exp1 +164 540 ++1 360 ++1 360 ++2 540 ++1 180 ++19 180 ++6 180 +-25 360 ++25 180 +-24 180 ++2 180 ++5 180 +-5 180 +-2 360 ++4 180 ++1 180 ++5 180 +-5 180 ++2 360 ++2 180 ++1 180 +-1 180 ++6 180 ++1 180 +-6 180 ++1 180 ++4 180 ++1 180 +-1 180 ++3 180 ++1 180 +-4 180 ++4 360 +-9 180 ++9 180 +-1 180 ++1 180 +-8 1080 ++7 720 ++1 180 +-1 180 ++1 900 ++2 720 ++1 180 +-1 180 ++3 180 +-2 180 ++2 1260 +-11 900 ++11 360 ++58 360 + +fl=(123) +fn=(2902) +38 12200 ++5 12200 +cfi=(124) +cfn=(2904) +calls=6100 +14 +* 517400 ++1 6100 +-1 6100 ++1 18300 ++1 18300 +cfi=(125) /build/buildd/eglibc-2.11.1/math/../sysdeps/ieee754/dbl-64/s_finite.c +cfn=(2906) finite +calls=6100 -12 +* 42700 +* 24400 ++1 12200 ++2 12200 ++5 18300 + +fl=(137) +fn=(3244) +50 144 ++19 72 ++2 36 ++10 36 ++1 18 +-1 18 ++1 90 +-5 54 +203 144 +77 36 ++56 18 ++1 18 +-1 36 ++1 36 +-1 18 ++1 18 +-1 18 ++1 18 ++1 92 ++4 10 +-3 10 ++12 10 +-9 10 ++15 10 +-15 20 ++1 20 ++3 10 +-3 20 ++14 10 +-11 10 ++4 10 +-4 10 ++4 10 ++8 10 +-12 10 ++12 10 +-12 20 ++4 10 +-4 20 ++1 20 ++3 10 +-3 20 ++3 10 ++1 10 +-1 10 ++1 20 ++7 30 ++1 20 +-1 10 ++1 20 ++1 20 +-1 20 +-9 30 ++10 20 +-9 30 ++9 10 +-18 8 +-3 8 ++12 8 +-9 8 ++15 8 +-15 16 ++1 16 ++3 8 +-3 16 ++14 8 +-11 8 ++4 8 +-4 8 ++4 8 ++8 8 +-12 8 ++12 8 +-12 16 ++4 8 +-4 16 ++1 16 ++3 8 +-3 16 ++3 8 ++1 8 +-1 8 ++1 16 ++7 24 ++1 16 +-1 8 ++1 16 ++1 16 +-1 16 +-9 24 ++10 16 +-9 24 ++9 46 ++1 285 ++1 85 ++4 34 +-4 17 ++1 34 +-1 17 ++1 85 ++3 102 +-4 5 ++4 2 +-4 1 ++1 2 +-1 1 ++1 5 ++3 24 +-81 54 ++75 185 ++1 4 + +fl=(128) +fn=(3014) +33 1854 ++2 618 +-2 618 ++2 5562 ++3 618 + +fl=(151) +fn=(3704) +90 300 ++11 120 ++1 120 ++1 120 ++1 120 ++3 120 ++1 3 ++2 3 ++1 3 +-3 3 ++2 36 ++3 3 +-2 3 ++2 21 +785 3 +339 354 +116 114 ++1 27 ++6 9 +-5 9 +-1 9 ++3 18 +-3 9 ++4 18 +-4 9 ++1 9 +-1 9 ++5 9 +-4 9 ++5 18 ++1 18 +-5 9 +-1 9 ++6 9 +-5 9 ++1 45 ++1 9 +-1 9 ++1 54 ++6 90 ++3 9 +-3 9 ++1 18 ++2 81 ++4 144 ++2 110 ++1 66 ++5 12 ++1 12 +-1 36 ++1 12 +-1 12 ++1 48 ++2 12 ++3 12 +-2 12 ++7 12 +-8 12 ++1 24 ++5 24 ++2 24 +-7 24 ++5 24 ++2 12 +-7 12 ++7 48 +-7 24 ++7 12 +-7 12 ++7 144 ++3 12 +-3 12 ++1 24 ++2 72 +-11 10 ++3 10 +-2 10 ++7 10 +-8 10 ++1 20 ++5 20 ++2 20 +-7 20 ++5 20 ++2 10 +-7 10 ++7 40 +-7 20 ++7 10 +-7 10 ++7 120 ++3 10 +-3 10 ++1 20 ++2 140 +827 3 +339 1 +-78 1 ++78 5 +160 52 ++1 52 ++3 26 +-3 26 ++3 26 ++2 26 +-5 26 ++1 26 ++1 52 +-1 26 ++3 26 +-1 26 +-2 26 ++4 26 +-2 130 ++3 26 ++1 26 +-1 26 ++1 26 +-1 26 ++1 26 ++1 78 +-1 26 ++1 78 ++2 104 ++3 18 ++1 18 +-1 18 ++1 93 ++1 39 ++2 54 ++2 3 +-2 3 ++1 6 ++1 6 ++1 8 ++1 18 +694 4 +316 6 +138 20 ++1 10 +-1 20 ++1 10 +-1 10 ++1 30 +659 8 ++1 6 ++1 4 ++1 1 ++1 1 +-1 2 ++1 1 +-1 1 ++1 2 ++8 1 ++3 1 ++1 1 ++4 1 +-8 1 ++8 1 +-4 1 ++2 1 ++2 1 ++2 1 +-4 1 ++6 1 +-2 1 +-4 1 ++2 1 ++4 6 +-2 1 ++2 17 ++1 1 +-1 3 ++1 2 +-1 2 ++2 1 +-2 1 ++2 1 ++1 1 +-3 1 +-12 1 ++3 1 ++1 1 ++4 1 +-8 1 ++8 1 +-4 1 ++2 1 ++2 1 ++2 1 +-4 1 ++6 1 +-2 1 +-4 1 ++2 1 ++4 6 +-2 1 ++2 17 ++1 1 +-1 3 ++1 2 +-1 2 ++2 1 +-2 1 ++2 1 ++1 1 +-3 1 ++2 1 ++1 1 ++2 6 +-3 1 ++1 1 ++2 8 +209 16 ++1 20 ++1 4 ++6 4 +-5 4 +-1 4 ++10 4 +-9 4 +-1 4 ++8 4 +-8 4 ++1 4 ++2 4 ++7 4 +-4 4 ++4 4 +-4 4 +-5 4 ++5 4 ++4 12 +-9 8 ++7 4 +-7 4 ++9 4 +-8 4 ++6 4 +-6 4 ++6 8 ++2 4 +-2 4 ++2 4 +-2 8 ++2 8 +-2 4 ++2 40 ++1 4 +-1 4 ++1 4 ++1 8 ++1 8 +-13 4 ++6 4 +-5 4 +-1 4 ++10 4 +-9 4 +-1 4 ++8 4 +-8 4 ++1 4 ++2 4 ++7 4 +-4 4 ++4 4 +-4 4 +-5 4 ++5 4 ++4 12 +-9 8 ++7 4 +-7 4 ++9 4 +-8 4 ++6 4 +-6 4 ++6 8 ++2 4 +-2 4 ++2 4 +-2 8 ++2 8 +-2 4 ++2 40 ++1 4 +-1 4 ++1 4 ++1 8 ++1 16 ++1 91 +667 1 ++1 1 +-1 2 ++1 1 +-1 1 ++1 3 ++1 2 +224 12 +-39 72 ++4 9 ++6 9 +-3 9 +-3 9 ++10 9 +-10 9 ++1 9 +-1 9 ++5 9 ++1 18 ++4 9 +-9 9 ++2 9 ++7 45 +-8 9 ++1 9 ++7 9 +-8 9 ++1 18 ++7 9 +-7 9 ++7 9 +-7 18 ++7 18 +-7 9 ++7 18 +-7 9 ++7 63 ++1 9 +-1 27 ++1 9 ++1 18 ++1 18 +-13 6 ++6 6 +-3 6 +-3 6 ++10 6 +-10 6 ++1 6 +-1 6 ++5 6 ++1 12 ++4 6 +-9 6 ++2 6 ++7 30 +-8 6 ++1 6 ++7 6 +-8 6 ++1 12 ++7 6 +-7 6 ++7 6 +-7 12 ++7 12 +-7 6 ++7 12 +-7 6 ++7 42 ++1 6 +-1 18 ++1 6 ++1 12 ++1 26 ++1 117 +800 2 ++1 1 +-1 2 ++4 1 ++3 1 ++1 1 ++5 1 +-9 1 ++9 1 +-5 1 ++2 1 ++3 1 ++2 1 +-5 1 ++7 1 +-2 1 +-5 1 ++3 1 ++4 6 +-2 1 ++2 17 ++1 1 +-1 5 ++1 2 +-1 1 ++2 1 ++1 1 +-3 1 ++2 2 ++1 1 ++1 2 ++1 8 ++1 4 ++4 2 +202 24 +-14 36 +-7 6 + +fn=(3694) +348 240 ++5 120 ++2 180 ++2 120 ++2 120 ++1 36 ++1 12 ++8 12 +-8 12 ++3 12 +-3 12 ++3 12 ++7 36 +-10 12 ++1 12 +-1 12 ++5 12 +-4 12 ++9 12 +-2 12 ++2 12 +-2 24 ++2 24 +-8 12 ++1 12 ++7 12 +-8 12 ++1 60 ++7 12 +-7 12 ++7 144 ++1 12 +-1 12 ++1 12 ++2 84 ++4 96 ++1 132 ++1 66 ++1 22 +-1 22 ++1 22 ++1 44 +-1 22 ++2 47 ++1 39 ++2 3 +-2 3 ++1 3 +-1 3 ++1 3 ++1 6 ++1 8 ++47 16 +587 240 +360 24 ++53 52 ++1 52 ++3 26 +-3 26 ++3 26 +-3 26 ++1 26 ++1 26 ++1 26 +-1 26 +-1 26 ++3 26 +-1 26 +-2 26 ++2 26 ++2 26 +-2 78 ++3 52 ++1 26 +-1 26 ++1 26 ++1 78 +-1 26 ++1 26 ++2 104 ++35 106 ++1 14 ++6 14 +-5 14 +-1 14 ++8 14 ++2 28 +-9 14 +-1 28 ++1 14 ++2 14 ++7 14 +-4 14 ++4 14 +-4 14 +-5 14 ++5 14 ++4 42 +-9 28 ++7 14 +-7 14 ++9 14 +-8 14 ++6 14 +-6 14 ++6 70 ++2 14 +-2 14 ++2 168 ++1 14 +-1 14 ++1 14 ++1 28 ++1 28 +-13 4 ++6 4 +-5 4 +-1 4 ++8 4 ++2 8 +-9 4 +-1 8 ++1 4 ++2 4 ++7 4 +-4 4 ++4 4 +-4 4 +-5 4 ++5 4 ++4 12 +-9 8 ++7 4 +-7 4 ++9 4 +-8 4 ++6 4 +-6 4 ++6 20 ++2 4 +-2 4 ++2 48 ++1 4 +-1 4 ++1 4 ++1 8 ++1 26 ++1 72 +1125 42 +391 57 ++1 50 ++1 10 ++6 10 +-6 30 ++1 10 +-1 10 ++3 10 ++2 10 +-4 10 ++5 20 ++4 20 +-8 10 ++1 10 ++7 20 +-8 10 ++8 30 +-7 40 ++7 20 +-7 10 ++7 10 +-7 10 ++7 80 ++1 10 +-1 30 ++2 10 +-1 10 ++1 20 ++1 20 +-13 9 ++6 9 +-6 27 ++1 9 +-1 9 ++3 9 ++2 9 +-4 9 ++5 18 ++4 18 +-8 9 ++1 9 ++7 18 +-8 9 ++8 27 +-7 36 ++7 18 +-7 9 ++7 9 +-7 9 ++7 72 ++1 9 +-1 27 ++2 9 +-1 9 ++1 18 ++1 38 ++47 104 ++75 52 ++21 84 +391 36 +-4 6 ++35 78 +-16 27 ++21 8 ++1 8 +-1 8 ++1 8 ++1 17 ++1 13 ++2 1 +-2 2 ++1 2 ++1 2 ++1 5 ++4 26 ++2 4 ++6 4 +-6 12 ++1 4 +-1 4 ++3 4 ++2 4 +-4 4 ++5 8 ++4 8 +-8 4 ++1 4 ++7 8 +-8 4 ++8 12 +-7 16 ++7 8 +-7 4 ++7 4 +-7 4 ++7 32 ++1 4 +-1 12 ++2 4 +-1 4 ++1 8 ++1 8 +-13 3 ++6 3 +-6 9 ++1 3 +-1 3 ++3 3 ++2 3 +-4 3 ++5 6 ++4 6 +-8 3 ++1 3 ++7 6 +-8 3 ++8 9 +-7 12 ++7 6 +-7 3 ++7 3 +-7 3 ++7 24 ++1 3 +-1 9 ++2 3 +-1 3 ++1 6 ++1 15 ++21 27 +-21 12 +-14 18 + +fl=(126) +fn=(3010) +29 900 ++5 300 +cfi=(127) /build/buildd/eglibc-2.11.1/math/../sysdeps/ieee754/dbl-64/e_pow.c +cfn=(3012) __ieee754_pow +calls=300 +24 +* 55080 ++1 300 +-1 300 ++1 1200 +cfi=(128) +cfn=(3014) +calls=300 -2 +* 4500 +* 600 ++1 600 +cfi=(128) +cfn=(3014) +calls=300 -3 +* 4500 +* 600 ++29 900 +-23 1200 ++11 900 +cfi=(125) +cfn=(2906) +calls=300 -20 +* 2100 +* 900 ++8 900 + +fl=(122) +fn=(2896) +34 6100 ++1 6100 ++1 6100 ++1 6100 ++1 6100 ++1 6100 ++1 6100 ++1 6100 ++3 6100 + +fl=(70) +fn=(868) +39 1 ++1 4 ++1 2 ++1 2 ++6 1 ++1 1 +-1 1 ++1 2 ++12 1 + +fl=(125) +fn=(2906) +33 38400 ++2 6400 + +fl=(52) +fn=(252) +0 6 + +fn=(246) +0 6 + +fn=(258) +0 11 + +fl=(152) +fn=(3716) +44 12515508 ++1 2085918 +-1 4171836 ++1 6257754 ++1 4171836 ++1 4171836 ++7 4278831 ++1 2852554 ++1 5705108 ++1 2852554 ++1 5705108 ++21 8557662 ++2 1426277 +-2 3957846 ++2 659641 +-33 2638564 ++1 2638564 ++1 1063955 ++5 32 ++2 48895 + +fl=(127) +fn=(3012) +58 600 ++17 300 +-17 2100 ++14 300 ++1 300 ++1 300 ++63 300 +-71 300 ++2 300 +-1 300 ++1 600 ++10 540 ++3 540 +-3 360 +-9 900 ++2 900 ++1 1200 ++1 900 ++1 720 ++1 1140 ++80 1800 ++48 360 +78 180 +203 180 ++4 180 +-3 360 ++3 360 ++3 720 ++5 1260 ++1 180 ++1 540 ++1 360 ++37 180 ++1 180 +-2 180 ++1 180 ++1 360 ++1 180 +-2 180 ++5 180 +-3 180 +-1 180 +-1 180 ++2 180 ++3 180 ++2 180 +-5 180 ++1 180 ++2 180 ++2 180 +-2 180 ++2 180 +-4 180 ++2 180 ++1 180 ++1 180 +-1 180 ++1 3240 ++1 180 +-1 180 ++1 180 ++2 540 +83 180 ++10 360 +-10 180 ++3 180 +-1 180 +-2 180 ++3 180 +-2 540 ++3 360 +-2 180 ++2 180 ++2 180 ++1 180 +-1 180 ++1 720 ++1 360 ++2 360 ++1 2520 +cfi=(124) +cfn=(3016) +calls=180 +70 +* 15840 ++1 1800 +-22 240 +211 1620 + +totals: 7351907657194 diff --git a/python/fibre/__init__.py b/python/fibre/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/python/fibre/base/__init__.py b/python/fibre/base/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/python/fibre/base/object.py b/python/fibre/base/object.py new file mode 100644 index 0000000..cfde8e5 --- /dev/null +++ b/python/fibre/base/object.py @@ -0,0 +1,34 @@ + + + +class Object(object): + + def __init__(self, size=0, value=0.0): + + self.vector = list() + self.prps = dict() + self.extend_prps = dict() + + for i in range(size): + self.vector.append((value,value,value)) + + def size(self): + + return len(self.vector) + + def num_props(self): + + return len(self.prps) + + + def __str__(self): + + string = '' + + for key_val in sorted(self.prps.items()): + string = string + key_val[0] + ': ' + str(key_val[1]) + '\n' + + for triple in self.vector: + string = string + '[ %s, %s, %s ]\n' % (triple[0], triple[1], triple[2]) + + return string \ No newline at end of file diff --git a/python/fibre/base/set.py b/python/fibre/base/set.py new file mode 100644 index 0000000..ffaccce --- /dev/null +++ b/python/fibre/base/set.py @@ -0,0 +1,539 @@ +from copy import copy, deepcopy +from object import Object + +class CantBeFrozenException(Exception): + + def __init__(self, value): + self.value = value + + def __str__(self): + return repr(self.value) + + +class ElemSizeException(Exception): + + def __init__(self, value): + self.value = value + + def __str__(self): + return repr(self.value) + + +class UnmatchedPropertiesException(Exception): + + def __init__(self, value): + self.value = value + + def __str__(self): + return repr(self.value) + + +class Set(object): + + def __init__(self): + + self.elems = list() + + self.prps = dict() + self.extend_prps = dict() + + self.elem_prp_keys = list() + self.elem_extend_prps = dict() + + self.elem_degree = 0 + + + def first_set(self, num_elems, elem_degree): + + self.elems = list() + + self.prps = dict() + self.extend_prps = dict() + + self.elem_prp_keys = list() + self.elem_extend_prps = dict() + + for elem_i in range(num_elems): + + self.elems.append(Object(elem_degree)) + + for elem_elem_i in range(elem_degree): + base = elem_i * 100 + elem_elem_i * 10 + self.elems[elem_i].vector[elem_elem_i] = (base + 1, base + 2, base + 3) + + for prop_i in range(5): + self.elems[elem_i].prps['ELEM_PROP_' + str(prop_i+1)] = elem_i * 100.0 + (prop_i+1) * .1 + 0.001; + + for prop_i in range(5): + self.elem_prp_keys.append('ELEM_PROP_' + str(prop_i+1)) + self.prps['PROP_' + str(prop_i+1)] = (prop_i+1) * 1.1 + 0.001 + + + for i in range(1,6): + self.add_extend_elem_prop("EXT_ELEM_PROP_" + str(i),"NaN") + for j in range(len(self.elems)): + self.set_extend_elem_prop("EXT_ELEM_PROP_" + str(i), "Ooogle " + str(i) + "-" + str(j), j) + + + self.elem_degree = elem_degree + + + def second_set(self, num_elems, elem_degree): + + self.elems = list() + + self.prps = dict() + self.extend_prps = dict() + + self.elem_prp_keys = list() + self.elem_extend_prps = dict() + + for elem_i in range(num_elems): + + self.elems.append(Object(elem_degree)) + + for elem_elem_i in range(elem_degree): + base = elem_i * 100 + elem_elem_i * 10 + self.elems[elem_i].vector[elem_elem_i] = (-(base + 1), -(base + 2), -(base + 3)) + + for prop_i in range(5): + self.elems[elem_i].prps['ELEM_PROP_' + str(prop_i+1)] = -(elem_i * 100.0 + (prop_i+1) * .1 + 0.001); + + for prop_i in range(5): + self.elem_prp_keys.append('ELEM_PROP_' + str(prop_i+1)) + self.prps['PROP_' + str(prop_i+1)] = -((prop_i+1) * 1.1 + 0.001) + + + for i in range(6,11): + self.add_extend_elem_prop("EXT_ELEM_PROP_" + str(i),"NaN") + for j in range(len(self.elems)): + self.set_extend_elem_prop("EXT_ELEM_PROP_" + str(i), "Boogle " + str(i) + "-" + str(j), j) + + + self.elem_degree = elem_degree + + + def __str__(self): + + string = '' + + if self.extend_prps: + string = string + '(' + for key_val in sorted(self.extend_prps.items()): + string = string + key_val[0] + ': ' + str(key_val[1]) + ', ' + if self.extend_prps: + string = string + ')\n' + + string = string + '\n' + + for (key,val) in sorted(self.prps.items()): + string = string + key + ': ' + str(val) + '\n' + + elem_i = 0 + + for elem in self.elems: + string = string + '\n--------------------\n' + string = string + ' %d\n' % elem_i + string = string + '--------------------\n' + + if elem.extend_prps: + string = string + '{' + count = 0 + for (key,val) in sorted(elem.extend_prps.items()): + string = string + key + ': ' + str(val) + count = count + 1 + if count != len(elem.extend_prps): + string = string + ', ' + if elem.extend_prps: + string = string + '}\n' + + string = string + '\n' + + string = string + str(elem) + + string = string + '\n' + + elem_i = elem_i + 1 + + return string + + #===================================================================================================================== + # Set functions + #===================================================================================================================== + + + def elem_resize(self, new_size, value): + + for elem_i in range(self.size()): + + elem_degree = len(self.elems[elem_i].vector) + + for i in range(elem_degree,new_size): + self.elems[elem_i].vector.append((value,value,value)) + + for i in range(elem_degree-1,new_size-1,-1): + self.elems[elem_i].vector.pop(i) + + self.elem_degree = new_size + + + def push_back(self, elem, ext_prop_row=dict()): + + # Make a copy of the element and reset its extended properties + append_elem = deepcopy(elem) + append_elem.extend_prps = dict() + + # Loop through the keys present in the set + for key in self.elem_extend_prps.keys(): + if ext_prop_row: + # Use the properties explicitly provided + if ext_prop_row.has_key(key): + append_elem.extend_prps[key] = ext_prop_row[key] + else: + append_elem.extend_prps[key] = self.elem_extend_prps[key] + else: + # Copy across only the extended properties present in the set, and populate the missing extended properties with defaults. + if elem.extend_prps.has_key(key): + append_elem.extend_prps[key] = elem.extend_prps[key] + else: + append_elem.extend_prps[key] = self.elem_extend_prps[key] + + self.elems.append(append_elem) + + + def erase(self, index): + + self.elems.pop(index) + + + def insert(self, elem, index): + + # Make a copy of the element and reset its extended properties + insert_elem = deepcopy(elem) + insert_elem.extend_prps = dict() + + # Loop through the keys present in the set + for key in self.elem_extend_prps.keys(): + # Copy across only the extended properties present in the set, and populate the missing extended properties with defaults. + if elem.extend_prps.has_key(key): + insert_elem.extend_prps[key] = elem.extend_prps[key] + else: + insert_elem.extend_prps[key] = self.elem_extend_prps[key] + + self.elems.insert(index, insert_elem) + + def append(self, set): + + if self.elem_prp_keys != set.elem_prp_keys or self.prps != set.prps: + raise UnmatchedPropertiesException ('properties do not match') + + if self.elem_degree and self.elem_degree != set.elem_degree: + raise ElemSizeException ('Element sizes do not match') + + for elem in set.elems: + self.push_back(elem) + + + def get_extend_elem_prop_header(self): + + return sorted(self.elem_extend_prps.keys()) + + + def get_elem_prop_header(self): + + return sorted(self.elem_prp_keys) + + + def add_extend_elem_prop(self, key, default_value): + + if not self.elem_extend_prps.has_key(key): + for elem in self.elems: + elem.extend_prps[key] = default_value + + self.elem_extend_prps[key] = default_value + + def add_extend_elem_props(self,set): + + for (key,val) in set.elem_extend_prps.items(): + self.add_extend_elem_prop(key,val) + + + def clear_extend_elem_props(self): + + self.elem_extend_prps = dict() + + for elem in self.elems: + + elem.extend_prps = dict() + + + def remove_extend_elem_prop(self, key): + + self.elem_extend_prps.pop(key,None) + + for elem in self.elems: + + elem.extend_prps.pop(key,None) + + ####################### + def set_extend_elem_prop(self,key,value,index): + + self.elems[index].extend_prps[key] = value + + + def get_extend_elem_prop(self,key,index): + + return self.elems[index].extend_prps[key] + + + def has_extend_elem_prop(self,key): + + return self.elem_extend_prps.keys().count(key) + + + def get_extend_elem_prop_row(self,index): + + return self.elems[index].extend_prps + + + def set_extend_elem_prop_row(self,prop_row,index): + + this_props = self.elems[index].extend_prps + + # Loop through the keys present in the set + for key in self.elem_extend_prps.keys(): + # Copy across only the extended properties present in the set, and populate the missing extended properties with defaults. + if prop_row.has_key(key): + this_props[key] = prop_row[key] + else: + this_props[key] = self.elem_extend_prps[key] + + + def copy_extend_elem_prop_row(self,set,their_index,this_index): + + self.set_extend_elem_prop_row(set.get_extend_elem_prop_row(their_index),this_index) + + + def copy_extend_elem_props(self,set): + + self.elem_extend_prps = copy(set.elem_extend_prps) + + for (this_elem,their_elem) in zip(self.elems,set.elems): + this_elem.extend_prps = copy(their_elem.extend_prps) + + + def append_extend_elem_props(self,set): + + for (key,val) in set.elem_extend_prps.items(): +# if key not in self.elem_extend_prps: + self.elem_extend_prps[key] = val + for (this_elem,their_elem) in zip(self.elems,set.elems): + this_elem.extend_prps[key] = their_elem.extend_prps[key] + + + def add_elem_prop(self,key,value): + + if key not in self.elem_prp_keys: + self.elem_prp_keys.append(key) + + for elem in self.elems: + + elem.prps[key] = value + + + def has_elem_prop(self,key): + + return self.elem_prp_keys.count(key) + + + def remove_elem_prop(self,key,ignore_missing=True): + + try: + self.elem_prp_keys.remove(key) + except ValueError: + if not ignore_missing: + raise Exception ("Could not remove element property '%s' as it was not present" % key) + + for elem in self.elems: + + elem.prps.pop(key,None) + + + def clear_elem_props(self): + + self.elem_prp_keys = list() + + for elem in self.elems: + + elem.prps = dict() + + + def elem_prop_index(self,key): + + keys = sorted(self.elem_prp_keys) + + for i in range(len(keys)): + if keys[i] == key: + return i + + raise Exception ("Key (" + key + ") was not found.") + + + def elem_prop_name(self, index): + + keys = sorted(self.elem_prp_keys) + + return keys[index] + + + def elem_prop_keys(self): + + keys = sorted(self.elem_prp_keys) + + return keys + + + def freeze_elem_degree(self): + + if self.size(): + elem_degree = self.elems[0].size() + + for elem in self.elems: + if elem.size() != elem_degree: + raise CantBeFrozenException ("Elements not all the same size") + + self.elem_degree = elem_degree + + + def free_elem_degree(self): + + self.elem_degree = 0 + + + + def resize(self, new_size, fill_value, new_elem_degree=0): + + if self.elem_degree: + if new_elem_degree: + raise Exception ("'new_elem_degree' parameter can only be supplied when element size is variable."); + elem_degree = self.elem_degree + else: + elem_degree = new_elem_degree + + old_size = self.size() + + for i in range(old_size,new_size): + object = Object(elem_degree,fill_value) + for key in self.elem_prp_keys: + object.prps[key] = fill_value + + for (key,val) in self.elem_extend_prps.items(): + object.extend_prps[key] = val + + self.elems.append(object) + + for i in range(old_size-1,new_size-1,-1): + self.elems.pop(i) + + + def clear(self): + + self.elems = list() + self.extend_prps = dict() + self.elem_extend_prps = dict() + + + def size(self): + + return len(self.elems) + + + def num_props(self): + + return len(self.prps) + + + def num_elem_props(self): + + return len(self.elem_prp_keys) + + + def num_extend_elem_props(self): + + return len(self.elem_extend_prps) + + + def vsize(self): + + return self.bsize() + self.num_props() + + + def bsize(self): + + base_size = 0 + + for elem in self.elems: + base_size = base_size + elem.size() * 3 + elem.num_props() + + return base_size + + + def add_prop(self, prop_key,value): + + if self.prps.has_key(prop_key): + raise Exception ("'" + prop_key + "' property already present.") + + self.prps[prop_key] = value + + + def has_prop(self, prop_key): + + return int(self.prps.has_key(prop_key)) + + + def remove_prop(self, prop_key): + + if self.prps.pop(prop_key,-9999) == -9999: + raise Exception ("key + (" + prop_key + ") was not found, use 'ignore_missing' to ignore.") + + + def clear_props(self): + + self.prps.clear() + + + def prop_index(self, prop_key): + + keys = sorted(self.prps.keys()) + + for prop_i in range(len(keys)): + if prop_key == keys[prop_i]: + return prop_i + + raise Exception ("Key '" + str(prop_key) + "' not found.") + + +# def prop(self, index): +# +# keys = sorted(self.prps.keys()) +# +# return self.prps[keys[index]] + + + def prop_name(self, index): + + return sorted(self.prps.keys())[index] + + + def prop_keys(self): + + return sorted(self.prps.keys()) + + + def prop(self, key): + + return self.prps[key] + + + + \ No newline at end of file diff --git a/python/fibre/base/test/__init__.py b/python/fibre/base/test/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/python/fibre/base/test/output/cpp_output.txt b/python/fibre/base/test/output/cpp_output.txt new file mode 100644 index 0000000..b885816 --- /dev/null +++ b/python/fibre/base/test/output/cpp_output.txt @@ -0,0 +1,4273 @@ + + +------------------------------------- + INITIAL SET +------------------------------------- + +PROP_1: 1.101 +PROP_2: 2.201 +PROP_3: 3.301 +PROP_4: 4.401 +PROP_5: 5.501 + +-------------------- + 0 +-------------------- +{EXT_ELEM_PROP_1: Ooogle 1-0, EXT_ELEM_PROP_2: Ooogle 2-0, EXT_ELEM_PROP_3: Ooogle 3-0, EXT_ELEM_PROP_4: Ooogle 4-0, EXT_ELEM_PROP_5: Ooogle 5-0} + +ELEM_PROP_1: 0.101 +ELEM_PROP_2: 0.201 +ELEM_PROP_3: 0.301 +ELEM_PROP_4: 0.401 +ELEM_PROP_5: 0.501 +[ 1, 2, 3 ] +[ 11, 12, 13 ] +[ 21, 22, 23 ] +[ 31, 32, 33 ] +[ 41, 42, 43 ] + + +-------------------- + 1 +-------------------- +{EXT_ELEM_PROP_1: Ooogle 1-1, EXT_ELEM_PROP_2: Ooogle 2-1, EXT_ELEM_PROP_3: Ooogle 3-1, EXT_ELEM_PROP_4: Ooogle 4-1, EXT_ELEM_PROP_5: Ooogle 5-1} + +ELEM_PROP_1: 100.101 +ELEM_PROP_2: 100.201 +ELEM_PROP_3: 100.301 +ELEM_PROP_4: 100.401 +ELEM_PROP_5: 100.501 +[ 101, 102, 103 ] +[ 111, 112, 113 ] +[ 121, 122, 123 ] +[ 131, 132, 133 ] +[ 141, 142, 143 ] + + +-------------------- + 2 +-------------------- +{EXT_ELEM_PROP_1: Ooogle 1-2, EXT_ELEM_PROP_2: Ooogle 2-2, EXT_ELEM_PROP_3: Ooogle 3-2, EXT_ELEM_PROP_4: Ooogle 4-2, EXT_ELEM_PROP_5: Ooogle 5-2} + +ELEM_PROP_1: 200.101 +ELEM_PROP_2: 200.201 +ELEM_PROP_3: 200.301 +ELEM_PROP_4: 200.401 +ELEM_PROP_5: 200.501 +[ 201, 202, 203 ] +[ 211, 212, 213 ] +[ 221, 222, 223 ] +[ 231, 232, 233 ] +[ 241, 242, 243 ] + + +-------------------- + 3 +-------------------- +{EXT_ELEM_PROP_1: Ooogle 1-3, EXT_ELEM_PROP_2: Ooogle 2-3, EXT_ELEM_PROP_3: Ooogle 3-3, EXT_ELEM_PROP_4: Ooogle 4-3, EXT_ELEM_PROP_5: Ooogle 5-3} + +ELEM_PROP_1: 300.101 +ELEM_PROP_2: 300.201 +ELEM_PROP_3: 300.301 +ELEM_PROP_4: 300.401 +ELEM_PROP_5: 300.501 +[ 301, 302, 303 ] +[ 311, 312, 313 ] +[ 321, 322, 323 ] +[ 331, 332, 333 ] +[ 341, 342, 343 ] + + +-------------------- + 4 +-------------------- +{EXT_ELEM_PROP_1: Ooogle 1-4, EXT_ELEM_PROP_2: Ooogle 2-4, EXT_ELEM_PROP_3: Ooogle 3-4, EXT_ELEM_PROP_4: Ooogle 4-4, EXT_ELEM_PROP_5: Ooogle 5-4} + +ELEM_PROP_1: 400.101 +ELEM_PROP_2: 400.201 +ELEM_PROP_3: 400.301 +ELEM_PROP_4: 400.401 +ELEM_PROP_5: 400.501 +[ 401, 402, 403 ] +[ 411, 412, 413 ] +[ 421, 422, 423 ] +[ 431, 432, 433 ] +[ 441, 442, 443 ] + + + + + +------------------------------------- + SECOND SET +------------------------------------- + +PROP_1: -1.101 +PROP_2: -2.201 +PROP_3: -3.301 +PROP_4: -4.401 +PROP_5: -5.501 + +-------------------- + 0 +-------------------- +{EXT_ELEM_PROP_10: Boogle 10-0, EXT_ELEM_PROP_6: Boogle 6-0, EXT_ELEM_PROP_7: Boogle 7-0, EXT_ELEM_PROP_8: Boogle 8-0, EXT_ELEM_PROP_9: Boogle 9-0} + +ELEM_PROP_1: -0.101 +ELEM_PROP_2: -0.201 +ELEM_PROP_3: -0.301 +ELEM_PROP_4: -0.401 +ELEM_PROP_5: -0.501 +[ -1, -2, -3 ] +[ -11, -12, -13 ] +[ -21, -22, -23 ] +[ -31, -32, -33 ] +[ -41, -42, -43 ] + + +-------------------- + 1 +-------------------- +{EXT_ELEM_PROP_10: Boogle 10-1, EXT_ELEM_PROP_6: Boogle 6-1, EXT_ELEM_PROP_7: Boogle 7-1, EXT_ELEM_PROP_8: Boogle 8-1, EXT_ELEM_PROP_9: Boogle 9-1} + +ELEM_PROP_1: -100.101 +ELEM_PROP_2: -100.201 +ELEM_PROP_3: -100.301 +ELEM_PROP_4: -100.401 +ELEM_PROP_5: -100.501 +[ -101, -102, -103 ] +[ -111, -112, -113 ] +[ -121, -122, -123 ] +[ -131, -132, -133 ] +[ -141, -142, -143 ] + + +-------------------- + 2 +-------------------- +{EXT_ELEM_PROP_10: Boogle 10-2, EXT_ELEM_PROP_6: Boogle 6-2, EXT_ELEM_PROP_7: Boogle 7-2, EXT_ELEM_PROP_8: Boogle 8-2, EXT_ELEM_PROP_9: Boogle 9-2} + +ELEM_PROP_1: -200.101 +ELEM_PROP_2: -200.201 +ELEM_PROP_3: -200.301 +ELEM_PROP_4: -200.401 +ELEM_PROP_5: -200.501 +[ -201, -202, -203 ] +[ -211, -212, -213 ] +[ -221, -222, -223 ] +[ -231, -232, -233 ] +[ -241, -242, -243 ] + + +-------------------- + 3 +-------------------- +{EXT_ELEM_PROP_10: Boogle 10-3, EXT_ELEM_PROP_6: Boogle 6-3, EXT_ELEM_PROP_7: Boogle 7-3, EXT_ELEM_PROP_8: Boogle 8-3, EXT_ELEM_PROP_9: Boogle 9-3} + +ELEM_PROP_1: -300.101 +ELEM_PROP_2: -300.201 +ELEM_PROP_3: -300.301 +ELEM_PROP_4: -300.401 +ELEM_PROP_5: -300.501 +[ -301, -302, -303 ] +[ -311, -312, -313 ] +[ -321, -322, -323 ] +[ -331, -332, -333 ] +[ -341, -342, -343 ] + + +-------------------- + 4 +-------------------- +{EXT_ELEM_PROP_10: Boogle 10-4, EXT_ELEM_PROP_6: Boogle 6-4, EXT_ELEM_PROP_7: Boogle 7-4, EXT_ELEM_PROP_8: Boogle 8-4, EXT_ELEM_PROP_9: Boogle 9-4} + +ELEM_PROP_1: -400.101 +ELEM_PROP_2: -400.201 +ELEM_PROP_3: -400.301 +ELEM_PROP_4: -400.401 +ELEM_PROP_5: -400.501 +[ -401, -402, -403 ] +[ -411, -412, -413 ] +[ -421, -422, -423 ] +[ -431, -432, -433 ] +[ -441, -442, -443 ] + + + +set.num_elem_props(): 5 +set.elem_prop_index(ELEM_PROP_4): 3 +set.has_extend_elem_prop(EXT_ELEM_PROP_7): 0 +set.num_props(): 6 + + +------------------------------------- + 5 MODFICATIONS +------------------------------------- + +PROP_1: 1.101 +PROP_2: 2.201 +PROP_4: 4.401 +PROP_5: 5.501 +PROP_6: 984 + +-------------------- + 0 +-------------------- +{EXT_ELEM_PROP_1: Ooogle 1-0, EXT_ELEM_PROP_2: Ooogle 2-0, EXT_ELEM_PROP_3: Ooogle 3-0, EXT_ELEM_PROP_4: Ooogle 4-0, EXT_ELEM_PROP_5: Ooogle 5-0} + +ELEM_PROP_1: 0.101 +ELEM_PROP_2: 669 +ELEM_PROP_3: 0.301 +ELEM_PROP_4: 0.401 +ELEM_PROP_5: 0.501 +[ 1, 2, 3 ] +[ 11, 12, 13 ] +[ 21, 22, 23 ] +[ 31, 32, 33 ] +[ 41, 42, 43 ] + + +-------------------- + 1 +-------------------- +{EXT_ELEM_PROP_1: NaN, EXT_ELEM_PROP_2: NaN, EXT_ELEM_PROP_3: NaN, EXT_ELEM_PROP_4: NaN, EXT_ELEM_PROP_5: NaN} + +ELEM_PROP_1: 1009 +ELEM_PROP_2: 669 +ELEM_PROP_3: 1009 +ELEM_PROP_4: 1009 +ELEM_PROP_5: 1009 +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] + + +-------------------- + 2 +-------------------- +{EXT_ELEM_PROP_1: Ooogle 1-1, EXT_ELEM_PROP_2: Ooogle 2-1, EXT_ELEM_PROP_3: Ooogle 3-1, EXT_ELEM_PROP_4: Ooogle 4-1, EXT_ELEM_PROP_5: Ooogle 5-1} + +ELEM_PROP_1: 100.101 +ELEM_PROP_2: 669 +ELEM_PROP_3: 100.301 +ELEM_PROP_4: 100.401 +ELEM_PROP_5: 100.501 +[ 101, 102, 103 ] +[ 111, 112, 113 ] +[ 121, 122, 123 ] +[ 131, 132, 133 ] +[ 141, 142, 143 ] + + +-------------------- + 3 +-------------------- +{EXT_ELEM_PROP_1: Ooogle 1-2, EXT_ELEM_PROP_2: Ooogle 2-2, EXT_ELEM_PROP_3: Ooogle 3-2, EXT_ELEM_PROP_4: Ooogle 4-2, EXT_ELEM_PROP_5: Ooogle 5-2} + +ELEM_PROP_1: 200.101 +ELEM_PROP_2: 669 +ELEM_PROP_3: 200.301 +ELEM_PROP_4: 200.401 +ELEM_PROP_5: 200.501 +[ 201, 202, 203 ] +[ 211, 212, 213 ] +[ 221, 222, 223 ] +[ 231, 232, 233 ] +[ 241, 242, 243 ] + + +-------------------- + 4 +-------------------- +{EXT_ELEM_PROP_1: Ooogle 1-3, EXT_ELEM_PROP_2: Ooogle 2-3, EXT_ELEM_PROP_3: Ooogle 3-3, EXT_ELEM_PROP_4: Ooogle 4-3, EXT_ELEM_PROP_5: Ooogle 5-3} + +ELEM_PROP_1: 300.101 +ELEM_PROP_2: 669 +ELEM_PROP_3: 300.301 +ELEM_PROP_4: 300.401 +ELEM_PROP_5: 300.501 +[ 301, 302, 303 ] +[ 311, 312, 313 ] +[ 321, 322, 323 ] +[ 331, 332, 333 ] +[ 341, 342, 343 ] + + +-------------------- + 5 +-------------------- +{EXT_ELEM_PROP_1: Ooogle 1-4, EXT_ELEM_PROP_2: Ooogle 2-4, EXT_ELEM_PROP_3: Ooogle 3-4, EXT_ELEM_PROP_4: Ooogle 4-4, EXT_ELEM_PROP_5: Ooogle 5-4} + +ELEM_PROP_1: 400.101 +ELEM_PROP_2: 669 +ELEM_PROP_3: 400.301 +ELEM_PROP_4: 400.401 +ELEM_PROP_5: 400.501 +[ 401, 402, 403 ] +[ 411, 412, 413 ] +[ 421, 422, 423 ] +[ 431, 432, 433 ] +[ 441, 442, 443 ] + + + +set.bsize(): 120 +set.size(): 6 +set.num_extend_elem_props(): 5 +set.prop(PROP_9): 419 +set.elem_prop_keys(): [ ELEM_PROP_1 ELEM_PROP_2 ELEM_PROP_3 ELEM_PROP_4 ELEM_PROP_5 ] + + +------------------------------------- + 10 MODFICATIONS +------------------------------------- + +PROP_1: 1.101 +PROP_2: 2.201 +PROP_4: 4.401 +PROP_5: 5.501 +PROP_6: 984 +PROP_9: 419 + +-------------------- + 0 +-------------------- +{EXT_ELEM_PROP_1: Ooogle 1-0, EXT_ELEM_PROP_2: Ooogle 2-0, EXT_ELEM_PROP_3: Ooogle 3-0, EXT_ELEM_PROP_4: Ooogle 4-0, EXT_ELEM_PROP_5: Ooogle 5-0} + +ELEM_PROP_1: 0.101 +ELEM_PROP_2: 669 +ELEM_PROP_3: 0.301 +ELEM_PROP_4: 463 +ELEM_PROP_5: 661 +[ 1, 2, 3 ] +[ 11, 12, 13 ] +[ 21, 22, 23 ] +[ 31, 32, 33 ] +[ 41, 42, 43 ] + + +-------------------- + 1 +-------------------- +{EXT_ELEM_PROP_1: NaN, EXT_ELEM_PROP_2: NaN, EXT_ELEM_PROP_3: NaN, EXT_ELEM_PROP_4: NaN, EXT_ELEM_PROP_5: NaN} + +ELEM_PROP_1: 1009 +ELEM_PROP_2: 669 +ELEM_PROP_3: 1009 +ELEM_PROP_4: 463 +ELEM_PROP_5: 661 +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] + + +-------------------- + 2 +-------------------- +{EXT_ELEM_PROP_1: NaN, EXT_ELEM_PROP_2: NaN, EXT_ELEM_PROP_3: NaN, EXT_ELEM_PROP_4: NaN, EXT_ELEM_PROP_5: NaN} + +ELEM_PROP_1: 100.101 +ELEM_PROP_2: 669 +ELEM_PROP_3: 100.301 +ELEM_PROP_4: 463 +ELEM_PROP_5: 661 +[ 101, 102, 103 ] +[ 111, 112, 113 ] +[ 121, 122, 123 ] +[ 131, 132, 133 ] +[ 141, 142, 143 ] + + +-------------------- + 3 +-------------------- +{EXT_ELEM_PROP_1: Ooogle 1-2, EXT_ELEM_PROP_2: Ooogle 2-2, EXT_ELEM_PROP_3: Ooogle 3-2, EXT_ELEM_PROP_4: Ooogle 4-2, EXT_ELEM_PROP_5: Ooogle 5-2} + +ELEM_PROP_1: 200.101 +ELEM_PROP_2: 669 +ELEM_PROP_3: 200.301 +ELEM_PROP_4: 463 +ELEM_PROP_5: 661 +[ 201, 202, 203 ] +[ 211, 212, 213 ] +[ 221, 222, 223 ] +[ 231, 232, 233 ] +[ 241, 242, 243 ] + + +-------------------- + 4 +-------------------- +{EXT_ELEM_PROP_1: Ooogle 1-3, EXT_ELEM_PROP_2: Ooogle 2-3, EXT_ELEM_PROP_3: Ooogle 3-3, EXT_ELEM_PROP_4: Ooogle 4-3, EXT_ELEM_PROP_5: Ooogle 5-3} + +ELEM_PROP_1: 300.101 +ELEM_PROP_2: 669 +ELEM_PROP_3: 300.301 +ELEM_PROP_4: 463 +ELEM_PROP_5: 661 +[ 301, 302, 303 ] +[ 311, 312, 313 ] +[ 321, 322, 323 ] +[ 331, 332, 333 ] +[ 341, 342, 343 ] + + +-------------------- + 5 +-------------------- +{EXT_ELEM_PROP_1: Ooogle 1-4, EXT_ELEM_PROP_2: Ooogle 2-4, EXT_ELEM_PROP_3: Ooogle 3-4, EXT_ELEM_PROP_4: Ooogle 4-4, EXT_ELEM_PROP_5: Ooogle 5-4} + +ELEM_PROP_1: 400.101 +ELEM_PROP_2: 669 +ELEM_PROP_3: 400.301 +ELEM_PROP_4: 463 +ELEM_PROP_5: 661 +[ 401, 402, 403 ] +[ 411, 412, 413 ] +[ 421, 422, 423 ] +[ 431, 432, 433 ] +[ 441, 442, 443 ] + + + +set.prop_index(PROP_2): 1 +set.vsize(): 158 +set.num_props(): 6 +set.num_extend_elem_props(): 5 +set.prop_index(PROP_2): 1 + + +------------------------------------- + 15 MODFICATIONS +------------------------------------- + +PROP_1: 1.101 +PROP_2: 2.201 +PROP_4: 4.401 +PROP_5: 5.501 +PROP_6: 984 +PROP_7: 434 +PROP_9: 419 + +-------------------- + 0 +-------------------- +{EXT_ELEM_PROP_1: Ooogle 1-0, EXT_ELEM_PROP_2: Ooogle 2-0, EXT_ELEM_PROP_3: Ooogle 3-0, EXT_ELEM_PROP_4: Ooogle 4-0, EXT_ELEM_PROP_5: Ooogle 5-0} + +ELEM_PROP_1: 0.101 +ELEM_PROP_2: 669 +ELEM_PROP_3: 0.301 +ELEM_PROP_4: 815 +ELEM_PROP_5: 661 +[ 1, 2, 3 ] +[ 11, 12, 13 ] +[ 21, 22, 23 ] +[ 31, 32, 33 ] +[ 41, 42, 43 ] + + +-------------------- + 1 +-------------------- +{EXT_ELEM_PROP_1: NaN, EXT_ELEM_PROP_2: NaN, EXT_ELEM_PROP_3: NaN, EXT_ELEM_PROP_4: NaN, EXT_ELEM_PROP_5: NaN} + +ELEM_PROP_1: 1009 +ELEM_PROP_2: 1009 +ELEM_PROP_3: 1009 +ELEM_PROP_4: 1009 +ELEM_PROP_5: 1009 +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] + + +-------------------- + 2 +-------------------- +{EXT_ELEM_PROP_1: NaN, EXT_ELEM_PROP_2: NaN, EXT_ELEM_PROP_3: NaN, EXT_ELEM_PROP_4: NaN, EXT_ELEM_PROP_5: NaN} + +ELEM_PROP_1: 100.101 +ELEM_PROP_2: 669 +ELEM_PROP_3: 100.301 +ELEM_PROP_4: 815 +ELEM_PROP_5: 661 +[ 101, 102, 103 ] +[ 111, 112, 113 ] +[ 121, 122, 123 ] +[ 131, 132, 133 ] +[ 141, 142, 143 ] + + +-------------------- + 3 +-------------------- +{EXT_ELEM_PROP_1: Ooogle 1-2, EXT_ELEM_PROP_2: Ooogle 2-2, EXT_ELEM_PROP_3: Ooogle 3-2, EXT_ELEM_PROP_4: Ooogle 4-2, EXT_ELEM_PROP_5: Ooogle 5-2} + +ELEM_PROP_1: 200.101 +ELEM_PROP_2: 669 +ELEM_PROP_3: 200.301 +ELEM_PROP_4: 815 +ELEM_PROP_5: 661 +[ 201, 202, 203 ] +[ 211, 212, 213 ] +[ 221, 222, 223 ] +[ 231, 232, 233 ] +[ 241, 242, 243 ] + + +-------------------- + 4 +-------------------- +{EXT_ELEM_PROP_1: Ooogle 1-3, EXT_ELEM_PROP_2: Ooogle 2-3, EXT_ELEM_PROP_3: Ooogle 3-3, EXT_ELEM_PROP_4: Ooogle 4-3, EXT_ELEM_PROP_5: Ooogle 5-3} + +ELEM_PROP_1: 300.101 +ELEM_PROP_2: 669 +ELEM_PROP_3: 300.301 +ELEM_PROP_4: 815 +ELEM_PROP_5: 661 +[ 301, 302, 303 ] +[ 311, 312, 313 ] +[ 321, 322, 323 ] +[ 331, 332, 333 ] +[ 341, 342, 343 ] + + +-------------------- + 5 +-------------------- +{EXT_ELEM_PROP_1: Ooogle 1-4, EXT_ELEM_PROP_2: Ooogle 2-4, EXT_ELEM_PROP_3: Ooogle 3-4, EXT_ELEM_PROP_4: Ooogle 4-4, EXT_ELEM_PROP_5: Ooogle 5-4} + +ELEM_PROP_1: 400.101 +ELEM_PROP_2: 669 +ELEM_PROP_3: 400.301 +ELEM_PROP_4: 815 +ELEM_PROP_5: 661 +[ 401, 402, 403 ] +[ 411, 412, 413 ] +[ 421, 422, 423 ] +[ 431, 432, 433 ] +[ 441, 442, 443 ] + + +-------------------- + 6 +-------------------- +{EXT_ELEM_PROP_1: 1.141, EXT_ELEM_PROP_2: 2.241, EXT_ELEM_PROP_3: 3.341, EXT_ELEM_PROP_4: 4.441, EXT_ELEM_PROP_5: 5.541} + +ELEM_PROP_1: 1001 +ELEM_PROP_2: 1001 +ELEM_PROP_3: 1001 +ELEM_PROP_4: 815 +ELEM_PROP_5: 1001 +[ 1001, 1001, 1001 ] +[ 1001, 1001, 1001 ] +[ 1001, 1001, 1001 ] +[ 1001, 1001, 1001 ] +[ 1001, 1001, 1001 ] +[ 1001, 1001, 1001 ] +[ 1001, 1001, 1001 ] +[ 1001, 1001, 1001 ] +[ 1001, 1001, 1001 ] + + + +set.get_extend_elem_prop_header(): [ EXT_ELEM_PROP_1 EXT_ELEM_PROP_2 EXT_ELEM_PROP_3 EXT_ELEM_PROP_4 EXT_ELEM_PROP_5 ] +set.prop_keys(): [ PROP_1 PROP_2 PROP_4 PROP_5 PROP_6 PROP_7 PROP_9 ] +set.prop_keys(): [ PROP_1 PROP_2 PROP_4 PROP_5 PROP_6 PROP_7 PROP_9 ] +set.elem_prop_keys(): [ ELEM_PROP_1 ELEM_PROP_2 ELEM_PROP_3 ELEM_PROP_4 ELEM_PROP_5 ] + + +------------------------------------- + 20 MODFICATIONS +------------------------------------- + +PROP_1: 1.101 +PROP_2: 2.201 +PROP_4: 4.401 +PROP_5: 5.501 +PROP_6: 984 +PROP_7: 434 +PROP_9: 419 + +-------------------- + 0 +-------------------- +{EXT_ELEM_PROP_1: Ooogle 1-0, EXT_ELEM_PROP_2: Ooogle 2-0, EXT_ELEM_PROP_3: Ooogle 3-0, EXT_ELEM_PROP_4: Ooogle 4-0, EXT_ELEM_PROP_5: Ooogle 5-0} + +ELEM_PROP_1: 0.101 +ELEM_PROP_2: 669 +ELEM_PROP_3: 0.301 +ELEM_PROP_4: 815 +ELEM_PROP_5: 661 +[ 1, 2, 3 ] +[ 11, 12, 13 ] +[ 21, 22, 23 ] +[ 31, 32, 33 ] +[ 41, 42, 43 ] + + +-------------------- + 1 +-------------------- +{EXT_ELEM_PROP_1: NaN, EXT_ELEM_PROP_2: NaN, EXT_ELEM_PROP_3: NaN, EXT_ELEM_PROP_4: NaN, EXT_ELEM_PROP_5: NaN} + +ELEM_PROP_1: 1009 +ELEM_PROP_2: 1009 +ELEM_PROP_3: 1009 +ELEM_PROP_4: 1009 +ELEM_PROP_5: 1009 +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] + + +-------------------- + 2 +-------------------- +{EXT_ELEM_PROP_1: Ooogle 1-2, EXT_ELEM_PROP_2: Ooogle 2-2, EXT_ELEM_PROP_3: Ooogle 3-2, EXT_ELEM_PROP_4: Ooogle 4-2, EXT_ELEM_PROP_5: Ooogle 5-2} + +ELEM_PROP_1: 200.101 +ELEM_PROP_2: 669 +ELEM_PROP_3: 200.301 +ELEM_PROP_4: 815 +ELEM_PROP_5: 661 +[ 201, 202, 203 ] +[ 211, 212, 213 ] +[ 221, 222, 223 ] +[ 231, 232, 233 ] +[ 241, 242, 243 ] + + +-------------------- + 3 +-------------------- +{EXT_ELEM_PROP_1: 1.141, EXT_ELEM_PROP_2: 2.241, EXT_ELEM_PROP_3: 3.341, EXT_ELEM_PROP_4: 4.441, EXT_ELEM_PROP_5: 5.541} + +ELEM_PROP_1: 300.101 +ELEM_PROP_2: 669 +ELEM_PROP_3: 300.301 +ELEM_PROP_4: 815 +ELEM_PROP_5: 661 +[ 301, 302, 303 ] +[ 311, 312, 313 ] +[ 321, 322, 323 ] +[ 331, 332, 333 ] +[ 341, 342, 343 ] + + +-------------------- + 4 +-------------------- +{EXT_ELEM_PROP_1: Ooogle 1-4, EXT_ELEM_PROP_2: Ooogle 2-4, EXT_ELEM_PROP_3: Ooogle 3-4, EXT_ELEM_PROP_4: Ooogle 4-4, EXT_ELEM_PROP_5: Ooogle 5-4} + +ELEM_PROP_1: 400.101 +ELEM_PROP_2: 669 +ELEM_PROP_3: 400.301 +ELEM_PROP_4: 815 +ELEM_PROP_5: 661 +[ 401, 402, 403 ] +[ 411, 412, 413 ] +[ 421, 422, 423 ] +[ 431, 432, 433 ] +[ 441, 442, 443 ] + + +-------------------- + 5 +-------------------- +{EXT_ELEM_PROP_1: 1.141, EXT_ELEM_PROP_2: 2.241, EXT_ELEM_PROP_3: 3.341, EXT_ELEM_PROP_4: 4.441, EXT_ELEM_PROP_5: 5.541} + +ELEM_PROP_1: 1001 +ELEM_PROP_2: 1001 +ELEM_PROP_3: 1001 +ELEM_PROP_4: 815 +ELEM_PROP_5: 1001 +[ 1001, 1001, 1001 ] +[ 1001, 1001, 1001 ] +[ 1001, 1001, 1001 ] +[ 1001, 1001, 1001 ] +[ 1001, 1001, 1001 ] +[ 1001, 1001, 1001 ] +[ 1001, 1001, 1001 ] +[ 1001, 1001, 1001 ] +[ 1001, 1001, 1001 ] + + +-------------------- + 6 +-------------------- +{EXT_ELEM_PROP_1: 1.181, EXT_ELEM_PROP_2: 2.281, EXT_ELEM_PROP_3: 3.381, EXT_ELEM_PROP_4: 4.481, EXT_ELEM_PROP_5: 5.581} + +ELEM_PROP_1: 1007 +ELEM_PROP_2: 1007 +ELEM_PROP_3: 1007 +ELEM_PROP_4: 1007 +ELEM_PROP_5: 1007 +[ 1007, 1007, 1007 ] +[ 1007, 1007, 1007 ] +[ 1007, 1007, 1007 ] +[ 1007, 1007, 1007 ] +[ 1007, 1007, 1007 ] + + + +set.elem_prop_index(ELEM_PROP_4): 3 +set.elem_prop_index(ELEM_PROP_4): 3 + + +------------------------------------- + 25 MODFICATIONS +------------------------------------- + +PROP_1: 1.101 +PROP_2: 2.201 +PROP_4: 4.401 +PROP_5: 5.501 +PROP_6: 984 +PROP_7: 434 +PROP_9: 419 + +-------------------- + 0 +-------------------- +{EXT_ELEM_PROP_1: Ooogle 1-0, EXT_ELEM_PROP_2: Ooogle 2-0, EXT_ELEM_PROP_3: Ooogle 3-0, EXT_ELEM_PROP_4: Ooogle 4-0, EXT_ELEM_PROP_5: Ooogle 5-0} + +ELEM_PROP_1: 0.101 +ELEM_PROP_2: 669 +ELEM_PROP_3: 0.301 +ELEM_PROP_4: 815 +ELEM_PROP_5: 661 +[ 1, 2, 3 ] +[ 11, 12, 13 ] +[ 21, 22, 23 ] +[ 31, 32, 33 ] +[ 41, 42, 43 ] +[ 511, 511, 511 ] +[ 511, 511, 511 ] + + +-------------------- + 1 +-------------------- +{EXT_ELEM_PROP_1: NaN, EXT_ELEM_PROP_2: NaN, EXT_ELEM_PROP_3: NaN, EXT_ELEM_PROP_4: NaN, EXT_ELEM_PROP_5: NaN} + +ELEM_PROP_1: 1003 +ELEM_PROP_2: 1003 +ELEM_PROP_3: 1003 +ELEM_PROP_4: 1003 +ELEM_PROP_5: 1003 +[ 511, 511, 511 ] +[ 511, 511, 511 ] +[ 511, 511, 511 ] +[ 511, 511, 511 ] +[ 511, 511, 511 ] +[ 511, 511, 511 ] +[ 511, 511, 511 ] + + + +set.prop(PROP_4): 4.401 + + +------------------------------------- + 30 MODFICATIONS +------------------------------------- + +PROP_1: 1.101 +PROP_2: 2.201 +PROP_4: 4.401 +PROP_5: 5.501 +PROP_6: 984 +PROP_7: 434 +PROP_9: 419 + +-------------------- + 0 +-------------------- +{EXT_ELEM_PROP_1: Ooogle 1-0, EXT_ELEM_PROP_10: NaN, EXT_ELEM_PROP_2: Ooogle 2-0, EXT_ELEM_PROP_3: Ooogle 3-0, EXT_ELEM_PROP_4: Ooogle 4-0, EXT_ELEM_PROP_5: Ooogle 5-0, EXT_ELEM_PROP_6: NaN, EXT_ELEM_PROP_7: NaN, EXT_ELEM_PROP_8: NaN, EXT_ELEM_PROP_9: NaN} + +ELEM_PROP_1: 0.101 +ELEM_PROP_2: 669 +ELEM_PROP_3: 0.301 +ELEM_PROP_4: 734 +ELEM_PROP_5: 661 +[ 1, 2, 3 ] +[ 11, 12, 13 ] +[ 21, 22, 23 ] +[ 31, 32, 33 ] +[ 41, 42, 43 ] +[ 511, 511, 511 ] +[ 511, 511, 511 ] +[ 886, 886, 886 ] + + +-------------------- + 1 +-------------------- +{EXT_ELEM_PROP_1: NaN, EXT_ELEM_PROP_10: NaN, EXT_ELEM_PROP_2: NaN, EXT_ELEM_PROP_3: NaN, EXT_ELEM_PROP_4: NaN, EXT_ELEM_PROP_5: NaN, EXT_ELEM_PROP_6: NaN, EXT_ELEM_PROP_7: NaN, EXT_ELEM_PROP_8: NaN, EXT_ELEM_PROP_9: NaN} + +ELEM_PROP_1: 1003 +ELEM_PROP_2: 1003 +ELEM_PROP_3: 1003 +ELEM_PROP_4: 734 +ELEM_PROP_5: 1003 +[ 511, 511, 511 ] +[ 511, 511, 511 ] +[ 511, 511, 511 ] +[ 511, 511, 511 ] +[ 511, 511, 511 ] +[ 511, 511, 511 ] +[ 511, 511, 511 ] +[ 886, 886, 886 ] + + +-------------------- + 2 +-------------------- +{EXT_ELEM_PROP_1: NaN, EXT_ELEM_PROP_10: NaN, EXT_ELEM_PROP_2: NaN, EXT_ELEM_PROP_3: NaN, EXT_ELEM_PROP_4: NaN, EXT_ELEM_PROP_5: NaN, EXT_ELEM_PROP_6: NaN, EXT_ELEM_PROP_7: NaN, EXT_ELEM_PROP_8: NaN, EXT_ELEM_PROP_9: NaN} + +ELEM_PROP_1: 1009 +ELEM_PROP_2: 1009 +ELEM_PROP_3: 1009 +ELEM_PROP_4: 734 +ELEM_PROP_5: 1009 +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] +[ 886, 886, 886 ] + + + +set.num_extend_elem_props(): 10 +set.num_props(): 7 +set.num_extend_elem_props(): 10 + + +------------------------------------- + 35 MODFICATIONS +------------------------------------- + +PROP_1: 1.101 +PROP_2: 2.201 +PROP_4: 4.401 +PROP_5: 5.501 +PROP_6: 984 +PROP_7: 434 +PROP_9: 419 + +-------------------- + 0 +-------------------- +{EXT_ELEM_PROP_1: Ooogle 1-0, EXT_ELEM_PROP_10: NaN, EXT_ELEM_PROP_2: Ooogle 2-0, EXT_ELEM_PROP_3: 733, EXT_ELEM_PROP_4: Ooogle 4-0, EXT_ELEM_PROP_5: Ooogle 5-0, EXT_ELEM_PROP_6: NaN, EXT_ELEM_PROP_7: NaN, EXT_ELEM_PROP_8: NaN, EXT_ELEM_PROP_9: NaN} + +ELEM_PROP_1: 0.101 +ELEM_PROP_2: 669 +ELEM_PROP_4: 734 +ELEM_PROP_5: 661 +[ 1, 2, 3 ] +[ 11, 12, 13 ] +[ 21, 22, 23 ] +[ 31, 32, 33 ] +[ 41, 42, 43 ] +[ 511, 511, 511 ] +[ 511, 511, 511 ] +[ 886, 886, 886 ] + + +-------------------- + 1 +-------------------- +{EXT_ELEM_PROP_1: NaN, EXT_ELEM_PROP_10: NaN, EXT_ELEM_PROP_2: NaN, EXT_ELEM_PROP_3: NaN, EXT_ELEM_PROP_4: NaN, EXT_ELEM_PROP_5: NaN, EXT_ELEM_PROP_6: NaN, EXT_ELEM_PROP_7: NaN, EXT_ELEM_PROP_8: NaN, EXT_ELEM_PROP_9: NaN} + +ELEM_PROP_1: 1006 +ELEM_PROP_2: 1006 +ELEM_PROP_4: 1006 +ELEM_PROP_5: 1006 +[ 1006, 1006, 1006 ] +[ 1006, 1006, 1006 ] +[ 1006, 1006, 1006 ] +[ 1006, 1006, 1006 ] +[ 1006, 1006, 1006 ] +[ 1006, 1006, 1006 ] +[ 1006, 1006, 1006 ] +[ 1006, 1006, 1006 ] + + +-------------------- + 2 +-------------------- +{EXT_ELEM_PROP_1: NaN, EXT_ELEM_PROP_10: NaN, EXT_ELEM_PROP_2: NaN, EXT_ELEM_PROP_3: NaN, EXT_ELEM_PROP_4: NaN, EXT_ELEM_PROP_5: NaN, EXT_ELEM_PROP_6: NaN, EXT_ELEM_PROP_7: NaN, EXT_ELEM_PROP_8: NaN, EXT_ELEM_PROP_9: NaN} + +ELEM_PROP_1: 1005 +ELEM_PROP_2: 1005 +ELEM_PROP_4: 1005 +ELEM_PROP_5: 1005 +[ 1005, 1005, 1005 ] +[ 1005, 1005, 1005 ] +[ 1005, 1005, 1005 ] +[ 1005, 1005, 1005 ] +[ 1005, 1005, 1005 ] +[ 1005, 1005, 1005 ] +[ 1005, 1005, 1005 ] +[ 1005, 1005, 1005 ] + + +-------------------- + 3 +-------------------- +{EXT_ELEM_PROP_1: NaN, EXT_ELEM_PROP_10: NaN, EXT_ELEM_PROP_2: NaN, EXT_ELEM_PROP_3: NaN, EXT_ELEM_PROP_4: NaN, EXT_ELEM_PROP_5: NaN, EXT_ELEM_PROP_6: NaN, EXT_ELEM_PROP_7: NaN, EXT_ELEM_PROP_8: NaN, EXT_ELEM_PROP_9: NaN} + +ELEM_PROP_1: 1003 +ELEM_PROP_2: 1003 +ELEM_PROP_4: 734 +ELEM_PROP_5: 1003 +[ 511, 511, 511 ] +[ 511, 511, 511 ] +[ 511, 511, 511 ] +[ 511, 511, 511 ] +[ 511, 511, 511 ] +[ 511, 511, 511 ] +[ 511, 511, 511 ] +[ 886, 886, 886 ] + + +-------------------- + 4 +-------------------- +{EXT_ELEM_PROP_1: NaN, EXT_ELEM_PROP_10: NaN, EXT_ELEM_PROP_2: NaN, EXT_ELEM_PROP_3: NaN, EXT_ELEM_PROP_4: NaN, EXT_ELEM_PROP_5: NaN, EXT_ELEM_PROP_6: NaN, EXT_ELEM_PROP_7: NaN, EXT_ELEM_PROP_8: NaN, EXT_ELEM_PROP_9: NaN} + +ELEM_PROP_1: 1009 +ELEM_PROP_2: 1009 +ELEM_PROP_4: 734 +ELEM_PROP_5: 1009 +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] +[ 886, 886, 886 ] + + + +set.prop(PROP_7): 434 + + +------------------------------------- + 40 MODFICATIONS +------------------------------------- + +PROP_1: 1.101 +PROP_2: 2.201 +PROP_4: 4.401 +PROP_5: 5.501 +PROP_6: 984 +PROP_7: 434 +PROP_9: 419 + +-------------------- + 0 +-------------------- +{EXT_ELEM_PROP_1: NaN, EXT_ELEM_PROP_10: NaN, EXT_ELEM_PROP_2: NaN, EXT_ELEM_PROP_3: NaN, EXT_ELEM_PROP_4: NaN, EXT_ELEM_PROP_5: NaN, EXT_ELEM_PROP_6: NaN, EXT_ELEM_PROP_7: NaN, EXT_ELEM_PROP_8: NaN, EXT_ELEM_PROP_9: NaN} + +ELEM_PROP_1: 1006 +ELEM_PROP_2: 1006 +ELEM_PROP_4: 1006 +ELEM_PROP_5: 1006 +[ 1006, 1006, 1006 ] +[ 1006, 1006, 1006 ] +[ 1006, 1006, 1006 ] +[ 1006, 1006, 1006 ] +[ 1006, 1006, 1006 ] +[ 1006, 1006, 1006 ] +[ 1006, 1006, 1006 ] +[ 1006, 1006, 1006 ] + + +-------------------- + 1 +-------------------- +{EXT_ELEM_PROP_1: NaN, EXT_ELEM_PROP_10: NaN, EXT_ELEM_PROP_2: NaN, EXT_ELEM_PROP_3: NaN, EXT_ELEM_PROP_4: NaN, EXT_ELEM_PROP_5: NaN, EXT_ELEM_PROP_6: NaN, EXT_ELEM_PROP_7: NaN, EXT_ELEM_PROP_8: NaN, EXT_ELEM_PROP_9: NaN} + +ELEM_PROP_1: 1009 +ELEM_PROP_2: 1009 +ELEM_PROP_4: 734 +ELEM_PROP_5: 1009 +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] +[ 886, 886, 886 ] + + + +set.num_props(): 7 +set.get_extend_elem_prop(EXT_ELEM_PROP_9,0): NaN +set.has_elem_prop(ELEM_PROP_9): 0 + + +------------------------------------- + 45 MODFICATIONS +------------------------------------- + +PROP_1: 1.101 +PROP_2: 2.201 +PROP_4: 4.401 +PROP_5: 5.501 +PROP_6: 984 +PROP_7: 434 +PROP_9: 419 + +-------------------- + 0 +-------------------- +{EXT_ELEM_PROP_10: NaN, EXT_ELEM_PROP_2: NaN, EXT_ELEM_PROP_3: NaN, EXT_ELEM_PROP_4: NaN, EXT_ELEM_PROP_5: NaN, EXT_ELEM_PROP_7: NaN, EXT_ELEM_PROP_8: NaN, EXT_ELEM_PROP_9: NaN} + +ELEM_PROP_1: 1006 +ELEM_PROP_2: 1006 +ELEM_PROP_4: 1006 +[ 1006, 1006, 1006 ] +[ 1006, 1006, 1006 ] +[ 1006, 1006, 1006 ] +[ 1006, 1006, 1006 ] +[ 1006, 1006, 1006 ] +[ 1006, 1006, 1006 ] +[ 1006, 1006, 1006 ] +[ 1006, 1006, 1006 ] + + +-------------------- + 1 +-------------------- +{EXT_ELEM_PROP_10: NaN, EXT_ELEM_PROP_2: NaN, EXT_ELEM_PROP_3: NaN, EXT_ELEM_PROP_4: NaN, EXT_ELEM_PROP_5: NaN, EXT_ELEM_PROP_7: NaN, EXT_ELEM_PROP_8: NaN, EXT_ELEM_PROP_9: NaN} + +ELEM_PROP_1: 1009 +ELEM_PROP_2: 1009 +ELEM_PROP_4: 734 +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] +[ 886, 886, 886 ] + + + +set.vsize(): 61 +set.elem_prop_index(ELEM_PROP_4): 1 +set.vsize(): 59 + + +------------------------------------- + 50 MODFICATIONS +------------------------------------- + +PROP_1: 1.101 +PROP_2: 2.201 +PROP_4: 4.401 +PROP_5: 5.501 +PROP_6: 984 +PROP_7: 434 +PROP_9: 419 + +-------------------- + 0 +-------------------- +{EXT_ELEM_PROP_10: NaN, EXT_ELEM_PROP_3: NaN, EXT_ELEM_PROP_4: NaN, EXT_ELEM_PROP_5: NaN, EXT_ELEM_PROP_7: NaN, EXT_ELEM_PROP_9: NaN} + +ELEM_PROP_2: 1006 +ELEM_PROP_4: 1006 +[ 1006, 1006, 1006 ] +[ 1006, 1006, 1006 ] +[ 1006, 1006, 1006 ] +[ 1006, 1006, 1006 ] +[ 1006, 1006, 1006 ] +[ 1006, 1006, 1006 ] +[ 1006, 1006, 1006 ] +[ 1006, 1006, 1006 ] + + +-------------------- + 1 +-------------------- +{EXT_ELEM_PROP_10: NaN, EXT_ELEM_PROP_3: NaN, EXT_ELEM_PROP_4: NaN, EXT_ELEM_PROP_5: NaN, EXT_ELEM_PROP_7: NaN, EXT_ELEM_PROP_9: NaN} + +ELEM_PROP_2: 1009 +ELEM_PROP_4: 734 +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] +[ 886, 886, 886 ] + + +-------------------- + 2 +-------------------- +{EXT_ELEM_PROP_10: -99, EXT_ELEM_PROP_3: NaN, EXT_ELEM_PROP_4: NaN, EXT_ELEM_PROP_5: NaN, EXT_ELEM_PROP_7: NaN, EXT_ELEM_PROP_9: NaN} + +ELEM_PROP_2: 1008 +ELEM_PROP_4: 1008 +[ 1008, 1008, 1008 ] +[ 1008, 1008, 1008 ] +[ 1008, 1008, 1008 ] +[ 1008, 1008, 1008 ] +[ 1008, 1008, 1008 ] +[ 1008, 1008, 1008 ] +[ 1008, 1008, 1008 ] +[ 1008, 1008, 1008 ] + + + + + +------------------------------------- + 55 MODFICATIONS +------------------------------------- + +PROP_1: 1.101 +PROP_2: 2.201 +PROP_4: 4.401 +PROP_5: 5.501 +PROP_6: 984 +PROP_7: 434 +PROP_9: 419 + +-------------------- + 0 +-------------------- +{EXT_ELEM_PROP_10: NaN, EXT_ELEM_PROP_3: NaN, EXT_ELEM_PROP_4: NaN, EXT_ELEM_PROP_5: NaN, EXT_ELEM_PROP_7: NaN, EXT_ELEM_PROP_9: NaN} + +ELEM_PROP_2: 1006 +ELEM_PROP_4: 776 +[ 1006, 1006, 1006 ] +[ 1006, 1006, 1006 ] + + +-------------------- + 1 +-------------------- +{EXT_ELEM_PROP_10: Boogle 10-1, EXT_ELEM_PROP_3: NaN, EXT_ELEM_PROP_4: NaN, EXT_ELEM_PROP_5: NaN, EXT_ELEM_PROP_7: Boogle 7-1, EXT_ELEM_PROP_9: Boogle 9-1} + +ELEM_PROP_2: 1009 +ELEM_PROP_4: 776 +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] + + +-------------------- + 2 +-------------------- +{EXT_ELEM_PROP_10: 11.031, EXT_ELEM_PROP_3: 3.331, EXT_ELEM_PROP_4: 4.431, EXT_ELEM_PROP_5: 5.531, EXT_ELEM_PROP_7: 7.731, EXT_ELEM_PROP_9: 9.931} + +ELEM_PROP_2: 1009 +ELEM_PROP_4: 1009 +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] + + + +set.size(): 3 +set.num_props(): 7 +set.num_extend_elem_props(): 7 +set.has_elem_prop(ELEM_PROP_7): 0 + + +------------------------------------- + 60 MODFICATIONS +------------------------------------- + +PROP_1: 1.101 +PROP_2: 2.201 +PROP_4: 4.401 +PROP_5: 5.501 +PROP_6: 984 +PROP_7: 434 +PROP_9: 419 + +-------------------- + 0 +-------------------- +{EXT_ELEM_PROP_10: 11.011, EXT_ELEM_PROP_3: 3.311, EXT_ELEM_PROP_4: 4.411, EXT_ELEM_PROP_5: 5.511, EXT_ELEM_PROP_7: 7.711, EXT_ELEM_PROP_8: 8.811, EXT_ELEM_PROP_9: 9.911} + +ELEM_PROP_2: 1005 +ELEM_PROP_4: 1005 +[ 1005, 1005, 1005 ] +[ 1005, 1005, 1005 ] + + +-------------------- + 1 +-------------------- +{EXT_ELEM_PROP_10: NaN, EXT_ELEM_PROP_3: NaN, EXT_ELEM_PROP_4: NaN, EXT_ELEM_PROP_5: NaN, EXT_ELEM_PROP_7: NaN, EXT_ELEM_PROP_8: -99, EXT_ELEM_PROP_9: NaN} + +ELEM_PROP_2: 1006 +ELEM_PROP_4: 776 +[ 1006, 1006, 1006 ] +[ 1006, 1006, 1006 ] + + +-------------------- + 2 +-------------------- +{EXT_ELEM_PROP_10: Boogle 10-1, EXT_ELEM_PROP_3: NaN, EXT_ELEM_PROP_4: NaN, EXT_ELEM_PROP_5: NaN, EXT_ELEM_PROP_7: Boogle 7-1, EXT_ELEM_PROP_8: -99, EXT_ELEM_PROP_9: Boogle 9-1} + +ELEM_PROP_2: 1009 +ELEM_PROP_4: 776 +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] + + +-------------------- + 3 +-------------------- +{EXT_ELEM_PROP_10: 11.031, EXT_ELEM_PROP_3: 3.331, EXT_ELEM_PROP_4: 4.431, EXT_ELEM_PROP_5: 5.531, EXT_ELEM_PROP_7: 7.731, EXT_ELEM_PROP_8: -99, EXT_ELEM_PROP_9: 9.931} + +ELEM_PROP_2: 1009 +ELEM_PROP_4: 1009 +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] + + +-------------------- + 4 +-------------------- +{EXT_ELEM_PROP_10: -99, EXT_ELEM_PROP_3: NaN, EXT_ELEM_PROP_4: NaN, EXT_ELEM_PROP_5: NaN, EXT_ELEM_PROP_7: NaN, EXT_ELEM_PROP_8: -99, EXT_ELEM_PROP_9: NaN} + +ELEM_PROP_2: 1003 +ELEM_PROP_4: 1003 +[ 1003, 1003, 1003 ] +[ 1003, 1003, 1003 ] + + + +set.get_extend_elem_prop(EXT_ELEM_PROP_3,3): 3.331 +set.num_elem_props(): 2 +set.vsize(): 42 + + +------------------------------------- + 65 MODFICATIONS +------------------------------------- + +PROP_1: 1.101 +PROP_2: 2.201 +PROP_4: 4.401 +PROP_5: 5.501 +PROP_6: 984 +PROP_7: 434 +PROP_9: 419 + +-------------------- + 0 +-------------------- +{EXT_ELEM_PROP_10: 11.011, EXT_ELEM_PROP_3: 3.311, EXT_ELEM_PROP_4: 4.411, EXT_ELEM_PROP_5: 5.511, EXT_ELEM_PROP_7: 7.711, EXT_ELEM_PROP_8: 8.811, EXT_ELEM_PROP_9: 9.911} + +[ 1005, 1005, 1005 ] +[ 1005, 1005, 1005 ] + + +-------------------- + 1 +-------------------- +{EXT_ELEM_PROP_10: NaN, EXT_ELEM_PROP_3: NaN, EXT_ELEM_PROP_4: NaN, EXT_ELEM_PROP_5: NaN, EXT_ELEM_PROP_7: NaN, EXT_ELEM_PROP_8: -99, EXT_ELEM_PROP_9: NaN} + +[ 1006, 1006, 1006 ] +[ 1006, 1006, 1006 ] + + +-------------------- + 2 +-------------------- +{EXT_ELEM_PROP_10: Boogle 10-0, EXT_ELEM_PROP_3: NaN, EXT_ELEM_PROP_4: NaN, EXT_ELEM_PROP_5: NaN, EXT_ELEM_PROP_7: Boogle 7-0, EXT_ELEM_PROP_8: Boogle 8-0, EXT_ELEM_PROP_9: Boogle 9-0} + +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] + + +-------------------- + 3 +-------------------- +{EXT_ELEM_PROP_10: 11.031, EXT_ELEM_PROP_3: 3.331, EXT_ELEM_PROP_4: 4.431, EXT_ELEM_PROP_5: 5.531, EXT_ELEM_PROP_7: 7.731, EXT_ELEM_PROP_8: -99, EXT_ELEM_PROP_9: 9.931} + +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] + + +-------------------- + 4 +-------------------- +{EXT_ELEM_PROP_10: -99, EXT_ELEM_PROP_3: NaN, EXT_ELEM_PROP_4: NaN, EXT_ELEM_PROP_5: NaN, EXT_ELEM_PROP_7: NaN, EXT_ELEM_PROP_8: -99, EXT_ELEM_PROP_9: NaN} + +[ 1003, 1003, 1003 ] +[ 1003, 1003, 1003 ] + + + +set.get_extend_elem_prop_header(): [ EXT_ELEM_PROP_10 EXT_ELEM_PROP_3 EXT_ELEM_PROP_4 EXT_ELEM_PROP_5 EXT_ELEM_PROP_7 EXT_ELEM_PROP_8 EXT_ELEM_PROP_9 ] +set.prop_index(PROP_4): 2 +set.num_elem_props(): 0 +set.bsize(): 30 +set.has_extend_elem_prop(EXT_ELEM_PROP_3): 1 +set.num_extend_elem_props(): 6 +set.num_props(): 7 + + +------------------------------------- + 70 MODFICATIONS +------------------------------------- + +PROP_1: 1.101 +PROP_2: 2.201 +PROP_4: 4.401 +PROP_5: 5.501 +PROP_6: 984 +PROP_7: 434 +PROP_9: 419 + +-------------------- + 0 +-------------------- +{EXT_ELEM_PROP_10: 11.011, EXT_ELEM_PROP_3: 3.311, EXT_ELEM_PROP_4: 4.411, EXT_ELEM_PROP_5: 5.511, EXT_ELEM_PROP_8: 8.811, EXT_ELEM_PROP_9: 9.911} + +[ 1005, 1005, 1005 ] +[ 1005, 1005, 1005 ] + + +-------------------- + 1 +-------------------- +{EXT_ELEM_PROP_10: 11.011, EXT_ELEM_PROP_3: 3.311, EXT_ELEM_PROP_4: 4.411, EXT_ELEM_PROP_5: 5.511, EXT_ELEM_PROP_8: 8.811, EXT_ELEM_PROP_9: 9.911} + +[ 1006, 1006, 1006 ] +[ 1006, 1006, 1006 ] + + +-------------------- + 2 +-------------------- +{EXT_ELEM_PROP_10: Boogle 10-0, EXT_ELEM_PROP_3: NaN, EXT_ELEM_PROP_4: NaN, EXT_ELEM_PROP_5: NaN, EXT_ELEM_PROP_8: Boogle 8-0, EXT_ELEM_PROP_9: Boogle 9-0} + +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] + + +-------------------- + 3 +-------------------- +{EXT_ELEM_PROP_10: 11.031, EXT_ELEM_PROP_3: 3.331, EXT_ELEM_PROP_4: 4.431, EXT_ELEM_PROP_5: 5.531, EXT_ELEM_PROP_8: -99, EXT_ELEM_PROP_9: 9.931} + +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] + + +-------------------- + 4 +-------------------- +{EXT_ELEM_PROP_10: -99, EXT_ELEM_PROP_3: NaN, EXT_ELEM_PROP_4: NaN, EXT_ELEM_PROP_5: NaN, EXT_ELEM_PROP_8: -99, EXT_ELEM_PROP_9: NaN} + +[ 1003, 1003, 1003 ] +[ 1003, 1003, 1003 ] + + + +set.has_extend_elem_prop(EXT_ELEM_PROP_8): 1 +set.vsize(): 55 + + +------------------------------------- + 75 MODFICATIONS +------------------------------------- + +PROP_1: 1.101 +PROP_2: 2.201 +PROP_4: 4.401 +PROP_5: 5.501 +PROP_6: 984 +PROP_7: 434 +PROP_9: 419 + +-------------------- + 0 +-------------------- +{EXT_ELEM_PROP_10: 11.011, EXT_ELEM_PROP_3: 3.311, EXT_ELEM_PROP_4: 4.411, EXT_ELEM_PROP_5: 5.511, EXT_ELEM_PROP_6: NaN, EXT_ELEM_PROP_7: NaN, EXT_ELEM_PROP_8: 8.811, EXT_ELEM_PROP_9: 9.911} + +[ 1005, 1005, 1005 ] +[ 1005, 1005, 1005 ] + + +-------------------- + 1 +-------------------- +{EXT_ELEM_PROP_10: 11.011, EXT_ELEM_PROP_3: 3.311, EXT_ELEM_PROP_4: 4.411, EXT_ELEM_PROP_5: 5.511, EXT_ELEM_PROP_6: NaN, EXT_ELEM_PROP_7: NaN, EXT_ELEM_PROP_8: 8.811, EXT_ELEM_PROP_9: 9.911} + +[ 1006, 1006, 1006 ] +[ 1006, 1006, 1006 ] + + +-------------------- + 2 +-------------------- +{EXT_ELEM_PROP_10: Boogle 10-4, EXT_ELEM_PROP_3: NaN, EXT_ELEM_PROP_4: -99, EXT_ELEM_PROP_5: NaN, EXT_ELEM_PROP_6: Boogle 6-4, EXT_ELEM_PROP_7: Boogle 7-4, EXT_ELEM_PROP_8: Boogle 8-4, EXT_ELEM_PROP_9: Boogle 9-4} + +[ 1008, 1008, 1008 ] +[ 1008, 1008, 1008 ] +[ 1008, 1008, 1008 ] +[ 1008, 1008, 1008 ] +[ 1008, 1008, 1008 ] +[ 1008, 1008, 1008 ] + + +-------------------- + 3 +-------------------- +{EXT_ELEM_PROP_10: Boogle 10-0, EXT_ELEM_PROP_3: NaN, EXT_ELEM_PROP_4: NaN, EXT_ELEM_PROP_5: NaN, EXT_ELEM_PROP_6: NaN, EXT_ELEM_PROP_7: NaN, EXT_ELEM_PROP_8: Boogle 8-0, EXT_ELEM_PROP_9: Boogle 9-0} + +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] + + +-------------------- + 4 +-------------------- +{EXT_ELEM_PROP_10: 11.031, EXT_ELEM_PROP_3: 3.331, EXT_ELEM_PROP_4: 4.431, EXT_ELEM_PROP_5: 5.531, EXT_ELEM_PROP_6: NaN, EXT_ELEM_PROP_7: NaN, EXT_ELEM_PROP_8: -99, EXT_ELEM_PROP_9: 9.931} + +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] + + +-------------------- + 5 +-------------------- +{EXT_ELEM_PROP_10: Boogle 10-3, EXT_ELEM_PROP_3: NaN, EXT_ELEM_PROP_4: -99, EXT_ELEM_PROP_5: NaN, EXT_ELEM_PROP_6: Boogle 6-3, EXT_ELEM_PROP_7: Boogle 7-3, EXT_ELEM_PROP_8: Boogle 8-3, EXT_ELEM_PROP_9: Boogle 9-3} + +[ 1003, 1003, 1003 ] +[ 1003, 1003, 1003 ] + + + +set.num_props(): 7 + + +------------------------------------- + 80 MODFICATIONS +------------------------------------- + +PROP_1: 1.101 +PROP_2: 2.201 +PROP_4: 4.401 +PROP_5: 5.501 +PROP_6: 984 +PROP_7: 434 +PROP_8: 140 +PROP_9: 419 + +-------------------- + 0 +-------------------- +{EXT_ELEM_PROP_10: 11.011, EXT_ELEM_PROP_3: 3.311, EXT_ELEM_PROP_4: 4.411, EXT_ELEM_PROP_5: 5.511, EXT_ELEM_PROP_6: NaN, EXT_ELEM_PROP_7: NaN, EXT_ELEM_PROP_8: 8.811, EXT_ELEM_PROP_9: 9.911} + +[ 1005, 1005, 1005 ] +[ 1005, 1005, 1005 ] + + +-------------------- + 1 +-------------------- +{EXT_ELEM_PROP_10: 11.011, EXT_ELEM_PROP_3: 3.311, EXT_ELEM_PROP_4: 4.411, EXT_ELEM_PROP_5: 5.511, EXT_ELEM_PROP_6: NaN, EXT_ELEM_PROP_7: NaN, EXT_ELEM_PROP_8: 8.811, EXT_ELEM_PROP_9: 9.911} + +[ 1006, 1006, 1006 ] +[ 1006, 1006, 1006 ] + + +-------------------- + 2 +-------------------- +{EXT_ELEM_PROP_10: Boogle 10-4, EXT_ELEM_PROP_3: NaN, EXT_ELEM_PROP_4: 138, EXT_ELEM_PROP_5: NaN, EXT_ELEM_PROP_6: Boogle 6-4, EXT_ELEM_PROP_7: Boogle 7-4, EXT_ELEM_PROP_8: Boogle 8-4, EXT_ELEM_PROP_9: Boogle 9-4} + +[ 1008, 1008, 1008 ] +[ 1008, 1008, 1008 ] +[ 1008, 1008, 1008 ] +[ 1008, 1008, 1008 ] +[ 1008, 1008, 1008 ] +[ 1008, 1008, 1008 ] + + +-------------------- + 3 +-------------------- +{EXT_ELEM_PROP_10: Boogle 10-0, EXT_ELEM_PROP_3: NaN, EXT_ELEM_PROP_4: NaN, EXT_ELEM_PROP_5: NaN, EXT_ELEM_PROP_6: NaN, EXT_ELEM_PROP_7: NaN, EXT_ELEM_PROP_8: Boogle 8-0, EXT_ELEM_PROP_9: Boogle 9-0} + +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] + + +-------------------- + 4 +-------------------- +{EXT_ELEM_PROP_10: 11.031, EXT_ELEM_PROP_3: 3.331, EXT_ELEM_PROP_4: 4.431, EXT_ELEM_PROP_5: 5.531, EXT_ELEM_PROP_6: NaN, EXT_ELEM_PROP_7: NaN, EXT_ELEM_PROP_8: -99, EXT_ELEM_PROP_9: 9.931} + +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] + + +-------------------- + 5 +-------------------- +{EXT_ELEM_PROP_10: 11.061, EXT_ELEM_PROP_3: 3.361, EXT_ELEM_PROP_4: 4.461, EXT_ELEM_PROP_5: 5.561, EXT_ELEM_PROP_6: 6.661, EXT_ELEM_PROP_7: 7.761, EXT_ELEM_PROP_8: 8.861, EXT_ELEM_PROP_9: 9.961} + +[ 1003, 1003, 1003 ] +[ 1003, 1003, 1003 ] + + + +set.get_extend_elem_prop_header(): [ EXT_ELEM_PROP_10 EXT_ELEM_PROP_3 EXT_ELEM_PROP_4 EXT_ELEM_PROP_5 EXT_ELEM_PROP_6 EXT_ELEM_PROP_7 EXT_ELEM_PROP_8 EXT_ELEM_PROP_9 ] + + +------------------------------------- + 85 MODFICATIONS +------------------------------------- + +PROP_1: 1.101 +PROP_2: 2.201 +PROP_4: 4.401 +PROP_6: 984 +PROP_7: 434 +PROP_8: 140 +PROP_9: 419 + +-------------------- + 0 +-------------------- +{EXT_ELEM_PROP_10: 11.011, EXT_ELEM_PROP_2: -99, EXT_ELEM_PROP_3: 3.311, EXT_ELEM_PROP_4: 4.411, EXT_ELEM_PROP_5: 5.511, EXT_ELEM_PROP_6: NaN, EXT_ELEM_PROP_7: NaN, EXT_ELEM_PROP_8: 8.811, EXT_ELEM_PROP_9: 9.911} + +[ 1005, 1005, 1005 ] +[ 1005, 1005, 1005 ] + + +-------------------- + 1 +-------------------- +{EXT_ELEM_PROP_10: 11.011, EXT_ELEM_PROP_2: -99, EXT_ELEM_PROP_3: 3.311, EXT_ELEM_PROP_4: 4.411, EXT_ELEM_PROP_5: 5.511, EXT_ELEM_PROP_6: NaN, EXT_ELEM_PROP_7: NaN, EXT_ELEM_PROP_8: 8.811, EXT_ELEM_PROP_9: 9.911} + +[ 1006, 1006, 1006 ] +[ 1006, 1006, 1006 ] + + +-------------------- + 2 +-------------------- +{EXT_ELEM_PROP_10: NaN, EXT_ELEM_PROP_2: -99, EXT_ELEM_PROP_3: NaN, EXT_ELEM_PROP_4: -99, EXT_ELEM_PROP_5: NaN, EXT_ELEM_PROP_6: NaN, EXT_ELEM_PROP_7: NaN, EXT_ELEM_PROP_8: NaN, EXT_ELEM_PROP_9: NaN} + +[ 1003, 1003, 1003 ] + + +-------------------- + 3 +-------------------- +{EXT_ELEM_PROP_10: Boogle 10-4, EXT_ELEM_PROP_2: -99, EXT_ELEM_PROP_3: NaN, EXT_ELEM_PROP_4: 138, EXT_ELEM_PROP_5: 667, EXT_ELEM_PROP_6: Boogle 6-4, EXT_ELEM_PROP_7: Boogle 7-4, EXT_ELEM_PROP_8: Boogle 8-4, EXT_ELEM_PROP_9: Boogle 9-4} + +[ 1008, 1008, 1008 ] +[ 1008, 1008, 1008 ] +[ 1008, 1008, 1008 ] +[ 1008, 1008, 1008 ] +[ 1008, 1008, 1008 ] +[ 1008, 1008, 1008 ] + + +-------------------- + 4 +-------------------- +{EXT_ELEM_PROP_10: Boogle 10-0, EXT_ELEM_PROP_2: -99, EXT_ELEM_PROP_3: NaN, EXT_ELEM_PROP_4: NaN, EXT_ELEM_PROP_5: NaN, EXT_ELEM_PROP_6: NaN, EXT_ELEM_PROP_7: NaN, EXT_ELEM_PROP_8: Boogle 8-0, EXT_ELEM_PROP_9: Boogle 9-0} + +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] + + +-------------------- + 5 +-------------------- +{EXT_ELEM_PROP_10: 11.031, EXT_ELEM_PROP_2: -99, EXT_ELEM_PROP_3: 3.331, EXT_ELEM_PROP_4: 4.431, EXT_ELEM_PROP_5: 5.531, EXT_ELEM_PROP_6: NaN, EXT_ELEM_PROP_7: NaN, EXT_ELEM_PROP_8: -99, EXT_ELEM_PROP_9: 9.931} + +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] + + +-------------------- + 6 +-------------------- +{EXT_ELEM_PROP_10: 11.061, EXT_ELEM_PROP_2: -99, EXT_ELEM_PROP_3: 3.361, EXT_ELEM_PROP_4: 4.461, EXT_ELEM_PROP_5: 5.561, EXT_ELEM_PROP_6: 6.661, EXT_ELEM_PROP_7: 7.761, EXT_ELEM_PROP_8: 8.861, EXT_ELEM_PROP_9: 9.961} + +[ 1003, 1003, 1003 ] +[ 1003, 1003, 1003 ] + + + +set.num_extend_elem_props(): 8 + + +------------------------------------- + 90 MODFICATIONS +------------------------------------- + +PROP_1: 1.101 +PROP_2: 2.201 +PROP_4: 4.401 +PROP_6: 984 +PROP_7: 434 +PROP_8: 140 +PROP_9: 419 + +-------------------- + 0 +-------------------- +{EXT_ELEM_PROP_10: 11.011, EXT_ELEM_PROP_2: -99, EXT_ELEM_PROP_3: 3.311, EXT_ELEM_PROP_4: 4.411, EXT_ELEM_PROP_5: 5.511, EXT_ELEM_PROP_6: -99, EXT_ELEM_PROP_7: NaN, EXT_ELEM_PROP_8: 8.811, EXT_ELEM_PROP_9: 9.911} + +[ 1005, 1005, 1005 ] +[ 1005, 1005, 1005 ] + + + +set.elem_prop_keys(): [] +set.get_extend_elem_prop_header(): [ EXT_ELEM_PROP_10 EXT_ELEM_PROP_2 EXT_ELEM_PROP_3 EXT_ELEM_PROP_4 EXT_ELEM_PROP_5 EXT_ELEM_PROP_6 EXT_ELEM_PROP_7 EXT_ELEM_PROP_8 EXT_ELEM_PROP_9 ] + + +------------------------------------- + 95 MODFICATIONS +------------------------------------- + +PROP_1: 1.101 +PROP_2: 2.201 +PROP_6: 984 +PROP_7: 434 +PROP_8: 140 +PROP_9: 419 + + +set.num_extend_elem_props(): 7 +set.vsize(): 32 +set.prop_index(PROP_9): 7 +set.num_extend_elem_props(): 7 + + +------------------------------------- + 100 MODFICATIONS +------------------------------------- + +PROP_1: 1.101 +PROP_10: 182 +PROP_2: 2.201 +PROP_4: 779 +PROP_5: 902 +PROP_6: 984 +PROP_7: 434 +PROP_8: 140 +PROP_9: 419 + +-------------------- + 0 +-------------------- +{EXT_ELEM_PROP_10: 11.031, EXT_ELEM_PROP_2: 2.231, EXT_ELEM_PROP_3: 3.331, EXT_ELEM_PROP_4: 4.431, EXT_ELEM_PROP_6: 6.631, EXT_ELEM_PROP_7: 7.731, EXT_ELEM_PROP_8: 8.831} + +[ 1001, 1001, 1001 ] +[ 1001, 1001, 1001 ] +[ 1001, 1001, 1001 ] +[ 1001, 1001, 1001 ] +[ 1001, 1001, 1001 ] +[ 1001, 1001, 1001 ] +[ 1001, 1001, 1001 ] +[ 1001, 1001, 1001 ] + + + +set.prop_keys(): [ PROP_1 PROP_10 PROP_2 PROP_4 PROP_5 PROP_6 PROP_7 PROP_8 PROP_9 ] +set.has_extend_elem_prop(EXT_ELEM_PROP_2): 1 +set.num_elem_props(): 0 +set.has_extend_elem_prop(EXT_ELEM_PROP_10): 1 +set.num_props(): 10 +set.get_extend_elem_prop(EXT_ELEM_PROP_10,2): NaN + + +------------------------------------- + 105 MODFICATIONS +------------------------------------- + +PROP_1: 1.101 +PROP_10: 182 +PROP_2: 2.201 +PROP_3: 22 +PROP_4: 779 +PROP_5: 902 +PROP_6: 984 +PROP_7: 434 +PROP_8: 140 +PROP_9: 419 + +-------------------- + 0 +-------------------- +{EXT_ELEM_PROP_10: 11.031, EXT_ELEM_PROP_2: 2.231, EXT_ELEM_PROP_3: 3.331, EXT_ELEM_PROP_4: 4.431, EXT_ELEM_PROP_6: 6.631, EXT_ELEM_PROP_7: 7.731, EXT_ELEM_PROP_8: 308} + +[ 1001, 1001, 1001 ] +[ 1001, 1001, 1001 ] +[ 1001, 1001, 1001 ] +[ 1001, 1001, 1001 ] +[ 1001, 1001, 1001 ] +[ 1001, 1001, 1001 ] +[ 1001, 1001, 1001 ] +[ 1001, 1001, 1001 ] + + + +set.get_extend_elem_prop(EXT_ELEM_PROP_3,0): 3.331 +set.prop_keys(): [ PROP_1 PROP_10 PROP_2 PROP_3 PROP_4 PROP_5 PROP_6 PROP_7 PROP_8 PROP_9 ] +set.size(): 2 +set.num_extend_elem_props(): 7 +set.prop(PROP_1): 1.101 +set.size(): 2 +set.bsize(): 48 +set.elem_prop_keys(): [] + + +------------------------------------- + 110 MODFICATIONS +------------------------------------- + +PROP_1: 1.101 +PROP_10: 182 +PROP_2: 2.201 +PROP_3: 22 +PROP_4: 779 +PROP_5: 902 +PROP_6: 984 +PROP_7: 434 +PROP_8: 140 +PROP_9: 419 + +-------------------- + 0 +-------------------- +{EXT_ELEM_PROP_10: 11.031, EXT_ELEM_PROP_2: 2.231, EXT_ELEM_PROP_3: 3.331, EXT_ELEM_PROP_4: 4.431, EXT_ELEM_PROP_6: 6.631, EXT_ELEM_PROP_7: 7.731, EXT_ELEM_PROP_8: 308} + +[ 1001, 1001, 1001 ] +[ 1001, 1001, 1001 ] +[ 1001, 1001, 1001 ] +[ 1001, 1001, 1001 ] +[ 1001, 1001, 1001 ] +[ 1001, 1001, 1001 ] +[ 1001, 1001, 1001 ] +[ 1001, 1001, 1001 ] +[ 179, 179, 179 ] + + +-------------------- + 1 +-------------------- +{EXT_ELEM_PROP_10: 11.051, EXT_ELEM_PROP_2: 2.251, EXT_ELEM_PROP_3: 3.351, EXT_ELEM_PROP_4: 4.451, EXT_ELEM_PROP_6: 6.651, EXT_ELEM_PROP_7: 7.751, EXT_ELEM_PROP_8: 8.851} + +[ 1006, 1006, 1006 ] +[ 1006, 1006, 1006 ] +[ 1006, 1006, 1006 ] +[ 1006, 1006, 1006 ] +[ 1006, 1006, 1006 ] +[ 1006, 1006, 1006 ] +[ 1006, 1006, 1006 ] +[ 1006, 1006, 1006 ] +[ 179, 179, 179 ] + + + +set.get_extend_elem_prop(EXT_ELEM_PROP_10,1): 11.051 +set.bsize(): 54 +set.prop(PROP_3): 22 +set.num_extend_elem_props(): 7 +set.num_extend_elem_props(): 7 +set.num_props(): 10 + + +------------------------------------- + 115 MODFICATIONS +------------------------------------- + +PROP_1: 1.101 +PROP_10: 182 +PROP_3: 22 +PROP_4: 779 +PROP_5: 902 +PROP_6: 984 +PROP_7: 434 +PROP_8: 140 +PROP_9: 419 + +-------------------- + 0 +-------------------- +{EXT_ELEM_PROP_10: 11.051, EXT_ELEM_PROP_2: 2.251, EXT_ELEM_PROP_3: 3.351, EXT_ELEM_PROP_4: 4.451, EXT_ELEM_PROP_6: 6.651, EXT_ELEM_PROP_7: 7.751, EXT_ELEM_PROP_8: 8.851} + +[ 1006, 1006, 1006 ] +[ 1006, 1006, 1006 ] +[ 1006, 1006, 1006 ] +[ 1006, 1006, 1006 ] +[ 1006, 1006, 1006 ] +[ 1006, 1006, 1006 ] +[ 1006, 1006, 1006 ] +[ 1006, 1006, 1006 ] +[ 179, 179, 179 ] + + +-------------------- + 1 +-------------------- +{EXT_ELEM_PROP_10: 11.041, EXT_ELEM_PROP_2: 2.241, EXT_ELEM_PROP_3: 3.341, EXT_ELEM_PROP_4: 4.441, EXT_ELEM_PROP_6: 6.641, EXT_ELEM_PROP_7: 7.741, EXT_ELEM_PROP_8: 8.841} + +[ 1002, 1002, 1002 ] +[ 1002, 1002, 1002 ] +[ 1002, 1002, 1002 ] +[ 1002, 1002, 1002 ] +[ 1002, 1002, 1002 ] +[ 1002, 1002, 1002 ] +[ 1002, 1002, 1002 ] +[ 1002, 1002, 1002 ] +[ 1002, 1002, 1002 ] + + +-------------------- + 2 +-------------------- +{EXT_ELEM_PROP_10: NaN, EXT_ELEM_PROP_2: -99, EXT_ELEM_PROP_3: NaN, EXT_ELEM_PROP_4: -99, EXT_ELEM_PROP_6: -99, EXT_ELEM_PROP_7: NaN, EXT_ELEM_PROP_8: -99} + +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] + + + +set.elem_prop_keys(): [] + + +------------------------------------- + 120 MODFICATIONS +------------------------------------- + +PROP_1: 1.101 +PROP_10: 182 +PROP_3: 22 +PROP_4: 779 +PROP_5: 902 +PROP_6: 984 +PROP_7: 434 +PROP_8: 140 +PROP_9: 419 + +-------------------- + 0 +-------------------- +{EXT_ELEM_PROP_10: 11.041, EXT_ELEM_PROP_2: 2.241, EXT_ELEM_PROP_3: 3.341, EXT_ELEM_PROP_4: 4.441, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_6: 6.641, EXT_ELEM_PROP_7: 7.741, EXT_ELEM_PROP_8: 8.841} + +[ 1002, 1002, 1002 ] +[ 1002, 1002, 1002 ] +[ 1002, 1002, 1002 ] +[ 1002, 1002, 1002 ] +[ 1002, 1002, 1002 ] +[ 1002, 1002, 1002 ] +[ 1002, 1002, 1002 ] +[ 1002, 1002, 1002 ] +[ 1002, 1002, 1002 ] + + +-------------------- + 1 +-------------------- +{EXT_ELEM_PROP_10: Boogle 10-4, EXT_ELEM_PROP_2: -99, EXT_ELEM_PROP_3: NaN, EXT_ELEM_PROP_4: -99, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_6: Boogle 6-4, EXT_ELEM_PROP_7: Boogle 7-4, EXT_ELEM_PROP_8: Boogle 8-4} + +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] + + + +set.num_elem_props(): 0 +set.prop_index(PROP_10): 1 +set.size(): 2 + + +------------------------------------- + 125 MODFICATIONS +------------------------------------- + +PROP_1: 1.101 +PROP_10: 182 +PROP_3: 22 +PROP_4: 779 +PROP_5: 902 +PROP_6: 984 +PROP_7: 434 +PROP_9: 419 + +-------------------- + 0 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: 11.041, EXT_ELEM_PROP_2: 2.241, EXT_ELEM_PROP_3: 3.341, EXT_ELEM_PROP_4: 4.441, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_6: 6.641, EXT_ELEM_PROP_8: 8.841} + +[ 1002, 1002, 1002 ] +[ 1002, 1002, 1002 ] +[ 1002, 1002, 1002 ] +[ 1002, 1002, 1002 ] +[ 1002, 1002, 1002 ] +[ 1002, 1002, 1002 ] +[ 1002, 1002, 1002 ] +[ 1002, 1002, 1002 ] +[ 1002, 1002, 1002 ] + + +-------------------- + 1 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: Boogle 10-4, EXT_ELEM_PROP_2: -99, EXT_ELEM_PROP_3: NaN, EXT_ELEM_PROP_4: -99, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_6: Boogle 6-4, EXT_ELEM_PROP_8: Boogle 8-4} + +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] + + + +set.size(): 2 +set.get_extend_elem_prop(EXT_ELEM_PROP_2,0): 2.241 + + +------------------------------------- + 130 MODFICATIONS +------------------------------------- + +PROP_1: 1.101 +PROP_10: 182 +PROP_3: 22 +PROP_4: 779 +PROP_5: 902 +PROP_6: 984 +PROP_7: 434 +PROP_9: 419 + +-------------------- + 0 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: 11.041, EXT_ELEM_PROP_2: 2.241, EXT_ELEM_PROP_4: 4.441, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_6: 6.641, EXT_ELEM_PROP_7: NaN, EXT_ELEM_PROP_8: 8.841, EXT_ELEM_PROP_9: NaN} + +[ 1002, 1002, 1002 ] +[ 1002, 1002, 1002 ] +[ 1002, 1002, 1002 ] +[ 1002, 1002, 1002 ] + + +-------------------- + 1 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: NaN, EXT_ELEM_PROP_2: -99, EXT_ELEM_PROP_4: -99, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_6: NaN, EXT_ELEM_PROP_7: NaN, EXT_ELEM_PROP_8: NaN, EXT_ELEM_PROP_9: NaN} + +[ 1004, 1004, 1004 ] +[ 1004, 1004, 1004 ] +[ 1004, 1004, 1004 ] +[ 1004, 1004, 1004 ] +[ 1004, 1004, 1004 ] + + +-------------------- + 2 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: Boogle 10-4, EXT_ELEM_PROP_2: -99, EXT_ELEM_PROP_4: -99, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_6: Boogle 6-4, EXT_ELEM_PROP_7: NaN, EXT_ELEM_PROP_8: Boogle 8-4, EXT_ELEM_PROP_9: NaN} + +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] + + + +set.num_elem_props(): 0 +set.size(): 3 +set.num_elem_props(): 0 +set.elem_prop_keys(): [] + + +------------------------------------- + 135 MODFICATIONS +------------------------------------- + +PROP_1: 1.101 +PROP_10: 182 +PROP_3: 22 +PROP_4: 779 +PROP_5: 902 +PROP_6: 984 +PROP_7: 434 +PROP_9: 419 + +-------------------- + 0 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: 11.041, EXT_ELEM_PROP_2: 2.241, EXT_ELEM_PROP_4: 4.441, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_6: 6.641, EXT_ELEM_PROP_7: NaN, EXT_ELEM_PROP_8: 8.841, EXT_ELEM_PROP_9: NaN} + +[ 1002, 1002, 1002 ] +[ 1002, 1002, 1002 ] +[ 1002, 1002, 1002 ] +[ 1002, 1002, 1002 ] +[ 192, 192, 192 ] +[ 192, 192, 192 ] +[ 192, 192, 192 ] + + +-------------------- + 1 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: NaN, EXT_ELEM_PROP_2: -99, EXT_ELEM_PROP_4: -99, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_6: NaN, EXT_ELEM_PROP_7: NaN, EXT_ELEM_PROP_8: NaN, EXT_ELEM_PROP_9: NaN} + +[ 1010, 1010, 1010 ] +[ 1010, 1010, 1010 ] +[ 1010, 1010, 1010 ] +[ 1010, 1010, 1010 ] +[ 1010, 1010, 1010 ] +[ 1010, 1010, 1010 ] +[ 1010, 1010, 1010 ] + + +-------------------- + 2 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: NaN, EXT_ELEM_PROP_2: -99, EXT_ELEM_PROP_4: -99, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_6: NaN, EXT_ELEM_PROP_7: NaN, EXT_ELEM_PROP_8: NaN, EXT_ELEM_PROP_9: NaN} + +[ 1004, 1004, 1004 ] +[ 1004, 1004, 1004 ] +[ 1004, 1004, 1004 ] +[ 1004, 1004, 1004 ] +[ 1004, 1004, 1004 ] +[ 192, 192, 192 ] +[ 192, 192, 192 ] + + +-------------------- + 3 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: Boogle 10-4, EXT_ELEM_PROP_2: -99, EXT_ELEM_PROP_4: -99, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_6: Boogle 6-4, EXT_ELEM_PROP_7: NaN, EXT_ELEM_PROP_8: Boogle 8-4, EXT_ELEM_PROP_9: NaN} + +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] +[ 192, 192, 192 ] +[ 192, 192, 192 ] +[ 192, 192, 192 ] + + +-------------------- + 4 +-------------------- +{EXT_ELEM_PROP_1: 1.141, EXT_ELEM_PROP_10: 11.041, EXT_ELEM_PROP_2: 2.241, EXT_ELEM_PROP_4: 4.441, EXT_ELEM_PROP_5: 5.541, EXT_ELEM_PROP_6: 6.641, EXT_ELEM_PROP_7: 7.741, EXT_ELEM_PROP_8: 8.841, EXT_ELEM_PROP_9: 9.941} + +[ 1008, 1008, 1008 ] +[ 1008, 1008, 1008 ] +[ 1008, 1008, 1008 ] +[ 1008, 1008, 1008 ] +[ 192, 192, 192 ] +[ 192, 192, 192 ] +[ 192, 192, 192 ] + + +-------------------- + 5 +-------------------- +{EXT_ELEM_PROP_1: 1.181, EXT_ELEM_PROP_10: 11.081, EXT_ELEM_PROP_2: 2.281, EXT_ELEM_PROP_4: 4.481, EXT_ELEM_PROP_5: 5.581, EXT_ELEM_PROP_6: 6.681, EXT_ELEM_PROP_7: 7.781, EXT_ELEM_PROP_8: 8.881, EXT_ELEM_PROP_9: 9.981} + +[ 1001, 1001, 1001 ] +[ 1001, 1001, 1001 ] +[ 1001, 1001, 1001 ] +[ 1001, 1001, 1001 ] +[ 192, 192, 192 ] +[ 192, 192, 192 ] +[ 192, 192, 192 ] + + +-------------------- + 6 +-------------------- +{EXT_ELEM_PROP_1: 1.131, EXT_ELEM_PROP_10: 11.031, EXT_ELEM_PROP_2: 2.231, EXT_ELEM_PROP_4: 4.431, EXT_ELEM_PROP_5: 5.531, EXT_ELEM_PROP_6: 6.631, EXT_ELEM_PROP_7: 7.731, EXT_ELEM_PROP_8: 8.831, EXT_ELEM_PROP_9: 9.931} + +[ 1007, 1007, 1007 ] +[ 1007, 1007, 1007 ] +[ 1007, 1007, 1007 ] +[ 1007, 1007, 1007 ] +[ 1007, 1007, 1007 ] +[ 1007, 1007, 1007 ] +[ 192, 192, 192 ] + + + +set.prop(PROP_3): 22 +set.get_extend_elem_prop_header(): [ EXT_ELEM_PROP_1 EXT_ELEM_PROP_10 EXT_ELEM_PROP_2 EXT_ELEM_PROP_4 EXT_ELEM_PROP_5 EXT_ELEM_PROP_6 EXT_ELEM_PROP_7 EXT_ELEM_PROP_8 EXT_ELEM_PROP_9 ] +set.size(): 7 +set.has_elem_prop(ELEM_PROP_3): 0 +set.vsize(): 176 +set.bsize(): 168 +set.prop(PROP_5): 902 +set.has_extend_elem_prop(EXT_ELEM_PROP_4): 1 +set.bsize(): 168 + + +------------------------------------- + 140 MODFICATIONS +------------------------------------- + +PROP_1: 1.101 +PROP_10: 182 +PROP_3: 22 +PROP_4: 779 +PROP_5: 902 +PROP_6: 984 +PROP_7: 434 +PROP_9: 419 + +-------------------- + 0 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: NaN, EXT_ELEM_PROP_2: -99, EXT_ELEM_PROP_4: -99, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_6: NaN, EXT_ELEM_PROP_7: NaN, EXT_ELEM_PROP_8: NaN, EXT_ELEM_PROP_9: NaN} + +[ 1002, 1002, 1002 ] +[ 1002, 1002, 1002 ] +[ 1002, 1002, 1002 ] +[ 1002, 1002, 1002 ] +[ 1002, 1002, 1002 ] +[ 1002, 1002, 1002 ] + + +-------------------- + 1 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: 11.041, EXT_ELEM_PROP_2: 2.241, EXT_ELEM_PROP_4: 4.441, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_6: 6.641, EXT_ELEM_PROP_7: NaN, EXT_ELEM_PROP_8: 8.841, EXT_ELEM_PROP_9: NaN} + +[ 1002, 1002, 1002 ] +[ 1002, 1002, 1002 ] +[ 1002, 1002, 1002 ] +[ 1002, 1002, 1002 ] +[ 192, 192, 192 ] +[ 192, 192, 192 ] + + +-------------------- + 2 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: NaN, EXT_ELEM_PROP_2: -99, EXT_ELEM_PROP_4: -99, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_6: NaN, EXT_ELEM_PROP_7: NaN, EXT_ELEM_PROP_8: NaN, EXT_ELEM_PROP_9: NaN} + +[ 1010, 1010, 1010 ] +[ 1010, 1010, 1010 ] +[ 1010, 1010, 1010 ] +[ 1010, 1010, 1010 ] +[ 1010, 1010, 1010 ] +[ 1010, 1010, 1010 ] + + +-------------------- + 3 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: NaN, EXT_ELEM_PROP_2: -99, EXT_ELEM_PROP_4: -99, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_6: NaN, EXT_ELEM_PROP_7: NaN, EXT_ELEM_PROP_8: NaN, EXT_ELEM_PROP_9: NaN} + +[ 1004, 1004, 1004 ] +[ 1004, 1004, 1004 ] +[ 1004, 1004, 1004 ] +[ 1004, 1004, 1004 ] +[ 1004, 1004, 1004 ] +[ 192, 192, 192 ] + + +-------------------- + 4 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: Boogle 10-4, EXT_ELEM_PROP_2: -99, EXT_ELEM_PROP_4: -99, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_6: Boogle 6-4, EXT_ELEM_PROP_7: NaN, EXT_ELEM_PROP_8: Boogle 8-4, EXT_ELEM_PROP_9: NaN} + +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] +[ 192, 192, 192 ] +[ 192, 192, 192 ] + + +-------------------- + 5 +-------------------- +{EXT_ELEM_PROP_1: 1.141, EXT_ELEM_PROP_10: 11.041, EXT_ELEM_PROP_2: 2.241, EXT_ELEM_PROP_4: 4.441, EXT_ELEM_PROP_5: 5.541, EXT_ELEM_PROP_6: 6.641, EXT_ELEM_PROP_7: 7.741, EXT_ELEM_PROP_8: 8.841, EXT_ELEM_PROP_9: 9.941} + +[ 1008, 1008, 1008 ] +[ 1008, 1008, 1008 ] +[ 1008, 1008, 1008 ] +[ 1008, 1008, 1008 ] +[ 192, 192, 192 ] +[ 192, 192, 192 ] + + +-------------------- + 6 +-------------------- +{EXT_ELEM_PROP_1: 1.181, EXT_ELEM_PROP_10: 11.081, EXT_ELEM_PROP_2: 2.281, EXT_ELEM_PROP_4: 4.481, EXT_ELEM_PROP_5: 5.581, EXT_ELEM_PROP_6: 6.681, EXT_ELEM_PROP_7: 7.781, EXT_ELEM_PROP_8: 8.881, EXT_ELEM_PROP_9: 9.981} + +[ 1001, 1001, 1001 ] +[ 1001, 1001, 1001 ] +[ 1001, 1001, 1001 ] +[ 1001, 1001, 1001 ] +[ 192, 192, 192 ] +[ 192, 192, 192 ] + + +-------------------- + 7 +-------------------- +{EXT_ELEM_PROP_1: 1.131, EXT_ELEM_PROP_10: 11.031, EXT_ELEM_PROP_2: 2.231, EXT_ELEM_PROP_4: 4.431, EXT_ELEM_PROP_5: 5.531, EXT_ELEM_PROP_6: 6.631, EXT_ELEM_PROP_7: 7.731, EXT_ELEM_PROP_8: 8.831, EXT_ELEM_PROP_9: 9.931} + +[ 1007, 1007, 1007 ] +[ 1007, 1007, 1007 ] +[ 1007, 1007, 1007 ] +[ 1007, 1007, 1007 ] +[ 1007, 1007, 1007 ] +[ 1007, 1007, 1007 ] + + + +set.get_extend_elem_prop_header(): [ EXT_ELEM_PROP_1 EXT_ELEM_PROP_10 EXT_ELEM_PROP_2 EXT_ELEM_PROP_4 EXT_ELEM_PROP_5 EXT_ELEM_PROP_6 EXT_ELEM_PROP_7 EXT_ELEM_PROP_8 EXT_ELEM_PROP_9 ] +set.num_extend_elem_props(): 9 +set.elem_prop_keys(): [] +set.prop_index(PROP_3): 2 + + +------------------------------------- + 145 MODFICATIONS +------------------------------------- + +PROP_1: 1.101 +PROP_10: 182 +PROP_3: 22 +PROP_4: 779 +PROP_5: 902 +PROP_6: 984 +PROP_7: 434 +PROP_9: 419 + +-------------------- + 0 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: NaN, EXT_ELEM_PROP_2: -99, EXT_ELEM_PROP_4: -99, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_6: NaN, EXT_ELEM_PROP_7: NaN, EXT_ELEM_PROP_8: NaN, EXT_ELEM_PROP_9: NaN} + +[ 1002, 1002, 1002 ] +[ 1002, 1002, 1002 ] +[ 1002, 1002, 1002 ] +[ 1002, 1002, 1002 ] +[ 1002, 1002, 1002 ] +[ 1002, 1002, 1002 ] + + +-------------------- + 1 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: 11.041, EXT_ELEM_PROP_2: 2.241, EXT_ELEM_PROP_4: 4.441, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_6: 6.641, EXT_ELEM_PROP_7: NaN, EXT_ELEM_PROP_8: 8.841, EXT_ELEM_PROP_9: NaN} + +[ 1002, 1002, 1002 ] +[ 1002, 1002, 1002 ] +[ 1002, 1002, 1002 ] +[ 1002, 1002, 1002 ] +[ 192, 192, 192 ] +[ 192, 192, 192 ] + + +-------------------- + 2 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: NaN, EXT_ELEM_PROP_2: -99, EXT_ELEM_PROP_4: -99, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_6: NaN, EXT_ELEM_PROP_7: NaN, EXT_ELEM_PROP_8: NaN, EXT_ELEM_PROP_9: NaN} + +[ 1010, 1010, 1010 ] +[ 1010, 1010, 1010 ] +[ 1010, 1010, 1010 ] +[ 1010, 1010, 1010 ] +[ 1010, 1010, 1010 ] +[ 1010, 1010, 1010 ] + + +-------------------- + 3 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: NaN, EXT_ELEM_PROP_2: -99, EXT_ELEM_PROP_4: -99, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_6: NaN, EXT_ELEM_PROP_7: NaN, EXT_ELEM_PROP_8: NaN, EXT_ELEM_PROP_9: NaN} + +[ 1004, 1004, 1004 ] +[ 1004, 1004, 1004 ] +[ 1004, 1004, 1004 ] +[ 1004, 1004, 1004 ] +[ 1004, 1004, 1004 ] +[ 192, 192, 192 ] + + +-------------------- + 4 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: Boogle 10-4, EXT_ELEM_PROP_2: -99, EXT_ELEM_PROP_4: -99, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_6: Boogle 6-4, EXT_ELEM_PROP_7: NaN, EXT_ELEM_PROP_8: Boogle 8-4, EXT_ELEM_PROP_9: NaN} + +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] +[ 192, 192, 192 ] +[ 192, 192, 192 ] + + +-------------------- + 5 +-------------------- +{EXT_ELEM_PROP_1: 1.141, EXT_ELEM_PROP_10: 11.041, EXT_ELEM_PROP_2: 2.241, EXT_ELEM_PROP_4: 4.441, EXT_ELEM_PROP_5: 5.541, EXT_ELEM_PROP_6: 6.641, EXT_ELEM_PROP_7: 7.741, EXT_ELEM_PROP_8: 8.841, EXT_ELEM_PROP_9: 9.941} + +[ 1008, 1008, 1008 ] +[ 1008, 1008, 1008 ] +[ 1008, 1008, 1008 ] +[ 1008, 1008, 1008 ] +[ 192, 192, 192 ] +[ 192, 192, 192 ] + + +-------------------- + 6 +-------------------- +{EXT_ELEM_PROP_1: 1.111, EXT_ELEM_PROP_10: 11.011, EXT_ELEM_PROP_2: 2.211, EXT_ELEM_PROP_4: 4.411, EXT_ELEM_PROP_5: 5.511, EXT_ELEM_PROP_6: 6.611, EXT_ELEM_PROP_7: 7.711, EXT_ELEM_PROP_8: 8.811, EXT_ELEM_PROP_9: 9.911} + +[ 1001, 1001, 1001 ] +[ 1001, 1001, 1001 ] +[ 1001, 1001, 1001 ] +[ 1001, 1001, 1001 ] +[ 192, 192, 192 ] +[ 192, 192, 192 ] + + +-------------------- + 7 +-------------------- +{EXT_ELEM_PROP_1: 1.131, EXT_ELEM_PROP_10: 11.031, EXT_ELEM_PROP_2: 2.231, EXT_ELEM_PROP_4: 4.431, EXT_ELEM_PROP_5: 5.531, EXT_ELEM_PROP_6: 6.631, EXT_ELEM_PROP_7: 7.731, EXT_ELEM_PROP_8: 8.831, EXT_ELEM_PROP_9: 9.931} + +[ 1007, 1007, 1007 ] +[ 1007, 1007, 1007 ] +[ 1007, 1007, 1007 ] +[ 1007, 1007, 1007 ] +[ 1007, 1007, 1007 ] +[ 1007, 1007, 1007 ] + + +-------------------- + 8 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: NaN, EXT_ELEM_PROP_2: -99, EXT_ELEM_PROP_4: -99, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_6: NaN, EXT_ELEM_PROP_7: NaN, EXT_ELEM_PROP_8: NaN, EXT_ELEM_PROP_9: NaN} + +[ 561, 561, 561 ] +[ 561, 561, 561 ] +[ 561, 561, 561 ] +[ 561, 561, 561 ] +[ 561, 561, 561 ] +[ 561, 561, 561 ] + + +-------------------- + 9 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: NaN, EXT_ELEM_PROP_2: -99, EXT_ELEM_PROP_4: -99, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_6: NaN, EXT_ELEM_PROP_7: NaN, EXT_ELEM_PROP_8: NaN, EXT_ELEM_PROP_9: NaN} + +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] + + + +set.num_props(): 8 + + +------------------------------------- + 150 MODFICATIONS +------------------------------------- + +PROP_1: 1.101 +PROP_10: 182 +PROP_3: 22 +PROP_4: 779 +PROP_5: 902 +PROP_6: 984 +PROP_7: 434 +PROP_9: 419 + +-------------------- + 0 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: NaN, EXT_ELEM_PROP_2: -99, EXT_ELEM_PROP_4: -99, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_6: NaN, EXT_ELEM_PROP_7: NaN, EXT_ELEM_PROP_8: NaN, EXT_ELEM_PROP_9: NaN} + +[ 1002, 1002, 1002 ] +[ 1002, 1002, 1002 ] +[ 1002, 1002, 1002 ] +[ 1002, 1002, 1002 ] +[ 1002, 1002, 1002 ] +[ 1002, 1002, 1002 ] + + +-------------------- + 1 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: 11.041, EXT_ELEM_PROP_2: 2.241, EXT_ELEM_PROP_4: 4.441, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_6: 6.641, EXT_ELEM_PROP_7: NaN, EXT_ELEM_PROP_8: 8.841, EXT_ELEM_PROP_9: NaN} + +[ 1002, 1002, 1002 ] +[ 1002, 1002, 1002 ] +[ 1002, 1002, 1002 ] +[ 1002, 1002, 1002 ] +[ 192, 192, 192 ] +[ 192, 192, 192 ] + + +-------------------- + 2 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: NaN, EXT_ELEM_PROP_2: -99, EXT_ELEM_PROP_4: -99, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_6: NaN, EXT_ELEM_PROP_7: NaN, EXT_ELEM_PROP_8: NaN, EXT_ELEM_PROP_9: NaN} + +[ 1010, 1010, 1010 ] +[ 1010, 1010, 1010 ] +[ 1010, 1010, 1010 ] +[ 1010, 1010, 1010 ] +[ 1010, 1010, 1010 ] +[ 1010, 1010, 1010 ] + + +-------------------- + 3 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: NaN, EXT_ELEM_PROP_2: -99, EXT_ELEM_PROP_4: -99, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_6: NaN, EXT_ELEM_PROP_7: NaN, EXT_ELEM_PROP_8: NaN, EXT_ELEM_PROP_9: NaN} + +[ 1004, 1004, 1004 ] +[ 1004, 1004, 1004 ] +[ 1004, 1004, 1004 ] +[ 1004, 1004, 1004 ] +[ 1004, 1004, 1004 ] +[ 192, 192, 192 ] + + +-------------------- + 4 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: Boogle 10-4, EXT_ELEM_PROP_2: -99, EXT_ELEM_PROP_4: -99, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_6: Boogle 6-4, EXT_ELEM_PROP_7: NaN, EXT_ELEM_PROP_8: Boogle 8-4, EXT_ELEM_PROP_9: NaN} + +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] +[ 192, 192, 192 ] +[ 192, 192, 192 ] + + +-------------------- + 5 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: NaN, EXT_ELEM_PROP_2: -99, EXT_ELEM_PROP_4: -99, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_6: NaN, EXT_ELEM_PROP_7: NaN, EXT_ELEM_PROP_8: NaN, EXT_ELEM_PROP_9: NaN} + +[ 1001, 1001, 1001 ] +[ 1001, 1001, 1001 ] +[ 1001, 1001, 1001 ] +[ 1001, 1001, 1001 ] +[ 1001, 1001, 1001 ] +[ 1001, 1001, 1001 ] + + +-------------------- + 6 +-------------------- +{EXT_ELEM_PROP_1: 1.141, EXT_ELEM_PROP_10: 11.041, EXT_ELEM_PROP_2: 2.241, EXT_ELEM_PROP_4: 4.441, EXT_ELEM_PROP_5: 5.541, EXT_ELEM_PROP_6: 6.641, EXT_ELEM_PROP_7: 7.741, EXT_ELEM_PROP_8: 8.841, EXT_ELEM_PROP_9: 9.941} + +[ 1008, 1008, 1008 ] +[ 1008, 1008, 1008 ] +[ 1008, 1008, 1008 ] +[ 1008, 1008, 1008 ] +[ 192, 192, 192 ] +[ 192, 192, 192 ] + + +-------------------- + 7 +-------------------- +{EXT_ELEM_PROP_1: 1.111, EXT_ELEM_PROP_10: 11.011, EXT_ELEM_PROP_2: 2.211, EXT_ELEM_PROP_4: 4.411, EXT_ELEM_PROP_5: 5.511, EXT_ELEM_PROP_6: 6.611, EXT_ELEM_PROP_7: 7.711, EXT_ELEM_PROP_8: 8.811, EXT_ELEM_PROP_9: 9.911} + +[ 1001, 1001, 1001 ] +[ 1001, 1001, 1001 ] +[ 1001, 1001, 1001 ] +[ 1001, 1001, 1001 ] +[ 192, 192, 192 ] +[ 192, 192, 192 ] + + +-------------------- + 8 +-------------------- +{EXT_ELEM_PROP_1: 1.131, EXT_ELEM_PROP_10: 11.031, EXT_ELEM_PROP_2: 2.231, EXT_ELEM_PROP_4: 4.431, EXT_ELEM_PROP_5: 5.531, EXT_ELEM_PROP_6: 6.631, EXT_ELEM_PROP_7: 7.731, EXT_ELEM_PROP_8: 8.831, EXT_ELEM_PROP_9: 9.931} + +[ 1007, 1007, 1007 ] +[ 1007, 1007, 1007 ] +[ 1007, 1007, 1007 ] +[ 1007, 1007, 1007 ] +[ 1007, 1007, 1007 ] +[ 1007, 1007, 1007 ] + + +-------------------- + 9 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: NaN, EXT_ELEM_PROP_2: -99, EXT_ELEM_PROP_4: -99, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_6: NaN, EXT_ELEM_PROP_7: NaN, EXT_ELEM_PROP_8: NaN, EXT_ELEM_PROP_9: NaN} + +[ 561, 561, 561 ] +[ 561, 561, 561 ] +[ 561, 561, 561 ] +[ 561, 561, 561 ] +[ 561, 561, 561 ] +[ 561, 561, 561 ] + + +-------------------- + 10 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: NaN, EXT_ELEM_PROP_2: -99, EXT_ELEM_PROP_4: -99, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_6: NaN, EXT_ELEM_PROP_7: NaN, EXT_ELEM_PROP_8: NaN, EXT_ELEM_PROP_9: NaN} + +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] + + +-------------------- + 11 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: NaN, EXT_ELEM_PROP_2: -99, EXT_ELEM_PROP_4: -99, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_6: NaN, EXT_ELEM_PROP_7: NaN, EXT_ELEM_PROP_8: NaN, EXT_ELEM_PROP_9: NaN} + +[ 1008, 1008, 1008 ] +[ 1008, 1008, 1008 ] +[ 1008, 1008, 1008 ] +[ 1008, 1008, 1008 ] +[ 1008, 1008, 1008 ] +[ 1008, 1008, 1008 ] + + +-------------------- + 12 +-------------------- +{EXT_ELEM_PROP_1: 1.151, EXT_ELEM_PROP_10: 11.051, EXT_ELEM_PROP_2: 2.251, EXT_ELEM_PROP_4: 4.451, EXT_ELEM_PROP_5: 5.551, EXT_ELEM_PROP_6: 6.651, EXT_ELEM_PROP_7: 7.751, EXT_ELEM_PROP_8: 8.851, EXT_ELEM_PROP_9: 9.951} + +[ 1002, 1002, 1002 ] +[ 1002, 1002, 1002 ] +[ 1002, 1002, 1002 ] +[ 1002, 1002, 1002 ] +[ 1002, 1002, 1002 ] +[ 1002, 1002, 1002 ] + + + +set.elem_prop_keys(): [] +set.has_elem_prop(ELEM_PROP_10): 0 +set.vsize(): 242 +set.has_prop(PROP_8): 0 + + +------------------------------------- + 155 MODFICATIONS +------------------------------------- + +PROP_1: 1.101 +PROP_10: 182 +PROP_2: 692 +PROP_3: 22 +PROP_4: 779 +PROP_5: 902 +PROP_6: 984 +PROP_7: 434 +PROP_8: 147 +PROP_9: 419 + +-------------------- + 0 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: NaN, EXT_ELEM_PROP_2: -99, EXT_ELEM_PROP_4: -99, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_6: NaN, EXT_ELEM_PROP_7: NaN, EXT_ELEM_PROP_8: NaN, EXT_ELEM_PROP_9: NaN} + +[ 1002, 1002, 1002 ] +[ 1002, 1002, 1002 ] + + +-------------------- + 1 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: 11.041, EXT_ELEM_PROP_2: 2.241, EXT_ELEM_PROP_4: 4.441, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_6: 6.641, EXT_ELEM_PROP_7: NaN, EXT_ELEM_PROP_8: 8.841, EXT_ELEM_PROP_9: NaN} + +[ 1002, 1002, 1002 ] +[ 1002, 1002, 1002 ] + + +-------------------- + 2 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: NaN, EXT_ELEM_PROP_2: -99, EXT_ELEM_PROP_4: -99, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_6: NaN, EXT_ELEM_PROP_7: NaN, EXT_ELEM_PROP_8: NaN, EXT_ELEM_PROP_9: NaN} + +[ 1010, 1010, 1010 ] +[ 1010, 1010, 1010 ] + + +-------------------- + 3 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: NaN, EXT_ELEM_PROP_2: -99, EXT_ELEM_PROP_4: -99, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_6: NaN, EXT_ELEM_PROP_7: NaN, EXT_ELEM_PROP_8: NaN, EXT_ELEM_PROP_9: NaN} + +[ 1004, 1004, 1004 ] +[ 1004, 1004, 1004 ] + + +-------------------- + 4 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: Boogle 10-4, EXT_ELEM_PROP_2: -99, EXT_ELEM_PROP_4: -99, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_6: Boogle 6-4, EXT_ELEM_PROP_7: NaN, EXT_ELEM_PROP_8: Boogle 8-4, EXT_ELEM_PROP_9: NaN} + +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] + + +-------------------- + 5 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: NaN, EXT_ELEM_PROP_2: -99, EXT_ELEM_PROP_4: -99, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_6: NaN, EXT_ELEM_PROP_7: NaN, EXT_ELEM_PROP_8: NaN, EXT_ELEM_PROP_9: NaN} + +[ 245, 245, 245 ] +[ 245, 245, 245 ] + + +-------------------- + 6 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: NaN, EXT_ELEM_PROP_2: -99, EXT_ELEM_PROP_4: -99, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_6: NaN, EXT_ELEM_PROP_7: NaN, EXT_ELEM_PROP_8: NaN, EXT_ELEM_PROP_9: NaN} + +[ 245, 245, 245 ] +[ 245, 245, 245 ] + + +-------------------- + 7 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: NaN, EXT_ELEM_PROP_2: -99, EXT_ELEM_PROP_4: -99, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_6: NaN, EXT_ELEM_PROP_7: NaN, EXT_ELEM_PROP_8: NaN, EXT_ELEM_PROP_9: NaN} + +[ 245, 245, 245 ] +[ 245, 245, 245 ] + + + +set.get_extend_elem_prop(EXT_ELEM_PROP_5,3): -99 + + +------------------------------------- + 160 MODFICATIONS +------------------------------------- + +PROP_1: 1.101 +PROP_10: 182 +PROP_2: 692 +PROP_3: 22 +PROP_4: 779 +PROP_5: 902 +PROP_6: 984 +PROP_7: 434 +PROP_8: 147 +PROP_9: 419 + +-------------------- + 0 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: NaN, EXT_ELEM_PROP_2: 640, EXT_ELEM_PROP_4: -99, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_6: NaN, EXT_ELEM_PROP_7: NaN, EXT_ELEM_PROP_8: NaN, EXT_ELEM_PROP_9: NaN} + +[ 1002, 1002, 1002 ] +[ 1002, 1002, 1002 ] + + +-------------------- + 1 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: 11.041, EXT_ELEM_PROP_2: 2.241, EXT_ELEM_PROP_4: 4.441, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_6: 6.641, EXT_ELEM_PROP_7: NaN, EXT_ELEM_PROP_8: NaN, EXT_ELEM_PROP_9: NaN} + +[ 1002, 1002, 1002 ] +[ 1002, 1002, 1002 ] + + +-------------------- + 2 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: NaN, EXT_ELEM_PROP_2: -99, EXT_ELEM_PROP_4: -99, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_6: NaN, EXT_ELEM_PROP_7: NaN, EXT_ELEM_PROP_8: NaN, EXT_ELEM_PROP_9: NaN} + +[ 1010, 1010, 1010 ] +[ 1010, 1010, 1010 ] + + +-------------------- + 3 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: NaN, EXT_ELEM_PROP_2: -99, EXT_ELEM_PROP_4: -99, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_6: NaN, EXT_ELEM_PROP_7: NaN, EXT_ELEM_PROP_8: NaN, EXT_ELEM_PROP_9: NaN} + +[ 1004, 1004, 1004 ] +[ 1004, 1004, 1004 ] + + +-------------------- + 4 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: Boogle 10-4, EXT_ELEM_PROP_2: -99, EXT_ELEM_PROP_4: -99, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_6: Boogle 6-4, EXT_ELEM_PROP_7: NaN, EXT_ELEM_PROP_8: NaN, EXT_ELEM_PROP_9: NaN} + +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] + + +-------------------- + 5 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: NaN, EXT_ELEM_PROP_2: -99, EXT_ELEM_PROP_4: -99, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_6: NaN, EXT_ELEM_PROP_7: NaN, EXT_ELEM_PROP_8: NaN, EXT_ELEM_PROP_9: NaN} + +[ 245, 245, 245 ] +[ 245, 245, 245 ] + + +-------------------- + 6 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: NaN, EXT_ELEM_PROP_2: -99, EXT_ELEM_PROP_4: -99, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_6: NaN, EXT_ELEM_PROP_7: NaN, EXT_ELEM_PROP_8: NaN, EXT_ELEM_PROP_9: NaN} + +[ 245, 245, 245 ] +[ 245, 245, 245 ] + + +-------------------- + 7 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: NaN, EXT_ELEM_PROP_2: -99, EXT_ELEM_PROP_4: -99, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_6: NaN, EXT_ELEM_PROP_7: NaN, EXT_ELEM_PROP_8: NaN, EXT_ELEM_PROP_9: NaN} + +[ 245, 245, 245 ] +[ 245, 245, 245 ] + + + +set.num_props(): 10 +set.has_extend_elem_prop(EXT_ELEM_PROP_9): 1 +set.elem_prop_keys(): [] +set.prop_keys(): [ PROP_1 PROP_10 PROP_2 PROP_3 PROP_4 PROP_5 PROP_6 PROP_7 PROP_8 PROP_9 ] +set.prop(PROP_9): 419 +set.size(): 8 + + +------------------------------------- + 165 MODFICATIONS +------------------------------------- + +PROP_1: 1.101 +PROP_10: 182 +PROP_2: 692 +PROP_3: 22 +PROP_4: 779 +PROP_5: 902 +PROP_6: 984 +PROP_7: 434 +PROP_8: 147 +PROP_9: 419 + +-------------------- + 0 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: NaN, EXT_ELEM_PROP_4: -99, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_6: NaN, EXT_ELEM_PROP_7: NaN, EXT_ELEM_PROP_8: NaN, EXT_ELEM_PROP_9: NaN} + +[ 1002, 1002, 1002 ] +[ 1002, 1002, 1002 ] + + +-------------------- + 1 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: 11.041, EXT_ELEM_PROP_4: 4.441, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_6: 6.641, EXT_ELEM_PROP_7: NaN, EXT_ELEM_PROP_8: NaN, EXT_ELEM_PROP_9: NaN} + +[ 1002, 1002, 1002 ] +[ 1002, 1002, 1002 ] + + +-------------------- + 2 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: NaN, EXT_ELEM_PROP_4: -99, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_6: NaN, EXT_ELEM_PROP_7: NaN, EXT_ELEM_PROP_8: NaN, EXT_ELEM_PROP_9: NaN} + +[ 1010, 1010, 1010 ] +[ 1010, 1010, 1010 ] + + +-------------------- + 3 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: NaN, EXT_ELEM_PROP_4: -99, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_6: NaN, EXT_ELEM_PROP_7: NaN, EXT_ELEM_PROP_8: NaN, EXT_ELEM_PROP_9: NaN} + +[ 1004, 1004, 1004 ] +[ 1004, 1004, 1004 ] + + +-------------------- + 4 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: Boogle 10-4, EXT_ELEM_PROP_4: -99, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_6: Boogle 6-4, EXT_ELEM_PROP_7: NaN, EXT_ELEM_PROP_8: NaN, EXT_ELEM_PROP_9: NaN} + +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] + + +-------------------- + 5 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: NaN, EXT_ELEM_PROP_4: -99, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_6: NaN, EXT_ELEM_PROP_7: NaN, EXT_ELEM_PROP_8: NaN, EXT_ELEM_PROP_9: NaN} + +[ 245, 245, 245 ] +[ 245, 245, 245 ] + + +-------------------- + 6 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: NaN, EXT_ELEM_PROP_4: -99, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_6: NaN, EXT_ELEM_PROP_7: NaN, EXT_ELEM_PROP_8: NaN, EXT_ELEM_PROP_9: NaN} + +[ 245, 245, 245 ] +[ 245, 245, 245 ] + + +-------------------- + 7 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: NaN, EXT_ELEM_PROP_4: -99, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_6: NaN, EXT_ELEM_PROP_7: NaN, EXT_ELEM_PROP_8: NaN, EXT_ELEM_PROP_9: NaN} + +[ 245, 245, 245 ] +[ 245, 245, 245 ] + + + + + +------------------------------------- + 170 MODFICATIONS +------------------------------------- + +PROP_1: 1.101 +PROP_10: 182 +PROP_2: 692 +PROP_3: 22 +PROP_4: 779 +PROP_5: 902 +PROP_6: 984 +PROP_7: 434 + +-------------------- + 0 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: NaN, EXT_ELEM_PROP_4: -99, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_7: NaN, EXT_ELEM_PROP_8: NaN, EXT_ELEM_PROP_9: NaN} + +[ 1002, 1002, 1002 ] +[ 1002, 1002, 1002 ] + + +-------------------- + 1 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: 11.041, EXT_ELEM_PROP_4: 4.441, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_7: NaN, EXT_ELEM_PROP_8: NaN, EXT_ELEM_PROP_9: NaN} + +[ 1002, 1002, 1002 ] +[ 1002, 1002, 1002 ] + + +-------------------- + 2 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: NaN, EXT_ELEM_PROP_4: -99, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_7: NaN, EXT_ELEM_PROP_8: NaN, EXT_ELEM_PROP_9: NaN} + +[ 1010, 1010, 1010 ] +[ 1010, 1010, 1010 ] + + +-------------------- + 3 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: NaN, EXT_ELEM_PROP_4: -99, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_7: NaN, EXT_ELEM_PROP_8: NaN, EXT_ELEM_PROP_9: NaN} + +[ 1004, 1004, 1004 ] +[ 1004, 1004, 1004 ] + + +-------------------- + 4 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: Boogle 10-4, EXT_ELEM_PROP_4: -99, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_7: NaN, EXT_ELEM_PROP_8: NaN, EXT_ELEM_PROP_9: NaN} + +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] + + +-------------------- + 5 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: NaN, EXT_ELEM_PROP_4: -99, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_7: NaN, EXT_ELEM_PROP_8: NaN, EXT_ELEM_PROP_9: NaN} + +[ 245, 245, 245 ] +[ 245, 245, 245 ] + + +-------------------- + 6 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: NaN, EXT_ELEM_PROP_4: -99, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_7: NaN, EXT_ELEM_PROP_8: NaN, EXT_ELEM_PROP_9: NaN} + +[ 245, 245, 245 ] +[ 245, 245, 245 ] + + +-------------------- + 7 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: NaN, EXT_ELEM_PROP_4: -99, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_7: NaN, EXT_ELEM_PROP_8: NaN, EXT_ELEM_PROP_9: NaN} + +[ 245, 245, 245 ] +[ 245, 245, 245 ] + + +-------------------- + 8 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: NaN, EXT_ELEM_PROP_4: -99, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_7: NaN, EXT_ELEM_PROP_8: NaN, EXT_ELEM_PROP_9: NaN} + +[ 1007, 1007, 1007 ] +[ 1007, 1007, 1007 ] + + + +set.num_props(): 8 +set.size(): 1 +set.prop_index(PROP_3): 3 +set.get_extend_elem_prop_header(): [ EXT_ELEM_PROP_1 EXT_ELEM_PROP_10 EXT_ELEM_PROP_4 EXT_ELEM_PROP_5 EXT_ELEM_PROP_7 EXT_ELEM_PROP_8 EXT_ELEM_PROP_9 ] + + +------------------------------------- + 175 MODFICATIONS +------------------------------------- + +PROP_1: 1.101 +PROP_10: 182 +PROP_2: 692 +PROP_3: 22 +PROP_4: 779 +PROP_5: 902 +PROP_6: 984 +PROP_7: 434 + + +set.num_extend_elem_props(): 6 + + +------------------------------------- + 180 MODFICATIONS +------------------------------------- + +PROP_1: 1.101 +PROP_10: 182 +PROP_2: 692 +PROP_3: 22 +PROP_4: 779 +PROP_5: 902 +PROP_6: 984 +PROP_7: 434 + + +set.bsize(): 0 +set.elem_prop_keys(): [] +set.bsize(): 0 +set.size(): 0 +set.prop_keys(): [ PROP_1 PROP_10 PROP_2 PROP_3 PROP_4 PROP_5 PROP_6 PROP_7 ] +set.elem_prop_keys(): [] +set.prop_keys(): [ PROP_1 PROP_10 PROP_2 PROP_3 PROP_4 PROP_5 PROP_6 PROP_7 PROP_8 PROP_9 ] + + +------------------------------------- + 185 MODFICATIONS +------------------------------------- + +PROP_1: 1.101 +PROP_10: 182 +PROP_2: 692 +PROP_3: 22 +PROP_4: 779 +PROP_5: 902 +PROP_6: 984 +PROP_7: 434 +PROP_8: 859 +PROP_9: 835 + + +set.has_prop(PROP_9): 1 +set.get_extend_elem_prop_header(): [ EXT_ELEM_PROP_1 EXT_ELEM_PROP_10 EXT_ELEM_PROP_5 EXT_ELEM_PROP_8 EXT_ELEM_PROP_9 ] +set.has_prop(PROP_2): 1 +set.has_extend_elem_prop(EXT_ELEM_PROP_8): 1 +set.has_extend_elem_prop(EXT_ELEM_PROP_3): 0 +set.num_extend_elem_props(): 5 +set.bsize(): 0 +set.get_extend_elem_prop(EXT_ELEM_PROP_9,6): NaN + + +------------------------------------- + 190 MODFICATIONS +------------------------------------- + +PROP_1: 1.101 +PROP_10: 182 +PROP_2: 692 +PROP_3: 22 +PROP_4: 779 +PROP_5: 902 +PROP_6: 984 +PROP_7: 434 +PROP_8: 859 +PROP_9: 835 + +-------------------- + 0 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: -99, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_7: -99, EXT_ELEM_PROP_8: NaN, EXT_ELEM_PROP_9: NaN} + +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 576, 576, 576 ] + + +-------------------- + 1 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: -99, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_7: -99, EXT_ELEM_PROP_8: NaN, EXT_ELEM_PROP_9: NaN} + +[ 1005, 1005, 1005 ] +[ 1005, 1005, 1005 ] +[ 1005, 1005, 1005 ] +[ 1005, 1005, 1005 ] + + +-------------------- + 2 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: -99, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_7: -99, EXT_ELEM_PROP_8: NaN, EXT_ELEM_PROP_9: NaN} + +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 576, 576, 576 ] + + +-------------------- + 3 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: -99, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_7: -99, EXT_ELEM_PROP_8: NaN, EXT_ELEM_PROP_9: NaN} + +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 576, 576, 576 ] + + +-------------------- + 4 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: -99, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_7: -99, EXT_ELEM_PROP_8: NaN, EXT_ELEM_PROP_9: NaN} + +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 576, 576, 576 ] + + +-------------------- + 5 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: -99, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_7: -99, EXT_ELEM_PROP_8: NaN, EXT_ELEM_PROP_9: NaN} + +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 576, 576, 576 ] + + +-------------------- + 6 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: -99, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_7: -99, EXT_ELEM_PROP_8: NaN, EXT_ELEM_PROP_9: NaN} + +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 576, 576, 576 ] + + +-------------------- + 7 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: -99, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_7: -99, EXT_ELEM_PROP_8: NaN, EXT_ELEM_PROP_9: NaN} + +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 576, 576, 576 ] + + +-------------------- + 8 +-------------------- +{EXT_ELEM_PROP_1: 1.171, EXT_ELEM_PROP_10: 11.071, EXT_ELEM_PROP_5: 5.571, EXT_ELEM_PROP_7: 7.771, EXT_ELEM_PROP_8: 8.871, EXT_ELEM_PROP_9: 9.971} + +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 576, 576, 576 ] + + +-------------------- + 9 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: -99, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_7: -99, EXT_ELEM_PROP_8: NaN, EXT_ELEM_PROP_9: NaN} + +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 576, 576, 576 ] + + + +set.bsize(): 270 +set.prop_keys(): [ PROP_1 PROP_10 PROP_2 PROP_3 PROP_4 PROP_5 PROP_6 PROP_7 PROP_8 PROP_9 ] + + +------------------------------------- + 195 MODFICATIONS +------------------------------------- + +PROP_1: 1.101 +PROP_10: 182 +PROP_2: 692 +PROP_3: 22 +PROP_4: 779 +PROP_5: 902 +PROP_6: 153 +PROP_7: 434 +PROP_8: 859 +PROP_9: 835 + +-------------------- + 0 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: -99, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_7: -99, EXT_ELEM_PROP_8: NaN, EXT_ELEM_PROP_9: NaN} + +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 337, 337, 337 ] +[ 337, 337, 337 ] +[ 337, 337, 337 ] +[ 337, 337, 337 ] +[ 337, 337, 337 ] + + +-------------------- + 1 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: -99, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_7: -99, EXT_ELEM_PROP_8: NaN, EXT_ELEM_PROP_9: NaN} + +[ 1005, 1005, 1005 ] +[ 1005, 1005, 1005 ] +[ 1005, 1005, 1005 ] +[ 1005, 1005, 1005 ] +[ 337, 337, 337 ] +[ 337, 337, 337 ] +[ 337, 337, 337 ] +[ 337, 337, 337 ] +[ 337, 337, 337 ] + + +-------------------- + 2 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: -99, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_7: 493, EXT_ELEM_PROP_8: NaN, EXT_ELEM_PROP_9: NaN} + +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 337, 337, 337 ] +[ 337, 337, 337 ] +[ 337, 337, 337 ] +[ 337, 337, 337 ] +[ 337, 337, 337 ] + + +-------------------- + 3 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: -99, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_7: -99, EXT_ELEM_PROP_8: NaN, EXT_ELEM_PROP_9: NaN} + +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 337, 337, 337 ] +[ 337, 337, 337 ] +[ 337, 337, 337 ] +[ 337, 337, 337 ] +[ 337, 337, 337 ] + + +-------------------- + 4 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: -99, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_7: -99, EXT_ELEM_PROP_8: NaN, EXT_ELEM_PROP_9: NaN} + +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 337, 337, 337 ] +[ 337, 337, 337 ] +[ 337, 337, 337 ] +[ 337, 337, 337 ] +[ 337, 337, 337 ] + + +-------------------- + 5 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: -99, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_7: -99, EXT_ELEM_PROP_8: NaN, EXT_ELEM_PROP_9: NaN} + +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 337, 337, 337 ] +[ 337, 337, 337 ] +[ 337, 337, 337 ] +[ 337, 337, 337 ] +[ 337, 337, 337 ] + + +-------------------- + 6 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: -99, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_7: -99, EXT_ELEM_PROP_8: NaN, EXT_ELEM_PROP_9: NaN} + +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 337, 337, 337 ] +[ 337, 337, 337 ] +[ 337, 337, 337 ] +[ 337, 337, 337 ] +[ 337, 337, 337 ] + + +-------------------- + 7 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: -99, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_7: -99, EXT_ELEM_PROP_8: NaN, EXT_ELEM_PROP_9: NaN} + +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 337, 337, 337 ] +[ 337, 337, 337 ] +[ 337, 337, 337 ] +[ 337, 337, 337 ] +[ 337, 337, 337 ] + + +-------------------- + 8 +-------------------- +{EXT_ELEM_PROP_1: 1.171, EXT_ELEM_PROP_10: 11.071, EXT_ELEM_PROP_5: 5.571, EXT_ELEM_PROP_7: 7.771, EXT_ELEM_PROP_8: 8.871, EXT_ELEM_PROP_9: 9.971} + +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 337, 337, 337 ] +[ 337, 337, 337 ] +[ 337, 337, 337 ] +[ 337, 337, 337 ] +[ 337, 337, 337 ] + + +-------------------- + 9 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: -99, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_7: -99, EXT_ELEM_PROP_8: NaN, EXT_ELEM_PROP_9: NaN} + +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 337, 337, 337 ] +[ 337, 337, 337 ] +[ 337, 337, 337 ] +[ 337, 337, 337 ] +[ 337, 337, 337 ] + + + +set.num_extend_elem_props(): 6 +set.prop_index(PROP_3): 3 +set.get_extend_elem_prop(EXT_ELEM_PROP_5,4): -99 +set.prop_index(PROP_10): 1 + + +------------------------------------- + 200 MODFICATIONS +------------------------------------- + +PROP_1: 1.101 +PROP_10: 182 +PROP_2: 692 +PROP_3: 22 +PROP_4: 779 +PROP_5: 902 +PROP_6: 153 +PROP_7: 434 +PROP_8: 859 +PROP_9: 835 + +-------------------- + 0 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: -99, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_6: NaN, EXT_ELEM_PROP_7: -99, EXT_ELEM_PROP_8: NaN, EXT_ELEM_PROP_9: NaN} + +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 337, 337, 337 ] +[ 337, 337, 337 ] +[ 337, 337, 337 ] +[ 337, 337, 337 ] +[ 337, 337, 337 ] + + +-------------------- + 1 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: -99, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_6: NaN, EXT_ELEM_PROP_7: -99, EXT_ELEM_PROP_8: NaN, EXT_ELEM_PROP_9: NaN} + +[ 1005, 1005, 1005 ] +[ 1005, 1005, 1005 ] +[ 1005, 1005, 1005 ] +[ 1005, 1005, 1005 ] +[ 337, 337, 337 ] +[ 337, 337, 337 ] +[ 337, 337, 337 ] +[ 337, 337, 337 ] +[ 337, 337, 337 ] + + +-------------------- + 2 +-------------------- +{EXT_ELEM_PROP_1: 1.111, EXT_ELEM_PROP_10: 11.011, EXT_ELEM_PROP_5: 5.511, EXT_ELEM_PROP_6: 6.611, EXT_ELEM_PROP_7: 7.711, EXT_ELEM_PROP_8: 8.811, EXT_ELEM_PROP_9: 9.911} + +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 337, 337, 337 ] +[ 337, 337, 337 ] +[ 337, 337, 337 ] +[ 337, 337, 337 ] +[ 337, 337, 337 ] + + +-------------------- + 3 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: -99, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_6: NaN, EXT_ELEM_PROP_7: -99, EXT_ELEM_PROP_8: NaN, EXT_ELEM_PROP_9: NaN} + +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 337, 337, 337 ] +[ 337, 337, 337 ] +[ 337, 337, 337 ] +[ 337, 337, 337 ] +[ 337, 337, 337 ] + + +-------------------- + 4 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: -99, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_6: NaN, EXT_ELEM_PROP_7: -99, EXT_ELEM_PROP_8: NaN, EXT_ELEM_PROP_9: NaN} + +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 337, 337, 337 ] +[ 337, 337, 337 ] +[ 337, 337, 337 ] +[ 337, 337, 337 ] +[ 337, 337, 337 ] + + +-------------------- + 5 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: -99, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_6: NaN, EXT_ELEM_PROP_7: -99, EXT_ELEM_PROP_8: NaN, EXT_ELEM_PROP_9: NaN} + +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 337, 337, 337 ] +[ 337, 337, 337 ] +[ 337, 337, 337 ] +[ 337, 337, 337 ] +[ 337, 337, 337 ] + + +-------------------- + 6 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: -99, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_6: NaN, EXT_ELEM_PROP_7: -99, EXT_ELEM_PROP_8: NaN, EXT_ELEM_PROP_9: NaN} + +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 337, 337, 337 ] +[ 337, 337, 337 ] +[ 337, 337, 337 ] +[ 337, 337, 337 ] +[ 337, 337, 337 ] + + +-------------------- + 7 +-------------------- +{EXT_ELEM_PROP_1: 1.171, EXT_ELEM_PROP_10: 11.071, EXT_ELEM_PROP_5: 5.571, EXT_ELEM_PROP_6: NaN, EXT_ELEM_PROP_7: 7.771, EXT_ELEM_PROP_8: 8.871, EXT_ELEM_PROP_9: 9.971} + +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 337, 337, 337 ] +[ 337, 337, 337 ] +[ 337, 337, 337 ] +[ 337, 337, 337 ] +[ 337, 337, 337 ] + + + +set.num_props(): 10 +set.size(): 8 +set.has_extend_elem_prop(EXT_ELEM_PROP_2): 0 +set.has_extend_elem_prop(EXT_ELEM_PROP_1): 1 +set.get_extend_elem_prop(EXT_ELEM_PROP_9,3): NaN +set.get_extend_elem_prop_header(): [ EXT_ELEM_PROP_1 EXT_ELEM_PROP_10 EXT_ELEM_PROP_5 EXT_ELEM_PROP_6 EXT_ELEM_PROP_7 EXT_ELEM_PROP_8 EXT_ELEM_PROP_9 ] +set.has_prop(PROP_2): 1 +set.num_elem_props(): 0 +set.has_prop(PROP_1): 1 +set.num_extend_elem_props(): 7 +set.get_extend_elem_prop_header(): [ EXT_ELEM_PROP_1 EXT_ELEM_PROP_10 EXT_ELEM_PROP_5 EXT_ELEM_PROP_6 EXT_ELEM_PROP_7 EXT_ELEM_PROP_8 EXT_ELEM_PROP_9 ] +set.num_props(): 10 +set.elem_prop_keys(): [] +set.num_elem_props(): 0 + + +------------------------------------- + 205 MODFICATIONS +------------------------------------- + +PROP_1: 1.101 +PROP_10: 182 +PROP_2: 692 +PROP_3: 22 +PROP_4: 779 +PROP_5: 902 +PROP_6: 153 +PROP_7: 434 +PROP_8: 859 +PROP_9: 835 + +-------------------- + 0 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: -99, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_6: NaN, EXT_ELEM_PROP_7: -99, EXT_ELEM_PROP_8: NaN, EXT_ELEM_PROP_9: NaN} + +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 337, 337, 337 ] +[ 337, 337, 337 ] +[ 337, 337, 337 ] +[ 337, 337, 337 ] +[ 337, 337, 337 ] + + +-------------------- + 1 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: Boogle 10-0, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_6: Boogle 6-0, EXT_ELEM_PROP_7: Boogle 7-0, EXT_ELEM_PROP_8: Boogle 8-0, EXT_ELEM_PROP_9: Boogle 9-0} + +[ 1005, 1005, 1005 ] +[ 1005, 1005, 1005 ] +[ 1005, 1005, 1005 ] +[ 1005, 1005, 1005 ] +[ 337, 337, 337 ] +[ 337, 337, 337 ] +[ 337, 337, 337 ] +[ 337, 337, 337 ] +[ 337, 337, 337 ] + + +-------------------- + 2 +-------------------- +{EXT_ELEM_PROP_1: 1.111, EXT_ELEM_PROP_10: 11.011, EXT_ELEM_PROP_5: 5.511, EXT_ELEM_PROP_6: 6.611, EXT_ELEM_PROP_7: 7.711, EXT_ELEM_PROP_8: 8.811, EXT_ELEM_PROP_9: 9.911} + +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 337, 337, 337 ] +[ 337, 337, 337 ] +[ 337, 337, 337 ] +[ 337, 337, 337 ] +[ 337, 337, 337 ] + + +-------------------- + 3 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: -99, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_6: NaN, EXT_ELEM_PROP_7: -99, EXT_ELEM_PROP_8: NaN, EXT_ELEM_PROP_9: NaN} + +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 337, 337, 337 ] +[ 337, 337, 337 ] +[ 337, 337, 337 ] +[ 337, 337, 337 ] +[ 337, 337, 337 ] + + +-------------------- + 4 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: -99, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_6: NaN, EXT_ELEM_PROP_7: -99, EXT_ELEM_PROP_8: NaN, EXT_ELEM_PROP_9: NaN} + +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 337, 337, 337 ] +[ 337, 337, 337 ] +[ 337, 337, 337 ] +[ 337, 337, 337 ] +[ 337, 337, 337 ] + + +-------------------- + 5 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: -99, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_6: NaN, EXT_ELEM_PROP_7: -99, EXT_ELEM_PROP_8: NaN, EXT_ELEM_PROP_9: NaN} + +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 337, 337, 337 ] +[ 337, 337, 337 ] +[ 337, 337, 337 ] +[ 337, 337, 337 ] +[ 337, 337, 337 ] + + +-------------------- + 6 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: -99, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_6: NaN, EXT_ELEM_PROP_7: -99, EXT_ELEM_PROP_8: NaN, EXT_ELEM_PROP_9: NaN} + +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 337, 337, 337 ] +[ 337, 337, 337 ] +[ 337, 337, 337 ] +[ 337, 337, 337 ] +[ 337, 337, 337 ] + + +-------------------- + 7 +-------------------- +{EXT_ELEM_PROP_1: 1.171, EXT_ELEM_PROP_10: 11.071, EXT_ELEM_PROP_5: 5.571, EXT_ELEM_PROP_6: NaN, EXT_ELEM_PROP_7: 7.771, EXT_ELEM_PROP_8: 8.871, EXT_ELEM_PROP_9: 9.971} + +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 337, 337, 337 ] +[ 337, 337, 337 ] +[ 337, 337, 337 ] +[ 337, 337, 337 ] +[ 337, 337, 337 ] + + + +set.num_elem_props(): 0 + + +------------------------------------- + 210 MODFICATIONS +------------------------------------- + +PROP_1: 1.101 +PROP_10: 182 +PROP_2: 692 +PROP_3: 22 +PROP_4: 779 +PROP_5: 902 +PROP_6: 153 +PROP_7: 434 +PROP_8: 859 +PROP_9: 835 + +-------------------- + 0 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_6: NaN, EXT_ELEM_PROP_7: -99, EXT_ELEM_PROP_8: NaN, EXT_ELEM_PROP_9: NaN} + +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 359, 359, 359 ] +[ 359, 359, 359 ] +[ 359, 359, 359 ] + + +-------------------- + 1 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_6: Boogle 6-0, EXT_ELEM_PROP_7: Boogle 7-0, EXT_ELEM_PROP_8: Boogle 8-0, EXT_ELEM_PROP_9: Boogle 9-0} + +[ 1005, 1005, 1005 ] +[ 1005, 1005, 1005 ] +[ 359, 359, 359 ] +[ 359, 359, 359 ] +[ 359, 359, 359 ] + + +-------------------- + 2 +-------------------- +{EXT_ELEM_PROP_1: 1.111, EXT_ELEM_PROP_5: 5.511, EXT_ELEM_PROP_6: 6.611, EXT_ELEM_PROP_7: 7.711, EXT_ELEM_PROP_8: 8.811, EXT_ELEM_PROP_9: 9.911} + +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 359, 359, 359 ] +[ 359, 359, 359 ] +[ 359, 359, 359 ] + + +-------------------- + 3 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_6: NaN, EXT_ELEM_PROP_7: -99, EXT_ELEM_PROP_8: NaN, EXT_ELEM_PROP_9: NaN} + +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 359, 359, 359 ] +[ 359, 359, 359 ] +[ 359, 359, 359 ] + + +-------------------- + 4 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_6: NaN, EXT_ELEM_PROP_7: -99, EXT_ELEM_PROP_8: NaN, EXT_ELEM_PROP_9: NaN} + +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 359, 359, 359 ] +[ 359, 359, 359 ] +[ 359, 359, 359 ] + + +-------------------- + 5 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_6: NaN, EXT_ELEM_PROP_7: -99, EXT_ELEM_PROP_8: NaN, EXT_ELEM_PROP_9: NaN} + +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 359, 359, 359 ] +[ 359, 359, 359 ] +[ 359, 359, 359 ] + + +-------------------- + 6 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_6: NaN, EXT_ELEM_PROP_7: -99, EXT_ELEM_PROP_8: NaN, EXT_ELEM_PROP_9: NaN} + +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 359, 359, 359 ] +[ 359, 359, 359 ] +[ 359, 359, 359 ] + + +-------------------- + 7 +-------------------- +{EXT_ELEM_PROP_1: 1.171, EXT_ELEM_PROP_5: 5.571, EXT_ELEM_PROP_6: NaN, EXT_ELEM_PROP_7: 7.771, EXT_ELEM_PROP_8: 8.871, EXT_ELEM_PROP_9: 9.971} + +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 359, 359, 359 ] +[ 359, 359, 359 ] +[ 359, 359, 359 ] + + +-------------------- + 8 +-------------------- +{EXT_ELEM_PROP_1: 1.141, EXT_ELEM_PROP_5: 5.541, EXT_ELEM_PROP_6: 6.641, EXT_ELEM_PROP_7: 7.741, EXT_ELEM_PROP_8: 8.841, EXT_ELEM_PROP_9: 9.941} + +[ 1007, 1007, 1007 ] +[ 1007, 1007, 1007 ] +[ 359, 359, 359 ] +[ 359, 359, 359 ] +[ 359, 359, 359 ] + + + +set.bsize(): 135 +set.vsize(): 145 +set.has_extend_elem_prop(EXT_ELEM_PROP_1): 1 +set.num_extend_elem_props(): 6 +set.prop_index(PROP_7): 7 +set.num_extend_elem_props(): 6 +set.num_elem_props(): 0 +set.num_extend_elem_props(): 6 + + +------------------------------------- + 215 MODFICATIONS +------------------------------------- + +PROP_1: 1.101 +PROP_10: 182 +PROP_2: 692 +PROP_3: 22 +PROP_5: 902 +PROP_6: 153 +PROP_7: 434 +PROP_8: 859 +PROP_9: 835 + +-------------------- + 0 +-------------------- +{EXT_ELEM_PROP_1: 1.141, EXT_ELEM_PROP_10: NaN, EXT_ELEM_PROP_5: 5.541, EXT_ELEM_PROP_6: 6.641, EXT_ELEM_PROP_7: 7.741, EXT_ELEM_PROP_8: 8.841, EXT_ELEM_PROP_9: 9.941} + +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 359, 359, 359 ] +[ 359, 359, 359 ] +[ 359, 359, 359 ] + + +-------------------- + 1 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: NaN, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_6: Boogle 6-0, EXT_ELEM_PROP_7: Boogle 7-0, EXT_ELEM_PROP_8: Boogle 8-0, EXT_ELEM_PROP_9: Boogle 9-0} + +[ 1005, 1005, 1005 ] +[ 1005, 1005, 1005 ] +[ 359, 359, 359 ] +[ 359, 359, 359 ] +[ 359, 359, 359 ] + + +-------------------- + 2 +-------------------- +{EXT_ELEM_PROP_1: 1.111, EXT_ELEM_PROP_10: NaN, EXT_ELEM_PROP_5: 5.511, EXT_ELEM_PROP_6: 6.611, EXT_ELEM_PROP_7: 7.711, EXT_ELEM_PROP_8: 8.811, EXT_ELEM_PROP_9: 9.911} + +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 359, 359, 359 ] +[ 359, 359, 359 ] +[ 359, 359, 359 ] + + +-------------------- + 3 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: NaN, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_6: NaN, EXT_ELEM_PROP_7: -99, EXT_ELEM_PROP_8: NaN, EXT_ELEM_PROP_9: NaN} + +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 359, 359, 359 ] +[ 359, 359, 359 ] +[ 359, 359, 359 ] + + +-------------------- + 4 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: NaN, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_6: NaN, EXT_ELEM_PROP_7: -99, EXT_ELEM_PROP_8: NaN, EXT_ELEM_PROP_9: NaN} + +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 359, 359, 359 ] +[ 359, 359, 359 ] +[ 359, 359, 359 ] + + +-------------------- + 5 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: NaN, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_6: NaN, EXT_ELEM_PROP_7: NaN, EXT_ELEM_PROP_8: NaN, EXT_ELEM_PROP_9: NaN} + +[ 1008, 1008, 1008 ] +[ 1008, 1008, 1008 ] +[ 1008, 1008, 1008 ] +[ 1008, 1008, 1008 ] +[ 1008, 1008, 1008 ] +[ 1008, 1008, 1008 ] + + +-------------------- + 6 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: NaN, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_6: NaN, EXT_ELEM_PROP_7: -99, EXT_ELEM_PROP_8: NaN, EXT_ELEM_PROP_9: NaN} + +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 359, 359, 359 ] +[ 359, 359, 359 ] +[ 359, 359, 359 ] + + +-------------------- + 7 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: NaN, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_6: NaN, EXT_ELEM_PROP_7: -99, EXT_ELEM_PROP_8: NaN, EXT_ELEM_PROP_9: NaN} + +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 359, 359, 359 ] +[ 359, 359, 359 ] +[ 359, 359, 359 ] + + +-------------------- + 8 +-------------------- +{EXT_ELEM_PROP_1: 1.171, EXT_ELEM_PROP_10: NaN, EXT_ELEM_PROP_5: 5.571, EXT_ELEM_PROP_6: NaN, EXT_ELEM_PROP_7: 7.771, EXT_ELEM_PROP_8: 8.871, EXT_ELEM_PROP_9: 9.971} + +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 359, 359, 359 ] +[ 359, 359, 359 ] +[ 359, 359, 359 ] + + +-------------------- + 9 +-------------------- +{EXT_ELEM_PROP_1: 1.141, EXT_ELEM_PROP_10: NaN, EXT_ELEM_PROP_5: 5.541, EXT_ELEM_PROP_6: 6.641, EXT_ELEM_PROP_7: 7.741, EXT_ELEM_PROP_8: 8.841, EXT_ELEM_PROP_9: 9.941} + +[ 1007, 1007, 1007 ] +[ 1007, 1007, 1007 ] +[ 359, 359, 359 ] +[ 359, 359, 359 ] +[ 359, 359, 359 ] + + + +set.num_elem_props(): 0 + + +------------------------------------- + 220 MODFICATIONS +------------------------------------- + +PROP_1: 1.101 +PROP_10: 182 +PROP_2: 692 +PROP_3: 22 +PROP_5: 902 +PROP_6: 153 +PROP_8: 859 +PROP_9: 835 + +-------------------- + 0 +-------------------- +{EXT_ELEM_PROP_1: 1.141, EXT_ELEM_PROP_10: NaN, EXT_ELEM_PROP_5: 5.541, EXT_ELEM_PROP_6: 6.641, EXT_ELEM_PROP_7: 7.741, EXT_ELEM_PROP_8: 8.841, EXT_ELEM_PROP_9: 9.941} + +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 359, 359, 359 ] +[ 359, 359, 359 ] +[ 359, 359, 359 ] + + +-------------------- + 1 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: NaN, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_6: Boogle 6-0, EXT_ELEM_PROP_7: Boogle 7-0, EXT_ELEM_PROP_8: Boogle 8-0, EXT_ELEM_PROP_9: Boogle 9-0} + +[ 1005, 1005, 1005 ] +[ 1005, 1005, 1005 ] +[ 359, 359, 359 ] +[ 359, 359, 359 ] +[ 359, 359, 359 ] + + +-------------------- + 2 +-------------------- +{EXT_ELEM_PROP_1: 1.111, EXT_ELEM_PROP_10: NaN, EXT_ELEM_PROP_5: 5.511, EXT_ELEM_PROP_6: 6.611, EXT_ELEM_PROP_7: 7.711, EXT_ELEM_PROP_8: 8.811, EXT_ELEM_PROP_9: 9.911} + +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 359, 359, 359 ] +[ 359, 359, 359 ] +[ 359, 359, 359 ] + + +-------------------- + 3 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: NaN, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_6: NaN, EXT_ELEM_PROP_7: -99, EXT_ELEM_PROP_8: NaN, EXT_ELEM_PROP_9: NaN} + +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 359, 359, 359 ] +[ 359, 359, 359 ] +[ 359, 359, 359 ] + + + +set.size(): 4 + + +------------------------------------- + 225 MODFICATIONS +------------------------------------- + +PROP_1: 1.101 +PROP_10: 182 +PROP_2: 692 +PROP_3: 22 +PROP_4: 364 +PROP_5: 902 +PROP_6: 153 +PROP_7: 495 +PROP_8: 859 +PROP_9: 835 + +-------------------- + 0 +-------------------- +{EXT_ELEM_PROP_1: 1.141, EXT_ELEM_PROP_10: NaN, EXT_ELEM_PROP_5: 5.541, EXT_ELEM_PROP_6: 6.641, EXT_ELEM_PROP_7: 7.741, EXT_ELEM_PROP_8: 8.841, EXT_ELEM_PROP_9: 9.941} + +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 359, 359, 359 ] +[ 359, 359, 359 ] +[ 359, 359, 359 ] + + +-------------------- + 1 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: NaN, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_6: Boogle 6-0, EXT_ELEM_PROP_7: Boogle 7-0, EXT_ELEM_PROP_8: Boogle 8-0, EXT_ELEM_PROP_9: Boogle 9-0} + +[ 1005, 1005, 1005 ] +[ 1005, 1005, 1005 ] +[ 359, 359, 359 ] +[ 359, 359, 359 ] +[ 359, 359, 359 ] + + +-------------------- + 2 +-------------------- +{EXT_ELEM_PROP_1: 1.111, EXT_ELEM_PROP_10: NaN, EXT_ELEM_PROP_5: 5.511, EXT_ELEM_PROP_6: 6.611, EXT_ELEM_PROP_7: 7.711, EXT_ELEM_PROP_8: 8.811, EXT_ELEM_PROP_9: 9.911} + +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 359, 359, 359 ] +[ 359, 359, 359 ] +[ 359, 359, 359 ] + + +-------------------- + 3 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: NaN, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_6: NaN, EXT_ELEM_PROP_7: -99, EXT_ELEM_PROP_8: NaN, EXT_ELEM_PROP_9: NaN} + +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 359, 359, 359 ] +[ 359, 359, 359 ] +[ 359, 359, 359 ] + + +-------------------- + 4 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: NaN, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_6: NaN, EXT_ELEM_PROP_7: NaN, EXT_ELEM_PROP_8: NaN, EXT_ELEM_PROP_9: NaN} + +[ 1007, 1007, 1007 ] +[ 1007, 1007, 1007 ] +[ 1007, 1007, 1007 ] +[ 1007, 1007, 1007 ] +[ 1007, 1007, 1007 ] +[ 1007, 1007, 1007 ] + + + +set.size(): 5 +set.vsize(): 88 +set.get_extend_elem_prop(EXT_ELEM_PROP_5,3): -99 +set.prop_keys(): [ PROP_1 PROP_10 PROP_2 PROP_3 PROP_4 PROP_5 PROP_6 PROP_7 PROP_8 PROP_9 ] +set.bsize(): 78 +set.get_extend_elem_prop_header(): [ EXT_ELEM_PROP_1 EXT_ELEM_PROP_10 EXT_ELEM_PROP_5 EXT_ELEM_PROP_6 EXT_ELEM_PROP_7 EXT_ELEM_PROP_8 EXT_ELEM_PROP_9 ] +set.prop(PROP_10): 182 + + +------------------------------------- + 230 MODFICATIONS +------------------------------------- + +PROP_1: 1.101 +PROP_10: 182 +PROP_2: 692 +PROP_3: 22 +PROP_4: 364 +PROP_5: 902 +PROP_6: 153 +PROP_7: 495 +PROP_8: 859 +PROP_9: 835 + +-------------------- + 0 +-------------------- +{EXT_ELEM_PROP_1: 1.141, EXT_ELEM_PROP_10: Boogle 10-0, EXT_ELEM_PROP_5: 5.541, EXT_ELEM_PROP_6: Boogle 6-0, EXT_ELEM_PROP_7: Boogle 7-0, EXT_ELEM_PROP_8: Boogle 8-0, EXT_ELEM_PROP_9: Boogle 9-0} + +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 359, 359, 359 ] +[ 359, 359, 359 ] +[ 359, 359, 359 ] + + +-------------------- + 1 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: Boogle 10-1, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_6: Boogle 6-1, EXT_ELEM_PROP_7: Boogle 7-1, EXT_ELEM_PROP_8: Boogle 8-1, EXT_ELEM_PROP_9: Boogle 9-1} + +[ 1005, 1005, 1005 ] +[ 1005, 1005, 1005 ] +[ 359, 359, 359 ] +[ 359, 359, 359 ] +[ 359, 359, 359 ] + + +-------------------- + 2 +-------------------- +{EXT_ELEM_PROP_1: 1.111, EXT_ELEM_PROP_10: Boogle 10-2, EXT_ELEM_PROP_5: 5.511, EXT_ELEM_PROP_6: Boogle 6-2, EXT_ELEM_PROP_7: Boogle 7-2, EXT_ELEM_PROP_8: Boogle 8-2, EXT_ELEM_PROP_9: Boogle 9-2} + +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 359, 359, 359 ] +[ 359, 359, 359 ] +[ 359, 359, 359 ] + + +-------------------- + 3 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: Boogle 10-3, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_6: Boogle 6-3, EXT_ELEM_PROP_7: Boogle 7-3, EXT_ELEM_PROP_8: Boogle 8-3, EXT_ELEM_PROP_9: Boogle 9-3} + +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 359, 359, 359 ] +[ 359, 359, 359 ] +[ 359, 359, 359 ] + + +-------------------- + 4 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: Boogle 10-3, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_6: Boogle 6-3, EXT_ELEM_PROP_7: Boogle 7-3, EXT_ELEM_PROP_8: Boogle 8-3, EXT_ELEM_PROP_9: Boogle 9-3} + +[ 1007, 1007, 1007 ] +[ 1007, 1007, 1007 ] +[ 1007, 1007, 1007 ] +[ 1007, 1007, 1007 ] +[ 1007, 1007, 1007 ] +[ 1007, 1007, 1007 ] + + +-------------------- + 5 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: NaN, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_6: NaN, EXT_ELEM_PROP_7: NaN, EXT_ELEM_PROP_8: NaN, EXT_ELEM_PROP_9: NaN} + + + + +set.prop_index(PROP_10): 1 +set.has_elem_prop(ELEM_PROP_8): 0 +set.bsize(): 78 +set.bsize(): 78 + + +------------------------------------- + FINAL PRINT +------------------------------------- + +PROP_1: 1.101 +PROP_10: 182 +PROP_2: 692 +PROP_3: 22 +PROP_4: 364 +PROP_5: 902 +PROP_6: 153 +PROP_7: 495 +PROP_8: 859 +PROP_9: 835 + +-------------------- + 0 +-------------------- +{EXT_ELEM_PROP_1: 1.141, EXT_ELEM_PROP_10: Boogle 10-0, EXT_ELEM_PROP_5: 5.541, EXT_ELEM_PROP_6: Boogle 6-0, EXT_ELEM_PROP_7: Boogle 7-0, EXT_ELEM_PROP_8: Boogle 8-0, EXT_ELEM_PROP_9: Boogle 9-0} + +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 359, 359, 359 ] +[ 359, 359, 359 ] +[ 359, 359, 359 ] + + +-------------------- + 1 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: 898, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_6: Boogle 6-1, EXT_ELEM_PROP_7: Boogle 7-1, EXT_ELEM_PROP_8: Boogle 8-1, EXT_ELEM_PROP_9: Boogle 9-1} + +[ 1005, 1005, 1005 ] +[ 1005, 1005, 1005 ] +[ 359, 359, 359 ] +[ 359, 359, 359 ] +[ 359, 359, 359 ] + + +-------------------- + 2 +-------------------- +{EXT_ELEM_PROP_1: 1.111, EXT_ELEM_PROP_10: Boogle 10-2, EXT_ELEM_PROP_5: 5.511, EXT_ELEM_PROP_6: Boogle 6-2, EXT_ELEM_PROP_7: Boogle 7-2, EXT_ELEM_PROP_8: Boogle 8-2, EXT_ELEM_PROP_9: Boogle 9-2} + +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 359, 359, 359 ] +[ 359, 359, 359 ] +[ 359, 359, 359 ] + + +-------------------- + 3 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: Boogle 10-3, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_6: Boogle 6-3, EXT_ELEM_PROP_7: Boogle 7-3, EXT_ELEM_PROP_8: Boogle 8-3, EXT_ELEM_PROP_9: Boogle 9-3} + +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 359, 359, 359 ] +[ 359, 359, 359 ] +[ 359, 359, 359 ] + + +-------------------- + 4 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: Boogle 10-3, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_6: Boogle 6-3, EXT_ELEM_PROP_7: Boogle 7-3, EXT_ELEM_PROP_8: Boogle 8-3, EXT_ELEM_PROP_9: Boogle 9-3} + +[ 1007, 1007, 1007 ] +[ 1007, 1007, 1007 ] +[ 1007, 1007, 1007 ] +[ 1007, 1007, 1007 ] +[ 1007, 1007, 1007 ] +[ 1007, 1007, 1007 ] + + +-------------------- + 5 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: NaN, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_6: NaN, EXT_ELEM_PROP_7: NaN, EXT_ELEM_PROP_8: NaN, EXT_ELEM_PROP_9: NaN} + + + diff --git a/python/fibre/base/test/output/python_output.txt b/python/fibre/base/test/output/python_output.txt new file mode 100644 index 0000000..b885816 --- /dev/null +++ b/python/fibre/base/test/output/python_output.txt @@ -0,0 +1,4273 @@ + + +------------------------------------- + INITIAL SET +------------------------------------- + +PROP_1: 1.101 +PROP_2: 2.201 +PROP_3: 3.301 +PROP_4: 4.401 +PROP_5: 5.501 + +-------------------- + 0 +-------------------- +{EXT_ELEM_PROP_1: Ooogle 1-0, EXT_ELEM_PROP_2: Ooogle 2-0, EXT_ELEM_PROP_3: Ooogle 3-0, EXT_ELEM_PROP_4: Ooogle 4-0, EXT_ELEM_PROP_5: Ooogle 5-0} + +ELEM_PROP_1: 0.101 +ELEM_PROP_2: 0.201 +ELEM_PROP_3: 0.301 +ELEM_PROP_4: 0.401 +ELEM_PROP_5: 0.501 +[ 1, 2, 3 ] +[ 11, 12, 13 ] +[ 21, 22, 23 ] +[ 31, 32, 33 ] +[ 41, 42, 43 ] + + +-------------------- + 1 +-------------------- +{EXT_ELEM_PROP_1: Ooogle 1-1, EXT_ELEM_PROP_2: Ooogle 2-1, EXT_ELEM_PROP_3: Ooogle 3-1, EXT_ELEM_PROP_4: Ooogle 4-1, EXT_ELEM_PROP_5: Ooogle 5-1} + +ELEM_PROP_1: 100.101 +ELEM_PROP_2: 100.201 +ELEM_PROP_3: 100.301 +ELEM_PROP_4: 100.401 +ELEM_PROP_5: 100.501 +[ 101, 102, 103 ] +[ 111, 112, 113 ] +[ 121, 122, 123 ] +[ 131, 132, 133 ] +[ 141, 142, 143 ] + + +-------------------- + 2 +-------------------- +{EXT_ELEM_PROP_1: Ooogle 1-2, EXT_ELEM_PROP_2: Ooogle 2-2, EXT_ELEM_PROP_3: Ooogle 3-2, EXT_ELEM_PROP_4: Ooogle 4-2, EXT_ELEM_PROP_5: Ooogle 5-2} + +ELEM_PROP_1: 200.101 +ELEM_PROP_2: 200.201 +ELEM_PROP_3: 200.301 +ELEM_PROP_4: 200.401 +ELEM_PROP_5: 200.501 +[ 201, 202, 203 ] +[ 211, 212, 213 ] +[ 221, 222, 223 ] +[ 231, 232, 233 ] +[ 241, 242, 243 ] + + +-------------------- + 3 +-------------------- +{EXT_ELEM_PROP_1: Ooogle 1-3, EXT_ELEM_PROP_2: Ooogle 2-3, EXT_ELEM_PROP_3: Ooogle 3-3, EXT_ELEM_PROP_4: Ooogle 4-3, EXT_ELEM_PROP_5: Ooogle 5-3} + +ELEM_PROP_1: 300.101 +ELEM_PROP_2: 300.201 +ELEM_PROP_3: 300.301 +ELEM_PROP_4: 300.401 +ELEM_PROP_5: 300.501 +[ 301, 302, 303 ] +[ 311, 312, 313 ] +[ 321, 322, 323 ] +[ 331, 332, 333 ] +[ 341, 342, 343 ] + + +-------------------- + 4 +-------------------- +{EXT_ELEM_PROP_1: Ooogle 1-4, EXT_ELEM_PROP_2: Ooogle 2-4, EXT_ELEM_PROP_3: Ooogle 3-4, EXT_ELEM_PROP_4: Ooogle 4-4, EXT_ELEM_PROP_5: Ooogle 5-4} + +ELEM_PROP_1: 400.101 +ELEM_PROP_2: 400.201 +ELEM_PROP_3: 400.301 +ELEM_PROP_4: 400.401 +ELEM_PROP_5: 400.501 +[ 401, 402, 403 ] +[ 411, 412, 413 ] +[ 421, 422, 423 ] +[ 431, 432, 433 ] +[ 441, 442, 443 ] + + + + + +------------------------------------- + SECOND SET +------------------------------------- + +PROP_1: -1.101 +PROP_2: -2.201 +PROP_3: -3.301 +PROP_4: -4.401 +PROP_5: -5.501 + +-------------------- + 0 +-------------------- +{EXT_ELEM_PROP_10: Boogle 10-0, EXT_ELEM_PROP_6: Boogle 6-0, EXT_ELEM_PROP_7: Boogle 7-0, EXT_ELEM_PROP_8: Boogle 8-0, EXT_ELEM_PROP_9: Boogle 9-0} + +ELEM_PROP_1: -0.101 +ELEM_PROP_2: -0.201 +ELEM_PROP_3: -0.301 +ELEM_PROP_4: -0.401 +ELEM_PROP_5: -0.501 +[ -1, -2, -3 ] +[ -11, -12, -13 ] +[ -21, -22, -23 ] +[ -31, -32, -33 ] +[ -41, -42, -43 ] + + +-------------------- + 1 +-------------------- +{EXT_ELEM_PROP_10: Boogle 10-1, EXT_ELEM_PROP_6: Boogle 6-1, EXT_ELEM_PROP_7: Boogle 7-1, EXT_ELEM_PROP_8: Boogle 8-1, EXT_ELEM_PROP_9: Boogle 9-1} + +ELEM_PROP_1: -100.101 +ELEM_PROP_2: -100.201 +ELEM_PROP_3: -100.301 +ELEM_PROP_4: -100.401 +ELEM_PROP_5: -100.501 +[ -101, -102, -103 ] +[ -111, -112, -113 ] +[ -121, -122, -123 ] +[ -131, -132, -133 ] +[ -141, -142, -143 ] + + +-------------------- + 2 +-------------------- +{EXT_ELEM_PROP_10: Boogle 10-2, EXT_ELEM_PROP_6: Boogle 6-2, EXT_ELEM_PROP_7: Boogle 7-2, EXT_ELEM_PROP_8: Boogle 8-2, EXT_ELEM_PROP_9: Boogle 9-2} + +ELEM_PROP_1: -200.101 +ELEM_PROP_2: -200.201 +ELEM_PROP_3: -200.301 +ELEM_PROP_4: -200.401 +ELEM_PROP_5: -200.501 +[ -201, -202, -203 ] +[ -211, -212, -213 ] +[ -221, -222, -223 ] +[ -231, -232, -233 ] +[ -241, -242, -243 ] + + +-------------------- + 3 +-------------------- +{EXT_ELEM_PROP_10: Boogle 10-3, EXT_ELEM_PROP_6: Boogle 6-3, EXT_ELEM_PROP_7: Boogle 7-3, EXT_ELEM_PROP_8: Boogle 8-3, EXT_ELEM_PROP_9: Boogle 9-3} + +ELEM_PROP_1: -300.101 +ELEM_PROP_2: -300.201 +ELEM_PROP_3: -300.301 +ELEM_PROP_4: -300.401 +ELEM_PROP_5: -300.501 +[ -301, -302, -303 ] +[ -311, -312, -313 ] +[ -321, -322, -323 ] +[ -331, -332, -333 ] +[ -341, -342, -343 ] + + +-------------------- + 4 +-------------------- +{EXT_ELEM_PROP_10: Boogle 10-4, EXT_ELEM_PROP_6: Boogle 6-4, EXT_ELEM_PROP_7: Boogle 7-4, EXT_ELEM_PROP_8: Boogle 8-4, EXT_ELEM_PROP_9: Boogle 9-4} + +ELEM_PROP_1: -400.101 +ELEM_PROP_2: -400.201 +ELEM_PROP_3: -400.301 +ELEM_PROP_4: -400.401 +ELEM_PROP_5: -400.501 +[ -401, -402, -403 ] +[ -411, -412, -413 ] +[ -421, -422, -423 ] +[ -431, -432, -433 ] +[ -441, -442, -443 ] + + + +set.num_elem_props(): 5 +set.elem_prop_index(ELEM_PROP_4): 3 +set.has_extend_elem_prop(EXT_ELEM_PROP_7): 0 +set.num_props(): 6 + + +------------------------------------- + 5 MODFICATIONS +------------------------------------- + +PROP_1: 1.101 +PROP_2: 2.201 +PROP_4: 4.401 +PROP_5: 5.501 +PROP_6: 984 + +-------------------- + 0 +-------------------- +{EXT_ELEM_PROP_1: Ooogle 1-0, EXT_ELEM_PROP_2: Ooogle 2-0, EXT_ELEM_PROP_3: Ooogle 3-0, EXT_ELEM_PROP_4: Ooogle 4-0, EXT_ELEM_PROP_5: Ooogle 5-0} + +ELEM_PROP_1: 0.101 +ELEM_PROP_2: 669 +ELEM_PROP_3: 0.301 +ELEM_PROP_4: 0.401 +ELEM_PROP_5: 0.501 +[ 1, 2, 3 ] +[ 11, 12, 13 ] +[ 21, 22, 23 ] +[ 31, 32, 33 ] +[ 41, 42, 43 ] + + +-------------------- + 1 +-------------------- +{EXT_ELEM_PROP_1: NaN, EXT_ELEM_PROP_2: NaN, EXT_ELEM_PROP_3: NaN, EXT_ELEM_PROP_4: NaN, EXT_ELEM_PROP_5: NaN} + +ELEM_PROP_1: 1009 +ELEM_PROP_2: 669 +ELEM_PROP_3: 1009 +ELEM_PROP_4: 1009 +ELEM_PROP_5: 1009 +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] + + +-------------------- + 2 +-------------------- +{EXT_ELEM_PROP_1: Ooogle 1-1, EXT_ELEM_PROP_2: Ooogle 2-1, EXT_ELEM_PROP_3: Ooogle 3-1, EXT_ELEM_PROP_4: Ooogle 4-1, EXT_ELEM_PROP_5: Ooogle 5-1} + +ELEM_PROP_1: 100.101 +ELEM_PROP_2: 669 +ELEM_PROP_3: 100.301 +ELEM_PROP_4: 100.401 +ELEM_PROP_5: 100.501 +[ 101, 102, 103 ] +[ 111, 112, 113 ] +[ 121, 122, 123 ] +[ 131, 132, 133 ] +[ 141, 142, 143 ] + + +-------------------- + 3 +-------------------- +{EXT_ELEM_PROP_1: Ooogle 1-2, EXT_ELEM_PROP_2: Ooogle 2-2, EXT_ELEM_PROP_3: Ooogle 3-2, EXT_ELEM_PROP_4: Ooogle 4-2, EXT_ELEM_PROP_5: Ooogle 5-2} + +ELEM_PROP_1: 200.101 +ELEM_PROP_2: 669 +ELEM_PROP_3: 200.301 +ELEM_PROP_4: 200.401 +ELEM_PROP_5: 200.501 +[ 201, 202, 203 ] +[ 211, 212, 213 ] +[ 221, 222, 223 ] +[ 231, 232, 233 ] +[ 241, 242, 243 ] + + +-------------------- + 4 +-------------------- +{EXT_ELEM_PROP_1: Ooogle 1-3, EXT_ELEM_PROP_2: Ooogle 2-3, EXT_ELEM_PROP_3: Ooogle 3-3, EXT_ELEM_PROP_4: Ooogle 4-3, EXT_ELEM_PROP_5: Ooogle 5-3} + +ELEM_PROP_1: 300.101 +ELEM_PROP_2: 669 +ELEM_PROP_3: 300.301 +ELEM_PROP_4: 300.401 +ELEM_PROP_5: 300.501 +[ 301, 302, 303 ] +[ 311, 312, 313 ] +[ 321, 322, 323 ] +[ 331, 332, 333 ] +[ 341, 342, 343 ] + + +-------------------- + 5 +-------------------- +{EXT_ELEM_PROP_1: Ooogle 1-4, EXT_ELEM_PROP_2: Ooogle 2-4, EXT_ELEM_PROP_3: Ooogle 3-4, EXT_ELEM_PROP_4: Ooogle 4-4, EXT_ELEM_PROP_5: Ooogle 5-4} + +ELEM_PROP_1: 400.101 +ELEM_PROP_2: 669 +ELEM_PROP_3: 400.301 +ELEM_PROP_4: 400.401 +ELEM_PROP_5: 400.501 +[ 401, 402, 403 ] +[ 411, 412, 413 ] +[ 421, 422, 423 ] +[ 431, 432, 433 ] +[ 441, 442, 443 ] + + + +set.bsize(): 120 +set.size(): 6 +set.num_extend_elem_props(): 5 +set.prop(PROP_9): 419 +set.elem_prop_keys(): [ ELEM_PROP_1 ELEM_PROP_2 ELEM_PROP_3 ELEM_PROP_4 ELEM_PROP_5 ] + + +------------------------------------- + 10 MODFICATIONS +------------------------------------- + +PROP_1: 1.101 +PROP_2: 2.201 +PROP_4: 4.401 +PROP_5: 5.501 +PROP_6: 984 +PROP_9: 419 + +-------------------- + 0 +-------------------- +{EXT_ELEM_PROP_1: Ooogle 1-0, EXT_ELEM_PROP_2: Ooogle 2-0, EXT_ELEM_PROP_3: Ooogle 3-0, EXT_ELEM_PROP_4: Ooogle 4-0, EXT_ELEM_PROP_5: Ooogle 5-0} + +ELEM_PROP_1: 0.101 +ELEM_PROP_2: 669 +ELEM_PROP_3: 0.301 +ELEM_PROP_4: 463 +ELEM_PROP_5: 661 +[ 1, 2, 3 ] +[ 11, 12, 13 ] +[ 21, 22, 23 ] +[ 31, 32, 33 ] +[ 41, 42, 43 ] + + +-------------------- + 1 +-------------------- +{EXT_ELEM_PROP_1: NaN, EXT_ELEM_PROP_2: NaN, EXT_ELEM_PROP_3: NaN, EXT_ELEM_PROP_4: NaN, EXT_ELEM_PROP_5: NaN} + +ELEM_PROP_1: 1009 +ELEM_PROP_2: 669 +ELEM_PROP_3: 1009 +ELEM_PROP_4: 463 +ELEM_PROP_5: 661 +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] + + +-------------------- + 2 +-------------------- +{EXT_ELEM_PROP_1: NaN, EXT_ELEM_PROP_2: NaN, EXT_ELEM_PROP_3: NaN, EXT_ELEM_PROP_4: NaN, EXT_ELEM_PROP_5: NaN} + +ELEM_PROP_1: 100.101 +ELEM_PROP_2: 669 +ELEM_PROP_3: 100.301 +ELEM_PROP_4: 463 +ELEM_PROP_5: 661 +[ 101, 102, 103 ] +[ 111, 112, 113 ] +[ 121, 122, 123 ] +[ 131, 132, 133 ] +[ 141, 142, 143 ] + + +-------------------- + 3 +-------------------- +{EXT_ELEM_PROP_1: Ooogle 1-2, EXT_ELEM_PROP_2: Ooogle 2-2, EXT_ELEM_PROP_3: Ooogle 3-2, EXT_ELEM_PROP_4: Ooogle 4-2, EXT_ELEM_PROP_5: Ooogle 5-2} + +ELEM_PROP_1: 200.101 +ELEM_PROP_2: 669 +ELEM_PROP_3: 200.301 +ELEM_PROP_4: 463 +ELEM_PROP_5: 661 +[ 201, 202, 203 ] +[ 211, 212, 213 ] +[ 221, 222, 223 ] +[ 231, 232, 233 ] +[ 241, 242, 243 ] + + +-------------------- + 4 +-------------------- +{EXT_ELEM_PROP_1: Ooogle 1-3, EXT_ELEM_PROP_2: Ooogle 2-3, EXT_ELEM_PROP_3: Ooogle 3-3, EXT_ELEM_PROP_4: Ooogle 4-3, EXT_ELEM_PROP_5: Ooogle 5-3} + +ELEM_PROP_1: 300.101 +ELEM_PROP_2: 669 +ELEM_PROP_3: 300.301 +ELEM_PROP_4: 463 +ELEM_PROP_5: 661 +[ 301, 302, 303 ] +[ 311, 312, 313 ] +[ 321, 322, 323 ] +[ 331, 332, 333 ] +[ 341, 342, 343 ] + + +-------------------- + 5 +-------------------- +{EXT_ELEM_PROP_1: Ooogle 1-4, EXT_ELEM_PROP_2: Ooogle 2-4, EXT_ELEM_PROP_3: Ooogle 3-4, EXT_ELEM_PROP_4: Ooogle 4-4, EXT_ELEM_PROP_5: Ooogle 5-4} + +ELEM_PROP_1: 400.101 +ELEM_PROP_2: 669 +ELEM_PROP_3: 400.301 +ELEM_PROP_4: 463 +ELEM_PROP_5: 661 +[ 401, 402, 403 ] +[ 411, 412, 413 ] +[ 421, 422, 423 ] +[ 431, 432, 433 ] +[ 441, 442, 443 ] + + + +set.prop_index(PROP_2): 1 +set.vsize(): 158 +set.num_props(): 6 +set.num_extend_elem_props(): 5 +set.prop_index(PROP_2): 1 + + +------------------------------------- + 15 MODFICATIONS +------------------------------------- + +PROP_1: 1.101 +PROP_2: 2.201 +PROP_4: 4.401 +PROP_5: 5.501 +PROP_6: 984 +PROP_7: 434 +PROP_9: 419 + +-------------------- + 0 +-------------------- +{EXT_ELEM_PROP_1: Ooogle 1-0, EXT_ELEM_PROP_2: Ooogle 2-0, EXT_ELEM_PROP_3: Ooogle 3-0, EXT_ELEM_PROP_4: Ooogle 4-0, EXT_ELEM_PROP_5: Ooogle 5-0} + +ELEM_PROP_1: 0.101 +ELEM_PROP_2: 669 +ELEM_PROP_3: 0.301 +ELEM_PROP_4: 815 +ELEM_PROP_5: 661 +[ 1, 2, 3 ] +[ 11, 12, 13 ] +[ 21, 22, 23 ] +[ 31, 32, 33 ] +[ 41, 42, 43 ] + + +-------------------- + 1 +-------------------- +{EXT_ELEM_PROP_1: NaN, EXT_ELEM_PROP_2: NaN, EXT_ELEM_PROP_3: NaN, EXT_ELEM_PROP_4: NaN, EXT_ELEM_PROP_5: NaN} + +ELEM_PROP_1: 1009 +ELEM_PROP_2: 1009 +ELEM_PROP_3: 1009 +ELEM_PROP_4: 1009 +ELEM_PROP_5: 1009 +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] + + +-------------------- + 2 +-------------------- +{EXT_ELEM_PROP_1: NaN, EXT_ELEM_PROP_2: NaN, EXT_ELEM_PROP_3: NaN, EXT_ELEM_PROP_4: NaN, EXT_ELEM_PROP_5: NaN} + +ELEM_PROP_1: 100.101 +ELEM_PROP_2: 669 +ELEM_PROP_3: 100.301 +ELEM_PROP_4: 815 +ELEM_PROP_5: 661 +[ 101, 102, 103 ] +[ 111, 112, 113 ] +[ 121, 122, 123 ] +[ 131, 132, 133 ] +[ 141, 142, 143 ] + + +-------------------- + 3 +-------------------- +{EXT_ELEM_PROP_1: Ooogle 1-2, EXT_ELEM_PROP_2: Ooogle 2-2, EXT_ELEM_PROP_3: Ooogle 3-2, EXT_ELEM_PROP_4: Ooogle 4-2, EXT_ELEM_PROP_5: Ooogle 5-2} + +ELEM_PROP_1: 200.101 +ELEM_PROP_2: 669 +ELEM_PROP_3: 200.301 +ELEM_PROP_4: 815 +ELEM_PROP_5: 661 +[ 201, 202, 203 ] +[ 211, 212, 213 ] +[ 221, 222, 223 ] +[ 231, 232, 233 ] +[ 241, 242, 243 ] + + +-------------------- + 4 +-------------------- +{EXT_ELEM_PROP_1: Ooogle 1-3, EXT_ELEM_PROP_2: Ooogle 2-3, EXT_ELEM_PROP_3: Ooogle 3-3, EXT_ELEM_PROP_4: Ooogle 4-3, EXT_ELEM_PROP_5: Ooogle 5-3} + +ELEM_PROP_1: 300.101 +ELEM_PROP_2: 669 +ELEM_PROP_3: 300.301 +ELEM_PROP_4: 815 +ELEM_PROP_5: 661 +[ 301, 302, 303 ] +[ 311, 312, 313 ] +[ 321, 322, 323 ] +[ 331, 332, 333 ] +[ 341, 342, 343 ] + + +-------------------- + 5 +-------------------- +{EXT_ELEM_PROP_1: Ooogle 1-4, EXT_ELEM_PROP_2: Ooogle 2-4, EXT_ELEM_PROP_3: Ooogle 3-4, EXT_ELEM_PROP_4: Ooogle 4-4, EXT_ELEM_PROP_5: Ooogle 5-4} + +ELEM_PROP_1: 400.101 +ELEM_PROP_2: 669 +ELEM_PROP_3: 400.301 +ELEM_PROP_4: 815 +ELEM_PROP_5: 661 +[ 401, 402, 403 ] +[ 411, 412, 413 ] +[ 421, 422, 423 ] +[ 431, 432, 433 ] +[ 441, 442, 443 ] + + +-------------------- + 6 +-------------------- +{EXT_ELEM_PROP_1: 1.141, EXT_ELEM_PROP_2: 2.241, EXT_ELEM_PROP_3: 3.341, EXT_ELEM_PROP_4: 4.441, EXT_ELEM_PROP_5: 5.541} + +ELEM_PROP_1: 1001 +ELEM_PROP_2: 1001 +ELEM_PROP_3: 1001 +ELEM_PROP_4: 815 +ELEM_PROP_5: 1001 +[ 1001, 1001, 1001 ] +[ 1001, 1001, 1001 ] +[ 1001, 1001, 1001 ] +[ 1001, 1001, 1001 ] +[ 1001, 1001, 1001 ] +[ 1001, 1001, 1001 ] +[ 1001, 1001, 1001 ] +[ 1001, 1001, 1001 ] +[ 1001, 1001, 1001 ] + + + +set.get_extend_elem_prop_header(): [ EXT_ELEM_PROP_1 EXT_ELEM_PROP_2 EXT_ELEM_PROP_3 EXT_ELEM_PROP_4 EXT_ELEM_PROP_5 ] +set.prop_keys(): [ PROP_1 PROP_2 PROP_4 PROP_5 PROP_6 PROP_7 PROP_9 ] +set.prop_keys(): [ PROP_1 PROP_2 PROP_4 PROP_5 PROP_6 PROP_7 PROP_9 ] +set.elem_prop_keys(): [ ELEM_PROP_1 ELEM_PROP_2 ELEM_PROP_3 ELEM_PROP_4 ELEM_PROP_5 ] + + +------------------------------------- + 20 MODFICATIONS +------------------------------------- + +PROP_1: 1.101 +PROP_2: 2.201 +PROP_4: 4.401 +PROP_5: 5.501 +PROP_6: 984 +PROP_7: 434 +PROP_9: 419 + +-------------------- + 0 +-------------------- +{EXT_ELEM_PROP_1: Ooogle 1-0, EXT_ELEM_PROP_2: Ooogle 2-0, EXT_ELEM_PROP_3: Ooogle 3-0, EXT_ELEM_PROP_4: Ooogle 4-0, EXT_ELEM_PROP_5: Ooogle 5-0} + +ELEM_PROP_1: 0.101 +ELEM_PROP_2: 669 +ELEM_PROP_3: 0.301 +ELEM_PROP_4: 815 +ELEM_PROP_5: 661 +[ 1, 2, 3 ] +[ 11, 12, 13 ] +[ 21, 22, 23 ] +[ 31, 32, 33 ] +[ 41, 42, 43 ] + + +-------------------- + 1 +-------------------- +{EXT_ELEM_PROP_1: NaN, EXT_ELEM_PROP_2: NaN, EXT_ELEM_PROP_3: NaN, EXT_ELEM_PROP_4: NaN, EXT_ELEM_PROP_5: NaN} + +ELEM_PROP_1: 1009 +ELEM_PROP_2: 1009 +ELEM_PROP_3: 1009 +ELEM_PROP_4: 1009 +ELEM_PROP_5: 1009 +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] + + +-------------------- + 2 +-------------------- +{EXT_ELEM_PROP_1: Ooogle 1-2, EXT_ELEM_PROP_2: Ooogle 2-2, EXT_ELEM_PROP_3: Ooogle 3-2, EXT_ELEM_PROP_4: Ooogle 4-2, EXT_ELEM_PROP_5: Ooogle 5-2} + +ELEM_PROP_1: 200.101 +ELEM_PROP_2: 669 +ELEM_PROP_3: 200.301 +ELEM_PROP_4: 815 +ELEM_PROP_5: 661 +[ 201, 202, 203 ] +[ 211, 212, 213 ] +[ 221, 222, 223 ] +[ 231, 232, 233 ] +[ 241, 242, 243 ] + + +-------------------- + 3 +-------------------- +{EXT_ELEM_PROP_1: 1.141, EXT_ELEM_PROP_2: 2.241, EXT_ELEM_PROP_3: 3.341, EXT_ELEM_PROP_4: 4.441, EXT_ELEM_PROP_5: 5.541} + +ELEM_PROP_1: 300.101 +ELEM_PROP_2: 669 +ELEM_PROP_3: 300.301 +ELEM_PROP_4: 815 +ELEM_PROP_5: 661 +[ 301, 302, 303 ] +[ 311, 312, 313 ] +[ 321, 322, 323 ] +[ 331, 332, 333 ] +[ 341, 342, 343 ] + + +-------------------- + 4 +-------------------- +{EXT_ELEM_PROP_1: Ooogle 1-4, EXT_ELEM_PROP_2: Ooogle 2-4, EXT_ELEM_PROP_3: Ooogle 3-4, EXT_ELEM_PROP_4: Ooogle 4-4, EXT_ELEM_PROP_5: Ooogle 5-4} + +ELEM_PROP_1: 400.101 +ELEM_PROP_2: 669 +ELEM_PROP_3: 400.301 +ELEM_PROP_4: 815 +ELEM_PROP_5: 661 +[ 401, 402, 403 ] +[ 411, 412, 413 ] +[ 421, 422, 423 ] +[ 431, 432, 433 ] +[ 441, 442, 443 ] + + +-------------------- + 5 +-------------------- +{EXT_ELEM_PROP_1: 1.141, EXT_ELEM_PROP_2: 2.241, EXT_ELEM_PROP_3: 3.341, EXT_ELEM_PROP_4: 4.441, EXT_ELEM_PROP_5: 5.541} + +ELEM_PROP_1: 1001 +ELEM_PROP_2: 1001 +ELEM_PROP_3: 1001 +ELEM_PROP_4: 815 +ELEM_PROP_5: 1001 +[ 1001, 1001, 1001 ] +[ 1001, 1001, 1001 ] +[ 1001, 1001, 1001 ] +[ 1001, 1001, 1001 ] +[ 1001, 1001, 1001 ] +[ 1001, 1001, 1001 ] +[ 1001, 1001, 1001 ] +[ 1001, 1001, 1001 ] +[ 1001, 1001, 1001 ] + + +-------------------- + 6 +-------------------- +{EXT_ELEM_PROP_1: 1.181, EXT_ELEM_PROP_2: 2.281, EXT_ELEM_PROP_3: 3.381, EXT_ELEM_PROP_4: 4.481, EXT_ELEM_PROP_5: 5.581} + +ELEM_PROP_1: 1007 +ELEM_PROP_2: 1007 +ELEM_PROP_3: 1007 +ELEM_PROP_4: 1007 +ELEM_PROP_5: 1007 +[ 1007, 1007, 1007 ] +[ 1007, 1007, 1007 ] +[ 1007, 1007, 1007 ] +[ 1007, 1007, 1007 ] +[ 1007, 1007, 1007 ] + + + +set.elem_prop_index(ELEM_PROP_4): 3 +set.elem_prop_index(ELEM_PROP_4): 3 + + +------------------------------------- + 25 MODFICATIONS +------------------------------------- + +PROP_1: 1.101 +PROP_2: 2.201 +PROP_4: 4.401 +PROP_5: 5.501 +PROP_6: 984 +PROP_7: 434 +PROP_9: 419 + +-------------------- + 0 +-------------------- +{EXT_ELEM_PROP_1: Ooogle 1-0, EXT_ELEM_PROP_2: Ooogle 2-0, EXT_ELEM_PROP_3: Ooogle 3-0, EXT_ELEM_PROP_4: Ooogle 4-0, EXT_ELEM_PROP_5: Ooogle 5-0} + +ELEM_PROP_1: 0.101 +ELEM_PROP_2: 669 +ELEM_PROP_3: 0.301 +ELEM_PROP_4: 815 +ELEM_PROP_5: 661 +[ 1, 2, 3 ] +[ 11, 12, 13 ] +[ 21, 22, 23 ] +[ 31, 32, 33 ] +[ 41, 42, 43 ] +[ 511, 511, 511 ] +[ 511, 511, 511 ] + + +-------------------- + 1 +-------------------- +{EXT_ELEM_PROP_1: NaN, EXT_ELEM_PROP_2: NaN, EXT_ELEM_PROP_3: NaN, EXT_ELEM_PROP_4: NaN, EXT_ELEM_PROP_5: NaN} + +ELEM_PROP_1: 1003 +ELEM_PROP_2: 1003 +ELEM_PROP_3: 1003 +ELEM_PROP_4: 1003 +ELEM_PROP_5: 1003 +[ 511, 511, 511 ] +[ 511, 511, 511 ] +[ 511, 511, 511 ] +[ 511, 511, 511 ] +[ 511, 511, 511 ] +[ 511, 511, 511 ] +[ 511, 511, 511 ] + + + +set.prop(PROP_4): 4.401 + + +------------------------------------- + 30 MODFICATIONS +------------------------------------- + +PROP_1: 1.101 +PROP_2: 2.201 +PROP_4: 4.401 +PROP_5: 5.501 +PROP_6: 984 +PROP_7: 434 +PROP_9: 419 + +-------------------- + 0 +-------------------- +{EXT_ELEM_PROP_1: Ooogle 1-0, EXT_ELEM_PROP_10: NaN, EXT_ELEM_PROP_2: Ooogle 2-0, EXT_ELEM_PROP_3: Ooogle 3-0, EXT_ELEM_PROP_4: Ooogle 4-0, EXT_ELEM_PROP_5: Ooogle 5-0, EXT_ELEM_PROP_6: NaN, EXT_ELEM_PROP_7: NaN, EXT_ELEM_PROP_8: NaN, EXT_ELEM_PROP_9: NaN} + +ELEM_PROP_1: 0.101 +ELEM_PROP_2: 669 +ELEM_PROP_3: 0.301 +ELEM_PROP_4: 734 +ELEM_PROP_5: 661 +[ 1, 2, 3 ] +[ 11, 12, 13 ] +[ 21, 22, 23 ] +[ 31, 32, 33 ] +[ 41, 42, 43 ] +[ 511, 511, 511 ] +[ 511, 511, 511 ] +[ 886, 886, 886 ] + + +-------------------- + 1 +-------------------- +{EXT_ELEM_PROP_1: NaN, EXT_ELEM_PROP_10: NaN, EXT_ELEM_PROP_2: NaN, EXT_ELEM_PROP_3: NaN, EXT_ELEM_PROP_4: NaN, EXT_ELEM_PROP_5: NaN, EXT_ELEM_PROP_6: NaN, EXT_ELEM_PROP_7: NaN, EXT_ELEM_PROP_8: NaN, EXT_ELEM_PROP_9: NaN} + +ELEM_PROP_1: 1003 +ELEM_PROP_2: 1003 +ELEM_PROP_3: 1003 +ELEM_PROP_4: 734 +ELEM_PROP_5: 1003 +[ 511, 511, 511 ] +[ 511, 511, 511 ] +[ 511, 511, 511 ] +[ 511, 511, 511 ] +[ 511, 511, 511 ] +[ 511, 511, 511 ] +[ 511, 511, 511 ] +[ 886, 886, 886 ] + + +-------------------- + 2 +-------------------- +{EXT_ELEM_PROP_1: NaN, EXT_ELEM_PROP_10: NaN, EXT_ELEM_PROP_2: NaN, EXT_ELEM_PROP_3: NaN, EXT_ELEM_PROP_4: NaN, EXT_ELEM_PROP_5: NaN, EXT_ELEM_PROP_6: NaN, EXT_ELEM_PROP_7: NaN, EXT_ELEM_PROP_8: NaN, EXT_ELEM_PROP_9: NaN} + +ELEM_PROP_1: 1009 +ELEM_PROP_2: 1009 +ELEM_PROP_3: 1009 +ELEM_PROP_4: 734 +ELEM_PROP_5: 1009 +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] +[ 886, 886, 886 ] + + + +set.num_extend_elem_props(): 10 +set.num_props(): 7 +set.num_extend_elem_props(): 10 + + +------------------------------------- + 35 MODFICATIONS +------------------------------------- + +PROP_1: 1.101 +PROP_2: 2.201 +PROP_4: 4.401 +PROP_5: 5.501 +PROP_6: 984 +PROP_7: 434 +PROP_9: 419 + +-------------------- + 0 +-------------------- +{EXT_ELEM_PROP_1: Ooogle 1-0, EXT_ELEM_PROP_10: NaN, EXT_ELEM_PROP_2: Ooogle 2-0, EXT_ELEM_PROP_3: 733, EXT_ELEM_PROP_4: Ooogle 4-0, EXT_ELEM_PROP_5: Ooogle 5-0, EXT_ELEM_PROP_6: NaN, EXT_ELEM_PROP_7: NaN, EXT_ELEM_PROP_8: NaN, EXT_ELEM_PROP_9: NaN} + +ELEM_PROP_1: 0.101 +ELEM_PROP_2: 669 +ELEM_PROP_4: 734 +ELEM_PROP_5: 661 +[ 1, 2, 3 ] +[ 11, 12, 13 ] +[ 21, 22, 23 ] +[ 31, 32, 33 ] +[ 41, 42, 43 ] +[ 511, 511, 511 ] +[ 511, 511, 511 ] +[ 886, 886, 886 ] + + +-------------------- + 1 +-------------------- +{EXT_ELEM_PROP_1: NaN, EXT_ELEM_PROP_10: NaN, EXT_ELEM_PROP_2: NaN, EXT_ELEM_PROP_3: NaN, EXT_ELEM_PROP_4: NaN, EXT_ELEM_PROP_5: NaN, EXT_ELEM_PROP_6: NaN, EXT_ELEM_PROP_7: NaN, EXT_ELEM_PROP_8: NaN, EXT_ELEM_PROP_9: NaN} + +ELEM_PROP_1: 1006 +ELEM_PROP_2: 1006 +ELEM_PROP_4: 1006 +ELEM_PROP_5: 1006 +[ 1006, 1006, 1006 ] +[ 1006, 1006, 1006 ] +[ 1006, 1006, 1006 ] +[ 1006, 1006, 1006 ] +[ 1006, 1006, 1006 ] +[ 1006, 1006, 1006 ] +[ 1006, 1006, 1006 ] +[ 1006, 1006, 1006 ] + + +-------------------- + 2 +-------------------- +{EXT_ELEM_PROP_1: NaN, EXT_ELEM_PROP_10: NaN, EXT_ELEM_PROP_2: NaN, EXT_ELEM_PROP_3: NaN, EXT_ELEM_PROP_4: NaN, EXT_ELEM_PROP_5: NaN, EXT_ELEM_PROP_6: NaN, EXT_ELEM_PROP_7: NaN, EXT_ELEM_PROP_8: NaN, EXT_ELEM_PROP_9: NaN} + +ELEM_PROP_1: 1005 +ELEM_PROP_2: 1005 +ELEM_PROP_4: 1005 +ELEM_PROP_5: 1005 +[ 1005, 1005, 1005 ] +[ 1005, 1005, 1005 ] +[ 1005, 1005, 1005 ] +[ 1005, 1005, 1005 ] +[ 1005, 1005, 1005 ] +[ 1005, 1005, 1005 ] +[ 1005, 1005, 1005 ] +[ 1005, 1005, 1005 ] + + +-------------------- + 3 +-------------------- +{EXT_ELEM_PROP_1: NaN, EXT_ELEM_PROP_10: NaN, EXT_ELEM_PROP_2: NaN, EXT_ELEM_PROP_3: NaN, EXT_ELEM_PROP_4: NaN, EXT_ELEM_PROP_5: NaN, EXT_ELEM_PROP_6: NaN, EXT_ELEM_PROP_7: NaN, EXT_ELEM_PROP_8: NaN, EXT_ELEM_PROP_9: NaN} + +ELEM_PROP_1: 1003 +ELEM_PROP_2: 1003 +ELEM_PROP_4: 734 +ELEM_PROP_5: 1003 +[ 511, 511, 511 ] +[ 511, 511, 511 ] +[ 511, 511, 511 ] +[ 511, 511, 511 ] +[ 511, 511, 511 ] +[ 511, 511, 511 ] +[ 511, 511, 511 ] +[ 886, 886, 886 ] + + +-------------------- + 4 +-------------------- +{EXT_ELEM_PROP_1: NaN, EXT_ELEM_PROP_10: NaN, EXT_ELEM_PROP_2: NaN, EXT_ELEM_PROP_3: NaN, EXT_ELEM_PROP_4: NaN, EXT_ELEM_PROP_5: NaN, EXT_ELEM_PROP_6: NaN, EXT_ELEM_PROP_7: NaN, EXT_ELEM_PROP_8: NaN, EXT_ELEM_PROP_9: NaN} + +ELEM_PROP_1: 1009 +ELEM_PROP_2: 1009 +ELEM_PROP_4: 734 +ELEM_PROP_5: 1009 +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] +[ 886, 886, 886 ] + + + +set.prop(PROP_7): 434 + + +------------------------------------- + 40 MODFICATIONS +------------------------------------- + +PROP_1: 1.101 +PROP_2: 2.201 +PROP_4: 4.401 +PROP_5: 5.501 +PROP_6: 984 +PROP_7: 434 +PROP_9: 419 + +-------------------- + 0 +-------------------- +{EXT_ELEM_PROP_1: NaN, EXT_ELEM_PROP_10: NaN, EXT_ELEM_PROP_2: NaN, EXT_ELEM_PROP_3: NaN, EXT_ELEM_PROP_4: NaN, EXT_ELEM_PROP_5: NaN, EXT_ELEM_PROP_6: NaN, EXT_ELEM_PROP_7: NaN, EXT_ELEM_PROP_8: NaN, EXT_ELEM_PROP_9: NaN} + +ELEM_PROP_1: 1006 +ELEM_PROP_2: 1006 +ELEM_PROP_4: 1006 +ELEM_PROP_5: 1006 +[ 1006, 1006, 1006 ] +[ 1006, 1006, 1006 ] +[ 1006, 1006, 1006 ] +[ 1006, 1006, 1006 ] +[ 1006, 1006, 1006 ] +[ 1006, 1006, 1006 ] +[ 1006, 1006, 1006 ] +[ 1006, 1006, 1006 ] + + +-------------------- + 1 +-------------------- +{EXT_ELEM_PROP_1: NaN, EXT_ELEM_PROP_10: NaN, EXT_ELEM_PROP_2: NaN, EXT_ELEM_PROP_3: NaN, EXT_ELEM_PROP_4: NaN, EXT_ELEM_PROP_5: NaN, EXT_ELEM_PROP_6: NaN, EXT_ELEM_PROP_7: NaN, EXT_ELEM_PROP_8: NaN, EXT_ELEM_PROP_9: NaN} + +ELEM_PROP_1: 1009 +ELEM_PROP_2: 1009 +ELEM_PROP_4: 734 +ELEM_PROP_5: 1009 +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] +[ 886, 886, 886 ] + + + +set.num_props(): 7 +set.get_extend_elem_prop(EXT_ELEM_PROP_9,0): NaN +set.has_elem_prop(ELEM_PROP_9): 0 + + +------------------------------------- + 45 MODFICATIONS +------------------------------------- + +PROP_1: 1.101 +PROP_2: 2.201 +PROP_4: 4.401 +PROP_5: 5.501 +PROP_6: 984 +PROP_7: 434 +PROP_9: 419 + +-------------------- + 0 +-------------------- +{EXT_ELEM_PROP_10: NaN, EXT_ELEM_PROP_2: NaN, EXT_ELEM_PROP_3: NaN, EXT_ELEM_PROP_4: NaN, EXT_ELEM_PROP_5: NaN, EXT_ELEM_PROP_7: NaN, EXT_ELEM_PROP_8: NaN, EXT_ELEM_PROP_9: NaN} + +ELEM_PROP_1: 1006 +ELEM_PROP_2: 1006 +ELEM_PROP_4: 1006 +[ 1006, 1006, 1006 ] +[ 1006, 1006, 1006 ] +[ 1006, 1006, 1006 ] +[ 1006, 1006, 1006 ] +[ 1006, 1006, 1006 ] +[ 1006, 1006, 1006 ] +[ 1006, 1006, 1006 ] +[ 1006, 1006, 1006 ] + + +-------------------- + 1 +-------------------- +{EXT_ELEM_PROP_10: NaN, EXT_ELEM_PROP_2: NaN, EXT_ELEM_PROP_3: NaN, EXT_ELEM_PROP_4: NaN, EXT_ELEM_PROP_5: NaN, EXT_ELEM_PROP_7: NaN, EXT_ELEM_PROP_8: NaN, EXT_ELEM_PROP_9: NaN} + +ELEM_PROP_1: 1009 +ELEM_PROP_2: 1009 +ELEM_PROP_4: 734 +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] +[ 886, 886, 886 ] + + + +set.vsize(): 61 +set.elem_prop_index(ELEM_PROP_4): 1 +set.vsize(): 59 + + +------------------------------------- + 50 MODFICATIONS +------------------------------------- + +PROP_1: 1.101 +PROP_2: 2.201 +PROP_4: 4.401 +PROP_5: 5.501 +PROP_6: 984 +PROP_7: 434 +PROP_9: 419 + +-------------------- + 0 +-------------------- +{EXT_ELEM_PROP_10: NaN, EXT_ELEM_PROP_3: NaN, EXT_ELEM_PROP_4: NaN, EXT_ELEM_PROP_5: NaN, EXT_ELEM_PROP_7: NaN, EXT_ELEM_PROP_9: NaN} + +ELEM_PROP_2: 1006 +ELEM_PROP_4: 1006 +[ 1006, 1006, 1006 ] +[ 1006, 1006, 1006 ] +[ 1006, 1006, 1006 ] +[ 1006, 1006, 1006 ] +[ 1006, 1006, 1006 ] +[ 1006, 1006, 1006 ] +[ 1006, 1006, 1006 ] +[ 1006, 1006, 1006 ] + + +-------------------- + 1 +-------------------- +{EXT_ELEM_PROP_10: NaN, EXT_ELEM_PROP_3: NaN, EXT_ELEM_PROP_4: NaN, EXT_ELEM_PROP_5: NaN, EXT_ELEM_PROP_7: NaN, EXT_ELEM_PROP_9: NaN} + +ELEM_PROP_2: 1009 +ELEM_PROP_4: 734 +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] +[ 886, 886, 886 ] + + +-------------------- + 2 +-------------------- +{EXT_ELEM_PROP_10: -99, EXT_ELEM_PROP_3: NaN, EXT_ELEM_PROP_4: NaN, EXT_ELEM_PROP_5: NaN, EXT_ELEM_PROP_7: NaN, EXT_ELEM_PROP_9: NaN} + +ELEM_PROP_2: 1008 +ELEM_PROP_4: 1008 +[ 1008, 1008, 1008 ] +[ 1008, 1008, 1008 ] +[ 1008, 1008, 1008 ] +[ 1008, 1008, 1008 ] +[ 1008, 1008, 1008 ] +[ 1008, 1008, 1008 ] +[ 1008, 1008, 1008 ] +[ 1008, 1008, 1008 ] + + + + + +------------------------------------- + 55 MODFICATIONS +------------------------------------- + +PROP_1: 1.101 +PROP_2: 2.201 +PROP_4: 4.401 +PROP_5: 5.501 +PROP_6: 984 +PROP_7: 434 +PROP_9: 419 + +-------------------- + 0 +-------------------- +{EXT_ELEM_PROP_10: NaN, EXT_ELEM_PROP_3: NaN, EXT_ELEM_PROP_4: NaN, EXT_ELEM_PROP_5: NaN, EXT_ELEM_PROP_7: NaN, EXT_ELEM_PROP_9: NaN} + +ELEM_PROP_2: 1006 +ELEM_PROP_4: 776 +[ 1006, 1006, 1006 ] +[ 1006, 1006, 1006 ] + + +-------------------- + 1 +-------------------- +{EXT_ELEM_PROP_10: Boogle 10-1, EXT_ELEM_PROP_3: NaN, EXT_ELEM_PROP_4: NaN, EXT_ELEM_PROP_5: NaN, EXT_ELEM_PROP_7: Boogle 7-1, EXT_ELEM_PROP_9: Boogle 9-1} + +ELEM_PROP_2: 1009 +ELEM_PROP_4: 776 +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] + + +-------------------- + 2 +-------------------- +{EXT_ELEM_PROP_10: 11.031, EXT_ELEM_PROP_3: 3.331, EXT_ELEM_PROP_4: 4.431, EXT_ELEM_PROP_5: 5.531, EXT_ELEM_PROP_7: 7.731, EXT_ELEM_PROP_9: 9.931} + +ELEM_PROP_2: 1009 +ELEM_PROP_4: 1009 +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] + + + +set.size(): 3 +set.num_props(): 7 +set.num_extend_elem_props(): 7 +set.has_elem_prop(ELEM_PROP_7): 0 + + +------------------------------------- + 60 MODFICATIONS +------------------------------------- + +PROP_1: 1.101 +PROP_2: 2.201 +PROP_4: 4.401 +PROP_5: 5.501 +PROP_6: 984 +PROP_7: 434 +PROP_9: 419 + +-------------------- + 0 +-------------------- +{EXT_ELEM_PROP_10: 11.011, EXT_ELEM_PROP_3: 3.311, EXT_ELEM_PROP_4: 4.411, EXT_ELEM_PROP_5: 5.511, EXT_ELEM_PROP_7: 7.711, EXT_ELEM_PROP_8: 8.811, EXT_ELEM_PROP_9: 9.911} + +ELEM_PROP_2: 1005 +ELEM_PROP_4: 1005 +[ 1005, 1005, 1005 ] +[ 1005, 1005, 1005 ] + + +-------------------- + 1 +-------------------- +{EXT_ELEM_PROP_10: NaN, EXT_ELEM_PROP_3: NaN, EXT_ELEM_PROP_4: NaN, EXT_ELEM_PROP_5: NaN, EXT_ELEM_PROP_7: NaN, EXT_ELEM_PROP_8: -99, EXT_ELEM_PROP_9: NaN} + +ELEM_PROP_2: 1006 +ELEM_PROP_4: 776 +[ 1006, 1006, 1006 ] +[ 1006, 1006, 1006 ] + + +-------------------- + 2 +-------------------- +{EXT_ELEM_PROP_10: Boogle 10-1, EXT_ELEM_PROP_3: NaN, EXT_ELEM_PROP_4: NaN, EXT_ELEM_PROP_5: NaN, EXT_ELEM_PROP_7: Boogle 7-1, EXT_ELEM_PROP_8: -99, EXT_ELEM_PROP_9: Boogle 9-1} + +ELEM_PROP_2: 1009 +ELEM_PROP_4: 776 +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] + + +-------------------- + 3 +-------------------- +{EXT_ELEM_PROP_10: 11.031, EXT_ELEM_PROP_3: 3.331, EXT_ELEM_PROP_4: 4.431, EXT_ELEM_PROP_5: 5.531, EXT_ELEM_PROP_7: 7.731, EXT_ELEM_PROP_8: -99, EXT_ELEM_PROP_9: 9.931} + +ELEM_PROP_2: 1009 +ELEM_PROP_4: 1009 +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] + + +-------------------- + 4 +-------------------- +{EXT_ELEM_PROP_10: -99, EXT_ELEM_PROP_3: NaN, EXT_ELEM_PROP_4: NaN, EXT_ELEM_PROP_5: NaN, EXT_ELEM_PROP_7: NaN, EXT_ELEM_PROP_8: -99, EXT_ELEM_PROP_9: NaN} + +ELEM_PROP_2: 1003 +ELEM_PROP_4: 1003 +[ 1003, 1003, 1003 ] +[ 1003, 1003, 1003 ] + + + +set.get_extend_elem_prop(EXT_ELEM_PROP_3,3): 3.331 +set.num_elem_props(): 2 +set.vsize(): 42 + + +------------------------------------- + 65 MODFICATIONS +------------------------------------- + +PROP_1: 1.101 +PROP_2: 2.201 +PROP_4: 4.401 +PROP_5: 5.501 +PROP_6: 984 +PROP_7: 434 +PROP_9: 419 + +-------------------- + 0 +-------------------- +{EXT_ELEM_PROP_10: 11.011, EXT_ELEM_PROP_3: 3.311, EXT_ELEM_PROP_4: 4.411, EXT_ELEM_PROP_5: 5.511, EXT_ELEM_PROP_7: 7.711, EXT_ELEM_PROP_8: 8.811, EXT_ELEM_PROP_9: 9.911} + +[ 1005, 1005, 1005 ] +[ 1005, 1005, 1005 ] + + +-------------------- + 1 +-------------------- +{EXT_ELEM_PROP_10: NaN, EXT_ELEM_PROP_3: NaN, EXT_ELEM_PROP_4: NaN, EXT_ELEM_PROP_5: NaN, EXT_ELEM_PROP_7: NaN, EXT_ELEM_PROP_8: -99, EXT_ELEM_PROP_9: NaN} + +[ 1006, 1006, 1006 ] +[ 1006, 1006, 1006 ] + + +-------------------- + 2 +-------------------- +{EXT_ELEM_PROP_10: Boogle 10-0, EXT_ELEM_PROP_3: NaN, EXT_ELEM_PROP_4: NaN, EXT_ELEM_PROP_5: NaN, EXT_ELEM_PROP_7: Boogle 7-0, EXT_ELEM_PROP_8: Boogle 8-0, EXT_ELEM_PROP_9: Boogle 9-0} + +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] + + +-------------------- + 3 +-------------------- +{EXT_ELEM_PROP_10: 11.031, EXT_ELEM_PROP_3: 3.331, EXT_ELEM_PROP_4: 4.431, EXT_ELEM_PROP_5: 5.531, EXT_ELEM_PROP_7: 7.731, EXT_ELEM_PROP_8: -99, EXT_ELEM_PROP_9: 9.931} + +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] + + +-------------------- + 4 +-------------------- +{EXT_ELEM_PROP_10: -99, EXT_ELEM_PROP_3: NaN, EXT_ELEM_PROP_4: NaN, EXT_ELEM_PROP_5: NaN, EXT_ELEM_PROP_7: NaN, EXT_ELEM_PROP_8: -99, EXT_ELEM_PROP_9: NaN} + +[ 1003, 1003, 1003 ] +[ 1003, 1003, 1003 ] + + + +set.get_extend_elem_prop_header(): [ EXT_ELEM_PROP_10 EXT_ELEM_PROP_3 EXT_ELEM_PROP_4 EXT_ELEM_PROP_5 EXT_ELEM_PROP_7 EXT_ELEM_PROP_8 EXT_ELEM_PROP_9 ] +set.prop_index(PROP_4): 2 +set.num_elem_props(): 0 +set.bsize(): 30 +set.has_extend_elem_prop(EXT_ELEM_PROP_3): 1 +set.num_extend_elem_props(): 6 +set.num_props(): 7 + + +------------------------------------- + 70 MODFICATIONS +------------------------------------- + +PROP_1: 1.101 +PROP_2: 2.201 +PROP_4: 4.401 +PROP_5: 5.501 +PROP_6: 984 +PROP_7: 434 +PROP_9: 419 + +-------------------- + 0 +-------------------- +{EXT_ELEM_PROP_10: 11.011, EXT_ELEM_PROP_3: 3.311, EXT_ELEM_PROP_4: 4.411, EXT_ELEM_PROP_5: 5.511, EXT_ELEM_PROP_8: 8.811, EXT_ELEM_PROP_9: 9.911} + +[ 1005, 1005, 1005 ] +[ 1005, 1005, 1005 ] + + +-------------------- + 1 +-------------------- +{EXT_ELEM_PROP_10: 11.011, EXT_ELEM_PROP_3: 3.311, EXT_ELEM_PROP_4: 4.411, EXT_ELEM_PROP_5: 5.511, EXT_ELEM_PROP_8: 8.811, EXT_ELEM_PROP_9: 9.911} + +[ 1006, 1006, 1006 ] +[ 1006, 1006, 1006 ] + + +-------------------- + 2 +-------------------- +{EXT_ELEM_PROP_10: Boogle 10-0, EXT_ELEM_PROP_3: NaN, EXT_ELEM_PROP_4: NaN, EXT_ELEM_PROP_5: NaN, EXT_ELEM_PROP_8: Boogle 8-0, EXT_ELEM_PROP_9: Boogle 9-0} + +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] + + +-------------------- + 3 +-------------------- +{EXT_ELEM_PROP_10: 11.031, EXT_ELEM_PROP_3: 3.331, EXT_ELEM_PROP_4: 4.431, EXT_ELEM_PROP_5: 5.531, EXT_ELEM_PROP_8: -99, EXT_ELEM_PROP_9: 9.931} + +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] + + +-------------------- + 4 +-------------------- +{EXT_ELEM_PROP_10: -99, EXT_ELEM_PROP_3: NaN, EXT_ELEM_PROP_4: NaN, EXT_ELEM_PROP_5: NaN, EXT_ELEM_PROP_8: -99, EXT_ELEM_PROP_9: NaN} + +[ 1003, 1003, 1003 ] +[ 1003, 1003, 1003 ] + + + +set.has_extend_elem_prop(EXT_ELEM_PROP_8): 1 +set.vsize(): 55 + + +------------------------------------- + 75 MODFICATIONS +------------------------------------- + +PROP_1: 1.101 +PROP_2: 2.201 +PROP_4: 4.401 +PROP_5: 5.501 +PROP_6: 984 +PROP_7: 434 +PROP_9: 419 + +-------------------- + 0 +-------------------- +{EXT_ELEM_PROP_10: 11.011, EXT_ELEM_PROP_3: 3.311, EXT_ELEM_PROP_4: 4.411, EXT_ELEM_PROP_5: 5.511, EXT_ELEM_PROP_6: NaN, EXT_ELEM_PROP_7: NaN, EXT_ELEM_PROP_8: 8.811, EXT_ELEM_PROP_9: 9.911} + +[ 1005, 1005, 1005 ] +[ 1005, 1005, 1005 ] + + +-------------------- + 1 +-------------------- +{EXT_ELEM_PROP_10: 11.011, EXT_ELEM_PROP_3: 3.311, EXT_ELEM_PROP_4: 4.411, EXT_ELEM_PROP_5: 5.511, EXT_ELEM_PROP_6: NaN, EXT_ELEM_PROP_7: NaN, EXT_ELEM_PROP_8: 8.811, EXT_ELEM_PROP_9: 9.911} + +[ 1006, 1006, 1006 ] +[ 1006, 1006, 1006 ] + + +-------------------- + 2 +-------------------- +{EXT_ELEM_PROP_10: Boogle 10-4, EXT_ELEM_PROP_3: NaN, EXT_ELEM_PROP_4: -99, EXT_ELEM_PROP_5: NaN, EXT_ELEM_PROP_6: Boogle 6-4, EXT_ELEM_PROP_7: Boogle 7-4, EXT_ELEM_PROP_8: Boogle 8-4, EXT_ELEM_PROP_9: Boogle 9-4} + +[ 1008, 1008, 1008 ] +[ 1008, 1008, 1008 ] +[ 1008, 1008, 1008 ] +[ 1008, 1008, 1008 ] +[ 1008, 1008, 1008 ] +[ 1008, 1008, 1008 ] + + +-------------------- + 3 +-------------------- +{EXT_ELEM_PROP_10: Boogle 10-0, EXT_ELEM_PROP_3: NaN, EXT_ELEM_PROP_4: NaN, EXT_ELEM_PROP_5: NaN, EXT_ELEM_PROP_6: NaN, EXT_ELEM_PROP_7: NaN, EXT_ELEM_PROP_8: Boogle 8-0, EXT_ELEM_PROP_9: Boogle 9-0} + +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] + + +-------------------- + 4 +-------------------- +{EXT_ELEM_PROP_10: 11.031, EXT_ELEM_PROP_3: 3.331, EXT_ELEM_PROP_4: 4.431, EXT_ELEM_PROP_5: 5.531, EXT_ELEM_PROP_6: NaN, EXT_ELEM_PROP_7: NaN, EXT_ELEM_PROP_8: -99, EXT_ELEM_PROP_9: 9.931} + +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] + + +-------------------- + 5 +-------------------- +{EXT_ELEM_PROP_10: Boogle 10-3, EXT_ELEM_PROP_3: NaN, EXT_ELEM_PROP_4: -99, EXT_ELEM_PROP_5: NaN, EXT_ELEM_PROP_6: Boogle 6-3, EXT_ELEM_PROP_7: Boogle 7-3, EXT_ELEM_PROP_8: Boogle 8-3, EXT_ELEM_PROP_9: Boogle 9-3} + +[ 1003, 1003, 1003 ] +[ 1003, 1003, 1003 ] + + + +set.num_props(): 7 + + +------------------------------------- + 80 MODFICATIONS +------------------------------------- + +PROP_1: 1.101 +PROP_2: 2.201 +PROP_4: 4.401 +PROP_5: 5.501 +PROP_6: 984 +PROP_7: 434 +PROP_8: 140 +PROP_9: 419 + +-------------------- + 0 +-------------------- +{EXT_ELEM_PROP_10: 11.011, EXT_ELEM_PROP_3: 3.311, EXT_ELEM_PROP_4: 4.411, EXT_ELEM_PROP_5: 5.511, EXT_ELEM_PROP_6: NaN, EXT_ELEM_PROP_7: NaN, EXT_ELEM_PROP_8: 8.811, EXT_ELEM_PROP_9: 9.911} + +[ 1005, 1005, 1005 ] +[ 1005, 1005, 1005 ] + + +-------------------- + 1 +-------------------- +{EXT_ELEM_PROP_10: 11.011, EXT_ELEM_PROP_3: 3.311, EXT_ELEM_PROP_4: 4.411, EXT_ELEM_PROP_5: 5.511, EXT_ELEM_PROP_6: NaN, EXT_ELEM_PROP_7: NaN, EXT_ELEM_PROP_8: 8.811, EXT_ELEM_PROP_9: 9.911} + +[ 1006, 1006, 1006 ] +[ 1006, 1006, 1006 ] + + +-------------------- + 2 +-------------------- +{EXT_ELEM_PROP_10: Boogle 10-4, EXT_ELEM_PROP_3: NaN, EXT_ELEM_PROP_4: 138, EXT_ELEM_PROP_5: NaN, EXT_ELEM_PROP_6: Boogle 6-4, EXT_ELEM_PROP_7: Boogle 7-4, EXT_ELEM_PROP_8: Boogle 8-4, EXT_ELEM_PROP_9: Boogle 9-4} + +[ 1008, 1008, 1008 ] +[ 1008, 1008, 1008 ] +[ 1008, 1008, 1008 ] +[ 1008, 1008, 1008 ] +[ 1008, 1008, 1008 ] +[ 1008, 1008, 1008 ] + + +-------------------- + 3 +-------------------- +{EXT_ELEM_PROP_10: Boogle 10-0, EXT_ELEM_PROP_3: NaN, EXT_ELEM_PROP_4: NaN, EXT_ELEM_PROP_5: NaN, EXT_ELEM_PROP_6: NaN, EXT_ELEM_PROP_7: NaN, EXT_ELEM_PROP_8: Boogle 8-0, EXT_ELEM_PROP_9: Boogle 9-0} + +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] + + +-------------------- + 4 +-------------------- +{EXT_ELEM_PROP_10: 11.031, EXT_ELEM_PROP_3: 3.331, EXT_ELEM_PROP_4: 4.431, EXT_ELEM_PROP_5: 5.531, EXT_ELEM_PROP_6: NaN, EXT_ELEM_PROP_7: NaN, EXT_ELEM_PROP_8: -99, EXT_ELEM_PROP_9: 9.931} + +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] + + +-------------------- + 5 +-------------------- +{EXT_ELEM_PROP_10: 11.061, EXT_ELEM_PROP_3: 3.361, EXT_ELEM_PROP_4: 4.461, EXT_ELEM_PROP_5: 5.561, EXT_ELEM_PROP_6: 6.661, EXT_ELEM_PROP_7: 7.761, EXT_ELEM_PROP_8: 8.861, EXT_ELEM_PROP_9: 9.961} + +[ 1003, 1003, 1003 ] +[ 1003, 1003, 1003 ] + + + +set.get_extend_elem_prop_header(): [ EXT_ELEM_PROP_10 EXT_ELEM_PROP_3 EXT_ELEM_PROP_4 EXT_ELEM_PROP_5 EXT_ELEM_PROP_6 EXT_ELEM_PROP_7 EXT_ELEM_PROP_8 EXT_ELEM_PROP_9 ] + + +------------------------------------- + 85 MODFICATIONS +------------------------------------- + +PROP_1: 1.101 +PROP_2: 2.201 +PROP_4: 4.401 +PROP_6: 984 +PROP_7: 434 +PROP_8: 140 +PROP_9: 419 + +-------------------- + 0 +-------------------- +{EXT_ELEM_PROP_10: 11.011, EXT_ELEM_PROP_2: -99, EXT_ELEM_PROP_3: 3.311, EXT_ELEM_PROP_4: 4.411, EXT_ELEM_PROP_5: 5.511, EXT_ELEM_PROP_6: NaN, EXT_ELEM_PROP_7: NaN, EXT_ELEM_PROP_8: 8.811, EXT_ELEM_PROP_9: 9.911} + +[ 1005, 1005, 1005 ] +[ 1005, 1005, 1005 ] + + +-------------------- + 1 +-------------------- +{EXT_ELEM_PROP_10: 11.011, EXT_ELEM_PROP_2: -99, EXT_ELEM_PROP_3: 3.311, EXT_ELEM_PROP_4: 4.411, EXT_ELEM_PROP_5: 5.511, EXT_ELEM_PROP_6: NaN, EXT_ELEM_PROP_7: NaN, EXT_ELEM_PROP_8: 8.811, EXT_ELEM_PROP_9: 9.911} + +[ 1006, 1006, 1006 ] +[ 1006, 1006, 1006 ] + + +-------------------- + 2 +-------------------- +{EXT_ELEM_PROP_10: NaN, EXT_ELEM_PROP_2: -99, EXT_ELEM_PROP_3: NaN, EXT_ELEM_PROP_4: -99, EXT_ELEM_PROP_5: NaN, EXT_ELEM_PROP_6: NaN, EXT_ELEM_PROP_7: NaN, EXT_ELEM_PROP_8: NaN, EXT_ELEM_PROP_9: NaN} + +[ 1003, 1003, 1003 ] + + +-------------------- + 3 +-------------------- +{EXT_ELEM_PROP_10: Boogle 10-4, EXT_ELEM_PROP_2: -99, EXT_ELEM_PROP_3: NaN, EXT_ELEM_PROP_4: 138, EXT_ELEM_PROP_5: 667, EXT_ELEM_PROP_6: Boogle 6-4, EXT_ELEM_PROP_7: Boogle 7-4, EXT_ELEM_PROP_8: Boogle 8-4, EXT_ELEM_PROP_9: Boogle 9-4} + +[ 1008, 1008, 1008 ] +[ 1008, 1008, 1008 ] +[ 1008, 1008, 1008 ] +[ 1008, 1008, 1008 ] +[ 1008, 1008, 1008 ] +[ 1008, 1008, 1008 ] + + +-------------------- + 4 +-------------------- +{EXT_ELEM_PROP_10: Boogle 10-0, EXT_ELEM_PROP_2: -99, EXT_ELEM_PROP_3: NaN, EXT_ELEM_PROP_4: NaN, EXT_ELEM_PROP_5: NaN, EXT_ELEM_PROP_6: NaN, EXT_ELEM_PROP_7: NaN, EXT_ELEM_PROP_8: Boogle 8-0, EXT_ELEM_PROP_9: Boogle 9-0} + +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] + + +-------------------- + 5 +-------------------- +{EXT_ELEM_PROP_10: 11.031, EXT_ELEM_PROP_2: -99, EXT_ELEM_PROP_3: 3.331, EXT_ELEM_PROP_4: 4.431, EXT_ELEM_PROP_5: 5.531, EXT_ELEM_PROP_6: NaN, EXT_ELEM_PROP_7: NaN, EXT_ELEM_PROP_8: -99, EXT_ELEM_PROP_9: 9.931} + +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] + + +-------------------- + 6 +-------------------- +{EXT_ELEM_PROP_10: 11.061, EXT_ELEM_PROP_2: -99, EXT_ELEM_PROP_3: 3.361, EXT_ELEM_PROP_4: 4.461, EXT_ELEM_PROP_5: 5.561, EXT_ELEM_PROP_6: 6.661, EXT_ELEM_PROP_7: 7.761, EXT_ELEM_PROP_8: 8.861, EXT_ELEM_PROP_9: 9.961} + +[ 1003, 1003, 1003 ] +[ 1003, 1003, 1003 ] + + + +set.num_extend_elem_props(): 8 + + +------------------------------------- + 90 MODFICATIONS +------------------------------------- + +PROP_1: 1.101 +PROP_2: 2.201 +PROP_4: 4.401 +PROP_6: 984 +PROP_7: 434 +PROP_8: 140 +PROP_9: 419 + +-------------------- + 0 +-------------------- +{EXT_ELEM_PROP_10: 11.011, EXT_ELEM_PROP_2: -99, EXT_ELEM_PROP_3: 3.311, EXT_ELEM_PROP_4: 4.411, EXT_ELEM_PROP_5: 5.511, EXT_ELEM_PROP_6: -99, EXT_ELEM_PROP_7: NaN, EXT_ELEM_PROP_8: 8.811, EXT_ELEM_PROP_9: 9.911} + +[ 1005, 1005, 1005 ] +[ 1005, 1005, 1005 ] + + + +set.elem_prop_keys(): [] +set.get_extend_elem_prop_header(): [ EXT_ELEM_PROP_10 EXT_ELEM_PROP_2 EXT_ELEM_PROP_3 EXT_ELEM_PROP_4 EXT_ELEM_PROP_5 EXT_ELEM_PROP_6 EXT_ELEM_PROP_7 EXT_ELEM_PROP_8 EXT_ELEM_PROP_9 ] + + +------------------------------------- + 95 MODFICATIONS +------------------------------------- + +PROP_1: 1.101 +PROP_2: 2.201 +PROP_6: 984 +PROP_7: 434 +PROP_8: 140 +PROP_9: 419 + + +set.num_extend_elem_props(): 7 +set.vsize(): 32 +set.prop_index(PROP_9): 7 +set.num_extend_elem_props(): 7 + + +------------------------------------- + 100 MODFICATIONS +------------------------------------- + +PROP_1: 1.101 +PROP_10: 182 +PROP_2: 2.201 +PROP_4: 779 +PROP_5: 902 +PROP_6: 984 +PROP_7: 434 +PROP_8: 140 +PROP_9: 419 + +-------------------- + 0 +-------------------- +{EXT_ELEM_PROP_10: 11.031, EXT_ELEM_PROP_2: 2.231, EXT_ELEM_PROP_3: 3.331, EXT_ELEM_PROP_4: 4.431, EXT_ELEM_PROP_6: 6.631, EXT_ELEM_PROP_7: 7.731, EXT_ELEM_PROP_8: 8.831} + +[ 1001, 1001, 1001 ] +[ 1001, 1001, 1001 ] +[ 1001, 1001, 1001 ] +[ 1001, 1001, 1001 ] +[ 1001, 1001, 1001 ] +[ 1001, 1001, 1001 ] +[ 1001, 1001, 1001 ] +[ 1001, 1001, 1001 ] + + + +set.prop_keys(): [ PROP_1 PROP_10 PROP_2 PROP_4 PROP_5 PROP_6 PROP_7 PROP_8 PROP_9 ] +set.has_extend_elem_prop(EXT_ELEM_PROP_2): 1 +set.num_elem_props(): 0 +set.has_extend_elem_prop(EXT_ELEM_PROP_10): 1 +set.num_props(): 10 +set.get_extend_elem_prop(EXT_ELEM_PROP_10,2): NaN + + +------------------------------------- + 105 MODFICATIONS +------------------------------------- + +PROP_1: 1.101 +PROP_10: 182 +PROP_2: 2.201 +PROP_3: 22 +PROP_4: 779 +PROP_5: 902 +PROP_6: 984 +PROP_7: 434 +PROP_8: 140 +PROP_9: 419 + +-------------------- + 0 +-------------------- +{EXT_ELEM_PROP_10: 11.031, EXT_ELEM_PROP_2: 2.231, EXT_ELEM_PROP_3: 3.331, EXT_ELEM_PROP_4: 4.431, EXT_ELEM_PROP_6: 6.631, EXT_ELEM_PROP_7: 7.731, EXT_ELEM_PROP_8: 308} + +[ 1001, 1001, 1001 ] +[ 1001, 1001, 1001 ] +[ 1001, 1001, 1001 ] +[ 1001, 1001, 1001 ] +[ 1001, 1001, 1001 ] +[ 1001, 1001, 1001 ] +[ 1001, 1001, 1001 ] +[ 1001, 1001, 1001 ] + + + +set.get_extend_elem_prop(EXT_ELEM_PROP_3,0): 3.331 +set.prop_keys(): [ PROP_1 PROP_10 PROP_2 PROP_3 PROP_4 PROP_5 PROP_6 PROP_7 PROP_8 PROP_9 ] +set.size(): 2 +set.num_extend_elem_props(): 7 +set.prop(PROP_1): 1.101 +set.size(): 2 +set.bsize(): 48 +set.elem_prop_keys(): [] + + +------------------------------------- + 110 MODFICATIONS +------------------------------------- + +PROP_1: 1.101 +PROP_10: 182 +PROP_2: 2.201 +PROP_3: 22 +PROP_4: 779 +PROP_5: 902 +PROP_6: 984 +PROP_7: 434 +PROP_8: 140 +PROP_9: 419 + +-------------------- + 0 +-------------------- +{EXT_ELEM_PROP_10: 11.031, EXT_ELEM_PROP_2: 2.231, EXT_ELEM_PROP_3: 3.331, EXT_ELEM_PROP_4: 4.431, EXT_ELEM_PROP_6: 6.631, EXT_ELEM_PROP_7: 7.731, EXT_ELEM_PROP_8: 308} + +[ 1001, 1001, 1001 ] +[ 1001, 1001, 1001 ] +[ 1001, 1001, 1001 ] +[ 1001, 1001, 1001 ] +[ 1001, 1001, 1001 ] +[ 1001, 1001, 1001 ] +[ 1001, 1001, 1001 ] +[ 1001, 1001, 1001 ] +[ 179, 179, 179 ] + + +-------------------- + 1 +-------------------- +{EXT_ELEM_PROP_10: 11.051, EXT_ELEM_PROP_2: 2.251, EXT_ELEM_PROP_3: 3.351, EXT_ELEM_PROP_4: 4.451, EXT_ELEM_PROP_6: 6.651, EXT_ELEM_PROP_7: 7.751, EXT_ELEM_PROP_8: 8.851} + +[ 1006, 1006, 1006 ] +[ 1006, 1006, 1006 ] +[ 1006, 1006, 1006 ] +[ 1006, 1006, 1006 ] +[ 1006, 1006, 1006 ] +[ 1006, 1006, 1006 ] +[ 1006, 1006, 1006 ] +[ 1006, 1006, 1006 ] +[ 179, 179, 179 ] + + + +set.get_extend_elem_prop(EXT_ELEM_PROP_10,1): 11.051 +set.bsize(): 54 +set.prop(PROP_3): 22 +set.num_extend_elem_props(): 7 +set.num_extend_elem_props(): 7 +set.num_props(): 10 + + +------------------------------------- + 115 MODFICATIONS +------------------------------------- + +PROP_1: 1.101 +PROP_10: 182 +PROP_3: 22 +PROP_4: 779 +PROP_5: 902 +PROP_6: 984 +PROP_7: 434 +PROP_8: 140 +PROP_9: 419 + +-------------------- + 0 +-------------------- +{EXT_ELEM_PROP_10: 11.051, EXT_ELEM_PROP_2: 2.251, EXT_ELEM_PROP_3: 3.351, EXT_ELEM_PROP_4: 4.451, EXT_ELEM_PROP_6: 6.651, EXT_ELEM_PROP_7: 7.751, EXT_ELEM_PROP_8: 8.851} + +[ 1006, 1006, 1006 ] +[ 1006, 1006, 1006 ] +[ 1006, 1006, 1006 ] +[ 1006, 1006, 1006 ] +[ 1006, 1006, 1006 ] +[ 1006, 1006, 1006 ] +[ 1006, 1006, 1006 ] +[ 1006, 1006, 1006 ] +[ 179, 179, 179 ] + + +-------------------- + 1 +-------------------- +{EXT_ELEM_PROP_10: 11.041, EXT_ELEM_PROP_2: 2.241, EXT_ELEM_PROP_3: 3.341, EXT_ELEM_PROP_4: 4.441, EXT_ELEM_PROP_6: 6.641, EXT_ELEM_PROP_7: 7.741, EXT_ELEM_PROP_8: 8.841} + +[ 1002, 1002, 1002 ] +[ 1002, 1002, 1002 ] +[ 1002, 1002, 1002 ] +[ 1002, 1002, 1002 ] +[ 1002, 1002, 1002 ] +[ 1002, 1002, 1002 ] +[ 1002, 1002, 1002 ] +[ 1002, 1002, 1002 ] +[ 1002, 1002, 1002 ] + + +-------------------- + 2 +-------------------- +{EXT_ELEM_PROP_10: NaN, EXT_ELEM_PROP_2: -99, EXT_ELEM_PROP_3: NaN, EXT_ELEM_PROP_4: -99, EXT_ELEM_PROP_6: -99, EXT_ELEM_PROP_7: NaN, EXT_ELEM_PROP_8: -99} + +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] + + + +set.elem_prop_keys(): [] + + +------------------------------------- + 120 MODFICATIONS +------------------------------------- + +PROP_1: 1.101 +PROP_10: 182 +PROP_3: 22 +PROP_4: 779 +PROP_5: 902 +PROP_6: 984 +PROP_7: 434 +PROP_8: 140 +PROP_9: 419 + +-------------------- + 0 +-------------------- +{EXT_ELEM_PROP_10: 11.041, EXT_ELEM_PROP_2: 2.241, EXT_ELEM_PROP_3: 3.341, EXT_ELEM_PROP_4: 4.441, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_6: 6.641, EXT_ELEM_PROP_7: 7.741, EXT_ELEM_PROP_8: 8.841} + +[ 1002, 1002, 1002 ] +[ 1002, 1002, 1002 ] +[ 1002, 1002, 1002 ] +[ 1002, 1002, 1002 ] +[ 1002, 1002, 1002 ] +[ 1002, 1002, 1002 ] +[ 1002, 1002, 1002 ] +[ 1002, 1002, 1002 ] +[ 1002, 1002, 1002 ] + + +-------------------- + 1 +-------------------- +{EXT_ELEM_PROP_10: Boogle 10-4, EXT_ELEM_PROP_2: -99, EXT_ELEM_PROP_3: NaN, EXT_ELEM_PROP_4: -99, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_6: Boogle 6-4, EXT_ELEM_PROP_7: Boogle 7-4, EXT_ELEM_PROP_8: Boogle 8-4} + +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] + + + +set.num_elem_props(): 0 +set.prop_index(PROP_10): 1 +set.size(): 2 + + +------------------------------------- + 125 MODFICATIONS +------------------------------------- + +PROP_1: 1.101 +PROP_10: 182 +PROP_3: 22 +PROP_4: 779 +PROP_5: 902 +PROP_6: 984 +PROP_7: 434 +PROP_9: 419 + +-------------------- + 0 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: 11.041, EXT_ELEM_PROP_2: 2.241, EXT_ELEM_PROP_3: 3.341, EXT_ELEM_PROP_4: 4.441, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_6: 6.641, EXT_ELEM_PROP_8: 8.841} + +[ 1002, 1002, 1002 ] +[ 1002, 1002, 1002 ] +[ 1002, 1002, 1002 ] +[ 1002, 1002, 1002 ] +[ 1002, 1002, 1002 ] +[ 1002, 1002, 1002 ] +[ 1002, 1002, 1002 ] +[ 1002, 1002, 1002 ] +[ 1002, 1002, 1002 ] + + +-------------------- + 1 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: Boogle 10-4, EXT_ELEM_PROP_2: -99, EXT_ELEM_PROP_3: NaN, EXT_ELEM_PROP_4: -99, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_6: Boogle 6-4, EXT_ELEM_PROP_8: Boogle 8-4} + +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] + + + +set.size(): 2 +set.get_extend_elem_prop(EXT_ELEM_PROP_2,0): 2.241 + + +------------------------------------- + 130 MODFICATIONS +------------------------------------- + +PROP_1: 1.101 +PROP_10: 182 +PROP_3: 22 +PROP_4: 779 +PROP_5: 902 +PROP_6: 984 +PROP_7: 434 +PROP_9: 419 + +-------------------- + 0 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: 11.041, EXT_ELEM_PROP_2: 2.241, EXT_ELEM_PROP_4: 4.441, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_6: 6.641, EXT_ELEM_PROP_7: NaN, EXT_ELEM_PROP_8: 8.841, EXT_ELEM_PROP_9: NaN} + +[ 1002, 1002, 1002 ] +[ 1002, 1002, 1002 ] +[ 1002, 1002, 1002 ] +[ 1002, 1002, 1002 ] + + +-------------------- + 1 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: NaN, EXT_ELEM_PROP_2: -99, EXT_ELEM_PROP_4: -99, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_6: NaN, EXT_ELEM_PROP_7: NaN, EXT_ELEM_PROP_8: NaN, EXT_ELEM_PROP_9: NaN} + +[ 1004, 1004, 1004 ] +[ 1004, 1004, 1004 ] +[ 1004, 1004, 1004 ] +[ 1004, 1004, 1004 ] +[ 1004, 1004, 1004 ] + + +-------------------- + 2 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: Boogle 10-4, EXT_ELEM_PROP_2: -99, EXT_ELEM_PROP_4: -99, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_6: Boogle 6-4, EXT_ELEM_PROP_7: NaN, EXT_ELEM_PROP_8: Boogle 8-4, EXT_ELEM_PROP_9: NaN} + +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] + + + +set.num_elem_props(): 0 +set.size(): 3 +set.num_elem_props(): 0 +set.elem_prop_keys(): [] + + +------------------------------------- + 135 MODFICATIONS +------------------------------------- + +PROP_1: 1.101 +PROP_10: 182 +PROP_3: 22 +PROP_4: 779 +PROP_5: 902 +PROP_6: 984 +PROP_7: 434 +PROP_9: 419 + +-------------------- + 0 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: 11.041, EXT_ELEM_PROP_2: 2.241, EXT_ELEM_PROP_4: 4.441, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_6: 6.641, EXT_ELEM_PROP_7: NaN, EXT_ELEM_PROP_8: 8.841, EXT_ELEM_PROP_9: NaN} + +[ 1002, 1002, 1002 ] +[ 1002, 1002, 1002 ] +[ 1002, 1002, 1002 ] +[ 1002, 1002, 1002 ] +[ 192, 192, 192 ] +[ 192, 192, 192 ] +[ 192, 192, 192 ] + + +-------------------- + 1 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: NaN, EXT_ELEM_PROP_2: -99, EXT_ELEM_PROP_4: -99, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_6: NaN, EXT_ELEM_PROP_7: NaN, EXT_ELEM_PROP_8: NaN, EXT_ELEM_PROP_9: NaN} + +[ 1010, 1010, 1010 ] +[ 1010, 1010, 1010 ] +[ 1010, 1010, 1010 ] +[ 1010, 1010, 1010 ] +[ 1010, 1010, 1010 ] +[ 1010, 1010, 1010 ] +[ 1010, 1010, 1010 ] + + +-------------------- + 2 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: NaN, EXT_ELEM_PROP_2: -99, EXT_ELEM_PROP_4: -99, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_6: NaN, EXT_ELEM_PROP_7: NaN, EXT_ELEM_PROP_8: NaN, EXT_ELEM_PROP_9: NaN} + +[ 1004, 1004, 1004 ] +[ 1004, 1004, 1004 ] +[ 1004, 1004, 1004 ] +[ 1004, 1004, 1004 ] +[ 1004, 1004, 1004 ] +[ 192, 192, 192 ] +[ 192, 192, 192 ] + + +-------------------- + 3 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: Boogle 10-4, EXT_ELEM_PROP_2: -99, EXT_ELEM_PROP_4: -99, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_6: Boogle 6-4, EXT_ELEM_PROP_7: NaN, EXT_ELEM_PROP_8: Boogle 8-4, EXT_ELEM_PROP_9: NaN} + +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] +[ 192, 192, 192 ] +[ 192, 192, 192 ] +[ 192, 192, 192 ] + + +-------------------- + 4 +-------------------- +{EXT_ELEM_PROP_1: 1.141, EXT_ELEM_PROP_10: 11.041, EXT_ELEM_PROP_2: 2.241, EXT_ELEM_PROP_4: 4.441, EXT_ELEM_PROP_5: 5.541, EXT_ELEM_PROP_6: 6.641, EXT_ELEM_PROP_7: 7.741, EXT_ELEM_PROP_8: 8.841, EXT_ELEM_PROP_9: 9.941} + +[ 1008, 1008, 1008 ] +[ 1008, 1008, 1008 ] +[ 1008, 1008, 1008 ] +[ 1008, 1008, 1008 ] +[ 192, 192, 192 ] +[ 192, 192, 192 ] +[ 192, 192, 192 ] + + +-------------------- + 5 +-------------------- +{EXT_ELEM_PROP_1: 1.181, EXT_ELEM_PROP_10: 11.081, EXT_ELEM_PROP_2: 2.281, EXT_ELEM_PROP_4: 4.481, EXT_ELEM_PROP_5: 5.581, EXT_ELEM_PROP_6: 6.681, EXT_ELEM_PROP_7: 7.781, EXT_ELEM_PROP_8: 8.881, EXT_ELEM_PROP_9: 9.981} + +[ 1001, 1001, 1001 ] +[ 1001, 1001, 1001 ] +[ 1001, 1001, 1001 ] +[ 1001, 1001, 1001 ] +[ 192, 192, 192 ] +[ 192, 192, 192 ] +[ 192, 192, 192 ] + + +-------------------- + 6 +-------------------- +{EXT_ELEM_PROP_1: 1.131, EXT_ELEM_PROP_10: 11.031, EXT_ELEM_PROP_2: 2.231, EXT_ELEM_PROP_4: 4.431, EXT_ELEM_PROP_5: 5.531, EXT_ELEM_PROP_6: 6.631, EXT_ELEM_PROP_7: 7.731, EXT_ELEM_PROP_8: 8.831, EXT_ELEM_PROP_9: 9.931} + +[ 1007, 1007, 1007 ] +[ 1007, 1007, 1007 ] +[ 1007, 1007, 1007 ] +[ 1007, 1007, 1007 ] +[ 1007, 1007, 1007 ] +[ 1007, 1007, 1007 ] +[ 192, 192, 192 ] + + + +set.prop(PROP_3): 22 +set.get_extend_elem_prop_header(): [ EXT_ELEM_PROP_1 EXT_ELEM_PROP_10 EXT_ELEM_PROP_2 EXT_ELEM_PROP_4 EXT_ELEM_PROP_5 EXT_ELEM_PROP_6 EXT_ELEM_PROP_7 EXT_ELEM_PROP_8 EXT_ELEM_PROP_9 ] +set.size(): 7 +set.has_elem_prop(ELEM_PROP_3): 0 +set.vsize(): 176 +set.bsize(): 168 +set.prop(PROP_5): 902 +set.has_extend_elem_prop(EXT_ELEM_PROP_4): 1 +set.bsize(): 168 + + +------------------------------------- + 140 MODFICATIONS +------------------------------------- + +PROP_1: 1.101 +PROP_10: 182 +PROP_3: 22 +PROP_4: 779 +PROP_5: 902 +PROP_6: 984 +PROP_7: 434 +PROP_9: 419 + +-------------------- + 0 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: NaN, EXT_ELEM_PROP_2: -99, EXT_ELEM_PROP_4: -99, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_6: NaN, EXT_ELEM_PROP_7: NaN, EXT_ELEM_PROP_8: NaN, EXT_ELEM_PROP_9: NaN} + +[ 1002, 1002, 1002 ] +[ 1002, 1002, 1002 ] +[ 1002, 1002, 1002 ] +[ 1002, 1002, 1002 ] +[ 1002, 1002, 1002 ] +[ 1002, 1002, 1002 ] + + +-------------------- + 1 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: 11.041, EXT_ELEM_PROP_2: 2.241, EXT_ELEM_PROP_4: 4.441, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_6: 6.641, EXT_ELEM_PROP_7: NaN, EXT_ELEM_PROP_8: 8.841, EXT_ELEM_PROP_9: NaN} + +[ 1002, 1002, 1002 ] +[ 1002, 1002, 1002 ] +[ 1002, 1002, 1002 ] +[ 1002, 1002, 1002 ] +[ 192, 192, 192 ] +[ 192, 192, 192 ] + + +-------------------- + 2 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: NaN, EXT_ELEM_PROP_2: -99, EXT_ELEM_PROP_4: -99, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_6: NaN, EXT_ELEM_PROP_7: NaN, EXT_ELEM_PROP_8: NaN, EXT_ELEM_PROP_9: NaN} + +[ 1010, 1010, 1010 ] +[ 1010, 1010, 1010 ] +[ 1010, 1010, 1010 ] +[ 1010, 1010, 1010 ] +[ 1010, 1010, 1010 ] +[ 1010, 1010, 1010 ] + + +-------------------- + 3 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: NaN, EXT_ELEM_PROP_2: -99, EXT_ELEM_PROP_4: -99, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_6: NaN, EXT_ELEM_PROP_7: NaN, EXT_ELEM_PROP_8: NaN, EXT_ELEM_PROP_9: NaN} + +[ 1004, 1004, 1004 ] +[ 1004, 1004, 1004 ] +[ 1004, 1004, 1004 ] +[ 1004, 1004, 1004 ] +[ 1004, 1004, 1004 ] +[ 192, 192, 192 ] + + +-------------------- + 4 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: Boogle 10-4, EXT_ELEM_PROP_2: -99, EXT_ELEM_PROP_4: -99, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_6: Boogle 6-4, EXT_ELEM_PROP_7: NaN, EXT_ELEM_PROP_8: Boogle 8-4, EXT_ELEM_PROP_9: NaN} + +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] +[ 192, 192, 192 ] +[ 192, 192, 192 ] + + +-------------------- + 5 +-------------------- +{EXT_ELEM_PROP_1: 1.141, EXT_ELEM_PROP_10: 11.041, EXT_ELEM_PROP_2: 2.241, EXT_ELEM_PROP_4: 4.441, EXT_ELEM_PROP_5: 5.541, EXT_ELEM_PROP_6: 6.641, EXT_ELEM_PROP_7: 7.741, EXT_ELEM_PROP_8: 8.841, EXT_ELEM_PROP_9: 9.941} + +[ 1008, 1008, 1008 ] +[ 1008, 1008, 1008 ] +[ 1008, 1008, 1008 ] +[ 1008, 1008, 1008 ] +[ 192, 192, 192 ] +[ 192, 192, 192 ] + + +-------------------- + 6 +-------------------- +{EXT_ELEM_PROP_1: 1.181, EXT_ELEM_PROP_10: 11.081, EXT_ELEM_PROP_2: 2.281, EXT_ELEM_PROP_4: 4.481, EXT_ELEM_PROP_5: 5.581, EXT_ELEM_PROP_6: 6.681, EXT_ELEM_PROP_7: 7.781, EXT_ELEM_PROP_8: 8.881, EXT_ELEM_PROP_9: 9.981} + +[ 1001, 1001, 1001 ] +[ 1001, 1001, 1001 ] +[ 1001, 1001, 1001 ] +[ 1001, 1001, 1001 ] +[ 192, 192, 192 ] +[ 192, 192, 192 ] + + +-------------------- + 7 +-------------------- +{EXT_ELEM_PROP_1: 1.131, EXT_ELEM_PROP_10: 11.031, EXT_ELEM_PROP_2: 2.231, EXT_ELEM_PROP_4: 4.431, EXT_ELEM_PROP_5: 5.531, EXT_ELEM_PROP_6: 6.631, EXT_ELEM_PROP_7: 7.731, EXT_ELEM_PROP_8: 8.831, EXT_ELEM_PROP_9: 9.931} + +[ 1007, 1007, 1007 ] +[ 1007, 1007, 1007 ] +[ 1007, 1007, 1007 ] +[ 1007, 1007, 1007 ] +[ 1007, 1007, 1007 ] +[ 1007, 1007, 1007 ] + + + +set.get_extend_elem_prop_header(): [ EXT_ELEM_PROP_1 EXT_ELEM_PROP_10 EXT_ELEM_PROP_2 EXT_ELEM_PROP_4 EXT_ELEM_PROP_5 EXT_ELEM_PROP_6 EXT_ELEM_PROP_7 EXT_ELEM_PROP_8 EXT_ELEM_PROP_9 ] +set.num_extend_elem_props(): 9 +set.elem_prop_keys(): [] +set.prop_index(PROP_3): 2 + + +------------------------------------- + 145 MODFICATIONS +------------------------------------- + +PROP_1: 1.101 +PROP_10: 182 +PROP_3: 22 +PROP_4: 779 +PROP_5: 902 +PROP_6: 984 +PROP_7: 434 +PROP_9: 419 + +-------------------- + 0 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: NaN, EXT_ELEM_PROP_2: -99, EXT_ELEM_PROP_4: -99, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_6: NaN, EXT_ELEM_PROP_7: NaN, EXT_ELEM_PROP_8: NaN, EXT_ELEM_PROP_9: NaN} + +[ 1002, 1002, 1002 ] +[ 1002, 1002, 1002 ] +[ 1002, 1002, 1002 ] +[ 1002, 1002, 1002 ] +[ 1002, 1002, 1002 ] +[ 1002, 1002, 1002 ] + + +-------------------- + 1 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: 11.041, EXT_ELEM_PROP_2: 2.241, EXT_ELEM_PROP_4: 4.441, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_6: 6.641, EXT_ELEM_PROP_7: NaN, EXT_ELEM_PROP_8: 8.841, EXT_ELEM_PROP_9: NaN} + +[ 1002, 1002, 1002 ] +[ 1002, 1002, 1002 ] +[ 1002, 1002, 1002 ] +[ 1002, 1002, 1002 ] +[ 192, 192, 192 ] +[ 192, 192, 192 ] + + +-------------------- + 2 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: NaN, EXT_ELEM_PROP_2: -99, EXT_ELEM_PROP_4: -99, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_6: NaN, EXT_ELEM_PROP_7: NaN, EXT_ELEM_PROP_8: NaN, EXT_ELEM_PROP_9: NaN} + +[ 1010, 1010, 1010 ] +[ 1010, 1010, 1010 ] +[ 1010, 1010, 1010 ] +[ 1010, 1010, 1010 ] +[ 1010, 1010, 1010 ] +[ 1010, 1010, 1010 ] + + +-------------------- + 3 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: NaN, EXT_ELEM_PROP_2: -99, EXT_ELEM_PROP_4: -99, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_6: NaN, EXT_ELEM_PROP_7: NaN, EXT_ELEM_PROP_8: NaN, EXT_ELEM_PROP_9: NaN} + +[ 1004, 1004, 1004 ] +[ 1004, 1004, 1004 ] +[ 1004, 1004, 1004 ] +[ 1004, 1004, 1004 ] +[ 1004, 1004, 1004 ] +[ 192, 192, 192 ] + + +-------------------- + 4 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: Boogle 10-4, EXT_ELEM_PROP_2: -99, EXT_ELEM_PROP_4: -99, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_6: Boogle 6-4, EXT_ELEM_PROP_7: NaN, EXT_ELEM_PROP_8: Boogle 8-4, EXT_ELEM_PROP_9: NaN} + +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] +[ 192, 192, 192 ] +[ 192, 192, 192 ] + + +-------------------- + 5 +-------------------- +{EXT_ELEM_PROP_1: 1.141, EXT_ELEM_PROP_10: 11.041, EXT_ELEM_PROP_2: 2.241, EXT_ELEM_PROP_4: 4.441, EXT_ELEM_PROP_5: 5.541, EXT_ELEM_PROP_6: 6.641, EXT_ELEM_PROP_7: 7.741, EXT_ELEM_PROP_8: 8.841, EXT_ELEM_PROP_9: 9.941} + +[ 1008, 1008, 1008 ] +[ 1008, 1008, 1008 ] +[ 1008, 1008, 1008 ] +[ 1008, 1008, 1008 ] +[ 192, 192, 192 ] +[ 192, 192, 192 ] + + +-------------------- + 6 +-------------------- +{EXT_ELEM_PROP_1: 1.111, EXT_ELEM_PROP_10: 11.011, EXT_ELEM_PROP_2: 2.211, EXT_ELEM_PROP_4: 4.411, EXT_ELEM_PROP_5: 5.511, EXT_ELEM_PROP_6: 6.611, EXT_ELEM_PROP_7: 7.711, EXT_ELEM_PROP_8: 8.811, EXT_ELEM_PROP_9: 9.911} + +[ 1001, 1001, 1001 ] +[ 1001, 1001, 1001 ] +[ 1001, 1001, 1001 ] +[ 1001, 1001, 1001 ] +[ 192, 192, 192 ] +[ 192, 192, 192 ] + + +-------------------- + 7 +-------------------- +{EXT_ELEM_PROP_1: 1.131, EXT_ELEM_PROP_10: 11.031, EXT_ELEM_PROP_2: 2.231, EXT_ELEM_PROP_4: 4.431, EXT_ELEM_PROP_5: 5.531, EXT_ELEM_PROP_6: 6.631, EXT_ELEM_PROP_7: 7.731, EXT_ELEM_PROP_8: 8.831, EXT_ELEM_PROP_9: 9.931} + +[ 1007, 1007, 1007 ] +[ 1007, 1007, 1007 ] +[ 1007, 1007, 1007 ] +[ 1007, 1007, 1007 ] +[ 1007, 1007, 1007 ] +[ 1007, 1007, 1007 ] + + +-------------------- + 8 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: NaN, EXT_ELEM_PROP_2: -99, EXT_ELEM_PROP_4: -99, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_6: NaN, EXT_ELEM_PROP_7: NaN, EXT_ELEM_PROP_8: NaN, EXT_ELEM_PROP_9: NaN} + +[ 561, 561, 561 ] +[ 561, 561, 561 ] +[ 561, 561, 561 ] +[ 561, 561, 561 ] +[ 561, 561, 561 ] +[ 561, 561, 561 ] + + +-------------------- + 9 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: NaN, EXT_ELEM_PROP_2: -99, EXT_ELEM_PROP_4: -99, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_6: NaN, EXT_ELEM_PROP_7: NaN, EXT_ELEM_PROP_8: NaN, EXT_ELEM_PROP_9: NaN} + +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] + + + +set.num_props(): 8 + + +------------------------------------- + 150 MODFICATIONS +------------------------------------- + +PROP_1: 1.101 +PROP_10: 182 +PROP_3: 22 +PROP_4: 779 +PROP_5: 902 +PROP_6: 984 +PROP_7: 434 +PROP_9: 419 + +-------------------- + 0 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: NaN, EXT_ELEM_PROP_2: -99, EXT_ELEM_PROP_4: -99, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_6: NaN, EXT_ELEM_PROP_7: NaN, EXT_ELEM_PROP_8: NaN, EXT_ELEM_PROP_9: NaN} + +[ 1002, 1002, 1002 ] +[ 1002, 1002, 1002 ] +[ 1002, 1002, 1002 ] +[ 1002, 1002, 1002 ] +[ 1002, 1002, 1002 ] +[ 1002, 1002, 1002 ] + + +-------------------- + 1 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: 11.041, EXT_ELEM_PROP_2: 2.241, EXT_ELEM_PROP_4: 4.441, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_6: 6.641, EXT_ELEM_PROP_7: NaN, EXT_ELEM_PROP_8: 8.841, EXT_ELEM_PROP_9: NaN} + +[ 1002, 1002, 1002 ] +[ 1002, 1002, 1002 ] +[ 1002, 1002, 1002 ] +[ 1002, 1002, 1002 ] +[ 192, 192, 192 ] +[ 192, 192, 192 ] + + +-------------------- + 2 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: NaN, EXT_ELEM_PROP_2: -99, EXT_ELEM_PROP_4: -99, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_6: NaN, EXT_ELEM_PROP_7: NaN, EXT_ELEM_PROP_8: NaN, EXT_ELEM_PROP_9: NaN} + +[ 1010, 1010, 1010 ] +[ 1010, 1010, 1010 ] +[ 1010, 1010, 1010 ] +[ 1010, 1010, 1010 ] +[ 1010, 1010, 1010 ] +[ 1010, 1010, 1010 ] + + +-------------------- + 3 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: NaN, EXT_ELEM_PROP_2: -99, EXT_ELEM_PROP_4: -99, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_6: NaN, EXT_ELEM_PROP_7: NaN, EXT_ELEM_PROP_8: NaN, EXT_ELEM_PROP_9: NaN} + +[ 1004, 1004, 1004 ] +[ 1004, 1004, 1004 ] +[ 1004, 1004, 1004 ] +[ 1004, 1004, 1004 ] +[ 1004, 1004, 1004 ] +[ 192, 192, 192 ] + + +-------------------- + 4 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: Boogle 10-4, EXT_ELEM_PROP_2: -99, EXT_ELEM_PROP_4: -99, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_6: Boogle 6-4, EXT_ELEM_PROP_7: NaN, EXT_ELEM_PROP_8: Boogle 8-4, EXT_ELEM_PROP_9: NaN} + +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] +[ 192, 192, 192 ] +[ 192, 192, 192 ] + + +-------------------- + 5 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: NaN, EXT_ELEM_PROP_2: -99, EXT_ELEM_PROP_4: -99, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_6: NaN, EXT_ELEM_PROP_7: NaN, EXT_ELEM_PROP_8: NaN, EXT_ELEM_PROP_9: NaN} + +[ 1001, 1001, 1001 ] +[ 1001, 1001, 1001 ] +[ 1001, 1001, 1001 ] +[ 1001, 1001, 1001 ] +[ 1001, 1001, 1001 ] +[ 1001, 1001, 1001 ] + + +-------------------- + 6 +-------------------- +{EXT_ELEM_PROP_1: 1.141, EXT_ELEM_PROP_10: 11.041, EXT_ELEM_PROP_2: 2.241, EXT_ELEM_PROP_4: 4.441, EXT_ELEM_PROP_5: 5.541, EXT_ELEM_PROP_6: 6.641, EXT_ELEM_PROP_7: 7.741, EXT_ELEM_PROP_8: 8.841, EXT_ELEM_PROP_9: 9.941} + +[ 1008, 1008, 1008 ] +[ 1008, 1008, 1008 ] +[ 1008, 1008, 1008 ] +[ 1008, 1008, 1008 ] +[ 192, 192, 192 ] +[ 192, 192, 192 ] + + +-------------------- + 7 +-------------------- +{EXT_ELEM_PROP_1: 1.111, EXT_ELEM_PROP_10: 11.011, EXT_ELEM_PROP_2: 2.211, EXT_ELEM_PROP_4: 4.411, EXT_ELEM_PROP_5: 5.511, EXT_ELEM_PROP_6: 6.611, EXT_ELEM_PROP_7: 7.711, EXT_ELEM_PROP_8: 8.811, EXT_ELEM_PROP_9: 9.911} + +[ 1001, 1001, 1001 ] +[ 1001, 1001, 1001 ] +[ 1001, 1001, 1001 ] +[ 1001, 1001, 1001 ] +[ 192, 192, 192 ] +[ 192, 192, 192 ] + + +-------------------- + 8 +-------------------- +{EXT_ELEM_PROP_1: 1.131, EXT_ELEM_PROP_10: 11.031, EXT_ELEM_PROP_2: 2.231, EXT_ELEM_PROP_4: 4.431, EXT_ELEM_PROP_5: 5.531, EXT_ELEM_PROP_6: 6.631, EXT_ELEM_PROP_7: 7.731, EXT_ELEM_PROP_8: 8.831, EXT_ELEM_PROP_9: 9.931} + +[ 1007, 1007, 1007 ] +[ 1007, 1007, 1007 ] +[ 1007, 1007, 1007 ] +[ 1007, 1007, 1007 ] +[ 1007, 1007, 1007 ] +[ 1007, 1007, 1007 ] + + +-------------------- + 9 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: NaN, EXT_ELEM_PROP_2: -99, EXT_ELEM_PROP_4: -99, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_6: NaN, EXT_ELEM_PROP_7: NaN, EXT_ELEM_PROP_8: NaN, EXT_ELEM_PROP_9: NaN} + +[ 561, 561, 561 ] +[ 561, 561, 561 ] +[ 561, 561, 561 ] +[ 561, 561, 561 ] +[ 561, 561, 561 ] +[ 561, 561, 561 ] + + +-------------------- + 10 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: NaN, EXT_ELEM_PROP_2: -99, EXT_ELEM_PROP_4: -99, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_6: NaN, EXT_ELEM_PROP_7: NaN, EXT_ELEM_PROP_8: NaN, EXT_ELEM_PROP_9: NaN} + +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] + + +-------------------- + 11 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: NaN, EXT_ELEM_PROP_2: -99, EXT_ELEM_PROP_4: -99, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_6: NaN, EXT_ELEM_PROP_7: NaN, EXT_ELEM_PROP_8: NaN, EXT_ELEM_PROP_9: NaN} + +[ 1008, 1008, 1008 ] +[ 1008, 1008, 1008 ] +[ 1008, 1008, 1008 ] +[ 1008, 1008, 1008 ] +[ 1008, 1008, 1008 ] +[ 1008, 1008, 1008 ] + + +-------------------- + 12 +-------------------- +{EXT_ELEM_PROP_1: 1.151, EXT_ELEM_PROP_10: 11.051, EXT_ELEM_PROP_2: 2.251, EXT_ELEM_PROP_4: 4.451, EXT_ELEM_PROP_5: 5.551, EXT_ELEM_PROP_6: 6.651, EXT_ELEM_PROP_7: 7.751, EXT_ELEM_PROP_8: 8.851, EXT_ELEM_PROP_9: 9.951} + +[ 1002, 1002, 1002 ] +[ 1002, 1002, 1002 ] +[ 1002, 1002, 1002 ] +[ 1002, 1002, 1002 ] +[ 1002, 1002, 1002 ] +[ 1002, 1002, 1002 ] + + + +set.elem_prop_keys(): [] +set.has_elem_prop(ELEM_PROP_10): 0 +set.vsize(): 242 +set.has_prop(PROP_8): 0 + + +------------------------------------- + 155 MODFICATIONS +------------------------------------- + +PROP_1: 1.101 +PROP_10: 182 +PROP_2: 692 +PROP_3: 22 +PROP_4: 779 +PROP_5: 902 +PROP_6: 984 +PROP_7: 434 +PROP_8: 147 +PROP_9: 419 + +-------------------- + 0 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: NaN, EXT_ELEM_PROP_2: -99, EXT_ELEM_PROP_4: -99, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_6: NaN, EXT_ELEM_PROP_7: NaN, EXT_ELEM_PROP_8: NaN, EXT_ELEM_PROP_9: NaN} + +[ 1002, 1002, 1002 ] +[ 1002, 1002, 1002 ] + + +-------------------- + 1 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: 11.041, EXT_ELEM_PROP_2: 2.241, EXT_ELEM_PROP_4: 4.441, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_6: 6.641, EXT_ELEM_PROP_7: NaN, EXT_ELEM_PROP_8: 8.841, EXT_ELEM_PROP_9: NaN} + +[ 1002, 1002, 1002 ] +[ 1002, 1002, 1002 ] + + +-------------------- + 2 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: NaN, EXT_ELEM_PROP_2: -99, EXT_ELEM_PROP_4: -99, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_6: NaN, EXT_ELEM_PROP_7: NaN, EXT_ELEM_PROP_8: NaN, EXT_ELEM_PROP_9: NaN} + +[ 1010, 1010, 1010 ] +[ 1010, 1010, 1010 ] + + +-------------------- + 3 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: NaN, EXT_ELEM_PROP_2: -99, EXT_ELEM_PROP_4: -99, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_6: NaN, EXT_ELEM_PROP_7: NaN, EXT_ELEM_PROP_8: NaN, EXT_ELEM_PROP_9: NaN} + +[ 1004, 1004, 1004 ] +[ 1004, 1004, 1004 ] + + +-------------------- + 4 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: Boogle 10-4, EXT_ELEM_PROP_2: -99, EXT_ELEM_PROP_4: -99, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_6: Boogle 6-4, EXT_ELEM_PROP_7: NaN, EXT_ELEM_PROP_8: Boogle 8-4, EXT_ELEM_PROP_9: NaN} + +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] + + +-------------------- + 5 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: NaN, EXT_ELEM_PROP_2: -99, EXT_ELEM_PROP_4: -99, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_6: NaN, EXT_ELEM_PROP_7: NaN, EXT_ELEM_PROP_8: NaN, EXT_ELEM_PROP_9: NaN} + +[ 245, 245, 245 ] +[ 245, 245, 245 ] + + +-------------------- + 6 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: NaN, EXT_ELEM_PROP_2: -99, EXT_ELEM_PROP_4: -99, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_6: NaN, EXT_ELEM_PROP_7: NaN, EXT_ELEM_PROP_8: NaN, EXT_ELEM_PROP_9: NaN} + +[ 245, 245, 245 ] +[ 245, 245, 245 ] + + +-------------------- + 7 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: NaN, EXT_ELEM_PROP_2: -99, EXT_ELEM_PROP_4: -99, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_6: NaN, EXT_ELEM_PROP_7: NaN, EXT_ELEM_PROP_8: NaN, EXT_ELEM_PROP_9: NaN} + +[ 245, 245, 245 ] +[ 245, 245, 245 ] + + + +set.get_extend_elem_prop(EXT_ELEM_PROP_5,3): -99 + + +------------------------------------- + 160 MODFICATIONS +------------------------------------- + +PROP_1: 1.101 +PROP_10: 182 +PROP_2: 692 +PROP_3: 22 +PROP_4: 779 +PROP_5: 902 +PROP_6: 984 +PROP_7: 434 +PROP_8: 147 +PROP_9: 419 + +-------------------- + 0 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: NaN, EXT_ELEM_PROP_2: 640, EXT_ELEM_PROP_4: -99, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_6: NaN, EXT_ELEM_PROP_7: NaN, EXT_ELEM_PROP_8: NaN, EXT_ELEM_PROP_9: NaN} + +[ 1002, 1002, 1002 ] +[ 1002, 1002, 1002 ] + + +-------------------- + 1 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: 11.041, EXT_ELEM_PROP_2: 2.241, EXT_ELEM_PROP_4: 4.441, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_6: 6.641, EXT_ELEM_PROP_7: NaN, EXT_ELEM_PROP_8: NaN, EXT_ELEM_PROP_9: NaN} + +[ 1002, 1002, 1002 ] +[ 1002, 1002, 1002 ] + + +-------------------- + 2 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: NaN, EXT_ELEM_PROP_2: -99, EXT_ELEM_PROP_4: -99, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_6: NaN, EXT_ELEM_PROP_7: NaN, EXT_ELEM_PROP_8: NaN, EXT_ELEM_PROP_9: NaN} + +[ 1010, 1010, 1010 ] +[ 1010, 1010, 1010 ] + + +-------------------- + 3 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: NaN, EXT_ELEM_PROP_2: -99, EXT_ELEM_PROP_4: -99, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_6: NaN, EXT_ELEM_PROP_7: NaN, EXT_ELEM_PROP_8: NaN, EXT_ELEM_PROP_9: NaN} + +[ 1004, 1004, 1004 ] +[ 1004, 1004, 1004 ] + + +-------------------- + 4 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: Boogle 10-4, EXT_ELEM_PROP_2: -99, EXT_ELEM_PROP_4: -99, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_6: Boogle 6-4, EXT_ELEM_PROP_7: NaN, EXT_ELEM_PROP_8: NaN, EXT_ELEM_PROP_9: NaN} + +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] + + +-------------------- + 5 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: NaN, EXT_ELEM_PROP_2: -99, EXT_ELEM_PROP_4: -99, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_6: NaN, EXT_ELEM_PROP_7: NaN, EXT_ELEM_PROP_8: NaN, EXT_ELEM_PROP_9: NaN} + +[ 245, 245, 245 ] +[ 245, 245, 245 ] + + +-------------------- + 6 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: NaN, EXT_ELEM_PROP_2: -99, EXT_ELEM_PROP_4: -99, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_6: NaN, EXT_ELEM_PROP_7: NaN, EXT_ELEM_PROP_8: NaN, EXT_ELEM_PROP_9: NaN} + +[ 245, 245, 245 ] +[ 245, 245, 245 ] + + +-------------------- + 7 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: NaN, EXT_ELEM_PROP_2: -99, EXT_ELEM_PROP_4: -99, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_6: NaN, EXT_ELEM_PROP_7: NaN, EXT_ELEM_PROP_8: NaN, EXT_ELEM_PROP_9: NaN} + +[ 245, 245, 245 ] +[ 245, 245, 245 ] + + + +set.num_props(): 10 +set.has_extend_elem_prop(EXT_ELEM_PROP_9): 1 +set.elem_prop_keys(): [] +set.prop_keys(): [ PROP_1 PROP_10 PROP_2 PROP_3 PROP_4 PROP_5 PROP_6 PROP_7 PROP_8 PROP_9 ] +set.prop(PROP_9): 419 +set.size(): 8 + + +------------------------------------- + 165 MODFICATIONS +------------------------------------- + +PROP_1: 1.101 +PROP_10: 182 +PROP_2: 692 +PROP_3: 22 +PROP_4: 779 +PROP_5: 902 +PROP_6: 984 +PROP_7: 434 +PROP_8: 147 +PROP_9: 419 + +-------------------- + 0 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: NaN, EXT_ELEM_PROP_4: -99, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_6: NaN, EXT_ELEM_PROP_7: NaN, EXT_ELEM_PROP_8: NaN, EXT_ELEM_PROP_9: NaN} + +[ 1002, 1002, 1002 ] +[ 1002, 1002, 1002 ] + + +-------------------- + 1 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: 11.041, EXT_ELEM_PROP_4: 4.441, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_6: 6.641, EXT_ELEM_PROP_7: NaN, EXT_ELEM_PROP_8: NaN, EXT_ELEM_PROP_9: NaN} + +[ 1002, 1002, 1002 ] +[ 1002, 1002, 1002 ] + + +-------------------- + 2 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: NaN, EXT_ELEM_PROP_4: -99, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_6: NaN, EXT_ELEM_PROP_7: NaN, EXT_ELEM_PROP_8: NaN, EXT_ELEM_PROP_9: NaN} + +[ 1010, 1010, 1010 ] +[ 1010, 1010, 1010 ] + + +-------------------- + 3 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: NaN, EXT_ELEM_PROP_4: -99, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_6: NaN, EXT_ELEM_PROP_7: NaN, EXT_ELEM_PROP_8: NaN, EXT_ELEM_PROP_9: NaN} + +[ 1004, 1004, 1004 ] +[ 1004, 1004, 1004 ] + + +-------------------- + 4 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: Boogle 10-4, EXT_ELEM_PROP_4: -99, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_6: Boogle 6-4, EXT_ELEM_PROP_7: NaN, EXT_ELEM_PROP_8: NaN, EXT_ELEM_PROP_9: NaN} + +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] + + +-------------------- + 5 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: NaN, EXT_ELEM_PROP_4: -99, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_6: NaN, EXT_ELEM_PROP_7: NaN, EXT_ELEM_PROP_8: NaN, EXT_ELEM_PROP_9: NaN} + +[ 245, 245, 245 ] +[ 245, 245, 245 ] + + +-------------------- + 6 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: NaN, EXT_ELEM_PROP_4: -99, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_6: NaN, EXT_ELEM_PROP_7: NaN, EXT_ELEM_PROP_8: NaN, EXT_ELEM_PROP_9: NaN} + +[ 245, 245, 245 ] +[ 245, 245, 245 ] + + +-------------------- + 7 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: NaN, EXT_ELEM_PROP_4: -99, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_6: NaN, EXT_ELEM_PROP_7: NaN, EXT_ELEM_PROP_8: NaN, EXT_ELEM_PROP_9: NaN} + +[ 245, 245, 245 ] +[ 245, 245, 245 ] + + + + + +------------------------------------- + 170 MODFICATIONS +------------------------------------- + +PROP_1: 1.101 +PROP_10: 182 +PROP_2: 692 +PROP_3: 22 +PROP_4: 779 +PROP_5: 902 +PROP_6: 984 +PROP_7: 434 + +-------------------- + 0 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: NaN, EXT_ELEM_PROP_4: -99, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_7: NaN, EXT_ELEM_PROP_8: NaN, EXT_ELEM_PROP_9: NaN} + +[ 1002, 1002, 1002 ] +[ 1002, 1002, 1002 ] + + +-------------------- + 1 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: 11.041, EXT_ELEM_PROP_4: 4.441, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_7: NaN, EXT_ELEM_PROP_8: NaN, EXT_ELEM_PROP_9: NaN} + +[ 1002, 1002, 1002 ] +[ 1002, 1002, 1002 ] + + +-------------------- + 2 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: NaN, EXT_ELEM_PROP_4: -99, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_7: NaN, EXT_ELEM_PROP_8: NaN, EXT_ELEM_PROP_9: NaN} + +[ 1010, 1010, 1010 ] +[ 1010, 1010, 1010 ] + + +-------------------- + 3 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: NaN, EXT_ELEM_PROP_4: -99, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_7: NaN, EXT_ELEM_PROP_8: NaN, EXT_ELEM_PROP_9: NaN} + +[ 1004, 1004, 1004 ] +[ 1004, 1004, 1004 ] + + +-------------------- + 4 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: Boogle 10-4, EXT_ELEM_PROP_4: -99, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_7: NaN, EXT_ELEM_PROP_8: NaN, EXT_ELEM_PROP_9: NaN} + +[ 1009, 1009, 1009 ] +[ 1009, 1009, 1009 ] + + +-------------------- + 5 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: NaN, EXT_ELEM_PROP_4: -99, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_7: NaN, EXT_ELEM_PROP_8: NaN, EXT_ELEM_PROP_9: NaN} + +[ 245, 245, 245 ] +[ 245, 245, 245 ] + + +-------------------- + 6 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: NaN, EXT_ELEM_PROP_4: -99, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_7: NaN, EXT_ELEM_PROP_8: NaN, EXT_ELEM_PROP_9: NaN} + +[ 245, 245, 245 ] +[ 245, 245, 245 ] + + +-------------------- + 7 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: NaN, EXT_ELEM_PROP_4: -99, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_7: NaN, EXT_ELEM_PROP_8: NaN, EXT_ELEM_PROP_9: NaN} + +[ 245, 245, 245 ] +[ 245, 245, 245 ] + + +-------------------- + 8 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: NaN, EXT_ELEM_PROP_4: -99, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_7: NaN, EXT_ELEM_PROP_8: NaN, EXT_ELEM_PROP_9: NaN} + +[ 1007, 1007, 1007 ] +[ 1007, 1007, 1007 ] + + + +set.num_props(): 8 +set.size(): 1 +set.prop_index(PROP_3): 3 +set.get_extend_elem_prop_header(): [ EXT_ELEM_PROP_1 EXT_ELEM_PROP_10 EXT_ELEM_PROP_4 EXT_ELEM_PROP_5 EXT_ELEM_PROP_7 EXT_ELEM_PROP_8 EXT_ELEM_PROP_9 ] + + +------------------------------------- + 175 MODFICATIONS +------------------------------------- + +PROP_1: 1.101 +PROP_10: 182 +PROP_2: 692 +PROP_3: 22 +PROP_4: 779 +PROP_5: 902 +PROP_6: 984 +PROP_7: 434 + + +set.num_extend_elem_props(): 6 + + +------------------------------------- + 180 MODFICATIONS +------------------------------------- + +PROP_1: 1.101 +PROP_10: 182 +PROP_2: 692 +PROP_3: 22 +PROP_4: 779 +PROP_5: 902 +PROP_6: 984 +PROP_7: 434 + + +set.bsize(): 0 +set.elem_prop_keys(): [] +set.bsize(): 0 +set.size(): 0 +set.prop_keys(): [ PROP_1 PROP_10 PROP_2 PROP_3 PROP_4 PROP_5 PROP_6 PROP_7 ] +set.elem_prop_keys(): [] +set.prop_keys(): [ PROP_1 PROP_10 PROP_2 PROP_3 PROP_4 PROP_5 PROP_6 PROP_7 PROP_8 PROP_9 ] + + +------------------------------------- + 185 MODFICATIONS +------------------------------------- + +PROP_1: 1.101 +PROP_10: 182 +PROP_2: 692 +PROP_3: 22 +PROP_4: 779 +PROP_5: 902 +PROP_6: 984 +PROP_7: 434 +PROP_8: 859 +PROP_9: 835 + + +set.has_prop(PROP_9): 1 +set.get_extend_elem_prop_header(): [ EXT_ELEM_PROP_1 EXT_ELEM_PROP_10 EXT_ELEM_PROP_5 EXT_ELEM_PROP_8 EXT_ELEM_PROP_9 ] +set.has_prop(PROP_2): 1 +set.has_extend_elem_prop(EXT_ELEM_PROP_8): 1 +set.has_extend_elem_prop(EXT_ELEM_PROP_3): 0 +set.num_extend_elem_props(): 5 +set.bsize(): 0 +set.get_extend_elem_prop(EXT_ELEM_PROP_9,6): NaN + + +------------------------------------- + 190 MODFICATIONS +------------------------------------- + +PROP_1: 1.101 +PROP_10: 182 +PROP_2: 692 +PROP_3: 22 +PROP_4: 779 +PROP_5: 902 +PROP_6: 984 +PROP_7: 434 +PROP_8: 859 +PROP_9: 835 + +-------------------- + 0 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: -99, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_7: -99, EXT_ELEM_PROP_8: NaN, EXT_ELEM_PROP_9: NaN} + +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 576, 576, 576 ] + + +-------------------- + 1 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: -99, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_7: -99, EXT_ELEM_PROP_8: NaN, EXT_ELEM_PROP_9: NaN} + +[ 1005, 1005, 1005 ] +[ 1005, 1005, 1005 ] +[ 1005, 1005, 1005 ] +[ 1005, 1005, 1005 ] + + +-------------------- + 2 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: -99, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_7: -99, EXT_ELEM_PROP_8: NaN, EXT_ELEM_PROP_9: NaN} + +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 576, 576, 576 ] + + +-------------------- + 3 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: -99, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_7: -99, EXT_ELEM_PROP_8: NaN, EXT_ELEM_PROP_9: NaN} + +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 576, 576, 576 ] + + +-------------------- + 4 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: -99, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_7: -99, EXT_ELEM_PROP_8: NaN, EXT_ELEM_PROP_9: NaN} + +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 576, 576, 576 ] + + +-------------------- + 5 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: -99, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_7: -99, EXT_ELEM_PROP_8: NaN, EXT_ELEM_PROP_9: NaN} + +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 576, 576, 576 ] + + +-------------------- + 6 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: -99, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_7: -99, EXT_ELEM_PROP_8: NaN, EXT_ELEM_PROP_9: NaN} + +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 576, 576, 576 ] + + +-------------------- + 7 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: -99, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_7: -99, EXT_ELEM_PROP_8: NaN, EXT_ELEM_PROP_9: NaN} + +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 576, 576, 576 ] + + +-------------------- + 8 +-------------------- +{EXT_ELEM_PROP_1: 1.171, EXT_ELEM_PROP_10: 11.071, EXT_ELEM_PROP_5: 5.571, EXT_ELEM_PROP_7: 7.771, EXT_ELEM_PROP_8: 8.871, EXT_ELEM_PROP_9: 9.971} + +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 576, 576, 576 ] + + +-------------------- + 9 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: -99, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_7: -99, EXT_ELEM_PROP_8: NaN, EXT_ELEM_PROP_9: NaN} + +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 576, 576, 576 ] + + + +set.bsize(): 270 +set.prop_keys(): [ PROP_1 PROP_10 PROP_2 PROP_3 PROP_4 PROP_5 PROP_6 PROP_7 PROP_8 PROP_9 ] + + +------------------------------------- + 195 MODFICATIONS +------------------------------------- + +PROP_1: 1.101 +PROP_10: 182 +PROP_2: 692 +PROP_3: 22 +PROP_4: 779 +PROP_5: 902 +PROP_6: 153 +PROP_7: 434 +PROP_8: 859 +PROP_9: 835 + +-------------------- + 0 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: -99, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_7: -99, EXT_ELEM_PROP_8: NaN, EXT_ELEM_PROP_9: NaN} + +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 337, 337, 337 ] +[ 337, 337, 337 ] +[ 337, 337, 337 ] +[ 337, 337, 337 ] +[ 337, 337, 337 ] + + +-------------------- + 1 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: -99, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_7: -99, EXT_ELEM_PROP_8: NaN, EXT_ELEM_PROP_9: NaN} + +[ 1005, 1005, 1005 ] +[ 1005, 1005, 1005 ] +[ 1005, 1005, 1005 ] +[ 1005, 1005, 1005 ] +[ 337, 337, 337 ] +[ 337, 337, 337 ] +[ 337, 337, 337 ] +[ 337, 337, 337 ] +[ 337, 337, 337 ] + + +-------------------- + 2 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: -99, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_7: 493, EXT_ELEM_PROP_8: NaN, EXT_ELEM_PROP_9: NaN} + +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 337, 337, 337 ] +[ 337, 337, 337 ] +[ 337, 337, 337 ] +[ 337, 337, 337 ] +[ 337, 337, 337 ] + + +-------------------- + 3 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: -99, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_7: -99, EXT_ELEM_PROP_8: NaN, EXT_ELEM_PROP_9: NaN} + +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 337, 337, 337 ] +[ 337, 337, 337 ] +[ 337, 337, 337 ] +[ 337, 337, 337 ] +[ 337, 337, 337 ] + + +-------------------- + 4 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: -99, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_7: -99, EXT_ELEM_PROP_8: NaN, EXT_ELEM_PROP_9: NaN} + +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 337, 337, 337 ] +[ 337, 337, 337 ] +[ 337, 337, 337 ] +[ 337, 337, 337 ] +[ 337, 337, 337 ] + + +-------------------- + 5 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: -99, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_7: -99, EXT_ELEM_PROP_8: NaN, EXT_ELEM_PROP_9: NaN} + +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 337, 337, 337 ] +[ 337, 337, 337 ] +[ 337, 337, 337 ] +[ 337, 337, 337 ] +[ 337, 337, 337 ] + + +-------------------- + 6 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: -99, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_7: -99, EXT_ELEM_PROP_8: NaN, EXT_ELEM_PROP_9: NaN} + +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 337, 337, 337 ] +[ 337, 337, 337 ] +[ 337, 337, 337 ] +[ 337, 337, 337 ] +[ 337, 337, 337 ] + + +-------------------- + 7 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: -99, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_7: -99, EXT_ELEM_PROP_8: NaN, EXT_ELEM_PROP_9: NaN} + +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 337, 337, 337 ] +[ 337, 337, 337 ] +[ 337, 337, 337 ] +[ 337, 337, 337 ] +[ 337, 337, 337 ] + + +-------------------- + 8 +-------------------- +{EXT_ELEM_PROP_1: 1.171, EXT_ELEM_PROP_10: 11.071, EXT_ELEM_PROP_5: 5.571, EXT_ELEM_PROP_7: 7.771, EXT_ELEM_PROP_8: 8.871, EXT_ELEM_PROP_9: 9.971} + +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 337, 337, 337 ] +[ 337, 337, 337 ] +[ 337, 337, 337 ] +[ 337, 337, 337 ] +[ 337, 337, 337 ] + + +-------------------- + 9 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: -99, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_7: -99, EXT_ELEM_PROP_8: NaN, EXT_ELEM_PROP_9: NaN} + +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 337, 337, 337 ] +[ 337, 337, 337 ] +[ 337, 337, 337 ] +[ 337, 337, 337 ] +[ 337, 337, 337 ] + + + +set.num_extend_elem_props(): 6 +set.prop_index(PROP_3): 3 +set.get_extend_elem_prop(EXT_ELEM_PROP_5,4): -99 +set.prop_index(PROP_10): 1 + + +------------------------------------- + 200 MODFICATIONS +------------------------------------- + +PROP_1: 1.101 +PROP_10: 182 +PROP_2: 692 +PROP_3: 22 +PROP_4: 779 +PROP_5: 902 +PROP_6: 153 +PROP_7: 434 +PROP_8: 859 +PROP_9: 835 + +-------------------- + 0 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: -99, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_6: NaN, EXT_ELEM_PROP_7: -99, EXT_ELEM_PROP_8: NaN, EXT_ELEM_PROP_9: NaN} + +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 337, 337, 337 ] +[ 337, 337, 337 ] +[ 337, 337, 337 ] +[ 337, 337, 337 ] +[ 337, 337, 337 ] + + +-------------------- + 1 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: -99, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_6: NaN, EXT_ELEM_PROP_7: -99, EXT_ELEM_PROP_8: NaN, EXT_ELEM_PROP_9: NaN} + +[ 1005, 1005, 1005 ] +[ 1005, 1005, 1005 ] +[ 1005, 1005, 1005 ] +[ 1005, 1005, 1005 ] +[ 337, 337, 337 ] +[ 337, 337, 337 ] +[ 337, 337, 337 ] +[ 337, 337, 337 ] +[ 337, 337, 337 ] + + +-------------------- + 2 +-------------------- +{EXT_ELEM_PROP_1: 1.111, EXT_ELEM_PROP_10: 11.011, EXT_ELEM_PROP_5: 5.511, EXT_ELEM_PROP_6: 6.611, EXT_ELEM_PROP_7: 7.711, EXT_ELEM_PROP_8: 8.811, EXT_ELEM_PROP_9: 9.911} + +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 337, 337, 337 ] +[ 337, 337, 337 ] +[ 337, 337, 337 ] +[ 337, 337, 337 ] +[ 337, 337, 337 ] + + +-------------------- + 3 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: -99, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_6: NaN, EXT_ELEM_PROP_7: -99, EXT_ELEM_PROP_8: NaN, EXT_ELEM_PROP_9: NaN} + +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 337, 337, 337 ] +[ 337, 337, 337 ] +[ 337, 337, 337 ] +[ 337, 337, 337 ] +[ 337, 337, 337 ] + + +-------------------- + 4 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: -99, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_6: NaN, EXT_ELEM_PROP_7: -99, EXT_ELEM_PROP_8: NaN, EXT_ELEM_PROP_9: NaN} + +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 337, 337, 337 ] +[ 337, 337, 337 ] +[ 337, 337, 337 ] +[ 337, 337, 337 ] +[ 337, 337, 337 ] + + +-------------------- + 5 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: -99, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_6: NaN, EXT_ELEM_PROP_7: -99, EXT_ELEM_PROP_8: NaN, EXT_ELEM_PROP_9: NaN} + +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 337, 337, 337 ] +[ 337, 337, 337 ] +[ 337, 337, 337 ] +[ 337, 337, 337 ] +[ 337, 337, 337 ] + + +-------------------- + 6 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: -99, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_6: NaN, EXT_ELEM_PROP_7: -99, EXT_ELEM_PROP_8: NaN, EXT_ELEM_PROP_9: NaN} + +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 337, 337, 337 ] +[ 337, 337, 337 ] +[ 337, 337, 337 ] +[ 337, 337, 337 ] +[ 337, 337, 337 ] + + +-------------------- + 7 +-------------------- +{EXT_ELEM_PROP_1: 1.171, EXT_ELEM_PROP_10: 11.071, EXT_ELEM_PROP_5: 5.571, EXT_ELEM_PROP_6: NaN, EXT_ELEM_PROP_7: 7.771, EXT_ELEM_PROP_8: 8.871, EXT_ELEM_PROP_9: 9.971} + +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 337, 337, 337 ] +[ 337, 337, 337 ] +[ 337, 337, 337 ] +[ 337, 337, 337 ] +[ 337, 337, 337 ] + + + +set.num_props(): 10 +set.size(): 8 +set.has_extend_elem_prop(EXT_ELEM_PROP_2): 0 +set.has_extend_elem_prop(EXT_ELEM_PROP_1): 1 +set.get_extend_elem_prop(EXT_ELEM_PROP_9,3): NaN +set.get_extend_elem_prop_header(): [ EXT_ELEM_PROP_1 EXT_ELEM_PROP_10 EXT_ELEM_PROP_5 EXT_ELEM_PROP_6 EXT_ELEM_PROP_7 EXT_ELEM_PROP_8 EXT_ELEM_PROP_9 ] +set.has_prop(PROP_2): 1 +set.num_elem_props(): 0 +set.has_prop(PROP_1): 1 +set.num_extend_elem_props(): 7 +set.get_extend_elem_prop_header(): [ EXT_ELEM_PROP_1 EXT_ELEM_PROP_10 EXT_ELEM_PROP_5 EXT_ELEM_PROP_6 EXT_ELEM_PROP_7 EXT_ELEM_PROP_8 EXT_ELEM_PROP_9 ] +set.num_props(): 10 +set.elem_prop_keys(): [] +set.num_elem_props(): 0 + + +------------------------------------- + 205 MODFICATIONS +------------------------------------- + +PROP_1: 1.101 +PROP_10: 182 +PROP_2: 692 +PROP_3: 22 +PROP_4: 779 +PROP_5: 902 +PROP_6: 153 +PROP_7: 434 +PROP_8: 859 +PROP_9: 835 + +-------------------- + 0 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: -99, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_6: NaN, EXT_ELEM_PROP_7: -99, EXT_ELEM_PROP_8: NaN, EXT_ELEM_PROP_9: NaN} + +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 337, 337, 337 ] +[ 337, 337, 337 ] +[ 337, 337, 337 ] +[ 337, 337, 337 ] +[ 337, 337, 337 ] + + +-------------------- + 1 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: Boogle 10-0, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_6: Boogle 6-0, EXT_ELEM_PROP_7: Boogle 7-0, EXT_ELEM_PROP_8: Boogle 8-0, EXT_ELEM_PROP_9: Boogle 9-0} + +[ 1005, 1005, 1005 ] +[ 1005, 1005, 1005 ] +[ 1005, 1005, 1005 ] +[ 1005, 1005, 1005 ] +[ 337, 337, 337 ] +[ 337, 337, 337 ] +[ 337, 337, 337 ] +[ 337, 337, 337 ] +[ 337, 337, 337 ] + + +-------------------- + 2 +-------------------- +{EXT_ELEM_PROP_1: 1.111, EXT_ELEM_PROP_10: 11.011, EXT_ELEM_PROP_5: 5.511, EXT_ELEM_PROP_6: 6.611, EXT_ELEM_PROP_7: 7.711, EXT_ELEM_PROP_8: 8.811, EXT_ELEM_PROP_9: 9.911} + +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 337, 337, 337 ] +[ 337, 337, 337 ] +[ 337, 337, 337 ] +[ 337, 337, 337 ] +[ 337, 337, 337 ] + + +-------------------- + 3 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: -99, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_6: NaN, EXT_ELEM_PROP_7: -99, EXT_ELEM_PROP_8: NaN, EXT_ELEM_PROP_9: NaN} + +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 337, 337, 337 ] +[ 337, 337, 337 ] +[ 337, 337, 337 ] +[ 337, 337, 337 ] +[ 337, 337, 337 ] + + +-------------------- + 4 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: -99, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_6: NaN, EXT_ELEM_PROP_7: -99, EXT_ELEM_PROP_8: NaN, EXT_ELEM_PROP_9: NaN} + +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 337, 337, 337 ] +[ 337, 337, 337 ] +[ 337, 337, 337 ] +[ 337, 337, 337 ] +[ 337, 337, 337 ] + + +-------------------- + 5 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: -99, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_6: NaN, EXT_ELEM_PROP_7: -99, EXT_ELEM_PROP_8: NaN, EXT_ELEM_PROP_9: NaN} + +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 337, 337, 337 ] +[ 337, 337, 337 ] +[ 337, 337, 337 ] +[ 337, 337, 337 ] +[ 337, 337, 337 ] + + +-------------------- + 6 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: -99, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_6: NaN, EXT_ELEM_PROP_7: -99, EXT_ELEM_PROP_8: NaN, EXT_ELEM_PROP_9: NaN} + +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 337, 337, 337 ] +[ 337, 337, 337 ] +[ 337, 337, 337 ] +[ 337, 337, 337 ] +[ 337, 337, 337 ] + + +-------------------- + 7 +-------------------- +{EXT_ELEM_PROP_1: 1.171, EXT_ELEM_PROP_10: 11.071, EXT_ELEM_PROP_5: 5.571, EXT_ELEM_PROP_6: NaN, EXT_ELEM_PROP_7: 7.771, EXT_ELEM_PROP_8: 8.871, EXT_ELEM_PROP_9: 9.971} + +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 337, 337, 337 ] +[ 337, 337, 337 ] +[ 337, 337, 337 ] +[ 337, 337, 337 ] +[ 337, 337, 337 ] + + + +set.num_elem_props(): 0 + + +------------------------------------- + 210 MODFICATIONS +------------------------------------- + +PROP_1: 1.101 +PROP_10: 182 +PROP_2: 692 +PROP_3: 22 +PROP_4: 779 +PROP_5: 902 +PROP_6: 153 +PROP_7: 434 +PROP_8: 859 +PROP_9: 835 + +-------------------- + 0 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_6: NaN, EXT_ELEM_PROP_7: -99, EXT_ELEM_PROP_8: NaN, EXT_ELEM_PROP_9: NaN} + +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 359, 359, 359 ] +[ 359, 359, 359 ] +[ 359, 359, 359 ] + + +-------------------- + 1 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_6: Boogle 6-0, EXT_ELEM_PROP_7: Boogle 7-0, EXT_ELEM_PROP_8: Boogle 8-0, EXT_ELEM_PROP_9: Boogle 9-0} + +[ 1005, 1005, 1005 ] +[ 1005, 1005, 1005 ] +[ 359, 359, 359 ] +[ 359, 359, 359 ] +[ 359, 359, 359 ] + + +-------------------- + 2 +-------------------- +{EXT_ELEM_PROP_1: 1.111, EXT_ELEM_PROP_5: 5.511, EXT_ELEM_PROP_6: 6.611, EXT_ELEM_PROP_7: 7.711, EXT_ELEM_PROP_8: 8.811, EXT_ELEM_PROP_9: 9.911} + +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 359, 359, 359 ] +[ 359, 359, 359 ] +[ 359, 359, 359 ] + + +-------------------- + 3 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_6: NaN, EXT_ELEM_PROP_7: -99, EXT_ELEM_PROP_8: NaN, EXT_ELEM_PROP_9: NaN} + +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 359, 359, 359 ] +[ 359, 359, 359 ] +[ 359, 359, 359 ] + + +-------------------- + 4 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_6: NaN, EXT_ELEM_PROP_7: -99, EXT_ELEM_PROP_8: NaN, EXT_ELEM_PROP_9: NaN} + +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 359, 359, 359 ] +[ 359, 359, 359 ] +[ 359, 359, 359 ] + + +-------------------- + 5 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_6: NaN, EXT_ELEM_PROP_7: -99, EXT_ELEM_PROP_8: NaN, EXT_ELEM_PROP_9: NaN} + +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 359, 359, 359 ] +[ 359, 359, 359 ] +[ 359, 359, 359 ] + + +-------------------- + 6 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_6: NaN, EXT_ELEM_PROP_7: -99, EXT_ELEM_PROP_8: NaN, EXT_ELEM_PROP_9: NaN} + +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 359, 359, 359 ] +[ 359, 359, 359 ] +[ 359, 359, 359 ] + + +-------------------- + 7 +-------------------- +{EXT_ELEM_PROP_1: 1.171, EXT_ELEM_PROP_5: 5.571, EXT_ELEM_PROP_6: NaN, EXT_ELEM_PROP_7: 7.771, EXT_ELEM_PROP_8: 8.871, EXT_ELEM_PROP_9: 9.971} + +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 359, 359, 359 ] +[ 359, 359, 359 ] +[ 359, 359, 359 ] + + +-------------------- + 8 +-------------------- +{EXT_ELEM_PROP_1: 1.141, EXT_ELEM_PROP_5: 5.541, EXT_ELEM_PROP_6: 6.641, EXT_ELEM_PROP_7: 7.741, EXT_ELEM_PROP_8: 8.841, EXT_ELEM_PROP_9: 9.941} + +[ 1007, 1007, 1007 ] +[ 1007, 1007, 1007 ] +[ 359, 359, 359 ] +[ 359, 359, 359 ] +[ 359, 359, 359 ] + + + +set.bsize(): 135 +set.vsize(): 145 +set.has_extend_elem_prop(EXT_ELEM_PROP_1): 1 +set.num_extend_elem_props(): 6 +set.prop_index(PROP_7): 7 +set.num_extend_elem_props(): 6 +set.num_elem_props(): 0 +set.num_extend_elem_props(): 6 + + +------------------------------------- + 215 MODFICATIONS +------------------------------------- + +PROP_1: 1.101 +PROP_10: 182 +PROP_2: 692 +PROP_3: 22 +PROP_5: 902 +PROP_6: 153 +PROP_7: 434 +PROP_8: 859 +PROP_9: 835 + +-------------------- + 0 +-------------------- +{EXT_ELEM_PROP_1: 1.141, EXT_ELEM_PROP_10: NaN, EXT_ELEM_PROP_5: 5.541, EXT_ELEM_PROP_6: 6.641, EXT_ELEM_PROP_7: 7.741, EXT_ELEM_PROP_8: 8.841, EXT_ELEM_PROP_9: 9.941} + +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 359, 359, 359 ] +[ 359, 359, 359 ] +[ 359, 359, 359 ] + + +-------------------- + 1 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: NaN, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_6: Boogle 6-0, EXT_ELEM_PROP_7: Boogle 7-0, EXT_ELEM_PROP_8: Boogle 8-0, EXT_ELEM_PROP_9: Boogle 9-0} + +[ 1005, 1005, 1005 ] +[ 1005, 1005, 1005 ] +[ 359, 359, 359 ] +[ 359, 359, 359 ] +[ 359, 359, 359 ] + + +-------------------- + 2 +-------------------- +{EXT_ELEM_PROP_1: 1.111, EXT_ELEM_PROP_10: NaN, EXT_ELEM_PROP_5: 5.511, EXT_ELEM_PROP_6: 6.611, EXT_ELEM_PROP_7: 7.711, EXT_ELEM_PROP_8: 8.811, EXT_ELEM_PROP_9: 9.911} + +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 359, 359, 359 ] +[ 359, 359, 359 ] +[ 359, 359, 359 ] + + +-------------------- + 3 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: NaN, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_6: NaN, EXT_ELEM_PROP_7: -99, EXT_ELEM_PROP_8: NaN, EXT_ELEM_PROP_9: NaN} + +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 359, 359, 359 ] +[ 359, 359, 359 ] +[ 359, 359, 359 ] + + +-------------------- + 4 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: NaN, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_6: NaN, EXT_ELEM_PROP_7: -99, EXT_ELEM_PROP_8: NaN, EXT_ELEM_PROP_9: NaN} + +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 359, 359, 359 ] +[ 359, 359, 359 ] +[ 359, 359, 359 ] + + +-------------------- + 5 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: NaN, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_6: NaN, EXT_ELEM_PROP_7: NaN, EXT_ELEM_PROP_8: NaN, EXT_ELEM_PROP_9: NaN} + +[ 1008, 1008, 1008 ] +[ 1008, 1008, 1008 ] +[ 1008, 1008, 1008 ] +[ 1008, 1008, 1008 ] +[ 1008, 1008, 1008 ] +[ 1008, 1008, 1008 ] + + +-------------------- + 6 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: NaN, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_6: NaN, EXT_ELEM_PROP_7: -99, EXT_ELEM_PROP_8: NaN, EXT_ELEM_PROP_9: NaN} + +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 359, 359, 359 ] +[ 359, 359, 359 ] +[ 359, 359, 359 ] + + +-------------------- + 7 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: NaN, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_6: NaN, EXT_ELEM_PROP_7: -99, EXT_ELEM_PROP_8: NaN, EXT_ELEM_PROP_9: NaN} + +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 359, 359, 359 ] +[ 359, 359, 359 ] +[ 359, 359, 359 ] + + +-------------------- + 8 +-------------------- +{EXT_ELEM_PROP_1: 1.171, EXT_ELEM_PROP_10: NaN, EXT_ELEM_PROP_5: 5.571, EXT_ELEM_PROP_6: NaN, EXT_ELEM_PROP_7: 7.771, EXT_ELEM_PROP_8: 8.871, EXT_ELEM_PROP_9: 9.971} + +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 359, 359, 359 ] +[ 359, 359, 359 ] +[ 359, 359, 359 ] + + +-------------------- + 9 +-------------------- +{EXT_ELEM_PROP_1: 1.141, EXT_ELEM_PROP_10: NaN, EXT_ELEM_PROP_5: 5.541, EXT_ELEM_PROP_6: 6.641, EXT_ELEM_PROP_7: 7.741, EXT_ELEM_PROP_8: 8.841, EXT_ELEM_PROP_9: 9.941} + +[ 1007, 1007, 1007 ] +[ 1007, 1007, 1007 ] +[ 359, 359, 359 ] +[ 359, 359, 359 ] +[ 359, 359, 359 ] + + + +set.num_elem_props(): 0 + + +------------------------------------- + 220 MODFICATIONS +------------------------------------- + +PROP_1: 1.101 +PROP_10: 182 +PROP_2: 692 +PROP_3: 22 +PROP_5: 902 +PROP_6: 153 +PROP_8: 859 +PROP_9: 835 + +-------------------- + 0 +-------------------- +{EXT_ELEM_PROP_1: 1.141, EXT_ELEM_PROP_10: NaN, EXT_ELEM_PROP_5: 5.541, EXT_ELEM_PROP_6: 6.641, EXT_ELEM_PROP_7: 7.741, EXT_ELEM_PROP_8: 8.841, EXT_ELEM_PROP_9: 9.941} + +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 359, 359, 359 ] +[ 359, 359, 359 ] +[ 359, 359, 359 ] + + +-------------------- + 1 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: NaN, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_6: Boogle 6-0, EXT_ELEM_PROP_7: Boogle 7-0, EXT_ELEM_PROP_8: Boogle 8-0, EXT_ELEM_PROP_9: Boogle 9-0} + +[ 1005, 1005, 1005 ] +[ 1005, 1005, 1005 ] +[ 359, 359, 359 ] +[ 359, 359, 359 ] +[ 359, 359, 359 ] + + +-------------------- + 2 +-------------------- +{EXT_ELEM_PROP_1: 1.111, EXT_ELEM_PROP_10: NaN, EXT_ELEM_PROP_5: 5.511, EXT_ELEM_PROP_6: 6.611, EXT_ELEM_PROP_7: 7.711, EXT_ELEM_PROP_8: 8.811, EXT_ELEM_PROP_9: 9.911} + +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 359, 359, 359 ] +[ 359, 359, 359 ] +[ 359, 359, 359 ] + + +-------------------- + 3 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: NaN, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_6: NaN, EXT_ELEM_PROP_7: -99, EXT_ELEM_PROP_8: NaN, EXT_ELEM_PROP_9: NaN} + +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 359, 359, 359 ] +[ 359, 359, 359 ] +[ 359, 359, 359 ] + + + +set.size(): 4 + + +------------------------------------- + 225 MODFICATIONS +------------------------------------- + +PROP_1: 1.101 +PROP_10: 182 +PROP_2: 692 +PROP_3: 22 +PROP_4: 364 +PROP_5: 902 +PROP_6: 153 +PROP_7: 495 +PROP_8: 859 +PROP_9: 835 + +-------------------- + 0 +-------------------- +{EXT_ELEM_PROP_1: 1.141, EXT_ELEM_PROP_10: NaN, EXT_ELEM_PROP_5: 5.541, EXT_ELEM_PROP_6: 6.641, EXT_ELEM_PROP_7: 7.741, EXT_ELEM_PROP_8: 8.841, EXT_ELEM_PROP_9: 9.941} + +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 359, 359, 359 ] +[ 359, 359, 359 ] +[ 359, 359, 359 ] + + +-------------------- + 1 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: NaN, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_6: Boogle 6-0, EXT_ELEM_PROP_7: Boogle 7-0, EXT_ELEM_PROP_8: Boogle 8-0, EXT_ELEM_PROP_9: Boogle 9-0} + +[ 1005, 1005, 1005 ] +[ 1005, 1005, 1005 ] +[ 359, 359, 359 ] +[ 359, 359, 359 ] +[ 359, 359, 359 ] + + +-------------------- + 2 +-------------------- +{EXT_ELEM_PROP_1: 1.111, EXT_ELEM_PROP_10: NaN, EXT_ELEM_PROP_5: 5.511, EXT_ELEM_PROP_6: 6.611, EXT_ELEM_PROP_7: 7.711, EXT_ELEM_PROP_8: 8.811, EXT_ELEM_PROP_9: 9.911} + +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 359, 359, 359 ] +[ 359, 359, 359 ] +[ 359, 359, 359 ] + + +-------------------- + 3 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: NaN, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_6: NaN, EXT_ELEM_PROP_7: -99, EXT_ELEM_PROP_8: NaN, EXT_ELEM_PROP_9: NaN} + +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 359, 359, 359 ] +[ 359, 359, 359 ] +[ 359, 359, 359 ] + + +-------------------- + 4 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: NaN, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_6: NaN, EXT_ELEM_PROP_7: NaN, EXT_ELEM_PROP_8: NaN, EXT_ELEM_PROP_9: NaN} + +[ 1007, 1007, 1007 ] +[ 1007, 1007, 1007 ] +[ 1007, 1007, 1007 ] +[ 1007, 1007, 1007 ] +[ 1007, 1007, 1007 ] +[ 1007, 1007, 1007 ] + + + +set.size(): 5 +set.vsize(): 88 +set.get_extend_elem_prop(EXT_ELEM_PROP_5,3): -99 +set.prop_keys(): [ PROP_1 PROP_10 PROP_2 PROP_3 PROP_4 PROP_5 PROP_6 PROP_7 PROP_8 PROP_9 ] +set.bsize(): 78 +set.get_extend_elem_prop_header(): [ EXT_ELEM_PROP_1 EXT_ELEM_PROP_10 EXT_ELEM_PROP_5 EXT_ELEM_PROP_6 EXT_ELEM_PROP_7 EXT_ELEM_PROP_8 EXT_ELEM_PROP_9 ] +set.prop(PROP_10): 182 + + +------------------------------------- + 230 MODFICATIONS +------------------------------------- + +PROP_1: 1.101 +PROP_10: 182 +PROP_2: 692 +PROP_3: 22 +PROP_4: 364 +PROP_5: 902 +PROP_6: 153 +PROP_7: 495 +PROP_8: 859 +PROP_9: 835 + +-------------------- + 0 +-------------------- +{EXT_ELEM_PROP_1: 1.141, EXT_ELEM_PROP_10: Boogle 10-0, EXT_ELEM_PROP_5: 5.541, EXT_ELEM_PROP_6: Boogle 6-0, EXT_ELEM_PROP_7: Boogle 7-0, EXT_ELEM_PROP_8: Boogle 8-0, EXT_ELEM_PROP_9: Boogle 9-0} + +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 359, 359, 359 ] +[ 359, 359, 359 ] +[ 359, 359, 359 ] + + +-------------------- + 1 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: Boogle 10-1, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_6: Boogle 6-1, EXT_ELEM_PROP_7: Boogle 7-1, EXT_ELEM_PROP_8: Boogle 8-1, EXT_ELEM_PROP_9: Boogle 9-1} + +[ 1005, 1005, 1005 ] +[ 1005, 1005, 1005 ] +[ 359, 359, 359 ] +[ 359, 359, 359 ] +[ 359, 359, 359 ] + + +-------------------- + 2 +-------------------- +{EXT_ELEM_PROP_1: 1.111, EXT_ELEM_PROP_10: Boogle 10-2, EXT_ELEM_PROP_5: 5.511, EXT_ELEM_PROP_6: Boogle 6-2, EXT_ELEM_PROP_7: Boogle 7-2, EXT_ELEM_PROP_8: Boogle 8-2, EXT_ELEM_PROP_9: Boogle 9-2} + +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 359, 359, 359 ] +[ 359, 359, 359 ] +[ 359, 359, 359 ] + + +-------------------- + 3 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: Boogle 10-3, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_6: Boogle 6-3, EXT_ELEM_PROP_7: Boogle 7-3, EXT_ELEM_PROP_8: Boogle 8-3, EXT_ELEM_PROP_9: Boogle 9-3} + +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 359, 359, 359 ] +[ 359, 359, 359 ] +[ 359, 359, 359 ] + + +-------------------- + 4 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: Boogle 10-3, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_6: Boogle 6-3, EXT_ELEM_PROP_7: Boogle 7-3, EXT_ELEM_PROP_8: Boogle 8-3, EXT_ELEM_PROP_9: Boogle 9-3} + +[ 1007, 1007, 1007 ] +[ 1007, 1007, 1007 ] +[ 1007, 1007, 1007 ] +[ 1007, 1007, 1007 ] +[ 1007, 1007, 1007 ] +[ 1007, 1007, 1007 ] + + +-------------------- + 5 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: NaN, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_6: NaN, EXT_ELEM_PROP_7: NaN, EXT_ELEM_PROP_8: NaN, EXT_ELEM_PROP_9: NaN} + + + + +set.prop_index(PROP_10): 1 +set.has_elem_prop(ELEM_PROP_8): 0 +set.bsize(): 78 +set.bsize(): 78 + + +------------------------------------- + FINAL PRINT +------------------------------------- + +PROP_1: 1.101 +PROP_10: 182 +PROP_2: 692 +PROP_3: 22 +PROP_4: 364 +PROP_5: 902 +PROP_6: 153 +PROP_7: 495 +PROP_8: 859 +PROP_9: 835 + +-------------------- + 0 +-------------------- +{EXT_ELEM_PROP_1: 1.141, EXT_ELEM_PROP_10: Boogle 10-0, EXT_ELEM_PROP_5: 5.541, EXT_ELEM_PROP_6: Boogle 6-0, EXT_ELEM_PROP_7: Boogle 7-0, EXT_ELEM_PROP_8: Boogle 8-0, EXT_ELEM_PROP_9: Boogle 9-0} + +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 359, 359, 359 ] +[ 359, 359, 359 ] +[ 359, 359, 359 ] + + +-------------------- + 1 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: 898, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_6: Boogle 6-1, EXT_ELEM_PROP_7: Boogle 7-1, EXT_ELEM_PROP_8: Boogle 8-1, EXT_ELEM_PROP_9: Boogle 9-1} + +[ 1005, 1005, 1005 ] +[ 1005, 1005, 1005 ] +[ 359, 359, 359 ] +[ 359, 359, 359 ] +[ 359, 359, 359 ] + + +-------------------- + 2 +-------------------- +{EXT_ELEM_PROP_1: 1.111, EXT_ELEM_PROP_10: Boogle 10-2, EXT_ELEM_PROP_5: 5.511, EXT_ELEM_PROP_6: Boogle 6-2, EXT_ELEM_PROP_7: Boogle 7-2, EXT_ELEM_PROP_8: Boogle 8-2, EXT_ELEM_PROP_9: Boogle 9-2} + +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 359, 359, 359 ] +[ 359, 359, 359 ] +[ 359, 359, 359 ] + + +-------------------- + 3 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: Boogle 10-3, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_6: Boogle 6-3, EXT_ELEM_PROP_7: Boogle 7-3, EXT_ELEM_PROP_8: Boogle 8-3, EXT_ELEM_PROP_9: Boogle 9-3} + +[ 576, 576, 576 ] +[ 576, 576, 576 ] +[ 359, 359, 359 ] +[ 359, 359, 359 ] +[ 359, 359, 359 ] + + +-------------------- + 4 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: Boogle 10-3, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_6: Boogle 6-3, EXT_ELEM_PROP_7: Boogle 7-3, EXT_ELEM_PROP_8: Boogle 8-3, EXT_ELEM_PROP_9: Boogle 9-3} + +[ 1007, 1007, 1007 ] +[ 1007, 1007, 1007 ] +[ 1007, 1007, 1007 ] +[ 1007, 1007, 1007 ] +[ 1007, 1007, 1007 ] +[ 1007, 1007, 1007 ] + + +-------------------- + 5 +-------------------- +{EXT_ELEM_PROP_1: -99, EXT_ELEM_PROP_10: NaN, EXT_ELEM_PROP_5: -99, EXT_ELEM_PROP_6: NaN, EXT_ELEM_PROP_7: NaN, EXT_ELEM_PROP_8: NaN, EXT_ELEM_PROP_9: NaN} + + + diff --git a/python/fibre/base/test/stress_test_generator.py b/python/fibre/base/test/stress_test_generator.py new file mode 100644 index 0000000..c7a4946 --- /dev/null +++ b/python/fibre/base/test/stress_test_generator.py @@ -0,0 +1,1191 @@ + + +#===================================================================================================================== +# Test functions +#===================================================================================================================== + +from fibre.base.object import Object +from fibre.base.set import Set, CantBeFrozenException, ElemSizeException, UnmatchedPropertiesException + +import os.path +import random +import time + +PROP_1 = "PROP_1" +PROP_2 = "PROP_2" +PROP_3 = "PROP_3" +PROP_4 = "PROP_4" +PROP_5 = "PROP_5" +PROP_6 = "PROP_6" +PROP_7 = "PROP_7" +PROP_8 = "PROP_8" +PROP_9 = "PROP_9" +PROP_10 = "PROP_10" + +ELEM_PROP_1 = "ELEM_PROP_1" +ELEM_PROP_2 = "ELEM_PROP_2" +ELEM_PROP_3 = "ELEM_PROP_3" +ELEM_PROP_4 = "ELEM_PROP_4" +ELEM_PROP_5 = "ELEM_PROP_5" +ELEM_PROP_6 = "ELEM_PROP_6" +ELEM_PROP_7 = "ELEM_PROP_7" +ELEM_PROP_8 = "ELEM_PROP_8" +ELEM_PROP_9 = "ELEM_PROP_9" +ELEM_PROP_10 = "ELEM_PROP_10" + +EXT_ELEM_PROP_1 = "EXT_ELEM_PROP_1" +EXT_ELEM_PROP_2 = "EXT_ELEM_PROP_2" +EXT_ELEM_PROP_3 = "EXT_ELEM_PROP_3" +EXT_ELEM_PROP_4 = "EXT_ELEM_PROP_4" +EXT_ELEM_PROP_5 = "EXT_ELEM_PROP_5" +EXT_ELEM_PROP_6 = "EXT_ELEM_PROP_6" +EXT_ELEM_PROP_7 = "EXT_ELEM_PROP_7" +EXT_ELEM_PROP_8 = "EXT_ELEM_PROP_8" +EXT_ELEM_PROP_9 = "EXT_ELEM_PROP_9" +EXT_ELEM_PROP_10 = "EXT_ELEM_PROP_10" + + +class EmptyListException(Exception): + + def __init__(self, value): + self.value = value + + def __str__(self): + return repr(self.value) + + + + +def random_size(): + + return random.choice(range(10)) + +def random_value(): + + return random.choice(range(1000)) + + + +class StressTestGenerator: + + SET_SIZE = 5 + OBJECT_SIZE = 5 + NUM_TESTS = 500 + + def __init__(self, num_elems, elem_degree): + + self.set = Set() + self.set.first_set(num_elems, elem_degree) + self.orig_size = num_elems + + + def get_valid_elem_degree(self): + + if self.only_valid and self.set.elem_degree: + elem_degree = self.set.elem_degree + else: + elem_degree = random_size() + + return elem_degree + + + def get_valid_elem_index(self): + + if self.only_valid: + if not self.set.size(): + raise EmptyListException('') + elem_index = random.choice(xrange(self.set.size())) + else: + elem_index = random_size() + + return elem_index + + + def get_valid_extend_elem_key(self): + + if self.only_valid: + if not self.set.elem_extend_prps.keys(): + raise EmptyListException('') + ext_elem_key = random.choice(self.set.elem_extend_prps.keys()) + else: + ext_elem_key = 'EXT_ELEM_PROP_%d' % random.choice(xrange(10)+1) + + return ext_elem_key + + + def get_valid_elem_key(self): + + if self.only_valid: + if not self.set.elem_prp_keys: + raise EmptyListException('') + elem_key = random.choice(self.set.elem_prp_keys) + else: + elem_key = 'ELEM_PROP_%d' % random.choice(xrange(10)+1) + + return elem_key + + + def get_valid_elem_key_index(self): + + if self.only_valid: + if not self.set.elem_prp_keys: + raise EmptyListException('') + elem_key_index = random.choice(xrange(len(self.set.elem_prp_keys))) + else: + elem_key_index = random.choice(xrange(10)) + + return elem_key_index + + + def get_valid_key(self): + + if self.only_valid: + if not self.set.prps.keys(): + raise EmptyListException('') + key = random.choice(self.set.prps.keys()) + else: + key = 'PROP_%d' % random.choice(xrange(10)+1) + + return key + + + def get_invalid_key(self): + + if self.only_valid: + invalid_keys = list() + for i in range(1,11): + key = 'PROP_%d' % i + if key not in self.set.prps.keys(): + invalid_keys.append(key) + + if not invalid_keys: + raise EmptyListException('') + key = random.choice(invalid_keys) + else: + key = 'PROP_%d' % random.choice(xrange(10)+1) + + return key + + def get_valid_key_index(self): + + if self.only_valid: + if not self.set.prps: + raise EmptyListException('') + key_index = random.choice(xrange(len(self.set.prps))) + else: + key_index = random.choice(xrange(10)) + + return key_index + + + def clear(self): + self.size = 0 + + + def elem_resize_test(self): + + format_str = 'set.elem_resize(%d,%d)' + + self.elem_degree = random.choice(range(1,10)) + + function_str = format_str % (self.elem_degree, random_value()) + + if self.only_valid: + eval('self.' + function_str) + + return (function_str,False,False) + + + def push_back_test(self): + + format_str = 'set.push_back(objects[%d][%d])' + + function_str = format_str % (self.get_valid_elem_degree(), random_size()) + + if self.only_valid: + eval('self.' + function_str) + + return (function_str,False,False) + + + def push_back_w_row_test(self): + + format_str = 'set.push_back(objects[%d][%d], ext_prop_row_maps[%d])' + + function_str = format_str % (self.get_valid_elem_degree(), random_size(), random_size()) + + if self.only_valid: + eval('self.' + function_str) + + return (function_str,False,False) + + + def append_test(self): + + function_str = 'set.append(set2)' + + if self.only_valid: + eval('self.' + function_str) + + return (function_str,False,False) + + + def erase_test(self): + + format_str = 'set.erase(%d)' + + function_str = format_str % self.get_valid_elem_index() + + if self.only_valid: + eval('self.' + function_str) + + return (function_str,False,False) + + + def insert_test(self): + + format_str = 'set.insert(objects[%d][%d],%d)' + + function_str = format_str % (self.get_valid_elem_degree(),random_size(),self.get_valid_elem_index()) + + if self.only_valid: + eval('self.' + function_str) + + return (function_str,False,False) + + + def clear_test(self): + + format_str = 'set.clear()' + + function_str = format_str + + self.size = 0 + + if self.only_valid: + eval('self.' + function_str) + + return (function_str,False,False) + + + def num_extend_elem_props_test(self): + + format_str = 'set.num_extend_elem_props()' + + function_str = format_str + + return (function_str,True,False) + + + def get_extend_elem_prop_header_test(self): + + format_str = 'set.get_extend_elem_prop_header()' + + function_str = format_str + + return (function_str,True,False) + + + def add_extend_elem_prop_test(self): + + format_str = 'set.add_extend_elem_prop(EXT_ELEM_PROP_%d,"-99")' + + function_str = format_str % (random_size()+1) + + if self.only_valid: + eval('self.' + function_str) + + return (function_str,False,False) + + + def add_extend_elem_props_test(self): + + format_str = 'set.add_extend_elem_props(set2)' + + function_str = format_str + + if self.only_valid: + eval('self.' + function_str) + + return (function_str,False,False) + + + def clear_extend_elem_props_test(self): + + format_str = 'set.clear_extend_elem_props()' + + function_str = format_str + + if self.only_valid: + eval('self.' + function_str) + + return (function_str,False,False) + + + def remove_extend_elem_prop_test(self): + + format_str = 'set.remove_extend_elem_prop(%s)' + + function_str = format_str % self.get_valid_extend_elem_key() + + if self.only_valid: + eval('self.' + function_str) + + return (function_str,False,False) + + + def set_extend_elem_prop_test(self): + + format_str = 'set.set_extend_elem_prop(%s,"%d",%d)' + + function_str = format_str % (self.get_valid_extend_elem_key(),random_value(),self.get_valid_elem_index()) + + if self.only_valid: + eval('self.' + function_str) + + return (function_str,False,False) + + + def get_extend_elem_prop_test(self): + + format_str = 'set.get_extend_elem_prop(%s,%d)' + + function_str = format_str % (self.get_valid_extend_elem_key(),self.get_valid_elem_index()) + + return (function_str,True,False) + + + def has_extend_elem_prop_test(self): + + format_str = 'set.has_extend_elem_prop(EXT_ELEM_PROP_%d)' + + function_str = format_str % (random_size()+1) + + return (function_str,True,False) + + + def get_extend_elem_prop_row_test(self): + + format_str = 'set.get_extend_elem_prop_row(%d)' + + function_str = format_str % self.get_valid_elem_index() + + if self.only_valid: + eval('self.' + function_str) + + return (function_str,False,False) + + + def set_extend_elem_prop_row_test(self): + + format_str = 'set.set_extend_elem_prop_row(ext_prop_row_maps[%d],%d)' + + function_str = format_str % (random_size(),self.get_valid_elem_index()) + + if self.only_valid: + eval('self.' + function_str) + + return (function_str,False,False) + + + def copy_extend_elem_prop_row_test(self): + + format_str = 'set.copy_extend_elem_prop_row(set2,%d,%d)' + + function_str = format_str % (random.choice(range(self.orig_size)),self.get_valid_elem_index()) + + if self.only_valid: + eval('self.' + function_str) + + return (function_str,False,False) + + + def copy_extend_elem_props_test(self): + + if self.set.size() != set2.size(): + raise ElemSizeException("'copy_extend_elem_props_test' could not be tested because set size has changed") + + format_str = 'set.copy_extend_elem_props(set2)' + + function_str = format_str + + if self.only_valid: + eval('self.' + function_str) + + + return (function_str,False,False) + + + def append_extend_elem_props_test(self): + + if self.set.size() != set2.size(): + raise ElemSizeException("'append_extend_elem_props_test' could not be tested because set size has changed") + + format_str = 'set.append_extend_elem_props(set2)' + + function_str = format_str + + if self.only_valid: + eval('self.' + function_str) + + return (function_str,False,False) + + + def num_elem_props_test(self): + + format_str = 'set.num_elem_props()' + + function_str = format_str + + return (function_str,True,False) + + + def add_elem_prop_test(self): + + format_str = 'set.add_elem_prop(%s,%d)' + + function_str = format_str % (self.get_valid_elem_key(),random_value()) + + return (function_str,False,True) + + + def has_elem_prop_test(self): + + format_str = 'set.has_elem_prop(ELEM_PROP_%d)' + + function_str = format_str % (random_size()+1) + + return (function_str,True,False) + + + def remove_elem_prop_test(self): + + format_str = 'set.remove_elem_prop(%s)' + + function_str = format_str % self.get_valid_elem_key() + + if self.only_valid: + eval('self.' + function_str) + + return (function_str,False,True) + + + def clear_elem_props_test(self): + + format_str = 'set.clear_elem_props()' + + function_str = format_str + + if self.only_valid: + eval('self.' + function_str) + + return (function_str,False,True) + + + def elem_prop_index_test(self): + + format_str = 'set.elem_prop_index(%s)' + + function_str = format_str % self.get_valid_elem_key() + + return (function_str,True,False) + + + def elem_prop_name_test(self): + + format_str = 'set.elem_prop_name(%d)' + + function_str = format_str % self.get_valid_elem_key_index() + + return (function_str,True,False) + + + def elem_prop_keys_test(self): + + format_str = 'set.elem_prop_keys()' + + function_str = format_str + + return (function_str,True,False) + + + def freeze_elem_degree_test(self): + + format_str = 'set.freeze_elem_degree()' + + function_str = format_str + + if self.only_valid: + eval('self.' + function_str) + + return (function_str,False,True) + + + def free_elem_degree_test(self): + + format_str = 'set.free_elem_degree()' + + function_str = format_str + + if self.only_valid: + eval('self.' + function_str) + + return (function_str,False,False) + + + def resize_test(self): + + format_str = 'set.resize(%d,%d,%d)' + + self.size = random_size() + + if self.set.elem_degree: + elem_degree = 0 + else: + elem_degree = self.get_valid_elem_degree() + + function_str = format_str % (random_size(),random_value(),elem_degree) + + if self.only_valid: + eval('self.' + function_str) + + return (function_str,False,False) + + + def size_test(self): + + format_str = 'set.size()' + + function_str = format_str + + return (function_str,True,False) + + + def vsize_test(self): + + format_str = 'set.vsize()' + + function_str = format_str + + return (function_str,True,False) + + + def bsize_test(self): + + format_str = 'set.bsize()' + + function_str = format_str + + return (function_str,True,False) + + + def num_props_test(self): + + format_str = 'set.num_props()' + + function_str = format_str + + return (function_str,True,False) + + + def add_prop_test(self): + + format_str = 'set.add_prop(%s,%d)' + + function_str = format_str % (self.get_invalid_key(),random_value()) + + if self.only_valid: + eval('self.' + function_str) + + return (function_str,False,False) + + + def has_prop_test(self): + + format_str = 'set.has_prop(PROP_%d)' + + function_str = format_str % (random_size()+1) + + return (function_str,True,False) + + + def remove_prop_test(self): + + format_str = 'set.remove_prop(%s)' + + function_str = format_str % self.get_valid_key() + + if self.only_valid: + eval('self.' + function_str) + + return (function_str,False,False) + + + def clear_props_test(self): + + format_str = 'set.clear_props()' + + function_str = format_str + + if self.only_valid: + eval('self.' + function_str) + + return (function_str,False,False) + + + def prop_index_test(self): + + format_str = 'set.prop_index(%s)' + + function_str = format_str % self.get_valid_key() + + return (function_str,True,False) + + + def prop_test(self): + + format_str = 'set.prop(%s)' + + function_str = format_str % self.get_valid_key() + + return (function_str,True,False) + + + def prop_name_test(self): + + format_str = 'set.prop_name(%d)' + + function_str = format_str % self.get_valid_key_index() + + if self.only_valid: + eval('self.' + function_str) + + return (function_str,False,False) + + + def prop_keys_test(self): + + format_str = 'set.prop_keys()' + + function_str = format_str + + return (function_str,True,False) + + + def generate_stress_test(self,num_iterations, only_valid=True, include_clear=True, resize_on_freeze=True, print_every=10): + + #Store only valid in object so it can be accessed by '*_test()' functions + self.only_valid = only_valid + + # Set up function list + function_list = list() + function_list.append('self.elem_resize_test()') + function_list.append('self.push_back_test()') + function_list.append('self.push_back_w_row_test()') + function_list.append('self.append_test()') + function_list.append('self.erase_test()') + function_list.append('self.insert_test()') + function_list.append('self.num_extend_elem_props_test()') + function_list.append('self.get_extend_elem_prop_header_test()') + function_list.append('self.add_extend_elem_prop_test()') + function_list.append('self.add_extend_elem_props_test()') + function_list.append('self.remove_extend_elem_prop_test()') + function_list.append('self.set_extend_elem_prop_test()') + function_list.append('self.get_extend_elem_prop_test()') + function_list.append('self.has_extend_elem_prop_test()') + function_list.append('self.get_extend_elem_prop_row_test()') + function_list.append('self.set_extend_elem_prop_row_test()') + function_list.append('self.copy_extend_elem_prop_row_test()') + function_list.append('self.copy_extend_elem_props_test()') + function_list.append('self.append_extend_elem_props_test()') + function_list.append('self.num_elem_props_test()') + function_list.append('self.add_elem_prop_test()') + function_list.append('self.has_elem_prop_test()') + function_list.append('self.remove_elem_prop_test()') + function_list.append('self.elem_prop_index_test()') + function_list.append('self.elem_prop_name_test()') + function_list.append('self.elem_prop_keys_test()') + function_list.append('self.freeze_elem_degree_test()') + function_list.append('self.free_elem_degree_test()') + function_list.append('self.resize_test()') + function_list.append('self.size_test()') + function_list.append('self.vsize_test()') + function_list.append('self.bsize_test()') + function_list.append('self.num_props_test()') + function_list.append('self.add_prop_test()') + function_list.append('self.has_prop_test()') + function_list.append('self.remove_prop_test()') + function_list.append('self.prop_index_test()') + function_list.append('self.prop_test()') + function_list.append('self.prop_name_test()') + function_list.append('self.prop_keys_test()') + + if include_clear: + function_list.append('self.clear_test()') + function_list.append('self.clear_extend_elem_props_test()') + function_list.append('self.clear_elem_props_test()') + function_list.append('self.clear_props_test()') + + + cpp_code = open('/home/tclose/Code/Tractography/cmd/stress_tester.cpp', 'w') + py_code = open('/home/tclose/Code/Tractography/python/fibre/base/test/stress_tester.py','w') + + cpp_code.write(cpp_header) + py_code.write(py_header) + + cpp_code.write(' out << "\\n\\n-------------------------------------\\n INITIAL SET \\n-------------------------------------\\n\\n" << set << "\\n\\n";\n') # Write print statement in C++ + py_code.write ('f.write("\\n\\n-------------------------------------\\n INITIAL SET \\n-------------------------------------\\n" + str(set) + "\\n\\n")\n') + cpp_code.write(' out << "\\n\\n-------------------------------------\\n SECOND SET \\n-------------------------------------\\n\\n" << set2 << "\\n\\n";\n') # Write print statement in C++ + py_code.write ('f.write("\\n\\n-------------------------------------\\n SECOND SET \\n-------------------------------------\\n" + str(set2) + "\\n\\n")\n') + + + seed = time.time() + + seed = 1323911724.74 + random.seed(seed) + + print "random seed: " + str(seed) + + modify_count = 0 + for iter in range(num_iterations): + test_function = random.choice(function_list) + print test_function + try: + (function_str, printable, elem_props_changed)= eval(test_function) + + if printable: + cpp_code.write(' out << "' + function_str + ': " << ' + function_str + ' << std::endl;\n') # Write the function to be evaluated in C++ + py_code.write("f.write('" + function_str + ": ' + str(" + function_str + ").replace(\"', '\",\" \").replace(\"['\",\"[ \").replace(\"']\",\" ]\") + '\\n')\n") # Write the function to be evaluated in Python + else: + modify_count = modify_count + 1 + cpp_code.write(' ' + function_str + ';\n') # Write the function to be evaluated in C++ + py_code.write(function_str + '\n') # Write the function to be evaluated in Python + + if not (modify_count % print_every): + cpp_code.write(' out << "\\n\\n-------------------------------------\\n %d MODFICATIONS \\n-------------------------------------\\n\\n" << set << "\\n\\n";\n' % modify_count) # Write print statement in C++ + py_code.write ('f.write("\\n\\n-------------------------------------\\n %d MODFICATIONS \\n-------------------------------------\\n" + str(set) + "\\n\\n")\n' % modify_count) + + + + if elem_props_changed: + cpp_code.write(' elem_props = set.get_elem_prop_header(); recreate_elem_prop_objects(elem_props,objects,prop_row_maps,prop_rows);\n') + py_code.write('elem_props = set.get_elem_prop_header(); (objects,prop_row_maps,prop_rows) = recreate_elem_prop_objects(elem_props)\n') + + except EmptyListException: + print 'Could not produce valid index as list was empty' + + except CantBeFrozenException: + if resize_on_freeze: + self.elem_resize_test() + self.freeze_elem_degree_test() + else: + print 'Couldn''t freeze because rows were of different sizes' + + except ElemSizeException: + print 'Couldn''t append set because element sizes had already changed' + + except UnmatchedPropertiesException: + print 'Couldn''t append set because properties had already changed' + + + cpp_code.write(cpp_footer) + py_code.write(py_footer) + + cpp_code.close() + py_code.close() + + + +#===================================================================================================================== +# Stress test functions +#===================================================================================================================== + + +def recreate_objects(elem_keys): + + object_list = list() + + for size_i in range(10): + objects = list() + + for val_i in range(10): + + object = Object(size_i, val_i + 1001) + + for key in elem_keys: + object.prps[key] = val_i + 1001 + + objects.append(object) + + object_list.append(objects) + + return object_list + + +def recreate_prop_row_maps(elem_keys): + + row_maps = list() + + key_i = 0 + for i in range(10): + value_i = 0 + row_map = dict() + for key in elem_keys: + row_map[key] = value_i * 0.01 + key_i * 0.1 + 0.001 + value_i = value_i + 1 + row_maps.append(row_map) + key_i = key_i + 1 + + return row_maps + + +def recreate_prop_rows(prop_keys): + + prop_rows = list() + + key_i = 0 + for i in range(10): + value_i = 0 + prop_row = list() + for key in prop_keys: + prop_row.append(value_i * 0.01 + key_i * 0.1 + 0.001) + value_i = value_i + 1 + prop_rows.append(prop_row) + + key_i = key_i + 1 + + return prop_rows + + +def recreate_elem_prop_objects(prop_keys): + + return (recreate_objects(prop_keys),recreate_prop_row_maps(prop_keys),recreate_prop_rows(prop_keys)) + + +def create_ext_prop_row_maps(): + + row_maps = list() + + for value_i in range(1,11): + row_map = dict() + for key_i in range(1,11): + row_map["EXT_ELEM_PROP_" + str(key_i)] = value_i * 0.01 + key_i * 1.1 + 0.001 + row_maps.append(row_map) + + return row_maps; + + +props = list() + +props.append(PROP_1) +props.append(PROP_2) +props.append(PROP_3) +props.append(PROP_4) +props.append(PROP_5) + +elem_props = list() + +elem_props.append(ELEM_PROP_1) +elem_props.append(ELEM_PROP_2) +elem_props.append(ELEM_PROP_3) +elem_props.append(ELEM_PROP_4) +elem_props.append(ELEM_PROP_5) + +objects = recreate_objects(elem_props) +prop_rows = recreate_prop_rows(elem_props) +prop_row_maps = recreate_prop_row_maps(elem_props) +ext_prop_row_maps = create_ext_prop_row_maps() + +set2 = Set() +set2.second_set(StressTestGenerator.SET_SIZE,StressTestGenerator.OBJECT_SIZE) + + + +cpp_header = '\n\ +\n\ +extern "C" {\n\ +#include \n\ +#include \n\ +}\n\ +\n\ +#include "math/matrix.h"\n\ +#include "exception.h"\n\ +\n\ +#include "bts/cmd.h"\n\ +#include "bts/common.h"\n\ +#include "bts/file.h"\n\ +\n\ +#include "bts/fibre/base/set.h"\n\ +\n\ +\n\ +using namespace BTS;\n\ +\n\ +\n\ +std::vector< std::vector > recreate_objects(const std::vector& elem_props) {\n\ +\n\ + std::vector< std::vector > objects(10);\n\ +\n\ + for (size_t size_i = 0; size_i < 10; ++size_i) {\n\ + objects[size_i];\n\ + for (size_t value_i = 0; value_i < 10; ++value_i) {\n\ + objects[size_i].push_back(Fibre::Base::Object(size_i, 3, elem_props));\n\ + objects[size_i][value_i].set(value_i+1001);\n\ + }\n\ + }\n\ +\n\ + return objects;\n\ +\n\ +}\n\ +\n\ +std::vector< std::map > recreate_prop_row_maps(const std::vector& elem_props) {\n\ +\n\ + std::vector< std::map > prop_row_maps(10);\n\ +\n\ + for (size_t value_i = 0; value_i < 10; ++value_i) {\n\ + for (size_t key_i = 0; key_i < elem_props.size(); ++key_i)\n\ + prop_row_maps[value_i][elem_props[key_i]] = (double)(value_i+1) * 0.01 + (double)(key_i+1) * 0.1 + 0.001;\n\ + }\n\ +\n\ + return prop_row_maps;\n\ +\n\ +}\n\ +\n\ +std::vector< std::vector > recreate_prop_rows(const std::vector& elem_props) {\n\ +\n\ + std::vector< std::vector > prop_rows(10);\n\ +\n\ + for (size_t value_i = 0; value_i < 10; ++value_i) {\n\ + for (size_t key_i = 0; key_i < elem_props.size(); ++key_i)\n\ + prop_rows[value_i].push_back((double)(value_i+1) * 0.01 + (double)(key_i+1) * 0.1 + 0.001);\n\ + }\n\ +\n\ + return prop_rows;\n\ +\n\ +}\n\ +\n\ +\n\ +std::vector< std::map > create_ext_prop_row_maps() {\n\ +\n\ + std::vector< std::map > prop_rows(10);\n\ +\n\ + for (size_t value_i = 0; value_i < 10; ++value_i) {\n\ + for (size_t key_i = 1; key_i < 11; ++key_i)\n\ + prop_rows[value_i]["EXT_ELEM_PROP_" +str(key_i)] = str((double)(value_i+1) * 0.01 + (double)key_i * 1.1 + 0.001);\n\ + }\n\ +\n\ + return prop_rows;\n\ +\n\ +}\n\ +\n\ +void recreate_elem_prop_objects(const std::vector& elem_props, std::vector >& objects, std::vector< std::map >& prop_row_maps, std::vector< std::vector >& prop_rows) {\n\ +\n\ + objects = recreate_objects(elem_props);\n\ + prop_row_maps = recreate_prop_row_maps(elem_props);\n\ + prop_rows = recreate_prop_rows(elem_props);\n\ +\n\ +}\n\ +\n\ +SET_VERSION_DEFAULT;\n\ +SET_AUTHOR ("Thomas G. Close");\n\ +SET_COPYRIGHT (NULL);\n\ +\n\ +DESCRIPTION = {\n\ + "Tests a random sequence of Fibre::Base::Set operations against those performed on a Python version.",\n\ + "",\n\ + NULL\n\ +};\n\ +\n\ +ARGUMENTS = {\n\ +\n\ +\n\ + Argument()\n\ +};\n\ +\n\ +\n\ +OPTIONS = {\n\ +\n\ +Option() };\n\ +\n\ +\n\ +EXECUTE {\n\ +\n\ + size_t SET_SIZE = 5;\n\ + size_t OBJECT_SIZE = 5;\n\ +\n\ + const char* PROP_1 = "PROP_1";\n\ + const char* PROP_2 = "PROP_2";\n\ + const char* PROP_3 = "PROP_3";\n\ + const char* PROP_4 = "PROP_4";\n\ + const char* PROP_5 = "PROP_5";\n\ + const char* PROP_6 = "PROP_6";\n\ + const char* PROP_7 = "PROP_7";\n\ + const char* PROP_8 = "PROP_8";\n\ + const char* PROP_9 = "PROP_9";\n\ + const char* PROP_10 = "PROP_10";\n\ +\n\ + const char* ELEM_PROP_1 = "ELEM_PROP_1";\n\ + const char* ELEM_PROP_2 = "ELEM_PROP_2";\n\ + const char* ELEM_PROP_3 = "ELEM_PROP_3";\n\ + const char* ELEM_PROP_4 = "ELEM_PROP_4";\n\ + const char* ELEM_PROP_5 = "ELEM_PROP_5";\n\ + const char* ELEM_PROP_6 = "ELEM_PROP_6";\n\ + const char* ELEM_PROP_7 = "ELEM_PROP_7";\n\ + const char* ELEM_PROP_8 = "ELEM_PROP_8";\n\ + const char* ELEM_PROP_9 = "ELEM_PROP_9";\n\ + const char* ELEM_PROP_10 = "ELEM_PROP_10";\n\ +\n\ + std::string EXT_ELEM_PROP_1 = "EXT_ELEM_PROP_1";\n\ + std::string EXT_ELEM_PROP_2 = "EXT_ELEM_PROP_2";\n\ + std::string EXT_ELEM_PROP_3 = "EXT_ELEM_PROP_3";\n\ + std::string EXT_ELEM_PROP_4 = "EXT_ELEM_PROP_4";\n\ + std::string EXT_ELEM_PROP_5 = "EXT_ELEM_PROP_5";\n\ + std::string EXT_ELEM_PROP_6 = "EXT_ELEM_PROP_6";\n\ + std::string EXT_ELEM_PROP_7 = "EXT_ELEM_PROP_7";\n\ + std::string EXT_ELEM_PROP_8 = "EXT_ELEM_PROP_8";\n\ + std::string EXT_ELEM_PROP_9 = "EXT_ELEM_PROP_9";\n\ + std::string EXT_ELEM_PROP_10 = "EXT_ELEM_PROP_10";\n\ +\n\ + std::vector props;\n\ +\n\ + props.push_back(PROP_1);\n\ + props.push_back(PROP_2);\n\ + props.push_back(PROP_3);\n\ + props.push_back(PROP_4);\n\ + props.push_back(PROP_5);\n\ +\n\ + std::vector elem_props;\n\ +\n\ + elem_props.push_back(ELEM_PROP_1);\n\ + elem_props.push_back(ELEM_PROP_2);\n\ + elem_props.push_back(ELEM_PROP_3);\n\ + elem_props.push_back(ELEM_PROP_4);\n\ + elem_props.push_back(ELEM_PROP_5);\n\ +\n\ +\n\ + std::vector< std::vector > objects = recreate_objects(elem_props);\n\ + std::vector > prop_rows = recreate_prop_rows(elem_props);\n\ + std::vector< std::map > prop_row_maps = recreate_prop_row_maps(elem_props);\n\ +\n\ + std::vector< std::map > ext_prop_row_maps = create_ext_prop_row_maps();\n\ +\n\ +\n\ + //Iniate set\n\ + Fibre::Base::Set set(SET_SIZE, OBJECT_SIZE, 3, props, elem_props);\n\ +\n\ + for (size_t elem_i = 0; elem_i < SET_SIZE; ++elem_i) {\n\ + Fibre::Base::Object ob = set[elem_i];\n\ + for (size_t elem_elem_i = 0; elem_elem_i < OBJECT_SIZE; ++elem_elem_i) {\n\ + Triple& t = ob[elem_elem_i];\n\ + for (size_t elem_elem_elem_i = 0; elem_elem_elem_i < 3; ++elem_elem_elem_i)\n\ + t[elem_elem_elem_i] = elem_i * 100 + elem_elem_i * 10 + elem_elem_elem_i +1;\n\ + }\n\ +\n\ + for (size_t prop_i = 0; prop_i < 5; ++prop_i)\n\ + ob.prop(prop_i) = (double)elem_i * 100.0 + (double)(prop_i+1) * .1 + 0.001;\n\ + }\n\ +\n\ + for (size_t prop_i = 0; prop_i < 5; ++prop_i)\n\ + set.prop(prop_i) = (double)(prop_i+1) * 1.1 + 0.001;\n\ +\n\ + for (size_t eprop_i = 1; eprop_i < 6; ++eprop_i) {\n\ + set.add_extend_elem_prop("EXT_ELEM_PROP_" + str(eprop_i),"NaN");\n\ + for (size_t row_i = 0; row_i < set.size(); ++row_i)\n\ + set.set_extend_elem_prop("EXT_ELEM_PROP_" + str(eprop_i), "Ooogle " + str(eprop_i) + "-" + str(row_i), row_i);\n\ + }\n\ +\n\ +\n\ + //Iniate set\n\ + Fibre::Base::Set set2(SET_SIZE, OBJECT_SIZE, 3, props, elem_props);\n\ +\n\ + for (size_t elem_i = 0; elem_i < SET_SIZE; ++elem_i) {\n\ + Fibre::Base::Object ob = set2[elem_i];\n\ + for (size_t elem_elem_i = 0; elem_elem_i < OBJECT_SIZE; ++elem_elem_i) {\n\ + Triple& t = ob[elem_elem_i];\n\ + for (size_t elem_elem_elem_i = 0; elem_elem_elem_i < 3; ++elem_elem_elem_i)\n\ + t[elem_elem_elem_i] = -(double)(elem_i * 100 + elem_elem_i * 10 + elem_elem_elem_i + 1);\n\ + }\n\ +\n\ + for (size_t prop_i = 0; prop_i < 5; ++prop_i)\n\ + ob.prop(prop_i) = -(double)elem_i * 100.0 - (double)(prop_i+1) * .1 - 0.001;\n\ + }\n\ +\n\ + for (size_t prop_i = 0; prop_i < 5; ++prop_i)\n\ + set2.prop(prop_i) = -(double)(prop_i+1) * 1.1 - 0.001;\n\ +\n\ + for (size_t eprop_i = 6; eprop_i < 11; ++eprop_i) {\n\ + set2.add_extend_elem_prop("EXT_ELEM_PROP_" + str(eprop_i),"NaN");\n\ + for (size_t row_i = 0; row_i < set2.size(); ++row_i)\n\ + set2.set_extend_elem_prop("EXT_ELEM_PROP_" + str(eprop_i), "Boogle " + str(eprop_i) + "-" + str(row_i), row_i);\n\ + }\n\ +\n\ + std::ofstream out;\n\ +\n\ + out.open("/home/tclose/Code/Tractography/python/fibre/base/test/output/cpp_output.txt");\n\ +\n\ +\n\ +\n\ + //====================================================================================================================\n\ + // Test functions start here\n\ + //====================================================================================================================\n\ +\n' + + +cpp_footer='\ +\n\ +\n\ + out << std::endl << std::endl << "-------------------------------------" << std::endl;\n\ + out << " FINAL PRINT " << std::endl;\n\ + out << "-------------------------------------\\n" << std::endl;\n\ +\n\ + out << set << std::endl;\n\ +\n\ + std::cout << "Ran cpp test successfully" << std::endl;\n\ +\n\ +\n\ +}\n' + + + +py_header="\ +from stress_test_generator import *\n\ +\n\ +set = Set()\n\ +set.first_set(StressTestGenerator.SET_SIZE,StressTestGenerator.OBJECT_SIZE)\n\ +global objects\n\ +global prop_rows\n\ +global prop_row_maps\n\ +\n\ +f = open('/home/tclose/Code/Tractography/python/fibre/base/test/output/python_output.txt','w')\n" + + + +#===================================================================================================================== +# Generated functions start here +#===================================================================================================================== + + +py_footer="\ +\n\ +\n\ +#=====================================================================================================================\n\ +# Generated functions end here\n\ +#=====================================================================================================================\n\ +\n\ +f.write('\\n\\n-------------------------------------\\n FINAL PRINT \\n-------------------------------------\\n')\n\ +\n\ +f.write(str(set))\n\ +\n\ +print 'Ran python test successfully!'\n\ +\n\ +f.write('\\n')\n\ +\n\ +f.close()\n" + + +if __name__ == '__main__': + + test_generator = StressTestGenerator(StressTestGenerator.SET_SIZE, StressTestGenerator.OBJECT_SIZE) + test_generator.generate_stress_test(StressTestGenerator.NUM_TESTS, include_clear=False, print_every=5) + + + \ No newline at end of file diff --git a/python/fibre/base/test/stress_tester.py b/python/fibre/base/test/stress_tester.py new file mode 100644 index 0000000..7be4771 --- /dev/null +++ b/python/fibre/base/test/stress_tester.py @@ -0,0 +1,501 @@ +from stress_test_generator import * + +set = Set() +set.first_set(StressTestGenerator.SET_SIZE,StressTestGenerator.OBJECT_SIZE) +global objects +global prop_rows +global prop_row_maps + +f = open('/home/tclose/Code/Tractography/python/fibre/base/test/output/python_output.txt','w') +f.write("\n\n-------------------------------------\n INITIAL SET \n-------------------------------------\n" + str(set) + "\n\n") +f.write("\n\n-------------------------------------\n SECOND SET \n-------------------------------------\n" + str(set2) + "\n\n") +set.insert(objects[5][8],1) +f.write('set.num_elem_props(): ' + str(set.num_elem_props()).replace("', '"," ").replace("['","[ ").replace("']"," ]") + '\n') +f.write('set.elem_prop_index(ELEM_PROP_4): ' + str(set.elem_prop_index(ELEM_PROP_4)).replace("', '"," ").replace("['","[ ").replace("']"," ]") + '\n') +set.add_elem_prop(ELEM_PROP_2,669) +elem_props = set.get_elem_prop_header(); (objects,prop_row_maps,prop_rows) = recreate_elem_prop_objects(elem_props) +f.write('set.has_extend_elem_prop(EXT_ELEM_PROP_7): ' + str(set.has_extend_elem_prop(EXT_ELEM_PROP_7)).replace("', '"," ").replace("['","[ ").replace("']"," ]") + '\n') +set.add_prop(PROP_6,984) +f.write('set.num_props(): ' + str(set.num_props()).replace("', '"," ").replace("['","[ ").replace("']"," ]") + '\n') +set.free_elem_degree() +set.remove_prop(PROP_3) +f.write("\n\n-------------------------------------\n 5 MODFICATIONS \n-------------------------------------\n" + str(set) + "\n\n") +set.add_elem_prop(ELEM_PROP_4,463) +elem_props = set.get_elem_prop_header(); (objects,prop_row_maps,prop_rows) = recreate_elem_prop_objects(elem_props) +f.write('set.bsize(): ' + str(set.bsize()).replace("', '"," ").replace("['","[ ").replace("']"," ]") + '\n') +set.copy_extend_elem_prop_row(set2,3,2) +set.copy_extend_elem_prop_row(set2,1,1) +f.write('set.size(): ' + str(set.size()).replace("', '"," ").replace("['","[ ").replace("']"," ]") + '\n') +set.add_prop(PROP_9,419) +f.write('set.num_extend_elem_props(): ' + str(set.num_extend_elem_props()).replace("', '"," ").replace("['","[ ").replace("']"," ]") + '\n') +f.write('set.prop(PROP_9): ' + str(set.prop(PROP_9)).replace("', '"," ").replace("['","[ ").replace("']"," ]") + '\n') +f.write('set.elem_prop_keys(): ' + str(set.elem_prop_keys()).replace("', '"," ").replace("['","[ ").replace("']"," ]") + '\n') +set.add_elem_prop(ELEM_PROP_5,661) +f.write("\n\n-------------------------------------\n 10 MODFICATIONS \n-------------------------------------\n" + str(set) + "\n\n") +elem_props = set.get_elem_prop_header(); (objects,prop_row_maps,prop_rows) = recreate_elem_prop_objects(elem_props) +set.push_back(objects[9][0], ext_prop_row_maps[3]) +f.write('set.prop_index(PROP_2): ' + str(set.prop_index(PROP_2)).replace("', '"," ").replace("['","[ ").replace("']"," ]") + '\n') +f.write('set.vsize(): ' + str(set.vsize()).replace("', '"," ").replace("['","[ ").replace("']"," ]") + '\n') +f.write('set.num_props(): ' + str(set.num_props()).replace("', '"," ").replace("['","[ ").replace("']"," ]") + '\n') +set.erase(1) +set.add_elem_prop(ELEM_PROP_4,815) +elem_props = set.get_elem_prop_header(); (objects,prop_row_maps,prop_rows) = recreate_elem_prop_objects(elem_props) +f.write('set.num_extend_elem_props(): ' + str(set.num_extend_elem_props()).replace("', '"," ").replace("['","[ ").replace("']"," ]") + '\n') +f.write('set.prop_index(PROP_2): ' + str(set.prop_index(PROP_2)).replace("', '"," ").replace("['","[ ").replace("']"," ]") + '\n') +set.add_prop(PROP_7,434) +set.insert(objects[5][8],1) +f.write("\n\n-------------------------------------\n 15 MODFICATIONS \n-------------------------------------\n" + str(set) + "\n\n") +f.write('set.get_extend_elem_prop_header(): ' + str(set.get_extend_elem_prop_header()).replace("', '"," ").replace("['","[ ").replace("']"," ]") + '\n') +f.write('set.prop_keys(): ' + str(set.prop_keys()).replace("', '"," ").replace("['","[ ").replace("']"," ]") + '\n') +set.free_elem_degree() +set.set_extend_elem_prop_row(ext_prop_row_maps[1],4) +f.write('set.prop_keys(): ' + str(set.prop_keys()).replace("', '"," ").replace("['","[ ").replace("']"," ]") + '\n') +f.write('set.elem_prop_keys(): ' + str(set.elem_prop_keys()).replace("', '"," ").replace("['","[ ").replace("']"," ]") + '\n') +set.set_extend_elem_prop_row(ext_prop_row_maps[3],4) +set.push_back(objects[5][6], ext_prop_row_maps[7]) +set.erase(2) +f.write("\n\n-------------------------------------\n 20 MODFICATIONS \n-------------------------------------\n" + str(set) + "\n\n") +set.insert(objects[1][5],5) +set.push_back(objects[6][1]) +f.write('set.elem_prop_index(ELEM_PROP_4): ' + str(set.elem_prop_index(ELEM_PROP_4)).replace("', '"," ").replace("['","[ ").replace("']"," ]") + '\n') +f.write('set.elem_prop_index(ELEM_PROP_4): ' + str(set.elem_prop_index(ELEM_PROP_4)).replace("', '"," ").replace("['","[ ").replace("']"," ]") + '\n') +set.resize(1,574,0) +set.push_back(objects[0][2]) +set.elem_resize(7,511) +f.write("\n\n-------------------------------------\n 25 MODFICATIONS \n-------------------------------------\n" + str(set) + "\n\n") +set.push_back(objects[7][8]) +f.write('set.prop(PROP_4): ' + str(set.prop(PROP_4)).replace("', '"," ").replace("['","[ ").replace("']"," ]") + '\n') +set.get_extend_elem_prop_row(1) +set.elem_resize(8,886) +set.add_extend_elem_props(set2) +set.add_elem_prop(ELEM_PROP_4,734) +f.write("\n\n-------------------------------------\n 30 MODFICATIONS \n-------------------------------------\n" + str(set) + "\n\n") +elem_props = set.get_elem_prop_header(); (objects,prop_row_maps,prop_rows) = recreate_elem_prop_objects(elem_props) +f.write('set.num_extend_elem_props(): ' + str(set.num_extend_elem_props()).replace("', '"," ").replace("['","[ ").replace("']"," ]") + '\n') +set.freeze_elem_degree() +elem_props = set.get_elem_prop_header(); (objects,prop_row_maps,prop_rows) = recreate_elem_prop_objects(elem_props) +f.write('set.num_props(): ' + str(set.num_props()).replace("', '"," ").replace("['","[ ").replace("']"," ]") + '\n') +set.insert(objects[8][4],1) +set.remove_elem_prop(ELEM_PROP_3) +elem_props = set.get_elem_prop_header(); (objects,prop_row_maps,prop_rows) = recreate_elem_prop_objects(elem_props) +set.insert(objects[8][5],1) +f.write('set.num_extend_elem_props(): ' + str(set.num_extend_elem_props()).replace("', '"," ").replace("['","[ ").replace("']"," ]") + '\n') +set.set_extend_elem_prop(EXT_ELEM_PROP_3,"733",0) +f.write("\n\n-------------------------------------\n 35 MODFICATIONS \n-------------------------------------\n" + str(set) + "\n\n") +set.erase(2) +set.erase(0) +set.erase(1) +f.write('set.prop(PROP_7): ' + str(set.prop(PROP_7)).replace("', '"," ").replace("['","[ ").replace("']"," ]") + '\n') +set.freeze_elem_degree() +elem_props = set.get_elem_prop_header(); (objects,prop_row_maps,prop_rows) = recreate_elem_prop_objects(elem_props) +set.add_extend_elem_prop(EXT_ELEM_PROP_10,"-99") +f.write("\n\n-------------------------------------\n 40 MODFICATIONS \n-------------------------------------\n" + str(set) + "\n\n") +set.remove_extend_elem_prop(EXT_ELEM_PROP_1) +set.free_elem_degree() +f.write('set.num_props(): ' + str(set.num_props()).replace("', '"," ").replace("['","[ ").replace("']"," ]") + '\n') +f.write('set.get_extend_elem_prop(EXT_ELEM_PROP_9,0): ' + str(set.get_extend_elem_prop(EXT_ELEM_PROP_9,0)).replace("', '"," ").replace("['","[ ").replace("']"," ]") + '\n') +f.write('set.has_elem_prop(ELEM_PROP_9): ' + str(set.has_elem_prop(ELEM_PROP_9)).replace("', '"," ").replace("['","[ ").replace("']"," ]") + '\n') +set.elem_resize(8,975) +set.remove_elem_prop(ELEM_PROP_5) +elem_props = set.get_elem_prop_header(); (objects,prop_row_maps,prop_rows) = recreate_elem_prop_objects(elem_props) +set.remove_extend_elem_prop(EXT_ELEM_PROP_6) +f.write("\n\n-------------------------------------\n 45 MODFICATIONS \n-------------------------------------\n" + str(set) + "\n\n") +f.write('set.vsize(): ' + str(set.vsize()).replace("', '"," ").replace("['","[ ").replace("']"," ]") + '\n') +set.remove_elem_prop(ELEM_PROP_1) +elem_props = set.get_elem_prop_header(); (objects,prop_row_maps,prop_rows) = recreate_elem_prop_objects(elem_props) +f.write('set.elem_prop_index(ELEM_PROP_4): ' + str(set.elem_prop_index(ELEM_PROP_4)).replace("', '"," ").replace("['","[ ").replace("']"," ]") + '\n') +f.write('set.vsize(): ' + str(set.vsize()).replace("', '"," ").replace("['","[ ").replace("']"," ]") + '\n') +set.prop_name(6) +set.push_back(objects[8][7]) +set.remove_extend_elem_prop(EXT_ELEM_PROP_2) +set.remove_extend_elem_prop(EXT_ELEM_PROP_8) +f.write("\n\n-------------------------------------\n 50 MODFICATIONS \n-------------------------------------\n" + str(set) + "\n\n") +set.add_elem_prop(ELEM_PROP_4,776) +elem_props = set.get_elem_prop_header(); (objects,prop_row_maps,prop_rows) = recreate_elem_prop_objects(elem_props) +set.copy_extend_elem_prop_row(set2,1,1) +set.erase(2) +set.push_back(objects[8][8], ext_prop_row_maps[2]) +set.elem_resize(2,480) +f.write("\n\n-------------------------------------\n 55 MODFICATIONS \n-------------------------------------\n" + str(set) + "\n\n") +set.add_extend_elem_prop(EXT_ELEM_PROP_8,"-99") +f.write('set.size(): ' + str(set.size()).replace("', '"," ").replace("['","[ ").replace("']"," ]") + '\n') +f.write('set.num_props(): ' + str(set.num_props()).replace("', '"," ").replace("['","[ ").replace("']"," ]") + '\n') +f.write('set.num_extend_elem_props(): ' + str(set.num_extend_elem_props()).replace("', '"," ").replace("['","[ ").replace("']"," ]") + '\n') +set.insert(objects[2][4],0) +f.write('set.has_elem_prop(ELEM_PROP_7): ' + str(set.has_elem_prop(ELEM_PROP_7)).replace("', '"," ").replace("['","[ ").replace("']"," ]") + '\n') +set.set_extend_elem_prop_row(ext_prop_row_maps[0],0) +set.freeze_elem_degree() +elem_props = set.get_elem_prop_header(); (objects,prop_row_maps,prop_rows) = recreate_elem_prop_objects(elem_props) +set.push_back(objects[2][2]) +f.write("\n\n-------------------------------------\n 60 MODFICATIONS \n-------------------------------------\n" + str(set) + "\n\n") +set.copy_extend_elem_prop_row(set2,0,2) +f.write('set.get_extend_elem_prop(EXT_ELEM_PROP_3,3): ' + str(set.get_extend_elem_prop(EXT_ELEM_PROP_3,3)).replace("', '"," ").replace("['","[ ").replace("']"," ]") + '\n') +f.write('set.num_elem_props(): ' + str(set.num_elem_props()).replace("', '"," ").replace("['","[ ").replace("']"," ]") + '\n') +set.add_extend_elem_prop(EXT_ELEM_PROP_4,"-99") +set.remove_elem_prop(ELEM_PROP_2) +elem_props = set.get_elem_prop_header(); (objects,prop_row_maps,prop_rows) = recreate_elem_prop_objects(elem_props) +f.write('set.vsize(): ' + str(set.vsize()).replace("', '"," ").replace("['","[ ").replace("']"," ]") + '\n') +set.prop_name(2) +set.remove_elem_prop(ELEM_PROP_4) +f.write("\n\n-------------------------------------\n 65 MODFICATIONS \n-------------------------------------\n" + str(set) + "\n\n") +elem_props = set.get_elem_prop_header(); (objects,prop_row_maps,prop_rows) = recreate_elem_prop_objects(elem_props) +f.write('set.get_extend_elem_prop_header(): ' + str(set.get_extend_elem_prop_header()).replace("', '"," ").replace("['","[ ").replace("']"," ]") + '\n') +set.set_extend_elem_prop_row(ext_prop_row_maps[0],1) +set.prop_name(2) +f.write('set.prop_index(PROP_4): ' + str(set.prop_index(PROP_4)).replace("', '"," ").replace("['","[ ").replace("']"," ]") + '\n') +f.write('set.num_elem_props(): ' + str(set.num_elem_props()).replace("', '"," ").replace("['","[ ").replace("']"," ]") + '\n') +f.write('set.bsize(): ' + str(set.bsize()).replace("', '"," ").replace("['","[ ").replace("']"," ]") + '\n') +f.write('set.has_extend_elem_prop(EXT_ELEM_PROP_3): ' + str(set.has_extend_elem_prop(EXT_ELEM_PROP_3)).replace("', '"," ").replace("['","[ ").replace("']"," ]") + '\n') +set.free_elem_degree() +set.remove_extend_elem_prop(EXT_ELEM_PROP_7) +f.write('set.num_extend_elem_props(): ' + str(set.num_extend_elem_props()).replace("', '"," ").replace("['","[ ").replace("']"," ]") + '\n') +f.write('set.num_props(): ' + str(set.num_props()).replace("', '"," ").replace("['","[ ").replace("']"," ]") + '\n') +set.free_elem_degree() +f.write("\n\n-------------------------------------\n 70 MODFICATIONS \n-------------------------------------\n" + str(set) + "\n\n") +f.write('set.has_extend_elem_prop(EXT_ELEM_PROP_8): ' + str(set.has_extend_elem_prop(EXT_ELEM_PROP_8)).replace("', '"," ").replace("['","[ ").replace("']"," ]") + '\n') +set.add_extend_elem_props(set2) +set.insert(objects[6][7],2) +f.write('set.vsize(): ' + str(set.vsize()).replace("', '"," ").replace("['","[ ").replace("']"," ]") + '\n') +set.copy_extend_elem_prop_row(set2,3,5) +set.copy_extend_elem_prop_row(set2,4,2) +set.get_extend_elem_prop_row(4) +f.write("\n\n-------------------------------------\n 75 MODFICATIONS \n-------------------------------------\n" + str(set) + "\n\n") +f.write('set.num_props(): ' + str(set.num_props()).replace("', '"," ").replace("['","[ ").replace("']"," ]") + '\n') +set.add_prop(PROP_8,140) +set.set_extend_elem_prop(EXT_ELEM_PROP_4,"138",2) +set.get_extend_elem_prop_row(3) +set.get_extend_elem_prop_row(2) +set.set_extend_elem_prop_row(ext_prop_row_maps[5],5) +f.write("\n\n-------------------------------------\n 80 MODFICATIONS \n-------------------------------------\n" + str(set) + "\n\n") +f.write('set.get_extend_elem_prop_header(): ' + str(set.get_extend_elem_prop_header()).replace("', '"," ").replace("['","[ ").replace("']"," ]") + '\n') +set.set_extend_elem_prop(EXT_ELEM_PROP_5,"667",2) +set.add_extend_elem_prop(EXT_ELEM_PROP_2,"-99") +set.insert(objects[1][2],2) +set.add_extend_elem_prop(EXT_ELEM_PROP_8,"-99") +set.remove_prop(PROP_5) +f.write("\n\n-------------------------------------\n 85 MODFICATIONS \n-------------------------------------\n" + str(set) + "\n\n") +set.remove_extend_elem_prop(EXT_ELEM_PROP_6) +set.insert(objects[8][9],3) +set.resize(1,277,5) +f.write('set.num_extend_elem_props(): ' + str(set.num_extend_elem_props()).replace("', '"," ").replace("['","[ ").replace("']"," ]") + '\n') +set.add_extend_elem_prop(EXT_ELEM_PROP_6,"-99") +set.prop_name(0) +f.write("\n\n-------------------------------------\n 90 MODFICATIONS \n-------------------------------------\n" + str(set) + "\n\n") +set.erase(0) +set.prop_name(3) +f.write('set.elem_prop_keys(): ' + str(set.elem_prop_keys()).replace("', '"," ").replace("['","[ ").replace("']"," ]") + '\n') +set.elem_resize(8,926) +f.write('set.get_extend_elem_prop_header(): ' + str(set.get_extend_elem_prop_header()).replace("', '"," ").replace("['","[ ").replace("']"," ]") + '\n') +set.remove_extend_elem_prop(EXT_ELEM_PROP_9) +set.remove_prop(PROP_4) +f.write("\n\n-------------------------------------\n 95 MODFICATIONS \n-------------------------------------\n" + str(set) + "\n\n") +set.remove_extend_elem_prop(EXT_ELEM_PROP_5) +set.add_prop(PROP_5,902) +f.write('set.num_extend_elem_props(): ' + str(set.num_extend_elem_props()).replace("', '"," ").replace("['","[ ").replace("']"," ]") + '\n') +set.add_prop(PROP_10,182) +set.push_back(objects[8][0], ext_prop_row_maps[2]) +f.write('set.vsize(): ' + str(set.vsize()).replace("', '"," ").replace("['","[ ").replace("']"," ]") + '\n') +f.write('set.prop_index(PROP_9): ' + str(set.prop_index(PROP_9)).replace("', '"," ").replace("['","[ ").replace("']"," ]") + '\n') +f.write('set.num_extend_elem_props(): ' + str(set.num_extend_elem_props()).replace("', '"," ").replace("['","[ ").replace("']"," ]") + '\n') +set.add_prop(PROP_4,779) +f.write("\n\n-------------------------------------\n 100 MODFICATIONS \n-------------------------------------\n" + str(set) + "\n\n") +f.write('set.prop_keys(): ' + str(set.prop_keys()).replace("', '"," ").replace("['","[ ").replace("']"," ]") + '\n') +f.write('set.has_extend_elem_prop(EXT_ELEM_PROP_2): ' + str(set.has_extend_elem_prop(EXT_ELEM_PROP_2)).replace("', '"," ").replace("['","[ ").replace("']"," ]") + '\n') +set.add_prop(PROP_3,22) +set.resize(3,137,0) +f.write('set.num_elem_props(): ' + str(set.num_elem_props()).replace("', '"," ").replace("['","[ ").replace("']"," ]") + '\n') +f.write('set.has_extend_elem_prop(EXT_ELEM_PROP_10): ' + str(set.has_extend_elem_prop(EXT_ELEM_PROP_10)).replace("', '"," ").replace("['","[ ").replace("']"," ]") + '\n') +set.set_extend_elem_prop(EXT_ELEM_PROP_8,"308",0) +f.write('set.num_props(): ' + str(set.num_props()).replace("', '"," ").replace("['","[ ").replace("']"," ]") + '\n') +f.write('set.get_extend_elem_prop(EXT_ELEM_PROP_10,2): ' + str(set.get_extend_elem_prop(EXT_ELEM_PROP_10,2)).replace("', '"," ").replace("['","[ ").replace("']"," ]") + '\n') +set.erase(1) +set.erase(1) +f.write("\n\n-------------------------------------\n 105 MODFICATIONS \n-------------------------------------\n" + str(set) + "\n\n") +f.write('set.get_extend_elem_prop(EXT_ELEM_PROP_3,0): ' + str(set.get_extend_elem_prop(EXT_ELEM_PROP_3,0)).replace("', '"," ").replace("['","[ ").replace("']"," ]") + '\n') +set.push_back(objects[8][5], ext_prop_row_maps[4]) +set.freeze_elem_degree() +elem_props = set.get_elem_prop_header(); (objects,prop_row_maps,prop_rows) = recreate_elem_prop_objects(elem_props) +f.write('set.prop_keys(): ' + str(set.prop_keys()).replace("', '"," ").replace("['","[ ").replace("']"," ]") + '\n') +f.write('set.size(): ' + str(set.size()).replace("', '"," ").replace("['","[ ").replace("']"," ]") + '\n') +f.write('set.num_extend_elem_props(): ' + str(set.num_extend_elem_props()).replace("', '"," ").replace("['","[ ").replace("']"," ]") + '\n') +f.write('set.prop(PROP_1): ' + str(set.prop(PROP_1)).replace("', '"," ").replace("['","[ ").replace("']"," ]") + '\n') +f.write('set.size(): ' + str(set.size()).replace("', '"," ").replace("['","[ ").replace("']"," ]") + '\n') +set.freeze_elem_degree() +elem_props = set.get_elem_prop_header(); (objects,prop_row_maps,prop_rows) = recreate_elem_prop_objects(elem_props) +set.get_extend_elem_prop_row(0) +f.write('set.bsize(): ' + str(set.bsize()).replace("', '"," ").replace("['","[ ").replace("']"," ]") + '\n') +f.write('set.elem_prop_keys(): ' + str(set.elem_prop_keys()).replace("', '"," ").replace("['","[ ").replace("']"," ]") + '\n') +set.elem_resize(9,179) +f.write("\n\n-------------------------------------\n 110 MODFICATIONS \n-------------------------------------\n" + str(set) + "\n\n") +f.write('set.get_extend_elem_prop(EXT_ELEM_PROP_10,1): ' + str(set.get_extend_elem_prop(EXT_ELEM_PROP_10,1)).replace("', '"," ").replace("['","[ ").replace("']"," ]") + '\n') +set.push_back(objects[9][1], ext_prop_row_maps[3]) +set.erase(0) +f.write('set.bsize(): ' + str(set.bsize()).replace("', '"," ").replace("['","[ ").replace("']"," ]") + '\n') +f.write('set.prop(PROP_3): ' + str(set.prop(PROP_3)).replace("', '"," ").replace("['","[ ").replace("']"," ]") + '\n') +f.write('set.num_extend_elem_props(): ' + str(set.num_extend_elem_props()).replace("', '"," ").replace("['","[ ").replace("']"," ]") + '\n') +set.push_back(objects[9][8]) +f.write('set.num_extend_elem_props(): ' + str(set.num_extend_elem_props()).replace("', '"," ").replace("['","[ ").replace("']"," ]") + '\n') +f.write('set.num_props(): ' + str(set.num_props()).replace("', '"," ").replace("['","[ ").replace("']"," ]") + '\n') +set.remove_prop(PROP_2) +set.get_extend_elem_prop_row(0) +f.write("\n\n-------------------------------------\n 115 MODFICATIONS \n-------------------------------------\n" + str(set) + "\n\n") +set.add_extend_elem_prop(EXT_ELEM_PROP_5,"-99") +f.write('set.elem_prop_keys(): ' + str(set.elem_prop_keys()).replace("', '"," ").replace("['","[ ").replace("']"," ]") + '\n') +set.prop_name(2) +set.prop_name(0) +set.erase(0) +set.copy_extend_elem_prop_row(set2,4,1) +f.write("\n\n-------------------------------------\n 120 MODFICATIONS \n-------------------------------------\n" + str(set) + "\n\n") +set.free_elem_degree() +f.write('set.num_elem_props(): ' + str(set.num_elem_props()).replace("', '"," ").replace("['","[ ").replace("']"," ]") + '\n') +set.remove_prop(PROP_8) +f.write('set.prop_index(PROP_10): ' + str(set.prop_index(PROP_10)).replace("', '"," ").replace("['","[ ").replace("']"," ]") + '\n') +set.free_elem_degree() +f.write('set.size(): ' + str(set.size()).replace("', '"," ").replace("['","[ ").replace("']"," ]") + '\n') +set.remove_extend_elem_prop(EXT_ELEM_PROP_7) +set.add_extend_elem_prop(EXT_ELEM_PROP_1,"-99") +f.write("\n\n-------------------------------------\n 125 MODFICATIONS \n-------------------------------------\n" + str(set) + "\n\n") +set.elem_resize(4,873) +set.remove_extend_elem_prop(EXT_ELEM_PROP_3) +f.write('set.size(): ' + str(set.size()).replace("', '"," ").replace("['","[ ").replace("']"," ]") + '\n') +set.add_extend_elem_props(set2) +set.free_elem_degree() +f.write('set.get_extend_elem_prop(EXT_ELEM_PROP_2,0): ' + str(set.get_extend_elem_prop(EXT_ELEM_PROP_2,0)).replace("', '"," ").replace("['","[ ").replace("']"," ]") + '\n') +set.insert(objects[5][3],1) +f.write("\n\n-------------------------------------\n 130 MODFICATIONS \n-------------------------------------\n" + str(set) + "\n\n") +f.write('set.num_elem_props(): ' + str(set.num_elem_props()).replace("', '"," ").replace("['","[ ").replace("']"," ]") + '\n') +f.write('set.size(): ' + str(set.size()).replace("', '"," ").replace("['","[ ").replace("']"," ]") + '\n') +f.write('set.num_elem_props(): ' + str(set.num_elem_props()).replace("', '"," ").replace("['","[ ").replace("']"," ]") + '\n') +set.push_back(objects[4][7], ext_prop_row_maps[3]) +f.write('set.elem_prop_keys(): ' + str(set.elem_prop_keys()).replace("', '"," ").replace("['","[ ").replace("']"," ]") + '\n') +set.push_back(objects[4][0], ext_prop_row_maps[7]) +set.push_back(objects[6][6], ext_prop_row_maps[2]) +set.elem_resize(7,192) +set.insert(objects[7][9],1) +f.write("\n\n-------------------------------------\n 135 MODFICATIONS \n-------------------------------------\n" + str(set) + "\n\n") +f.write('set.prop(PROP_3): ' + str(set.prop(PROP_3)).replace("', '"," ").replace("['","[ ").replace("']"," ]") + '\n') +f.write('set.get_extend_elem_prop_header(): ' + str(set.get_extend_elem_prop_header()).replace("', '"," ").replace("['","[ ").replace("']"," ]") + '\n') +f.write('set.size(): ' + str(set.size()).replace("', '"," ").replace("['","[ ").replace("']"," ]") + '\n') +set.insert(objects[7][1],0) +set.add_extend_elem_prop(EXT_ELEM_PROP_6,"-99") +f.write('set.has_elem_prop(ELEM_PROP_3): ' + str(set.has_elem_prop(ELEM_PROP_3)).replace("', '"," ").replace("['","[ ").replace("']"," ]") + '\n') +f.write('set.vsize(): ' + str(set.vsize()).replace("', '"," ").replace("['","[ ").replace("']"," ]") + '\n') +f.write('set.bsize(): ' + str(set.bsize()).replace("', '"," ").replace("['","[ ").replace("']"," ]") + '\n') +set.free_elem_degree() +set.freeze_elem_degree() +elem_props = set.get_elem_prop_header(); (objects,prop_row_maps,prop_rows) = recreate_elem_prop_objects(elem_props) +f.write('set.prop(PROP_5): ' + str(set.prop(PROP_5)).replace("', '"," ").replace("['","[ ").replace("']"," ]") + '\n') +f.write('set.has_extend_elem_prop(EXT_ELEM_PROP_4): ' + str(set.has_extend_elem_prop(EXT_ELEM_PROP_4)).replace("', '"," ").replace("['","[ ").replace("']"," ]") + '\n') +f.write('set.bsize(): ' + str(set.bsize()).replace("', '"," ").replace("['","[ ").replace("']"," ]") + '\n') +set.elem_resize(6,44) +f.write("\n\n-------------------------------------\n 140 MODFICATIONS \n-------------------------------------\n" + str(set) + "\n\n") +f.write('set.get_extend_elem_prop_header(): ' + str(set.get_extend_elem_prop_header()).replace("', '"," ").replace("['","[ ").replace("']"," ]") + '\n') +f.write('set.num_extend_elem_props(): ' + str(set.num_extend_elem_props()).replace("', '"," ").replace("['","[ ").replace("']"," ]") + '\n') +set.get_extend_elem_prop_row(2) +f.write('set.elem_prop_keys(): ' + str(set.elem_prop_keys()).replace("', '"," ").replace("['","[ ").replace("']"," ]") + '\n') +set.set_extend_elem_prop_row(ext_prop_row_maps[0],6) +set.add_extend_elem_props(set2) +set.resize(9,561,0) +f.write('set.prop_index(PROP_3): ' + str(set.prop_index(PROP_3)).replace("', '"," ").replace("['","[ ").replace("']"," ]") + '\n') +set.push_back(objects[6][8]) +f.write("\n\n-------------------------------------\n 145 MODFICATIONS \n-------------------------------------\n" + str(set) + "\n\n") +set.insert(objects[6][0],5) +set.add_extend_elem_props(set2) +set.push_back(objects[6][7]) +f.write('set.num_props(): ' + str(set.num_props()).replace("', '"," ").replace("['","[ ").replace("']"," ]") + '\n') +set.prop_name(7) +set.push_back(objects[6][1], ext_prop_row_maps[4]) +f.write("\n\n-------------------------------------\n 150 MODFICATIONS \n-------------------------------------\n" + str(set) + "\n\n") +f.write('set.elem_prop_keys(): ' + str(set.elem_prop_keys()).replace("', '"," ").replace("['","[ ").replace("']"," ]") + '\n') +f.write('set.has_elem_prop(ELEM_PROP_10): ' + str(set.has_elem_prop(ELEM_PROP_10)).replace("', '"," ").replace("['","[ ").replace("']"," ]") + '\n') +f.write('set.vsize(): ' + str(set.vsize()).replace("', '"," ").replace("['","[ ").replace("']"," ]") + '\n') +set.resize(5,969,0) +f.write('set.has_prop(PROP_8): ' + str(set.has_prop(PROP_8)).replace("', '"," ").replace("['","[ ").replace("']"," ]") + '\n') +set.elem_resize(2,367) +set.add_prop(PROP_2,692) +set.add_prop(PROP_8,147) +set.resize(8,245,0) +f.write("\n\n-------------------------------------\n 155 MODFICATIONS \n-------------------------------------\n" + str(set) + "\n\n") +f.write('set.get_extend_elem_prop(EXT_ELEM_PROP_5,3): ' + str(set.get_extend_elem_prop(EXT_ELEM_PROP_5,3)).replace("', '"," ").replace("['","[ ").replace("']"," ]") + '\n') +set.prop_name(6) +set.remove_extend_elem_prop(EXT_ELEM_PROP_8) +set.add_extend_elem_props(set2) +set.get_extend_elem_prop_row(5) +set.set_extend_elem_prop(EXT_ELEM_PROP_2,"640",0) +f.write("\n\n-------------------------------------\n 160 MODFICATIONS \n-------------------------------------\n" + str(set) + "\n\n") +f.write('set.num_props(): ' + str(set.num_props()).replace("', '"," ").replace("['","[ ").replace("']"," ]") + '\n') +set.free_elem_degree() +set.get_extend_elem_prop_row(0) +f.write('set.has_extend_elem_prop(EXT_ELEM_PROP_9): ' + str(set.has_extend_elem_prop(EXT_ELEM_PROP_9)).replace("', '"," ").replace("['","[ ").replace("']"," ]") + '\n') +f.write('set.elem_prop_keys(): ' + str(set.elem_prop_keys()).replace("', '"," ").replace("['","[ ").replace("']"," ]") + '\n') +f.write('set.prop_keys(): ' + str(set.prop_keys()).replace("', '"," ").replace("['","[ ").replace("']"," ]") + '\n') +set.remove_extend_elem_prop(EXT_ELEM_PROP_2) +f.write('set.prop(PROP_9): ' + str(set.prop(PROP_9)).replace("', '"," ").replace("['","[ ").replace("']"," ]") + '\n') +f.write('set.size(): ' + str(set.size()).replace("', '"," ").replace("['","[ ").replace("']"," ]") + '\n') +set.free_elem_degree() +set.freeze_elem_degree() +f.write("\n\n-------------------------------------\n 165 MODFICATIONS \n-------------------------------------\n" + str(set) + "\n\n") +elem_props = set.get_elem_prop_header(); (objects,prop_row_maps,prop_rows) = recreate_elem_prop_objects(elem_props) +set.freeze_elem_degree() +elem_props = set.get_elem_prop_header(); (objects,prop_row_maps,prop_rows) = recreate_elem_prop_objects(elem_props) +set.remove_extend_elem_prop(EXT_ELEM_PROP_6) +set.remove_prop(PROP_9) +set.push_back(objects[2][6]) +set.remove_prop(PROP_8) +f.write("\n\n-------------------------------------\n 170 MODFICATIONS \n-------------------------------------\n" + str(set) + "\n\n") +set.resize(1,823,0) +f.write('set.num_props(): ' + str(set.num_props()).replace("', '"," ").replace("['","[ ").replace("']"," ]") + '\n') +set.elem_resize(1,218) +set.prop_name(4) +f.write('set.size(): ' + str(set.size()).replace("', '"," ").replace("['","[ ").replace("']"," ]") + '\n') +set.copy_extend_elem_prop_row(set2,4,0) +f.write('set.prop_index(PROP_3): ' + str(set.prop_index(PROP_3)).replace("', '"," ").replace("['","[ ").replace("']"," ]") + '\n') +f.write('set.get_extend_elem_prop_header(): ' + str(set.get_extend_elem_prop_header()).replace("', '"," ").replace("['","[ ").replace("']"," ]") + '\n') +set.erase(0) +f.write("\n\n-------------------------------------\n 175 MODFICATIONS \n-------------------------------------\n" + str(set) + "\n\n") +set.remove_extend_elem_prop(EXT_ELEM_PROP_7) +f.write('set.num_extend_elem_props(): ' + str(set.num_extend_elem_props()).replace("', '"," ").replace("['","[ ").replace("']"," ]") + '\n') +set.elem_resize(2,672) +set.prop_name(0) +set.prop_name(2) +set.elem_resize(4,946) +f.write("\n\n-------------------------------------\n 180 MODFICATIONS \n-------------------------------------\n" + str(set) + "\n\n") +f.write('set.bsize(): ' + str(set.bsize()).replace("', '"," ").replace("['","[ ").replace("']"," ]") + '\n') +set.prop_name(7) +f.write('set.elem_prop_keys(): ' + str(set.elem_prop_keys()).replace("', '"," ").replace("['","[ ").replace("']"," ]") + '\n') +f.write('set.bsize(): ' + str(set.bsize()).replace("', '"," ").replace("['","[ ").replace("']"," ]") + '\n') +set.remove_extend_elem_prop(EXT_ELEM_PROP_4) +f.write('set.size(): ' + str(set.size()).replace("', '"," ").replace("['","[ ").replace("']"," ]") + '\n') +f.write('set.prop_keys(): ' + str(set.prop_keys()).replace("', '"," ").replace("['","[ ").replace("']"," ]") + '\n') +f.write('set.elem_prop_keys(): ' + str(set.elem_prop_keys()).replace("', '"," ").replace("['","[ ").replace("']"," ]") + '\n') +set.add_prop(PROP_8,859) +set.add_prop(PROP_9,835) +f.write('set.prop_keys(): ' + str(set.prop_keys()).replace("', '"," ").replace("['","[ ").replace("']"," ]") + '\n') +set.add_extend_elem_prop(EXT_ELEM_PROP_10,"-99") +f.write("\n\n-------------------------------------\n 185 MODFICATIONS \n-------------------------------------\n" + str(set) + "\n\n") +f.write('set.has_prop(PROP_9): ' + str(set.has_prop(PROP_9)).replace("', '"," ").replace("['","[ ").replace("']"," ]") + '\n') +f.write('set.get_extend_elem_prop_header(): ' + str(set.get_extend_elem_prop_header()).replace("', '"," ").replace("['","[ ").replace("']"," ]") + '\n') +f.write('set.has_prop(PROP_2): ' + str(set.has_prop(PROP_2)).replace("', '"," ").replace("['","[ ").replace("']"," ]") + '\n') +f.write('set.has_extend_elem_prop(EXT_ELEM_PROP_8): ' + str(set.has_extend_elem_prop(EXT_ELEM_PROP_8)).replace("', '"," ").replace("['","[ ").replace("']"," ]") + '\n') +f.write('set.has_extend_elem_prop(EXT_ELEM_PROP_3): ' + str(set.has_extend_elem_prop(EXT_ELEM_PROP_3)).replace("', '"," ").replace("['","[ ").replace("']"," ]") + '\n') +f.write('set.num_extend_elem_props(): ' + str(set.num_extend_elem_props()).replace("', '"," ").replace("['","[ ").replace("']"," ]") + '\n') +f.write('set.bsize(): ' + str(set.bsize()).replace("', '"," ").replace("['","[ ").replace("']"," ]") + '\n') +set.freeze_elem_degree() +elem_props = set.get_elem_prop_header(); (objects,prop_row_maps,prop_rows) = recreate_elem_prop_objects(elem_props) +set.resize(9,576,0) +set.insert(objects[4][4],1) +set.add_extend_elem_prop(EXT_ELEM_PROP_7,"-99") +f.write('set.get_extend_elem_prop(EXT_ELEM_PROP_9,6): ' + str(set.get_extend_elem_prop(EXT_ELEM_PROP_9,6)).replace("', '"," ").replace("['","[ ").replace("']"," ]") + '\n') +set.set_extend_elem_prop_row(ext_prop_row_maps[6],8) +f.write("\n\n-------------------------------------\n 190 MODFICATIONS \n-------------------------------------\n" + str(set) + "\n\n") +set.remove_prop(PROP_6) +set.set_extend_elem_prop(EXT_ELEM_PROP_7,"493",2) +set.elem_resize(9,337) +set.add_prop(PROP_6,153) +f.write('set.bsize(): ' + str(set.bsize()).replace("', '"," ").replace("['","[ ").replace("']"," ]") + '\n') +f.write('set.prop_keys(): ' + str(set.prop_keys()).replace("', '"," ").replace("['","[ ").replace("']"," ]") + '\n') +set.free_elem_degree() +f.write("\n\n-------------------------------------\n 195 MODFICATIONS \n-------------------------------------\n" + str(set) + "\n\n") +f.write('set.num_extend_elem_props(): ' + str(set.num_extend_elem_props()).replace("', '"," ").replace("['","[ ").replace("']"," ]") + '\n') +f.write('set.prop_index(PROP_3): ' + str(set.prop_index(PROP_3)).replace("', '"," ").replace("['","[ ").replace("']"," ]") + '\n') +set.add_extend_elem_props(set2) +set.erase(4) +set.add_extend_elem_prop(EXT_ELEM_PROP_1,"-99") +f.write('set.get_extend_elem_prop(EXT_ELEM_PROP_5,4): ' + str(set.get_extend_elem_prop(EXT_ELEM_PROP_5,4)).replace("', '"," ").replace("['","[ ").replace("']"," ]") + '\n') +f.write('set.prop_index(PROP_10): ' + str(set.prop_index(PROP_10)).replace("', '"," ").replace("['","[ ").replace("']"," ]") + '\n') +set.erase(8) +set.set_extend_elem_prop_row(ext_prop_row_maps[0],2) +f.write("\n\n-------------------------------------\n 200 MODFICATIONS \n-------------------------------------\n" + str(set) + "\n\n") +f.write('set.num_props(): ' + str(set.num_props()).replace("', '"," ").replace("['","[ ").replace("']"," ]") + '\n') +f.write('set.size(): ' + str(set.size()).replace("', '"," ").replace("['","[ ").replace("']"," ]") + '\n') +f.write('set.has_extend_elem_prop(EXT_ELEM_PROP_2): ' + str(set.has_extend_elem_prop(EXT_ELEM_PROP_2)).replace("', '"," ").replace("['","[ ").replace("']"," ]") + '\n') +f.write('set.has_extend_elem_prop(EXT_ELEM_PROP_1): ' + str(set.has_extend_elem_prop(EXT_ELEM_PROP_1)).replace("', '"," ").replace("['","[ ").replace("']"," ]") + '\n') +f.write('set.get_extend_elem_prop(EXT_ELEM_PROP_9,3): ' + str(set.get_extend_elem_prop(EXT_ELEM_PROP_9,3)).replace("', '"," ").replace("['","[ ").replace("']"," ]") + '\n') +set.freeze_elem_degree() +elem_props = set.get_elem_prop_header(); (objects,prop_row_maps,prop_rows) = recreate_elem_prop_objects(elem_props) +f.write('set.get_extend_elem_prop_header(): ' + str(set.get_extend_elem_prop_header()).replace("', '"," ").replace("['","[ ").replace("']"," ]") + '\n') +set.freeze_elem_degree() +elem_props = set.get_elem_prop_header(); (objects,prop_row_maps,prop_rows) = recreate_elem_prop_objects(elem_props) +f.write('set.has_prop(PROP_2): ' + str(set.has_prop(PROP_2)).replace("', '"," ").replace("['","[ ").replace("']"," ]") + '\n') +f.write('set.num_elem_props(): ' + str(set.num_elem_props()).replace("', '"," ").replace("['","[ ").replace("']"," ]") + '\n') +f.write('set.has_prop(PROP_1): ' + str(set.has_prop(PROP_1)).replace("', '"," ").replace("['","[ ").replace("']"," ]") + '\n') +set.copy_extend_elem_prop_row(set2,0,1) +f.write('set.num_extend_elem_props(): ' + str(set.num_extend_elem_props()).replace("', '"," ").replace("['","[ ").replace("']"," ]") + '\n') +f.write('set.get_extend_elem_prop_header(): ' + str(set.get_extend_elem_prop_header()).replace("', '"," ").replace("['","[ ").replace("']"," ]") + '\n') +set.get_extend_elem_prop_row(6) +f.write('set.num_props(): ' + str(set.num_props()).replace("', '"," ").replace("['","[ ").replace("']"," ]") + '\n') +f.write('set.elem_prop_keys(): ' + str(set.elem_prop_keys()).replace("', '"," ").replace("['","[ ").replace("']"," ]") + '\n') +f.write('set.num_elem_props(): ' + str(set.num_elem_props()).replace("', '"," ").replace("['","[ ").replace("']"," ]") + '\n') +set.add_extend_elem_props(set2) +f.write("\n\n-------------------------------------\n 205 MODFICATIONS \n-------------------------------------\n" + str(set) + "\n\n") +set.elem_resize(2,89) +set.push_back(objects[2][6], ext_prop_row_maps[3]) +set.elem_resize(5,359) +set.free_elem_degree() +f.write('set.num_elem_props(): ' + str(set.num_elem_props()).replace("', '"," ").replace("['","[ ").replace("']"," ]") + '\n') +set.remove_extend_elem_prop(EXT_ELEM_PROP_10) +f.write("\n\n-------------------------------------\n 210 MODFICATIONS \n-------------------------------------\n" + str(set) + "\n\n") +f.write('set.bsize(): ' + str(set.bsize()).replace("', '"," ").replace("['","[ ").replace("']"," ]") + '\n') +f.write('set.vsize(): ' + str(set.vsize()).replace("', '"," ").replace("['","[ ").replace("']"," ]") + '\n') +f.write('set.has_extend_elem_prop(EXT_ELEM_PROP_1): ' + str(set.has_extend_elem_prop(EXT_ELEM_PROP_1)).replace("', '"," ").replace("['","[ ").replace("']"," ]") + '\n') +f.write('set.num_extend_elem_props(): ' + str(set.num_extend_elem_props()).replace("', '"," ").replace("['","[ ").replace("']"," ]") + '\n') +f.write('set.prop_index(PROP_7): ' + str(set.prop_index(PROP_7)).replace("', '"," ").replace("['","[ ").replace("']"," ]") + '\n') +f.write('set.num_extend_elem_props(): ' + str(set.num_extend_elem_props()).replace("', '"," ").replace("['","[ ").replace("']"," ]") + '\n') +set.insert(objects[6][7],5) +f.write('set.num_elem_props(): ' + str(set.num_elem_props()).replace("', '"," ").replace("['","[ ").replace("']"," ]") + '\n') +set.set_extend_elem_prop_row(ext_prop_row_maps[3],0) +set.add_extend_elem_prop(EXT_ELEM_PROP_6,"-99") +set.remove_prop(PROP_4) +f.write('set.num_extend_elem_props(): ' + str(set.num_extend_elem_props()).replace("', '"," ").replace("['","[ ").replace("']"," ]") + '\n') +set.add_extend_elem_props(set2) +f.write("\n\n-------------------------------------\n 215 MODFICATIONS \n-------------------------------------\n" + str(set) + "\n\n") +f.write('set.num_elem_props(): ' + str(set.num_elem_props()).replace("', '"," ").replace("['","[ ").replace("']"," ]") + '\n') +set.add_extend_elem_prop(EXT_ELEM_PROP_5,"-99") +set.remove_prop(PROP_7) +set.add_extend_elem_props(set2) +set.elem_resize(5,955) +set.resize(4,369,0) +f.write("\n\n-------------------------------------\n 220 MODFICATIONS \n-------------------------------------\n" + str(set) + "\n\n") +set.add_prop(PROP_4,364) +set.freeze_elem_degree() +elem_props = set.get_elem_prop_header(); (objects,prop_row_maps,prop_rows) = recreate_elem_prop_objects(elem_props) +set.add_prop(PROP_7,495) +set.free_elem_degree() +f.write('set.size(): ' + str(set.size()).replace("', '"," ").replace("['","[ ").replace("']"," ]") + '\n') +set.push_back(objects[6][6]) +f.write("\n\n-------------------------------------\n 225 MODFICATIONS \n-------------------------------------\n" + str(set) + "\n\n") +f.write('set.size(): ' + str(set.size()).replace("', '"," ").replace("['","[ ").replace("']"," ]") + '\n') +set.free_elem_degree() +f.write('set.vsize(): ' + str(set.vsize()).replace("', '"," ").replace("['","[ ").replace("']"," ]") + '\n') +f.write('set.get_extend_elem_prop(EXT_ELEM_PROP_5,3): ' + str(set.get_extend_elem_prop(EXT_ELEM_PROP_5,3)).replace("', '"," ").replace("['","[ ").replace("']"," ]") + '\n') +set.append_extend_elem_props(set2) +f.write('set.prop_keys(): ' + str(set.prop_keys()).replace("', '"," ").replace("['","[ ").replace("']"," ]") + '\n') +set.push_back(objects[0][4]) +set.add_extend_elem_props(set2) +f.write('set.bsize(): ' + str(set.bsize()).replace("', '"," ").replace("['","[ ").replace("']"," ]") + '\n') +f.write('set.get_extend_elem_prop_header(): ' + str(set.get_extend_elem_prop_header()).replace("', '"," ").replace("['","[ ").replace("']"," ]") + '\n') +f.write('set.prop(PROP_10): ' + str(set.prop(PROP_10)).replace("', '"," ").replace("['","[ ").replace("']"," ]") + '\n') +set.copy_extend_elem_prop_row(set2,3,4) +f.write("\n\n-------------------------------------\n 230 MODFICATIONS \n-------------------------------------\n" + str(set) + "\n\n") +set.get_extend_elem_prop_row(1) +f.write('set.prop_index(PROP_10): ' + str(set.prop_index(PROP_10)).replace("', '"," ").replace("['","[ ").replace("']"," ]") + '\n') +f.write('set.has_elem_prop(ELEM_PROP_8): ' + str(set.has_elem_prop(ELEM_PROP_8)).replace("', '"," ").replace("['","[ ").replace("']"," ]") + '\n') +set.set_extend_elem_prop(EXT_ELEM_PROP_10,"898",1) +f.write('set.bsize(): ' + str(set.bsize()).replace("', '"," ").replace("['","[ ").replace("']"," ]") + '\n') +f.write('set.bsize(): ' + str(set.bsize()).replace("', '"," ").replace("['","[ ").replace("']"," ]") + '\n') +set.get_extend_elem_prop_row(1) + + +#===================================================================================================================== +# Generated functions end here +#===================================================================================================================== + +f.write('\n\n-------------------------------------\n FINAL PRINT \n-------------------------------------\n') + +f.write(str(set)) + +print 'Ran python test successfully!' + +f.write('\n') + +f.close() diff --git a/python/scan.py b/python/scan.py new file mode 100644 index 0000000..b49699e --- /dev/null +++ b/python/scan.py @@ -0,0 +1,284 @@ +#!/usr/bin/env python + +import sys +import subprocess +import os.path +import getopt +import threading +import shutil + +global lock, cmds, stop + +lock = threading.Lock() +cmds = [] +stop = False + +def usage(): + print 'scan.py:\n arguments: samples_location, [other_options, echo_options, origin, axes, output]' + +def buildScanCmds(samples, other_options='', echo_options='', origin='', axes='', output_dir='', verbose=False, svd=0): + """Batch scans in multiple dimensions""" + + samples_ext = samples.split('.')[-1] + + if samples_ext == 'sst': + + state_ext = 'str' + + elif samples_ext == 'tst': + + state_ext = 'tct' + + else: + + raise Exception("Unrecognised samples extension '%s'" % samples_ext) + + + path = samples.split('/') + + if path.count('mcmc'): + + ind = path.index('mcmc') + + sub_path = '/'.join(path[ind+2:]) + sub_path = '.'.join(sub_path.split('.')[0:-1]) + + else: + sub_path = raw_input("Sub-path name: ") + + + + if not output_dir: + output_dir = '/home/tclose/Data/Tractography/analysis/scan/%s' % sub_path + + + + + if svd: + + #Round the value of svd up to the nearest multiple of 2. + if svd % 2: + svd += 1 + + axes = '/home/tclose/Data/Tractography/analysis/svd/%s' % sub_path + + if os.path.isdir(axes): + try: + subprocess.call('svn delete --force %s' % axes) + except OSError: + shutil.rmtree(axes) + + os.makedirs(axes) + + svd_file = axes + '.' + samples_ext + + svd_cmd = '/home/tclose/Code/Tractography/bin/svd_fibres %s %s -max %d' % (samples, svd_file, svd) + + if verbose: + print 'SVD Command: ' + print '\n\n%s\n' % svd_cmd + + subprocess.call(svd_cmd, shell=True) + + comp_i = 0 + + for dir_i in range(0,svd,2): + + subdir = 'principle-comp_%d-%d' % (dir_i, dir_i+1) + + os.mkdir(os.path.join(axes,subdir)) + + + for comp_i in range(0,svd): + + #Round the value of svd down to the nearest multiple of 2. + if comp_i % 2: + dir_i = comp_i - 1 + else: + dir_i = comp_i + + subdir = 'principle-comp_%d-%d' % (dir_i, dir_i+1) + + select_cmd = '/home/tclose/Code/Tractography/bin/select_fibres %s %s/%s/%d.%s -inc %d' % (svd_file, axes, subdir, comp_i, state_ext, comp_i) + + if verbose: + print 'Select Command: ' + print '\n\n%s\n' % select_cmd + + subprocess.call(select_cmd, shell=True) + + + os.remove(svd_file) + try: + os.remove(svd_file + 'x') + os.remove(svd_file + 'xx') + except OSError: + None + + elif not axes: + + if state_ext == 'str': + + axes = '/home/tclose/Data/Tractography/analysis/scan/templates/strand/no_intens' + + elif state_ext == 'tct': + + axes = '/home/tclose/Data/Tractography/analysis/scan/templates/tract/no_intens' + + else: + + raise Exception("Unrecognised state extension '%s'" % state_ext) + + + # If directory exists, clean all files within it first. + if os.path.isdir(output_dir): + try: + subprocess.call('svn delete --force %s' % output_dir) + except OSError: + shutil.rmtree(output_dir) + + os.makedirs(output_dir) + + axes_subdir = os.listdir(axes) + + if '.svn' in axes_subdir: + axes_subdir.remove('.svn') + + global cmds + + cmds = [] + + for dir in axes_subdir: + + masks = os.listdir(os.path.join(axes,dir)) + + if '.svn' in masks: + masks.remove('.svn') + + for mask in masks[:]: + if mask.split('.')[-1] <> state_ext: + masks.remove(mask) + + mask1 = os.path.join(axes,dir,masks[0]) + mask2 = os.path.join(axes,dir,masks[1]) + + if svd: + strip_mask1 = 'comp_%s' % masks[0] + strip_mask2 = 'comp_%s' % masks[1] + else: + strip_mask1 = '.'.join(masks[0].split('.')[0:-1]) + strip_mask2 = '.'.join(masks[1].split('.')[0:-1]) + + echo_cmd = '/home/tclose/code/bin/echo_parameters %s -method scan -output %s/%s_%s.mif -axis1 %s -axis2 %s %s' % (samples, output_dir, strip_mask1, strip_mask2, mask1, mask2, ' '.join(echo_options)) + + if verbose: + print 'Echo Command: ' + print echo_cmd + + echo = subprocess.Popen(echo_cmd, stdout=subprocess.PIPE, shell=True).communicate()[0] + + if not echo: + raise Exception ('Echo command failed: (%s)' % echo_cmd) + + cmd = '/home/tclose/code/bin/' + echo.strip() + ' ' + other_options + + cmds.append(cmd) + + if verbose: + print 'Scan Command (echo): ' + print '\n%s\n\n' % cmd + + + + + print "MATLAB plot command:\n\nplot_scan %s -state %s.iter.%s \n\n" % (output_dir, '.'.join(samples.split('.')[0:-1]), samples.split('.')[-1]) + + +def runScanCmds(): + + global cmds + + while True: + lock.acquire() + if not len(cmds): + lock.release() + return None + cmd = cmds.pop() + lock.release() + + subprocess.call(cmd, shell=True) + + +if __name__ == '__main__': + + try: + opts, args = getopt.getopt(sys.argv[1:], "ho:a:p:e:vs:", ["help", "origin", "axes", "output", "echo_options", "verbose", "svd"]) + except getopt.GetoptError: + usage() + sys.exit(2) + + origin = '' + axes = '' + output_dir = '' + echo_options = '' + verbose = False + stop = False + svd = 0 + + for opt, arg in opts: + if opt in ("-h", "--help"): + usage() + sys.exit() + elif opt in ("-o", "--origin"): + origin = arg + elif opt == ('-a', "--axes"): + axes = arg + elif opt in ("-p", "--output"): + output_dir = arg + elif opt in ("-e", "--echo_options"): + output_dir = arg + elif opt in ("-v", "--verbose"): + verbose = True + elif opt in ("-s", "--svd"): + svd = int(arg) + + if len(args) == 0: + usage() + sys.exit(2) + + samples = args[0] + + if len(args) > 1: + other_options = ' '.join(args[1:]) + else: + other_options = '' + + global cmds + + buildScanCmds(samples, other_options, echo_options, origin, axes, output_dir, verbose, svd) + + + print 'Running %d scans...\n\n' % len(cmds) + + try: num_processors = os.sysconf('SC_NPROCESSORS_ONLN') + except: + try: num_processors = int(os.environ['NUMBER_OF_PROCESSORS']) + except: num_processors = 1 + + if verbose: + print '' + print 'launching ' + str(num_processors) + ' threads' + print '' + + threads = [] + for i in range (1, num_processors): + t = threading.Thread (target=runScanCmds); + t.start() + threads.append (t) + + exit_value = runScanCmds() + + for t in threads: t.join() + + exit (stop > 1) + \ No newline at end of file diff --git a/src/NFG_links b/src/NFG_links new file mode 100755 index 0000000..14b0608 --- /dev/null +++ b/src/NFG_links @@ -0,0 +1,21 @@ +#!/bin/bash + +for dir in `ls $1`; do + + rm phantom/$dir/* + + for filename in `ls $1/$dir`; do + + ext_pos=$(( ${#filename}-1 )) + ext=${filename:$ext_pos} + + if [ $ext = 'c' ]; then + ln -s $1/$dir/$filename phantom/$dir/${filename}pp + + elif [ $ext = 'h' ]; then + ln -s $1/$dir/$filename phantom/$dir/$filename + + fi + + done +done diff --git a/src/blossom5/CHANGES.TXT b/src/blossom5/CHANGES.TXT new file mode 100644 index 0000000..17e1e77 --- /dev/null +++ b/src/blossom5/CHANGES.TXT @@ -0,0 +1,32 @@ +Changes from version 1.0 to 2.0: + +- Replaced Fibonacci heaps with pairing heaps + (M. Fredman, R. Sedgewick, D. Sleator, R. Tarjan, Algorithmica 1(1):111-129, 1986). + Pairing heaps take less memory (namely, 2 pointers per edge less) compared to Fibonacci heaps, + and seem to be marginally faster. + + Finonacci heaps are still available - replace PQ.h with PQ-Fibonacci.h . + +- Changed data structures so that the time in SHRINK operations + is O(m log n) per augmentation (I believe). This was not the case + in version 1.0 (see footnote 5 in the MPC paper). + +I re-ran experiments corresponding to tables 1,3,4,5,9 in the paper. +The new version was marginally faster (e.g. up to 10% faster) on all examples +except for lrb744710, where it was about 3 times faster. + +Changes from version 2.0 to 2.01 (thanks to Nic Schraudolph and Dmitry Kamenetsky for useful suggestions): + +- Fixed bug in block.h (replaced "new char[] ... delete ..." with "new char[] ... delete[] ..."; +in the first case the behavious is not specified, though most compilers would compile it correctly.) + +- Removed PQ-Fibonacci.h + +- Added disclaimer about using floating point numbers + +Changes from version 2.01 to 2.02 + +- Tweaks to stop compiler warnings, + changed "delete rev_mapping" to "delete [] rev_mapping" in misc.cpp (thanks to Nic Schraudolph for suggestions) + +- Added a statement to license conditions diff --git a/src/blossom5/CheckPerfectMatching.cpp b/src/blossom5/CheckPerfectMatching.cpp new file mode 100644 index 0000000..0099f2f --- /dev/null +++ b/src/blossom5/CheckPerfectMatching.cpp @@ -0,0 +1,172 @@ +#include +#include "blossom5/PerfectMatching.h" +#include "blossom5/LCA.h" + +struct Node +{ + PerfectMatching::REAL sum; // = twice_y[i] + twice_y[i->parent] + twice_y[i->parent->parent] + ... + Node* match; + Node* parent; + Node* child; + Node* sibling; + int lca_preorder; +}; + + +int CheckPerfectMatchingOptimality(int node_num, int edge_num, int* edges, int* weights, PerfectMatching* pm, PerfectMatching::REAL threshold) +{ + int _i, _j, _e; + Node* i; + Node* j; + int blossom_num = pm->GetBlossomNum(); + int* blossom_parents = new int[node_num+blossom_num]; + PerfectMatching::REAL* twice_y = new PerfectMatching::REAL[node_num+blossom_num]; + + PerfectMatching::REAL y_blossom_min = 0; + PerfectMatching::REAL slack_min = 0; + PerfectMatching::REAL active_slack_max = 0; + + // step 1 - read dual solution and construct tree + pm->GetDualSolution(blossom_parents, twice_y); + Node* nodes = new Node[node_num+blossom_num+1]; + memset(nodes, 0, (node_num+blossom_num+1)*sizeof(Node)); + Node* ROOT = nodes+node_num+blossom_num; + for (_i=0, i=nodes; _isum = twice_y[_i]; + if (_i >= node_num && y_blossom_min > i->sum) y_blossom_min = i->sum; + if (blossom_parents[_i] >= 0) + { + if (blossom_parents[_i]=node_num+blossom_num) + { + delete [] nodes; + delete [] blossom_parents; + delete [] twice_y; + return 2; + } + i->parent = nodes + blossom_parents[_i]; + i->sibling = i->parent->child; + i->parent->child = i; + } + } + delete [] blossom_parents; + delete [] twice_y; + + for (i=nodes; iparent) + { + i->parent = ROOT; + i->sibling = ROOT->child; + ROOT->child = i; + } + } + + LCATree* lca_tree = new LCATree(node_num+blossom_num+1); + Node** rev_mapping = new Node*[node_num+blossom_num]; + + i = ROOT; + while ( 1 ) + { + if (i->child) + { + if (i < nodes+node_num) { delete [] nodes; delete lca_tree; delete [] rev_mapping; return 2; } + i->child->sum += i->sum; + i = i->child; + } + else + { + if (i >= nodes+node_num) { delete [] nodes; delete lca_tree; delete [] rev_mapping; return 2; } + while ( 1 ) + { + i->lca_preorder = lca_tree->Add(i, i->parent); + rev_mapping[i->lca_preorder] = i; + if (i->sibling) break; + i = i->parent; + if (i == ROOT) + { + i->lca_preorder = lca_tree->AddRoot(i); + break; + } + } + if (i == ROOT) break; + i = i->sibling; + i->sum += i->parent->sum; + } + } + + int matched_num = 0; + for (_e=0; _e=node_num || _j>=node_num || _i==_j) { delete [] nodes; delete lca_tree; delete [] rev_mapping; return 2; } + + int lca_i = nodes[_i].lca_preorder; + int lca_j = nodes[_j].lca_preorder; + lca_tree->GetPenultimateNodes(lca_i, lca_j); + i = rev_mapping[lca_i]; + j = rev_mapping[lca_j]; + PerfectMatching::REAL twice_slack = 2*weights[_e] - (nodes[_i].sum - i->parent->sum) - (nodes[_j].sum - j->parent->sum); + if (slack_min > twice_slack) slack_min = twice_slack; + if (pm->GetSolution(_e)) + { + if (pm->GetMatch(_i)!=_j || pm->GetMatch(_j)!=_i || i->match || j->match) { delete [] nodes; delete lca_tree; delete [] rev_mapping; return 2; } + i->match = j; + j->match = i; + if (active_slack_max < twice_slack) active_slack_max = twice_slack; + matched_num += 2; + } + } + + delete [] nodes; + delete lca_tree; + delete [] rev_mapping; + + if (matched_num != node_num) return 2; + + if (y_blossom_min < -threshold || slack_min < -threshold || active_slack_max > threshold) + { + printf("ERROR in CheckPerfectMatchingOptimality():\n"); + if ( ((PerfectMatching::REAL)1 / 2) == 0 ) + printf("\ty_blossom_min=%d\n\tslack_min=%d\n\tactive_slack_max=%d\n", (int)y_blossom_min, (int)slack_min, (int)active_slack_max); + else + printf("\ty_blossom_min=%.15f\n\tslack_min=%.15f\n\tactive_slack_max=%.15f\n", (double)y_blossom_min, (double)slack_min, (double)active_slack_max); + return 1; + } + + return 0; +} + +double ComputePerfectMatchingCost(int node_num, int edge_num, int* edges, int* weights, PerfectMatching* pm) +{ + int i; + int j; + int e; + double cost = 0; + + int* nodes = new int[node_num]; + memset(nodes, 0, node_num*sizeof(int)); + for (e=0; eGetSolution(e)) + { + i = edges[2*e]; + j = edges[2*e+1]; + nodes[i] ++; + nodes[j] ++; + cost += weights[e]; + } + } + for (i=0; i +#include +#include +#include "blossom5/GEOMGeomPerfectMatching.h" +#include "blossom5/GEOMGPMkdtree.h" + + + + +// greedy procedure to make sure that a perfect matching exists: +// 1. construct a matching among existing edges +// (greedy procedure: pick a node, check whether there are edges leading +// to unmatched nodes, if there are pick the edge with the smallest length). +// 2. take remaining unmatched nodes, construct kd-tree for them, +// assign an ordering to nodes (last visited time during left-most depth-first search), +// add edges between consecutive nodes (2*i,2*i+1) +void GeomPerfectMatching::CompleteInitialMatching() +{ + if (options.verbose) printf("adding edges to make sure that a perfect matching exists..."); + PointId p, q; + Edge* e; + double len, len_min; + int unmatched_num = 0, edge_num0 = edge_num; + + // construct greedy matching + for (p=0; pnext[0]) + { + if (nodes[e->head[0]].is_marked) continue; + len = Dist2(p, e->head[0]); + if (q < 0 || len_min > len) + { + q = e->head[0]; + len_min = len; + } + } + if (q >= 0) + { + nodes[p].is_marked = nodes[q].is_marked = 1; + } + else unmatched_num ++; + } + + if (unmatched_num == 0) + { + for (p=0; pAddPerfectMatching(rev_mapping); + + delete kd_tree; + delete [] unmatched_coords; + delete [] rev_mapping; + + if (options.verbose) printf("done (%d edges)\n", edge_num-edge_num0); +} + +void GeomPerfectMatching::InitKNN(int K) +{ + if (node_num != node_num_max) { printf("InitKNN() cannot be called before all points have been added!\n"); exit(1); } + if (options.verbose) printf("adding K nearest neighbors (K=%d)\n", K); + + int dir, k; + PointId p; + Edge* e; + + if (K > node_num - 1) K = node_num - 1; + + GPMKDTree* kd_tree = new GPMKDTree(DIM, node_num, coords, this); + PointId* neighbors = new PointId[K]; + + for (p=0; pnext[dir]) + { + nodes[e->head[dir]].is_marked = 1; + } + + kd_tree->ComputeKNN(p, K, neighbors); + for (k=0; knext[dir]) + { + nodes[e->head[dir]].is_marked = 0; + } + } + + delete kd_tree; + delete [] neighbors; +} + +#ifdef DELAUNAY_TRIANGLE + +#ifdef _MSC_VER +#pragma warning(disable: 4311) +#pragma warning(disable: 4312) +#endif + +extern "C" { +#define ANSI_DECLARATORS +#define TRILIBRARY +#define NO_TIMER +#define main NO_MAIN_FUNCTION +#include "blossom5/triangle/triangle.c" +} + +void GeomPerfectMatching::InitDelaunay() +{ + if (node_num < 16) return; + if (options.verbose) printf("adding edges in Delaunay triangulation\n"); + + int k; + + struct triangulateio in, out, vorout; + in.numberofpoints = node_num; + in.numberofpointattributes = 0; + in.pointlist = (REAL *) malloc(in.numberofpoints * 2 * sizeof(REAL)); + for (k=0; k<2*node_num; k++) in.pointlist[k] = coords[k]; + in.pointattributelist = NULL; + in.pointmarkerlist = NULL; + in.numberofsegments = 0; + in.numberofholes = 0; + in.numberofregions = 0; + in.regionlist = 0; + + out.pointlist = (REAL *) NULL; + out.pointattributelist = (REAL *) NULL; + out.pointmarkerlist = (int *) NULL; + out.trianglelist = (int *) NULL; + out.triangleattributelist = (REAL *) NULL; + out.neighborlist = (int *) NULL; + out.segmentlist = (int *) NULL; + out.segmentmarkerlist = (int *) NULL; + out.edgelist = (int *) NULL; + out.edgemarkerlist = (int *) NULL; + + vorout.pointlist = (REAL *) NULL; + vorout.pointattributelist = (REAL *) NULL; + vorout.edgelist = (int *) NULL; + vorout.normlist = (REAL *) NULL; + + triangulate("pczAevn", &in, &out, &vorout); + + free(in.pointlist); + free(out.pointlist); + free(out.pointmarkerlist); + free(out.trianglelist); + free(out.neighborlist); + free(out.segmentlist); + free(out.segmentmarkerlist); + free(out.edgemarkerlist); + free(vorout.pointlist); + free(vorout.pointattributelist); + free(vorout.edgelist); + free(vorout.normlist); + + for (k=0; k +#include +#include +#include "blossom5/GEOMGeomPerfectMatching.h" +#include "blossom5/GEOMGPMkdtree.h" + + +GeomPerfectMatching::GeomPerfectMatching(int nodeNum, int _DIM) + : DIM(_DIM), + node_num(0), + node_num_max(nodeNum), + edge_num(0) +{ + if (node_num_max < 1) { printf("too few nodes\n"); exit(1); } + if (node_num_max & 1) { printf("# of points is odd: perfect matching cannot exist\n"); exit(1); } + nodes = (Node*) malloc(node_num_max*sizeof(Node)); + memset(nodes, 0, node_num_max*sizeof(Node)); + edges = new Block(512); + coords = (REAL*) malloc((DIM+1)*node_num_max*sizeof(REAL)); + sums = coords + DIM*node_num_max; + matching = (int*) malloc(node_num_max*sizeof(int)); + int i; + for (i=0; i= node_num_max) + { + printf("Error: you are trying to add too many points!\n"); + exit(1); + } + memcpy(coords+DIM*node_num, coord, DIM*sizeof(REAL)); + return node_num ++; +} + +void GeomPerfectMatching::AddInitialEdge(PointId _i, PointId _j) +{ + assert(_i>=0 && _i=0 && _jNew(); + edge_num ++; + + e->head[1] = _i; + e->head[0] = _j; + e->next[0] = i->first[0]; + e->next[1] = j->first[1]; + i->first[0] = e; + j->first[1] = e; +} + + +GeomPerfectMatching::REAL GeomPerfectMatching::ComputeCost(PointId* matching) +{ + if (node_num != node_num_max) { printf("ComputeCost() cannot be called before all points have been added!\n"); exit(1); } + + REAL cost = 0; + int i; + for (i=0; i=node_num || matching[matching[i]]!=i) + { + printf("ComputeCost(): not a valid matching!\n"); + exit(1); + } + if (matching[i] > i) + { + cost += Dist(i, matching[i]); + } + } + return cost; +} + + diff --git a/src/blossom5/GEOM/GPMkdtree.cpp b/src/blossom5/GEOM/GPMkdtree.cpp new file mode 100644 index 0000000..0d9211a --- /dev/null +++ b/src/blossom5/GEOM/GPMkdtree.cpp @@ -0,0 +1,688 @@ +#include +#include +#include +#include "blossom5/GEOMGPMkdtree.h" +#include "blossom5/timer.h" + + +// 'mapping' must be of size 2*N. (array[N], ... array[2*N-1] is used as a temporary buffer). +// After the call array[mapping[0]] <= array[mapping[1]] <= ... <= array[mapping[N-1]]. +// array is not modified. +template inline void sort(Type* array, int array_skip, int* mapping, int N) +{ + // mergesort + int i; + int* mappingSrc = mapping; + int* mappingDst = mapping + N; + int* pSrc1; + int* pSrc2; + int* pSrc1End; + int* pSrc2End; + int* pDst; + + for (i=0; i<(N&(~1)); i+=2) + { + if (array[array_skip*i] < array[array_skip*(i+1)]) + { + mappingSrc[i] = i; + mappingSrc[i+1] = i+1; + } + else + { + mappingSrc[i] = i+1; + mappingSrc[i+1] = i; + } + } + if (i != N) mappingSrc[i] = i; + + int step; + for (step=2; step= mappingSrc + N) + { + memcpy(pDst, pSrc1, (int)((char*)(mappingSrc + N) - (char*)pSrc1)); + break; + } + pSrc2 = pSrc1End; + pSrc2End = pSrc2 + step; + if (pSrc2End > mappingSrc + N) pSrc2End = mappingSrc + N; + while ( 1 ) + { + if (array[(array_skip)*(*pSrc1)] < array[array_skip*(*pSrc2)]) + { + *pDst ++ = *pSrc1 ++; + if (pSrc1 == pSrc1End) + { + memcpy(pDst, pSrc2, (int)((char*)pSrc2End - (char*)pSrc2)); + pDst = (int*) ((char*)pDst + (int)((char*)pSrc2End - (char*)pSrc2)); + break; + } + } + else + { + *pDst ++ = *pSrc2 ++; + if (pSrc2 == pSrc2End) + { + memcpy(pDst, pSrc1, (int)((char*)pSrc1End - (char*)pSrc1)); + pDst = (int*) ((char*)pDst + (int)((char*)pSrc1End - (char*)pSrc1)); + break; + } + } + } + } + pDst = mappingDst; + mappingDst = mappingSrc; + mappingSrc = pDst; + } + if (mappingSrc != mapping) memcpy(mapping, mappingSrc, N*sizeof(int)); +} + +////////////////////////////////////////////////////////////////////////////////////////// + +#define NEIGHBOR_PARENT(k) (((k)-1)>>1) +#define NEIGHBOR_FIRST_CHILD(k) (((k)<<1)+1) + +Neighbors::Neighbors() +{ + K_max = 0; + dist_array = NULL; +} + +Neighbors::~Neighbors() +{ + if (dist_array) delete [] dist_array; +} + +void Neighbors::Init(int _K, PointId* _array) +{ + K = _K; + array = _array; + num = 0; + if (K > K_max) + { + if (dist_array) delete [] dist_array; + K_max = K; + dist_array = new double[K_max]; + } +} + +inline void Neighbors::Swap(int k1, int k2) +{ + PointId p = array[k1]; array[k1] = array[k2]; array[k2] = p; + double d = dist_array[k1]; dist_array[k1] = dist_array[k2]; dist_array[k2] = d; +} + +inline void Neighbors::Add(PointId p, double dist) +{ + int k; + if (num < K) + { + k = num ++; + array[k] = p; + dist_array[k] = dist; + while ( k > 0 ) + { + int k_parent = NEIGHBOR_PARENT(k); + if (dist_array[k] <= dist_array[k_parent]) break; + Swap(k, k_parent); + k = k_parent; + } + } + else + { + if (dist_array[0] <= dist) return; + array[0] = p; + dist_array[0] = dist; + k = 0; + while ( 1 ) + { + int k_child = NEIGHBOR_FIRST_CHILD(k); + if (k_child >= K) break; + if (k_child+1 < K && dist_array[k_child+1] > dist_array[k_child]) k_child ++; + if (dist_array[k] >= dist_array[k_child]) break; + Swap(k, k_child); + k = k_child; + } + } + //for (k=1; k 0); + return dist_array[0]; +} + +////////////////////////////////////////////////////////////////////////////////////////// + +GPMKDTree::GPMKDTree(int _D, int _point_num, REAL* coords, GeomPerfectMatching* _GPM) + : D(_D), DIM(_GPM->DIM), point_num(_point_num), GPM(_GPM) +{ + Node* i; + Node* j; + int d, d0, k; + int* mapping = new int[(D+2)*point_num]; + int* buf = mapping + D*point_num; + int* marking = buf + point_num; + memset(marking, 0, point_num*sizeof(int)); + int* ptr = mapping; + + int node_num_max = 4*point_num/3+2; + nodes = (Node*)malloc(node_num_max*sizeof(Node)); + rev_mapping = (Node**)malloc(point_num*sizeof(Node*)); + memset(rev_mapping, 0, point_num*sizeof(Node*)); + + REAL** coords_array = new REAL*[D]; + int* skip_array = new int[D]; + for (d=0; dsums; skip_array[d] = 1; } + + for (d=0; d(coords_array[d], skip_array[d], ptr, point_num); + if (d == DIM) sum_max = GPM->sums[ptr[point_num-1]]; + ptr += point_num; + } + + nodes[0].parent = NULL; + nodes[0].order = 0; + nodes[0].d = point_num; + nodes[0].first_child = NULL; + node_num = 1; + Node* first_unprocessed = &nodes[0]; + while ( (i=first_unprocessed) ) + { + first_unprocessed = i->first_child; + + int start = i->order; + int num0 = i->d, num; + if ((DIM==D && num0<=2) || (DIMd = -num0; + for (k=0; kpoints[k] = mapping[start+k]; + rev_mapping[mapping[start+k]] = i; + } + continue; + } + + // not a leaf. + if (node_num + 2 > node_num_max) + { + node_num_max = 3*node_num_max/2 + 16; + Node* nodes_old = nodes; + nodes = (Node*)realloc(nodes, node_num_max*sizeof(Node)); +#define UPDATE_NODE_PTR(ptr) ptr = (Node*)((char*)ptr + ((char*)nodes-(char*)nodes_old)) + UPDATE_NODE_PTR(i); + if (first_unprocessed) UPDATE_NODE_PTR(first_unprocessed); + for (k=0; k=0 && nodes[k].first_child) UPDATE_NODE_PTR(nodes[k].first_child); + } + for (k=0; kparent) ? ((i->parent->d + 1) % D) : 0; + //num = num0/2; + + const int FRACTION = 20; + int num_min = 1; if (num_min < num0/FRACTION) num_min = num0/FRACTION; + int num_max = num0-1; if (num_max > (FRACTION-1)*num0/FRACTION) num_max = (FRACTION-1)*num0/FRACTION; + int num_max_DIM = num0-1; + + if (D>DIM && (!i->parent || !i->parent->parent || !i->parent->parent->parent)) d0 = D-1; + else + { + d0 = -1; + REAL diff_max = 0; + for (d=0; d split) break; + } + + //////////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////////// + + ptr = mapping + d0*point_num; + for (k=start; kd = d0; + PointId p = ptr[start + num - ((num >= num0-num) ? 1 : 0)]; + i->coord = coords_array[d0][p*skip_array[d0]]; + i->first_child = j = &nodes[node_num]; + node_num += 2; + j->parent = (j+1)->parent = i; + j->order = start; + j->d = num; + (j+1)->order = start+num; + (j+1)->d = num0-num; + (j+1)->first_child = first_unprocessed; + j->first_child = j+1; + first_unprocessed = j; + } + + delete [] coords_array; + delete [] skip_array; + delete [] mapping; + + //////////////////////////////////////////////////////////////////////////////////// + // set ordering and depth_max + int depth = 0, depth_max = 0; + + // set ordering + i = &nodes[0]; + k = 0; + if (D > DIM) + { + // ordering for AddNegativeEdges() - tree preorder + while ( 1 ) + { + if (!IS_LEAF(i)) + { + i = i->first_child; + depth ++; + if (depth_max < depth) depth_max = depth; + } + else + { + while ( 1 ) + { + i->order = k ++; + + if (!i->parent) break; + if (i->parent->first_child == i) { i ++; break; } + i = i->parent; + depth --; + } + if (!i->parent) break; + } + } + } + else + { + // compute tree inorder - useful for nearest neighbor search so that that branches close to the input node are explored first + while ( 1 ) + { + if (!IS_LEAF(i)) + { + i = i->first_child; + depth ++; + if (depth_max < depth) depth_max = depth; + } + else + { + i->order = k ++; + while ( 1 ) + { + if (!i->parent) break; + if (i->parent->first_child == i) { i->parent->order = k ++; i ++; break; } + i = i->parent; + depth --; + } + if (!i->parent) break; + } + } + } + + traversing_buf = (REAL*) malloc((D + depth_max + 2)*sizeof(REAL)); +} + +GPMKDTree::~GPMKDTree() +{ + free(nodes); + free(rev_mapping); + free(traversing_buf); +} + +void GPMKDTree::AddPerfectMatching(PointId* rev_mapping) +{ + Node* i; + int k; + PointId p, q = -1; + i = &nodes[0]; + do + { + if (IS_LEAF(i)) + { + for (k=0; k<-i->d; k++) + { + p = i->points[k]; + if (q < 0) q = p; + else { GPM->AddInitialEdge(rev_mapping[p], rev_mapping[q]); q = -1; } + } + } + else + { + i = i->first_child; + continue; + } + + while ( i->parent ) + { + if (i->parent->first_child == i) { i ++; break; } + i = i->parent; + } + } while (i->parent); +} + +////////////////////////////////////////////////////////////////////////////////////////// + +#define MOVE_DOWN_LEFT(i)\ + {\ + *stack ++ = current_diff[i->d];\ + if (current_diff[i->d] <= 0 && (diff = i->coord - coord0[i->d]) < 0) current_diff[i->d] = diff;\ + i = i->first_child;\ + } + +#define MOVE_DOWN_RIGHT(i)\ + {\ + *stack ++ = current_diff[i->d];\ + if (current_diff[i->d] >= 0 && (diff = i->coord - coord0[i->d]) > 0) current_diff[i->d] = diff;\ + i = i->first_child+1;\ + } + +#define MOVE_LEFT(i)\ + {\ + int d_prev = i->parent->d;\ + current_diff[d_prev] = stack[-1];\ + if (current_diff[d_prev] <= 0 && (diff = i->parent->coord - coord0[d_prev]) < 0) current_diff[d_prev] = diff;\ + i --;\ + } + +#define MOVE_RIGHT(i)\ + {\ + int d_prev = i->parent->d;\ + current_diff[d_prev] = stack[-1];\ + if (current_diff[d_prev] >= 0 && (diff = i->parent->coord - coord0[d_prev]) > 0) current_diff[d_prev] = diff;\ + i ++;\ + } + +#define MOVE_UP(i)\ + {\ + i = i->parent;\ + current_diff[i->d] = *(-- stack);\ + } + +////////////////////////////////////////////////////////////////////////////////////////// + +#define MOVE_DOWN_LEFT_X(i)\ + {\ + *stack ++ = current_diff[i->d];\ + if (i->d < D-1) { if (current_diff[i->d] <= 0 && (diff = i->coord - coord0[i->d]) < 0) current_diff[i->d] = diff; }\ + else current_diff[i->d] = i->coord;\ + i = i->first_child;\ + } + +#define MOVE_DOWN_RIGHT_X(i)\ + {\ + *stack ++ = current_diff[i->d];\ + if (i->d < D-1) { if (current_diff[i->d] >= 0 && (diff = i->coord - coord0[i->d]) > 0) current_diff[i->d] = diff; }\ + i = i->first_child+1;\ + } + +#define MOVE_LEFT_X(i)\ + {\ + int d_prev = i->parent->d;\ + current_diff[d_prev] = stack[-1];\ + if (d_prev < D-1) { if (current_diff[d_prev] <= 0 && (diff = i->parent->coord - coord0[d_prev]) < 0) current_diff[d_prev] = diff; }\ + else current_diff[d_prev] = i->parent->coord;\ + i --;\ + } + +#define MOVE_RIGHT_X(i)\ + {\ + int d_prev = i->parent->d;\ + current_diff[d_prev] = stack[-1];\ + if (d_prev < D-1) { if (current_diff[d_prev] >= 0 && (diff = i->parent->coord - coord0[d_prev]) > 0) current_diff[d_prev] = diff; }\ + i ++;\ + } + +#define MOVE_UP_X(i)\ + {\ + i = i->parent;\ + current_diff[i->d] = *(-- stack);\ + } + +////////////////////////////////////////////////////////////////////////////////////////// + +/* +void GPMKDTree::ComputeKNN(PointId p0, int K, PointId* neighbors_array) +{ + int p; + REAL* coord0 = GPM->coords + p0*DIM; + + neighbors.Init(K, neighbors_array); + + for (p=0; pDist(coord0, GPM->coords+p*DIM)); + } +} +*/ + +void GPMKDTree::ComputeKNN(PointId p0, int K, PointId* neighbors_array) +{ + int neighbor_num = 0; + Node* i = rev_mapping[p0]; + int k, order0 = i->order; + REAL diff; + REAL* coords = GPM->coords; + REAL* coord0 = GPM->coords + p0*DIM; + REAL* current_diff = traversing_buf; + REAL* stack = traversing_buf + D; + + neighbors.Init(K, neighbors_array); + + for (k=0; kd; k++) + { + PointId p = i->points[k]; + if (p == p0) continue; + double dist2; + REAL* coord2 = coords+p*DIM; + GPM_GET_DIST2(dist2, coord0, coord2); + neighbors.Add(p, dist2); + } + } + else + { + if (neighbors.GetNum() < K || GPM->Norm2(current_diff) < neighbors.GetMax()) + { + if (i->order > order0) + { + MOVE_DOWN_LEFT(i); + } + else + { + MOVE_DOWN_RIGHT(i); + } + continue; + } + } + + while ( i->parent ) + { + if (i->parent->order > order0) + { + if (i->parent->first_child == i) + { + MOVE_RIGHT(i); + break; + } + } + else + { + if (i->parent->first_child != i) + { + MOVE_LEFT(i); + break; + } + } + MOVE_UP(i); + } + } while ( i->parent ); +} + + +////////////////////////////////////////////////////////////////////////////////////////// + +/* +void GPMKDTree::AddNegativeEdges(PointId p, PerfectMatching* pm) +{ + PointId q; + for (q=p+1; qnodes[q].is_marked) continue; + REAL len = GPM->Dist(p, q); + if (2*len - GPM->sums[p] - GPM->sums[q] < 0) + { + if (pm->AddNewEdge(p, q, len, true)>=0) + { + GPM->AddInitialEdge(p, q); + } + } + } +} +*/ + + +void GPMKDTree::AddNegativeEdges(PointId p0, PerfectMatching* pm) +{ + Node* i = rev_mapping[p0]; + int k, order0 = i->order; + bool check; + REAL diff; + REAL* coords = GPM->coords; + REAL* coord0 = coords + p0*DIM; + REAL* sums = GPM->sums; + REAL sum0 = sums[p0]; + REAL* current_diff = traversing_buf; + REAL* stack = traversing_buf + D; + + for (k=0; i->points[k]!=p0; k++) {} + for (k++; k<-i->d; k++) + { + PointId p = i->points[k]; + + REAL len = GPM->Dist(coord0, GPM->coords+p*DIM); + if (2*len - GPM->sums[p] < GPM->sums[p0]) + { + double start_time = get_time(); + if (pm->AddNewEdge(p0, p, len, true)>=0) GPM->AddInitialEdge(p0, p); + GPM->graph_update_time += get_time() - start_time; + } + } + + for (k=0; korder > order0) + { + if (IS_LEAF(i)) + { + for (k=0; k<-i->d; k++) + { + PointId p = i->points[k]; + if (!GPM->nodes[p].is_marked) + { + //REAL* coord2 = coords+p*DIM; + //REAL threshold = sums[p0]+sums[p]; + //GPM_CHECK_DIST(check, coord0, coord2, threshold); + //if (check) + { + REAL len = GPM->Dist(coord0, GPM->coords+p*DIM); + if (2*len - GPM->sums[p] < GPM->sums[p0]) + { + double start_time = get_time(); + if (pm->AddNewEdge(p0, p, len, true)>=0) GPM->AddInitialEdge(p0, p); + GPM->graph_update_time += get_time() - start_time; + } + } + } + } + } + else + { + REAL threshold = current_diff[D-1] + sum0; + GPM_CHECK_NORM(check, current_diff, threshold); + if (check) + { + MOVE_DOWN_LEFT_X(i); + continue; + } + } + } + + while ( i->parent ) + { + if (i->parent->first_child == i) + { + MOVE_RIGHT_X(i); + break; + } + MOVE_UP_X(i); + } + } while (i->parent); +} diff --git a/src/blossom5/GEOM/GPMkdtree.h b/src/blossom5/GEOM/GPMkdtree.h new file mode 100644 index 0000000..1372cd1 --- /dev/null +++ b/src/blossom5/GEOM/GPMkdtree.h @@ -0,0 +1,105 @@ +/* + GPMkdtree.h - kd-tree data structure for pricing in complete geometric instances + + Copyright 2008 Vladimir Kolmogorov (vnk@adastral.ucl.ac.uk) + + This software can be used for research purposes only. Commercial use is prohibited. + Public redistribution of the code or its derivatives is prohibited. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + + +#ifndef NJKASKJTASJNBAJSNRBAJS +#define NJKASKJTASJNBAJSNRBAJS + +#include "blossom5/GEOMGeomPerfectMatching.h" + +struct Neighbors +{ + typedef GeomPerfectMatching::REAL REAL; + typedef GeomPerfectMatching::PointId PointId; + + Neighbors(); + ~Neighbors(); + + int GetNum() { return num; } + + void Init(int K, PointId* array); + void Add(PointId p, double dist); + double GetMax(); + +private: + void Swap(int k1, int k2); + PointId* array; + double* dist_array; + int num, K, K_max; +}; + + + +struct GPMKDTree +{ + typedef GeomPerfectMatching::REAL REAL; + typedef GeomPerfectMatching::PointId PointId; + + GPMKDTree(int D, int point_num, REAL* coords, GeomPerfectMatching* GPM); + ~GPMKDTree(); + + // if D == DIM + void AddPerfectMatching(PointId* rev_mapping); + void ComputeKNN(PointId p, int K, PointId* neighbors); + + // if D == DIM+1 + void AddNegativeEdges(PointId p, PerfectMatching* pm); + + ////////////////////////////////////////////////////////////////////////// + +public: +#define CHILDREN_MAX 2 + struct Node + { + Node* parent; + int d; // split dimension. d<0 indicates a leaf. +#define IS_LEAF(i) ((i)->d < 0) + union + { + struct // for non-leaves + { + REAL coord; + Node* first_child; // the second child is first_child+1 + }; + struct // for leaves + { + PointId points[CHILDREN_MAX]; // the number of points is -d + }; + }; + int order; + }* nodes; + + + ////////////////////////////////////////////////////////////////////////// + Node** rev_mapping; + + int D, DIM, point_num, node_num; + REAL sum_max; + REAL* traversing_buf; + GeomPerfectMatching* GPM; + + Neighbors neighbors; +}; + + + + +#endif diff --git a/src/blossom5/GEOM/GPMmain.cpp b/src/blossom5/GEOM/GPMmain.cpp new file mode 100644 index 0000000..08db6b4 --- /dev/null +++ b/src/blossom5/GEOM/GPMmain.cpp @@ -0,0 +1,148 @@ +#include +#include +#include +#include "blossom5/GEOMGeomPerfectMatching.h" +#include "blossom5/GEOMGPMkdtree.h" +#include "blossom5/timer.h" + + + +GeomPerfectMatching::REAL GeomPerfectMatching::SolveComplete() +{ + if (node_num != node_num_max) { printf("ComputeCost() cannot be called before all points have been added!\n"); exit(1); } + + PointId p, q; + int e = 0, E = node_num*(node_num-1)/2; + PerfectMatching* pm = new PerfectMatching(node_num, E); + for (p=0; pAddEdge(p, q, Dist(p, q)); + } + } + pm->options = options; + pm->Solve(); + for (p=0; pGetSolution(e++)) + { + matching[p] = q; + matching[q] = p; + } + } + } + delete pm; + return ComputeCost(matching); +} + +GeomPerfectMatching::REAL GeomPerfectMatching::Solve() +{ + double start_time = get_time(); + double perfect_matching_time = 0; + double negative_edges_time = 0; + if (options.verbose) { printf("starting geometric matching with %d points\n", node_num); fflush(stdout); } + PointId p, q; + Edge* e; + int _e; + int iter; + bool success = false; + PerfectMatching* pm = NULL; + GPMKDTree* kd_tree; + + double init_matching_time = get_time(); + + if (gpm_options.init_Delaunay) InitDelaunay(); + if (gpm_options.init_KNN > 0) InitKNN(gpm_options.init_KNN); + if (gpm_options.init_greedy) CompleteInitialMatching(); + + init_matching_time = get_time() - init_matching_time; + + graph_update_time = 0; + + int iter_max = gpm_options.iter_max; + for (iter=0; iter_max<=0 || iterStartUpdate(); + for (p=0; pGetTwiceSum(p); + if ( ((REAL)1 / 2) == 0 && ((PerfectMatching::REAL)1 / 2) != 0 ) sums[p] = (REAL)ceil((double)s); + else sums[p] = (REAL)s; + } + if (options.verbose) { printf("building kd_tree..."); fflush(stdout); } + { + kd_tree = new GPMKDTree(DIM+1, node_num, coords, this); + } + if (options.verbose) { printf(" done. Now adding negative edges:\n "); fflush(stdout); } + + for (p=0; pnext[0]) nodes[e->head[0]].is_marked = 1; + for (e=nodes[p].first[1]; e; e=e->next[1]) nodes[e->head[1]].is_marked = 1; + kd_tree->AddNegativeEdges(p, pm); + for (e=nodes[p].first[0]; e; e=e->next[0]) nodes[e->head[0]].is_marked = 0; + for (e=nodes[p].first[1]; e; e=e->next[1]) nodes[e->head[1]].is_marked = 0; + } + delete kd_tree; + //if (edge_num - edge_num0 > node_num / 32) + if ( 0 ) // always reuse previous computation + { + delete pm; + pm = NULL; + } + else + { + pm->FinishUpdate(); + if (edge_num0 == edge_num) success = true; + } + if (options.verbose) { printf("\ndone (%d edges added)\n", edge_num-edge_num0); fflush(stdout); } + negative_edges_time += get_time() - negative_edges_start_time; + } + if (!pm) + { + int E = 5*node_num; + if (E < 5*edge_num/4) E = 5*edge_num/4; + pm = new PerfectMatching(node_num, E); + for (e=edges->ScanFirst(); e; e=edges->ScanNext()) + { + p = e->head[1]; q = e->head[0]; + pm->AddEdge(p, q, Dist(p, q)); + } + } + if (options.verbose) printf("iter %d: ", iter+1); + pm->options = options; + double perfect_matching_start = get_time(); + pm->Solve(); + perfect_matching_time += get_time() - perfect_matching_start; + if (success) break; + } + + for (_e=0, e=edges->ScanFirst(); e; _e++, e=edges->ScanNext()) + { + if (pm->GetSolution(_e)) + { + p = e->head[1]; q = e->head[0]; + matching[p] = q; + matching[q] = p; + } + } + delete pm; + REAL cost = ComputeCost(matching); + if (options.verbose) + { + printf("geometric matching finished [%.3f secs]. cost=%.1f \n", get_time()-start_time, (double)cost); + printf(" selecting initial edges: [%.3f secs], perfect matching: [%.3f secs]\n", init_matching_time, perfect_matching_time); + printf(" pricing: [%.3f secs] including graph updates: [%.3f secs]\n", negative_edges_time, graph_update_time); + fflush(stdout); + } + return cost; +} + diff --git a/src/blossom5/GEOM/GeomPerfectMatching.h b/src/blossom5/GEOM/GeomPerfectMatching.h new file mode 100644 index 0000000..d783a90 --- /dev/null +++ b/src/blossom5/GEOM/GeomPerfectMatching.h @@ -0,0 +1,177 @@ +/* + GeomPerfectMatching.h - computing min cost perfect matching in complete geometric instances (with edge weights equal to Euclidean distances) + + Copyright 2008 Vladimir Kolmogorov (vnk@adastral.ucl.ac.uk) + + This software can be used for research purposes only. Commercial use is prohibited. + Public redistribution of the code or its derivatives is prohibited. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +#ifndef ASKHALKSJBRASMNABFAJSTAS +#define ASKHALKSJBRASMNABFAJSTAS + +#include +#include +#include "blossom5/PerfectMatching.h" + +//#define DELAUNAY_TRIANGLE + +struct GPMKDTree; + +class GeomPerfectMatching +{ +public: + typedef int REAL; // if you change it to double, you should also change PerfectMatching::REAL to double! + typedef int PointId; + + // pointNum must be a positive even number. + GeomPerfectMatching(int pointNum, int DIM); + ~GeomPerfectMatching(); + + // Must be called exactly point_num times (before anything else can be called). + // First call returns 0, second returns 1, and so on. + // coord must be an array of size DIM. (This array is read into internal memory.) + PointId AddPoint(REAL* coord); + + + ////////////// SOLVING ////////////// + + // solves perfect matching in the complete graph. Inefficient, just for testing. + REAL SolveComplete(); + + + // options for Solve() + struct GPMOptions + { + GPMOptions() : init_Delaunay(true), init_KNN(0), init_greedy(true), iter_max(0) {} + + // three variables below determine the initial subset of edges. + // Delaunay initialization seems to be more robust than K nearest neighbors + // (but you need to download the "Triangle" package of Shewchuk + // from http://www.cs.cmu.edu/~quake/triangle.html , extract it to the directory 'triangle' + // and define DELAUNAY_TRIANGLE above). + bool init_Delaunay; // add Delaunay triangulation edges. + int init_KNN; // use init_KNN nearest neighbors for each point. + bool init_greedy; // add edges greedily to make sure that a perfect matching exists (see comments before CompleteInitialMatching() in GPMinit.cpp for details) + + int iter_max; // If iter_max <= 0 then adds subsets of edges until an optimal solution is found. + // Otherwise runs at most iter_max iterations, so the solution may be suboptimal. + // (iter_max=1 runs perfect matching just for the initial subset). + }; + struct PerfectMatching::Options options; + struct GPMOptions gpm_options; + + REAL Solve(); + + // You can also specify the initial subset manually + void AddInitialEdge(PointId i, PointId j); + + //////////// READING RESULTS ////////// + // Can be called after Solve() or SolveComplete(). Returns pointer to an array 'matching' + // of size node_num. (matching[i] is the point corresponding to point i). + // User must not modify this array. + PointId GetMatch(PointId p) { return matching[p]; } + + + + REAL Dist(REAL* coord1, REAL* coord2); + REAL Dist(PointId p, PointId q); + + + ////////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////////////////////////////// +private: + +friend struct GPMKDTree; + + struct Edge + { + PointId head[2]; + Edge* next[2]; + }; + struct Node + { + Edge* first[2]; + int is_marked; + }; + + Node* nodes; + Block* edges; + REAL* coords; // array of size DIM*node_num_max + REAL* sums; // array of size node_num_max + PointId* matching; // array of size node_num_max + + int DIM; + int node_num, node_num_max; + int edge_num; + + double graph_update_time; + +// below x denotes REAL, X denotes double, c,c1,c2 are coords (REAL*) +#define GPM_ROUND(X) (REAL)( ( ((REAL)1 / 2) == 0 ) ? ((X)+0.5) : (X) ) +#define GPM_GET_NORM2(X, c) { int d; X = 0; for (d=0; d= 0 +#define GPM_CHECK_NORM(result, c, x)\ + {\ + if (threshold <= 0) result = false;\ + else\ + {\ + double X;\ + GPM_GET_NORM2(X, c);\ + result = (4*X < (double)x*threshold);\ + }\ + } +#define GPM_CHECK_DIST(result, c1, c2, x)\ + {\ + if (threshold <= 0) result = false;\ + else\ + {\ + double X;\ + GPM_GET_DIST2(X, c1, c2);\ + result = (4*X < (double)x*threshold);\ + }\ + } + + double Norm2(REAL* coord) { double norm2; GPM_GET_NORM2(norm2, coord); return norm2; } + REAL Norm(REAL* coord) { REAL norm; GPM_GET_NORM (norm, coord); return norm; } + double Dist2(REAL* coord1, REAL* coord2) { double dist2; GPM_GET_DIST2(dist2, coord1, coord2); return dist2; } + double Dist2(PointId p, PointId q) { return Dist2(coords+DIM*p, coords+DIM*q); } + + void CompleteInitialMatching(); // add edges so that a perfect matching is guaranteed to exist + void InitKNN(int K); + void InitDelaunay(); + + REAL ComputeCost(PointId* matching); +}; + +inline GeomPerfectMatching::REAL GeomPerfectMatching::Dist(REAL* coord1, REAL* coord2) +{ + REAL dist; + GPM_GET_DIST (dist, coord1, coord2); + return dist; +} + +inline GeomPerfectMatching::REAL GeomPerfectMatching::Dist(PointId p, PointId q) +{ + return Dist(coords+DIM*p, coords+DIM*q); +} + +#endif diff --git a/src/blossom5/GRAPH1.TXT b/src/blossom5/GRAPH1.TXT new file mode 100644 index 0000000..13ec532 --- /dev/null +++ b/src/blossom5/GRAPH1.TXT @@ -0,0 +1,10 @@ +6 9 +0 1 3 +0 3 10 +0 4 7 +1 2 -1 +1 4 5 +1 5 4 +2 5 -7 +3 4 0 +4 5 4 diff --git a/src/blossom5/GRAPH2.TXT b/src/blossom5/GRAPH2.TXT new file mode 100644 index 0000000..b3e487f --- /dev/null +++ b/src/blossom5/GRAPH2.TXT @@ -0,0 +1,11 @@ +c example of a graph in DIMACS format +p edge 6 9 +e 1 2 3 +e 1 4 10 +e 1 5 7 +e 2 3 -1 +e 2 5 5 +e 2 6 4 +e 3 6 -7 +e 4 5 0 +e 5 6 4 diff --git a/src/blossom5/LCA.h b/src/blossom5/LCA.h new file mode 100644 index 0000000..3426f7e --- /dev/null +++ b/src/blossom5/LCA.h @@ -0,0 +1,297 @@ +/* + +LCA.h - Imlementation of LCA data structure described in + +O. Berkman, U. Vishkin: Recursive Star-Tree Parallel Data Structure. SIAM J. Comput. 22(2): 221-242 (1993) + +It takes O(n \log n) space (and O(n \log n) time for construction). The memory requirement can be +reduced to O(n) by defining LCA_BLOCKS. The implementation then follows the approach described in + +J. Fischer, V. Heun: Theoretical and Practical Improvements on the RMQ-Problem, with Applications to LCA and LCE. + Proceedings of the 17th Annual Symposium on Combinatorial Pattern Matching + (CPM'06), Lecture Notes in Computer Science 4009, 36-48, Springer-Verlag, 2006. + +(although in-block queries are computed naively in O(K) worst-case time, where K is the size of the block, +rather than as described by Fischer and Heun). + +Written by Vladimir Kolmogorov, vnk@adastral.ucl.ac.uk. + +// example for +// 4 +// / \ +// 2 3 +// / \ +// 0 1 +// (Note: the ordering of nodes is in the tree preorder!!!) + + LCATree* lca = new LCATree(5); + char A0, A1, A2, A3, A4; + + lca->Add(&A0, &A2); + lca->Add(&A1, &A2); + lca->Add(&A2, &A4); + lca->Add(&A3, &A4); + lca->AddRoot(&A4); + + int result = lca->GetLCA(1, 3); // should be 4 + delete lca; + + +*/ + +#ifndef GNAKDLATHJSTHAJSRNAKSJDA +#define GNAKDLATHJSTHAJSRNAKSJDA + +#include +#include +#include +#include + +//#define LCA_BLOCKS + +class LCATree +{ +public: + typedef void* NodeId; // can be any type, e.g. int. (The code checks NodeId's only for equalities.) + typedef int PreorderId; + + LCATree(int node_num_max); + ~LCATree(); + + // construct tree. Nodes must be added in the tree preorder!!! + // First call returns 0, second returns 1, and so on. + PreorderId Add(NodeId i, NodeId i_parent); + PreorderId AddRoot(NodeId i); // completes tree construction + + PreorderId GetLCA(PreorderId i, PreorderId j); + // Let i0=i, j0=j be the input nodes, and let r = LCA(i0,j0). + // This function sets i and j to be the immediate children of r + // such that i is a descendant of i0 and j is a descendant of j0. + // There must hold i0!=r, j0!=r. + void GetPenultimateNodes(PreorderId& i, PreorderId& j); + + +////////////////////////////////////////////////////////////////////////// +private: + int n, n_max, K, k_max; + int** array; + + NodeId* buf0; + int* buf1; + NodeId* parent_current; + int* child_current; + + int* parents; + + int _GetLCA(int i, int j); // same as GetLCA, but assumes that i 0) { K ++; n /= 2; } + if (K < 1) K = 1; +#else + K = 1; + n = 0; +#endif + parents = new int[n_max]; + buf0 = new NodeId[n_max]; + buf1 = new int[n_max]; + parent_current = buf0; + child_current = buf1; +} + +inline LCATree::~LCATree() +{ + int k; + delete [] parents; + if (buf0) delete [] buf0; + if (buf1) delete [] buf1; + if (array) + { + for (k=1; k<=k_max; k++) delete [] array[k]; + delete [] array; + } +} + +inline LCATree::PreorderId LCATree::Add(NodeId i, NodeId i_parent) +{ + assert(n < n_max); + + if (n == 0) + { + *parent_current = i; + *(++ parent_current) = i_parent; + parents[0] = -1; + } + else + { + if (i == *parent_current) + { + int c = *child_current --; + while ( 1 ) + { + int c_next = parents[c]; + parents[c] = n; + if (c_next < 0) break; + c = c_next; + } + parent_current --; + } + if (i_parent == *parent_current) parents[n] = *child_current; + else + { + *(++ parent_current) = i_parent; + parents[n] = -1; + child_current ++; + } + } + *child_current = n; + return n ++; +} + + +inline LCATree::PreorderId LCATree::AddRoot(NodeId i) +{ + assert(n < n_max); + + if (n > 0) + { + if (i != *parent_current || parent_current != buf0+1) + { + printf("Error in LCATree construction: wrong sequence of calls!\n"); + exit(1); + } + int c = *child_current --; + while ( 1 ) + { + int c_next = parents[c]; + parents[c] = n; + if (c_next < 0) break; + c = c_next; + } + child_current ++; + } + parents[n++] = -1; + + delete [] buf0; + buf0 = NULL; + delete [] buf1; + buf1 = NULL; + + // initialize array + int b, k = 1, block_num = (n-1)/K+1; + if (block_num < 3) return n-1; + int d = (block_num-1)/4; + while (d) { k ++; d >>= 1; } + k_max = k; + + array = new int*[k_max+1]; + array[0] = parents; + for (k=1, d=2; k<=k_max; k++, d*=2) + { + array[k] = new int[block_num-d]; + if (k == 1) + { + for (b=0; b j) ? i : j; + } + } + } + + return n-1; +} + +/////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////// + +inline int LCATree::GetLCADirect(int i, int j) +{ + while (i < j) i = parents[i]; + return i; +} + + +inline int LCATree::_GetLCA(int i, int j) +{ +#ifdef LCA_BLOCKS + + int bi = i/K, bj = j/K; + if (bi == bj) return GetLCADirect(i, j); + int i_last = (bi+1)*K-1, j_first = bj*K; + i = GetLCADirect(i, i_last); + j = GetLCADirect(j_first, j); + if (i < j) i = j; + // set j = LCA(i_last, j_first) + if (j_first - i_last == 1) j = parents[i_last]; + else + { + int k = 1, d = (bj-bi)/4; + while (d) { k ++; d >>= 1; } + int diff = 1<bj-diff); + j = (array[k][bi] > array[k][bj-diff]) ? array[k][bi] : array[k][bj-diff]; + } + return (i > j) ? i : j; + +#else + + if (j == i) return i; + + int k = 0, d = (j-i)/2; + while (d) { k ++; d >>= 1; } + int diff = 1<j-diff); + return (array[k][i] > array[k][j-diff]) ? array[k][i] : array[k][j-diff]; + +#endif +} + +/////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////// + +inline LCATree::PreorderId LCATree::GetLCA(PreorderId i, PreorderId j) +{ + if (i > j) { PreorderId k = i; i = j; j = k; } + return _GetLCA(i, j); +} + +inline void LCATree::GetPenultimateNodes(PreorderId& _i, PreorderId& _j) +{ + int i, j, d, swap; + if (_i < _j) { i = _i; j = _j; swap = 0; } + else { i = _j; j = _i; swap = 1; } + int r = _GetLCA(i, j); + assert(i!=r && j!=r); + while (parents[i] != r) + { + int i0 = parents[i]; + d = (j - i0)/2; + while ( (i=_GetLCA(i0, i0+d)) == r ) d /= 2; + } + while (parents[j] != r) + { + int j0 = parents[j]; + d = (r - j0)/2; + while ( (j=_GetLCA(j0, j0+d)) == r ) d /= 2; + } + if (swap == 0) { _i = i; _j = j; } + else { _j = i; _i = j; } +} + +#endif diff --git a/src/blossom5/LICENSE.TXT b/src/blossom5/LICENSE.TXT new file mode 100644 index 0000000..0331c36 --- /dev/null +++ b/src/blossom5/LICENSE.TXT @@ -0,0 +1,22 @@ +Copyright 2008-2009 Vladimir Kolmogorov (vnk@adastral.ucl.ac.uk) + +This software can be used for research and evaluation purposes only. Commercial use is prohibited. +Public redistribution of the code or its derivatives is prohibited. +If you use this software for research purposes, you should cite the following paper in any resulting publication: + Vladimir Kolmogorov. "Blossom V: A new implementation of a minimum cost perfect matching algorithm." + In Mathematical Programming Computation (MPC), July 2009, 1(1):43-67. + +For commercial use of the software not covered by this agreement, please contact the author. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + diff --git a/src/blossom5/Makefile b/src/blossom5/Makefile new file mode 100644 index 0000000..3eb5cf1 --- /dev/null +++ b/src/blossom5/Makefile @@ -0,0 +1,21 @@ +DIRS := . MinCost GEOM + +SOURCES := $(foreach dir, $(DIRS), $(wildcard $(dir)/*.cpp)) +OBJS := $(patsubst %.cpp, %.o, $(SOURCES)) + +CFLAGS := -O5 -D_NDEBUG +CC := c++ +LIBS := -lrt +INCLUDES := +LIBDIR := + +all: blossom5 + +blossom5: ${OBJS} + ${CC} ${CFLAGS} ${LIBDIR} -o $@ ${OBJS} ${LIBS} + +.cpp.o: + $(CC) $(CFLAGS) ${INCLUDES} $< -c -o $@ + +clean: + rm -f ${OBJS} blossom5 diff --git a/src/blossom5/MinCost/MinCost.cpp b/src/blossom5/MinCost/MinCost.cpp new file mode 100644 index 0000000..4ac5434 --- /dev/null +++ b/src/blossom5/MinCost/MinCost.cpp @@ -0,0 +1,287 @@ +#include +#include +#include +#include "blossom5/MinCost/MinCost.h" + + +template + MinCost::MinCost(int _nodeNum, int _edgeNumMax, void (*err_function)(const char *)) + : nodeNum(_nodeNum), + edgeNum(0), + edgeNumMax(_edgeNumMax), + counter(0), + cost(0), + error_function(err_function) +{ + nodes = (Node*) malloc(nodeNum*sizeof(Node)); + arcs = (Arc*) malloc(2*edgeNumMax*sizeof(Arc)); + if (!nodes || !arcs) { if (error_function) (*error_function)("Not enough memory!"); exit(1); } + + memset(nodes, 0, nodeNum*sizeof(Node)); + memset(arcs, 0, 2*edgeNumMax*sizeof(Arc)); + firstActive = &nodes[nodeNum]; +#ifdef MINCOST_DEBUG + for (int i=0; i + MinCost::~MinCost() +{ + free(nodes); + free(arcs); +} + +template + void MinCost::Init() +{ + Node* i; + Arc* a; + + for (a=arcs; ar_cap > 0 && a->GetRCost() < 0) PushFlow(a, a->r_cap); + } + + Node** lastActivePtr = &firstActive; + for (i=nodes; iexcess > 0) + { + *lastActivePtr = i; + lastActivePtr = &i->next; + } + else i->next = NULL; + } + *lastActivePtr = &nodes[nodeNum]; +} + + +template + FlowType MinCost::Augment(Node* start, Node* end) +{ + FlowType delta = (start->excess < -end->excess) ? start->excess : -end->excess; + Arc* a; + + for (a=end->parent; a; a=a->sister->head->parent) + { + if (delta > a->r_cap) delta = a->r_cap; + } + assert(delta > 0); + + end->excess += delta; + for (a=end->parent; a; a=a->head->parent) + { + DecreaseRCap(a, delta); + a = a->sister; + IncreaseRCap(a, delta); + } + start->excess -= delta; + + return delta; +} + +template + void MinCost::Dijkstra(Node* start) +{ + assert(start->excess > 0); + + Node* i; + Node* j; + Arc* a; + CostType d; + Node* permanentNodes; + + int FLAG0 = ++ counter; // permanently labeled nodes + int FLAG1 = ++ counter; // temporarily labeled nodes + + start->parent = NULL; + start->flag = FLAG1; + queue.Reset(); + queue.Add(start, 0); + + permanentNodes = NULL; + + while ( (i=queue.RemoveMin(d)) ) + { + if (i->excess < 0) + { + FlowType delta = Augment(start, i); + cost += delta*(d - i->pi + start->pi); + for (i=permanentNodes; i; i=i->next_permanent) i->pi += d; + break; + } + + i->pi -= d; + i->flag = FLAG0; + i->next_permanent = permanentNodes; + permanentNodes = i; + + for (a=i->firstNonsaturated; a; a=a->next) + { + j = a->head; + if (j->flag == FLAG0) continue; + d = a->GetRCost(); + if (j->flag == FLAG1) + { + if (d >= queue.GetKey(j)) continue; + queue.DecreaseKey(j, d); + } + else + { + queue.Add(j, d); + j->flag = FLAG1; + } + j->parent = a; + } + + } +} + + +template + CostType MinCost::Solve() +{ + Node* i; + //Init(); + while ( 1 ) + { + i = firstActive; + if (i == &nodes[nodeNum]) break; + firstActive = i->next; + i->next = NULL; + if (i->excess > 0) + { + Dijkstra(i); + if (i->excess > 0 && !i->next) + { + i->next = firstActive; + firstActive = i; + } + } + } +#ifdef MINCOST_DEBUG + TestOptimality(); + TestCosts(); +#endif + + return cost; +} + + +template + void MinCost::TestOptimality() +{ + Node* i; + Arc* a; + + for (i=nodes; iexcess != 0) + { + assert(0); + } + for (a=i->firstSaturated; a; a=a->next) + { + if (a->r_cap != 0) + { + assert(0); + } + } + for (a=i->firstNonsaturated; a; a=a->next) + { + CostType c = a->GetRCost(); + if (a->r_cap <= 0 || a->GetRCost() < -1e-5) + { + assert(0); + } + } + } +} + +#ifdef MINCOST_DEBUG + +template + void MinCost::TestCosts() +{ + Arc* a; + + CostType _cost = 0; + + for (a=arcs; ar_cap + a->sister->r_cap == a->cap_orig + a->sister->cap_orig); + _cost += a->cost*(a->cap_orig - a->r_cap); + } + + CostType delta = cost - _cost; + if (delta < 0) delta = -delta; + if (delta >= 1e-5) + { + assert(0); + } +} + +#endif + + + + +/////////////////////////////////////////////////////////////////////////////////////// + +#define FLOW_INFTY ((int)0x00fffffff) + +template + DualMinCost::DualMinCost(int _nodeNum, int _edgeNumMax) + : MinCost(_nodeNum+1, _edgeNumMax+2*_nodeNum) +{ + source = _nodeNum; +} + +template + DualMinCost::~DualMinCost() +{ +} + +template + void DualMinCost::AddUnaryTerm(NodeId i, int objective_coef) +{ + MinCost::AddNodeExcess(i, objective_coef); + MinCost::AddNodeExcess(source, -objective_coef); +} + +template + void DualMinCost::SetLowerBound(NodeId i, CostType cmin) +{ + AddEdge(i, source, FLOW_INFTY, 0, -cmin); +} + +template + void DualMinCost::SetUpperBound(NodeId i, CostType cmax) +{ + AddEdge(source, i, FLOW_INFTY, 0, cmax); +} + +template + void DualMinCost::AddConstraint(NodeId i, NodeId j, CostType cmax) +{ + AddEdge(i, j, FLOW_INFTY, 0, cmax); +} + +template + void DualMinCost::Solve() +{ + MinCost::Solve(); +} + +template + CostType DualMinCost::GetSolution(NodeId i) +{ + return MinCost::nodes[source].pi - MinCost::nodes[i].pi; +} + + + +#include "blossom5/MinCost/instances.inc" + + diff --git a/src/blossom5/MinCost/MinCost.h b/src/blossom5/MinCost/MinCost.h new file mode 100644 index 0000000..fa3bc91 --- /dev/null +++ b/src/blossom5/MinCost/MinCost.h @@ -0,0 +1,504 @@ +/* + MinCost.h - successive shortest path algorithm of Ford and Fulkerson for solving a minimum cost flow problem + + Copyright 2008 Vladimir Kolmogorov (vnk@adastral.ucl.ac.uk) + + This software can be used for research purposes only. Commercial use is prohibited. + Public redistribution of the code or its derivatives is prohibited. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + + +#ifndef __MINCOST_H__ +#define __MINCOST_H__ + +#include +#include + +// if GRAPH_ASSERT is defined then all calls to graph construction functions are assert'ed for correctness +// (e.g. that node_id's are valid id's and edge capacities are non-negative). +//#define GRAPH_ASSERT + +//#define MINCOST_DEBUG + + + +template class MinCost +{ +public: + typedef int NodeId; + typedef int EdgeId; + + MinCost(int NodeNum, int edgeNumMax, void (*err_function)(const char *) = NULL); + + // Destructor + ~MinCost(); + + void AddNodeExcess(NodeId i, FlowType excess); + + // first call returns 0, second 1, and so on. + // cap, rev_cap must be non-negative. + // cost can be negative. + EdgeId AddEdge(NodeId i, NodeId j, FlowType cap, FlowType rev_cap, CostType cost); + + CostType Solve(); + + /////////////////////////////////////////////////// + + FlowType GetRCap(EdgeId e); + void SetRCap(EdgeId e, FlowType new_rcap); + FlowType GetReverseRCap(EdgeId e); + void SetReverseRCap(EdgeId e, FlowType new_rcap); + void PushFlow(EdgeId e, FlowType delta); + void UpdateCost(EdgeId e, FlowType cap_orig, CostType delta); + + CostType GetDual(NodeId i) { return nodes[i].pi; } + +///////////////////////////////////////////////////////////////////////// +///////////////////////////////////////////////////////////////////////// +///////////////////////////////////////////////////////////////////////// + +protected: + // internal variables and functions + + struct Node; + struct Arc; + + struct Node + { + Arc *firstNonsaturated; + Arc *firstSaturated; + + Arc *parent; + Node *next; // list of nodes with positive excesses + + FlowType excess; + CostType pi; + int flag; + union + { + int heap_ptr; + Node* next_permanent; + }; +#ifdef MINCOST_DEBUG + int id; +#endif + }; + + struct Arc + { + Node *head; + Arc *prev; + Arc *next; + Arc *sister; // reverse arc + + FlowType r_cap; // residual capacity +#ifdef MINCOST_DEBUG + FlowType cap_orig; +#endif + CostType cost; + CostType GetRCost() { return cost + head->pi - sister->head->pi; } + }; + + int nodeNum, edgeNum, edgeNumMax; + Node *nodes; + Arc *arcs; + Node* firstActive; + int counter; + CostType cost; + + + void (*error_function)(const char *); // this function is called if a error occurs, + // with a corresponding error message + // (or exit(1) is called if it's NULL) + + ///////////////////////////////////////////////////////////////////////// + + struct PriorityQueue + { + PriorityQueue(); + ~PriorityQueue(); + void Reset(); + CostType GetKey(Node* i); + void Add(Node* i, CostType key); + void DecreaseKey(Node* i, CostType key); + Node* RemoveMin(CostType& key); + + private: + struct Item + { + Node* i; + CostType key; + }* array; + int N, arraySize; + void Swap(int k1, int k2); + }; + + PriorityQueue queue; + + ///////////////////////////////////////////////////////////////////////// + + void SetRCap(Arc* a, FlowType new_rcap); + void PushFlow(Arc* a, FlowType delta); + + void Init(); + void DecreaseRCap(Arc* a, FlowType delta); + void IncreaseRCap(Arc* a, FlowType delta); + FlowType Augment(Node* start, Node* end); + void Dijkstra(Node* start); + + void TestOptimality(); +#ifdef MINCOST_DEBUG + void TestCosts(); +#endif +}; + + +template class DualMinCost : private MinCost +{ +public: + typedef int NodeId; + DualMinCost(int node_num, int constraint_num_max); + ~DualMinCost(); + + void AddUnaryTerm(NodeId i, int objective_coef); + void SetLowerBound(NodeId, CostType cmin); + void SetUpperBound(NodeId, CostType cmax); + void AddConstraint(NodeId i, NodeId j, CostType cmax); // xj - xi <= cmax + + void Solve(); + CostType GetSolution(NodeId i); + +private: + NodeId source; +}; + + + + + + + + + +/////////////////////////////////////// +// Implementation - inline functions // +/////////////////////////////////////// + + + +template + inline void MinCost::AddNodeExcess(NodeId _i, FlowType excess) +{ + assert(_i>=0 && _i 0 && !nodes[_i].next) + { + nodes[_i].next = firstActive; + firstActive = &nodes[_i]; + } +} + +template + inline typename MinCost::EdgeId MinCost::AddEdge(NodeId _i, NodeId _j, FlowType cap, FlowType rev_cap, CostType cost) +{ + assert(_i>=0 && _i=0 && _j= 0); + assert(rev_cap >= 0); + + Arc *a = &arcs[2*edgeNum]; + Arc *a_rev = a+1; + edgeNum ++; + + Node* i = nodes + _i; + Node* j = nodes + _j; + + a -> sister = a_rev; + a_rev -> sister = a; + if (cap > 0) + { + if (i->firstNonsaturated) i->firstNonsaturated->prev = a; + a -> next = i -> firstNonsaturated; + i -> firstNonsaturated = a; + } + else + { + if (i->firstSaturated) i->firstSaturated->prev = a; + a -> next = i -> firstSaturated; + i -> firstSaturated = a; + } + a->prev = NULL; + if (rev_cap > 0) + { + if (j->firstNonsaturated) j->firstNonsaturated->prev = a_rev; + a_rev -> next = j -> firstNonsaturated; + j -> firstNonsaturated = a_rev; + } + else + { + if (j->firstSaturated) j->firstSaturated->prev = a_rev; + a_rev -> next = j -> firstSaturated; + j -> firstSaturated = a_rev; + } + a_rev->prev = NULL; + + a -> head = j; + a_rev -> head = i; + a -> r_cap = cap; + a_rev -> r_cap = rev_cap; + a -> cost = cost; + a_rev -> cost = -cost; +#ifdef MINCOST_DEBUG + a->cap_orig = cap; + a_rev->cap_orig = rev_cap; +#endif + + if (a->r_cap > 0 && a->GetRCost() < 0) PushFlow(a, a->r_cap); + if (a_rev->r_cap > 0 && a_rev->GetRCost() < 0) PushFlow(a_rev, a_rev->r_cap); + + return edgeNum-1; +} + +/////////////////////////////////////// +/////////////////////////////////////// +/////////////////////////////////////// + +template + inline void MinCost::DecreaseRCap(Arc* a, FlowType delta) +{ + a->r_cap -= delta; + if (a->r_cap == 0) + { + Node* i = a->sister->head; + if (a->next) a->next->prev = a->prev; + if (a->prev) a->prev->next = a->next; + else i->firstNonsaturated = a->next; + a->next = i->firstSaturated; + if (a->next) a->next->prev = a; + a->prev = NULL; + i->firstSaturated = a; + } +} + +template + inline void MinCost::IncreaseRCap(Arc* a, FlowType delta) +{ + if (a->r_cap == 0) + { + Node* i = a->sister->head; + if (a->next) a->next->prev = a->prev; + if (a->prev) a->prev->next = a->next; + else i->firstSaturated = a->next; + a->next = i->firstNonsaturated; + if (a->next) a->next->prev = a; + a->prev = NULL; + i->firstNonsaturated = a; + } + a->r_cap += delta; +} + +template + inline FlowType MinCost::GetRCap(EdgeId e) +{ + Arc* a = &arcs[2*e]; + return a->r_cap; +} + +template + inline void MinCost::SetRCap(Arc* a, FlowType new_rcap) +{ + assert(new_rcap >= 0); +#ifdef MINCOST_DEBUG + a->cap_orig += new_rcap - a->r_cap; +#endif + if (a->r_cap == 0) + { + Node* i = a->sister->head; + if (a->next) a->next->prev = a->prev; + if (a->prev) a->prev->next = a->next; + else i->firstSaturated = a->next; + a->next = i->firstNonsaturated; + if (a->next) a->next->prev = a; + a->prev = NULL; + i->firstNonsaturated = a; + } + a->r_cap = new_rcap; + if (a->r_cap == 0) + { + Node* i = a->sister->head; + if (a->next) a->next->prev = a->prev; + if (a->prev) a->prev->next = a->next; + else i->firstNonsaturated = a->next; + a->next = i->firstSaturated; + if (a->next) a->next->prev = a; + a->prev = NULL; + i->firstSaturated = a; + } +} + +template + inline void MinCost::SetRCap(EdgeId e, FlowType new_rcap) +{ + SetRCap(&arcs[2*e], new_rcap); +} + +template + inline FlowType MinCost::GetReverseRCap(EdgeId e) +{ + Arc* a = &arcs[2*e+1]; + return a->r_cap; +} + +template + inline void MinCost::SetReverseRCap(EdgeId e, FlowType new_rcap) +{ + SetRCap(&arcs[2*e+1], new_rcap); +} + +template + inline void MinCost::PushFlow(Arc* a, FlowType delta) +{ + if (delta < 0) { a = a->sister; delta = -delta; } + DecreaseRCap(a, delta); + IncreaseRCap(a->sister, delta); + a->head->excess += delta; + a->sister->head->excess -= delta; + cost += delta*a->cost; + if (a->head->excess > 0 && !a->head->next) + { + a->head->next = firstActive; + firstActive = a->head; + } +} + +template + inline void MinCost::PushFlow(EdgeId e, FlowType delta) +{ + PushFlow(&arcs[2*e], delta); +} + +template + inline void MinCost::UpdateCost(EdgeId e, FlowType cap_orig, CostType delta) +{ + Arc* a = &arcs[2*e]; + cost += delta*(cap_orig-a->r_cap); + a->cost += delta; + a->sister->cost = -a->cost; + + if (a->GetRCost() > 0) a = a->sister; + if (a->r_cap > 0 && a->GetRCost() < 0) PushFlow(a, a->r_cap); +} + +/////////////////////////////////////// +/////////////////////////////////////// +/////////////////////////////////////// + +template + inline MinCost::PriorityQueue::PriorityQueue() +{ + N = 0; + arraySize = 16; + array = (Item*) malloc(arraySize*sizeof(Item)); +} + +template + inline MinCost::PriorityQueue::~PriorityQueue() +{ + free(array); +} + +template + inline void MinCost::PriorityQueue::Reset() +{ + N = 0; +} + +template + inline CostType MinCost::PriorityQueue::GetKey(Node* i) +{ + return array[i->heap_ptr].key; +} + +template + inline void MinCost::PriorityQueue::Swap(int k1, int k2) +{ + Item* a = array+k1; + Item* b = array+k2; + a->i->heap_ptr = k2; + b->i->heap_ptr = k1; + Node* i = a->i; a->i = b->i; b->i = i; + CostType key = a->key; a->key = b->key; b->key = key; +} + +template + inline void MinCost::PriorityQueue::Add(Node* i, CostType key) +{ + if (N == arraySize) + { + arraySize *= 2; + array = (Item*) realloc(array, arraySize*sizeof(Item)); + } + int k = i->heap_ptr = N ++; + array[k].i = i; + array[k].key = key; + while (k > 0) + { + int k2 = (k-1)/2; + if (array[k2].key <= array[k].key) break; + Swap(k, k2); + k = k2; + } +} + +template + inline void MinCost::PriorityQueue::DecreaseKey(Node* i, CostType key) +{ + int k = i->heap_ptr; + array[k].key = key; + while (k > 0) + { + int k2 = (k-1)/2; + if (array[k2].key <= array[k].key) break; + Swap(k, k2); + k = k2; + } +} + +template + inline typename MinCost::Node* MinCost::PriorityQueue::RemoveMin(CostType& key) +{ + if (N == 0) return NULL; + + Swap(0, N-1); + N --; + + int k = 0; + while ( 1 ) + { + int k1 = 2*k + 1, k2 = k1 + 1; + if (k1 >= N) break; + int k_min = (k2 >= N || array[k1].key <= array[k2].key) ? k1 : k2; + if (array[k].key <= array[k_min].key) break; + Swap(k, k_min); + k = k_min; + } + + key = array[N].key; + return array[N].i; +} + + +#endif diff --git a/src/blossom5/MinCost/instances.inc b/src/blossom5/MinCost/instances.inc new file mode 100644 index 0000000..0bebe57 --- /dev/null +++ b/src/blossom5/MinCost/instances.inc @@ -0,0 +1,12 @@ +#include "blossom5/MinCost/MinCost.h" + +#ifdef _MSC_VER +#pragma warning(disable: 4661) +#endif + + +template class MinCost; +template class MinCost; + +template class DualMinCost; +template class DualMinCost; diff --git a/src/blossom5/PMduals.cpp b/src/blossom5/PMduals.cpp new file mode 100644 index 0000000..2ee5a9f --- /dev/null +++ b/src/blossom5/PMduals.cpp @@ -0,0 +1,441 @@ +#include +#include +#include +#include "blossom5/PMimplementation.h" +#include "blossom5/MinCost/MinCost.h" + + +void PerfectMatching::ComputeEpsGlobal() +{ + Node* r; + PriorityQueue::Item* q; + Tree* t; + Tree* t2; + TreeEdge* e; + int i, j, k, N = 0, E = 0; + + for (r=nodes[node_num].tree_sibling_next; r; r=r->tree_sibling_next) + { + t = r->tree; + t->id = N; + N += 2; + for (k=0; k<2; k++) + for (e=t->first[k]; e; e=e->next[k]) E += 6; + } + DualMinCost* m = new DualMinCost(N, E); + for (r=nodes[node_num].tree_sibling_next; r; r=r->tree_sibling_next) + { + t = r->tree; + i = t->id; + m->AddUnaryTerm(i, -1); + m->SetLowerBound(i, 0); + m->AddUnaryTerm(i+1, 1); + m->SetUpperBound(i+1, 0); + + if (t->eps_delta < PM_INFTY) + { + m->SetUpperBound(i, t->eps_delta); + m->SetLowerBound(i+1, -t->eps_delta); + } + for (e=t->first[0]; e; e=e->next[0]) + { + t2 = e->head[0]; + if (t2 == NULL) continue; + j = e->head[0]->id; + if ((q=e->pq01[0].GetMin())) + { + m->AddConstraint(j, i, q->slack - t->eps + t2->eps); + m->AddConstraint(i+1, j+1, q->slack - t->eps + t2->eps); + } + if ((q=e->pq01[1].GetMin())) + { + m->AddConstraint(i, j, q->slack - t2->eps + t->eps); + m->AddConstraint(j+1, i+1, q->slack - t2->eps + t->eps); + } + if ((q=e->pq00.GetMin())) + { + m->AddConstraint(i+1, j, q->slack - t->eps - t2->eps); + m->AddConstraint(j+1, i, q->slack - t->eps - t2->eps); + } + } + } + m->Solve(); + for (r=nodes[node_num].tree_sibling_next; r; r=r->tree_sibling_next) + { + t = r->tree; + i = t->id; + t->eps_delta = (m->GetSolution(i) - m->GetSolution(i+1))/2; + } + delete m; +} + +void PerfectMatching::ComputeEpsSingle() +{ + Node* r; + PriorityQueue::Item* q; + Tree* t; + Tree* t2; + TreeEdge* e; + REAL eps = PM_INFTY; + + for (r=nodes[node_num].tree_sibling_next; r; r=r->tree_sibling_next) + { + t = r->tree; + if (eps > t->eps_delta) eps = t->eps_delta; + for (e=t->first[0]; e; e=e->next[0]) + { + t2 = e->head[0]; + if ((q=e->pq00.GetMin()) && 2*eps > q->slack-t->eps-t2->eps) + { + eps = (q->slack-t->eps-t2->eps)/2; + } + } + } + for (r=nodes[node_num].tree_sibling_next; r; r=r->tree_sibling_next) + { + r->tree->eps_delta = eps; + } +} + + +void PerfectMatching::ComputeEpsCC() +{ + Node* r; + PriorityQueue::Item* q; + Tree* t0; + Tree* t; + Tree* t2; + Tree* t_next; + TreeEdge* e; + REAL eps, eps2; + Tree* queue_last; + int dir; + Tree* FIXED_TREE = trees-1; + int component_num = 0; + TreeEdge** e_ptr; + + for (r=nodes[node_num].tree_sibling_next; r; r=r->tree_sibling_next) + { + t0 = r->tree; + t0->next = NULL; + } + for (r=nodes[node_num].tree_sibling_next; r; r=r->tree_sibling_next) + { + t0 = r->tree; + if (t0->next) continue; + eps = t0->eps_delta; + + t0->next = queue_last = t = t0; + while ( 1 ) + { + for (dir=0; dir<2; dir++) + for (e_ptr=&t->first[dir], e=*e_ptr; e; e=*e_ptr) + { + t2 = e->head[dir]; + if (t2 == NULL) { *e_ptr = e->next[dir]; tree_edges->Delete(e); continue; } + e_ptr = &e->next[dir]; + + REAL eps00 = ((q=e->pq00.GetMin())) ? (q->slack - t->eps - t2->eps) : PM_INFTY; + if (t2->next && t2->next != FIXED_TREE) + { + if (2*eps > eps00) eps = eps00/2; + continue; + } + + REAL eps01[2]; + eps01[dir] = ((q=e->pq01[dir].GetMin())) ? (q->slack - t->eps + t2->eps) : PM_INFTY; + eps01[1-dir] = ((q=e->pq01[1-dir].GetMin())) ? (q->slack - t2->eps + t->eps) : PM_INFTY; + + if (t2->next == FIXED_TREE) eps2 = t2->eps_delta; + else if (eps01[0] > 0 && eps01[1] > 0) eps2 = 0; + else + { + queue_last->next = t2; + queue_last = t2; + t2->next = t2; + if (eps > eps00) eps = eps00; + if (eps > t2->eps_delta) eps = t2->eps_delta; + continue; + } + if (eps > eps00 - eps2) eps = eps00 - eps2; + if (eps > eps2 + eps01[dir]) eps = eps2 + eps01[dir]; + } + + if (t->next == t) break; + t = t->next; + } + for (t=t0; ; t=t_next) + { + t->eps_delta = eps; + t_next = t->next; + t->next = FIXED_TREE; + if (t_next == t) break; + } + component_num ++; + } + //printf("%d CCs ", component_num); +} + + +void PerfectMatching::ComputeEpsSCC() +{ + PriorityQueue::Item* q; + Node* r; + Tree* t0; + Tree* t; + Tree* t2; + TreeEdge* e; + TreeEdge** e_ptr; + REAL eps; + int c, dir; + + for (r=nodes[node_num].tree_sibling_next; r; r=r->tree_sibling_next) + { + t0 = r->tree; + t0->dfs_parent = NULL; + + for (dir=0; dir<2; dir++) + for (e_ptr=&t0->first[dir], e=*e_ptr; e; e=*e_ptr) + { + t2 = e->head[dir]; + if (t2 == NULL) { *e_ptr = e->next[dir]; tree_edges->Delete(e); continue; } + e_ptr = &e->next[dir]; + } + } + Tree* stack = NULL; + + // first DFS + for (r=nodes[node_num].tree_sibling_next; r; r=r->tree_sibling_next) + { + t0 = r->tree; + if (t0->dfs_parent) continue; + t = t0; + e = (t->first[0]) ? t->first[0] : t->first[1]; + t->dfs_parent = (TreeEdge*)trees; + while ( 1 ) + { + if (e == NULL) + { + t->next = stack; + stack = t; + + if (t == t0) break; + + e = t->dfs_parent; + if (t == e->head[0]) { t = e->head[1]; e = (e->next[0]) ? e->next[0] : t->first[1]; } + else { t = e->head[0]; e = e->next[1]; } + continue; + } + + if (e->head[1] == t) + { + if (e->head[0]->dfs_parent || !(q=e->pq01[0].GetMin()) || q->slack - t->eps + e->head[0]->eps > 0) { e = (e->next[0]) ? e->next[0] : t->first[1]; continue; } + t = e->head[0]; + } + else + { + if (e->head[1]->dfs_parent || !(q=e->pq01[1].GetMin()) || q->slack - t->eps + e->head[1]->eps > 0) { e = e->next[1]; continue; } + t = e->head[1]; + } + t->dfs_parent = e; + e = (t->first[0]) ? t->first[0] : t->first[1]; + } + } + + for (r=nodes[node_num].tree_sibling_next; r; r=r->tree_sibling_next) r->tree->dfs_parent = NULL; + + int component_num = 0; + while (stack) + { + t0 = stack; + stack = t0->next; + if (t0->dfs_parent) continue; + t = t0; + e = (t->first[0]) ? t->first[0] : t->first[1]; + t->dfs_parent = (TreeEdge*)trees; + while ( 1 ) + { + if (e == NULL) + { + e = t->dfs_parent; + t->dfs_parent = (TreeEdge*)((char*)trees + component_num); + if (t == t0) break; + if (t == e->head[0]) { t = e->head[1]; e = (e->next[0]) ? e->next[0] : t->first[1]; } + else { t = e->head[0]; e = e->next[1]; } + continue; + } + + if (e->head[1] == t) + { + if (e->head[0]->dfs_parent || !(q=e->pq01[1].GetMin()) || q->slack - e->head[0]->eps + t->eps > 0) { e = (e->next[0]) ? e->next[0] : t->first[1]; continue; } + t = e->head[0]; + } + else + { + if (e->head[1]->dfs_parent || !(q=e->pq01[0].GetMin()) || q->slack - e->head[1]->eps + t->eps > 0) { e = e->next[1]; continue; } + t = e->head[1]; + } + t->dfs_parent = e; + e = (t->first[0]) ? t->first[0] : t->first[1]; + } + component_num ++; + } + + Tree** array = new Tree*[component_num]; + memset(array, 0, component_num*sizeof(Tree*)); + + for (r=nodes[node_num].tree_sibling_next; r; r=r->tree_sibling_next) + { + t = r->tree; + t->id = (int)((char*)t->dfs_parent - (char*)trees); + t->next = array[t->id]; + array[t->id] = t; + } + + for (c=component_num-1; c>=0; c--) + { + eps = PM_INFTY; + for (t=array[c]; t; t=t->next) + { + if (eps > t->eps_delta) eps = t->eps_delta; + FOR_ALL_TREE_EDGES(t, e, dir) + { + t2 = e->head[dir]; + REAL eps00 = (q=e->pq00.GetMin()) ? (q->slack-t->eps-t2->eps) : PM_INFTY; + REAL eps01[2]; + eps01[dir] = ((q=e->pq01[dir].GetMin())) ? (q->slack - t->eps + t2->eps) : PM_INFTY; + eps01[1-dir] = ((q=e->pq01[1-dir].GetMin())) ? (q->slack - t2->eps + t->eps) : PM_INFTY; + if (t2->id < c) + { + if (eps > eps01[dir]) eps = eps01[dir]; + if (eps > eps00) eps = eps00; + } + else if (t2->id == c) + { + if (2*eps > eps00) eps = eps00 / 2; + } + else + { + if (eps > eps01[dir] + t2->eps_delta) eps = eps01[dir] + t2->eps_delta; + if (eps > eps00 - t2->eps_delta) eps = eps00 - t2->eps_delta; + } + } + } + for (t=array[c]; t; t=t->next) t->eps_delta = eps; + } + + delete [] array; + //printf("%d SCCs ", component_num); +} + +void PerfectMatching::CommitEps() +{ + printf("CommitEps()\n"); + Node* i; + Node* j; + Node* r; + int dir; + Edge* a; + EdgeIterator I; + Tree* t; + TreeEdge* e; + TreeEdge** e_ptr; + REAL eps, eps2; + PriorityQueue::Item* q; + + for (r=nodes[node_num].tree_sibling_next; r; r=r->tree_sibling_next) + { + t = r->tree; + eps = t->eps; + + i = r; + while ( 1 ) + { + i->y += eps; + if (!i->is_tree_root) + { + Node* i0 = i; + i = ARC_HEAD(i0->match); + if (i->is_blossom) ARC_TO_EDGE_PTR(i0->match)->slack -= eps; + else i->y -= eps; + FOR_ALL_EDGES(i, a, dir, I) + { + GET_OUTER_HEAD(a, dir, j); + + a->slack += eps; + if (j->flag == 0) a->slack -= j->tree->eps; + } + i = i0; + } + + MOVE_NODE_IN_TREE(i); + } + + t->pq0.Update(-eps); + + PriorityQueue pq00 = t->pq00; + t->pq00.Reset(); + for (q=pq00.GetAndResetFirst(); q; q=pq00.GetAndResetNext()) + { + a = (Edge*)q; + if (ProcessEdge00(a)) t->pq00.Add(a); + } + + for (e_ptr=&t->first[0], e=*e_ptr; e; e=*e_ptr) + { + if (e->head[0] == NULL) { *e_ptr = e->next[0]; tree_edges->Delete(e); continue; } + e_ptr = &e->next[0]; + + eps2 = e->head[0]->eps; + e->pq00.Update( - eps - eps2 ); + } + } + + for (r=nodes[node_num].tree_sibling_next; r; r=r->tree_sibling_next) r->tree->eps = 0; +} + +bool PerfectMatching::UpdateDuals() +{ + Node* r; + + double start_time = get_time(); + + //////////////////////////////////////////////////////////////////////////////////// + for (r=nodes[node_num].tree_sibling_next; r; r=r->tree_sibling_next) + { + Tree* t = r->tree; + PriorityQueue::Item* q; + REAL eps = PM_INFTY; + if ((q=t->pq0.GetMin())) eps = q->slack; + if ((q=t->pq_blossoms.GetMin()) && eps > q->slack) eps = q->slack; + while ((q=t->pq00.GetMin())) + { + if (ProcessEdge00((Edge*)q, false)) break; + t->pq00.Remove(q, pq_buf); + } + if (q && 2*eps > q->slack) eps = q->slack/2; + t->eps_delta = eps - t->eps; + } + + if (tree_num >= options.dual_LP_threshold*node_num) + { + if (options.dual_greedy_update_option == 0) ComputeEpsCC(); + else if (options.dual_greedy_update_option == 1) ComputeEpsSCC(); + else ComputeEpsSingle(); + } + else ComputeEpsGlobal(); + + REAL delta = 0; + for (r=nodes[node_num].tree_sibling_next; r; r=r->tree_sibling_next) + { + if (r->tree->eps_delta > 0) + { + delta += r->tree->eps_delta; + r->tree->eps += r->tree->eps_delta; + } + } + + stat.dual_time += get_time() - start_time; + + return (delta > PM_THRESHOLD); +} diff --git a/src/blossom5/PMexpand.cpp b/src/blossom5/PMexpand.cpp new file mode 100644 index 0000000..2b22c27 --- /dev/null +++ b/src/blossom5/PMexpand.cpp @@ -0,0 +1,303 @@ +#include +#include +#include +#include "blossom5/PMimplementation.h" + + + + +inline void PerfectMatching::ProcessSelfloop(Node* b, Edge* a) +{ + int dir; + Node* j; + Node* prev[2]; + for (dir=0; dir<2; dir++) + { + j = a->head[dir]; + GET_PENULTIMATE_BLOSSOM(j); + prev[dir] = j; + } + if (prev[0] != prev[1]) + { + ADD_EDGE(prev[0], a, 1); + ADD_EDGE(prev[1], a, 0); + a->slack -= 2*prev[0]->blossom_eps; + } + else + { + a->next[0] = prev[0]->blossom_selfloops; + prev[0]->blossom_selfloops = a; + } + +} + + + +void PerfectMatching::Expand(Node* b) +{ + assert(b->is_blossom); + assert(b->is_outer); + assert(b->flag == 1); + + double start_time = get_time(); + + Node* i; + Node* j; + Node* k; + Edge* a; + EdgeIterator I; + int dir; + ExpandTmpItem* tmp_item; + Tree* t = b->tree; + REAL eps = t->eps; + Edge* a_augment = NULL; + + GET_TREE_PARENT(b, i); + a = ARC_TO_EDGE_PTR(b->tree_parent); + dir = ARC_TO_EDGE_DIR(b->tree_parent); + + j = a->head0[1-dir]; + GET_PENULTIMATE_BLOSSOM(j); + MOVE_EDGE(b, j, a, dir); + + a = ARC_TO_EDGE_PTR(b->match); + dir = ARC_TO_EDGE_DIR(b->match); + k = a->head0[1-dir]; + GET_PENULTIMATE_BLOSSOM(k); + MOVE_EDGE(b, k, a, dir); + + i = ARC_HEAD(k->blossom_sibling); + while ( 1 ) + { + tmp_item = expand_tmp_list->New(); + tmp_item->i = i; tmp_item->blossom_parent = i->blossom_parent; tmp_item->blossom_grandparent = i->blossom_grandparent; + i->flag = 2; + + // blossom_selfloops + i->is_outer = 1; + while ((a=i->blossom_selfloops)) + { + i->blossom_selfloops = a->next[0]; + ProcessSelfloop(i, a); + } + i->is_outer = 0; + + if (i == k) break; + i->match = i->blossom_sibling; + j = ARC_HEAD(i->match); + tmp_item = expand_tmp_list->New(); + tmp_item->i = j; tmp_item->blossom_parent = j->blossom_parent; tmp_item->blossom_grandparent = j->blossom_grandparent; + j->flag = 2; + + // blossom_selfloops + j->is_outer = 1; + while ((a=j->blossom_selfloops)) + { + j->blossom_selfloops = a->next[0]; + ProcessSelfloop(j, a); + } + j->is_outer = 0; + + j->match = ARC_REV(i->match); + i = ARC_HEAD(j->blossom_sibling); + } + k->match = b->match; + i = ARC_TAIL(b->tree_parent); + Arc* aa = i->blossom_sibling; + i->flag = 1; i->tree = b->tree; i->y += b->tree->eps; + i->tree_parent = b->tree_parent; + if (i != k) + { + Node** i_ptr; + if (i->match == aa) + { + i = ARC_HEAD(i->match); + i_ptr = &j; + while ( 1 ) + { + aa = i->blossom_sibling; + i->flag = 0; i->tree = b->tree; i->y -= t->eps; + *i_ptr = i; + i_ptr = &i->first_tree_child; + i->tree_sibling_prev = i; + i->tree_sibling_next = NULL; + i = ARC_HEAD(aa); + i->flag = 1; i->tree = b->tree; i->y += t->eps; + i->tree_parent = ARC_REV(aa); + if (i == k) break; + i = ARC_HEAD(i->match); + } + *i_ptr = ARC_HEAD(k->match); + } + else + { + i = k; + j = ARC_HEAD(k->match); + do + { + i->tree_parent = i->blossom_sibling; + i->flag = 1; i->tree = b->tree; i->y += b->tree->eps; + i = ARC_HEAD(i->tree_parent); + i->flag = 0; i->tree = b->tree; i->y -= b->tree->eps; + i->first_tree_child = j; + j = i; + i->tree_sibling_prev = i; + i->tree_sibling_next = NULL; + i = ARC_HEAD(i->match); + } while ( i->flag != 1 ); + } + i = ARC_HEAD(k->match); + + j->tree_sibling_prev = i->tree_sibling_prev; + j->tree_sibling_next = i->tree_sibling_next; + if (i->tree_sibling_prev->tree_sibling_next) i->tree_sibling_prev->tree_sibling_next = j; + else ARC_HEAD(b->tree_parent)->first_tree_child = j; + if (i->tree_sibling_next) i->tree_sibling_next->tree_sibling_prev = j; + else ARC_HEAD(b->tree_parent)->first_tree_child->tree_sibling_prev = j; + + i->tree_sibling_prev = i; + i->tree_sibling_next = NULL; + } + + // go through inner arcs + i = k; + while ( 1 ) + { + // "-" node + if (i->is_blossom) + { + a = ARC_TO_EDGE_PTR(i->match); + REAL tmp = a->slack; a->slack = i->y; i->y = tmp; + t->pq_blossoms.Add(a); + } + FOR_ALL_EDGES(i, a, dir, I) + { + j = a->head[dir]; + if (j->flag != 0) a->slack -= eps; + } + i->is_processed = 1; + if (i->tree_parent == b->tree_parent) break; + i = ARC_HEAD(i->tree_parent); + // "+" node + FOR_ALL_EDGES(i, a, dir, I) + { + j = a->head[dir]; + if (j->flag == 2) + { + a->slack += eps; + t->pq0.Add(a); + } + else if (j->flag == 0 && i < j) + { + a->slack += 2*eps; + t->pq00.Add(a); + } + } + i->is_processed = 1; + i = ARC_HEAD(i->match); + } + + // go through boundary arcs + for (tmp_item=expand_tmp_list->ScanFirst(); tmp_item; tmp_item=expand_tmp_list->ScanNext()) + { + i = tmp_item->i; + j = tmp_item->blossom_parent; tmp_item->blossom_parent = i->blossom_parent; i->blossom_parent = j; + j = tmp_item->blossom_grandparent; tmp_item->blossom_grandparent = i->blossom_grandparent; i->blossom_grandparent = j; + } + for (dir=0; dir<2; dir++) + { + if (!b->first[dir]) continue; + b->first[dir]->prev[dir]->next[dir] = NULL; + + Edge* a_next; + for (a=b->first[dir]; a; a=a_next) + { + a_next = a->next[dir]; + i = a->head0[1-dir]; + GET_PENULTIMATE_BLOSSOM2(i); + ADD_EDGE(i, a, dir); + GET_OUTER_HEAD(a, dir, j); + + if (i->flag == 1) continue; + + if (j->flag == 0 && j->tree != t) j->tree->pq_current->pq01[1-j->tree->dir_current].Remove(a, pq_buf); + + if (i->flag == 2) + { + a->slack += eps; + if (j->flag == 0) j->tree->pq0.Add(a); + } + else + { + a->slack += 2*eps; + if (j->flag == 2) t->pq0.Add(a); + else if (j->flag == 0) + { + if (j->tree != t) + { + if (!j->tree->pq_current) AddTreeEdge(t, j->tree); + if (a->slack <= j->tree->eps + eps) a_augment = a; + } + j->tree->pq_current->pq00.Add(a); + } + else if (j->tree != t) + { + if (!j->tree->pq_current) AddTreeEdge(t, j->tree); + j->tree->pq_current->pq01[j->tree->dir_current].Add(a); + } + + } + } + } + for (tmp_item=expand_tmp_list->ScanFirst(); tmp_item; tmp_item=expand_tmp_list->ScanNext()) + { + i = tmp_item->i; + i->blossom_parent = tmp_item->blossom_parent; + i->blossom_grandparent = tmp_item->blossom_grandparent; + i->is_outer = 1; + } + expand_tmp_list->Reset(); + + b->tree_sibling_next = removed_first; + removed_first = b; + removed_num ++; + if (4*removed_num > node_num) FreeRemoved(); + + blossom_num --; + stat.expand_count ++; + + stat.expand_time += get_time() - start_time; + + if (a_augment) Augment(a_augment); +} + +void PerfectMatching::FreeRemoved() +{ + Node* i0; + Node* i; + for (i0=nodes; i0is_outer && !i->is_marked; i=i->blossom_parent) + { + i->is_marked = 1; + if (i->blossom_grandparent->is_removed) i->blossom_grandparent = i->blossom_parent; + } + } + for (i0=nodes; i0is_outer && i->is_marked; i=i->blossom_parent) + { + i->is_marked = 0; + } + } + + while ((i=removed_first)) + { + removed_first = i->tree_sibling_next; + blossoms->Delete(i); + removed_num --; + } + + assert(removed_num == 0); +} + diff --git a/src/blossom5/PMimplementation.h b/src/blossom5/PMimplementation.h new file mode 100644 index 0000000..f64d26e --- /dev/null +++ b/src/blossom5/PMimplementation.h @@ -0,0 +1,356 @@ +/* + PMimplementation.h + + Copyright 2008 Vladimir Kolmogorov (vnk@adastral.ucl.ac.uk) + + This software can be used for research purposes only. Commercial use is prohibited. + Public redistribution of the code or its derivatives is prohibited. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +#ifndef ASKHAKJSNTJAKSNBBAVASRA +#define ASKHAKJSNTJAKSNBBAVASRA + +#ifdef _MSC_VER +#pragma warning(disable: 4311) +#pragma warning(disable: 4312) +#endif + +#include "blossom5/PerfectMatching.h" +#include "blossom5/timer.h" +#include "blossom5/PQ.h" +#include "blossom5/LCA.h" + + +#define LCA_REPAIRS + + + + +#define IS_INT ( ((REAL)1 / 2) == 0 ) +#define COST_FACTOR 2 + +#define PM_THRESHOLD ((REAL)1e-12) + +struct PerfectMatching::Node +{ + unsigned int is_outer : 1; // 0 - the node is contained in another blossom, 1 - it's the outermost node + unsigned int flag : 2; // 0 corresponds to +, 1 corresponds to -, 2 corresponds to a free node + unsigned int is_tree_root : 1; + unsigned int is_processed : 1; + unsigned int is_blossom : 1; + unsigned int is_marked : 1; + unsigned int is_removed : 1; + + Edge* first[2]; + union + { + Arc* match; // used if not a tree root (is_tree_root = 0) or it's an inner node (is_outer == 0) + Node* blossom_grandparent; + }; + REAL y; + + union + { + struct // used when is_outer = 0 + { + Arc* blossom_sibling; + Node* blossom_parent; + union + { + Edge* blossom_selfloops; + Node* blossom_ptr; // used in repairs +#ifdef LCA_REPAIRS + int lca_preorder; // used in repairs +#endif + }; + REAL blossom_eps; // stores 'eps' of the tree at the moment when the node was shrunk into a blossom. + // (it is used for determining slacks of self-loops) + }; + struct // used when is_outer = 1 + { + union + { + struct // used for "+" nodes (flag = 0) + { + Node* first_tree_child; + Node* tree_sibling_prev; // circular list (with one exception: parent->first_tree_child->tree_sibling_prev->tree_sibling_next is NULL) + Node* tree_sibling_next; + }; + Arc* tree_parent; // used for "-" nodes (flag = 1) + }; + union + { + Tree* tree; + Edge* best_edge; // used during InitGlobal() for non-tree nodes +#ifdef LCA_REPAIRS + int lca_size; // used in repairs + LCATreeX* lca; // used in repairs +#endif + }; + }; + }; +}; + +struct PerfectMatching::Edge : PriorityQueue::Item +{ + Node* head[2]; + Node* head0[2]; + Edge* next[2]; + Edge* prev[2]; +}; + +typedef unsigned long POINTER_TYPE; +// if the declaration below fails, set POINTER_TYPE to be the appropriate integer type of the same length as (void*) +extern char dummy_array[2*(sizeof(void*)==sizeof(POINTER_TYPE))-1]; + +#define ARC_TO_EDGE_PTR(a) ( (Edge*) ( ((POINTER_TYPE)(a)) & (~1) ) ) +#define ARC_TO_EDGE_DIR(a) ( (int) ( ((POINTER_TYPE)(a)) & 1 ) ) +#define EDGE_DIR_TO_ARC(a, dir) ( (Arc*) ( (char*)(a) + (dir)) ) + +#define ARC_REV(a) ( (Arc*) ( ((POINTER_TYPE)(a)) ^ 1 ) ) + +#define ARC_TAIL(a) (ARC_TO_EDGE_PTR(a)->head [1-ARC_TO_EDGE_DIR(a)]) +#define ARC_TAIL0(a) (ARC_TO_EDGE_PTR(a)->head0[1-ARC_TO_EDGE_DIR(a)]) +#define ARC_HEAD(a) (ARC_TO_EDGE_PTR(a)->head [ARC_TO_EDGE_DIR(a)]) +#define ARC_HEAD0(a) (ARC_TO_EDGE_PTR(a)->head0[ARC_TO_EDGE_DIR(a)]) + +struct PerfectMatching::PQPointers +{ + PriorityQueue pq00; // plus-plus edges + union + { + PriorityQueue pq01[2]; // plus-minus, minus-plus edges. Used for tree edges. + struct // used for trees. + { + PriorityQueue pq0; // plus-free edges + PriorityQueue pq_blossoms; + }; + }; +}; + +struct PerfectMatching::Tree : PQPointers +{ + REAL eps; + TreeEdge* first[2]; + Node* root; + + PQPointers* pq_current; + int dir_current; + + ///////////////////////////////////////// + // used while computing dual updates + REAL eps_delta; + Tree* next; + union + { + int id; + TreeEdge* dfs_parent; + }; +}; + +struct PerfectMatching::TreeEdge : PQPointers +{ + Tree* head[2]; + TreeEdge* next[2]; +}; + + + +/////////////////////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////////////////////// + + +#define GET_PENULTIMATE_BLOSSOM(j)\ + {\ + Node* jtmp1 = j;\ + while ( 1 )\ + {\ + if (!j->blossom_grandparent->is_outer) j = j->blossom_grandparent;\ + else if (j->blossom_grandparent != j->blossom_parent) j->blossom_grandparent = j->blossom_parent;\ + else break;\ + }\ + Node* jtmp2;\ + for ( ; jtmp1!=j; jtmp1=jtmp2)\ + {\ + jtmp2 = jtmp1->blossom_grandparent;\ + jtmp1->blossom_grandparent = j;\ + }\ + } +#define GET_PENULTIMATE_BLOSSOM2(j)\ + {\ + Node* jtmp1 = j;\ + Node* jtmp_prev = NULL;\ + while ( 1 )\ + {\ + if (!j->blossom_grandparent->is_outer) { jtmp_prev = j; j = j->blossom_grandparent; }\ + else if (j->blossom_grandparent != j->blossom_parent) j->blossom_grandparent = j->blossom_parent;\ + else break;\ + }\ + if (jtmp_prev)\ + {\ + Node* jtmp2;\ + for ( ; jtmp1!=jtmp_prev; jtmp1=jtmp2)\ + {\ + jtmp2 = jtmp1->blossom_grandparent;\ + jtmp1->blossom_grandparent = jtmp_prev;\ + }\ + }\ + } + + +/////////////////////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////////////////////// + + +struct PerfectMatching::EdgeIterator +{ + Edge* a_last; + int start_flag; +}; + +#define FOR_ALL_EDGES(i, a, dir, I)\ + for ( dir = (i->first[0]) ? 0 : 1, I.a_last = a = i->first[dir], I.start_flag = (a) ? 0 : 1;\ + a != I.a_last || (I.start_flag ++ == 0) || (dir ++ == 0 && (I.a_last = a = i->first[1]));\ + a = a->next[dir] ) + +#define CONTINUE_FOR_ALL_EDGES(i, a, dir, I)\ + for ( a = a->next[dir];\ + a != I.a_last || (I.start_flag ++ == 0) || (dir ++ == 0 && (I.a_last = a = i->first[1]));\ + a = a->next[dir] ) + +#define REMOVE_EDGE(i, a, dir)\ + {\ + if ((a)->prev[dir]==(a)) (i)->first[dir] = NULL;\ + else\ + {\ + (a)->prev[dir]->next[dir] = (a)->next[dir];\ + (a)->next[dir]->prev[dir] = (a)->prev[dir];\ + (i)->first[dir] = (a)->next[dir];\ + }\ + } + +#define ADD_EDGE(i, a, dir)\ + {\ + if ((i)->first[dir])\ + {\ + (a)->prev[dir] = (i)->first[dir]->prev[dir];\ + (a)->next[dir] = (i)->first[dir];\ + (i)->first[dir]->prev[dir]->next[dir] = (a);\ + (i)->first[dir]->prev[dir] = (a);\ + }\ + else (i)->first[dir] = (a)->prev[dir] = (a)->next[dir] = (a);\ + (a)->head[1-(dir)] = (i);\ + } + +#define MOVE_EDGE(i_old, i_new, a, dir)\ + {\ + REMOVE_EDGE(i_old, a, dir);\ + ADD_EDGE(i_new, a, dir);\ + } + +#define GET_OUTER_HEAD(a, dir, j)\ + {\ + j = (a)->head[dir];\ + if (!j->is_outer)\ + {\ + Node* j_orig = j;\ + GET_PENULTIMATE_BLOSSOM(j);\ + j = j->blossom_parent;\ + int dir_rev = 1 - (dir);\ + MOVE_EDGE(j_orig, j, a, dir_rev);\ + }\ + } + +#define GET_TREE_PARENT(child, parent)\ + {\ + Arc* a = (child)->tree_parent;\ + Edge* e = ARC_TO_EDGE_PTR(a);\ + int dir = ARC_TO_EDGE_DIR(a);\ + GET_OUTER_HEAD(e, dir, parent);\ + } + +/////////////////////////////////////////////////////////////////////////////////////////////// + +struct PerfectMatching::TreeEdgeIterator +{ + TreeEdge** e_ptr; +}; + +#define FOR_ALL_TREE_EDGES(t, e, dir)\ + for ( dir = (t->first[0]) ? 0 : 1, e = t->first[dir];\ + e || (dir ++ == 0 && (e = t->first[1]));\ + e = e->next[dir] ) + +#define FOR_ALL_TREE_EDGES_X(t, e, dir, T)\ + for ( dir = (t->first[0]) ? 0 : 1, T.e_ptr = &t->first[dir], e = *T.e_ptr;\ + e || (dir ++ == 0 && (e = *(T.e_ptr = &t->first[1])));\ + e = *T.e_ptr )\ + if (e->head[dir] == NULL) { *T.e_ptr = e->next[dir]; tree_edges->Delete(e); }\ + else if ((T.e_ptr = &e->next[dir])) + +/////////////////////////////////////////////////////////////////////////////////////////////// + +#define MOVE_NODE_IN_TREE(i)\ + {\ + if ((i)->first_tree_child) (i) = (i)->first_tree_child;\ + else\ + {\ + while (!(i)->is_tree_root && !(i)->tree_sibling_next) { (i) = ARC_HEAD((i)->match); GET_TREE_PARENT(i, i); }\ + if ((i)->is_tree_root) break;\ + (i) = (i)->tree_sibling_next;\ + }\ + } + +// i=parent, j=child +#define ADD_TREE_CHILD(i, j)\ + {\ + (j)->flag = 0;\ + (j)->tree = (i)->tree;\ + (j)->first_tree_child = NULL;\ + (j)->tree_sibling_next = (i)->first_tree_child;\ + if ((i)->first_tree_child)\ + {\ + (j)->tree_sibling_prev = (i)->first_tree_child->tree_sibling_prev;\ + (i)->first_tree_child->tree_sibling_prev = j;\ + }\ + else\ + {\ + (j)->tree_sibling_prev = j;\ + }\ + (i)->first_tree_child = j;\ + } + + +#define REMOVE_FROM_TREE(i)\ + {\ + if ((i)->tree_sibling_next) (i)->tree_sibling_next->tree_sibling_prev = (i)->tree_sibling_prev;\ + else\ + {\ + Node* i_NEXT = ARC_HEAD((i)->match); i_NEXT = ARC_HEAD(i_NEXT->tree_parent); i_NEXT = i_NEXT->first_tree_child;\ + i_NEXT->tree_sibling_prev = (i)->tree_sibling_prev;\ + }\ + if ((i)->tree_sibling_prev->tree_sibling_next) (i)->tree_sibling_prev->tree_sibling_next = (i)->tree_sibling_next;\ + else\ + {\ + Node* i_PARENT = ARC_HEAD((i)->match); i_PARENT = ARC_HEAD(i_PARENT->tree_parent);\ + i_PARENT->first_tree_child = (i)->tree_sibling_next;\ + }\ + } + + +#endif + diff --git a/src/blossom5/PMinit.cpp b/src/blossom5/PMinit.cpp new file mode 100644 index 0000000..e68bd1e --- /dev/null +++ b/src/blossom5/PMinit.cpp @@ -0,0 +1,544 @@ +#include +#include +#include +#include "blossom5/PMimplementation.h" + + +void PerfectMatching::InitGreedy(bool allocate_trees) +{ + Node* i; + int dir; + Edge* a; + EdgeIterator I; + Tree* t = NULL; + Node* last_root = &nodes[node_num]; + REAL slack_min; + + for (i=nodes; iy = PM_INFTY; + for (a=edges; ahead[0]->y > a->slack) a->head[0]->y = a->slack; + if (a->head[1]->y > a->slack) a->head[1]->y = a->slack; + } + for (a=edges; ahead[0]; + if (!i->is_outer) + { + i->is_outer = 1; + i->y /= 2; + } + a->slack -= i->y; + i = a->head[1]; + if (!i->is_outer) + { + i->is_outer = 1; + i->y /= 2; + } + a->slack -= i->y; + } + + tree_num = node_num; + for (i=nodes; iflag == 2) continue; + slack_min = PM_INFTY; + FOR_ALL_EDGES(i, a, dir, I) if (slack_min > a->slack) slack_min = a->slack; + i->y += slack_min; + FOR_ALL_EDGES(i, a, dir, I) + { + if (a->slack <= slack_min && i->flag == 0 && a->head[dir]->flag == 0) + { + i->flag = 2; + a->head[dir]->flag = 2; + i->match = EDGE_DIR_TO_ARC(a, dir); + a->head[dir]->match = EDGE_DIR_TO_ARC(a, 1-dir); + tree_num -= 2; + } + a->slack -= slack_min; + } + } + if (allocate_trees) + { + if (tree_num > tree_num_max) + { + if (trees) free(trees); + tree_num_max = tree_num; + trees = (Tree*) malloc(tree_num_max*sizeof(Tree)); + } + t = trees; + } + for (i=nodes; iflag != 0) continue; + i->is_tree_root = 1; + i->first_tree_child = NULL; + i->tree_sibling_prev = last_root; + last_root->tree_sibling_next = i; + last_root = i; + if (allocate_trees) + { + i->tree = t; + t->root = i; + t->eps = 0; + t->first[0] = t->first[1] = NULL; + t->pq_current = NULL; + t->pq00.Reset(); + t->pq0.Reset(); + t->pq_blossoms.Reset(); + t ++; + } + } + last_root->tree_sibling_next = NULL; +} + +//////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////// + +PerfectMatching::Node* PerfectMatching::FindBlossomRootInit(Edge* a0) +{ + Node* i; + Node* j; + Node* _i[2]; + Node* r; + int branch; + + _i[0] = ARC_HEAD(a0); + _i[1] = ARC_TAIL(a0); + branch = 0; + while ( 1 ) + { + if (!_i[branch]->is_outer) + { + r = _i[branch]; + j = _i[1-branch]; + break; + } + _i[branch]->is_outer = 0; + if (_i[branch]->is_tree_root) + { + j = _i[branch]; + i = _i[1-branch]; + while (i->is_outer) + { + i->is_outer = 0; + i = ARC_HEAD(i->match); + i->is_outer = 0; + i = ARC_HEAD(i->tree_parent); + } + r = i; + break; + } + i = ARC_HEAD(_i[branch]->match); + i->is_outer = 0; + _i[branch] = ARC_HEAD(i->tree_parent); + branch = 1 - branch; + } + i = r; + while ( i != j ) + { + i = ARC_HEAD(i->match); + i->is_outer = 1; + i = ARC_HEAD(i->tree_parent); + i->is_outer = 1; + } + return r; +} + +void PerfectMatching::ShrinkInit(Edge* a0, Node* tree_root) +{ + int branch, flag; + Node* i; + Node* j; + Node* r; + Arc* a_prev; + Arc* aa; + + tree_root->flag = 2; + i = tree_root->first_tree_child; + if ( i ) + while ( 1 ) + { + ARC_HEAD(i->match)->flag = 2; + i->flag = 2; + + MOVE_NODE_IN_TREE(i); + } + + r = FindBlossomRootInit(a0); + + if ( !r->is_tree_root ) + { + j = ARC_HEAD(r->match); + j->match = aa = j->tree_parent; + i = ARC_HEAD(aa); + while ( !i->is_tree_root ) + { + j = ARC_HEAD(i->match); + i->match = ARC_REV(aa); + j->match = aa = j->tree_parent; + i = ARC_HEAD(aa); + } + i->match = ARC_REV(aa); + } + + tree_root->is_tree_root = 0; + + branch = 0; + flag = 0; + a_prev = EDGE_DIR_TO_ARC(a0, 0); + i = ARC_HEAD(a_prev); + while ( 1 ) + { + Arc* a_next = (flag == 0) ? i->match : i->tree_parent; + flag = 1 - flag; + i->flag = 0; + i->match = NULL; + if (branch == 0) + { + i->blossom_sibling = a_next; + if (i == r) + { + branch = 1; + flag = 0; + a_prev = ARC_REV(a0); + i = ARC_HEAD(a_prev); + if (i == r) break; + } + else + { + a_prev = i->blossom_sibling; + i = ARC_HEAD(a_prev); + } + } + else + { + i->blossom_sibling = ARC_REV(a_prev); + a_prev = a_next; + i = ARC_HEAD(a_prev); + if (i == r) break; + } + } + i->blossom_sibling = ARC_REV(a_prev); +} + +void PerfectMatching::ExpandInit(Node* k) +{ + Node* i = ARC_HEAD(k->blossom_sibling); + Node* j; + + while ( 1 ) + { + i->flag = 2; i->is_outer = 1; + if (i == k) break; + i->match = i->blossom_sibling; + j = ARC_HEAD(i->match); + j->flag = 2; j->is_outer = 1; + j->match = ARC_REV(i->match); + i = ARC_HEAD(j->blossom_sibling); + } +} + +void PerfectMatching::AugmentBranchInit(Node* i0, Node* r) +{ + Node* tree_root_prev = r->tree_sibling_prev; + Node* i; + Node* j; + Arc* aa; + + r->flag = 2; + i = r->first_tree_child; + if ( i ) + while ( 1 ) + { + ARC_HEAD(i->match)->flag = 2; + i->flag = 2; + + MOVE_NODE_IN_TREE(i); + } + i = i0; + if ( !i0->is_tree_root ) + { + j = ARC_HEAD(i0->match); + j->match = aa = j->tree_parent; + i = ARC_HEAD(aa); + while ( !i->is_tree_root ) + { + j = ARC_HEAD(i->match); + i->match = ARC_REV(aa); + j->match = aa = j->tree_parent; + i = ARC_HEAD(aa); + } + i->match = ARC_REV(aa); + } + r->is_tree_root = 0; + tree_root_prev->tree_sibling_next = r->tree_sibling_next; + if (r->tree_sibling_next) r->tree_sibling_next->tree_sibling_prev = tree_root_prev; + tree_num --; +} + +//////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////// + +// true_slack(a) = slack(a) + ... + +// i->flag=0, i->is_processed=1: true_slack -= eps +// i->flag=1, i->match->head->is_processed=1: true_slack += eps - slack(i->match) + +void PerfectMatching::InitGlobal() +{ + Node* i; + Node* j; + Node* r; + Node* r2; + Node* r3 = NULL; // initialize to prevent compiler warning + Edge* a; + EdgeIterator I; + int dir; + Tree TREE; + enum { NONE, AUGMENT, SHRINK } flag; + + InitGreedy(); + + for (i=nodes; ibest_edge = NULL; + + PriorityQueue pq; + + for (r=nodes[node_num].tree_sibling_next; r; ) + { + r2 = r->tree_sibling_next; + if (r2) r3 = r2->tree_sibling_next; + i = r; + + pq.Reset(); + + r->tree = &TREE; + + REAL eps = 0; + Arc* critical_arc = NULL; + REAL critical_eps = PM_INFTY; + flag = NONE; + Node* branch_root = i; + + while ( 1 ) + { + i->is_processed = 1; + i->y -= eps; + if (!i->is_tree_root) ARC_HEAD(i->match)->y += eps; + + FOR_ALL_EDGES(i, a, dir, I) + { + a->slack += eps; + j = a->head[dir]; + + if (j->tree == &TREE) + { + // same tree + if (j->flag == 0) + { + REAL slack = a->slack; + if (!j->is_processed) slack += eps; + if (2*critical_eps > slack || critical_arc == NULL) + { + flag = SHRINK; + critical_eps = slack/2; + critical_arc = EDGE_DIR_TO_ARC(a, dir); + if (critical_eps <= eps) break; + //pq.DecreaseUpperBound(critical_eps); + } + } + } + else if (j->flag == 0) + { + // different tree + if (critical_eps >= a->slack || critical_arc == NULL) + { + flag = AUGMENT; + critical_eps = a->slack; + critical_arc = EDGE_DIR_TO_ARC(a, dir); + if (critical_eps <= eps) break; + //pq.DecreaseUpperBound(critical_eps); + } + } + else + { + // free node + if (a->slack > eps) + { + if (a->slack < critical_eps) + { + if (j->best_edge == NULL) + { + j->best_edge = a; + pq.Add(a); + } + else + { + if (a->slack < j->best_edge->slack) + { + pq.Decrease(j->best_edge, a, pq_buf); + j->best_edge = a; + } + } + } + } + else + { + assert(j->flag == 2 && !j->is_blossom && !ARC_HEAD(j->match)->is_blossom); + if (j->best_edge) pq.Remove(j->best_edge, pq_buf); + j->flag = 1; + j->tree = i->tree; + j->tree_parent = EDGE_DIR_TO_ARC(a, 1-dir); + j = ARC_HEAD(j->match); + if (j->best_edge) pq.Remove(j->best_edge, pq_buf); + ADD_TREE_CHILD(i, j); + } + } + } + + if (dir < 2 && a) + { + Edge* atmp = a; + int dirtmp = dir; + CONTINUE_FOR_ALL_EDGES(i, atmp, dirtmp, I) atmp->slack += eps; + break; + } + + // move i + if (i->first_tree_child) i = i->first_tree_child; + else + { + while (i != branch_root && !i->tree_sibling_next) { i = ARC_HEAD(i->match); i = ARC_HEAD(i->tree_parent); } + if (i == branch_root) + { + PriorityQueue::Item* q = pq.GetMin(); + if (q == NULL || q->slack >= critical_eps) + { + eps = critical_eps; + break; + } + pq.Remove(q, pq_buf); + a = (Edge*)q; + dir = (a->head[0]->flag == 2) ? 0 : 1; + j = a->head[0]; + Arc* aa = EDGE_DIR_TO_ARC(a, dir); + eps = a->slack; + assert(eps < critical_eps); + + // continue growth + i = ARC_TAIL(aa); + j = ARC_HEAD(aa); + + assert(j->flag == 2 && !j->is_blossom && !ARC_HEAD(j->match)->is_blossom); + j->flag = 1; + j->tree = i->tree; + j->tree_parent = ARC_REV(aa); + j = ARC_HEAD(j->match); + if (j->best_edge) pq.Remove(j->best_edge, pq_buf); + ADD_TREE_CHILD(i, j); + i = branch_root = j; + continue; + } + i = i->tree_sibling_next; + } + } + + // update slacks + i = r; + while ( 1 ) + { + if (i->is_processed) + { + i->y += eps; + if (!i->is_tree_root) + { + j = ARC_HEAD(i->match); + j->y -= eps; + REAL delta = eps - ARC_TO_EDGE_PTR(i->match)->slack; + FOR_ALL_EDGES(j, a, dir, I) a->slack += delta; + j->best_edge = NULL; + } + FOR_ALL_EDGES(i, a, dir, I) + { + if (!PriorityQueue::isReset(a)) + { + assert(a->head[dir]->flag == 2 && a->head[dir]->best_edge == a); + a->head[dir]->best_edge = NULL; + PriorityQueue::ResetItem(a); + } + a->slack -= eps; + } + + i->is_processed = 0; + } + else + { + if (!i->is_tree_root) ARC_HEAD(i->match)->best_edge = NULL; + } + i->best_edge = NULL; + + MOVE_NODE_IN_TREE(i); + } + + i = ARC_TAIL(critical_arc); + j = ARC_HEAD(critical_arc); + if (flag == SHRINK) + { + // shrink + ShrinkInit(ARC_TO_EDGE_PTR(critical_arc), r); + } + else + { + // augment + AugmentBranchInit(i, r); + if (j->is_outer) + { + AugmentBranchInit(j, j); + } + else + { + ExpandInit(j); + tree_num --; + } + i->match = critical_arc; + j->match = ARC_REV(critical_arc); + } + + r = r2; + if (r && !r->is_tree_root) r = r3; + } + + if (tree_num > tree_num_max) + { + if (trees) free(trees); + tree_num_max = tree_num; + trees = (Tree*) malloc(tree_num_max*sizeof(Tree)); + } + Tree* t = trees; + for (r=nodes; ris_outer) + { + ExpandInit(r); + r->is_tree_root = 1; + r->flag = 0; + r->first_tree_child = NULL; + if (t == trees) { nodes[node_num].tree_sibling_next = r; r->tree_sibling_prev = &nodes[node_num]; } + else { (t-1)->root->tree_sibling_next = r; r->tree_sibling_prev = (t-1)->root; } + r->tree = t; + t->root = r; + t->eps = 0; + t->first[0] = t->first[1] = NULL; + t->pq_current = NULL; + t->pq00.Reset(); + t->pq0.Reset(); + t->pq_blossoms.Reset(); + t ++; + } + } + assert(t == trees+tree_num); + if (t == trees) nodes[node_num].tree_sibling_next = NULL; + else (t-1)->root->tree_sibling_next = NULL; +} diff --git a/src/blossom5/PMinterface.cpp b/src/blossom5/PMinterface.cpp new file mode 100644 index 0000000..4cf138c --- /dev/null +++ b/src/blossom5/PMinterface.cpp @@ -0,0 +1,270 @@ +#include +#include +#include +#include "blossom5/PMimplementation.h" + + +PerfectMatching::PerfectMatching(int nodeNum, int edgeNumMax) + : node_num(nodeNum), + edge_num(0), + edge_num_max(edgeNumMax), + trees(NULL), + tree_num_max(0), + removed_first(NULL), + blossom_num(0), + removed_num(0), + first_solve(true) +{ + if (node_num & 1) { printf("# of nodes is odd: perfect matching cannot exist\n"); exit(1); } + nodes = (Node*) malloc((node_num+1)*sizeof(Node)); + edges_orig = (char*) malloc(edge_num_max*sizeof(Edge)+1); + edges = (Edge*) ( ( ((POINTER_TYPE)edges_orig) & 1 ) ? (edges_orig + 1) : edges_orig ); + memset(nodes, 0, (node_num+1)*sizeof(Node)); + + blossoms = new DBlock(256); + tree_edges = new DBlock(256); + expand_tmp_list = new Block(256); + pq_buf = PriorityQueue::AllocateBuf(); +} + + +void PerfectMatching::Save(char* filename, int format) +{ + if (!first_solve) { printf("Save() cannot be called after Solve()!\n"); exit(1); } + int e; + FILE* fp = fopen(filename, "w"); + if (!fp) { printf("Can't open %s\n", filename); exit(1); } + if (format == 0) + { + fprintf(fp, "p edge %d %d\n", node_num, edge_num); + for (e=0; e::DeallocateBuf(pq_buf); +} + + +PerfectMatching::EdgeId PerfectMatching::AddEdge(NodeId _i, NodeId _j, REAL cost) +{ + if (_i<0 || _i>=node_num || _j<0 || _j>node_num || _i==_j) + { + printf("wrong node id's! (%d,%d)\n", _i, _j); exit(1); + } + if (edge_num >= edge_num_max) ReallocateEdges(); + Node* i = nodes + _i; + Node* j = nodes + _j; + Edge* a = edges + edge_num; + + ADD_EDGE(i, a, 0); + ADD_EDGE(j, a, 1); + a->head0[0] = j; + a->head0[1] = i; + + a->slack = cost*COST_FACTOR; + PriorityQueue::ResetItem(a); + + return edge_num ++; +} + +int PerfectMatching::GetSolution(EdgeId e) +{ + assert(e>=0 && ehead0[1]->match == EDGE_DIR_TO_ARC(a, 0)) ? 1 : 0; +} + +PerfectMatching::NodeId PerfectMatching::GetMatch(NodeId i) +{ + assert(i>=0 && ihead0[1]; !i->is_outer; i=i->blossom_parent, delta--) {} + for (j=a->head0[0]; !j->is_outer; j=j->blossom_parent, delta++) {} + if ( i == j ) + { + i = a->head0[1]; + j = a->head0[0]; + while ( delta < 0 ) { i = i->blossom_parent; delta ++; } + while ( delta > 0 ) { j = j->blossom_parent; delta --; } + while ( i->blossom_parent != j->blossom_parent ) + { + i = i->blossom_parent; + j = j->blossom_parent; + } + } + tail = i; + head = j; + assert((i->is_outer && j->is_outer) || (i->blossom_parent==j->blossom_parent && !i->is_outer && !j->is_outer)); +} + +void PerfectMatching::ReallocateEdges() +{ + printf("Warning: reallocating edges. Increasing edge_num_max in the constructor may improve memory efficiency!\n"); + edge_num_max = edge_num_max*3/2 + 16; + char* edges_orig_old = edges_orig; + Edge* edges_old = edges; + edges_orig = (char*) realloc(edges_orig_old, edge_num_max*sizeof(Edge)+1); + edges = (Edge*) ( ( ((POINTER_TYPE)edges_orig_old) & 1 ) ? (edges_orig + 1) : edges_orig ); + if ( ((POINTER_TYPE)edges) & 1 ) + { + char* edges_orig_old2 = edges_orig; + Edge* edges_old2 = edges; + + edges_orig = (char*) malloc(edge_num_max*sizeof(Edge)+1); + edges = (Edge*) ( ( ((POINTER_TYPE)edges_orig_old) & 1 ) ? (edges_orig + 1) : edges_orig ); + memcpy(edges, edges_old2, edge_num*sizeof(Edge)); + free(edges_orig_old2); + } + +#define UPDATE_EDGE_PTR(ptr) ptr = (Edge*)((char*)(ptr) + ((char*)edges - (char*)edges_old)) +#define UPDATE_ARC_PTR(ptr) ptr = (Arc*)((char*)(ptr) + ((char*)edges - (char*)edges_old)) + + Node* i; + Edge* a; + for (a=edges; anext[0]) UPDATE_EDGE_PTR(a->next[0]); + if (a->next[1]) UPDATE_EDGE_PTR(a->next[1]); + if (a->prev[0]) UPDATE_EDGE_PTR(a->prev[0]); + if (a->prev[1]) UPDATE_EDGE_PTR(a->prev[1]); + } + if (first_solve) + { + for (i=nodes; ifirst[0]) UPDATE_EDGE_PTR(i->first[0]); + if (i->first[1]) UPDATE_EDGE_PTR(i->first[1]); + } + } + else + { + Node* i0; + for (i0=nodes; i0is_outer) + { + UPDATE_ARC_PTR(i->match); + if (i->first[0]) UPDATE_EDGE_PTR(i->first[0]); + if (i->first[1]) UPDATE_EDGE_PTR(i->first[1]); + break; + } + UPDATE_ARC_PTR(i->blossom_sibling); + if (i->first[0]) UPDATE_EDGE_PTR(i->first[0]); + if (i->first[1]) UPDATE_EDGE_PTR(i->first[1]); + + i = i->blossom_parent; + if (i->is_outer) { if ( i->is_marked) break; i->is_marked = 1; } + else { if (!i->is_marked) break; i->is_marked = 0; } + } + } + for (i0=nodes; i0is_outer) break; + + i = i->blossom_parent; + if (i->is_outer) { if (!i->is_marked) break; i->is_marked = 0; } + else { if ( i->is_marked) break; i->is_marked = 1; } + } + } + } +} + +int PerfectMatching::GetBlossomNum() +{ + return blossom_num; +} + +void PerfectMatching::GetDualSolution(int* blossom_parents, REAL* twice_y) +{ + int _i0, id = node_num; + int* child_ptr; + Node* i0; + Node* i; + int* tmp_array = new int[blossom_num]; + + int* tmp_array_ptr = tmp_array; + for (_i0=0, i0=nodes; _i0y; + if (i0->is_outer) + { + blossom_parents[_i0] = -1; + continue; + } + child_ptr = &blossom_parents[_i0]; + i = i0->blossom_parent; + while ( 1 ) + { + if (i->is_marked) + { + *child_ptr = i->lca_preorder; + break; + } + i->is_marked = 1; + *tmp_array_ptr ++ = i->lca_preorder; + *child_ptr = i->lca_preorder = id ++; + child_ptr = &blossom_parents[i->lca_preorder]; + twice_y[i->lca_preorder] = i->y; + if (i->is_outer) + { + *child_ptr = -1; + break; + } + i = i->blossom_parent; + } + } + + assert(id == node_num+blossom_num && tmp_array_ptr == tmp_array + blossom_num); + + tmp_array_ptr = tmp_array; + for (_i0=0, i0=nodes; _i0is_outer) continue; + i = i0->blossom_parent; + while ( 1 ) + { + if (!i->is_marked) break; + i->is_marked = 0; + i->lca_preorder = *tmp_array_ptr ++; + if (i->is_outer) break; + i = i->blossom_parent; + } + } + + delete [] tmp_array; +} diff --git a/src/blossom5/PMmain.cpp b/src/blossom5/PMmain.cpp new file mode 100644 index 0000000..097c020 --- /dev/null +++ b/src/blossom5/PMmain.cpp @@ -0,0 +1,694 @@ +#include +#include +#include +#include "blossom5/PMimplementation.h" + + +void PerfectMatching::Finish() +{ + +#define IS_VALID_MATCH(i) ((Edge*)(i->match) >= edges && (Edge*)(i->match) < edges + edge_num) + + Node* i0; + Node* i; + Node* j; + Node* k; + Node* b; + Node* b_prev; + Node* b_prev_prev; + + for (i0=nodes; i0blossom_grandparent = b_prev; + b_prev = b; + b = b->blossom_parent; + } while (!IS_VALID_MATCH(b)); + + b_prev_prev = b_prev->blossom_grandparent; + while ( 1 ) + { + for (k=ARC_TAIL0(b->match); k->blossom_parent!=b; k=k->blossom_parent) {} + k->match = b->match; + i = ARC_HEAD(k->blossom_sibling); + while ( i != k ) + { + i->match = i->blossom_sibling; + j = ARC_HEAD(i->match); + j->match = ARC_REV(i->match); + i = ARC_HEAD(j->blossom_sibling); + } + + b = b_prev; + if (!b->is_blossom) break; + b_prev = b_prev_prev; + b_prev_prev = b_prev->blossom_grandparent; + } + } +} + + +void PerfectMatching::AddTreeEdge(Tree* t0, Tree* t1) +{ + TreeEdge* e = tree_edges->New(); + e->head[0] = t1; + e->head[1] = t0; + e->next[0] = t0->first[0]; + t0->first[0] = e; + e->next[1] = t1->first[1]; + t1->first[1] = e; + + e->pq00.Reset(); + e->pq01[0].Reset(); + e->pq01[1].Reset(); + + t1->pq_current = e; + t1->dir_current = 0; +} + +bool PerfectMatching::ProcessEdge00(Edge* a, bool update_boundary_edge) +{ + int dir; + Node* j; + Node* prev[2]; + Node* last[2]; + for (dir=0; dir<2; dir++) + { + if (a->head[dir]->is_outer) { prev[dir] = NULL; last[dir] = a->head[dir]; } + else + { + j = a->head[dir]; + GET_PENULTIMATE_BLOSSOM(j); + prev[dir] = j; + last[dir] = prev[dir]->blossom_parent; + //assert(last[dir]->is_outer); + } + } + + if (last[0] != last[1]) + { + for (dir=0; dir<2; dir++) + { + j = a->head[dir]; + if (j != last[dir]) { int dir_rev = 1 - dir; MOVE_EDGE(j, last[dir], a, dir_rev); } + } + if (update_boundary_edge) a->slack -= 2*a->head[0]->tree->eps; + return true; + } + + if (prev[0] != prev[1]) + { + for (dir=0; dir<2; dir++) + { + j = a->head[dir]; + if (j != prev[dir]) { int dir_rev = 1 - dir; MOVE_EDGE(j, prev[dir], a, dir_rev); } + } + a->slack -= 2*prev[0]->blossom_eps; + return false; + } + + for (dir=0; dir<2; dir++) + { + j = a->head[1-dir]; + REMOVE_EDGE(j, a, dir); + } + a->next[0] = prev[0]->blossom_selfloops; + prev[0]->blossom_selfloops = a; + return false; +} + + +inline void PerfectMatching::AugmentBranch(Node* i0) +{ + int dir; + Tree* t = i0->tree; + Node* r = t->root; + Node* tree_root_prev = r->tree_sibling_prev; + Node* i; + Node* j; + Edge* a; + EdgeIterator I; + Arc* aa; + REAL eps = t->eps; + PriorityQueue::Item* q; + TreeEdge* e; + TreeEdgeIterator T; + Tree* t2; + + t = r->tree; + t->pq_current = t; + + FOR_ALL_TREE_EDGES_X(t, e, dir, T) + { + t2 = e->head[dir]; + e->head[1-dir] = NULL; // mark it for deletion + + t2->pq_current = e; + t2->dir_current = dir; + } + + i = r->first_tree_child; + if ( i ) + while ( 1 ) + { + Node* i0 = i; + i = ARC_HEAD(i->match); + if (i->is_processed) + { + if (i->is_blossom) + { + a = ARC_TO_EDGE_PTR(i->match); + REAL tmp = a->slack; a->slack = i->y; i->y = tmp; + PriorityQueue::ResetItem(a); + } + FOR_ALL_EDGES(i, a, dir, I) + { + GET_OUTER_HEAD(a, dir, j); + + if (j->flag == 0 && j->is_processed) + { + if (j->tree != t) + { + a->slack += eps; + if (PriorityQueue::isReset(a)) j->tree->pq0.Add(a); + } + } + else a->slack += eps; + } + } + + i = i0; + MOVE_NODE_IN_TREE(i); + } + + /////////////////////////////////////////////////////////////////// + + FOR_ALL_TREE_EDGES(t, e, dir) + { + t2 = e->head[dir]; + t2->pq_current = NULL; + + e->pq01[1-dir].Merge(t2->pq0); + for (q=e->pq00.GetFirst(); q; q=e->pq00.GetNext(q)) + { + q->slack -= eps; + int dir2; + for (dir2=0; dir2<2; dir2++) GET_OUTER_HEAD((Edge*)q, dir2, j); + } + e->pq00.Merge(t2->pq0); + for (q=e->pq01[dir].GetAndResetFirst(); q; q=e->pq01[dir].GetAndResetNext()) + { + q->slack -= eps; + int dir2; + for (dir2=0; dir2<2; dir2++) GET_OUTER_HEAD((Edge*)q, dir2, j); + } + } + for (q=t->pq0.GetAndResetFirst(); q; q=t->pq0.GetAndResetNext()) + { + q->slack -= eps; + int dir2; + for (dir2=0; dir2<2; dir2++) GET_OUTER_HEAD((Edge*)q, dir2, j); + } + for (q=t->pq00.GetAndResetFirst(); q; q=t->pq00.GetAndResetNext()) + { + ProcessEdge00((Edge*)q); + } + + /////////////////////////////////////////////////////////////////// + + r->flag = 2; + r->is_processed = 0; + i = r->first_tree_child; + r->y += eps; + if ( i ) + while ( 1 ) + { + j = ARC_HEAD(i->match); + j->flag = 2; + i->flag = 2; + j->is_processed = 0; + i->is_processed = 0; + j->y -= eps; + i->y += eps; + + MOVE_NODE_IN_TREE(i); + } + + /////////////////////////////////////////////////////////////////// + + i = i0; + if ( !i0->is_tree_root ) + { + j = ARC_HEAD(i0->match); + GET_TREE_PARENT(j, i); + j->match = aa = j->tree_parent; + while ( !i->is_tree_root ) + { + j = ARC_HEAD(i->match); + i->match = ARC_REV(aa); + GET_TREE_PARENT(j, i); + j->match = aa = j->tree_parent; + } + i->match = ARC_REV(aa); + } + r->is_tree_root = 0; + tree_root_prev->tree_sibling_next = r->tree_sibling_next; + if (r->tree_sibling_next) r->tree_sibling_next->tree_sibling_prev = tree_root_prev; + tree_num --; +} + + +void PerfectMatching::Augment(Edge* a) +{ + Node* j; + int dir; + + for (dir=0; dir<2; dir++) + { + GET_OUTER_HEAD(a, dir, j); + AugmentBranch(j); + j->match = EDGE_DIR_TO_ARC(a, 1-dir); + } + if (options.verbose) + { + int k = 1; + while (k < tree_num) k *= 2; + if (k == tree_num || tree_num<=8 || (tree_num<=64 && (tree_num%8)==0)) { printf("%d.", tree_num); fflush(stdout); } + } +} + +inline void PerfectMatching::GrowNode(Node* i) +{ + //assert(i->is_outer); + //assert(i->flag == 0); + + Edge* a; + EdgeIterator I; + int dir; + Node* j; + Tree* t = i->tree; + REAL eps = t->eps; + Edge* a_augment = NULL; + + FOR_ALL_EDGES(i, a, dir, I) + { + GET_OUTER_HEAD(a, dir, j); + + if (j->flag == 2) + { + a->slack += eps; + if (a->slack > 0) + { + t->pq0.Add(a); + } + else + { + j->flag = 1; + j->tree = i->tree; + j->tree_parent = EDGE_DIR_TO_ARC(a, 1-dir); + j->y += eps; + j = ARC_HEAD(j->match); + j->y -= eps; + ADD_TREE_CHILD(i, j); + } + } + else + { + if (j->flag == 0 && j->is_processed) + { + if (!PriorityQueue::isReset(a)) j->tree->pq0.Remove(a, pq_buf); + if (a->slack <= j->tree->eps && j->tree != t) a_augment = a; + a->slack += eps; + if (!j->tree->pq_current) AddTreeEdge(t, j->tree); + j->tree->pq_current->pq00.Add(a); + } + else + { + a->slack += eps; + if (j->flag == 1 && j->tree != t) + { + if (!j->tree->pq_current) AddTreeEdge(t, j->tree); + j->tree->pq_current->pq01[j->tree->dir_current].Add(a); + } + } + } + } + + //assert(!i->is_processed); + i->is_processed = 1; + + if (!i->is_tree_root) + { + j = ARC_HEAD(i->match); + //assert(!j->is_processed); + j->is_processed = 1; + if (j->is_blossom) + { + a = ARC_TO_EDGE_PTR(i->match); + REAL tmp = a->slack; a->slack = j->y; j->y = tmp; + t->pq_blossoms.Add(a); + } + } + + if (a_augment) Augment(a_augment); + + stat.grow_count ++; +} + + + +void PerfectMatching::GrowTree(Node* r, bool new_subtree) +{ + //assert(r->flag == 0); + + Node* i = r; + Node* j; + Node* stop = r->tree_sibling_next; + if (new_subtree && r->first_tree_child) stop = r->first_tree_child; + Edge* a; + EdgeIterator I; + int dir; + Tree* t = r->tree; + REAL eps = t->eps; + int tree_num0 = tree_num; + + while ( 1 ) + { + if (!i->is_tree_root) + { + // process "-" node + i = ARC_HEAD(i->match); + FOR_ALL_EDGES(i, a, dir, I) + { + GET_OUTER_HEAD(a, dir, j); + + if (j->flag == 2) a->slack -= eps; + else + { + if (j->flag == 0 && j->is_processed) + { + if (!PriorityQueue::isReset(a)) j->tree->pq0.Remove(a, pq_buf); + a->slack -= eps; + if (j->tree != t) + { + if (!j->tree->pq_current) AddTreeEdge(t, j->tree); + j->tree->pq_current->pq01[1-j->tree->dir_current].Add(a); + } + } + else a->slack -= eps; + } + } + i = ARC_HEAD(i->match); + } + // process "+" node + GrowNode(i); + if (tree_num != tree_num0) break; + + if (i->first_tree_child) i = i->first_tree_child; + else + { + while (i != r && !i->tree_sibling_next) { i = ARC_HEAD(i->match); GET_TREE_PARENT(i, i); } + i = i->tree_sibling_next; + } + if (i == stop) break; + } +} + +void PerfectMatching::Solve(bool finish) +{ + Node* i; + Node* j; + Node* r; + Node* r2; + Node* r3 = NULL; // initialize to prevent compiler warning + PriorityQueue::Item* q; + Edge* a; + Tree* t; + Tree* t2; + TreeEdge* e; + TreeEdgeIterator T; + int dir; + REAL eps; + + double start_time = get_time(); + + if (IS_INT) + { + if (options.dual_greedy_update_option == 2) + { + printf("Fixed eps approach can only be used with floating point REAL!\n"); + printf("Change REAL to double in PerfectMatching.h and recompile\n"); + exit(1); + } + if (options.dual_LP_threshold > 0) + { + printf("LP approach can only be used with floating point REAL!\n"); + printf("Change REAL to double in PerfectMatching.h and recompile\n"); + exit(1); + } + } + if (options.verbose) { printf("perfect matching with %d nodes and %d edges\n", node_num, edge_num); fflush(stdout); } + + if (first_solve) + { + if (options.verbose) { printf(" starting init..."); fflush(stdout); } + if (options.fractional_jumpstart) InitGlobal(); + else InitGreedy(); + if (options.verbose) printf("done [%.3f secs]. ", get_time() - start_time); + first_solve = false; + } + else if (options.verbose) printf(" solving updated problem. "); + + if (options.verbose) { printf("%d trees\n .", tree_num); fflush(stdout); } + + memset(&stat, 0, sizeof(Stat)); + + /////////////////////////////////////////////////////// + // first pass - initialize auxiliary graph // + /////////////////////////////////////////////////////// + + for (r=nodes[node_num].tree_sibling_next; r; r=r->tree_sibling_next) + { + //assert(!r->is_processed); + t = r->tree; + //assert(!t->first[0] && !t->first[1]); + + EdgeIterator I; + FOR_ALL_EDGES(r, a, dir, I) + { + j = a->head[dir]; + if (j->flag == 2) t->pq0.Add(a); + else if (j->is_processed) + { + //assert(j->flag == 0); + if (!j->tree->pq_current) AddTreeEdge(t, j->tree); + j->tree->pq_current->pq00.Add(a); + } + } + r->is_processed = 1; + FOR_ALL_TREE_EDGES(t, e, dir) e->head[dir]->pq_current = NULL; + } + + /////////////////////////////////////////////////////// + // main loop // + /////////////////////////////////////////////////////// + + while ( 1 ) + { + int tree_num0 = tree_num; + Stat stat0 = stat; + REAL delta = 0; + + for (r=nodes[node_num].tree_sibling_next; r; ) + { + r2 = r->tree_sibling_next; + if (r2) r3 = r2->tree_sibling_next; + t = r->tree; + + int tree_num1 = tree_num; + + ////////////////////////////////////////////////////////////////////// + // step 1 - traversing auxiliary graph, setting pq_current pointers // + ////////////////////////////////////////////////////////////////////// + t->pq_current = t; + if (options.update_duals_before) + { + eps = PM_INFTY; + Edge* a_augment = NULL; + REAL eps_augment = PM_INFTY; + if ((q=t->pq0.GetMin())) eps = q->slack; + if ((q=t->pq_blossoms.GetMin()) && eps > q->slack) eps = q->slack; + while ((q=t->pq00.GetMin())) + { + if (ProcessEdge00((Edge*)q, false)) break; + t->pq00.Remove(q, pq_buf); + } + if (q && 2*eps > q->slack) eps = q->slack/2; + FOR_ALL_TREE_EDGES_X(t, e, dir, T) + { + t2 = e->head[dir]; + t2->pq_current = e; + t2->dir_current = dir; + if ((q=e->pq00.GetMin()) && (!a_augment || eps_augment > q->slack-t2->eps)) { a_augment = (Edge*)q; eps_augment = q->slack-t2->eps; } + if ((q=e->pq01[dir].GetMin()) && eps > q->slack+t2->eps) eps = q->slack+t2->eps; + } + if (eps > eps_augment) eps = eps_augment; + if (eps > t->eps) + { + delta += eps - t->eps; + t->eps = eps; + } + if (a_augment && eps_augment <= t->eps) Augment(a_augment); + } + else + { + FOR_ALL_TREE_EDGES_X(t, e, dir, T) + { + t2 = e->head[dir]; + t2->pq_current = e; + t2->dir_current = dir; + + if ((q=e->pq00.GetMin()) && (q->slack - t->eps <= t2->eps)) + { + Augment((Edge*)q); + break; + } + } + } + + ///////////////////////////////// + // step 2 - growing tree // + ///////////////////////////////// + eps = t->eps; + REAL twice_eps = 2*eps; + + while ( tree_num1 == tree_num ) + { + if ((q=t->pq0.GetMin()) && q->slack <= t->eps) + { + a = (Edge*)q; + dir = (a->head[1]->flag == 2 && a->head[1]->is_outer) ? 1 : 0; + GET_OUTER_HEAD(a, 1-dir, i); + j = a->head[dir]; + //assert(i->flag==0 && j->flag==2 && i->is_outer && j->is_outer && i->tree==t); + + j->flag = 1; + j->tree = i->tree; + j->tree_parent = EDGE_DIR_TO_ARC(a, 1-dir); + j->y += eps; + j = ARC_HEAD(j->match); + j->y -= eps; + ADD_TREE_CHILD(i, j); + + GrowTree(j, true); + } + else if ((q=t->pq00.GetMin()) && q->slack <= twice_eps) + { + t->pq00.Remove(q, pq_buf); + a = (Edge*)q; + if (ProcessEdge00(a)) Shrink(a); + } + else if ((q=t->pq_blossoms.GetMin()) && q->slack <= eps) + { + t->pq_blossoms.Remove(q, pq_buf); + a = (Edge*)q; + j = (a->head[0]->flag == 1) ? a->head[0] : a->head[1]; + REAL tmp = a->slack; a->slack = j->y; j->y = tmp; + Expand(j); + } + else break; + } + + /////////////////////////////////////////////////////////////////////// + // step 3 - traversing auxiliary graph, clearing pq_current pointers // + /////////////////////////////////////////////////////////////////////// + if ( tree_num1 == tree_num ) + { + t->pq_current = NULL; + if (options.update_duals_after) + { + eps = PM_INFTY; + Edge* a_augment = NULL; + REAL eps_augment = PM_INFTY; + if ((q=t->pq0.GetMin())) eps = q->slack; + if ((q=t->pq_blossoms.GetMin()) && eps > q->slack) eps = q->slack; + while ((q=t->pq00.GetMin())) + { + if (ProcessEdge00((Edge*)q, false)) break; + t->pq00.Remove(q, pq_buf); + } + if (q && 2*eps > q->slack) eps = q->slack/2; + FOR_ALL_TREE_EDGES(t, e, dir) + { + t2 = e->head[dir]; + e->head[dir]->pq_current = NULL; + if ((q=e->pq00.GetMin()) && (!a_augment || eps_augment > q->slack-t2->eps)) { a_augment = (Edge*)q; eps_augment = q->slack-t2->eps; } + if ((q=e->pq01[dir].GetMin()) && eps > q->slack+t2->eps) eps = q->slack+t2->eps; + } + if (eps > eps_augment) eps = eps_augment; + bool progress = false; + if (eps > t->eps) + { + delta += eps - t->eps; + t->eps = eps; + progress = true; + } + if (a_augment && eps_augment <= t->eps) Augment(a_augment); + else if (progress && tree_num >= options.single_tree_threshold*node_num) + { + // continue with the same tree + r = t->root; + continue; + } + } + else + { + FOR_ALL_TREE_EDGES(t, e, dir) e->head[dir]->pq_current = NULL; + } + } + + /////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////////// + + r = r2; + if (r && !r->is_tree_root) r = r3; + } + + if (tree_num == 0) break; + + if ( tree_num == tree_num0 ) + //&& stat.grow_count == stat0.grow_count + //&& stat.shrink_count == stat0.shrink_count + //&& stat.expand_count == stat0.expand_count ) + { + if (!UpdateDuals()) + { + if (!IS_INT && delta <= PM_THRESHOLD) // for numerical stability + { + //CommitEps(); + int dual_greedy_update_option = options.dual_greedy_update_option; + options.dual_greedy_update_option = 2; + UpdateDuals(); + options.dual_greedy_update_option = dual_greedy_update_option; + } + } + } + } + + if (finish) Finish(); + + if (options.verbose) + { + printf("\ndone [%.3f secs]. %d grows, %d expands, %d shrinks\n", get_time()-start_time, stat.grow_count, stat.expand_count, stat.shrink_count); + printf(" expands: [%.3f secs], shrinks: [%.3f secs], dual updates: [%.3f secs]\n", stat.expand_time, stat.shrink_time, stat.dual_time); + fflush(stdout); + } +} + + + diff --git a/src/blossom5/PMrepair.cpp b/src/blossom5/PMrepair.cpp new file mode 100644 index 0000000..770c88a --- /dev/null +++ b/src/blossom5/PMrepair.cpp @@ -0,0 +1,431 @@ +#include +#include +#include +#include "blossom5/PMimplementation.h" + + +struct PerfectMatching::LCATreeX : LCATree +{ + LCATreeX(int size) : LCATree(size) { rev_mapping = new Node*[size]; } + ~LCATreeX() { delete [] rev_mapping; } + Node** rev_mapping; +}; + +void PerfectMatching::StartUpdate() +{ + Node* i0; + Node* i; + Node* j; + Node* b; + + while ((i=removed_first)) + { + removed_first = i->tree_sibling_next; + blossoms->Delete(i); + removed_num --; + } + + Edge* a; + Edge* selfloop_first = NULL; + Edge* selfloop_last = NULL; + + for (i0=nodes; i0is_processed = 0; + if (i0->is_outer) continue; + + i0->is_tree_root = 0; + i0->blossom_ptr = NULL; + i = i0; + while ( 1 ) + { + j = i->blossom_parent; + j->is_processed = 0; + if (j->is_outer) { j->first_tree_child = i; break; } + if (j->is_marked) break; + if ((a=j->blossom_selfloops)) + { + if (selfloop_last) selfloop_last->next[1] = a; + else selfloop_first = a; + selfloop_last = a; + a->next[1] = NULL; + } + j->blossom_ptr = i; + i = j; + } + b = (i->blossom_parent->is_outer) ? i->blossom_parent : i->blossom_parent->blossom_grandparent; +#ifdef LCA_REPAIRS + if (!b->is_marked) + { + b->lca_size = 1; + b->is_marked = 1; + } +#endif + while ( 1 ) + { +#ifdef LCA_REPAIRS + b->lca_size ++; +#endif + ARC_TO_EDGE_PTR(i->blossom_sibling)->y_saved = i->y; + i->y += i->blossom_parent->y; + if (!i->is_blossom) break; + i->is_marked = 1; + j = i; + i = i->blossom_ptr; + j->blossom_grandparent = b; + } + i->blossom_grandparent = b; + } + +#ifdef LCA_REPAIRS + for (i0=nodes; i0is_outer) continue; + b = i0->blossom_grandparent; + if (!b->is_marked) continue; + b->is_marked = 0; + LCATreeX* lca = new LCATreeX(b->lca_size); + b->blossom_ptr = b->first_tree_child; + i = b; + while ( 1 ) + { + if (i->blossom_ptr) i = i->blossom_ptr; + else + { + while ( 1 ) + { + if (i->is_outer) break; + i->lca_preorder = lca->Add(i, i->blossom_parent); + lca->rev_mapping[i->lca_preorder] = i; + i = ARC_HEAD(i->blossom_sibling); + if (i != i->blossom_parent->blossom_ptr) break; + i = i->blossom_parent; + } + if (i->is_outer) + { + lca->AddRoot(i); + break; + } + } + } + b->lca = lca; + } +#endif + + while ((a=selfloop_first)) + { + selfloop_first = a->next[1]; + do + { + Edge* a_next = a->next[0]; + +#ifdef LCA_REPAIRS + int _i = a->head0[1]->lca_preorder; + int _j = a->head0[0]->lca_preorder; + Node* b = a->head0[1]->blossom_grandparent; + b->lca->GetPenultimateNodes(_i, _j); + i = b->lca->rev_mapping[_i]; + j = b->lca->rev_mapping[_j]; +#else + GetRealEndpoints(a, i, j); +#endif + ADD_EDGE(i, a, 0); + ADD_EDGE(j, a, 1); + a->slack -= 2*i->blossom_eps; + a = a_next; + } while ( a ); + } + + /* + for (i0=nodes; i0is_outer) continue; + b = i0->blossom_grandparent; + if (b->lca) + { + delete b->lca; + b->lca = NULL; + } + } + */ + + nodes[node_num].first_tree_child = NULL; +} + +void PerfectMatching::FinishUpdate() +{ + Node* i0; + Node* i; + Node* j; + Edge* a; + EdgeIterator I; + int dir; + Tree* t; + + for (i0=nodes; i0is_outer) continue; + +#ifdef LCA_REPAIRS + if (i0->blossom_grandparent->lca) + { + delete i0->blossom_grandparent->lca; + i0->blossom_grandparent->lca = NULL; + } +#endif + + ////////////////////////////////////////////////////////////// + if (!i0->blossom_grandparent->is_removed) + { + i = i0; + do + { + i->y = ARC_TO_EDGE_PTR(i->blossom_sibling)->y_saved; + i->is_marked = 0; + i->blossom_selfloops = NULL; + i = i->blossom_parent; + } while (i->is_marked); + continue; + } + ////////////////////////////////////////////////////////////// + + i = i0->blossom_parent; + while ( 1 ) + { + if (i->is_removed && !i->is_outer) break; + REAL y_parent = (i->is_outer) ? 0 : i->blossom_parent->y; + for (dir=0; dir<2; dir++) + { + if (!i->first[dir]) continue; + i->first[dir]->prev[dir]->next[dir] = NULL; + Edge* a_next; + for (a=i->first[dir]; a; a=a_next) + { + a_next = a->next[dir]; + j = a->head0[1-dir]; + ADD_EDGE(j, a, dir); + a->slack += j->blossom_parent->y - y_parent; + } + i->first[dir] = NULL; + } + if (i->is_removed) break; + + j = i->blossom_parent; + i->is_removed = 1; + i->tree_sibling_next = removed_first; + removed_first = i; + i = j; + } + i0->y = ARC_TO_EDGE_PTR(i0->blossom_sibling)->y_saved; + i0->is_outer = 1; + i0->flag = 2; + i0->is_tree_root = 1; + } + + Node* blossom_list = nodes[node_num].first_tree_child; + + + + for (i=nodes; iis_tree_root) continue; + i->first_tree_child = nodes[node_num].first_tree_child; + nodes[node_num].first_tree_child = i; + REAL slack_min = PM_INFTY; + FOR_ALL_EDGES(i, a, dir, I) + { + if (slack_min > a->slack) slack_min = a->slack; + } + i->y += slack_min; + FOR_ALL_EDGES(i, a, dir, I) a->slack -= slack_min; + } + + tree_num = 0; + for (i=nodes[node_num].first_tree_child; i!=blossom_list; i=i->first_tree_child) + { + tree_num ++; + if (!i->is_tree_root) continue; + FOR_ALL_EDGES(i, a, dir, I) + { + j = a->head[dir]; + if (a->slack <= 0 && j->is_tree_root) + { + i->is_tree_root = j->is_tree_root = 0; + i->match = EDGE_DIR_TO_ARC(a, dir); + j->match = EDGE_DIR_TO_ARC(a, 1-dir); + tree_num -= 2; + break; + } + } + } + for ( ; i; i=i->first_tree_child) + { + if (i->is_removed) { i->is_tree_root = 0; continue; } + tree_num ++; + } + + if (tree_num > tree_num_max) + { + if (trees) free(trees); + tree_num_max = tree_num; + trees = (Tree*) malloc(tree_num_max*sizeof(Tree)); + } + t = trees; + + Node* last_root = &nodes[node_num]; + Node* i_next; + for (i=nodes; i; i=i_next) + { + if (!i->is_blossom) i_next = (ifirst_tree_child; + if (!i->is_tree_root) continue; + + i->flag = 0; + i->first_tree_child = NULL; + i->tree_sibling_prev = last_root; + last_root->tree_sibling_next = i; + last_root = i; + i->tree = t; + t->root = i; + t->eps = 0; + t->first[0] = t->first[1] = NULL; + t->pq_current = NULL; + t->pq00.Reset(); + t->pq0.Reset(); + t->pq_blossoms.Reset(); + t ++; + } + + assert(t == trees + tree_num); + last_root->tree_sibling_next = NULL; + + while ((i=removed_first)) + { + removed_first = i->tree_sibling_next; + blossoms->Delete(i); + blossom_num --; + } +} + +PerfectMatching::REAL PerfectMatching::GetTwiceSum(NodeId i) +{ + assert(i>=0 && ihead0[dir]; + if (i->is_outer) + { + if (!i->is_tree_root) + { + i->is_tree_root = 1; + i = ARC_HEAD(i->match); + assert(!i->is_tree_root && i->is_outer); + i->is_tree_root = 1; + if (i->is_blossom) + { + i->first_tree_child = nodes[node_num].first_tree_child; + nodes[node_num].first_tree_child = i; + } + } + return; + } + if (i->blossom_grandparent->is_removed) return; + } + + Node* b = i->blossom_grandparent; + assert(b->is_outer); + + if (!b->is_tree_root) + { + b->is_tree_root = 1; + i = ARC_HEAD(b->match); + assert(!i->is_tree_root && i->is_outer); + i->is_tree_root = 1; + if (i->is_blossom) + { + i->first_tree_child = nodes[node_num].first_tree_child; + nodes[node_num].first_tree_child = i; + } + } + + b->is_removed = 1; + b->tree_sibling_next = removed_first; + removed_first = b; +} + +PerfectMatching::EdgeId PerfectMatching::AddNewEdge(NodeId _i, NodeId _j, REAL cost, bool do_not_add_if_positive_slack) +{ + assert(_i>=0 && _i=0 && _j= edge_num_max) ReallocateEdges(); + Node* i = nodes + _i; + Node* j = nodes + _j; + Edge* a = edges + edge_num; + + a->slack = cost*COST_FACTOR; + a->head0[0] = j; + a->head0[1] = i; + Node* bi = (i->is_outer) ? i : i->blossom_grandparent; + Node* bj = (j->is_outer) ? j : j->blossom_grandparent; + if (bi == bj) + { +#ifdef LCA_REPAIRS + int _i = i->lca_preorder; + int _j = j->lca_preorder; + bi->lca->GetPenultimateNodes(_i, _j); + i = bi->lca->rev_mapping[_i]; + j = bi->lca->rev_mapping[_j]; +#else + GetRealEndpoints(a, i, j); +#endif + a->slack += i->blossom_parent->y + j->blossom_parent->y; + } + else + { + i = bi; + j = bj; + } + a->slack -= a->head0[0]->y + a->head0[1]->y; + + if (a->slack >= 0 && do_not_add_if_positive_slack) return -1; + + ADD_EDGE(i, a, 0); + ADD_EDGE(j, a, 1); + PriorityQueue::ResetItem(a); + + if (a->slack < 0) + { + ProcessNegativeEdge(a); + } + + return edge_num ++; +} + +void PerfectMatching::UpdateCost(EdgeId e, REAL delta_cost) +{ + assert(e>=0 && eslack += delta_cost*COST_FACTOR; + if (a->slack == 0) return; + if (a->slack > 0) + { + Node* i = a->head[1]; + Node* j = a->head[0]; + if (i->is_outer) + { + if (ARC_TO_EDGE_PTR(i->match) != a && ARC_TO_EDGE_PTR(j->match) != a) return; + } + else + { + if (ARC_TO_EDGE_PTR(i->blossom_sibling) != a && ARC_TO_EDGE_PTR(j->blossom_sibling) != a) return; + } + } + ProcessNegativeEdge(a); +} + diff --git a/src/blossom5/PMshrink.cpp b/src/blossom5/PMshrink.cpp new file mode 100644 index 0000000..0417a89 --- /dev/null +++ b/src/blossom5/PMshrink.cpp @@ -0,0 +1,318 @@ +#include +#include +#include +#include "blossom5/PMimplementation.h" + + +PerfectMatching::Node* PerfectMatching::FindBlossomRoot(Edge* a0) +{ + Node* i; + Node* j; + Node* _i[2]; + Node* r; + int branch; + + _i[0] = ARC_HEAD(a0); + _i[1] = ARC_TAIL(a0); + branch = 0; + while ( 1 ) + { + if (_i[branch]->is_marked) + { + r = _i[branch]; + j = _i[1-branch]; + break; + } + _i[branch]->is_marked = 1; + if (_i[branch]->is_tree_root) + { + j = _i[branch]; + i = _i[1-branch]; + while (!i->is_marked) + { + i->is_marked = 1; + i = ARC_HEAD(i->match); + GET_TREE_PARENT(i, i); + } + r = i; + break; + } + i = ARC_HEAD(_i[branch]->match); + GET_TREE_PARENT(i, _i[branch]); + branch = 1 - branch; + } + i = r; + while ( i != j ) + { + i = ARC_HEAD(i->match); + i = ARC_HEAD(i->tree_parent); + i->is_marked = 0; + } + // clear is_marked and is_outer + i = ARC_HEAD(a0); + while (i != r) + { + i->is_marked = 0; + i->is_outer = 0; + i = ARC_HEAD(i->match); + i->is_outer = 0; + i = ARC_HEAD(i->tree_parent); + } + i = ARC_TAIL(a0); + while (i != r) + { + i->is_marked = 0; + i->is_outer = 0; + i = ARC_HEAD(i->match); + i->is_outer = 0; + i = ARC_HEAD(i->tree_parent); + } + r->is_marked = 0; + r->is_outer = 0; + + return r; +} + + +void PerfectMatching::Shrink(Edge* a0) +{ + //assert(a0->head[0]->is_outer && a0->head[1]->is_outer); + //assert(a0->head[0]->flag == 0 && a0->head[1]->flag == 0); + + double start_time = get_time(); + + int branch, dir; + Node* r; + Node* i; + Node* j; + Edge* a; + Edge** a_inner_ptr; + Arc* a_prev; + Node* b = blossoms->New(); + Edge* a_augment = NULL; + Edge* b_match; + + b->first[0] = b->first[1] = NULL; + + // set is_outer=0 for all nodes in the blossom + r = FindBlossomRoot(a0); + Tree* t = r->tree; + REAL eps = t->eps; + + b->first_tree_child = NULL; + i = ARC_HEAD(a0); + branch = 0; + while ( 1 ) + { + if (i == r && branch) break; + i->is_marked = 1; + if (i == r) + { + branch = 1; + i = ARC_TAIL(a0); + continue; + } + + // remove i from the list of children + REMOVE_FROM_TREE(i); + + // move children of i to the list of children of b + if (i->first_tree_child) + { + j = i->first_tree_child; + if (!b->first_tree_child) b->first_tree_child = j; + else + { + Node* j_last = j->tree_sibling_prev; + j->tree_sibling_prev = b->first_tree_child->tree_sibling_prev; + b->first_tree_child->tree_sibling_prev->tree_sibling_next = j; + b->first_tree_child->tree_sibling_prev = j_last; + } + } + + // go to parent + i = ARC_HEAD(i->match); + i->is_marked = 1; + if (i->is_blossom) + { + a = ARC_TO_EDGE_PTR(i->match); + t->pq_blossoms.Remove(a, pq_buf); + REAL tmp = a->slack; a->slack = i->y; i->y = tmp; + } + i = ARC_HEAD(i->tree_parent); + } + + // move children of r to the list of children of b + if (i->first_tree_child) + { + j = i->first_tree_child; + if (!b->first_tree_child) b->first_tree_child = j; + else + { + Node* j_last = j->tree_sibling_prev; + j->tree_sibling_prev = b->first_tree_child->tree_sibling_prev; + b->first_tree_child->tree_sibling_prev->tree_sibling_next = j; + b->first_tree_child->tree_sibling_prev = j_last; + } + } + + // init b + b->is_removed = 0; + b->is_outer = 1; + b->flag = 0; + b->is_blossom = 1; + b->is_tree_root = r->is_tree_root; + b->is_processed = 1; + b->tree = t; + b->y = -eps; + b->is_marked = 0; + + // replace r with b in the tree + b->tree_sibling_prev = r->tree_sibling_prev; + b->tree_sibling_next = r->tree_sibling_next; + Node* b_parent = NULL; + if (!b->is_tree_root) + { + b_parent = ARC_HEAD(r->match); GET_TREE_PARENT(b_parent, b_parent); + } + if (b->tree_sibling_prev->tree_sibling_next) b->tree_sibling_prev->tree_sibling_next = b; + else b_parent->first_tree_child = b; + if (b->tree_sibling_next) b->tree_sibling_next->tree_sibling_prev = b; + else if (b_parent) b_parent->first_tree_child->tree_sibling_prev = b; + + if (b->is_tree_root) + { + b->tree->root = b; + b_match = NULL; + } + else + { + b->match = r->match; + b_match = ARC_TO_EDGE_PTR(b->match); + } + REAL b_match_slack = 0; // initialize to prevent compiler warning + if (b_match && ARC_HEAD(b->match)->is_blossom) + { + b_match_slack = b_match->slack; + b_match->slack = ARC_HEAD(b->match)->y; + } + + // second pass over nodes in the blossom + branch = 0; + a_prev = EDGE_DIR_TO_ARC(a0, 0); + i = ARC_HEAD(a_prev); + while ( 1 ) + { + // update Arc::next and Arc::head pointers + if (i->flag == 0) i->y += eps; + else i->y -= eps; + i->is_processed = 0; + + if (i->flag == 1) + { + Edge* a_prev; + for (dir=0; dir<2; dir++) + if (i->first[dir]) + { + for (a_inner_ptr=&i->first[dir], a=*a_inner_ptr, a_prev=a->prev[dir], a_prev->next[dir]=NULL; a; a=*a_inner_ptr) + { + Node* j0 = a->head[dir]; + for (j=j0; !j->is_outer && !j->is_marked; j = j->blossom_parent) {} + if (j != j0) { /*assert(j->flag == 0);*/ int dir_rev = 1 - dir; MOVE_EDGE(j0, j, a, dir_rev); } + if (j->is_marked) // "inner" arc + { + a_inner_ptr = &a->next[dir]; + a->prev[dir] = a_prev; + a_prev = a; + + if (j->flag == 1) a->slack += eps; + } + else // "boundary" arc + { + *a_inner_ptr = a->next[dir]; + ADD_EDGE(b, a, dir); + + if (j->flag == 0 && j->tree != t) + { + j->tree->pq_current->pq01[1-j->tree->dir_current].Remove(a, pq_buf); + if (a->slack + eps <= j->tree->eps) a_augment = a; + } + a->slack += 2*eps; + if (j->flag == 2) t->pq0.Add(a); + else if (j->flag == 0) + { + if (!j->tree->pq_current) AddTreeEdge(t, j->tree); + j->tree->pq_current->pq00.Add(a); + } + else if (j->tree != t) + { + if (!j->tree->pq_current) AddTreeEdge(t, j->tree); + j->tree->pq_current->pq01[j->tree->dir_current].Add(a); + } + } + } + if (i->first[dir]) + { + a_prev->next[dir] = i->first[dir]; + i->first[dir]->prev[dir] = a_prev; + } + } + } + + Arc* a_next = (i->flag == 0) ? i->match : i->tree_parent; + i->blossom_parent = b; + i->match = NULL; + i->blossom_grandparent = b; + i->blossom_selfloops = NULL; + if (branch == 0) + { + i->blossom_sibling = a_next; + if (i == r) + { + branch = 1; + a_prev = ARC_REV(a0); + i = ARC_HEAD(a_prev); + if (i == r) break; + } + else + { + a_prev = i->blossom_sibling; + i = ARC_HEAD(a_prev); + } + } + else + { + i->blossom_sibling = ARC_REV(a_prev); + a_prev = a_next; + i = ARC_HEAD(a_prev); + if (i == r) break; + } + } + i->blossom_sibling = ARC_REV(a_prev); + r->is_tree_root = 0; + + for (i=ARC_HEAD(r->blossom_sibling); ; i = ARC_HEAD(i->blossom_sibling)) + { + i->is_marked = 0; + i->blossom_eps = eps; + if (i == r) break; + } + + if (b_match) + { + if (ARC_HEAD(b->match)->is_blossom) + { + b_match->slack = b_match_slack; + } + dir = ARC_TO_EDGE_DIR(b->match); + //assert(b_match->head[1-dir] == r); + MOVE_EDGE(r, b, b_match, dir); + } + + stat.shrink_count ++; + blossom_num ++; + stat.shrink_time += get_time() - start_time; + + if (a_augment) Augment(a_augment); +} + diff --git a/src/blossom5/PQ.h b/src/blossom5/PQ.h new file mode 100644 index 0000000..42f9221 --- /dev/null +++ b/src/blossom5/PQ.h @@ -0,0 +1,396 @@ +/* + PQ.h - implements pairing heaps priority queue (with multipass 'delete min') + + Copyright 2008 Vladimir Kolmogorov (vnk@adastral.ucl.ac.uk) + + This software can be used for research purposes only. Commercial use is prohibited. + Public redistribution of the code or its derivatives is prohibited. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +#ifndef HFKSJHFKJHARBABDAKFAF +#define HFKSJHFKJHARBABDAKFAF + +// exactly one flag must be defined +//#define PQ_MULTIPASS +#define PQ_INTERLEAVED_MULTIPASS + +#include + +template class PriorityQueue +{ +public: + struct Item + { + REAL slack; + + Item* parentPQ; + union + { + struct + { + Item* leftPQ; + Item* rightPQ; + }; + REAL y_saved; // used in repairs + }; + }; + static void* AllocateBuf(); + static void DeallocateBuf(void* buf); + + static void ResetItem(Item* i); + static bool isReset(Item* i); + + ////////////////////////////////////////////////////////// + + void Reset(); + void Add(Item* i); +#define Remove(i, buf) _Remove(i) + void _Remove(Item* i); + void Decrease(Item* i_old, Item* i_new, void* buf); + Item* GetMin(); + + ////////////////////////////////////////////////////////// + + void Update(REAL delta); + void Merge(PriorityQueue& dest); + + // traversing items in the order they are stored (irrespective of slack). + // The caller must go through all items, no other member functions can be called during the scan. + Item* GetAndResetFirst(); + Item* GetAndResetNext(); + + Item* GetFirst(); + Item* GetNext(Item* i); + + ////////////////////////////////////////////////////////// + +private: + struct Buf + { + }; + Item* rootPQ; + void RemoveRoot(); +}; + +////////////////////////////////////////////////////////////////////////// +////////////////////////////////////////////////////////////////////////// +////////////////////////////////////////////////////////////////////////// + +template inline void* PriorityQueue::AllocateBuf() +{ + return NULL; +} + +template inline void PriorityQueue::DeallocateBuf(void* _buf) +{ +} + +template inline void PriorityQueue::ResetItem(Item* i) +{ + i->parentPQ = NULL; +} + +template inline bool PriorityQueue::isReset(Item* i) +{ + return (i->parentPQ == NULL); +} + +////////////////////////////////////////////////////////////////////////// +////////////////////////////////////////////////////////////////////////// +////////////////////////////////////////////////////////////////////////// + +template inline void PriorityQueue::Reset() +{ + rootPQ = NULL; +} + +/* +template inline void PriorityQueue::RemoveRoot() +{ + Item* r = rootPQ; + PriorityQueue pq; + pq.rootPQ = rootPQ; + rootPQ = NULL; + Item* i; + for (i=pq.GetAndResetFirst(); i; i=pq.GetAndResetNext()) + { + if (i != r) Add(i); + } + r->parentPQ = NULL; +} +*/ + +// sets i = merge(i, j). Ignores parentPQ and rightPQ for i and j. +#define MERGE_PQ(i, j)\ + {\ + if (i->slack <= j->slack)\ + {\ + j->rightPQ = i->leftPQ;\ + if (j->rightPQ) j->rightPQ->parentPQ = j;\ + j->parentPQ = i;\ + i->leftPQ = j;\ + }\ + else\ + {\ + i->rightPQ = j->leftPQ;\ + if (i->rightPQ) i->rightPQ->parentPQ = i;\ + i->parentPQ = j;\ + j->leftPQ = i;\ + i = j;\ + }\ + } + +template inline void PriorityQueue::RemoveRoot() +{ + Item* i = rootPQ->leftPQ; + rootPQ->parentPQ = NULL; + if (i) + { +#ifdef PQ_MULTIPASS + while ( i->rightPQ ) + { + Item** prev_ptr = &rootPQ; + while ( 1 ) + { + if (i->rightPQ) + { + Item* j = i->rightPQ; + Item* next = j->rightPQ; + MERGE_PQ(i, j); + *prev_ptr = i; + if (!next) { i->rightPQ = NULL; break; } + prev_ptr = &i->rightPQ; + i = next; + } + else + { + *prev_ptr = i; + i->rightPQ = NULL; + break; + } + } + i = rootPQ; + } +#endif + +#ifdef PQ_INTERLEAVED_MULTIPASS + while ( i->rightPQ ) + { + Item* prev = NULL; + while ( i ) + { + Item* next; + if (i->rightPQ) + { + Item* j = i->rightPQ; + next = j->rightPQ; + MERGE_PQ(i, j); + } + else next = NULL; + i->rightPQ = prev; + prev = i; + i = next; + } + i = prev; + } +#endif + i->parentPQ = i; + } + rootPQ = i; +} + +template inline void PriorityQueue::Add(Item* i) +{ + if (!rootPQ) + { + rootPQ = i; + i->parentPQ = i; + i->leftPQ = i->rightPQ = NULL; + } + else if (i->slack <= rootPQ->slack) + { + rootPQ->parentPQ = i; + i->leftPQ = rootPQ; + i->rightPQ = NULL; + rootPQ = i; + i->parentPQ = i; + } + else + { + i->leftPQ = NULL; + i->rightPQ = rootPQ->leftPQ; + if (i->rightPQ) i->rightPQ->parentPQ = i; + rootPQ->leftPQ = i; + i->parentPQ = rootPQ; + } +} + + +template inline void PriorityQueue::_Remove(Item* i) +{ + Item* p = i->parentPQ; + if (p == i) RemoveRoot(); + else + { + if (i->rightPQ) i->rightPQ->parentPQ = p; + if (p->leftPQ == i) p->leftPQ = i->rightPQ; + else p->rightPQ = i->rightPQ; + if (i->leftPQ) + { + i->parentPQ = i; + i->rightPQ = NULL; + PriorityQueue pq; + pq.rootPQ = i; + pq.RemoveRoot(); + pq.Merge(*this); + } + else i->parentPQ = NULL; + } +} + +template inline void PriorityQueue::Decrease(Item* i_old, Item* i_new, void* _buf) +{ + if (i_old->parentPQ == i_old) + { + if (i_old != i_new) + { + rootPQ = i_new; + i_new->parentPQ = i_new; + i_new->leftPQ = i_old->leftPQ; + i_new->rightPQ = NULL; + if (i_new->leftPQ) i_new->leftPQ->parentPQ = i_new; + i_old->parentPQ = NULL; + } + } + else + { + Remove(i_old, _buf); + Add(i_new); + } +} + +template inline typename PriorityQueue::Item* PriorityQueue::GetMin() +{ + return rootPQ; +} + +////////////////////////////////////////////////////////////////////////// +////////////////////////////////////////////////////////////////////////// +////////////////////////////////////////////////////////////////////////// + + + +template inline void PriorityQueue::Merge(PriorityQueue& dest) +{ + if (!rootPQ) return; + if (!dest.rootPQ) dest.rootPQ = rootPQ; + else + { + if (rootPQ->slack < dest.rootPQ->slack) + { + Item* j = rootPQ; rootPQ = dest.rootPQ; dest.rootPQ = j; + } + rootPQ->rightPQ = dest.rootPQ->leftPQ; + if (rootPQ->rightPQ) rootPQ->rightPQ->parentPQ = rootPQ; + rootPQ->parentPQ = dest.rootPQ; + dest.rootPQ->leftPQ = rootPQ; + } + rootPQ = NULL; +} + + + +template inline void PriorityQueue::Update(REAL delta) +{ + if (!rootPQ) return; + + Item* i = rootPQ; + while (i->leftPQ) i = i->leftPQ; + + while ( 1 ) + { + i->slack += delta; + + if (i->rightPQ) + { + i = i->rightPQ; + while (i->leftPQ) i = i->leftPQ; + } + else + { + while ( 1 ) + { + Item* j = i; + i = i->parentPQ; + if (i == j) return; + if (i->leftPQ == j) break; + } + } + } +} + + +////////////////////////////////////////////////////////////////////////// +////////////////////////////////////////////////////////////////////////// +////////////////////////////////////////////////////////////////////////// + +template inline typename PriorityQueue::Item* PriorityQueue::GetAndResetFirst() +{ + if (!rootPQ) return NULL; + return GetAndResetNext(); +} + +template inline typename PriorityQueue::Item* PriorityQueue::GetAndResetNext() +{ + if (!rootPQ) return NULL; + Item* result = rootPQ; + result->parentPQ = NULL; + Item* i = rootPQ->leftPQ; + if (!i) rootPQ = result->rightPQ; + else + { + rootPQ = i; + while (i->rightPQ) i = i->rightPQ; + i->rightPQ = result->rightPQ; + } + return result; +} + +template inline typename PriorityQueue::Item* PriorityQueue::GetFirst() +{ + if (!rootPQ) return NULL; + Item* i = rootPQ; + while (i->leftPQ) i = i->leftPQ; + return i; +} + +template inline typename PriorityQueue::Item* PriorityQueue::GetNext(Item* i) +{ + if (i->rightPQ) + { + i = i->rightPQ; + while (i->leftPQ) i = i->leftPQ; + return i; + } + while ( 1 ) + { + Item* j = i; + i = i->parentPQ; + if (i == j) return NULL; + if (i->leftPQ == j) return i; + } +} + +#endif diff --git a/src/blossom5/PerfectMatching.cpp b/src/blossom5/PerfectMatching.cpp new file mode 100644 index 0000000..90f8508 --- /dev/null +++ b/src/blossom5/PerfectMatching.cpp @@ -0,0 +1,3018 @@ +#include +#include +#include +#include "blossom5/PMimplementation.h" +#include "blossom5/MinCost/MinCost.h" + + +//---------// +// Duals // +//---------// + + +void PerfectMatching::ComputeEpsGlobal() +{ + Node* r; + PriorityQueue::Item* q; + Tree* t; + Tree* t2; + TreeEdge* e; + int i, j, k, N = 0, E = 0; + + for (r=nodes[node_num].tree_sibling_next; r; r=r->tree_sibling_next) + { + t = r->tree; + t->id = N; + N += 2; + for (k=0; k<2; k++) + for (e=t->first[k]; e; e=e->next[k]) E += 6; + } + DualMinCost* m = new DualMinCost(N, E); + for (r=nodes[node_num].tree_sibling_next; r; r=r->tree_sibling_next) + { + t = r->tree; + i = t->id; + m->AddUnaryTerm(i, -1); + m->SetLowerBound(i, 0); + m->AddUnaryTerm(i+1, 1); + m->SetUpperBound(i+1, 0); + + if (t->eps_delta < PM_INFTY) + { + m->SetUpperBound(i, t->eps_delta); + m->SetLowerBound(i+1, -t->eps_delta); + } + for (e=t->first[0]; e; e=e->next[0]) + { + t2 = e->head[0]; + if (t2 == NULL) continue; + j = e->head[0]->id; + if ((q=e->pq01[0].GetMin())) + { + m->AddConstraint(j, i, q->slack - t->eps + t2->eps); + m->AddConstraint(i+1, j+1, q->slack - t->eps + t2->eps); + } + if ((q=e->pq01[1].GetMin())) + { + m->AddConstraint(i, j, q->slack - t2->eps + t->eps); + m->AddConstraint(j+1, i+1, q->slack - t2->eps + t->eps); + } + if ((q=e->pq00.GetMin())) + { + m->AddConstraint(i+1, j, q->slack - t->eps - t2->eps); + m->AddConstraint(j+1, i, q->slack - t->eps - t2->eps); + } + } + } + m->Solve(); + for (r=nodes[node_num].tree_sibling_next; r; r=r->tree_sibling_next) + { + t = r->tree; + i = t->id; + t->eps_delta = (m->GetSolution(i) - m->GetSolution(i+1))/2; + } + delete m; +} + +void PerfectMatching::ComputeEpsSingle() +{ + Node* r; + PriorityQueue::Item* q; + Tree* t; + Tree* t2; + TreeEdge* e; + REAL eps = PM_INFTY; + + for (r=nodes[node_num].tree_sibling_next; r; r=r->tree_sibling_next) + { + t = r->tree; + if (eps > t->eps_delta) eps = t->eps_delta; + for (e=t->first[0]; e; e=e->next[0]) + { + t2 = e->head[0]; + if ((q=e->pq00.GetMin()) && 2*eps > q->slack-t->eps-t2->eps) + { + eps = (q->slack-t->eps-t2->eps)/2; + } + } + } + for (r=nodes[node_num].tree_sibling_next; r; r=r->tree_sibling_next) + { + r->tree->eps_delta = eps; + } +} + + +void PerfectMatching::ComputeEpsCC() +{ + Node* r; + PriorityQueue::Item* q; + Tree* t0; + Tree* t; + Tree* t2; + Tree* t_next; + TreeEdge* e; + REAL eps, eps2; + Tree* queue_last; + int dir; + Tree* FIXED_TREE = trees-1; + int component_num = 0; + TreeEdge** e_ptr; + + for (r=nodes[node_num].tree_sibling_next; r; r=r->tree_sibling_next) + { + t0 = r->tree; + t0->next = NULL; + } + for (r=nodes[node_num].tree_sibling_next; r; r=r->tree_sibling_next) + { + t0 = r->tree; + if (t0->next) continue; + eps = t0->eps_delta; + + t0->next = queue_last = t = t0; + while ( 1 ) + { + for (dir=0; dir<2; dir++) + for (e_ptr=&t->first[dir], e=*e_ptr; e; e=*e_ptr) + { + t2 = e->head[dir]; + if (t2 == NULL) { *e_ptr = e->next[dir]; tree_edges->Delete(e); continue; } + e_ptr = &e->next[dir]; + + REAL eps00 = ((q=e->pq00.GetMin())) ? (q->slack - t->eps - t2->eps) : PM_INFTY; + if (t2->next && t2->next != FIXED_TREE) + { + if (2*eps > eps00) eps = eps00/2; + continue; + } + + REAL eps01[2]; + eps01[dir] = ((q=e->pq01[dir].GetMin())) ? (q->slack - t->eps + t2->eps) : PM_INFTY; + eps01[1-dir] = ((q=e->pq01[1-dir].GetMin())) ? (q->slack - t2->eps + t->eps) : PM_INFTY; + + if (t2->next == FIXED_TREE) eps2 = t2->eps_delta; + else if (eps01[0] > 0 && eps01[1] > 0) eps2 = 0; + else + { + queue_last->next = t2; + queue_last = t2; + t2->next = t2; + if (eps > eps00) eps = eps00; + if (eps > t2->eps_delta) eps = t2->eps_delta; + continue; + } + if (eps > eps00 - eps2) eps = eps00 - eps2; + if (eps > eps2 + eps01[dir]) eps = eps2 + eps01[dir]; + } + + if (t->next == t) break; + t = t->next; + } + for (t=t0; ; t=t_next) + { + t->eps_delta = eps; + t_next = t->next; + t->next = FIXED_TREE; + if (t_next == t) break; + } + component_num ++; + } + //printf("%d CCs ", component_num); +} + + +void PerfectMatching::ComputeEpsSCC() +{ + PriorityQueue::Item* q; + Node* r; + Tree* t0; + Tree* t; + Tree* t2; + TreeEdge* e; + TreeEdge** e_ptr; + REAL eps; + int c, dir; + + for (r=nodes[node_num].tree_sibling_next; r; r=r->tree_sibling_next) + { + t0 = r->tree; + t0->dfs_parent = NULL; + + for (dir=0; dir<2; dir++) + for (e_ptr=&t0->first[dir], e=*e_ptr; e; e=*e_ptr) + { + t2 = e->head[dir]; + if (t2 == NULL) { *e_ptr = e->next[dir]; tree_edges->Delete(e); continue; } + e_ptr = &e->next[dir]; + } + } + Tree* stack = NULL; + + // first DFS + for (r=nodes[node_num].tree_sibling_next; r; r=r->tree_sibling_next) + { + t0 = r->tree; + if (t0->dfs_parent) continue; + t = t0; + e = (t->first[0]) ? t->first[0] : t->first[1]; + t->dfs_parent = (TreeEdge*)trees; + while ( 1 ) + { + if (e == NULL) + { + t->next = stack; + stack = t; + + if (t == t0) break; + + e = t->dfs_parent; + if (t == e->head[0]) { t = e->head[1]; e = (e->next[0]) ? e->next[0] : t->first[1]; } + else { t = e->head[0]; e = e->next[1]; } + continue; + } + + if (e->head[1] == t) + { + if (e->head[0]->dfs_parent || !(q=e->pq01[0].GetMin()) || q->slack - t->eps + e->head[0]->eps > 0) { e = (e->next[0]) ? e->next[0] : t->first[1]; continue; } + t = e->head[0]; + } + else + { + if (e->head[1]->dfs_parent || !(q=e->pq01[1].GetMin()) || q->slack - t->eps + e->head[1]->eps > 0) { e = e->next[1]; continue; } + t = e->head[1]; + } + t->dfs_parent = e; + e = (t->first[0]) ? t->first[0] : t->first[1]; + } + } + + for (r=nodes[node_num].tree_sibling_next; r; r=r->tree_sibling_next) r->tree->dfs_parent = NULL; + + int component_num = 0; + while (stack) + { + t0 = stack; + stack = t0->next; + if (t0->dfs_parent) continue; + t = t0; + e = (t->first[0]) ? t->first[0] : t->first[1]; + t->dfs_parent = (TreeEdge*)trees; + while ( 1 ) + { + if (e == NULL) + { + e = t->dfs_parent; + t->dfs_parent = (TreeEdge*)((char*)trees + component_num); + if (t == t0) break; + if (t == e->head[0]) { t = e->head[1]; e = (e->next[0]) ? e->next[0] : t->first[1]; } + else { t = e->head[0]; e = e->next[1]; } + continue; + } + + if (e->head[1] == t) + { + if (e->head[0]->dfs_parent || !(q=e->pq01[1].GetMin()) || q->slack - e->head[0]->eps + t->eps > 0) { e = (e->next[0]) ? e->next[0] : t->first[1]; continue; } + t = e->head[0]; + } + else + { + if (e->head[1]->dfs_parent || !(q=e->pq01[0].GetMin()) || q->slack - e->head[1]->eps + t->eps > 0) { e = e->next[1]; continue; } + t = e->head[1]; + } + t->dfs_parent = e; + e = (t->first[0]) ? t->first[0] : t->first[1]; + } + component_num ++; + } + + Tree** array = new Tree*[component_num]; + memset(array, 0, component_num*sizeof(Tree*)); + + for (r=nodes[node_num].tree_sibling_next; r; r=r->tree_sibling_next) + { + t = r->tree; + t->id = (int)((char*)t->dfs_parent - (char*)trees); + t->next = array[t->id]; + array[t->id] = t; + } + + for (c=component_num-1; c>=0; c--) + { + eps = PM_INFTY; + for (t=array[c]; t; t=t->next) + { + if (eps > t->eps_delta) eps = t->eps_delta; + FOR_ALL_TREE_EDGES(t, e, dir) + { + t2 = e->head[dir]; + REAL eps00 = (q=e->pq00.GetMin()) ? (q->slack-t->eps-t2->eps) : PM_INFTY; + REAL eps01[2]; + eps01[dir] = ((q=e->pq01[dir].GetMin())) ? (q->slack - t->eps + t2->eps) : PM_INFTY; + eps01[1-dir] = ((q=e->pq01[1-dir].GetMin())) ? (q->slack - t2->eps + t->eps) : PM_INFTY; + if (t2->id < c) + { + if (eps > eps01[dir]) eps = eps01[dir]; + if (eps > eps00) eps = eps00; + } + else if (t2->id == c) + { + if (2*eps > eps00) eps = eps00 / 2; + } + else + { + if (eps > eps01[dir] + t2->eps_delta) eps = eps01[dir] + t2->eps_delta; + if (eps > eps00 - t2->eps_delta) eps = eps00 - t2->eps_delta; + } + } + } + for (t=array[c]; t; t=t->next) t->eps_delta = eps; + } + + delete [] array; + //printf("%d SCCs ", component_num); +} + +void PerfectMatching::CommitEps() +{ + printf("CommitEps()\n"); + Node* i; + Node* j; + Node* r; + int dir; + Edge* a; + EdgeIterator I; + Tree* t; + TreeEdge* e; + TreeEdge** e_ptr; + REAL eps, eps2; + PriorityQueue::Item* q; + + for (r=nodes[node_num].tree_sibling_next; r; r=r->tree_sibling_next) + { + t = r->tree; + eps = t->eps; + + i = r; + while ( 1 ) + { + i->y += eps; + if (!i->is_tree_root) + { + Node* i0 = i; + i = ARC_HEAD(i0->match); + if (i->is_blossom) ARC_TO_EDGE_PTR(i0->match)->slack -= eps; + else i->y -= eps; + FOR_ALL_EDGES(i, a, dir, I) + { + GET_OUTER_HEAD(a, dir, j); + + a->slack += eps; + if (j->flag == 0) a->slack -= j->tree->eps; + } + i = i0; + } + + MOVE_NODE_IN_TREE(i); + } + + t->pq0.Update(-eps); + + PriorityQueue pq00 = t->pq00; + t->pq00.Reset(); + for (q=pq00.GetAndResetFirst(); q; q=pq00.GetAndResetNext()) + { + a = (Edge*)q; + if (ProcessEdge00(a)) t->pq00.Add(a); + } + + for (e_ptr=&t->first[0], e=*e_ptr; e; e=*e_ptr) + { + if (e->head[0] == NULL) { *e_ptr = e->next[0]; tree_edges->Delete(e); continue; } + e_ptr = &e->next[0]; + + eps2 = e->head[0]->eps; + e->pq00.Update( - eps - eps2 ); + } + } + + for (r=nodes[node_num].tree_sibling_next; r; r=r->tree_sibling_next) r->tree->eps = 0; +} + +bool PerfectMatching::UpdateDuals() +{ + Node* r; + + double start_time = get_time(); + + //////////////////////////////////////////////////////////////////////////////////// + for (r=nodes[node_num].tree_sibling_next; r; r=r->tree_sibling_next) + { + Tree* t = r->tree; + PriorityQueue::Item* q; + REAL eps = PM_INFTY; + if ((q=t->pq0.GetMin())) eps = q->slack; + if ((q=t->pq_blossoms.GetMin()) && eps > q->slack) eps = q->slack; + while ((q=t->pq00.GetMin())) + { + if (ProcessEdge00((Edge*)q, false)) break; + t->pq00.Remove(q, pq_buf); + } + if (q && 2*eps > q->slack) eps = q->slack/2; + t->eps_delta = eps - t->eps; + } + + if (tree_num >= options.dual_LP_threshold*node_num) + { + if (options.dual_greedy_update_option == 0) ComputeEpsCC(); + else if (options.dual_greedy_update_option == 1) ComputeEpsSCC(); + else ComputeEpsSingle(); + } + else ComputeEpsGlobal(); + + REAL delta = 0; + for (r=nodes[node_num].tree_sibling_next; r; r=r->tree_sibling_next) + { + if (r->tree->eps_delta > 0) + { + delta += r->tree->eps_delta; + r->tree->eps += r->tree->eps_delta; + } + } + + stat.dual_time += get_time() - start_time; + + return (delta > PM_THRESHOLD); +} + + + +//----------// +// Expand // +//----------// + + +inline void PerfectMatching::ProcessSelfloop(Node* b, Edge* a) +{ + int dir; + Node* j; + Node* prev[2]; + for (dir=0; dir<2; dir++) + { + j = a->head[dir]; + GET_PENULTIMATE_BLOSSOM(j); + prev[dir] = j; + } + if (prev[0] != prev[1]) + { + ADD_EDGE(prev[0], a, 1); + ADD_EDGE(prev[1], a, 0); + a->slack -= 2*prev[0]->blossom_eps; + } + else + { + a->next[0] = prev[0]->blossom_selfloops; + prev[0]->blossom_selfloops = a; + } + +} + + + +void PerfectMatching::Expand(Node* b) +{ + assert(b->is_blossom); + assert(b->is_outer); + assert(b->flag == 1); + + double start_time = get_time(); + + Node* i; + Node* j; + Node* k; + Edge* a; + EdgeIterator I; + int dir; + ExpandTmpItem* tmp_item; + Tree* t = b->tree; + REAL eps = t->eps; + Edge* a_augment = NULL; + + GET_TREE_PARENT(b, i); + a = ARC_TO_EDGE_PTR(b->tree_parent); + dir = ARC_TO_EDGE_DIR(b->tree_parent); + + j = a->head0[1-dir]; + GET_PENULTIMATE_BLOSSOM(j); + MOVE_EDGE(b, j, a, dir); + + a = ARC_TO_EDGE_PTR(b->match); + dir = ARC_TO_EDGE_DIR(b->match); + k = a->head0[1-dir]; + GET_PENULTIMATE_BLOSSOM(k); + MOVE_EDGE(b, k, a, dir); + + i = ARC_HEAD(k->blossom_sibling); + while ( 1 ) + { + tmp_item = expand_tmp_list->New(); + tmp_item->i = i; tmp_item->blossom_parent = i->blossom_parent; tmp_item->blossom_grandparent = i->blossom_grandparent; + i->flag = 2; + + // blossom_selfloops + i->is_outer = 1; + while ((a=i->blossom_selfloops)) + { + i->blossom_selfloops = a->next[0]; + ProcessSelfloop(i, a); + } + i->is_outer = 0; + + if (i == k) break; + i->match = i->blossom_sibling; + j = ARC_HEAD(i->match); + tmp_item = expand_tmp_list->New(); + tmp_item->i = j; tmp_item->blossom_parent = j->blossom_parent; tmp_item->blossom_grandparent = j->blossom_grandparent; + j->flag = 2; + + // blossom_selfloops + j->is_outer = 1; + while ((a=j->blossom_selfloops)) + { + j->blossom_selfloops = a->next[0]; + ProcessSelfloop(j, a); + } + j->is_outer = 0; + + j->match = ARC_REV(i->match); + i = ARC_HEAD(j->blossom_sibling); + } + k->match = b->match; + i = ARC_TAIL(b->tree_parent); + Arc* aa = i->blossom_sibling; + i->flag = 1; i->tree = b->tree; i->y += b->tree->eps; + i->tree_parent = b->tree_parent; + if (i != k) + { + Node** i_ptr; + if (i->match == aa) + { + i = ARC_HEAD(i->match); + i_ptr = &j; + while ( 1 ) + { + aa = i->blossom_sibling; + i->flag = 0; i->tree = b->tree; i->y -= t->eps; + *i_ptr = i; + i_ptr = &i->first_tree_child; + i->tree_sibling_prev = i; + i->tree_sibling_next = NULL; + i = ARC_HEAD(aa); + i->flag = 1; i->tree = b->tree; i->y += t->eps; + i->tree_parent = ARC_REV(aa); + if (i == k) break; + i = ARC_HEAD(i->match); + } + *i_ptr = ARC_HEAD(k->match); + } + else + { + i = k; + j = ARC_HEAD(k->match); + do + { + i->tree_parent = i->blossom_sibling; + i->flag = 1; i->tree = b->tree; i->y += b->tree->eps; + i = ARC_HEAD(i->tree_parent); + i->flag = 0; i->tree = b->tree; i->y -= b->tree->eps; + i->first_tree_child = j; + j = i; + i->tree_sibling_prev = i; + i->tree_sibling_next = NULL; + i = ARC_HEAD(i->match); + } while ( i->flag != 1 ); + } + i = ARC_HEAD(k->match); + + j->tree_sibling_prev = i->tree_sibling_prev; + j->tree_sibling_next = i->tree_sibling_next; + if (i->tree_sibling_prev->tree_sibling_next) i->tree_sibling_prev->tree_sibling_next = j; + else ARC_HEAD(b->tree_parent)->first_tree_child = j; + if (i->tree_sibling_next) i->tree_sibling_next->tree_sibling_prev = j; + else ARC_HEAD(b->tree_parent)->first_tree_child->tree_sibling_prev = j; + + i->tree_sibling_prev = i; + i->tree_sibling_next = NULL; + } + + // go through inner arcs + i = k; + while ( 1 ) + { + // "-" node + if (i->is_blossom) + { + a = ARC_TO_EDGE_PTR(i->match); + REAL tmp = a->slack; a->slack = i->y; i->y = tmp; + t->pq_blossoms.Add(a); + } + FOR_ALL_EDGES(i, a, dir, I) + { + j = a->head[dir]; + if (j->flag != 0) a->slack -= eps; + } + i->is_processed = 1; + if (i->tree_parent == b->tree_parent) break; + i = ARC_HEAD(i->tree_parent); + // "+" node + FOR_ALL_EDGES(i, a, dir, I) + { + j = a->head[dir]; + if (j->flag == 2) + { + a->slack += eps; + t->pq0.Add(a); + } + else if (j->flag == 0 && i < j) + { + a->slack += 2*eps; + t->pq00.Add(a); + } + } + i->is_processed = 1; + i = ARC_HEAD(i->match); + } + + // go through boundary arcs + for (tmp_item=expand_tmp_list->ScanFirst(); tmp_item; tmp_item=expand_tmp_list->ScanNext()) + { + i = tmp_item->i; + j = tmp_item->blossom_parent; tmp_item->blossom_parent = i->blossom_parent; i->blossom_parent = j; + j = tmp_item->blossom_grandparent; tmp_item->blossom_grandparent = i->blossom_grandparent; i->blossom_grandparent = j; + } + for (dir=0; dir<2; dir++) + { + if (!b->first[dir]) continue; + b->first[dir]->prev[dir]->next[dir] = NULL; + + Edge* a_next; + for (a=b->first[dir]; a; a=a_next) + { + a_next = a->next[dir]; + i = a->head0[1-dir]; + GET_PENULTIMATE_BLOSSOM2(i); + ADD_EDGE(i, a, dir); + GET_OUTER_HEAD(a, dir, j); + + if (i->flag == 1) continue; + + if (j->flag == 0 && j->tree != t) j->tree->pq_current->pq01[1-j->tree->dir_current].Remove(a, pq_buf); + + if (i->flag == 2) + { + a->slack += eps; + if (j->flag == 0) j->tree->pq0.Add(a); + } + else + { + a->slack += 2*eps; + if (j->flag == 2) t->pq0.Add(a); + else if (j->flag == 0) + { + if (j->tree != t) + { + if (!j->tree->pq_current) AddTreeEdge(t, j->tree); + if (a->slack <= j->tree->eps + eps) a_augment = a; + } + j->tree->pq_current->pq00.Add(a); + } + else if (j->tree != t) + { + if (!j->tree->pq_current) AddTreeEdge(t, j->tree); + j->tree->pq_current->pq01[j->tree->dir_current].Add(a); + } + + } + } + } + for (tmp_item=expand_tmp_list->ScanFirst(); tmp_item; tmp_item=expand_tmp_list->ScanNext()) + { + i = tmp_item->i; + i->blossom_parent = tmp_item->blossom_parent; + i->blossom_grandparent = tmp_item->blossom_grandparent; + i->is_outer = 1; + } + expand_tmp_list->Reset(); + + b->tree_sibling_next = removed_first; + removed_first = b; + removed_num ++; + if (4*removed_num > node_num) FreeRemoved(); + + blossom_num --; + stat.expand_count ++; + + stat.expand_time += get_time() - start_time; + + if (a_augment) Augment(a_augment); +} + +void PerfectMatching::FreeRemoved() +{ + Node* i0; + Node* i; + for (i0=nodes; i0is_outer && !i->is_marked; i=i->blossom_parent) + { + i->is_marked = 1; + if (i->blossom_grandparent->is_removed) i->blossom_grandparent = i->blossom_parent; + } + } + for (i0=nodes; i0is_outer && i->is_marked; i=i->blossom_parent) + { + i->is_marked = 0; + } + } + + while ((i=removed_first)) + { + removed_first = i->tree_sibling_next; + blossoms->Delete(i); + removed_num --; + } + + assert(removed_num == 0); +} + + + + +//----------// +// Init // +//----------// + + + +void PerfectMatching::InitGreedy(bool allocate_trees) +{ + Node* i; + int dir; + Edge* a; + EdgeIterator I; + Tree* t = NULL; + Node* last_root = &nodes[node_num]; + REAL slack_min; + + for (i=nodes; iy = PM_INFTY; + for (a=edges; ahead[0]->y > a->slack) a->head[0]->y = a->slack; + if (a->head[1]->y > a->slack) a->head[1]->y = a->slack; + } + for (a=edges; ahead[0]; + if (!i->is_outer) + { + i->is_outer = 1; + i->y /= 2; + } + a->slack -= i->y; + i = a->head[1]; + if (!i->is_outer) + { + i->is_outer = 1; + i->y /= 2; + } + a->slack -= i->y; + } + + tree_num = node_num; + for (i=nodes; iflag == 2) continue; + slack_min = PM_INFTY; + FOR_ALL_EDGES(i, a, dir, I) if (slack_min > a->slack) slack_min = a->slack; + i->y += slack_min; + FOR_ALL_EDGES(i, a, dir, I) + { + if (a->slack <= slack_min && i->flag == 0 && a->head[dir]->flag == 0) + { + i->flag = 2; + a->head[dir]->flag = 2; + i->match = EDGE_DIR_TO_ARC(a, dir); + a->head[dir]->match = EDGE_DIR_TO_ARC(a, 1-dir); + tree_num -= 2; + } + a->slack -= slack_min; + } + } + if (allocate_trees) + { + if (tree_num > tree_num_max) + { + if (trees) free(trees); + tree_num_max = tree_num; + trees = (Tree*) malloc(tree_num_max*sizeof(Tree)); + } + t = trees; + } + for (i=nodes; iflag != 0) continue; + i->is_tree_root = 1; + i->first_tree_child = NULL; + i->tree_sibling_prev = last_root; + last_root->tree_sibling_next = i; + last_root = i; + if (allocate_trees) + { + i->tree = t; + t->root = i; + t->eps = 0; + t->first[0] = t->first[1] = NULL; + t->pq_current = NULL; + t->pq00.Reset(); + t->pq0.Reset(); + t->pq_blossoms.Reset(); + t ++; + } + } + last_root->tree_sibling_next = NULL; +} + +//////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////// + +PerfectMatching::Node* PerfectMatching::FindBlossomRootInit(Edge* a0) +{ + Node* i; + Node* j; + Node* _i[2]; + Node* r; + int branch; + + _i[0] = ARC_HEAD(a0); + _i[1] = ARC_TAIL(a0); + branch = 0; + while ( 1 ) + { + if (!_i[branch]->is_outer) + { + r = _i[branch]; + j = _i[1-branch]; + break; + } + _i[branch]->is_outer = 0; + if (_i[branch]->is_tree_root) + { + j = _i[branch]; + i = _i[1-branch]; + while (i->is_outer) + { + i->is_outer = 0; + i = ARC_HEAD(i->match); + i->is_outer = 0; + i = ARC_HEAD(i->tree_parent); + } + r = i; + break; + } + i = ARC_HEAD(_i[branch]->match); + i->is_outer = 0; + _i[branch] = ARC_HEAD(i->tree_parent); + branch = 1 - branch; + } + i = r; + while ( i != j ) + { + i = ARC_HEAD(i->match); + i->is_outer = 1; + i = ARC_HEAD(i->tree_parent); + i->is_outer = 1; + } + return r; +} + +void PerfectMatching::ShrinkInit(Edge* a0, Node* tree_root) +{ + int branch, flag; + Node* i; + Node* j; + Node* r; + Arc* a_prev; + Arc* aa; + + tree_root->flag = 2; + i = tree_root->first_tree_child; + if ( i ) + while ( 1 ) + { + ARC_HEAD(i->match)->flag = 2; + i->flag = 2; + + MOVE_NODE_IN_TREE(i); + } + + r = FindBlossomRootInit(a0); + + if ( !r->is_tree_root ) + { + j = ARC_HEAD(r->match); + j->match = aa = j->tree_parent; + i = ARC_HEAD(aa); + while ( !i->is_tree_root ) + { + j = ARC_HEAD(i->match); + i->match = ARC_REV(aa); + j->match = aa = j->tree_parent; + i = ARC_HEAD(aa); + } + i->match = ARC_REV(aa); + } + + tree_root->is_tree_root = 0; + + branch = 0; + flag = 0; + a_prev = EDGE_DIR_TO_ARC(a0, 0); + i = ARC_HEAD(a_prev); + while ( 1 ) + { + Arc* a_next = (flag == 0) ? i->match : i->tree_parent; + flag = 1 - flag; + i->flag = 0; + i->match = NULL; + if (branch == 0) + { + i->blossom_sibling = a_next; + if (i == r) + { + branch = 1; + flag = 0; + a_prev = ARC_REV(a0); + i = ARC_HEAD(a_prev); + if (i == r) break; + } + else + { + a_prev = i->blossom_sibling; + i = ARC_HEAD(a_prev); + } + } + else + { + i->blossom_sibling = ARC_REV(a_prev); + a_prev = a_next; + i = ARC_HEAD(a_prev); + if (i == r) break; + } + } + i->blossom_sibling = ARC_REV(a_prev); +} + +void PerfectMatching::ExpandInit(Node* k) +{ + Node* i = ARC_HEAD(k->blossom_sibling); + Node* j; + + while ( 1 ) + { + i->flag = 2; i->is_outer = 1; + if (i == k) break; + i->match = i->blossom_sibling; + j = ARC_HEAD(i->match); + j->flag = 2; j->is_outer = 1; + j->match = ARC_REV(i->match); + i = ARC_HEAD(j->blossom_sibling); + } +} + +void PerfectMatching::AugmentBranchInit(Node* i0, Node* r) +{ + Node* tree_root_prev = r->tree_sibling_prev; + Node* i; + Node* j; + Arc* aa; + + r->flag = 2; + i = r->first_tree_child; + if ( i ) + while ( 1 ) + { + ARC_HEAD(i->match)->flag = 2; + i->flag = 2; + + MOVE_NODE_IN_TREE(i); + } + i = i0; + if ( !i0->is_tree_root ) + { + j = ARC_HEAD(i0->match); + j->match = aa = j->tree_parent; + i = ARC_HEAD(aa); + while ( !i->is_tree_root ) + { + j = ARC_HEAD(i->match); + i->match = ARC_REV(aa); + j->match = aa = j->tree_parent; + i = ARC_HEAD(aa); + } + i->match = ARC_REV(aa); + } + r->is_tree_root = 0; + tree_root_prev->tree_sibling_next = r->tree_sibling_next; + if (r->tree_sibling_next) r->tree_sibling_next->tree_sibling_prev = tree_root_prev; + tree_num --; +} + +//////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////// + +// true_slack(a) = slack(a) + ... + +// i->flag=0, i->is_processed=1: true_slack -= eps +// i->flag=1, i->match->head->is_processed=1: true_slack += eps - slack(i->match) + +void PerfectMatching::InitGlobal() +{ + Node* i; + Node* j; + Node* r; + Node* r2; + Node* r3 = NULL; // initialize to prevent compiler warning + Edge* a; + EdgeIterator I; + int dir; + Tree TREE; + enum { NONE, AUGMENT, SHRINK } flag; + + InitGreedy(); + + for (i=nodes; ibest_edge = NULL; + + PriorityQueue pq; + + for (r=nodes[node_num].tree_sibling_next; r; ) + { + r2 = r->tree_sibling_next; + if (r2) r3 = r2->tree_sibling_next; + i = r; + + pq.Reset(); + + r->tree = &TREE; + + REAL eps = 0; + Arc* critical_arc = NULL; + REAL critical_eps = PM_INFTY; + flag = NONE; + Node* branch_root = i; + + while ( 1 ) + { + i->is_processed = 1; + i->y -= eps; + if (!i->is_tree_root) ARC_HEAD(i->match)->y += eps; + + FOR_ALL_EDGES(i, a, dir, I) + { + a->slack += eps; + j = a->head[dir]; + + if (j->tree == &TREE) + { + // same tree + if (j->flag == 0) + { + REAL slack = a->slack; + if (!j->is_processed) slack += eps; + if (2*critical_eps > slack || critical_arc == NULL) + { + flag = SHRINK; + critical_eps = slack/2; + critical_arc = EDGE_DIR_TO_ARC(a, dir); + if (critical_eps <= eps) break; + //pq.DecreaseUpperBound(critical_eps); + } + } + } + else if (j->flag == 0) + { + // different tree + if (critical_eps >= a->slack || critical_arc == NULL) + { + flag = AUGMENT; + critical_eps = a->slack; + critical_arc = EDGE_DIR_TO_ARC(a, dir); + if (critical_eps <= eps) break; + //pq.DecreaseUpperBound(critical_eps); + } + } + else + { + // free node + if (a->slack > eps) + { + if (a->slack < critical_eps) + { + if (j->best_edge == NULL) + { + j->best_edge = a; + pq.Add(a); + } + else + { + if (a->slack < j->best_edge->slack) + { + pq.Decrease(j->best_edge, a, pq_buf); + j->best_edge = a; + } + } + } + } + else + { + assert(j->flag == 2 && !j->is_blossom && !ARC_HEAD(j->match)->is_blossom); + if (j->best_edge) pq.Remove(j->best_edge, pq_buf); + j->flag = 1; + j->tree = i->tree; + j->tree_parent = EDGE_DIR_TO_ARC(a, 1-dir); + j = ARC_HEAD(j->match); + if (j->best_edge) pq.Remove(j->best_edge, pq_buf); + ADD_TREE_CHILD(i, j); + } + } + } + + if (dir < 2 && a) + { + Edge* atmp = a; + int dirtmp = dir; + CONTINUE_FOR_ALL_EDGES(i, atmp, dirtmp, I) atmp->slack += eps; + break; + } + + // move i + if (i->first_tree_child) i = i->first_tree_child; + else + { + while (i != branch_root && !i->tree_sibling_next) { i = ARC_HEAD(i->match); i = ARC_HEAD(i->tree_parent); } + if (i == branch_root) + { + PriorityQueue::Item* q = pq.GetMin(); + if (q == NULL || q->slack >= critical_eps) + { + eps = critical_eps; + break; + } + pq.Remove(q, pq_buf); + a = (Edge*)q; + dir = (a->head[0]->flag == 2) ? 0 : 1; + j = a->head[0]; + Arc* aa = EDGE_DIR_TO_ARC(a, dir); + eps = a->slack; + assert(eps < critical_eps); + + // continue growth + i = ARC_TAIL(aa); + j = ARC_HEAD(aa); + + assert(j->flag == 2 && !j->is_blossom && !ARC_HEAD(j->match)->is_blossom); + j->flag = 1; + j->tree = i->tree; + j->tree_parent = ARC_REV(aa); + j = ARC_HEAD(j->match); + if (j->best_edge) pq.Remove(j->best_edge, pq_buf); + ADD_TREE_CHILD(i, j); + i = branch_root = j; + continue; + } + i = i->tree_sibling_next; + } + } + + // update slacks + i = r; + while ( 1 ) + { + if (i->is_processed) + { + i->y += eps; + if (!i->is_tree_root) + { + j = ARC_HEAD(i->match); + j->y -= eps; + REAL delta = eps - ARC_TO_EDGE_PTR(i->match)->slack; + FOR_ALL_EDGES(j, a, dir, I) a->slack += delta; + j->best_edge = NULL; + } + FOR_ALL_EDGES(i, a, dir, I) + { + if (!PriorityQueue::isReset(a)) + { + assert(a->head[dir]->flag == 2 && a->head[dir]->best_edge == a); + a->head[dir]->best_edge = NULL; + PriorityQueue::ResetItem(a); + } + a->slack -= eps; + } + + i->is_processed = 0; + } + else + { + if (!i->is_tree_root) ARC_HEAD(i->match)->best_edge = NULL; + } + i->best_edge = NULL; + + MOVE_NODE_IN_TREE(i); + } + + i = ARC_TAIL(critical_arc); + j = ARC_HEAD(critical_arc); + if (flag == SHRINK) + { + // shrink + ShrinkInit(ARC_TO_EDGE_PTR(critical_arc), r); + } + else + { + // augment + AugmentBranchInit(i, r); + if (j->is_outer) + { + AugmentBranchInit(j, j); + } + else + { + ExpandInit(j); + tree_num --; + } + i->match = critical_arc; + j->match = ARC_REV(critical_arc); + } + + r = r2; + if (r && !r->is_tree_root) r = r3; + } + + if (tree_num > tree_num_max) + { + if (trees) free(trees); + tree_num_max = tree_num; + trees = (Tree*) malloc(tree_num_max*sizeof(Tree)); + } + Tree* t = trees; + for (r=nodes; ris_outer) + { + ExpandInit(r); + r->is_tree_root = 1; + r->flag = 0; + r->first_tree_child = NULL; + if (t == trees) { nodes[node_num].tree_sibling_next = r; r->tree_sibling_prev = &nodes[node_num]; } + else { (t-1)->root->tree_sibling_next = r; r->tree_sibling_prev = (t-1)->root; } + r->tree = t; + t->root = r; + t->eps = 0; + t->first[0] = t->first[1] = NULL; + t->pq_current = NULL; + t->pq00.Reset(); + t->pq0.Reset(); + t->pq_blossoms.Reset(); + t ++; + } + } + assert(t == trees+tree_num); + if (t == trees) nodes[node_num].tree_sibling_next = NULL; + else (t-1)->root->tree_sibling_next = NULL; +} + + + +//----------// +// Interface // +//----------// + + +PerfectMatching::PerfectMatching(int nodeNum, int edgeNumMax) + : trees(NULL), + node_num(nodeNum), + edge_num(0), + edge_num_max(edgeNumMax), + tree_num_max(0), + removed_first(NULL), + blossom_num(0), + removed_num(0), + first_solve(true) +{ + if (node_num & 1) { printf("# of nodes is odd: perfect matching cannot exist\n"); exit(1); } + nodes = (Node*) malloc((node_num+1)*sizeof(Node)); + edges_orig = (char*) malloc(edge_num_max*sizeof(Edge)+1); + edges = (Edge*) ( ( ((POINTER_TYPE)edges_orig) & 1 ) ? (edges_orig + 1) : edges_orig ); + memset(nodes, 0, (node_num+1)*sizeof(Node)); + + blossoms = new DBlock(256); + tree_edges = new DBlock(256); + expand_tmp_list = new Block(256); + pq_buf = PriorityQueue::AllocateBuf(); +} + + +void PerfectMatching::Save(char* filename, int format) +{ + if (!first_solve) { printf("Save() cannot be called after Solve()!\n"); exit(1); } + int e; + FILE* fp = fopen(filename, "w"); + if (!fp) { printf("Can't open %s\n", filename); exit(1); } + if (format == 0) + { + fprintf(fp, "p edge %d %d\n", node_num, edge_num); + for (e=0; e::DeallocateBuf(pq_buf); +} + + +PerfectMatching::EdgeId PerfectMatching::AddEdge(NodeId _i, NodeId _j, REAL cost) +{ + if (_i<0 || _i>=node_num || _j<0 || _j>node_num || _i==_j) + { + printf("wrong node id's! (%d,%d)\n", _i, _j); exit(1); + } + if (edge_num >= edge_num_max) ReallocateEdges(); + Node* i = nodes + _i; + Node* j = nodes + _j; + Edge* a = edges + edge_num; + + ADD_EDGE(i, a, 0); + ADD_EDGE(j, a, 1); + a->head0[0] = j; + a->head0[1] = i; + + a->slack = cost*COST_FACTOR; + PriorityQueue::ResetItem(a); + + return edge_num ++; +} + +int PerfectMatching::GetSolution(EdgeId e) +{ + assert(e>=0 && ehead0[1]->match == EDGE_DIR_TO_ARC(a, 0)) ? 1 : 0; +} + +PerfectMatching::NodeId PerfectMatching::GetMatch(NodeId i) +{ + assert(i>=0 && ihead0[1]; !i->is_outer; i=i->blossom_parent, delta--) {} + for (j=a->head0[0]; !j->is_outer; j=j->blossom_parent, delta++) {} + if ( i == j ) + { + i = a->head0[1]; + j = a->head0[0]; + while ( delta < 0 ) { i = i->blossom_parent; delta ++; } + while ( delta > 0 ) { j = j->blossom_parent; delta --; } + while ( i->blossom_parent != j->blossom_parent ) + { + i = i->blossom_parent; + j = j->blossom_parent; + } + } + tail = i; + head = j; + assert((i->is_outer && j->is_outer) || (i->blossom_parent==j->blossom_parent && !i->is_outer && !j->is_outer)); +} + +void PerfectMatching::ReallocateEdges() +{ + printf("Warning: reallocating edges. Increasing edge_num_max in the constructor may improve memory efficiency!\n"); + edge_num_max = edge_num_max*3/2 + 16; + char* edges_orig_old = edges_orig; + Edge* edges_old = edges; + edges_orig = (char*) realloc(edges_orig_old, edge_num_max*sizeof(Edge)+1); + edges = (Edge*) ( ( ((POINTER_TYPE)edges_orig_old) & 1 ) ? (edges_orig + 1) : edges_orig ); + if ( ((POINTER_TYPE)edges) & 1 ) + { + char* edges_orig_old2 = edges_orig; + Edge* edges_old2 = edges; + + edges_orig = (char*) malloc(edge_num_max*sizeof(Edge)+1); + edges = (Edge*) ( ( ((POINTER_TYPE)edges_orig_old) & 1 ) ? (edges_orig + 1) : edges_orig ); + memcpy(edges, edges_old2, edge_num*sizeof(Edge)); + free(edges_orig_old2); + } + +#define UPDATE_EDGE_PTR(ptr) ptr = (Edge*)((char*)(ptr) + ((char*)edges - (char*)edges_old)) +#define UPDATE_ARC_PTR(ptr) ptr = (Arc*)((char*)(ptr) + ((char*)edges - (char*)edges_old)) + + Node* i; + Edge* a; + for (a=edges; anext[0]) UPDATE_EDGE_PTR(a->next[0]); + if (a->next[1]) UPDATE_EDGE_PTR(a->next[1]); + if (a->prev[0]) UPDATE_EDGE_PTR(a->prev[0]); + if (a->prev[1]) UPDATE_EDGE_PTR(a->prev[1]); + } + if (first_solve) + { + for (i=nodes; ifirst[0]) UPDATE_EDGE_PTR(i->first[0]); + if (i->first[1]) UPDATE_EDGE_PTR(i->first[1]); + } + } + else + { + Node* i0; + for (i0=nodes; i0is_outer) + { + UPDATE_ARC_PTR(i->match); + if (i->first[0]) UPDATE_EDGE_PTR(i->first[0]); + if (i->first[1]) UPDATE_EDGE_PTR(i->first[1]); + break; + } + UPDATE_ARC_PTR(i->blossom_sibling); + if (i->first[0]) UPDATE_EDGE_PTR(i->first[0]); + if (i->first[1]) UPDATE_EDGE_PTR(i->first[1]); + + i = i->blossom_parent; + if (i->is_outer) { if ( i->is_marked) break; i->is_marked = 1; } + else { if (!i->is_marked) break; i->is_marked = 0; } + } + } + for (i0=nodes; i0is_outer) break; + + i = i->blossom_parent; + if (i->is_outer) { if (!i->is_marked) break; i->is_marked = 0; } + else { if ( i->is_marked) break; i->is_marked = 1; } + } + } + } +} + +int PerfectMatching::GetBlossomNum() +{ + return blossom_num; +} + +void PerfectMatching::GetDualSolution(int* blossom_parents, REAL* twice_y) +{ + int _i0, id = node_num; + int* child_ptr; + Node* i0; + Node* i; + int* tmp_array = new int[blossom_num]; + + int* tmp_array_ptr = tmp_array; + for (_i0=0, i0=nodes; _i0y; + if (i0->is_outer) + { + blossom_parents[_i0] = -1; + continue; + } + child_ptr = &blossom_parents[_i0]; + i = i0->blossom_parent; + while ( 1 ) + { + if (i->is_marked) + { + *child_ptr = i->lca_preorder; + break; + } + i->is_marked = 1; + *tmp_array_ptr ++ = i->lca_preorder; + *child_ptr = i->lca_preorder = id ++; + child_ptr = &blossom_parents[i->lca_preorder]; + twice_y[i->lca_preorder] = i->y; + if (i->is_outer) + { + *child_ptr = -1; + break; + } + i = i->blossom_parent; + } + } + + assert(id == node_num+blossom_num && tmp_array_ptr == tmp_array + blossom_num); + + tmp_array_ptr = tmp_array; + for (_i0=0, i0=nodes; _i0is_outer) continue; + i = i0->blossom_parent; + while ( 1 ) + { + if (!i->is_marked) break; + i->is_marked = 0; + i->lca_preorder = *tmp_array_ptr ++; + if (i->is_outer) break; + i = i->blossom_parent; + } + } + + delete [] tmp_array; +} + + + + +//----------// +// Main // +//----------// + + + +void PerfectMatching::Finish() +{ + +#define IS_VALID_MATCH(i) ((Edge*)(i->match) >= edges && (Edge*)(i->match) < edges + edge_num) + + Node* i0; + Node* i; + Node* j; + Node* k; + Node* b; + Node* b_prev; + Node* b_prev_prev; + + for (i0=nodes; i0blossom_grandparent = b_prev; + b_prev = b; + b = b->blossom_parent; + } while (!IS_VALID_MATCH(b)); + + b_prev_prev = b_prev->blossom_grandparent; + while ( 1 ) + { + for (k=ARC_TAIL0(b->match); k->blossom_parent!=b; k=k->blossom_parent) {} + k->match = b->match; + i = ARC_HEAD(k->blossom_sibling); + while ( i != k ) + { + i->match = i->blossom_sibling; + j = ARC_HEAD(i->match); + j->match = ARC_REV(i->match); + i = ARC_HEAD(j->blossom_sibling); + } + + b = b_prev; + if (!b->is_blossom) break; + b_prev = b_prev_prev; + b_prev_prev = b_prev->blossom_grandparent; + } + } +} + + +void PerfectMatching::AddTreeEdge(Tree* t0, Tree* t1) +{ + TreeEdge* e = tree_edges->New(); + e->head[0] = t1; + e->head[1] = t0; + e->next[0] = t0->first[0]; + t0->first[0] = e; + e->next[1] = t1->first[1]; + t1->first[1] = e; + + e->pq00.Reset(); + e->pq01[0].Reset(); + e->pq01[1].Reset(); + + t1->pq_current = e; + t1->dir_current = 0; +} + +bool PerfectMatching::ProcessEdge00(Edge* a, bool update_boundary_edge) +{ + int dir; + Node* j; + Node* prev[2]; + Node* last[2]; + for (dir=0; dir<2; dir++) + { + if (a->head[dir]->is_outer) { prev[dir] = NULL; last[dir] = a->head[dir]; } + else + { + j = a->head[dir]; + GET_PENULTIMATE_BLOSSOM(j); + prev[dir] = j; + last[dir] = prev[dir]->blossom_parent; + //assert(last[dir]->is_outer); + } + } + + if (last[0] != last[1]) + { + for (dir=0; dir<2; dir++) + { + j = a->head[dir]; + if (j != last[dir]) { int dir_rev = 1 - dir; MOVE_EDGE(j, last[dir], a, dir_rev); } + } + if (update_boundary_edge) a->slack -= 2*a->head[0]->tree->eps; + return true; + } + + if (prev[0] != prev[1]) + { + for (dir=0; dir<2; dir++) + { + j = a->head[dir]; + if (j != prev[dir]) { int dir_rev = 1 - dir; MOVE_EDGE(j, prev[dir], a, dir_rev); } + } + a->slack -= 2*prev[0]->blossom_eps; + return false; + } + + for (dir=0; dir<2; dir++) + { + j = a->head[1-dir]; + REMOVE_EDGE(j, a, dir); + } + a->next[0] = prev[0]->blossom_selfloops; + prev[0]->blossom_selfloops = a; + return false; +} + + +inline void PerfectMatching::AugmentBranch(Node* i0) +{ + int dir; + Tree* t = i0->tree; + Node* r = t->root; + Node* tree_root_prev = r->tree_sibling_prev; + Node* i; + Node* j; + Edge* a; + EdgeIterator I; + Arc* aa; + REAL eps = t->eps; + PriorityQueue::Item* q; + TreeEdge* e; + TreeEdgeIterator T; + Tree* t2; + + t = r->tree; + t->pq_current = t; + + FOR_ALL_TREE_EDGES_X(t, e, dir, T) + { + t2 = e->head[dir]; + e->head[1-dir] = NULL; // mark it for deletion + + t2->pq_current = e; + t2->dir_current = dir; + } + + i = r->first_tree_child; + if ( i ) + while ( 1 ) + { + Node* i0 = i; + i = ARC_HEAD(i->match); + if (i->is_processed) + { + if (i->is_blossom) + { + a = ARC_TO_EDGE_PTR(i->match); + REAL tmp = a->slack; a->slack = i->y; i->y = tmp; + PriorityQueue::ResetItem(a); + } + FOR_ALL_EDGES(i, a, dir, I) + { + GET_OUTER_HEAD(a, dir, j); + + if (j->flag == 0 && j->is_processed) + { + if (j->tree != t) + { + a->slack += eps; + if (PriorityQueue::isReset(a)) j->tree->pq0.Add(a); + } + } + else a->slack += eps; + } + } + + i = i0; + MOVE_NODE_IN_TREE(i); + } + + /////////////////////////////////////////////////////////////////// + + FOR_ALL_TREE_EDGES(t, e, dir) + { + t2 = e->head[dir]; + t2->pq_current = NULL; + + e->pq01[1-dir].Merge(t2->pq0); + for (q=e->pq00.GetFirst(); q; q=e->pq00.GetNext(q)) + { + q->slack -= eps; + int dir2; + for (dir2=0; dir2<2; dir2++) GET_OUTER_HEAD((Edge*)q, dir2, j); + } + e->pq00.Merge(t2->pq0); + for (q=e->pq01[dir].GetAndResetFirst(); q; q=e->pq01[dir].GetAndResetNext()) + { + q->slack -= eps; + int dir2; + for (dir2=0; dir2<2; dir2++) GET_OUTER_HEAD((Edge*)q, dir2, j); + } + } + for (q=t->pq0.GetAndResetFirst(); q; q=t->pq0.GetAndResetNext()) + { + q->slack -= eps; + int dir2; + for (dir2=0; dir2<2; dir2++) GET_OUTER_HEAD((Edge*)q, dir2, j); + } + for (q=t->pq00.GetAndResetFirst(); q; q=t->pq00.GetAndResetNext()) + { + ProcessEdge00((Edge*)q); + } + + /////////////////////////////////////////////////////////////////// + + r->flag = 2; + r->is_processed = 0; + i = r->first_tree_child; + r->y += eps; + if ( i ) + while ( 1 ) + { + j = ARC_HEAD(i->match); + j->flag = 2; + i->flag = 2; + j->is_processed = 0; + i->is_processed = 0; + j->y -= eps; + i->y += eps; + + MOVE_NODE_IN_TREE(i); + } + + /////////////////////////////////////////////////////////////////// + + i = i0; + if ( !i0->is_tree_root ) + { + j = ARC_HEAD(i0->match); + GET_TREE_PARENT(j, i); + j->match = aa = j->tree_parent; + while ( !i->is_tree_root ) + { + j = ARC_HEAD(i->match); + i->match = ARC_REV(aa); + GET_TREE_PARENT(j, i); + j->match = aa = j->tree_parent; + } + i->match = ARC_REV(aa); + } + r->is_tree_root = 0; + tree_root_prev->tree_sibling_next = r->tree_sibling_next; + if (r->tree_sibling_next) r->tree_sibling_next->tree_sibling_prev = tree_root_prev; + tree_num --; +} + + +void PerfectMatching::Augment(Edge* a) +{ + Node* j; + int dir; + + for (dir=0; dir<2; dir++) + { + GET_OUTER_HEAD(a, dir, j); + AugmentBranch(j); + j->match = EDGE_DIR_TO_ARC(a, 1-dir); + } + if (options.verbose) + { + int k = 1; + while (k < tree_num) k *= 2; + if (k == tree_num || tree_num<=8 || (tree_num<=64 && (tree_num%8)==0)) { printf("%d.", tree_num); fflush(stdout); } + } +} + +inline void PerfectMatching::GrowNode(Node* i) +{ + //assert(i->is_outer); + //assert(i->flag == 0); + + Edge* a; + EdgeIterator I; + int dir; + Node* j; + Tree* t = i->tree; + REAL eps = t->eps; + Edge* a_augment = NULL; + + FOR_ALL_EDGES(i, a, dir, I) + { + GET_OUTER_HEAD(a, dir, j); + + if (j->flag == 2) + { + a->slack += eps; + if (a->slack > 0) + { + t->pq0.Add(a); + } + else + { + j->flag = 1; + j->tree = i->tree; + j->tree_parent = EDGE_DIR_TO_ARC(a, 1-dir); + j->y += eps; + j = ARC_HEAD(j->match); + j->y -= eps; + ADD_TREE_CHILD(i, j); + } + } + else + { + if (j->flag == 0 && j->is_processed) + { + if (!PriorityQueue::isReset(a)) j->tree->pq0.Remove(a, pq_buf); + if (a->slack <= j->tree->eps && j->tree != t) a_augment = a; + a->slack += eps; + if (!j->tree->pq_current) AddTreeEdge(t, j->tree); + j->tree->pq_current->pq00.Add(a); + } + else + { + a->slack += eps; + if (j->flag == 1 && j->tree != t) + { + if (!j->tree->pq_current) AddTreeEdge(t, j->tree); + j->tree->pq_current->pq01[j->tree->dir_current].Add(a); + } + } + } + } + + //assert(!i->is_processed); + i->is_processed = 1; + + if (!i->is_tree_root) + { + j = ARC_HEAD(i->match); + //assert(!j->is_processed); + j->is_processed = 1; + if (j->is_blossom) + { + a = ARC_TO_EDGE_PTR(i->match); + REAL tmp = a->slack; a->slack = j->y; j->y = tmp; + t->pq_blossoms.Add(a); + } + } + + if (a_augment) Augment(a_augment); + + stat.grow_count ++; +} + + + +void PerfectMatching::GrowTree(Node* r, bool new_subtree) +{ + //assert(r->flag == 0); + + Node* i = r; + Node* j; + Node* stop = r->tree_sibling_next; + if (new_subtree && r->first_tree_child) stop = r->first_tree_child; + Edge* a; + EdgeIterator I; + int dir; + Tree* t = r->tree; + REAL eps = t->eps; + int tree_num0 = tree_num; + + while ( 1 ) + { + if (!i->is_tree_root) + { + // process "-" node + i = ARC_HEAD(i->match); + FOR_ALL_EDGES(i, a, dir, I) + { + GET_OUTER_HEAD(a, dir, j); + + if (j->flag == 2) a->slack -= eps; + else + { + if (j->flag == 0 && j->is_processed) + { + if (!PriorityQueue::isReset(a)) j->tree->pq0.Remove(a, pq_buf); + a->slack -= eps; + if (j->tree != t) + { + if (!j->tree->pq_current) AddTreeEdge(t, j->tree); + j->tree->pq_current->pq01[1-j->tree->dir_current].Add(a); + } + } + else a->slack -= eps; + } + } + i = ARC_HEAD(i->match); + } + // process "+" node + GrowNode(i); + if (tree_num != tree_num0) break; + + if (i->first_tree_child) i = i->first_tree_child; + else + { + while (i != r && !i->tree_sibling_next) { i = ARC_HEAD(i->match); GET_TREE_PARENT(i, i); } + i = i->tree_sibling_next; + } + if (i == stop) break; + } +} + +void PerfectMatching::Solve(bool finish) +{ + Node* i; + Node* j; + Node* r; + Node* r2; + Node* r3 = NULL; // initialize to prevent compiler warning + PriorityQueue::Item* q; + Edge* a; + Tree* t; + Tree* t2; + TreeEdge* e; + TreeEdgeIterator T; + int dir; + REAL eps; + + double start_time = get_time(); + + if (IS_INT) + { + if (options.dual_greedy_update_option == 2) + { + printf("Fixed eps approach can only be used with floating point REAL!\n"); + printf("Change REAL to double in PerfectMatching.h and recompile\n"); + exit(1); + } + if (options.dual_LP_threshold > 0) + { + printf("LP approach can only be used with floating point REAL!\n"); + printf("Change REAL to double in PerfectMatching.h and recompile\n"); + exit(1); + } + } + if (options.verbose) { printf("perfect matching with %d nodes and %d edges\n", node_num, edge_num); fflush(stdout); } + + if (first_solve) + { + if (options.verbose) { printf(" starting init..."); fflush(stdout); } + if (options.fractional_jumpstart) InitGlobal(); + else InitGreedy(); + if (options.verbose) printf("done [%.3f secs]. ", get_time() - start_time); + first_solve = false; + } + else if (options.verbose) printf(" solving updated problem. "); + + if (options.verbose) { printf("%d trees\n .", tree_num); fflush(stdout); } + + memset(&stat, 0, sizeof(Stat)); + + /////////////////////////////////////////////////////// + // first pass - initialize auxiliary graph // + /////////////////////////////////////////////////////// + + for (r=nodes[node_num].tree_sibling_next; r; r=r->tree_sibling_next) + { + //assert(!r->is_processed); + t = r->tree; + //assert(!t->first[0] && !t->first[1]); + + EdgeIterator I; + FOR_ALL_EDGES(r, a, dir, I) + { + j = a->head[dir]; + if (j->flag == 2) t->pq0.Add(a); + else if (j->is_processed) + { + //assert(j->flag == 0); + if (!j->tree->pq_current) AddTreeEdge(t, j->tree); + j->tree->pq_current->pq00.Add(a); + } + } + r->is_processed = 1; + FOR_ALL_TREE_EDGES(t, e, dir) e->head[dir]->pq_current = NULL; + } + + /////////////////////////////////////////////////////// + // main loop // + /////////////////////////////////////////////////////// + + while ( 1 ) + { + int tree_num0 = tree_num; + Stat stat0 = stat; + REAL delta = 0; + + for (r=nodes[node_num].tree_sibling_next; r; ) + { + r2 = r->tree_sibling_next; + if (r2) r3 = r2->tree_sibling_next; + t = r->tree; + + int tree_num1 = tree_num; + + ////////////////////////////////////////////////////////////////////// + // step 1 - traversing auxiliary graph, setting pq_current pointers // + ////////////////////////////////////////////////////////////////////// + t->pq_current = t; + if (options.update_duals_before) + { + eps = PM_INFTY; + Edge* a_augment = NULL; + REAL eps_augment = PM_INFTY; + if ((q=t->pq0.GetMin())) eps = q->slack; + if ((q=t->pq_blossoms.GetMin()) && eps > q->slack) eps = q->slack; + while ((q=t->pq00.GetMin())) + { + if (ProcessEdge00((Edge*)q, false)) break; + t->pq00.Remove(q, pq_buf); + } + if (q && 2*eps > q->slack) eps = q->slack/2; + FOR_ALL_TREE_EDGES_X(t, e, dir, T) + { + t2 = e->head[dir]; + t2->pq_current = e; + t2->dir_current = dir; + if ((q=e->pq00.GetMin()) && (!a_augment || eps_augment > q->slack-t2->eps)) { a_augment = (Edge*)q; eps_augment = q->slack-t2->eps; } + if ((q=e->pq01[dir].GetMin()) && eps > q->slack+t2->eps) eps = q->slack+t2->eps; + } + if (eps > eps_augment) eps = eps_augment; + if (eps > t->eps) + { + delta += eps - t->eps; + t->eps = eps; + } + if (a_augment && eps_augment <= t->eps) Augment(a_augment); + } + else + { + FOR_ALL_TREE_EDGES_X(t, e, dir, T) + { + t2 = e->head[dir]; + t2->pq_current = e; + t2->dir_current = dir; + + if ((q=e->pq00.GetMin()) && (q->slack - t->eps <= t2->eps)) + { + Augment((Edge*)q); + break; + } + } + } + + ///////////////////////////////// + // step 2 - growing tree // + ///////////////////////////////// + eps = t->eps; + REAL twice_eps = 2*eps; + + while ( tree_num1 == tree_num ) + { + if ((q=t->pq0.GetMin()) && q->slack <= t->eps) + { + a = (Edge*)q; + dir = (a->head[1]->flag == 2 && a->head[1]->is_outer) ? 1 : 0; + GET_OUTER_HEAD(a, 1-dir, i); + j = a->head[dir]; + //assert(i->flag==0 && j->flag==2 && i->is_outer && j->is_outer && i->tree==t); + + j->flag = 1; + j->tree = i->tree; + j->tree_parent = EDGE_DIR_TO_ARC(a, 1-dir); + j->y += eps; + j = ARC_HEAD(j->match); + j->y -= eps; + ADD_TREE_CHILD(i, j); + + GrowTree(j, true); + } + else if ((q=t->pq00.GetMin()) && q->slack <= twice_eps) + { + t->pq00.Remove(q, pq_buf); + a = (Edge*)q; + if (ProcessEdge00(a)) Shrink(a); + } + else if ((q=t->pq_blossoms.GetMin()) && q->slack <= eps) + { + t->pq_blossoms.Remove(q, pq_buf); + a = (Edge*)q; + j = (a->head[0]->flag == 1) ? a->head[0] : a->head[1]; + REAL tmp = a->slack; a->slack = j->y; j->y = tmp; + Expand(j); + } + else break; + } + + /////////////////////////////////////////////////////////////////////// + // step 3 - traversing auxiliary graph, clearing pq_current pointers // + /////////////////////////////////////////////////////////////////////// + if ( tree_num1 == tree_num ) + { + t->pq_current = NULL; + if (options.update_duals_after) + { + eps = PM_INFTY; + Edge* a_augment = NULL; + REAL eps_augment = PM_INFTY; + if ((q=t->pq0.GetMin())) eps = q->slack; + if ((q=t->pq_blossoms.GetMin()) && eps > q->slack) eps = q->slack; + while ((q=t->pq00.GetMin())) + { + if (ProcessEdge00((Edge*)q, false)) break; + t->pq00.Remove(q, pq_buf); + } + if (q && 2*eps > q->slack) eps = q->slack/2; + FOR_ALL_TREE_EDGES(t, e, dir) + { + t2 = e->head[dir]; + e->head[dir]->pq_current = NULL; + if ((q=e->pq00.GetMin()) && (!a_augment || eps_augment > q->slack-t2->eps)) { a_augment = (Edge*)q; eps_augment = q->slack-t2->eps; } + if ((q=e->pq01[dir].GetMin()) && eps > q->slack+t2->eps) eps = q->slack+t2->eps; + } + if (eps > eps_augment) eps = eps_augment; + bool progress = false; + if (eps > t->eps) + { + delta += eps - t->eps; + t->eps = eps; + progress = true; + } + if (a_augment && eps_augment <= t->eps) Augment(a_augment); + else if (progress && tree_num >= options.single_tree_threshold*node_num) + { + // continue with the same tree + r = t->root; + continue; + } + } + else + { + FOR_ALL_TREE_EDGES(t, e, dir) e->head[dir]->pq_current = NULL; + } + } + + /////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////////// + + r = r2; + if (r && !r->is_tree_root) r = r3; + } + + if (tree_num == 0) break; + + if ( tree_num == tree_num0 ) + //&& stat.grow_count == stat0.grow_count + //&& stat.shrink_count == stat0.shrink_count + //&& stat.expand_count == stat0.expand_count ) + { + if (!UpdateDuals()) + { + if (!IS_INT && delta <= PM_THRESHOLD) // for numerical stability + { + //CommitEps(); + int dual_greedy_update_option = options.dual_greedy_update_option; + options.dual_greedy_update_option = 2; + UpdateDuals(); + options.dual_greedy_update_option = dual_greedy_update_option; + } + } + } + } + + if (finish) Finish(); + + if (options.verbose) + { + printf("\ndone [%.3f secs]. %d grows, %d expands, %d shrinks\n", get_time()-start_time, stat.grow_count, stat.expand_count, stat.shrink_count); + printf(" expands: [%.3f secs], shrinks: [%.3f secs], dual updates: [%.3f secs]\n", stat.expand_time, stat.shrink_time, stat.dual_time); + fflush(stdout); + } +} + + + + +//----------// +// Repair // +//----------// + + +struct PerfectMatching::LCATreeX : LCATree +{ + LCATreeX(int size) : LCATree(size) { rev_mapping = new Node*[size]; } + ~LCATreeX() { delete [] rev_mapping; } + Node** rev_mapping; +}; + +void PerfectMatching::StartUpdate() +{ + Node* i0; + Node* i; + Node* j; + Node* b; + + while ((i=removed_first)) + { + removed_first = i->tree_sibling_next; + blossoms->Delete(i); + removed_num --; + } + + Edge* a; + Edge* selfloop_first = NULL; + Edge* selfloop_last = NULL; + + for (i0=nodes; i0is_processed = 0; + if (i0->is_outer) continue; + + i0->is_tree_root = 0; + i0->blossom_ptr = NULL; + i = i0; + while ( 1 ) + { + j = i->blossom_parent; + j->is_processed = 0; + if (j->is_outer) { j->first_tree_child = i; break; } + if (j->is_marked) break; + if ((a=j->blossom_selfloops)) + { + if (selfloop_last) selfloop_last->next[1] = a; + else selfloop_first = a; + selfloop_last = a; + a->next[1] = NULL; + } + j->blossom_ptr = i; + i = j; + } + b = (i->blossom_parent->is_outer) ? i->blossom_parent : i->blossom_parent->blossom_grandparent; +#ifdef LCA_REPAIRS + if (!b->is_marked) + { + b->lca_size = 1; + b->is_marked = 1; + } +#endif + while ( 1 ) + { +#ifdef LCA_REPAIRS + b->lca_size ++; +#endif + ARC_TO_EDGE_PTR(i->blossom_sibling)->y_saved = i->y; + i->y += i->blossom_parent->y; + if (!i->is_blossom) break; + i->is_marked = 1; + j = i; + i = i->blossom_ptr; + j->blossom_grandparent = b; + } + i->blossom_grandparent = b; + } + +#ifdef LCA_REPAIRS + for (i0=nodes; i0is_outer) continue; + b = i0->blossom_grandparent; + if (!b->is_marked) continue; + b->is_marked = 0; + LCATreeX* lca = new LCATreeX(b->lca_size); + b->blossom_ptr = b->first_tree_child; + i = b; + while ( 1 ) + { + if (i->blossom_ptr) i = i->blossom_ptr; + else + { + while ( 1 ) + { + if (i->is_outer) break; + i->lca_preorder = lca->Add(i, i->blossom_parent); + lca->rev_mapping[i->lca_preorder] = i; + i = ARC_HEAD(i->blossom_sibling); + if (i != i->blossom_parent->blossom_ptr) break; + i = i->blossom_parent; + } + if (i->is_outer) + { + lca->AddRoot(i); + break; + } + } + } + b->lca = lca; + } +#endif + + while ((a=selfloop_first)) + { + selfloop_first = a->next[1]; + do + { + Edge* a_next = a->next[0]; + +#ifdef LCA_REPAIRS + int _i = a->head0[1]->lca_preorder; + int _j = a->head0[0]->lca_preorder; + Node* b = a->head0[1]->blossom_grandparent; + b->lca->GetPenultimateNodes(_i, _j); + i = b->lca->rev_mapping[_i]; + j = b->lca->rev_mapping[_j]; +#else + GetRealEndpoints(a, i, j); +#endif + ADD_EDGE(i, a, 0); + ADD_EDGE(j, a, 1); + a->slack -= 2*i->blossom_eps; + a = a_next; + } while ( a ); + } + + /* + for (i0=nodes; i0is_outer) continue; + b = i0->blossom_grandparent; + if (b->lca) + { + delete b->lca; + b->lca = NULL; + } + } + */ + + nodes[node_num].first_tree_child = NULL; +} + +void PerfectMatching::FinishUpdate() +{ + Node* i0; + Node* i; + Node* j; + Edge* a; + EdgeIterator I; + int dir; + Tree* t; + + for (i0=nodes; i0is_outer) continue; + +#ifdef LCA_REPAIRS + if (i0->blossom_grandparent->lca) + { + delete i0->blossom_grandparent->lca; + i0->blossom_grandparent->lca = NULL; + } +#endif + + ////////////////////////////////////////////////////////////// + if (!i0->blossom_grandparent->is_removed) + { + i = i0; + do + { + i->y = ARC_TO_EDGE_PTR(i->blossom_sibling)->y_saved; + i->is_marked = 0; + i->blossom_selfloops = NULL; + i = i->blossom_parent; + } while (i->is_marked); + continue; + } + ////////////////////////////////////////////////////////////// + + i = i0->blossom_parent; + while ( 1 ) + { + if (i->is_removed && !i->is_outer) break; + REAL y_parent = (i->is_outer) ? 0 : i->blossom_parent->y; + for (dir=0; dir<2; dir++) + { + if (!i->first[dir]) continue; + i->first[dir]->prev[dir]->next[dir] = NULL; + Edge* a_next; + for (a=i->first[dir]; a; a=a_next) + { + a_next = a->next[dir]; + j = a->head0[1-dir]; + ADD_EDGE(j, a, dir); + a->slack += j->blossom_parent->y - y_parent; + } + i->first[dir] = NULL; + } + if (i->is_removed) break; + + j = i->blossom_parent; + i->is_removed = 1; + i->tree_sibling_next = removed_first; + removed_first = i; + i = j; + } + i0->y = ARC_TO_EDGE_PTR(i0->blossom_sibling)->y_saved; + i0->is_outer = 1; + i0->flag = 2; + i0->is_tree_root = 1; + } + + Node* blossom_list = nodes[node_num].first_tree_child; + + + + for (i=nodes; iis_tree_root) continue; + i->first_tree_child = nodes[node_num].first_tree_child; + nodes[node_num].first_tree_child = i; + REAL slack_min = PM_INFTY; + FOR_ALL_EDGES(i, a, dir, I) + { + if (slack_min > a->slack) slack_min = a->slack; + } + i->y += slack_min; + FOR_ALL_EDGES(i, a, dir, I) a->slack -= slack_min; + } + + tree_num = 0; + for (i=nodes[node_num].first_tree_child; i!=blossom_list; i=i->first_tree_child) + { + tree_num ++; + if (!i->is_tree_root) continue; + FOR_ALL_EDGES(i, a, dir, I) + { + j = a->head[dir]; + if (a->slack <= 0 && j->is_tree_root) + { + i->is_tree_root = j->is_tree_root = 0; + i->match = EDGE_DIR_TO_ARC(a, dir); + j->match = EDGE_DIR_TO_ARC(a, 1-dir); + tree_num -= 2; + break; + } + } + } + for ( ; i; i=i->first_tree_child) + { + if (i->is_removed) { i->is_tree_root = 0; continue; } + tree_num ++; + } + + if (tree_num > tree_num_max) + { + if (trees) free(trees); + tree_num_max = tree_num; + trees = (Tree*) malloc(tree_num_max*sizeof(Tree)); + } + t = trees; + + Node* last_root = &nodes[node_num]; + Node* i_next; + for (i=nodes; i; i=i_next) + { + if (!i->is_blossom) i_next = (ifirst_tree_child; + if (!i->is_tree_root) continue; + + i->flag = 0; + i->first_tree_child = NULL; + i->tree_sibling_prev = last_root; + last_root->tree_sibling_next = i; + last_root = i; + i->tree = t; + t->root = i; + t->eps = 0; + t->first[0] = t->first[1] = NULL; + t->pq_current = NULL; + t->pq00.Reset(); + t->pq0.Reset(); + t->pq_blossoms.Reset(); + t ++; + } + + assert(t == trees + tree_num); + last_root->tree_sibling_next = NULL; + + while ((i=removed_first)) + { + removed_first = i->tree_sibling_next; + blossoms->Delete(i); + blossom_num --; + } +} + +PerfectMatching::REAL PerfectMatching::GetTwiceSum(NodeId i) +{ + assert(i>=0 && ihead0[dir]; + if (i->is_outer) + { + if (!i->is_tree_root) + { + i->is_tree_root = 1; + i = ARC_HEAD(i->match); + assert(!i->is_tree_root && i->is_outer); + i->is_tree_root = 1; + if (i->is_blossom) + { + i->first_tree_child = nodes[node_num].first_tree_child; + nodes[node_num].first_tree_child = i; + } + } + return; + } + if (i->blossom_grandparent->is_removed) return; + } + + Node* b = i->blossom_grandparent; + assert(b->is_outer); + + if (!b->is_tree_root) + { + b->is_tree_root = 1; + i = ARC_HEAD(b->match); + assert(!i->is_tree_root && i->is_outer); + i->is_tree_root = 1; + if (i->is_blossom) + { + i->first_tree_child = nodes[node_num].first_tree_child; + nodes[node_num].first_tree_child = i; + } + } + + b->is_removed = 1; + b->tree_sibling_next = removed_first; + removed_first = b; +} + +PerfectMatching::EdgeId PerfectMatching::AddNewEdge(NodeId _i, NodeId _j, REAL cost, bool do_not_add_if_positive_slack) +{ + assert(_i>=0 && _i=0 && _j= edge_num_max) ReallocateEdges(); + Node* i = nodes + _i; + Node* j = nodes + _j; + Edge* a = edges + edge_num; + + a->slack = cost*COST_FACTOR; + a->head0[0] = j; + a->head0[1] = i; + Node* bi = (i->is_outer) ? i : i->blossom_grandparent; + Node* bj = (j->is_outer) ? j : j->blossom_grandparent; + if (bi == bj) + { +#ifdef LCA_REPAIRS + int _i = i->lca_preorder; + int _j = j->lca_preorder; + bi->lca->GetPenultimateNodes(_i, _j); + i = bi->lca->rev_mapping[_i]; + j = bi->lca->rev_mapping[_j]; +#else + GetRealEndpoints(a, i, j); +#endif + a->slack += i->blossom_parent->y + j->blossom_parent->y; + } + else + { + i = bi; + j = bj; + } + a->slack -= a->head0[0]->y + a->head0[1]->y; + + if (a->slack >= 0 && do_not_add_if_positive_slack) return -1; + + ADD_EDGE(i, a, 0); + ADD_EDGE(j, a, 1); + PriorityQueue::ResetItem(a); + + if (a->slack < 0) + { + ProcessNegativeEdge(a); + } + + return edge_num ++; +} + +void PerfectMatching::UpdateCost(EdgeId e, REAL delta_cost) +{ + assert(e>=0 && eslack += delta_cost*COST_FACTOR; + if (a->slack == 0) return; + if (a->slack > 0) + { + Node* i = a->head[1]; + Node* j = a->head[0]; + if (i->is_outer) + { + if (ARC_TO_EDGE_PTR(i->match) != a && ARC_TO_EDGE_PTR(j->match) != a) return; + } + else + { + if (ARC_TO_EDGE_PTR(i->blossom_sibling) != a && ARC_TO_EDGE_PTR(j->blossom_sibling) != a) return; + } + } + ProcessNegativeEdge(a); +} + + + + +//----------// +// Shrink // +//----------// + + + +PerfectMatching::Node* PerfectMatching::FindBlossomRoot(Edge* a0) +{ + Node* i; + Node* j; + Node* _i[2]; + Node* r; + int branch; + + _i[0] = ARC_HEAD(a0); + _i[1] = ARC_TAIL(a0); + branch = 0; + while ( 1 ) + { + if (_i[branch]->is_marked) + { + r = _i[branch]; + j = _i[1-branch]; + break; + } + _i[branch]->is_marked = 1; + if (_i[branch]->is_tree_root) + { + j = _i[branch]; + i = _i[1-branch]; + while (!i->is_marked) + { + i->is_marked = 1; + i = ARC_HEAD(i->match); + GET_TREE_PARENT(i, i); + } + r = i; + break; + } + i = ARC_HEAD(_i[branch]->match); + GET_TREE_PARENT(i, _i[branch]); + branch = 1 - branch; + } + i = r; + while ( i != j ) + { + i = ARC_HEAD(i->match); + i = ARC_HEAD(i->tree_parent); + i->is_marked = 0; + } + // clear is_marked and is_outer + i = ARC_HEAD(a0); + while (i != r) + { + i->is_marked = 0; + i->is_outer = 0; + i = ARC_HEAD(i->match); + i->is_outer = 0; + i = ARC_HEAD(i->tree_parent); + } + i = ARC_TAIL(a0); + while (i != r) + { + i->is_marked = 0; + i->is_outer = 0; + i = ARC_HEAD(i->match); + i->is_outer = 0; + i = ARC_HEAD(i->tree_parent); + } + r->is_marked = 0; + r->is_outer = 0; + + return r; +} + + +void PerfectMatching::Shrink(Edge* a0) +{ + //assert(a0->head[0]->is_outer && a0->head[1]->is_outer); + //assert(a0->head[0]->flag == 0 && a0->head[1]->flag == 0); + + double start_time = get_time(); + + int branch, dir; + Node* r; + Node* i; + Node* j; + Edge* a; + Edge** a_inner_ptr; + Arc* a_prev; + Node* b = blossoms->New(); + Edge* a_augment = NULL; + Edge* b_match; + + b->first[0] = b->first[1] = NULL; + + // set is_outer=0 for all nodes in the blossom + r = FindBlossomRoot(a0); + Tree* t = r->tree; + REAL eps = t->eps; + + b->first_tree_child = NULL; + i = ARC_HEAD(a0); + branch = 0; + while ( 1 ) + { + if (i == r && branch) break; + i->is_marked = 1; + if (i == r) + { + branch = 1; + i = ARC_TAIL(a0); + continue; + } + + // remove i from the list of children + REMOVE_FROM_TREE(i); + + // move children of i to the list of children of b + if (i->first_tree_child) + { + j = i->first_tree_child; + if (!b->first_tree_child) b->first_tree_child = j; + else + { + Node* j_last = j->tree_sibling_prev; + j->tree_sibling_prev = b->first_tree_child->tree_sibling_prev; + b->first_tree_child->tree_sibling_prev->tree_sibling_next = j; + b->first_tree_child->tree_sibling_prev = j_last; + } + } + + // go to parent + i = ARC_HEAD(i->match); + i->is_marked = 1; + if (i->is_blossom) + { + a = ARC_TO_EDGE_PTR(i->match); + t->pq_blossoms.Remove(a, pq_buf); + REAL tmp = a->slack; a->slack = i->y; i->y = tmp; + } + i = ARC_HEAD(i->tree_parent); + } + + // move children of r to the list of children of b + if (i->first_tree_child) + { + j = i->first_tree_child; + if (!b->first_tree_child) b->first_tree_child = j; + else + { + Node* j_last = j->tree_sibling_prev; + j->tree_sibling_prev = b->first_tree_child->tree_sibling_prev; + b->first_tree_child->tree_sibling_prev->tree_sibling_next = j; + b->first_tree_child->tree_sibling_prev = j_last; + } + } + + // init b + b->is_removed = 0; + b->is_outer = 1; + b->flag = 0; + b->is_blossom = 1; + b->is_tree_root = r->is_tree_root; + b->is_processed = 1; + b->tree = t; + b->y = -eps; + b->is_marked = 0; + + // replace r with b in the tree + b->tree_sibling_prev = r->tree_sibling_prev; + b->tree_sibling_next = r->tree_sibling_next; + Node* b_parent = NULL; + if (!b->is_tree_root) + { + b_parent = ARC_HEAD(r->match); GET_TREE_PARENT(b_parent, b_parent); + } + if (b->tree_sibling_prev->tree_sibling_next) b->tree_sibling_prev->tree_sibling_next = b; + else b_parent->first_tree_child = b; + if (b->tree_sibling_next) b->tree_sibling_next->tree_sibling_prev = b; + else if (b_parent) b_parent->first_tree_child->tree_sibling_prev = b; + + if (b->is_tree_root) + { + b->tree->root = b; + b_match = NULL; + } + else + { + b->match = r->match; + b_match = ARC_TO_EDGE_PTR(b->match); + } + REAL b_match_slack = 0; // initialize to prevent compiler warning + if (b_match && ARC_HEAD(b->match)->is_blossom) + { + b_match_slack = b_match->slack; + b_match->slack = ARC_HEAD(b->match)->y; + } + + // second pass over nodes in the blossom + branch = 0; + a_prev = EDGE_DIR_TO_ARC(a0, 0); + i = ARC_HEAD(a_prev); + while ( 1 ) + { + // update Arc::next and Arc::head pointers + if (i->flag == 0) i->y += eps; + else i->y -= eps; + i->is_processed = 0; + + if (i->flag == 1) + { + Edge* a_prev; + for (dir=0; dir<2; dir++) + if (i->first[dir]) + { + for (a_inner_ptr=&i->first[dir], a=*a_inner_ptr, a_prev=a->prev[dir], a_prev->next[dir]=NULL; a; a=*a_inner_ptr) + { + Node* j0 = a->head[dir]; + for (j=j0; !j->is_outer && !j->is_marked; j = j->blossom_parent) {} + if (j != j0) { /*assert(j->flag == 0);*/ int dir_rev = 1 - dir; MOVE_EDGE(j0, j, a, dir_rev); } + if (j->is_marked) // "inner" arc + { + a_inner_ptr = &a->next[dir]; + a->prev[dir] = a_prev; + a_prev = a; + + if (j->flag == 1) a->slack += eps; + } + else // "boundary" arc + { + *a_inner_ptr = a->next[dir]; + ADD_EDGE(b, a, dir); + + if (j->flag == 0 && j->tree != t) + { + j->tree->pq_current->pq01[1-j->tree->dir_current].Remove(a, pq_buf); + if (a->slack + eps <= j->tree->eps) a_augment = a; + } + a->slack += 2*eps; + if (j->flag == 2) t->pq0.Add(a); + else if (j->flag == 0) + { + if (!j->tree->pq_current) AddTreeEdge(t, j->tree); + j->tree->pq_current->pq00.Add(a); + } + else if (j->tree != t) + { + if (!j->tree->pq_current) AddTreeEdge(t, j->tree); + j->tree->pq_current->pq01[j->tree->dir_current].Add(a); + } + } + } + if (i->first[dir]) + { + a_prev->next[dir] = i->first[dir]; + i->first[dir]->prev[dir] = a_prev; + } + } + } + + Arc* a_next = (i->flag == 0) ? i->match : i->tree_parent; + i->blossom_parent = b; + i->match = NULL; + i->blossom_grandparent = b; + i->blossom_selfloops = NULL; + if (branch == 0) + { + i->blossom_sibling = a_next; + if (i == r) + { + branch = 1; + a_prev = ARC_REV(a0); + i = ARC_HEAD(a_prev); + if (i == r) break; + } + else + { + a_prev = i->blossom_sibling; + i = ARC_HEAD(a_prev); + } + } + else + { + i->blossom_sibling = ARC_REV(a_prev); + a_prev = a_next; + i = ARC_HEAD(a_prev); + if (i == r) break; + } + } + i->blossom_sibling = ARC_REV(a_prev); + r->is_tree_root = 0; + + for (i=ARC_HEAD(r->blossom_sibling); ; i = ARC_HEAD(i->blossom_sibling)) + { + i->is_marked = 0; + i->blossom_eps = eps; + if (i == r) break; + } + + if (b_match) + { + if (ARC_HEAD(b->match)->is_blossom) + { + b_match->slack = b_match_slack; + } + dir = ARC_TO_EDGE_DIR(b->match); + //assert(b_match->head[1-dir] == r); + MOVE_EDGE(r, b, b_match, dir); + } + + stat.shrink_count ++; + blossom_num ++; + stat.shrink_time += get_time() - start_time; + + if (a_augment) Augment(a_augment); +} + diff --git a/src/blossom5/PerfectMatching.h b/src/blossom5/PerfectMatching.h new file mode 100644 index 0000000..459f475 --- /dev/null +++ b/src/blossom5/PerfectMatching.h @@ -0,0 +1,232 @@ +/* + PerfectMatching.h - interface to min cost perfect matching code + + Copyright 2008 Vladimir Kolmogorov (vnk@adastral.ucl.ac.uk) + + This software can be used for research and evaluation purposes only. Commercial use is prohibited. + Public redistribution of the code or its derivatives is prohibited. + If you use this software for research purposes, you should cite the following paper in any resulting publication: + Vladimir Kolmogorov. "Blossom V: A new implementation of a minimum cost perfect matching algorithm." + In Mathematical Programming Computation (MPC), July 2009, 1(1):43-67. + + For commercial use of the software not covered by this agreement, please contact the author. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +#ifndef HALSKDJDFHALSJASFDFASJGLA +#define HALSKDJDFHALSJASFDFASJGLA + +#include +#include +#include "blossom5/block.h" + + +// if defined, edge costs are of type 'double', otherwise 'int' +//#define PERFECT_MATCHING_DOUBLE + +// Note: with floating point numbers polynomial complexity is not guaranteed; +// the code may even get stuck due to rounding errors. If the code terminates, +// the solution may not be optimal. It may be worth calling CheckPerfectMatchingOptimality() +// to see whether complementary slackness conditions are satisfied. +// +// Using single precision floating point numbers (float) is really not recommended. + + +class PerfectMatching +{ +public: + +#ifdef PERFECT_MATCHING_DOUBLE + typedef double REAL; + #define PM_INFTY ((REAL)1e100) +#else + typedef int REAL; + #define PM_INFTY (INT_MAX/2) +#endif + + typedef int NodeId; + typedef int EdgeId; + + PerfectMatching(int nodeNum, int edgeNumMax); + ~PerfectMatching(); + + // first call returns 0, second 1, and so on. + EdgeId AddEdge(NodeId i, NodeId j, REAL cost); + + // Computes a perfect matching of minimum cost. + // NOTE: a perfect matching of finite cost must exist (otherwise the behaviour is not specified). + // If finish is false, then the final matching is not computed (so GetSolution() cannot be called afterwards). + void Solve(bool finish=true); + + /////////////////////////////////////////////////////////////// + // Read primal solution (can be called after Solve()). + int GetSolution(EdgeId e); // returns 1 if e is in the matching, 0 otherwise + NodeId GetMatch(NodeId i); // alternative way to get the result + + /////////////////////////////////////////////////////////////// + // Read dual solution (can be called after Solve()). + // 'blossom_parents' and 'twice_y' must be arrays of size node_num+GetBlossomNum(). + // The function sets blossom_parent[i] to the parent of i (or to -1 for exterior nodes). + void GetDualSolution(int* blossom_parents, REAL* twice_y); + int GetBlossomNum(); + + /////////////////////////////////////////////////////////////// + // Dynamic graph updates. After calling Solve() you may call // + // StartUpdate(), ..., FinishUpdate() and then Solve() again // + /////////////////////////////////////////////////////////////// + void StartUpdate(); + void FinishUpdate(); + + // 3 functions below can be called only between StartUpdate() and FinishUpdate(). + REAL GetTwiceSum(NodeId i); // if 2*cost(i,j)>=GetTwiceSum(i)+GetTwiceSum(j) then adding new edge (i,j) is not necessary - optimal solution will not change + EdgeId AddNewEdge(NodeId i, NodeId j, REAL cost, bool do_not_add_if_positive_slack=true); // if do_not_add_if_positive_slack is true and the slack of the edge turns out to be non-negative, then the edge will not be added and -1 will be returned + void UpdateCost(EdgeId e, REAL delta_cost); + + + // NOTE: with default options the dual vector is guaranteed to be half-integral + // (if all input weights are integral). However, with some options there is + // no such guarantee, in particular, if dual_greedy_update_option=2 or dual_LP_threshold>0. + // These options can be used only if the code is compiled with REAL=double. + struct Options + { + Options() : fractional_jumpstart(true), + dual_greedy_update_option(0), + dual_LP_threshold(0.00), + update_duals_before(false), + update_duals_after(false), + single_tree_threshold(1.00), + verbose(true) + {} + + bool fractional_jumpstart; // false: greedy, true: compute fractional matching + + int dual_greedy_update_option; // 0: compute connected components (as in Blossom IV) + // 1: compute strongly connected components (discussed by Cook-Rohe, but not implemented) + // 2: single eps for all trees (fixed eps approach) + + double dual_LP_threshold; // if tree_num => dual_updates_threshold*node_num: greedy updates + // if tree_num < dual_updates_threshold*node_num: global updates (solve LP) + + bool update_duals_before; // before tree growth + bool update_duals_after; // after tree growth + + double single_tree_threshold; // if (tree_num => single_tree_threshold*node_num && update_duals_after): try to grow a single tree as long as possible + + bool verbose; + } options; + + + // save problem to a file. format=0 corresponds to DIMACS format, + // format=1 corresponds to the format used by blossom4. + // CANNOT BE CALLED AFTER Solve()!!! + void Save(char* filename, int format=0); + + ////////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////////////////////////////// +private: + struct Node; + struct Arc; // no such struct, only Arc* is used (the pointer can be odd or even) + struct Edge; // pointer Edge* is always even + struct Tree; + struct TreeEdge; + struct PQPointers; + struct EdgeIterator; + struct TreeEdgeIterator; + struct LCATreeX; + + Node* nodes; + Edge* edges; + char* edges_orig; + DBlock* blossoms; + Tree* trees; + DBlock* tree_edges; + struct ExpandTmpItem + { + Node* i; + Node* blossom_parent; + Node* blossom_grandparent; + }; + Block* expand_tmp_list; // used inside Expand() + + int node_num; + int edge_num, edge_num_max; + int tree_num, tree_num_max; + + Node* removed_first; + int blossom_num; + int removed_num; + + void* pq_buf; + + bool first_solve; + + // stat + struct Stat + { + int shrink_count; + int expand_count; + int grow_count; + double shrink_time; + double expand_time; + double dual_time; + } stat; + + //////////////////////////////////////////////////////////////////// + + void InitGreedy(bool allocate_trees=true); + + void InitGlobal(); // compute fractional matching + Node* FindBlossomRootInit(Edge* a0); + void ShrinkInit(Edge* a0, Node* tree_root); + void ExpandInit(Node* b); + void AugmentBranchInit(Node* i0, Node* tree_root); + + void Finish(); // sets matching for inner nodes + + void ProcessNegativeEdge(Edge* a); + + void GetRealEndpoints(Edge* a, Node*& tail, Node*& head); + Node* FindBlossomRoot(Edge* a0); + void Shrink(Edge* a0); + void Expand(Node* b); + void Augment(Edge* a0); + void AugmentBranch(Node* i0); + void GrowNode(Node* i); + void GrowTree(Node* root, bool new_subtree); + bool ProcessEdge00(Edge* a, bool update_boundary_edge=true); // returns true if boundary edge, false otherwise + void ProcessSelfloop(Node* b, Edge* a); + + void AddTreeEdge(Tree* t0, Tree* t1); + + void ComputeEpsSingle(); // called from UpdateDuals() + void ComputeEpsCC(); // called from UpdateDuals() + void ComputeEpsSCC(); // called from UpdateDuals() + void ComputeEpsGlobal(); // called from UpdateDuals() + bool UpdateDuals(); + + void FreeRemoved(); + void CommitEps(); + + void ReallocateEdges(); + + void PrintAll(); +}; + + +#include "blossom5/CheckPerfectMatching.h" + +#endif diff --git a/src/blossom5/README.TXT b/src/blossom5/README.TXT new file mode 100644 index 0000000..5e3492d --- /dev/null +++ b/src/blossom5/README.TXT @@ -0,0 +1,78 @@ +BLOSSOM V - implementation of Edmonds' algorithm for computing a minimum cost perfect matching in a graph +Version 2.02 +http://www.cs.ucl.ac.uk/staff/V.Kolmogorov/software.html + +Details of the implementation are described in + + Vladimir Kolmogorov. "Blossom V: A new implementation of a minimum cost perfect matching algorithm." + In Mathematical Programming Computation (MPC), July 2009, 1(1):43-67. + +Please send comments to vnk@adastral.ucl.ac.uk. +If you use this software for research purposes, you should cite the aforementioned paper in any resulting publication. + +################################################################## + +License & disclaimer: + + Copyright 2008-2009 Vladimir Kolmogorov (vnk@adastral.ucl.ac.uk) + + This software can be used for research and evaluation purposes only. Commercial use is prohibited. + Public redistribution of the code or its derivatives is prohibited. + If you use this software for research purposes, you should cite the following paper in any resulting publication: + Vladimir Kolmogorov. "Blossom V: A new implementation of a minimum cost perfect matching algorithm." + In Mathematical Programming Computation (MPC), July 2009, 1(1):43-67. + + For commercial use of the software not covered by this agreement, please contact the author. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +################################################################## + +COMPILATION: + +In unix, type "make". The code should also compile in Windows with Microsoft Visual C++ compiler. +Tested on 32-bit machines. + +################################################################## + +USAGE: + +See PerfectMatching.h for interface functions. Alternatively, +compile the code and run ./blossom5 [options] (see USAGE.TXT for details). + +The code also allows solving complete geometric instances; see GEOM/GeomPerfectMatching.h +for interface functions. + +################################################################## + +PARAMETERS: + +For many types of problems, default parameters should be ok. +But for certain problems (such as structured geometric instances) +you may consider setting +dual_LP_threshold=0.005 (for example). This corresponds to calling +./blossom5 -m0.005 +Type PerfectMatching::REAL in PerfectMatcing.h should then be set to double. + +################################################################## + +EXTERNAL PACKAGE: + +When solving complete geometric instances you need to provide the initial subset of edges. +It may be desirable to use Delaunay triangulation for this purpose. +Then you need to download the "Triangle" package of J. R. Shewchuk from + http://www.cs.cmu.edu/~quake/triangle.html +and extract it to the directory "triange". +Alternatively, you can use nearest neighbours initialization (this does not require external packages). + diff --git a/src/blossom5/USAGE.TXT b/src/blossom5/USAGE.TXT new file mode 100644 index 0000000..afe93cd --- /dev/null +++ b/src/blossom5/USAGE.TXT @@ -0,0 +1,31 @@ +USAGE: ./blossom5 [options] + +At least one of the two flags below must be provided. +If both are provided, then edges in are added to the initial subset of edges for the geometric problem. + + -e read problem (list of edges) from file in DIMACS or blossom4 format + (see GRAPH1.TXT and GRAPH2.TXT for examples) + -g read geometric problem (list of 2D points) from file in TSPLIB format + +perfect matching parameters: + + -j do not use fractional jumpstart + -m# update duals by solving LP if the number of trees is smaller than # times node_num. + (# should belong to [0,1], default is 0.) + -d1 use SCC dual updates instead of CC + -d2 use dual updates with fixed delta instead of CC + -b update duals before processing a tree + -a update duals after processing a tree + +geometric matching parameters: + + -D do NOT add Delaunay triangulation to the initial subset of edges + -K# for each point, add # nearest neighbors to the initial subset of edges + -I do NOT add edges greedily to the initial subset of edges to make sure that a perfect matching exists + -T# use at most # iterations (or run until convergence, if #=0 - default) + +other options: + + -w save result to file + -c check complementary slackness conditions for non-geometric problem + -V no verbose diff --git a/src/blossom5/block.h b/src/blossom5/block.h new file mode 100644 index 0000000..7b6e696 --- /dev/null +++ b/src/blossom5/block.h @@ -0,0 +1,268 @@ +/* block.h */ +/* + Template classes Block and DBlock + Implement adding and deleting items of the same type in blocks. + + If there there are many items then using Block or DBlock + is more efficient than using 'new' and 'delete' both in terms + of memory and time since + (1) On some systems there is some minimum amount of memory + that 'new' can allocate (e.g., 64), so if items are + small that a lot of memory is wasted. + (2) 'new' and 'delete' are designed for items of varying size. + If all items has the same size, then an algorithm for + adding and deleting can be made more efficient. + (3) All Block and DBlock functions are inline, so there are + no extra function calls. + + Differences between Block and DBlock: + (1) DBlock allows both adding and deleting items, + whereas Block allows only adding items. + (2) Block has an additional operation of scanning + items added so far (in the order in which they were added). + (3) Block allows to allocate several consecutive + items at a time, whereas DBlock can add only a single item. + + Note that no constructors or destructors are called for items. + + Example usage for items of type 'MyType': + + /////////////////////////////////////////////////// + #include "blossom5/block.h" + #define BLOCK_SIZE 1024 + typedef struct { int a, b; } MyType; + MyType *ptr, *array[10000]; + + ... + + Block *block = new Block(BLOCK_SIZE); + + // adding items + for (int i=0; i New(); + ptr -> a = ptr -> b = rand(); + } + + // reading items + for (ptr=block->ScanFirst(); ptr; ptr=block->ScanNext()) + { + printf("%d %d\n", ptr->a, ptr->b); + } + + delete block; + + ... + + DBlock *dblock = new DBlock(BLOCK_SIZE); + + // adding items + for (int i=0; i New(); + } + + // deleting items + for (int i=0; i Delete(array[i]); + } + + // adding items + for (int i=0; i New(); + } + + delete dblock; + + /////////////////////////////////////////////////// + + Note that DBlock deletes items by marking them as + empty (i.e., by adding them to the list of free items), + so that this memory could be used for subsequently + added items. Thus, at each moment the memory allocated + is determined by the maximum number of items allocated + simultaneously at earlier moments. All memory is + deallocated only when the destructor is called. +*/ + +#ifndef __BLOCK_H__ +#define __BLOCK_H__ + +#include + +/***********************************************************************/ +/***********************************************************************/ +/***********************************************************************/ + +template class Block +{ +public: + /* Constructor. Arguments are the block size and + (optionally) the pointer to the function which + will be called if allocation failed; the message + passed to this function is "Not enough memory!" */ + Block(int size, void (*err_function)(const char *) = NULL) { first = last = NULL; block_size = size; error_function = err_function; } + + /* Destructor. Deallocates all items added so far */ + ~Block() { while (first) { block *next = first -> next; delete[] ((char*)first); first = next; } } + + /* Allocates 'num' consecutive items; returns pointer + to the first item. 'num' cannot be greater than the + block size since items must fit in one block */ + Type *New(int num = 1) + { + Type *t; + + if (!last || last->current + num > last->last) + { + if (last && last->next) last = last -> next; + else + { + block *next = (block *) new char [sizeof(block) + (block_size-1)*sizeof(Type)]; + if (!next) { if (error_function) (*error_function)("Not enough memory!"); exit(1); } + if (last) last -> next = next; + else first = next; + last = next; + last -> current = & ( last -> data[0] ); + last -> last = last -> current + block_size; + last -> next = NULL; + } + } + + t = last -> current; + last -> current += num; + return t; + } + + /* Returns the first item (or NULL, if no items were added) */ + Type *ScanFirst() + { + for (scan_current_block=first; scan_current_block; scan_current_block = scan_current_block->next) + { + scan_current_data = & ( scan_current_block -> data[0] ); + if (scan_current_data < scan_current_block -> current) return scan_current_data ++; + } + return NULL; + } + + /* Returns the next item (or NULL, if all items have been read) + Can be called only if previous ScanFirst() or ScanNext() + call returned not NULL. */ + Type *ScanNext() + { + while (scan_current_data >= scan_current_block -> current) + { + scan_current_block = scan_current_block -> next; + if (!scan_current_block) return NULL; + scan_current_data = & ( scan_current_block -> data[0] ); + } + return scan_current_data ++; + } + + /* Marks all elements as empty */ + void Reset() + { + block *b; + if (!first) return; + for (b=first; ; b=b->next) + { + b -> current = & ( b -> data[0] ); + if (b == last) break; + } + last = first; + } + +/***********************************************************************/ + +private: + + typedef struct block_st + { + Type *current, *last; + struct block_st *next; + Type data[1]; + } block; + + int block_size; + block *first; + block *last; + + block *scan_current_block; + Type *scan_current_data; + + void (*error_function)(const char *); +}; + +/***********************************************************************/ +/***********************************************************************/ +/***********************************************************************/ + +template class DBlock +{ +public: + /* Constructor. Arguments are the block size and + (optionally) the pointer to the function which + will be called if allocation failed; the message + passed to this function is "Not enough memory!" */ + DBlock(int size, void (*err_function)(const char *) = NULL) { first = NULL; first_free = NULL; block_size = size; error_function = err_function; } + + /* Destructor. Deallocates all items added so far */ + ~DBlock() { while (first) { block *next = first -> next; delete[] ((char*)first); first = next; } } + + /* Allocates one item */ + Type *New() + { + block_item *item; + + if (!first_free) + { + block *next = first; + first = (block *) new char [sizeof(block) + (block_size-1)*sizeof(block_item)]; + if (!first) { if (error_function) (*error_function)("Not enough memory!"); exit(1); } + first_free = & (first -> data[0] ); + for (item=first_free; item next_free = item + 1; + item -> next_free = NULL; + first -> next = next; + } + + item = first_free; + first_free = item -> next_free; + return (Type *) item; + } + + /* Deletes an item allocated previously */ + void Delete(Type *t) + { + ((block_item *) t) -> next_free = first_free; + first_free = (block_item *) t; + } + +/***********************************************************************/ + +private: + + typedef union block_item_st + { + Type t; + block_item_st *next_free; + } block_item; + + typedef struct block_st + { + struct block_st *next; + block_item data[1]; + } block; + + int block_size; + block *first; + block_item *first_free; + + void (*error_function)(const char *); +}; + + +#endif + diff --git a/src/blossom5/example.cpp b/src/blossom5/example.cpp new file mode 100644 index 0000000..16c962e --- /dev/null +++ b/src/blossom5/example.cpp @@ -0,0 +1,285 @@ +#include +#include "PerfectMatching.h" +#include "GEOM/GeomPerfectMatching.h" + +void LoadFile(int& node_num, int& edge_num, int*& edges, int*& weights, char* filename) +{ + int e = 0; + char LINE[1000]; + FILE* fp = fopen(filename, "r"); + if (!fp) { printf("Can't open %s\n", filename); exit(1); } + + int format = -1; // 0: DIMACS format. node id's start from 1 + // 1: simpler format (without "p" and "e"). node id's start from 0 + + edge_num = -1; + while (fgets(LINE, sizeof(LINE)-1, fp)) + { + if (LINE[0] == 'c') continue; + if (format < 0) + { + if (LINE[0] == 'p') + { + format = 0; + if (sscanf(LINE, "p edge %d %d\n", &node_num, &edge_num) != 2) { printf("%s: wrong format #1\n", filename); exit(1); } + } + else + { + format = 1; + if (sscanf(LINE, "%d %d\n", &node_num, &edge_num) != 2) { printf("%s: wrong format #1\n", filename); exit(1); } + } + + ////////////////////////////////////////////////////////////////////////////////// + if (node_num <= 0 || edge_num < 0) { printf("# of nodes and edges should be positive\n"); exit(1); } + if (node_num & 1) { printf("# of nodes is odd: perfect matching cannot exist\n"); exit(1); } + edges = new int[2*edge_num]; + weights = new int[edge_num]; + ////////////////////////////////////////////////////////////////////////////////// + } + else + { + int i, j; + char* ptr = LINE; + if (format == 0) { if (LINE[0] != 'e') continue; ptr = &LINE[1]; } + else ptr = &LINE[0]; + + int len; + if (sscanf(ptr, "%d %d %d\n", &i, &j, &len) != 3) continue; + if (format == 0) { i --; j --; } + edges[2*e] = i; + edges[2*e+1] = j; + weights[e] = len; + e ++; + } + } + + if (e != edge_num) { printf("%s: wrong format #3\n", filename); exit(1); } + fclose(fp); +} + +void SaveMatching(int node_num, PerfectMatching* pm, char* filename) +{ + FILE* fp = fopen(filename, "w"); + if (!fp) { printf("Can't open %s\n", filename); exit(1); } + fprintf(fp, "%d %d\n", node_num, node_num/2); + int i, j; + for (i=0; iGetMatch(i); + if (i < j) fprintf(fp, "%d %d\n", i, j); + } + fclose(fp); +} + +void LoadGeomFile(int& node_num, int*& x_array, int*& y_array, char* filename) +{ + int i = 0, i_tmp, x, y, DIM = 0; + char LINE[1000]; + + x_array = y_array = NULL; + + FILE* fp = fopen(filename, "r"); + if (!fp) { printf("Can't open %s\n", filename); exit(1); } + + while (fgets(LINE, sizeof(LINE)-1, fp)) + { + if (sscanf(LINE, "DIMENSION : %d", &node_num) == 1) + { + if (node_num < 1) { printf("too few nodes\n"); exit(1); } + if (node_num & 1) { printf("# of points is odd: perfect matching cannot exist\n"); exit(1); } + if (x_array) { printf("wrong format\n"); exit(1); } + x_array = new int[node_num]; + y_array = new int[node_num]; + continue; + } + if (sscanf(LINE, "EDGE_WEIGHT_TYPE : EUC_%dD", &DIM) == 1) + { + if (DIM != 2) { printf("only EUC_2D is supported"); exit(1); } + continue; + } + if (sscanf(LINE, "%d %d %d", &i_tmp, &x, &y) == 3) + { + i_tmp --; + if (i_tmp != i ++ || i > node_num) { printf("wrong number of points\n"); exit(1); } + x_array[i_tmp] = x; + y_array[i_tmp] = y; + continue; + } + printf("%s", LINE); + } + fclose(fp); + if (i != node_num || !x_array || DIM != 2) { printf("wrong format\n"); exit(1); } +} + + +void SaveMatching(int node_num, GeomPerfectMatching* gpm, char* filename) +{ + FILE* fp = fopen(filename, "w"); + if (!fp) { printf("Can't open %s\n", filename); exit(1); } + fprintf(fp, "%d %d\n", node_num, node_num/2); + int i, j; + for (i=0; iGetMatch(i); + if (i < j) + { + GeomPerfectMatching::REAL len = gpm->Dist(i, j); + if ( ((GeomPerfectMatching::REAL)1 / 2) == 0 ) fprintf(fp, "%d %d %d\n", i, j, len); + else fprintf(fp, "%d %d %f\n", i, j, (double)len); + } + } + fclose(fp); +} + + +void ShowUsage() +{ + printf("Usage: see USAGE.TXT\n"); + exit(1); +} + + +int main(int argc, char* argv[]) +{ + struct PerfectMatching::Options options; + struct GeomPerfectMatching::GPMOptions gpm_options; + char* filename = NULL; + char* geom_filename = NULL; + char* save_filename = NULL; + bool check_perfect_matching = false; + int i, e, node_num, edge_num; + int* edges; + int* weights; + + for (i=1; i1) ShowUsage(); + break; + case 'd': + options.dual_greedy_update_option = atoi(&argv[i][2]); + if (options.dual_greedy_update_option<1 || options.dual_greedy_update_option>2) ShowUsage(); + break; + case 'b': + if (argv[i][2]) ShowUsage(); + options.update_duals_before = true; + break; + case 'a': + if (argv[i][2]) ShowUsage(); + options.update_duals_after = true; + break; + case 'D': + if (argv[i][2]) ShowUsage(); + gpm_options.init_Delaunay = false; + break; + case 'K': + gpm_options.init_KNN = atoi(&argv[i][2]); + if (gpm_options.init_KNN<0) ShowUsage(); + break; + case 'I': + if (argv[i][2]) ShowUsage(); + gpm_options.init_greedy = false; + break; + case 'T': + gpm_options.iter_max = atoi(&argv[i][2]); + if (gpm_options.iter_max<0) ShowUsage(); + break; + case 'w': + if (save_filename || argv[i][2] || ++i == argc) ShowUsage(); + save_filename = argv[i]; + break; + case 'c': + if (argv[i][2]) ShowUsage(); + check_perfect_matching = true; + break; + case 'V': + if (argv[i][2]) ShowUsage(); + options.verbose = false; + break; + default: + printf("Unknown option: %s\n", argv[i]); + ShowUsage(); + break; + } + + } + + if (!filename && !geom_filename) ShowUsage(); + + if (filename) LoadFile(node_num, edge_num, edges, weights, filename); + + if (!geom_filename) + { + PerfectMatching *pm = new PerfectMatching(node_num, edge_num); + for (e=0; eAddEdge(edges[2*e], edges[2*e+1], weights[e]); + pm->options = options; + pm->Solve(); + if (check_perfect_matching) + { + int res = CheckPerfectMatchingOptimality(node_num, edge_num, edges, weights, pm); + printf("check optimality: res=%d (%s)\n", res, (res==0) ? "ok" : ((res==1) ? "error" : "fatal error")); + } + double cost = ComputePerfectMatchingCost(node_num, edge_num, edges, weights, pm); + printf("cost = %.1f\n", cost); + if (save_filename) SaveMatching(node_num, pm, save_filename); + delete pm; + } + else + { + int geom_node_num; + int* x_array; + int* y_array; + LoadGeomFile(geom_node_num, x_array, y_array, geom_filename); + GeomPerfectMatching *gpm = new GeomPerfectMatching(geom_node_num, 2); + for (i=0; iAddPoint(coord); + } + delete [] x_array; + delete [] y_array; + gpm->options = options; + gpm->gpm_options = gpm_options; + if (filename) + { + if (node_num != geom_node_num) { printf("%s and %s don't match!\n", geom_filename, filename); exit(1); } + for (e=0; eDist(edges[2*e], edges[2*e+1])) + { printf("edge lengths in %s and %s don't match!\n", geom_filename, filename); exit(1); } + gpm->AddInitialEdge(edges[2*e], edges[2*e+1]); + } + } + gpm->Solve(); + if (save_filename) SaveMatching(geom_node_num, gpm, save_filename); + delete gpm; + } + + if (filename) + { + delete [] edges; + delete [] weights; + } + + return 0; +} + + diff --git a/src/blossom5/timer.h b/src/blossom5/timer.h new file mode 100644 index 0000000..6c3917f --- /dev/null +++ b/src/blossom5/timer.h @@ -0,0 +1,98 @@ +#ifndef NJAKSDTHASKJERAXJGFBZJDLAGZ +#define NJAKSDTHASKJERAXJGFBZJDLAGZ + +#include + +// At most one of the flags +// PM_TIMER_MSVC +// PM_TIMER_CLOCK_GETTIME +// PM_TIMER_GETRUSAGE +// PM_TIMER_EXTERNAL +// PM_TIMER_NONE +// can be defined externally. If PM_TIMER_EXTERNAL is defined, +// then there must exist a definition of function "double get_time()" elsewhere. + +#if defined (PM_TIMER_MSVC) || defined (PM_TIMER_CLOCK_GETTIME) || defined (PM_TIMER_GETRUSAGE) || defined (PM_TIMER_EXTERNAL) || defined (PM_TIMER_NONE) +#else + // default option + #ifdef _MSC_VER + #define PM_TIMER_MSVC + #else + #define PM_TIMER_CLOCK_GETTIME + #endif +#endif + +////////////////////////////////////////////////////////////////////////////////////// +////////////////////////////////////////////////////////////////////////////////////// +////////////////////////////////////////////////////////////////////////////////////// + +#ifdef PM_TIMER_MSVC + + #include + + inline double get_time() + { + LARGE_INTEGER t, frequency; + QueryPerformanceCounter(&t); + QueryPerformanceFrequency(&frequency); + return (double)t.QuadPart/(double)frequency.QuadPart; + } + +#endif + +////////////////////////////////////////////////////////////////////////////////////// +////////////////////////////////////////////////////////////////////////////////////// +////////////////////////////////////////////////////////////////////////////////////// + +#ifdef PM_TIMER_CLOCK_GETTIME + + #include + + inline double get_time() + { + struct timespec t; + clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &t); + return (double)t.tv_nsec*1.00E-9 + (double)t.tv_sec; + } + +#endif + +////////////////////////////////////////////////////////////////////////////////////// +////////////////////////////////////////////////////////////////////////////////////// +////////////////////////////////////////////////////////////////////////////////////// + +#ifdef PM_TIMER_GETRUSAGE + + #include + + inline double get_time() + { + struct rusage t; + getrusage (RUSAGE_SELF, &t); + return (double)t.ru_utime.tv_usec*1.00E-6 + (double)t.ru_utime.tv_sec; + } + +#endif + +////////////////////////////////////////////////////////////////////////////////////// +////////////////////////////////////////////////////////////////////////////////////// +////////////////////////////////////////////////////////////////////////////////////// + +#ifdef PM_TIMER_EXTERNAL + + extern double get_time(); + +#endif + +////////////////////////////////////////////////////////////////////////////////////// +////////////////////////////////////////////////////////////////////////////////////// +////////////////////////////////////////////////////////////////////////////////////// + +#ifdef PM_TIMER_NONE + + inline double get_time() { return 0; } + +#endif + +#endif + diff --git a/src/bts/analysis/fisher_gradient_matrix_tester.h b/src/bts/analysis/fisher_gradient_matrix_tester.h new file mode 100644 index 0000000..6de678f --- /dev/null +++ b/src/bts/analysis/fisher_gradient_matrix_tester.h @@ -0,0 +1,121 @@ +/* + Copyright 2009 Brain Research Institute, Melbourne, Australia + + Created by Tom Close on 13/03/09. + + This file is part of Bayesian Tractlet Sampling (BTS). + + BTS is free software: you can reobjectibute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + BTS is objectibuted in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with BTS. If not, see . + + */ + + +#ifndef __bts_analysis_fishergradientmatrixtester_h__ +#define __bts_analysis_fishergradientmatrixtester_h__ + + +#include "bts/mcmc/state/tensor.h" +#include "bts/triple.h" + + + +namespace BTS { + + namespace Analysis { + + + template class FisherGradientMatrixTester { + + + public: + + //typedef the pointer to the function to test as 'Function'. + typedef double (Object::*Function)(const State&, State&, typename State::Tensor&, std::vector&); + + protected: + + Object *object; + + public: + + FisherGradientMatrixTester(Object& object) + : object(&object) {} + + + ~FisherGradientMatrixTester() {} + + void test(Function function, State& state, double step_size, std::vector& analytic_fisher_gradient, std::vector& numeric_fisher_gradient); + + }; + + + } + +} + + + +#include "progressbar.h" +#include "math/vector.h" +#include "math/matrix.h" + + +namespace BTS { + + namespace Analysis { + + template void FisherGradientMatrixTester::test(Function function, State& state, double step_size, std::vector& analytic_fisher_gradient, std::vector& numeric_fisher_gradient) { + + State dummy_gradient(state); + typename State::Tensor fisher(state), perturbed_fisher(state); + std::vector dummy_fisher_gradient; + + fisher.invalidate(); + + numeric_fisher_gradient.clear(); + + (*object.*function)(state, dummy_gradient, fisher, analytic_fisher_gradient); + + MR::Math::Vector& state_vector = state; + + MR::ProgressBar progress_bar ("Testing fisher_gradient calculations...", state_vector.size()); + + for (size_t elem_i = 0; elem_i < state_vector.size(); ++elem_i) { + + perturbed_fisher.invalidate(); + + state_vector[elem_i] += step_size; + + (*object.*function)(state, dummy_gradient, perturbed_fisher, dummy_fisher_gradient); + + state_vector[elem_i] -= step_size; + + numeric_fisher_gradient.push_back(perturbed_fisher); + numeric_fisher_gradient.back() -= fisher; + numeric_fisher_gradient.back() /= step_size; + + ++progress_bar; + + } + + } + + + } + +} + + + +#endif diff --git a/src/bts/analysis/fisher_gradient_tester.h b/src/bts/analysis/fisher_gradient_tester.h new file mode 100644 index 0000000..9b4f9ea --- /dev/null +++ b/src/bts/analysis/fisher_gradient_tester.h @@ -0,0 +1,122 @@ +/* + Copyright 2009 Brain Research Institute, Melbourne, Australia + + Created by Tom Close on 13/03/09. + + This file is part of Bayesian Tractlet Sampling (BTS). + + BTS is free software: you can reobjectibute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + BTS is objectibuted in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with BTS. If not, see . + + */ + + +#ifndef __bts_analysis_fishergradienttester_h__ +#define __bts_analysis_fishergradienttester_h__ + + +#include "bts/mcmc/state/tensor.h" +#include "bts/triple.h" + + + +namespace BTS { + + namespace Analysis { + + + template class FisherGradientTester { + + + public: + + //typedef the pointer to the function to test as 'Function'. + typedef double (Object::*Function)(const State&, State&, typename State::Tensor&, std::vector&); + + protected: + + Object *object; + + public: + + FisherGradientTester(Object& object) + : object(&object) {} + + + ~FisherGradientTester() {} + + void test(Function function, State& state, double step_size, std::vector& analytic_fisher_gradient, std::vector& numeric_fisher_gradient); + + }; + + + } + +} + + + +#include "progressbar.h" +#include "math/vector.h" +#include "math/matrix.h" + + +namespace BTS { + + namespace Analysis { + + template void FisherGradientTester::test(Function function, State& state, double step_size, std::vector& analytic_fisher_gradient, std::vector& numeric_fisher_gradient) { + + State perturbed_state(state), dummy_gradient(state); + typename State::Tensor fisher(state), perturbed_fisher(state); + std::vector dummy_fisher_gradient; + + fisher.invalidate(); + perturbed_fisher.invalidate(); + + numeric_fisher_gradient.clear(); + + (*object.*function)(state, dummy_gradient, fisher, analytic_fisher_gradient); + + MR::Math::Vector& state_vector = state; + + MR::ProgressBar progress_bar ("Testing fisher_gradient calculations...", state_vector.size()); + + for (size_t elem_i = 0; elem_i < state_vector.size(); ++elem_i) { + + perturbed_fisher.invalidate(); + + state_vector[elem_i] += step_size; + + (*object.*function)(state, dummy_gradient, perturbed_fisher, dummy_fisher_gradient); + + state_vector[elem_i] -= step_size; + + numeric_fisher_gradient.push_back(perturbed_fisher); + numeric_fisher_gradient.back() -= fisher; + numeric_fisher_gradient.back() /= step_size; + + ++progress_bar; + + } + + } + + + } + +} + + + +#endif diff --git a/src/bts/analysis/gradient_tester.h b/src/bts/analysis/gradient_tester.h new file mode 100644 index 0000000..4dcf87f --- /dev/null +++ b/src/bts/analysis/gradient_tester.h @@ -0,0 +1,112 @@ +/* + Copyright 2009 Brain Research Institute, Melbourne, Australia + + Created by Tom Close on 13/03/09. + + This file is part of Bayesian Tractlet Sampling (BTS). + + BTS is free software: you can reobjectibute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + BTS is objectibuted in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with BTS. If not, see . + + */ + + +#ifndef __bts_analysis_gradienttester_h__ +#define __bts_analysis_gradienttester_h__ + + +namespace BTS { + + namespace Analysis { + + + template class GradientTester { + + + public: + + //typedef the pointer to the function to test as 'Function'. + typedef double (Object::*Function)(const State, State); + + protected: + + Object *object; + + public: + + GradientTester(Object& object) + : object(&object) {} + + ~GradientTester() {} + + void test(Function function, State state, double step_size, State analytic_gradient, State numeric_gradient); + + + }; + + + } + +} + + + +#include "progressbar.h" +#include "math/vector.h" + + +namespace BTS { + + namespace Analysis { + + + template void GradientTester::test(Function function, State state, double step_size, State analytic_gradient, State numeric_gradient) { + + analytic_gradient = state; + analytic_gradient.invalidate(); + + double px = (*object.*function)(state, analytic_gradient); + + numeric_gradient = state; + numeric_gradient.invalidate(); + + MR::Math::Vector& state_vector = state; + MR::Math::Vector& gradient_vector = numeric_gradient; + + State dummy_gradient(state); + + MR::ProgressBar progress_bar ("Testing gradient calculations...", state_vector.size()); + + for (size_t elem_i = 0; elem_i < state_vector.size(); ++elem_i) { + + state_vector[elem_i] += step_size; + + gradient_vector[elem_i] = ((*object.*function)(state, dummy_gradient) - px) / step_size; + + state_vector[elem_i] -= step_size; + + ++progress_bar; + + } + + + } + + + } + +} + + + +#endif diff --git a/src/bts/analysis/hessian_tester.h b/src/bts/analysis/hessian_tester.h new file mode 100644 index 0000000..888cbcc --- /dev/null +++ b/src/bts/analysis/hessian_tester.h @@ -0,0 +1,124 @@ +/* + Copyright 2009 Brain Research Institute, Melbourne, Australia + + Created by Tom Close on 13/03/09. + + This file is part of Bayesian Tractlet Sampling (BTS). + + BTS is free software: you can reobjectibute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + BTS is objectibuted in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with BTS. If not, see . + + */ + + +#ifndef __bts_analysis_hessiantester_h__ +#define __bts_analysis_hessiantester_h__ + + +#include "bts/mcmc/state/tensor.h" +#include "bts/triple.h" + + + +namespace BTS { + + namespace Analysis { + + + template class HessianTester { + + + public: + + //typedef the pointer to the function to test as 'Function'. + typedef double (Object::*Function)(const State&, State&, typename State::Tensor&); + + protected: + + Object *object; + + public: + + HessianTester(Object& object) + : object(&object) {} + + + ~HessianTester() {} + + void test(Function function, State& state, double step_size, typename State::Tensor& analytic_hessian, typename State::Tensor& numeric_hessian); + + }; + + + } + +} + + + +#include "progressbar.h" +#include "math/vector.h" +#include "math/matrix.h" + + +namespace BTS { + + namespace Analysis { + + template void HessianTester::test(Function function, State& state, double step_size, typename State::Tensor& analytic_hessian, typename State::Tensor& numeric_hessian) { + + State perturbed_state(state), gradient(state), perturbed_gradient(state); + + gradient.invalidate(); + + typename State::Tensor dummy_hessian(state); + + (analytic_hessian = typename State::Tensor(state)).invalidate(); + + (*object.*function)(state, gradient, analytic_hessian); + + MR::Math::Vector& state_vector = state; + + numeric_hessian.invalidate(); + + MR::ProgressBar progress_bar ("Testing hessian calculations...", state_vector.size()); + + for (size_t elem_i = 0; elem_i < state_vector.size(); ++elem_i) { + + perturbed_gradient.invalidate(); + + state_vector[elem_i] += step_size; + + (*object.*function)(state, perturbed_gradient, dummy_hessian); + + state_vector[elem_i] -= step_size; + + perturbed_gradient -= gradient; + perturbed_gradient /= step_size; + + numeric_hessian.row(elem_i) = perturbed_gradient; + + ++progress_bar; + + } + + } + + + } + +} + + + +#endif diff --git a/src/bts/analysis/image_gradient_tester.h b/src/bts/analysis/image_gradient_tester.h new file mode 100644 index 0000000..7f6efb9 --- /dev/null +++ b/src/bts/analysis/image_gradient_tester.h @@ -0,0 +1,149 @@ +/* + Copyright 2009 Brain Research Institute, Melbourne, Australia + + Created by Tom Close on 13/03/09. + + This file is part of Bayesian Tractlet Sampling (BTS). + + BTS is free software: you can reimageibute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + BTS is imageibuted in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with BTS. If not, see . + + */ + + +#ifndef __bts_analysis_imagegradienttester_h__ +#define __bts_analysis_imagegradienttester_h__ + +namespace BTS { + + namespace Analysis { + + template class ImageGradientTester { + + + public: + + //typedef the pointer to the function to test as 'Function'. + typedef ImageClass& (ImageClass::*Function)(const State&, typename Image::Container::Buffer&); + + protected: + + ImageClass image; + + public: + + ImageGradientTester(const ImageClass& image) + : image(image) { this->image.clear_and_enforce_bounds(); } + + ~ImageGradientTester() {} + + void test(Function function, State& state, double step_size, Image::Container::Buffer& analytic_gradient, Image::Container::Buffer& numeric_gradient); + + + }; + + } + +} + + +#include "progressbar.h" + +#include "bts/common.h" +#include "bts/image/observed/buffer.h" + +#include "bts/analysis/image_gradient_tester.h" + + +namespace BTS { + + namespace Analysis { + + template + void ImageGradientTester::test(Function function, + State& state, + double step_size, + Image::Container::Buffer& analytic_gradient, + Image::Container::Buffer& numeric_gradient) { + + //Initialise gradient buffers. + + Image::Container::Buffer dummy_gradient (image.dims(), image.num_encodings()); + + analytic_gradient.reset(image.dims(), image.num_encodings()); + numeric_gradient.reset(image.dims(), image.num_encodings()); + + //Calculate analytic hessian and unperturbed gradient + + image.zero(); + + Image::Buffer image_intensities = (image.*function)(state, analytic_gradient); + + //Initialize state vector + + MR::Math::Vector& state_vector = state; + + Image::Container::Buffer< MR::Math::Vector > numeric_gradient_vectors (image.dims(), image.num_encodings()); + + for (size_t z = 0; z < image.dim(Z); z++) + for (size_t y = 0; y < image.dim(Y); y++) + for (size_t x = 0; x < image.dim(X); x++) + for (size_t encode_i = 0; encode_i < image.num_encodings(); encode_i++) + numeric_gradient_vectors(x,y,z)[encode_i].resize(state_vector.size(), 0.0); + + + MR::ProgressBar progress_bar ("Testing gradient calculations...", state_vector.size()); + + for (size_t elem_i = 0; elem_i < state_vector.size(); ++elem_i) { + + state_vector[elem_i] += step_size; + + image.zero(); + + ImageClass& perturbed_image_intensities = (image.*function)(state, dummy_gradient); + + for (Image::Buffer::iterator vox_it = image_intensities.begin(); vox_it != image_intensities.end(); ++vox_it) + for (size_t encode_i = 0; encode_i < image.num_encodings(); encode_i++) + if (!perturbed_image_intensities.is_empty(vox_it->first)) + numeric_gradient_vectors(vox_it->first)[encode_i][elem_i] = (perturbed_image_intensities(vox_it->first)[encode_i] - vox_it->second[encode_i]) / step_size; + + + state_vector[elem_i] -= step_size; + + ++progress_bar; + + } + + + for (size_t z = 0; z < image.dim(Z); z++) + for (size_t y = 0; y < image.dim(Y); y++) + for (size_t x = 0; x < image.dim(X); x++) { + + for (size_t encode_i = 0; encode_i < image.num_encodings(); encode_i++) { + numeric_gradient(x,y,z)[encode_i] = state; + numeric_gradient(x,y,z)[encode_i] = numeric_gradient_vectors(x,y,z)[encode_i]; + } + + if (analytic_gradient.is_empty(x,y,z)) + for (size_t encode_i = 0; encode_i < image.num_encodings(); encode_i++) + analytic_gradient(x,y,z)[encode_i] = State(state).zero(); + + } + + } + + } + +} + +#endif diff --git a/src/bts/analysis/image_hessian_tester.h b/src/bts/analysis/image_hessian_tester.h new file mode 100644 index 0000000..74ede60 --- /dev/null +++ b/src/bts/analysis/image_hessian_tester.h @@ -0,0 +1,152 @@ +/* + Copyright 2009 Brain Research Institute, Melbourne, Australia + + Created by Tom Close on 13/03/09. + + This file is part of Bayesian Tractlet Sampling (BTS). + + BTS is free software: you can reimageibute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + BTS is imageibuted in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with BTS. If not, see . + + */ + + +#ifndef __bts_analysis_imagehessiantester_h__ +#define __bts_analysis_imagehessiantester_h__ + +namespace BTS { + + namespace Analysis { + + template class ImageHessianTester { + + + public: + + //typedef the pointer to the function to test as 'Function'. + typedef ImageClass& (ImageClass::*Function)(const State&, Image::Container::Buffer&, Image::Container::Buffer&); //, typename Image::Container::Buffer& + + protected: + + ImageClass image; + + public: + + ImageHessianTester(const ImageClass& image) + : image(image) { this->image.clear_and_enforce_bounds(); } + + ~ImageHessianTester() {} + + void test(Function function, State& state, double step_size, Image::Container::Buffer& analytic_hessian, Image::Container::Buffer& numeric_hessian); + + + }; + + } + +} + + +#include "progressbar.h" + +#include "bts/image/container/buffer.h" + +#include "bts/analysis/image_hessian_tester.h" + +namespace BTS { + + namespace Analysis { + + template void ImageHessianTester::test(Function function, State& state, double step_size, Image::Container::Buffer& analytic_hessian, Image::Container::Buffer& numeric_hessian) { + + Triple dims = analytic_hessian.dims(); + size_t num_encodings = analytic_hessian.num_encodings(); + + analytic_hessian.clear(); + numeric_hessian.clear(); + + Image::Container::Buffer dummy_hessian (analytic_hessian); + Image::Container::Buffer gradient(dims,num_encodings), perturbed_gradient(dims, num_encodings); + + //Calculate analytic hessian and unperturbed gradient + + gradient.zero(); + + (image.*function)(state, gradient, analytic_hessian); + + //Initialize + + + MR::Math::Vector& state_vector = state; + + typename State::Tensor state_tensor(state); + MR::Math::Matrix blank_tensor_matrix(state_vector.size(), state_vector.size()); + blank_tensor_matrix = 0.0; + + Image::Container::Buffer< MR::Math::Matrix > numeric_hessian_matrices (dims, num_encodings); + + for (size_t z = 0; z < image.dim(Z); z++) + for (size_t y = 0; y < image.dim(Y); y++) + for (size_t x = 0; x < image.dim(X); x++) + for (size_t encode_i = 0; encode_i < num_encodings; encode_i++) + numeric_hessian_matrices(x,y,z)[encode_i] = blank_tensor_matrix; + + + MR::ProgressBar progress_bar ("Testing hessian calculations...", state_vector.size()); + + State perturbed_state = state; + + for (size_t row_i = 0; row_i < state_vector.size(); ++row_i) { + + state_vector[row_i] += step_size; + + perturbed_gradient.zero(); + + (image.*function)(state, perturbed_gradient, dummy_hessian); + + for (typename Image::Container::Buffer::iterator vox_it = perturbed_gradient.begin(); vox_it != perturbed_gradient.end(); ++vox_it) + for (size_t encode_i = 0; encode_i < num_encodings; encode_i++) + numeric_hessian_matrices(vox_it->first)[encode_i].row(row_i) = ((vox_it->second[encode_i] - gradient(vox_it->first)[encode_i]) / step_size); + + + state_vector[row_i] -= step_size; + + ++progress_bar; + + } + + + for (size_t z = 0; z < image.dim(Z); z++) + for (size_t y = 0; y < image.dim(Y); y++) + for (size_t x = 0; x < image.dim(X); x++) { + + for (size_t encode_i = 0; encode_i < num_encodings; encode_i++) { + numeric_hessian(x,y,z)[encode_i] = state_tensor; + numeric_hessian(x,y,z)[encode_i] = numeric_hessian_matrices(x,y,z)[encode_i]; + } + + if (analytic_hessian.is_empty(x,y,z)) + for (size_t encode_i = 0; encode_i < image.num_encodings(); encode_i++) + analytic_hessian(x,y,z)[encode_i] = typename State::Tensor(state_tensor).zero(); + + } + + } + + + } +} + +#undef LOOP + +#endif diff --git a/src/bts/analysis/inline_functions.h b/src/bts/analysis/inline_functions.h new file mode 100644 index 0000000..d33668a --- /dev/null +++ b/src/bts/analysis/inline_functions.h @@ -0,0 +1,28 @@ +/* + Copyright 2008 Brain Research Institute, Melbourne, Australia + + Written by Thomas G Close, 16/07/2010. + + This file is part of MRtrix. + + MRtrix is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + MRtrix is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with MRtrix. If not, see . + +*/ + +#ifndef __bts_diffusion_inline_functions_h__ +#define __bts_diffusion_inline_functions_h__ + + + +#endif /* __bts_diffusion_inline_functions_h__ */ diff --git a/src/bts/analysis/rank3_hessian_tester.h b/src/bts/analysis/rank3_hessian_tester.h new file mode 100644 index 0000000..ed2bf24 --- /dev/null +++ b/src/bts/analysis/rank3_hessian_tester.h @@ -0,0 +1,134 @@ +/* + Copyright 2009 Brain Research Institute, Melbourne, Australia + + Created by Tom Close on 13/03/09. + + This file is part of Bayesian Tractlet Sampling (BTS). + + BTS is free software: you can reobjectibute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + BTS is objectibuted in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with BTS. If not, see . + + */ + + +#ifndef __bts_analysis_rank3hessiantester_h__ +#define __bts_analysis_rank3hessiantester_h__ + +#include + + +#include "bts/mcmc/state/tensor.h" +#include "bts/triple.h" + + + + +namespace BTS { + + namespace Analysis { + + + template class Rank3HessianTester { + + + public: + + //typedef the pointer to the function to test as 'Function'. + typedef double (Object::*Function)(const State&, State&, typename State::Tensor&, std::vector&); + + protected: + + Object *object; + + public: + + Rank3HessianTester(Object& object) + : object(&object) {} + + + ~Rank3HessianTester() {} + + void test(Function function, State& state, double step_size, std::vector& analytic_rank3hessian, std::vector& numeric_rank3hessian); + + }; + + + } + +} + + + +#include "progressbar.h" +#include "math/vector.h" +#include "math/matrix.h" + + +namespace BTS { + + namespace Analysis { + + template void Rank3HessianTester::test(Function function, State& state, double step_size, std::vector& analytic_rank3hessian, std::vector& numeric_rank3hessian) { + + State perturbed_state(state), dummy_gradient(state); + + typename State::Tensor hessian(state), perturbed_hessian(state); + + hessian.invalidate(); + perturbed_hessian.invalidate(); + + std::vector dummy_rank3hessian; + + (*object.*function)(state, dummy_gradient, hessian, analytic_rank3hessian); + + MR::Math::Vector& state_vector = state; + + MR::Math::Matrix template_rank3hessian_matrix(state_vector.size(), state_vector.size()); + template_rank3hessian_matrix = NAN; + + + MR::ProgressBar progress_bar ("Testing rank3hessian calculations...", state_vector.size()); + + for (size_t elem_i = 0; elem_i < state_vector.size(); ++elem_i) { + + perturbed_hessian.invalidate(); + + state_vector[elem_i] += step_size; + + perturbed_state.from_vector(state_vector); + + (*object.*function)(perturbed_state, dummy_gradient, perturbed_hessian, dummy_rank3hessian); + + state_vector[elem_i] -= step_size; + + MR::Math::Matrix& perturbed_hessian_matrix = perturbed_hessian; + + perturbed_hessian_matrix -= hessian; + perturbed_hessian_matrix /= step_size; + + numeric_rank3hessian.push_back(perturbed_hessian_matrix); + + ++progress_bar; + + } + + } + + + } + +} + + + +#endif diff --git a/src/bts/analysis/scan.h b/src/bts/analysis/scan.h new file mode 100644 index 0000000..56fb93d --- /dev/null +++ b/src/bts/analysis/scan.h @@ -0,0 +1,373 @@ +/* + Copyright 2009 Brain Research Institute, Melbourne, Australia + + Created by Tom Close on 13/03/09. + + This file is part of Bayesian Tractlet Sampling (BTS). + + BTS is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + BTS is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with BTS. If not, see . + + */ + + +#ifndef __bts_analysis_scan_h__ +#define __bts_analysis_scan_h__ + + +#include "bts/common.h" + +#include "progressbar.h" +#include "bts/prob/prior.h" +#include "bts/prob/likelihood.h" + +#include "image/header.h" +#include "dataset/loop.h" + + + +namespace BTS { + + namespace Analysis { + + template void scan ( + Prob::Likelihood& likelihood, + Prob::Prior& prior, + const T& origin, + const T& axis, + size_t num_steps, + const std::string& output_location, + std::map& run_properties); + + + template void scan ( + Prob::Likelihood& likelihood, + Prob::Prior& prior, + const Fibre::Base::Set& sequence, + const std::string& output_location, + std::map& run_properties); + + + template void scan ( + Prob::Likelihood& likelihood, + Prob::Prior& prior, + const T& origin, + const T& axis1, + const T& axis2, + size_t num_steps1, + size_t num_steps2, + const std::string& output_location, + std::map& properties + ); + + template void scan ( + Prob::Likelihood& likelihood, + Prob::Prior& prior, + const T& origin, + const T& axis1, + const T& axis2, + const T& axis3, + size_t num_steps1, + size_t num_steps2, + size_t num_steps3, + const std::string& output_location, + std::map& properties + ); + + } + +} + + +namespace BTS { + + namespace Analysis { + + + template void scan ( + Prob::Likelihood& likelihood, + Prob::Prior& prior, + const T& origin, + const T& axis, + size_t num_steps, + const std::string& output_location, + std::map& run_properties, + bool save_gradient) { + + if (origin.size() != axis.size()) + throw Exception ("Size of origin state (" + str(origin.size()) + ") does not match size of axis state (" + str(axis.size()) + ")."); + + std::string gradient_location = File::strip_extension(output_location) + ".gradient." + File::extension(output_location); + std::vector header; + header.push_back("log_px"); + header.push_back("likelihood_px"); + header.push_back("prior_px"); + header.push_back("acs_px"); + + std::vector components_list = prior.list_components(); + + header.insert(header.end(), components_list.begin(), components_list.end()); + + typename T::Writer writer(output_location, origin, header, run_properties); + typename T::Writer gradient_writer(gradient_location, origin); //FIXME: This file shouldn't be created unless 'save_gradient' flag is set. + + MR::ProgressBar progress_bar ("Scanning over 1 dimension...", num_steps); + + double inc = 2.0 / (double)(num_steps - 1); + + for (double frac = -1.0; frac <= 1.0 + inc/2.0; frac += inc) { // The +inc/2.0 safeguards against rounding errors. + + T gradient(origin), prior_gradient(origin), likelihood_gradient(origin); + + T state = origin + axis * frac; + + double prior_px; + double likelihood_px; + + if (save_gradient) { + gradient.zero(); + + prior_px = prior.log_prob(state, prior_gradient); + gradient += prior_gradient; + + likelihood_px = likelihood.log_prob(state,likelihood_gradient); + gradient += likelihood_gradient; + + gradient_writer.append(gradient); + + } else { + prior_px = prior.log_prob(state); + likelihood_px = likelihood.log_prob(state); + } + + double lprob = prior_px + likelihood_px; + + std::map properties; + + properties["log_px"] = str(lprob); + properties["likelihood_px"] = str(likelihood_px); + properties["prior_px"] = str(prior_px); + + std::map component_values = prior.get_component_values(state); + + for (std::map::iterator comp_it = component_values.begin(); comp_it != component_values.end(); ++comp_it) + properties[comp_it->first] = comp_it->second; + + writer.append(state, properties); + + ++progress_bar; + + } + + } + + + template void scan ( + Prob::Likelihood& likelihood, + Prob::Prior& prior, + const Fibre::Base::Set& sequence, + const std::string& output_location, + std::map& run_properties) { + + std::string gradient_location = File::strip_extension(output_location) + ".gradient." + File::extension(output_location); + std::vector header; + header.push_back("log_px"); + header.push_back("likelihood_px"); + header.push_back("prior_px"); + header.push_back("acs_px"); + + typename T::Writer writer(output_location, run_properties, header); + typename T::Writer gradient_writer(gradient_location); + + MR::ProgressBar progress_bar ("Scanning over 1 dimension...", sequence.size()); + + for (typename Fibre::Base::Set::const_iterator it = sequence.begin(); it != sequence.end(); ++it) { + + T gradient(*it), prior_gradient(*it), likelihood_gradient(*it); + + T& state = *it; + + gradient.zero(); + + double prior_px = prior.log_prob(state, prior_gradient); + gradient += prior_gradient; + + double likelihood_px = likelihood.log_prob(state,likelihood_gradient); + gradient += likelihood_gradient; + + double log_prob = prior_px + likelihood_px; + + std::map properties_row; + properties_row["log_px"] = str(log_prob); + properties_row["likelihood_px"] = str(likelihood_px); + properties_row["prior_px"] = str(prior_px); + + + writer.append(state, properties_row); + gradient_writer.append(gradient, std::map()); + + ++progress_bar; + + } + + } + + + template void scan ( + Prob::Likelihood& likelihood, + Prob::Prior& prior, + const T& origin, + const T& axis1, + const T& axis2, + size_t num_steps1, + size_t num_steps2, + const std::string& output_location, + std::map& properties + ) { + + if (origin.size() != axis1.size()) + throw Exception ("Size of origin state (" + str(origin.size()) + ") does not match size of axis1 state (" + str(axis1.size()) + ")."); + + if (origin.size() != axis2.size()) + throw Exception ("Size of origin state (" + str(origin.size()) + ") does not match size of axis2 state (" + str(axis2.size()) + ")."); + + MR::Image::Header header; + + header.insert(properties.begin(), properties.end()); + + header.set_ndim(2); + + header.set_dim(0, num_steps1); + header.set_dim(1, num_steps2); + + header.set_description(0, File::strip_extension(properties["axis1_location"])); + header.set_description(1, File::strip_extension(properties["axis2_location"])); + + header.set_vox(0, 2.0 / (double)num_steps1); + header.set_vox(1, 2.0 / (double)num_steps2); + + File::clear_path(output_location); + + header.create(output_location); + + double inc1 = 2.0 / (double)(num_steps1 - 1); + double inc2 = 2.0 / (double)(num_steps2 - 1); + + MR::Image::Voxel pixel (header); + + MR::DataSet::Loop loop ("Scanning over 2 dimensions...", 0, 2); + loop.start(pixel); + + for (double frac1 = -1.0; frac1 <= 1.0 + inc1/2.0; frac1 += inc1) { // The +inc/2.0 safeguards against rounding errors. + + for (double frac2 = -1.0; frac2 <= 1.0 + inc2/2.0; frac2 += inc2) { + + T state = origin + axis1 * frac1 + axis2 * frac2; + + pixel.value() = prior.log_prob(state) + likelihood.log_prob(state); + + loop.next(pixel); + + } + + } + + } + + + template void scan ( + Prob::Likelihood& likelihood, + Prob::Prior& prior, + const T& origin, + const T& axis1, + const T& axis2, + const T& axis3, + size_t num_steps1, + size_t num_steps2, + size_t num_steps3, + const std::string& output_location, + std::map& properties + ) { + + if (origin.size() != axis1.size()) + throw Exception ("Size of origin state (" + str(origin.size()) + ") does not match size of axis1 state (" + str(axis1.size()) + ")."); + + if (origin.size() != axis2.size()) + throw Exception ("Size of origin state (" + str(origin.size()) + ") does not match size of axis2 state (" + str(axis2.size()) + ")."); + + if (origin.size() != axis3.size()) + throw Exception ("Size of origin state (" + str(origin.size()) + ") does not match size of axis3 state (" + str(axis3.size()) + ")."); + + MR::Image::Header header; + + header.insert(properties.begin(), properties.end()); + + header.set_ndim(3); + + header.set_dim(0, num_steps1); + header.set_dim(1, num_steps2); + header.set_dim(2, num_steps3); + + + header.set_description(0, File::strip_extension(properties["axis1_location"])); + header.set_description(1, File::strip_extension(properties["axis2_location"])); + header.set_description(2, File::strip_extension(properties["axis3_location"])); + + + header.set_vox(0, 2.0 / (double)num_steps1); + header.set_vox(1, 2.0 / (double)num_steps2); + header.set_vox(2, 2.0 / (double)num_steps3); + + File::clear_path(output_location); + + header.create(output_location); + + + double inc1 = 2.0 / (double)(num_steps1 - 1); + double inc2 = 2.0 / (double)(num_steps2 - 1); + double inc3 = 2.0 / (double)(num_steps3 - 1); + + + MR::Image::Voxel pixel (header); + + MR::DataSet::Loop loop ("Scanning over 3 dimensions...", 0, 3); + loop.start(pixel); + + for (double frac1 = -1.0; frac1 <= 1.0 + inc1/2.0; frac1 += inc1) { // The +inc/2.0 safeguards against rounding errors. + + for (double frac2 = -1.0; frac2 <= 1.0 + inc2/2.0; frac2 += inc2) { + + for (double frac3 = -1.0; frac3 <= 1.0 + inc3/2.0; frac3 += inc3) { + + T state = origin + axis1 * frac1 + axis2 * frac2 + axis3 * frac3; + + pixel.value() = prior.log_prob(state) + likelihood.log_prob(state); + + loop.next(pixel); + + } + + } + + } + + + } + + + } + +} + + +#endif diff --git a/src/bts/cmd.h b/src/bts/cmd.h new file mode 100644 index 0000000..b1cc2a3 --- /dev/null +++ b/src/bts/cmd.h @@ -0,0 +1,84 @@ +/* + Copyright 2010 Brain Research Institute, Melbourne, Australia + + Written by Thomas G Close on Jun 3, 2010. + + This file is part of Bayesian Tractlet Sampling (BTS). + + BTS is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + BTS is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with BTS. If not, see . + +*/ + +#ifndef __bts_cmd_h__ +#define __bts_cmd_h__ + +#include "app.h" +#include "args.h" +#include "progressbar.h" + +namespace BTS { + + class Argument : public MR::Argument { + + public: + Argument (const char* name = NULL, const char* description = NULL) + : MR::Argument(name, description) {} + + Argument& type_string(const char* string); + + }; + + class Option : public MR::Option { + + public: + + typedef enum _ByDefault { + Active, + Inactive + } ByDefault; + + protected: + + ByDefault by_default; + + public: + Option () {} + + Option (const char* name, const char* description) + : MR::Option(name, description), by_default(Inactive) {} + + Option& active_by_default(bool is_active = true) + { by_default = is_active ? Active : Inactive; return *this; } + + }; + + class App : public MR::App { + + public: + App (int argc, char** argv, const char** cmd_desc, const MR::Argument* cmd_args, const MR::Option* cmd_opts, + const size_t* cmd_version, const char* cmd_author, const char* cmd_copyright) + : MR::App(argc, argv, cmd_desc, cmd_args, cmd_opts, cmd_version, cmd_author, cmd_copyright) {} + + virtual ~App (); + }; + + +// MR::ActiveByDefault NA = MR::NA; +// MR::ActiveByDefault Active = MR::Active; +// MR::ActiveByDefault Inactive = MR::Inactive; + +} + + +#endif /* __bts_cmd_h__ */ diff --git a/src/bts/common.cpp b/src/bts/common.cpp new file mode 100644 index 0000000..787c5bd --- /dev/null +++ b/src/bts/common.cpp @@ -0,0 +1,187 @@ +/* + Copyright 2009 Brain Research Institute, Melbourne, Australia + + Created by Tom Close on 13/03/09. + + This file is part of Bayesian Tractlet Sampling (BTS). + + BTS is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + BTS is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with BTS. If not, see . + + */ + +#include +#include + + + +#include "bts/common.h" + + + +namespace BTS { + + void breakpoint() { + size_t i = 0; + i++; + } + + + double rand_double() { + + size_t rand_size_t = rand(); + + return (double)rand_size_t / (double)RAND_MAX; + + } + + + std::vector parse_double_vector(const std::string& s) { + + std::vector v; + + size_t start_number = 0; + size_t end_number; + + int i = 0; + + start_number = s.find_first_of("0123456789.-"); + + while (start_number != std::string::npos) { + + end_number = s.find_first_not_of("0123456789.-", start_number); + + std::string num_string = s.substr(start_number, end_number-start_number); + + + if (num_string.find_first_of('-', 1) != std::string::npos || num_string.find('.', num_string.find('.')+1) != std::string::npos) // If there is a '-' character anywhere other than the first character, or if there is more than one decimal point then throw an error. + throw Exception("Value, " + num_string + " at position: " + str(i+1) + ", is invalid"); + + v.push_back(atof(num_string.c_str())); + + start_number = s.find_first_of("0123456789.-", end_number); + i++; + + } + + return v; + + } + + + std::vector parse_int_vector(const std::string& s) { + + std::vector v; + + size_t start_number = 0; + size_t end_number; + + int i = 0; + + start_number = s.find_first_of("0123456789-"); + + while (start_number != std::string::npos) { + + end_number = s.find_first_not_of("0123456789-", start_number); + + std::string num_string = s.substr(start_number, end_number-start_number); + + if (num_string.find_first_of('-', 1) != std::string::npos) // If there is a '-' character anywhere other than the first character then throw an error. + throw Exception("Value, " + num_string + " at position: " + str(i+1) + ", is invalid"); + + v.push_back(atoi(num_string.c_str())); + + start_number = s.find_first_of("0123456789-", end_number); + i++; + + } + + return v; + + } + + //TODO: Make this a template function and improve the parse to include ranges. + std::vector parse_size_t_vector(const std::string& s) { + + std::vector v; + + size_t start_number = 0; + size_t end_number; + + size_t i = 0; + + start_number = s.find_first_of("0123456789-"); + + while (start_number != std::string::npos) { + + end_number = s.find_first_not_of("0123456789-", start_number); + + std::string num_string = s.substr(start_number, end_number-start_number); + + if (num_string.find_first_of('-', 1) != std::string::npos) // If there is a '-' character anywhere other than the first character then throw an error. + throw Exception("Value, " + num_string + " at position: " + str(i+1) + ", is invalid"); + + v.push_back(atoi(num_string.c_str())); + + start_number = s.find_first_of("0123456789-", end_number); + i++; + + } + + return v; + + } + + + int num_dec_places(int number) { + int num_places, ten_power; + + num_places = 1; + ten_power = 10; + while ((number / ten_power) != 0) { + num_places++; + ten_power *= 10; + } + + return num_places; + } + + + int num_precision_places(double number) { + int num_places = 0; + + double remainder = number - floor(number); + + while (remainder != 0.0) { + num_places++; + remainder *= 10; + remainder = remainder - floor(remainder); + } + + return num_places; + } + + + + + + +} + + + + + + + + diff --git a/src/bts/common.h b/src/bts/common.h new file mode 100644 index 0000000..1ba19b4 --- /dev/null +++ b/src/bts/common.h @@ -0,0 +1,354 @@ +/* + Copyright 2009 Brain Research Institute, Melbourne, Australia + + Created by Tom Close on 13/03/09. + + This file is part of Bayesian Tractlet Sampling (BTS). + + BTS is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + BTS is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with BTS. If not, see . + + */ + + +#ifndef __bts_common_h__ +#define __bts_common_h__ + + +//Defines the parameters +#define COMMON_PARAMETERS \ + Option ("comments", "Description of the fibres/image, and/or the purpose of the performed experiment.") \ + + Argument ("comments", "").type_text() \ + + +//Loads the parameters into variables +#define SET_COMMON_PARAMETERS \ + std::string cmn_comments = ""; \ +\ + Options cmn_opt = get_options("comments"); \ + if (cmn_opt.size()) \ + cmn_comments = cmn_opt[0][0].c_str(); \ + + + +//Adds the parameters to the properties to be saved with the data. +#define ADD_COMMON_PROPERTIES(properties) \ + properties["comments"] = cmn_comments; \ + + +#include +#include +#include + + +#include "types.h" +#include "mrtrix.h" + + +#undef X +#undef Y +#undef Z +#undef DW +#undef AZ +#undef EL +#undef RAD +#undef INV_M_PI +#undef SQRT_3 +#undef SQRT_2 +#undef M_PI_ON_2 + + +namespace BTS { + + //Standard dimension order + const size_t X = 0; + const size_t Y = 1; + const size_t Z = 2; + const size_t DW = 3; + + //Standard spherical dimension order + const size_t EL = 0; + const size_t AZ = 1; + const size_t RAD = 2; + + //Common mathematical constants + const double INV_M_PI = 0.318309886; + const double GAUSS_NORM = 0.398942280; + const double JUST_UNDER_PI_ON_2 = 1.5706; + const double SQRT_3 = 1.732050807; + const double SQRT_2 = 1.414213562; + const double SQRT_LOG_2 = 0.832554611; + const double LOG_2 = 0.693147181; + const double LOG_PI = 1.144729886; + + const std::string PARAM_DIRECTORY = "/home/tclose/data/"; + + const double LARGE_FLOAT = 1e10; //A large double still with a bit of room to move. + const double SMALL_FLOAT = 1e-10; //A small double still with a bit of room to move. + const size_t LARGE_INT = 1e8; //A large number still with a bit of room to move. + + typedef MR::Exception Exception; + +// using std::cout; +// using std::endl; + +} + +extern "C" { +#include +#include +} + + +#include +#include +#include "file/path.h" +#include "exception.h" +#include "math/math.h" +#include "math/vector.h" + + +namespace BTS { + + template class CompareFirst { public: bool operator()(const std::pair& p1, const std::pair& p2) { return p1.first < p2.first; }}; + template class CompareSecond { public: bool operator()(const std::pair& p1, const std::pair& p2) { return p1.second < p2.second; }}; + + template T min2 (T const x, T const y) throw () { return (x < y)? x: y;} + + + template T max2 (T const x, T const y) throw () { return (x > y)? x: y;} + + + template void zero(T& element) { + element.zero(); + } + + + inline void zero(float& element) { + element = 0.0; + } + + + inline void zero(double& element) { + element = 0.0; + } + + + inline void zero(int& element) { + element = 0; + } + + + inline void zero(size_t& element) { + element = 0; + } + + + template void negate(T& value) { + value.negate(); + } + + + inline void negate(float& value) { + value = -value; + } + + + inline void negate(double& value) { + value = -value; + } + + + inline void negate(int& value) { + value = -value;; + } + + + inline void negate(size_t& value) { + value = -value;; + } + + + template void invalidate(T& element) { + element.invalidate(); + } + + + inline void invalidate(float& element) { + element = NAN; + } + + + inline void invalidate(double& element) { + element = NAN; + } + + + inline void invalidate(int& element) { + element = std::numeric_limits::max(); + } + + + template bool is_empty(const T& element) { + return !element.size(); + } + + + inline bool is_empty(double dble) { + return isnan(dble); + } + + + + void breakpoint(); + + + double rand_double(); + + + std::vector parse_double_vector(const std::string& str); + + + std::vector parse_int_vector(const std::string& str); + + + std::vector parse_size_t_vector(const std::string& str); + + + int num_dec_places(int number); + + + int num_precision_places(double number); + + + template std::string str(const T& value) { + std::stringstream ss; + ss << value; + return ss.str(); + } + + + inline std::string str (int number, size_t dec_places) { + std::stringstream ss; + ss << std::setfill('0') << std::setw(dec_places + (number < 0)) << number; + return ss.str(); + } + + + inline std::string str (double number, size_t dec_places, size_t precision) { + std::stringstream ss; + ss << std::fixed << std::setprecision(precision) << std::setfill('0') << std::setw(dec_places + precision + (precision > 0) + (number < 0)) << number; + return ss.str(); + } + + + template T to(const std::string &s) { + + //Copied from http://snippets.dzone.com/posts/show/347 + + T t; + std::istringstream iss(s); + iss >> t; + return t; + } + + + inline std::string current_datetime(std::string format_string = "%c") { + + //Adapted from example at http://www.cplusplus.com/reference/clibrary/ctime/strftime/ . + + time_t rawtime; + struct tm *timeinfo; + char current_time[200]; + + time (&rawtime); + timeinfo = localtime (&rawtime); + + + strftime (current_time, 200, format_string.c_str(), timeinfo); + + return str(current_time); + + } + + // Used to sort vectors of const char* + inline bool cstr_sort(const char* a, const char* b) { + + return strcmp(a, b) < 0; + + } + + + template + struct PrintMap : public std::unary_function + { + std::ostream& os; + PrintMap(std::ostream& strm) : os(strm) {} + + void operator()(const T& elem) const + { + os << elem.first << ", " << elem.second << std::endl; + } + }; + + template std::vector parse_sequence (const std::string& spec, T last = std::numeric_limits::max()) { + std::vector V; + if (!spec.size()) throw Exception ("unsigned integer sequence specifier is empty"); + std::string::size_type start = 0, end; + T num[3]; + T i = 0; + try { + do { + end = spec.find_first_of (",:", start); + std::string str (MR::strip (spec.substr (start, end-start))); + MR::lowercase (str); + if (str == "end") { + if (last == std::numeric_limits::max()) + throw Exception ("value of \"end\" is not known in number sequence \"" + spec + "\""); + num[i] = last; + } + else num[i] = to (spec.substr (start, end-start)); + + char last_char = end < spec.size() ? spec[end] : '\0'; + if (last_char == ':') { i++; if (i > 2) throw Exception ("invalid number range in number sequence \"" + spec + "\""); } + else { + if (i) { + T inc, last; + if (i == 2) { inc = num[1]; last = num[2]; } + else { inc = 1; last = num[1]; } + if (inc * (last - num[0]) < 0) inc = -inc; + for (; ( inc > 0 ? num[0] <= last : num[0] >= last ) ; num[0] += inc) V.push_back (num[0]); + } + else V.push_back (num[0]); + i = 0; + } + + start = end+1; + } while (end < spec.size()); + } + catch (Exception& E) { + throw Exception (E, "can't parse unsigned integer sequence specifier \"" + spec + "\""); + } + + return (V); + + } + + + // A gdb pretty printing hack + class CoordView {}; + +} + +#endif + diff --git a/src/bts/coord.cpp b/src/bts/coord.cpp new file mode 100644 index 0000000..a70eef2 --- /dev/null +++ b/src/bts/coord.cpp @@ -0,0 +1,156 @@ +/* + Copyright 2012 Brain Research Institute, Melbourne, Australia + + Written by Thomas G Close, 07/08/2010. + + This file is part of MRtrix. + + MRtrix is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + MRtrix is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with MRtrix. If not, see . + +*/ + +#include "bts/coord.h" +#include "bts/coord/tensor.h" + +namespace BTS { + + const Coord Coord::Invalid (NAN, NAN, NAN); + const Coord Coord::Zeros (0.0, 0.0, 0.0); + const Coord Coord::Ones(1.0,1.0,1.0); + const Coord Coord::Halves(0.5,0.5,0.5); + const std::string Coord::FILE_EXTENSION = "crd"; + + std::ostream& operator<< (std::ostream& stream , const Coord& c) + { + stream << "[ " << c[X] << ", " << c[Y] << ", " << c[Z] << " ]"; + return (stream); + } + + + Coord& Coord::zero() { + + operator[](X) = 0.0; + operator[](Y) = 0.0; + operator[](Z) = 0.0; + + return *this; + } + + Coord& Coord::invalidate() { + + operator[](X) = NAN; + operator[](Y) = NAN; + operator[](Z) = NAN; + + return *this; + } + + bool Coord::operator== (const Coord& A) const + { return (operator[](X) == A[X]) && (operator[](Y) == A[Y]) && (operator[](Z) == A[Z]); }; + + bool Coord::operator!= (const Coord& A) const + { return (operator[](X) != A[X]) || (operator[](Y) != A[Y]) || (operator[](Z) != A[Z]); }; + + + Coord operator* (double M, const Coord& c) + { return Coord (c[X]*M, c[Y]*M, c[Z]*M); } + + + double dist2 (const Coord& a, const Coord& b) + { return ((a-b).norm2()); } + + double dist (const Coord& a, const Coord& b) + { return ((a-b).norm()); } + + + + + double Coord::dot (const Coord& t, Coord& gradient) const { + + gradient = *this; + + return dot(t); + + } + + + double Coord::angle(const Coord& t) const { + + return MR::Math::acos(dot(t)/(norm() * t.norm())); + + } + + + double Coord::norm2 (Coord& gradient) const { + + gradient = *this * 2.0; + + return norm2(); + + } + + + double Coord::norm (Coord& gradient) const { + + double nrm = norm(); + + gradient = *this / nrm; + + return nrm; + + } + + + double Coord::norm2 (Coord& gradient, typename Coord::Tensor& hessian) const { + + gradient = *this * 2.0; + + hessian.diagonal() = 2.0; + + return norm2(); + + } + + + double Coord::norm (Coord& gradient, typename Coord::Tensor& hessian) const { + + double nrm = norm(); + + gradient = *this / nrm; + + hessian = this->outer(*this); + hessian *= - MR::Math::pow3(1/nrm); + hessian.diagonal() += 1/nrm; + + return nrm; + + } + + + + Coord::Tensor Coord::outer(const Coord& c) const { + + Coord::Tensor tensor; + + tensor.row(X) = c * operator[](X); + tensor.row(Y) = c * operator[](Y); + tensor.row(Z) = c * operator[](Z); + + return tensor; + + } + + + +} diff --git a/src/bts/coord.h b/src/bts/coord.h new file mode 100644 index 0000000..cd4fa51 --- /dev/null +++ b/src/bts/coord.h @@ -0,0 +1,240 @@ +/* + Copyright 2012 Brain Research Institute, Melbourne, Australia + + Written by Thomas G Close, 07/08/2010. + + This file is part of MRtrix. + + MRtrix is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + MRtrix is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with MRtrix. If not, see . + +*/ + + +#ifndef __bts_coord_h__ +#define __bts_coord_h__ + +namespace BTS { + + class Coord; + + +} + +#include "math/vector.h" +#include "bts/triple.h" + + +namespace BTS { + + class Coord : public MR::Math::Vector { + + public: + + class Tensor; + typedef Utilities::Reader Reader; + typedef Utilities::Writer Writer; + + public: + + const static Coord Invalid; + const static Coord Zeros; + const static Coord Halves; + const static Coord Ones; + + static const std::string FILE_EXTENSION; + + public: + + /*! Generates a basic fibre coordinate derived from a base fibre object of length three and row size 1 */ + Coord() + : MR::Math::Vector(3) { set(NAN); } + + Coord(double x, double y, double z) + : MR::Math::Vector(3) { set(x,y,z); } + + Coord(const Triple& t) + : MR::Math::Vector(3) { set(t[0],t[1],t[2]); } + + Coord(const MR::Math::Vector& v) + : MR::Math::Vector(v) { assert(v.size() == 3); } + + Coord(const MR::Math::Vector::View& view) + : MR::Math::Vector(view) { assert(view.size() == 3); } + + bool operator! () const + { return (isnan(operator[](X)) || isnan(operator[](Y)) || isnan(operator[](Z))); } + + bool valid () const + { return (!(isnan(operator[](X)) || isnan(operator[](Y)) || isnan(operator[](Z)))); } + + + Coord& set (double x_value, double y_value, double z_value) + { operator[](X) = x_value; operator[](Y) = y_value; operator[](Z) = z_value; return *this; } + + Coord& set (double value) + { set(value,value,value); return *this; } + + Coord& zero (); + + Coord& invalidate (); + + Coord abs() const + { return Coord(fabs(operator[](X)), fabs(operator[](Y)), fabs(operator[](Z)));} + + Coord invert() const + { return Coord (1/operator[](X), 1/operator[](Y), 1/operator[](Z)); } + + void copy_to(double* array) { array[X] = operator[](X); array[Y] = operator[](Y); array[Z] = operator[](Z); } + + bool operator== (const Coord& A) const; + bool operator!= (const Coord& A) const; + + Coord operator- () const + { return (Coord (-operator[](X), -operator[](Y), -operator[](Z))); } + + Coord& operator= (const Coord& A) + { operator[](X) = A[X]; operator[](Y) = A[Y]; operator[](Z) = A[Z]; return (*this); } + + + //Scalar addition, subtraction, multiplication and division. + Coord& operator+= (double inc) + { operator[](X) += inc; operator[](Y) += inc; operator[](Z) += inc; return *this; } + + Coord& operator-= (double inc) + { operator[](X) -= inc; operator[](Y) -= inc; operator[](Z) -= inc; return *this; } + + Coord& operator*= (double M) + { operator[](X)*=M; operator[](Y)*=M; operator[](Z)*=M; return *this; } + + Coord& operator/= (double M) + { operator[](X)/=M; operator[](Y)/=M; operator[](Z)/=M; return *this; } + + + Coord operator+ (double inc) const + { return (Coord (operator[](X)+inc, operator[](Y)+inc, operator[](Z)+inc)); } + + Coord operator- (double inc) const + { return (Coord (operator[](X)-inc, operator[](Y)-inc, operator[](Z)-inc)); } + + Coord operator* (double M) const + { return (Coord (operator[](X)*M, operator[](Y)*M, operator[](Z)*M)); } + + Coord operator/ (double M) const + { return (Coord (operator[](X)/M, operator[](Y)/M, operator[](Z)/M)); } + + + //Pairwise addition, subtraction, multiplication and division. + Coord operator+ (const Coord& c) const + { return Coord (operator[](X)+c[X], operator[](Y)+c[Y], operator[](Z)+c[Z]); } + + Coord operator- (const Coord& c) const + { return Coord (operator[](X)-c[X], operator[](Y)-c[Y], operator[](Z)-c[Z]); } + + Coord operator* (const Coord& c) const + { return Coord (operator[](X)*c[X], operator[](Y)*c[Y], operator[](Z)*c[Z]); } + + Coord operator/ (const Coord& c) const + { return Coord (operator[](X)/c[X], operator[](Y)/c[Y], operator[](Z)/c[Z]); } + + + Coord& operator+= (const Coord& c) + { operator[](X) += c[X]; operator[](Y) += c[Y]; operator[](Z) += c[Z]; return *this; } + + Coord& operator-= (const Coord& c) + { operator[](X) -= c[X]; operator[](Y) -= c[Y]; operator[](Z) -= c[Z]; return *this; } + + Coord& operator*= (const Coord& c) + { operator[](X) *= c[X]; operator[](Y) *= c[Y]; operator[](Z) *= c[Z]; return *this; } + + Coord& operator/= (const Coord& c) + { operator[](X) /= c[X]; operator[](Y) /= c[Y]; operator[](Z) /= c[Z]; return *this; } + + + bool positive() const + { return (operator[](X) > 0.0) && (operator[](Y) > 0.0) && (operator[](Z) > 0.0); } + + bool non_negative() const + { return (operator[](X) >= 0.0) && (operator[](Y) >= 0.0) && (operator[](Z) >= 0.0); } + + bool non_zero() const + { return operator[](X) || operator[](Y) || operator[](Z); } + + + template bool upper_bounded(U bound) const + { return (operator[](X) <= (double)bound) && (operator[](Y) <= (double)bound) && (operator[](Z) <= (double)bound); } + + template bool lower_bounded(U bound) const + { return (operator[](X) >= (double)bound) && (operator[](Y) >= (double)bound) && (operator[](Z) >= (double)bound); } + + template bool upper_bounded(const Triple& bound) const + { return (operator[](X) <= (double)bound[X]) && (operator[](Y) <= (double)bound[Y]) && (operator[](Z) <= (double)bound[Z]); } + + template bool lower_bounded(const Triple& bound) const + { return (operator[](X) >= (double)bound[X]) && (operator[](Y) >= (double)bound[Y]) && (operator[](Z) >= (double)bound[Z]); } + + double dot (const Coord& A) const + { return (operator[](X)*A[X] + operator[](Y)*A[Y] + operator[](Z)*A[Z]); } + + double dot (const Coord& t, Coord& gradient) const; + + double angle(const Coord& t) const; + + Tensor outer(const Coord& t) const; + + double norm2 () const + { return (operator[](X)*operator[](X) + operator[](Y)*operator[](Y) + operator[](Z)*operator[](Z)); } + + double norm () const + { return (sqrt (norm2())); } + + double norm2 (Coord& gradient) const; + + double norm (Coord& gradient) const; + + double norm2 (Coord& gradient, Tensor& hessian) const; + + double norm (Coord& gradient, Tensor& hessian) const; + + const Coord& normalise () + { double nrm = norm(); operator[](X) /= nrm; operator[](Y) /= nrm; operator[](Z) /= nrm; return (*this); } + + Coord cross (const Coord& A) const + { return (Coord (operator[](Y)*A[Z]-operator[](Z)*A[Y], operator[](Z)*A[X]-operator[](X)*A[Z], operator[](X)*A[Y]-operator[](Y)*A[X])); } + + Coord min_axis() const + { Coord axis(0.0,0.0,0.0); if (fabs(operator[](X)) < fabs(operator[](Y))) { if (fabs(operator[](X)) < fabs(operator[](Z))) axis[X] = 1.0; else axis[Z] = 1.0; } else if (fabs(operator[](Y)) < fabs(operator[](Z))) axis[Y] = 1.0; else axis[Z] = 1.0; return axis; } + + Coord sign() const + { Coord s; for (size_t i = 0; i < 3; ++i) s[i] = operator[](i) > 0 ? 1 : (operator[](i) < 0 ? -1 : 0); return s; } + + double vsize() const + { return 3; } + + void clear() + { // do nothing, overrides MR::Math::Vector clear to make sure it doesn't resize the vector. + // TODO: Reimplement Coord class so that it doesn't need to use MR::Math::Vector and remove redundencies like this one. + } + + + }; + + std::ostream& operator<< (std::ostream& stream , const Coord& c); + + + inline Coord operator* (double M, Coord c) { return Coord(M * c[X], M * c[Y], M * c[Z]); } + inline Coord operator+ (double inc, Coord c) { return Coord(inc + c[X], inc + c[Y], inc + c[Z]); } + +} + +#endif /* __fibre_coord_h__ */ diff --git a/src/bts/coord/tensor.h b/src/bts/coord/tensor.h new file mode 100644 index 0000000..ea81310 --- /dev/null +++ b/src/bts/coord/tensor.h @@ -0,0 +1,120 @@ +/* + Copyright 2012 Brain Research Institute, Melbourne, Australia + + Written by Thomas G Close, 07/08/2010. + + This file is part of MRtrix. + + MRtrix is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + MRtrix is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with MRtrix. If not, see . + +*/ + + +#ifndef __bts_coord_tensor_h__ +#define __bts_coord_tensor_h__ + +#include "math/matrix.h" +#include "bts/coord.h" +#include "bts/fibre/base/tensor_writer.h" + +namespace BTS { + + class Coord::Tensor : public MR::Math::Matrix { + + public: + + typedef Fibre::Base::TensorWriter Writer; + typedef Coord RowType; + + public: + + static Tensor create_diagonal(double value) + { Tensor t; t.diagonal() = value; return t; } + + public: + + Tensor() + : MR::Math::Matrix(3,3) {} + + //Only included for template consistency in gradient tester + Tensor(const Coord& c) + : MR::Math::Matrix(3,3) { invalidate(); } + + Tensor(const MR::Math::Matrix::View& view) + : MR::Math::Matrix(view) { assert(rows()==3); assert(columns() == 3); } + + Coord operator[](size_t idx) + { return Coord(row(idx)); } + + const Coord operator[](size_t idx) const + { return Coord(row(idx)); } + + Tensor& invalidate() + { for (size_t i = 0; i < 3; ++i) for (size_t j = 0; j < 3; ++j) operator()(i,j) = NAN; return *this; } + + Tensor& zero() + { for (size_t i = 0; i < 3; ++i) for (size_t j = 0; j < 3; ++j) operator()(i,j) = NAN; return *this; } + + Tensor& operator*= (const Tensor& t) + { MR::Math::Matrix::operator*=(t); return *this; } + + Tensor& operator*= (double c) + { MR::Math::Matrix::operator*=(c); return *this; } + + Tensor& operator/= (const Tensor& t) + { MR::Math::Matrix::operator/=(t); return *this; } + + Tensor& operator/= (double c) + { MR::Math::Matrix::operator/=(c); return *this; } + + Tensor operator* (const Tensor& t) const + { Tensor answer (*this); answer *= t; return answer;} + + Tensor operator* (double c) const + { Tensor answer (*this); answer *= c; return answer;} + + Tensor operator/ (const Tensor& t) const + { Tensor answer (*this); answer /= t; return answer;} + + Tensor operator/ (double c) const + { Tensor answer (*this); answer /= c; return answer;} + + + Tensor& operator+= (const Tensor& t) + { MR::Math::Matrix::operator+=(t); return *this; } + + Tensor& operator-= (const Tensor& t) + { MR::Math::Matrix::operator-=(t); return *this; } + + Tensor operator+ (const Tensor& t) const + { Tensor answer (*this); answer += t; return answer;} + + Tensor operator- (const Tensor& t) const + { Tensor answer (*this); answer -= t; return answer;} + + + double vsize() const + { return 3; } + + }; + + inline Coord::Tensor operator*(double c, const Coord::Tensor& t) + { return t * c; } + + +} + +#endif /* #ifndef __bts_fibre_coord_tensor_h__*/ + + diff --git a/src/bts/diffusion/encoding.h b/src/bts/diffusion/encoding.h new file mode 100644 index 0000000..dc08765 --- /dev/null +++ b/src/bts/diffusion/encoding.h @@ -0,0 +1,171 @@ +/* + Copyright 2010 Brain Research Institute/National ICT Australia (NICTA), Melbourne, Australia + + Written by Thomas G Close, 5/05/09. + + This file is part of Bayesian Tractlet Sampling (BTS). + + BTS is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + BTS is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with BTS. If not, see . + +*/ + +#ifndef __bts_diffusion_encoding_h__ +#define __bts_diffusion_encoding_h__ + + + +namespace BTS { + + namespace Diffusion { + + class Encoding; + + } + +} + +#include + +#include "math/matrix.h" + +#include "bts/triple.h" + +#include "bts/common.h" + + + + +namespace BTS { + + namespace Diffusion { + + class Encoding { + + public: + + class Set; + + protected: + + double b; + + Coord orient; + + public: + + Encoding(const MR::Math::Vector::View& encoding) + : b(encoding[3]), orient(encoding[X], encoding[Y], encoding[Z]) { + normalise_orient(); + } + + + Encoding(const Triple& orientation, double b_value) + : b(b_value), orient(orientation) { normalise_orient(); } + + + Encoding(const Triple& direction) + : b(direction.norm()), orient(direction) { normalise_orient(); } + + + Encoding(const Encoding& e) + : b(e.b), orient(e.orient) {} + + + Encoding& operator= (const Encoding& e) + { b = e.b; orient = e.orient; return *this; } + + + double& operator[] (size_t dim_i) + { return orient[dim_i]; } + + const double& operator[] (size_t dim_i) const + { return orient[dim_i]; } + + Coord orientation() const + { return orient; } + + + double b_value() const + { return b; } + + + static std::vector parse_encodings(const MR::Math::Matrix::View& encodings_matrix); + + + static MR::Math::Matrix encodings_matrix(const std::vector& encodings); + + protected: + + /*! Normalises the orientation, checking to see if the norm of the orientation vector isn't zero first */ + void normalise_orient() { + + double norm = orient.norm(); + + //Check to see if the orientation vector isn't all zero before normalising. + if (norm) { + orient[X] /= norm; + orient[Y] /= norm; + orient[Z] /= norm; + } + + } + + + friend std::ostream& operator<< (std::ostream& stream, const Encoding& e); + + }; + + + inline std::vector parse_encodings(const MR::Math::Matrix::View& encodings_matrix) { + + std::vector encodings; + + for (size_t encode_i = 0; encode_i < encodings_matrix.rows(); ++encode_i) + encodings.push_back(Encoding(encodings_matrix.row(encode_i))); + + return encodings; + + } + + + inline MR::Math::Matrix encodings_matrix(const std::vector& encodings) { + + MR::Math::Matrix encodings_matrix(encodings.size(), 4); + + for (size_t encode_i = 0; encode_i < encodings.size(); ++encode_i) { + encodings_matrix(encode_i, X) = encodings[encode_i].orientation()[X]; + encodings_matrix(encode_i, Y) = encodings[encode_i].orientation()[Y]; + encodings_matrix(encode_i, Z) = encodings[encode_i].orientation()[Z]; + encodings_matrix(encode_i, 3) = encodings[encode_i].b_value(); + } + + return encodings_matrix; + + } + + + inline std::ostream& operator<< (std::ostream& stream, const Encoding& e) { + + stream << "b=" << e.b << ", orient=" << e.orient << std::endl; + + return stream; + + } + + } + +} + + +#endif diff --git a/src/bts/diffusion/encoding/set.cpp b/src/bts/diffusion/encoding/set.cpp new file mode 100644 index 0000000..9c08c50 --- /dev/null +++ b/src/bts/diffusion/encoding/set.cpp @@ -0,0 +1,70 @@ +/* + Copyright 2009 Brain Research Institute, Melbourne, Australia + + Created by Tom Close on 13/03/09. + + This file is part of Bayesian Tractlet Sampling (BTS). + + BTS is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + BTS is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with BTS. If not, see . + + */ + +#include "bts/diffusion/encoding/set.h" + +#include "bts/diffusion/inline_functions.h" + +namespace BTS { + + namespace Diffusion { + + + Encoding::Set::Set (const Model& m) { + + for (size_t encode_i = 0; encode_i < m.num_encodings(); encode_i++) + encodings.push_back(m.encoding(encode_i)); + + } + + + void Encoding::Set::load(const std::string& location) { + + MR::Math::Matrix encodings_matrix (location); + set(encodings_matrix); + + } + + void Encoding::Set::set(const MR::Math::Matrix& encodings_matrix) { + + encodings.clear(); + + if (encodings_matrix.columns() != 4) + throw Exception ("Encoding matrix must have exactly 4 columns (" + str(encodings_matrix.columns()) + " found)."); + + for (size_t encode_i = 0; encode_i < encodings_matrix.rows(); encode_i++) + encodings.push_back(Encoding(encodings_matrix.row(encode_i))); + + } + + std::ostream& operator<< (std::ostream& stream, const Encoding::Set& e_set) { + + for (std::vector::const_iterator encode_it = e_set.encodings.begin(); encode_it != e_set.encodings.end(); encode_it++) + stream << *encode_it; + + return stream; + + } + + } + +} diff --git a/src/bts/diffusion/encoding/set.h b/src/bts/diffusion/encoding/set.h new file mode 100644 index 0000000..488e252 --- /dev/null +++ b/src/bts/diffusion/encoding/set.h @@ -0,0 +1,98 @@ +/* + Copyright 2009 Brain Research Institute, Melbourne, Australia + + Created by Tom Close on 13/03/09. + + This file is part of Bayesian Tractlet Sampling (BTS). + + BTS is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + BTS is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with BTS. If not, see . + + */ + +#ifndef __bts_diffusion_encoding_settemplate_h__ +#define __bts_diffusion_encoding_settemplate_h__ + +#include + +#include "bts/diffusion/encoding.h" +#include "bts/diffusion/model.h" + + + + + + +namespace BTS { + + namespace Diffusion { + + class Encoding::Set { + + protected: + + std::vector encodings; + + + //Public member functions + public: + + + Set() {} + + Set (const MR::Math::Matrix& encodings_matrix) + { set(encodings_matrix); } + + Set (const std::string& location) + { load(location); } + + Set (const Set& s) : + encodings(s.encodings) + {} + + + Set (const Model& m); + + + Set& operator= (const Set& s) { + + this->encodings = s.encodings; + + return *this; + } + + void load(const std::string& location); + + void set(const MR::Math::Matrix& encodings_matrix); + + Encoding& operator[](size_t index) { return encodings[index]; } + const Encoding& operator[](size_t index) const { return encodings[index]; } + + size_t num_encodings() const { return encodings.size(); } + size_t size() const { + return encodings.size(); + } + + const Encoding& encoding(size_t index) const { return encodings[index]; } + + friend std::ostream& operator<<(std::ostream& stream, const Encoding::Set& encodings); + }; + + std::ostream& operator<< (std::ostream& stream, const Encoding::Set& encodings); + + } +} + + + +#endif diff --git a/src/bts/diffusion/inline_functions.h b/src/bts/diffusion/inline_functions.h new file mode 100644 index 0000000..d33668a --- /dev/null +++ b/src/bts/diffusion/inline_functions.h @@ -0,0 +1,28 @@ +/* + Copyright 2008 Brain Research Institute, Melbourne, Australia + + Written by Thomas G Close, 16/07/2010. + + This file is part of MRtrix. + + MRtrix is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + MRtrix is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with MRtrix. If not, see . + +*/ + +#ifndef __bts_diffusion_inline_functions_h__ +#define __bts_diffusion_inline_functions_h__ + + + +#endif /* __bts_diffusion_inline_functions_h__ */ diff --git a/src/bts/diffusion/model.cpp b/src/bts/diffusion/model.cpp new file mode 100644 index 0000000..c4f32b1 --- /dev/null +++ b/src/bts/diffusion/model.cpp @@ -0,0 +1,338 @@ +/* + Copyright 2009 Brain Research Institute, Melbourne, Australia + + Created by Tom Close on 13/03/09. + + This file is part of Bayesian Tractlet Sampling (BTS). + + BTS is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + BTS is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with BTS. If not, see . + + */ + + + +#include "dwi/gradient.h" +#include "math/matrix.h" + +#include "math/SH.h" + +#include "bts/common.h" + +#include "bts/triple.h" +// + +#include "bts/diffusion/encoding.h" + +#include "bts/diffusion/model.h" +#include "bts/diffusion/response.h" + +#include "bts/diffusion/inline_functions.h" + +namespace BTS { + + namespace Diffusion { + + const char* Model::ENCODINGS_LOCATION_DEFAULT = "/home/tclose/Code/Common/parameters/encoding_60.b"; + const bool Model::ISOTROPIC_DEFAULT = 0; + const double Model::ADC_DEFAULT = 5e-4; + const double Model::FA_DEFAULT = 0.8; +// const double Model::B_VALUE_DEFAULT = 3000.0; + +// const char* Model::RESPONSE_SH_LOCATION_DEFAULT = "/home/tclose/Code/Tractography/params/diffusion/tensor.SH"; +// const char* Model::RESPONSES_LOCATION_DEFAULT = "/home/tclose/Code/Tractography/params/diffusion/tensor-no_iso.poly"; + + // Maximum order ('l') spherical harmonic that can be calculated; + const size_t Model::LMAX = 8; + + // 0-8th order m=0 Associated Legendre polynomial coefficients multiplied by the common factor for each order. + // (Note, The common factor is omitted in the constant for accuracy and is calculated from the expression + // sqrt[(2*l+1)/(4*pi)] / 2^l). Higher orders can be added, just need to track down the right Legendre coefficients. + const double Model::M0_HARMONIC_L0[5] = { 1, 0, 0, 0, 0}; + const double Model::M0_HARMONIC_L2[5] = { -2, 6, 0, 0, 0}; + const double Model::M0_HARMONIC_L4[5] = { 6, -60, 70, 0, 0}; + const double Model::M0_HARMONIC_L6[5] = {-20, 420, -1260, 924, 0}; + const double Model::M0_HARMONIC_L8[5] = { 70, -2320, 13860, -24024, 12870}; + + + + + Model Model::factory(const MR::Math::Matrix& encodings_matrix, + const MR::Math::Matrix& response_SHs, + double adc, + double fa, + bool include_isotropic) { + + Model model; + + //If response_SHs is an empty matrix, use adc and fa values to generate response spherical harmonics from tensor model. + if (!response_SHs.rows() && !response_SHs.columns()) + model = Model(encodings_matrix, adc, fa, include_isotropic); + + //Else if response matrix only has one column assume that it meant to be a column vector. + else if (response_SHs.columns() == 1) + model = Model(encodings_matrix, response_SHs.column(0), include_isotropic); + + //Else if response matrix only has one row assume that it meant to be a row vector. + else if (response_SHs.rows() == 1) + model = Model(encodings_matrix, response_SHs.row(0), include_isotropic); + + //Otherwise assume that it has separate response coefficients on each row. + else + model = Model(encodings_matrix, response_SHs, include_isotropic); + + return model; + + } + + + Model::Model (const MR::Math::Matrix& encodings_matrix, const MR::Math::Matrix& response_SHs, + bool include_isotropic) { + + if (response_SHs.rows() != encodings_matrix.rows()) + throw Exception ("If multiple rows to thre response_SHs spherical harmonics are provided then they must match" + + str(" the number of rows in the encodings matrix.")); + + init(encodings_matrix, response_SHs, include_isotropic); + + } + + + + + void Model::precalculate_weightings(Fibre::Strand::Section& section) const { + + section.precalc_weightings.resize(num_encodings()); + + for (size_t response_i = 0; response_i < num_encodings(); ++response_i) + section.precalc_weightings[response_i] = operator[](response_i).weighting(section.tangent()); + + } + + void Model::precalculate_weightings_and_gradients(Fibre::Strand::Section& section) const { + + section.precalc_weightings.resize(num_encodings()); + section.precalc_weight_gradients.resize(num_encodings()); + + for (size_t response_i = 0; response_i < num_encodings(); ++response_i) + section.precalc_weightings[response_i] = operator[](response_i).weighting(section.tangent(), section.precalc_weight_gradients[response_i]); + + + } + + void Model::precalculate_weightings_gradients_and_hessians(Fibre::Strand::Section& section) const { + + section.precalc_weightings.resize(num_encodings()); + section.precalc_weight_gradients.resize(num_encodings()); + section.precalc_weight_hessians.resize(num_encodings()); + + for (size_t response_i = 0; response_i < num_encodings(); ++response_i) + section.precalc_weightings[response_i] = operator[](response_i).weighting(section.tangent(), section.precalc_weight_gradients[response_i], section.precalc_weight_hessians[response_i]); + + } + + + + MR::Math::Vector Model::tensor_m0_SH(double adc, double fa, double b_value) { + + MR::Math::Vector sh (LMAX/2 + 1); + + MR::Math::SH::FA2SH (sh, fa, adc, b_value, LMAX); + + return sh; + + } + + + MR::Math::Vector Model::SH_to_coeffs(MR::Math::Vector loaded_SH, bool include_isotropic) { + + size_t num_coeffs = LMAX/2 + 1; + + size_t num_loaded_harmonic_coeffs = loaded_SH.size(); + + if (num_loaded_harmonic_coeffs > num_coeffs) + throw Exception ("Can only calculate polynomial coefficients up to spherical harmonic order " + str((num_coeffs-1)*2) + "."); + + MR::Math::Vector SH (loaded_SH); + + SH.resize(num_coeffs); + + // Pad out the remaining coefficients with zeros. + for (size_t sh_i = num_loaded_harmonic_coeffs; sh_i < num_coeffs; sh_i++) + SH[sh_i] = 0.0; + + //Pre-weight the spherical harmonics by the common factor for each polynomial. + for (size_t sh_i = 0; sh_i < num_coeffs; sh_i++) { + + double l = (double)sh_i * 2.0; + + //Normalising scalar for each basis: sqrt[(2*l+1)/(4*pi)] / 2^l + SH[sh_i] *= sqrt((2.0 * l + 1.0) / (4.0 * M_PI)) / pow(2.0, l); + } + + + //Set up m=0 associated Legendre polynomials (spherical harmonic basis functions) + std::vector< std::vector > uncollated; + + if (include_isotropic) + uncollated.push_back(std::vector(M0_HARMONIC_L0, M0_HARMONIC_L0 + num_coeffs)); + else + uncollated.push_back(std::vector(num_coeffs, 0.0)); + + + uncollated.push_back(std::vector(M0_HARMONIC_L2, M0_HARMONIC_L2 + num_coeffs)); + uncollated.push_back(std::vector(M0_HARMONIC_L4, M0_HARMONIC_L4 + num_coeffs)); + uncollated.push_back(std::vector(M0_HARMONIC_L6, M0_HARMONIC_L6 + num_coeffs)); + uncollated.push_back(std::vector(M0_HARMONIC_L8, M0_HARMONIC_L8 + num_coeffs)); + + + // Multiply spherical harmonic basis functions with weighted coefficients. + for (size_t sh_i = 0; sh_i < num_coeffs; sh_i++) + for (size_t poly_i = 0; poly_i < num_coeffs; poly_i++) + uncollated[sh_i][poly_i] *= SH[sh_i]; + + + //Collect like terms between the polynomial equations to form one set of polynomial coefficients. + MR::Math::Vector collated(num_coeffs); + collated.zero(); + + for (size_t poly_i = 0; poly_i < num_coeffs; poly_i++) + for (size_t sh_i = 0; sh_i < num_coeffs; sh_i++) + collated[poly_i] += uncollated[sh_i][poly_i]; + + return collated; + + } + + + Model::Model (const MR::Math::Matrix& encodings_matrix, double adc, double fa, bool include_isotropic) { + + MR::Math::Matrix response_SHs(encodings_matrix.rows(), LMAX/2 + 1); + + for (size_t row_i = 0; row_i < encodings_matrix.rows(); row_i++) + response_SHs.row(row_i) = tensor_m0_SH(adc, fa, encodings_matrix(row_i,3)); + + init(encodings_matrix, response_SHs, include_isotropic); + + } + + + + + Model::Model (const MR::Math::Matrix& encodings_matrix, const MR::Math::Vector& response_SH, bool include_isotropic) { + + if (!encodings_matrix.rows()) + throw Exception ("No rows found in encodings matrix."); + + if (!encodings_matrix.columns() != 4) + throw Exception ("Four columns required in encodings matrix, found " + str(encodings_matrix.columns()) + "."); + + + double consistent_b_value = 0; + + MR::Math::Matrix response_SHs(encodings_matrix.rows(), LMAX/2 + 1); + + for (size_t row_i = 0; row_i < encodings_matrix.rows(); row_i++) { + + //If b value == previously set b value or the previous b value hasn't been set yet. + if (encodings_matrix(row_i,3) == consistent_b_value || consistent_b_value == 0) { + + response_SHs.row(row_i) = response_SH; + + consistent_b_value = encodings_matrix(row_i,3); + + //If b value == 0. Set response coeffs to NAN, as they should be ignored in 'init' method. + } else if (encodings_matrix(row_i,3) == 0) + + response_SHs.row(row_i) = NAN; + + else + + throw Exception ("Inconsistent b values used in encoding matrix, please either supply a seperate response harmonics for each row or use the automatic tensor harmonic calculation. Previously found b value " + str(consistent_b_value) + + ", found " + str(encodings_matrix(row_i,3)) + " at row " + str(row_i) + "."); + + } + + + init(encodings_matrix, response_SHs, include_isotropic); + + + } + + + + + + void Model::init (const MR::Math::Matrix& encodings_matrix, const MR::Math::Matrix& response_SHs, bool include_isotropic) { + + if (encodings_matrix.columns() <= 3) + throw Exception ("Insufficient columns in loaded diffusion-weighting matrix"); + + if (encodings_matrix.columns() > 4) + throw Exception ("More than 4 columns (" + str(encodings_matrix.columns()) + ") were found in diffusion-weighting matrix"); + + if (encodings_matrix.rows() != response_SHs.rows()) + throw Exception ("Number of rows in encodings_matrix (" + str(encodings_matrix.rows()) + ") and response_SH matrix (" + str(response_SHs.rows()) + ") do not match."); + + for (size_t row_i = 0; row_i < encodings_matrix.rows(); row_i++) { + + MR::Math::Vector response_coeffs(1); + + if (encodings_matrix(row_i, 3)) + response_coeffs = SH_to_coeffs(response_SHs.row(row_i), include_isotropic); + + //If b value == 0, the 0th order coefficient is set to one and the remaining are 0. + else + response_coeffs[0] = 1.0; + + Response response(encodings_matrix.row(row_i), response_coeffs, row_i); + + responses.push_back(response); + + } + + this->includes_iso = include_isotropic; + + + } + + + + + void Model::scale_coeffs(double scalar) { + + for (size_t encode_i = 0; encode_i < this->num_encodings(); encode_i++) + this->operator[](encode_i).scale_coeffs(scalar); + + } + + + + + std::ostream& operator<< (std::ostream& stream, const Diffusion::Model& model) { + + stream << std::endl; + + for (std::vector::const_iterator response_it = model.responses.begin(); response_it != model.responses.end(); ++response_it) + stream << *response_it << std::endl; + + return (stream); + + } + + + + } + + +} diff --git a/src/bts/diffusion/model.h b/src/bts/diffusion/model.h new file mode 100644 index 0000000..bfd2807 --- /dev/null +++ b/src/bts/diffusion/model.h @@ -0,0 +1,245 @@ +/* + Copyright 2009 Brain Research Institute, Melbourne, Australia + + Created by Tom Close on 13/03/09. + + This file is part of Bayesian Tractlet Sampling (BTS). + + BTS is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your diff_option) any later version. + + BTS is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with BTS. If not, see . + + */ + +#ifndef __bts_diffusion_model_h__ +#define __bts_diffusion_model_h__ + + +//Defines the parameters required to initialise a Proposal::Distribution object. +#define DIFFUSION_PARAMETERS \ +\ + Option ("diff_response_SH_location", "The location of the axially symmetric (m=0) spherical harmonic coefficients of the diffusion response function.") \ + + Argument ("diff_response_SH_location", "").type_file (), \ +\ + Option ("diff_encodings_location", "The location of the gradient encoding used, supplied as a 4xN text file with each line is in the format [ X Y Z b ], where [ X Y Z ] describe the direction of the applied gradient, and b gives the b-value in units (1000 s/mm^2).") \ + + Argument ("diff_encodings_location", "").type_file (), \ +\ + Option ("diff_isotropic", "Include isotropic component of the signal."), \ +\ + Option ("diff_adc", "The mean apparent diffusion coefficient (mm^2/s) of the tensor model.") \ + + Argument ("diff_adc", "").type_float (SMALL_FLOAT, Diffusion::Model::ADC_DEFAULT, LARGE_FLOAT), \ +\ + Option ("diff_fa", "The fractional anisotropy (FA) of the diffusion tensor model.") \ + + Argument ("diff_fa", "").type_float (0.0, Diffusion::Model::FA_DEFAULT, 1.0) \ +\ + +// Option ("precision", "azimuthal angle precision", "precision of the samples about the azimuthal angle") +// + Argument ("precision", "precision of the samples about the azimuthal angle").type_integer (3,1e6,100)) + + +//Loads the 'proposal' parameters into variables +#define SET_DIFFUSION_PARAMETERS \ +\ + std::string diff_response_SH_location; \ + std::string diff_encodings_location = Diffusion::Model::ENCODINGS_LOCATION_DEFAULT; \ + bool diff_isotropic = Diffusion::Model::ISOTROPIC_DEFAULT; \ + double diff_adc = Diffusion::Model::ADC_DEFAULT; \ + double diff_fa = Diffusion::Model::FA_DEFAULT; \ +\ + Options diff_opt = get_options("diff_response_SH_location"); \ + if (diff_opt.size()) \ + diff_response_SH_location = diff_opt[0][0].c_str(); \ +\ + diff_opt = get_options("diff_encodings_location"); \ + if (diff_opt.size()) \ + diff_encodings_location = diff_opt[0][0].c_str(); \ +\ + diff_opt = get_options("diff_isotropic"); \ + if (diff_opt.size()) \ + diff_isotropic = !Diffusion::Model::ISOTROPIC_DEFAULT; \ +\ + diff_opt = get_options("diff_adc"); \ + if (diff_opt.size()) {\ + diff_adc = Diffusion::Model::ADC_DEFAULT; \ + if (diff_response_SH_location.size()) \ + std::cout << "WARNING!! Supplied value for diff_option '-diff_adc' (" + str(diff_adc) + ") will be ignored as supplied value for diff_option '-diff_response_SH' overrides it." << std::endl; \ + } \ +\ + diff_opt = get_options("diff_fa"); \ + if (diff_opt.size()) {\ + diff_fa = Diffusion::Model::FA_DEFAULT; \ + if (diff_response_SH_location.size()) \ + std::cout << "WARNING!! Supplied value for diff_option '-diff_fa' (" + str(diff_fa) + ") will be ignored as supplied value for diff_option '-diff_response_SH' overrides it." << std::endl; \ + } \ +\ + MR::Math::Matrix diff_response_SH; \ + if (diff_response_SH_location.size()) { \ + diff_response_SH.load (diff_response_SH_location); \ + } \ +\ + MR::Math::Matrix diff_encodings (diff_encodings_location); \ +\ + + +// = Diffusion::Model::RESPONSE_SH_LOCATION_DEFAULT; +// std::string diff_spherical_harmonic_location = Diffusion::Model::SPHERICAL_HARMONIC_LOCATION_DEFAULT; +// MR::Math::Vector diff_spherical_harmonic (diff_spherical_harmonic_location); + +//Adds the 'signal' parameters to the properties to be saved with the data. +#define ADD_DIFFUSION_PROPERTIES(properties) \ + properties["diff_encodings_location"] = str(diff_encodings_location); \ + properties["diff_isotropic"] = str(diff_isotropic); \ + if (diff_response_SH.rows()) { \ + properties["diff_response_SH"] = Math::matlab_str(diff_response_SH); \ + properties["diff_response_SH_location"] = diff_response_SH_location; \ + } else { \ + properties["diff_adc"] = str(diff_adc); \ + properties["diff_fa"] = str(diff_fa); \ + } \ + + + + +namespace BTS { + namespace Diffusion { + + class Model; + + } +} + +#include + +#include "bts/fibre/strand/set.h" + + +#include "bts/diffusion/encoding.h" +#include "bts/diffusion/response.h" + +#define LOOP(op) \ +for (std::vector::iterator response_it = responses.begin(); response_it != responses.end(); ++response_it) { op } + +namespace BTS { + + namespace Diffusion { + + class Model { + + //Public const static members + public: + + const static char* ENCODINGS_LOCATION_DEFAULT; + + const static bool ISOTROPIC_DEFAULT; + + const static double ADC_DEFAULT; + const static double FA_DEFAULT; +// const static double B_VALUE_DEFAULT; + + const static double AZ_PRECISION_DEFAULT; +// const static char* SPHERICAL_HARMONIC_LOCATION_DEFAULT; +// const static char* RESPONSE_SH_LOCATION_DEFAULT; + + const static size_t LMAX; //Maximum lmax that can be calculated; + + //0-8th order m=0 Associated Legendre polynomial coefficients multiplied by the common factor for each order. + static const double M0_HARMONIC_L0[5], M0_HARMONIC_L2[5], M0_HARMONIC_L4[5], M0_HARMONIC_L6[5], M0_HARMONIC_L8[5]; + + + //Protected member variables + protected: + + std::vector responses; + bool includes_iso; + + public: + + + static MR::Math::Vector tensor_m0_SH(double adc, double fa, double b_value); + + static MR::Math::Vector SH_to_coeffs(MR::Math::Vector spherical_harmonics, bool include_isotropic); + + static Model factory(const MR::Math::Matrix& encodings_matrix, + const MR::Math::Matrix& response_SHs, + double adc, + double fa, + bool include_isotropic); + + //Public member functions + public: + + Model() {} + + //TODO: Use b_value from encoding matrix to generate response function per direction. + Model (const MR::Math::Matrix& encodings_matrix, double adc, double fa, bool include_isotropic); + + //TODO: Use take a matrix of response_SH, allowing a different response function per direction. + Model (const MR::Math::Matrix& encodings_matrix, const MR::Math::Vector& response_SH, bool include_isotropic); + + + Model (const MR::Math::Matrix& encodings_matrix, const MR::Math::Matrix& response_SHs, bool include_isotropic); + + + Model (const Model& m) + : responses(m.responses), includes_iso(m.includes_iso) + {} + + + Model& operator= (const Model& m) { + + this->responses = m.responses; + this->includes_iso = m.includes_iso; + + return *this; + } + + + const static double default_strand_volume_fraction = 0.2262 * .0005 * 1e5 * 2.0; + + size_t num_encodings() const + { return responses.size(); } + size_t size() const + { return responses.size(); } + + Response& operator[](size_t index) + { return responses[index]; } + const Response& operator[](size_t index) const + { return responses[index]; } + + const Encoding& encoding(size_t index) const + { return responses[index]; } + + void precalculate_weightings(Fibre::Strand::Section& section) const; + + void precalculate_weightings_and_gradients(Fibre::Strand::Section& section) const; + + void precalculate_weightings_gradients_and_hessians(Fibre::Strand::Section& section) const; + + void scale_coeffs(double scalar); + + bool includes_isotropic() const + { return includes_iso; } + + protected: + + void init(const MR::Math::Matrix& encodings_matrix, const MR::Math::Matrix& response_SHs, bool include_isotropic); + + friend std::ostream& operator<< (std::ostream& stream, const Diffusion::Model& model); + + }; + + } +} + +#undef LOOP + +#endif diff --git a/src/bts/diffusion/response.cpp b/src/bts/diffusion/response.cpp new file mode 100644 index 0000000..fbe2c3f --- /dev/null +++ b/src/bts/diffusion/response.cpp @@ -0,0 +1,204 @@ +/* + Copyright 2008 Brain Research Institute, Melbourne, Australia + + Written by Thomas G Close, Aug 12, 2010. + + This file is part of MRtrix. + + MRtrix is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + MRtrix is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with MRtrix. If not, see . + +*/ + +#ifndef __bts_diffusion_response_cpp_h__ +#define __bts_diffusion_response_cpp_h__ + +#include "bts/diffusion/response.h" +#include "bts/coord/tensor.h" + +namespace BTS { + + namespace Diffusion { + + + //TODO: Encapsulate logic into inline functions to avoid replication between weighting functions. + + double Response::weighting(const Coord& tangent) const { + + //Initalize the weighting with the 0th order coefficient. + double weight = coeffs[0]; + + double tan_dot_orient = Encoding::orient.dot(tangent); + double tan_dot_tan = tangent.norm2(); + + //Otherwise the total added value = 0 anyway. + if (tan_dot_orient != 0.0 && tan_dot_tan != 0.0) { + + double tan_dot_orient2 = MR::Math::pow2(tan_dot_orient); + + double cos2 = tan_dot_orient2 / tan_dot_tan; + + //Will hold the even powers of the cosine of the angle between DW and tangent. + double cos2p = 1.0; + + for (size_t p_int = 1; p_int < coeffs.size(); ++p_int) { + + const double& coeff_p = coeffs[p_int]; + + cos2p *= cos2; + + weight += coeff_p * cos2p; + + } + + } + + return weight; + + } + + + double Response::weighting(const Coord& tangent, Coord& gradient) const { + + //Initalize the weighting with the 0th order coefficient. + double weight = coeffs[0]; + +#ifndef GRADIENT_NOT_REQUIRED + gradient.zero(); //coeffs[0]; Not sure why this was coeffs[0]. +#endif + + double tan_dot_orient = Encoding::orient.dot(tangent); + double tan_dot_tan = tangent.norm2(); + + //Otherwise the total added value = 0 anyway. + if (tan_dot_orient != 0.0 && tan_dot_tan != 0.0) { + + double tan_dot_orient2 = MR::Math::pow2(tan_dot_orient); + + double cos2 = tan_dot_orient2 / tan_dot_tan; + + //Will hold the even powers of the cosine of the angle between DW and tangent. + double cos2p = 1.0; + + for (size_t p_int = 1; p_int < coeffs.size(); ++p_int) { + + const double& coeff_p = coeffs[p_int]; + + double p = (double)p_int; + + cos2p *= cos2; + + weight += coeff_p * cos2p; + +#ifndef GRADIENT_NOT_REQUIRED + gradient += coeff_p * 2 * p * cos2p * (Encoding::orient / tan_dot_orient - tangent / tan_dot_tan); +#endif + + } + + } + + + return weight; + + } + + + double Response::weighting(const Coord& tangent, Coord& gradient, Coord::Tensor& hessian) const { + + //Initalize the weighting with the 0th order coefficient. + double weight = coeffs[0]; + +#ifndef GRADIENT_NOT_REQUIRED + gradient.zero(); //coeffs[0]; Not sure why this was coeffs[0]. + +#ifndef HESSIAN_NOT_REQUIRED + hessian.zero(); +#endif + +#endif + + double tan_dot_orient = Encoding::orient.dot(tangent); + double tan_dot_tan = tangent.norm2(); + + //Otherwise the total added value = 0 anyway. + if (tan_dot_orient != 0.0 && tan_dot_tan != 0.0) { + + double tan_dot_orient2 = MR::Math::pow2(tan_dot_orient); + +#ifndef HESSIAN_NOT_REQUIRED + double tan_dot_tan2 = MR::Math::pow2(tan_dot_tan); +#endif + + double cos2 = tan_dot_orient2 / tan_dot_tan; + + //Will hold the even powers of the cosine of the angle between DW and tangent. + double cos2p = 1.0; + + for (size_t p_int = 1; p_int < coeffs.size(); ++p_int) { + + const double& coeff_p = coeffs[p_int]; + + double p = (double)p_int; + + cos2p *= cos2; + + weight += coeff_p * cos2p; + +#ifndef GRADIENT_NOT_REQUIRED + + gradient += coeff_p * 2 * p * cos2p * (Encoding::orient / tan_dot_orient - tangent / tan_dot_tan); + +#ifndef HESSIAN_NOT_REQUIRED + + //Note that the Hessian calculation could be slightly more efficient by only calculating the upper triangle + //of the matrix but has been implemented this way for mathematical clarity. + hessian += coeff_p * 2 * p * cos2p * ( + ((2 * p - 1) / tan_dot_orient2) * orient.outer(orient) + - ( 2 * p / (tan_dot_orient * tan_dot_tan)) * (tangent.outer(orient) + orient.outer(tangent)) + + ((2 * p + 2) / tan_dot_tan2) * tangent.outer(tangent) + - Coord::Tensor::create_diagonal(1/tan_dot_tan) ); + +#endif + +#endif + + } + + } + + + return weight; + + } + + + std::ostream& operator<< (std::ostream& stream, const Diffusion::Response& response) { + + stream << "b=" << response.b; + + stream << ", orient=" << response.orient; + + stream << ", coeffs=" << response.coeffs; + + stream << std::endl; + + return stream; + + } + + } + +} + +#endif /* __bts_diffusion_response_cpp_h__ */ diff --git a/src/bts/diffusion/response.h b/src/bts/diffusion/response.h new file mode 100644 index 0000000..0589c11 --- /dev/null +++ b/src/bts/diffusion/response.h @@ -0,0 +1,152 @@ +/* + Copyright 2009 Brain Research Institute, Melbourne, Australia + + Created by Tom Close on 13/03/09. + + This file is part of Bayesian Tractlet Sampling (BTS). + + BTS is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + BTS is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with BTS. If not, see . + + */ + + +#ifndef __bts_diffusion_response_h__ +#define __bts_diffusion_response_h__ + +namespace BTS { + + namespace Diffusion { + + class Response; + + } + +} + +#include "bts/common.h" + +#include "bts/triple.h" +#include "bts/coord.h" +#include "bts/diffusion/encoding.h" + + +namespace BTS { + + namespace Diffusion { + + class Response : public Encoding { + + protected: + + MR::Math::Vector coeffs; + size_t index; + + +#ifdef OPTIMISED +// // Used to store the weighting and the gradient of the weighting for the current Fibre::Strand::Section +// // to save it being recalculated at every voxel it affects. +// double precalc_weighting; +// +// Triple precalc_gradient; +// Coord::Tensor precalc_hessian; +#endif + + //NB: b value is incorporated into the response coefficients. + + public: + + Response (const MR::Math::Vector::View& encoding_row, MR::Math::Vector& coeffs, size_t index) + : Encoding(encoding_row), coeffs(coeffs), index(index) {} + + Response (const Triple& orientation, double b_value, MR::Math::Vector& coeffs, size_t index) + : Encoding(orientation, b_value), coeffs(coeffs), index(index) {} + + Response (const Triple& direction, MR::Math::Vector& coeffs, size_t index) + : Encoding(direction), coeffs(coeffs), index(index) {} + + Response (const Response& r) + : Encoding(r), coeffs(r.coeffs), index(r.index) {} + + Response& operator= (const Response& r) + { Encoding::operator= (r); coeffs = r.coeffs; index = r.index; return *this; } + + + double weighting (const Coord& tangent) const; + + double weighting (const Coord& tangent, Coord& tangent_gradient) const; + + double weighting (const Coord& tangent, Coord& tangent_gradient, Coord::Tensor& tangent_hessian) const; + +//--------------------------------------------------------------------------------------------------// +//These functions are only used to get the signature right for the GradientTester::Function classes. +//--------------------------------------------------------------------------------------------------// + + double weighting (const Coord& tangent) + { const Response& const_this = *this; return const_this.weighting(tangent); } + + double weighting (const Coord& tangent, Coord& tangent_gradient) + { const Response& const_this = *this; return const_this.weighting(tangent, tangent_gradient); } + + double weighting (const Coord& tangent, Coord& tangent_gradient, Coord::Tensor& tangent_hessian) + { const Response& const_this = *this; return const_this.weighting(tangent, tangent_gradient, tangent_hessian); } +//--------------------------// + + + size_t get_index() const + { return index; } + +#ifdef OPTIMISED +// void precalculate_weighting(const Triple& tangent) +// { this->precalc_weighting = weighting(tangent); } +// +// void precalculate_weighting_and_gradient(const Triple& tangent) +// { this->precalc_weighting = weighting(tangent, this->precalc_gradient); } +// +// void precalculate_weighting_gradient_and_hessian(const Triple& tangent) +// { this->precalc_weighting = weighting(tangent, this->precalc_gradient, this->precalc_hessian); } +// +// double precalculated_weighting() const +// { return precalc_weighting; } +// +// +// const Triple& precalculated_gradient() const +// { return precalc_gradient; } +// +// const Coord::Tensor& precalculated_hessian() const +// { return precalc_hessian; } + +#endif + + void scale_coeffs(double scalar) + { this->coeffs *= scalar; } + + + + + friend std::ostream& operator<< (std::ostream& stream, const Diffusion::Response& response); + + }; + + +// inline + std::ostream& operator<< (std::ostream& stream, const Diffusion::Response& response); + + + } + + +} + + +#endif diff --git a/src/bts/fibre/base/object.cpp b/src/bts/fibre/base/object.cpp new file mode 100644 index 0000000..b2d6851 --- /dev/null +++ b/src/bts/fibre/base/object.cpp @@ -0,0 +1,443 @@ +/* + Copyright 2008 Brain Research Institute, Melbourne, Australia + + Written by Thomas G Close, Jan 27, 2011. + + This file is part of MRtrix. + + MRtrix is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + MRtrix is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with MRtrix. If not, see . + +*/ + +#include "exception.h" + +#include "bts/common.h" +#include "bts/file.h" + +#include "bts/fibre/base/object.h" +#include "bts/fibre/strand.h" +#include "bts/fibre/tractlet.h" +#include "bts/fibre/strand/set.h" +#include "bts/fibre/tractlet/set.h" +#include "bts/math/common.h" + +namespace BTS { + + namespace Fibre { + + namespace Base { + + const char* Object::ACS_SQRT_PROP = "acs_sqrt"; + + const char* Object::PROPS_LIST_END = 0; + + // Sorry a bit of a hack. Is passed to the operator[]() when constructing a strand element without the properties. + std::vector Object::EMPTY_PROPS; + + + void Object::reset(size_t size, size_t row_size, const std::vector& properties, double fill_value) { + + if (!owner) + throw Exception ("Cannot reset object as it is a view onto a larger object."); + + MR::Math::Vector::resize(size * row_size + properties.size()); + sze = size; + + *props = properties; + + set(fill_value); + + } + + + void Object::reset(const std::vector& properties, double fill_value) { + + if (!owner) + throw Exception ("Cannot reset object as it is a view onto a larger object."); + + MR::Math::Vector::resize(properties.size(), fill_value); + sze = 0; + + *props = properties; + + set(fill_value); + + } + + + bool Object::props_match(const std::vector* properties) const { + + bool match; + + if (props == properties) // Point to the same properties + match = true; + else if (!props->size() && !properties->size()) // Both contain no properties + match = true; + else if (num_props() != properties->size()) // Are of different size + match = false; + else // Compare the property pointers (relies on the fact that properties are sorted by order of memory location when they are inserted). + match = !memcmp(&(props->operator[](0)),&(properties->operator[](0)), num_props()); + + return match; + + } + + + + Object& Object::operator=(const Object& b) { + + if (is_owner()) { + + MR::Math::Vector::operator=(b); + + sze = b.sze; + *props = *b.props; + + + } else { + + // Might consider making these Exceptions instead of assertions, but this function probably should be as fast as possible. + assert(vsize() == b.vsize()); // Sizes need to match when fibre object is not owner of data. + assert(props_match(b)); // Properties need to match exactly when fibre object is not owner of data. + + const MR::Math::Vector& bvec = b; + + for (size_t i = 0; i < vsize(); ++i) + MR::Math::Vector::operator[](i) = bvec[i]; + + } + + return *this; + + } + + + Object& Object::operator=(const MR::Math::Vector& v) { + + assert(vsize() == v.size()); // Sizes need to match + + for (size_t i = 0; i < vsize(); ++i) + MR::Math::Vector::operator[](i) = v[i]; + + return *this; + + } + + + void Object::add_prop(const char* const name, double value) { + + if (!is_owner()) + throw Exception ("Cannot add property to a fibre object that does not own the underlying data (i.e. is a view onto part of a larger structure)."); + + //Loop through properties and insert the new property in the appropriate position for alphabetical order + size_t insert_index = 0; + + for (std::vector::iterator prop_it = props->begin(); prop_it != props->end(); ++prop_it) { + + int compare = strcmp(name, *prop_it); + + if (!compare) + throw Exception ("Property with the same name ('" + str(name) + "') already exists in fibre object"); + + // If new property name comes before current property in alphabetical order, insert it and break loop + if (compare < 0) { + props->insert(prop_it,name); + break; + } + + ++insert_index; + + } + + //Increment state vector to hold new property + MR::Math::Vector::resize(vsize()+1); + + //If the property wasn't inserted within the existing properties append it to the end of the list + if (insert_index == props->size()) { + + props->push_back(name); //Add pointer to property name to properties list + + MR::Math::Vector::operator[](vsize()-1) = value; //Set property value. + + } else { + + // Shuffle the values of the existing properties after the inserted property up a position + for (int prop_i = props->size()-1; prop_i > (int)insert_index; --prop_i) + MR::Math::Vector::operator[](bsize() + prop_i) = MR::Math::Vector::operator[](bsize() + prop_i - 1); + + MR::Math::Vector::operator[](bsize() + insert_index) = value; //Set property value of inserted property + + } + + } + + + void Object::remove_prop(const char* const name, bool ignore_missing) { + + if (!is_owner()) + throw Exception ("Cannot remove property from a fibre object that does not own the underlying data (i.e. is a view onto part of a larger structure)."); + + //Find iterator to property that matches given property name. + std::vector::iterator prop_it = props->begin(); + + for (; prop_it != props->end(); ++prop_it) + if (name == *prop_it) + break; + + if (prop_it != props->end()) { + + //Shift property values with indices higher than the removed property down a position + for (size_t i = (prop_it - props->begin()) + 1; i < num_props(); ++i) + MR::Math::Vector::operator[](bsize() + i-1) = MR::Math::Vector::operator[](bsize() + i); + + // Remove property from list + props->erase(prop_it); + + // Resize state vector + MR::Math::Vector::resize(vsize()-1); + + } else if (!ignore_missing) + throw Exception ("Fibre object does not have property '" + str(name) + "' (use 'ignore_missing' parameter to ignore)."); + + } + + + void Object::clear_props() { + + if (!is_owner()) + throw Exception ("Cannot clear properties from a fibre object that does not own the underlying data (i.e. is a view onto part of a larger structure)."); + + // Resize state vector to remove appended properties + MR::Math::Vector::resize(bsize()); + + // Clear properties list. + props->clear(); + + } + + + //FIXME: Change this to template function and make it so that only the properties relevant for the current object are copied. + void Object::copy_all_props(const Object& obj) { + + for (size_t prop_i = 0; prop_i < obj.num_props(); ++prop_i) { + + const char* key = obj.prop_key(prop_i); + + if (!has_prop(key)) + add_prop(key); + + prop(key) = obj.prop(prop_i); + + } + + } + + + + Object& Object::clear() { + + //Check to see if has props because if it does they will be retained (and MR::Math::Vector::resize(0) + //will throw an exception. + if (num_props()) { + + for (size_t prop_i = 0; prop_i < num_props(); ++prop_i) + MR::Math::Vector::operator[](prop_i) = MR::Math::Vector::operator[](bsize() + prop_i); + + MR::Math::Vector::resize(num_props()); + + } else + MR::Math::Vector::clear(); + + sze = 0; + + return *this; + + } + + Object& Object::clear(const std::vector& properties) { + + if (!props_match(&properties)) { + + clear_props(); + for (size_t prop_i = 0; prop_i < properties.size(); ++prop_i) + add_prop(properties[prop_i]); + + } + + clear(); + + return *this; + + } + + + + size_t Object::prop_index(const char* const name) const { + + // Find index of property + size_t prop_index = 0; + + for (; prop_index < num_props(); ++prop_index) + if (props->operator[](prop_index) == name) + break; + + //Check to see if property was found. + if (prop_index == num_props()) + throw Exception ("Fibre object does not have property '" + str(name) + "', it needs to be added by the 'add_prop' command beforehand.\n" + "Note that the comparison is performed by comparing pointer addresses, so the same (const char*) needs to be used throughout."); + + return prop_index; + + } + + + void Object::resize(size_t new_size, size_t row_size, double fill_value) { + + if (!is_owner()) + throw Exception ("Cannot resize fibre object that does not own the underlying data (i.e. is a view onto part of a larger structure)."); + + size_t old_bsize = bsize(); + size_t new_bsize = row_size * new_size; + + assert(old_bsize == row_size * sze); + + if (new_bsize > old_bsize) { + + //Extend state vector to hold the new base state data + MR::Math::Vector::resize(new_bsize + num_props()); + + //Shift the property values out to their new positions + for (int prop_i = num_props()-1; prop_i >= 0; --prop_i) + MR::Math::Vector::operator[](new_bsize + prop_i) = MR::Math::Vector::operator[](old_bsize + prop_i); + + for (size_t i = old_bsize; i < new_bsize; ++i) + MR::Math::Vector::operator[](i) = fill_value; + + } else if (new_bsize < old_bsize) { + + //Shift the property values in to their new positions + for (size_t prop_i = 0; prop_i < num_props(); ++prop_i) + MR::Math::Vector::operator[](new_bsize + prop_i) = MR::Math::Vector::operator[](old_bsize + prop_i); + + //Resize the underlying vector. + MR::Math::Vector::resize(new_bsize + num_props()); + + } + + sze = new_size; + + } + + + + Object& Object::set(double value) { + + for (uint i = 0; i < vsize(); ++i) + this->MR::Math::Vector::operator[](i) = value; + + return *this; + + } + + + Object& Object::push_back(const Coord& c) { + + if (!is_owner()) + throw Exception ("Cannot push back to a fibre object that does not own the underlying data (i.e. is a view onto part of a larger structure)."); + + //Add room for the new coord + resize(size() + 1); + + //Set the newly added coord. + operator[](size()-1) = c; + + return *this; + + } + + + Object& Object::invert() { + + for (uint i = 0; i < vsize(); ++i) + MR::Math::Vector::operator[](i) = -MR::Math::Vector::operator[](i); + + return *this; + + } + + + Coord Object::left_product(const MR::Math::Vector& row_vector) const { + + assert(row_vector.size() == size()); + + Coord product(0,0,0); + + for (size_t i = 0; i < size(); ++i) + product += operator[](i) * row_vector[i]; + + return product; + + } + + + std::string Object::load_matlab_str(const std::string& location, double scale) { + + std::string output; + + if (File::has_or_txt_extension(location)) { + Fibre::Strand::Set strands (location); + strands *= scale; + output = strands.matlab_str(); + + } else if (File::has_or_txt_extension(location)) { + Fibre::Tractlet::Set tractlets (location); + tractlets *= scale; + output = tractlets.matlab_str(); + + } else if (File::extension(location) == "sta") { + + MR::Math::Vector state (location); + state *= scale; + output = Math::matlab_str(state); + + } else + throw Exception ("Unrecognised file extension '" + File::extension(location) + "'."); + + return output; + + } + + std::ostream& operator<< (std::ostream& stream, const Object& fibre) { + + stream << std::endl; + + for (uint prop_i = 0; prop_i < fibre.num_props(); ++prop_i) + stream << fibre.prop_key(prop_i) << ": " << fibre.prop(prop_i) << std::endl; + + for (size_t i = 0; i < fibre.size(); i++) + stream << fibre[i] << std::endl; + + return (stream); + + } + + + + } + + } + +} + + diff --git a/src/bts/fibre/base/object.h b/src/bts/fibre/base/object.h new file mode 100644 index 0000000..969cd22 --- /dev/null +++ b/src/bts/fibre/base/object.h @@ -0,0 +1,795 @@ +/* + Copyright 2008 Brain Research Institute, Melbourne, Australia + + Written by Thomas G Close, Jan 27, 2011. + + This file is part of MRtrix. + + MRtrix is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + MRtrix is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with MRtrix. If not, see . + +*/ + +#ifndef __bts_fibre_base_h__ +#define __bts_fibre_base_h__ + +#include "math/vector.h" +#include "math/matrix.h" +#include "bts/triple.h" +#include "bts/coord.h" + +#define LOOP(op) \ + for (size_t i = 0; i < vsize(); ++i) { \ + op \ + } + + +// Derived base() +// { assert(!EMPTY_PROPS.size()); return Derived(sze, bvector(), &EMPTY_PROPS); } + +//! Redefines general functions inherited from Fibre::Object so they return references to the derived class +#define BASE_GENERAL_FUNCTIONS(Derived) \ +\ + Derived& set(double value) \ + { Base::Object::set(value); return *this;} \ +\ + void copy_props(const Base::Object& source) \ + { Base::Object::copy_props(*this, source); } \ +\ + std::map extract_and_set_props(std::map& combined_props) \ + { return Base::Object::extract_and_set_props(combined_props); } \ +\ + Derived& operator=(double c) \ + { MR::Math::Vector::operator=(c); return *this; } \ +\ + Derived& operator=(const MR::Math::Vector& v) \ + { Base::Object::operator=(v); return *this; } + +//! Redefines mulitiplication and division functions inherited from Fibre::Object so they return references to the derived class +#define BASE_INVERSION_FUNCTIONS(Derived) \ + Derived invert() \ + { invert(); return *this; } \ + \ + Derived operator-() const \ + { Derived answer (*this); answer.invert(); return answer; } \ + + +//! Redefines mulitiplication and division functions inherited from Fibre::Object so they return references to the derived class +#define BASE_MULT_DIVIDE_FUNCTIONS(Derived) \ + Derived& operator*= (const Derived& f) \ + { assert(props_match(f)); MR::Math::Vector::operator*=(f); return *this; } \ + \ + Derived& operator*= (double c) \ + { MR::Math::Vector::operator*=(c); return *this; } \ + \ + Derived& operator/= (const Derived& f) \ + { assert(props_match(f)); MR::Math::Vector::operator/=(f); return *this; } \ + \ + Derived& operator/= (double c) \ + { MR::Math::Vector::operator/=(c); return *this; } \ + \ + Derived operator* (const Derived& f) const \ + { Derived answer (*this); answer *= f; return answer;} \ + \ + Derived operator* (double c) const \ + { Derived answer (*this); answer *= c; return answer;} \ + \ + Derived operator/ (const Derived& f) const \ + { Derived answer (*this); answer /= f; return answer;} \ + \ + Derived operator/ (double c) const \ + { Derived answer (*this); answer /= c; return answer;} \ + + +//! Redefines addition and subtraction functions inherited from Fibre::Object so they return references to the derived class +#define BASE_ADD_SUBTRACT_FUNCTIONS(Derived) \ + Derived& operator+= (const Derived& f) \ + { assert(props_match(f)); MR::Math::Vector::operator+=(f); return *this; } \ + \ + Derived& operator-= (const Derived& f) \ + { assert(props_match(f)); MR::Math::Vector::operator-=(f); return *this; } \ + \ + Derived operator+ (const Derived& f) const \ + { Derived answer (*this); answer += f; return answer;} \ + \ + Derived operator- (const Derived& f) const \ + { Derived answer (*this); answer -= f; return answer;} \ + + + +namespace BTS { + + namespace Fibre { + + class Strand; + class Track; + class Tractlet; + + namespace Base { + + template class Set; + template class Tensor; + template class Reader; + template class Writer; + + /*! Forms the base of all fibre objects (with the exception of tensors). + * + * Objectd on MR::Math::Vector it can be treated as a one dimensional vector by statically casting it to + * MR::Math::Vector. However, note that the operator[]() is overidden in Fibre::Object to return a + * BTS::Triple. + * + */ + class Object : public MR::Math::Vector { + + friend class Tensor; + + public: + + const static char* ACS_SQRT_PROP; /**< Human-readable name of the Apparrent Connection Strength (ACS) property used for printing and saving. + NB: Existence checks for properties use the pointer address not + the character strings they refer to, so be sure to use exactly this char* + when using the acs property (same for all properties). */ + + //! Used to signify the end of a props array. + const static char* PROPS_LIST_END; + + /*! Passed to the operator[]() when constructing a fibre object view without the properties. + * Would like to make it const but the properties member variable of an object needs to be non const + * for the cases when it owns the properties. */ + static std::vector EMPTY_PROPS; + + public: + + /*! Loads a BTS data file and converts the loaded fibre object into a string that is readable by the MATLAB + * software package. Is used to store fibre objects used as parameters (such as step sizes) within fibre object + * file headers. + * + * @param location Location of the file containing the fibre object data + * @param scale An optional scalar that scales the loaded values + */ + static std::string load_matlab_str(const std::string& location, double scale = 1.0); + + + /*! Extracts properties for the template type T (i.e. those present in T::PROPS_LIST) from a map containing + * both template properties and extended properties, such as those loaded from a properties file, and + * returns them in a map. + * + * @param combined_properties map containing string versions of property keys and values amongst extended properties + * @return map of present property keys and their values as doubles + */ + template static std::map + extract_props(std::map& combined_properties); + + /*! Extracts propert keys for the template type T (i.e. those present in T::PROPS_LIST) from a vector containing + * both template property keys and extended property keys, such as those loaded from a properties file, and + * returns them in a vector. + * + * @param combined_header vector containing string versions of property keys amongst extended property keys + * @return vector of present property keys + */ + template static std::vector extract_props(std::vector& combined_header); + + /*! Selects propert keys for the template type T (i.e. those present in T::PROPS_LIST) from a vector containing + * both template property keys and extended property keys, such as those loaded from a properties file, and + * returns them in a vector. Differs from extract_props in that it doesn't delete the properties after they + * are selected. @see extract_props + * + * @param combined_header vector containing string versions of property keys amongst extended property keys + * @return vector of present property keys + */ + template static std::vector + select_props(const std::vector& combined_header); + + + + /*! Copies properties present in the source object into the destination if they appear in the PROPS_LIST + * of the destination + * + * @param destination Destination where the properties are copied to. + * @param source Source where the properties are copied from + */ + template void copy_props(T& destination, const Object& source); + + + + public: + + //TODO: Make all fibre objects implement a 'template_match' function that determines if all their fields are equivalent. + + protected: + + size_t sze; /**< The size of the fibre object */ + std::vector* props; /**< List of keys for properties that the fibre object has (the values are appended to the state vector). */ + + public: + + /*! Initialises a fibre base object with a given base_size, predefind props + * + * @param size Size of the base fibre object + * @param v_size the total "vector size" of the object + * @param props A list of props to be appended to the state vector. + */ + Object (size_t size, size_t v_size, const std::vector& properties) + : MR::Math::Vector (v_size), + sze(size), + props(new std::vector(properties)) { + + assert(props); + } + + + protected: + + /*! Initialises a fibre base object 'view' from an existing fibre object. As distinct + * from the first constructor the fibre object return does not 'own' the underlying data and therefore + * it cannot be resized and properties cannot be added or removed. However, the existing data fields can be + * freely accessed and changed see base MR::Math::Vector class. + * + * @param size The number of elements in the fibre object (not including properties) + * @param view MR::Math::Vector::View onto the underlying data + * @param props A list of props to be appended to the state vector. + * + * @see MR::Math::Vector::View + */ + Object (size_t size, const MR::Math::Vector::View& view, std::vector* props) + : MR::Math::Vector(view), + sze(size), + props(props) { + + assert(props); + } + + + public: + + + //! Copy constructor. + Object(const Object& b) + : MR::Math::Vector(b), sze(b.sze), props(new std::vector(*b.props)) {} + + + //! Deletes properties if owner of the data + ~Object() { + + if (owner) + delete props; + + } + + + /*! Sets the LHS fibre object to the RHS value. If the LHS object does not own the data (i.e. is a view onto + * part of a larger object) both the size and properties must match + * + * @param b The RHS fibre object + * @return Reference to LHS object + */ + Object& operator=(const Object& b); + + + /*! Sets the values of the object to the vector values in @arg v + * + * @param v Vector containing the values of the object + * @return Reference to LHS object + */ + Object& operator=(const MR::Math::Vector& v); + + /*! Clears the fibre object and resizes it out to the provided size filling with the @arg fill_value + * + * @param size Size of the new object + * @param row_size Row size of the new object + * @param props Properties of the new object + * @param fill_value Value used to fill the new object + */ + void reset(size_t size, + size_t row_size, + const std::vector& props, + double fill_value = NAN); + + /*! Clears the fibre object and frees the row size + * + * @param props Properties of the new object + */ + void reset(const std::vector& props, double fill_value = NAN); + + + + /*! Returns the value of the underlying GSLVector::owner field to specify if the fibre object is the + * owner of the data or does not own the data (i.e. is a view onto part of a larger structure + * + * @return Whether the fibre object owns the data + */ + bool is_owner() const + { return this->GSLVector::owner; } + + + //! Returns the "size" of the object, i.e. the number of @see BTS::Triple objects it contains + size_t size() const + { return sze; } + + + //! Returns the "vector size" of the object, i.e. the size of the underlying MR::Math::Vector object + size_t vsize() const + { return MR::Math::Vector::size(); } + + + /*! Returns the "base size" of the object, i.e. the vector size of the underlying MR::Math::Vector object + * minus the size of the properties. + */ + size_t bsize() const + { assert(MR::Math::Vector::size() >= num_props()); return MR::Math::Vector::size() - num_props(); } + + + //! Returns the number of properties the object has. + size_t num_props() const + { return props->size(); } + + + /*! Checks to see if the (intrinsic) properties match between two fibre objects, i.e. whether they have the same + * property keys. Is used before some mathematical operations + * + * @param props the props to match to + * @return true if fibre object matches the properties exactly. + */ + bool props_match(const std::vector* props) const; + + + /*! Checks to see if the (intrinsic) properties match between the current object and a second fibre object. + * @see props_match(const std::vecor& o) + * + * @param o Second fibre object + * @return true if fibre object matches the properties of the second fibre object exactly. + */ + bool props_match(const Object& o) const + { return props_match(o.props); } + + + /*! Adds a new property to the object. + * Can only be used if the object is not part of a larger object (eg. a set) + * + * @param[in] name Pointer to the property string (NB: comparisons are performed on the pointer itself not its + * contents so must be consitent application wide. It is implemented as a c-string instead of + * an enum so for input/output purposes only) + * @param[in] value The value assigned to the property + */ + void add_prop(const char* const name, double value = NAN); + + + /*! Adds a new property to the object. + * Can only be used if the object is not part of a larger object (eg. a set) + * + * @param[in] name Pointer to the property string (NB: comparisons are performed on the pointer itself not its + * contents so must be consitent application wide. It is implemented as a c-string instead of + * an enum so for input/output purposes only) + */ + bool has_prop(const char* name) const + { for (size_t prop_i = 0; prop_i < num_props(); ++prop_i) { if (name == props->operator[](prop_i)) return true; } return false; } + + + /*! Adds a new property to the object. + * Can only be used if the object is not part of a larger object (eg. a set) + * + * @param[in] name The property name + * @param[in] ignore_missing Set to true if it doesn't matter whether the property is present + */ + void remove_prop(const char* const name, bool ignore_missing = false); + + + //! Removes all properties. + void clear_props(); + + + /*! Copies all properties from the object @arg obj to the current object + * + * @param obj + */ + void copy_all_props(const Object& obj); + + + /*! Returns the index of the given property relative the other properties + * + * @param name + * @return index of property for the given objecct + */ + size_t prop_index(const char* const name) const; + + + /*! Access the property at the given index. + * + * @param index of property + * @return reference of corresponding property + */ + double& prop(size_t index) + { assert(index < num_props()); return MR::Math::Vector::operator[](bsize() + index); } + + + /*! Access the property at the given index for const object. + * + * @param index of property + * @return reference of corresponding property + */ + const double& prop(size_t index) const + { assert(index < num_props()); return MR::Math::Vector::operator[](bsize() + index); } + + + /*! Return the name of the property at the given index + * + * @param index of property + * @return key for the current index + */ + const char* prop_key(size_t index) const + { assert(index < num_props()); return props->operator[](index); } + + + /*! Return a copy of the property names vector + * + * @return a copy of the property names vector + */ + std::vector prop_keys() const + { return *props; } + + + /*! Access the property at the given index. + * + * @param name of property + * @return reference of corresponding property + */ + double& prop(const char* const name) + { return prop(prop_index(name)); } + + + /*! Access the property at the given index for const object + * + * @param name of property + * @return reference of corresponding property + */ + const double& prop(const char* const name) const + { return prop(prop_index(name)); } + + + /*! Sets all values (including intrinsic properties) to the given value. + * + * @param value The double to set all values of the fibre object to + */ + Object& set(double value); + + + /*! Accesses the element at the given index + * + * @param idx the index of the element + * @return The fibre object at the given index + */ + Coord operator[](size_t idx) + { return Coord(sub(idx * 3, (idx+1) * 3)); } + + + /*! Accesses the element at the given index + * + * @param idx the index of the element + * @return The fibre object at the given index + */ + const Coord operator[](size_t idx) const + { return Coord(sub(idx * 3, (idx+1) * 3)); } + + + /*! Accesses the element at the given index (synonym for operator[]) + * + * @param idx the index of the element + * @return The fibre object at the given index + */ + Coord elem(size_t idx) + { return operator[](idx); } + + + /*! Accesses the element at the given index (synonym for operator[] const) + * + * @param idx the index of the element + * @return The fibre object at the given index + */ + const Coord elem(size_t idx) const + { return operator[](idx); } + + + /*! Append another @see Coord to the the fibre object + * + * @param c A coord to set the fibre object base values to. + */ + Object& push_back(const Coord& c); + + + //! Remove all base values from the fibre object (preserves properties) + Object& clear(); + + /*! Remove all base values from the fibre object and reset properties to those provided + * + * @param props New properties to be used for the object + * @return + */ + Object& clear(const std::vector& props); + + //! Sets all values to zero + Object& zero() + { set(0.0); return *this; } + + + //! Sets all values to Not-a-Number (NaN) + Object& invalidate() + { set(NAN); return *this; } + + + /*! Inverts all values in a copy of the fibre object + * + * @return A copy of the fibre object that has been inverted + */ + Object& invert(); + + + /*! Inverts all values in a copy of the fibre object + * + * @return A copy of the fibre object that has been inverted + */ + Object operator-() const + { Object answer (*this); answer.invert(); return answer; } + + + /*! Calculates the square of the 2-norm + * + * @return The squared-2-norm + */ + double norm2() const + { return MR::Math::norm2(*this); } + + /*! Calculates the 2-norm + * + * @return The squared-2-norm + */ + double norm() const + { return MR::Math::sqrt(norm2()); } + + + /*! Calculates the inner_product (dot) between two fibres + * + * @param fibre The fibre object to find the inner product with + * @return The inner product + */ + double inner_product(const Object& fibre) + { assert(props_match(fibre)); return MR::Math::dot(*this,fibre); } + + + /*! Treats the fibre object as a Mx3 matrix and then pre-multiplies it with a 1xM vector to produce a 1X3 triple. + * + * @param row_vector A 1xM vector (where M is the size() of the fibre object + * @return The left product + */ + Coord left_product(const MR::Math::Vector& row_vector) const; + + + BASE_MULT_DIVIDE_FUNCTIONS(Object); + + + BASE_ADD_SUBTRACT_FUNCTIONS(Object); + + + /*! Inserts properties present in the current object into the combined properties map provided + * + * @param props The map into which the properties of the current object will be inserted + * @return A reference to the passed map + */ + std::map& insert_props(std::map& props) const; + + + /*! Inserts property keys present in the current object into the combined property keys vector provided + * + * @param props The other properties to be combined with this objects properties. + * @return The vector containing the combined property keys + */ + std::vector insert_prop_keys(const std::vector& props) const; + + + /*! Extracts properties from combined properties that are present in T::PROPS_LIST provided and set them in + * this object. + * + * @param combined_properties Map containing both properties and extended properties. + * @return A reference to the passed properties + */ + template std::map& + extract_and_set_props(std::map& combined_properties); + + + //! Return a MR::Math::Vector window onto the underlying state vector with properties + MR::Math::Vector vector() + { return MR::Math::Vector(data, vsize(), stride()); } + + + //! Return a MR::Math::Vector window onto the underlying state vector without properties + MR::Math::Vector bvector() + { return sub(0,bsize()); } + + + //! Return a MR::Math::Vector window onto the underlying state vector without properties + const MR::Math::Vector bvector() const + { return sub(0,bsize()); } + + //! Return a MR::Math::Matrix window to the underlying state vector interpreted as a matrix (without properties). + MR::Math::Matrix bmatrix(size_t row_size) + { return MR::Math::Matrix(data, size(), row_size, stride()); } + + //! Return a MR::Math::Matrix window to the underlying state vector interpreted as a matrix (without properties). + const MR::Math::Matrix bmatrix(size_t row_size) const + { return MR::Math::Matrix(data, size(), row_size, stride()); } + + + /*! Resize the number of elements in the fibre object (does not effect the properties). + * More general form is provided here for use in Base::Set + * + * @param size The number of elements in the new fibre object + * @param fill_value The value assigned to the any empty values. + */ + void resize(size_t size, double fill_value = NAN) + { resize(size, 3, fill_value); } + + template friend class Set; + + //! Only included to get template function to work (a strand will never have element properties. + Object& push_back(const Coord& c, bool without_properties) + { return push_back(c); } + + protected: + + /*! Resize the number of elements in the fibre object general form is provided here for use in derived classes + * such as Tractlet and Set classes. + * + * @param size The number of elements in the new fibre object + * @param fill_value The value assigned to the any empty values. + * @param new_row_size The size of the new rows (only applicable if row size if variable). + */ + void resize(size_t size, size_t row_size, double fill_value); + + }; + + + + std::ostream& operator<< (std::ostream& stream, const Object& fibre); + + + template std::map Object::extract_props(std::map& loaded_props) { + + std::map intrinsic; + + // Declare the variables used within the loop + size_t prop_i = 0; + const char* prp_key; + + while ((prp_key = T::PROPS_LIST[prop_i]) != PROPS_LIST_END) { + if (loaded_props.count(prp_key)) { + intrinsic[prp_key] = to(loaded_props[prp_key]); + loaded_props.erase(loaded_props.find(prp_key)); + } + ++prop_i; + } + + return intrinsic; + + } + + + template std::vector Object::extract_props(std::vector& header) { + + std::vector intrinsic; + + // Declare the variables used within the loop + size_t prop_i = 0; + const char* prp_key; + std::vector::iterator prop_it; + + while ((prp_key = T::PROPS_LIST[prop_i]) != PROPS_LIST_END) { + + std::string prp_key_str = str(prp_key); + + prop_it = std::find(header.begin(), header.end(), prp_key_str); + + if (prop_it != header.end()) { + intrinsic.push_back(prp_key); + header.erase(prop_it); + } + ++prop_i; + } + + return intrinsic; + + } + + + template std::vector Object::select_props(const std::vector& properties) { + + std::vector selected; + + // Declare the variables used within the loop + size_t prop_i = 0; + const char* prp_key; + + while ((prp_key = T::PROPS_LIST[prop_i]) != PROPS_LIST_END) { + + if (std::find(properties.begin(), properties.end(), prp_key) != properties.end()) + selected.push_back(prp_key); + + ++prop_i; + } + + return selected; + + } + + + + template void Object::copy_props(T& destination, const Object& source) { + + if (source.num_props()) { + + // Declare the variables used within the loop + size_t prop_i = 0; + const char* prp_key; + + while ((prp_key = T::PROPS_LIST[prop_i]) != PROPS_LIST_END) { + + std::vector::const_iterator prop_it = std::find(source.props->begin(), source.props->end(), prp_key); + + if (prop_it != source.props->end()) { + if (destination.has_prop(prp_key)) + destination.prop(prp_key) = source.prop(prp_key); + else + destination.add_prop(prp_key, source.prop(prp_key)); + } + + ++prop_i; + } + + } + + } + + + template std::map& Object::extract_and_set_props(std::map& combined_properties) { + + std::map props = extract_props(combined_properties); + + for (std::map::iterator prop_it = props.begin(); prop_it != props.end(); ++prop_it) + if (!has_prop(prop_it->first)) + add_prop(prop_it->first, prop_it->second); + else + prop(prop_it->first) = prop_it->second; + + return combined_properties; + + } + + + + inline std::map& Object::insert_props(std::map& properties) const { + + for (uint prop_i = 0; prop_i < num_props(); ++prop_i) + properties[prop_key(prop_i)] = str(prop(prop_i)); + + return properties; + + } + + + } + + } + +} + +#undef LOOP + +#endif /* __bts_fibre_object_h__ */ diff --git a/src/bts/fibre/base/properties_old.h b/src/bts/fibre/base/properties_old.h new file mode 100644 index 0000000..fa8b121 --- /dev/null +++ b/src/bts/fibre/base/properties_old.h @@ -0,0 +1,70 @@ +/* + Copyright 2010 Brain Research Institute/National ICT Australia (NICTA), Melbourne, Australia + + Written by Thomas G Close, 04/06/2010. + + This file is part of Bayesian Tractlet Sampling (BTS). + + BTS is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + BTS is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with BTS. If not, see . + +*/ + +#ifndef __bts_fibre_properties_h__ +#define __bts_fibre_properties_h__ + +#include +#include + + +namespace BTS { + + namespace Fibre { + + + class Properties : public std::map { + + public: + + class Extended; + class Header; + template class Intrinsic_tpl; + class Intrinsic; + + public: + + Properties() {} + + Properties(const std::map& properties) + : std::map(properties) {} + + + Properties(const MR::DWI::Tractography::Properties& mr_properties) + : std::map(mr_properties) {} + + + Properties& operator=(const std::map& properties) + { std::map::operator=(properties); return *this; } + + + ~Properties() {} + + + }; + + + } + +} + +#endif /* __bts_fibre_properties_h__ */ diff --git a/src/bts/fibre/base/reader.cpp.h b/src/bts/fibre/base/reader.cpp.h new file mode 100644 index 0000000..df24494 --- /dev/null +++ b/src/bts/fibre/base/reader.cpp.h @@ -0,0 +1,353 @@ +/* + Copyright 2010 Brain Research Institute, Melbourne, Australia + + Written by Thomas G Close on Jun 3, 2010. + + This file is part of Bayesian Tractlet Sampling (BTS). + + BTS is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + BTS is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with BTS. If not, see . + +*/ + +#ifndef __bts_fibre_base_reader_cpp_h__ +#define __bts_fibre_base_reader_cpp_h__ + +#include "mrtrix.h" +#include "file/key_value.h" + +#include "bts/fibre/base/object.h" + +namespace BTS { + + namespace Fibre { + + namespace Base { + + template const Coord Reader::END_OF_DATA (INFINITY, INFINITY, INFINITY); + + template const std::string Reader::PROP_FILE_PREAMBLE = "%%% Extended Properties File %%% - keys: "; + + + template void Reader::open (const std::string& location) { + + ext_props.clear(); + + MR::File::KeyValue kv (location, "mrtrix tracks"); + std::string data_file; + + while (kv.next()) { + std::string key = MR::lowercase (kv.key()); + if (key == "file") data_file = kv.value(); + else if (key == "datatype") dtype.parse (kv.value()); + else if (key != "roi") ext_props[key] = kv.value(); + } + + if (dtype == MR::DataType::Undefined) throw Exception ("no datatype specified in fibre object file '" + location + "'"); + if (dtype != MR::DataType::Float32LE && dtype != MR::DataType::Float32BE && + dtype != MR::DataType::Float64LE && dtype != MR::DataType::Float64BE) + throw Exception ("only supported datatype for tracks location are Float32LE, Float32BE, Float64LE & Float64BE (in tracks location \"" + location + "\")"); + + if (data_file.empty()) throw Exception ("missing 'file' specification in fibre object file '" + location + "'"); + + std::istringstream locations_stream (data_file); + std::string fname; + locations_stream >> fname; + int64_t offset = 0; + if (locations_stream.good()) { + try { locations_stream >> offset; } + catch (...) { throw Exception ("invalid data offset specified, \"" + fname + "\", in fibre object file '" + location + "'"); } + } + + if (fname != ".") fname = MR::Path::join (MR::Path::dirname (location), fname); + else fname = location; + + in.open (fname.c_str(), std::ios::in | std::ios::binary); + if (!in) throw Exception ("error opening fibre object file \"" + fname + "\": " + strerror(errno)); + in.seekg (offset); + + begin = in.tellg(); + + //------------------------- + // Load element_properties + //-------------------------- + + std::string elem_props_location = location + "x"; + + if (File::is_file(elem_props_location)) { + + prop_in.open(elem_props_location.c_str()); + + prop_hdr = read_props_header(prop_in); + ext_prp_keys = prop_hdr; + prp_keys = Object::extract_props(ext_prp_keys); + + prop_begin = prop_in.tellg(); + + } else { + + prop_hdr.clear(); + prp_keys.clear(); + ext_prp_keys.clear(); + + prop_begin = 0; + + } + + } + + + template void Reader::rewind() { + + in.seekg(begin); + + if (prop_begin) + prop_in.seekg(prop_begin); + + } + + + template bool Reader::next_basic (T& fibre_object) { + + if (!in.good()) + return false; + + Coord first_coord = read_coord(); + + if ((Triple)first_coord == (Triple)END_OF_DATA) + return false; + + read(fibre_object, first_coord); + + return true; + + } + + + template bool Reader::next (T& fibre_object, std::map& properties_row) { + + + fibre_object.clear(prp_keys); + properties_row.clear(); + + if (next_basic(fibre_object)) { + + if (prop_hdr.size()) { + std::string line; + + if (!std::getline(prop_in, line)) + throw Exception ("No corresponding line found in extended properties file."); + + properties_row = parse_props_line(prop_hdr, line); + + fibre_object.extract_and_set_props(properties_row); + + } + + } else + return false; + + return true; + + } + + + template bool Reader::next (T& fibre_object) { + + std::map properties_row; + + return next(fibre_object, properties_row); + + } + + + template Coord Reader::read_coord () { + + if (!in.good()) + throw Exception ("Corrupted fibre object file '" + file_location +"'."); + + Coord t; + + if (dtype == MR::DataType::Float64LE) { + + in.read ((char*) &t[0], sizeof (double)*3); + + t[X] = MR::ByteOrder::LE(t[X]); + t[Y] = MR::ByteOrder::LE(t[Y]); + t[Z] = MR::ByteOrder::LE(t[Z]); + + } else if (dtype == MR::DataType::Float64BE){ + + in.read ((char*) &t[0], sizeof (double)*3); + + t[X] = MR::ByteOrder::BE(t[X]); + t[Y] = MR::ByteOrder::BE(t[Y]); + t[Z] = MR::ByteOrder::BE(t[Z]); + + } else if (dtype == MR::DataType::Float32LE) { + + Triple t_float; + + in.read ((char*) &t_float[0], sizeof(float)*3); + + t[X] = (double)MR::ByteOrder::LE(t_float[X]); + t[Y] = (double)MR::ByteOrder::LE(t_float[Y]); + t[Z] = (double)MR::ByteOrder::LE(t_float[Z]); + + } else if (dtype == MR::DataType::Float32BE){ + + Triple t_float; + + in.read ((char*) &t_float[0], sizeof (float)*3); + + t[X] = (double)MR::ByteOrder::BE(t_float[X]); + t[Y] = (double)MR::ByteOrder::BE(t_float[Y]); + t[Z] = (double)MR::ByteOrder::BE(t_float[Z]); + + } else + throw Exception ("Unsupported dataype '" + str(dtype.specifier()) + "'."); + + return t; + + } + + + template void Reader::read (Coord& t, const Coord& first_t) { + + t = first_t; + + } + + + template template inline void Reader::read (U& fibre_object, const Coord& first_t) { + + Coord first_coord = first_t; + + while ((Triple)first_coord != (Triple)U::FILE_SEPARATOR) { + + typename U::Element elem; + + elem.clear(); + + read(elem, first_coord); + + fibre_object.push_back(elem, false); // Push back ignoring properties. + + first_coord = read_coord(); + + } + + + } + + + template std::map Reader::parse_props_line(const std::vector& header, const std::string& line) { + + std::istringstream line_stream(line); + + std::string value; + std::map prop_row; + + size_t count = 0; + while(std::getline(line_stream, value, '\t')) { + if (count > header.size()) + throw Exception ("More elements found on line (" + str(count) + ") than exist in header (" + str(header.size()) + "). The line was {" + line + "} and the header is " + str(header) + "."); + prop_row[header[count]] = value; + ++count; + } + + return prop_row; + + } + + + + template void Reader::read_props_preamble(std::ifstream& file_in) { + + check_good(file_in); + + char file_intro[PROP_FILE_PREAMBLE.size()+2]; + + file_in.get(file_intro, PROP_FILE_PREAMBLE.size()+1); + + if (strcmp(file_intro, PROP_FILE_PREAMBLE.c_str())) + throw Exception ("Required file intro '" +PROP_FILE_PREAMBLE + "' was not found at start of extended properties file (found '" + std::string(file_intro) +"' instead)."); + + } + + + template std::vector Reader::read_props_header(std::ifstream& file_in) { + + read_props_preamble(file_in); + + check_good(file_in); + + std::vector header; + + std::string key_line; + + if (!std::getline(file_in, key_line)) + throw Exception ("No header found in extended properties file."); + + std::istringstream line_stream(key_line); + + std::string key; + + header.clear(); + + while(std::getline(line_stream, key, '\t')) + header.push_back(key); + + return header; + + } + + + template Coord TextReader::read_coord () { + + Coord coord; + + if (!this->in.good()) + throw Exception ("Corrupted fibre object file '" + this->file_location +"'."); + + std::string next_value; + + for (int dim_i = 0; dim_i < 3; dim_i++) { + + this->in >> next_value; + + if (next_value == "nan") + coord[dim_i] = NAN; + else if (next_value == "inf") + coord[dim_i] = INFINITY; + else if (next_value == "-inf") + coord[dim_i] = -INFINITY; + else if (strspn(next_value.c_str(),"-e0.123456789") == next_value.size()) + coord[dim_i] = to(next_value); + else + dim_i--; //If next_value is not a number empty skip. (this is mainly for the start of the file which has some funny bits). + + } + + return coord; + } + + + + } + + } + +} + +#endif /* __bts_fibre_reader_icpp__ */ diff --git a/src/bts/fibre/base/reader.h b/src/bts/fibre/base/reader.h new file mode 100644 index 0000000..8ee00d2 --- /dev/null +++ b/src/bts/fibre/base/reader.h @@ -0,0 +1,175 @@ +/* + Copyright 2010 Brain Research Institute/National ICT Australia (NICTA), Melbourne, Australia + + Written by Thomas G Close, 5/05/09. + + This file is part of Bayesian Tractlet Sampling (BTS). + + BTS is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + BTS is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with BTS. If not, see . + +*/ + +#ifndef __bts_fibre_base_reader_forward_h__ +#define __bts_fibre_base_reader_forward_h__ + +namespace BTS { + + namespace Fibre { + + namespace Base { + + template class Reader; + + } + + } + +} +#include "data_type.h" +#include "get_set.h" +#include "bts/coord.h" + +#include "bts/common.h" + +#include "bts/file.h" + + +namespace BTS { + + namespace Fibre { + + namespace Base { + + template class Reader { + + public: + + static const Coord END_OF_DATA; + const static std::string PROP_FILE_PREAMBLE; + + public: + + static std::map parse_props_line(const std::vector& header, + const std::string& line); + + static std::vector read_props_header(std::ifstream& line); + + static void read_props_preamble(std::ifstream& file_in); + + static void check_good(std::ifstream& in) + { if (!in.good()) throw Exception ("Could not read from properties file."); } + + + protected: + + std::ifstream in; + MR::DataType dtype; + size_t count; + std::string file_location; + std::map ext_props; + std::vector prop_hdr; + std::vector prp_keys; + std::vector ext_prp_keys; + std::ifstream prop_in; + off64_t prop_begin; + off64_t begin; + + public: + + Reader () {} + + Reader (const std::string& location) + { open(location); } + + virtual ~Reader() + { close(); } + + + bool next(T& fibre); + + bool next(T& fibre, std::map& properties_row); + + void close() + { in.close(); prop_in.close(); } + + void open (const std::string& location); + + //TODO: Refactor to extend_elem_prop_keys() or something + std::vector extend_prop_keys() const + { return ext_prp_keys; } + + + std::vector prop_keys() const + { return prp_keys; } + + + std::map get_extend_props() const + { return ext_props; } + + void rewind(); + + protected: + + std::vector prop_header() const + { return prop_hdr; } + + + bool next_basic(T& fibre); + +#ifdef FAST_READWRITE // Means that Text::Writer will no longer work but avoids a virtual function call here (maybe a bit OTT but an option if you feel like it) + Coord read_coord (); +#else + virtual Coord read_coord (); +#endif + + void read (Coord& coord, const Coord& first_t); + + + template void read (U& fibre_object, const Coord& first_t); + + + }; + + + template class TextReader : public Fibre::Base::Reader { + + //Public static variables, nested classes and typedefs + public: + + TextReader () {} + + TextReader (const std::string& location) + : Fibre::Base::Reader(location) {} + + Coord read_coord (); + + }; + + + } + + } + +} + + + +#include "bts/fibre/base/reader.cpp.h" + +#endif + + + + + diff --git a/src/bts/fibre/base/set.cpp.h b/src/bts/fibre/base/set.cpp.h new file mode 100644 index 0000000..9fccceb --- /dev/null +++ b/src/bts/fibre/base/set.cpp.h @@ -0,0 +1,1935 @@ +/* + Copyright 2010 Brain Research Institute, Melbourne, Australia + + Written by Thomas G Close on Jun 3, 2010. + + This file is part of Bayesian Tractlet Sampling (BTS). + + BTS is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + BTS is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with BTS. If not, see . + +*/ + +#ifndef ___bts_fibre_base_set_cpp_h__ +#define ___bts_fibre_base_set_cpp_h__ + +#include "bts/common.h" + +#include "bts/fibre/base/set.h" +#include "bts/coord.h" + +#include "bts/fibre/base/writer.h" +#include "bts/fibre/base/reader.h" + + +namespace BTS { + + namespace Fibre { + + namespace Base { + + template const char* Set::BASE_INTENSITY_PROP = "base_intensity"; + template const Coord Set::FILE_SEPARATOR = Triple(-INFINITY, NAN, INFINITY); + template const std::string Set::PROPS_FILE_PREAMBLE = "%%% Extended Properties File %%% - keys: "; + template const std::string Set::BUNDLE_INDEX_EPROP = "bundle_index"; + template const std::string Set::NUM_ELEMS_EXT_PROP = "__num_elems__"; + template const std::string Set::ELEM_SIZE_EXT_PROP = "__elem_degree__"; + template const std::string Set::ELEM_VSIZE_EXT_PROP = "__elem_row_size__"; + + + template Set::Set (const Set& set) + : Object(set), + vrows(set.vrows), + rsize(set.rsize), + elem_dgree(set.elem_dgree), + row_ends(set.row_ends ? (size_t*)malloc(sizeof(size_t) * set.size()) : 0), + elem_dgrees(set.elem_dgrees ? (size_t*)malloc(sizeof(size_t) * set.size()) : 0), + elem_props(new std::vector(*set.elem_props)) { + + if (size() && var_elem_degrees()) { + + if (!elem_dgrees) + throw Exception ("Allocation of elem_dgrees (" + str(sizeof(size_t) * size()) + ") failed." ); + + if (!row_ends) + throw Exception ("Allocation of row_ends (" + str(sizeof(size_t) * size()) + ") failed." ); + + memcpy(row_ends,set.row_ends, sizeof(size_t) * size()); + memcpy(elem_dgrees,set.elem_dgrees, sizeof(size_t) * size()); + + } + + ext_props = set.ext_props ? new std::map(*set.ext_props) : 0; + ext_elem_prop_keys = set.ext_elem_prop_keys ? new std::vector(*set.ext_elem_prop_keys) : 0; + ext_elem_prop_defaults = set.ext_elem_prop_defaults ? new std::vector(*set.ext_elem_prop_defaults) : 0; + ext_elem_prop_values = set.ext_elem_prop_values ? new std::vector >(*set.ext_elem_prop_values) : 0; + + } + + + template std::vector Set::extend_prop_keys() const { + + std::vector prp_keys; + + if (ext_props) + for (std::map::iterator prop_it = ext_props->begin(); prop_it != ext_props->end(); ++prop_it) + prp_keys.push_back(prop_it->first); + + return prp_keys; + + } + + + template bool Set::elem_props_match(const std::vector* elem_properties) const { + + bool match; + + if (elem_props == elem_properties) // Point to the same properties + match = true; + else if (!elem_props->size() && !elem_properties->size()) // Both contain no properties + match = true; + else if (num_elem_props() != elem_properties->size()) // Are of different size + match = false; + else // Compare the property pointers (relies on the fact that properties are sorted by order of memory location when they are inserted). + match = !memcmp(&(elem_props->operator[](0)),&(elem_properties->operator[](0)), num_elem_props()); + + return match; + + } + + + + template size_t Set::initial_vsize(size_t size, size_t* elem_degrees, size_t elem_row_size, size_t num_elem_props, size_t num_props) { + + size_t vsize = 0; + + for (size_t i = 0; i < size; ++i) + vsize += elem_degrees[i] * elem_row_size + num_elem_props; + + vsize += num_props; + + return vsize; + + } + + + + template void Set::set_extend_props(const std::map& extended_props) { + + if (ext_props) + delete ext_props; + + ext_props = new std::map(extended_props); + + } + + + template void Set::set_extend_prop(const std::string& prop, const std::string& value) { + + if (!ext_props) + ext_props = new std::map(); + + (*ext_props)[prop] = value; + + } + + + + template Set& Set::operator=(const Set& set) { + + // If owner recreate all structures (if not check to see if all intrinsic properties and sizes are the same. + if (is_owner()) { + + MR::Math::Vector::operator=(set); + + *props = *set.props; + *elem_props = *set.elem_props; + + // Copy across the variable row ends and elem sizes if present + if (set.var_elem_degrees() && set.sze) { + + if (!var_elem_degrees()) { + row_ends = (size_t*)malloc(sizeof(size_t) * set.sze); + elem_dgrees = (size_t*)malloc(sizeof(size_t) * set.sze); + } else { + row_ends = (size_t*)realloc(row_ends,sizeof(size_t) * set.sze); + elem_dgrees = (size_t*)realloc(elem_dgrees,sizeof(size_t) * set.sze); + } + + if (!row_ends) + throw Exception ("Allocation of row_ends (" + str(sizeof(size_t) * set.sze) + ") failed."); + + if (!elem_dgrees) + throw Exception ("Allocation of elem_dgrees (" + str(sizeof(size_t) * set.sze) + ") failed."); + + memcpy(row_ends, set.row_ends, sizeof(size_t) * set.sze); + memcpy(elem_dgrees, set.elem_dgrees, sizeof(size_t) * set.sze); + + } else if (var_elem_degrees() && sze) { + + free(row_ends); + free(elem_dgrees); + row_ends = 0; + elem_dgrees = 0; + + } + + //Now that all the (possibly) variable row sizes componenets are copied across copy the fixed row size components. + sze = set.sze; + vrows = set.vrows; + rsize = set.rsize; + elem_dgree = set.elem_dgree; + + // Copy across the element properties if present + if (set.ext_elem_prop_keys) { + + assert(set.ext_elem_prop_defaults); + assert(set.ext_elem_prop_values); + + if (!ext_elem_prop_keys) { + + assert(!ext_elem_prop_defaults); + assert(!ext_elem_prop_values); + + ext_elem_prop_keys = new std::vector(*set.ext_elem_prop_keys); + ext_elem_prop_defaults = new std::vector(*set.ext_elem_prop_defaults); + ext_elem_prop_values = new std::vector< std::vector >(*set.ext_elem_prop_values); + + } else { + + assert(ext_elem_prop_defaults); + assert(ext_elem_prop_values); + + ext_elem_prop_keys->operator=(*set.ext_elem_prop_keys); + ext_elem_prop_defaults->operator=(*set.ext_elem_prop_defaults); + ext_elem_prop_values->operator=(*set.ext_elem_prop_values); + + } + + } else { + + assert(!set.ext_elem_prop_defaults); + assert(!set.ext_elem_prop_values); + + if (ext_elem_prop_keys) { + + free(ext_elem_prop_keys); + free(ext_elem_prop_defaults); + free(ext_elem_prop_values); + ext_elem_prop_keys = 0; + ext_elem_prop_defaults = 0; + ext_elem_prop_values = 0; + + } + + } + + + //Copy accross the set-wide properties if present + if (set.ext_props) { + if (!ext_props) + ext_props = new std::map(*set.ext_props); + else + *ext_props = *set.ext_props; + + } else if (ext_props) { + free(ext_props); + ext_props = 0; + } + + + + } else { + + // Might consider making these Exceptions instead of assertions, but this function probably should be as fast as possible. + assert(size() == set.size()); // Sizes need to match when fibre object is not owner of data. + assert(props_match(set)); // Properties need to match exactly when fibre object is not owner of data. + assert(rsize == set.rsize); // Row sizes need to be the same (NB: when variable they should both be 0). + assert(elem_dgree == set.elem_dgree); + assert(!var_elem_degrees() || memcmp(row_ends, set.row_ends, size() * sizeof(size_t))); // All row sizes must match for variable row sizes case. + assert(!var_elem_degrees() || memcmp(elem_dgrees, set.elem_dgrees, size() * sizeof(size_t))); // All row sizes must match for variable row sizes case. + assert(var_elem_degrees() == set.var_elem_degrees()); + + const MR::Math::Vector& setvec = set; + + for (size_t i = 0; i < vsize(); ++i) + MR::Math::Vector::operator[](i) = setvec[i]; + + } + + return *this; + + } + + + + template void Set::resize(size_t new_size, double fill_value, size_t new_elem_degree, size_t new_elem_vsize) { + + //FIXME: Needs some restructuring as functionality from Object was moved in here. + + if (!is_owner()) + throw Exception ("Cannot resize fibre object that does not own the underlying data (i.e. is a view onto part of a larger structure)."); + + // Preserve the old size and base size. + size_t old_size = size(); + size_t old_bsize = bsize(); + + //Calculate the the new base size + size_t new_bsize; + + //If new rsize is set (i.e. non-variable row sizes) simply set the bsize to new_size * rsize + if (!var_elem_degrees()) { + + if (new_elem_degree && (new_elem_degree != elem_dgree)) + throw Exception ("The the new element size does not match that of set, and the set elements are not variable (see free_elem_degrees())."); + + if (new_elem_vsize && (new_elem_vsize != rsize)) + throw Exception ("The the new element vsize does not match that of set, and the set elements are not variable (see free_elem_degrees())."); + + new_bsize = new_size * rsize; + + } else { + + //If variable row and the new size is smaller the previous simply take the row end at that index to be the new bsize(). + if (new_size <= size()) + new_bsize = new_size ? row_end(new_size-1) : 0; + + //If variable row and the new size is greater than the previous take the multiple of the new vsize. + else + new_bsize = (size() ? row_end(size()-1) : 0) + (new_size - size()) * new_elem_vsize; + + } + + //Resize the underlying vector + if (new_bsize > old_bsize) { + + //Extend state vector to hold the new base state data + MR::Math::Vector::resize(new_bsize + num_props()); + + //Shift the property values out to their new positions + for (int prop_i = num_props()-1; prop_i >= 0; --prop_i) + MR::Math::Vector::operator[](new_bsize + prop_i) = MR::Math::Vector::operator[](old_bsize + prop_i); + + for (size_t i = old_bsize; i < new_bsize; ++i) + MR::Math::Vector::operator[](i) = fill_value; + + } else if (new_bsize < old_bsize) { + + //Shift the property values in to their new positions + for (size_t prop_i = 0; prop_i < num_props(); ++prop_i) + MR::Math::Vector::operator[](new_bsize + prop_i) = MR::Math::Vector::operator[](old_bsize + prop_i); + + //Resize the underlying vector. + MR::Math::Vector::resize(new_bsize + num_props()); + + } + + + //If variable rows then extend the variable rows and elem sizes variables. + if (var_elem_degrees()) { + + if (new_size) { + + if (row_ends) + row_ends = (size_t*)realloc(row_ends, sizeof(size_t) * new_size); + else + row_ends = (size_t*)malloc(sizeof(size_t) * new_size); + + if (!row_ends) + throw Exception ("Failed to allocate array for row_ends (" + str(sizeof(size_t) * new_size) + " bytes requested)."); + + if (elem_dgrees) + elem_dgrees = (size_t*)realloc(elem_dgrees, sizeof(size_t) * new_size); + else + elem_dgrees = (size_t*)malloc(sizeof(size_t) * new_size); + + if (!elem_dgrees) + throw Exception ("Failed to allocate array for elem_dgrees (" + str(sizeof(size_t) * new_size) + " bytes requested)."); + + + size_t row_start = old_bsize; + for (size_t row_i = old_size; row_i < new_size; ++row_i) + row_ends[row_i] = row_start = row_start + new_elem_vsize; + + //If new_size > old_size, fill with the new elem sizes + for (size_t row_i = old_size; row_i < new_size; ++row_i) + elem_dgrees[row_i] = new_elem_degree; + + } else { + + if (row_ends) { + assert(elem_dgrees); + + free(row_ends); + free(elem_dgrees); + elem_dgrees = 0; + row_ends = 0; + } + } + + } + + //Update the size of the set + sze = new_size; + + //Extend the element properties. + if (num_extend_elem_props()) { + + for (size_t key_i = 0; key_i < num_extend_elem_props(); ++key_i) + ext_elem_prop_values->operator[](key_i).resize(new_size, ext_elem_prop_defaults->operator[](key_i)); + + } + + } + + + + template T Set::push_back(const T& elem) { + + rand_double(); + + if (!elem.props_match(elem_props)) + throw Exception ("Element properties (" + str(elem.prop_keys()) + ") do not match that of set " + str(elem_props) + "."); + + if (rsize && (elem.vsize() != rsize)) + throw Exception ("vize() of element (" + str(elem.vsize()) + ") does not match that of the other elements in set (" + str(rsize) + "). Call 'free_elem_degree()' on set if this is intentional."); + + resize(size() + 1, NAN, elem.degree(), elem.vsize()); + + T new_elem = operator[](size()-1); + + new_elem = elem; + + return new_elem; + + } + + + template T Set::push_back(const T& elem, bool with_props) { + + if (with_props) + return push_back(elem); + + else { + + if (!var_elem_degrees() && (elem.bsize() != (rsize - num_elem_props()))) + throw Exception ("bize() of element (" + str(elem.bsize()) + ") does not match that of the other elements in set (" + str(rsize - num_elem_props()) + "). Call 'free_elem_degree()' on set if this is intentional."); + + resize(size() + 1, NAN, elem.degree(), elem.bsize() + num_elem_props()); + + T set_elem = operator[](size()-1); + + //Only set base vector part of element (the part without properties). + set_elem.sub(0, elem.bsize()) = elem.bvector(); + + return set_elem; + } + + } + + + template Set& Set::clear() { + + Object::clear(); + + if (row_ends) { + free(row_ends); + row_ends = 0; + } + + if (elem_dgrees) { + free(elem_dgrees); + elem_dgrees = 0; + } + + if (ext_props) { + delete ext_props; + ext_props = 0; + } + if (ext_elem_prop_keys) { + delete ext_elem_prop_keys; + delete ext_elem_prop_defaults; + delete ext_elem_prop_values; + ext_elem_prop_keys = 0; + ext_elem_prop_defaults = 0; + ext_elem_prop_values = 0; + } + + return *this; + } + + + template Set& Set::clear(const std::vector& properties, + const std::vector& elem_properties) { + + + if (!Object::props_match(&properties)) { + + clear_props(); + for (size_t prop_i = 0; prop_i < properties.size(); ++prop_i) + add_prop(properties[prop_i]); + + } + + if (!elem_props_match(&elem_properties)) { + + clear_elem_props(); + for (size_t prop_i = 0; prop_i < elem_properties.size(); ++prop_i) + add_elem_prop(properties[prop_i]); + + } + + return *this; + + } + + + template std::vector Set::extend_elem_prop_keys() const { + + std::vector header; + + if (ext_elem_prop_keys) + header = *ext_elem_prop_keys; + else + header = std::vector(); + + std::sort(header.begin(),header.end()); + + return header; + + } + + + template std::vector Set::elem_prop_keys() const { + + std::vector header = *elem_props; + + std::sort(header.begin(),header.end(), cstr_sort); + + return header; + + } + + + template template void Set::copy_extend_elem_props(const Set& set) { + + if (set.size() != this->size()) + throw Exception ("Size of set (" + str(this->size()) + ") does not match size of source set (" + str(set.size()) + ") for properties copy."); + + clear_extend_elem_props(); + append_extend_elem_props(set); + + } + + + template template void Set::append_extend_elem_props(const Set& set) { + + if (set.size() != this->size()) + throw Exception ("Size of set (" + str(this->size()) + ") does not match size of source set (" + str(set.size()) + ") for properties append."); + + if (set.ext_elem_prop_keys) { + + assert(set.ext_elem_prop_defaults); + assert(set.ext_elem_prop_values); + + if (!ext_elem_prop_keys) { + + ext_elem_prop_keys = new std::vector(*set.ext_elem_prop_keys); + ext_elem_prop_defaults = new std::vector(*set.ext_elem_prop_defaults); + ext_elem_prop_values = new std::vector< std::vector >(*set.ext_elem_prop_values); + + } else { + + assert(ext_elem_prop_defaults); + assert(ext_elem_prop_values); + + for (size_t prop_i = 0; prop_i < set.ext_elem_prop_keys->size(); ++prop_i) { + + std::string& key = set.ext_elem_prop_keys->operator[](prop_i); + + if (!has_extend_elem_prop(key)) + add_extend_elem_prop(key, set.ext_elem_prop_defaults->operator[](prop_i)); + + for (size_t row_i = 0; row_i < size(); ++row_i) + set_extend_elem_prop(key, set.ext_elem_prop_values->operator[](prop_i)[row_i], row_i); + + } + + } + + } else if (ext_elem_prop_keys) { + + assert(!set.ext_elem_prop_defaults); + assert(!set.ext_elem_prop_values); + assert(ext_elem_prop_defaults); + assert(ext_elem_prop_values); + + free(ext_elem_prop_keys); + free(ext_elem_prop_defaults); + free(ext_elem_prop_values); + ext_elem_prop_keys = 0; + ext_elem_prop_defaults = 0; + ext_elem_prop_values = 0; + + } + + } + + + template std::vector& Set::insert_elem_prop_keys(std::vector& header) const { + + for (uint prop_i = 0; prop_i < num_elem_props(); ++prop_i) + header.push_back(elem_prop_key(prop_i)); + + return header; + + } + + + template Set& Set::select(Set& new_set, std::vector& indices) const { + + if (!new_set.is_owner()) + throw Exception ("Cannot select fibres into provided set as it is only a view onto a larger object."); + + new_set.reset(*props,*elem_props); + + new_set.add_extend_elem_props(*this); + + for (size_t i = 0; i < indices.size(); i++) { + + if (indices[i] >= this->size()) + throw Exception ("Supplied index, " + str(indices[i]) + ", is out of range."); + + std::map props_row = get_extend_elem_prop_row(indices[i]); + + T new_elem; + + new_elem = operator[](indices[i]); + + new_set.push_back(new_elem, props_row); + + } + + // Freeze element sizes if frozen in this set. + if (!var_elem_degrees()) + new_set.freeze_elem_degree(); + + return new_set; + + } + + + template void Set::load (const std::string& location) { + + if (File::has_extension(location, File::TXT_FILE_EXTENSTION)) { + + typename T::TextReader reader; + load_tpl(location, reader); + + } else { + + typename T::Reader reader; + load_tpl(location, reader); + + } + + + } + + + template void Set::clear_extend_elem_props() { + + if (ext_elem_prop_keys) { delete ext_elem_prop_keys; ext_elem_prop_keys = 0; } + if (ext_elem_prop_defaults) { delete ext_elem_prop_defaults; ext_elem_prop_defaults = 0; } + if (ext_elem_prop_values) { delete ext_elem_prop_values; ext_elem_prop_values = 0; } + + } + + + template template void Set::load_tpl (const std::string& location, V& reader) { + + if (!is_owner()) + throw Exception ("Cannot load a fibre set that does not own the underlying data (i.e. is a view onto part of a larger structure)."); + + reader.open (location); + + //Separate out the intrinsic and extended properties read from the file header + std::map loaded_extend_props = reader.get_extend_props(); + std::map loaded_props = extract_props(loaded_extend_props); + + // Extract just the keys for the set properties + std::vector loaded_prop_keys; + for (std::map::iterator prop_it = loaded_props.begin(); prop_it != loaded_props.end(); ++prop_it) + loaded_prop_keys.push_back(prop_it->first); + + //Separate out the intrinsic and extended properties read from the element properties file header + std::vector extended_elem_prop_header = reader.extend_prop_keys(); + std::vector loaded_elem_prop_keys = reader.prop_keys(); + + // If the number of elements and their sizes have been stored in the file header use them to initialise the set. + if (loaded_extend_props.count(NUM_ELEMS_EXT_PROP) && loaded_extend_props.count(ELEM_SIZE_EXT_PROP) + && loaded_extend_props.count(ELEM_VSIZE_EXT_PROP)) + reset(to(loaded_extend_props[NUM_ELEMS_EXT_PROP]), + to(loaded_extend_props[ELEM_SIZE_EXT_PROP]), + to(loaded_extend_props[ELEM_VSIZE_EXT_PROP]), + loaded_prop_keys, + loaded_elem_prop_keys); + + // Else reset the set to a variable row size set. + else + reset(loaded_prop_keys, + loaded_elem_prop_keys); + + + for (std::map::iterator prop_it = loaded_props.begin(); prop_it != loaded_props.end(); ++prop_it) + prop(prop_it->first) = prop_it->second; + + + //Add the extended properties to the set + for (std::vector::iterator prop_it = extended_elem_prop_header.begin(); prop_it != extended_elem_prop_header.end(); ++prop_it) + add_extend_elem_prop(*prop_it, ""); + + //Loop through the reader and append the loaded elements. + T elem; + std::map properties_row; + size_t count = 0; + + while (reader.next(elem, properties_row)) { + + if (elem.degree() == 0) { + std::cout << std::endl << "WARNING!! Omitting element " << count << " as it's size is 0." << std::endl; + continue; + } + + // If the next element does not fit the fixed element size loaded from the header, remove the remaining unfilled + // elements and free the element size for the set. + if (!var_elem_degrees() && (elem.degree() != elem_degree())) { + resize(count); + free_elem_degree(); + } + + + //If estimated size is smaller than actual size append a new element to the end + if (count >= size()) + push_back(elem, properties_row); + + //Otherwise just set the already initialised element. + else { + operator[](count) = elem; + set_extend_elem_prop_row(properties_row, count); + } + + ++count; + + } + + if (!size()) + std::cout << "WARNING!! No elements loaded from file '" << location << "'."; + + //If estimated size is larger than actual size, resize the set to match the actual size. + if (size() > count) + resize(count); + + // Attempt to freeze the row sizes for the loaded set, ignoring failure. + freeze_elem_degree(true); + + } + + + template void Set::save (const std::string& location) const { + + if (File::has_extension(location, File::TXT_FILE_EXTENSTION)) { + + typename T::TextWriter writer; + save_tpl(location, writer); + + } else { + + typename T::Writer writer; + save_tpl(location, writer); + + } + + + } + + + template template void Set::save_tpl (const std::string& location, V& writer) const { + + //Copy set properties and append intrinsic properties to them. + std::map properties; + + if (ext_props) + properties = *ext_props; + + //Insert the properties for the set into the header along with the extended properties + insert_props(properties); + + //Copy element properties and append intrinsic properties to them. + std::vector elem_prop_header; + + if (ext_elem_prop_keys) + elem_prop_header = *ext_elem_prop_keys; + + writer.create (location, *elem_props, elem_prop_header, properties); + + for (size_t elem_i = 0; elem_i < size(); elem_i++) + writer.append(operator[](elem_i), get_extend_elem_prop_row(elem_i)); + + + } + + + template Set& Set::permute(Set& permuted_set, const std::vector& indices) const { + + if (indices.size() != this->size()) + throw Exception ("Size of indices (" + str(indices.size()) + ") does not match size of set (" + str(this->size()) + ")."); + + if (permuted_set.size() != this->size()) + throw Exception ("Size of output set (" + str(permuted_set.size()) + ") does not match size of set (" + str(this->size()) + ")."); + +#ifndef NDEBUG + std::vector unique_indices (indices); + + std::unique(unique_indices.begin(), unique_indices.end()); + + if (unique_indices.size() != indices.size()) + throw Exception ("Indices provided to Fibre::Base::Set::permute() are not unique"); +#endif + + //To avoid a bug if *this is the same as permuted_set; + Set this_copy(*this); + + for (size_t indices_i = 0; indices_i < indices.size(); indices_i++) { + permuted_set[indices[indices_i]] = this_copy[indices_i]; + } + + return permuted_set; + + } + + + template double Set::distance(const Set& reference, std::vector& matched_indices, BTS::Math::Munkres&munkres_algorithm, MR::Math::Matrix& similarity, double strands_per_acs, bool add_extra) const { + + + if (reference.size() < this->size()) + throw Exception( "Size of reference Strand::Set (" + str (reference.size()) + ") must be greater than or equal to that of the Strand::Set of interest (" + str(this->size()) + ")."); + + matched_indices.resize(this->size()); + + this->similarity_matrix(reference, similarity, strands_per_acs); + + munkres_algorithm.match(similarity, matched_indices); + + double dist = 0.0; + + for (size_t fibre_i = 0; fibre_i < this->size(); fibre_i++) { + + dist += this->operator[](fibre_i).distance(reference[matched_indices[fibre_i]], strands_per_acs); + // dist += similarity_matrix(fibre_i, matched_indices[fibre_i]); + + } + + if (add_extra) + for (size_t ref_i = 0; ref_i < reference.size(); ++ref_i) + //FIXME: This should not include the displacement terms only the terms that contribute to its length. + if (std::find(matched_indices.begin(), matched_indices.end(), ref_i) == matched_indices.end()) + dist += MR::Math::sqrt(reference[ref_i].norm2()); + + + return dist; + + + } + + + template double Set::distance(const Set& reference, double strands_per_acs, bool add_extra) const { + + std::vector matched_indices(size()); + + return distance(reference, matched_indices, strands_per_acs, add_extra); + + } + + + template double Set::distance(const Set& reference, std::vector& matched_indices, double strands_per_acs, bool add_extra) const { + + BTS::Math::Munkres munkres_algorithm(this->size(), reference.size()); + MR::Math::Matrix similarity(this->size(),reference.size()); + + return distance(reference, matched_indices, munkres_algorithm, similarity, strands_per_acs, add_extra); + + } + + + template void Set::similarity_matrix(const Set& reference, + MR::Math::Matrix& similarity, + double strands_per_acs) const { + + if ((similarity.rows() != size()) || (similarity.columns() != reference.size())) + throw Exception ("Dimensions of similarity matrix, " + str(similarity.rows()) + " X " + str(similarity.columns()) + " do not match Strand::Sets, " + str(size()) + ", " + str(reference.size()) + "."); + + for (size_t this_i = 0; this_i < size(); this_i++) { + for (size_t reference_i = 0; reference_i < reference.size(); reference_i++) + similarity(this_i, reference_i) = operator[](this_i).distance(reference[reference_i], strands_per_acs); + } + + } + + + template Set& Set::smallest_distance_set(const Set& reference, Set& smallest) const { + + if (size() != reference.size()) + throw Exception ("Size of set (" + str(size()) + ") does not match that of reference set (" + str(reference.size()) + ")."); + + std::vector matched_indices(size()); + + distance(reference, matched_indices); + + smallest = *this; + + smallest.permute(smallest, matched_indices); + + for (size_t fibre_i = 0; fibre_i < smallest.size(); ++fibre_i) + smallest[fibre_i] = smallest[fibre_i].smallest_distance_set(reference[fibre_i]); + + return smallest; + + } + + + template void Set::reset_bundle_indices() { + + if (!has_extend_elem_prop(BUNDLE_INDEX_EPROP)) + add_extend_elem_prop(BUNDLE_INDEX_EPROP, "-1"); + + for (size_t elem_i = 0; elem_i < size(); ++elem_i) + set_extend_elem_prop(BUNDLE_INDEX_EPROP, str(elem_i), elem_i); + + } + + + template void Set::add_extend_elem_prop(const std::string& key, const std::string& default_value) { + + this->init_extend_elem_props(); + + //If key is not already present. + if (!has_extend_elem_prop(key)) { + + ext_elem_prop_keys->push_back(key); + ext_elem_prop_defaults->push_back(default_value); + + ext_elem_prop_values->push_back ( std::vector(size(), default_value) ); + + } else + ext_elem_prop_defaults->operator[](key_index(key)) = default_value; + + } + + + template template void Set::add_extend_elem_props(const Set& set) { + + //If set has extended properties + if (set.ext_elem_prop_keys) { + + for (size_t key_i = 0; key_i < set.ext_elem_prop_keys->size(); key_i++) + add_extend_elem_prop(set.ext_elem_prop_keys->operator[](key_i), set.ext_elem_prop_defaults->operator[](key_i)); + } + + } + + + template void Set::remove_extend_elem_prop(const std::string& key) { + + + if (has_extend_elem_prop(key)) { + + size_t index = key_index(key); + + ext_elem_prop_keys->erase(ext_elem_prop_keys->begin() + index); + ext_elem_prop_defaults->erase(ext_elem_prop_defaults->begin() + index); + ext_elem_prop_values->erase(ext_elem_prop_values->begin() + index); + + + } + + } + + + template void Set::set_extend_elem_prop(std::string key, std::string value, size_t elem_index) { + + if (elem_index >= size()) + throw Exception ("Element index (" + str(elem_index) + ") is out of range."); + + size_t key_i = key_index(key); + + ext_elem_prop_values->operator[](key_i)[elem_index] = value; + + + } + + + template std::string Set::get_extend_elem_prop(std::string key, size_t elem_index) const { + + + if (elem_index >= size()) + throw Exception ("Element index (" + str(elem_index) + ") is out of range."); + + size_t key_i = key_index(key); + + //Can't use operator[] for key_index since 'this' is const. NB: Key is guaranteed to exist in 'key_index' from the 'check_key()' function. + std::string value = ext_elem_prop_values->operator[](key_i)[elem_index]; + + return value; + + } + + + template bool Set::has_extend_elem_prop(const std::string& key) const { + + bool found = false; + + if (ext_elem_prop_keys) { + for (size_t key_i = 0; key_i < ext_elem_prop_keys->size(); ++key_i) + if (ext_elem_prop_keys->operator[](key_i) == key) { + found = true; + break; + } + } + + return found; + + } + + + template std::map Set::get_extend_elem_prop_row(size_t elem_index) const { + + if (elem_index >= size()) + throw Exception ("Element index (" + str(elem_index) + ") is out of range."); + + std::map row; + + if (ext_elem_prop_keys) + for (size_t key_i = 0; key_i < ext_elem_prop_values->size(); ++key_i) + row[ext_elem_prop_keys->operator[](key_i)] = ext_elem_prop_values->operator[](key_i)[elem_index]; + + return row; + + } + + + template void Set::set_extend_elem_prop_row(const std::map& properties, size_t row_index, bool ignore_missing) { + + if (ext_elem_prop_keys) { + + std::vector row(ext_elem_prop_keys->size()); + + for (size_t key_i = 0; key_i < ext_elem_prop_keys->size(); key_i++) { + + std::map::const_iterator key_it = properties.find(ext_elem_prop_keys->operator[](key_i)); + + std::string value; + + if (key_it == properties.end()) { + if (ignore_missing) + value = ext_elem_prop_defaults->operator[](key_i); + else + throw Exception ("Property '" + ext_elem_prop_keys->operator[](key_i) + "' not found in added properties row."); + + } else + value = key_it->second; + + //Can't use operator[] for properties since it is constant. + this->ext_elem_prop_values->operator[](key_i)[row_index] = value; + + } + + } + + } + + +// template template void Set::copy_extend_elem_props(const Set& set) { +// +// clear_extend_elem_props(); +// +// append_extend_elem_props(set); +// +// } +// +// +// template template void Set::append_extend_elem_props(const Set& set) { +// +// add_extend_elem_props(set); +// +// for (size_t elem_i = 0; elem_i < size(); ++elem_i) +// copy_extend_elem_prop_row(set,elem_i); +// +// } + + + + template void Set::resize(size_t new_size, const T& elem) { + + assert(elem.props_match(elem_props)); + + size_t old_size = size(); + + resize(new_size, NAN, elem.degree(), elem.vsize()); + + for (size_t elem_i = old_size; elem_i < new_size; ++elem_i) + operator[](elem_i) = elem; + + } + + + template void Set::reset(size_t num_elems, + size_t elem_degree, + size_t elem_vsize, + const std::vector& properties, + const std::vector& elem_properties, + double fill_value) { + + if (!owner) + throw Exception ("Cannot reset set as it is part of a larger object."); + + Object::reset(num_elems, elem_vsize, properties, fill_value); + + elem_dgree = elem_degree; + rsize = elem_vsize; + vrows = false; + + if (row_ends) { + free(row_ends); + row_ends = 0; + } + + if (elem_dgrees) { + free(elem_dgrees); + elem_dgrees = 0; + } + + *elem_props = elem_properties; + + if (ext_props) { + free(ext_props); + ext_props = 0; + } + + if (ext_elem_prop_keys) { + delete ext_elem_prop_keys; + delete ext_elem_prop_defaults; + delete ext_elem_prop_values; + ext_elem_prop_keys = 0; + ext_elem_prop_defaults = 0; + ext_elem_prop_values = 0; + } + + } + + + template void Set::reset(const std::vector& properties, + const std::vector& elem_properties, + double fill_value) { + + if (!owner) + throw Exception ("Cannot reset set as it is part of a larger object."); + + Object::reset(properties, fill_value); + + free_elem_degree(); + + *elem_props = elem_properties; + + if (ext_props) { + free(ext_props); + ext_props = 0; + } + + if (ext_elem_prop_keys) { + delete ext_elem_prop_keys; + delete ext_elem_prop_defaults; + delete ext_elem_prop_values; + ext_elem_prop_keys = 0; + ext_elem_prop_defaults = 0; + ext_elem_prop_values = 0; + } + + } + + + + + + template void Set::erase(size_t index) { + + if (!is_owner()) + throw Exception ("Cannot erase element from fibre object that does not own the underlying data (i.e. is a view onto part of a larger structure)."); + + if (index > sze) + throw Exception ("Index (" + str(index) + ") out of range (" + str(size()) + ")."); + + //Calculate the new base size without the row that is to be erased. + size_t new_bsize = bsize() - row_size(index); + + //Shift the base data into its new positions + for (size_t i = row_start(index); i < new_bsize; ++i) + MR::Math::Vector::operator[](i) = MR::Math::Vector::operator[](i + row_size(index)); + + //Shift the property values in to their new positions + for (size_t prop_i = 0; prop_i < num_props(); ++prop_i) + MR::Math::Vector::operator[](new_bsize + prop_i) = MR::Math::Vector::operator[](bsize() + prop_i); + + //Resize the underlying vector. + MR::Math::Vector::resize(new_bsize + num_props()); + + //deincrement the size. + --sze; + + //If variable row sizes remove the entry for the erased row. + if (var_elem_degrees()) { + + for (size_t i = index; i < size(); ++i) + row_ends[i] = row_start(i) + row_size(i+1); + + if (size()) { + row_ends = (size_t*)realloc(row_ends, sizeof(size_t) * size()); + + if (!row_ends) + throw Exception ("Failed to allocate size (" + str(sizeof(size_t) * size()) + ") for row_ends array."); + + for (size_t i = index; i < size(); ++i) + elem_dgrees[i] = elem_dgrees[i+1]; + + elem_dgrees = (size_t*)realloc(elem_dgrees, sizeof(size_t) * size()); + + if (!elem_dgrees) + throw Exception ("Failed to allocate array for elem_dgrees (" + str(sizeof(size_t) * size()) + " bytes requested)."); + + } else { + free(row_ends); + free(elem_dgrees); + row_ends = 0; + elem_dgrees = 0; + } + } + + //Extended properties are present also remove the corresponding row. + if (num_extend_elem_props()) { + + for (size_t key_i = 0; key_i < num_extend_elem_props(); ++key_i) { + std::vector& value_row = ext_elem_prop_values->operator[](key_i); + value_row.erase(value_row.begin() + index); + } + + } + + } + + + template T Set::insert(const T& element, size_t index) { + + if (!is_owner()) + throw Exception ("Cannot erase element from fibre object that does not own the underlying data (i.e. is a view onto part of a larger structure)."); + + if (index > sze) + throw Exception ("Index (" + str(index) + ") out of range (" + str(size()) + ")."); + + if (!element.props_match(elem_props)) + throw Exception ("Element properties do not match that of set."); + + if (elem_dgree && elem_dgree != element.degree()) + throw Exception ("Element size does not match remainder of set (NB: Use Set::free_elem_degree() function first if this is intentional)."); + + size_t old_bsize = bsize(); + + //Calculate the new base size without the row that is to be erased. + size_t new_bsize = bsize() + element.vsize(); + + //Resize the underlying vector. + MR::Math::Vector::resize(new_bsize + num_props()); + + //Shift the property values out to their new positions + for (int prop_i = num_props()-1; prop_i >= 0; --prop_i) + MR::Math::Vector::operator[](new_bsize + prop_i) = MR::Math::Vector::operator[](old_bsize + prop_i); + + //Shift the base data into its new positions + for (int i = old_bsize-1; i >= (int)row_start(index); --i) + MR::Math::Vector::operator[](i + element.vsize()) = MR::Math::Vector::operator[](i); + + //Increment the size. + ++sze; + + //If variable row sizes remove the entry for the erased row. + if (var_elem_degrees()) { + + if (size()) { + if (row_ends) + row_ends = (size_t*)realloc(row_ends, sizeof(size_t) * size()); + else + row_ends = (size_t*)malloc(sizeof(size_t) * size()); + + if (!row_ends) + throw Exception ("Failed to allocate size (" + str(sizeof(size_t) * size()) + ") for row_ends array."); + + for (int i = (int)size()-1; i >= (int)index; --i) + row_ends[i] = element.vsize() + (i ? row_ends[i-1] : 0); + + + if (elem_dgrees) + elem_dgrees = (size_t*)realloc(elem_dgrees, sizeof(size_t) * size()); + else + elem_dgrees = (size_t*)malloc(sizeof(size_t) * size()); + + if (!elem_dgrees) + throw Exception ("Failed to allocate array for elem_dgrees (" + str(sizeof(size_t) * size()) + " bytes requested)."); + + for (int i = (int)size()-1; i > (int)index; --i) + elem_dgrees[i] = elem_dgrees[i-1]; + + } else { + + if (row_ends) { + free(row_ends); + row_ends = 0; + } + + if (elem_dgrees) { + free(elem_dgrees); + elem_dgrees = 0; + } + + } + elem_dgrees[index] = element.degree(); + + } + + //If extended properties are present, populate the corresponding row, with the default. + if (num_extend_elem_props()) { + + for (size_t key_i = 0; key_i < num_extend_elem_props(); ++key_i) { + std::vector& value_row = ext_elem_prop_values->operator[](key_i); + value_row.insert(value_row.begin() + index, ext_elem_prop_defaults->operator[](key_i)); + } + + } + + //Finally assign the element to the space created for it. + operator[](index) = element; + + return operator[](index); + + } + + + template size_t Set::key_index (const std::string& key) const { + + if (!ext_elem_prop_keys) + throw Exception ("Property '" + key + "' was not found (set has no extended properties)."); + + size_t key_i; + + for (key_i = 0; key_i < ext_elem_prop_keys->size(); ++key_i) + if (ext_elem_prop_keys->operator[](key_i) == key) + return key_i; + + throw Exception ("Property '" + key + "' was not found."); + + } + + + template void Set::init_extend_elem_props() { + + if (!ext_elem_prop_keys) { + + assert(!ext_elem_prop_defaults); + assert(!ext_elem_prop_values); + + ext_elem_prop_keys = new std::vector(); + ext_elem_prop_defaults = new std::vector(); + ext_elem_prop_values = new std::vector >(); + + } + + } + + + template std::ostream& operator<< (std::ostream& stream, const Set& set) { + + for (size_t prop_i = 0; prop_i < set.num_props(); ++prop_i) + stream << set.prop_key(prop_i) << ": " << set.prop(prop_i) << std::endl; + + for (size_t elem_i = 0; elem_i < set.size(); elem_i++) { + + stream << std::endl; + stream << "--------------------" << std::endl; + stream << " " << elem_i << std::endl; + stream << "--------------------" << std::endl; + + + + std::vector header = set.extend_elem_prop_keys(); + + if (set.num_extend_elem_props()) + stream << "{"; + + for (size_t prop_i = 0; prop_i < header.size(); prop_i++) { + stream << header[prop_i] << ": " << set.get_extend_elem_prop(header[prop_i], elem_i); + + if (prop_i != header.size()-1) + stream << ", "; + } + + if (set.num_extend_elem_props()) + stream << "}" << std::endl; + + stream << set[elem_i]; + + stream << std::endl; + + } + + return (stream); + } + + + template void Set::add_elem_prop(const char* const name, double value, bool ignore_present) { + + + if (!is_owner()) + throw Exception ("Cannot add element property to a fibre object that does not own the underlying data (i.e. is a view onto part of a larger structure)."); + + //Loop through properties and insert the new property in the appropriate position for alphabetical order + size_t insert_index = 0; + + for (std::vector::iterator prop_it = elem_props->begin(); prop_it != elem_props->end(); ++prop_it) { + + int compare = strcmp(name, *prop_it); + + //If property is already present. + if (!compare) { + + //If not 'ignore_present' throw and exception + if (!ignore_present) + throw Exception ("Element property with the same name ('" + str(name) + "') already exists in fibre object"); + + //Otherwise if value was supplied set the property to that value, and then return. + if (!isnan(value)) + for (size_t elem_i = 0; elem_i < size(); ++elem_i) + operator[](elem_i).prop(insert_index) = value; + return; + } + + // If new property name comes before current property in alphabetical order, insert it and break loop + if (compare < 0) { + elem_props->insert(prop_it,name); + break; + } + + ++insert_index; + + } + + //If the property wasn't inserted within the existing properties append it to the end of the list + if (insert_index == elem_props->size()) + elem_props->push_back(name); //Add pointer to property name to properties list + + //Increment state vector to hold new property + MR::Math::Vector::resize(vsize() + size()); + + //Move the set properties to their new location + for (int prop_i = num_props()-1; prop_i >=0; --prop_i) + MR::Math::Vector::operator[](bsize() + prop_i) = MR::Math::Vector::operator[](bsize() + prop_i - size()); + + //Adjust the row size to account for the added property + ++rsize; + + //The offset that accounts for the accumulated increase in row size over the whole set due to the added property + //per row. + size_t accum_offset = size(); + + for (int elem_i = size()-1; elem_i >=0; --elem_i) + for (int elem_elem_i = rsize-1; elem_elem_i >= 0; --elem_elem_i) + + if ((size_t)elem_elem_i == insert_index + rsize - elem_props->size()) { + MR::Math::Vector::operator[](elem_i * rsize + elem_elem_i) = value; + --accum_offset; + } else + MR::Math::Vector::operator[](elem_i * rsize + elem_elem_i) = MR::Math::Vector::operator[](elem_i * rsize + elem_elem_i - accum_offset); + + } + + + template void Set::remove_elem_prop(const char* const name, bool ignore_missing) { + + if (!is_owner()) + throw Exception ("Cannot remove element property from a fibre object that does not own the underlying data (i.e. is a view onto part of a larger structure)."); + + //Find iterator to property that matches given property name. + std::vector::iterator prop_it = elem_props->begin(); + + for (; prop_it != elem_props->end(); ++prop_it) + if (name == *prop_it) + break; + + if (prop_it != elem_props->end()) { + + size_t remove_index = prop_it - elem_props->begin(); + + // Remove property from list + elem_props->erase(prop_it); + + //Adjust the row size(s) to account for the removed property + if (var_elem_degrees()) { + for (size_t row_i = 0; row_i < size(); ++row_i) + row_ends[row_i] -= row_i+1; + } else + --rsize; + + + //The offset that accounts for the accumulated increase in row size over the whole set due to the added property + //per row. + size_t accum_offset = 0; + + for (size_t elem_i = 0; elem_i < size(); ++elem_i) { + for (size_t elem_elem_i = 0; elem_elem_i < row_size(elem_i); ++elem_elem_i) { + + //When the elem_elem_i index passes the index of the removed property, increment the accumulated offset + if (elem_elem_i == remove_index + row_size(elem_i) - num_elem_props()) + ++accum_offset; + + MR::Math::Vector::operator[](row_start(elem_i) + elem_elem_i) = MR::Math::Vector::operator[](row_start(elem_i) + elem_elem_i + accum_offset); + + } + + //If the property is the last in the list the accumulated offset is not incremented in the above loop and needs + // to be done here. + if (remove_index == num_elem_props()) + ++accum_offset; + + } + + //Move the set properties to their new location + for (size_t prop_i = 0; prop_i < num_props(); ++prop_i) + MR::Math::Vector::operator[](bsize() + prop_i - size()) = MR::Math::Vector::operator[](bsize() + prop_i); + + + // Resize state vector + MR::Math::Vector::resize(vsize() - size()); + + } else if (!ignore_missing) + throw Exception ("Fibre object does not have element property '" + str(name) + "' (use 'ignore_missing' parameter to ignore)."); + + + } + + + template void Set::clear_elem_props() { + + if (!is_owner()) + throw Exception ("Cannot clear properties from a fibre object that does not own the underlying data (i.e. is a view onto part of a larger structure)."); + + //Adjust the row size to account for the removed property + rsize -= elem_props->size(); + + //The offset that accounts for the accumulated increase in row size over the whole set due to the added property + //per row. + size_t accum_offset = 0; + + for (size_t elem_i = 0; elem_i < size(); ++elem_i) { + for (size_t elem_elem_i = 0; elem_elem_i < rsize; ++elem_elem_i) + MR::Math::Vector::operator[](elem_i * rsize + elem_elem_i) = MR::Math::Vector::operator[](elem_i * rsize + elem_elem_i + accum_offset); + + accum_offset += elem_props->size(); + } + + + //Move the set properties to their new location + for (size_t prop_i = 0; prop_i < num_props(); ++prop_i) + MR::Math::Vector::operator[](bsize() + prop_i - elem_props->size() * size()) = MR::Math::Vector::operator[](bsize() + prop_i); + + // Resize state vector to remove appended properties + MR::Math::Vector::resize(vsize() - elem_props->size() * size()); + + // Clear properties list. + elem_props->clear(); + + } + + + template template void Set::copy_elem_props(const Set& set) { + + if (size() != set.size()) + throw Exception ("Set sizes must be the same (" + str(size()) + " and " + str(set.size()) + ") to copy element properties"); + + for (size_t prop_i = 0; prop_i < set.num_elem_props(); ++prop_i) { + + const char* key = set.elem_prop_key(prop_i); + + if (!has_elem_prop(key)) + add_elem_prop(key); + + for (size_t elem_i = 0; elem_i < size(); ++elem_i) + operator[](elem_i).prop(key) = set[elem_i].prop(prop_i); + + } + + } + + + template size_t Set::elem_prop_index(const char* const name) const { + + // Find index of property + size_t prop_index = 0; + + for (; prop_index < num_elem_props(); ++prop_index) + if (elem_props->operator[](prop_index) == name) + break; + + //Check to see if property was found. + if (prop_index == num_elem_props()) + throw Exception ("Fibre set does not have element property '" + str(name) + "', it needs to be added by the 'add_elem_prop' command beforehand. " + " Note that the comparison is performed by comparing pointer addresses, so the same (const char*) needs to be used throughout."); + + return prop_index; + + } + + + template void Set::elem_resize(size_t new_elem_degree, size_t new_elem_vsize, double fill_value) { + + if (!is_owner()) + throw Exception ("Cannot resize fibre set that does not own the underlying data (i.e. is a view onto part of a larger structure)."); + + if (!new_elem_degree) + throw Exception ("Cannot change fixed element size to 0. However, if row size is 'freed' using 'free_elem_degrees' their size can be 0."); + + //Buffer the current set + Set orig(*this); + + //Get Vector version of buffer to access its MR::Math::Vector::operator[](). + MR::Math::Vector& orig_vector = orig; + + //Fix the row size by removing the variable row_ends + + if (row_ends) { + + if (row_ends) { + free(row_ends); + row_ends = 0; + } + + if (elem_dgrees) { + free(elem_dgrees); + elem_dgrees = 0; + } + + } + + //Set the new elem and row size including element properties + elem_dgree = new_elem_degree; + rsize = new_elem_vsize; + + //Resize the underlying vector class + MR::Math::Vector::resize(rsize * size() + num_props()); + + //Loop through each element and set the new row + for (size_t elem_i = 0; elem_i < size(); ++elem_i) { + + //Copy across the data from the buffer that is to be included in the resized set + for (size_t elem_elem_i = 0; elem_elem_i < std::min(rsize, orig.row_size(elem_i)) - num_elem_props(); ++elem_elem_i) + MR::Math::Vector::operator[](row_start(elem_i) + elem_elem_i) = orig_vector[orig.row_start(elem_i) + elem_elem_i]; + + //Fill in the extra data in the resized set if required + for (size_t elem_elem_i = orig.row_size(elem_i) - num_elem_props(); elem_elem_i < (rsize - num_elem_props()); ++elem_elem_i) + MR::Math::Vector::operator[](row_start(elem_i) + elem_elem_i) = fill_value; + + //Copy across the element properties + for (size_t prop_i = 0; prop_i < num_elem_props(); ++prop_i) + MR::Math::Vector::operator[](row_end(elem_i) - num_elem_props() + prop_i) = orig_vector[orig.row_end(elem_i) - num_elem_props() + prop_i]; + + } + + for (size_t prop_i = 0; prop_i < num_props(); ++prop_i) + MR::Math::Vector::operator[](bsize() + prop_i) = orig_vector[orig.bsize() + prop_i]; + + + + } + + + template std::vector Set::parse_extend_elem_props_line(const std::string& line) { + + std::istringstream line_stream(line); + + std::string value; + std::vector values_row; + + while(std::getline(line_stream, value, '\t')) + values_row.push_back(value); + + return values_row; + + } + + + template std::vector Set::read_extend_elem_prop_header(std::ifstream& file_in) { + + check_good(file_in); + + char file_intro[PROPS_FILE_PREAMBLE.size()+2]; + + file_in.get(file_intro, PROPS_FILE_PREAMBLE.size()+1); + + if (strcmp(file_intro, PROPS_FILE_PREAMBLE.c_str())) + throw Exception ("Required file intro '" + PROPS_FILE_PREAMBLE + "' was not found at start of extended properties file (found '" + std::string(file_intro) +"' instead)."); + + std::vector header; + + std::string key_line; + + if (!std::getline(file_in, key_line)) + throw Exception ("No ext_elem_prop_keys found in extended properties file."); + + std::istringstream line_stream(key_line); + + std::string key; + + header.clear(); + + while(std::getline(line_stream, key, '\t')) + header.push_back(key); + + return header; + + } + + + template void Set::load_extend_elem_props(std::string location) { + + clear(); + + std::ifstream in; + in.open(location.c_str()); + + *ext_elem_prop_keys = read_extend_elem_prop_header(in); + + std::string line; + + try { + while (std::getline(in, line)) { + std::vector values = parse_extend_elem_props_line(line); + + for (size_t key_i = 0; key_i < num_extend_elem_props(); key_i++) + ext_elem_prop_values->operator[](key_i).push_back(values[key_i]); + + } + + } catch (Exception& e) { + throw Exception ("Error reading extended properties from " + location + ": " + e[0] + "."); + } + + + + + } + + + template void Set::save_extend_elem_props(std::string location) { + + std::ofstream out; + + out.open(location.c_str()); + + out << PROPS_FILE_PREAMBLE; + + for (std::vector::const_iterator key_it = ext_elem_prop_keys->begin(); key_it != ext_elem_prop_keys->end(); key_it++) + out << *key_it << '\t'; + + out << std::endl; + + for (size_t row_i = 0; row_i < size(); row_i++) { + + for (size_t key_i = 0; key_i < ext_elem_prop_keys->size(); key_i++) + + out << ext_elem_prop_values->operator[](key_i)[row_i] << '\t'; + + out << std::endl; + + } + + } + + + template void Set::add_extend_elem_prop_row(const std::vector& values_row) { + + if (num_extend_elem_props() != values_row.size()) + throw Exception ("Number of supplied values " + str(values_row.size()) + " does not match extended element properties (" + str(num_extend_elem_props()) + ")."); + + for (size_t key_i = 0; key_i < num_extend_elem_props(); key_i++) + ext_elem_prop_values->operator[](key_i).push_back(values_row[key_i]); + + } + + + template void Set::add_extend_elem_prop_row(const std::map& properties) { + + std::vector row(num_extend_elem_props()); + + for (size_t key_i = 0; key_i < num_extend_elem_props(); key_i++) { + + std::map::const_iterator key_it = properties.find(ext_elem_prop_keys->operator[](key_i)); + + if (key_it == properties.end()) + throw Exception ("Property '" + ext_elem_prop_keys->operator[](key_i)+ "' not found in added properties row."); + + //Can't use operator[] for properties since properties are const. + row[key_i] = key_it->second; + + } + + for (size_t key_i = 0; key_i < num_extend_elem_props(); key_i++) + ext_elem_prop_values->operator[](key_i).push_back(row[key_i]); + + } + + + template size_t Set::freeze_elem_degree(bool ignore_fail) { + + //Check to see if it is already fixed + if (var_elem_degrees()) { + + bool success = true; + size_t fix_elem_dgree = 0; + size_t fix_rsize = 0; + + if (size()) { + fix_rsize = row_size(0); + fix_elem_dgree = elem_degree(0); + + for (size_t row_i = 0; row_i < size(); ++row_i) + if (fix_rsize != row_size(row_i) || fix_elem_dgree != elem_degree(row_i)) { + success = false; + break; + } + + if (success) { + free(row_ends); + free(elem_dgrees); + row_ends = 0; + elem_dgrees = 0; + } + + } + + if (success) { + elem_dgree = fix_elem_dgree; + rsize = fix_rsize; + vrows = false; + } else if (!ignore_fail) + throw Exception ("Attempt to fix elem sizes failed as multiple values exist in the fibre object."); + + } + + return elem_dgree; + + } + + + /*! Frees the restriction on row sizes being equal to a single member variable. This excludes the use of some + * functions, such as 'bmatrix()' that require a fixed row size and will also take up an extra sizeof(void*) + * of memory for each element + * + */ + template void Set::free_elem_degree() { + + //Check to see if it is already free if not allocate the vector to hold the individual element sizes + if (!var_elem_degrees()) { + + if (size()) { + + size_t alloc_size = sizeof(size_t) * size(); + if (alloc_size) + row_ends = (size_t*)malloc(alloc_size); + + if (!row_ends) + throw Exception ("Could not allocate memory for variable row sizes (" + str(alloc_size) + " bytes requested)."); + + //Allocate an array to hold the variable element sizes + elem_dgrees = (size_t*)malloc(sizeof(size_t) * size()); + + if (!elem_dgrees) + throw Exception ("Could not allocate memory for variable elem sizes (" + str(sizeof(size_t) * size()) + " bytes requested)."); + + //Set the variable element sizes to the current elemnt size before setting it to zero. + size_t row_start = 0; + for (size_t row_i = 0; row_i < size(); ++row_i) { + row_ends[row_i] = row_start + rsize; + row_start = row_ends[row_i]; + elem_dgrees[row_i] = elem_dgree; + } + + } else { + elem_dgrees = 0; + row_ends = 0; + } + + rsize = 0; + elem_dgree = 0; + vrows = true; + + } + + } + + + + template template void Set::copy_relevant_elem_props(const Base::Set& source) { + + if (size() != source.size()) + throw Exception ("Source and destination set sizes must be equal to copy element props (" + str(source.size()) + " and " + str(size()) + " respectively)."); + + if (source.num_elem_props()) { + + // Declare the variables used within the loop + size_t prop_i = 0; + const char* prp_key; + + while ((prp_key = T::PROPS_LIST[prop_i]) != PROPS_LIST_END) { + + std::vector::const_iterator prop_it = std::find(source.props->begin(), source.props->end(), prp_key); + + if (prop_it != source.props->end()) { + if (!has_prop(prp_key)) + add_elem_prop(prp_key); + + for (size_t elem_i = 0; elem_i < size(); ++elem_i) + operator[](elem_i).prop(prp_key) = source[elem_i].prop(prp_key); + + } + + ++prop_i; + } + + } + + } + + } + + } + +} + + +#endif /* ___bts_fibre_set_icpp_h__ */ diff --git a/src/bts/fibre/base/set.h b/src/bts/fibre/base/set.h new file mode 100644 index 0000000..8717854 --- /dev/null +++ b/src/bts/fibre/base/set.h @@ -0,0 +1,731 @@ +/* + Copyright 2010 Brain Research Institute/National ICT Australia (NICTA), Melbourne, Australia + + Written by Thomas G Close, 5/05/09. + + This file is part of Bayesian Tractlet Sampling (BTS). + + BTS is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + BTS is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with BTS. If not, see . + +*/ + + +#ifndef __bts_fibre_base_set_h__ +#define __bts_fibre_base_set_h__ + +#include + +#include "math/vector.h" + +#include "bts/math/munkres.h" + +#include "bts/fibre/base/object.h" +#include "bts/coord.h" + +#define BASE_SET_FUNCTIONS(Derived) \ + Derived& resize(size_t size, double fill_value = NAN) \ + { assert(!var_elem_degrees()); Base::Set::resize(size, fill_value, 0, 0); return *this; } \ +\ + Derived& resize(size_t size, const typename Derived::Element& elem) \ + { Base::Set::resize(size,elem); return *this; } \ + + +namespace BTS { + + namespace Fibre { + + namespace Base { + + template class Set : public Object { + + + template friend class Set; + + //Nested classes and typedefs + public: + + typedef T Element; + + template class Tensor; + + + //Public const static members. + public: + + const static Coord FILE_SEPARATOR; + const static char* BASE_INTENSITY_PROP; + + const static std::string PROPS_FILE_PREAMBLE; + + const static std::string BUNDLE_INDEX_EPROP; + + const static std::string NUM_ELEMS_EXT_PROP; + const static std::string ELEM_SIZE_EXT_PROP; + const static std::string ELEM_VSIZE_EXT_PROP; + + protected: + + size_t initial_vsize(size_t size, + size_t* elem_degrees, + size_t elem_row_size, + size_t num_elem_props, + size_t num_props); + + //Protected member variables; + protected: + + bool vrows; /**< A flag that determines whether the row sizes and elem + sizes vary or whether they are determined by the 'rsize' and elem_dgree variablse alone */ + size_t rsize; /**< The vsize of each element if element sizes are fixed. @see Object::vsize()*/ + size_t elem_dgree; /**< The vsize of each element if element sizes are fixed*/ + size_t* row_ends; /**< The end index of each element if element sizes vary. */ + size_t* elem_dgrees; /**< The size of each element if element sizes vary. */ + + + std::vector* elem_props; + + std::map* ext_props; + + std::vector* ext_elem_prop_keys; + std::vector* ext_elem_prop_defaults; + std::vector< std::vector >* ext_elem_prop_values; + + + //Public member functions + public: + + + /*! Initialises an empty fibre base set with a given base_size and variable row sizes + * + * @param row_size The size of the fibre object's elements + * @param size Size of the base fibre object + * @param default_value The default value with which to fill the fibre object + * @param properties A list of properties to be appended to the state vector. + */ + Set ( const std::vector& props, + const std::vector& elem_props, + const std::map& extended_props) + : Object(0, props.size(), props), + vrows(true), + rsize(0), + elem_dgree(0), + row_ends(0), + elem_dgrees(0), + elem_props(new std::vector(elem_props)), + ext_props(0), + ext_elem_prop_keys(0), + ext_elem_prop_defaults(0), + ext_elem_prop_values(0) { + + + if (extended_props.size()) + ext_props = new std::map(extended_props); + + } + + + /*! Initialises a fibre base set with a given base_size and fixed row sizes. + * + * @param row_size The size of the fibre object's elements + * @param size Size of the base fibre object + * @param default_value The default value with which to fill the fibre object + * @param properties A list of properties to be appended to the state vector. + */ + Set ( size_t size, + size_t elem_degree, + size_t elem_vsize, + const std::vector& props, + const std::vector& elem_props, + const std::map& extended_props = std::map()) + : Object(size, size * elem_vsize + props.size(), props), + vrows(false), + rsize(elem_vsize), + elem_dgree(elem_degree), + row_ends(0), + elem_dgrees(0), + elem_props(new std::vector(elem_props)), + ext_props(0), ext_elem_prop_keys(0), ext_elem_prop_defaults(0), ext_elem_prop_values(0) { + + assert((elem_vsize - elem_props.size()) % 3 == 0); + + if (extended_props.size()) + ext_props = new std::map(extended_props); + + } + + + /*! Initialises a fibre base set from a view onto a larger set or tensor with fixed row sizes + * + * @param size Size of the new set + * @param elem_degree Fixed size of the elements of the set + * @param elem_row_size Row size of the elements of the set + * @param view View on to the fibre objects that will form the set + * @param props Pointer to the set properties + * @param elem_props Pointer to the element properties + */ + explicit Set (size_t size, + size_t elem_degree, + size_t elem_vsize, + const MR::Math::Vector::View& view, + std::vector* props, + std::vector* elem_props) + : Object(size, view, props), + vrows(false), + rsize(elem_vsize), + elem_dgree(elem_degree), + row_ends(0), + elem_dgrees(0), + elem_props(elem_props), + ext_props(0), ext_elem_prop_keys(0), ext_elem_prop_defaults(0), ext_elem_prop_values(0) { + + assert(size * elem_vsize + props->size() == view.size()); + assert((elem_vsize - elem_props->size()) % 3 == 0); + + } + + + /*! Initialises a fibre base set from a view onto a larger set or tensor with variable row sizes + * + * @param size Size of the new set + * @param elem_degrees Variable row sizes of the elements of the set + * @param elem_row_size Row size of the elements of the set + * @param view View on to the fibre objects that will form the set + * @param props Pointer to the set properties + * @param elem_props Pointer to the element properties + */ + explicit Set (size_t size, + size_t* element_sizes, + size_t* element_ends, + const MR::Math::Vector::View& view, + std::vector* props, + std::vector* elem_props) + : Object(size, view, props), + vrows(true), + rsize(0), + elem_dgree(0), + row_ends (size ? (size_t*)malloc(sizeof(size_t) * size) : 0), + elem_dgrees(size ? (size_t*)malloc(sizeof(size_t) * size) : 0), + elem_props(elem_props), + ext_props(0), ext_elem_prop_keys(0), ext_elem_prop_defaults(0), ext_elem_prop_values(0) { + + assert(element_ends[size-1] == view.size()); + + if (size) { + + if (!row_ends) + throw Exception("Failed to allocate array for row_ends (" + str(sizeof(size_t) * size) + " bytes requested)."); + + if (!elem_dgrees) + throw Exception ("Failed to allocate array for elem_dgrees (" + str(sizeof(size_t) * size) + " bytes requested)."); + + memcpy (row_ends, element_ends, sizeof(size_t) * size); + memcpy (elem_dgrees, element_sizes, sizeof(size_t) * size); + + } + + } + + + Set (const Set& set); + + + ~Set () { + + if (this->GSLVector::owner) { + delete elem_props; + + if (ext_props) delete ext_props; + if (ext_elem_prop_keys) delete ext_elem_prop_keys; + if (ext_elem_prop_defaults) delete ext_elem_prop_defaults; + if (ext_elem_prop_values) delete ext_elem_prop_values; + + } + + if (row_ends) + free(row_ends); + + if (elem_dgrees) + free(elem_dgrees); + + } + + + Set& operator= (const Set& set); + + + void reset(size_t num_elems, + size_t elem_degree, + size_t elem_row_size, + const std::vector& props, + const std::vector& elem_props, + double default_value = NAN); + + + void reset(const std::vector& props, + const std::vector& elem_props, + double fill_value = NAN); + + + T operator[] (size_t idx) + { return T(elem_degree(idx), sub(row_start(idx), row_end(idx)), elem_props); } + + + const T operator[] (size_t idx) const + { return T(elem_degree(idx), sub(row_start(idx),row_end(idx)), elem_props); } + + + T elem(size_t idx) + { return operator[](idx); } + + + const T elem(size_t idx) const + { return operator[](idx); } + + + double base_intensity() const + { return has_prop(BASE_INTENSITY_PROP) ? prop(BASE_INTENSITY_PROP) : 1.0; } + + + + /*! Checks to see if the (intrinsic) element properties match between two fibre set objects, i.e. whether they have the same + * property keys. Is used before some mathematical operations + * + * @param props the props to match to + * @return true if fibre object matches the properties exactly. + */ + bool elem_props_match(const std::vector* props) const; + + + /*! Checks to see if the (intrinsic) element properties match between two fibre set objects, i.e. whether they have the same + * property keys. Is used before some mathematical operations + * + * @param props the props to match to + * @return true if fibre object matches the properties exactly. + */ + bool props_match(const std::vector* properties, + const std::vector* elem_properties) const + { return Object::props_match(properties) && elem_props_match(elem_properties); } + + + bool props_match(const Set& set) const + { return props_match(set.props, set.elem_props); } + + + void add_base_intensity(double base_intens = 1.0) + { add_prop(BASE_INTENSITY_PROP, base_intens); } + + + void set_base_intensity(double base_intens) + { prop(BASE_INTENSITY_PROP) = base_intens; } + + + void remove_base_intensity() + { remove_prop(BASE_INTENSITY_PROP); } + + + bool has_var_base_intensity() const + { return has_prop(BASE_INTENSITY_PROP); } + + + double& var_base_intensity() + { assert(has_var_base_intensity()); return prop(BASE_INTENSITY_PROP); } + + + //! Returns either the fixed elem size if present or the variable element size if that is present. + size_t elem_degree(size_t idx) const + { return elem_dgree ? elem_dgree : (elem_dgrees ? elem_dgrees[idx] : 0); } + + + size_t elem_degree() const + { assert(!var_elem_degrees()); return elem_dgree; } + + + void elem_resize(size_t new_elem_degree, size_t new_elem_vsize, double default_value); + + + T push_back(const T& elem); + + + T push_back(const T& elem, const std::map& elem_properties_row) + { T new_elem = push_back(elem); set_extend_elem_prop_row(elem_properties_row, size()-1, true); return new_elem; } + + + /*! Erase the element at the given index + * + * @param index The index of the element to erase + */ + void erase(size_t index); + + /*! Inserts an object at the given index + * + * @param index + */ + T insert(const T& element, size_t index); + + + void append(const Set& set) + { for (size_t elem_i = 0; elem_i < set.size(); ++elem_i)push_back(set[elem_i], set.get_extend_elem_prop_row(elem_i)); } + + + Set& clear(); + + Set& clear(const std::vector& properties, const std::vector& elem_properties); + + double distance(const Set& reference, double strands_per_acs = 0.0, bool add_extra = false) const; + + /*! Returns the indices of current set in 'matched_indices' that form the closest match with the reference set. + * + */ + double distance(const Set& reference, + std::vector& matched_indices, double strands_per_acs = 0.0, bool add_extra = false) const; + + //TODO: create another overload that allows a custom similarity matrix to be passed but doesn't need to pass the munkres algorithm. + double distance(const Set& reference, + std::vector& indices, + BTS::Math::Munkres&munkres_algorithm, + MR::Math::Matrix& similarity, + double strands_per_acs = 0.0, + bool add_extra = false) const; + + + Set& smallest_distance_set(const Set& reference, Set& smallest) const; + + + MR::Math::Matrix similarity_matrix(const Set& reference, double strands_per_acs = 0.0) const + { MR::Math::Matrix matrix(this->size(), reference.size()); similarity_matrix(reference, matrix, strands_per_acs); return matrix; } + + + void similarity_matrix(const Set& reference, MR::Math::Matrix& similarity, double strands_per_acs = 0.0) const; + + // Methods to get and manipulate element properties. + + + bool has_extend_prop(const std::string& key) + { return ext_props && ext_props->count(key); } + + std::string get_extend_prop(const std::string& key) + { return (ext_props && ext_props->count(key)) ? (*ext_props)[key] : throw Exception ("'" + key + "' key was not found in extended properties."); } + + std::map get_extend_props() const + { return ext_props ? *ext_props : std::map(); } + + + std::vector extend_prop_keys() const; + + + void set_extend_props(const std::map& extended_props); + + + void set_extend_prop(const std::string& prop, const std::string& value); + + + size_t num_extend_elem_props() const + { return ext_elem_prop_keys ? ext_elem_prop_keys->size() : 0; } + + + std::vector extend_elem_prop_keys() const; + + + /*! Return a copy of the element property pointers */ + std::vector elem_prop_keys() const; + + + void add_extend_elem_prop(const std::string& key, const std::string& default_value); + + + template void add_extend_elem_props(const Set& set); + + + void clear_extend_elem_props(); + + + void remove_extend_elem_prop(const std::string& key); + + + template void copy_relevant_elem_props(const Base::Set& set); + + + void set_extend_elem_prop(std::string key, std::string value, size_t elem_index); + + + std::string get_extend_elem_prop(std::string key, size_t elem_index) const; + + + template U get_extend_elem_prop(std::string key, size_t elem_index) const + { return this->get_extend_elem_prop(key, elem_index); } + + + bool has_extend_elem_prop(const std::string& key) const; + + + std::map get_extend_elem_prop_row(size_t index) const; + + + void set_extend_elem_prop_row(const std::map& properties, size_t row_index, bool ignore_missing = false); + + + template inline void copy_extend_elem_prop_row(const Set& set, size_t elem_index, size_t this_index) + { this->set_extend_elem_prop_row(set.get_extend_elem_prop_row(elem_index), this_index, true); } + + + template inline void copy_extend_elem_prop_row(const Set& set, size_t elem_index) + { this->copy_extend_elem_prop_row(set, elem_index, elem_index); } + + + template inline void copy_extend_elem_props(const Set& set); + + + template inline void append_extend_elem_props(const Set& set); + + + Set& permute(Set& permuted, const std::vector& indices) const; + + + Set& select(Set& new_set, std::vector& indices) const; + + + void load(const std::string& location); + + + void save(const std::string& location) const; + + + void reset_bundle_indices(); + + +// protected: + + template void load_tpl(const std::string& location, V& reader); + + + template void save_tpl(const std::string& location, V& writer) const; + +// protected: + + size_t key_index(const std::string& key) const; + + + void init_extend_elem_props(); + + + static void check_good(std::ifstream& in) + { if (!in.good()) throw Exception ("Could not read from properties file."); } + + + static void read_props_preamble(std::ifstream& in); + + + void add_extend_elem_prop_row(const std::vector& values_row); + + + void add_extend_elem_prop_row(const std::map& properties); + + + std::vector parse_extend_elem_props_line(const std::string& line); + + + std::vector read_extend_elem_prop_header(std::ifstream& file_in); + + + void load_extend_elem_props(std::string location); + + + void save_extend_elem_props(std::string location); + + + + //! Returns the number of elem_properties the object has. + size_t num_elem_props() const + { return elem_props->size(); } + + + /*! Adds a new element property to the object. + * Can only be used if the object is not part of a larger object (eg. a set) + * + * @param[in] name Pointer to the element property string (NB: comparisons are performed on the pointer itself not its + * contents so must be consitent application wide. It is implemented as a c-string instead of + * an enum so for input/output purposes only) + * @param[in] value The value assigned to the element property + */ + void add_elem_prop(const char* const name, double value = NAN, bool ignore_present=true); + + + /*! Adds a new element property to the object. + * Can only be used if the object is not part of a larger object (eg. a set) + * + * @param[in] name Pointer to the element property string (NB: comparisons are performed on the pointer itself not its + * contents so must be consitent application wide. It is implemented as a c-string instead of + * an enum so for input/output purposes only) + */ + bool has_elem_prop(const char* name) const + { for (size_t elem_prop_i = 0; elem_prop_i < num_elem_props(); ++elem_prop_i) { if (name == elem_props->operator[](elem_prop_i)) return true; } return false; } + + + /*! Adds a new element property to the object. + * Can only be used if the object is not part of a larger object (eg. a set) + * + * @param[in] name The element property name + * @param[in] ignore_missing Set to true if it doesn't matter whether the element property is present + */ + void remove_elem_prop(const char* const name, bool ignore_missing = true); + + + //! Removes all elem_properties. + void clear_elem_props(); + + + /*! Copy all element properties from @arg set to the current set + * + * @param set + */ + template void copy_elem_props(const Set& set); + + + /*! Returns the index of the given element property relative the other elem_properties + * + * @param name + * @return index of element property for the given objecct + */ + size_t elem_prop_index(const char* const name) const; + + + /*! Access the element property at the given index for const object. + * + * @param index of element property + * @return reference of corresponding element property + */ + const char* elem_prop_key(size_t index) const + { return elem_props->operator[](index); } + + + std::vector& insert_elem_prop_keys(std::vector& header) const; + + + /*! Attempts to fix the row size to a single member variable (stored in 'rsize') instead of many row sizes + * (stored in 'row_ends'). This allows the use of some functions, such as 'bmatrix()' that require a fixed + * row size. If the number of rows are variable it will throw an exception unless the 'ignore_fail' flag is set. + * + * @param ignore_fail Ignore failure to fix the row size (eg. for use in load functions) + * @return Fixed row size + */ + size_t freeze_elem_degree(bool ignore_fail = false); + + + /*! Frees the restriction on row sizes being equal to a single member variable. This excludes the use of some + * functions, such as 'bmatrix()' that require a fixed row size and will also take up an extra sizeof(void*) + * of memory for each element + * + */ + void free_elem_degree(); + + + /*! Resize the number of @see Triple objects in the fibre object (does not effect the properties) + * + * @param size The number of @see Triple objects in the new fibre object + * @param fill_value The value assigned to the any empty values. + * @param new_elem_degree The size() of the new element if the row size is variable (otherwise it is not required and will be ignored). + * @param new_elem_vsize The vsize() of the new element if the row size is variable (otherwise it is not required and will be ignored). + */ + void resize(size_t size, double fill_value = NAN, size_t new_elem_degree = 0, size_t new_vsize = 0); + + + void resize(size_t size, const T& elem); + + + //! Return a MR::Math::Matrix window to the underlying state vector interpreted as a matrix (without properties). + MR::Math::Matrix bmatrix() + { assert(!var_elem_degrees()); return MR::Math::Matrix(data, size(), rsize, stride()); } + + + + /*! Used in SetReader to load up the element without the properties which are set afterwards + * + * @param elem The element to push to the back of the set. + * @param without_props Flag to to not push back the properties of the element, which are loaded separately in the reader. + * @return + */ + T push_back(const T& elem, bool without_props); + + protected: + + + /*! Returns the row size for the given row index. If the row size is fixed it is simply returned otherwise the + * variable row size is looked up. + * + * @param row_index Index of the row to be looked up + * @return The size of the specified row + */ + size_t row_size(size_t row_index) const + { return !var_elem_degrees() ? rsize : (row_ends ? (!row_index ? row_ends[0] : row_ends[row_index] - row_ends[row_index -1]) : 0); } + + + /*! Returns the start index for the given row. If 'rsize' is defined then it is simply the row index x the row + * size ('rsize'). If 'row_ends' is defined then the index of the previous end is returned. + * + * @param row_index Index of the row to be looked up + * @return The start index of the specified row + */ + size_t row_start(size_t row_index) const + { return !var_elem_degrees() ? row_index * rsize : (row_ends ? (row_index ? row_ends[row_index-1] : 0) : 0); } + + + /*! Returns the end index for the given row. If 'rsize' is defined then it is simply the row index x the row size ('rsize') + * + * @param row_index Index of the row to be looked up + * @return The end index of the specified row + */ + size_t row_end(size_t row_index) const + { return !var_elem_degrees() ? (row_index + 1) * rsize : ( row_ends ? row_ends[row_index] : 0); } + + + + /*! Test whether the object has variable row sizes or not + * + * @return True if row size is variable + */ + bool var_elem_degrees() const + { return vrows; } + + + /*! Used in constructors called in-turn from Set constructors to calculate the row ends from variable element + * sizes and a fixed elem_row_size + * + * @param elem_degrees + * @param elem_row_size + */ + void calculate_row_ends(size_t* elem_degrees, size_t elem_row_size, + size_t num_elem_props) { + + size_t row_start = 0; + + for (size_t row_i = 0; row_i < size(); ++row_i) + row_ends[row_i] = row_start + elem_degrees[row_i] * elem_row_size + num_elem_props; + + } + + }; + + template std::ostream& operator<< (std::ostream& stream, const Set& set); + + typedef std::map Properties; + + } + + } + +} + +#include "bts/fibre/base/set.cpp.h" + +#endif diff --git a/src/bts/fibre/base/set/tensor.h b/src/bts/fibre/base/set/tensor.h new file mode 100644 index 0000000..5dc49c4 --- /dev/null +++ b/src/bts/fibre/base/set/tensor.h @@ -0,0 +1,160 @@ +/* + Copyright 2008 Brain Research Institute, Melbourne, Australia + + Written by Thomas G Close, 11/08/2010. + + This file is part of MRtrix. + + MRtrix is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + MRtrix is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with MRtrix. If not, see . + +*/ + +#ifndef __bts_fibre_set_tensor_h__ +#define __bts_fibre_set_tensor_h__ + +#include "bts/fibre/base/set.h" + + +// +//namespace BTS { +// +// namespace Fibre { +// +// namespace Base { +// +// template template class Set::Tensor_tpl : public std::map::Intrinsic_tpl { +// +// public: +// +// typedef typename U::template Tensor_tpl Element; +// typedef Set ColumnClass; +// typedef typename std::vector< typename U::template Tensor_tpl >::iterator iterator; +// typedef typename std::vector< typename U::template Tensor_tpl >::const_iterator const_iterator; +// +// public: +// +// typename T::Set base_intensity; +// +// //Protected member variables; +// protected: +// +// std::vector elems; +// +// //Public member functions +// public: +// +// Tensor_tpl () { init(); } +// +// Tensor_tpl(const Set& default_value); +// +// Tensor_tpl(const Tensor_tpl& t) +// : base_intensity(t.base_intensity), elems(t.elems) { init(); } +// +// ~Tensor_tpl() {} +// +// Tensor_tpl& operator= (const Tensor_tpl& t) +// { base_intensity = t.base_intensity; elems = t.elems; return *this; } +// +// Element& operator[] (int idx) +// { return (elems[idx]); } +// +// const Element& operator[] (int idx) const +// { return (elems[idx]); } +// +// iterator begin() { return elems.begin(); } +// const_iterator begin() const { return elems.begin(); } +// +// iterator end() { return elems.end(); } +// const_iterator end() const { return elems.end(); } +// +// +// Tensor_tpl& operator+= (const Tensor_tpl& tensor) +// { base_intensity += tensor.base_intensity; for (size_t elem_i = 0; elem_i < size(); elem_i++) operator[](elem_i) += tensor[elem_i]; return *this; } +// +// Tensor_tpl& operator-= (const Tensor_tpl& tensor) +// { base_intensity -= tensor.base_intensity; for (size_t elem_i = 0; elem_i < size(); elem_i++) operator[](elem_i) -= tensor[elem_i]; return *this; } +// +// Tensor_tpl& operator*= (const Tensor_tpl& tensor) +// { base_intensity *= tensor.base_intensity; for (size_t elem_i = 0; elem_i < size(); elem_i++) operator[](elem_i) *= tensor[elem_i]; return *this; } +// +// Tensor_tpl& operator*= (double c) +// { base_intensity *= c; for (size_t elem_i = 0; elem_i < size(); elem_i++) operator[](elem_i) *= c; return *this; } +// +// Tensor_tpl& operator/= (const Tensor_tpl& tensor) +// { base_intensity /= tensor.base_intensity; for (size_t elem_i = 0; elem_i < size(); elem_i++) operator[](elem_i) /= tensor[elem_i]; return *this; } +// +// Tensor_tpl& operator/= (double c) +// { base_intensity /= c; for (size_t elem_i = 0; elem_i < size(); elem_i++) operator[](elem_i) /= c; return *this; } +// +// Tensor_tpl operator+ (const Tensor_tpl& t) const +// { Tensor_tpl answer (*this); answer += t; return answer; } +// +// Tensor_tpl operator- (const Tensor_tpl& t) const +// { Tensor_tpl answer (*this); answer -= t; return answer; } +// +// Tensor_tpl operator* (const Tensor_tpl& t) const +// { Tensor_tpl answer (*this); answer *= t; return answer; } +// +// Tensor_tpl operator* (double c) const +// { Tensor_tpl answer (*this); answer *= c; return answer; } +// +// Tensor_tpl operator/ (const Tensor_tpl& t) const +// { Tensor_tpl answer (*this); answer /= t; return answer; } +// +// Tensor_tpl operator/ (double c) const +// { Tensor_tpl answer (*this); answer /= c; return answer; } +// +// Tensor_tpl& zero() +// { base_intensity.zero(); for (iterator it = begin(); it != end(); it++) it->zero(); return *this; } +// +// Tensor_tpl& invalidate() +// { base_intensity.invalidate(); for (iterator it = begin(); it != end(); it++) it->invalidate(); return *this; } +// +// size_t size() const +// { return elems.size(); } +// +// void push_back(const Element& elem) +// { elems.push_back(elem); } +// +// void clear() +// { base_intensity.clear(); elems.clear(); } +// +// +// Set get_diagonal() const; +// +// +// void set_diagonal(const Set& diagonal); +// +// +// protected: +// +// void init() { +// +// if (Fibre::Object::include_intrinsic_intensities) +// this->intrinsic_props["base_intensity"] = &base_intensity; +// else +// base_intensity.set(1.0); +// +// } +// +// +// }; +// +// } +// +// } +// +//} + +#endif /* __bts_fibre_set_tensor_h__ */ diff --git a/src/bts/fibre/base/set_reader.cpp.h b/src/bts/fibre/base/set_reader.cpp.h new file mode 100644 index 0000000..174c268 --- /dev/null +++ b/src/bts/fibre/base/set_reader.cpp.h @@ -0,0 +1,184 @@ +/* + Copyright 2008 Brain Research Institute, Melbourne, Australia + + Written by Thomas G Close, Jul 26, 2010. + + This file is part of MRtrix. + + MRtrix is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + MRtrix is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with MRtrix. If not, see . + +*/ + +#ifndef __bts_fibre_setreader_cpp_h__ +#define __bts_fibre_setreader_cpp_h__ + +namespace BTS { + + namespace Fibre { + + namespace Base { + + template void SetReader::open (const std::string& location) { + + + Reader::open(location); + + std::string elem_properties_location = location + "xx"; + + if (File::is_file(elem_properties_location)) { + + elem_in.open(elem_properties_location.c_str()); + + elem_prop_hdr = Reader::read_props_header(elem_in); + ext_elem_prp_keys = elem_prop_hdr; + elem_prp_keys = Object::extract_props(ext_elem_prp_keys); + + elem_begin = elem_in.tellg(); + + } else { + + elem_prop_hdr.clear(); + ext_elem_prp_keys.clear(); + elem_prp_keys.clear(); + + elem_begin = 0; + + } + + } + + + template void SetReader::rewind() { + + Reader::rewind(); + + if (elem_begin) + elem_in.seekg(elem_begin); + + } + + + template bool SetReader::next (T& set) { + + std::map properties; + + set.reset(this->prp_keys, elem_prp_keys); + + if (Reader::next_basic(set)) { + + //Set 'set-wide' properties + if (this->prop_hdr.size()) { + std::string line; + + if (!std::getline(this->prop_in, line)) + throw Exception ("No corresponding line found in extended properties file."); + + properties = parse_props_line(this->prop_hdr, line); + + set.extract_and_set_props(properties); + set.set_extend_props(properties); + + } + + //Set element properties. + set.clear_extend_elem_props(); + + if (elem_prop_hdr.size()) { + + for (std::vector::iterator prop_it = ext_elem_prp_keys.begin(); prop_it != ext_elem_prp_keys.end(); ++prop_it) + set.add_extend_elem_prop(*prop_it, ""); + + std::string line; + + if (!std::getline(elem_in, line)) + throw Exception ("No corresponding row found in set properties file."); + + size_t elem_index = 0; + + while (!is_row_seperator(line)) { + + if (elem_index >= set.size()) + throw Exception ("Loaded properties contain more rows than elements in the set"); + + std::map elem_prop_row = Reader::parse_props_line(elem_prop_hdr, line); + + //FIXME: Needs to be implemented + std::map ext_elem_prop_row = set[elem_index].extract_and_set_props(elem_prop_row); + + set.set_extend_elem_prop_row(ext_elem_prop_row, elem_index); + + ++elem_index; + + if (!std::getline(elem_in, line)) + throw Exception ("Set properties row is incomplete."); + } + + } + + } else + return false; + + return true; + + } + + + template bool SetReader::is_row_seperator(const std::string& line) { + + bool is_seperator = false; + + if (line.size() > 12) + is_seperator = !strcmp(line.substr(0,8).c_str(), "--- END ") && !strcmp(line.substr(line.size()-4, 4).c_str(), " ---"); + + return is_seperator; + + } + + + template Coord SetTextReader::read_coord () { + + Coord coord; + + if (!this->in.good()) + throw Exception ("Corrupted fibre object file '" + this->file_location +"'."); + + std::string next_value; + + for (int dim_i = 0; dim_i < 3; dim_i++) { + + this->in >> next_value; + + if (next_value == "nan") + coord[dim_i] = NAN; + else if (next_value == "inf") + coord[dim_i] = INFINITY; + else if (next_value == "-inf") + coord[dim_i] = -INFINITY; + else if (strspn(next_value.c_str(),"-e0.123456789") == next_value.size()) + coord[dim_i] = to(next_value); + else + dim_i--; //If next_value is not a number empty skip. (this is mainly for the start of the file which has some funny bits). + + } + + return coord; + } + + } + + } + +} + +#endif /* __bts_fibre_set_reader_cpp_h__ */ diff --git a/src/bts/fibre/base/set_reader.h b/src/bts/fibre/base/set_reader.h new file mode 100644 index 0000000..6812106 --- /dev/null +++ b/src/bts/fibre/base/set_reader.h @@ -0,0 +1,128 @@ +/* + Copyright 2010 Brain Research Institute/National ICT Australia (NICTA), Melbourne, Australia + + Written by Thomas G Close, 5/05/09. + + This file is part of Bayesian Tractlet Sampling (BTS). + + BTS is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + BTS is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with BTS. If not, see . + +*/ + +#ifndef __bts_fibre_setreader_h__ +#define __bts_fibre_setreader_h__ + +#include +#include +#include + +#include "bts/fibre/base/set.h" +#include "bts/fibre/base/reader.h" + + +namespace BTS { + + namespace Fibre { + + namespace Base { + + template class SetReader : public Reader { + + + // Protected member fields. + protected: + + std::vector elem_prop_hdr; + std::vector elem_prp_keys; + std::vector ext_elem_prp_keys; + + std::ifstream elem_in; + off64_t elem_begin; + + // Public methods and constructors. + public: + + SetReader () {} + + SetReader (const std::string& location) + { open(location); } + + ~SetReader() + { close(); } + + void open (const std::string& location); + + + void rewind(); + + + bool next(T& fibre); + + + bool next(T& fibre, std::map& properties) + { if (next(fibre)) { properties = fibre.get_extend_props(); return true; } else return false; } + + + void close() + { Base::Reader::close(); elem_in.close(); elem_prop_hdr.clear(); } + + + std::vector extend_elem_prop_keys() const + { return ext_elem_prp_keys; } + + + std::vector elem_prop_keys() const + { return elem_prp_keys; } + + + std::vector elem_header() const + { return elem_prop_hdr; } + + protected: + + + static bool is_row_seperator(const std::string& line); + + + }; + + + + template class SetTextReader : public SetReader { + + //Public static variables, nested classes and typedefs + public: + + SetTextReader () {} + + SetTextReader (const std::string& location) + : Base::SetReader(location) {} + + Coord read_coord (); + + }; + + + } + + } + + +} + +#include "bts/fibre/base/set_reader.cpp.h" + + + +#endif diff --git a/src/bts/fibre/base/set_writer.cpp.h b/src/bts/fibre/base/set_writer.cpp.h new file mode 100644 index 0000000..182c959 --- /dev/null +++ b/src/bts/fibre/base/set_writer.cpp.h @@ -0,0 +1,119 @@ +/* + Copyright 2008 Brain Research Institute, Melbourne, Australia + + Written by Thomas G Close, Jul 26, 2010. + + This file is part of MRtrix. + + MRtrix is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + MRtrix is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with MRtrix. If not, see . + +*/ + +#ifndef __bts_fibre_setwriter_cpp_h__ +#define __bts_fibre_setwriter_cpp_h__ + +#include "bts/fibre/base/set.h" + +namespace BTS { + + namespace Fibre { + + namespace Base { + + + template void SetWriter::create (const std::string& location, + const std::vector& props, + const std::vector& elem_props, + const std::vector extend_prop_keys, + const std::vector extend_elem_prop_keys, + const std::map& file_props) { + + std::vector elem_header; + + //Add the elem props into the elem header first (doesn't really need to be first but I like it that way when I read the files manually) + for (size_t prop_i = 0; prop_i < elem_props.size(); ++prop_i) + elem_header.push_back(elem_props[prop_i]); + + //Insert the extended properties into the set and elem headers. + elem_header.insert(elem_header.end(), extend_elem_prop_keys.begin(), extend_elem_prop_keys.end()); + + Writer::create(location, props, extend_prop_keys, file_props); + + elem_prop_hdr = elem_header; + + std::string set_properties_location = location + "xx"; + + if (elem_prop_hdr.size()) { + + ext_elem_out.open((set_properties_location).c_str()); + + Writer::write_props_header(ext_elem_out, elem_prop_hdr); + + } else if (File::exists(set_properties_location)) + File::remove(set_properties_location); + + + } + + + template void SetWriter::append (const T& set) { + + + Base::Writer::append(set, set.get_extend_props()); + + for (size_t elem_i = 0; elem_i < set.size(); elem_i++) { + + std::map properties_row = set.get_extend_elem_prop_row(elem_i); // + + set[elem_i].insert_props(properties_row); + + write_properties_row(this->elem_prop_hdr, properties_row, this->ext_elem_out); + + } + + this->ext_elem_out << row_seperator(this->count) << std::endl; + + + } + + + template void SetWriter::append (const T& set, std::map& properties) { + + T new_set (set); + + std::map extend_props = new_set.get_extend_props(); + + for (std::map::iterator prop_it = extend_props.begin(); prop_it != extend_props.end(); ++prop_it) + new_set.set_extend_prop(prop_it->first, prop_it->second); + + append(new_set); + + } + + + template void SetTextWriter::write (const Coord& coord) { + + this->out << "\n" << coord[X] << " " << coord[Y] << " " << coord[Z]; + this->out.flush(); + + } + + } + + } + + +} + +#endif /* __bts_fibre_set_writer_cpp_h__ */ diff --git a/src/bts/fibre/base/set_writer.h b/src/bts/fibre/base/set_writer.h new file mode 100644 index 0000000..344d1da --- /dev/null +++ b/src/bts/fibre/base/set_writer.h @@ -0,0 +1,202 @@ +/* + Copyright 2010 Brain Research Institute/National ICT Australia (NICTA), Melbourne, Australia + + Written by Thomas G Close, 5/05/09. + + This file is part of Bayesian Tractlet Sampling (BTS). + + BTS is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + BTS is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with BTS. If not, see . + +*/ + + +#ifndef __bts_fibre_setwriter_h__ +#define __bts_fibre_setwriter_h__ + +#include + +#include "bts/fibre/base/set.h" +#include "bts/fibre/base/writer.h" +#include "bts/fibre/base/set_reader.h" + + +namespace BTS { + + namespace Fibre { + + namespace Base { + + template class SetWriter : public Fibre::Base::Writer { + + // Nested classes and typedefs + public: + + // Protected member fields. + protected: + + std::vector elem_prop_hdr; + + std::ofstream ext_elem_out; + + // Public methods and constructors. + public: + + SetWriter() {} + + + template SetWriter (const std::string& location, + const U& set_or_reader, + const std::map& file_props = std::map()) + { create (location, set_or_reader, file_props); } + + + template SetWriter (const std::string& location, + const U& set_or_reader, + const std::vector& extend_prop_keys, + const std::map& file_props = std::map()) + { create( location, set_or_reader, extend_prop_keys, file_props); } + + + template SetWriter( const std::string& location, + const U& set_or_reader, + const std::vector& extend_prop_keys, + const std::vector& extend_elem_prop_keys, + const std::map& file_props = std::map()) + { create( location, set_or_reader, extend_prop_keys, extend_elem_prop_keys, file_props); } + + + virtual ~SetWriter() + { close(); } + + + template void create (const std::string& location, + const U& set_or_reader, + const std::map& file_props = std::map()) { + create( location, + Object::select_props(set_or_reader.prop_keys()), + Object::select_props(set_or_reader.elem_prop_keys()), + set_or_reader.extend_prop_keys(), + set_or_reader.extend_elem_prop_keys(), + file_props); + } + + + template void create (const std::string& location, + const U& set_or_reader, + const std::vector& extend_prop_keys, + const std::map& file_props = std::map()) { + create( location, + Object::select_props(set_or_reader.prop_keys()), + Object::select_props(set_or_reader.elem_prop_keys()), + extend_prop_keys, + set_or_reader.extend_elem_prop_keys(), + file_props); + } + + + template void create (const std::string& location, + const U& set_or_reader, + const std::vector& extend_prop_keys, + const std::vector& extend_elem_prop_keys, + const std::map& file_props = std::map()) { + create( location, + Object::select_props(set_or_reader.prop_keys()), + Object::select_props(set_or_reader.elem_prop_keys()), + extend_prop_keys, + extend_elem_prop_keys, + file_props); + } + + + + void append (const T& set); + + //Not recommended as it involves a copy only included to make a template function work. + void append (const T& set, std::map& properties); + + void close () + { Fibre::Base::Writer::close(); ext_elem_out.close(); } + + // Protected methods and constructors + protected: + + + void create ( const std::string& location, + const std::vector& props, + const std::vector& elem_props, + const std::vector extend_prop_keys = std::vector(), + const std::vector extend_elem_prop_keys = std::vector(), + const std::map& file_props = std::map()); + + static std::string row_seperator(size_t count) + { return "--- END " + str(count) + " ---"; } + + }; + + + + //TODO: Make use of DWI::Tractography::Writers template to Remove this text writer. + template class SetTextWriter : public SetWriter { + + //Public static variables, nested classes and typedefs + + public: + + SetTextWriter() {} + + + template SetTextWriter (const std::string& location, + const U& set_or_reader, + const std::map& file_props = std::map()) + : SetWriter(location, set_or_reader, file_props) {} + + + template SetTextWriter (const std::string& location, + const U& set_or_reader, + const std::vector& extend_prop_keys, + const std::map& file_props = std::map()) + : SetWriter(location, set_or_reader, extend_prop_keys, file_props) {} + + + template SetTextWriter( const std::string& location, + const U& set_or_reader, + const std::vector& extend_prop_keys, + const std::vector& extend_elem_prop_keys, + const std::map& file_props = std::map()) + : SetWriter(location, set_or_reader, extend_prop_keys, extend_elem_prop_keys, file_props) {} + + + void write (const Coord& coord); + + void replace_end_of_file(const Coord& t, off64_t start_pos) {} + + Coord write_first(const Coord& t) + { this->out.seekp((int)this->out.tellp() - 12); write (t); return t; } + + using Writer::write; + + + }; + + + } + + } + +} + +#include "bts/fibre/base/set_writer.cpp.h" + + +#endif diff --git a/src/bts/fibre/base/tensor.cpp.h b/src/bts/fibre/base/tensor.cpp.h new file mode 100644 index 0000000..57c064a --- /dev/null +++ b/src/bts/fibre/base/tensor.cpp.h @@ -0,0 +1,54 @@ +/* + Copyright 2008 Brain Research Institute, Melbourne, Australia + + Written by Thomas G Close, 31/08/2010. + + This file is part of MRtrix. + + MRtrix is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + MRtrix is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with MRtrix. If not, see . + +*/ + +#ifndef /Tractography/src/bts/fibre/tensor.cpp.h +#define + +namespace BTS { + + namespace { + + class { + + //Public static variables, nested classes and typedefs + public: + + + //Protected member variables + protected: + + + //Public member functions + public: + + + //Protected member functions + protected: + + + }; + + } + +} + +#endif /* */ \ No newline at end of file diff --git a/src/bts/fibre/base/tensor.h b/src/bts/fibre/base/tensor.h new file mode 100644 index 0000000..96bfa3a --- /dev/null +++ b/src/bts/fibre/base/tensor.h @@ -0,0 +1,168 @@ +/* + Copyright 2008 Brain Research Institute, Melbourne, Australia + + Written by Thomas G Close, 31/08/2010. + + This file is part of MRtrix. + + MRtrix is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + MRtrix is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with MRtrix. If not, see . + +*/ + +#ifndef __bts_fibre_base_tensor_h__ +#define __bts_fibre_base_tensor_h__ + +#include "math/matrix.h" + +namespace BTS { + + namespace Fibre { + + namespace Base { + + template class TensorWriter; + + template class Tensor : public MR::Math::Matrix { + + //Public nested classes and typedefs + public: + + typedef T RowType; + typedef TensorWriter Writer; + + //Protected member variables + protected: + + T tmpl; // Template object on which the tensor is based. + + //Public member functions + public: + + Tensor() {} + + Tensor(const T& fibre_template) + : MR::Math::Matrix(fibre_template.vsize(), fibre_template.vsize()), tmpl (fibre_template) { tmpl.zero(); } + + + Tensor (const T& fibre_template, const MR::Math::Matrix::View& view) + : MR::Math::Matrix(view), tmpl(fibre_template) { tmpl.zero(); } + + + Tensor(const Tensor& t) + : MR::Math::Matrix(t), tmpl(t.tmpl) {} + + + Tensor& operator=(const Tensor& t) + { MR::Math::Matrix::operator=(t); tmpl = t.tmpl; return *this; } + + Tensor& operator=(const MR::Math::Matrix& m) + { assert(m.rows() == vsize()); assert(m.columns() == vsize()); MR::Math::Matrix::operator=(m); return *this; } + + Tensor& operator=(double c) + { MR::Math::Matrix::operator=(c); return *this; } + + + Tensor& reset(const T& fibre_template) { + tmpl = fibre_template; + tmpl.zero(); + MR::Math::Matrix::resize(tmpl.vsize(), tmpl.vsize()); + zero(); + return *this; + } + + + Tensor& zero() + { MR::Math::Matrix::operator=(0.0); return *this; } + + + Tensor& invalidate() + { MR::Math::Matrix::operator=(NAN); return *this; } + + + T get_template() const + { return tmpl; } + + + double vsize() const + { return tmpl.vsize(); } + + + Tensor& operator+= (double c) + { MR::Math::Matrix::operator+=(c); return *this; } + + + Tensor& operator-= (double c) + { MR::Math::Matrix::operator-=(c); return *this; } + + + Tensor& operator*= (double c) + { MR::Math::Matrix::operator*=(c); return *this; } + + + Tensor& operator/= (double c) + { MR::Math::Matrix::operator/=(c); return *this; } + + + Tensor operator+ (double c) const + { Tensor answer (*this); answer += c; return answer;} + + + Tensor operator- (double c) const + { Tensor answer (*this); answer -= c; return answer;} + + + Tensor operator* (double c) const + { Tensor answer (*this); answer *= c; return answer;} + + + Tensor operator/ (double c) const + { Tensor answer (*this); answer /= c; return answer;} + + + Tensor& operator+= (const Tensor& t) + { MR::Math::Matrix::operator+=(t); return *this; } + + + Tensor& operator-= (const Tensor& t) + { MR::Math::Matrix::operator+=(t); return *this; } + + + Tensor operator+ (const Tensor& t) const + { Tensor answer (*this); answer += t; return answer;} + + + Tensor operator- (const Tensor& t) const + { Tensor answer (*this); answer -= t; return answer;} + + + using MR::Math::Matrix::operator+=; + + + }; + + + template Tensor operator+ (double c, const Tensor& t) + { return t + c; } + + template Tensor operator* (double c, const Tensor& t) + { return t * c; } + + } + + } + +} + + +#endif /* __bts_fibre_base_tensor_h__ */ diff --git a/src/bts/fibre/base/tensor/writer2.cpp.h b/src/bts/fibre/base/tensor/writer2.cpp.h new file mode 100644 index 0000000..c2ade46 --- /dev/null +++ b/src/bts/fibre/base/tensor/writer2.cpp.h @@ -0,0 +1,74 @@ +/* + Copyright 2008 Brain Research Institute, Melbourne, Australia + + Written by Thomas G Close, 10/08/2010. + + This file is part of MRtrix. + + MRtrix is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + MRtrix is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with MRtrix. If not, see . + +*/ + +#ifndef __bts_tensor_writer2_cpp_h__ +#define __bts_tensor_writer2_cpp_h__ + + + +#include "bts/fibre/tensor/writer2.h" + +namespace BTS { + + namespace Fibre { + + namespace Tensor { + + template const std::string Writer2::HEADER_PREAMBLE = "%%% Keys %%%:"; + + + template void Writer2::create (const std::string& location, const T& template_value) { + + header = Unzipper::header(template_value); + template_length = Unzipper::size(template_value); + + out.open(location.c_str()); + + out << HEADER_PREAMBLE; + + for (std::vector::iterator key_it = header.begin(); key_it != header.end(); ++key_it) + out << *key_it << " "; + + out << std::endl; + + } + + + template void Writer2::append(const MR::Math::Matrix& tensor) { + + if (template_length != tensor.rows()) + throw Exception ("Length of tensor matrix (" + str(tensor.rows()) + ") did not match size of template value vector (" + str(template_length) + ")."); + + out << tensor; + + out.flush(); + + } + + + } + + } + +} + +#endif /* __bts_tensor_writer2_cpp_h__ */ diff --git a/src/bts/fibre/base/tensor/writer2.h b/src/bts/fibre/base/tensor/writer2.h new file mode 100644 index 0000000..f583833 --- /dev/null +++ b/src/bts/fibre/base/tensor/writer2.h @@ -0,0 +1,79 @@ +/* + Copyright 2008 Brain Research Institute, Melbourne, Australia + + Written by Thomas G Close, 10/08/2010. + + This file is part of MRtrix. + + MRtrix is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + MRtrix is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with MRtrix. If not, see . + +*/ + +#ifndef __bts_fibre_tensor_writer2_h__ +#define __bts_fibre_tensor_writer2_h__ + +namespace BTS { + + namespace Fibre { + + namespace Tensor { + + template class Writer2 { + + //Public static variables, nested classes and typedefs + public: + + static const std::string HEADER_PREAMBLE; + + //Protected member variables + protected: + + std::vector header; + size_t template_length; + std::ofstream out; + + //Public member functions + public: + + Writer2() {} + + Writer2(const std::string& location, const T& template_value = T()) + { create(location, template_value); } + + Writer2(const std::string& location, size_t size) + { create(location, size); } + + ~Writer2() + { close(); } + + void close() + { out.close(); } + + void create (const std::string& location, size_t size) + { create(location, T(size)); } + + void create (const std::string& location, const T& template_value); + + void append(const MR::Math::Matrix& tensor); + + + }; + + } + + } + +} + +#endif /* __bts_fibre_tensor_writer2_h__ */ diff --git a/src/bts/fibre/base/tensor_writer.cpp.h b/src/bts/fibre/base/tensor_writer.cpp.h new file mode 100644 index 0000000..d5d1ff8 --- /dev/null +++ b/src/bts/fibre/base/tensor_writer.cpp.h @@ -0,0 +1,149 @@ +/* + Copyright 2008 Brain Research Institute, Melbourne, Australia + + Written by Thomas G Close, 10/08/2010. + + This file is part of MRtrix. + + MRtrix is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + MRtrix is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with MRtrix. If not, see . + +*/ + +#ifndef __bts_fibre_base_tensorwriter_cpp_h__ +#define __bts_fibre_base_tensorwriter_cpp_h__ + +#include "bts/fibre/base/tensor_writer.h" + +namespace BTS { + + namespace Fibre { + + namespace Base { + + template const std::string TensorWriter::HEADER_PREAMBLE = "%%% Keys %%%:"; + + + template void TensorWriter::create (const std::string& location, const typename T::RowType& template_value) { + + hdr = header(template_value); + template_length = template_value.vsize(); + + out.open(location.c_str()); + + out << HEADER_PREAMBLE; + + for (std::vector::iterator key_it = hdr.begin(); key_it != hdr.end(); ++key_it) + out << *key_it << " "; + + out << std::endl; + + } + + + template void TensorWriter::append(const T& tensor) { + + if (template_length != tensor.rows()) + throw Exception ("Number of rows in tensor matrix (" + str(tensor.rows()) + ") did not match size of template (" + str(template_length) + ")."); + + if (template_length != tensor.columns()) + throw Exception ("Number of columns in tensor matrix (" + str(tensor.columns()) + ") did not match size of template (" + str(template_length) + ")."); + + out << (MR::Math::Matrix&)tensor; + + } + + + + + template std::vector TensorWriter::header(const typename T::RowType& tmplate) { + + std::vector headr; + + header_element(tmplate, headr, ""); + + return headr; + + } + + + template void TensorWriter::header_element( const Strand& strand, + std::vector& header, + const std::string& prefix) { + + for (size_t prop_i = 0; prop_i < strand.num_props(); ++prop_i) + header.push_back(prefix + strand.prop_key(prop_i) + ">"); + + for(uint degree_i = 0; degree_i < strand.degree(); degree_i++) + header_element(strand[degree_i], header, prefix + "degree" + str(degree_i) + ">"); + + } + + + template void TensorWriter::header_element( const Tractlet& tractlet, + std::vector& header, + const std::string& prefix) { + + + for (size_t prop_i = 0; prop_i < tractlet.num_props(); ++prop_i) + header.push_back(prefix + tractlet.prop_key(prop_i) + ">"); + + for (uint ax_i = 0; ax_i < 3; ax_i++) + header_element(tractlet[ax_i], header, prefix + "axis" + str(ax_i) + ">"); + + + } + + + template void TensorWriter::header_element(const Tractlet::Set& set, + std::vector& header, + const std::string& prefix) { + + for (size_t prop_i = 0; prop_i < set.num_props(); ++prop_i) + header.push_back(prefix + set.prop_key(prop_i) + ">"); + + for (uint elem_i = 0; elem_i < set.size(); elem_i++) + header_element(set[elem_i], header, prefix + "tractlet" + str(elem_i) + ">"); + + } + + + template void TensorWriter::header_element(const Strand::Set& set, + std::vector& header, + const std::string& prefix) { + + for (size_t prop_i = 0; prop_i < set.num_props(); ++prop_i) + header.push_back(prefix + set.prop_key(prop_i) + ">"); + + for (uint elem_i = 0; elem_i < set.size(); elem_i++) + header_element(set[elem_i], header, prefix + "strand" + str(elem_i) + ">"); + + } + + + template void TensorWriter::header_element(const Coord& element, + std::vector& header, + const std::string& prefix) { + + for(uint dim_i = 0; dim_i < 3; dim_i++) + header.push_back(prefix + "dim" + str(dim_i) + ">"); + + } + + } + + } + +} + +#endif /* __bts_fibre_base_tensorwriter_cpp_h__ */ diff --git a/src/bts/fibre/base/tensor_writer.h b/src/bts/fibre/base/tensor_writer.h new file mode 100644 index 0000000..fef5fe4 --- /dev/null +++ b/src/bts/fibre/base/tensor_writer.h @@ -0,0 +1,93 @@ +/* + Copyright 2008 Brain Research Institute, Melbourne, Australia + + Written by Thomas G Close, 10/08/2010. + + This file is part of MRtrix. + + MRtrix is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + MRtrix is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with MRtrix. If not, see . + +*/ + +#ifndef __bts_fibre_base_tensorwriter_h__ +#define __bts_fibre_base_tensorwriter_h__ + +#include "bts/fibre/strand.h" +#include "bts/fibre/tractlet.h" + +namespace BTS { + + namespace Fibre { + + namespace Base { + + template class TensorWriter { + + //Public static variables, nested classes and typedefs + public: + + static const std::string HEADER_PREAMBLE; + + //Protected member variables + protected: + + std::vector hdr; + size_t template_length; + std::ofstream out; + + public: + + static std::vector header(const typename T::RowType& tmplate); + + static void header_element(const Strand& tmplate, std::vector& header, const std::string& prefix); + static void header_element(const Tractlet& tmplate, std::vector& header, const std::string& prefix); + static void header_element(const Strand::Set& tmplate, std::vector& header, const std::string& prefix); + static void header_element(const Tractlet::Set& tmplate, std::vector& header, const std::string& prefix); + static void header_element(const Coord& tmplate, std::vector& header, const std::string& prefix); + + //Public member functions + public: + + TensorWriter() {} + + TensorWriter(const std::string& location, const typename T::RowType& template_value = typename T::RowType()) + { create(location, template_value); } + + TensorWriter(const std::string& location, size_t size) + { create(location, size); } + + ~TensorWriter() + { close(); } + + void close() + { out.close(); } + + void create (const std::string& location, size_t size) + { create(location, T(size)); } + + void create (const std::string& location, const typename T::RowType& template_value); + + void append(const T& tensor); + + + }; + + } + + } + +} + + +#endif /* __bts_fibre_base_tensorwriter_h__ */ diff --git a/src/bts/fibre/base/writer.cpp.h b/src/bts/fibre/base/writer.cpp.h new file mode 100644 index 0000000..9bdaefe --- /dev/null +++ b/src/bts/fibre/base/writer.cpp.h @@ -0,0 +1,341 @@ +/* + Copyright 2010 Brain Research Institute/National ICT Australia (NICTA), Melbourne, Australia + + Written by Thomas G Close, 04/06/2010. + + This file is part of Bayesian Tractlet Sampling (BTS). + + BTS is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + BTS is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with BTS. If not, see . + +*/ + +#ifndef __bts_fibre_base_writer_cpp_h__ +#define __bts_fibre_base_writer_cpp_h__ + +#include "mrtrix.h" +#include "bts/version.h" + +namespace BTS { + + namespace Fibre { + + namespace Base { + + template void Writer::create(const std::string& location, + const std::vector& prop_keys, + const std::vector extend_prop_keys, + std::map file_props) { + + + //Combine prop keys and extended prop keys into one header vector. + std::vector prop_header; + + for (size_t prop_i = 0; prop_i < prop_keys.size(); ++prop_i) + prop_header.push_back(prop_keys[prop_i]); + + prop_header.insert(prop_header.end(), extend_prop_keys.begin(), extend_prop_keys.end()); + + file_props["software version"] = version_number_string(); + file_props["datetime"] = current_datetime(); + + out.open (location.c_str(), std::ios::out | std::ios::binary); + if (!out) throw Exception ("error creating tracks file \"" + location + "\": " + strerror (errno)); + + out << "mrtrix tracks\nEND\n"; + for (std::map::const_iterator i = file_props.begin(); i != file_props.end(); ++i) + out << i->first << ": " << i->second << "\n"; + + out << "datatype: " << dtype.specifier() << "\n"; + int64_t data_offset = int64_t(out.tellp()) + 65; + out << "file: . " << data_offset << "\n"; + out << "count: "; + count_offset = out.tellp(); + out << "\nEND\n"; + out.seekp (0); + out << "mrtrix tracks "; + out.seekp (data_offset); + write (Reader::END_OF_DATA); + + prop_hdr = prop_header; + + std::string props_row_location = location + "x"; + + if (prop_hdr.size()) { + + ext_out.open((props_row_location).c_str()); + + write_props_header(ext_out, prop_hdr); + + } else if (File::exists(props_row_location)) + + File::remove(props_row_location); + + this->count = this->total_count = 0; + + } + + + + template void Writer::append (const T& fibre_object, std::map properties_row) { + + // Record position of current END_OF_DATA marker, so it can be replaced as the last step, thus ensuring + // that the subsequent fibre object is completely written before the END_OF_DATA marker is updated. + off64_t start_pos = this->out.tellp(); + + // Holds the Triple that will replace the END_OF_DATA marker in the final step + Coord first_coord; + + if (fibre_object.size()) { + + // Writes the first fibre object minus the first coord, which is returned to replace the END_OF_DATA marker in the final step. + first_coord = write_first(fibre_object[0]); + + // Write the remaining fibre objects to the file + for (size_t fibre_i = 1; fibre_i < fibre_object.size(); fibre_i++) + write (fibre_object[fibre_i]); + + // Write the seperator sequence which denotes the end of the fibre object. + write (T::FILE_SEPARATOR); + + } else + // If the fibre_object is of size 0, the first coord will be simply the file seperator. + first_coord = T::FILE_SEPARATOR; + + // Write the new END_OF_DATA marker at the new end of the file. + write (Reader::END_OF_DATA); + + this->out.flush(); + + // Now that the rest of the object is completely written replace the END_OF_DATA marker with the first element to complete write. + replace_end_of_file (first_coord, start_pos); + + // Add extended row properties to accompanying text file. + append_extend_elem_props_row (fibre_object, properties_row); + + // Update the fibre object count. + increment_count(); + + + } + + + // 'write' and 'write_first' work by recursion. To use this fibre the fibre objects are only required to implement the 'operator[] + // ()' and have a const static Coord field called FILE_SEPARATOR. The recursion stops when the operator[]() returns a Coord. + template template inline void Writer::write(const U& fibre_object) { + + for (size_t fibre_i = 0; fibre_i < fibre_object.size(); fibre_i++) + write(fibre_object[fibre_i]); + + write (U::FILE_SEPARATOR); + + } + + + template template inline Coord Writer::write_first(const U& fibre_object) { + + Coord first_coord; + + if (fibre_object.size()) { + + first_coord = write_first(fibre_object[0]); + + for (size_t fibre_i = 1; fibre_i < fibre_object.size(); fibre_i++) + write(fibre_object[fibre_i]); + + write (U::FILE_SEPARATOR); + + } else + + first_coord = U::FILE_SEPARATOR; + + return first_coord; + + } + + + template void Writer::write(const Coord& t) { + + using namespace MR::ByteOrder; + + if (this->dtype == MR::DataType::Float64LE) { + + double x[3]; + + x[0] = MR::ByteOrder::LE(t[0]); + x[1] = MR::ByteOrder::LE(t[1]); + x[2] = MR::ByteOrder::LE(t[2]); + + this->out.write ((const char*) &x[0], 3*sizeof(double)); + + } else if (this->dtype == MR::DataType::Float64BE) { + + double x[3]; + + x[0] = MR::ByteOrder::BE(t[0]); + x[1] = MR::ByteOrder::BE(t[1]); + x[2] = MR::ByteOrder::BE(t[2]); + + this->out.write ((const char*) &x[0], 3*sizeof(double)); + + } else if (this->dtype == MR::DataType::Float32LE) { + + float x[3]; + + x[0] = MR::ByteOrder::LE(t[0]); + x[1] = MR::ByteOrder::LE(t[1]); + x[2] = MR::ByteOrder::LE(t[2]); + + this->out.write ((const char*) &x[0], 3*sizeof(float)); + + } else if (this->dtype == MR::DataType::Float32BE) { + + float x[3]; + + x[0] = MR::ByteOrder::BE(t[0]); + x[1] = MR::ByteOrder::BE(t[1]); + x[2] = MR::ByteOrder::BE(t[2]); + + this->out.write ((const char*) &x[0], 3*sizeof(float)); + + } else + throw Exception ("Unsupported dataype '" + str(this->dtype.specifier()) + "'."); + + + + } + + + //NB:: that the first coord is saved until last before overwriting the previous END_OF_DATA marker. + // This specialization of the template function write_first is the termination of a recursion + template Coord Writer::write_first(const Coord& t) { + + return t; + + } + + + template void Writer::update_count() { + + off64_t current_pos = this->out.tellp(); + + this->out.seekp (this->count_offset); + this->out << this->count << "\ntotal_count: " << this->total_count << "\nEND\n"; + + this->out.seekp(current_pos); + + } + + + template void Writer::replace_end_of_file(const Coord& t, + off64_t start_pos) { + + off64_t current = this->out.tellp(); + this->out.seekp(start_pos - sizeof_coord); + write(t); + this->out.seekp(current); + + } + + + template void Writer::check_properties_row(const std::map& properties_row) { + + if (properties_row.size() != this->prop_hdr.size()) { + + //Generate list of header for error message. + std::vector header; + for (std::map::const_iterator key_it = properties_row.begin(); key_it != properties_row.end(); key_it++) + header.push_back(key_it->first); + + //Throw Exception + throw Exception ("Supplied row properties (" + str (header) + + ") does not match the number of supplied header (" + str(prop_hdr) + "\")."); + } + + } + + + template void Writer::append_extend_elem_props_row (const T& fibre_object, + std::map& properties_row) { + fibre_object.insert_props(properties_row); + + write_properties_row(this->prop_hdr, properties_row, this->ext_out); + + } + + + template void Writer::append_extend_elem_props_row (std::map& properties_row) { + + write_properties_row(this->prop_hdr, properties_row, this->ext_out); + + } + + + template void Writer::write_properties_row(const std::vector& properties_header, + std::map& properties_row, + std::ofstream& fout) { + + for (std::vector::const_iterator hdr_it = properties_header.begin(); hdr_it != properties_header.end(); hdr_it++) { + + if (!properties_row.count(*hdr_it)) + throw Exception ("Did not find value corresponding to property '" + *hdr_it + "'."); + + fout << properties_row[*hdr_it] << '\t'; + + } + + fout << std::endl; + + } + + + template void Writer::init() { + + if (this->dtype == MR::DataType::Float64LE || this->dtype == MR::DataType::Float64BE) + sizeof_coord = 3 * sizeof(double); + else if (this->dtype == MR::DataType::Float32LE || this->dtype == MR::DataType::Float32BE) + sizeof_coord = 3 * sizeof(float); + else + throw Exception ("Unsupported dataype '" + str(this->dtype.specifier()) + "'."); + + + } + + + template void Writer::write_props_header(std::ofstream& out, const std::vector& header) { + + out << Reader::PROP_FILE_PREAMBLE; + + for (std::vector::const_iterator key_it = header.begin(); key_it != header.end(); key_it++) + out << *key_it << '\t'; + + out << std::endl; + + } + + + template void TextWriter::write (const Coord& coord) { + + this->out << "\n" << coord[X] << " " << coord[Y] << " " << coord[Z]; + this->out.flush(); + + } + + + } + + } + +} + +#endif /* __bts_fibre_writer_icpp__ */ diff --git a/src/bts/fibre/base/writer.h b/src/bts/fibre/base/writer.h new file mode 100644 index 0000000..4ca2b31 --- /dev/null +++ b/src/bts/fibre/base/writer.h @@ -0,0 +1,242 @@ +/* + Copyright 2010 Brain Research Institute/National ICT Australia (NICTA), Melbourne, Australia + + Written by Thomas G Close, 5/05/09. + + This file is part of Bayesian Tractlet Sampling (BTS). + + BTS is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + BTS is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with BTS. If not, see . + +*/ + +#ifndef __bts_fibre_base_writer_forward_h__ +#define __bts_fibre_base_writer_forward_h__ + +namespace BTS { + + namespace Fibre { + + namespace Base { + + template class Writer; + + } + + } + +} +#include "data_type.h" +#include "get_set.h" + +#include "bts/coord.h" + +#include "bts/file.h" + +#include "bts/fibre/properties/extended.h" +#include "bts/fibre/base/reader.h" + +namespace BTS { + + namespace Fibre { + + namespace Base { + + template class Writer { + + public: + + static void write_props_header(std::ofstream& out, const std::vector& header); + + public: + + size_t count, total_count; + + // Protected member fields. + protected: + + + std::ofstream out; + MR::DataType dtype; + int64_t count_offset; + + std::vector prop_hdr; + std::ofstream ext_out; + + size_t sizeof_coord; + + // Public methods and constructors + public: + + Writer() { init(); } + + template Writer (const std::string& location, + const U& template_or_reader, + std::map file_props = std::map()) + { init(); create(location, template_or_reader, file_props); } + + + template Writer (const std::string& location, + const U& template_or_reader, + const std::vector extend_prop_keys, + std::map file_props = std::map()) + { init(); create(location, template_or_reader, extend_prop_keys, file_props); } + + + template Writer (const std::string& location, + const std::vector& prop_keys, + const std::vector extend_prop_keys, + std::map file_props = std::map()) + { init(); create(location, prop_keys, extend_prop_keys, file_props); } + + + virtual ~Writer() + { close(); } + + + template void create (const std::string& location, + const U& template_or_reader, + std::map file_props = std::map()) + { create(location, Object::select_props(template_or_reader.prop_keys()), std::vector(), file_props); } + + + template void create (const std::string& location, + const U& template_or_reader, + const std::vector extend_prop_keys, + std::map file_props = std::map()) + { create(location, Object::select_props(template_or_reader.prop_keys()), std::vector(), file_props); } + + + void append (const T& fibre_object, std::map properties_row = std::map()); + + + void close () { + out.seekp (count_offset); + out << count << "\ntotal_count: " << total_count << "\nEND\n"; + out.close(); + ext_out.close(); + } + + + std::ofstream& get_out_stream() { return this->out; } + + off64_t get_count_offset() { return this->count_offset; } + + size_t get_count() { return this->count; } + + size_t get_total_count() { return this->total_count; } + + void override_count(size_t count) {this->count = count; } + + void override_total_count(size_t count) {this->total_count = count; } + + // Protected methods and constructors + protected: + +#ifdef FAST_READWRITE //Will inline writing file to avoid overhead call. However, this will remove the ability to write to text files (usually only used for debugging though). + void write (const Coord& coord); +#else + virtual void write (const Coord& coord); +#endif + +#ifdef FAST_READWRITE //Will inline writing file to avoid overhead call. However, this will remove the ability to write to text files (usually only used for debugging though). + Coord write_first (const Coord& coord); +#else + virtual Coord write_first (const Coord& coord); +#endif + + template void write (const U& fibre_object); + + template Coord write_first(const U& fibre_object); + + void increment_count() + { ++this->count; ++this->total_count; update_count(); } + + void append_file_seperator(); + + void update_count(); + + void check_properties_row(const std::map& properties_row); + + void append_extend_elem_props_row(std::map& properties_row); + + void append_extend_elem_props_row(const T& fibre_object, std::map& properties_row); + + static void write_properties_row( const std::vector& key_list, + std::map& properties_row, + std::ofstream& fout); + +#ifdef FAST_WRITE //Will inline writing file to avoid overhead call. However, this will remove the ability to write to text files. + void replace_end_of_file(const Coord& t, off64_t start_pos); +#else + virtual void replace_end_of_file(const Coord& t, off64_t start_pos); +#endif + + void init(); + + void create (const std::string& location, + const std::vector& prop_keys, + const std::vector extend_prop_keys, + std::map file_props); + + + friend class Set; + + }; + + + template class TextWriter : public Fibre::Base::Writer { + + //Public static variables, nested classes and typedefs + public: + + + TextWriter() {} + + template TextWriter (const std::string& location, + const U& template_or_reader, + std::map file_props = std::map()) + : Writer(location, template_or_reader, file_props) {} + + + template TextWriter (const std::string& location, + const U& template_or_reader, + const std::vector extend_prop_keys, + std::map file_props = std::map()) + : Writer(location, template_or_reader, extend_prop_keys, file_props) {} + + + void write (const Coord& coord); + + void replace_end_of_file(const Coord& c, off64_t start_pos) {} + + Coord write_first(const Coord& c) + { this->out.seekp((int)this->out.tellp() - 12); write (c); return c; } + + using Fibre::Base::Writer::write; + + + }; + + + } + + } + +} + +#include "bts/fibre/base/writer.cpp.h" + +#endif /* __bts_fibre_base_writer_h__ */ + + diff --git a/src/bts/fibre/properties/extended.cpp b/src/bts/fibre/properties/extended.cpp new file mode 100644 index 0000000..8d4a36d --- /dev/null +++ b/src/bts/fibre/properties/extended.cpp @@ -0,0 +1,322 @@ +/* + Copyright 2010 Brain Research Institute/National ICT Australia (NICTA), Melbourne, Australia + + Written by Thomas G Close, 04/06/2010. + + This file is part of Bayesian Tractlet Sampling (BTS). + + BTS is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + BTS is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with BTS. If not, see . + +*/ + + +//#include "bts/fibre/properties/extended.h" +// +//namespace BTS { +// +// namespace Fibre { +// +// const std::string Properties::Extended::FILE_PREAMBLE = "%%% Extended Properties File %%% - keys: "; +// +// +// void Properties::Extended::add_extend_elem_prop (const std::string& key, const std::string& default_value) { +// +// //If key is not already present. +// if (!key_index.count(key)) { +// +// key_index[key] = header.size(); +// header.push_back(key); +// default_values.push_back(default_value); +// +// values.push_back ( std::vector(num_rows(), default_value) ); +// +// } else +// default_values[key_index[key]] = default_value; +// +// } +// +// +// void Properties::Extended::add_extend_elem_props (const std::vector& header, const std::vector& default_values) { +// +// if (header.size() != default_values.size()) +// throw Exception ("Number of header (" + str(header.size()) + ") and default values (" + str(default_values.size()) + ") do not match"); +// +// for (size_t key_i = 0; key_i < header.size(); key_i++) +// add_extend_elem_prop(header[key_i], default_values[key_i]); +// +// } +// +// +// void Properties::Extended::remove_extend_elem_prop (const std::string& key) { +// +// if (key_index.count(key)) { +// +// size_t index = key_index[key]; +// +// header.erase(header.begin() + index); +// default_values.erase(default_values.begin() + index); +// values.erase(values.begin() + index); +// key_index.erase(key); +// +// } +// +// } +// +// +// std::string Properties::Extended::get_extend_elem_prop(std::string key, size_t row_index) const { +// +// check_key(key); +// check_row_index(row_index); +// +// size_t key_i = key_index.find(key)->second; +// +// //Can't use operator[] for key_index since 'this' is const. NB: Key is guaranteed to exist in 'key_index' from the 'check_key()' function. +// std::string value = values[key_i][row_index]; +// +// //FIXME: Doesn't need to be here just for debugging. +// std::string value_out = value + ""; +// +// return value_out; +// +// } +// +// +// void Properties::Extended::set_extend_elem_prop(std::string key, std::string value, size_t row_index) { +// +// check_key(key); +// check_row_index(row_index); +// +// values[key_index[key]][row_index] = value; +// +// } +// +// +// std::vector Properties::Extended::parse_line(const std::string& line) { +// +// std::istringstream line_stream(line); +// +// std::string value; +// std::vector values_row; +// +// while(std::getline(line_stream, value, '\t')) +// values_row.push_back(value); +// +// return values_row; +// +// } +// +// +// std::string Properties::Extended::make_line(const std::vector& values) { +// +// std::string line; +// +// std::ostringstream line_stream; +// +// for (std::vector::const_iterator it = values.begin(); it != values.end(); ++it) +// line_stream << it->c_str() << '\t'; +// +// line_stream << std::endl; +// +// return line_stream.str(); +// +// } +// +// +// +// void Properties::Extended::read_props_preamble(std::ifstream& file_in) { +// +// check_good(file_in); +// +// char file_intro[FILE_PREAMBLE.size()+2]; +// +// file_in.get(file_intro, FILE_PREAMBLE.size()+1); +// +// if (strcmp(file_intro, FILE_PREAMBLE.c_str())) +// throw Exception ("Required file intro '" + FILE_PREAMBLE + "' was not found at start of extended properties file (found '" + std::string(file_intro) +"' instead)."); +// +// } +// +// +// std::vector Properties::Extended::read_props_header(std::ifstream& file_in) { +// +// read_props_preamble(file_in); +// +// check_good(file_in); +// +// std::vector header; +// +// std::string key_line; +// +// if (!std::getline(file_in, key_line)) +// throw Exception ("No header found in extended properties file."); +// +// std::istringstream line_stream(key_line); +// +// std::string key; +// +// header.clear(); +// +// while(std::getline(line_stream, key, '\t')) +// header.push_back(key); +// +// return header; +// +// } +// +// +// void Properties::Extended::write_header(std::ofstream& out, const Header& header) { +// +// out << FILE_PREAMBLE; +// +// for (std::vector::const_iterator key_it = header.begin(); key_it != header.end(); key_it++) +// out << *key_it << '\t'; +// +// out << std::endl; +// +// } +// +// +// void Properties::Extended::load(std::string location) { +// +// clear(); +// +// std::ifstream in; +// in.open(location.c_str()); +// this->file_location = location; +// +// header = read_props_header(in); +// +// for (size_t key_i = 0; key_i < header.size(); key_i++) +// key_index[header[key_i]] = key_i; +// +// std::string line; +// +// while (std::getline(in, line)) +// add_row(parse_line(line)); +// +// +// file_location.clear(); +// +// +// } +// +// +// void Properties::Extended::save(std::string location) { +// +// std::ofstream out; +// +// out.open(location.c_str()); +// +// write_header(out, header); +// +// for (size_t row_i = 0; row_i < num_rows(); row_i++) { +// +// for (size_t key_i = 0; key_i < num_extend_elem_props(); key_i++) +// +// out << values[key_i][row_i] << '\t'; +// +// out << std::endl; +// +// } +// +// } +// +// +// Properties Properties::Extended::get_row(size_t row_index) const { +// +// Properties properties; +// +// for (size_t key_i = 0; key_i < header.size(); key_i++) { +// +// properties[header[key_i]] = values[key_i][row_index]; +// +// } +// +// return properties; +// +// } +// +// +// void Properties::Extended::add_row(const std::vector& values_row) { +// +// check_row_size(values_row); +// +// for (size_t key_i = 0; key_i < num_extend_elem_props(); key_i++) +// this->values[key_i].push_back(values_row[key_i]); +// +// nrows++; +// +// } +// +// +// void Properties::Extended::add_row(const Properties& properties) { +// +// std::vector row(header.size()); +// +// for (size_t key_i = 0; key_i < header.size(); key_i++) { +// +// Properties::const_iterator key_it = properties.find(header[key_i]); +// +// if (key_it == properties.end()) +// throw Exception ("Property '" + header[key_i] + "' not found in added properties row."); +// +// //Can't use operator[] for properties since properties are const. +// row[key_i] = key_it->second; +// +// } +// +// +// for (size_t key_i = 0; key_i < num_extend_elem_props(); key_i++) +// this->values[key_i].push_back(row[key_i]); +// +// nrows++; +// +// } +// +// +// void Properties::Extended::extend_rows(size_t new_num_rows) { +// +// for (size_t key_i = 0; key_i < num_extend_elem_props(); key_i++) { +// for (size_t row_count = num_rows(); row_count <= new_num_rows; row_count++) +// values[key_i].push_back(default_values[key_i]); +// } +// +// } +// +// +// void Properties::Extended::set_row(const Properties& properties, size_t row_index) { +// +// std::vector row(header.size()); +// +// for (size_t key_i = 0; key_i < header.size(); key_i++) { +// +// Properties::const_iterator key_it = properties.find(header[key_i]); +// +// if (key_it == properties.end()) +// throw Exception ("Property '" + header[key_i] + "' not found in added properties row."); +// +// //Can't use operator[] for properties since it is constant. +// row[key_i] = key_it->second; +// +// } +// +// for (size_t key_i = 0; key_i < num_extend_elem_props(); key_i++) +// this->values[key_i][row_index] = row[key_i]; +// +// } +// +// } +// +//} + diff --git a/src/bts/fibre/properties/extended.h b/src/bts/fibre/properties/extended.h new file mode 100644 index 0000000..a22f5d6 --- /dev/null +++ b/src/bts/fibre/properties/extended.h @@ -0,0 +1,210 @@ +/* + Copyright 2009 Brain Research Institute, Melbourne, Australia + + Created by Tom Close on 13/03/09. + + This file is part of Bayesian Tractlet Sampling (BTS). + + BTS is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + BTS is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with BTS. If not, see . + + */ + +// +//#ifndef __bts_fibre_properties_extended_h__ +//#define __bts_fibre_properties_extended_h__ +// +//#include +//#include +//#include +//#include +// +//#include "bts/common.h" +// +//#include "bts/fibre/properties.h" +//#include "bts/fibre/properties/header.h" +// +//namespace BTS { +// +// namespace Fibre { +// +// class Properties::Extended { +// +// protected: +// +// Header header; +// std::vector default_values; +// std::vector< std::vector > values; +// +// //Used to locate the index of the property. +// std::map key_index; +// +// size_t nrows; +// +// //Used to temporarily store the file location for the printing of error messages. +// std::string file_location; +// +// public: +// +// const static std::string FILE_PREAMBLE; +// +// Extended() +// : nrows(0) {} +// +// +// Extended(const Extended& ep) +// : header(ep.header), default_values(ep.default_values), values(ep.values), key_index(ep.key_index), nrows(ep.nrows) {} +// +// +// Extended& operator= (const Extended& ep) +// { header = ep.header; default_values = ep.default_values; values = ep.values; key_index = ep.key_index; nrows = ep.nrows; return *this; } +// +// +// Extended& append(const Extended& ep) { +// +// if (!num_extend_elem_props()) +// this->operator=(ep); +// +// else { +// +// size_t num_props = num_extend_elem_props(); +// +// header.insert(header.end(), ep.header.begin(), ep.header.end()); +// default_values.insert(default_values.end(), ep.default_values.begin(), ep.default_values.end()); +// values.insert(values.end(), ep.values.begin(), ep.values.end()); +// +// for (size_t key_i = 0; key_i < ep.num_extend_elem_props(); key_i++) +// key_index[ep.header[key_i]] = num_props + key_i; +// +// } +// +// return *this; +// +// } +// +// size_t num_rows() const +// { return nrows; } +// +// +// size_t num_extend_elem_props() const +// { return header.size(); } +// +// +// void clear() +// { header.clear(); default_values.clear(); values.clear(); key_index.clear(); nrows = 0; } +// +// +// Header get_header() const +// { return header; } +// +// +// std::vector get_default_values () const +// { return default_values; } +// +// +// void add_extend_elem_prop (const std::string& key, const std::string& default_value); +// +// +// void add_extend_elem_props (const Header& header, const std::vector& default_values); +// +// +// void remove_extend_elem_prop(const std::string& key); +// +// +// std::string get_extend_elem_prop(std::string key, size_t row_index) const; +// +// +// template U get_extend_elem_prop(std::string key, size_t row_index) const +// { return to(get_extend_elem_prop(key,row_index)); } +// +// +// Properties get_row(size_t row_index) const; +// +// +// void set_extend_elem_prop(std::string key, std::string value, size_t row_index); +// +// +// void set_row(const Properties& properties, size_t row_index); +// +// +// bool has_extend_elem_prop(const std::string& key) const +// { return key_index.count(key); } +// +// +// void add_row() +// { for (size_t key_i = 0; key_i < num_extend_elem_props(); key_i++) values[key_i].push_back(default_values[key_i]); nrows++; } +// +// void erase_row(size_t index) +// { for (size_t key_i = 0; key_i < num_extend_elem_props(); key_i++) values[key_i].erase(values[key_i].begin() + index); } +// +// +// void add_row(const Properties& properties); +// +// +// void extend_rows(size_t num_rows); +// +// +// void load(std::string location); +// +// +// void save(std::string location); +// +// +// static std::vector parse_line(const std::string& line); +// +// +// static std::string make_line(const std::vector& values); +// +// +// static Header read_props_header(std::ifstream& line); +// +// +// static void write_header(std::ofstream& out, const Header& header); +// +// +// +// protected: +// +// void check_key (const std::string& key) const +// { if (!key_index.count(key)) throw Exception ("Property '" + key + "' was not found."); } +// +// +// void check_row_index (size_t row_index) const +// { if (row_index >= num_rows()) throw Exception ("Properties row index '" + str(row_index) + "' out of range (" + str(num_rows()) + ")."); } +// +// +// void check_row_size(const std::vector& row) +// { if (row.size() >= num_extend_elem_props()) throw Exception ("Size of new row (" + str(row.size()) + ") does not match number of properties (" + str(num_extend_elem_props()) +")."); } +// +// +// static void check_good(std::ifstream& in) +// { if (!in.good()) throw Exception ("Could not read from properties file."); } +// +// +// static void read_props_preamble(std::ifstream& in); +// +// +// void add_row(const std::vector& values_row); +// +// +// +// }; +// +// +// +// } +//} +// +//#include "bts/fibre/properties/header.h" +// +//#endif /* __bts_fibre_properties_extended_h__ */ diff --git a/src/bts/fibre/properties/header.cpp.h b/src/bts/fibre/properties/header.cpp.h new file mode 100644 index 0000000..10e1c1e --- /dev/null +++ b/src/bts/fibre/properties/header.cpp.h @@ -0,0 +1,52 @@ +/* + Copyright 2010 Brain Research Institute/National ICT Australia (NICTA), Melbourne, Australia + + Written by Thomas G Close, 07/06/2010. + + This file is part of Bayesian Tractlet Sampling (BTS). + + BTS is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + BTS is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with BTS. If not, see . + +*/ +// +//#ifndef __bts_fibre_properties_header_cpp_h__ +//#define __bts_fibre_properties_header_cpp_h__ +// +//#include "bts/fibre/properties/header.h" +// +//namespace BTS { +// +// namespace Fibre { +// +// inline bool std::vector::remove_key(const std::string& key) { +// +// std::vector::iterator key_it = std::find(begin(), end(), key); +// +// bool found; +// +// if (key_it == end()) +// found = false; +// else { +// erase(key_it); +// found = true; +// } +// +// return found; +// +// } +// +// } +//} +// +//#endif diff --git a/src/bts/fibre/properties/header.h b/src/bts/fibre/properties/header.h new file mode 100644 index 0000000..2473947 --- /dev/null +++ b/src/bts/fibre/properties/header.h @@ -0,0 +1,59 @@ +/* + Copyright 2010 Brain Research Institute/National ICT Australia (NICTA), Melbourne, Australia + + Written by Thomas G Close, 04/06/2010. + + This file is part of Bayesian Tractlet Sampling (BTS). + + BTS is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + BTS is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with BTS. If not, see . + +*/ +// +//#ifndef __bts_fibre_properties_header_h__ +//#define __bts_fibre_properties_header_h__ +// +//#include "bts/fibre/properties/extended.h" +// +//namespace BTS { +// +// namespace Fibre { +// +// class std::vector : public std::vector { +// +// +// //Public member functions +// public: +// +// Header() {} +// +// Header(const std::vector& header) : std::vector(header) {} +// +// ~Header() {} +// +// Header& operator=(const std::vector& header) +// { std::vector::operator=(header); return *this; } +// +// +//// //Protected member functions +//// protected: +// +// bool remove_key(const std::string& key); +// +// }; +// +// +// } +//} +// +//#endif /* __bts_fibre_properties_header_h__ */ diff --git a/src/bts/fibre/strand.cpp b/src/bts/fibre/strand.cpp new file mode 100644 index 0000000..b10233a --- /dev/null +++ b/src/bts/fibre/strand.cpp @@ -0,0 +1,753 @@ +/* + Copyright 2008 Brain Research Institute, Melbourne, Australia + + Written by Thomas G Close, 07/08/2010. + + This file is part of MRtrix. + + MRtrix is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + MRtrix is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with MRtrix. If not, see . + +*/ + +#include "math/matrix.h" +#include "math/least_squares.h" + +#include "bts/math/odr.h" +#include "bts/fibre/track.h" +#include "bts/fibre/tractlet.h" +#include "bts/fibre/strand/section.h" + +namespace BTS { + + namespace Fibre { + + const Coord Strand::FILE_SEPARATOR = Triple (NAN, NAN, NAN); + + const char* Strand::PROPS_LIST[] = { Object::ACS_SQRT_PROP, PROPS_LIST_END }; + + const std::string Strand::FILE_EXTENSION = "str"; + const size_t Strand::DEFAULT_DEGREE = 3; + + + std::map< size_t, std::map< size_t, MR::Math::Matrix > > Strand::position_matrices; + std::map< size_t, std::map< size_t, MR::Math::Matrix > > Strand::position_matrices_w_endpoints; + std::map< size_t, std::map< size_t, MR::Math::Matrix > > Strand::tangent_matrices; + std::map< size_t, std::map< size_t, MR::Math::Matrix > > Strand::inverse_position_matrices; + std::map< size_t, std::map< size_t, MR::Math::Matrix > > Strand::tangent_matrices_w_endpoints; + std::map< size_t, std::map< size_t, MR::Math::Matrix > > Strand::inverse_position_matrices_w_endpoints; + + const double MERGE_FUDGE_FACTOR = 1.2; + + + Strand::Strand(const Track& t, size_t degree) + : Base::Object (degree, (size_t)3, select_props(*t.props)) { + + size_t effective_degree = degree; + + if (t.num_points() < degree) + effective_degree = t.num_points(); + + const MR::Math::Matrix& inverse_position_matrix = Strand::inverse_position_matrix(t.num_points(), effective_degree); + + for (size_t degree_i = 0; degree_i < effective_degree; ++degree_i) + operator[](degree_i) = t.left_product(inverse_position_matrix.row(degree_i)); + + for (size_t degree_i = effective_degree; degree_i < degree; ++degree_i) + operator[](degree_i).zero(); + + for (size_t prop_i = 0; prop_i < num_props(); ++prop_i) + prop(prop_i) = t.prop(prop_key(prop_i)); + + } + + + Strand::Strand(const Track& t, size_t degree, const std::vector& timeline) + : Base::Object (degree, (size_t)3, select_props(*t.props)) { + + size_t effective_degree = degree; + + if (t.num_points() < degree) + effective_degree = t.num_points(); + + MR::Math::Matrix inverse_position_matrix = Strand::create_inverse_position_matrix(timeline, effective_degree); + + for (size_t degree_i = 0; degree_i < effective_degree; degree_i++) + operator[](degree_i) = t.left_product(inverse_position_matrix.row(degree_i)); + + for (size_t degree_i = effective_degree; degree_i < degree; ++degree_i) + operator[](degree_i).zero(); + + for (size_t prop_i = 0; prop_i < num_props(); ++prop_i) + prop(prop_i) = t.prop(prop_key(prop_i)); + + } + + + + //Projects extends or trims the strand so that its endpoints lie on the sphere. + void Strand::project_to_sphere(double sphere_radius) { + + Track tck = this->to_track(this->degree()); + + + tck[0].normalise(); + tck[0] *= sphere_radius; + tck[tck.size() - 1].normalise(); + tck[tck.size() - 1] *= sphere_radius; + + *this = tck.to_strand(this->degree()); + + + } + + + + Track Strand::to_track(size_t num_points, bool include_endpoints) const { + return Track(*this, num_points, include_endpoints); + } + + Track Strand::to_tangents(size_t num_points, bool include_endpoints) const { + + if (num_points == 0) + throw Exception ("'num_points' option is required for conversion to tracks."); + + Track tck(num_points); + const MR::Math::Matrix& position_matrix = Strand::tangent_matrix(num_points, degree()); + + for (size_t point_i = 0; point_i < num_points; point_i++) + tck[point_i] = left_product(position_matrix.row(point_i)); + + return tck; + + } + + //! Flips the strand so that runs in the opposite direction but the path taken is the same. + Strand Strand::flip() const { + + Strand s(*this); + + for (size_t degree_i = 1; degree_i < degree(); degree_i += 2) + s[degree_i] = - operator[](degree_i); + + return s; + + } + + + Strand& Strand::operator+= (const Strand& s) { + + assert(props_match(s)); + + if (size() == s.size()) + + MR::Math::Vector::operator+=(s); + + else if (size() <= s.size()) { + + resize(s.degree(),0.0); + + MR::Math::Vector::operator+=(s); + + } else { + + for (size_t degree_i = 0; degree_i < s.size(); ++degree_i) + operator[](degree_i) += s[degree_i]; + + for (size_t prop_i = 0; prop_i < num_props(); ++prop_i) + prop(prop_i) += s.prop(prop_i); + + } + + return *this; + + } + + + Strand& Strand::operator-= (const Strand& s) { + + assert(props_match(s)); + + if (size() == s.size()) + + MR::Math::Vector::operator-=(s); + + else if (size() <= s.size()) { + + resize(s.degree(),0.0); + + MR::Math::Vector::operator-=(s); + + } else { + + for (size_t degree_i = 0; degree_i < s.size(); ++degree_i) + operator[](degree_i) -= s[degree_i]; + + for (size_t prop_i = 0; prop_i < num_props(); ++prop_i) + prop(prop_i) -= s.prop(prop_i); + + } + + return *this; + + } + + + Strand Strand::outer_product(const MR::Math::Vector& column_vector, const Coord& row) { + + Strand strand(column_vector.size()); + + for (size_t row_i = 0; row_i < column_vector.size(); row_i++) + strand[row_i] = column_vector[row_i] * row; + + return strand; + + } + + + Strand Strand::merge(const Strand& strand, size_t num_sections, size_t new_degree) const { + + std::vector to_merge; + + to_merge.push_back(this); + + to_merge.push_back(&strand); + + return merge(to_merge, num_sections, new_degree); + + } + + + //!Generates, stores and returns position conversion matrices when required. + const MR::Math::Matrix& Strand::position_matrix(size_t num_sections, size_t degree, bool include_endpoints) { + + assert(num_sections != 0); + assert(degree != 0); + + + if (include_endpoints) { + + MR::Math::Matrix& position_matrix = Strand::position_matrices_w_endpoints[num_sections][degree]; + + if (position_matrix.rows()) + return position_matrix; + else + return position_matrix = Strand::create_position_matrix(degree, num_sections, INCLUDE_ENDPOINTS); + //TODO: Change dont_include_endpoints to enum. + + } else { + + MR::Math::Matrix& position_matrix = Strand::position_matrices[num_sections][degree]; + + if (position_matrix.rows()) + return position_matrix; + else + return position_matrix = Strand::create_position_matrix(degree, num_sections, DONT_INCLUDE_ENDPOINTS); + + } + + } + + //!Generates, stores and returns position conversion matrices when required. + const MR::Math::Matrix& Strand::tangent_matrix(size_t num_sections, size_t degree) { + + assert(num_sections != 0); + assert(degree != 0); + + MR::Math::Matrix& tangent_matrix = Strand::tangent_matrices[num_sections][degree]; + + if (tangent_matrix.rows()) + return tangent_matrix; + else + return tangent_matrix = Strand::create_tangent_matrix(degree, num_sections, DONT_INCLUDE_ENDPOINTS); + + } + + + + //!Generates, stores and returns position conversion matrices when required. + const MR::Math::Matrix& Strand::inverse_position_matrix(size_t num_sections, size_t degree) { + + assert(num_sections != 0); + assert(degree != 0); + + MR::Math::Matrix& position_matrix = Strand::inverse_position_matrices[degree][num_sections]; + + if (position_matrix.rows()) + return position_matrix; + else + return position_matrix = Strand::create_inverse_position_matrix(num_sections, degree, DONT_INCLUDE_ENDPOINTS); + + } + + + //!Generates, stores and returns position conversion matrices when required. + const MR::Math::Matrix& Strand::position_matrix_w_endpoints(size_t num_sections, size_t degree) { + + assert(num_sections != 0); + assert(degree != 0); + + MR::Math::Matrix& position_matrix = Strand::position_matrices_w_endpoints[num_sections][degree]; + + if (position_matrix.rows()) + return position_matrix; + else + return position_matrix = Strand::create_position_matrix(degree, num_sections, INCLUDE_ENDPOINTS); + + } + + + //Generates, stores and returns position conversion matrices_w_endpoints when required. + const MR::Math::Matrix& Strand::tangent_matrix_w_endpoints(size_t num_sections, size_t degree) { + + assert(num_sections != 0); + assert(degree != 0); + + MR::Math::Matrix& tangent_matrix = Strand::tangent_matrices_w_endpoints[num_sections][degree]; + + if (tangent_matrix.rows()) + return tangent_matrix; + else + return tangent_matrix = Strand::create_tangent_matrix(degree, num_sections, INCLUDE_ENDPOINTS); + } + + + //Generates, stores and returns position conversion matrices_w_endpoints when required. + const MR::Math::Matrix& Strand::inverse_position_matrix_w_endpoints(size_t num_sections, size_t degree) { + + assert(num_sections != 0); + assert(degree != 0); + + MR::Math::Matrix& position_matrix = Strand::inverse_position_matrices_w_endpoints[degree][num_sections]; + + if (position_matrix.rows()) + return position_matrix; + else + return position_matrix = Strand::create_inverse_position_matrix(num_sections, degree, INCLUDE_ENDPOINTS); + + } + + + void Strand::add_section_gradient(const Strand& strand, const Section& section, const BasicSection& gradient) { + + this->operator+=(outer_product(section.position_coeffs, gradient.position())); + this->operator+= (outer_product(section.tangent_coeffs, gradient.tangent() * section.length_fraction)); + + if (has_var_acs()) + var_acs() += gradient.intensity(); + + } + + + std::vector& Strand::sections(std::vector& sections, size_t num_length_sections, size_t num_width_sections, const Triple& vox_lengths, const Triple& offsets, size_t num_encodings) const { + + sections.resize(num_length_sections, Strand::Section(num_encodings)); + + double length_fraction = 1.0 / num_length_sections; + + const MR::Math::Matrix& position_matrix = Strand::position_matrix(num_length_sections, this->degree()); + const MR::Math::Matrix& tangent_matrix = Strand::tangent_matrix(num_length_sections, this->degree()); + + for (size_t section_i = 0; section_i < num_length_sections; section_i++) { + sections[section_i].set(*this, position_matrix.row(section_i), tangent_matrix.row(section_i), length_fraction); + sections[section_i].normalize(vox_lengths, offsets); + } + + return sections; + + } + + + + + + // Used to convert Strand descriptors to a path of points + MR::Math::Matrix Strand::create_position_matrix(size_t degree, size_t num_sections, bool include_endpoints) { + + if (!degree) + throw Exception("The degree (" + str(degree) + ") cannot be 0."); + + if (!num_sections) + throw Exception("The size of the number of length samples (" + str(num_sections) + ") cannot be 0."); + + MR::Math::Matrix Psi(num_sections, degree); + + double t_incr; + + if (include_endpoints) + t_incr = 1.0 / (double)(num_sections-1); + else + t_incr = 1.0 / (double)(num_sections+1); + + for (size_t row_i = 0; row_i < num_sections; row_i++) { + Psi(row_i, 0) = 1.0; + } + + for (size_t degree_i = 1; degree_i < degree; degree_i++) { + + double t; + if (include_endpoints) + t = 0.0; + else + t = t_incr; + + for (size_t row_i = 0; row_i < num_sections; row_i++) { + + Psi(row_i, degree_i) = M_SQRT2 * cos (degree_i * M_PI * t); + t += t_incr; + } + + } + + return Psi; + + + } + + + // Generate conversion matrix to convert Strand descriptors to path points from arbitrary 'time' points. + MR::Math::Matrix Strand::create_position_matrix(size_t degree, const std::vector& timeline) { + + if (degree == 0 || timeline.size() == 0) + throw Exception("The degree (" + str(degree) + ") or the size of the timeline vector (" + str(timeline.size()) + ") cannot be 0."); + + size_t num_sections = timeline.size(); + + MR::Math::Matrix Psi(num_sections, degree); + + for (size_t row_i = 0; row_i < num_sections; row_i++) { + Psi(row_i, 0) = 1.0; + } + + for (size_t degree_i = 1; degree_i < degree; degree_i++) { + + for (size_t row_i = 0; row_i < num_sections; row_i++) { + Psi(row_i, degree_i) = M_SQRT2 * cos (degree_i * M_PI * timeline[row_i]); + } + + } + + return Psi; + + + + } + + + //Used to convert a path of points to Strand descriptors + MR::Math::Matrix Strand::create_inverse_position_matrix(size_t num_sections, size_t degree, bool include_endpoints) { + + MR::Math::Matrix Psi = Strand::create_position_matrix(degree, num_sections, include_endpoints); + + MR::Math::Matrix inv_Psi(degree, num_sections); + + MR::Math::pinv(inv_Psi, Psi); + + return inv_Psi; + + } + + + MR::Math::Matrix Strand::create_inverse_position_matrix(const std::vector& timeline, size_t degree) { + + MR::Math::Matrix Psi = Strand::create_position_matrix(degree, timeline); + + MR::Math::Matrix inv_Psi(degree, timeline.size()); + + MR::Math::pinv(inv_Psi, Psi); + + return inv_Psi; + + } + + + // Used to get the parameterization gradient at the points along the strand. + MR::Math::Matrix Strand::create_tangent_matrix(size_t degree, size_t num_sections, bool include_endpoints) { + + + MR::Math::Matrix d_Psi(num_sections, degree); + + double t_incr; + + if (include_endpoints) + t_incr = 1.0 / (double)(num_sections-1); + else + t_incr = 1.0 / (double)(num_sections+1); + + + for (size_t row_i = 0; row_i < num_sections; row_i++) { + d_Psi(row_i, 0) = 0.0; + } + + for (size_t degree_i = 1; degree_i < degree; degree_i++) { + + double t; + if (include_endpoints) + t = 0.0; + else + t = t_incr; + + for (size_t row_i = 0; row_i < num_sections; row_i++) { + + d_Psi(row_i, degree_i) = - M_SQRT2 * M_PI * degree_i * sin (degree_i * M_PI * t); + t += t_incr; + } + + } + + return d_Psi; + + + } + + + + // Gets the endpoints of the strand. + std::pair Strand::endpoints() const { + + std::pair endpoints; + + endpoints.first = operator[](0); + endpoints.second = operator[](0); + + for (size_t odd_i = 1; odd_i < degree(); odd_i += 2) { + endpoints.first += operator[](odd_i) * M_SQRT2; + endpoints.second -= operator[](odd_i) * M_SQRT2; + } + + + for (size_t even_i = 2; even_i < degree(); even_i += 2) { + endpoints.first += operator[](even_i) * M_SQRT2; + endpoints.second += operator[](even_i) * M_SQRT2; + } + + + return endpoints; + + } + + + // Get the gradient of the endpoints of the strand. Note that the gradient is the same for X, Y, & Z and each + // dimension is only related to its corresponding fourier coefficient so a vector is sufficient to capture the + // relationships between every Fourier coefficient and the each endpoint. + std::pair< MR::Math::Vector, MR::Math::Vector > Strand::endpoint_coeffs() const { + + std::pair< MR::Math::Vector, MR::Math::Vector > endpoints_gradient (MR::Math::Vector(this->degree()),MR::Math::Vector(this->degree())); + + endpoints_gradient.first[0] = 1.0; + endpoints_gradient.second[0] = 1.0; + + for (size_t odd_i = 1; odd_i < degree(); odd_i += 2) { + endpoints_gradient.first[odd_i] = M_SQRT2; + endpoints_gradient.second[odd_i] = - M_SQRT2; + } + + + for (size_t even_i = 2; even_i < degree(); even_i += 2) { + endpoints_gradient.first[even_i] = M_SQRT2; + endpoints_gradient.second[even_i] = M_SQRT2; + } + + + return endpoints_gradient; + + } + + + // Gets the midpoint of the strand, which is the sum of even vectors. + Coord Strand::midpoint() const { + + Coord midpoint = operator[](0); + + for (size_t degree_i = 2; degree_i < degree(); degree_i += 4) + midpoint -= (double)M_SQRT2 * operator[](degree_i); + + for (size_t degree_i = 4; degree_i < degree(); degree_i += 4) + midpoint += (double)M_SQRT2 * operator[](degree_i); + + return midpoint; + + } + + + // Get the gradient of the midpoint of the strand. Note that the gradient is the same for X, Y, & Z and each + // dimension is only related to its corresponding Fourier coefficient so a vector is sufficient to capture the + // relationships between every Fourier coefficient and the midpoint. + MR::Math::Vector Strand::midpoint_gradient() const { + + MR::Math::Vector gradient (this->degree()); + + gradient.zero(); + + gradient[0] = 1.0; + + for (size_t degree_i = 2; degree_i < this->degree(); degree_i += 4) + gradient[degree_i] = -M_SQRT2; + + for (size_t degree_i = 4; degree_i < this->degree(); degree_i += 4) + gradient[degree_i] = M_SQRT2; + + + return gradient; + } + + + + + + //Gets the squared distance between this strand and the reference strand. Due to the Strand descriptor + //parameterization being orthonormal, by Parseval's theorem it corresponds to the distance between identically-spaced + //trains of path points along each strand. + double Strand::distance(const Strand& reference, bool& flipped) const { + + double dist = MR::Math::sqrt((*this - reference).norm2()); + double flipped_dist = MR::Math::sqrt((*this - reference.flip()).norm2()); + + if (flipped_dist < dist) { + dist = flipped_dist; + flipped = true; + } else + flipped = false; + + return dist; + + } + + + Strand Strand::smallest_distance_set(const Strand& reference) const { + + bool flipped; + + distance(reference,flipped); + + Strand s (*this); + + if (flipped) + s = s.flip(); + + return s; + + } + + + // Join two strands together into one longer strand of degree 'new_degree'. If new_degree = 0 or is not specified it defaults to + // the maximum degree of the strands + 1. + Strand Strand::merge(std::vector& strands, size_t num_points, size_t new_degree) { + + + + std::vector landmarks; + landmarks.reserve(strands.size() * 3); + + size_t max_degree = 0; + + double avg_acs = 0; + + for (size_t strand_i = 0; strand_i < strands.size(); strand_i++) { + + const Strand& strand = *strands[strand_i]; + + std::pair e_points = strand.endpoints(); + + + Track tcks = strand.to_track(num_points, INCLUDE_ENDPOINTS); + + for (size_t tck_i = 0; tck_i < tcks.size(); ++tck_i) + landmarks.push_back(tcks[tck_i]); + + + if (strand.degree() > max_degree) + max_degree = strand.degree(); + + avg_acs += strand.acs(); + } + + avg_acs /= (double)strands.size(); + + if (new_degree == 0) + new_degree = max_degree + strands.size() - 1; + + + // Get the orthogonal-distance regressor line between the path landmarks. + Math::Line odr_line = Math::odr(landmarks); + + Track complete_tck(num_points * strands.size()); + + std::vector timeline; + timeline.reserve(sizeof(double) * num_points * strands.size()); + + + double min_cos_time = INFINITY; + double max_cos_time = -INFINITY; + + for (size_t strand_i = 0; strand_i < strands.size(); strand_i++) { + + Track tck = strands[strand_i]->to_track(num_points, INCLUDE_ENDPOINTS); + + for (size_t point_i = 0; point_i < num_points; point_i++) { + + Coord point = tck[point_i]; + Coord disp = point - odr_line.centre; + double cos_time = odr_line.direction.dot(disp); + + complete_tck[strand_i * num_points + point_i] = point; + timeline.push_back(cos_time); + + if (cos_time > max_cos_time) + max_cos_time = cos_time; + + if (cos_time < min_cos_time) + min_cos_time = cos_time; + + } + + + } + + + double cos_time_range = max_cos_time - min_cos_time; + + for (size_t time_i = 0; time_i < timeline.size(); time_i++) + timeline[time_i] = (MR::Math::cos((timeline[time_i] - min_cos_time) * (M_PI / cos_time_range)) + 1) * 0.5; + + Strand new_strand = complete_tck.to_strand(new_degree, timeline); + + if (strands[0]->has_var_acs()) + new_strand.set_acs(avg_acs); + + new_strand[1] *= MERGE_FUDGE_FACTOR; + + return new_strand; + + } + + + + std::ostream& operator<< (std::ostream& stream, const Strand& strand) { + + stream << std::endl; + + if (strand.has_var_acs()) + stream << "acs: " << strand.acs() << std::endl; + + for (size_t degree_i = 0; degree_i < strand.degree(); degree_i++) { + stream << strand[degree_i] << std::endl; + } + return (stream); + + } + + + } + +} diff --git a/src/bts/fibre/strand.h b/src/bts/fibre/strand.h new file mode 100644 index 0000000..5d4e01f --- /dev/null +++ b/src/bts/fibre/strand.h @@ -0,0 +1,294 @@ +/* + Copyright 2008 Brain Research Institute, Melbourne, Australia + + Written by Thomas G Close, 07/08/2010. + + This file is part of MRtrix. + + MRtrix is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + MRtrix is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with MRtrix. If not, see . + +*/ + + +#ifndef __bts_fibre_strand_h__ +#define __bts_fibre_strand_h__ + +#include "bts/fibre/base/object.h" +#include "bts/coord.h" + + +#include "bts/fibre/base/writer.h" +#include "bts/fibre/base/reader.h" + +namespace BTS { + + namespace Fibre { + + class Strand : public Base::Object { + + //Public nested classes and typedefs + public: + + typedef Coord Element; + + class BasicSection; + class Section; + class Set; + class Tensor; + class Walker; + + typedef Base::Writer Writer; + typedef Base::Reader Reader; + + typedef Base::TextWriter TextWriter; + typedef Base::TextReader TextReader; + + friend class Track; + friend class Tractlet; + friend class Set; + friend class Base::Set; + friend class Tensor; + friend class Base::Tensor; + + //Public static constants + public: + + const static std::string FILE_EXTENSION; + const static Coord FILE_SEPARATOR; + + const static int INCLUDE_ENDPOINTS = 1; + const static int DONT_INCLUDE_ENDPOINTS = 0; + + const static size_t DEFAULT_DEGREE; + + const static char* PROPS_LIST[]; + + + //Public static variables + public: + + static std::map > > position_matrices; + static std::map > > tangent_matrices; + static std::map > > inverse_position_matrices; + + static std::map > > position_matrices_w_endpoints; + static std::map > > tangent_matrices_w_endpoints; + static std::map > > inverse_position_matrices_w_endpoints; + + //Public static methods. + public: + + // Generate conversion matrix to convert Strand descriptors to path points. + static MR::Math::Matrix create_position_matrix(size_t degree, size_t num_sections, bool include_endpoints = INCLUDE_ENDPOINTS); + // Generate conversion matrix to convert Strand descriptors to path points from arbitrary 'time' points. + static MR::Math::Matrix create_position_matrix(size_t degree, const std::vector& timeline); + // Generate conversion matrix to convert Strand descriptors to the tangents of the strand at the path points. + static MR::Math::Matrix create_tangent_matrix(size_t degree, size_t num_sections, bool include_endpoints = INCLUDE_ENDPOINTS); + static MR::Math::Matrix create_inverse_position_matrix(size_t num_sections, size_t degree, bool include_endpoints = INCLUDE_ENDPOINTS); + static MR::Math::Matrix create_inverse_position_matrix(const std::vector& timeline, size_t degree); + + static const MR::Math::Matrix& position_matrix (size_t num_sections, size_t degree, bool include_endpoints = DONT_INCLUDE_ENDPOINTS); + static const MR::Math::Matrix& tangent_matrix (size_t num_sections, size_t degree); + static const MR::Math::Matrix& inverse_position_matrix (size_t num_sections, size_t degree); + + static const MR::Math::Matrix& position_matrix_w_endpoints (size_t num_sections, size_t degree); + static const MR::Math::Matrix& tangent_matrix_w_endpoints (size_t num_sections, size_t degree); + static const MR::Math::Matrix& inverse_position_matrix_w_endpoints (size_t num_sections, size_t degree); + + static Strand outer_product(const MR::Math::Vector& column_vector, const Coord& coord); + + //Public methods + public: + + Strand (size_t degree = 0, const std::vector& props = std::vector()) + : Base::Object(degree, degree * 3 + props.size(), props) {} + + + Strand (int degree, double default_value, const std::vector& props = std::vector()) + : Base::Object(degree, degree * 3 + props.size(), props) { set(default_value); } + + + Strand (const Strand& s) + : Base::Object(s) {} + + + ~Strand () {} + + + Strand base() + { return Strand(sze, sub(0,bsize()), &EMPTY_PROPS); } + + const Strand base() const + { return Strand(sze, sub(0,bsize()), &EMPTY_PROPS); } + + Strand& operator=(const Strand& strand) + { Base::Object::operator=(strand); return *this; } + + // Strand (int degree, const Coord& default_value, const std::vector& props = std::vector()) + // : Base::Object(degree, (size_t)3, props) { set(default_value); } + + + Strand(const Track& t, size_t degree); + + + Strand(const Track& t, size_t degree, const std::vector& timeline); + + + protected: + + /*! Used by Base::Set::operator[]() to initiate a from a section of a larger state vector or + * by Base::Tensor::row/column() for a slice of the tensor matrix + * + * @param degree Degree of the strand + * @param view The view onto the larger vector or matrix + * @param props The properties stored in the set or tensor + */ + Strand(size_t degree, const MR::Math::Vector::View& view, std::vector* props) + : Base::Object(degree, view, props) {} + + + public: + + + size_t degree() const + { return size(); }; + + + double acs() const + { return has_prop(ACS_SQRT_PROP) ? MR::Math::pow2(prop(ACS_SQRT_PROP)) : 1.0; /* The ACS is stored in the state vector via its squareroot to prevent it from becoming < 0 */} + + + void add_acs(double acs = 1.0) + { add_prop(ACS_SQRT_PROP, acs); } + + + void set_acs(double acs) + { assert(acs >= 0); prop(ACS_SQRT_PROP) = MR::Math::sqrt(acs); } + + + void remove_acs() + { remove_prop(ACS_SQRT_PROP); } + + + bool has_var_acs() const + { return has_prop(ACS_SQRT_PROP); } + + + double& var_acs() + { assert(has_var_acs()); return prop(ACS_SQRT_PROP); } + + + BASE_GENERAL_FUNCTIONS(Strand); + + + BASE_MULT_DIVIDE_FUNCTIONS(Strand); + + + //Conversion methods. + Track to_track(size_t num_points, bool include_endpoints = DONT_INCLUDE_ENDPOINTS) const; + + Track to_tangents(size_t num_points, bool include_endpoints = DONT_INCLUDE_ENDPOINTS) const; + + + //Projects extends or trims the strand so that its endpoints lie on the sphere. + void project_to_sphere(double sphere_radius); + + + //! Flips the strand so that runs in the opposite direction but the path taken is the same. + Strand flip() const; + + + Strand& operator+=(const Strand& s); + + + Strand& operator-=(const Strand& s); + + + Strand operator+(const Strand& s) const + { Strand answer(*this); answer += s; return answer; } + + + Strand operator-(const Strand& s) const + { Strand answer(*this); answer -= s; return answer; } + + + Tractlet to_tractlet(double width) const; + + + /*!Split strand in to many 'Strand::Sections'. Note num_width_sections is ignored and is only included to get a template + * function to work.*/ + std::vector
& sections(std::vector
& sections, size_t num_length_sections, size_t num_width_sections = 0, const Triple& vox_lengths = Triple::Ones, const Triple& offsets = Triple::Zeros, size_t num_encodings = 0) const; + + //Calculates the contribution of the section gradient back to the original strand's gradient. + void add_section_gradient( const Strand& strand, + const Section& section, + const BasicSection& gradient); + + // Get the endpoints of the strand. + std::pair endpoints() const; + + + /*! Get the gradient of the endpoints of the strand. Note that the gradient is the same for X, Y, & Z and each + * dimension is only related to its corresponding fourier coefficient so a vector is sufficient to capture the + * relationships between every Fourier coefficient and the each endpoint. */ + std::pair< MR::Math::Vector, MR::Math::Vector > endpoint_coeffs() const; + + // Gets the point at the top of the 'arc', which is just the sum of even vectors. + Coord midpoint() const; + + /*! Get the gradient of the midpoint of the strand. Note that the gradient is the same for X, Y, & Z and each + * dimension is only related to its corresponding fourier coefficient so a vector is sufficient to capture the + * relationships between every Fourier coefficient and the midpoint.*/ + MR::Math::Vector midpoint_gradient() const; + + + //FIXME: Need to sort out the names of these functions. + double distance(const Strand& reference, bool& flipped) const; + + + double distance(const Strand& reference, double dummy = 0) const + { bool flipped; return distance(reference, flipped); } + + + Strand smallest_distance_set(const Strand& reference) const; + + + // Join two strands together into one longer strand of degree 'new_degree'. If new_degree = 0 or is not specified it defaults to + // the maximum degree of the strands + 1. + static Strand merge(std::vector& strands, size_t num_sections, size_t new_degree = 0); + + + Strand merge(const Strand& strand, size_t num_sections, size_t new_degree = 0) const; + + + //! Return a MR::Math::Matrix window to the underlying state vector interpreted as a matrix (without properties). + MR::Math::Matrix bmatrix() + { return Base::Object::bmatrix(3); } + + + std::vector cross_sectional_areas(size_t num_points) + { throw Exception ("Should not be used, just added to debug template function with tractlets."); } + + }; + + + std::ostream& operator<< (std::ostream& stream, const Strand& strand); + + } + +} + +#undef LOOP + +#endif /* __bts_fibre_strand_h__ */ diff --git a/src/bts/fibre/strand/basic_section.cpp b/src/bts/fibre/strand/basic_section.cpp new file mode 100644 index 0000000..c8f9f99 --- /dev/null +++ b/src/bts/fibre/strand/basic_section.cpp @@ -0,0 +1,51 @@ +/* + * Copyright 2010 Brain Research Institute/National ICT Australia (NICTA), Melbourne, Australia + * + * Written by Thomas G Close, 5/05/09. + * + * This file is part of Bayesian Tractlet Sampling (BTS). + * + * BTS is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * BTS is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with BTS. If not, see . + * + */ + + +#include "bts/fibre/strand.h" +#include "bts/fibre/strand/basic_section.h" + + + +namespace BTS { + + namespace Fibre { + + + const char* Strand::BasicSection::INTENSITY_PROP = "intensity"; + const char* Strand::BasicSection::PROPS_LIST[] = { Strand::BasicSection::INTENSITY_PROP, PROPS_LIST_END}; + const std::vector Strand::BasicSection::PROPS (&(PROPS_LIST[0]), &(PROPS_LIST[1])); + + std::ostream& operator<< (std::ostream& stream , const BTS::Fibre::Strand::BasicSection& seg) { + + stream << "position: " << seg.position() << std::endl; + stream << "tangent: " << seg.tangent() << std::endl; + stream << "intensity: " << seg.intensity() << std::endl; + + + return (stream); + + } + + } + +} diff --git a/src/bts/fibre/strand/basic_section.h b/src/bts/fibre/strand/basic_section.h new file mode 100644 index 0000000..267474e --- /dev/null +++ b/src/bts/fibre/strand/basic_section.h @@ -0,0 +1,196 @@ +/* + Copyright 2010 Brain Research Institute/National ICT Australia (NICTA), Melbourne, Australia + + Written by Thomas G Close, 5/05/09. + + This file is part of Bayesian Tractlet Sampling (BTS). + + BTS is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + BTS is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with BTS. If not, see . + +*/ + + + +#ifndef __bts_fibre_strand_basicsection_h__ +#define __bts_fibre_strand_basicsection_h__ + +#include +#include +#include + +#include "bts/triple.h" + +#include "bts/fibre/base/object.h" +#include "bts/fibre/strand.h" + +namespace BTS { + + namespace Fibre { + + class Strand::BasicSection : public Base::Object { + + public: + + class Tensor; + friend class Tensor; + + typedef Coord Element; + typedef Fibre::Base::Reader Reader; + typedef Fibre::Base::Writer Writer; + + protected: + + const static char* INTENSITY_PROP; + const static std::vector PROPS; + + public: + const static char* PROPS_LIST[]; + + const static std::string FILE_EXTENSION; + const static Coord FILE_SEPARATOR; + + //Public member functions. + public: + + BasicSection() + : Base::Object((size_t)2, (size_t)6 + PROPS.size(), PROPS) { Base::Object::set(NAN); } + + BasicSection(const MR::Math::Vector::View& view, std::vector* props) + : Base::Object((size_t)2, view, props) { assert(view.size()==7); } + + BasicSection(const Strand& strand, + const MR::Math::Vector::View& position_coeffs, + const MR::Math::Vector::View& tangent_coeffs, + double length_fraction) + : Base::Object((size_t)2, (size_t)3, PROPS) + + { Base::Object::set(NAN); set(strand,position_coeffs,tangent_coeffs,length_fraction); } + + // Used in derived classes + protected: + + BasicSection(size_t size, const std::vector& props) + : Base::Object(size, size * 3 + props.size(), props) { set(NAN); } + + BasicSection(size_t size, const MR::Math::Vector::View& view, std::vector* props) + : Base::Object(size, view, props) {} + + public: + + + BasicSection& set(const Strand& strand, + const MR::Math::Vector::View& position_coeffs, + const MR::Math::Vector::View& tangent_coeffs, + double length_fraction) + + { + + this->intensity() = strand.acs(); + position() = strand.left_product(position_coeffs); + tangent() = strand.left_product(tangent_coeffs) * length_fraction; + return *this; + } + + using Base::Object::set; + + virtual ~BasicSection() {} + + Coord position() + { return Coord(MR::Math::Vector::sub(0,3)); } + + Coord position() const + { return Coord(MR::Math::Vector::sub(0,3)); } + + Coord tangent() + { return Coord(MR::Math::Vector::sub(3,6)); } + + Coord tangent() const + { return Coord(MR::Math::Vector::sub(3,6)); } + + double& position(size_t idx) + { return MR::Math::Vector::operator[](idx); } + + const double& position(size_t idx) const + { return MR::Math::Vector::operator[](idx); } + + double& tangent(size_t idx) + { return MR::Math::Vector::operator[](idx + 3); } + + const double& tangent(size_t idx) const + { return MR::Math::Vector::operator[](idx + 3); } + + + double& intensity() + { return prop(INTENSITY_PROP);} + + const double& intensity() const + { return prop(INTENSITY_PROP); } + + + BASE_GENERAL_FUNCTIONS(BasicSection); + + BASE_MULT_DIVIDE_FUNCTIONS(BasicSection); + + BASE_ADD_SUBTRACT_FUNCTIONS(BasicSection); + + + double length() const { return tangent().norm(); } + + + void normalize(const Triple& vox_lengths, const Triple& offsets); + + + void unnormalize_gradient(const Triple& vox_lengths); + + MR::Math::Vector vector() const; + + void from_vector(const MR::Math::Vector& vector); + + + friend std::ostream& operator<< (std::ostream& stream , const Strand::BasicSection& seg); + + + // End generic functions. + }; + + + inline Strand::BasicSection operator* (double scalar, const Strand::BasicSection& section) + { return section * scalar; } + + + std::ostream& operator<< (std::ostream& stream , const Strand::BasicSection& seg); + + + + inline void Strand::BasicSection::normalize(const Triple& vox_lengths, const Triple& offsets) { + + position() -= offsets; + + position() /= vox_lengths; + + } + + + inline void Strand::BasicSection::unnormalize_gradient(const Triple& vox_lengths) { + + position() /= vox_lengths; + + } + + + } + +} + +#endif diff --git a/src/bts/fibre/strand/basic_section/tensor.cpp b/src/bts/fibre/strand/basic_section/tensor.cpp new file mode 100644 index 0000000..7ecc662 --- /dev/null +++ b/src/bts/fibre/strand/basic_section/tensor.cpp @@ -0,0 +1,49 @@ +/* + Copyright 2008 Brain Research Institute, Melbourne, Australia + + Written by Thomas G Close, Aug 16, 2010. + + This file is part of MRtrix. + + MRtrix is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + MRtrix is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with MRtrix. If not, see . + +*/ + +#include "bts/fibre/strand/basic_section/tensor.h" + +namespace BTS { + + namespace Fibre { + + void Strand::BasicSection::Tensor::unnormalise_hessian(const Triple& vox_lengths) { + + Triple vox_lengths2 (MR::Math::pow2(vox_lengths[X]), MR::Math::pow2(vox_lengths[Y]),MR::Math::pow2(vox_lengths[Z])); + + position(X).position() /= vox_lengths2; + position(Y).position() /= vox_lengths2; + position(Z).position() /= vox_lengths2; + + position(X).tangent() /= vox_lengths[X]; + position(Y).tangent() /= vox_lengths[Y]; + position(Z).tangent() /= vox_lengths[Z]; + + tangent(X).position() /= vox_lengths; + tangent(Y).position() /= vox_lengths; + tangent(Z).position() /= vox_lengths; + + } + + } + +} diff --git a/src/bts/fibre/strand/basic_section/tensor.cpp.h b/src/bts/fibre/strand/basic_section/tensor.cpp.h new file mode 100644 index 0000000..6c882b3 --- /dev/null +++ b/src/bts/fibre/strand/basic_section/tensor.cpp.h @@ -0,0 +1,120 @@ +/* + Copyright 2008 Brain Research Institute, Melbourne, Australia + + Written by Thomas G Close, Aug 16, 2010. + + This file is part of MRtrix. + + MRtrix is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + MRtrix is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with MRtrix. If not, see . + +*/ +// +//#ifndef __bts_fibre_strand_section_tensor_cpp_h__ +//#define __bts_fibre_strand_section_tensor_cpp_h__ +// +//namespace BTS { +// +// namespace Fibre { +// +// +// template std::ostream& operator<< (std::ostream& stream , const Strand::BasicSection::Tensor_tpl& seg) { +// +// stream << "Intensity: " << seg.intensity << std::endl; +// stream << "Position: " << seg.position << std::endl; +// stream << "Tangent: " << seg.tangent << std::endl; +// +// return stream; +// +// } +// +// +// +// inline Strand::BasicSection::Tensor::Tensor (const Strand::Section& section) { +// +// position[X] = section; +// position[Y] = section; +// position[Z] = section; +// +// tangent[X] = section; +// tangent[Y] = section; +// tangent[Z] = section; +// +// intensity = section; +// +// init(); +// +// } +// +// +// +// inline Coord::Tensor Strand::BasicSection::Tensor::position_hessian() const { +// +// Coord::Tensor pos_hess; +// +// pos_hess[X] = position[X].position; +// pos_hess[Y] = position[Y].position; +// pos_hess[Z] = position[Z].position; +// +// return pos_hess; +// +// } +// +// inline Coord::Tensor Strand::BasicSection::Tensor::tangent_hessian() const { +// +// Coord::Tensor tan_hess; +// +// tan_hess[X] = tangent[X].tangent; +// tan_hess[Y] = tangent[Y].tangent; +// tan_hess[Z] = tangent[Z].tangent; +// +// return tan_hess; +// +// } +// +// inline Coord::Tensor Strand::BasicSection::Tensor::cross_hessian() const { +// +// Coord::Tensor cross_hess; +// +// cross_hess[X] = position[X].tangent; +// cross_hess[Y] = position[Y].tangent; +// cross_hess[Z] = position[Z].tangent; +// +// return cross_hess; +// +// } +// +// +// inline void Strand::BasicSection::Tensor::unnormalise_hessian(const Triple& vox_lengths) { +// +// Triple vox_lengths2 (MR::Math::pow2(vox_lengths[X]), MR::Math::pow2(vox_lengths[Y]),MR::Math::pow2(vox_lengths[Z])); +// +// position[X].position /= vox_lengths2; +// position[Y].position /= vox_lengths2; +// position[Z].position /= vox_lengths2; +// +// position[X].tangent /= vox_lengths[X]; +// position[Y].tangent /= vox_lengths[Y]; +// position[Z].tangent /= vox_lengths[Z]; +// +// tangent[X].position /= vox_lengths; +// tangent[Y].position /= vox_lengths; +// tangent[Z].position /= vox_lengths; +// +// } +// +// } +// +//} +// +//#endif /* __bts_fibre_strand_section_tensor_cpp_h__ */ diff --git a/src/bts/fibre/strand/basic_section/tensor.h b/src/bts/fibre/strand/basic_section/tensor.h new file mode 100644 index 0000000..ae18e70 --- /dev/null +++ b/src/bts/fibre/strand/basic_section/tensor.h @@ -0,0 +1,97 @@ +/* + Copyright 2008 Brain Research Institute, Melbourne, Australia + + Written by Thomas G Close, 07/08/2010. + + This file is part of MRtrix. + + MRtrix is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + MRtrix is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with MRtrix. If not, see . + + */ +// +#ifndef __bts_fibre_strand_section_tensor_h__ +#define __bts_fibre_strand_section_tensor_h__ + +#include "bts/fibre/strand/basic_section.h" + +#include "bts/fibre/base/tensor.h" +#include "bts/coord/tensor.h" + +namespace BTS { + + namespace Fibre { + + class Strand::BasicSection::Tensor : public Base::Tensor { + + + public: + + Tensor() + : Base::Tensor(Strand::BasicSection()) {} + + Tensor(const MR::Math::Matrix::View& view) + : Base::Tensor(Strand::BasicSection(), view) { assert(view.rows() == 7); assert(view.columns() == 7); } + + Strand::BasicSection position(size_t dim_i) + { return Strand::BasicSection(row(dim_i), tmpl.props); } + + const Strand::BasicSection position(size_t dim_i) const + { return Strand::BasicSection(row(dim_i), tmpl.props); } + + Strand::BasicSection tangent(size_t dim_i) + { return Strand::BasicSection(row(dim_i + 3), tmpl.props); } + + const Strand::BasicSection tangent(size_t dim_i) const + { return Strand::BasicSection(row(dim_i + 3), tmpl.props); } + + Strand::BasicSection intensity() + { return Strand::BasicSection(row(6), tmpl.props); } + + const Strand::BasicSection intensity() const + { return Strand::BasicSection(row(6), tmpl.props); } + + Coord::Tensor position() + { return Coord::Tensor(sub((size_t)0,(size_t)2,(size_t)0,(size_t)2)); } + + const Coord::Tensor position() const + { return Coord::Tensor(sub((size_t)0,(size_t)2,(size_t)0,(size_t)2)); } + + Coord::Tensor tangent() + { return Coord::Tensor(sub((size_t)3,(size_t)5,(size_t)3,(size_t)5)); } + + const Coord::Tensor tangent() const + { return Coord::Tensor(sub((size_t)3,(size_t)5,(size_t)3,(size_t)5)); } + + + Coord::Tensor position_tangent() + { return Coord::Tensor(sub((size_t)0,(size_t)2,(size_t)3,(size_t)5)); } + + const Coord::Tensor position_tangent() const + { return Coord::Tensor(sub((size_t)0,(size_t)2,(size_t)3,(size_t)5)); } + + + Coord::Tensor tangent_position() + { return Coord::Tensor(sub((size_t)3,(size_t)5,(size_t)0,(size_t)2)); } + + const Coord::Tensor tangent_position() const + { return Coord::Tensor(sub((size_t)3,(size_t)5,(size_t)0,(size_t)2)); } + + void unnormalise_hessian(const Triple& vox_lengths); + }; + + } + +} + +#endif /* __bts_fibre_strand_section_tensor_h__ */ diff --git a/src/bts/fibre/strand/section.cpp b/src/bts/fibre/strand/section.cpp new file mode 100644 index 0000000..f0257cd --- /dev/null +++ b/src/bts/fibre/strand/section.cpp @@ -0,0 +1,40 @@ +/* + * Copyright 2010 Brain Research Institute/National ICT Australia (NICTA), Melbourne, Australia + * + * Written by Thomas G Close, 5/05/09. + * + * This file is part of Bayesian Tractlet Sampling (BTS). + * + * BTS is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * BTS is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with BTS. If not, see . + * + */ + + + +#include "bts/fibre/strand.h" +#include "bts/fibre/strand/section.h" + + + +namespace BTS { + + namespace Fibre { + + const std::string Strand::Section::FILE_EXTENSION = "ssc"; + const Coord Strand::Section::FILE_SEPARATOR = Coord (-INFINITY, NAN, NAN); + + + } + +} diff --git a/src/bts/fibre/strand/section.h b/src/bts/fibre/strand/section.h new file mode 100644 index 0000000..f2337ac --- /dev/null +++ b/src/bts/fibre/strand/section.h @@ -0,0 +1,233 @@ +/* + Copyright 2010 Brain Research Institute/National ICT Australia (NICTA), Melbourne, Australia + + Written by Thomas G Close, 5/05/09. + + This file is part of Bayesian Tractlet Sampling (BTS). + + BTS is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + BTS is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with BTS. If not, see . + +*/ + + + +#ifndef __bts_fibre_strand_section_h__ +#define __bts_fibre_strand_section_h__ + +#include "bts/fibre/strand.h" + +#include +#include +#include + +#include "bts/fibre/base/writer.h" +#include "bts/fibre/base/reader.h" + +//#include "bts/image/observed/buffer.h" + + + +#include "bts/fibre/strand/basic_section.h" +#include "bts/fibre/strand/basic_section/tensor.h" +#include "bts/fibre/base/tensor.h" +#include "bts/coord/tensor.h" + + +namespace BTS { + + namespace Fibre { + + class Strand::Section : public Strand::BasicSection { + + public: + + typedef Coord Element; + + typedef Fibre::Base::Reader
Reader; + typedef Fibre::Base::Writer
Writer; + + //Public static members and typedefs + public: + + const static std::string FILE_EXTENSION; + const static Coord FILE_SEPARATOR; + + + // Public member variables. + public: + + //References used when working backwards to create the gradient. + MR::Math::Vector position_coeffs; + MR::Math::Vector tangent_coeffs; + double length_fraction; + + std::vector precalc_weightings; + std::vector precalc_weight_gradients; + std::vector precalc_weight_hessians; + + double precalc_interpolation; + BasicSection precalc_interp_gradient; + BasicSection::Tensor precalc_interp_hessian; + + const Strand* parent; + + public: + + Section(size_t init_precalc_size = 0) + : length_fraction(NAN), + precalc_weightings(init_precalc_size), + precalc_weight_gradients(init_precalc_size), + precalc_weight_hessians(init_precalc_size) {} + + + //TODO: Look into this, this is not the most efficient way to do this but will have to do until image generation + // is reworked. + Section(const Strand& strand, + const MR::Math::Vector::View& position_coeffs, + const MR::Math::Vector::View& tangent_coeffs, + double length_fraction, + size_t init_precalc_size = 0) + + : BasicSection(strand, + position_coeffs, + tangent_coeffs, + length_fraction), + precalc_weightings(init_precalc_size), + precalc_weight_gradients(init_precalc_size), + precalc_weight_hessians(init_precalc_size) + + { set(strand,position_coeffs,tangent_coeffs,length_fraction); } + + + void set(const Strand& strand, + const MR::Math::Vector::View& position_coeffs, + const MR::Math::Vector::View& tangent_coeffs, + double length_fraction) + + { + + BasicSection::set(strand, position_coeffs, tangent_coeffs, length_fraction); + + this->position_coeffs = position_coeffs; + this->tangent_coeffs = tangent_coeffs; + this->length_fraction = length_fraction; + + this->parent = &strand; + } + + + Section(const Section& s) + : BasicSection(s), + position_coeffs(s.position_coeffs), + tangent_coeffs(s.tangent_coeffs), + length_fraction(s.length_fraction), + precalc_weightings(s.precalc_weightings), + precalc_weight_gradients(s.precalc_weight_gradients), + precalc_weight_hessians(s.precalc_weight_hessians), + precalc_interpolation(s.precalc_interpolation), + precalc_interp_gradient(s.precalc_interp_gradient), + precalc_interp_hessian(s.precalc_interp_hessian), + parent(s.parent) {} + + + // Used in derived classes + protected: + + Section(size_t size, const std::vector& props, size_t init_precalc_size) + : BasicSection(size, props), + length_fraction(NAN), + precalc_weightings(init_precalc_size), + precalc_weight_gradients(init_precalc_size), + precalc_weight_hessians(init_precalc_size) {} + + Section(size_t size, const MR::Math::Vector::View& view, std::vector* props) + : BasicSection(size, view, props) {} + + public: + + Section& operator= (const Section& s) { + BasicSection::operator=(s); + length_fraction = s.length_fraction; + position_coeffs = s.position_coeffs; + tangent_coeffs = s.tangent_coeffs; + precalc_weightings = s.precalc_weightings; + precalc_weight_gradients = s.precalc_weight_gradients; + precalc_weight_hessians = s.precalc_weight_hessians; + precalc_interpolation = s.precalc_interpolation; + precalc_interp_gradient = s.precalc_interp_gradient; + precalc_interp_hessian = s.precalc_interp_hessian; + parent = s.parent; + return *this; + } + + + virtual ~Section() {} + + protected: + + Section(double intensity, + const MR::Math::Vector::View& position_coeffs, + const MR::Math::Vector::View& tangent_coeffs, + double length_fraction) { + + set(intensity, position_coeffs, tangent_coeffs, length_fraction); + } + + + void set( double intensity, + const MR::Math::Vector::View& position_coeffs, + const MR::Math::Vector::View& tangent_coeffs, + double length_fraction) { + + this->intensity() = intensity; + this->position_coeffs = position_coeffs; + this->tangent_coeffs = tangent_coeffs; + this->length_fraction = length_fraction; + this->parent = 0; + } + + + public: + + BASE_GENERAL_FUNCTIONS(Section); + + BASE_MULT_DIVIDE_FUNCTIONS(Section); + + BASE_ADD_SUBTRACT_FUNCTIONS(Section); + + //---------------------------------------------------------------// + // Generic Functions (NB: Can be removed in production versions) // + //---------------------------------------------------------------// + + // The following generic functions are used in 'Fibre::Base::Writer/Reader' and 'Analysis::GradientTester', + // which are in turn used in 'test_gradient.cpp' to check gradient calculations. Can be removed in production version. + + +// typedef Fibre::Base::Reader Reader; +// typedef Fibre::Base::Writer Writer; + + + }; + + + } + +} + + + + + + +#endif diff --git a/src/bts/fibre/strand/set.cpp b/src/bts/fibre/strand/set.cpp new file mode 100644 index 0000000..7e5be2a --- /dev/null +++ b/src/bts/fibre/strand/set.cpp @@ -0,0 +1,794 @@ +/* + Copyright 2010 Brain Research Institute/National ICT Australia (NICTA), Melbourne, Australia + + Written by Thomas G Close, 5/05/09. + + This file is part of Bayesian Tractlet Sampling (BTS). + + BTS is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + BTS is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with BTS. If not, see . + +*/ + + +#include + +#include "bts/fibre/strand/set.h" +//#include "bts/fibre/strand/set/permutation.h" + +#include "bts/fibre/strand.h" + + +#include "bts/fibre/track.h" +#include "bts/fibre/track/set.h" + +#include "bts/fibre/tractlet.h" +#include "bts/fibre/tractlet/set.h" + + +#include "bts/math/munkres.h" +#include "bts/math/svd.h" +#include "bts/math/common.h" + + + +#include "bts/fibre/properties/extended.h" + +#include "bts/fibre/base/reader.cpp.h" +#include "bts/fibre/base/writer.cpp.h" + +#include "phantom/shared/strand_collection.h" + + +namespace BTS { + + namespace Fibre { + + const std::string Strand::Set::FILE_EXTENSION = "sst"; + const char* Strand::Set::PROPS_LIST[] = { Base::Set::BASE_INTENSITY_PROP, PROPS_LIST_END }; + + + const double Strand::Set::MAX_ACCUM_RDL = 0.1; + const double Strand::Set::MIN_ACCUM_RDL = 0.1; + const double Strand::Set::TEMP_REDUC_FACTOR = 0.95; + const double Strand::Set::INIT_PROB_ACCEPTANCE = 0.5; + + const std::string Strand::Set::ORIGINAL_NUM_POINTS_PROP = "loaded_num_points"; + const std::string Strand::Set::ORIGINAL_NUM_TRACTLETS_PROP = "loaded_num_tractlets"; + + + size_t MAX_ITERATIONS = 1000; + + + + Strand::Set::Set (const Track::Set& tcks, size_t degree) + : Base::Set(tcks.size(), + degree, + 3 * degree + select_props(*tcks.elem_props).size(), + select_props(*tcks.props), + select_props(*tcks.elem_props), + (tcks.ext_props ? *tcks.ext_props : std::map())) { + + for (size_t tck_i = 0; tck_i < size(); tck_i++) { + + size_t strand_degree = degree; + + if (!degree) { + if (has_extend_elem_prop(Track::Set::ORIGINAL_DEGREE_PROP)) + strand_degree = get_extend_elem_prop(Track::Set::ORIGINAL_DEGREE_PROP, tck_i); + else + throw Exception ("Degree must be supplied (and cannot be 0) for conversion from tracks to strands."); + } + + operator[](tck_i) = Strand(tcks[tck_i], strand_degree); //tcks[tck_i].to_strand(strand_degree); + + } + + for (size_t prop_i = 0; prop_i < num_props(); ++prop_i) + prop(prop_i) = tcks.prop(prop_key(prop_i)); + + copy_extend_elem_props(tcks); + + } + + + + Strand::Set::Set(const Tractlet::Set& set, size_t num_samples) + : Fibre::Base::Set(select_props(*set.props), select_props(*set.elem_props), set.get_extend_props()) { + + add_extend_elem_prop(BUNDLE_INDEX_EPROP, "-1"); + + for (size_t tractlet_i = 0; tractlet_i < set.size(); tractlet_i++) { + + Set new_strands (set[tractlet_i], num_samples); + + if (new_strands.size()) { + + size_t old_size = size(); + + resize(size() + new_strands.size(), new_strands[0]); + + for (size_t strand_i = 0; strand_i < new_strands.size(); strand_i++) { + operator[](strand_i + old_size) = new_strands[strand_i]; + set_extend_elem_prop(BUNDLE_INDEX_EPROP, str(tractlet_i), strand_i + old_size); + } + } + } + + for (size_t prop_i = 0; prop_i < num_props(); ++prop_i) + prop(prop_i) = set.prop(prop_key(prop_i)); + + + if (!set.var_elem_degrees()) + freeze_elem_degree(); + + } + + + Strand::Set::Set(const Tractlet::Set& set, double strands_per_vol) + : Fibre::Base::Set(select_props(*set.props), select_props(*set.elem_props), set.get_extend_props()) { + + add_extend_elem_prop(BUNDLE_INDEX_EPROP, "-1"); + + for (size_t tract_i = 0; tract_i < set.size(); tract_i++) { + + std::string bundle_index = set.has_extend_elem_prop(BUNDLE_INDEX_EPROP) ? set.get_extend_elem_prop(BUNDLE_INDEX_EPROP, tract_i) : str(tract_i); + + std::map prop_row; + prop_row[BUNDLE_INDEX_EPROP] = bundle_index; + + Set new_strands (set[tract_i], strands_per_vol); + + for (size_t new_strand_i = 0; new_strand_i < new_strands.size(); ++new_strand_i) + push_back(new_strands[new_strand_i], prop_row); + + } + + for (size_t prop_i = 0; prop_i < num_props(); ++prop_i) + prop(prop_i) = set.prop(prop_key(prop_i)); + + if (!set.var_elem_degrees()) + freeze_elem_degree(); //Attempt to freeze element size but ignore if fails. + + } + + + Strand::Set::Set(const Tractlet& tractlet, size_t num_width_sections) + : Fibre::Base::Set(std::vector(), select_props(*tractlet.props), std::map()) { + + from_tractlet(tractlet, num_width_sections); + + } + + + Strand::Set::Set(const Tractlet& tractlet, double strands_per_acs) + : Fibre::Base::Set(std::vector(), select_props(*tractlet.props), std::map()) { + + double num_strands = strands_per_acs * tractlet.acs(); + + size_t num_width_sections = (size_t)MR::Math::round(MR::Math::sqrt(num_strands * 4.0 / M_PI)); + + from_tractlet(tractlet, num_width_sections); + + } + + + void Strand::Set::from_tractlet (const Tractlet& tractlet, size_t num_width_sections) { + + double width_fraction = 1.0 / (double)num_width_sections; + + size_t count = 0; + + // Loop across cross-section of tractlet. Loop each perturbation axis from a 'width_fraction' from -1 to a width_fraction + // from +1, in intervals of 2*width_fraction's. It is performed this way because each strand is to represent the + // tractlet +- a width_fraction radius about it. + for (double ax1_frac = (-1.0 + width_fraction); ax1_frac < 1.0; ax1_frac += 2.0 * width_fraction) { + + for (double ax2_frac = (-1.0 + width_fraction); ax2_frac < 1.0; ax2_frac += 2.0 * width_fraction) { + + //Include section if coord consisting of the combined fractions along each perturbation axes lies within the + // unit circle minus a half a width_fraction. This will give the resulting cross-sections an elliptical + // shape (or circular if axes are equal). + if (MR::Math::pow2(ax1_frac) + MR::Math::pow2(ax2_frac) <= (1.0 - width_fraction /2.0)) { + + Strand strand (tractlet[0] + tractlet[1] * ax1_frac + tractlet[2] * ax2_frac); + strand.copy_props(tractlet); + + push_back(strand); + + ++count; + } + + } + + // Normalise the ACS property of the generated strands by the number generated + if (has_elem_prop(ACS_SQRT_PROP)) + for (size_t strand_i = 0; strand_i < size(); ++strand_i) + operator[](strand_i).set_acs(tractlet.acs() / (double)count); + + } + + freeze_elem_degree(); //Freeze element size + + } + + + Track::Set Strand::Set::to_tracks(size_t num_points) const { + + return Track::Set(*this, num_points); + + } + + + Tractlet::Set Strand::Set::to_tractlets () const { + + return Tractlet::Set(*this); + + } + + + + Tractlet::Set Strand::Set::to_tractlets (double width) const { + + return Tractlet::Set(*this, width); + + } + + + Tractlet::Set Strand::Set::to_tractlets(size_t num_tractlets, const std::string& cluster_save_location) const { + + return Tractlet::Set(*this, num_tractlets,cluster_save_location); + + } + + + + + + Strand Strand::Set::centroid() const { + + Fibre::Strand centroid(0); + + for (size_t strand_i = 0; strand_i < size(); ++strand_i) + centroid += operator[](strand_i); + + centroid /= (double)size(); + + return centroid; + + } + + + //TODO: fix up distance and flip functions to avoid unecessary copies of data. + Strand::Set Strand::Set::shortest_span() const { + + Strand::Set strands(*this); + + if (size()) { + + Fibre::Strand centroid; + + centroid = strands[0]; + + size_t num_iterations = 0; + + double distance = -1.0; + + std::vector flip_pattern(size()); + + while (num_iterations < MAX_ITERATIONS) { + + double new_distance = 0; + + for (size_t strand_i = 0; strand_i < size(); ++strand_i) + new_distance += strands[strand_i].distance(centroid,(bool&)flip_pattern[strand_i]); + + if (new_distance == distance) + break; + else + distance = new_distance; + + centroid.zero(); + + for (size_t strand_i = 0; strand_i < size(); ++strand_i) + if (flip_pattern[strand_i]) + centroid += strands[strand_i].flip(); + else + centroid += strands[strand_i]; + + centroid /= (double)size(); + + ++num_iterations; + } + + if (num_iterations == MAX_ITERATIONS) + throw Exception ("Could not find shortest span of strand set."); + + strands = strands.flip(flip_pattern); + + } + + return strands; + + } + + Strand::Set Strand::Set::flip(const std::vector& to_flip) const { + + if (to_flip.size() != size()) + throw Exception ("Size of 'to_flip' vector (" + str(to_flip.size()) + ") does not match that of strand set (" + str(size()) + ")."); + + Strand::Set flipped (*this); + + for (size_t strand_i = 0; strand_i < size(); ++strand_i) + if (to_flip[strand_i]) + flipped[strand_i] = operator[](strand_i).flip(); + + return flipped; + + } + + + + + Strand::Set Strand::Set::peel(double distance, size_t num_length_sections, bool to_cube) const { + + Strand::Set include; + + include.set_extend_prop("peel_distance", str(distance)); + + if (to_cube) + include.set_extend_prop("peel_shape", "cube"); + else + include.set_extend_prop("peel_shape", "sphere"); + + + include.add_extend_elem_props(*this); + + for (size_t strand_i = 0; strand_i < size(); ++strand_i) { + + Track tck = operator[](strand_i).to_track(num_length_sections); + + bool in_roi = false; + + for (size_t point_i = 0; point_i < tck.num_points(); point_i++) { + + if (to_cube) { + if ((abs(tck[point_i][X]) <= distance) && (abs(tck[point_i][Y]) <= distance) && (abs(tck[point_i][Z]) <= distance)) { + in_roi = true; + break; + } + } else + if (tck[point_i].norm() <= distance) { + in_roi = true; + break; + } + + } + + if (in_roi) + include.push_back(operator[](strand_i), get_extend_elem_prop_row(strand_i)); + + } + + include.copy_props(*this); + include.copy_relevant_elem_props(*this); + + return include; + } + + + Strand::Set& Strand::Set::cluster(size_t num_clusters) { + + if (num_clusters > size()) + throw Exception ("New number of clusters (" + str(num_clusters) + ") must be less than or equal to original number of strands (" + str(size()) + ")"); + + + KMterm term( NUM_STAGES, 0, 0, 0, // run for 100 stages + MAX_ACCUM_RDL, // min consec RDL + MIN_ACCUM_RDL, // min accum RDL + MAX_RUN_STAGES, // max run stages + INIT_PROB_ACCEPTANCE, // init. prob. of acceptance + TEMP_RUN_LENGTH, // temp. run length + TEMP_REDUC_FACTOR); // temp. reduction factor + + + //-------------------------// + // k-means cluster strands + //-------------------------// + + size_t degree = operator[](0).degree(); + + int ptDim = degree * 3; // dimension + + KMdata dataPts(ptDim, size()); // allocate data storage + + for (size_t strand_i = 0; strand_i < size(); strand_i++) { + for (size_t degree_i = 0; degree_i < operator[](strand_i).degree(); degree_i++) { + dataPts[strand_i][degree_i * 3 + X] = operator[](strand_i)[degree_i][X]; + dataPts[strand_i][degree_i * 3 + Y] = operator[](strand_i)[degree_i][Y]; + dataPts[strand_i][degree_i * 3 + Z] = operator[](strand_i)[degree_i][Z]; + } + } + + + + dataPts.buildKcTree(); // build filtering structure + + KMfilterCenters ctrs(num_clusters, dataPts); // allocate centers + + KMlocalHybrid kmHybrid(ctrs, term); // Hybrid heuristic + ctrs = kmHybrid.execute(); + + //--------------------------// + // Get cluster information + //--------------------------// + + + KMctrIdxArray closeCtr = new KMctrIdx[dataPts.getNPts()]; + double* sqDist = new double[dataPts.getNPts()]; + ctrs.getAssignments(closeCtr, sqDist); + + if (!has_extend_elem_prop(Track::BUNDLE_INDEX_EPROP)) + add_extend_elem_prop(Track::BUNDLE_INDEX_EPROP, "-1"); + + for (size_t strand_i = 0; strand_i < size(); ++strand_i) + set_extend_elem_prop(Track::BUNDLE_INDEX_EPROP, str(closeCtr[strand_i]), strand_i); + + return *this; + + } + + + + + + Strand::Set Strand::Set::reduce_number(size_t new_num_strands) { + + if (new_num_strands == this->size()) + return *this; + + if (new_num_strands < 1) + throw Exception ("New number of strands must be greater than zero"); + + if (new_num_strands > this->size()) + throw Exception ("New number of strands (" + str(new_num_strands) + ") must be less than original number of strands (" + str(this->size()) + ")"); + + + KMterm term( NUM_STAGES, 0, 0, 0, // run for 100 stages + MAX_ACCUM_RDL, // min consec RDL + MIN_ACCUM_RDL, // min accum RDL + MAX_RUN_STAGES, // max run stages + INIT_PROB_ACCEPTANCE, // init. prob. of acceptance + TEMP_RUN_LENGTH, // temp. run length + TEMP_REDUC_FACTOR); // temp. reduction factor + + + //-------------------------// + // k-means cluster strands + //-------------------------// + + size_t degree = operator[](0).degree(); + + int ptDim = degree * 3; // dimension + + KMdata dataPts(ptDim, size()); // allocate data storage + + for (size_t strand_i = 0; strand_i < size(); strand_i++) { + for (size_t degree_i = 0; degree_i < operator[](strand_i).degree(); degree_i++) { + dataPts[strand_i][degree_i * 3 + X] = operator[](strand_i)[degree_i][X]; + dataPts[strand_i][degree_i * 3 + Y] = operator[](strand_i)[degree_i][Y]; + dataPts[strand_i][degree_i * 3 + Z] = operator[](strand_i)[degree_i][Z]; + } + } + + + + dataPts.buildKcTree(); // build filtering structure + + KMfilterCenters ctrs(new_num_strands, dataPts); // allocate centers + + KMlocalHybrid kmHybrid(ctrs, term); // Hybrid heuristic + ctrs = kmHybrid.execute(); + +// //--------------------------// +// // Get cluster information +// //--------------------------// +// +// +// KMctrIdxArray closeCtr = new KMctrIdx[dataPts.getNPts()]; +// double* sqDist = new double[dataPts.getNPts()]; +// ctrs.getAssignments(closeCtr, sqDist); + + + //-----------------------------------// + // Save centre points as new strands + //-----------------------------------// + + Strand::Set output_strands; + + for (size_t ctr_i = 0; ctr_i < new_num_strands; ctr_i++) { + + Strand strand(degree); + + for (size_t degree_i = 0; degree_i < operator[](0).degree(); degree_i++) { + for (size_t dim_i = 0; dim_i < 3; dim_i++) + strand[degree_i][dim_i] = ctrs[ctr_i][degree_i * 3 + dim_i]; + } + + output_strands.push_back(strand); + + } + + output_strands.copy_props(*this); + output_strands.copy_relevant_elem_props(*this); + + return output_strands; + + } + + + std::vector Strand::Set::bundle(size_t bundle_index) const { + + if (!this->has_extend_elem_prop(Track::BUNDLE_INDEX_EPROP)) + throw Exception ("Bundle index property (" + Track::BUNDLE_INDEX_EPROP + ") not set on strand set."); + + std::vector bundle; + + for (size_t strand_i = 0; strand_i < size(); strand_i++) { + + if (get_extend_elem_prop(Track::BUNDLE_INDEX_EPROP, strand_i) == bundle_index) + bundle.push_back(strand_i); + + } + + return bundle; + + } + + size_t Strand::Set::max_degree() const { + + size_t max_degree = 0; + + for (size_t strand_i = 0; strand_i < size(); ++strand_i) + if (operator[](strand_i).degree() > max_degree) + max_degree = operator[](strand_i).degree(); + + return max_degree; + + } + + + Strand::Set Strand::Set::bundle_backbones() const { + + + if (!this->has_extend_elem_prop(Track::BUNDLE_INDEX_EPROP)) + throw Exception ("Bundle index property (" + Track::BUNDLE_INDEX_EPROP + ") not set on strand set."); + + + Strand::Set backbones; + backbones.add_extend_elem_prop(Track::BUNDLE_INDEX_EPROP,"-1"); + + std::vector bundle_indices = this->bundle_indices(); + + for (size_t bundle_i = 0; bundle_i < bundle_indices.size(); ++bundle_i) { + + std::vector bundle = this->bundle(bundle_indices[bundle_i]); + + Fibre::Strand backbone; + + for (size_t strand_i = 0; strand_i < bundle.size(); ++strand_i) + backbone += operator[](bundle[strand_i]); + + backbone /= (double)bundle.size(); + + std::map properties_row; + properties_row[Track::BUNDLE_INDEX_EPROP] = str(operator[](bundle_indices[bundle_i])); + + backbones.push_back(backbone, properties_row); + + + } + + backbones.copy_props(*this); + backbones.copy_relevant_elem_props(*this); + + return backbones; + + } + + + std::vector Strand::Set::bundle_indices() const { + + if (!this->has_extend_elem_prop(Track::BUNDLE_INDEX_EPROP)) + throw Exception ("Bundle index property (" + Track::BUNDLE_INDEX_EPROP + ") not set on strand set."); + + std::vector bundle_indices; + + for (size_t strand_i = 0; strand_i < size(); ++strand_i) { + size_t bundle_i = get_extend_elem_prop(Track::BUNDLE_INDEX_EPROP, strand_i); + + if (find(bundle_indices.begin(), bundle_indices.end(), bundle_i) == bundle_indices.end()) + bundle_indices.push_back(bundle_i); + + } + + return bundle_indices; + + } + + + void Strand::Set::project_to_sphere(double sphere_radius) { + + for (size_t strand_i = 0; strand_i < size(); ++strand_i) + operator[](strand_i).project_to_sphere(sphere_radius); + + } + + + + void Strand::Set::load(const std::string& location, size_t degree, double strands_per_acs) { + + this->clear(); + + if (File::has_or_txt_extension(location)) { + + Base::Set::load(location); + + } else if (File::has_or_txt_extension(location)) { + + if (degree < 1) + throw Exception(" '-degree' parameter is required for implicit conversion from track set ('" + location + "')."); + + Track::Set tcks (location); + + operator=(tcks.to_strands(degree)); + + this->add_extend_elem_prop(ORIGINAL_NUM_POINTS_PROP, "0"); + + for (size_t tck_i = 0; tck_i < tcks.size(); tck_i++) + this->set_extend_elem_prop(ORIGINAL_NUM_POINTS_PROP, str(tcks[tck_i].num_points()), tck_i); + + } else if (File::has_or_txt_extension(location)) { + + if (strands_per_acs <= 0.0) + throw Exception(" '-strands_per_acs' parameter is required for implicit conversion from tractlet set ('" + location + "')."); + + Tractlet::Set tractlets (location); + + set_extend_prop(ORIGINAL_NUM_TRACTLETS_PROP, str(tractlets.size())); + + operator=(tractlets.to_strands(strands_per_acs)); + + } else + throw Exception("The extension of file \"" + location + "\" is not a recognised type (\"" + Strand::FILE_EXTENSION + "\" or \"" + Track::FILE_EXTENSION + "\")."); + + } + + + Strand::Set Strand::Set::permute(const std::vector& indices) const { + + if (var_elem_degrees()) + throw Exception ("'permute' is currently not implemented for variable element size sets."); + + Set permuted_set (size(), degree(), *props, *elem_props); + + this->Fibre::Base::Set::permute(permuted_set, indices); + + return permuted_set; + + } + + + void Strand::Set::save(const std::string& location, size_t num_points, size_t num_tractlets) const { + + + if (File::has_or_txt_extension(location)) { + + //Remove ORIGINAL_NUM_POINTS_PROP property if it exists as it is no longer relevant. + if (this->has_extend_elem_prop(ORIGINAL_NUM_POINTS_PROP)) { + + Set strands = *this; + + strands.remove_extend_elem_prop(ORIGINAL_NUM_POINTS_PROP); + + strands.save(location); + + } else + + Base::Set::save(location); + + } else if (File::has_or_txt_extension(location)) { + + Track::Set tcks; + + if (num_points != 0) + + tcks = this->to_tracks(num_points); + + else if (this->has_extend_elem_prop(ORIGINAL_NUM_POINTS_PROP)) { + + for (size_t strand_i = 0; strand_i < this->size(); strand_i++) { + + size_t loaded_num_points = get_extend_elem_prop(ORIGINAL_NUM_POINTS_PROP, strand_i); + tcks.push_back(this->operator[](strand_i).to_track(loaded_num_points), this->get_extend_elem_prop_row(strand_i)); + + } + + } else + throw Exception(" \"-num_points\" parameter is required for implicit conversion to track set ('" + location + "')."); + + tcks.remove_extend_elem_prop(ORIGINAL_NUM_POINTS_PROP); + + tcks.save(location); + + } else if (File::has_or_txt_extension(location)) { + + Tractlet::Set tcts; + + std::map properties = get_extend_props(); + + std::map::const_iterator num_tract_it = properties.find(ORIGINAL_NUM_TRACTLETS_PROP); + + if (num_tractlets) + tcts = this->to_tractlets(num_tractlets, File::strip_extension(location) + ".clustered.str"); + else if (num_tract_it != properties.end()) + tcts = this->to_tractlets(to(num_tract_it->second)); + else if (has_extend_elem_prop(Track::BUNDLE_INDEX_EPROP)) + tcts = this->to_tractlets(); + else + throw Exception(" '-num_tractlets' is required for implicit conversion to tractlet set ('" + location + "') if '" + Track::BUNDLE_INDEX_EPROP + "' is not present."); + + tcts.save(location); + + } else + throw Exception("The extension of file \"" + location + "\" is not a recognised type (\"" + Strand::FILE_EXTENSION + "\" or \"" + Track::FILE_EXTENSION + "\")."); + + } + + + std::string Strand::Set::matlab_str() const { + + std::stringstream ss; + + ss << "{ 'b_intens', " << base_intensity() << ", "; + + for (size_t strand_i = 0; strand_i < size(); strand_i++) { + + ss << "{ 'acs', " << operator[](strand_i).acs() << ", ["; + + for (size_t degree_i = 0; degree_i < operator[](strand_i).size(); degree_i++) { + + for (size_t dim_i = 0; dim_i < 3; dim_i++) + ss << operator[](strand_i)[degree_i][dim_i] << " "; + + if (degree_i != 2) + ss << "; "; + + } + + ss << "] }"; + + if (strand_i != (size() -1)) + ss << ", "; + + } + + ss << " }"; + + return ss.str(); + + } + + } + +} diff --git a/src/bts/fibre/strand/set.h b/src/bts/fibre/strand/set.h new file mode 100644 index 0000000..98e1084 --- /dev/null +++ b/src/bts/fibre/strand/set.h @@ -0,0 +1,293 @@ +/* + Copyright 2010 Brain Research Institute/National ICT Australia (NICTA), Melbourne, Australia + + Written by Thomas G Close, 5/05/09. + + This file is part of Bayesian Tractlet Sampling (BTS). + + BTS is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + BTS is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with BTS. If not, see . + +*/ + + +#include "bts/fibre/track.h" + +#ifndef __bts_fibre_strand_set_h__ +#define __bts_fibre_strand_set_h__ + + +#include "bts/common.h" +#include "bts/file.h" + +#include "bts/fibre/strand.h" +#include "bts/fibre/strand/section.h" +#include "bts/fibre/base/set.h" +#include "bts/fibre/tractlet.h" +#include "bts/math/munkres.h" + +#include "bts/fibre/base/set_reader.h" +#include "bts/fibre/base/set_writer.h" + +#include "k_means/KMlocal.h" // k-means algorithms + + +namespace BTS { + + namespace Fibre { + + class Strand::Set : public Fibre::Base::Set { + + //Public Nested classes and typedefs + public: + + class Walker; + class Momentum; + typedef Base::Tensor Tensor; + typedef Base::SetReader Reader; + typedef Base::SetWriter Writer; + + typedef Base::SetTextReader TextReader; + typedef Base::SetTextWriter TextWriter; + + friend class Object; + friend class Track::Set; + friend class Tractlet::Set; + friend class Base::Tensor; + friend class Base::SetReader; + friend class Base::SetWriter; + + typedef Strand Element; + + + //Public static members + public: + + const static std::string FILE_EXTENSION; + const static std::string ORIGINAL_NUM_POINTS_PROP; + const static std::string ORIGINAL_NUM_TRACTLETS_PROP; + + + // Clustering parameters used in reduce_number. + + const static size_t NUM_STAGES = 100; // run for 100 stages + const static double MAX_ACCUM_RDL; // min consec RDL + const static double MIN_ACCUM_RDL; // min accum RDL + const static int MAX_RUN_STAGES = 3; // max run stages + const static double INIT_PROB_ACCEPTANCE; // init. prob. OF ACCEPTance + const static int TEMP_RUN_LENGTH = 10; // temp. RUN LENGTH + const static double TEMP_REDUC_FACTOR; // temp. reduction factor + + protected: + + const static char* PROPS_LIST[]; + + + //Public static functions + public: + + //Do nothing, no characteristic properties in Strand::Set class. + static std::vector& append_characteristic_property_keys(std::vector& header) { return header; } + + //Public member functions + public: + + //TODO: Make the properties of these constructors protected, add all Fibre objects to the 'friends' list of each other, and add constructors with flags to determine whether certain properties are included. + + /*! Initialises a strand set with variable strand sizes, without properties or element properties + * + * @param extended_props The extended properties of the set + */ + Set (const std::map& extended_props = std::map()) + : Fibre::Base::Set(std::vector(), std::vector(), extended_props) {} + + + /*! Initialises a strand set with variable strand sizes, with properties element propertiess + * + * @param props The set properties + * @param elem_props The element properties + * @param extended_props The extended properties of the set + */ + Set (const std::vector& props, const std::vector& elem_props, const std::map& extended_props = std::map()) + : Fibre::Base::Set(props, elem_props, extended_props) {} + + + /*! Initialises a strand set of a preset size with strand degree, without properties or element properties + * + * @param size Size of the strand set + * @param degree The (fixed) degree of the the strands in the strand set (can be freed using the 'free_elem_degree()' function) + * @param extended_props The extended properties of the set + */ + Set (size_t size, size_t degree, const std::map& extended_props = std::map()) + : Fibre::Base::Set(size, degree, degree * 3, std::vector(), std::vector(), extended_props) {} + + + /*! Initialises a strand set of a preset size with strand degree, with properties and element properties + * + * @param size Size of the strand set + * @param props The set properties + * @param elem_props The element properties + * @param degree The (fixed) degree of the the strands in the strand set (can be freed using the 'free_elem_degree()' function) + * @param extended_props The extended properties of the set + */ + Set (size_t size, size_t degree, const std::vector& props, const std::vector& elem_props, const std::map& extended_props = std::map()) + : Fibre::Base::Set(size, degree, degree * 3 + elem_props.size(), props, elem_props, extended_props) {} + + + Set (std::string file_location, size_t degree = 0, double strands_per_width = -1.0) + : Fibre::Base::Set(std::vector(), std::vector(), std::map()) + { load(file_location, degree, strands_per_width);} + + + Set (std::string file_location, double strands_per_width) + : Fibre::Base::Set(std::vector(), std::vector(), std::map()) + { load(file_location, strands_per_width);} + + + //TODO: Switch this around the other way, so that the to_strands function calls this constructor. + Set (const Track::Set& tcks, size_t degree = 0); + + + Set (const Tractlet::Set& set, size_t num_samples); + + + Set (const Tractlet::Set& set, double strands_per_vol); + + + Set (const Tractlet& set, size_t num_samples); + + + Set (const Tractlet& set, double strands_per_vol); + + + // Set (size_t num_strands, const std::map& properties = std::map()) + // : Fibre::Base::Set(num_strands, properties, 1.0) {} + // + // Set (size_t num_strands, double base_intensity, const std::map& properties = std::map()) + // : Fibre::Base::Set(num_strands, properties, base_intensity) {} + // + // Set (size_t num_strands, size_t degree, double base_intensity = 1.0, const std::map& properties = std::map()) + // : Fibre::Base::Set(num_strands, degree, properties, base_intensity) {} + // + // Set (size_t num_strands, const Strand& default_value, double base_intensity = 1.0, const std::map& properties = std::map()) + // : Fibre::Base::Set(num_strands, default_value, properties, base_intensity) {} + + + Set (const Set& s_set) + : Fibre::Base::Set(s_set) {} + + + BASE_GENERAL_FUNCTIONS(Set); + + BASE_SET_FUNCTIONS(Set); + + Track::Set to_tracks (size_t num_points) const; + + //!Uses Track::BUNDLE_INDEX property to group strands into bundles and convert the bundles into tractlets. + Tractlet::Set to_tractlets() const; + + //!First clusters strands into bundles then converts the bundles into tractlets. + //!NB:If num_tractlets argument is less than zero reverts back to to_tractlets() function. \arg num_tractlets number of tractlets to cluster + Tractlet::Set to_tractlets (size_t num_tractlets, const std::string& cluster_save_location = "") const; + + //!Creates a new tractlet for each strand \arg width width of the created tractlets. + Tractlet::Set to_tractlets (double width) const; + + + Strand::Set& cluster(size_t num_clusters); + +// Permutation default_permutation(); + + Set permute(const std::vector& indices) const; + + Set smallest_distance_set(const Set& reference) const + { Set smallest; this->Fibre::Base::Set::smallest_distance_set(reference, smallest); return smallest; } + + Set shortest_span() const; + + Set flip(const std::vector& to_flip) const; + + Strand centroid() const; + + Set peel(double distance, size_t num_length_sections, bool to_cube = false) const; + + Set reduce_number(size_t new_num); + + std::vector bundle(size_t index) const; + + Set bundle_backbones() const; + + std::vector bundle_indices() const; + + void project_to_sphere(double sphere_radius); + + size_t max_degree() const; + + size_t degree() const + { if (var_elem_degrees()) throw Exception ("Strand set has variable rows, so its 'degree' is undefined"); return elem_dgree; } + + + void load(const std::string& path, size_t degree = 0, double strands_per_width = -1.0); + + void load(const std::string& path, double strands_per_width) + { load(path, 0, strands_per_width); } + + void save(const std::string& path, size_t num_sections = 0, size_t num_tractlets = 0) const; + + + Set& operator+= (const Set& set) { Fibre::Base::Set::operator+=(set); return *this; } + Set& operator-= (const Set& set) { Fibre::Base::Set::operator-=(set); return *this; } + + Set& operator*= (const Set& set) { Fibre::Base::Set::operator*=(set); return *this; } + Set& operator*= (double c) { Fibre::Base::Set::operator*=(c); return *this; } + + Set& operator/= (const Set& set) { Fibre::Base::Set::operator/=(set); return *this; } + Set& operator/= (double c) { Fibre::Base::Set::operator/=(c); return *this; } + + Set operator+ (const Set& set) const { Set answer (*this); answer += set; return answer; } + Set operator- (const Set& set) const { Set answer (*this); answer -= set; return answer; } + + Set operator* (const Set& set) const { Set answer (*this); answer *= set; return *this; } + Set operator* (double c) const { Set answer (*this); answer *= c; return answer; } + + Set operator/ (const Set& set) const { Set answer (*this); answer /= set; return *this; } + Set operator/ (double c) const { Set answer (*this); answer /= c; return answer; } + + + inline Set& zero() { Fibre::Base::Set::zero();return *this; } + + std::string matlab_str() const; + + void calc_characteristic_properties() {} + + private: + + void from_tractlet(const Tractlet& tractlet, size_t num_width_sections); + + }; + + double distance(Strand::Set& strands, Strand::Set& reference, std::vector& matched_indices); + + double distance(Strand::Set& strands, Strand::Set& reference, std::vector& matched_indices, BTS::Math::Munkres&munkres_algorithm, MR::Math::Matrix& similarity); + + inline Strand::Set operator* (double c, Strand::Set set) + { Strand::Set answer (set); answer *= c; return answer; } + + + } + +} + + +#endif + diff --git a/src/bts/fibre/strand/set/momentum.cpp b/src/bts/fibre/strand/set/momentum.cpp new file mode 100644 index 0000000..5ec8131 --- /dev/null +++ b/src/bts/fibre/strand/set/momentum.cpp @@ -0,0 +1,73 @@ +/* + Copyright 2008 Brain Research Institute, Melbourne, Australia + + Written by Thomas G Close, Aug 2, 2010. + + This file is part of MRtrix. + + MRtrix is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + MRtrix is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with MRtrix. If not, see . + +*/ + +#include "bts/fibre/strand/set/momentum.h" + + + + +namespace BTS { + + namespace Fibre { + + const double Strand::Set::Momentum::STEP_SCALE_DEFAULT = 1.0; + const char* Strand::Set::Momentum::STEP_LOCATION_DEFAULT = "/home/tclose/data/mcmc/hamiltonian/params/stepsizes/default.str"; + + + Strand::Set::Momentum Strand::Set::Momentum::factory( const Set& state, + double step_scale, + const std::string& step_location, + const std::string& weight_location, + MCMC::Proposal::Distribution* const proposal_distribution) { + Fibre::Strand::Set step; + + if (step_location.size()) { + step.load(step_location); + + //If the loaded step only contains one strand use this as the template for the whole set + if (step.size() == 1) { + Fibre::Strand::Set full_step(state.size(), state.degree()); + full_step.copy_props(step); + full_step.copy_elem_props(step); + + for (size_t elem_i = 0; elem_i < state.size(); ++elem_i) + full_step[elem_i] = step[0]; + + step = full_step; + + } + + else if (step.size() != state.size()) + throw Exception ("Loaded step sizes' size (" + str(step.size()) + ") does not match state (" + str(state.size()) + ")."); + + } else { + step = state; + step.set(step_scale); + } + + return Fibre::Strand::Set::Momentum (proposal_distribution, step); + + } + + } + +} diff --git a/src/bts/fibre/strand/set/momentum.h b/src/bts/fibre/strand/set/momentum.h new file mode 100644 index 0000000..f73fc3c --- /dev/null +++ b/src/bts/fibre/strand/set/momentum.h @@ -0,0 +1,90 @@ +/* + Copyright 2008 Brain Research Institute, Melbourne, Australia + + Written by Thomas G Close, Aug 2, 2010. + + This file is part of MRtrix. + + MRtrix is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + MRtrix is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with MRtrix. If not, see . + +*/ + +#ifndef __bts_fibre_strand_set_momentum_h__ +#define __bts_fibre_strand_set_momentum_h__ + +#include "bts/mcmc/proposal/distribution.h" +#include "bts/mcmc/proposal/momentum.h" +#include "bts/fibre/strand/set.h" + +namespace BTS { + + namespace Fibre { + + class Strand::Set::Momentum { + + //Public static variables, nested classes and typedefs + public: + + static const double STEP_SCALE_DEFAULT; + static const char* STEP_LOCATION_DEFAULT; + + protected: + + MCMC::Proposal::Momentum mcmc_momentum; + + //Public static functions + public: + + static Momentum factory( const Set& state, + double step_scale, + const std::string& step_location, + const std::string& weight_location, + MCMC::Proposal::Distribution* const proposal_distribution); + + //Public member functions + public: + + Momentum(MCMC::Proposal::Distribution* const prop_distr = 0) + : mcmc_momentum(prop_distr) {} + + Momentum(MCMC::Proposal::Distribution* const proposal_distribution, + const Set& step_sizes) + + : mcmc_momentum(proposal_distribution, step_sizes) {} + + + void half_update_momentum(const Set& gradient) + { mcmc_momentum.half_update_momentum(gradient); } + + void update_state(Set& state) const + { MR::Math::Vector& state_vector = state; mcmc_momentum.update_state(state_vector); } + + + double predicted_change(const Set& gradient) const + { return mcmc_momentum.predicted_change(gradient); } + + + double log_kinetic_energy() const + { return mcmc_momentum.log_kinetic_energy(); } + + void randomize() + { mcmc_momentum.randomize(); } + + }; + + } + +} + +#endif /* __bts_fibre_strand_set_momentum_h__ */ diff --git a/src/bts/fibre/strand/set/tensor.cpp b/src/bts/fibre/strand/set/tensor.cpp new file mode 100644 index 0000000..48fef41 --- /dev/null +++ b/src/bts/fibre/strand/set/tensor.cpp @@ -0,0 +1,36 @@ +/* + Copyright 2008 Brain Research Institute, Melbourne, Australia + + Written by Thomas G Close, 08/08/2010. + + This file is part of MRtrix. + + MRtrix is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + MRtrix is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with MRtrix. If not, see . + +*/ + +#include "bts/fibre/strand/tensor.h" + +namespace BTS { + + namespace Fibre { + + + + + + } + +} + diff --git a/src/bts/fibre/strand/set/tensor.h b/src/bts/fibre/strand/set/tensor.h new file mode 100644 index 0000000..8d3ff97 --- /dev/null +++ b/src/bts/fibre/strand/set/tensor.h @@ -0,0 +1,237 @@ +/* + Copyright 2008 Brain Research Institute, Melbourne, Australia + + Written by Thomas G Close, 08/08/2010. + + This file is part of MRtrix. + + MRtrix is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + MRtrix is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with MRtrix. If not, see . + +*/ + +//#ifndef __bts_fibre_strand_set_tensor_h__ +//#define __bts_fibre_strand_set_tensor_h__ +// +//#include "bts/fibre/set/tensor.h" +//#include "bts/fibre/strand/set.h" +//#include "bts/fibre/tensor/writer2.h" +// +//namespace BTS { +// +// namespace Fibre { +// +// +//#ifndef STRUCTURED_SET_TENSOR +// class Strand::Set::Tensor : public MR::Math::Matrix { +// +// public: +// +// typedef Fibre::Tensor::Writer2 Writer; +// +// protected: +// +// std::vector fibre_start; +// std::vector fibre_end; +// +// public: +// +// Tensor () {} +// +// Tensor(const Set& default_value) +// : MR::Math::Matrix(default_value.vsize(), default_value.vsize()) { +// +// size_t start = default_value.has_extend_elem_prop("base_intensity"); +// +// for (size_t fibre_i = 0; fibre_i < default_value.size(); fibre_i++) { +// fibre_start.push_back(start); +// fibre_end.push_back(start += default_value[fibre_i].vsize()); +// } +// +// zero(); +// +// } +// +// +// Tensor(const Tensor& t) +// : MR::Math::Matrix(t) {} +// +// Tensor(const MR::Math::Matrix& m) +// : MR::Math::Matrix(m) {} +// +// ~Tensor() {} +// +// +// Tensor& operator= (const Tensor& t) +// { this->MR::Math::Matrix::operator=(t); return *this; } +// +// Tensor& operator= (const MR::Math::Matrix& M) +// { assert(M.rows() == this->rows() && M.columns() == this->columns()); this->MR::Math::Matrix::operator=(M); return *this; } +// +// +// size_t matrix_length() const +// { return this->rows(); } +// +// +// const MR::Math::Matrix& matrix() const +// { return *this; } +// +// Tensor& zero() +// { MR::Math::Matrix::operator=(0.0); return *this; } +// +// Tensor& invalidate() +// { MR::Math::Matrix::operator=(NAN); return *this; } +// +// void from_matrix(const MR::Math::Matrix& matrix) +// { MR::Math::Matrix::operator=(matrix); } +// +// Tensor& operator+= (const MR::Math::Matrix& tensor) +// { MR::Math::Matrix::operator+=(tensor); return *this; } +// +// Tensor& operator-= (const MR::Math::Matrix& tensor) +// { MR::Math::Matrix::operator-=(tensor); return *this; } +// +// Tensor& operator*= (const MR::Math::Matrix& tensor) +// { MR::Math::Matrix::operator*=(tensor); return *this; } +// +// Tensor& operator*= (double c) +// { MR::Math::Matrix::operator*=(c); return *this; } +// +// Tensor& operator/= (const MR::Math::Matrix& tensor) +// { MR::Math::Matrix::operator/=(tensor); return *this; } +// +// Tensor& operator/= (double c) +// { MR::Math::Matrix::operator/=(c); return *this; } +// +// Tensor operator+ (const MR::Math::Matrix& t) const +// { Tensor answer (*this); answer += t; return answer; } +// +// Tensor operator- (const MR::Math::Matrix& t) const +// { Tensor answer (*this); answer -= t; return answer; } +// +// Tensor operator* (const MR::Math::Matrix& t) const +// { Tensor answer (*this); answer *= t; return answer; } +// +// Tensor operator* (double c) const +// { Tensor answer (*this); answer *= c; return answer; } +// +// Tensor operator/ (const MR::Math::Matrix& t) const +// { Tensor answer (*this); answer /= t; return answer; } +// +// Tensor operator/ (double c) const +// { Tensor answer (*this); answer /= c; return answer; } +// +// }; +// +//// std::ostream& operator<<(std::ostream& stream, const Strand::Set::Tensor& tensor) { +//// +//// stream << "base_intensity: " << tensor.base_intensity << std::endl; +//// +//// for (size_t elem_i = 0; elem_i < tensor.size(); elem_i++) +//// stream << tensor[elem_i] << std::endl; +//// +//// return stream; +//// +//// } +// +//#else +// class Strand::Set::Tensor : public Strand::Set::Tensor_tpl { +// +// public: +// +// typedef Fibre::Tensor::Writer Writer; +// +// public: +// +// Tensor () {} +// +// Tensor(const Set& default_value) +// : Tensor_tpl(default_value) {} +// +// Tensor(const Tensor_tpl& t) +// : Tensor_tpl(t) {} +// +// ~Tensor() {} +// +// +// Tensor& operator= (const Tensor_tpl& t) +// { Tensor_tpl::operator=(t); return *this; } +// +// +// size_t matrix_length() const +// { return Flattener< Set >::length(*this); } +// +// +// MR::Math::Matrix matrix() const +// { return Flattener< Set >::flatten(*this); } +// +// +// Tensor from_matrix(const MR::Math::Matrix& matrix) +// { return Flattener< Set >::unflatten(matrix, *this); } +// +// Tensor& operator+= (const Tensor& tensor) +// { Tensor_tpl::operator+=(tensor); return *this; } +// +// Tensor& operator-= (const Tensor& tensor) +// { Tensor_tpl::operator-=(tensor); return *this; } +// +// Tensor& operator*= (const Tensor& tensor) +// { Tensor_tpl::operator*=(tensor); return *this; } +// +// Tensor& operator*= (double c) +// { Tensor_tpl::operator*=(c); return *this; } +// +// Tensor& operator/= (const Tensor& tensor) +// { Tensor_tpl::operator/=(tensor); return *this; } +// +// Tensor& operator/= (double c) +// { Tensor_tpl::operator/=(c); return *this; } +// +// Tensor operator+ (const Tensor& t) const +// { Tensor answer (*this); answer += t; return answer; } +// +// Tensor operator- (const Tensor& t) const +// { Tensor answer (*this); answer -= t; return answer; } +// +// Tensor operator* (const Tensor& t) const +// { Tensor answer (*this); answer *= t; return answer; } +// +// Tensor operator* (double c) const +// { Tensor answer (*this); answer *= c; return answer; } +// +// Tensor operator/ (const Tensor& t) const +// { Tensor answer (*this); answer /= t; return answer; } +// +// Tensor operator/ (double c) const +// { Tensor answer (*this); answer /= c; return answer; } +// +// }; +// +// std::ostream& operator<<(std::ostream& stream, const Strand::Set::Tensor& tensor) { +// +// stream << "base_intensity: " << tensor.base_intensity << std::endl; +// +// for (size_t elem_i = 0; elem_i < tensor.size(); elem_i++) +// stream << tensor[elem_i] << std::endl; +// +// return stream; +// +// } +// +//#endif +// +// } +// +//} +// +//#endif /* __bts_fibre_set_tensor_h__ */ diff --git a/src/bts/fibre/strand/set/walker.cpp b/src/bts/fibre/strand/set/walker.cpp new file mode 100644 index 0000000..b148e9c --- /dev/null +++ b/src/bts/fibre/strand/set/walker.cpp @@ -0,0 +1,95 @@ +/* + Copyright 2008 Brain Research Institute, Melbourne, Australia + + Written by Thomas G Close, Aug 2, 2010. + + This file is part of MRtrix. + + MRtrix is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + MRtrix is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with MRtrix. If not, see . + +*/ + +#include "bts/fibre/strand/set/walker.h" + +namespace BTS { + + namespace Fibre { + + + const char* Strand::Set::Walker::TYPE_DEFAULT = "standard"; + const char* Strand::Set::Walker::STEP_LOCATION_DEFAULT = "/home/tclose/data/mcmc/metropolis/params/walker/scaling.str.txt"; + const double Strand::Set::Walker::STEP_SCALE_DEFAULT = 0.01; + + Strand::Set::Walker* Strand::Set::Walker::factory(const Strand::Set& state, + const std::string& type, + double step_scale, + const std::string& step_location, + MCMC::Proposal::Distribution* distribution, + double base_intensity_scale) { + + + Walker* walker; + + if (type == "standard") { + Fibre::Strand::Set step; + + if (step_location.size()) { + step.load(step_location); + + if (step.size() == 1) { + + Fibre::Strand step_template = step[0]; + + step.resize(state.size()); + + for (size_t tract_i = 0; tract_i < state.size(); ++tract_i) { + + if (state[tract_i].size() > step_template.size()) + throw Exception ("Strand (" + str(tract_i) + ") is larger than step template."); + + step[tract_i] = step_template; + step[tract_i].resize(state[tract_i].size()); + + } + + } else if (step.size() != state.size()) + throw Exception ("Loaded step sizes' size (" + str(step.size()) + ") does not match state (" + str(state.size()) + ")."); + + step *= step_scale; + + } else { + step = state; + step.set(step_scale); + } + + walker = new Walker (distribution, step); + + } else + + throw Exception ("Unrecognised Fibre::Strand::Set::Walker type '" + type + "'."); + + return walker; + + } + + + void Strand::Set::Walker::step(const Strand::Set& current, Strand::Set& proposed, double scalar) { + + MCMC::Proposal::Walker::step(current, proposed, scalar); + + } + + } + +} diff --git a/src/bts/fibre/strand/set/walker.h b/src/bts/fibre/strand/set/walker.h new file mode 100644 index 0000000..417229b --- /dev/null +++ b/src/bts/fibre/strand/set/walker.h @@ -0,0 +1,78 @@ +/* + Copyright 2008 Brain Research Institute, Melbourne, Australia + + Written by Thomas G Close, Aug 2, 2010. + + This file is part of MRtrix. + + MRtrix is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + MRtrix is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with MRtrix. If not, see . + +*/ + +#ifndef __bts_fibre_strand_set_walker_h__ +#define __bts_fibre_strand_set_walker_h__ + +#include "bts/fibre/strand/set.h" +#include "bts/mcmc/proposal/distribution.h" +#include "bts/mcmc/proposal/walker.h" + +namespace BTS { + + namespace Fibre { + + class Strand::Set::Walker : public MCMC::Proposal::Walker { + + //Public nested classes and typedefs + public: + + class Constrained; + class AngleOnly; + + //Public static const members. + public: + + static const char* TYPE_DEFAULT; + static const double STEP_SCALE_DEFAULT; + static const char* STEP_LOCATION_DEFAULT; + + //Public static member functions. + public: + + static Walker* factory(const Set& state, + const std::string& type, + double step_scale, + const std::string& step_location, + MCMC::Proposal::Distribution* distribution, + double base_intensity_scale); + + //Public member functions + public: + + Walker(MCMC::Proposal::Distribution* const proposal_distribution, + const Set& relative_step_sizes) + + : MCMC::Proposal::Walker(proposal_distribution, relative_step_sizes) {} + + virtual ~Walker() {} + + virtual void step(const Set& current, Set& proposed, double scalar = 1.0); + + + }; + + } + +} + +#endif /* __bts_fibre_strand_walker_h__ */ diff --git a/src/bts/fibre/strand/tensor.cpp b/src/bts/fibre/strand/tensor.cpp new file mode 100644 index 0000000..b8fa698 --- /dev/null +++ b/src/bts/fibre/strand/tensor.cpp @@ -0,0 +1,72 @@ +/* + Copyright 2008 Brain Research Institute, Melbourne, Australia + + Written by Thomas G Close, 17/08/2010. + + This file is part of MRtrix. + + MRtrix is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + MRtrix is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with MRtrix. If not, see . + +*/ + + +#include "bts/fibre/strand/basic_section.h" +#include "bts/fibre/strand/section.h" +#include "bts/fibre/strand/tensor.h" +#include "bts/fibre/strand/basic_section/tensor.h" + +namespace BTS { + + namespace Fibre { + + + void Strand::Tensor::add_section_hessian(const Strand& strand, + const Section& section, + const BasicSection& gradient, + const BasicSection::Tensor& hessian) { + + + Fibre::Strand acs_inc = (section.position_coeffs.size(), 0.0); + + + acs_inc.add_section_gradient(strand, section, gradient); + + if (has_var_acs()) { + acs() += acs_inc; + acs().set_acs(0.0); + } + + for (size_t row_degree_i = 0; row_degree_i < degree(); row_degree_i++) + for (size_t row_dim_i = 0; row_dim_i < 3; row_dim_i++) { + for (size_t col_degree_i = 0; col_degree_i < degree(); col_degree_i++) + for (size_t col_dim_i = 0; col_dim_i < 3; col_dim_i++) { + double& elem = operator()(row_degree_i,row_dim_i, col_degree_i,col_dim_i); + elem += section.position_coeffs[row_degree_i] * section.position_coeffs[col_degree_i] * hessian.position(row_dim_i).position(col_dim_i) + + section.position_coeffs[row_degree_i] * section.tangent_coeffs[col_degree_i] * hessian.position(row_dim_i).tangent(col_dim_i) * section.length_fraction + + section.tangent_coeffs[row_degree_i] * section.position_coeffs[col_degree_i] * hessian.tangent(row_dim_i).position(col_dim_i) * section.length_fraction + + section.tangent_coeffs[row_degree_i] * section.tangent_coeffs[col_degree_i] * hessian.tangent(row_dim_i).tangent(col_dim_i) * MR::Math::pow2(section.length_fraction); + + } + + if (has_var_acs()) + row(row_degree_i * 3 + row_dim_i).var_acs() += acs_inc[row_degree_i][row_dim_i]; + } + + } + + + } + +} + diff --git a/src/bts/fibre/strand/tensor.h b/src/bts/fibre/strand/tensor.h new file mode 100644 index 0000000..f24489c --- /dev/null +++ b/src/bts/fibre/strand/tensor.h @@ -0,0 +1,119 @@ +/* + Copyright 2008 Brain Research Institute, Melbourne, Australia + + Written by Thomas G Close, 07/08/2010. + + This file is part of MRtrix. + + MRtrix is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + MRtrix is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with MRtrix. If not, see . + +*/ + +#ifndef __bts_fibre_strand_tensor_h__ +#define __bts_fibre_strand_tensor_h__ + + +#include "bts/fibre/strand.h" +#include "bts/fibre/strand/tensor.h" +#include "bts/fibre/base/tensor.h" +#include "bts/fibre/strand/basic_section/tensor.h" + + + +namespace BTS { + + namespace Fibre { + + class Strand::Tensor : public Base::Tensor { + + + public: + +// typedef Base::Tensor::Writer Writer; + + //Public member functions + public: + + Tensor() {} + + Tensor(const Strand& strand_template) + : Base::Tensor(strand_template) {} + + + Tensor (const Strand& strand_template, const MR::Math::Matrix::View& view) + : Base::Tensor(strand_template, view) {} + + + Tensor(const Tensor& t) + : Base::Tensor(t) {} + + + Tensor& operator=(const Tensor& t) + { Base::Tensor::operator=(t); return *this; } + + Tensor& operator=(const MR::Math::Matrix& m) + { Base::Tensor::operator=(m); return *this; } + + Tensor& operator=(double c) + { Base::Tensor::operator=(c); return *this; } + + size_t degree() const + { return tmpl.degree(); } + + size_t vsize() const + { return tmpl.vsize(); } + + Strand row(size_t idx) + { return Strand(degree(), MR::Math::Matrix::row(idx), tmpl.props); } + + const Strand row(size_t idx) const + { return Strand(degree(), MR::Math::Matrix::row(idx), tmpl.props); } + + Strand column(size_t idx) + { return Strand(degree(), MR::Math::Matrix::column(idx), tmpl.props); } + + const Strand column(size_t idx) const + { return Strand(degree(), MR::Math::Matrix::column(idx), tmpl.props); } + + bool has_var_acs() const + { return tmpl.has_var_acs(); } + + Strand acs() + { assert(has_var_acs()); return Strand(degree(), MR::Math::Matrix::row(vsize() + tmpl.prop_index(Strand::ACS_SQRT_PROP)), tmpl.props); } + + + double& operator()(size_t row_degree_i, size_t row_dim_i, size_t col_degree_i, size_t col_dim_i) + { return MR::Math::Matrix::operator()(row_degree_i * 3 + row_dim_i, col_degree_i * 3 + col_dim_i); } + + + double operator()(size_t row_degree_i, size_t row_dim_i, size_t col_degree_i, size_t col_dim_i) const + { return MR::Math::Matrix::operator()(row_degree_i * 3 + row_dim_i, col_degree_i * 3 + col_dim_i); } + + + Strand operator[](size_t idx) + { return Strand(degree(), MR::Math::Matrix::row(idx), tmpl.props); } + + const Strand operator[](size_t idx) const + { return Strand(degree(), MR::Math::Matrix::row(idx), tmpl.props); } + + void add_section_hessian(const Strand& strand, const Section& section, const BasicSection& gradient, const BasicSection::Tensor& hessian); + + + }; + + } + +} + +#endif /* __bts_fibre_strand_tensor_h__ */ diff --git a/src/bts/fibre/strand/walker.h b/src/bts/fibre/strand/walker.h new file mode 100644 index 0000000..78dc210 --- /dev/null +++ b/src/bts/fibre/strand/walker.h @@ -0,0 +1,56 @@ +/* + Copyright 2008 Brain Research Institute, Melbourne, Australia + + Written by Thomas G Close, Aug 2, 2010. + + This file is part of MRtrix. + + MRtrix is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + MRtrix is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with MRtrix. If not, see . + +*/ + +#ifndef __bts_fibre_strand_walker_h__ +#define __bts_fibre_strand_walker_h__ + +#include "bts/fibre/strand.h" +#include "bts/mcmc/proposal/walker.h" +#include "bts/mcmc/proposal/distribution.h" + +namespace BTS { + + namespace Fibre { + + class Strand::Walker : public MCMC::Proposal::Walker { + + //Public member functions + public: + + Walker(MCMC::Proposal::Distribution* const prop_distr) + : MCMC::Proposal::Walker(prop_distr) {} + + Walker(MCMC::Proposal::Distribution* const proposal_distribution, + const Strand& relative_step_sizes) + + : MCMC::Proposal::Walker(proposal_distribution, relative_step_sizes) {} + + virtual ~Walker() {} + + + }; + + } + +} + +#endif /* __bts_fibre_strand_walker_h__ */ diff --git a/src/bts/fibre/track.cpp b/src/bts/fibre/track.cpp new file mode 100644 index 0000000..d60a806 --- /dev/null +++ b/src/bts/fibre/track.cpp @@ -0,0 +1,106 @@ +/* + Copyright 2010 Brain Research Institute/National ICT Australia (NICTA), Melbourne, Australia + + Written by Thomas G Close, 5/05/09. + + This file is part of Bayesian Tractlet Sampling (BTS). + + BTS is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + BTS is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with BTS. If not, see . + +*/ + + +#include "bts/fibre/track.h" +#include "bts/fibre/strand.h" +#include "math/matrix.h" +//#include "math/matrix_ops.h" +#include "math/least_squares.h" + + + +namespace BTS { + + namespace Fibre { + + const std::string Track::RADIUS_PROP = "track_radius"; + const std::string Track::BUNDLE_INDEX_EPROP = "bundle_index"; + const std::string Track::RADIUS_PROP_DEFAULT = "0.02"; + + const Coord Track::FILE_SEPARATOR = Triple (NAN, NAN, NAN); + const std::string Track::FILE_EXTENSION = "tck"; + + const char* Track::PROPS_LIST[] = { Object::ACS_SQRT_PROP, PROPS_LIST_END }; + +// const char* Track::INTRINSIC_PROPERTIES[Track::NUM_INTRINSIC_PROPERTIES] = {}; + + + + Track::Track(const Strand& s, size_t num_points, bool include_endpoints) + : Base::Object (num_points, num_points * 3 + s.num_props(), select_props(*s.props)) { + + if (num_points == 0) + throw Exception ("'num_length_sections' option is required for conversion to tracks."); + + const MR::Math::Matrix& position_matrix = Strand::position_matrix(num_points, s.degree(), include_endpoints); + + for (size_t point_i = 0; point_i < num_points; point_i++) + operator[](point_i) = s.left_product(position_matrix.row(point_i)); + + for (size_t prop_i = 0; prop_i < num_props(); ++prop_i) + prop(prop_i) = s.prop(prop_key(prop_i)); + + } + + + Strand Track::to_strand(size_t degree) const { + + return Strand(*this,degree); + + } + + + Strand Track::to_strand(size_t degree, const std::vector& timeline) const { + + return Strand(*this,degree,timeline); + + } + + + Coord Track::left_product(const MR::Math::Vector::View& row_vector) const { + + assert(row_vector.size() >= num_points()); + + Coord product(0,0,0); + + for (size_t point_i = 0; point_i < num_points(); point_i++) + product += operator[](point_i) * row_vector[point_i]; + + return product; + + } + + + std::ostream& operator<< (std::ostream& stream, const Track& tck) { + stream << std::endl; + for (size_t point_i = 0; point_i < tck.num_points(); point_i++) { + stream << tck[point_i] << std::endl; + } + + return (stream); + } + + + } + +} diff --git a/src/bts/fibre/track.h b/src/bts/fibre/track.h new file mode 100644 index 0000000..27a53ed --- /dev/null +++ b/src/bts/fibre/track.h @@ -0,0 +1,174 @@ +/* + Copyright 2010 Brain Research Institute/National ICT Australia (NICTA), Melbourne, Australia + + Written by Thomas G Close, 5/05/09. + + This file is part of Bayesian Tractlet Sampling (BTS). + + BTS is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + BTS is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with BTS. If not, see . + +*/ + +#ifndef __bts_fibre_track_h__ +#define __bts_fibre_track_h__ + + +#include "bts/common.h" +#include "bts/fibre/base/object.h" +#include "bts/coord.h" + +#include "bts/fibre/base/writer.h" +#include "bts/fibre/base/reader.h" + +namespace BTS { + + namespace Fibre { + + class Track : public Base::Object { + + public: + + typedef Coord Element; + + class Set; + + typedef Base::Reader Reader; + typedef Fibre::Base::Writer Writer; + + typedef Base::TextReader TextReader; + typedef Base::TextWriter TextWriter; + + friend class Object; + friend class Strand; + friend class Tractlet; + friend class Set; + friend class Base::Set; + friend class Base::Reader; + friend class Base::Writer; + + public: + + const static Coord FILE_SEPARATOR; + const static std::string FILE_EXTENSION; + const static std::string RADIUS_PROP; + const static std::string BUNDLE_INDEX_EPROP; + const static std::string RADIUS_PROP_DEFAULT; + + protected: + + const static char* PROPS_LIST[]; + + public: + + const static size_t NUM_LENGTH_SECTIONS_DEFAULT = 100; + + public: + + Track (size_t num_points = 0, const std::vector props = std::vector()) + : Base::Object (num_points, num_points * 3 + props.size(), props) { set(NAN); } + + Track (const Track& t) + : Base::Object(t) {} + + ~Track() {} + + Track& operator=(const Track& t) + { Base::Object::operator=(t); return *this; } + + + Track (const Strand& s, size_t num_points, bool include_endpoints = 0); + + protected: + + /*! Used by Base::Set::operator[]() to initiate a from a section of a larger state vector or + * by Base::Tensor::row/column() for a slice of the tensor matrix + * + * @param num_points The number of points in the track + * @param view The view onto the larger vector or matrix + * @param props The properties stored in the set or tensor + */ + Track(size_t num_points, const MR::Math::Vector::View& view, std::vector* props) + : Base::Object(num_points, view, props) {} + + public: + + BASE_GENERAL_FUNCTIONS(Track); + + BASE_ADD_SUBTRACT_FUNCTIONS(Track); + + BASE_MULT_DIVIDE_FUNCTIONS(Track); + + /*! Used in Base::Set functions that need to differentiate between a tractlets degree and its size, which for + * Strand's and Track's they are equivlaent. + * + * @return The size of the Track + */ + size_t degree() const + { return size(); }; + + double acs() const + { return has_prop(ACS_SQRT_PROP) ? prop(ACS_SQRT_PROP) : 1.0; } + + void add_acs(double acs = 1.0) + { add_prop(ACS_SQRT_PROP, acs); } + + void set_acs(double acs) + { assert(acs >= 0); prop(ACS_SQRT_PROP) = MR::Math::sqrt(acs); } + + void remove_acs() + { remove_prop(ACS_SQRT_PROP); } + + Track base() + { return Track(sze, sub(0,bsize()), &EMPTY_PROPS); } + + const Track base() const + { return Track(sze, sub(0,bsize()), &EMPTY_PROPS); } + + Track& operator+= (const Coord& p) + { for (size_t point_i = 0; point_i < size(); point_i++) operator[](point_i) += p; return *this; } + + Track& operator-= (const Coord& p) + { for (size_t point_i = 0; point_i < size(); point_i++) operator[](point_i) -= p; return *this; } + + Track operator+ (const Coord& p) const + { Track answer(*this); answer += p; return answer; } + + Track operator- (const Coord& p) const + { Track answer(*this); answer -= p; return answer; } + + size_t num_points() const + { return size(); } + + Strand to_strand(size_t degree) const; + + Strand to_strand(size_t degree, const std::vector& timeline) const; + + Coord left_product(const MR::Math::Vector::View& row_vector) const; + + + }; + + + std::ostream& operator<< (std::ostream& stream, const Track& tck); + + } + +} + +#undef LOOP + +#endif + + + diff --git a/src/bts/fibre/track/set.cpp b/src/bts/fibre/track/set.cpp new file mode 100644 index 0000000..6f7620a --- /dev/null +++ b/src/bts/fibre/track/set.cpp @@ -0,0 +1,326 @@ +/* + Copyright 2010 Brain Research Institute/National ICT Australia (NICTA), Melbourne, Australia + + Written by Thomas G Close, 5/05/09. + + This file is part of Bayesian Tractlet Sampling (BTS). + + BTS is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + BTS is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with BTS. If not, see . + +*/ + +#include "bts/fibre/track/set.h" +#include "bts/fibre/strand/set.h" +#include "bts/fibre/tractlet/set.h" +#include "bts/fibre/track.h" + +#include "bts/fibre/base/reader.cpp.h" +#include "bts/fibre/base/writer.cpp.h" + + +namespace BTS { + + namespace Fibre { + + const std::string Track::Set::FILE_EXTENSION = "kst"; + + const char* Track::Set::PROPS_LIST[] = { Base::Set::BASE_INTENSITY_PROP, PROPS_LIST_END }; + + const std::string Track::Set::ORIGINAL_DEGREE_PROP = "loaded_degree"; + + + Track::Set::Set (const Strand::Set& strands, size_t num_length_sections) + : Base::Set(strands.size(), + num_length_sections, + num_length_sections * 3 + select_props(*strands.elem_props).size(), + select_props(*strands.props), + select_props(*strands.elem_props), + strands.get_extend_props()) { + + from_strands(strands, num_length_sections); + + } + + + Track::Set::Set(const Tractlet::Set& tractlets, size_t num_length_sections, size_t num_width_sections) + : Base::Set(tractlets.size(), + num_length_sections, + num_length_sections * 3 + select_props(*tractlets.elem_props).size(), + select_props(*tractlets.props), + select_props(*tractlets.elem_props), + tractlets.get_extend_props()) { + + + Strand::Set strands (tractlets, num_width_sections); + + resize(strands.size()); + + from_strands(strands, num_length_sections); + + } + + + Track::Set::Set(const Tractlet::Set& tractlets, size_t num_length_sections, double strands_per_acs) + : Base::Set(tractlets.size(), + num_length_sections, + num_length_sections * 3 + select_props(*tractlets.elem_props).size(), + select_props(*tractlets.props), + select_props(*tractlets.elem_props), + tractlets.get_extend_props()) { + + Strand::Set strands (tractlets, strands_per_acs); + + resize(strands.size()); + + from_strands(strands, num_length_sections); + + } + + + void Track::Set::from_strands(const Strand::Set& strands, size_t num_length_sections) { + + // Record the original degree of the strands, just in case the set needs to be converted back into strands again + // afterwards. + add_extend_elem_prop(Track::Set::ORIGINAL_DEGREE_PROP, "0"); + + for (size_t strand_i = 0; strand_i < size(); strand_i++) { + + operator[](strand_i) = Track(strands[strand_i], num_length_sections); + set_extend_elem_prop(Track::Set::ORIGINAL_DEGREE_PROP, str(strands[strand_i].degree()), strand_i); + + } + + for (size_t prop_i = 0; prop_i < num_props(); ++prop_i) + prop(prop_i) = strands.prop(prop_key(prop_i)); + + copy_extend_elem_props(strands); + + + } + + + Strand::Set Track::Set::to_strands(size_t degree) const { + + return Strand::Set(*this, degree); + + } + + + Tractlet::Set Track::Set::to_tractlets (size_t degree) const { + + return Tractlet::Set(*this, degree); + + } + + + Tractlet::Set Track::Set::to_tractlets (size_t degree, size_t num_tractlets) const { + + return Tractlet::Set(*this, degree, num_tractlets); + + } + + + Tractlet::Set Track::Set::to_tractlets (size_t degree, double width) const { + + return Tractlet::Set(*this, degree, width); + + } + + + void Track::Set::remove_short_tracks(size_t min_num_points) { + + for (size_t tck_i = 0; tck_i < this->size(); tck_i++) { + + if (operator[](tck_i).num_points() < min_num_points) { + + std::cout << std::endl << "Erased tck " << tck_i << " as it only had " << operator[](tck_i).num_points() << " control points." << std::endl; + + this->erase(tck_i); + + } + + } + + } + + + void Track::Set::load(const std::string& location, size_t num_points, double strands_per_acs) { + + + this->clear(); + + if (File::has_or_txt_extension(location)) + + this->Base::Set::load(location); + + else if (File::has_or_txt_extension(location)) { + + if (num_points < 1) + throw Exception(" '-num_points' parameter is required for implicit conversion from strand set ('" + location + "')."); + + Strand::Set strands (location); + + operator=(strands.to_tracks(num_points)); + + this->add_extend_elem_prop(ORIGINAL_DEGREE_PROP, "0"); + + for (size_t strand_i = 0; strand_i < strands.size(); strand_i++) + this->set_extend_elem_prop(ORIGINAL_DEGREE_PROP, str(strands[strand_i].degree()), strand_i); + + } else if (File::has_or_txt_extension(location)) { + + if (strands_per_acs <= 0.0) + throw Exception(" '-strands_per_acs' parameter is required for implicit conversion from tractlet set ('" + location + "')."); + + Tractlet::Set tractlets (location); + + operator=(tractlets.to_tracks(num_points, strands_per_acs)); + + this->add_extend_elem_prop(ORIGINAL_DEGREE_PROP, "0"); + + for (size_t tck_i = 0; tck_i < size(); tck_i++) { + + size_t tract_i = to(get_extend_elem_prop(BUNDLE_INDEX_EPROP, tck_i)); + + set_extend_elem_prop(ORIGINAL_DEGREE_PROP, str(tractlets[tract_i].degree()), tck_i); + } + + + } else + throw Exception("The extension of file \"" + location + "\" is not a recognised type (\"" + Track::FILE_EXTENSION + "\" or \"" + Strand::FILE_EXTENSION + "\")."); + + } + + + void Track::Set::save(const std::string& location, size_t degree, size_t num_tractlets) const { + + if (File::has_or_txt_extension(location)) { + + //Remove ORIGINAL_DEGREE_PROP property if it exists as it is no longer relevant. + if (this->has_extend_elem_prop(ORIGINAL_DEGREE_PROP)) { + + Set tcks = *this; + + tcks.remove_extend_elem_prop(ORIGINAL_DEGREE_PROP); + + tcks.Base::Set::save(location); + + } else + + this->Base::Set::save(location); + + + } else if (File::has_or_txt_extension(location)) { + + Strand::Set strands; + + if (degree) + strands = this->to_strands(degree); + + else if (this->has_extend_elem_prop(ORIGINAL_DEGREE_PROP)) { + + for (size_t tck_i = 0; tck_i < this->size(); tck_i++) { + size_t loaded_degree = to(this->get_extend_elem_prop(ORIGINAL_DEGREE_PROP, tck_i)); + strands.push_back(this->operator[](tck_i).to_strand(loaded_degree)); + } + + strands.copy_extend_elem_props(*this); + + } else + throw Exception(" '-degree' is required for implicit conversion to strand set ('" + location + "')."); + + strands.remove_extend_elem_prop(ORIGINAL_DEGREE_PROP); + + strands.save(location); + + } else if (File::has_or_txt_extension(location)) { + + Tractlet::Set tractlets; + + Strand::Set strands; + + if (degree) + strands = this->to_strands(degree); + else if (this->has_extend_elem_prop(ORIGINAL_DEGREE_PROP)) { + for (size_t tck_i = 0; tck_i < this->size(); tck_i++) { + size_t loaded_degree = to(this->get_extend_elem_prop(ORIGINAL_DEGREE_PROP, tck_i)); + strands.push_back(this->operator[](tck_i).to_strand(loaded_degree)); + } + strands.copy_extend_elem_props(*this); + } else + throw Exception(" '-degree' is required for implicit conversion to strand set ('" + location + "')."); + + if (!has_extend_elem_prop(BUNDLE_INDEX_EPROP) && !num_tractlets) + throw Exception(" '-num_tractlets' is required for implicit conversion to tractlet set ('" + location + "') if '" + BUNDLE_INDEX_EPROP + "' is not present."); + + tractlets = strands.to_tractlets(num_tractlets); + tractlets.copy_extend_elem_props(*this); + tractlets.save(location); + + } else + throw Exception("The extension of file \"" + location + "\" is not a recognised type (\"" + Track::FILE_EXTENSION + "\" or \"" + Strand::FILE_EXTENSION + "\")."); + + } + + + Track::Set Track::Set::peel(double distance, bool to_cube) { + + Track::Set include(get_extend_props()); + + include.set_extend_prop("peel_distance",str(distance)); + + if (to_cube) + include.set_extend_prop("peel_shape","cube"); + else + include.set_extend_prop("peel_shape","sphere"); + + include.add_extend_elem_props(*this); + + for (size_t tck_i = 0; tck_i < this->size(); tck_i++) { + + Track tck = operator[](tck_i); + + bool in_roi = false; + + for (size_t point_i = 0; point_i < tck.num_points(); point_i++) { + + if (to_cube) { + if ((abs(tck[point_i][X]) <= distance) && (abs(tck[point_i][Y]) <= distance) && (abs(tck[point_i][Z]) <= distance)) { + in_roi = true; + break; + } + } else + if (tck[point_i].norm() <= distance) { + in_roi = true; + break; + } + + } + + if (in_roi) + include.push_back(tck, this->get_extend_elem_prop_row(tck_i)); + + } + + include.copy_props(*this); + include.copy_relevant_elem_props(*this); + + return include; + } + + + + } + +} diff --git a/src/bts/fibre/track/set.h b/src/bts/fibre/track/set.h new file mode 100644 index 0000000..1db9fb0 --- /dev/null +++ b/src/bts/fibre/track/set.h @@ -0,0 +1,231 @@ +/* + Copyright 2010 Brain Research Institute/National ICT Australia (NICTA), Melbourne, Australia + + Written by Thomas G Close, 5/05/09. + + This file is part of Bayesian Tractlet Sampling (BTS). + + BTS is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + BTS is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with BTS. If not, see . + +*/ + +#ifndef __bts_fibre_track_set_h__ +#define __bts_fibre_track_set_h__ + + +#include "bts/common.h" + +#include "bts/fibre/strand/set.h" +#include "bts/fibre/track.h" + +#include "bts/fibre/base/set.h" + + + +namespace BTS { + + namespace Fibre { + + class Track::Set : public Base::Set { + + public: + + typedef Base::SetReader Reader; + typedef Base::SetWriter Writer; + + typedef Base::SetTextReader TextReader; + typedef Base::SetTextWriter TextWriter; + + friend class Object; + friend class Strand::Set; + friend class Tractlet::Set; + + friend class Base::SetReader; + friend class Base::SetWriter; + + //Public static constants + public: + + const static std::string FILE_EXTENSION; + + const static std::string ORIGINAL_DEGREE_PROP; + + protected: + + const static char* PROPS_LIST[]; + + //Public methods; + public: + + + /*! Initialises a tractlet set with variable tractlet sizes, without base intensity or tractlet intensities + * + * @param extended_props The extended properties of the set + */ + Set (const std::map& extended_props = std::map()) + : Fibre::Base::Set(std::vector(), std::vector(), extended_props) {} + + + + /*! Initialises a track set with variable strand sizes, with properties element propertiess + * + * @param props The set properties + * @param elem_props The element properties + * @param extended_props The extended properties of the set + */ + Set (const std::vector& props, const std::vector& elem_props, const std::map& extended_props = std::map()) + : Fibre::Base::Set(props, elem_props, extended_props) {} + + + + /*! Initialises a tractlet set of a preset size with tractlet degree + * + * @param size Size of the tractlet set + * @param num_points The (fixed) number of points per track in the set (can be freed using the 'free_elem_degree()' function) + * @param extended_props The extended properties of the set + */ + Set (size_t size, size_t num_points, const std::map& extended_props = std::map()) + : Fibre::Base::Set(size, num_points, num_points * 3, std::vector(), std::vector(), extended_props) {} + + + /*! Initialises a track set of a preset size with strand degree, with properties and element properties + * + * @param size Size of the track set + * @param props The set properties + * @param elem_props The element properties + * @param num_points The (fixed) number of points in the the tracks in the track set (can be freed using the 'free_elem_degree()' function) + * @param extended_props The extended properties of the set + */ + Set (size_t size, size_t num_points, const std::vector& props, const std::vector& elem_props, const std::map& extended_props = std::map()) + : Fibre::Base::Set(size, num_points, num_points * 3 + elem_props.size(), props, elem_props, extended_props) {} + + +// +// Set (const std::map& properties = std::map()) +// : Base::Set(properties) {} +// +// Set (size_t num_tcks, const std::map& properties = std::map()) +// : Base::Set(num_tcks, properties) {} +// +// Set (size_t num_tcks, size_t degree, const std::map& properties = std::map()) +// : Base::Set(num_tcks, degree, properties) {} +// +// Set (size_t num_tcks, const Track& default_value, const std::map& properties = std::map()) +// : Base::Set(num_tcks, default_value, properties) {} + + + + Set (const Set& s_set) + : Base::Set(s_set) {} + + Set (std::string file_location, size_t num_points = 0, double strands_per_width = -1.0) + : Fibre::Base::Set(std::vector(), std::vector(), std::map()) + { load(file_location, num_points, strands_per_width); } + + Set (std::string file_location, double strands_per_width) + : Fibre::Base::Set(std::vector(), std::vector(), std::map()) + { load(file_location, strands_per_width); } + + Set (const Strand::Set& strands, size_t num_length_sections = 0); + + + Set (const Tractlet::Set& t, size_t num_length_sections, size_t num_width_sections); + + + Set (const Tractlet::Set& t, size_t num_length_sections, double strands_per_acs); + + + BASE_GENERAL_FUNCTIONS(Set); + + BASE_SET_FUNCTIONS(Set); + + + Strand::Set to_strands(size_t degree) const; + + Tractlet::Set to_tractlets(size_t degree) const; + + Tractlet::Set to_tractlets(size_t degree, size_t num_tractlets) const; + + Tractlet::Set to_tractlets(size_t degree, double width) const; + + Set peel(double distance, bool to_cube = false); + + Set trim(double sphere_radius); + + void remove_short_tracks(size_t min_num_points); + + void load(const std::string& path, size_t num_points = 0, double strands_per_width = -1.0); + + void load(const std::string& path, double strands_per_width) + { load(path, 0, strands_per_width); } + + void save(const std::string& path, size_t degree = 0, size_t num_tractlets = 0) const; + + + Set& operator+= (const Set& set) + { Base::Set::operator+=(set); return *this; } + + Set& operator-= (const Set& set) + { Base::Set::operator-=(set); return *this; } + + Set& operator*= (const Set& set) + { Base::Set::operator*=(set); return *this; } + + Set& operator*= (double c) + { Base::Set::operator*=(c); return *this; } + + + Set& operator/= (const Set& set) + { Base::Set::operator/=(set); return *this; } + + Set& operator/= (double c) + { Base::Set::operator/=(c); return *this; } + + + Set operator+ (const Set& set) const + { Set answer (*this); answer += set; return answer; } + + Set operator- (const Set& set) const + { Set answer (*this); answer -= set; return answer; } + + Set operator* (const Set& set) const + { Set answer (*this); answer *= set; return answer; } + + Set operator* (double c) const + { Set answer (*this); answer *= c; return answer; } + + + Set operator/ (const Set& set) const + { Set answer (*this); answer /= set; return answer; } + + Set operator/ (double c) const + { Set answer (*this); answer /= c; return answer; } + + private: + + void from_strands(const Strand::Set& strands, size_t num_length_sections); + + }; + + + + inline Track::Set operator* (double c, Track::Set set) + { Track::Set answer (set); answer *= c; return answer; } + + } + +} + + +#endif diff --git a/src/bts/fibre/tractlet.cpp b/src/bts/fibre/tractlet.cpp new file mode 100644 index 0000000..d964550 --- /dev/null +++ b/src/bts/fibre/tractlet.cpp @@ -0,0 +1,637 @@ +/* + Copyright 2010 Brain Research Institute/National ICT Australia (NICTA), Melbourne, Australia + + Written by Thomas G Close, 5/05/09. + + This file is part of Bayesian Tractlet Sampling (BTS). + + BTS is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + BTS is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with BTS. If not, see . + +*/ + + +#include "math/matrix.h" + +#include "bts/triple.h" + +#include "bts/common.h" +#include "bts/math/common.h" + +#include "bts/math/svd.h" +#include "bts/fibre/tractlet.h" +#include "bts/fibre/strand/set.h" +#include "bts/fibre/track/set.h" +#include "bts/fibre/tractlet/section.h" + +#include "phantom/subdiv/subdiv.h" +#include "phantom/resample/resample.h" + +#include "phantom/interface.h" + +//#include "bts/image/expected/buffer.h" + +namespace BTS { + + namespace Fibre { + + + const Coord Tractlet::FILE_SEPARATOR = Triple (-INFINITY, -INFINITY, -INFINITY); + const std::string Tractlet::FILE_EXTENSION = "tct"; + + const char* Tractlet::PROPS_LIST[] = { Object::ACS_SQRT_PROP, PROPS_LIST_END }; + + const double Tractlet::STRANDS_PER_AREA_DEFAULT = 1000; + + const double Tractlet::REASONABLE_WIDTH = 0.1; + + + +// Tractlet::Tractlet (std::vector axes, double base_width, double acs) +// +// : acs(acs), base_width(base_width), axes(axes) { +// +// if (axes.size() != 3) +// throw Exception ("axes must be of length 3 (one for each spatial dimension)."); +// +// if (axes[1].degree() != axes[0].degree() || axes[2].degree() != axes[0].degree()) +// throw Exception ("axes degrees do not match {" + str(axes[0].degree()) + ", " + str(axes[1].degree()) + ", " + str(axes[2].degree()) +"}"); +// +// this->axes[1][0].normalise(); +// this->axes[2][0].normalise(); +// +// init(); +// +// } + + + + Tractlet::Tractlet (Track t, size_t degree, double width) + : Base::Object((size_t)3, 3 * degree, select_props(*t.props)), dgree(degree) { + + from_track(t, degree, width); + + for (size_t prop_i = 0; prop_i < num_props(); ++prop_i) + prop(prop_i) = t.prop(t.prop_key(prop_i)); + + } + + + Tractlet::Tractlet(const Strand& s, double width) + : Base::Object((size_t)3, 3 * s.degree(), select_props(*s.props)), dgree(s.degree()) { + + from_track(Track(s, Track::NUM_LENGTH_SECTIONS_DEFAULT), s.degree(), width); + + for (size_t prop_i = 0; prop_i < num_props(); ++prop_i) + prop(prop_i) = s.prop(s.prop_key(prop_i)); + + } + + + void Tractlet::from_track(Track primary_axis, size_t degree, double width) { + + //acs(acs), base_width(1.0), axes(3) { + + //Requires a bit of stuffing around changing formats to use subdiv function from NFG suite. + Fibre::Track::Set tcks(1, primary_axis.num_points()), subdivided; + tcks[0] = primary_axis.base(); + + std::vector > pre_points; + std::vector > post_points; + + ::Strand_collection c, subdivided_c;//; + + ::generate_pre_points(tcks, pre_points); + + ::generate_post_points(tcks, post_points); + + //Assign the radius of the primary axis to be that of the desired width. + tcks.add_extend_elem_prop(BTS::Fibre::Track::RADIUS_PROP, str(width)); + + ::convert_mr_to_nfg(&c, tcks, pre_points, post_points); + + //Subdivide the strand so that 7 subdivided strands are in place of the original axis. + ::subdivide_collection(&subdivided_c, &c, width/2.0001); + + ::convert_nfg_to_mr(subdivided, pre_points, post_points, &subdivided_c); + + //Convert subdivided back into strands. + Strand::Set subdiv_strands = subdivided.to_strands(degree); + + Strand ax1_max = (subdiv_strands[0] + subdiv_strands[1])/2.0; + Strand ax2_max = subdiv_strands[2]; + + operator[](0) = primary_axis.base().to_strand(degree); + + operator[](1) = ax1_max - operator[](0); + operator[](2) = ax2_max - operator[](0); + + for (size_t prop_i = 0; prop_i < num_props(); ++prop_i) + prop(prop_i) = primary_axis.prop(prop_key(prop_i)); + + } + + + std::vector Tractlet::cross_sectional_areas(size_t num_points) const { + + std::vector areas(num_points); + + // Get tangents to the primary path of the tractlet at 'num_points' along its path. + Fibre::Track primary_tang = operator[](0).to_tangents(num_points); + + // Get the extent of the auxiliary axis at 'num_points' along its path. + Fibre::Track aux_disp_1 = operator[](1).to_track(num_points); + Fibre::Track aux_disp_2 = operator[](2).to_track(num_points); + + for (size_t point_i = 0; point_i < num_points; ++point_i) { + + // Get the normal to the oval defined by the two auxiliary axes at tau=point_i/num_points along the tractlet, + // scaled by the oval's area. + Coord area_normal = (M_PI / 4.0) * aux_disp_1[point_i].cross(aux_disp_2[point_i]); + + // Normalise the tangent of the primary axis at the current point (!note that it is done in place as it is not used again). + const Coord norm_tangent = primary_tang[point_i].normalise(); + + // Get the component of the ovals area that is perpendicular to the tractlet's primary + areas[point_i] = MR::Math::abs(area_normal.dot(norm_tangent)); + + } + + return areas; + + } + + + + + + //Ensure that tractlets do not pass through themselves + Tractlet& Tractlet::sanitize() { + + Coord primary = operator[](0)[1]; + Coord norm_primary = primary; + + if (norm_primary.norm() != 0) { + + norm_primary.normalise(); + + + std::vector > perps(2); + + //Get the component of the first axis that is perpendicular to the primary orientation + perps[0] = operator()(0,0) - norm_primary * operator()(0,0).dot(norm_primary); + + //Get the component of the first axis that is perpendicular to both the primary orientation and first axis + Triple perp2_orient = perps[0].cross(primary).normalise(); + + perps[1] = perp2_orient * operator[](2)[0].dot(perp2_orient); + + for (size_t ax_i = 1; ax_i < 3; ++ax_i) { + + Coord base = operator[](ax_i)[0]; + Coord perp = perps[ax_i-1]; + + if (perp.norm() < REASONABLE_WIDTH) { + base -= perp; + perp *= REASONABLE_WIDTH / perp.norm(); + base += perp; + } + + for (size_t degree_i = 1; degree_i < degree(); ++degree_i) + for (size_t dim_i = 0; dim_i < 3; ++dim_i) { + + double& higher = operator[](ax_i)[degree_i][dim_i]; + double ref = abs(perp[dim_i] / M_SQRT2); + + //If the higher degree is larger than the base degree reset it to be less than the base degree, + //while preserving end points. + if (abs(higher) > 1.8 * ref) + higher = Math::sign(higher) * ref * 0.9; + else if (abs(higher) > abs(perp[dim_i])) + higher = Math::sign(higher) * (abs(higher) - abs(perp[dim_i])); + + } + + } + + } + + return *this; + + } + + + void Tractlet::add_section_gradient(const Tractlet& tractlet, const Section& section, const Strand::BasicSection& gradient) { + + + Strand pos_gradient = Strand::outer_product(section.position_coeffs, gradient.position()); + + //Add position gradient. + operator[](0) += pos_gradient; + operator[](1) += pos_gradient * section.ax1_fraction; + operator[](2) += pos_gradient * section.ax2_fraction; + + //Add tangent gradient. + + Strand tang_gradient = Strand::outer_product(section.tangent_coeffs, gradient.tangent() * section.length_fraction); + + operator[](0) += tang_gradient; + operator[](1) += tang_gradient * section.ax1_fraction; + operator[](2) += tang_gradient * section.ax2_fraction; + + + if (has_var_acs()) { + + if (true) { + + throw Exception ("tied_width gradient needs to be adjusted after accounting for tractlet sheer."); + + acs_sqrt() += gradient.intensity() * (tractlet[1][0].norm() * tractlet[2][0].norm() - tractlet[1][0].dot(tractlet[2][0])); + operator()(1,0) += gradient.intensity() * tractlet.acs() * (tractlet[1][0] * (tractlet[2][0].norm() / tractlet[1][0].norm()) - tractlet[2][0]); + operator()(2,0) += gradient.intensity() * tractlet.acs() * (tractlet[2][0] * (tractlet[1][0].norm() / tractlet[2][0].norm()) - tractlet[1][0]); + + } else + acs_sqrt() += gradient.intensity(); + } + + + } + + + size_t Tractlet::num_width_strands(size_t num_width_sections) { + + double width_fraction = 1.0 / (double)num_width_sections; + + size_t num_strands = 0; + + for (double ax1_frac = (-1.0 + width_fraction); ax1_frac < 1.0; ax1_frac += 2.0 * width_fraction) + for (double ax2_frac = (-1.0 + width_fraction); ax2_frac < 1.0; ax2_frac += 2.0 * width_fraction) + if (MR::Math::pow2(ax1_frac) + MR::Math::pow2(ax2_frac) <= (1.0 - width_fraction / 2.0)) + ++num_strands; + + return num_strands; + + } + + + std::vector& Tractlet::sections(std::vector& sections, + size_t num_length_sections, + size_t num_width_sections, + const Triple& vox_lengths, + const Triple& offsets, + size_t num_encodings) const { + + + sections.resize(total_num_sections(num_length_sections, num_width_sections), Tractlet::Section(num_encodings)); + + double length_fraction = 1.0 / (double)num_length_sections; + double width_fraction = 1.0 / (double)num_width_sections; + + const MR::Math::Matrix& position_matrix = Strand::position_matrix(num_length_sections, this->degree()); + const MR::Math::Matrix& tangent_matrix = Strand::tangent_matrix(num_length_sections, this->degree()); + + size_t section_count = 0; + //Loop over length of tractlet. + for (size_t section_i = 0; section_i < num_length_sections; section_i++) { + + // Loop across cross-section of tractlet. Loop each perturbation axis from a 'width_fraction' from -1 to a width_fraction + // from +1, in intervals of 2*width_fraction's. It is performed this way because each section is to represent the + // tractlet +- a width fraction in both directions about its centre ('position'). + for (double ax1_frac = (-1.0 + width_fraction); ax1_frac < 1.0; ax1_frac += 2.0 * width_fraction) { + + for (double ax2_frac = (-1.0 + width_fraction); ax2_frac < 1.0; ax2_frac += 2.0 * width_fraction) { + + // Include section if the "coordinate" consisting of the combined fractions along each perturbation axes lies + // within the unit circle minus a half a width_fraction. This will give the resulting cross-sections an + // elliptical shape (or circular if axes are equal). + if (MR::Math::pow2(ax1_frac) + MR::Math::pow2(ax2_frac) <= (1.0 - width_fraction / 2.0)) { + + sections[section_count].set(*this, position_matrix.row(section_i), tangent_matrix.row(section_i), ax1_frac, ax2_frac, length_fraction, width_fraction); + sections[section_count].normalize(vox_lengths, offsets); + + ++section_count; + + } + + } + + } + + } + + return sections; + + } + + + Strand::Set Tractlet::to_strands(size_t num_width_sections) const { + + Strand::Set strands(std::vector(), this->prop_keys()); + + double width_fraction = 1.0 / (double)num_width_sections; + + // Loop across cross-section of tractlet. Loop each perturbation axis from a 'width_fraction' from -1 to a width_fraction + // from +1, in intervals of 2*width_fraction's. It is performed this way because each strand is to represent the + // tractlet +- a width_fraction radius about it. + for (double ax1_frac = (-1.0 + width_fraction); ax1_frac < 1.0; ax1_frac += 2.0 * width_fraction) { + + for (double ax2_frac = (-1.0 + width_fraction); ax2_frac < 1.0; ax2_frac += 2.0 * width_fraction) { + + //Include section if coord consisting of the combined fractions along each perturbation axes lies within the + // unit circle minus a half a width_fraction. This will give the resulting cross-sections an elliptical + // shape (or circular if axes are equal). + if (MR::Math::pow2(ax1_frac) + MR::Math::pow2(ax2_frac) <= (1.0 - width_fraction /2.0)) { + Strand s(degree(), this->prop_keys()); + s.base() = operator[](0) + operator[](1) * ax1_frac + operator[](2) * ax2_frac; + for (size_t prop_i = 0; prop_i < num_props(); ++prop_i) + s.prop(prop_i) = prop(prop_i); + strands.push_back(s); + } + + } + + } + + return strands; + + } + + + Strand::Set Tractlet::to_strands(double strands_per_acs) const { + + double num_strands = strands_per_acs * acs(); + + size_t num_width_sections = (size_t)MR::Math::round(MR::Math::sqrt(num_strands * 4.0 / M_PI)); + + return to_strands(num_width_sections); + + } + + + + Tractlet Tractlet::flip() const { + + Tractlet t(*this); + + for (size_t ax_i = 0; ax_i < 3; ax_i++) + t[ax_i] = operator[](ax_i).flip(); + + return t; + + } + + + Tractlet Tractlet::switch_axes() const { + + Tractlet t(*this); + + t[1] = operator[](2); + t[2] = operator[](1); + + return t; + + } + + + Tractlet Tractlet::invert_axis(size_t ax_i) const { + + assert(ax_i == 1 || ax_i == 2); + + Tractlet t(*this); + + t[ax_i] = operator[](ax_i) * -1; + + return t; + + } + + + double Tractlet::distance(const Tractlet& reference, double strands_per_acs) const { + + double dist; + + if (strands_per_acs <= 0.0) { + + bool flipped; + bool switched; + bool invert1; + bool invert2; + + dist = distance(reference,flipped,switched,invert1, invert2); + + } else { + + Strand::Set this_strands = to_strands(strands_per_acs); + Strand::Set reference_strands = reference.to_strands(strands_per_acs); + + if (this_strands.size() > reference_strands.size()) + dist = reference_strands.distance(this_strands); + else + dist = this_strands.distance(reference_strands); + + } + + return dist; + + } + + + double Tractlet::distance(const Tractlet& reference, bool& flipped, bool& switched, bool& invert1, bool& invert2) const { + + double min_dist = INFINITY; + + //There are four ambiguities in the Tractlet model: + // - Flipping the direction of the sections + // - Switching the two axes + // - Inverting the first axis + // - Inverting the second axis + // Each combination is checked to see which is the minimal distance. + + flipped = false; + switched = false; + invert1 = false; + invert2 = false; + + for (size_t invt1 = 0; invt1 <= 1; ++invt1) + for (size_t invt2 = 0; invt2 <= 1; ++invt2) + for (size_t flip = 0; flip <= 1; ++flip) + for (size_t swtch = 0; swtch <= 1; ++swtch) { + + Tractlet modified (reference); + + if (invt1) + modified = modified.invert_axis(1); + + if (invt2) + modified = modified.invert_axis(2); + + if (flip) + modified = modified.flip(); + + if (swtch) + modified = modified.switch_axes(); + + double dist = (*this - modified).norm2(); + + if (dist < min_dist) { + min_dist = dist; + flipped = flip; + switched = swtch; + invert1 = invt1; + invert2 = invt2; + } + + } + + return min_dist; + + } + + + Tractlet Tractlet::smallest_distance_set(const Tractlet& reference) const { + + bool flipped; + bool switched; + bool invert1; + bool invert2; + + distance(reference, flipped, switched, invert1, invert2); + + Tractlet t (*this); + + if (invert1) + t = t.invert_axis(1); + + if (invert2) + t = t.invert_axis(2); + + if (flipped) + t = t.flip(); + + if (switched) + t = t.switch_axes(); + + return t; + + } + + + double Tractlet::rotation() const { + + + std::pair< Triple, Triple > ax1_endpoints = Strand(operator[](1)).endpoints(); + std::pair< Triple, Triple > ax2_endpoints = Strand(operator[](2)).endpoints(); + + Triple start = (ax1_endpoints.first.normalise() + ax2_endpoints.first.normalise()) / 2.0; + Triple finish = (ax1_endpoints.second.normalise() + ax2_endpoints.second.normalise()) / 2.0; + + Triple primary_orient = operator[](0)[1]; + primary_orient.normalise(); + + start = start - start.dot(primary_orient) * primary_orient; + finish = finish - finish.dot(primary_orient) * primary_orient; + + start.normalise(); + finish.normalise(); + + Triple sign_vec = start.cross(finish).normalise() - primary_orient; + + double sign; + if (sign_vec.norm() > 1.0) + sign = 1.0; + else + sign = -1.0; + + return MR::Math::acos(start.dot(finish)/(finish.norm() * start.norm())) * sign; + + + return start.angle(finish); + + } + + + //!Resizes each of the 3 axes to the new degree value. + void Tractlet::redegree(size_t new_degree, double default_value) { + + Tractlet new_tractlet (new_degree, *this->props); + new_tractlet.zero(); + + for (size_t ax_i = 0; ax_i < degree(); ++ax_i) + for (size_t degree_i = 0; degree_i < degree(); ++degree_i) + new_tractlet(ax_i,degree_i) = operator()(ax_i,degree_i); + + *this = new_tractlet; + + } + + + Tractlet operator+ (double c, Tractlet t) { return t + c; } + + + Tractlet operator* (double c, Tractlet t) { return t * c; } + + + std::ostream& operator<< (std::ostream& stream, const Tractlet& tractlet) { + + + if (tractlet.has_var_acs()) + stream << "acs: " << tractlet.acs() << std::endl; + + stream << std::endl; + + for (size_t axis_i = 0; axis_i < 3; axis_i++) + stream << "axis " + str(axis_i) + ": " << std::endl << tractlet[axis_i] << std::endl; + + return stream; + + } + + + //!Only implemented for resizing empty tractlets and for use in general template functions. + void Tractlet::resize(size_t num_axes, const Strand& default_value) { + + size_t old_size = size(); + + resize(num_axes); + + for (size_t ax_i = old_size; ax_i < num_axes; ++ax_i) + operator[](ax_i) = default_value; + + } + + + Tractlet& Tractlet::push_back(const Strand& strand) { + + if (!dgree) + dgree = strand.degree(); + else if (dgree != strand.degree()) + throw Exception ("Attempting to push a strand of degree " + str(strand.degree()) + " on a tractlet of degree " + str(dgree) + "."); + + assert(bsize() % dgree == 0); + + size_t strand_i = bsize() / (dgree * 3); + + if (strand_i > 2) + throw Exception ("Attempting to push a fourth strand onto an already created tractlet."); + + resize(strand_i+1); + MR::Math::Vector::sub(strand_i * dgree * 3, (strand_i+1) * dgree * 3) = strand; + + return *this; + + } + + + } + +} diff --git a/src/bts/fibre/tractlet.h b/src/bts/fibre/tractlet.h new file mode 100644 index 0000000..f9f17ca --- /dev/null +++ b/src/bts/fibre/tractlet.h @@ -0,0 +1,318 @@ +/* + Copyright 2010 Brain Research Institute/National ICT Australia (NICTA), Melbourne, Australia + + Written by Thomas G Close, 5/05/09. + + This file is part of Bayesian Tractlet Sampling (BTS). + + BTS is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + BTS is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with BTS. If not, see . + +*/ + +#ifndef __bts_fibre_tractlet_h__ +#define __bts_fibre_tractlet_h__ + + +#include + +#include "math/matrix.h" + +#include "bts/common.h" +#include "bts/file.h" + +#include "bts/coord.h" +#include "bts/fibre/strand.h" +#include "bts/fibre/base/reader.h" +#include "bts/fibre/base/writer.h" + + + +namespace BTS { + + namespace Fibre { + + class Tractlet : public Base::Object { + + // Nested classes and typedefs. + public: + + typedef Strand Element; + + class Set; + class Section; + class Tensor; + class Walker; + + typedef Base::Reader Reader; + typedef Base::Writer Writer; + + typedef Base::TextReader TextReader; + typedef Base::TextWriter TextWriter; + + friend class Object; + friend class Track; + friend class Strand; + friend class Set; + friend class Base::Set; + friend class Tensor; + friend class Base::Tensor; + friend class Base::Reader; + friend class Base::Writer; + friend class Base::Reader; + friend class Base::Writer; + + //Public const static members, + public: + + const static Coord FILE_SEPARATOR; + const static std::string FILE_EXTENSION; + + const static char* BASE_WIDTH_PROP; + + const static double BASE_WIDTH_PROP_DEFAULT; + const static double STRANDS_PER_AREA_DEFAULT; + + const static double REASONABLE_WIDTH; + + const static char* PROPS_LIST[]; + + + //Public static functions + public: + + static size_t num_width_strands(size_t num_width_sections); + + static size_t total_num_sections(size_t num_length_sections, size_t num_width_sections) + { return num_width_strands(num_width_sections) * num_length_sections; } + + + //Protected member variables. + protected: + + size_t dgree; + + //Public member functions. + public: + + Tractlet(size_t degree, const std::vector& props = std::vector()) + : Base::Object (3, degree * 9 + props.size(), props), dgree(degree) {} + + //TODO: Try to make protected by making Base::Reader a friend + public: + + Tractlet(const std::vector& props = std::vector()) + : Base::Object(3, 0, props), dgree(0) {} + + public: + + Tractlet(const Tractlet& t) + : Base::Object(t), dgree(t.dgree) {} + + ~Tractlet() {} + + Tractlet& operator= (const Tractlet& t) + { Base::Object::operator=(t); dgree = t.dgree; return *this; } + + Tractlet (const Strand& s, double width); + + Tractlet (Track primary_axis, size_t degree, double width); + + protected: + + /*! Used by Base::Set::operator[]() to initiate a from a section of a larger state vector or + * by Base::Tensor::row/column() for a slice of the tensor matrix. + * + * @param degree Degree of the tractlet + * @param view The view onto the larger vector or matrix + * @param props The properties stored in the set or tensor + */ + Tractlet(size_t degree, const MR::Math::Vector::View& view, std::vector* props) + : Base::Object((size_t)3, view, props), dgree(degree) {} + + void from_track(Track primary_axis, size_t degree, double width); + + public: + + + Strand operator[](size_t index) + { assert(index < 3); return Strand(dgree, sub(index * degree() * 3, (index+1) * degree() * 3), &EMPTY_PROPS); } + + Strand operator[](size_t index) const + { assert(index < 3); return Strand(dgree, sub(index * degree() * 3, (index+1) * degree() * 3), &EMPTY_PROPS); } + + Coord operator()(size_t axis_i, size_t degree_i) { + assert(axis_i < 3); assert(bsize() % dgree == 0); assert(bsize() / 9 == dgree); + return Coord(sub((axis_i * degree() + degree_i) * 3, (axis_i * degree() + degree_i) * 3 + 3)); + } + + const Coord operator()(size_t axis_i, size_t degree_i) const { + assert(axis_i < 3); assert(bsize() % dgree == 0); assert(bsize() / 9 == dgree); + return Coord(sub((axis_i * degree() + degree_i) * 3, (axis_i * degree() + degree_i) * 3 + 3)); + } + + //!Resizes each of the 3 axes to the new degree value. + void redegree(size_t new_degree, double default_value = NAN); + + double acs() const + { return has_prop(ACS_SQRT_PROP) ? MR::Math::pow2(prop(ACS_SQRT_PROP)) : 1.0; /* The ACS is stored in the state vector via its squareroot to prevent it from becoming < 0 */} + + void add_acs(double acs = 1.0) + { add_prop(ACS_SQRT_PROP, acs); } + + void set_acs(double acs) + { assert(acs >= 0); prop(ACS_SQRT_PROP) = MR::Math::sqrt(acs); } //sqrt is stored instead of straight value to prevent ACS becoming < 0 during iterative methods + + void remove_acs() + { remove_prop(ACS_SQRT_PROP); } + + bool has_var_acs() const + { return has_prop(ACS_SQRT_PROP); } + + double& acs_sqrt() + { assert(has_var_acs()); return prop(ACS_SQRT_PROP); } + + double acs_sqrt() const + { assert(has_var_acs()); return prop(ACS_SQRT_PROP); } + + //Ensure that tractlets do not pass through themselves + Tractlet& sanitize(); + + std::vector cross_sectional_areas(size_t num_points) const; + + Tractlet base() + { return Tractlet(dgree, sub(0,bsize()), &EMPTY_PROPS); } + + const Tractlet base() const + { return Tractlet(dgree, sub(0,bsize()), &EMPTY_PROPS); } + + Strand backbone() const + { return Strand(dgree, sub(0, dgree*3), &EMPTY_PROPS); } + + + std::vector
& sections( std::vector
& sections, + size_t num_length_sections, + size_t num_width_sections, + const Triple& vox_lengths = Triple::Ones, + const Triple& offsets = Triple::Zeros, + size_t num_encodings = 0) const; + + + /*!Section positions are normalized to the image so that the bottom-left-back (the minimal coordinate point) + corner is mapped to [0,0,0] and the voxel sizes are normalized to [1,1,1] so the inverse voxel lengths are required to calculate the gradient*/ + void add_section_gradient(const Tractlet& tractlet, const Section& section, const Strand::BasicSection& gradient); + + + + BASE_GENERAL_FUNCTIONS(Tractlet); + + + BASE_MULT_DIVIDE_FUNCTIONS(Tractlet); + + + BASE_ADD_SUBTRACT_FUNCTIONS(Tractlet); + + + + /*! Returns the degree of the tractlet (as determined by the size of the base vector divided by 3) + * + * @return The degree of the tractlet + */ + size_t degree() const + { return dgree; } + + /*! Projects extends or trims the primary axis so that its endpoints lie on the sphere. + * + * @return The degree of the tractlet + */ + void project_to_sphere(double sphere_radius) + { operator[](0).project_to_sphere(sphere_radius); } + + + Strand::Set to_strands(size_t num_samples) const; + + + Strand::Set to_strands(double strands_per_acs) const; + + + double distance(const Tractlet& reference, bool& flipped, bool& switched, bool& invert1, bool& invert2) const; + + /*!If 'num_strands' argument is non-zero, instead of measuring the distance between parameters, + the distance between generated strands is calculated instead*/ + double distance(const Tractlet& reference, double strands_per_acs = 0.0) const; + + + Tractlet smallest_distance_set(const Tractlet& reference) const; + + + //Doesn't actually effect the shape of the tract only the direction it travels. + Tractlet flip() const; + + //Doesn't actually effect the shape of the tract only the order of its secondary axes. + Tractlet switch_axes() const; + + //Doesn't actually effect the shape of the tract only the sign of its secondary axes. + Tractlet invert_axis(size_t axis_i) const; + + + double rotation() const; + + + //! Only included to get template function to work (a strand will never have element properties. + Tractlet& push_back(const Strand& strand, bool without_properties) + { return push_back(strand); } + + protected: + + void clear() + { Object::clear(); dgree = 0; } + + void clear(const std::vector& properties) + { Object::clear(properties); dgree = 0; } + + /*! Only used in reader as tractlets should always only have 3 strands. Is only named push_back to fit in + * with other object classes. NB: This function doesn't actually resize the tractlet class (because, as + * mentioned above, it always has 3 strands) but checks to see which of its strands are still invalidated (set + * to NAN) + * + * @param strand The strand to be "pushed" onto the back of the strand. + * @return + */ + + Tractlet& push_back(const Strand& strand); + + + //TODO: work out how to remove this function + //!Only implemented for resizing empty tractlets and for use in general template functions. + void resize(size_t num_axes, const Strand& default_value); + + + //TODO: work out how to remove this function + //!Only implemented for resizing empty tractlets and for use in general template functions. + void resize(size_t num_axes, double fill_value = NAN) + { Base::Object::resize(num_axes, dgree * 3, fill_value); } + + + friend std::ostream& operator<< (std::ostream& stream, const Tractlet& tractlet); + + }; + + Tractlet operator+ (double c, Tractlet t); + Tractlet operator* (double c, Tractlet t); + + + } +} + + +#endif diff --git a/src/bts/fibre/tractlet/section.cpp b/src/bts/fibre/tractlet/section.cpp new file mode 100644 index 0000000..cafdc22 --- /dev/null +++ b/src/bts/fibre/tractlet/section.cpp @@ -0,0 +1,51 @@ +/* + Copyright 2010 Brain Research Institute/National ICT Australia (NICTA), Melbourne, Australia + + Written by Thomas G Close, 5/05/09. + + This file is part of Bayesian Tractlet Sampling (BTS). + + BTS is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + BTS is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with BTS. If not, see . + +*/ + +#include "bts/fibre/tractlet.h" + +#include "bts/fibre/tractlet/section.h" + + + +namespace BTS { + + namespace Fibre { + + const std::string Tractlet::Section::FILE_EXTENSION = "tsc"; + const Coord Tractlet::Section::FILE_SEPARATOR = Coord (-INFINITY, NAN, NAN); + + + std::ostream& operator<< (std::ostream& stream , const BTS::Fibre::Tractlet::Section& section) { + + stream << (const Fibre::Strand::BasicSection&)section; + + stream << "width1: " << section.width1() << std::endl; + stream << "witdh2: " << section.width2() << std::endl; + + return (stream); + + } + + + + } +} diff --git a/src/bts/fibre/tractlet/section.h b/src/bts/fibre/tractlet/section.h new file mode 100644 index 0000000..89c3167 --- /dev/null +++ b/src/bts/fibre/tractlet/section.h @@ -0,0 +1,170 @@ +/* + Copyright 2010 Brain Research Institute/National ICT Australia (NICTA), Melbourne, Australia + + Written by Thomas G Close, 5/05/09. + + This file is part of Bayesian Tractlet Sampling (BTS). + + BTS is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + BTS is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with BTS. If not, see . + +*/ + +#ifndef __bts_fibre_tractlet_section_h__ +#define __bts_fibre_tractlet_section_h__ + +#include "bts/fibre/tractlet.h" +#include "bts/fibre/strand/section.h" + +namespace BTS { + + namespace Fibre { + + + class Tractlet::Section : public Strand::Section { + + public: + + //TODO: Work out how to do this more elegantly +// class Tensor; + + typedef Fibre::Base::Reader
Reader; + typedef Fibre::Base::Writer
Writer; + + public: + + const static std::string FILE_EXTENSION; + const static Coord FILE_SEPARATOR; + + public: + + //Reference data. Used in working backwards to calculate gradient. + double ax1_fraction; //The fraction of the section along axis1 (from -1 to 1) + double ax2_fraction; //The fraction of the section along axis2 (from -1 to 1) + double width_fraction; + + //TODO: Remove this reference. + const Tractlet* parent; + + public: + + Section (const MR::Math::Vector::View& view, std::vector* props) + : Strand::Section((size_t)4, view, props) {} + + Section(size_t init_precalc_size = 0) + : Strand::Section((size_t)4, PROPS, init_precalc_size), ax1_fraction(NAN), ax2_fraction(NAN), width_fraction(NAN) {} + + Section(const Tractlet& tractlet, + const MR::Math::Vector::View& position_coeffs, + const MR::Math::Vector::View& tangent_coeffs, + double ax1_fraction, + double ax2_fraction, + double length_fraction, + double width_fraction, + size_t init_precalc_size = 0) + + : Strand::Section(init_precalc_size) + + { + + set(tractlet, + position_coeffs, + tangent_coeffs, + ax1_fraction, + ax2_fraction, + length_fraction, + width_fraction); + + } + + + void set(const Tractlet& tractlet, + const MR::Math::Vector::View& position_coeffs, + const MR::Math::Vector::View& tangent_coeffs, + double ax1_fraction, + double ax2_fraction, + double length_fraction, + double width_fraction) + { + + Strand::Section::set(tractlet.acs(), position_coeffs, tangent_coeffs, length_fraction); + + this->ax1_fraction = ax1_fraction; + this->ax2_fraction = ax2_fraction; + this->width_fraction = width_fraction; + + width1() = tractlet[1].left_product(position_coeffs); + width2() = tractlet[2].left_product(position_coeffs); + + position() = tractlet[0].left_product(position_coeffs) + ax1_fraction * width1() + ax2_fraction * width2(); + + width1() *= width_fraction; + width2() *= width_fraction; + + tangent() = (tractlet[0].left_product(tangent_coeffs) + + ax1_fraction * tractlet[1].left_product(tangent_coeffs) + + ax2_fraction * tractlet[2].left_product(tangent_coeffs)) * length_fraction; + + this->parent = &tractlet; + + } + + + Section(const Section& s) + : Strand::Section(s), + ax1_fraction(s.ax1_fraction), + ax2_fraction(s.ax2_fraction), + parent(s.parent) {} + + + Section& operator= (const Section& s) + { this->Strand::Section::operator=(s); ax1_fraction= s.ax1_fraction; ax2_fraction = s.ax2_fraction; parent = s.parent; return *this; } + + + ~Section() {} + + + Coord width1() + { return Coord(MR::Math::Vector::sub(6,9)); } + + Coord width1() const + { return Coord(MR::Math::Vector::sub(6,9)); } + + Coord width2() + { return Coord(MR::Math::Vector::sub(9,12)); } + + Coord width2() const + { return Coord(MR::Math::Vector::sub(9,12)); } + + + BASE_GENERAL_FUNCTIONS(Section); + + BASE_MULT_DIVIDE_FUNCTIONS(Section); + + BASE_ADD_SUBTRACT_FUNCTIONS(Section); + + }; + + + + inline Tractlet::Section operator* (double scalar, const Tractlet::Section& section) + { return section * scalar; } + + + std::ostream& operator<< (std::ostream& stream , const BTS::Fibre::Tractlet::Section& section); + + } +} + + +#endif diff --git a/src/bts/fibre/tractlet/section/tensor.cpp b/src/bts/fibre/tractlet/section/tensor.cpp new file mode 100644 index 0000000..6d62e29 --- /dev/null +++ b/src/bts/fibre/tractlet/section/tensor.cpp @@ -0,0 +1,65 @@ +/* + Copyright 2008 Brain Research Institute, Melbourne, Australia + + Written by Thomas G Close, 16/08/2010. + + This file is part of MRtrix. + + MRtrix is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + MRtrix is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with MRtrix. If not, see . + +*/ + +//#ifndef __bts_fibre_tractlet_section_tensor_cpp_h__ +//#define __bts_fibre_tractlet_section_tensor_cpp_h__ + +//#include "bts/fibre/tractlet/section/tensor.h" +//#include "bts/fibre/strand/basic_section/tensor.h" +// +//namespace BTS { +// +// namespace Fibre { +// +//// +//// Tractlet::Section::Tensor& Tractlet::Section::Tensor::operator= (const Strand::BasicSection::Tensor& tensor) { +//// +//// zero(); +//// +//// acs.position = tensor.acs.position; +//// acs.tangent = tensor.acs.tangent; +//// +//// position[X].position = tensor.position[X].position; +//// position[Y].position = tensor.position[Y].position; +//// position[Z].position = tensor.position[Z].position; +//// +//// tangent[X].position = tensor.tangent[X].position; +//// tangent[Y].position = tensor.tangent[Y].position; +//// tangent[Z].position = tensor.tangent[Z].position; +//// +//// position[X].tangent = tensor.position[X].tangent; +//// position[Y].tangent = tensor.position[Y].tangent; +//// position[Z].tangent = tensor.position[Z].tangent; +//// +//// tangent[X].tangent = tensor.tangent[X].tangent; +//// tangent[Y].tangent = tensor.tangent[Y].tangent; +//// tangent[Z].tangent = tensor.tangent[Z].tangent; +//// +//// return *this; +//// +//// } +// +// } +// +//} + +//#endif /* __bts_fibre_tractlet_section_tensor_cpp_h__ */ diff --git a/src/bts/fibre/tractlet/section/tensor.h b/src/bts/fibre/tractlet/section/tensor.h new file mode 100644 index 0000000..6e78900 --- /dev/null +++ b/src/bts/fibre/tractlet/section/tensor.h @@ -0,0 +1,157 @@ +/* + Copyright 2008 Brain Research Institute, Melbourne, Australia + + Written by Tractlet::Sectionhomas G Close, 07/08/2010. + + Tractlet::Sectionhis file is part of MRtrix. + + MRtrix is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + MRtrix is distributed in the hope that it will be useful, + but WITractlet::SectionHOUTractlet::Section ANY WARRANTractlet::SectionY; without even the implied warranty of + MERCHANTractlet::SectionABILITractlet::SectionY or FITractlet::SectionNESS FOR A PARTractlet::SectionICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with MRtrix. If not, see . + +*/ + +//#ifndef __bts_fibre_tractlet_section_tensor_h__ +//#define __bts_fibre_tractlet_section_tensor_h__ +// +// +//#include "bts/fibre/tractlet/section.h" +//#include "bts/fibre/strand/basic_section/tensor.h" +// +//#include "bts/fibre/tensor/writer.h" +// +//namespace BTS { +// +// namespace Fibre { +// +//// class Tractlet::Section::Tensor : public Strand::BasicSection::Tensor_tpl { +//// +//// public: +//// +//// typedef Fibre::Tensor::Writer Writer; +//// typedef Tractlet::Section ColumnClass; +//// +//// public: +//// +//// Element width1; +//// Element width2; +//// +//// public: +//// +//// //Default argument is to get section to work with macro in test_gradient.cpp +//// Tensor() {} +//// +//// +//// Tensor(const Tensor& s) +//// : Strand::BasicSection::Tensor_tpl(s), width1(s.width1), width2(s.width2) {} +//// +//// +//// Tensor& operator= (const Tensor& s) +//// { Strand::BasicSection::Tensor_tpl::operator=(s); width1 = s.width1; width2 = s.width2; return *this; } +//// +//// Tensor& operator=(const Strand::BasicSection::Tensor& t); +//// +//// ~Tensor() {} +//// +//// +//// Tensor& zero() +//// { Strand::BasicSection::Tensor_tpl::zero(); width1.zero(); width2.zero(); return *this; } +//// +//// +//// Tensor& invalidate() +//// { Strand::BasicSection::Tensor_tpl::invalidate(); width1.invalidate(); width2.invalidate(); return *this; } +//// +//// +//// +//// Tractlet::Section get_diagonal() const +//// { throw Exception ("Not implemented yet."); return Tractlet::Section(); } +//// +//// +//// void set_diagonal(const Tractlet::Section& section) +//// { throw Exception ("Not implemented yet."); } +//// +//// +//// //---------------------------------------------------------------// +//// // Generic Functions (NB: Can be removed in production versions) // +//// //---------------------------------------------------------------// +//// +//// // Tractlet::Sectionhe following generic functions are used in 'Fibre::Base::Writer/Reader' and 'Analysis::ContainerTractlet::Sectionester', +//// // which are in turn used in 'test_gradient.cpp' to check gradient calculations. +//// +//// //Public static members and typedefs +//// public: +//// +//// //For debugging purposes only. +//// Element& operator[] (size_t index) { +//// +//// switch (index) { +//// case 0: return position; +//// case 1: return tangent; +//// case 2: return width1; +//// case 3: return width2; +//// default: throw Exception ("Index, " + str(index) + ", is out of bounds (4)."); +//// } +//// +//// } +//// +//// const Element& operator[] (size_t index) const { +//// +//// switch (index) { +//// case 0: return position; +//// case 1: return tangent; +//// case 2: return width1; +//// case 3: return width2; +//// default: throw Exception ("Index, " + str(index) + ", is out of bounds (4)."); +//// } +//// +//// } +//// +//// Tensor& operator*= (double scalar) +//// { Strand::BasicSection::Tensor_tpl::operator*=(scalar); width1 *= scalar; width2 *= scalar; return *this; } +//// +//// +//// size_t size() const { return 4; } +//// void clear() { count = 0; } +//// +//// void push_back(Element& t) { +//// +//// switch (count++) { +//// case 0: position = t; break; +//// case 1: tangent = t; break; +//// case 2: width1 = t; break; +//// case 3: width2 = t; break; +//// default: throw Exception ("Attempting to add a fifth triple to Tractlet::Section (max 4)."); +//// } +//// +//// } +//// +//// +//// }; +//// +//// +//// inline std::ostream& operator<< (std::ostream& stream, const Tractlet::Section::Tensor& seg) { +//// +//// stream << "Intensity: " << seg.intensity << std::endl; +//// stream << "Position: " << seg.position << std::endl; +//// stream << "Tangent: " << seg.tangent << std::endl; +//// stream << "Width1: " << seg.width1 << std::endl; +//// stream << "Width2: " << seg.width2 << std::endl; +//// +//// return stream; +//// +//// } +// +// } +// +//} +// +//#endif /* __bts_fibre_tractlet_section_tensor_h__ */ diff --git a/src/bts/fibre/tractlet/set.cpp b/src/bts/fibre/tractlet/set.cpp new file mode 100644 index 0000000..946a55a --- /dev/null +++ b/src/bts/fibre/tractlet/set.cpp @@ -0,0 +1,675 @@ +/* + Copyright 2010 Brain Research Institute/National ICT Australia (NICTA), Melbourne, Australia + + Written by Thomas G Close, 5/05/09. + + This file is part of Bayesian Tractlet Sampling (BTS). + + BTS is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + BTS is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with BTS. If not, see . + +*/ + +#include + +#include "bts/common.h" +#include "bts/math/svd.h" + +#include "bts/fibre/tractlet.h" +#include "bts/fibre/track/set.h" +#include "bts/fibre/tractlet/set.h" +#include "bts/fibre/strand/set.h" + +#include "bts/fibre/properties/extended.h" + +#include "bts/fibre/base/reader.cpp.h" +#include "bts/fibre/base/writer.cpp.h" + +namespace BTS { + + namespace Fibre { + + const std::string Tractlet::Set::FILE_EXTENSION = "tst"; + + const char* Tractlet::Set::PROPS_LIST[] = { Base::Set::BASE_INTENSITY_PROP, PROPS_LIST_END }; + + + + Tractlet::Set::Set(const Strand::Set& strands) + : Fibre::Base::Set( select_props(*strands.props), + select_props(*strands.elem_props), + strands.get_extend_props()) { + + from_strands(strands); + + } + + + //TODO: Look into preallocating for speed + Tractlet::Set::Set(const Strand::Set& strands, double width) + : Fibre::Base::Set( select_props(*strands.props), + select_props(*strands.elem_props), + strands.get_extend_props()) { + + from_strands(strands,width); + + } + + + //TODO: Look into preallocating for speed + Tractlet::Set::Set(const Strand::Set& strands, size_t num_tractlets, const std::string& cluster_save_location) + : Fibre::Base::Set( select_props(*strands.props), + select_props(*strands.elem_props), + strands.get_extend_props()) { + + from_strands(strands,num_tractlets,cluster_save_location); + + } + + + Tractlet::Set::Set (const Track::Set& strands, size_t degree) + : Fibre::Base::Set(select_props(*strands.props), + select_props(*strands.elem_props), + strands.get_extend_props()) { + + from_strands(Strand::Set(strands, degree)); + + } + + + //TODO: Look into preallocating for speed + Tractlet::Set::Set (const Track::Set& tcks, size_t degree, size_t num_tractlets, const std::string& cluster_save_location) + : Fibre::Base::Set(select_props(*tcks.props), + select_props(*tcks.elem_props), + tcks.get_extend_props()) { + + from_strands(Strand::Set(tcks, degree), num_tractlets, cluster_save_location); + + } + + + //TODO: Look into preallocating for speed + Tractlet::Set::Set (const Track::Set& tcks, size_t degree, double width) + : Fibre::Base::Set( select_props(*tcks.props), + select_props(*tcks.elem_props), + tcks.get_extend_props()) { + + from_strands(Strand::Set(tcks),width); + + + } + + + + void Tractlet::Set::from_strands(const Strand::Set& strands) { + + if (!strands.has_extend_elem_prop(BUNDLE_INDEX_EPROP)) + throw Exception ("'" + BUNDLE_INDEX_EPROP + "' property was not found in strand set, which is required for conversion to tractlet set."); + + add_extend_elem_prop(BUNDLE_INDEX_EPROP,"-1"); + + std::set bundle_indices; + + //Get a list of bundle indices present in the current set. + for (size_t strand_i = 0; strand_i < strands.size(); ++strand_i) + bundle_indices.insert(to(strands.get_extend_elem_prop(BUNDLE_INDEX_EPROP, strand_i))); + + //Loop through the strand set and convert each bundle into a separate tractlet. + for (std::set::iterator bundle_it = bundle_indices.begin(); bundle_it != bundle_indices.end(); ++bundle_it) { + + Strand::Set bundle_strands(std::vector(), *strands.elem_props); + + //TODO: Maybe look into preallocating the size of the strand set to avoid repeated 'push_back' calls. + for (size_t strand_i = 0; strand_i < strands.size(); ++strand_i) + if (to(strands.get_extend_elem_prop(BUNDLE_INDEX_EPROP, strand_i)) == *bundle_it) + bundle_strands.push_back(strands[strand_i]); + + size_t num_strands = bundle_strands.size(); + + bundle_strands = bundle_strands.shortest_span(); + + Strand centroid; + centroid = bundle_strands[0]; + centroid.zero(); + + for (size_t strand_i = 0; strand_i < bundle_strands.size(); ++strand_i) + centroid += bundle_strands[strand_i]; + + centroid /= (double)num_strands; + + Tractlet tractlet(centroid.degree(), select_props(centroid.prop_keys())); + + for (size_t prop_i = 0; prop_i < tractlet.num_props(); ++prop_i) + tractlet.prop(prop_i) = centroid.prop(tractlet.prop_key(prop_i)); + + tractlet[0] = centroid.base(); + + + if (num_strands == 1) { + //Get width axes perpendicular to the main orientation and each other. + Coord ax1_basewidth = centroid[1].cross(centroid[1].min_axis()).normalise(); + Coord ax2_basewidth = centroid[1].cross(ax1_basewidth).normalise(); + + tractlet[1][0] = ax1_basewidth * Tractlet::REASONABLE_WIDTH; + tractlet[2][0] = ax2_basewidth * Tractlet::REASONABLE_WIDTH; + + + } else if (num_strands == 2) { + + Strand ax1 = bundle_strands[0] - centroid; + + Coord ax2_basewidth = centroid[1].cross(ax1[1]).normalise() * Tractlet::REASONABLE_WIDTH; + + tractlet[1] = ax1; + tractlet[2][0] = ax2_basewidth; + + } else { + + //Set up the difference matrix which holds the difference between each strand and the centroid. + + size_t num_rows = num_strands; + if (centroid.bsize() > num_strands) + num_rows = centroid.bsize(); //If vector size of strands is less than number in bundle the difference matrix is padded out with zeros; + + MR::Math::Matrix diff_matrix (num_rows, centroid.bsize()); + diff_matrix = 0; + + for (size_t strand_i = 0; strand_i < num_strands; ++strand_i) { + + diff_matrix.row(strand_i) = bundle_strands[strand_i].base(); + diff_matrix.row(strand_i) -= centroid.base(); + + } + + //Perform singular value decomposition to get the two axes that describe the most variance. + Math::USV usv = Math::svd(diff_matrix); + + tractlet[1] = usv.v.column(0); + tractlet[2] = usv.v.column(1); + + //Calculate the RMS of projections onto the two axes. + double rms_proj1 = 0.0; + double rms_proj2 = 0.0; + + for (size_t strand_i = 0; strand_i < num_strands; ++strand_i) { + + rms_proj1 += MR::Math::pow2(dot(diff_matrix.row(strand_i), tractlet[1])); + rms_proj2 += MR::Math::pow2(dot(diff_matrix.row(strand_i), tractlet[2])); + + } + + rms_proj1 /= (double)num_strands; + rms_proj2 /= (double)num_strands; + + rms_proj1 = MR::Math::sqrt(rms_proj1); + rms_proj2 = MR::Math::sqrt(rms_proj2); + + // Multiply the RMS projections by two to get the extent of the tractlet along each axes + // (Assumes that the strand bundle is rougly circular w.r.t to the two axes) + tractlet[1] *= rms_proj1 * 2.0; + tractlet[2] *= rms_proj2 * 2.0; + + } + + tractlet.sanitize(); + + //Keep the bundle index property (so it keeps the same colour in the plotting routines). + std::map properties_row; + properties_row[BUNDLE_INDEX_EPROP] = str(*bundle_it); + + push_back(tractlet, properties_row); + + } + + for (size_t prop_i = 0; prop_i < num_props(); ++prop_i) + prop(prop_i) = strands.prop(prop_key(prop_i)); + + + if (!strands.var_elem_degrees()) + freeze_elem_degree(); + + + //TODO: Look into automatically trying to fix degree of tractlet set after conversion. + + } + + + void Tractlet::Set::from_strands(const Strand::Set& set, size_t num_tractlets, + const std::string& cluster_save_location) { + + if (num_tractlets) { + Strand::Set set_copy(set); + set_copy.cluster(num_tractlets); + + if (cluster_save_location.size()) + set_copy.save(cluster_save_location); + + from_strands(set_copy); + } else + from_strands(set); + + } + + + void Tractlet::Set::from_strands (const Strand::Set& set, double width) { + + for (size_t strand_i = 0; strand_i < set.size(); ++strand_i) + push_back(Tractlet(set[strand_i], width)); + + for (size_t prop_i = 0; prop_i < num_props(); ++prop_i) + prop(prop_i) = set.prop(prop_key(prop_i)); + + copy_extend_elem_props(set); + + if (has_extend_elem_prop(Fibre::Track::RADIUS_PROP)) + remove_extend_elem_prop(Fibre::Track::RADIUS_PROP); + + if (!set.var_elem_degrees()) + freeze_elem_degree(); + + + } + + +// +// //FIXME: Will not work yet +// Tractlet::Set::Set(const Strand::Set& set) { +// +// +// if (!set.has_extend_elem_prop(BUNDLE_INDEX_EPROP)) +// throw Exception ("'" + BUNDLE_INDEX_EPROP + "' property was not found in strand set, which is required for conversion to tractlet set."); +// +// add_extend_elem_prop(BUNDLE_INDEX_EPROP,"-1"); +// +// std::set bundle_indices; +// +// //Get a list of bundle indices present in the current set. +// for (size_t strand_i = 0; strand_i < set.size(); ++strand_i) +// bundle_indices.insert(to(set.get_extend_elem_prop(BUNDLE_INDEX_EPROP, strand_i))); +// +// //Loop through the strand set and convert each bundle into a separate tractlet. +// for (std::set::iterator bundle_it = bundle_indices.begin(); bundle_it != bundle_indices.end(); ++bundle_it) { +// +// Fibre::Strand::Set bundle_strands; +// +// for (size_t strand_i = 0; strand_i < set.size(); ++strand_i) +// if (to(set.get_extend_elem_prop(BUNDLE_INDEX_EPROP, strand_i)) == *bundle_it) +// bundle_strands.push_back(operator[](strand_i)); +// +// size_t num_strands = bundle_strands.size(); +// +// bundle_strands = bundle_strands.shortest_span(); +// +// Fibre::Strand centroid; +// centroid.zero(); +// +// for (size_t strand_i = 0; strand_i < bundle_strands.size(); ++strand_i) +// centroid += bundle_strands[strand_i]; +// +// centroid /= (double)num_strands; +// +// Fibre::Tractlet tractlet(centroid.degree()); +// tractlet.zero(); +// tractlet.set_acs(centroid.acs()); +// tractlet[0] = centroid; +// +// +// if (num_strands == 1) { +// //Get width axes perpendicular to the main orientation and each other. +// Coord ax1_basewidth = centroid[1].cross(centroid[1].min_axis()).normalise(); +// Coord ax2_basewidth = centroid[1].cross(ax1_basewidth).normalise(); +// +// tractlet[1][0] = ax1_basewidth * Tractlet::REASONABLE_WIDTH; +// tractlet[2][0] = ax2_basewidth * Tractlet::REASONABLE_WIDTH; +// +// +// } else if (num_strands == 2) { +// +// Strand ax1 = bundle_strands[0] - centroid; +// +// Coord ax2_basewidth = centroid[1].cross(ax1[1]).normalise() * Tractlet::REASONABLE_WIDTH; +// +// tractlet[1] = ax1; +// tractlet[2][0] = ax2_basewidth; +// +// } else { +// +// //Set up the difference matrix which holds the difference between each strand and the centroid. +// +// size_t vector_size = centroid.vsize(); +// +// size_t num_rows = num_strands; +// if (vector_size > num_strands) +// num_rows = vector_size; //If vector size of strands is less than number in bundle the difference matrix is padded out with zeros; +// +// MR::Math::Matrix diff_matrix (num_rows, vector_size); +// diff_matrix = 0; +// +// for (size_t strand_i = 0; strand_i < num_strands; ++strand_i) { +// +// diff_matrix.row(strand_i) = bundle_strands[strand_i]; +// diff_matrix.row(strand_i) -= centroid; +// +// } +// +// //Perform singular value decomposition to get the two axes that describe the most variance. +// Math::USV usv = Math::svd(diff_matrix); +// +// MR::Math::Vector axis1 = usv.v.column(0); +// MR::Math::Vector axis2 = usv.v.column(1); +// +// +// //Calculate the RMS of projections onto the two axes. +// double rms_proj1 = 0.0; +// double rms_proj2 = 0.0; +// +// for (size_t strand_i = 0; strand_i < num_strands; ++strand_i) { +// +// rms_proj1 += MR::Math::pow2(dot(diff_matrix.row(strand_i), axis1)); +// rms_proj2 += MR::Math::pow2(dot(diff_matrix.row(strand_i), axis2)); +// +// } +// +// rms_proj1 /= (double)num_strands; +// rms_proj2 /= (double)num_strands; +// +// rms_proj1 = MR::Math::sqrt(rms_proj1); +// rms_proj2 = MR::Math::sqrt(rms_proj2); +// +// // Multiply the RMS projections by two to get the extent of the tractlet along each axes +// // (Assumes that the strand bundle is rougly circular w.r.t to the two axes) +// tractlet[1] *= rms_proj1 * 2.0; +// tractlet[2] *= rms_proj2 * 2.0; +// +// } +// +// tractlet.sanitize(); +// +// //Keep the bundle index property (so it keeps the same colour in the plotting routines). +// std::map properties_row; +// properties_row[BUNDLE_INDEX_EPROP] = str(*bundle_it); +// +// push_back(tractlet, properties_row); +// +// } +// +// copy_props(set); +// copy_relevant_elem_props(set); +// +// +// } + + + + Track::Set Tractlet::Set::to_tracks(size_t num_length_sections, size_t num_width_sections) const { + + return Track::Set(*this, num_length_sections, num_width_sections); + + } + + + Track::Set Tractlet::Set::to_tracks(size_t num_length_sections, double strands_per_acs) const { + + return Track::Set(*this, num_length_sections, strands_per_acs); + + } + + + Strand::Set Tractlet::Set::to_strands(size_t num_samples) const { + + return Strand::Set(*this, num_samples); + + } + + + Strand::Set Tractlet::Set::to_strands(double strands_per_vol) const { + + return Strand::Set(*this, strands_per_vol); + + } + + + std::vector& Tractlet::Set::append_characteristic_property_keys(std::vector& header) { + + header.push_back("tract_volume"); + + return header; + + } + + + Tractlet::Set& Tractlet::Set::sanitize() { + + for (size_t tract_i = 0; tract_i < size(); ++tract_i) + operator[](tract_i).sanitize(); + + return *this; + + } + + + void Tractlet::Set::calc_characteristic_properties() { + + // Do nothing. + + } + + + void Tractlet::Set::load(const std::string& location, size_t degree, size_t num_tractlets) { + + this->clear(); + + if (File::has_or_txt_extension(location)) { + + this->Base::Set::load(location); + + } else if (File::has_or_txt_extension(location) || File::has_or_txt_extension(location)) { + + Strand::Set strands (location, degree); + + if (num_tractlets) + operator=(strands.to_tractlets(num_tractlets)); + else if (strands.has_extend_elem_prop(Track::BUNDLE_INDEX_EPROP)) + operator=(strands.to_tractlets()); + else + throw Exception(" \"-width\" parameter is required for implicit conversion to tractlet set ('" + location + "') if '" + Track::BUNDLE_INDEX_EPROP + "' property is not present."); + + } else + throw Exception("The extension of file \"" + location + "\" is not a recognised type (\"" + Tractlet::FILE_EXTENSION + "\", \"" + Strand::FILE_EXTENSION + "\" or \"" + Track::FILE_EXTENSION + "\")."); + + } + + + void Tractlet::Set::save(const std::string& location, size_t num_length_sections, double strands_per_acs) const { + + if (File::has_or_txt_extension(location)) { + + this->Base::Set::save(location); + + } else if (File::has_or_txt_extension(location)) { + + if (strands_per_acs <= 0.0) + throw Exception(" \"-strands_per_acs\" parameter is required for implicit conversion to strand set ('" + location + "')."); + + Strand::Set strands = this->to_strands(strands_per_acs); + + strands.save(location); + + } else if (File::has_or_txt_extension(location)) { + + if (num_length_sections == 0) + throw Exception(" \"-num_length_sections\" parameter is required for implicit conversion to track set ('" + location + "')."); + + if (strands_per_acs <= 0.0) + throw Exception(" \"-strands_per_acs\" parameter is required for implicit conversion to track set ('" + location + "')."); + + Track::Set tcks = this->to_tracks(num_length_sections, strands_per_acs); + + tcks.save(location); + + } else + throw Exception("The extension of file \"" + location + "\" is not a recognised type (\"" + Tractlet::FILE_EXTENSION + "\" or \"" + Strand::FILE_EXTENSION + "\")."); + + } + + + + void Tractlet::Set::project_to_sphere(double sphere_radius) { + + for (size_t tract_i = 0; tract_i < size(); ++tract_i) + operator[](tract_i).project_to_sphere(sphere_radius); + + } + + + + Strand::Set Tractlet::Set::backbones() const { + + Strand::Set strands(size(), degree()); + for (size_t tractlet_i = 0; tractlet_i < size(); tractlet_i++) + strands[tractlet_i] = operator[](tractlet_i).backbone(); + + strands.copy_props(*this); + strands.copy_relevant_elem_props(*this); + + return strands; + } + + + Tractlet::Set Tractlet::Set::permute(const std::vector& indices) const { + + if (var_elem_degrees()) + throw Exception ("'permute' is currently not implemented for variable element size sets."); + + Set permuted_set (size(), degree(), *props, *elem_props, get_extend_props()); + + this->Fibre::Base::Set::permute(permuted_set, indices); + + return permuted_set; + + } + + + size_t Tractlet::Set::max_degree() const { + + size_t max_degree = 0; + + for (size_t tract_i = 0; tract_i < size(); ++tract_i) + if (operator[](tract_i).degree() > max_degree) + max_degree = operator[](tract_i).degree(); + + return max_degree; + + } + + + + std::string Tractlet::Set::matlab_str() const { + + std::stringstream ss; + + ss << "{ 'b_intens', " << base_intensity() << ", "; + + for (size_t tractlet_i = 0; tractlet_i < size(); tractlet_i++) { + + ss << "{ 'acs', " << operator[](tractlet_i).acs() << ", "; + + for (size_t ax_i = 0; ax_i < 3; ax_i++) { + + ss << "["; + + for (size_t degree_i = 0; degree_i < operator[](tractlet_i)[ax_i].size(); degree_i++) { + + for (size_t dim_i = 0; dim_i < 3; dim_i++) + ss << operator[](tractlet_i)[ax_i][degree_i][dim_i] << " "; + + if (degree_i != 2) + ss << "; "; + } + + ss << "]"; + + if (tractlet_i != 2) + ss << ", "; + + } + + ss << "}"; + + if (tractlet_i != (size() -1)) + ss << ", "; + } + + ss << "}"; + + return ss.str(); + + } + + Tractlet::Set Tractlet::Set::peel(double distance, size_t num_length_sections, size_t num_width_sections, bool to_cube) const { + + Tractlet::Set include; + + include.set_extend_prop("peel_distance", str(distance)); + + if (to_cube) + include.set_extend_prop("peel_shape", "cube"); + else + include.set_extend_prop("peel_shape", "sphere"); + + include.add_extend_elem_props(*this); + + + for (size_t tract_i = 0; tract_i < size(); ++tract_i) { + + Track::Set tcks = operator[](tract_i).to_strands(num_width_sections).to_tracks(num_length_sections); + + bool in_roi = false; + + for (size_t tck_i = 0; tck_i < tcks.size(); ++tck_i) { + for (size_t point_i = 0; point_i < tcks[tck_i].num_points(); point_i++) { + + Track tck = tcks[tck_i]; + + if (to_cube) { + if ((abs(tck[point_i][X]) <= distance) && (abs(tck[point_i][Y]) <= distance) && (abs(tck[point_i][Z]) <= distance)) { + in_roi = true; + break; + } + } else { + if (tck[point_i].norm() <= distance) { + in_roi = true; + break; + } + } + } + + if (in_roi) + break; + } + + if (in_roi) + include.push_back(operator[](tract_i), get_extend_elem_prop_row(tract_i)); + + } + + include.copy_props(*this); + include.copy_relevant_elem_props(*this); + + return include; + } + + + } + +} diff --git a/src/bts/fibre/tractlet/set.h b/src/bts/fibre/tractlet/set.h new file mode 100644 index 0000000..a58f545 --- /dev/null +++ b/src/bts/fibre/tractlet/set.h @@ -0,0 +1,268 @@ +/* + Copyright 2010 Brain Research Institute/National ICT Australia (NICTA), Melbourne, Australia + + Written by Thomas G Close, 5/05/09. + + This file is part of Bayesian Tractlet Sampling (BTS). + + BTS is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + BTS is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with BTS. If not, see . + +*/ + +#include "bts/fibre/base/set.h" + + +#ifndef __bts_fibre_tractlet_set_h__ +#define __bts_fibre_tractlet_set_h__ + +#include + +#include "bts/fibre/track.h" +#include "bts/fibre/tractlet.h" +#include "bts/fibre/base/set_reader.h" +#include "bts/fibre/base/set_writer.h" + +#include "bts/common.h" +#include "bts/file.h" + + +#include "bts/math/munkres.h" + +#include "k_means/KMlocal.h" // k-means algorithms + +#define LOOP(op) \ + for (size_t tractlet_i = 0; tractlet_i < size(); ++tractlet_i) { op } + +namespace BTS { + + namespace Fibre { + + class Tractlet::Set : public Base::Set { + + //Public nested classes and typedefs + public: + + class Walker; + class Momentum; + typedef Base::Tensor Tensor; + typedef Base::SetReader Reader; + typedef Base::SetWriter Writer; + + typedef Base::SetTextReader TextReader; + typedef Base::SetTextWriter TextWriter; + + friend class Object; + friend class Base::Tensor; + friend class Base::SetReader; + friend class Base::SetWriter; + friend class Track::Set; + friend class Strand::Set; + + public: + + std::vector& append_characteristic_property_keys(std::vector& header); + + + //Public static constants + public: + + const static std::string FILE_EXTENSION; + + protected: + + const static char* PROPS_LIST[]; + + //Public methods; + public: + + /*! Initialises a tractlet set with variable tractlet sizes, without base intensity or tractlet intensities + * + * @param extended_props The extended properties of the set + */ + Set (const std::map& extended_props = std::map()) + : Base::Set(std::vector(), std::vector(), extended_props) {} + + + /*! Initialises a tractlet set with variable strand sizes, with properties element propertiess + * + * @param props The set properties + * @param elem_props The element properties + * @param extended_props The extended properties of the set + */ + Set (const std::vector& props, const std::vector& elem_props, const std::map& extended_props = std::map()) + : Base::Set(props, elem_props, extended_props) {} + + + /*! Initialises a tractlet set of a preset size with tractlet degree + * + * @param size Size of the tractlet set + * @param degree The (fixed) degree of the the tractlets in the tractlet set (can be freed using the 'free_elem_degree()' function) + * @param extended_props The extended properties of the set + */ + Set (size_t size, size_t degree, const std::map& extended_props = std::map()) + : Base::Set(size, degree, 9 * degree, std::vector(), std::vector(), extended_props) {} + + + /*! Initialises a tractlet set of a preset size with strand degree, with properties and element properties + * + * @param size Size of the tractlet set + * @param props The set properties + * @param elem_props The element properties + * @param degree The (fixed) degree of the the tractlets in the tractlet set (can be freed using the 'free_elem_degree()' function) + * @param extended_props The extended properties of the set + */ + Set (size_t size, size_t degree, const std::vector& props, const std::vector& elem_props, const std::map& extended_props = std::map()) + : Base::Set(size, degree, 9 * degree + elem_props.size(), props, elem_props, extended_props) {} + + + Set (std::string file_location, size_t degree = 0, size_t num_tractlets = 0) + : Base::Set(std::vector(), std::vector(), std::map()) + { load(file_location, degree, num_tractlets); } + + Set (const Set& s_set) + : Base::Set(s_set) {} + + Set(const Strand::Set& set); + + Set(const Strand::Set& strands, double width); + + Set(const Strand::Set& set, size_t num_tractlets, const std::string& cluster_save_location = ""); + + Set (const Track::Set&, size_t degree); + + Set (const Track::Set& set, size_t degree, double width); + + Set (const Track::Set& set, size_t degree, size_t num_tractlets, const std::string& cluster_save_location = ""); + + + BASE_GENERAL_FUNCTIONS(Set); + + BASE_SET_FUNCTIONS(Set); + + + size_t max_degree() const; + + size_t degree() const + { if (var_elem_degrees()) throw Exception ("Tractlet set has variable rows, so its 'degree' is undefined"); return elem_dgree; } + + void project_to_sphere(double sphere_radius); + + void load(const std::string& location, size_t degree = 0, size_t num_tractlets = 0); + + void save(const std::string& location, size_t num_length_sections = 0, double strands_per_acs = -1.0) const; + + void save(const std::string& location, double strands_per_acs) const + { save(location, 0, strands_per_acs); } + + //!Converts to a constant number of strands per tractlet + Strand::Set to_strands(size_t num_length_sections) const; + + //!Converts to a constant number of strands per tractlet cross-sectional area + Strand::Set to_strands(double strands_per_acs) const; + + Track::Set to_tracks(size_t num_length_sections, size_t num_width_sections) const; + + Track::Set to_tracks(size_t num_length_sections, double strands_per_acs) const; + + Tractlet::Set peel(double inclusion_radius, size_t num_length_sections, size_t num_width_sections, bool to_cube = false) const; + + Strand::Set backbones() const; + + Tractlet::Set& sanitize(); + + Set permute(const std::vector& indices) const; + + Set smallest_distance_set(const Set& reference) + { Set smallest; Base::Set::smallest_distance_set(reference, smallest); return smallest; } + + Set& operator+= (const Set& set) + { Base::Set::operator+=(set); return *this; } + + Set& operator-= (const Set& set) + { Base::Set::operator-=(set); return *this; } + + Set& operator*= (const Set& set) + { Base::Set::operator*=(set); return *this; } + + Set& operator*= (double c) + { Base::Set::operator*=(c); return *this; } + + Set& operator/= (const Set& set) + { Base::Set::operator/=(set); return *this; } + + Set& operator/= (double c) + { Base::Set::operator/=(c); return *this; } + + Set operator+ (const Set& set) const + { Set answer (*this); answer += set; return answer; } + + Set operator- (const Set& set) const + { Set answer (*this); answer -= set; return answer; } + + Set operator* (const Set& set) const + { Set answer (*this); answer *= set; return answer; } + + Set operator* (double c) const + { Set answer (*this); answer *= c; return answer; } + + Set operator/ (double c) const + { Set answer (*this); answer /= c; return answer; } + + Set operator/ (const Set& set) const + { Set answer (*this); answer /= set; return answer; } + + std::string matlab_str() const; + + void calc_characteristic_properties(); + + private: + + /*! Initiates the tractlet set from a set of strands by first clustering the strands into clusters and then converting + * the clusters into tractlets. + * + * @param strands The strands to be converted + */ + void from_strands(const Strand::Set& strands); + + /*! Initiates the tractlet set from a set of strands by first clustering the strands into a number of clusters + * specified by the @arg num_clusters parameter, and then converting the clusters into tractlets. + * + * @param strands The strands to be converted + * @param num_clusters The number of new clusters to generate + */ + void from_strands(const Strand::Set& strands, size_t num_clusters, const std::string& cluster_save_location = ""); + + + /*! Initiates the tractlet set from a set of strands by converting each strand into a new tractlet with given width + * + * @param strands The strands to be converted + * @param width The width of the new tractlets about the provided strand 'backbones' + */ + void from_strands(const Strand::Set& strands, double width); + + }; + + + inline Tractlet::Set operator* (double c, Tractlet::Set set) { Tractlet::Set answer (set); answer *= c; return answer; } + + + } + +} + +#undef LOOP + +#endif + + diff --git a/src/bts/fibre/tractlet/set/momentum.cpp b/src/bts/fibre/tractlet/set/momentum.cpp new file mode 100644 index 0000000..095941b --- /dev/null +++ b/src/bts/fibre/tractlet/set/momentum.cpp @@ -0,0 +1,72 @@ +/* + Copyright 2008 Brain Research Institute, Melbourne, Australia + + Written by Thomas G Close, Aug 2, 2010. + + This file is part of MRtrix. + + MRtrix is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + MRtrix is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with MRtrix. If not, see . + +*/ + +#include "bts/fibre/tractlet/set/momentum.h" + + + + +namespace BTS { + + namespace Fibre{ + + const double Tractlet::Set::Momentum::STEP_SCALE_DEFAULT = 1.0; + const char* Tractlet::Set::Momentum::STEP_LOCATION_DEFAULT = "/home/tclose/data/mcmc/hamiltonian/params/stepsizes/default.tct"; + + Tractlet::Set::Momentum Tractlet::Set::Momentum::factory( const Set& state, + double step_scale, + const std::string& step_location, + MCMC::Proposal::Distribution* const proposal_distribution) { + Fibre::Tractlet::Set step; + + if (step_location.size()) { + step.load(step_location); + + //If the loaded step only contains one strand use this as the template for the whole set + if (step.size() == 1) { + Fibre::Tractlet::Set full_step(state.size(), state.degree()); + full_step.copy_props(step); + full_step.copy_elem_props(step); + + for (size_t elem_i = 0; elem_i < state.size(); ++elem_i) + full_step[elem_i] = step[0]; + + step = full_step; + + } + + else if (step.size() != state.size()) + throw Exception ("Loaded step sizes' size (" + str(step.size()) + ") does not match state (" + str(state.size()) + ")."); + + } else { + step = state; + step.set(step_scale); + } + + + return Fibre::Tractlet::Set::Momentum (proposal_distribution, step); + + } + + } + +} diff --git a/src/bts/fibre/tractlet/set/momentum.h b/src/bts/fibre/tractlet/set/momentum.h new file mode 100644 index 0000000..78ec69d --- /dev/null +++ b/src/bts/fibre/tractlet/set/momentum.h @@ -0,0 +1,90 @@ +/* + Copyright 2008 Brain Research Institute, Melbourne, Australia + + Written by Thomas G Close, Aug 2, 2010. + + This file is part of MRtrix. + + MRtrix is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + MRtrix is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with MRtrix. If not, see . + +*/ + +#ifndef __bts_fibre_tractlet_set_momentum_h__ +#define __bts_fibre_tractlet_set_momentum_h__ + +#include "bts/fibre/tractlet/set.h" +#include "bts/mcmc/proposal/distribution.h" +#include "bts/mcmc/proposal/momentum.h" + +namespace BTS { + + namespace Fibre { + + class Tractlet::Set::Momentum { + + //Public static variables, nested classes and typedefs + public: + + static const double STEP_SCALE_DEFAULT; + static const char* STEP_LOCATION_DEFAULT; + + protected: + + MCMC::Proposal::Momentum mcmc_momentum; + + //Public static functions. + public: + + static Momentum factory( const Set& state, + double step_scale, + const std::string& step_location, + MCMC::Proposal::Distribution* const proposal_distribution); + + + + //Public member functions + public: + + Momentum(MCMC::Proposal::Distribution* const prop_distr = 0) + : mcmc_momentum(prop_distr) {} + + Momentum(MCMC::Proposal::Distribution* const proposal_distribution, + const Set& relative_step_sizes) + + : mcmc_momentum(proposal_distribution, relative_step_sizes) {} + + + void half_update_momentum(const Set& gradient) + { mcmc_momentum.half_update_momentum(gradient); } + + void update_state(Set& state) const + { MR::Math::Vector& state_vector = state; mcmc_momentum.update_state(state_vector); } + + + double predicted_change(const Set& gradient) const + { return mcmc_momentum.predicted_change(gradient); } + + double log_kinetic_energy() const + { return mcmc_momentum.log_kinetic_energy(); } + + void randomize() + { mcmc_momentum.randomize(); } + + }; + + } + +} + +#endif /* __bts_fibre_tractlet_set_momentum_h__ */ diff --git a/src/bts/fibre/tractlet/set/tensor.cpp b/src/bts/fibre/tractlet/set/tensor.cpp new file mode 100644 index 0000000..cd6e7a3 --- /dev/null +++ b/src/bts/fibre/tractlet/set/tensor.cpp @@ -0,0 +1,45 @@ +/* + Copyright 2008 Brain Research Institute, Melbourne, Australia + + Written by Thomas G Close, 08/08/2010. + + This file is part of MRtrix. + + MRtrix is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + MRtrix is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with MRtrix. If not, see . + +*/ + +//#include "bts/fibre/tractlet/set/tensor.h" +// +//namespace BTS { +// +// namespace Fibre { +// +//#ifdef STRUCTURED_SET_TENSOR +// Tractlet::Set::Tensor::Tensor(const Tractlet::Set& default_value) +// : base_intensity(default_value) { +// +// for (size_t elem_i = 0; elem_i < default_value.size(); elem_i++) +// elems.push_back(Tractlet::Tensor_tpl(default_value[elem_i].degree(), default_value)); +// +// this->init(); +// +// } +// +//#endif +// +// } +// +//} + diff --git a/src/bts/fibre/tractlet/set/tensor.h b/src/bts/fibre/tractlet/set/tensor.h new file mode 100644 index 0000000..a0592ed --- /dev/null +++ b/src/bts/fibre/tractlet/set/tensor.h @@ -0,0 +1,214 @@ +/* + Copyright 2008 Brain Research Institute, Melbourne, Australia + + Written by Thomas G Close, 08/08/2010. + + This file is part of MRtrix. + + MRtrix is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + MRtrix is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with MRtrix. If not, see . + +*/ + +//#ifndef __bts_fibre_tractlet_set_tensor_h__ +//#define __bts_fibre_tractlet_set_tensor_h__ +// +//#include "bts/fibre/set/tensor.h" +//#include "bts/fibre/tractlet/set.h" +//#include "bts/fibre/tensor/writer2.h" +// +//namespace BTS { +// +// namespace Fibre { +// +//#ifndef STRUCTURED_SET_TENSOR +// class Tractlet::Set::Tensor : public MR::Math::Matrix { +// +// public: +// +// typedef Fibre::Tensor::Writer2 Writer; +// +// public: +// +// Tensor () {} +// +// Tensor(const Set& default_value) +// : MR::Math::Matrix(default_value.vsize(), default_value.vsize()) { zero(); } +// +// Tensor(const Tensor& t) +// : MR::Math::Matrix(t) {} +// +// ~Tensor() {} +// +// +// Tensor& operator= (const Tensor& t) +// { this->MR::Math::Matrix::operator=(t); return *this; } +// +// +// size_t matrix_length() const +// { return this->rows(); } +// +// +// const MR::Math::Matrix& matrix() const +// { return *this; } +// +// Tensor& zero() +// { MR::Math::Matrix::operator=(0.0); return *this; } +// +// Tensor& invalidate() +// { MR::Math::Matrix::operator=(NAN); return *this; } +// +// void from_matrix(const MR::Math::Matrix& matrix) +// { MR::Math::Matrix::operator=(matrix); } +// +// Tensor& operator+= (const MR::Math::Matrix& tensor) +// { MR::Math::Matrix::operator+=(tensor); return *this; } +// +// Tensor& operator-= (const MR::Math::Matrix& tensor) +// { MR::Math::Matrix::operator-=(tensor); return *this; } +// +// Tensor& operator*= (const MR::Math::Matrix& tensor) +// { MR::Math::Matrix::operator*=(tensor); return *this; } +// +// Tensor& operator*= (double c) +// { MR::Math::Matrix::operator*=(c); return *this; } +// +// Tensor& operator/= (const MR::Math::Matrix& tensor) +// { MR::Math::Matrix::operator/=(tensor); return *this; } +// +// Tensor& operator/= (double c) +// { MR::Math::Matrix::operator/=(c); return *this; } +// +// Tensor operator+ (const MR::Math::Matrix& t) const +// { Tensor answer (*this); answer += t; return answer; } +// +// Tensor operator- (const MR::Math::Matrix& t) const +// { Tensor answer (*this); answer -= t; return answer; } +// +// Tensor operator* (const MR::Math::Matrix& t) const +// { Tensor answer (*this); answer *= t; return answer; } +// +// Tensor operator* (double c) const +// { Tensor answer (*this); answer *= c; return answer; } +// +// Tensor operator/ (const MR::Math::Matrix& t) const +// { Tensor answer (*this); answer /= t; return answer; } +// +// Tensor operator/ (double c) const +// { Tensor answer (*this); answer /= c; return answer; } +// +// }; +// +//// std::ostream& operator<<(std::ostream& stream, const Strand::Set::Tensor& tensor) { +//// +//// stream << "base_intensity: " << tensor.base_intensity << std::endl; +//// +//// for (size_t elem_i = 0; elem_i < tensor.size(); elem_i++) +//// stream << tensor[elem_i] << std::endl; +//// +//// return stream; +//// +//// } +// +//#else +// class Tractlet::Set::Tensor : public Tractlet::Set::Tensor_tpl { +// +// public: +// +// typedef Fibre::Tensor::Writer Writer; +// +// public: +// +// Tensor () {} +// +// Tensor(const Set& default_value) +// : Tensor_tpl(default_value) {} +// +// Tensor(const Tensor_tpl& t) +// : Tensor_tpl(t) {} +// +// ~Tensor() {} +// +// +// Tensor& operator= (const Tensor_tpl& t) +// { Tensor_tpl::operator=(t); return *this; } +// +// +// size_t matrix_length() const +// { return Flattener< Set >::length(*this); } +// +// +// MR::Math::Matrix matrix() const +// { return Flattener< Set >::flatten(*this); } +// +// +// Tensor from_matrix(const MR::Math::Matrix& matrix) +// { return Flattener< Set >::unflatten(matrix, *this); } +// +// Tensor& operator+= (const Tensor& tensor) +// { Tensor_tpl::operator+=(tensor); return *this; } +// +// Tensor& operator-= (const Tensor& tensor) +// { Tensor_tpl::operator-=(tensor); return *this; } +// +// Tensor& operator*= (const Tensor& tensor) +// { Tensor_tpl::operator*=(tensor); return *this; } +// +// Tensor& operator*= (double c) +// { Tensor_tpl::operator*=(c); return *this; } +// +// Tensor& operator/= (const Tensor& tensor) +// { Tensor_tpl::operator/=(tensor); return *this; } +// +// Tensor& operator/= (double c) +// { Tensor_tpl::operator/=(c); return *this; } +// +// Tensor operator+ (const Tensor& t) const +// { Tensor answer (*this); answer += t; return answer; } +// +// Tensor operator- (const Tensor& t) const +// { Tensor answer (*this); answer -= t; return answer; } +// +// Tensor operator* (const Tensor& t) const +// { Tensor answer (*this); answer *= t; return answer; } +// +// Tensor operator* (double c) const +// { Tensor answer (*this); answer *= c; return answer; } +// +// Tensor operator/ (const Tensor& t) const +// { Tensor answer (*this); answer /= t; return answer; } +// +// Tensor operator/ (double c) const +// { Tensor answer (*this); answer /= c; return answer; } +// +// }; +// +// std::ostream& operator<<(std::ostream& stream, const Tractlet::Set::Tensor& tensor) { +// +// stream << "base_intensity: " << tensor.base_intensity << std::endl; +// +// for (size_t elem_i = 0; elem_i < tensor.size(); elem_i++) +// stream << tensor[elem_i] << std::endl; +// +// return stream; +// +// } +// +//#endif +// +// +// } +// +//} +// +//#endif /* __bts_fibre_set_tensor_h__ */ diff --git a/src/bts/fibre/tractlet/set/walker.cpp b/src/bts/fibre/tractlet/set/walker.cpp new file mode 100644 index 0000000..0591fe9 --- /dev/null +++ b/src/bts/fibre/tractlet/set/walker.cpp @@ -0,0 +1,103 @@ +/* + Copyright 2008 Brain Research Institute, Melbourne, Australia + + Written by Thomas G Close, Aug 2, 2010. + + This file is part of MRtrix. + + MRtrix is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + MRtrix is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with MRtrix. If not, see . + +*/ + +#include "bts/fibre/tractlet/set/walker.h" + +namespace BTS { + + namespace Fibre { + + + const char* Tractlet::Set::Walker::TYPE_DEFAULT = "standard"; + const double Tractlet::Set::Walker::STEP_SCALE_DEFAULT = 0.001; + const std::string Tractlet::Set::Walker::STEP_LOCATION_DEFAULT = "/home/tclose/Data/Tractography/fibre/tract/masks/mcmc/metropolis/default.tct"; + + + Tractlet::Set::Walker* Tractlet::Set::Walker::factory(const Tractlet::Set& state, + const std::string& type, + double step_scale, + const std::string& step_location, + MCMC::Proposal::Distribution* distribution, + double base_intens_scale) { + + + + Walker* walker; + + if (type == "standard") { + Fibre::Tractlet::Set step; + + if (step_location.size()) { + step.load(step_location); + + if (step.size() == 1) { + + Fibre::Tractlet step_template = step[0]; + + step.resize(state.size()); + + for (size_t tract_i = 0; tract_i < state.size(); ++tract_i) { + + step[tract_i] = step_template; + + if (state[tract_i].degree() > step_template.degree()) + throw Exception ("Tractlet (" + str(tract_i) + ") is larger than step template."); + else if (state[tract_i].degree() < step_template.degree()) + step[tract_i].redegree(state[tract_i].degree()); + + } + + } else if (step.size() != state.size()) + throw Exception ("Loaded step sizes' size (" + str(step.size()) + ") does not match state (" + str(state.size()) + ")."); + + step *= step_scale; + + } else { + step = state; + step.zero(); + step.set(step_scale); + } + + walker = new Walker (distribution, step); + + } else + + throw Exception ("Unrecognised Fibre::Tractlet::Set::Walker type '" + type + "'."); + + return walker; + + + + } + + + void Tractlet::Set::Walker::step(const Tractlet::Set& current, Tractlet::Set& proposed, double scalar) const { + + MCMC::Proposal::Walker::step(current, proposed, scalar); + + } + + + } + + +} diff --git a/src/bts/fibre/tractlet/set/walker.h b/src/bts/fibre/tractlet/set/walker.h new file mode 100644 index 0000000..cf9ebea --- /dev/null +++ b/src/bts/fibre/tractlet/set/walker.h @@ -0,0 +1,74 @@ +/* + Copyright 2008 Brain Research Institute, Melbourne, Australia + + Written by Thomas G Close, Aug 2, 2010. + + This file is part of MRtrix. + + MRtrix is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + MRtrix is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with MRtrix. If not, see . + +*/ + +#ifndef __bts_fibre_tractlet_set_walker_h__ +#define __bts_fibre_tractlet_set_walker_h__ + +#include "bts/fibre/tractlet/set.h" +#include "bts/fibre/tractlet/walker.h" +#include "bts/mcmc/proposal/walker.h" +#include "bts/mcmc/proposal/distribution.h" + +namespace BTS { + + namespace Fibre { + + class Tractlet::Set::Walker : public MCMC::Proposal::Walker { + + //Public static const members. + public: + + static const char* TYPE_DEFAULT; + static const double STEP_SCALE_DEFAULT; + static const std::string STEP_LOCATION_DEFAULT; + + //Public static member functions. + public: + + static Walker* factory(const Tractlet::Set& state, + const std::string& type, + double step_scale, + const std::string& step_location, + MCMC::Proposal::Distribution* distribution, + double base_intens_scale); + + //Public member functions + public: + + Walker(MCMC::Proposal::Distribution* const proposal_distribution, + const Set& relative_step_sizes) + + : MCMC::Proposal::Walker (proposal_distribution, relative_step_sizes) {} + + virtual ~Walker() {} + + + void step(const Set& current, Set& proposed, double scalar = 1.0) const; + + + }; + + } + +} + +#endif /* __bts_fibre_tractlet_set_walker_h__ */ diff --git a/src/bts/fibre/tractlet/tensor.cpp b/src/bts/fibre/tractlet/tensor.cpp new file mode 100644 index 0000000..664a46f --- /dev/null +++ b/src/bts/fibre/tractlet/tensor.cpp @@ -0,0 +1,165 @@ +/* + Copyright 2008 Brain Research Institute, Melbourne, Australia + + Written by Thomas G Close, 24/11/2010. + + This file is part of MRtrix. + + MRtrix is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + MRtrix is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with MRtrix. If not, see . + +*/ + +#include "bts/fibre/tractlet.h" +#include "bts/fibre/tractlet/tensor.h" +#include "bts/fibre/tractlet/section.h" +#include "bts/fibre/tractlet/section/tensor.h" + + +namespace BTS { + + namespace Fibre { + + void Fibre::Tractlet::Tensor::add_section_hessian(const Tractlet& tractlet, + const Tractlet::Section& section, + const Strand::BasicSection& gradient, + const Strand::BasicSection::Tensor& hessian) { + + + Fibre::Tractlet d2_intensity = get_template(); + + Strand pos_gradient = Strand::outer_product(section.position_coeffs, gradient.position() / section.intensity()); + + if (has_var_acs()) + d2_intensity.set_acs(0.0); + +// d2_intensity.set_base_width(0.0); + + //Add position gradient. + d2_intensity[0] += pos_gradient; + d2_intensity[1] += pos_gradient * section.ax1_fraction; + d2_intensity[2] += pos_gradient * section.ax2_fraction; + + //Add tangent gradient. + + Strand tang_gradient = Strand::outer_product(section.tangent_coeffs, gradient.tangent() * (section.length_fraction / section.intensity())); + + d2_intensity[0] += tang_gradient; + d2_intensity[1] += tang_gradient * section.ax1_fraction; + d2_intensity[2] += tang_gradient * section.ax2_fraction; + + + Fibre::Tractlet acs_gradient = d2_intensity * section.intensity(); + + + if (true) { //Needs some serious rewriting. + + throw Exception ("tied_width hessian needs to be adjusted after accounting for tractlet sheer."); + + double norm1 = tractlet[1][0].norm(); + double norm2 = tractlet[2][0].norm(); + + Coord d_intensity_d1 = tractlet.acs() * ((norm2/norm1) * tractlet(1,0) - tractlet(2,0)); + Coord d_intensity_d2 = tractlet.acs() * ((norm1/norm2) * tractlet(2,0) - tractlet(1,0)); + + for (size_t dim_i1 = 0; dim_i1 < 3; dim_i1++) { + + + operator()(1,0,dim_i1,2,0,dim_i1) -= gradient.intensity() * tractlet.acs(); + operator()(2,0,dim_i1,1,0,dim_i1) -= gradient.intensity() * tractlet.acs(); + + operator()(1,0,dim_i1,1,0,dim_i1) += gradient.intensity() * tractlet.acs() * norm2 / norm1; + operator()(2,0,dim_i1,2,0,dim_i1) += gradient.intensity() * tractlet.acs() * norm1 / norm2; + + + for (size_t dim_i2 = 0; dim_i2 < 3; dim_i2++) { + + + operator()(1,0,dim_i1,1,0,dim_i2) -= tractlet.acs() * gradient.intensity() * tractlet[1][0][dim_i1] * tractlet[1][0][dim_i2] * (norm2 / MR::Math::pow3(norm1)); + operator()(2,0,dim_i1,2,0,dim_i2) -= tractlet.acs() * gradient.intensity() * tractlet[2][0][dim_i1] * tractlet[2][0][dim_i2] * (norm1 / MR::Math::pow3(norm2)); + + operator()(1,0,dim_i1,2,0,dim_i2) += tractlet.acs() * gradient.intensity() * tractlet[2][0][dim_i2] * tractlet[1][0][dim_i1] / (norm1 * norm2); + operator()(2,0,dim_i1,1,0,dim_i2) += tractlet.acs() * gradient.intensity() * tractlet[1][0][dim_i2] * tractlet[2][0][dim_i1] / (norm2 * norm1); + + for (size_t ax_i = 0; ax_i < 3; ++ax_i) + for (size_t degree_i = 0; degree_i < tractlet.degree(); ++degree_i) { + + operator()(ax_i,degree_i,dim_i1,1,0,dim_i2) += tractlet.acs() * d2_intensity(ax_i,degree_i)[dim_i1] * d_intensity_d1[dim_i2]; + operator()(ax_i,degree_i,dim_i1,2,0,dim_i2) += tractlet.acs() * d2_intensity(ax_i,degree_i)[dim_i1] * d_intensity_d2[dim_i2]; + + operator()(1,0,dim_i1,ax_i,degree_i,dim_i2) += tractlet.acs() * d2_intensity(ax_i,degree_i)[dim_i2] * d_intensity_d1[dim_i1]; + operator()(2,0,dim_i1,ax_i,degree_i,dim_i2) += tractlet.acs() * d2_intensity(ax_i,degree_i)[dim_i2] * d_intensity_d2[dim_i1]; + + } + + } + + } + + + if (has_var_acs()) { + acs_gradient(1,0) += gradient.intensity() * d_intensity_d1; + acs_gradient(2,0) += gradient.intensity() * d_intensity_d2; + } + + } + + + if (has_var_acs()) + acs() += acs_gradient; + + + for (size_t degree_i1 = 0; degree_i1 < degree(); degree_i1++) + for (size_t dim_i1 = 0; dim_i1 < 3; dim_i1++) { + + Fibre::Tractlet ax0 = row(0,degree_i1,dim_i1); + Fibre::Tractlet ax1 = row(1,degree_i1,dim_i1); + Fibre::Tractlet ax2 = row(2,degree_i1,dim_i1); + + if (has_var_acs()) { + ax0.acs_sqrt() += acs_gradient.operator()(0,degree_i1)[dim_i1]; + ax1.acs_sqrt() += acs_gradient.operator()(1,degree_i1)[dim_i1]; + ax2.acs_sqrt() += acs_gradient.operator()(2,degree_i1)[dim_i1]; + } + + + for (size_t degree_i2 = 0; degree_i2 < degree(); degree_i2++) + for (size_t dim_i2 = 0; dim_i2 < 3; dim_i2++) { + + double ax0_ax0 = section.position_coeffs[degree_i1] * section.position_coeffs[degree_i2] * hessian.position(dim_i1).position(dim_i2) + + section.position_coeffs[degree_i1] * section.tangent_coeffs[degree_i2] * hessian.position(dim_i1).tangent(dim_i2) * section.length_fraction + + section.tangent_coeffs[degree_i1] * section.position_coeffs[degree_i2] * hessian.tangent(dim_i1).position(dim_i2) * section.length_fraction + + section.tangent_coeffs[degree_i1] * section.tangent_coeffs[degree_i2] * hessian.tangent(dim_i1).tangent(dim_i2) * MR::Math::pow2(section.length_fraction); + + ax0[0][degree_i2][dim_i2] += ax0_ax0; + ax0[1][degree_i2][dim_i2] += ax0_ax0 * section.ax1_fraction; + ax1[0][degree_i2][dim_i2] += ax0_ax0 * section.ax1_fraction; + ax0[2][degree_i2][dim_i2] += ax0_ax0 * section.ax2_fraction; + ax2[0][degree_i2][dim_i2] += ax0_ax0 * section.ax2_fraction; + + ax1[1][degree_i2][dim_i2] += ax0_ax0 * MR::Math::pow2(section.ax1_fraction); + ax1[2][degree_i2][dim_i2] += ax0_ax0 * section.ax1_fraction * section.ax2_fraction; + ax2[1][degree_i2][dim_i2] += ax0_ax0 * section.ax1_fraction * section.ax2_fraction; + + ax2[2][degree_i2][dim_i2] += ax0_ax0 * MR::Math::pow2(section.ax2_fraction); + + } + + + } + + } + + } + +} diff --git a/src/bts/fibre/tractlet/tensor.h b/src/bts/fibre/tractlet/tensor.h new file mode 100644 index 0000000..3577195 --- /dev/null +++ b/src/bts/fibre/tractlet/tensor.h @@ -0,0 +1,137 @@ +/* + Copyright 2008 Brain Research Institute, Melbourne, Australia + + Written by Thomas G Close, 07/08/2010. + + This file is part of MRtrix. + + MRtrix is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + MRtrix is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with MRtrix. If not, see . + +*/ + + + +#ifndef __bts_fibre_tractlet_tensor_h__ +#define __bts_fibre_tractlet_tensor_h__ + + +#include "bts/fibre/tractlet.h" +#include "bts/fibre/base/tensor.h" +#include "bts/fibre/strand/basic_section/tensor.h" + + +namespace BTS { + + namespace Fibre { + + class Tractlet::Tensor : public Base::Tensor { + + + public: + +// typedef Base::TensorWriter Writer; + + //Public member functions + public: + + Tensor() {} + + Tensor(const Tractlet& tractlet_template) + : Base::Tensor(tractlet_template) {} + + + Tensor (const Tractlet& tractlet_template, const MR::Math::Matrix::View& view) + : Base::Tensor(tractlet_template, view) {} + + + Tensor(const Tensor& t) + : Base::Tensor(t) {} + + + Tensor& operator=(const Tensor& t) + { Base::Tensor::operator=(t); return *this; } + + Tensor& operator=(const MR::Math::Matrix& m) + { Base::Tensor::operator=(m); return *this; } + + Tensor& operator=(double c) + { Base::Tensor::operator=(c); return *this; } + + size_t degree() const + { return tmpl.degree(); } + + size_t vsize() const + { return tmpl.vsize(); } + + Tractlet row(size_t idx) + { return Tractlet(degree(), MR::Math::Matrix::row(idx), tmpl.props); } + + const Tractlet row(size_t idx) const + { return Tractlet(degree(), MR::Math::Matrix::row(idx), tmpl.props); } + + Tractlet row(size_t ax_i, size_t degree_i, size_t dim_i) + { return Tractlet(degree(), MR::Math::Matrix::row((ax_i * degree() + degree_i)*3 + dim_i), tmpl.props); } + + const Tractlet row(size_t ax_i, size_t degree_i, size_t dim_i) const + { return Tractlet(degree(), MR::Math::Matrix::row((ax_i * degree() + degree_i)*3 + dim_i), tmpl.props); } + + Tractlet column(size_t idx) + { return Tractlet(degree(), MR::Math::Matrix::column(idx), tmpl.props); } + + const Tractlet column(size_t idx) const + { return Tractlet(degree(), MR::Math::Matrix::column(idx), tmpl.props); } + + bool has_var_acs() const + { return tmpl.has_var_acs(); } + + Tractlet acs() + { assert(has_var_acs()); return Tractlet(degree(), MR::Math::Matrix::row(vsize() + tmpl.prop_index(Object::ACS_SQRT_PROP)), tmpl.props); } + + double& operator()(size_t row_ax_i, + size_t row_degree_i, + size_t row_dim_i, + size_t col_ax_i, + size_t col_degree_i, + size_t col_dim_i) + { return MR::Math::Matrix::operator()(row_ax_i * tmpl.degree() * 3 + row_degree_i * 3 + row_dim_i, col_ax_i * tmpl.degree() * 3 + col_degree_i * 3 + col_dim_i); } + + + double operator()(size_t row_ax_i, + size_t row_degree_i, + size_t row_dim_i, + size_t col_ax_i, + size_t col_degree_i, + size_t col_dim_i) const + { return MR::Math::Matrix::operator()(row_ax_i * tmpl.degree() * 3 + row_degree_i * 3 + row_dim_i, col_ax_i * tmpl.degree() * 3 + col_degree_i * 3 + col_dim_i); } + + Tractlet operator[](size_t idx) + { return Tractlet(degree(), MR::Math::Matrix::row(idx), tmpl.props); } + + const Tractlet operator[](size_t idx) const + { return Tractlet(degree(), MR::Math::Matrix::row(idx), tmpl.props); } + + void add_section_hessian(const Tractlet& tractlet, + const Tractlet::Section& section, + const Strand::BasicSection& gradient, + const Strand::BasicSection::Tensor& hessian); + + }; + + } + +} + +#include "bts/fibre/base/tensor_writer.h" + +#endif /* __bts_fibre_tractlet_tensor_h__ */ diff --git a/src/bts/fibre/tractlet/walker.h b/src/bts/fibre/tractlet/walker.h new file mode 100644 index 0000000..e0bfec1 --- /dev/null +++ b/src/bts/fibre/tractlet/walker.h @@ -0,0 +1,56 @@ +/* + Copyright 2008 Brain Research Institute, Melbourne, Australia + + Written by Thomas G Close, Aug 2, 2010. + + This file is part of MRtrix. + + MRtrix is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + MRtrix is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with MRtrix. If not, see . + +*/ + +#ifndef __bts_fibre_tractlet_walker_h__ +#define __bts_fibre_tractlet_walker_h__ + +#include "bts/fibre/tractlet.h" +#include "bts/mcmc/proposal/walker.h" +#include "bts/mcmc/proposal/distribution.h" + +namespace BTS { + + namespace Fibre { + + class Tractlet::Walker : public MCMC::Proposal::Walker { + + //Public member functions + public: + + Walker(MCMC::Proposal::Distribution* const prop_distr) + : MCMC::Proposal::Walker(prop_distr) {} + + Walker(MCMC::Proposal::Distribution* const proposal_distribution, + const Tractlet& relative_step_sizes) + + : MCMC::Proposal::Walker(proposal_distribution, relative_step_sizes) {} + + virtual ~Walker() {} + + + }; + + } + +} + +#endif /* __bts_fibre_tractlet_walker_h__ */ diff --git a/src/bts/file.cpp b/src/bts/file.cpp new file mode 100644 index 0000000..2c500b8 --- /dev/null +++ b/src/bts/file.cpp @@ -0,0 +1,124 @@ +/* + Copyright 2009 Brain Research Institute, Melbourne, Australia + + Created by Tom Close on 13/03/09. + + This file is part of Bayesian Tractlet Sampling (BTS). + + BTS is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + BTS is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with BTS. If not, see . + + */ + +#include + +#include "bts/common.h" +#include "bts/file.h" + + +namespace BTS { + + namespace File { + + std::vector list_filenames(std::string dir_location, std::string prefix, std::string suffix) { + + if (!File::is_dir(dir_location)) + throw MR::Exception("Input location provided " + dir_location + " is not a directory"); + + File::Dir dir(dir_location); + + std::vector filenames; + + std::string filename; + + + while (!(filename = dir.read_name()).empty()) { + + if (filename[0] != '.' && filename.size() - prefix.size() - suffix.size() >= 0) { //If the file is not hidden or has a name shorter than the prefix and suffix combined. + + if (!filename.substr(0,prefix.size()).compare(prefix) && !filename.substr(filename.size() - suffix.size(), filename.size()).compare(suffix)) //If the file matches the prefix and suffix + filenames.push_back(filename); + } + } + + sort(filenames.begin(), filenames.end()); + + return filenames; + + } + + + std::pair split_at_extension (std::string filename) { + + std::pair basename_and_ext; + + size_t extension_i = filename.find_last_of("."); + + if (extension_i == std::string::npos) + basename_and_ext.second = ""; + else + basename_and_ext.second = filename.substr(extension_i); + + basename_and_ext.first = filename.substr(0, extension_i); + + return basename_and_ext; + } + + + void clear_path(const std::string& location) { + + if (File::exists(location)) { + + if (OVERWRITE_FILES) + remove(location.c_str()); + else + throw Exception ("File '" + location + "' exists, if you want to automatically overwrite it set OVERWRITE_FILES to true."); + + } + + } + + + std::string extension(std::string location) { + + std::string file_ext; + + size_t extension_i = location.find_last_of("."); + + if (extension_i == std::string::npos || extension_i == location.size()-1) + file_ext = ""; + else + file_ext = location.substr(extension_i+1); + + return file_ext; + } + + + std::string strip_extension(std::string location) { + + std::string stripped; + + size_t extension_i = location.find_last_of("."); + + if (extension_i == std::string::npos) + stripped = location; + else + stripped = location.substr(0, extension_i); + + return stripped; + } + + + } + +} diff --git a/src/bts/file.h b/src/bts/file.h new file mode 100644 index 0000000..5baff61 --- /dev/null +++ b/src/bts/file.h @@ -0,0 +1,177 @@ +/* + Copyright 2009 Brain Research Institute, Melbourne, Australia + + Created by Tom Close on 13/03/09. + + This file is part of Bayesian Tractlet Sampling (BTS). + + BTS is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + BTS is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with BTS. If not, see . + + */ + + +#ifndef __bts_file_h__ +#define __bts_file_h__ + +#include +#include +#include +#include + +//#include "bts/common.h" + +#include "file/path.h" + +#include "exception.h" + + +#include "types.h" + + +namespace BTS { + + namespace File { + + const bool OVERWRITE_FILES = true; + + typedef MR::Path::Dir Dir; + + const std::string TXT_FILE_EXTENSTION = "txt"; + + + inline bool exists(const std::string& path) { return MR::Path::exists(path); } + + + inline void remove(const std::string& location) + { std::remove(location.c_str()); } + + + inline bool is_dir(const std::string path) { return MR::Path::is_dir(path); } + + + inline bool is_file (const std::string path) { return MR::Path::is_file(path); } + + + inline std::string join (const std::string& first, const std::string& second) { return MR::Path::join(first,second); } + + + std::pair split_at_extension (std::string filename); + + + std::string extension(std::string location); + + + std::string strip_extension(std::string location); + + + void clear_path(const std::string& location); + + + inline std::string basename(std::string location) { return MR::Path::basename(location); } + + + inline std::string dirname(std::string location) { return MR::Path::dirname(location); } + + + inline bool has_extension (const std::string& name, const std::string& suffix) + { return MR::Path::has_suffix(name, suffix); } + + + inline bool has_txt_extension (const std::string& name, const std::string& suffix) + { return has_extension(name, TXT_FILE_EXTENSTION) && has_extension(strip_extension(name), suffix); } + + + inline bool has_or_txt_extension (const std::string& name, const std::string& suffix) + { return has_txt_extension(name, suffix) || has_extension(name, suffix); } + + + template bool has_extension(const std::string& location) + { return MR::Path::has_suffix(location, T::FILE_EXTENSION); } + + + template bool has_or_set_extension(const std::string& location) + { return has_extension(location) || has_extension(location); } + + + template bool has_txt_extension (const std::string& name) + { return has_txt_extension(name, T::FILE_EXTENSION); } + + + template bool has_or_txt_extension (const std::string& name) + { return has_or_txt_extension(name, T::FILE_EXTENSION); } + + + template bool has_txt_or_set_extension(const std::string& location) + { return has_or_set_extension(location) || has_or_txt_extension(location); } + + + std::vector list_filenames(std::string dir_location, std::string prefix = std::string(""), std::string suffix = std::string("")); + + + template std::vector& load_vector(std::string location, std::vector& vector) { + + vector.clear(); + + std::ifstream fin (location.c_str()); + + char line[256]; + T t; + while (fin.getline(line, 256)) + vector.push_back(to(line, t)); + + fin.close(); + + return vector; + + } + + + template void save_vector(std::string location, const std::vector& vector) { + + std::ofstream fout (location.c_str()); + + for (size_t i = 0; i < vector.size(); i++) + fout << vector[i] << std::endl; + + fout.close(); + + + } + + + inline void mkdir(const std::string& location, bool make_parents = false) { + + std::string cmd = "mkdir "; + + if (make_parents) + cmd += "-p "; + + cmd += location; + + int failed = system(cmd.c_str()); + + if (failed) + throw MR::Exception ("Could not make directory '" + location + "'."); + + } + + + + + } + +} + +#endif + diff --git a/src/bts/image/buffer.cpp.h b/src/bts/image/buffer.cpp.h new file mode 100644 index 0000000..3f3cef7 --- /dev/null +++ b/src/bts/image/buffer.cpp.h @@ -0,0 +1,346 @@ +/* + Copyright 2008 Brain Research Institute, Melbourne, Australia + + Written by Thomas G Close, 16/07/2010. + + This file is part of MRtrix. + + MRtrix is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + MRtrix is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with MRtrix. If not, see . + +*/ + +#ifndef __image_buffer_tpl_cpp_h__ +#define __image_buffer_tpl_cpp_h__ + +#define LOOP(op) \ +for (int z = 0; z < dims[Z]; z++) { \ + for (int y = 0; y < dims[Y]; y++) { \ + for (int x = 0; x < dims[X]; x++) { \ + op \ + } \ + } \ +} + +namespace BTS { + + namespace Image { + + + template T& Buffer_tpl::operator() (const Index& c) { + + if (enforce_bounds && !in_bounds(c)) + throw Exception ("Coordinate " + str(c) + " is out of image bounds " + str(dimensions) + " (set 'enforce_bounds=false' if this is intentional)."); + + iterator it = voxels.find(c); + + if (it == voxels.end()) + return voxels[c] = new_voxel(c); + else + return it->second; + + } + + + template const T& Buffer_tpl::operator() (const Index& c) const { + + if (enforce_bounds && !in_bounds(c)) + throw Exception ("Coordinate " + str(c) + " is out of image bounds " + str(dimensions) + " (set 'enforce_bounds=false' if this is intentional)."); + + const_iterator it = voxels.find(c); + + if (it == voxels.end()) + throw Exception ("Coordinate " + str(c) + " has not been initialised and can't be since this buffer is const. Suggest using 'is_empty(const Coord&)' to check if it has been initialised first."); + + return it->second; + + } + + + template bool Buffer_tpl::is_empty(const Index& c) const { + + return !voxels.count(c); + + } + + + template template Buffer_tpl& Buffer_tpl::operator+= (const Buffer_tpl& buff) { + + if (dims() != buff.dims()) + throw Exception ("Buffer dimensions do not match, " + str(buff.dims()) + " and " + str(dims()) + "."); + + for (typename Buffer_tpl::const_iterator vox_it = buff.begin(); vox_it != buff.end(); ++vox_it) { + if (!is_empty(vox_it->first)) + this->operator()(vox_it->first) = vox_it->second; + else + this->operator()(vox_it->first) += vox_it->second; + } + + return *this; + + } + + template template Buffer_tpl& Buffer_tpl::operator-= (const Buffer_tpl& buff) { + + if (dims() != buff.dims()) + throw Exception ("Buffer dimensions do not match, " + str(buff.dims()) + " and " + str(dims()) + "."); + + for (typename Buffer_tpl::const_iterator vox_it = buff.begin(); vox_it != buff.end(); ++vox_it) { + + if (!is_empty(vox_it->first)) { + this->operator()(vox_it->first) = vox_it->second; + negate(this->operator()(vox_it->first)); + } else + this->operator()(vox_it->first) -= vox_it->second; + + } + + return *this; + + } + + + + template Buffer_tpl& Buffer_tpl::operator+= (const Buffer_tpl& buff) { + + if (dims() != buff.dims()) + throw Exception ("Buffer dimensions do not match, " + str(buff.dims()) + " and " + str(dims()) + "."); + + for (const_iterator vox_it = buff.begin(); vox_it != buff.end(); ++vox_it) + this->operator()(vox_it->first) += vox_it->second; + + return *this; + + } + + template Buffer_tpl& Buffer_tpl::operator-= (const Buffer_tpl& buff) { + + if (dims() != buff.dims()) + throw Exception ("Buffer dimensions do not match, " + str(buff.dims()) + " and " + str(dims()) + "."); + + for (const_iterator vox_it = buff.begin(); vox_it != buff.end(); ++vox_it) + this->operator()(vox_it->first) -= vox_it->second; + + return *this; + + } + + + template template Buffer_tpl& Buffer_tpl::operator*= (const Buffer_tpl& buff) { + + if (dims() != buff.dims()) + throw Exception ("Buffer dimensions do not match, " + str(buff.dims()) + " and " + str(dims()) + "."); + + for (typename Buffer_tpl::const_iterator vox_it = buff.begin(); vox_it != buff.end(); ++vox_it) { + + if (!is_empty(vox_it->first)) + this->operator()(vox_it->first) *= vox_it->second; + + } + + return *this; + + } + + template template Buffer_tpl& Buffer_tpl::operator/= (const Buffer_tpl& buff) { + + if (dims() != buff.dims()) + throw Exception ("Buffer dimensions do not match, " + str(buff.dims()) + " and " + str(dims()) + "."); + + for (typename Buffer_tpl::const_iterator vox_it = buff.begin(); vox_it != buff.end(); ++vox_it) { + + if (!is_empty(vox_it->first)) + this->operator()(vox_it->first) /= vox_it->second; + + } + + return *this; + + } + + + template Buffer_tpl& Buffer_tpl::negate() { + + for (typename Buffer_tpl::iterator vox_it = this->begin(); vox_it != this->end(); ++vox_it) + vox_it->second.negate(); + + return *this; + + } + + + template Buffer_tpl Buffer_tpl::operator+ (const Buffer_tpl& buff) const { + + Buffer_tpl answer; + + if (this->num_not_empty_voxels() > buff.num_not_empty_voxels()) { + answer = *this; + answer += buff; + } else { + answer = buff; + answer += *this; + } + + return answer; + + } + + + template Buffer_tpl Buffer_tpl::operator- (const Buffer_tpl& buff) const { + + Buffer_tpl answer; + + if (this->num_not_empty_voxels() > buff.num_not_empty_voxels()) { + answer = *this; + answer -= buff; + } else { + answer = buff; + answer -= *this; + } + + return answer; + + } + + + + template Buffer_tpl Buffer_tpl::operator* (const Buffer_tpl& buff) const { + + Buffer_tpl answer; + + if (this->num_not_empty_voxels() > buff.num_not_empty_voxels()) { + answer = *this; + answer *= buff; + } else { + answer = buff; + answer *= *this; + } + + return answer; + + } + + + template Buffer_tpl Buffer_tpl::operator/ (const Buffer_tpl& buff) const { + + Buffer_tpl answer; + + if (this->num_not_empty_voxels() > buff.num_not_empty_voxels()) { + answer = *this; + answer /= buff; + } else { + answer = buff; + answer /= *this; + } + + return answer; + + } + + + template template Buffer_tpl& Buffer_tpl::operator*= (const U& M) { + + for (iterator vox_it = begin(); vox_it != end(); ++vox_it) + vox_it->second *= M; + + return *this; + + } + + + template template Buffer_tpl& Buffer_tpl::operator/= (const U& M) { + + for (iterator vox_it = begin(); vox_it != end(); ++vox_it) + vox_it->second /= M; + + return *this; + + } + + + template std::ostream& operator<< (std::ostream& stream, const Image::Buffer_tpl& B) { + + stream << "Dims: " << B.dims(); + + if (B.enforce_bounds) + stream << " (enforced)"; + + stream << std::endl; + + for (typename Image::Buffer_tpl::const_iterator vox_it = B.begin(); vox_it != B.end(); ++vox_it) + stream << vox_it->first << ": " << vox_it->second; + + return stream; + + } + + + template std::set Buffer_tpl::non_empty() const { + + std::set nempty; + + for (const_iterator vox_it = begin(); vox_it != end(); ++vox_it) + nempty.insert(vox_it->first); + + return nempty; + + } + + template std::set Buffer_tpl::non_empty_or_inbounds() const { + + std::set nempty; + + for (const_iterator vox_it = begin(); vox_it != end(); ++vox_it) + nempty.insert(vox_it->first); + + for (size_t x = 0; x < dim(X); ++x) + for (size_t y = 0; y < dim(Y); ++y) + for (size_t z = 0; z < dim(Z);++z) + nempty.insert(Index(x,y,z)); + + return nempty; + + } + + template std::set Buffer_tpl::empty_inbounds() const { + + std::set empty; + + for (size_t x = 0; x < dim(X); ++x) + for (size_t y = 0; y < dim(Y); ++y) + for (size_t z = 0; z < dim(Z);++z) + if (is_empty(x,y,z)) + empty.insert(Index(x,y,z)); + + return empty; + + } + + + template void Buffer_tpl::clear_and_enforce_bounds() { + + clear(); + + enforce_bounds = true; + + } + + + + + } + +} +#undef LOOP + +#endif /* __image_buffer_tpl_cpp_h__ */ diff --git a/src/bts/image/buffer.h b/src/bts/image/buffer.h new file mode 100644 index 0000000..f658a19 --- /dev/null +++ b/src/bts/image/buffer.h @@ -0,0 +1,359 @@ +/* + Copyright 2009 Brain Research Institute, Melbourne, Australia + + Created by Tom Close on 13/03/09. + + This file is part of Bayesian Tractlet Sampling (BTS). + + BTS is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + BTS is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with BTS. If not, see . + + */ + + +#ifndef __bts_image_buffer_h__ +#define __bts_image_buffer_h__ + +namespace BTS { + + namespace Image { + + template class Buffer_tpl; + + } + +} + +#include + +#include "bts/common.h" + +#include "bts/image/index.h" + +#define LOOP(op) \ +for (size_t z = 0; z < this->dim(Z); z++) { \ + for (size_t y = 0; y < this->dim(Y); y++) { \ + for (size_t x = 0; x < this->dim(X); x++) { \ + op \ + } \ + } \ +} + + +namespace BTS { + + namespace Image { + + template std::ostream& operator<<(std::ostream& stream, const Buffer_tpl& B); + + template class Buffer_tpl { + + public: + + typedef typename std::map::iterator iterator; + typedef typename std::map::const_iterator const_iterator; + + + //Protected member variables + protected: + + Triple dimensions; + std::map voxels; + bool enforce_bounds; + + //Public member functions + public: + + Buffer_tpl (bool enforce_bounds = true) + : dimensions(0,0,0), enforce_bounds(enforce_bounds) {} + + + Buffer_tpl (const Triple& dimensions, bool enforce_bounds = true) + : dimensions(dimensions), enforce_bounds(enforce_bounds) {} + + + Buffer_tpl (const Buffer_tpl& B) + : dimensions(B.dims()), voxels(B.voxels), enforce_bounds(B.enforce_bounds) {} + + + ~Buffer_tpl() {} + + + Buffer_tpl& operator= (const Buffer_tpl& B) + { dimensions = B.dimensions; voxels = B.voxels; enforce_bounds = B.enforce_bounds; return *this; } + + + inline T& operator() (int x, int y, int z) + { return operator()(Index(x,y,z)); } + + + inline const T& operator() (int x, int y, int z) const + { return operator()(Index(x,y,z)); } + + + inline T& operator() (const Index& c); + + + inline const T& operator() (const Index& c) const; + + + bool is_empty(size_t x, size_t y, size_t z) const + { return is_empty(Index(x,y,z)); } + + + bool is_empty(const Index& c) const; + + + std::set non_empty() const; + + + std::set non_empty_or_inbounds() const; + + + std::set empty_inbounds() const; + + + iterator begin() + { return voxels.begin(); } + + const_iterator begin() const + { return voxels.begin(); } + + iterator end() + { return voxels.end(); } + + const_iterator end() const + { return voxels.end(); } + + + virtual Buffer_tpl& clear() + { voxels.clear(); return *this; } + + + //FIXME: Would be better if it was virtual but that throws a compile error for some reason. + Buffer_tpl& zero() + { for (iterator vox_it = begin(); vox_it != end(); ++vox_it) BTS::zero(vox_it->second); return *this; } + + + Buffer_tpl& invalidate() + { for (iterator vox_it = begin(); vox_it != end(); ++vox_it) BTS::invalidate(vox_it->second); return *this; } + + /*! Resizes the dimensions of the image. Note that is does not change the underlying voxels which are sparsely + * implemented in a std::map. It does set enforce_bounds to false as it does not guarantee that the existing voxels + * are contained within the new bounds. */ + void resize(const Triple& dimensions) + { this->dimensions = dimensions; relax_bounds(); } + + + void reset(const Triple& dimensions) + { reset(dimensions, enforce_bounds); } + + void reset(const Triple& dimensions, bool enforce_bounds) + { this->dimensions = dimensions; this->enforce_bounds = enforce_bounds; voxels.clear(); } + + + //!Relaxes the constraint that voxels need to be within the given bounds of the image. + void relax_bounds() + { enforce_bounds = false; } + + void clear_and_enforce_bounds(); + + + bool bounds_are_enforced() const + { return enforce_bounds; } + + Buffer_tpl& operator+= (const Buffer_tpl& buff); + + + Buffer_tpl& operator-= (const Buffer_tpl& buff); + + + template Buffer_tpl& operator+= (const Buffer_tpl& buff); + + + template Buffer_tpl& operator-= (const Buffer_tpl& buff); + + + template Buffer_tpl& operator*= (const Buffer_tpl& buff); + + + template Buffer_tpl& operator/= (const Buffer_tpl& buff); + + + template Buffer_tpl& operator*= (const U& M); + + + template Buffer_tpl& operator/= (const U& M); + + + Buffer_tpl& negate(); + + + Buffer_tpl operator+ (const Buffer_tpl& buff) const; + + + Buffer_tpl operator- (const Buffer_tpl& buff) const; + + + Buffer_tpl operator* (const Buffer_tpl& buff) const; + + + Buffer_tpl operator/ (const Buffer_tpl& buff) const; + + + Buffer_tpl operator* (double M) const + { Buffer_tpl mult = *this; mult *= M; return mult; } + + + Buffer_tpl operator/ (double M) const + { Buffer_tpl mult = *this; mult /= M; return mult; } + + + const Triple& dims () const + { return dimensions; } + + + size_t dim (size_t dim_index) const + { return dimensions[dim_index]; } + + + size_t num_voxels_in_bounds() const + { return dim(X) * dim(Y) * dim(Z); } + + + size_t num_not_empty_voxels() const + { return voxels.size(); } + + + bool in_bounds(Index coord) const + { return coord.non_negative() && coord.bounded_by(dims()); } + + protected: + + virtual T new_voxel(const Index& c) + { return T(); } + + + friend std::ostream& operator<<<>(std::ostream& stream, const Buffer_tpl& B); + + }; + + + template Buffer_tpl operator* (double M, Buffer_tpl mult) + { mult *= M; return mult; } + + } + +} + +#undef LOOP + +#include "bts/image/voxel.h" + +namespace BTS { + + namespace Image { + + class Buffer : public Buffer_tpl< Voxel > { + + protected: + + size_t num_encodings; + + public: + + Buffer (size_t num_encodings = 0, bool enforce_bounds = true) + : Buffer_tpl< Voxel >(enforce_bounds), num_encodings(num_encodings) {} + + + Buffer (const Triple& dimensions, size_t num_encodings, bool enforce_bounds = true) + : Buffer_tpl< Voxel >(dimensions, enforce_bounds) {} + + + Buffer (const Buffer& B) + : Buffer_tpl< Voxel >(B) {} + + template Buffer (const Buffer_tpl& B) + : Buffer_tpl< Voxel >(B.dims(), B.bounds_are_enforced()), num_encodings(0) { + + int read_num_encodings = -1; + + for (typename Buffer_tpl::const_iterator vox_it = B.begin(); vox_it != B.end(); ++vox_it) { + + this->operator()(vox_it->first) = vox_it->second; + + if (read_num_encodings == -1) + read_num_encodings = vox_it->second.num_encodings(); + else if (read_num_encodings != (int)vox_it->second.num_encodings()) + throw Exception ("Number of encodings in copied voxels do not match (" + str(read_num_encodings) + " and " + str(vox_it->second.num_encodings()) + ")."); + + } + + num_encodings = read_num_encodings; + + } + + + ~Buffer() {} + + + Buffer& operator= (const Buffer& B) + { this->Buffer_tpl< Voxel >::operator=(B); return *this; } + + + protected: + + Voxel new_voxel(const Index& coord) + { return Voxel(num_encodings); } + + + }; + + + namespace Float { + + typedef Image::Buffer_tpl Buffer; + + }; + + namespace Double { + + typedef Image::Buffer_tpl Buffer; + + }; + + namespace Int { + + typedef Image::Buffer_tpl Buffer; + + }; + + namespace UInt { + + typedef Image::Buffer_tpl Buffer; + + }; + + namespace Bool { + + typedef Image::Buffer_tpl Buffer; + + }; + + } +} + +#undef LOOP + + +#endif diff --git a/src/bts/image/container/buffer.h b/src/bts/image/container/buffer.h new file mode 100644 index 0000000..e1d4991 --- /dev/null +++ b/src/bts/image/container/buffer.h @@ -0,0 +1,150 @@ +/* + Copyright 2009 Brain Research Institute, Melbourne, Australia + + Created by Tom Close on 13/03/09. + + This file is part of Bayesian Tractlet Sampling (BTS). + + BTS is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + BTS is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with BTS. If not, see . + + */ + + +#ifndef __bts_image_container_buffer_h__ +#define __bts_image_container_buffer_h__ + + +namespace BTS { + + namespace Image { + + namespace Container { + + template class Buffer; + + } + + } + +} + +#include +#include "bts/image/container/voxel.h" +#include "bts/fibre/strand/section.h" +#include "bts/fibre/tractlet/section.h" +#include "bts/fibre/tractlet/tensor.h" +#include "bts/fibre/strand/tensor.h" + + + +#define LOOP(op) \ +for (size_t z = 0; z < this->dim(Z); z++) { \ + for (size_t y = 0; y < this->dim(Y); y++) { \ + for (size_t x = 0; x < this->dim(X); x++) { \ + op \ + } \ + } \ +} + + +namespace BTS { + + namespace Image { + + namespace Container { + + template class Buffer : public Image::Buffer_tpl< Container::Voxel > { + + + public: + + typedef std::vector Set; + + protected: + + size_t number_directions; + + public: + + Buffer () + : Image::Buffer_tpl< Voxel >(false), number_directions(0) {} + + + Buffer (Triple dims, size_t num_encodings) + : Image::Buffer_tpl< Voxel >(dims,false), number_directions(num_encodings) {} + + + Buffer (const Buffer& B) + : Image::Buffer_tpl< Voxel >(B), number_directions(B.number_directions) {} + + + ~Buffer () {} + + + Buffer* clone() + { return new Buffer(*this); } + + + Buffer& operator= (const Buffer& B) + { Image::Buffer_tpl< Voxel >::operator= (B); number_directions = B.number_directions; return *this; } + + + size_t num_encodings() const + { return number_directions; } + + Buffer& clear () + { this->Image::Buffer_tpl< Voxel >::clear(); return *this; } + + Buffer& zero () + { this->Image::Buffer_tpl< Voxel >::zero(); return *this; } + + void reset(const Triple& dimensions, size_t num_encodings) + { Image::Buffer_tpl< Voxel >::reset(dimensions); number_directions = num_encodings; } + + void reset(const Triple& dimensions, size_t num_encodings, bool enforce_bounds) + { Image::Buffer_tpl< Voxel >::reset(dimensions, enforce_bounds); number_directions = num_encodings; } + + void quick_clear () + { for (typename Image::Buffer_tpl< Voxel >::iterator vox_it = this->begin(); vox_it != this->end(); ++vox_it) vox_it->second.quick_empty(); } + + inline Voxel& operator() (int x, int y, int z) + { return operator()(Index(x,y,z)); } + + inline Voxel& operator() (const Index& c) + { Voxel& vox = Image::Buffer_tpl< Voxel >::operator()(c); vox.undo_empty(); return vox; } + + bool is_empty(const Index& c) const + { typename Image::Buffer_tpl< Voxel >::const_iterator vox_it = this->voxels.find(c); return (vox_it == this->end()) ? true : vox_it->second.is_empty(); } + + bool is_empty(size_t x, size_t y, size_t z) const + { return is_empty(Index(x,y,z)); } + + + protected: + + Container::Voxel new_voxel(const Index& coord) + { return Container::Voxel(number_directions); } + + }; + + } + + } + +} + + +#undef LOOP + +#endif //__bts_image_container_buffer_h__ diff --git a/src/bts/image/container/voxel.h b/src/bts/image/container/voxel.h new file mode 100644 index 0000000..83957db --- /dev/null +++ b/src/bts/image/container/voxel.h @@ -0,0 +1,128 @@ +/* + Copyright 2009 Brain Research Institute, Melbourne, Australia + + Created by Tom Close on 13/03/09. + + This file is part of Bayesian Tractlet Sampling (BTS). + + BTS is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + BTS is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with BTS. If not, see . + + */ + + +#ifndef __bts_image_container_voxel_h__ +#define __bts_image_container_voxel_h__ + + +namespace BTS { + + namespace Image { + + namespace Container { + + template class Voxel; + + } + + } + +} + + +#include "bts/image/voxel.h" + +#define LOOP(op) \ +for (size_t encode_i = 0; encode_i < this->num_encodings(); encode_i++) {\ + op \ +} + + + + +namespace BTS { + + namespace Image { + + namespace Container { + + template class Voxel : public Image::Voxel { + + protected: + + bool fake_empty; + + public: + + Voxel() + : fake_empty(false) {} + + Voxel(size_t num_encodings) + : Image::Voxel(num_encodings), fake_empty(false) {} + + Voxel(size_t num_encodings, const T& default_value) + : Image::Voxel(num_encodings, default_value), fake_empty(false) {} + + Voxel(const Voxel& v) + : Image::Voxel(v), fake_empty(false) {} + + Voxel(const Image::Voxel& v) + : Image::Voxel(v), fake_empty(false) {} + + Voxel& operator=(const Voxel& v) + { this->Image::Voxel::operator=(v); fake_empty = v.fake_empty; return *this; } + + Voxel& operator*=(double M) + { assert(!fake_empty); LOOP(this->operator[](encode_i) *= M;); return *this; } + + Voxel& operator/=(double M) + { assert(!fake_empty); LOOP(this->operator[](encode_i) /= M;); return *this; } + + Voxel& zero() + { assert(!fake_empty); this->Image::Voxel::zero(); return *this; } + + void quick_empty() + { fake_empty = true; } + + bool is_empty() const + { return fake_empty; } + + void undo_empty() + { fake_empty = false; } + + void reset(const T& template_value) { + + assert(this->num_encodings()); + + if (this->operator[](0).degree() != template_value.degree()) { + T zero_value(template_value); + zero_value.zero(); + LOOP(this->operator[](encode_i) = zero_value;) + } else { + LOOP(this->operator[](encode_i).zero();) + } + + } + + + }; + + } + + } + +} + +#undef LOOP + +#endif diff --git a/src/bts/image/expected/buffer.cpp b/src/bts/image/expected/buffer.cpp new file mode 100644 index 0000000..3c8df74 --- /dev/null +++ b/src/bts/image/expected/buffer.cpp @@ -0,0 +1,255 @@ +/* + Copyright 2008 Brain Research Institute, Melbourne, Australia + + Written by Thomas G Close, Aug 30, 2010. + + This file is part of MRtrix. + + MRtrix is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + MRtrix is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with MRtrix. If not, see . + +*/ + + +#include "image/header.h" + +#include "bts/common.h" + +#include "bts/image/expected/buffer.h" +#include "bts/image/expected/trilinear/buffer.h" +#include "bts/image/expected/gaussian/buffer.h" +#include "bts/image/expected/quartic/buffer.h" +#include "bts/image/expected/sinc/buffer.h" +#include "bts/image/expected/top_hat/buffer.h" +#include "bts/image/expected/reverse_sqrt/buffer.h" +#include "bts/image/expected/realistic/buffer.h" + +#include "bts/image/voxel.h" + +#include "bts/fibre/strand/set.h" +#include "bts/fibre/tractlet/set.h" + +#include "bts/image/inline_functions.h" + +#define LOOP(op) \ +for (size_t z = 0; z < this->dim(Z); z++) { \ + for (size_t y = 0; y < this->dim(Y); y++) { \ + for (size_t x = 0; x < this->dim(X); x++) { \ + op \ + } \ + } \ +} + + +namespace BTS { + + namespace Image { + + namespace Expected { + + + const Triple Buffer::DIMS_DEFAULT = Triple(3,3,3); + const Triple Buffer::VOX_LENGTHS_DEFAULT = Triple(0.15,0.15,0.15); + const Triple Buffer::OFFSETS_DEFAULT = Triple::Zeros; + const std::string Buffer::FILE_EXTENSION = "mif"; + + const double Buffer::INTERP_EXTENT_DEFAULT = 1.0; + const double Buffer::HALF_WIDTH_DEFAULT = 0.392470007505158; + const char* Buffer::TYPE_DEFAULT = "quartic"; + const size_t Buffer::NUM_LENGTH_SECTIONS_DEFAULT = 15; + const size_t Buffer::NUM_WIDTH_SECTIONS_DEFAULT = 4; + const bool Buffer::ENFORCE_BOUNDS_DEFAULT = false; + + const std::string Buffer::STRAND_BASE_INTENSITY_REFERENCE = "/home/tclose/Data/Tractography/fibre/strand/single/x.str"; + const std::string Buffer::TRACTLET_BASE_INTENSITY_REFERENCE = "/home/tclose/Data/Tractography/fibre/tract/single/x-all.tct"; + + + Buffer* Buffer::factory(const std::string& type, + const Triple& dims, + const Triple& vox_lengths, + const Diffusion::Model& diffusion_model, + size_t num_length_sections, + size_t num_width_sections, + double interp_extent, + const Triple& offsets, + bool enforce_bounds, + double gaussian_half_width) { + + Buffer* image; + + if (type == Trilinear::Buffer::SHORT_NAME) + image = new Trilinear::Buffer ( + dims, + vox_lengths, + diffusion_model, + num_length_sections, + num_width_sections, + interp_extent, + offsets, + enforce_bounds); + + else if (type == Gaussian::Buffer::SHORT_NAME) + image = new Gaussian::Buffer ( + dims, + vox_lengths, + diffusion_model, + num_length_sections, + num_width_sections, + interp_extent, + gaussian_half_width, + offsets, + enforce_bounds); + + else if (type == Quartic::Buffer::SHORT_NAME) + + image = new Quartic::Buffer ( + dims, + vox_lengths, + diffusion_model, + num_length_sections, + num_width_sections, + interp_extent, + offsets, + enforce_bounds); + + else if (type == Sinc::Buffer::SHORT_NAME) + + image = new Sinc::Buffer ( + dims, + vox_lengths, + diffusion_model, + num_length_sections, + num_width_sections, + interp_extent, + offsets, + enforce_bounds); + + else if (type == TopHat::Buffer::SHORT_NAME) + + image = new TopHat::Buffer ( + dims, + vox_lengths, + diffusion_model, + num_length_sections, + num_width_sections, + interp_extent, + offsets, + enforce_bounds); + + else if (type == ReverseSqrt::Buffer::SHORT_NAME) + + image = new ReverseSqrt::Buffer ( + dims, + vox_lengths, + diffusion_model, + num_length_sections, + num_width_sections, + interp_extent, + offsets, + enforce_bounds); + + else if (type == Realistic::Buffer::SHORT_NAME) + + image = new Realistic::Buffer ( + dims, + vox_lengths, + diffusion_model, + num_length_sections, + num_width_sections, + interp_extent, + offsets, + enforce_bounds); + + else + throw Exception ("Unrecognised interpolation type '" + type + "' passed to option '-exp_type'."); + + + return image; + + } + + + + Image::Buffer Buffer::clean_buffer() { + + Image::Buffer clean_buffer (dims(), num_encodings()); + + LOOP(clean_buffer(x,y,z) = operator()(x,y,z);) + + return clean_buffer; + + } + + + double Buffer::base_intensity_default(const Image::Observed::Buffer& obs_image, const std::string& state_location) { + + if (File::has_extension(state_location)) { + +// Fibre::Strand::Set state (state_location); + Fibre::Strand::Set state (STRAND_BASE_INTENSITY_REFERENCE); + state.set_base_intensity(1.0); + this->expected_image(state); + + } else if (File::has_extension(state_location)) { + +// Fibre::Tractlet::Set state (state_location); + Fibre::Tractlet::Set state (TRACTLET_BASE_INTENSITY_REFERENCE); + state.set_base_intensity(1.0); + this->expected_image(state); + + } else + return NAN; + + this->save("/home/tclose/data/calibration_expected.mif"); + + return obs_image.max_b0() / this->max_b0(); + + + } + + double Buffer::base_intensity_default(const Image::Observed::Buffer& obs_image, Fibre::Strand::Set strands) { + + strands.set_base_intensity(1.0); + this->expected_image(strands); + + this->save("/home/tclose/data/calibration_expected.mif"); + + return obs_image.max_b0() / this->max_b0(); + + } + + + double Buffer::base_intensity_default(const Image::Observed::Buffer& obs_image, Fibre::Tractlet::Set tractlets) { + + tractlets.set_base_intensity(1.0); + this->expected_image(tractlets); + + this->save("/home/tclose/data/calibration_expected.mif"); + + return obs_image.max_b0() / this->max_b0(); + + } + + + bool Buffer::dims_match(const Observed::Buffer& reference) { + + return (reference.dims() == this->dims()); + + } + + + } + + } + +} diff --git a/src/bts/image/expected/buffer.h b/src/bts/image/expected/buffer.h new file mode 100644 index 0000000..828bdb4 --- /dev/null +++ b/src/bts/image/expected/buffer.h @@ -0,0 +1,600 @@ +/* + Copyright 2009 Brain Research Institute, Melbourne, Australia + + Created by Tom Close on 13/03/09. + + This file is part of Bayesian Tractlet Sampling (BTS). + + BTS is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + BTS is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with BTS. If not, see . + + */ + +#ifndef __bts_image_expected_buffer_h__ +#define __bts_image_expected_buffer_h__ + +namespace BTS { + + namespace Image { + + namespace Expected { + + class Buffer; + + } + + } + +} + +#include "bts/common.h" + +#include "bts/image/observed/buffer.h" +#include "bts/image/index.h" +#include "bts/image/container/buffer.h" +#include "bts/image/reference/buffer.h" + +#include "bts/fibre/strand.h" +#include "bts/fibre/tractlet.h" + +#include "bts/diffusion/model.h" + +#define IMAGE_PARAMETERS \ +\ + Option ("img_dims", "The number of voxels along each dimension") \ + + Argument ("img_dims", "").type_text ("[3,3,3]"), \ +\ + Option ("img_vox_lengths", "The length of the voxels along each dimension") \ + + Argument ("img_vox_lengths", "").type_text ("[0.15,0.15,0.15]"), \ +\ + Option ("img_offsets", "The offset of the centre of the image from the origin (0,0,0).") \ + + Argument ("img_offset", "").type_text ("auto") \ + + +//Loads the parameters into variables +#define SET_IMAGE_PARAMETERS \ +\ + Triple img_dims = Image::Expected::Buffer::DIMS_DEFAULT; \ + Triple img_vox_lengths = Image::Expected::Buffer::VOX_LENGTHS_DEFAULT; \ + Triple img_offsets = Triple::Invalid; \ +\ + Options img_opt = get_options("img_dims"); \ + if (img_opt.size()) \ + img_dims = parse_triple(std::string(img_opt[0][0])); \ +\ + img_opt = get_options("img_vox_lengths"); \ + if (img_opt.size()) \ + img_vox_lengths = parse_triple(std::string(img_opt[0][0])); \ +\ + img_opt = get_options("img_offsets"); \ + if (img_opt.size()) \ + img_offsets = parse_triple(std::string(img_opt[0][0])); + +// Triple img_dims (img_dim); +// Triple img_vox_lengths (img_vox_length); + + +//Adds the parameters to the properties to be saved with the data. +#define ADD_IMAGE_PROPERTIES(properties) \ + properties["img_dims"] = str(img_dims); \ + properties["img_vox_lengths"] = str(img_vox_lengths); \ + properties["img_offsets"] = str(img_offsets); \ + + +//Defines the parameters required to initialise a object. +#define EXPECTED_IMAGE_PARAMETERS \ +\ + Option ("exp_num_length_sections", "The number of samples along each strand path when generating the corresponding image set.") \ + + Argument ("exp_num_length_sections", "").type_integer (1, Image::Expected::Buffer::NUM_LENGTH_SECTIONS_DEFAULT, LARGE_INT), \ +\ + Option ("exp_num_width_sections", "The number of samples across the tractlet width axes when generating the expected image.") \ + + Argument ("exp_num_width_sections", "").type_integer (1, Image::Expected::Buffer::NUM_WIDTH_SECTIONS_DEFAULT, LARGE_INT), \ +\ + Option ("exp_type", "Form of the kernel that will be used to interpolate the signal from the tractlets") \ + + Argument ("exp_type", "").type_text (Image::Expected::Buffer::TYPE_DEFAULT).type_text(), \ +\ + Option ("exp_interp_extent", "Extent of the kernel that will be used to interpolate the signal from the tractlets") \ + + Argument ("exp_interp_extent", "").type_float (SMALL_FLOAT, Image::Expected::Buffer::INTERP_EXTENT_DEFAULT, LARGE_FLOAT), \ +\ + Option ("exp_enforce_bounds", "Only record the signal (and include in likelihood calculations) that falls within the bounds of the image."), \ +\ + Option ("exp_half_width", "'Variance' of the kernel that will be used to interpolate the signal from the tractlets when using the Gaussian type kernel.") \ + + Argument ("exp_half_width", "").type_float (SMALL_FLOAT, Image::Expected::Buffer::HALF_WIDTH_DEFAULT, LARGE_FLOAT), \ +\ + Option ("exp_base_intensity", "The base intensity the strands/tractlets will be set to initially (possibly permanently). If < 0, the base intensity will be estimated from the observed image (if applicable).") \ + + Argument ("exp_base_intensity", "").type_float (-1.01, 1.0, LARGE_FLOAT), \ +\ + Option ("exp_untie_width_intensity", "When not set, intensity will be coupled to the average cross-sectional area of the tract.") + +//Loads the parameters into variables +#define SET_EXPECTED_IMAGE_PARAMETERS \ +\ + size_t exp_num_length_sections = Image::Expected::Buffer::NUM_LENGTH_SECTIONS_DEFAULT; \ + size_t exp_num_width_sections = Image::Expected::Buffer::NUM_WIDTH_SECTIONS_DEFAULT; \ + std::string exp_type = Image::Expected::Buffer::TYPE_DEFAULT; \ + double exp_interp_extent = Image::Expected::Buffer::INTERP_EXTENT_DEFAULT; \ + bool exp_enforce_bounds = Image::Expected::Buffer::ENFORCE_BOUNDS_DEFAULT; \ + double exp_half_width = Image::Expected::Buffer::HALF_WIDTH_DEFAULT; \ + double exp_base_intensity = 1.0; \ +\ + Options exp_opt = get_options("exp_num_length_sections"); \ + if (exp_opt.size()) \ + exp_num_length_sections = exp_opt[0][0]; \ +\ +exp_opt = get_options("exp_num_width_sections"); \ + if (exp_opt.size()) \ + exp_num_width_sections = exp_opt[0][0]; \ +\ + exp_opt = get_options("exp_type"); \ + if (exp_opt.size()) \ + exp_type = exp_opt[0][0].c_str(); \ +\ + exp_opt = get_options("exp_interp_extent"); \ + if (exp_opt.size()) \ + exp_interp_extent = exp_opt[0][0]; \ +\ + exp_opt = get_options("exp_enforce_bounds"); \ + if (exp_opt.size()) \ + exp_enforce_bounds = true; \ +\ + exp_opt = get_options("exp_half_width"); \ + if (exp_opt.size()) \ + exp_half_width = exp_opt[0][0]; \ +\ + exp_opt = get_options("exp_base_intensity"); \ + if (exp_opt.size()) \ + exp_base_intensity = exp_opt[0][0]; + +//Adds the parameters to the properties to be saved with the data. +#define ADD_EXPECTED_IMAGE_PROPERTIES(properties) \ + properties["exp_num_length_sections"] = str(exp_num_length_sections); \ + properties["exp_num_width_sections"] = str(exp_num_width_sections); \ + properties["exp_interp_extent"] = str(exp_interp_extent); \ + properties["exp_enforce_bounds"] = str(exp_enforce_bounds); \ + properties["exp_type"] = exp_type; \ + properties["exp_base_intensity"] = str(exp_base_intensity); \ + if (exp_type == "gaussian") { \ + properties["exp_half_width"] = exp_half_width; \ + } \ + + +#include "math/matrix.h" + +#include "bts/common.h" + +#include "bts/image/index.h" +#include "bts/image/buffer.h" +#include "bts/fibre/strand.h" +#include "bts/fibre/tractlet.h" + +#include "bts/diffusion/model.h" + +#include "bts/image/observed/buffer.h" +#include "bts/image/container/buffer.h" + +#include "bts/image/expected/voxel.h" + +namespace BTS { + + namespace Image { + + namespace Expected { + + namespace Gaussian { + class Buffer; + class Voxel; + } + namespace Quartic { + class Buffer; + class Voxel; + } + namespace Trilinear { + class Buffer; + class Voxel; + } + namespace TopHat { + class Buffer; + class Voxel; + } + namespace Sinc { + class Buffer; + class Voxel; + } + namespace ReverseSqrt { + class Buffer; + class Voxel; + } + namespace Realistic { + class Buffer; + class Voxel; + } + + + class Buffer { + + public: + + typedef std::map::iterator iterator; + typedef std::map::const_iterator const_iterator; + + public: + + const static size_t NUM_LENGTH_SECTIONS_DEFAULT; + const static size_t NUM_WIDTH_SECTIONS_DEFAULT; + + const static Triple DIMS_DEFAULT; + const static Triple VOX_LENGTHS_DEFAULT; + const static Triple OFFSETS_DEFAULT; + const static std::string FILE_EXTENSION; + + const static double INTERP_EXTENT_DEFAULT; + const static bool ENFORCE_BOUNDS_DEFAULT; + const static double HALF_WIDTH_DEFAULT; + const static char* TYPE_DEFAULT; + + const static std::string STRAND_BASE_INTENSITY_REFERENCE; + const static std::string TRACTLET_BASE_INTENSITY_REFERENCE; + + //Public static methods. + public: + + static Buffer* factory(const std::string& type, + const Triple& dims, const Triple& vox_lengths, + const Diffusion::Model& diffusion_model, + size_t num_length_sections, size_t num_width_sections, + double interp_extent, const Triple& offsets, + bool enforce_bounds, double gaussian_half_width); + + static Buffer* factory(const std::string& type, + const Observed::Buffer& obs_image, + const Diffusion::Model& diffusion_model, + size_t num_length_sections, size_t num_width_sections, + double interp_extent, bool enforce_bounds, + double gaussian_half_width) + + { + return factory(type, obs_image.dims(), obs_image.vox_lengths(), + diffusion_model, num_length_sections, num_width_sections, + interp_extent, obs_image.offsets(), enforce_bounds, + gaussian_half_width); + } + + //Used for pretty printing in gdb. Is set in the constructor of derived classes. + protected: + + char type[50]; + + public: + + virtual Voxel& operator()(int x, int y, int z) = 0; + + virtual const Voxel& operator()(int x, int y, int z) const = 0; + + virtual Voxel& operator()(Index c) = 0; + + virtual const Voxel& operator()(Index c) const = 0; + + virtual const Triple& dims() const = 0; + + virtual const Triple& vox_lengths() const = 0; + + //! Offset of the lowest corner of the lowest voxel coordinate ([0,0,0]) of the image. + virtual const Triple& offsets() const = 0; + + virtual size_t dim(size_t dim_index) const = 0; + + virtual double vox_length(size_t dim_index) const = 0; + + //! Offset of the lowest corner of the lowest voxel coordinate ([0,0,0]) of the image. + virtual double offset(size_t dim_index) const = 0; + + virtual size_t num_encodings() const = 0; + + virtual const Diffusion::Encoding& encoding(size_t index) const = 0; + + virtual size_t num_length_sections() const = 0; + + virtual size_t num_width_sections() const = 0; + + virtual void save(const std::string& location) const = 0; + + virtual Buffer& expected_image(const Fibre::Strand::Set& strands) = 0; + + virtual Buffer& part_image(const Fibre::Strand& strand) = 0; + + virtual Buffer + & expected_image(const Fibre::Tractlet::Set& tractlets) = 0; + + virtual Reference::Buffer::Set + & expected_image_with_references(const Fibre::Strand::Set& fibres) = 0; + + virtual Reference::Buffer::Set + & expected_image_with_references( + const Fibre::Tractlet::Set& fibres) = 0; + + virtual Buffer& expected_image(const Fibre::Strand::Set& strands, + Container::Buffer::Set& gradients) = 0; + + virtual Buffer& expected_image(const Fibre::Tractlet::Set& tractlets, + Container::Buffer::Set& gradients) = 0; + + virtual Buffer& expected_image(const Fibre::Strand::Set& strands, + Container::Buffer::Set& gradients, + Container::Buffer::Set& hessians) = 0; + + virtual Buffer& expected_image(const Fibre::Tractlet::Set& tractlets, + Container::Buffer::Set& gradients, + Container::Buffer::Set& hessians) = 0; + + virtual void precalculate_section_weighting_gradients( + const Fibre::Strand& dummy) = 0; + + virtual void precalculate_section_weighting_gradients_and_hessians( + const Fibre::Strand& dummy) = 0; + + virtual void precalculate_section_weighting_gradients( + const Fibre::Tractlet& dummy) = 0; + + virtual void precalculate_section_weighting_gradients_and_hessians( + const Fibre::Tractlet& dummy) = 0; + + virtual Buffer* clone() const = 0; + + virtual const Diffusion::Model& get_diffusion_model() const = 0; + + virtual std::ostream& to_stream(std::ostream& stream) const = 0; + + Image::Buffer clean_buffer(); + + double base_intensity_default(const Observed::Buffer& obs_image, const std::string& state_location); + + double base_intensity_default(const Observed::Buffer& obs_image, Fibre::Strand::Set strands); + + double base_intensity_default(const Observed::Buffer& obs_image, Fibre::Tractlet::Set tractlets); + + bool dims_match(const Observed::Buffer& reference); + + virtual Properties& properties() = 0; + + virtual const Properties& properties() const = 0; + + virtual double rms(bool include_b0s) const = 0; + + virtual double max_b0() const = 0; + + virtual Buffer& zero() = 0; + + virtual Buffer& clear() = 0; + + virtual Buffer& negate() = 0; + + virtual std::set non_empty() const = 0; + + virtual std::set non_empty_or_inbounds() const = 0; + + virtual std::set empty_inbounds() const = 0; + + virtual bool bounds_are_enforced() const = 0; + + virtual void clear_and_enforce_bounds() = 0; + + virtual void relax_bounds() = 0; + + virtual Buffer& operator+=(const Buffer& buffer) = 0; + + virtual Buffer& operator-=(const Buffer& buffer) = 0; + + virtual iterator begin() { + throw Exception("not implemented"); + } + + virtual iterator end() { + throw Exception("not implemented"); + } + }; + +#define EXPECTED_BUFFER_FUNCTIONS \ + \ + void save(const std::string& location) const \ + { this->Observed::Buffer_tpl::save(location); } \ + \ + Buffer& expected_image(const Fibre::Strand::Set& strands) \ + { this->Buffer_tpl::expected_image(strands); return *this; } \ +\ + Buffer& part_image(const Fibre::Strand& strand) \ + { this->Buffer_tpl::part_image(strand); return *this; } \ + \ + Buffer& expected_image(const Fibre::Tractlet::Set& tractlets) \ + { this->Buffer_tpl::expected_image(tractlets); return *this; } \ + \ + Reference::Buffer::Set& expected_image_with_references(const Fibre::Strand::Set& fibres) \ + { return this->Buffer_tpl::expected_image_with_references(fibres); } \ + \ + Reference::Buffer::Set& expected_image_with_references(const Fibre::Tractlet::Set& fibres) \ + { return this->Buffer_tpl::expected_image_with_references(fibres); } \ + \ + Buffer& expected_image(const Fibre::Strand::Set& strands, Container::Buffer::Set& gradients) \ + { this->Buffer_tpl::expected_image(strands, gradients); return *this; } \ + \ + Buffer& expected_image(const Fibre::Tractlet::Set& tractlets, Container::Buffer::Set& gradients) \ + { this->Buffer_tpl::expected_image(tractlets, gradients); return *this; } \ + \ + Buffer& expected_image(const Fibre::Strand::Set& strands, Container::Buffer::Set& gradients, Container::Buffer::Set& hessians) \ + { this->Buffer_tpl::expected_image(strands, gradients, hessians); return *this; } \ + \ + Buffer& expected_image(const Fibre::Tractlet::Set& tractlets, Container::Buffer::Set& gradients, Container::Buffer::Set& hessians) \ + { this->Buffer_tpl::expected_image(tractlets, gradients, hessians); return *this; } \ + \ + Buffer& part_image (const Fibre::Strand& strand, Container::Buffer& gradients, Container::Buffer& hessians) \ + { this->Buffer_tpl::part_image(strand, gradients, hessians); return *this; } \ + \ + Buffer& part_image (const Fibre::Tractlet& tractlet, Container::Buffer& gradients, Container::Buffer& hessians) \ + { this->Buffer_tpl::part_image(tractlet, gradients, hessians); return *this; } \ + \ + Buffer& part_image(const Fibre::Strand& strand, Container::Buffer& gradients) \ + { this->Buffer_tpl::part_image(strand, gradients); return *this; } \ + \ + Buffer& part_image(const Fibre::Tractlet& tractlet, Container::Buffer& gradients) \ + { this->Buffer_tpl::part_image(tractlet, gradients); return *this; } \ + \ + void precalculate_section_weighting_gradients(const Fibre::Strand& dummy) \ + { Expected::Buffer_tpl::precalculate_section_weighting_gradients(); } \ + \ + void precalculate_section_weighting_gradients_and_hessians(const Fibre::Strand& dummy) \ + { Expected::Buffer_tpl::precalculate_section_weighting_gradients_and_hessians(); } \ + \ + void precalculate_section_weighting_gradients(const Fibre::Tractlet& dummy) \ + { Expected::Buffer_tpl::precalculate_section_weighting_gradients(); } \ + \ + void precalculate_section_weighting_gradients_and_hessians(const Fibre::Tractlet& dummy) \ + { Expected::Buffer_tpl::precalculate_section_weighting_gradients_and_hessians(); } \ + \ + Buffer* clone() const \ + { return new Buffer(*this); } \ + \ + const Diffusion::Model& get_diffusion_model() const \ + { return this->Buffer_tpl::get_diffusion_model(); } \ + \ + size_t num_length_sections() const \ + { return this->Buffer_tpl::num_length_sections(); } \ + \ + size_t num_width_sections() const \ + { return this->Buffer_tpl::num_width_sections(); } \ + \ + Voxel& operator() (Index coord) \ + { return Image::Buffer_tpl::operator()(coord); } \ + \ + const Voxel& operator() (Index coord) const \ + { return Image::Buffer_tpl::operator()(coord); } \ + \ + Voxel& operator() (int x, int y, int z) \ + { return Image::Buffer_tpl::operator()(x,y,z); } \ + \ + const Voxel& operator() (int x, int y, int z) const \ + { return Image::Buffer_tpl::operator()(x,y,z); } \ + \ + size_t num_encodings() const \ + { return this->Buffer_tpl::num_encodings(); } \ + \ + const Diffusion::Encoding& encoding(size_t index) const \ + { return this->Buffer_tpl::encoding(index); } \ + \ + size_t dim(size_t dim_index) const \ + { return this->Image::Buffer_tpl::dim(dim_index); } \ + \ + double vox_length(size_t dim_index) const \ + { return this->Buffer_tpl::vox_length(dim_index); } \ + \ + double offset(size_t dim_index) const \ + { return this->Buffer_tpl::offset(dim_index); } \ + \ + const Triple& dims() const \ + { return this->Image::Buffer_tpl::dims(); } \ + \ + const Triple& vox_lengths() const \ + { return this->Buffer_tpl::vox_lengths(); } \ + \ + const Triple& offsets() const \ + { return this->Buffer_tpl::offsets(); } \ + \ + Buffer& zero () \ + { this->Buffer_tpl::zero(); return *this; } \ + \ + Buffer& clear () \ + { this->Buffer_tpl::clear(); return *this; } \ +\ + Buffer& negate () \ + { this->Buffer_tpl::negate(); return *this; } \ + \ + Buffer& operator+= (const Buffer& buff) \ + { this->Buffer_tpl::operator+= (buff); return *this; } \ + \ + Buffer& operator-= (const Buffer& buff) \ + { this->Buffer_tpl::operator-= (buff); return *this; } \ + \ + Buffer& operator*= (double M) \ + { this->Buffer_tpl::operator*= (M); return *this; } \ + \ + Buffer& operator/= (double M) \ + { this->Buffer_tpl::operator/= (M); return *this; } \ + \ + template Buffer& operator+= (const Image::Buffer_tpl& buff) \ + { this->Buffer_tpl::operator+= (buff); return *this; } \ + \ + template Buffer& operator-= (const Image::Buffer_tpl& buff) \ + { this->Buffer_tpl::operator-= (buff); return *this; } \ +\ + Buffer& operator+= (const Expected::Buffer& buff) \ + { this->Buffer_tpl::operator+= (buff); return *this; } \ +\ + Buffer& operator-= (const Expected::Buffer& buff) \ + { this->Buffer_tpl::operator-= (buff); return *this; } \ +\ + std::ostream& to_stream (std::ostream& stream) const \ + { return this->Buffer_tpl::to_stream(stream); } \ + \ + Properties& properties() \ + { return this->Buffer_tpl::properties(); } \ + \ + const Properties& properties() const \ + { return this->Buffer_tpl::properties(); } \ + \ + double rms(bool include_b0s) const \ + { return Buffer_tpl::rms(include_b0s); } \ + \ + double max_b0() const \ + { return Buffer_tpl::max_b0(); } \ + \ + std::set non_empty() const \ + { return Image::Buffer_tpl::non_empty(); } \ + \ + std::set non_empty_or_inbounds() const \ + { return Image::Buffer_tpl::non_empty_or_inbounds(); } \ +\ + std::set empty_inbounds() const \ + { return Image::Buffer_tpl::empty_inbounds(); } \ +\ + bool bounds_are_enforced() const \ + { return Image::Buffer_tpl::bounds_are_enforced(); } \ + \ + void clear_and_enforce_bounds() \ + { return Image::Buffer_tpl::clear_and_enforce_bounds(); } \ +\ + void relax_bounds() \ + { return Image::Buffer_tpl::relax_bounds(); } \ +\ + protected: \ +\ + virtual Voxel new_voxel(const Index& coord) \ + { return Voxel(*this,coord); } \ +\ + void name_init() \ + { strncpy (this->type, SHORT_NAME.c_str(), 50); } \ +\ + friend class Voxel + + inline std::ostream& operator<<(std::ostream& stream, const Buffer& image) { + + return image.to_stream(stream); + + } + + } + + } + +} + + + +#endif diff --git a/src/bts/image/expected/buffer_tpl.cpp.h b/src/bts/image/expected/buffer_tpl.cpp.h new file mode 100644 index 0000000..53b569f --- /dev/null +++ b/src/bts/image/expected/buffer_tpl.cpp.h @@ -0,0 +1,536 @@ +/* + Copyright 2008 Brain Research Institute, Melbourne, Australia + + Written by Thomas G Close, 16/07/2010. + + This file is part of MRtrix. + + MRtrix is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + MRtrix is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with MRtrix. If not, see . + +*/ + +#ifndef __bts_image_expected_buffer_cpp_h__ +#define __bts_image_expected_buffer_cpp_h__ + +#include "bts/image/expected/buffer_tpl.h" +#include "bts/image/reference/buffer.h" + +#include "bts/fibre/tractlet/set.h" +#include "bts/fibre/strand/set.h" +#include "bts/fibre/strand/section.h" +#include "bts/fibre/tractlet/section.h" +#include "bts/coord/tensor.h" +#include "bts/fibre/strand/tensor.h" +#include "bts/fibre/tractlet/tensor.h" + + +namespace BTS { + + namespace Image { + + namespace Expected { + +#define LOOP(op) \ + for (size_t z = 0; z < this->dim(Z); z++) { \ + for (size_t y = 0; y < this->dim(Y); y++) { \ + for (size_t x = 0; x < this->dim(X); x++) { \ + op \ + } \ + } \ + } + + +//***************************************// +//********* Non Hessian Versions ********// +//***************************************// + + template template void Buffer_tpl::part_image(const U& fibre) { + + + std::vector path; + + fibre.sections(path, num_len_sections, num_wth_sections, this->voxel_lengths, this->corner_offsets); + + for (typename std::vector::iterator section_it = path.begin(); section_it != path.end(); ++section_it) { + + typename U::Section& section = *section_it; + +#ifdef OPTIMISED + diffusion_model.precalculate_weightings(section); +#endif + + std::set neighbourhood = this->get_neighbourhood(section.position()); + + for (typename std::set::iterator vox_it = neighbourhood.begin(); vox_it != neighbourhood.end(); ++vox_it) { + + T& voxel = **vox_it; + +#ifdef OPTIMISED + voxel.precalculate_interpolation(section); +#endif + + for (size_t encode_i = 0; encode_i < this->num_encodings(); encode_i++) { + + voxel[encode_i] += voxel.direction(encode_i).signal(section); + + } + + } + + } + + } + + + template template void Buffer_tpl::expected_image(const typename U::Set& fibres) { + + this->zero(); + + for (size_t fibre_i = 0; fibre_i < fibres.size(); fibre_i++) + part_image(fibres[fibre_i]); + + for (typename Buffer_tpl::iterator vox_it = this->begin(); vox_it != this->end(); ++vox_it) + for (size_t encode_i = 0; encode_i < num_encodings(); ++encode_i) + vox_it->second[encode_i] *= fibres.base_intensity(); + + } + + + + template template void Buffer_tpl::part_image(const U& fibre, + std::vector& path, + Reference::Buffer& section_reference) { + + + fibre.sections(path, num_len_sections, num_wth_sections, this->voxel_lengths, this->corner_offsets, this->num_encodings()); + + for (typename std::vector::iterator section_it = path.begin(); section_it != path.end(); ++section_it) { + + typename U::Section& section = *section_it; + +#ifdef OPTIMISED + diffusion_model.precalculate_weightings(section); +#endif + + std::set neighbourhood = this->get_neighbourhood(section.position()); + + for (typename std::set::iterator vox_it = neighbourhood.begin(); vox_it != neighbourhood.end(); ++vox_it) { + + T& voxel = **vox_it; + + section_reference(voxel.coord()).push_back(§ion); + +#ifdef OPTIMISED + voxel.precalculate_interpolation(section); +#endif + + for (size_t encode_i = 0; encode_i < this->num_encodings(); encode_i++) { + + voxel[encode_i] += voxel.direction(encode_i).signal(section); + + } + + } + + } + + } + + + template template typename Image::Reference::Buffer::Set& Buffer_tpl::expected_image_with_references(const typename U::Set& fibres) { + + this->zero(); + + std::map >& sections = get_sections(U()); + typename Reference::Buffer::Set& section_refs = get_section_references(U()); + + for (size_t fibre_i = 0; fibre_i < fibres.size(); fibre_i++) { + + section_refs[fibre_i].clear_references(); + + part_image(fibres[fibre_i], sections[fibre_i], section_refs[fibre_i]); + + } + + for (typename Buffer_tpl::iterator vox_it = this->begin(); vox_it != this->end(); ++vox_it) + for (size_t encode_i = 0; encode_i < num_encodings(); ++encode_i) + vox_it->second[encode_i] *= fibres.base_intensity(); + + + return section_refs; + + + } + + + template template + void Buffer_tpl::part_image( const U& fibre, + Container::Buffer& gradients) { + + + std::vector path; + + fibre.sections(path, num_len_sections, num_wth_sections, this->voxel_lengths, this->corner_offsets); + + for (typename std::vector::iterator section_it = path.begin(); section_it != path.end(); ++section_it) { + + typename U::Section& section = *section_it; + +#ifdef OPTIMISED + diffusion_model.precalculate_weightings_and_gradients(section); +#endif + + std::set neighbourhood = this->get_neighbourhood(section.position()); + + for (typename std::set::iterator vox_it = neighbourhood.begin(); vox_it != neighbourhood.end(); ++vox_it) { + + T& voxel = **vox_it; + const Index& coord = voxel.coord(); + + if (gradients.is_empty(coord)) + gradients(coord).reset(fibre); + + Image::Container::Voxel& gradient_voxel = gradients(coord); + + +#ifdef OPTIMISED + voxel.precalculate_interpolation_gradient(section); +#endif + + for (size_t encode_i = 0; encode_i < this->num_encodings(); encode_i++) { + + typename U::Section section_gradient; + + voxel[encode_i] += voxel.direction(encode_i).signal(section, section_gradient); + +#ifndef GRADIENT_NOT_REQUIRED + section_gradient.unnormalize_gradient(this->vox_lengths()); + gradient_voxel[encode_i].add_section_gradient(*section.parent, section, section_gradient); +#endif + + } + + } + + } + + } + + + template template void Buffer_tpl::expected_image(const typename U::Set& fibres, + typename Container::Buffer::Set& gradients) { + + + this->zero(); + + for (size_t fibre_i = 0; fibre_i < fibres.size(); fibre_i++) { + + if (gradients.size() <= fibre_i) + gradients.push_back(Container::Buffer (this->dimensions, this->num_encodings())); + else if (gradients[fibre_i].dims() != this->dims() || gradients[fibre_i].num_encodings() != this->num_encodings()) + gradients[fibre_i].reset(this->dimensions, this->num_encodings()); + else + //NB: This does not actually clear the voxels, but instead sets a flag that designates it them as being empty. + // Therefore the function 'Buffer_tpl::is_empty(const Image::Index&)' should be used to check before using a given voxel. + gradients[fibre_i].quick_clear(); + + + part_image(fibres[fibre_i], gradients[fibre_i]); + + + } + + + for (typename Buffer_tpl::iterator vox_it = this->begin(); vox_it != this->end(); ++vox_it) + for (size_t encode_i = 0; encode_i < num_encodings(); ++encode_i) + vox_it->second[encode_i] *= fibres.base_intensity(); + + + for (size_t fibre_i = 0; fibre_i < fibres.size(); ++fibre_i) + for (typename Buffer_tpl::iterator vox_it = this->begin(); vox_it != this->end(); ++vox_it) + for (size_t encode_i = 0; encode_i < num_encodings(); ++encode_i) + gradients[fibre_i](vox_it->first)[encode_i] *= fibres.base_intensity(); + + } + + + template template void Buffer_tpl::precalculate_section_weighting_gradients() { + + std::map >& sections = get_sections(U()); + + for (size_t fibre_i = 0; fibre_i < sections.size(); ++fibre_i) + for (size_t section_i = 0; section_i < sections[fibre_i].size(); ++section_i) + diffusion_model.precalculate_weightings_and_gradients(sections[fibre_i][section_i]); + + } + + + template template void Buffer_tpl::precalculate_section_weighting_gradients_and_hessians() { + + std::map >& sections = get_sections(U()); + + for (size_t fibre_i = 0; fibre_i < sections.size(); ++fibre_i) + for (size_t section_i = 0; section_i < sections[fibre_i].size(); ++section_i) + diffusion_model.precalculate_weightings_gradients_and_hessians(sections[fibre_i][section_i]); + + } + +//***********************************// +//********* Hessian Versions ********// +//***********************************// + + + + template template + void Buffer_tpl::part_image( const U& fibre, + Container::Buffer& gradients, + Container::Buffer& hessians) { + + + std::vector path; + + fibre.sections(path, num_len_sections, num_wth_sections, this->voxel_lengths, this->corner_offsets); + + for (typename std::vector::iterator section_it = path.begin(); section_it != path.end(); ++section_it) { + + typename U::Section& section = *section_it; + +#ifdef OPTIMISED + diffusion_model.precalculate_weightings_gradients_and_hessians(section); +#endif + + std::set neighbourhood = this->get_neighbourhood(section.position()); + + for (typename std::set::iterator vox_it = neighbourhood.begin(); vox_it != neighbourhood.end(); ++vox_it) { + + T& voxel = **vox_it; + const Index& coord = voxel.coord(); + + if (gradients.is_empty(coord)) + gradients(coord).reset(fibre); + + Image::Container::Voxel& gradient_voxel = gradients(coord); + + if (hessians.is_empty(coord)) + hessians(coord).reset(typename U::Tensor(fibre)); + + Image::Container::Voxel& hessian_voxel = hessians(coord); + + +#ifdef OPTIMISED + voxel.precalculate_interpolation_gradient_and_hessian(section); +#endif + + for (size_t encode_i = 0; encode_i < this->num_encodings(); encode_i++) { + + typename U::Section section_gradient; + typename U::Section::Tensor section_hessian; + + voxel[encode_i] += voxel.direction(encode_i).signal(section, section_gradient, section_hessian); + +#ifndef GRADIENT_NOT_REQUIRED + section_gradient.unnormalize_gradient(this->vox_lengths()); + gradient_voxel[encode_i].add_section_gradient(*section.parent, section, section_gradient); + +#ifndef HESSIAN_NOT_REQUIRED + section_hessian.unnormalise_hessian(this->vox_lengths()); + hessian_voxel[encode_i].add_section_hessian(*section.parent, section, section_gradient, section_hessian); +#endif + +#endif + + } + + } + + } + + } + + + template template + void Buffer_tpl::expected_image(const typename U::Set& fibres, + typename Container::Buffer::Set& gradients, + typename Container::Buffer::Set& hessians) { + + + this->zero(); + + for (size_t fibre_i = 0; fibre_i < fibres.size(); fibre_i++) { + + if (gradients.size() <= fibre_i) + gradients.push_back(Container::Buffer (this->dimensions, this->num_encodings())); + else if (gradients[fibre_i].dims() != this->dims() || gradients[fibre_i].num_encodings() != this->num_encodings()) + gradients[fibre_i].reset(this->dimensions, this->num_encodings()); + else + //NB: This does not actually clear the voxels, but instead sets a flag that designates it them as being empty. + // Therefore the function 'Buffer_tpl::is_empty(const Image::Index&)' should be used to check before using a given voxel. + gradients[fibre_i].quick_clear(); + + + if (hessians.size() <= fibre_i) + hessians.push_back(Container::Buffer (this->dimensions, this->num_encodings())); + else if (hessians[fibre_i].dims() != this->dims() || hessians[fibre_i].num_encodings() != this->num_encodings()) + hessians[fibre_i].reset(this->dimensions, this->num_encodings()); + else + //NB: This does not actually clear the voxels, but instead sets a flag that designates them as being empty. + // Therefore the function 'Buffer_tpl::is_empty(const Image::Index&)' should be used to check before using a given voxel. + hessians[fibre_i].quick_clear(); + + + part_image(fibres[fibre_i], gradients[fibre_i], hessians[fibre_i]); + + + } + + for (typename Buffer_tpl::iterator vox_it = this->begin(); vox_it != this->end(); ++vox_it) + for (size_t encode_i = 0; encode_i < num_encodings(); ++encode_i) + vox_it->second[encode_i] *= fibres.base_intensity(); + + + for (size_t fibre_i = 0; fibre_i < fibres.size(); ++fibre_i) + for (typename Buffer_tpl::iterator vox_it = this->begin(); vox_it != this->end(); ++vox_it) + for (size_t encode_i = 0; encode_i < num_encodings(); ++encode_i) { + gradients[fibre_i](vox_it->first)[encode_i] *= fibres.base_intensity(); + hessians[fibre_i](vox_it->first)[encode_i] *= fibres.base_intensity(); + } + + + } + + + template Buffer_tpl& Buffer_tpl::operator+=(const Expected::Buffer& buff) { + + if (this->dims() != buff.dims()) + throw Exception ("Buffer dimensions do not match, " + str(buff.dims()) + " and " + str(this->dims()) + "."); + + std::set non_empty = buff.non_empty(); + + for (std::set::iterator coord_it = non_empty.begin(); coord_it != non_empty.end(); ++coord_it) + this->operator()(*coord_it) += buff(*coord_it); + + return *this; + + } + + template Buffer_tpl& Buffer_tpl::operator-=(const Expected::Buffer& buff) { + + if (this->dims() != buff.dims()) + throw Exception ("Buffer dimensions do not match, " + str(buff.dims()) + " and " + str(this->dims()) + "."); + + std::set non_empty = buff.non_empty(); + + for (std::set::iterator coord_it = non_empty.begin(); coord_it != non_empty.end(); ++coord_it) + this->operator()(*coord_it) -= buff(*coord_it); + + return *this; + + } + + template std::set& Buffer_tpl::get_neighbourhood(const Coord& point) { + + Index centre_coord = voxel_centre_coord(point); + + std::set& neighbourhood = neighbourhoods[centre_coord]; + + if (!neighbourhood.size()) + neighbourhoods[centre_coord] = create_neighbourhood(centre_coord); + + return neighbourhood; + + } + + template template std::set Buffer_tpl::get_neighbourhood(const typename U::Section& section) { + + std::set whole_neighbourhood; + + std::vector extreme_points = T::extreme_points(section); + + for (std::vector::iterator point_it = extreme_points.begin(); point_it != extreme_points.end(); ++point_it) { + std::set point_neighbourhood = get_neighbourhood(voxel_centre_coord(*point_it)); + whole_neighbourhood.insert(point_neighbourhood.begin(), point_neighbourhood.end()); + } + + return whole_neighbourhood; + + } + + + template std::set Buffer_tpl::create_neighbourhood(const Index& coord) { + + std::set neighbourhood; + + // Loop through all voxels within the interpolation extent of the given voxel and add their address to the + // neighbourhood vector. + for (int z_neigh = coord[Z] - neigh_extent; z_neigh < coord[Z] + neigh_extent; z_neigh++) + for (int y_neigh = coord[Y] - neigh_extent; y_neigh < coord[Y] + neigh_extent; y_neigh++) + for (int x_neigh = coord[X] - neigh_extent; x_neigh < coord[X] + neigh_extent; x_neigh++) { + + Index coord(x_neigh, y_neigh, z_neigh); + + if (!this->enforce_bounds || this->in_bounds(coord)) + neighbourhood.insert(&(this->operator()(coord))); + + } + + return neighbourhood; + + } + + + template std::ostream& Buffer_tpl::to_stream (std::ostream& stream) const { + + this->Observed::Buffer_tpl::to_stream(stream); + + stream << "Diffusion model: " << diffusion_model << std::endl; + stream << "Num sections: " << num_len_sections << std::endl; + stream << "Num strands: " << num_wth_sections << std::endl; + stream << "Interpolation extent: " << interp_extent << std::endl; + stream << "Neighbourhood extent: " << neigh_extent << std::endl; + + stream << "Neighbourhoods: " << std::endl; + + for (typename std::map< Index, std::set >::const_iterator neigh_it = neighbourhoods.begin(); neigh_it != neighbourhoods.end(); ++neigh_it) { + + stream << neigh_it->first << std::endl; + + for (typename std::set::const_iterator vox_it = neigh_it->second.begin(); vox_it != neigh_it->second.end(); ++vox_it) + stream << " " << (*vox_it)->centre() << std::endl; + + } + + stream << std::endl << std::endl; + + return stream; + + } + + + template std::ostream& operator<< (std::ostream& stream, const Buffer_tpl& buffer) { + + return buffer.to_stream(stream); + + } + + } + + } + + +} + +#undef LOOP + + +#endif /* __bts_image_expected_buffer_tpl_cpp_h__ */ diff --git a/src/bts/image/expected/buffer_tpl.h b/src/bts/image/expected/buffer_tpl.h new file mode 100644 index 0000000..7a033ba --- /dev/null +++ b/src/bts/image/expected/buffer_tpl.h @@ -0,0 +1,284 @@ +/* + Copyright 2008 Brain Research Institute, Melbourne, Australia + + Written by Thomas G Close, Mar 15, 2011. + + This file is part of MRtrix. + + MRtrix is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + MRtrix is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with MRtrix. If not, see . + +*/ + + +#ifndef __bts_image_expected_buffertpl_h__ +#define __bts_image_expected_buffertpl_h__ + +namespace BTS { + + namespace Image { + + namespace Expected { + + template class Buffer_tpl; + + } + + } + +} + +#include "bts/common.h" + +#include "bts/image/observed/buffer.h" +#include "bts/image/index.h" +#include "bts/image/container/buffer.h" +#include "bts/image/reference/buffer.h" + +#include "bts/fibre/strand.h" +#include "bts/fibre/tractlet.h" + +#include "bts/diffusion/model.h" + +#include "math/matrix.h" + +#include "bts/common.h" + +#include "bts/image/index.h" +#include "bts/image/buffer.h" +#include "bts/fibre/strand.h" +#include "bts/fibre/tractlet.h" + +#include "bts/diffusion/model.h" + +#include "bts/image/observed/buffer.h" +#include "bts/image/container/buffer.h" +#include "bts/image/expected/buffer.h" + +#define LOOP(op) \ +for (size_t z = 0; z < this->dim(Z); z++) { \ + for (size_t y = 0; y < this->dim(Y); y++) { \ + for (size_t x = 0; x < this->dim(X); x++) { \ + op \ + } \ + } \ +} + +namespace BTS { + + namespace Image { + + namespace Expected { + + template class Buffer_tpl: public Observed::Buffer_tpl { + + protected: + + Diffusion::Model diffusion_model; + + size_t num_len_sections; + size_t num_wth_sections; + + double interp_extent; + int neigh_extent; + + std::map > neighbourhoods; + + public: + //Holds all strand or tractlet sections used to generate the image. Storage here allows data structures to be + //reused between image generations. The size_t index indicates the strand index + std::map > strand_sections; + std::map > + tractlet_sections; + + //Holds all strand or tractlet sections used to generate the image. Storage here allows data structures to be + //reused between image generations. + Reference::Buffer::Set + strand_section_references; + Reference::Buffer::Set + tractlet_section_references; + + public: + + size_t num_length_sections() const { + return num_len_sections; + } + + size_t num_width_sections() const { + return num_wth_sections; + } + + template void expected_image( + const typename U::Set& fibres); + + template void part_image(const U& fibre); + + template typename Image::Reference::Buffer< + typename U::Section>::Set& expected_image_with_references( + const typename U::Set& fibres); + + template void part_image(const U& fibre, std::vector< + typename U::Section>& path, Image::Reference::Buffer< + typename U::Section>& section_reference); + + template void expected_image( + const typename U::Set& fibres, + typename Container::Buffer::Set& gradients); + + template void part_image(const U& fibre, + Container::Buffer& gradients); + + template void expected_image( + const typename U::Set& fibres, + typename Container::Buffer::Set& gradients, + typename Container::Buffer::Set& hessians); + + template void part_image(const U& fibre, + Container::Buffer& gradients, Container::Buffer< + typename U::Tensor>& hessians); + + template void precalculate_section_weighting_gradients(); + + template void + precalculate_section_weighting_gradients_and_hessians(); + + const Diffusion::Model& get_diffusion_model() const { + return diffusion_model; + } + + double get_extent() { + return interp_extent; + } + + void set_extent(double interp_extent) { + this->interp_extent = interp_extent; + neigh_extent = (size_t) std::ceil(interp_extent); + neighbourhoods.clear(); + } + + Buffer_tpl& clear() { + Image::Buffer_tpl::clear(); + neighbourhoods.clear(); + return *this; + } + + size_t num_encodings() const { + return diffusion_model.num_encodings(); + } + + const Diffusion::Encoding& encoding(size_t index) const { + return diffusion_model[index]; + } + + protected: + + Buffer_tpl(bool enforce_bounds = true) : + Observed::Buffer_tpl(enforce_bounds), num_len_sections(0), + num_wth_sections(0), interp_extent(0.0), neigh_extent(0) { + } + + Buffer_tpl(const Triple& dimensions, + const Triple& voxel_sizes, + const Diffusion::Model& diffusion_model, + size_t number_length_sections, size_t number_width_sections, + double interp_extent, const Triple& corner_offsets, + bool enforce_bounds) : + Observed::Buffer_tpl(dimensions, voxel_sizes, corner_offsets, + enforce_bounds), diffusion_model(diffusion_model), + num_len_sections(number_length_sections), num_wth_sections( + number_width_sections) + + { + + if (!number_length_sections) + throw Exception( + "Number of length sections in image cannot be zero."); + + if (!number_width_sections) + throw Exception( + "Number of length sections in image cannot be zero."); + + set_extent(interp_extent); + + } + + Buffer_tpl(const Buffer_tpl& bt) : + Observed::Buffer_tpl(bt), diffusion_model(bt.diffusion_model), + num_len_sections(bt.num_len_sections), num_wth_sections( + bt.num_wth_sections) + + { + set_extent(bt.interp_extent); + } + + virtual ~Buffer_tpl() { + } + + // Returns the 'neighbourhood' coordinate that the point lies in. The 'neighbourhood' coordinate is the coordinate + // that the point + [0.5,0.5,0.5] lies in. This is used to map the neighbourhood of voxels that lie + // within the interpolation extent about the given point (see set and get neighbourhoods). + Index voxel_centre_coord(const Coord& point) { + Coord offset_point = point + Coord::Halves; + Index coord((int) floor(offset_point[X]), (int) floor( + offset_point[Y]), (int) floor(offset_point[Z])); + return coord; + } + + std::set create_neighbourhood(const Index& coord); + + std::set& get_neighbourhood(const Coord& point); + + template std::set get_neighbourhood( + const typename U::Section& section); + + std::ostream& to_stream(std::ostream& stream) const; + + //The dummy arguments to the following functions is used in template functions to specify which type of section + //to return. + + std::map >& get_sections( + const Fibre::Strand& dummy) { + return strand_sections; + } + + std::map >& get_sections( + const Fibre::Tractlet& dummy) { + return tractlet_sections; + } + + Reference::Buffer::Set& get_section_references( + const Fibre::Strand& dummy) { + return strand_section_references; + } + + Reference::Buffer::Set& get_section_references( + const Fibre::Tractlet& dummy) { + return tractlet_section_references; + } + + + Buffer_tpl& operator+=(const Expected::Buffer& buffer); + + Buffer_tpl& operator-=(const Expected::Buffer& buffer); + + }; + + } + + } + +} + +#undef LOOP + +#endif /* */ diff --git a/src/bts/image/expected/direction.cpp.h b/src/bts/image/expected/direction.cpp.h new file mode 100644 index 0000000..c8bad1f --- /dev/null +++ b/src/bts/image/expected/direction.cpp.h @@ -0,0 +1,327 @@ +/* + Copyright 2008 Brain Research Institute, Melbourne, Australia + + Written by Thomas G Close, 17/06/2010. + + This file is part of MRtrix. + + MRtrix is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + MRtrix is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with MRtrix. If not, see . + +*/ + +#ifndef __bts_image_expected_direction_cpp_h__ +#define __bts_image_expected_direction_cpp_h__ + +#include "bts/image/expected/voxel.h" + +namespace BTS { + + namespace Image { + + + template double Expected::Direction::signal_tpl (const T& section) { + + //OPTIMISED makes use of the fact that each section is processed sequentially, allowing the weighting and interpolation to be + //precalculated and stored within the Diffusion::Response and Fabricated::Voxel objects respectively. Then quickly combined + //for all of the diffusion-weighting/voxel combinations. +#ifdef OPTIMISED + + double diffusion_weighting = section.precalc_weightings[response->get_index()]; + double interpolation_weighting = section.precalc_interpolation; + +#else //ifndef OPTIMISED + + double diffusion_weighting = response->weighting (section.tangent()); + double interpolation_weighting = voxel->interpolate(section); + +#endif + + + return section.intensity() * diffusion_weighting * interpolation_weighting; + + } + + template double Expected::Direction::signal_tpl (const T& section, Fibre::Strand::BasicSection& gradient) { + + //NB: diffusion gradient refers to the gradient of the section tangent + //w.r.t. the diffusion weighting, as opposed to the direction of the + //magnetic field "gradient". + + + //OPTIMISED makes use of the fact that each section is processed sequentially, allowing the weighting and interpolation to be + //precalculated and stored within the Diffusion::Response and Fabricated::Voxel objects respectively. Then quickly combined + //for all of the diffusion-weighting/voxel combinations. +#ifdef OPTIMISED + + double diffusion_weighting = section.precalc_weightings[response->get_index()]; + double interpolation_weighting = section.precalc_interpolation; + +#ifndef GRADIENT_NOT_REQUIRED + const Triple& diffusion_gradient = section.precalc_weight_gradients[response->get_index()]; + const Fibre::Strand::BasicSection& interpolation_gradient = section.precalc_interp_gradient; +#endif + +#else //ifndef OPTIMISED + + Coord diffusion_gradient; + T interpolation_gradient; + + double diffusion_weighting = response->weighting (section.tangent(), diffusion_gradient); + double interpolation_weighting = voxel->interpolate(section, interpolation_gradient); + +#endif + + +#ifndef GRADIENT_NOT_REQUIRED + signal_gradient(section, gradient, diffusion_weighting, interpolation_weighting, diffusion_gradient, interpolation_gradient); +#endif + + return section.intensity() * diffusion_weighting * interpolation_weighting; + + } + + + + + template double Expected::Direction::signal_tpl (const T& section, Fibre::Strand::BasicSection& gradient, typename T::Tensor& hessian) { + + + //NB: diffusion gradient refers to the gradient of the section tangent + //w.r.t. the diffusion weighting, as opposed to the direction of the + //magnetic field "gradient". + + + //OPTIMISED makes use of the fact that each section is processed sequentially, allowing the weighting and interpolation to be + //precalculated and stored within the Diffusion::Response and Fabricated::Voxel objects respectively. Then quickly combined + //for all of the diffusion-weighting/voxel combinations. +#ifdef OPTIMISED + + double diffusion_weighting = section.precalc_weightings[response->get_index()]; + double interpolation_weighting = section.precalc_interpolation; + +#ifndef GRADIENT_NOT_REQUIRED + const Triple& diffusion_gradient = section.precalc_weight_gradients[response->get_index()]; + const Fibre::Strand::BasicSection& interpolation_gradient = section.precalc_interp_gradient; + +#ifndef HESSIAN_NOT_REQUIRED + const Coord::Tensor& diffusion_hessian = section.precalc_weight_hessians[response->get_index()]; + const typename T::Tensor& interpolation_hessian = section.precalc_interp_hessian; +#endif + +#endif + +#else //ifndef OPTIMISED + + +#ifndef GRADIENT_NOT_REQUIRED + + Coord diffusion_gradient; + T interpolation_gradient; + +#ifndef HESSIAN_NOT_REQUIRED + + typename T::Tensor interpolation_hessian; + Coord::Tensor diffusion_hessian; + + double diffusion_weighting = response->weighting (section.tangent(), diffusion_gradient, diffusion_hessian); + double interpolation_weighting = voxel->interpolate(section, interpolation_gradient, interpolation_hessian); + +#else + + double diffusion_weighting = response->weighting (section.tangent, diffusion_gradient); + double interpolation_weighting = voxel->interpolate(section, interpolation_gradient); + +#endif + +#else + + double diffusion_weighting = response->weighting(section.tangent); + double interpolation_weighting = voxel->interpolate(section); + +#endif + +#endif + + +#ifndef GRADIENT_NOT_REQUIRED + signal_gradient(section, gradient, diffusion_weighting, interpolation_weighting, diffusion_gradient, interpolation_gradient); + +#ifndef HESSIAN_NOT_REQUIRED + signal_hessian(section, hessian, diffusion_weighting, interpolation_weighting, diffusion_gradient, interpolation_gradient, diffusion_hessian, interpolation_hessian); +#endif + +#endif + + return section.intensity() * diffusion_weighting * interpolation_weighting; + + + } + + + + inline void Expected::Direction::signal_gradient(const Fibre::Strand::Section& section, + Fibre::Strand::BasicSection& gradient, + double diffusion_weighting, + double interpolation_weighting, + const Triple& diffusion_gradient, + const Fibre::Strand::BasicSection& interpolation_gradient) { + + gradient.tangent() = (Coord)diffusion_gradient * (section.intensity() * interpolation_weighting) + interpolation_gradient.tangent() * (section.intensity() * diffusion_weighting); + + gradient.position() = interpolation_gradient.position() * (section.intensity() * diffusion_weighting); + + gradient.intensity() = diffusion_weighting * interpolation_weighting; + + + } + + inline void Expected::Direction::signal_gradient(const Fibre::Tractlet::Section& section, + Fibre::Strand::BasicSection& gradient, + double diffusion_weighting, + double interpolation_weighting, + const Triple& diffusion_gradient, + const Fibre::Strand::BasicSection& interpolation_gradient) { + + + //Call the Fibre::Strand::Section version of the function first, then process the additional parameters. + signal_gradient ((const Fibre::Strand::Section&)section, (Fibre::Strand::BasicSection&)gradient, diffusion_weighting, interpolation_weighting, diffusion_gradient, (const Fibre::Strand::BasicSection&)interpolation_gradient); + +// //Check to see if the tractlet section 'width' is used in the interpolation calculation. +// if (!interpolation_gradient.width1 || !interpolation_gradient.width2) { +// gradient.width1 = Triple::Zeros; +// gradient.width2 = Triple::Zeros; +// } else { +// gradient.width1 = interpolation_gradient.width1 * (section.intensity() * diffusion_weighting); +// gradient.width2 = interpolation_gradient.width2 * (section.intensity() * diffusion_weighting); +// } + + } + + + inline void Expected::Direction::signal_hessian(const Fibre::Strand::Section& section, + Fibre::Strand::BasicSection::Tensor& hessian, + double diff_weighting, + double interp_weighting, + const Triple& diff_gradient, + const Fibre::Strand::BasicSection& interp_gradient, + const Coord::Tensor& diff_hessian, + const Fibre::Strand::BasicSection::Tensor& interp_hessian) { + + //Set hessian intensity elements. + + hessian.intensity().intensity() = 0.0; + + hessian.intensity().tangent() = (Coord)diff_gradient * interp_weighting + interp_gradient.tangent() * diff_weighting; + hessian.intensity().position() = interp_gradient.position() * diff_weighting; + + //TODO: reformulate this code in terms of MR::Math::Matrix::sub + hessian.position(X).intensity() = hessian.intensity().position(X); + hessian.position(Y).intensity() = hessian.intensity().position(Y); + hessian.position(Z).intensity() = hessian.intensity().position(Z); + + hessian.tangent(X).intensity() = hessian.intensity().tangent(X); + hessian.tangent(Y).intensity() = hessian.intensity().tangent(Y); + hessian.tangent(Z).intensity() = hessian.intensity().tangent(Z); + + + //Set hessian position()-position() elements. + + hessian.position(X).position() = interp_hessian.position(X).position() * diff_weighting * section.intensity(); + hessian.position(Y).position() = interp_hessian.position(Y).position() * diff_weighting * section.intensity(); + hessian.position(Z).position() = interp_hessian.position(Z).position() * diff_weighting * section.intensity(); + + + //Set hessian tangent()-tangent() elements. + + Coord::Tensor tangent_hessian = section.intensity() * ( + diff_hessian * interp_weighting // FIXME: add a operator*(double) function for Coord::Tensor + + interp_gradient.tangent().outer(diff_gradient) + + ((Coord)diff_gradient).outer(interp_gradient.tangent()) + + interp_hessian.tangent() * diff_weighting); // FIXME: Make a tangent() function of BasicSection::Tensor + + hessian.tangent(X).tangent() = tangent_hessian[X]; + hessian.tangent(Y).tangent() = tangent_hessian[Y]; + hessian.tangent(Z).tangent() = tangent_hessian[Z]; + + + //Set hessian position()-tangent() and vice-versa elements. + + Coord::Tensor cross_hessian = section.intensity() * ( + interp_gradient.position().outer(diff_gradient) + + interp_hessian.position_tangent() * diff_weighting); // FIXME: Make a cross() function of BasicSection::Tensor + + + hessian.position(X).tangent() = cross_hessian[X]; + hessian.position(Y).tangent() = cross_hessian[Y]; + hessian.position(Z).tangent() = cross_hessian[Z]; + + hessian.tangent(X).position(X) = cross_hessian[X][X]; + hessian.tangent(X).position(Y) = cross_hessian[Y][X]; + hessian.tangent(X).position(Z) = cross_hessian[Z][X]; + + + hessian.tangent(Y).position(X) = cross_hessian[X][Y]; + hessian.tangent(Y).position(Y) = cross_hessian[Y][Y]; + hessian.tangent(Y).position(Z) = cross_hessian[Z][Y]; + + hessian.tangent(Z).position(X) = cross_hessian[X][Z]; + hessian.tangent(Z).position(Y) = cross_hessian[Y][Z]; + hessian.tangent(Z).position(Z) = cross_hessian[Z][Z]; + + } + + + + inline void Expected::Direction::signal_hessian(const Fibre::Tractlet::Section& section, + Fibre::Strand::BasicSection::Tensor& hessian, + double diffusion_weighting, + double interpolation_weighting, + const Triple& diffusion_gradient, + const Fibre::Strand::BasicSection& interpolation_gradient, + const Coord::Tensor& diffusion_hessian, + const Fibre::Strand::BasicSection::Tensor& interpolation_hessian) { + + + //Call the Fibre::Strand::Section version of the function first, then process the additional parameters. + signal_hessian ( (const Fibre::Strand::Section&)section, + (Fibre::Strand::BasicSection::Tensor&)hessian, + diffusion_weighting, + interpolation_weighting, + diffusion_gradient, + (const Fibre::Strand::Section&)interpolation_gradient, + diffusion_hessian, + (const Fibre::Strand::BasicSection::Tensor&)interpolation_hessian); + + //Check to see if the tractlet section 'width' is used in the interpolation calculation. + //TODO: Note Nonzero Tractlet::Section widths are not currently handled in Hessian calculation. + + } + + + + inline std::ostream& operator<<(std::ostream& stream, const Expected::Direction& direction) { + + stream << "Voxel: " << direction.voxel << ", Response: " << direction.response << std::endl; + + return stream; + + } + + } + +} + + + +#endif /* __bts_image_expected_direction_cpp_h__ */ diff --git a/src/bts/image/expected/direction.h b/src/bts/image/expected/direction.h new file mode 100644 index 0000000..b710add --- /dev/null +++ b/src/bts/image/expected/direction.h @@ -0,0 +1,149 @@ +/* + Copyright 2010 Brain Research Institute/National ICT Australia (NICTA), Melbourne, Australia + + Written by Voxelhomas G Close, 5/05/09. + + Voxelhis file is part of BTS. + + BTS is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + BTS is distributed in the hope that it will be useful, + but WIVoxelHOUVoxel ANY WARRANVoxelY; without even the implied warranty of + MERCHANVoxelABILIVoxelY or FIVoxelNESS FOR A PARVoxelICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with BTS. If not, see . + +*/ + +#ifndef __bts_image_expected_direction_h__ +#define __bts_image_expected_direction_h__ + +namespace BTS { + + namespace Image { + + namespace Expected { + + class Direction; + + } + + } + +} + +#include "bts/common.h" + +#include "bts/image/expected/voxel.h" +#include "bts/diffusion/response.h" + +#include "bts/triple.h" +#include "bts/fibre/strand/section.h" + + + +namespace BTS { + + namespace Image { + + namespace Expected { + + class Direction { + + //Public members + public: + + Voxel* voxel; + Diffusion::Response* response; + + //Public methods + public: + + Direction(Voxel& voxel, Diffusion::Response& response) + : voxel(&voxel), response(&response) {} + + ~Direction() {} + + //'signal' functions have explicit Fibre::Strand::Section and Fibre::Tractlet::Section arguments in favour of using + // the template directly so that their function signature can be passed as a pointer to GradientTester. + double signal(const Fibre::Strand::Section& section) + { return signal_tpl(section); } + + double signal(const Fibre::Tractlet::Section& section) + { return signal_tpl(section); } + + double signal(const Fibre::Strand::Section& section, Fibre::Strand::BasicSection& gradient) + { return signal_tpl(section,gradient); } + + double signal(const Fibre::Tractlet::Section& section, Fibre::Strand::BasicSection& gradient) + { return signal_tpl(section,gradient); } + + double signal(const Fibre::Strand::Section& section, Fibre::Strand::BasicSection& gradient, Fibre::Strand::BasicSection::Tensor& hessian) + { return signal_tpl(section,gradient,hessian); } + + double signal(const Fibre::Tractlet::Section& section, Fibre::Strand::BasicSection& gradient, Fibre::Strand::BasicSection::Tensor& hessian) + { return signal_tpl(section,gradient,hessian); } + + double b_value() const + { return response->b_value(); } + + const Diffusion::Encoding& encoding() const + { return *response; } + + protected: + + template double signal_tpl (const T& section); + + template double signal_tpl (const T& section, Fibre::Strand::BasicSection& gradient); + + template double signal_tpl (const T& section, Fibre::Strand::BasicSection& gradient, typename T::Tensor& hessian); + + static void signal_gradient(const Fibre::Strand::Section& section, + Fibre::Strand::BasicSection& gradient, + double diffusion_weighting, + double interpolation_weighting, + const Triple& diffusion_gradient, + const Fibre::Strand::BasicSection& interpolation_gradient); + + static void signal_gradient(const Fibre::Tractlet::Section& section, + Fibre::Strand::BasicSection& gradient, + double diffusion_weighting, + double interpolation_weighting, + const Triple& diffusion_gradient, + const Fibre::Strand::BasicSection& interpolation_gradient); + + static void signal_hessian(const Fibre::Strand::Section& section, + Fibre::Strand::BasicSection::Tensor& hessian, + double diffusion_weighting, + double interpolation_weighting, + const Triple& diffusion_gradient, + const Fibre::Strand::BasicSection& interpolation_gradient, + const Coord::Tensor& diffusion_hessian, + const Fibre::Strand::BasicSection::Tensor& interpolation_hessian); + + static void signal_hessian(const Fibre::Tractlet::Section& section, + Fibre::Strand::BasicSection::Tensor& hessian, + double diffusion_weighting, + double interpolation_weighting, + const Triple& diffusion_gradient, + const Fibre::Strand::BasicSection& interpolation_gradient, + const Coord::Tensor& diffusion_hessian, + const Fibre::Strand::BasicSection::Tensor& interpolation_hessian); + + + friend std::ostream& operator<< (std::ostream& stream, const Direction& direction); + + }; + + } + + } + +} + +#endif diff --git a/src/bts/image/expected/gaussian/buffer.cpp b/src/bts/image/expected/gaussian/buffer.cpp new file mode 100644 index 0000000..5da14f8 --- /dev/null +++ b/src/bts/image/expected/gaussian/buffer.cpp @@ -0,0 +1,74 @@ +/* + Copyright 2009 Brain Research Institute, Melbourne, Australia + + Created by Tom Close on 13/03/09. + + This file is part of Bayesian Tractlet Sampling (BTS). + + BTS is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + BTS is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with BTS. If not, see . + + */ + +#include "bts/image/expected/gaussian/buffer.h" +#include "bts/image/expected/gaussian/voxel.h" + +#include "bts/fibre/strand/tensor.h" +#include "bts/fibre/tractlet/tensor.h" + +#include "bts/image/inline_functions.h" +#include "bts/diffusion/inline_functions.h" + + + +namespace BTS { + + namespace Image { + + namespace Expected { + + namespace Gaussian { + + const std::string Buffer::SHORT_NAME = "gaussian"; + + + Buffer::Buffer( const Triple& dimensions, + const Triple& voxel_sizes, + const Diffusion::Model& diffusion_model, + size_t num_sections, + size_t num_strands, + double extent, + double half_width, + const Triple& corner_offset, + bool enforce_bounds) + + : Buffer_tpl(dimensions, voxel_sizes, diffusion_model, num_sections, num_strands, extent, corner_offset, enforce_bounds), variance(half_width / (SQRT_LOG_2 * SQRT_2)) + { name_init(); } + + + Buffer::Buffer(const Buffer& buffer) + : Buffer_tpl(buffer), variance(buffer.variance) + { name_init(); } + + + std::ostream& operator<< (std::ostream& stream, const Buffer& buffer) + { return buffer.to_stream(stream); } + + } + + } + + } + +} + diff --git a/src/bts/image/expected/gaussian/buffer.h b/src/bts/image/expected/gaussian/buffer.h new file mode 100644 index 0000000..b2fe916 --- /dev/null +++ b/src/bts/image/expected/gaussian/buffer.h @@ -0,0 +1,95 @@ +/* + Copyright 2009 Brain Research Institute, Melbourne, Australia + + Created by Tom Close on 13/03/09. + + This file is part of Bayesian Tractlet Sampling (BTS). + + BTS is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + BTS is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with BTS. If not, see . + + */ + +#include "bts/image/expected/gaussian/voxel.h" + +#ifndef __bts_image_expected_gaussian_buffer_h__ +#define __bts_image_expected_gaussian_buffer_h__ + + +#include "bts/image/expected/buffer.h" +#include "bts/image/expected/buffer_tpl.h" + + + +namespace BTS { + + namespace Image { + + namespace Expected { + + namespace Gaussian { + + class Buffer : public Expected::Buffer, public Expected::Buffer_tpl { + + //Public static constants + public: + + const static std::string SHORT_NAME; + + //Protected member variables + protected: + + double variance; + + public: + + Buffer() : Buffer_tpl(this) {} + + Buffer( const Triple& dimensions, + const Triple& voxel_sizes, + const Diffusion::Model& diffusion_model, + size_t num_sections = Expected::Buffer::NUM_LENGTH_SECTIONS_DEFAULT, + size_t num_strands = Expected::Buffer::NUM_WIDTH_SECTIONS_DEFAULT, + double interp_extent = Expected::Buffer::INTERP_EXTENT_DEFAULT, + double half_width = Expected::Buffer::HALF_WIDTH_DEFAULT, + const Triple& corner_offset = Triple(), + bool enforce_bounds = true + ); + + + Buffer(const Buffer& buffer); + + + ~Buffer() {} + + double gauss_exp_var() + { return variance; } + + EXPECTED_BUFFER_FUNCTIONS; + + }; + + + + std::ostream& operator<< (std::ostream& stream, const Buffer& buffer); + + } + + } + + } + +} + + +#endif diff --git a/src/bts/image/expected/gaussian/voxel.cpp b/src/bts/image/expected/gaussian/voxel.cpp new file mode 100644 index 0000000..924782e --- /dev/null +++ b/src/bts/image/expected/gaussian/voxel.cpp @@ -0,0 +1,84 @@ +/* + Copyright 2010 Brain Research Institute, Melbourne, Australia + + Written by Thomas G Close on May 19, 2010. + + This file is part of Bayesian Tractlet Sampling (BTS). + + BTS is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + BTS is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with BTS. If not, see . + +*/ + +#include "bts/image/expected/gaussian/voxel.h" +#include "bts/image/expected/gaussian/buffer.h" + +#include "bts/image/inline_functions.h" +#include "bts/diffusion/inline_functions.h" + + +namespace BTS { + + namespace Image { + + namespace Expected { + + namespace Gaussian { + + Voxel::Voxel(Buffer& buffer, const Index& coord) + : Expected::Voxel(buffer, coord, buffer.diffusion_model), image(&buffer) {} + + + double Voxel::interpolate(const Coord& pos) { + + Coord disp = pos - centre(); + + Coord interpolate ( exp(- MR::Math::pow2(disp[X]) / (2.0 * image->gauss_exp_var())), exp(- MR::Math::pow2(disp[Y]) / (2.0 * image->gauss_exp_var())), exp(- MR::Math::pow2(disp[Z]) / (2.0 * image->gauss_exp_var()))); + + interpolate /= sqrt( 2.0 * M_PI * image->gauss_exp_var()); + + return interpolate[X] * interpolate[Y] * interpolate[Z]; + + } + + + double Voxel::interpolate(const Coord& pos, Coord& pos_gradient) { + + Coord disp = pos - centre(); + + Coord interpolate ( exp(- MR::Math::pow2(disp[X]) / (2.0 * image->gauss_exp_var())), exp(- MR::Math::pow2(disp[Y]) / (2.0 * image->gauss_exp_var())), exp(- MR::Math::pow2(disp[Z]) / (2.0 * image->gauss_exp_var()))); + + interpolate /= sqrt( 2.0 * M_PI * image->gauss_exp_var()); + + double scalar; + + scalar = interpolate[X] * interpolate[Y] * interpolate[Z]; + + pos_gradient[X] = - disp[X] * scalar / image->gauss_exp_var(); + pos_gradient[Y] = - disp[Y] * scalar / image->gauss_exp_var(); + pos_gradient[Z] = - disp[Z] * scalar / image->gauss_exp_var(); + + return scalar; + + } + + + } + + } + + + } + +} + diff --git a/src/bts/image/expected/gaussian/voxel.h b/src/bts/image/expected/gaussian/voxel.h new file mode 100644 index 0000000..9f4c978 --- /dev/null +++ b/src/bts/image/expected/gaussian/voxel.h @@ -0,0 +1,102 @@ +/* + Copyright 2009 Brain Research Institute, Melbourne, Australia + + Created by Tom Close on 13/03/09. + + This file is part of Bayesian Tractlet Sampling (BTS). + + BTS is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + BTS is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with BTS. If not, see . + + */ + + +#ifndef __bts_image_expected_gaussian_voxel_h__ +#define __bts_image_expected_gaussian_voxel_h__ + + +#include "bts/common.h" + +#include "bts/triple.h" + + + +#include "bts/image/expected/buffer.h" +#include "bts/image/observed/buffer.h" +#include "bts/image/expected/voxel.h" +#include "bts/image/expected/direction.h" + +#include "bts/diffusion/model.h" + + +namespace BTS { + + namespace Image { + + namespace Expected { + + namespace Gaussian { + + class Voxel : public Expected::Voxel { + + public: + + typedef Gaussian::Buffer Buffer; + + protected: + + Buffer* image; + + public: + + Voxel() {} + + + Voxel(Buffer& buffer, const Index& coord); + + + Voxel(const Voxel& voxel) + : Expected::Voxel(voxel), image(voxel.image) {} + + + Voxel& operator= (const Voxel& v) + { Expected::Voxel::operator=(v); image = v.image; return *this; } + + + ~Voxel() {} + + + // protected: + + double interpolate(const Coord& pos); + + double interpolate(const Coord& pos, Coord& gradient); + + double interpolate(const Coord& triple, Coord& gradient, Coord::Tensor& hessian) + { throw Exception ("Not implemented yet."); } + + + + + }; + + } + + } + + } + +} + + +#endif diff --git a/src/bts/image/expected/quartic/buffer.cpp b/src/bts/image/expected/quartic/buffer.cpp new file mode 100644 index 0000000..a924073 --- /dev/null +++ b/src/bts/image/expected/quartic/buffer.cpp @@ -0,0 +1,83 @@ +/* + Copyright 2009 Brain Research Institute, Melbourne, Australia + + Created by Tom Close on 13/03/09. + + This file is part of Bayesian Tractlet Sampling (BTS). + + BTS is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + BTS is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with BTS. If not, see . + + */ + +#include "bts/image/expected/quartic/buffer.h" +#include "bts/image/expected/quartic/voxel.h" + +#include "bts/fibre/strand/tensor.h" +#include "bts/fibre/tractlet/tensor.h" + +#include "bts/image/inline_functions.h" +#include "bts/diffusion/inline_functions.h" + + +#define LOOP(op) \ +for (size_t z = 0; z < this->dim(Z); z++) { \ + for (size_t y = 0; y < this->dim(Y); y++) { \ + for (size_t x = 0; x < this->dim(X); x++) { \ + op \ + } \ + } \ +} + +namespace BTS { + + namespace Image { + + namespace Expected { + + namespace Quartic { + + + const std::string Buffer::SHORT_NAME = "quartic"; + + Buffer::Buffer( const Triple& dimensions, + const Triple& voxel_sizes, + const Diffusion::Model& diffusion_model, + size_t num_sections, + size_t num_strands, + double extent, + const Triple& corner_offset, + bool enforce_bounds) + + : Buffer_tpl(dimensions, voxel_sizes, diffusion_model, num_sections, num_strands, extent, corner_offset, enforce_bounds) + { name_init(); } + + + Buffer::Buffer(const Buffer& buffer) + : Buffer_tpl(buffer) + { name_init(); } + + + std::ostream& operator<< (std::ostream& stream, const Buffer& buffer) + { return buffer.to_stream(stream); } + + + } + + } + + } + +} + +#undef LOOP diff --git a/src/bts/image/expected/quartic/buffer.h b/src/bts/image/expected/quartic/buffer.h new file mode 100644 index 0000000..fb99cde --- /dev/null +++ b/src/bts/image/expected/quartic/buffer.h @@ -0,0 +1,87 @@ +/* + Copyright 2009 Brain Research Institute, Melbourne, Australia + + Created by Tom Close on 13/03/09. + + This file is part of Bayesian Tractlet Sampling (BTS). + + BTS is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + BTS is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with BTS. If not, see . + + */ + +#include "bts/image/expected/quartic/voxel.h" + +#ifndef __bts_image_expected_quartic_buffer_h__ +#define __bts_image_expected_quartic_buffer_h__ + +#include "bts/image/expected/buffer.h" +#include "bts/image/expected/buffer_tpl.h" + + +namespace BTS { + + namespace Image { + + namespace Expected { + + namespace Quartic { + + + class Buffer : public Expected::Buffer, public Expected::Buffer_tpl { + + //Public static constants + public: + + const static std::string SHORT_NAME; + + public: + + Buffer() : Buffer_tpl(this) {} + + Buffer( const Triple& dimensions, + const Triple& voxel_sizes, + const Diffusion::Model& diffusion_model, + size_t num_sections = Expected::Buffer::NUM_LENGTH_SECTIONS_DEFAULT, + size_t num_strands = Expected::Buffer::NUM_WIDTH_SECTIONS_DEFAULT, + double extent = Expected::Buffer::INTERP_EXTENT_DEFAULT, + const Triple& corner_offset = Triple (), + bool enforce_bounds = true + ); + + + Buffer(const Buffer& buffer); + + + ~Buffer() {} + + + EXPECTED_BUFFER_FUNCTIONS; + + }; + + + + std::ostream& operator<< (std::ostream& stream, const Buffer& buffer); + + + } + + } + + } + +} + + +#endif diff --git a/src/bts/image/expected/quartic/voxel.cpp b/src/bts/image/expected/quartic/voxel.cpp new file mode 100644 index 0000000..194cae5 --- /dev/null +++ b/src/bts/image/expected/quartic/voxel.cpp @@ -0,0 +1,249 @@ +/* + Copyright 2009 Brain Research Institute, Melbourne, Australia + + Created by Tom Close on 13/03/09. + + This file is part of Bayesian Tractlet Sampling (BTS). + + BTS is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + BTS is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with BTS. If not, see . + + */ + +#include "bts/image/expected/quartic/voxel.h" +#include "bts/image/expected/quartic/buffer.h" + + +#include "bts/fibre/strand/basic_section/tensor.h" +#include "bts/fibre/tractlet/section/tensor.h" + +#include "bts/image/inline_functions.h" +#include "bts/diffusion/inline_functions.h" + + +namespace BTS { + + namespace Image { + + namespace Expected { + + namespace Quartic { + + + Voxel::Voxel(Buffer& buffer, const Index& coord) + : Expected::Voxel(buffer, coord, buffer.diffusion_model), image(&buffer) {} + + + + +//----------------------// +// Non Hessian versions // +//----------------------// + + + double Voxel::interpolate(const Coord& pos) { + + Coord disp = pos - this->centre(); + + Coord interpolate; + + double interpolation; + + if (disp.lower_bounded(-1.0) && disp.upper_bounded(1.0)) { + + for (size_t dim_i = 0; dim_i < 3; ++dim_i) + interpolate[dim_i] = MR::Math::pow4(disp[dim_i]) - 2.0 * MR::Math::pow2(disp[dim_i]) + 1; + + interpolation = interpolate[X] * interpolate[Y] * interpolate[Z]; + + } else { + interpolation = 0.0; + } + + return interpolation; + + } + + + double Voxel::interpolate(const Coord& pos, Coord& pos_gradient) { + + Coord disp = pos - this->centre(); + + Coord interpolate; + + double interpolation; + + if (disp.lower_bounded(-1.0) && disp.upper_bounded(1.0)) { + + for (size_t dim_i = 0; dim_i < 3; ++dim_i) + interpolate[dim_i] = MR::Math::pow4(disp[dim_i]) - 2.0 * MR::Math::pow2(disp[dim_i]) + 1; + + interpolation = interpolate[X] * interpolate[Y] * interpolate[Z]; + +#ifndef GRADIENT_NOT_REQUIRED + pos_gradient[X] = (4.0 * MR::Math::pow3(disp[X]) - 4.0 * disp[X]) * interpolate[Y] * interpolate[Z]; + pos_gradient[Y] = (4.0 * MR::Math::pow3(disp[Y]) - 4.0 * disp[Y]) * interpolate[X] * interpolate[Z]; + pos_gradient[Z] = (4.0 * MR::Math::pow3(disp[Z]) - 4.0 * disp[Z]) * interpolate[X] * interpolate[Y]; +#endif //GRADIENT_NOT_REQUIRED not defined + + } else { + interpolation = 0.0; + pos_gradient = Coord::Zeros; + } + + return interpolation; + + } + + + double Voxel::interpolate(const Fibre::Strand::BasicSection& section) { + + double pos_interp = interpolate(section.position()); + double tan_norm = section.tangent().norm(); + + return pos_interp * tan_norm; + + } + + double Voxel::interpolate(const Fibre::Strand::BasicSection& section, Fibre::Strand::BasicSection& gradient) { + + Coord pos_interp_gradient; + Coord tan_norm_gradient; + + double pos_interp = interpolate(section.position(), pos_interp_gradient); + double tan_norm = section.tangent().norm(tan_norm_gradient); + + gradient.zero(); + + gradient.position() = tan_norm * pos_interp_gradient; + gradient.tangent() = pos_interp * tan_norm_gradient; + + return pos_interp * tan_norm; + + } + + + + +//------------------// +// Hessian versions // +//------------------// + + + + double Voxel::interpolate(const Coord& pos, Coord& gradient, Coord::Tensor& hessian) { + + + Coord disp = pos - this->centre(); + + Coord interpolate; + + double interpolation; + + if (disp.lower_bounded(-1.0) && disp.upper_bounded(1.0)) { + + for (size_t dim_i = 0; dim_i < 3; ++dim_i) + interpolate[dim_i] = MR::Math::pow4(disp[dim_i]) - 2.0 * MR::Math::pow2(disp[dim_i]) + 1; + + interpolation = interpolate[X] * interpolate[Y] * interpolate[Z]; + + Coord partial; + + partial[X] = (4.0 * MR::Math::pow3(disp[X]) - 4.0 * disp[X]); + partial[Y] = (4.0 * MR::Math::pow3(disp[Y]) - 4.0 * disp[Y]); + partial[Z] = (4.0 * MR::Math::pow3(disp[Z]) - 4.0 * disp[Z]); + + gradient[X] = partial[X] * interpolate[Y] * interpolate[Z]; + gradient[Y] = interpolate[X] * partial[Y] * interpolate[Z]; + gradient[Z] = interpolate[X] * interpolate[Y] * partial[Z]; + + hessian[X][X] = (12.0 * MR::Math::pow2(disp[X]) - 4.0) * interpolate[Y] * interpolate[Z]; + hessian[X][Y] = hessian[Y][X] = partial[X] * partial[Y] * interpolate[Z]; + hessian[X][Z] = hessian[Z][X] = partial[X] * interpolate[Y] * partial[Z]; + + hessian[Y][Y] = interpolate[X] * (12.0 * MR::Math::pow2(disp[Y]) - 4.0) * interpolate[Z]; + hessian[Y][Z] = hessian[Z][Y] = interpolate[X] * partial[Y] * partial[Z]; + + hessian[Z][Z] = interpolate[X] * interpolate[Y] * (12.0 * MR::Math::pow2(disp[Z]) - 4.0); + + + } else { + interpolation = 0.0; + gradient.zero(); + hessian.zero(); + } + + return interpolation; + + } + + + + + double Voxel::interpolate(const Fibre::Strand::BasicSection& section, Fibre::Strand::BasicSection& gradient, Fibre::Strand::BasicSection::Tensor& hessian) { + + Coord pos_interp_gradient; + Coord tan_norm_gradient; + Coord::Tensor interp_hessian; + Coord::Tensor norm_hessian; + + double pos_interp = interpolate(section.position(), pos_interp_gradient, interp_hessian); + double tan_norm = section.tangent().norm(tan_norm_gradient, norm_hessian); + + gradient.zero(); + + gradient.position() = tan_norm * pos_interp_gradient; + gradient.tangent() = pos_interp * tan_norm_gradient; + + + hessian.zero(); + + hessian.position(X).position() = tan_norm * interp_hessian[X]; + hessian.position(Y).position() = tan_norm * interp_hessian[Y]; + hessian.position(Z).position() = tan_norm * interp_hessian[Z]; + + hessian.position(X).tangent() = pos_interp_gradient[X] * tan_norm_gradient; + hessian.position(Y).tangent() = pos_interp_gradient[Y] * tan_norm_gradient; + hessian.position(Z).tangent() = pos_interp_gradient[Z] * tan_norm_gradient; + + hessian.tangent(X).tangent() = pos_interp * norm_hessian[X]; + hessian.tangent(Y).tangent() = pos_interp * norm_hessian[Y]; + hessian.tangent(Z).tangent() = pos_interp * norm_hessian[Z]; + + hessian.tangent(X).position() = pos_interp_gradient * tan_norm_gradient[X]; + hessian.tangent(Y).position() = pos_interp_gradient * tan_norm_gradient[Y]; + hessian.tangent(Z).position() = pos_interp_gradient * tan_norm_gradient[Z]; + + return pos_interp * tan_norm; + + } + + double Voxel::interpolate(const Fibre::Tractlet::Section& section, Fibre::Tractlet::Section& gradient, Fibre::Tractlet::Section::Tensor& hessian) { + + Fibre::Strand::BasicSection::Tensor strand_hessian; + + double interp = interpolate((const Fibre::Strand::BasicSection&)section, (Fibre::Strand::BasicSection&)gradient, strand_hessian); + + hessian = strand_hessian; + + return interp; + + } + + } + + } + + } + +} diff --git a/src/bts/image/expected/quartic/voxel.h b/src/bts/image/expected/quartic/voxel.h new file mode 100644 index 0000000..92b0776 --- /dev/null +++ b/src/bts/image/expected/quartic/voxel.h @@ -0,0 +1,115 @@ +/* + Copyright 2009 Brain Research Institute, Melbourne, Australia + + Created by Tom Close on 13/03/09. + + This file is part of Bayesian Tractlet Sampling (BTS). + + BTS is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + BTS is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with BTS. If not, see . + + */ + + +#ifndef __bts_image_expected_quartic_voxel_h__ +#define __bts_image_expected_quartic_voxel_h__ + + +#include "bts/common.h" + +#include "bts/triple.h" + +#include "bts/image/expected/buffer.h" +#include "bts/image/observed/buffer.h" +#include "bts/image/expected/voxel.h" +#include "bts/image/expected/direction.h" + +#include "bts/diffusion/model.h" + + +namespace BTS { + + namespace Image { + + namespace Expected { + + namespace Quartic { + + class Voxel : public Expected::Voxel { + + public: + + typedef Quartic::Buffer Buffer; + + protected: + + Buffer* image; + + public: + + Voxel() {} + + + Voxel(Buffer& buffer, const Index& coord); + + //! doesn't copy across the parent image. + Voxel(const Voxel& v) + : Expected::Voxel(v), image(v.image) {} + + //! doesn't copy across the parent image. + Voxel& operator= (const Voxel& v) + { Expected::Voxel::operator=(v); image = v.image; return *this; } + + ~Voxel() {} + + + void set_image(Buffer* image) + { this->image = image; } + + double interpolate(const Fibre::Strand::BasicSection& section); + + /*!The Strand::Section and Tractlet::Section interpolation methods are not strictly necessary as they copy virtual functions from the Expected::Voxel base class. + However they will allow the interpolate functions to be inlined and since this is an inner loop it could be critical.*/ + double interpolate(const Fibre::Strand::BasicSection& section, Fibre::Strand::BasicSection& gradient); + + + double interpolate(const Fibre::Strand::BasicSection& section, Fibre::Strand::BasicSection& gradient, Fibre::Strand::BasicSection::Tensor& hessian); + + + double interpolate(const Fibre::Tractlet::Section& section, Fibre::Tractlet::Section& gradient) + { return interpolate((const Fibre::Strand::BasicSection&)section, (Fibre::Strand::BasicSection&)gradient); } + + + double interpolate(const Fibre::Tractlet::Section& section, Fibre::Tractlet::Section& gradient, Fibre::Tractlet::Section::Tensor& hessian); + + // protected: + + double interpolate(const Coord& pos); + + double interpolate(const Coord& pos, Coord& gradient); + + double interpolate(const Coord& triple, Coord& gradient, Coord::Tensor& hessian); + + + }; + + } + + } + + } + +} + + +#endif diff --git a/src/bts/image/expected/realistic/buffer.cpp b/src/bts/image/expected/realistic/buffer.cpp new file mode 100644 index 0000000..291d39f --- /dev/null +++ b/src/bts/image/expected/realistic/buffer.cpp @@ -0,0 +1,82 @@ +/* + Copyright 2009 Brain Research Institute, Melbourne, Australia + + Created by Tom Close on 13/03/09. + + This file is part of Bayesian Tractlet Sampling (BTS). + + BTS is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + BTS is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with BTS. If not, see . + + */ + +#include "bts/image/expected/realistic/buffer.h" +#include "bts/image/expected/realistic/voxel.h" + +#include "bts/fibre/strand/tensor.h" +#include "bts/fibre/tractlet/tensor.h" + +#include "bts/image/inline_functions.h" +#include "bts/diffusion/inline_functions.h" + + +#define LOOP(op) \ +for (size_t z = 0; z < this->dim(Z); z++) { \ + for (size_t y = 0; y < this->dim(Y); y++) { \ + for (size_t x = 0; x < this->dim(X); x++) { \ + op \ + } \ + } \ +} + +namespace BTS { + + namespace Image { + + namespace Expected { + + namespace Realistic { + + const std::string Buffer::SHORT_NAME = "realistic"; + + + Buffer::Buffer( const Triple& dimensions, + const Triple& voxel_sizes, + const Diffusion::Model& diffusion_model, + size_t num_sections, + size_t num_strands, + double extent, + const Triple& corner_offset, + bool enforce_bounds) + : Buffer_tpl(dimensions, voxel_sizes, diffusion_model, num_sections, num_strands, extent, corner_offset, enforce_bounds) + { name_init(); } + + + Buffer::Buffer(const Buffer& buffer) + : Buffer_tpl(buffer) + { name_init(); } + + + std::ostream& operator<< (std::ostream& stream, const Buffer& buffer) + { return buffer.to_stream(stream); } + + } + + } + + + } + +} + +#undef LOOP diff --git a/src/bts/image/expected/realistic/buffer.h b/src/bts/image/expected/realistic/buffer.h new file mode 100644 index 0000000..ceb5c33 --- /dev/null +++ b/src/bts/image/expected/realistic/buffer.h @@ -0,0 +1,85 @@ +/* + Copyright 2009 Brain Research Institute, Melbourne, Australia + + Created by Tom Close on 13/03/09. + + This file is part of Bayesian Tractlet Sampling (BTS). + + BTS is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + BTS is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with BTS. If not, see . + + */ + +#include "bts/image/expected/realistic/voxel.h" + +#ifndef __bts_image_expected_realistic_buffer_h__ +#define __bts_image_expected_realistic_buffer_h__ + +#include "bts/image/expected/buffer.h" +#include "bts/image/expected/buffer_tpl.h" + + +namespace BTS { + + namespace Image { + + namespace Expected { + + namespace Realistic { + + class Buffer : public Expected::Buffer, public Expected::Buffer_tpl { + + //Public static constants + public: + + const static std::string SHORT_NAME; + + public: + + Buffer() : Buffer_tpl(this) {} + + Buffer( const Triple& dimensions, + const Triple& voxel_sizes, + const Diffusion::Model& diffusion_model, + size_t num_sections = NUM_LENGTH_SECTIONS_DEFAULT, + size_t num_strands = NUM_WIDTH_SECTIONS_DEFAULT, + double extent = INTERP_EXTENT_DEFAULT, + const Triple& corner_offset = Triple (), + bool enforce_bounds = true + ); + + + Buffer(const Buffer& buffer); + + + ~Buffer() {} + + + EXPECTED_BUFFER_FUNCTIONS;; + + }; + + + + std::ostream& operator<< (std::ostream& stream, const Buffer& buffer); + + } + + } + + } + +} + + +#endif diff --git a/src/bts/image/expected/realistic/voxel.cpp b/src/bts/image/expected/realistic/voxel.cpp new file mode 100644 index 0000000..bd9390e --- /dev/null +++ b/src/bts/image/expected/realistic/voxel.cpp @@ -0,0 +1,89 @@ +/* + Copyright 2010 Brain Research Institute, Melbourne, Australia + + Written by Thomas G Close on May 19, 2010. + + This file is part of Bayesian Tractlet Sampling (BTS). + + BTS is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + BTS is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with BTS. If not, see . + +*/ + +#include "bts/image/expected/realistic/voxel.h" +#include "bts/image/expected/realistic/buffer.h" + +#include "bts/image/inline_functions.h" +#include "bts/diffusion/inline_functions.h" + +namespace BTS { + + namespace Image { + + namespace Expected { + + namespace Realistic { + + Voxel::Voxel(Buffer& buffer, const Index& coord) + : Expected::Voxel(buffer, coord, buffer.diffusion_model), image(&buffer) {} + + + double Expected::Realistic::Voxel::interpolate(const Coord& pos) { + + Coord disp = pos - this->centre(); + + Coord interpolate; + + double interpolation; + + //Truncate the sinc function at a consitent distance from the voxel centre. + if (disp.lower_bounded(-image->get_extent()) && disp.upper_bounded(image->get_extent())) { + + //Do X and Y as a Sinc + for (size_t dim_i = 0; dim_i < 2; ++dim_i) { + + if (disp[dim_i] == 0.0) + interpolate[dim_i] = 1.0; + else + interpolate[dim_i] = MR::Math::sin(M_PI * disp[dim_i]) / (M_PI * disp[dim_i]); + } + + if ((disp[Z] < 1) && (disp[Z] > -1)) + interpolate[Z] = (MR::Math::pow4(disp[Z]) - 2.0 * MR::Math::pow2(disp[Z]) + 1); + else + interpolate[Z] = 0.0; + + interpolation = interpolate[X] * interpolate[Y] * interpolate[Z]; + + } else + interpolation = 0.0; + + return interpolation; + + } + + + double Expected::Realistic::Voxel::interpolate(const Coord& pos, Coord& pos_gradient) { + + throw Exception ("Expected::Realistic::Voxel::interpolate(const Coord&, Coord&) not implemented yet."); + + } + + } + + } + + } + +} + diff --git a/src/bts/image/expected/realistic/voxel.h b/src/bts/image/expected/realistic/voxel.h new file mode 100644 index 0000000..6665d03 --- /dev/null +++ b/src/bts/image/expected/realistic/voxel.h @@ -0,0 +1,94 @@ +/* + Copyright 2009 Brain Research Institute, Melbourne, Australia + + Created by Tom Close on 13/03/09. + + This file is part of Bayesian Tractlet Sampling (BTS). + + BTS is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + BTS is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with BTS. If not, see . + + */ + + +#ifndef __bts_image_expected_realistic_voxel_h__ +#define __bts_image_expected_realistic_voxel_h__ + +#include "bts/common.h" + +#include "bts/triple.h" + +#include "bts/image/expected/buffer.h" +#include "bts/image/observed/buffer.h" +#include "bts/image/expected/voxel.h" +#include "bts/image/expected/direction.h" + +#include "bts/diffusion/model.h" + + + +namespace BTS { + + namespace Image { + + namespace Expected { + + namespace Realistic { + + class Voxel : public Expected::Voxel { + + public: + + typedef Realistic::Buffer Buffer; + + protected: + + Buffer* image; + + public: + + Voxel() {} + + Voxel(Buffer& buffer, const Index& coord); + + Voxel(const Voxel& voxel) + : Expected::Voxel(voxel), image(voxel.image) {} + + Voxel& operator= (const Voxel& v) + { Expected::Voxel::operator=(v); image = v.image; return *this; } + + ~Voxel() {} + + + // protected: + + double interpolate(const Coord& pos); + + double interpolate(const Coord& pos, Coord& gradient); + + double interpolate(const Coord& triple, Coord& gradient, Coord::Tensor& hessian) + { throw Exception ("Gradient is not defined for Top-hat interpolation."); } + + + }; + + } + + } + + } + +} + + +#endif diff --git a/src/bts/image/expected/reverse_sqrt/buffer.cpp b/src/bts/image/expected/reverse_sqrt/buffer.cpp new file mode 100644 index 0000000..cbbadd7 --- /dev/null +++ b/src/bts/image/expected/reverse_sqrt/buffer.cpp @@ -0,0 +1,82 @@ +/* + Copyright 2009 Brain Research Institute, Melbourne, Australia + + Created by Tom Close on 13/03/09. + + This file is part of Bayesian Tractlet Sampling (BTS). + + BTS is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + BTS is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with BTS. If not, see . + + */ + +#include "bts/image/expected/reverse_sqrt/buffer.h" +#include "bts/image/expected/reverse_sqrt/voxel.h" + +#include "bts/fibre/strand/tensor.h" +#include "bts/fibre/tractlet/tensor.h" + +#include "bts/image/inline_functions.h" +#include "bts/diffusion/inline_functions.h" + + +#define LOOP(op) \ +for (size_t z = 0; z < this->dim(Z); z++) { \ + for (size_t y = 0; y < this->dim(Y); y++) { \ + for (size_t x = 0; x < this->dim(X); x++) { \ + op \ + } \ + } \ +} + +namespace BTS { + + namespace Image { + + namespace Expected { + + namespace ReverseSqrt { + + const std::string Buffer::SHORT_NAME = "reverse_sqrt"; + + + Buffer::Buffer( const Triple& dimensions, + const Triple& voxel_sizes, + const Diffusion::Model& diffusion_model, + size_t num_sections, + size_t num_strands, + double extent, + const Triple& corner_offset, + bool enforce_bounds) + : Buffer_tpl(dimensions, voxel_sizes, diffusion_model, num_sections, num_strands, extent, corner_offset, enforce_bounds) + { name_init(); } + + + Buffer::Buffer(const Buffer& buffer) + : Buffer_tpl(buffer) + { name_init(); } + + + std::ostream& operator<< (std::ostream& stream, const Buffer& buffer) + { return buffer.to_stream(stream); } + + } + + } + + + } + +} + +#undef LOOP diff --git a/src/bts/image/expected/reverse_sqrt/buffer.h b/src/bts/image/expected/reverse_sqrt/buffer.h new file mode 100644 index 0000000..d14597a --- /dev/null +++ b/src/bts/image/expected/reverse_sqrt/buffer.h @@ -0,0 +1,85 @@ +/* + Copyright 2009 Brain Research Institute, Melbourne, Australia + + Created by Tom Close on 13/03/09. + + This file is part of Bayesian Tractlet Sampling (BTS). + + BTS is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + BTS is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with BTS. If not, see . + + */ + +#include "bts/image/expected/reverse_sqrt/voxel.h" + +#ifndef __bts_image_expected_reversesqrt_buffer_h__ +#define __bts_image_expected_reversesqrt_buffer_h__ + +#include "bts/image/expected/buffer.h" +#include "bts/image/expected/buffer_tpl.h" + + +namespace BTS { + + namespace Image { + + namespace Expected { + + namespace ReverseSqrt { + + class Buffer : public Expected::Buffer, public Expected::Buffer_tpl { + + //Public static constants + public: + + const static std::string SHORT_NAME; + + public: + + Buffer() : Buffer_tpl(this) {} + + Buffer( const Triple& dimensions, + const Triple& voxel_sizes, + const Diffusion::Model& diffusion_model, + size_t num_sections = NUM_LENGTH_SECTIONS_DEFAULT, + size_t num_strands = NUM_WIDTH_SECTIONS_DEFAULT, + double extent = INTERP_EXTENT_DEFAULT, + const Triple& corner_offset = Triple (), + bool enforce_bounds = true + ); + + + Buffer(const Buffer& buffer); + + + ~Buffer() {} + + + EXPECTED_BUFFER_FUNCTIONS; + + }; + + + + std::ostream& operator<< (std::ostream& stream, const Buffer& buffer); + + } + + } + + } + +} + + +#endif diff --git a/src/bts/image/expected/reverse_sqrt/voxel.cpp b/src/bts/image/expected/reverse_sqrt/voxel.cpp new file mode 100644 index 0000000..0c1d7f3 --- /dev/null +++ b/src/bts/image/expected/reverse_sqrt/voxel.cpp @@ -0,0 +1,73 @@ +/* + Copyright 2010 Brain Research Institute, Melbourne, Australia + + Written by Thomas G Close on May 19, 2010. + + This file is part of Bayesian Tractlet Sampling (BTS). + + BTS is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + BTS is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with BTS. If not, see . + +*/ + +#include "bts/image/expected/reverse_sqrt/voxel.h" +#include "bts/image/expected/reverse_sqrt/buffer.h" + +#include "bts/image/inline_functions.h" +#include "bts/diffusion/inline_functions.h" + +namespace BTS { + + namespace Image { + + namespace Expected { + + namespace ReverseSqrt { + + Voxel::Voxel(Buffer& buffer, const Index& coord) + : Expected::Voxel(buffer, coord, buffer.diffusion_model), image(&buffer) {} + + + double Expected::ReverseSqrt::Voxel::interpolate(const Coord& pos) { + + Coord disp = pos - centre(); + + double scalar = 1.0; + + if (disp.upper_bounded(1.0) && disp.lower_bounded(-1.0)) { + + for (size_t dim_i = 0; dim_i < 3; dim_i++) + scalar *= MR::Math::sqrt(1.0 - MR::Math::abs(disp[dim_i]));// * 3.0 / 2.0; + + } else + scalar = 0.0; + + return scalar; + + } + + + double Expected::ReverseSqrt::Voxel::interpolate(const Coord& pos, Coord& pos_gradient) { + + throw Exception ("Expected::ReverseSqrt::Voxel::interpolate(const Coord&, Coord&) not implemented yet."); + + } + + } + + } + + } + +} + diff --git a/src/bts/image/expected/reverse_sqrt/voxel.h b/src/bts/image/expected/reverse_sqrt/voxel.h new file mode 100644 index 0000000..5e499c6 --- /dev/null +++ b/src/bts/image/expected/reverse_sqrt/voxel.h @@ -0,0 +1,94 @@ +/* + Copyright 2009 Brain Research Institute, Melbourne, Australia + + Created by Tom Close on 13/03/09. + + This file is part of Bayesian Tractlet Sampling (BTS). + + BTS is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + BTS is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with BTS. If not, see . + + */ + + +#ifndef __bts_image_expected_reversesqrt_voxel_h__ +#define __bts_image_expected_reversesqrt_voxel_h__ + +#include "bts/common.h" + +#include "bts/triple.h" + +#include "bts/image/expected/buffer.h" +#include "bts/image/observed/buffer.h" +#include "bts/image/expected/voxel.h" +#include "bts/image/expected/direction.h" + +#include "bts/diffusion/model.h" + + + +namespace BTS { + + namespace Image { + + namespace Expected { + + namespace ReverseSqrt { + + class Voxel : public Expected::Voxel { + + public: + + typedef ReverseSqrt::Buffer Buffer; + + protected: + + Buffer* image; + + public: + + Voxel() {} + + Voxel(Buffer& buffer, const Index& coord); + + Voxel(const Voxel& voxel) + : Expected::Voxel(voxel), image(voxel.image) {} + + Voxel& operator= (const Voxel& v) + { Expected::Voxel::operator=(v); image = v.image; return *this; } + + ~Voxel() {} + + + // protected: + + double interpolate(const Coord& pos); + + double interpolate(const Coord& pos, Coord& gradient); + + double interpolate(const Coord& triple, Coord& gradient, Coord::Tensor& hessian) + { throw Exception ("Gradient is not defined for Top-hat interpolation."); } + + + }; + + } + + } + + } + +} + + +#endif diff --git a/src/bts/image/expected/sinc/buffer.cpp b/src/bts/image/expected/sinc/buffer.cpp new file mode 100644 index 0000000..9bfe7e6 --- /dev/null +++ b/src/bts/image/expected/sinc/buffer.cpp @@ -0,0 +1,82 @@ +/* + Copyright 2009 Brain Research Institute, Melbourne, Australia + + Created by Tom Close on 13/03/09. + + This file is part of Bayesian Tractlet Sampling (BTS). + + BTS is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + BTS is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with BTS. If not, see . + + */ + +#include "bts/image/expected/sinc/buffer.h" +#include "bts/image/expected/sinc/voxel.h" + +#include "bts/fibre/strand/tensor.h" +#include "bts/fibre/tractlet/tensor.h" + +#include "bts/image/inline_functions.h" +#include "bts/diffusion/inline_functions.h" + + +#define LOOP(op) \ +for (size_t z = 0; z < this->dim(Z); z++) { \ + for (size_t y = 0; y < this->dim(Y); y++) { \ + for (size_t x = 0; x < this->dim(X); x++) { \ + op \ + } \ + } \ +} + +namespace BTS { + + namespace Image { + + namespace Expected { + + namespace Sinc { + + + const std::string Buffer::SHORT_NAME = "sinc"; + + Buffer::Buffer( const Triple& dimensions, + const Triple& voxel_sizes, + const Diffusion::Model& diffusion_model, + size_t num_sections, + size_t num_strands, + double extent, + const Triple& corner_offset, + bool enforce_bounds) + + : Buffer_tpl(dimensions, voxel_sizes, diffusion_model, num_sections, num_strands, extent, corner_offset, enforce_bounds) + { name_init(); } + + + Buffer::Buffer(const Buffer& buffer) + : Buffer_tpl(buffer) + { name_init(); } + + std::ostream& operator<< (std::ostream& stream, const Buffer& buffer) + { return buffer.to_stream(stream); } + + + } + + } + + } + +} + +#undef LOOP diff --git a/src/bts/image/expected/sinc/buffer.h b/src/bts/image/expected/sinc/buffer.h new file mode 100644 index 0000000..71d7fc5 --- /dev/null +++ b/src/bts/image/expected/sinc/buffer.h @@ -0,0 +1,85 @@ +/* + Copyright 2009 Brain Research Institute, Melbourne, Australia + + Created by Tom Close on 13/03/09. + + This file is part of Bayesian Tractlet Sampling (BTS). + + BTS is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + BTS is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with BTS. If not, see . + + */ + +#include "bts/image/expected/sinc/voxel.h" + +#ifndef __bts_image_expected_sinc_buffer_h__ +#define __bts_image_expected_sinc_buffer_h__ + +#include "bts/image/expected/buffer.h" +#include "bts/image/expected/buffer_tpl.h" + + +namespace BTS { + + namespace Image { + + namespace Expected { + + namespace Sinc { + + class Buffer : public Expected::Buffer, public Expected::Buffer_tpl { + + //Public static constants + public: + + const static std::string SHORT_NAME; + + public: + + Buffer() : Buffer_tpl(this) {} + + Buffer( const Triple& dimensions, + const Triple& voxel_sizes, + const Diffusion::Model& diffusion_model, + size_t num_sections = Expected::Buffer::NUM_LENGTH_SECTIONS_DEFAULT, + size_t num_strands = Expected::Buffer::NUM_WIDTH_SECTIONS_DEFAULT, + double extent = Expected::Buffer::INTERP_EXTENT_DEFAULT, + const Triple& corner_offset = Triple (), + bool enforce_bounds = true + ); + + + Buffer(const Buffer& buffer); + + + ~Buffer() {} + + EXPECTED_BUFFER_FUNCTIONS; + + }; + + + + std::ostream& operator<< (std::ostream& stream, const Buffer& buffer); + + + } + + } + + } + +} + + +#endif diff --git a/src/bts/image/expected/sinc/voxel.cpp b/src/bts/image/expected/sinc/voxel.cpp new file mode 100644 index 0000000..bab1de9 --- /dev/null +++ b/src/bts/image/expected/sinc/voxel.cpp @@ -0,0 +1,83 @@ +/* + Copyright 2009 Brain Research Institute, Melbourne, Australia + + Created by Tom Close on 13/03/09. + + This file is part of Bayesian Tractlet Sampling (BTS). + + BTS is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + BTS is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with BTS. If not, see . + + */ + +#include "bts/image/expected/sinc/voxel.h" +#include "bts/image/expected/sinc/buffer.h" + + +#include "bts/fibre/strand/basic_section/tensor.h" +#include "bts/fibre/tractlet/section/tensor.h" + +#include "bts/image/inline_functions.h" +#include "bts/diffusion/inline_functions.h" + + +namespace BTS { + + namespace Image { + + namespace Expected { + + namespace Sinc { + + + Voxel::Voxel(Buffer& buffer, const Index& coord) + : Expected::Voxel(buffer, coord, buffer.diffusion_model), image(&buffer) {} + + + double Voxel::interpolate(const Coord& pos) { + + Coord disp = pos - centre(); + + Coord interpolate; + + double interpolation; + + //Truncate the sinc function at a consitent distance from the voxel centre. + if (disp.lower_bounded(-image->get_extent()) && disp.upper_bounded(image->get_extent())) { + + for (size_t dim_i = 0; dim_i < 3; ++dim_i) { + + if (disp[dim_i] == 0.0) + interpolate[dim_i] = 1.0; + else + interpolate[dim_i] = MR::Math::sin(M_PI * disp[dim_i]) / (M_PI * disp[dim_i]); + } + + interpolation = interpolate[X] * interpolate[Y] * interpolate[Z]; + + } else + interpolation = 0.0; + + + return interpolation; + + } + + + } + + } + + } + +} diff --git a/src/bts/image/expected/sinc/voxel.h b/src/bts/image/expected/sinc/voxel.h new file mode 100644 index 0000000..053b779 --- /dev/null +++ b/src/bts/image/expected/sinc/voxel.h @@ -0,0 +1,100 @@ +/* + Copyright 2009 Brain Research Institute, Melbourne, Australia + + Created by Tom Close on 13/03/09. + + This file is part of Bayesian Tractlet Sampling (BTS). + + BTS is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + BTS is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with BTS. If not, see . + + */ + + +#ifndef __bts_image_expected_sinc_voxel_h__ +#define __bts_image_expected_sinc_voxel_h__ + + +#include "bts/common.h" + +#include "bts/triple.h" + +#include "bts/image/expected/buffer.h" +#include "bts/image/observed/buffer.h" +#include "bts/image/expected/voxel.h" +#include "bts/image/expected/direction.h" + +#include "bts/diffusion/model.h" + + +namespace BTS { + + namespace Image { + + namespace Expected { + + namespace Sinc { + + class Voxel : public Expected::Voxel { + + public: + + typedef Sinc::Buffer Buffer; + + protected: + + Buffer* image; + + public: + + Voxel() {} + + + Voxel(Buffer& buffer, const Index& coord); + + //! doesn't copy across the parent image. + Voxel(const Voxel& v) + : Expected::Voxel(v), image(v.image) {} + + //! doesn't copy across the parent image. + Voxel& operator= (const Voxel& v) + { Expected::Voxel::operator=(v); image = v.image; return *this; } + + ~Voxel() {} + + void set_image(Buffer* image) + { this->image = image; } + + +// protected: + + double interpolate(const Coord& pos); + + double interpolate(const Coord& pos, Coord& gradient) + { throw Exception ("Not implemented yet."); } + + double interpolate(const Coord& triple, Coord& gradient, Coord::Tensor& hessian) + { throw Exception ("Not implemented yet."); } + + }; + + } + + } + + } + +} + + +#endif diff --git a/src/bts/image/expected/top_hat/buffer.cpp b/src/bts/image/expected/top_hat/buffer.cpp new file mode 100644 index 0000000..dd17334 --- /dev/null +++ b/src/bts/image/expected/top_hat/buffer.cpp @@ -0,0 +1,81 @@ +/* + Copyright 2009 Brain Research Institute, Melbourne, Australia + + Created by Tom Close on 13/03/09. + + This file is part of Bayesian Tractlet Sampling (BTS). + + BTS is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + BTS is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with BTS. If not, see . + + */ + +#include "bts/image/expected/top_hat/buffer.h" +#include "bts/image/expected/top_hat/voxel.h" + +#include "bts/fibre/strand/tensor.h" +#include "bts/fibre/tractlet/tensor.h" + +#include "bts/image/inline_functions.h" +#include "bts/diffusion/inline_functions.h" + + +#define LOOP(op) \ +for (size_t z = 0; z < this->dim(Z); z++) { \ + for (size_t y = 0; y < this->dim(Y); y++) { \ + for (size_t x = 0; x < this->dim(X); x++) { \ + op \ + } \ + } \ +} + +namespace BTS { + + namespace Image { + + namespace Expected { + + namespace TopHat { + + + const std::string Buffer::SHORT_NAME = "top_hat"; + + + Buffer::Buffer( const Triple& dimensions, + const Triple& voxel_sizes, + const Diffusion::Model& diffusion_model, + size_t num_sections, + size_t num_strands, + double extent, + const Triple& corner_offset, + bool enforce_bounds) + : Buffer_tpl(dimensions, voxel_sizes, diffusion_model, num_sections, num_strands, extent, corner_offset, enforce_bounds) + { name_init(); } + + + Buffer::Buffer(const Buffer& buffer) + : Buffer_tpl(buffer) + { name_init(); } + + + std::ostream& operator<< (std::ostream& stream, const Buffer& buffer) + { return buffer.to_stream(stream); } + } + + } + + } + +} + +#undef LOOP diff --git a/src/bts/image/expected/top_hat/buffer.h b/src/bts/image/expected/top_hat/buffer.h new file mode 100644 index 0000000..079d0b1 --- /dev/null +++ b/src/bts/image/expected/top_hat/buffer.h @@ -0,0 +1,84 @@ +/* + Copyright 2009 Brain Research Institute, Melbourne, Australia + + Created by Tom Close on 13/03/09. + + This file is part of Bayesian Tractlet Sampling (BTS). + + BTS is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + BTS is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with BTS. If not, see . + + */ + +#include "bts/image/expected/top_hat/voxel.h" + +#ifndef __bts_image_expected_tophat_buffer_h__ +#define __bts_image_expected_tophat_buffer_h__ + +#include "bts/image/expected/buffer.h" +#include "bts/image/expected/buffer_tpl.h" + + +namespace BTS { + + namespace Image { + + namespace Expected { + + namespace TopHat { + + class Buffer : public Expected::Buffer, public Expected::Buffer_tpl { + + //Public static constants + public: + + const static std::string SHORT_NAME; + + public: + + Buffer() : Buffer_tpl(this) {} + + Buffer( const Triple& dimensions, + const Triple& voxel_sizes, + const Diffusion::Model& diffusion_model, + size_t num_sections = NUM_LENGTH_SECTIONS_DEFAULT, + size_t num_strands = NUM_WIDTH_SECTIONS_DEFAULT, + double extent = INTERP_EXTENT_DEFAULT, + const Triple& corner_offset = Triple (), + bool enforce_bounds = true + ); + + + Buffer(const Buffer& buffer); + + + ~Buffer() {} + + + EXPECTED_BUFFER_FUNCTIONS; + + }; + + + std::ostream& operator<< (std::ostream& stream, const Buffer& buffer); + + } + + } + + } + +} + + +#endif diff --git a/src/bts/image/expected/top_hat/voxel.cpp b/src/bts/image/expected/top_hat/voxel.cpp new file mode 100644 index 0000000..623adc9 --- /dev/null +++ b/src/bts/image/expected/top_hat/voxel.cpp @@ -0,0 +1,62 @@ +/* + Copyright 2010 Brain Research Institute, Melbourne, Australia + + Written by Thomas G Close on May 19, 2010. + + This file is part of Bayesian Tractlet Sampling (BTS). + + BTS is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + BTS is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with BTS. If not, see . + +*/ + +#include "bts/image/expected/top_hat/voxel.h" +#include "bts/image/expected/top_hat/buffer.h" + +#include "bts/image/inline_functions.h" +#include "bts/diffusion/inline_functions.h" + +namespace BTS { + + namespace Image { + + namespace Expected { + + namespace TopHat { + + Voxel::Voxel(Buffer& buffer, const Index& index) + : Expected::Voxel(buffer, index, buffer.diffusion_model), image(&buffer) {} + + double Voxel::interpolate(const Coord& pos) { + + Coord disp = pos - centre(); + + double scalar; + + if (disp.upper_bounded(0.5) && disp.lower_bounded(-0.5)) + scalar = 1.0; + else + scalar = 0.0; + + return scalar; + + } + + } + + } + + } + +} + diff --git a/src/bts/image/expected/top_hat/voxel.h b/src/bts/image/expected/top_hat/voxel.h new file mode 100644 index 0000000..35d248c --- /dev/null +++ b/src/bts/image/expected/top_hat/voxel.h @@ -0,0 +1,98 @@ +/* + Copyright 2009 Brain Research Institute, Melbourne, Australia + + Created by Tom Close on 13/03/09. + + This file is part of Bayesian Tractlet Sampling (BTS). + + BTS is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + BTS is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with BTS. If not, see . + + */ + + +#ifndef __bts_image_expected_tophat_voxel_h__ +#define __bts_image_expected_tophat_voxel_h__ + +#include "bts/common.h" + +#include "bts/triple.h" + +#include "bts/image/expected/buffer.h" +#include "bts/image/observed/buffer.h" +#include "bts/image/expected/voxel.h" +#include "bts/image/expected/direction.h" + +#include "bts/diffusion/model.h" + + + +namespace BTS { + + namespace Image { + + namespace Expected { + + namespace TopHat { + + class Voxel : public Expected::Voxel { + + public: + + //TODO: Use this typedef to try to move set_image out of derived voxel classes and into Expected::Voxel class. + typedef TopHat::Buffer Buffer; + + protected: + + Buffer* image; + + public: + + Voxel() {} + + Voxel(Buffer& buffer, const Index& index); + + Voxel(const Voxel& voxel) + : Expected::Voxel(voxel), image(voxel.image) {} + + Voxel& operator= (const Voxel& v) + { Expected::Voxel::operator=(v); image = v.image; return *this; } + + ~Voxel() {} + + void set_image(Buffer* image) + { this->image = image; } + + + // protected: + + double interpolate(const Coord& pos); + + double interpolate(const Coord& pos, Coord& gradient) + { throw Exception ("Gradient is not defined for Top-hat interpolation."); } + + double interpolate(const Coord& triple, Coord& gradient, Coord::Tensor& hessian) + { throw Exception ("Gradient is not defined for Top-hat interpolation."); } + + }; + + } + + } + + } + +} + + +#endif diff --git a/src/bts/image/expected/trilinear/buffer.cpp b/src/bts/image/expected/trilinear/buffer.cpp new file mode 100644 index 0000000..4d58a0a --- /dev/null +++ b/src/bts/image/expected/trilinear/buffer.cpp @@ -0,0 +1,83 @@ +/* + Copyright 2009 Brain Research Institute, Melbourne, Australia + + Created by Tom Close on 13/03/09. + + This file is part of Bayesian Tractlet Sampling (BTS). + + BTS is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + BTS is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with BTS. If not, see . + + */ + +#include "bts/image/expected/trilinear/buffer.h" +#include "bts/image/expected/trilinear/voxel.h" + +#include "bts/fibre/strand/tensor.h" +#include "bts/fibre/tractlet/tensor.h" + +#include "bts/image/inline_functions.h" +#include "bts/diffusion/inline_functions.h" + + +#define LOOP(op) \ +for (size_t z = 0; z < this->dim(Z); z++) { \ + for (size_t y = 0; y < this->dim(Y); y++) { \ + for (size_t x = 0; x < this->dim(X); x++) { \ + op \ + } \ + } \ +} + +namespace BTS { + + namespace Image { + + namespace Expected { + + namespace Trilinear { + + const std::string Buffer::SHORT_NAME = "trilinear"; + + + + Buffer::Buffer( const Triple& dimensions, + const Triple& voxel_sizes, + const Diffusion::Model& diffusion_model, + size_t num_sections, + size_t num_strands, + double extent, + const Triple& corner_offset, + bool enforce_bounds) + : Buffer_tpl(dimensions, voxel_sizes, diffusion_model, num_sections, num_strands, extent, corner_offset, enforce_bounds) + { name_init(); } + + + Buffer::Buffer(const Buffer& buffer) + : Buffer_tpl(buffer) + { name_init(); } + + + std::ostream& operator<< (std::ostream& stream, const Buffer& buffer) + { return buffer.to_stream(stream); } + + } + + } + + + } + +} + +#undef LOOP diff --git a/src/bts/image/expected/trilinear/buffer.h b/src/bts/image/expected/trilinear/buffer.h new file mode 100644 index 0000000..b1a18b0 --- /dev/null +++ b/src/bts/image/expected/trilinear/buffer.h @@ -0,0 +1,85 @@ +/* + Copyright 2009 Brain Research Institute, Melbourne, Australia + + Created by Tom Close on 13/03/09. + + This file is part of Bayesian Tractlet Sampling (BTS). + + BTS is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + BTS is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with BTS. If not, see . + + */ + +#include "bts/image/expected/trilinear/voxel.h" + +#ifndef __bts_image_expected_trilinear_buffer_h__ +#define __bts_image_expected_trilinear_buffer_h__ + +#include "bts/image/expected/buffer.h" +#include "bts/image/expected/buffer_tpl.h" + + +namespace BTS { + + namespace Image { + + namespace Expected { + + namespace Trilinear { + + class Buffer : public Expected::Buffer, public Expected::Buffer_tpl { + + //Public static constants + public: + + const static std::string SHORT_NAME; + + public: + + Buffer() : Buffer_tpl(this) {} + + Buffer( const Triple& dimensions, + const Triple& voxel_sizes, + const Diffusion::Model& diffusion_model, + size_t num_sections = NUM_LENGTH_SECTIONS_DEFAULT, + size_t num_strands = NUM_WIDTH_SECTIONS_DEFAULT, + double extent = INTERP_EXTENT_DEFAULT, + const Triple& corner_offset = Triple (), + bool enforce_bounds = true + ); + + + Buffer(const Buffer& buffer); + + + ~Buffer() {} + + + EXPECTED_BUFFER_FUNCTIONS; + + }; + + + + std::ostream& operator<< (std::ostream& stream, const Buffer& buffer); + + } + + } + + } + +} + + +#endif diff --git a/src/bts/image/expected/trilinear/voxel.cpp b/src/bts/image/expected/trilinear/voxel.cpp new file mode 100644 index 0000000..30bed11 --- /dev/null +++ b/src/bts/image/expected/trilinear/voxel.cpp @@ -0,0 +1,105 @@ +/* + Copyright 2010 Brain Research Institute, Melbourne, Australia + + Written by Thomas G Close on May 19, 2010. + + This file is part of Bayesian Tractlet Sampling (BTS). + + BTS is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + BTS is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with BTS. If not, see . + +*/ + +#include "bts/image/expected/trilinear/voxel.h" +#include "bts/image/expected/trilinear/buffer.h" + +#include "bts/image/inline_functions.h" +#include "bts/diffusion/inline_functions.h" + +namespace BTS { + + namespace Image { + + namespace Expected { + + namespace Trilinear { + + Voxel::Voxel(Buffer& buffer, const Index& coord) + : Expected::Voxel(buffer, coord, buffer.diffusion_model), image(&buffer) {} + + + double Expected::Trilinear::Voxel::interpolate(const Coord& pos) { + + Coord disp = pos - centre(); + Coord interpolate = Coord::Ones - disp.abs(); + + double scalar; + + if (interpolate.non_negative()) { + + scalar = interpolate[X] * interpolate[Y] * interpolate[Z]; + + } else { + + scalar = 0.0; + } + + return scalar; + + } + + + double Expected::Trilinear::Voxel::interpolate(const Coord& pos, Coord& pos_gradient) { + + Coord disp = pos - centre(); + + Coord interpolate = Coord::Ones - disp.abs(); + +#ifndef GRADIENT_NOT_REQUIRED + Coord disp_sign = disp.sign(); +#endif + + double scalar; + + if (interpolate.non_negative()) { + + scalar = interpolate[X] * interpolate[Y] * interpolate[Z]; + +#ifndef GRADIENT_NOT_REQUIRED + pos_gradient[X] = - disp_sign[X] * interpolate[Y] * interpolate[Z]; + pos_gradient[Y] = - disp_sign[Y] * interpolate[X] * interpolate[Z]; + pos_gradient[Z] = - disp_sign[Z] * interpolate[X] * interpolate[Y]; +#endif + + } else { + + scalar = 0.0; + +#ifndef GRADIENT_NOT_REQUIRED + pos_gradient.zero(); +#endif + + } + + return scalar; + + } + + } + + } + + } + +} + diff --git a/src/bts/image/expected/trilinear/voxel.h b/src/bts/image/expected/trilinear/voxel.h new file mode 100644 index 0000000..d42104f --- /dev/null +++ b/src/bts/image/expected/trilinear/voxel.h @@ -0,0 +1,94 @@ +/* + Copyright 2009 Brain Research Institute, Melbourne, Australia + + Created by Tom Close on 13/03/09. + + This file is part of Bayesian Tractlet Sampling (BTS). + + BTS is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + BTS is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with BTS. If not, see . + + */ + + +#ifndef __bts_image_expected_trilinear_voxel_h__ +#define __bts_image_expected_trilinear_voxel_h__ + +#include "bts/common.h" + +#include "bts/triple.h" + +#include "bts/image/expected/buffer.h" +#include "bts/image/observed/buffer.h" +#include "bts/image/expected/voxel.h" +#include "bts/image/expected/direction.h" + +#include "bts/diffusion/model.h" + + + +namespace BTS { + + namespace Image { + + namespace Expected { + + namespace Trilinear { + + class Voxel : public Expected::Voxel { + + public: + + typedef Trilinear::Buffer Buffer; + + protected: + + Buffer* image; + + public: + + Voxel() {} + + Voxel(Buffer& buffer, const Index& coord); + + Voxel(const Voxel& voxel) + : Expected::Voxel(voxel), image(voxel.image) {} + + Voxel& operator= (const Voxel& v) + { Expected::Voxel::operator=(v); image = v.image; return *this; } + + ~Voxel() {} + + + // protected: + + double interpolate(const Coord& pos); + + double interpolate(const Coord& pos, Coord& gradient); + + double interpolate(const Coord& triple, Coord& gradient, Coord::Tensor& hessian) + { throw Exception ("Gradient is not defined for Top-hat interpolation."); } + + + }; + + } + + } + + } + +} + + +#endif diff --git a/src/bts/image/expected/voxel.cpp b/src/bts/image/expected/voxel.cpp new file mode 100644 index 0000000..9c5be7b --- /dev/null +++ b/src/bts/image/expected/voxel.cpp @@ -0,0 +1,161 @@ +/* + Copyright 2009 Brain Research Institute, Melbourne, Australia + + Created by Tom Close on 13/03/09. + + This file is part of Bayesian Tractlet Sampling (BTS). + + BTS is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + BTS is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with BTS. If not, see . + + */ + +#include "bts/image/expected/voxel.h" +#include "bts/fibre/strand/basic_section/tensor.h" +#include "bts/fibre/tractlet/section/tensor.h" +#include "bts/coord/tensor.h" + +#include "bts/image/inline_functions.h" + +namespace BTS { + + namespace Image { + + namespace Expected { + + Voxel::Voxel(Expected::Buffer& exp_image, const Index& coord, Diffusion::Model& diffusion_model) + : Observed::Voxel(diffusion_model.num_encodings(), coord), precalc_interpolation(NAN) { + + for (size_t encode_i = 0; encode_i < this->num_encodings(); encode_i++) + directions.push_back(Direction(*this, diffusion_model[encode_i])); + + } + + + Voxel::Voxel(const Voxel& v) + : Observed::Voxel(v), precalc_interpolation(v.precalc_interpolation), precalc_gradient(v.precalc_gradient) { + + for (size_t encode_i = 0; encode_i < v.directions.size(); encode_i++) + directions.push_back(Direction(*this, *v.directions[encode_i].response)); + + } + + + + Voxel& Voxel::operator= (const Voxel& v) { + + Observed::Voxel::operator=(v); + precalc_interpolation = v.precalc_interpolation; + precalc_gradient = v.precalc_gradient; + + for (size_t encode_i = 0; encode_i < v.directions.size(); encode_i++) + directions.push_back(Direction(*this, *v.directions[encode_i].response)); + + return *this; + + } + + + const Diffusion::Encoding& Voxel::encoding(size_t encode_index) const { + + return directions[encode_index].encoding(); + + } + + + double Voxel::interpolate(const Fibre::Strand::BasicSection& section) { + + double pos_interp = interpolate(section.position()); + + double tan_norm = section.tangent().norm(); + + return pos_interp * tan_norm; + + } + + + double Voxel::interpolate(const Fibre::Strand::BasicSection& section, Fibre::Strand::BasicSection& gradient) { + + Coord pos_interp_gradient; + Coord tan_norm_gradient; + + double pos_interp = interpolate(section.position(), pos_interp_gradient); + double tan_norm = section.tangent().norm(tan_norm_gradient); + + gradient.zero(); + + gradient.position() = tan_norm * pos_interp_gradient; + gradient.tangent() = pos_interp * tan_norm_gradient; + + return pos_interp * tan_norm; + + } + + + double Voxel::interpolate(const Fibre::Strand::BasicSection& section, Fibre::Strand::BasicSection& gradient, Fibre::Strand::BasicSection::Tensor& hessian) { + + + Coord pos_interp_gradient; + Coord tan_norm_gradient; + Coord::Tensor interp_hessian; + Coord::Tensor norm_hessian; + + double pos_interp = interpolate(section.position(), pos_interp_gradient, interp_hessian); + double tan_norm = section.tangent().norm(tan_norm_gradient, norm_hessian); + + gradient.zero(); + + gradient.position() = tan_norm * pos_interp_gradient; + gradient.tangent() = pos_interp * tan_norm_gradient; + + + hessian.zero(); + + hessian.position(X).position() = tan_norm * interp_hessian[X]; + hessian.position(Y).position() = tan_norm * interp_hessian[Y]; + hessian.position(Z).position() = tan_norm * interp_hessian[Z]; + + hessian.position(X).tangent() = pos_interp_gradient[X] * tan_norm_gradient; + hessian.position(Y).tangent() = pos_interp_gradient[Y] * tan_norm_gradient; + hessian.position(Z).tangent() = pos_interp_gradient[Z] * tan_norm_gradient; + + hessian.tangent(X).tangent() = pos_interp * norm_hessian[X]; + hessian.tangent(Y).tangent() = pos_interp * norm_hessian[Y]; + hessian.tangent(Z).tangent() = pos_interp * norm_hessian[Z]; + + hessian.tangent(X).position() = pos_interp_gradient * tan_norm_gradient[X]; + hessian.tangent(Y).position() = pos_interp_gradient * tan_norm_gradient[Y]; + hessian.tangent(Z).position() = pos_interp_gradient * tan_norm_gradient[Z]; + + return pos_interp * tan_norm; + + } + + + double Voxel::interpolate(const Fibre::Tractlet::Section& section, Fibre::Strand::BasicSection& gradient, Fibre::Tractlet::Section::Tensor& hessian) { + + Fibre::Strand::BasicSection::Tensor strand_hessian; + + double interp = interpolate((const Fibre::Strand::BasicSection&)section, (Fibre::Strand::BasicSection&)gradient, strand_hessian); + + hessian = strand_hessian; + + return interp; + + } + + } + + } + +} diff --git a/src/bts/image/expected/voxel.h b/src/bts/image/expected/voxel.h new file mode 100644 index 0000000..e466e2f --- /dev/null +++ b/src/bts/image/expected/voxel.h @@ -0,0 +1,181 @@ +/* + Copyright 2009 Brain Research Institute, Melbourne, Australia + + Created by Tom Close on 13/03/09. + + This file is part of Bayesian Tractlet Sampling (BTS). + + BTS is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + BTS is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with BTS. If not, see . + + */ + +#include "bts/image/expected/direction.h" + +#ifndef __bts_image_expected_voxel_h__ +#define __bts_image_expected_voxel_h__ + + +namespace BTS { + + namespace Image { + + namespace Expected { + + class Voxel; + + } + + } + +} + + +#include "bts/common.h" + +#include "bts/triple.h" +#include "bts/coord.h" + +#include "bts/image/expected/buffer.h" +#include "bts/image/observed/buffer.h" +#include "bts/image/observed/voxel.h" + +#include "bts/image/expected/direction.h" + +#include "bts/fibre/tractlet/section.h" +#include "bts/fibre/strand/basic_section/tensor.h" +#include "bts/fibre/strand/section.h" + +#include "bts/diffusion/model.h" +#include "bts/image/expected/buffer.h" + + +namespace BTS { + + namespace Image { + + namespace Expected { + + class Voxel : public Observed::Voxel { + + protected: + + std::vector directions; + + double precalc_interpolation; + Fibre::Tractlet::Section precalc_gradient; + Fibre::Tractlet::Section::Tensor precalc_hessian; + + public: + + Voxel() {} + + + Voxel(Expected::Buffer& exp_image, const Index& index, Diffusion::Model& diffusion_model); + + + Voxel(const Voxel& v); + + + Voxel& operator= (const Voxel& v); + + + virtual ~Voxel() {} + + + const Diffusion::Encoding& encoding(size_t encode_index) const; + + + Voxel& zero() + { Image::Voxel::zero(); precalc_interpolation = NAN; precalc_gradient.invalidate(), precalc_hessian.invalidate(); return *this; } + + + Voxel& negate() + { Image::Voxel::negate(); precalc_interpolation = NAN; precalc_gradient.invalidate(), precalc_hessian.invalidate(); return *this; } + + + double precalculated_interpolation() const + { return precalc_interpolation; } + + + const Fibre::Tractlet::Section& precalculated_gradient() const + { return precalc_gradient; } + + + const Fibre::Tractlet::Section::Tensor& precalculated_hessian() const + { return precalc_hessian; } + + + void precalculate_interpolation (Fibre::Strand::Section& section) + { section.precalc_interpolation = interpolate(section); } + + + void precalculate_interpolation_gradient (Fibre::Strand::Section& section) + { section.precalc_interpolation = interpolate(section, section.precalc_interp_gradient); } + + + void precalculate_interpolation_gradient_and_hessian (Fibre::Strand::Section& section) + { section.precalc_interpolation = interpolate(section, section.precalc_interp_gradient, section.precalc_interp_hessian); } + + + virtual double interpolate(const Fibre::Strand::BasicSection& section); + + + virtual double interpolate(const Fibre::Strand::BasicSection& section, Fibre::Strand::BasicSection& gradient); + + + virtual double interpolate(const Fibre::Strand::BasicSection& section, Fibre::Strand::BasicSection& gradient, Fibre::Strand::BasicSection::Tensor& hessian); + + //Default to the standard Strand::Section interpolation. + virtual double interpolate(const Fibre::Tractlet::Section& section, Fibre::Strand::BasicSection& gradient) + { return interpolate((const Fibre::Strand::BasicSection&)section, (Fibre::Strand::BasicSection&)gradient); } + + + //Default to the standard Strand::Section interpolation. + virtual double interpolate(const Fibre::Tractlet::Section& section, Fibre::Strand::BasicSection& gradient, Fibre::Tractlet::Section::Tensor& hessian); + + + Direction& direction(size_t index) + { return directions[index]; } + + + Voxel operator-() const + { Voxel answer(*this); for (size_t encode_i = 0; encode_i < num_encodings(); encode_i++) answer[encode_i] = -operator[](encode_i); return answer; } + + + // protected: + + virtual double interpolate(const Coord& triple) + { throw Exception ("If interpolate(const Fibre::Strand::BasicSection&,) is not overidden in derived class then interpolate(const Coord&) must be provided."); } + + virtual double interpolate(const Coord& triple, Coord& gradient) + { throw Exception ("If interpolate(const Fibre::Strand::BasicSection&, Fibre::Strand::BasicSection&) is not overidden in derived class then interpolate(const Coord&, Coord&) must be provided."); } + + + virtual double interpolate(const Coord& triple, Coord& gradient, Coord::Tensor& hessian) + { throw Exception ("If interpolate(const Fibre::Strand::BasicSection&, Fibre::Strand::BasicSection&, Fibre::Strand::BasicSection::Tensor&) is not overidden in derived class then interpolate(const Coord&, Coord&, Coord::Tensor&) must be provided."); } + + + + + + }; + + } + + } + +} + + +#endif diff --git a/src/bts/image/index.cpp b/src/bts/image/index.cpp new file mode 100644 index 0000000..79ca177 --- /dev/null +++ b/src/bts/image/index.cpp @@ -0,0 +1,83 @@ +/* + Copyright 2008 Brain Research Institute, Melbourne, Australia + + Written by Thomas G Close, 14/07/2010. + + This file is part of MRtrix. + + MRtrix is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + MRtrix is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with MRtrix. If not, see . + +*/ + +#include "bts/image/index.h" + +namespace BTS { + + namespace Image { + + std::ostream& operator<< (std::ostream& stream, const Index& coord) { + + stream << "[" << coord[X] << ", " << coord[Y] << ", " << coord[Z] << "]"; + + return stream; + + } + + + void Index::bound(int image_dims) { + + this->p[X] = min2(max2(this->p[X],0),image_dims); + this->p[Y] = min2(max2(this->p[Y],0),image_dims); + this->p[Z] = min2(max2(this->p[Z],0),image_dims); + + } + + + bool Index::operator< (const Index& A) const { + + bool is_less_than; + if (p[X] < A[X]) + is_less_than = true; + else if (p[X] == A[X]) { + if (p[Y] < A[Y]) + is_less_than = true; + else if (p[Y] == A[Y]) + is_less_than = (p[Z] < A[Z]); + else + is_less_than = false; + } else + is_less_than = false; + return is_less_than; + } + + bool Index::operator> (const Index& A) const { + + bool is_greater_than; + if (p[X] > A[X]) + is_greater_than = true; + else if (p[X] == A[X]) { + if (p[Y] > A[Y]) + is_greater_than = true; + else if (p[Y] == A[Y]) + is_greater_than = (p[Z] > A[Z]); + else + is_greater_than = false; + } else + is_greater_than = false; + return is_greater_than; + } + + + } +} diff --git a/src/bts/image/index.h b/src/bts/image/index.h new file mode 100644 index 0000000..a9163ab --- /dev/null +++ b/src/bts/image/index.h @@ -0,0 +1,139 @@ +/* + Copyright 2010 Brain Research Institute/National ICT Australia (NICTA), Melbourne, Australia + + Written by Thomas G Close, 5/05/09. + + This file is part of Bayesian Tractlet Sampling (BTS). + + BTS is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + BTS is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with BTS. If not, see . + +*/ + +#ifndef __bts_image_index_h__ +#define __bts_image_index_h__ + +namespace BTS { + + namespace Image { + + class Index; + + } + +} + +#include "bts/common.h" + +#include "bts/triple.h" + + + +namespace BTS { + + namespace Image { + + class Index : public Triple { + + public: + + Index () {} + + Index (int x_value, int y_value, int z_value) + : Triple(x_value, y_value, z_value) {} + + Index(const Index& c) + : Triple(c) {} + + Index(const Triple& t) + : Triple(t) {} + + Index(const Triple& t) + : Triple(t[X], t[Y], t[Z]) {} + + inline bool positive() + { return (this->p[X] > 0.0) && (this->p[Y] > 0.0) && (this->p[Z] > 0.0); } + + inline bool non_negative() + { return (this->p[X] >= 0.0) && (this->p[Y] >= 0.0) && (this->p[Z] >= 0.0); } + + inline bool bounded_by(const Triple& A) const + { return (this->p[X] < A[X]) && (this->p[Y] < A[Y]) && (this->p[Z] < A[Z]); } + + inline bool bounded_by(const Triple& A) const + { return (this->p[X] < (int)A[X]) && (this->p[Y] < (int)A[Y]) && (this->p[Z] < (int)A[Z]); } + + void bound(int image_dims); + template void bound(const Triple &image_dims); + + void bound(int low_bound, int up_bound); + template void bound(const Triple &low_bound, const Triple &up_bound); + + /*! Comparison between coordinates is implemented so that they can be sorted in std::maps and works by + * placing the most significance on X, then Y, and the Z channels. + */ + bool operator< (const Index& A) const; + + bool operator> (const Index& A) const; + + bool operator<= (const Index& A) const + { return this->operator<(A) ? true : this->operator == (A); } + + bool operator>= (const Index& A) const + { return this->operator>(A) ? true : this->operator == (A); } + + + Triple to_point() + { return Triple((double)this->p[X] , (double)this->p[Y], (double)this->p[Z]); } + + }; + + + std::ostream& operator<< (std::ostream& stream, const Index& coord); + + template void Index::bound(const Triple &image_dims) { + + this->p[X] = min2(max2(this->p[X],0),image_dims[X]); + this->p[Y] = min2(max2(this->p[Y],0),image_dims[Y]); + this->p[Z] = min2(max2(this->p[Z],0),image_dims[Z]); + + } + + inline void Index::bound(int low_bound, int up_bound) { + this->p[X] = min2(max2(this->p[X],low_bound),up_bound); + this->p[Y] = min2(max2(this->p[Y],low_bound),up_bound); + this->p[Z] = min2(max2(this->p[Z],low_bound),up_bound); + } + + template void Index::bound(const Triple &low_bound, const Triple &up_bound) { + this->p[X] = min2(max2(this->p[X],low_bound[X]),up_bound[X]); + this->p[Y] = min2(max2(this->p[Y],low_bound[Y]),up_bound[Y]); + this->p[Z] = min2(max2(this->p[Z],low_bound[Z]),up_bound[Z]); + } + + } + +} + + + + + + + + +//#undef COPY_VALUES + +#endif + + diff --git a/src/bts/image/inline_functions.h b/src/bts/image/inline_functions.h new file mode 100644 index 0000000..3eb9726 --- /dev/null +++ b/src/bts/image/inline_functions.h @@ -0,0 +1,53 @@ +/* + Copyright 2008 Brain Research Institute, Melbourne, Australia + + Written by Thomas G Close, 16/07/2010. + + This file is part of MRtrix. + + MRtrix is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + MRtrix is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with MRtrix. If not, see . + +*/ + +#ifndef __bts_image_inline_functions_h__ +#define __bts_image_inline_functions_h__ + + +#ifdef __bts_image_buffer_h__ + +#include "bts/image/buffer.cpp.h" + +#endif + +#ifdef __bts_image_observed_buffer_h__ + +#include "bts/image/observed/buffer.cpp.h" + +#endif + +#ifdef __bts_image_expected_buffertpl_h__ + +#include "bts/image/expected/buffer_tpl.cpp.h" + +#endif + + +#ifdef __bts_image_expected_direction_h__ + +#include "bts/image/expected/direction.cpp.h" + +#endif + + +#endif /* __bts_image_inline_functions_h__ */ diff --git a/src/bts/image/noise.cpp b/src/bts/image/noise.cpp new file mode 100644 index 0000000..9dd2ed0 --- /dev/null +++ b/src/bts/image/noise.cpp @@ -0,0 +1,63 @@ +/* + Copyright 2008 Brain Research Institute, Melbourne, Australia + + Written by Thomas G Close, 14/07/2010. + + This file is part of MRtrix. + + MRtrix is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + MRtrix is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with MRtrix. If not, see . + +*/ + + +#include "bts/image/noise.h" + +#include "bts/image/noise/gaussian.h" +#include "bts/image/noise/rician.h" +#include "bts/image/buffer.cpp.h" + +namespace BTS { + + namespace Image { + + const char* Noise::TYPE_DEFAULT = "gaussian"; + const double Noise::SNR_DEFAULT = 15; + + + Noise* Noise::factory(gsl_rng* rand_gen, + const std::string& type, + double snr, + double ref_signal) { + + + if (type == "gaussian") + + return new Noise::Gaussian(rand_gen, snr, ref_signal); + + else if (type == "rician") + + return new Noise::Rician(rand_gen, snr, ref_signal); + + else + + throw Exception ("Unrecognised noise type '" + type + "'."); + + } + + + } + + + +} diff --git a/src/bts/image/noise.h b/src/bts/image/noise.h new file mode 100644 index 0000000..c73cb45 --- /dev/null +++ b/src/bts/image/noise.h @@ -0,0 +1,141 @@ +/* + Copyright 2008 Brain Research Institute, Melbourne, Australia + + Written by Thomas G Close, 14/07/2010. + + This file is part of MRtrix. + + MRtrix is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + MRtrix is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with MRtrix. If not, see . + +*/ + +#ifndef __bts_image_noise_h__ +#define __bts_image_noise_h__ + +#define NOISE_PARAMETERS \ + Option ("noise_type", "Type of noise distribution") \ + + Argument ("noise_type", "").type_text (Image::Noise::TYPE_DEFAULT), \ +\ + Option ("noise_snr", "The signal-to-noise ratio of the noise.") \ + + Argument ("noise_snr", "").type_float (SMALL_FLOAT, Image::Noise::SNR_DEFAULT, LARGE_FLOAT), \ +\ + Option ("noise_ref_signal", "The reference intensity that the noise variance for a given SNR will be calculated from.") \ + + Argument ("noise_ref_signal", "").type_float (SMALL_FLOAT, NAN, LARGE_FLOAT) \ +\ + + +//Loads the parameters into variables +#define SET_NOISE_PARAMETERS \ +\ + std::string noise_type = Image::Noise::TYPE_DEFAULT; \ + double noise_snr = Image::Noise::SNR_DEFAULT; \ + double noise_ref_signal = NAN; \ +\ + opt = get_options("noise_type"); \ + if (opt.size()) \ + noise_type = opt[0][0].c_str(); \ +\ + opt = get_options("noise_snr"); \ + if (opt.size()) \ + noise_snr = opt[0][0]; \ +\ + opt = get_options("noise_ref_signal"); \ + if (opt.size()) \ + noise_ref_signal = opt[0][0]; \ + + +//Adds the parameters to the properties to be saved with the data. +#define ADD_NOISE_PROPERTIES(properties) \ + properties["noise_type"] = noise_type; \ + properties["noise_snr"] = str(noise_snr); \ + if (!isnan(noise_ref_signal)) \ + properties["noise_ref_signal"] = str(noise_ref_signal); + + + +extern "C" { +#include +#include +} + +#include "bts/image/observed/buffer.h" +#include "bts/image/expected/buffer.h" + +namespace BTS { + + namespace Image { + + class Noise { + + //Public nested classes and typedefs + public: + + class Gaussian; + class Rician; + + //Public static constants + public: + + const static char* TYPE_DEFAULT; + const static double SNR_DEFAULT; + + //Protected member variables + protected: + + gsl_rng* rand_gen; + double snr; + double ref_signal; + + //Public static member functions + public: + + static Noise* factory(gsl_rng* rand_gen, + const std::string& type, + double snr, + double ref_signal); + + + //Public member functions + public: + + Noise(gsl_rng* rand_gen, double snr, double ref_signal) + : rand_gen(rand_gen), snr(snr), ref_signal(ref_signal) {} + + + virtual Image::Observed::Buffer& noisify(Image::Observed::Buffer& image) = 0; + + virtual Image::Expected::Buffer& noisify(Image::Expected::Buffer& image) = 0; + + protected: + + template double noise_magnitude(T& image) const { + + double signal; + + if (!isnan(ref_signal)) + signal = ref_signal; + else + signal = image.max_b0(); + + return signal / snr; + + } + + }; + + } + +} + +#endif /* __bts_image_noise_h__ */ diff --git a/src/bts/image/noise/gaussian.cpp b/src/bts/image/noise/gaussian.cpp new file mode 100644 index 0000000..66a0d3c --- /dev/null +++ b/src/bts/image/noise/gaussian.cpp @@ -0,0 +1,57 @@ +/* + Copyright 2008 Brain Research Institute, Melbourne, Australia + + Written by Thomas G Close, 14/07/2010. + + This file is part of MRtrix. + + MRtrix is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + MRtrix is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with MRtrix. If not, see . + +*/ + +#include "math/math.h" + +#include "bts/image/noise/gaussian.h" +#include "bts/image/observed/voxel.h" + +#include "bts/image/inline_functions.h" + + +namespace BTS { + + namespace Image { + + + Noise::Gaussian::Gaussian (gsl_rng* rand_gen, double snr, double ref_signal) + : Noise(rand_gen, snr, ref_signal) {} + + + template void Noise::Gaussian::noisify_tpl(T& image) { + + double noise_mag = noise_magnitude(image); + + for (size_t x = 0; x < image.dim(X); x++) + for (size_t y = 0; y < image.dim(Y); y++) + for (size_t z = 0; z < image.dim(Z); z++) + for (size_t orient_i = 0; orient_i < image.num_encodings(); orient_i++) + + image(x,y,z)[orient_i] += gsl_ran_gaussian(rand_gen, noise_mag); + + + } + + + } + +} diff --git a/src/bts/image/noise/gaussian.h b/src/bts/image/noise/gaussian.h new file mode 100644 index 0000000..9dadc37 --- /dev/null +++ b/src/bts/image/noise/gaussian.h @@ -0,0 +1,65 @@ +/* + Copyright 2008 Brain Research Institute, Melbourne, Australia + + Written by Thomas G Close, 14/07/2010. + + This file is part of MRtrix. + + MRtrix is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + MRtrix is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with MRtrix. If not, see . + +*/ + +#ifndef __bts_image_noise_gaussian_h__ +#define __bts_image_noise_gaussian_h__ + +#include "bts/image/noise.h" +#include "bts/image/observed/buffer.h" +#include "bts/image/expected/buffer.h" + +namespace BTS { + + namespace Image { + + class Noise::Gaussian : public Noise { + + //Public static constants. + public: + + //Protected member variables + protected: + + //Public member functions + public: + + Gaussian(gsl_rng* rand_gen, double snr, double ref_signal); + + + Image::Observed::Buffer& noisify(Image::Observed::Buffer& image) + { noisify_tpl(image); return image; } + + Image::Expected::Buffer& noisify(Image::Expected::Buffer& image) + { noisify_tpl(image); return image; } + + protected: + + template void noisify_tpl(T& image); + + + }; + + } + +} + +#endif /* __bts_image_noise_gaussian_h__ */ diff --git a/src/bts/image/noise/rician.cpp b/src/bts/image/noise/rician.cpp new file mode 100644 index 0000000..535dbb8 --- /dev/null +++ b/src/bts/image/noise/rician.cpp @@ -0,0 +1,65 @@ +/* + Copyright 2008 Brain Research Institute, Melbourne, Australia + + Written by Thomas G Close, 14/07/2010. + + This file is part of MRtrix. + + MRtrix is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + MRtrix is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with MRtrix. If not, see . + +*/ + +#include "math/math.h" + +#include "bts/image/noise/rician.h" +#include "bts/image/observed/voxel.h" + +#include "bts/image/inline_functions.h" + + +namespace BTS { + + namespace Image { + + + Noise::Rician::Rician (gsl_rng* rand_gen, double snr, double ref_signal) + : Noise(rand_gen, snr, ref_signal) {} + + + template void Noise::Rician::noisify_tpl(T& image) { + + double noise_mag = noise_magnitude(image); + + for (size_t x = 0; x < image.dim(X); x++) + for (size_t y = 0; y < image.dim(Y); y++) + for (size_t z = 0; z < image.dim(Z); z++) { + + for (size_t orient_i = 0; orient_i < image.num_encodings(); orient_i++) { + + double noise1 = gsl_ran_gaussian(rand_gen, noise_mag); + double noise2 = gsl_ran_gaussian(rand_gen, noise_mag); + + image(x,y,z)[orient_i] = MR::Math::sqrt(MR::Math::pow2(image(x,y,z)[orient_i] + noise1) + MR::Math::pow2(noise2)); + + } + + } + + + } + + + } + +} diff --git a/src/bts/image/noise/rician.h b/src/bts/image/noise/rician.h new file mode 100644 index 0000000..3ec969b --- /dev/null +++ b/src/bts/image/noise/rician.h @@ -0,0 +1,65 @@ +/* + Copyright 2008 Brain Research Institute, Melbourne, Australia + + Written by Thomas G Close, 14/07/2010. + + This file is part of MRtrix. + + MRtrix is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + MRtrix is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with MRtrix. If not, see . + +*/ + +#ifndef __bts_image_noise_rician_h__ +#define __bts_image_noise_rician_h__ + +#include "bts/image/noise.h" +#include "bts/image/observed/buffer.h" +#include "bts/image/expected/buffer.h" + +namespace BTS { + + namespace Image { + + class Noise::Rician : public Noise { + + //Public static constants. + public: + + //Protected member variables + protected: + + //Public member functions + public: + + Rician(gsl_rng* rand_gen, double snr, double ref_signal); + + Image::Observed::Buffer& noisify(Image::Observed::Buffer& image) + { noisify_tpl(image); return image; } + + Image::Expected::Buffer& noisify(Image::Expected::Buffer& image) + { noisify_tpl(image); return image; } + + protected: + + template void noisify_tpl(T& image); + + + }; + + } + +} + + +#endif /* __bts_image_noise_rician_h__ */ diff --git a/src/bts/image/observed/buffer.cpp b/src/bts/image/observed/buffer.cpp new file mode 100644 index 0000000..a828f9f --- /dev/null +++ b/src/bts/image/observed/buffer.cpp @@ -0,0 +1,158 @@ +/* + Copyright 2009 Brain Research Institute, Melbourne, Australia + + Created by Tom Close on 13/03/09. + + This file is part of Bayesian Tractlet Sampling (BTS). + + BTS is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + BTS is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with BTS. If not, see . + + */ + +#include "image/header.h" +#include "dataset/loop.h" + + +#include "bts/image/observed/buffer.h" + +#include "bts/image/inline_functions.h" + + +namespace BTS { + + namespace Image { + + namespace Observed { + + + std::ostream& operator<< (std::ostream& stream, const Buffer& buffer) + { return buffer.to_stream(stream); } + + + + void Buffer::load(const std::string& location, const Diffusion::Encoding::Set& default_encodings) { + + MR::Image::Header header(location); + + if (header.ndim() != 4) + throw Exception ("dwi image should contain 4 dimensions, found " + str(header.ndim()) + "."); + + Diffusion::Encoding::Set encodings; + if (header.get_DW_scheme().rows()) { + MR::Math::Matrix encodings_matrix; + encodings.set(header.get_DW_scheme()); + } else if (default_encodings.size()) + encodings = default_encodings; + else + throw Exception ("No encodings found in loaded image, and no defaults supplied."); + + if (header.dim(3) != (int) encodings.size()) + throw Exception ("Number of encoding directions in loaded image (" + str(header.dim(DW)) + ") do not match that in encoding file (" + str(encodings.size()) + ")."); + + //Get image dimensions and voxel lengths. + Triple dimensions (header.dim(X), header.dim(Y), header.dim(Z)); + Triple voxel_lengths (header.vox(X), header.vox(Y), header.vox(Z)); + + //Get offset from transform. + MR::Math::Matrix transform = header.transform(); + Triple mrtrix_offset (transform(0,3), transform(1,3), transform(2,3)); + Triple bts_offset = mrtrix_offset - voxel_lengths * 0.5; + + //Resize buffer to fit image. + reset(dimensions, voxel_lengths, bts_offset, encodings); + + //Copy data from image to buffer. + MR::Image::Voxel voxel (header); + MR::DataSet::Loop loop (0, 4); + + for (loop.start(voxel); loop.ok(); loop.next(voxel)) + operator()(voxel[X], voxel[Y], voxel[Z])[voxel[DW]] = voxel.value(); + + properties().insert(header.begin(), header.end()); + + + } + + Double::Buffer Buffer::isotropic(bool include_b0s) const { + + Double::Buffer mean_buffer (this->dims()); + + for (const_iterator vox_it = this->begin(); vox_it != this->end(); ++vox_it) { + mean_buffer(vox_it->first) = vox_it->second.isotropic(); + } + + return mean_buffer; + + } + + + void Buffer::remove_isotropic() { + + for (iterator vox_it = this->begin(); vox_it != this->end(); ++vox_it) { \ + vox_it->second.remove_isotropic(); + } + + } + + + + double Buffer::mean_square(bool include_b0s) const { + + double sum = 0.0; + + for (const_iterator vox_it = this->begin(); vox_it != this->end(); ++vox_it) { + sum += vox_it->second.mean_square_signal(include_b0s); + } + + return sum / this->num_voxels_in_bounds(); + + } + + + + + Double::Buffer Buffer::b0 () const { + + Double::Buffer b0_buffer (this->dims()); + + for (const_iterator vox_it = this->begin(); vox_it != this->end(); ++vox_it) { + b0_buffer(vox_it->first) = vox_it->second.b0(); + } + + return b0_buffer; + + } + + + double Buffer::average_b0() const { + + double b0_sum = 0; + + for (const_iterator vox_it = this->begin(); vox_it != this->end(); ++vox_it) { + b0_sum += vox_it->second.b0(); + } + + return b0_sum / this->num_voxels_in_bounds(); + + } + + + } + + } + +} + +#undef LOOP +#undef CONST_LOOP diff --git a/src/bts/image/observed/buffer.cpp.h b/src/bts/image/observed/buffer.cpp.h new file mode 100644 index 0000000..24825fe --- /dev/null +++ b/src/bts/image/observed/buffer.cpp.h @@ -0,0 +1,223 @@ +/* + Copyright 2008 Brain Research Institute, Melbourne, Australia + + Written by Thomas G Close, 16/07/2010. + + This file is part of MRtrix. + + MRtrix is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + MRtrix is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with MRtrix. If not, see . + +*/ + +#ifndef __bts_observed_buffer_cpp_h__ +#define __bts_observed_buffer_cpp_h__ + +#include "dataset/loop.h" + +namespace BTS { + + namespace Image { + + namespace Observed { + + template Buffer_tpl::Buffer_tpl(Triple dimensions, + Triple voxel_lengths, + Triple corner_offsets, + bool enforce_bounds) + + : Image::Buffer_tpl(dimensions, enforce_bounds), + voxel_lengths(voxel_lengths), + corner_offsets(corner_offsets) { + + if (!corner_offsets) + this->corner_offsets = default_corner_offset(dimensions, voxel_lengths); + + } + + + template void Buffer_tpl::reset(const Triple& dimensions, + const Triple& voxel_lengths, + const Triple& corner_offsets) { + + + + this->Image::Buffer_tpl::reset(dimensions); + this->voxel_lengths = voxel_lengths; + this->corner_offsets = corner_offsets; + + if (!this->corner_offsets) + this->corner_offsets = default_corner_offset(dimensions, voxel_lengths); + + + } + + + + + template std::ostream& Buffer_tpl::to_stream (std::ostream& stream) const { + + stream << "Dims: " << this->dims() << std::endl; + + stream << "Vox lengths: " << voxel_lengths << std::endl; + + stream << "Corner offsets: " << corner_offsets << std::endl; + + + for (size_t z = 0; z < this->dim(Z); z++) { + + stream << std::endl << std::endl << "----------" << std::endl + << " z=" << z << std::endl + << "----------" << std::endl; + + for (size_t y = 0; y < this->dim(Y); y++) { + + stream << std::endl << "y=" << y << std::endl << "----" << std::endl; + + for (size_t x = 0; x < this->dim(X); x++) { + + stream << "x=" << x << ": " << this->operator()(x,y,z) << std::endl; + } + } + } + + + return stream; + + } + + + template std::ostream& operator<< (std::ostream& stream, const Buffer_tpl& buffer) { + + return buffer.to_stream(stream); + + } + + + template void Buffer_tpl::save(const std::string& location) const { + + MR::Image::Header header; + + header.set_ndim(4); + + header.set_vox(X, this->vox_length(X)); + header.set_vox(Y, this->vox_length(Y)); + header.set_vox(Z, this->vox_length(Z)); + + header.set_dim(X, this->dim(X)); + header.set_dim(Y, this->dim(Y)); + header.set_dim(Z, this->dim(Z)); + header.set_dim(DW, num_encodings()); + + MR::Math::Matrix transform(4,4); + + transform.identity(); + + transform(0,3) = offset(X) + 0.5 * vox_length(X); + transform(1,3) = offset(Y) + 0.5 * vox_length(Y); + transform(2,3) = offset(Z) + 0.5 * vox_length(Z); + + header.set_transform(transform); + + MR::Math::Matrix encodings_matrix (num_encodings(), 4); + + for (size_t encode_i = 0; encode_i < num_encodings(); encode_i++) { + const Diffusion::Encoding& encode = this->encoding(encode_i); + encodings_matrix(encode_i,X) = encode[X]; + encodings_matrix(encode_i,Y) = encode[Y]; + encodings_matrix(encode_i,Z) = encode[Z]; + encodings_matrix(encode_i,DW) = encode.b_value(); + } + + header.set_DW_scheme(encodings_matrix); + + header.insert(properties().begin(), properties().end()); + + File::clear_path(location); + + header.create(location); + + //Copy data from buffer to image. + MR::Image::Voxel datapoint (header); + + std::vector loop_order(4); + + loop_order[0] = DW; + loop_order[1] = X; + loop_order[2] = Y; + loop_order[3] = Z; + + MR::DataSet::LoopInOrder loop (loop_order); + + loop.start(datapoint); + + for (size_t z = 0; z < this->dim(Z); z++) + for (size_t y = 0; y < this->dim(Y); y++) + for (size_t x = 0; x < this->dim(X); x++) { + + Image::Voxel vox; + + if (!this->is_empty(x,y,z)) + vox = this->operator()(x,y,z); + else + vox = Image::Voxel (num_encodings()); + + for (size_t encode_i = 0; encode_i < num_encodings(); encode_i++) { + datapoint.value() = vox[encode_i]; + loop.next(datapoint); + } + + } + + } + + + + + template double Buffer_tpl::rms(bool include_b0s) const { + + double sum = 0.0; + + for (typename Image::Buffer_tpl::const_iterator vox_it = this->begin(); vox_it != this->end(); ++vox_it) { + + if (!include_b0s || vox_it->second.b0()) + sum += vox_it->second.rms(); + + } + + return sum / this->num_voxels_in_bounds(); + + } + + + template double Buffer_tpl::max_b0() const { + + double max_b0 = 0; + + for (typename Image::Buffer_tpl::const_iterator vox_it = this->begin(); vox_it != this->end(); ++vox_it) + + if (vox_it->second.b0() > max_b0) + max_b0 = vox_it->second.b0(); + + return max_b0; + + } + + + } + + } + +} + +#endif /* __observed_buffer_tpl_cpp_h__ */ diff --git a/src/bts/image/observed/buffer.h b/src/bts/image/observed/buffer.h new file mode 100644 index 0000000..3f26af1 --- /dev/null +++ b/src/bts/image/observed/buffer.h @@ -0,0 +1,370 @@ +/* + Copyright 2009 Brain Research Institute, Melbourne, Australia + + Created by Tom Close on 13/03/09. + + This file is part of Bayesian Tractlet Sampling (BTS). + + BTS is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + BTS is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with BTS. If not, see . + + */ + + + +#ifndef __bts_image_observed_buffer_h__ +#define __bts_image_observed_buffer_h__ + +namespace BTS { + + namespace Image { + + namespace Observed { + + class Buffer; + + } + + } + +} + +#include "image/header.h" +#include "image/voxel.h" + +#include "bts/triple.h" +#include "bts/image/buffer.h" +#include "bts/diffusion/encoding/set.h" +#include "bts/image/observed/buffer.h" + +#include "bts/image/properties.h" + +#include "bts/common.h" + +#define LOOP(op) \ +for (size_t z = 0; z < this->dim(Z); z++) { \ + for (size_t y = 0; y < this->dim(Y); y++) { \ + for (size_t x = 0; x < this->dim(X); x++) { \ + op \ + } \ + } \ +} + +namespace BTS { + + namespace Image { + + namespace Observed { + + template class Buffer_tpl : public Image::Buffer_tpl { + + + //Public static functions. + public: + + static Triple default_corner_offset(const Triple& dimensions, const Triple& voxel_lengths) + { return - voxel_lengths * dimensions * 0.5; } + + + // Returns the centre of the voxel in buffer space. + inline static Triple voxel_centre(Index coord) + { return coord.to_point() + Triple::Halves; } + + + // Returns the voxel coordinate that the point given in buffer space lies in. + static Index voxel_coord(Triple point) + { return Index((int)point[X], (int)point[Y], (int)point[Z]); } + + + protected: + + Triple voxel_lengths; + Triple corner_offsets; // Spatial offsets of bottom-left-back corner of the image. + + Properties props; + + + public: + + ~Buffer_tpl() {} + + + const Triple& vox_lengths() const + { return voxel_lengths; } + + + double vox_length(size_t dim_index) const + { return voxel_lengths[dim_index]; } + + + //! Offset of the lowest corner of the lowest voxel coordinate ([0,0,0]) of the image. + const Triple& offsets() const + { return corner_offsets; } + + + //! Offset of the lowest corner of the lowest voxel coordinate ([0,0,0]) of the image. + double offset(size_t dim_index) const + { return corner_offsets[dim_index]; } + + + std::ostream& to_stream (std::ostream& stream) const; + + + Properties& properties() + { return props; } + + const Properties& properties() const + { return props; } + + virtual void save(const std::string& location) const; + + + void reset(const Triple& dims, + const Triple& voxel_sizes, + const Triple& spatial_offset); + + + double rms(bool include_b0s) const; + + + virtual size_t num_encodings() const = 0; + + + virtual const Diffusion::Encoding& encoding(size_t index) const = 0; + + double max_b0() const; + + + protected: + + Buffer_tpl(bool enforce_bounds) : Image::Buffer_tpl(enforce_bounds){} + + Buffer_tpl( Triple dimensions, + Triple voxel_lengths, + Triple corner_offsets, + bool enforce_bounds); + + + Buffer_tpl(const Buffer_tpl& B) + : Image::Buffer_tpl(B), + voxel_lengths(B.voxel_lengths), + corner_offsets(B.corner_offsets), + props(B.props) {} + + + Buffer_tpl& operator= (const Buffer_tpl& B) + { this->Image::Buffer_tpl::operator= (B); voxel_lengths = B.voxel_lengths; corner_offsets = B.corner_offsets; props = B.props; return *this; } + + + + }; + + } + + } + +} + +#include "bts/image/observed/voxel.h" + +namespace BTS { + + namespace Image { + + namespace Observed { + + class Buffer : public Buffer_tpl { + + + protected: + + Diffusion::Encoding::Set encodings; + + + public: + + Buffer() : Buffer_tpl(true) {} + + //TODO: Make default constructor, and open functions. + Buffer(const Triple& dimensions, const Triple& voxel_sizes, const Triple& spatial_offset, const Diffusion::Encoding::Set& encodings) + : Buffer_tpl(dimensions, voxel_sizes, spatial_offset, true), + encodings(encodings) { } + + + Buffer(const std::string& image_location, const Diffusion::Encoding::Set& default_encodings = Diffusion::Encoding::Set()) + : Buffer_tpl(true) + { load(image_location, default_encodings); } + + + Buffer(const Buffer& B) + : Buffer_tpl(B), + encodings(B.encodings) {} + + + virtual ~Buffer() {} + + + Buffer& operator=(const Buffer& B) + { Buffer_tpl::operator=(B); encodings = B.encodings; return *this; } + + + void reset(const Triple& dims, + const Triple& voxel_sizes, + const Triple& spatial_offset, + const Diffusion::Encoding::Set& encodings) + + { Buffer_tpl::reset(dims, voxel_sizes, spatial_offset); this->encodings = encodings; } + + + void load(const std::string& location, const Diffusion::Encoding::Set& default_encodings = Diffusion::Encoding::Set()); + + + Buffer* clone() const + { return new Buffer(*this); } + + + Voxel& operator() (Index coord) + { return Image::Buffer_tpl::operator()(coord); } + + + Voxel& operator() (int x, int y, int z) + { return Image::Buffer_tpl::operator()(x,y,z); } + + + const Voxel& operator() (Index coord) const + { return Image::Buffer_tpl::operator()(coord); } + + + const Voxel& operator() (int x, int y, int z) const + { return Image::Buffer_tpl::operator()(x,y,z); } + + + size_t num_encodings() const + { return encodings.num_encodings(); } + + + const Diffusion::Encoding& encoding(size_t index) const + { return encodings[index]; } + + + const Diffusion::Encoding::Set& get_encodings() const + { return encodings; } + + size_t dim(size_t dim_index) const + { return Image::Buffer_tpl::dim(dim_index); } + + + double vox_length(size_t dim_index) const + { return Buffer_tpl::vox_length(dim_index); } + + //! Offset of the lowest corner of the lowest voxel coordinate ([0,0,0]) of the image. + double offset(size_t dim_index) const + { return Buffer_tpl::offset(dim_index); } + + + const Triple& dims() const + { return Image::Buffer_tpl::dims(); } + + + const Triple& vox_lengths() const + { return Buffer_tpl::vox_lengths(); } + + + //! Offset of the lowest corner of the lowest voxel coordinate ([0,0,0]) of the image. + const Triple& offsets() const + { return Buffer_tpl::offsets(); } + + + Buffer& zero () + { this->Image::Buffer_tpl::zero(); return *this; } + + + Double::Buffer b0 () const; + + + double average_b0() const; + + + double max_b0() const + { return Buffer_tpl::max_b0(); } + + + Double::Buffer isotropic(bool include_b0s) const; + + + double rms(bool include_b0s) const + { return Buffer_tpl::rms(include_b0s); } + + + double mean_square (bool include_b0s) const; + + + virtual void remove_isotropic(); + + + Buffer& operator+= (const Buffer& buff) + { this->Image::Buffer_tpl::operator+= (buff); return *this; } + + + Buffer& operator-= (const Buffer& buff) + { this->Image::Buffer_tpl::operator-= (buff); return *this; } + + + Buffer& operator*= (double M) + { this->Image::Buffer_tpl::operator*= (M); return *this; } + + + Buffer& operator/= (double M) + { this->Image::Buffer_tpl::operator/= (M); return *this; } + + + template Buffer& operator+= (const Image::Buffer_tpl& buff) + { this->Image::Buffer_tpl::operator+= (buff); return *this; } + + + template Buffer& operator-= (const Image::Buffer_tpl& buff) + { this->Image::Buffer_tpl::operator-= (buff); return *this; } + + + std::ostream& to_stream (std::ostream& stream) const + { return this->Buffer_tpl::to_stream(stream); } + + + Properties& properties() + { return this->Buffer_tpl::properties(); } + + const Properties& properties() const + { return this->Buffer_tpl::properties(); } + + + protected: + + + virtual Voxel new_voxel(const Index& c) + { return Voxel(*this,c); } + + + }; + + std::ostream& operator<< (std::ostream& stream, const Buffer& buffer); + + } + + } + +} + +#undef LOOP + + +#endif diff --git a/src/bts/image/observed/voxel.cpp b/src/bts/image/observed/voxel.cpp new file mode 100644 index 0000000..b6b6147 --- /dev/null +++ b/src/bts/image/observed/voxel.cpp @@ -0,0 +1,204 @@ +/* + Copyright 2010 Brain Research Institute/National ICT Australia (NICTA), Melbourne, Australia + + Written by Thomas G Close, 5/05/09. + + This file is part of Bayesian Tractlet Sampling (BTS). + + BTS is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + BTS is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with BTS. If not, see . + +*/ + + +#include "bts/image/voxel.h" +#include "bts/image/observed/buffer.h" +#include "bts/image/observed/voxel.h" + + +#include "bts/image/inline_functions.h" + +#define LOOP(op) \ +for (size_t encode_i = 0; encode_i < this->num_encodings(); encode_i++) {\ + op \ +} + +namespace BTS { + + namespace Image { + + namespace Observed { + + Voxel::Voxel(Observed::Buffer& obs_image, const Index& coord) + : Image::Voxel(obs_image.num_encodings()), + obs_image(&obs_image), + coordinate(coord), + centre_point(Observed::Buffer::voxel_centre(coordinate)) {} + + + Voxel::Voxel(size_t num_encodings, const Index& coord) + : Image::Voxel(num_encodings), + obs_image(0), + coordinate(coord), + centre_point(Observed::Buffer::voxel_centre(coordinate)) {} + + + + const Diffusion::Encoding& Voxel::encoding(size_t index) const + { return obs_image->encoding(index); } + + + + // NB: This will not work for signal with isotropic component removed. + double Voxel::sum_weak_difference(const Voxel& expected_image, Voxel& expected_image_gradient, bool include_b0s) const { + + double sum = 0.0; + + for (size_t encode_i = 0; encode_i < this->num_encodings(); encode_i++) { + + // If direction is not a b=0 direction. + if (this->encoding(encode_i).b_value() || include_b0s) { + + double diff = this->operator[](encode_i) - expected_image[encode_i]; + + if ( diff > 0.0) { + + sum += diff * diff; + expected_image_gradient[encode_i] = - 2.0 * diff; + + } else + expected_image_gradient[encode_i] = 0.0; + + } else + expected_image_gradient[encode_i] = 0.0; + + } + + return sum; + } + + + double Voxel::sum_strong_difference(const Voxel& expected_image, Voxel& expected_image_gradient, bool include_b0s) const { + + double sum = 0; + + for (size_t encode_i = 0; encode_i < this->num_encodings(); encode_i++) { + + // If direction is not a b=0 direction. + if (this->encoding(encode_i).b_value() || include_b0s) { + + double diff = this->operator[](encode_i) - expected_image[encode_i]; + sum += diff * diff; + expected_image_gradient[encode_i] = - 2.0 * diff; + + } else + expected_image_gradient[encode_i] = 0.0; + + } + + return sum; + } + + + double Voxel::sum_square_signal(bool include_b0s) const { + + double sum = 0; + + for (size_t encode_i = 0; encode_i < this->num_encodings(); encode_i++) { + + // If direction is not a b=0 direction. + if (this->encoding(encode_i).b_value() || include_b0s) + sum += MR::Math::pow2(this->operator[](encode_i)); + + } + + return sum; + + + } + + + + double Voxel::b0() const { + + double sum_b0 = 0.0; + size_t num_b0 = 0; + + for (size_t encode_i = 0; encode_i < this->num_encodings(); encode_i++) { + + if (this->encoding(encode_i).b_value() == 0.0) { + sum_b0 += this->operator[](encode_i); + ++num_b0; + } + } + + return sum_b0 / (double)num_b0; + } + + + double Voxel::isotropic() const { + + double sum = 0.0; + + size_t num_b0s = 0; + + for (size_t encode_i = 0; encode_i < this->num_encodings(); encode_i++) { + + if (this->encoding(encode_i).b_value()) + sum += this->operator[](encode_i); + else + ++num_b0s; + + } + + return sum /(double)(num_encodings() - num_b0s); + + } + + double Voxel::rms() const{ + + double sum = 0.0; + + for (size_t encode_i = 0; encode_i < this->num_encodings(); encode_i++) { + + sum += MR::Math::pow2(this->operator[](encode_i)); + + } + + return MR::Math::sqrt(sum /(double)num_encodings()); + + } + + + void Voxel::remove_isotropic() { + + double iso = this->isotropic(); + + for (size_t encode_i = 0; encode_i < this->num_encodings(); encode_i++) { + + if (this->encoding(encode_i).b_value()) + this->operator[](encode_i) -= iso; + + } + + } + + + + } + + } + +} + +#undef LOOP diff --git a/src/bts/image/observed/voxel.h b/src/bts/image/observed/voxel.h new file mode 100644 index 0000000..d2d9937 --- /dev/null +++ b/src/bts/image/observed/voxel.h @@ -0,0 +1,159 @@ +/* + Copyright 2010 Brain Research Institute/National ICT Australia (NICTA), Melbourne, Australia + + Written by Thomas G Close, 5/05/09. + + This file is part of Bayesian Tractlet Sampling (BTS). + + BTS is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + BTS is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with BTS. If not, see . + +*/ + +#ifndef __image_observed_voxel_h__ +#define __image_observed_voxel_h__ + +#include +#include + +#include "bts/common.h" + +#include "bts/image/observed/buffer.h" +#include "bts/diffusion/encoding.h" +#include "bts/image/voxel.h" +#include "bts/image/observed/buffer.h" +#include "bts/image/voxel.h" + +namespace BTS { + + namespace Image { + + namespace Observed { + + class Voxel : public Image::Voxel { + + //Public nested classes and typedefs + public: + + typedef Observed::Buffer Buffer; + + + protected: + + Buffer* obs_image; + + Index coordinate; + Coord centre_point; + + public: + + Voxel() {} + + Voxel(Buffer& buffer, const Index& coord); + + Voxel(const Voxel& v) + : Image::Voxel(v), obs_image(v.obs_image), coordinate(v.coordinate), centre_point(v.centre_point) {} + + + + Voxel& operator= (const Voxel& v) { + + Image::Voxel::operator=(v); + obs_image = v.obs_image; + coordinate = v.coordinate; + centre_point = v.centre_point; + + return *this; + } + + + //Doesn't copy across the parent image or coordinate. + Voxel& copy_value (const Voxel& v) + { Image::Voxel::operator=(v); return *this; } + + virtual ~Voxel() {} + + + virtual const Diffusion::Encoding& encoding(size_t index) const; + + + double b0() const; + + + const Coord& centre() const + { return centre_point; } + + + const Index& coord() const + { return coordinate; } + + + double sum_square_signal(bool include_b0s) const; + + + double mean_square_signal(bool include_b0s) const + { return sum_square_signal(include_b0s) / num_encodings(); } + + + double sum_strong_difference(const Voxel& expected_image, Voxel& expected_image_gradient, bool include_b0s) const; + + + double sum_weak_difference(const Voxel& expected_image, Voxel& expected_image_gradient, bool include_b0s) const; + + + double isotropic() const; + + + void remove_isotropic(); + + + double rms() const; + + + Voxel operator-() const + { Voxel answer(*this); for (size_t encode_i = 0; encode_i < num_encodings(); encode_i++) answer[encode_i] = -operator[](encode_i); return answer; } + + protected: + + Voxel(size_t num_encodings, const Index& coord); + + // friend class Observed::Buffer; + + friend std::ostream& operator<< (std::ostream& stream, const Observed::Voxel& voxel); + + + }; + + inline std::ostream& operator<< (std::ostream& stream, const Observed::Voxel& voxel) { + + stream << "coord: " << voxel.coordinate << std::endl; + stream << "centre point: " << voxel.centre_point << std::endl; + stream << "intensities: " << std::endl; + for (size_t encode_i = 0; encode_i < voxel.num_encodings(); encode_i++) { + stream << voxel[encode_i] << ", "; + } + stream << std::endl; + + return stream; + + } + + } + + } + +} + +#undef LOOP + +#endif diff --git a/src/bts/image/properties.h b/src/bts/image/properties.h new file mode 100644 index 0000000..14adf62 --- /dev/null +++ b/src/bts/image/properties.h @@ -0,0 +1,56 @@ +/* + Copyright 2008 Brain Research Institute, Melbourne, Australia + + Written by Thomas G Close, 21/07/2010. + + This file is part of MRtrix. + + MRtrix is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + MRtrix is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with MRtrix. If not, see . + +*/ + +#ifndef __bts_image_properties_h__ +#define __bts_image_properties_h__ + +#include + +namespace BTS { + + namespace Image { + + class Properties : public std::map{ + + //Public static variables, nested classes and typedefs + public: + + + //Protected member variables + protected: + + + //Public member functions + public: + + + //Protected member functions + protected: + + + }; + + } + +} + +#endif /* __bts_image_properties_h__ */ diff --git a/src/bts/image/reference/buffer.h b/src/bts/image/reference/buffer.h new file mode 100644 index 0000000..cab26a9 --- /dev/null +++ b/src/bts/image/reference/buffer.h @@ -0,0 +1,114 @@ +/* + Copyright 2009 Brain Research Institute, Melbourne, Australia + + Created by Tom Close on 13/03/09. + + This file is part of Bayesian Tractlet Sampling (BTS). + + BTS is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + BTS is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with BTS. If not, see . + + */ + + +#ifndef __bts_image_reference_buffer_h__ +#define __bts_image_reference_buffer_h__ + + +namespace BTS { + + namespace Image { + + namespace Reference { + + template class Buffer; + + } + + } + +} + +#include "bts/fibre/strand/section.h" +#include "bts/fibre/tractlet/section.h" +#include "bts/fibre/tractlet/tensor.h" +#include "bts/fibre/strand/tensor.h" + + + +#define LOOP(op) \ +for (size_t z = 0; z < this->dim(Z); z++) { \ + for (size_t y = 0; y < this->dim(Y); y++) { \ + for (size_t x = 0; x < this->dim(X); x++) { \ + op \ + } \ + } \ +} + + +namespace BTS { + + namespace Image { + + namespace Reference { + + template class Buffer : public Image::Buffer_tpl< std::vector > { + + public: + + typedef std::map > Set; + +// class Set : public std::map > { +// +// Set() : std::map >() {} +// Set(const std::map >& m) : std::map >(m) {} +// ~Set() {}; +// +// }; + + public: + + Buffer () + : Image::Buffer_tpl< std::vector >(false) {} + + + Buffer (const Buffer& B) + : Image::Buffer_tpl< std::vector >(B) {} + + + ~Buffer () {} + + + Buffer* clone() + { return new Buffer(*this); } + + + Buffer& operator= (const Buffer& B) + { Image::Buffer_tpl< std::vector >::operator= (B); return *this; } + + + void clear_references() + { for (typename Image::Buffer_tpl< std::vector >::iterator vox_it = this->begin(); vox_it != this->end(); ++vox_it) vox_it->second.clear(); } + + }; + + } + + } + +} + + +#undef LOOP + +#endif //__bts_image_reference_buffer_h__ diff --git a/src/bts/image/voxel.h b/src/bts/image/voxel.h new file mode 100644 index 0000000..cf19439 --- /dev/null +++ b/src/bts/image/voxel.h @@ -0,0 +1,194 @@ +/* + Copyright 2010 Brain Research Institute/National ICT Australia (NICTA), Melbourne, Australia + + Written by Thomas G Close, 5/05/09. + + This file is part of Bayesian Tractlet Sampling (BTS). + + BTS is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + BTS is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with BTS. If not, see . + +*/ + +#ifndef __bts_image_voxel_h__ +#define __bts_image_voxel_h__ + +namespace BTS { + namespace Image { + + template class Voxel; + + } +} + + +#include +#include + +#include "bts/common.h" + +#define LOOP(op) \ +for (size_t encode_i = 0; encode_i < this->num_encodings(); encode_i++) {\ + op \ +} + + + +namespace BTS { + + namespace Image { + + template std::ostream& operator<< (std::ostream& stream, const Voxel& voxel); + + template class Voxel { + + protected: + + std::vector intensities; + + public: + + Voxel() {} + + Voxel(size_t num_encodings) + : intensities(num_encodings) {} + + + Voxel(size_t num_encodings, const T& default_value) + : intensities(num_encodings, default_value) { + } + + + Voxel(const Voxel& voxel) + : intensities(voxel.intensities) {} + + + Voxel& operator= (const Voxel& voxel) + { intensities = voxel.intensities;return *this; } + + + template Voxel& operator=(const U& vox) + { return operator=((const Voxel&)vox); } + + + + virtual ~Voxel() {} + + void resize(size_t new_size, const T& default_value = T()) + { intensities.resize(new_size, default_value); } + + T& operator[] (size_t encode_i) + { return intensities[encode_i]; } + + + const T& operator[] (size_t encode_i) const + { return intensities[encode_i]; } + + + Voxel operator-() const + { return Voxel(*this).negate(); } + + + Voxel& negate() + { LOOP(operator[](encode_i) = -operator[](encode_i);) return *this; } + + + Voxel& operator+= (const Voxel& v) + { LOOP(operator[](encode_i) += v[encode_i];) return *this; } + + + Voxel& operator+= (T f) + { LOOP(operator[](encode_i) += f;) return *this; } + + + Voxel& operator-= (const Voxel& v) + { LOOP(operator[](encode_i) -= v[encode_i];) return *this; } + + + Voxel& operator-= (T f) + { LOOP(operator[](encode_i) -= f;) return *this; } + + + Voxel& operator*= (T f) + { LOOP(operator[](encode_i) *= f;) return *this; } + + + Voxel& operator/= (T f) + { LOOP(operator[](encode_i) /= f;) return *this; } + + + Voxel operator+ (const Voxel& v) const + { Voxel answer(*this); answer += v; return answer; } + + + Voxel operator+ (T f) const + { Voxel answer(*this); answer += f; return answer; } + + + Voxel operator- (const Voxel& v) const + { Voxel answer(*this); answer -= v; return answer; } + + + Voxel operator- (T f) const + { Voxel answer(*this); answer -= f; return answer; } + + + Voxel operator* (T f) const + { Voxel answer(*this); answer *= f; return answer; } + + + Voxel operator/ (T f) const + { Voxel answer(*this); answer /= f; return answer; } + + + Voxel& zero() + { LOOP(BTS::zero(operator[](encode_i));) return *this; } + + + size_t num_encodings() const + { return intensities.size(); } + + + size_t size() const + { return intensities.size(); } + + friend std::ostream& operator<<<> (std::ostream& stream, const Voxel& voxel); + + }; + + template Voxel operator+ (T f, const Voxel& v) + { Voxel answer(v); answer += f; return answer; } + + + template Voxel operator* (T f, const Voxel& v) + { Voxel answer(v); answer *= f; return answer; } + + + template std::ostream& operator<< (std::ostream& stream, const Voxel& voxel) { + + for (size_t encode_i = 0; encode_i < voxel.num_encodings(); encode_i++) { + stream << voxel[encode_i] << ", "; + } + stream << std::endl; + return stream; + + } + + + } + +} + +#undef LOOP + +#endif diff --git a/src/bts/inline_functions.h b/src/bts/inline_functions.h new file mode 100644 index 0000000..e334ccb --- /dev/null +++ b/src/bts/inline_functions.h @@ -0,0 +1,56 @@ +/* + Copyright 2010 Brain Research Institute, Melbourne, Australia + + Written by Thomas G Close on Jun 3, 2010. + + This file is part of Bayesian Tractlet Sampling (BTS). + + BTS is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + BTS is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with BTS. If not, see . + +*/ + +#ifndef __bts_inline_functions_h__ +#define __bts_inline_functions_h__ + + + +#include "bts/image/inline_functions.h" + +#include "bts/prob/inline_functions.h" + + +#include "bts/diffusion/inline_functions.h" + +#include "bts/analysis/inline_functions.h" + +#include "bts/mcmc/inline_functions.h" + +#include "bts/utilities/inline_functions.h" + + +//#ifdef __bts_triple_tensor_h__ +// +//#include "bts/triple/tensor.cpp.h" +// +//#endif + +//#ifdef __bts_triple_tensor_writer_h__ +// +//#include "bts/triple/tensor/writer.cpp.h" +// +//#endif + +#endif /* __inlined_functions_h__ */ + + diff --git a/src/bts/math/blossom.cpp b/src/bts/math/blossom.cpp new file mode 100644 index 0000000..65af6ab --- /dev/null +++ b/src/bts/math/blossom.cpp @@ -0,0 +1,229 @@ +/* + Copyright 2008 Brain Research Institute, Melbourne, Australia + + Written by Thomas G Close, Mar 20, 2011. + + This file is part of MRtrix. + + MRtrix is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + MRtrix is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with MRtrix. If not, see . + +*/ + +#include +#include + +#include "bts/common.h" + +#include "bts/math/blossom.h" + +#include "blossom5/PerfectMatching.h" +#include "blossom5/CheckPerfectMatching.h" + +const double WEIGHTS_RANGE = 1e6; + +namespace BTS { + + namespace Math { + + namespace Blossom { + + + std::vector match_pairs(const std::vector& edges, + bool check_match, + bool fractional_jumpstart, + int dual_greedy_update_option, + double dual_LP_threshold, + bool update_duals_before, + bool update_duals_after, + double single_tree_threshold, + bool verbose) { + + + if (!edges.size()) + throw Exception ("Edges vector passed to 'Math::Blossom::match_pairs' is empty."); + + struct PerfectMatching::Options options; + + //---------------------------------------------------------------------------------// + // Convert weights from double to int with the smallest amount of information lost // + //---------------------------------------------------------------------------------// + + + std::set nodes; + + for (size_t edge_i = 0; edge_i < edges.size(); ++edge_i) { + nodes.insert(edges[edge_i].first); + nodes.insert(edges[edge_i].second); + } + + if (nodes.size() & 1) + throw Exception ("Odd number of nodes (" + str(edges.size()) + "), run BTS::Math::Blossom::if_odd_remove_worst() first to remove worst match (in a greedy sense)."); + + + size_t mapped_node = 0; + std::map mapped_nodes; + + for (std::set::iterator node_it = nodes.begin(); node_it != nodes.end(); ++node_it) { + mapped_nodes[*node_it] = mapped_node; + ++mapped_node; + } + + int* edges_array = new int[edges.size()*2]; + + for (size_t edge_i = 0; edge_i < edges.size(); ++edge_i) { + edges_array[edge_i*2] = mapped_nodes[edges[edge_i].first]; + edges_array[edge_i*2+1] = mapped_nodes[edges[edge_i].second]; + } + + + double max_weight = std::max_element(edges.begin(), edges.end())->weight; + double min_weight = std::min_element(edges.begin(), edges.end())->weight; + + double range = max_weight - min_weight; + + int* weights_array = new int[edges.size()]; + + for (size_t edge_i = 0; edge_i < edges.size(); edge_i++) { + weights_array[edge_i] = (edges[edge_i].weight - min_weight) * WEIGHTS_RANGE / range; + } + + + std::ofstream f ("/home/tclose/data/edge_graph.txt"); + f << nodes.size() << " " << edges.size() << std::endl; + for (size_t edge_i = 0; edge_i < edges.size(); ++edge_i) + f << edges_array[edge_i*2] << " " << edges_array[edge_i*2+1] << " " << weights_array[edge_i] << std::endl; + + + PerfectMatching *pm = new PerfectMatching(nodes.size(), edges.size()); + for (size_t edge_i = 0; edge_i < edges.size(); ++edge_i) + pm->AddEdge(edges_array[edge_i*2], edges_array[edge_i*2+1], weights_array[edge_i]); + + pm->options = options; + pm->Solve(); + + if (check_match) { + + int error = CheckPerfectMatchingOptimality(nodes.size(), edges.size(), edges_array, weights_array, pm); + + if (error) + throw Exception ("Blossom pair matching failed (error code " + str(error) + ")."); + + } + + std::vector output_pairs; + + for (size_t edge_i = 0; edge_i < edges.size(); ++edge_i) + if (pm->GetSolution(edge_i)) + output_pairs.push_back(edges[edge_i]); + + delete pm; + delete weights_array; + delete edges_array; + + return output_pairs; + + } + + + + //If there are an odd number of nodes then remove the node with the maximum minimum weight. + std::vector make_even(const std::vector& edges) { + + std::map node_min_weights; + + for (size_t edge_i = 0; edge_i < edges.size(); ++edge_i) { + + double weight = edges[edge_i].weight; + + for (size_t node_i = 0; node_i < 2; ++node_i) { + + size_t node = edges[edge_i].node(node_i); + + if (!node_min_weights.count(node)) + node_min_weights[node] = weight; + else { + if (weight < node_min_weights[node]) + node_min_weights[node] = weight; + } + + } + + } + + size_t num_nodes = node_min_weights.size(); + + std::vector even_edges (edges); + + //If odd number of nodes, remove the 'worst' one. + if (num_nodes & 1) { + + bool even_found = false; + + std::vector< std::pair > sorted_min_weights; + + for (std::map::iterator min_weight_it = node_min_weights.begin(); min_weight_it != node_min_weights.end(); ++min_weight_it) + sorted_min_weights.push_back(std::pair(min_weight_it->first, min_weight_it->second)); + + std::sort(sorted_min_weights.begin(), sorted_min_weights.end(), CompareSecond()); + + for (std::vector< std::pair >::reverse_iterator mw_it = sorted_min_weights.rbegin(); mw_it != sorted_min_weights.rend(); mw_it++) { + + size_t node = mw_it->first; + + for (std::vector::iterator edge_it = even_edges.begin(); edge_it != even_edges.end();) + if ((edge_it->first == node) || (edge_it->second == node)) + edge_it = even_edges.erase(edge_it); + else + ++edge_it; + + if (calc_num_nodes(even_edges) & 1) + even_edges = edges; + else { + even_found=true; + break; + } + + } + + if (!even_found) + throw Exception ("An even number of nodes could not be found using the 'make_even' algorithm. Suggest manual removal."); + + } + + return even_edges; + + } + + + + + size_t calc_num_nodes(const std::vector& edges) { + + std::set nodes; + + for (std::vector::const_iterator edge_it = edges.begin(); edge_it != edges.end(); ++edge_it) { + nodes.insert(edge_it->first); + nodes.insert(edge_it->second); + } + + return nodes.size(); + + } + + + } + + } + +} diff --git a/src/bts/math/blossom.h b/src/bts/math/blossom.h new file mode 100644 index 0000000..965647e --- /dev/null +++ b/src/bts/math/blossom.h @@ -0,0 +1,60 @@ +/* + Copyright 2008 Brain Research Institute, Melbourne, Australia + + Written by Thomas G Close, Mar 16, 2011. + + This file is part of MRtrix. + + MRtrix is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + MRtrix is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with MRtrix. If not, see . + +*/ + +#ifndef __bts_math_blossom_h__ +#define __bts_math_blossom_h__ + +#include +#include "bts/common.h" + +#include "bts/math/blossom/edge.h" + +namespace BTS { + + namespace Math { + + namespace Blossom { + + + std::vector match_pairs(const std::vector& edges, + bool check_match = false, + bool fractional_jumpstart = true, + int dual_greedy_update_option = 0, + double dual_LP_threshold = 0.0, + bool update_duals_before = false, + bool update_duals_after = false, + double single_tree_threshold = 1.0, + bool verbose = true); + + + + std::vector make_even(const std::vector& edges); + + + size_t calc_num_nodes(const std::vector& edges); + + } + } + +} + +#endif /* __bts_math_blossom_h__ */ diff --git a/src/bts/math/blossom/edge.h b/src/bts/math/blossom/edge.h new file mode 100644 index 0000000..24d5eab --- /dev/null +++ b/src/bts/math/blossom/edge.h @@ -0,0 +1,71 @@ +/* + Copyright 2008 Brain Research Institute, Melbourne, Australia + + Written by Thomas G Close, Mar 20, 2011. + + This file is part of MRtrix. + + MRtrix is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + MRtrix is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with MRtrix. If not, see . + +*/ + +#ifndef __bts_math_blossom_edge_h__ +#define __bts_math_blossom_edge_h__ + +namespace BTS { + + namespace Math { + + namespace Blossom { + + class Edge { + + public: + + Edge() {} + + Edge(size_t first, size_t second, double weight) + : first(first), second(second), weight(weight) {} + + public: + + size_t first; + size_t second; + double weight; + + bool has_node(size_t index) const + { return (first == index) || (second == index); } + + size_t& node(size_t index) { assert(index < 2); return !index ? first : second; } + const size_t& node(size_t index) const { assert(index < 2); return !index ? first : second; } + + bool operator< (const Edge& e) const { return weight < e.weight; } + + }; + + + inline std::ostream& operator<<(std::ostream& stream, const Edge& e) { + + stream << "{" << e.first << "," << e.second << "} = " << e.weight; + + return stream; + + } + } + + } + +} + +#endif /* */ diff --git a/src/bts/math/common.cpp b/src/bts/math/common.cpp new file mode 100644 index 0000000..8d54dd4 --- /dev/null +++ b/src/bts/math/common.cpp @@ -0,0 +1,139 @@ +/* + Copyright 2008 Brain Research Institute, Melbourne, Australia + + Written by Thomas G Close, Sep 13, 2010. + + This file is part of MRtrix. + + MRtrix is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + MRtrix is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with MRtrix. If not, see . + +*/ + +#include "bts/math/common.h" + +namespace BTS { + + namespace Math { + + + + MR::Math::Matrix random_rotation(gsl_rng* rand_gen, size_t ndims) { + + MR::Math::Matrix rotate_matrix(ndims,ndims); + + for (size_t col_i = 0; col_i < ndims; col_i++) { + + MR::Math::Vector ith_vector = rotate_matrix.column(col_i); + + for (size_t dim_i = 0; dim_i < ndims; dim_i++) + ith_vector[dim_i] = gsl_ran_gaussian(rand_gen, 1.0); + + MR::Math::normalise(ith_vector); + + for (size_t prev_col_i = 0; prev_col_i < col_i; prev_col_i++) { + + MR::Math::Vector proj = rotate_matrix.column(prev_col_i); + + double proj_scalar = MR::Math::dot(ith_vector, proj); + + proj *= proj_scalar; + + ith_vector -= proj; + + MR::Math::normalise(ith_vector); + + } + + } + + return rotate_matrix; + + } + + + std::vector binary_string(size_t size, size_t index) { + + + std::vector string(size); + + size_t mask = 1; + + for (size_t i = 0; i < size; ++i) { + string[i] = index & mask; + mask = mask << 1; + } + + return string; + + } + + std::string matlab_str(const MR::Math::Vector& v) { + + std::ostringstream stream; + + stream << "["; + + for (uint i = 0; i < v.size()-1; i++) + stream << v[i] << " "; + + stream << v[v.size()-1]; + + stream << "]"; + + return stream.str(); + + } + + + + std::string matlab_str(const MR::Math::Matrix& m) { + + std::ostringstream stream; + stream << "["; + + for (uint row_i = 0; row_i < m.rows(); row_i++) { + for (uint col_i = 0; col_i < m.columns(); col_i++) { + stream << m(row_i, col_i); + if (col_i != m.columns()-1) + stream << ", "; + + } + if (row_i != m.rows()-1) + stream << ";"; + } + + stream << "]"; + + return stream.str(); + + } + + + double trace(const MR::Math::Matrix& m) { + + assert(m.rows() == m.columns()); + + double sum = 0.0; + + for (uint i = 0; i < m.rows(); ++i) + sum += m(i,i); + + return sum; + + } + + + } + +} diff --git a/src/bts/math/common.h b/src/bts/math/common.h new file mode 100644 index 0000000..3eb2dd7 --- /dev/null +++ b/src/bts/math/common.h @@ -0,0 +1,91 @@ +/* + Copyright 2008 Brain Research Institute, Melbourne, Australia + + Written by Thomas G Close, 21/07/2010. + + This file is part of MRtrix. + + MRtrix is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + MRtrix is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with MRtrix. If not, see . + +*/ + +#ifndef __bts_math_common_h__ +#define __bts_math_common_h__ + +extern "C" { +#include +#include +} + +#include "math/vector.h" +#include "math/matrix.h" + +namespace BTS { + + namespace Math { + + + inline int sign(double x) + { return (x > 0) - (x < 0); } + + + template MR::Math::Matrix outer(const MR::Math::Vector& v1, const MR::Math::Vector& v2) { + + MR::Math::Matrix answer(v1.size(), v2.size()); + + for (size_t row_i = 0; row_i < v1.size(); row_i++) + for (size_t col_i = 0; col_i < v2.size(); col_i++) + answer(row_i,col_i) = v1[row_i] * v2[col_i]; + + return answer; + + } + + inline MR::Math::Matrix operator* (const MR::Math::Matrix& matrix, double scalar) { + + MR::Math::Matrix answer (matrix); + + return answer *= scalar; + + } + + inline MR::Math::Matrix operator* (double scalar, const MR::Math::Matrix& matrix) { + + return matrix * scalar; + + } + + MR::Math::Matrix random_rotation(gsl_rng* rand_gen, size_t ndims); + + + std::vector binary_string(size_t size, size_t i); + + + + //! Returns a single-line string representation of a MRtrix vector in a format readable by the MATLAB software package. + std::string matlab_str(const MR::Math::Vector& v); + + + //! Returns a single-line string representation of a MRtrix matrix in a format readable by the MATLAB software package. + std::string matlab_str(const MR::Math::Matrix& m); + + + //! returns the trace of the matrix. + double trace(const MR::Math::Matrix& m); + + } + +} + +#endif /* __bts_math_math_h__ */ diff --git a/src/bts/math/kmeans.cpp b/src/bts/math/kmeans.cpp new file mode 100644 index 0000000..6f53b75 --- /dev/null +++ b/src/bts/math/kmeans.cpp @@ -0,0 +1,72 @@ +/* + + Copyright 2010 Brain Research Institute/National ICT Australia (NICTA), Melbourne, Australia + + Modified by Thomas G Close, 10/4/11 from KMlocal.cpp + written by David Mount from the University of Maryland, 05/14/04 + as part of the Kmeans package available at + 'http://www.cs.umd.edu/~mount/Projects/KMeans/' + under the GNU General public licence. + + This file is part of Bayesian Tractlet Sampling (BTS). + + BTS is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + BTS is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with BTS. If not, see . + +*/ + +#include "bts/math/kmeans.h" // KMlocal includes + +namespace BTS { + + namespace Math { + + //---------------------------------------------------------------------- + // execute - execute the clustering algorithm + // This function executes the clustering algorithm. See the file + // KMlocal.h for a description of this algorithm. + //---------------------------------------------------------------------- + + ::KMfilterCenters KMeansBase::execute() // execute the algorithm + { + reset(); // resets everything + while (!isDone()) { // while not done + beginRun(); // start a new run + do { // do while run is not done + beginStage(); // start of stage processing + KMalg method = selectMethod(); // select a method + switch(method) { // apply one stage + case LLOYD: // Lloyd's algorithm + curr.lloyd1Stage(); + break; + case SWAP: // swap heuristic + curr.swap1Stage(); + break; + case RANDOM: // get random centers + curr.genRandom(); + break; + default: // shouldn't come here + assert(false); + break; + } + endStage(); // end of stage processing + } while (!isRunDone()); // while run is not done + endRun(); // end of run processing + tryAcceptance(); // accept if appropriate + } + return best; // return best solution + } + + + } +} diff --git a/src/bts/math/kmeans.h b/src/bts/math/kmeans.h new file mode 100644 index 0000000..777099d --- /dev/null +++ b/src/bts/math/kmeans.h @@ -0,0 +1,497 @@ +/* + + Copyright 2010 Brain Research Institute/National ICT Australia (NICTA), Melbourne, Australia + + Modified by Thomas G Close, 10/4/11 from KMlocal.h + written by David Mount from the University of Maryland, 05/14/04 + as part of the Kmeans package available at + 'http://www.cs.umd.edu/~mount/Projects/KMeans/' + under the GNU General public licence. + + This file is part of Bayesian Tractlet Sampling (BTS). + + BTS is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + BTS is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with BTS. If not, see . + +*/ + + + + +#ifndef __bts_math_kmeans_h__ +#define __bts_math_kmeans_h__ + +//---------------------------------------------------------------------- +// basic includes +//---------------------------------------------------------------------- +#include // math includes (exp, log) +#include "k_means/KMeans.h" // kmeans includes +#include "k_means/KMdata.h" // data points +#include "k_means/KMfilterCenters.h" // centers +#include "k_means/KMterm.h" // termination conditions +#include "k_means/KMrand.h" // random number generation +#include "k_means/KMlocal.h" + + +namespace BTS { + + namespace Math { + + //------------------------------------------------------------------------ + // Generic Local Search Overview + // KMlocal provides a generic algorithm for k-means clustering by + // local search. This generic algorithm is controlled by a class, + // KMlocal, whose methods provide the particular elements of each + // algorithm. + // + // Overview: + // --------- + // The generic algorithm begins by generating an initial solution + // "curr" and saving it in "best". These objects are local to the + // KMlocal structure. The value of "curr" reflects the current + // solution and "best" reflects the best solution seen so far. + // + // The algorithm consists of some number of basic iterations, + // called "stages". Each stage involves the execution of one step + // of either the swap heuristic or Lloyd's algorithm. + // + // Stages are grouped into "runs". Intuitively, a run involves a + // (small) number of stages in search of a better solution. A run + // might end, say, because a better solution was found or a fixed + // number of stages have been performed without any improvement. + // + // After a run is finished, we check to see whether we want to + // "accept" the solution. Presumably this happens if the cost is + // lower, but it may happen even if the cost is inferior in other + // circumstances (e.g., as part of a simulated annealing approach). + // Accepting a solution means copying the current solution to the + // saved solution. In some cases, the acceptance may involve + // reseting the current solution to a random solution. + // + // Generic Algorithm: + // ------------------ + // The generic local search algorithm is shown below. The various + // functions are overridden by the specific classes which provide + // the concrete details. + // + // reset() // resets curr and best + // while ( !isDone() ) { // while not done + // beginRun() // begin a new run + // do { // do while run is not done + // beginStage() // end of stage processing + // method = selectMethod() // select a method + // switch( method ) { // apply the method + // LLOYD: curr.Lloyd(); break + // SWAP: curr.Swap(); break + // RANDOM: curr.Random(); break + // } + // endStage() // end of stage processing + // } while ( !isRunDone() ) // while run is not done + // tryAcceptance() // accept if appropriate + // endRun() // end of run processing + // } + // return best // return best solution + // + // Termination Parameters + // ---------------------- + // Each algorithm relies on various parameter settings to determine + // termination conditions for runs and phases. These settings are + // stored in a class KMterm (see KMterm.h). + // + // Parameters (in term) + // -------------------- + // maxTotStage + // Maximum number of stages total. + //------------------------------------------------------------------------ + + class KMeansBase { // generic local search + protected: + // fixed quantities + int nPts; // number of points + int kCtrs; // number of centers + int dim; // dimension + ::KMterm term; // termination conditions + int maxTotStage; // max total stages (from term) + // varying quantities + int stageNo; // current stage number + int runInitStage; // stage at which run started + ::KMfilterCenters curr; // current solution + ::KMfilterCenters best; // saved solution + protected: // utility functions + virtual void printStageStats() { // print stage information + if (kmStatLev >= STAGE) { + *kmOut << "\t" << endl; + } + } + public: + // constructor + KMeansBase(const ::KMfilterCenters &sol, const ::KMterm &t) + : term(t), curr(sol), best(sol) { + nPts = sol.getNPts(); + kCtrs = sol.getK(); + dim = sol.getDim(); + stageNo = 0; + maxTotStage = term.getMaxTotStage(kCtrs, nPts); + } + + virtual ~KMeansBase() { } // virtual destructor + virtual ::KMfilterCenters execute(); // execute the algorithm + + int getTotalStages() const { // return total no. of stages + return stageNo; + } + + protected: // overridden by subclasses + virtual void reset() { // reset everything + stageNo = 0; + runInitStage = 0; + curr.genRandom(); // generate random centers + curr.getDist(); // compute initial distortion + best = curr; + } + virtual bool isDone() const { // are we done? + return stageNo >= maxTotStage; + } + virtual void beginRun() { // begin of run processing + runInitStage = stageNo; + } + virtual void beginStage() { } // start of stage processing + virtual ::KMalg selectMethod() = 0; // method: LLOYD or SWAP + virtual void endStage() { // end of stage processing + stageNo++; + } + virtual bool isRunDone() { // is run done? + return isDone(); + } + virtual void endRun() { } // end of run processing + virtual void tryAcceptance() { // test acceptance + if (curr.getDist() < best.getDist()) { // is current distortion lower? + best = curr; // then best the current + } + } + }; + + + + + //------------------------------------------------------------------------ + // KMlocalHybrid - a hybrid version combining Lloyd's and swaps. + // + // Overview + // -------- + // This implements a hybrid algorithm, which combines both of the + // previous methods along with something like simulated annealing. + // Because this uses a fast annealing schedule (T = T*timeFact) it + // should probably be called simulated quenching. + // + // The algorithm's execution is broken into the following different + // groups. + // + // Stage: One invocation of the Swap or Lloyd's algorithm. + // Run: A run consists of a consecutive sequence of swaps + // followed by a consecutive sequence of Lloyd's steps. A + // graphical representation of one run is presented below. + // + // +--+ +---+ +--------> save -----> + // | | | | Y| + // V | V | | N + // ----> Swap ------> Lloyd's ----> Accept? ----> restore --> + // old + // + // Decisions + // --------- + // There are three decisions which this algorithm needs to make. + // + // Continue swapping or move on to Lloyd's? + // This is based on the simulated annealing decision choice, + // based on the consecutive RDL. + // + // Make another pass through Lloyd's or go to acceptance? + // This is based on whether the relative improvement since the + // last stage (consecutive relative distortion loss) is above a + // certain fixed threshold (minConsecRDL). + // + // Accept the current solution: + // If the current solution is better than the saved solution, + // then yes. Otherwise, use the simulated annealing decision + // choice, based on the accumulated RDL. + // + // Simulated Annealing Choice + // -------------------------- + // Following the principal of simulated annealing, we somtimes + // chose to accept a solution, even if it is not an improvement. + // This choice occurs with probability: + // + // exp(RDL/T), + // + // where RDL is the relative distortion loss (relative to the + // saved solution), and T is the current temperature. Note that + // if RDL > 0 (improvement) then this quantity is > 1, and so we + // always accept. (Note that this is not formally correct, since + // in simulated annealing the probability should be based on the + // absolute distortion change not the relative distortion change.) + // + // Annealing Schedule + // ------------------ + // The temperature value T is a decreasing function of the number + // of the number of stages. It starts at some initial value T0 and + // decreases slowly over time. Rather than using the standard (slow) + // Boltzman annealing schedule, we use the following fast annealing + // schedule, every L stages we set + // + // T = TF * T, + // + // where: + // L (= tempRunLength) is an integer parameter set by the + // user. (Presumably it depends on the number of + // centers and the dimension of the space.) + // TF (= tempReducFactor) is a real number of the form 1-x, + // for some small x. + // + // These parameters are provided by the user and are stored in the + // termination condition class. + // + // Initial Temperature + // ------------------- + // The initial temperature T0 is a tricky thing to set. The user + // supplies a parameter p0 = initProbAccept, the initial + // probability of accepting a random swap. However, the + // probability of acceting a swap depends on the given RDL value. + // To estimate this, for the first L runs we use p0 as the + // probability. Over these runs we compute the average rdl value. + // Once the first L runs have completed, we set T0 so that: + // + // exp(-averageRDL/T0) = initProbAccept, + // + // or equivalently + // + // T0 = -averageRDL/(ln initProbAccept). + // + // Parameters (in term) + // -------------------- + // initProbAccept + // Initial probability of accepting an solution that does + // not alter the distortion. + // tempRunLength + // The number of stages before chaning the temperature. + // tempReducFactor + // The factor by which temperature is reduced at the end of + // a temperature run. + // minConsecRDL + // Minimum consecutive RDL needed to keep Lloyd's algorithm + // going. + // + // State variables + // --------------- + // temperature + // Temperature parameter for simulated annealing. + // initTempRunStage + // The stage number at the start of a temperature run. + // areSwapping + // True if we are still in swapping portion of a run, and + // false if we are in the Lloyd's portion of the run. + // prevDist + // In order to compute the consecutive RDL we need to save + // the distortion at the start of each trip through Lloyd's + // algorithm. + // save Simulated annealing may move to a worse solution at + // times. The "best" solution stores the global best. The + // "save" solution is the solution that simulated annealing + // falls back to if a solution is not accepted. + // sumTrials + // Sum of rdl values during the initial trials, where we + // are trying to estimate the mean RDL value. + // trialCt + // A counter which starts at the number of initial trials. + // When it reaches 0, we compute the average RDL value and + // set the initial temperature value. + // + // Utilities particular to Simulated Annealing + // ------------------------------------------- + // simAnnealAccept() + // Random acceptance test for simulated annealing. + // initTempRun() + // Initialize a temperature run process by computing the + // initial temperature value and saving the current + // stage number in initTempRunStage. + // isTempRunDone() + // Check whether the current temperature run is done. + // endTempRun() + // End a temperature run by updating the temperature value + // and saving the current stage number in initTempRunStage. + // + // Overridden methods + // ------------------ + // reset() + // Do base class resetting. Initialize areSwapping to + // true. Save the current solution in save. Initialize + // temperature runs. + // beginStage() + // Save current distortion in prevDist (for computing + // consecutive RDL). + // selectMethod() + // If we are swapping, use Swap, and otherwise use Lloyd's. + // endStage() + // Increment the stage number, get the distortion, and print + // the end-of-stage information. + // isRunDone() + // If we are swapping, then compute the simulated annealing + // random choice. If it rejects, then we have ended the + // swapping process and are transitioning to Lloyd's + // algorithm. In either case, return false. + // + // If we are doing Lloyd's, return true if the consecutive + // RDL is less than minConsecRDL, meaning that Lloyd's + // algorithm has converged. + // endRun() + // If temperature run is done then do processing for the + // end of a temperature run. Set areSwapping to true. + // tryAcceptance() + // At this point we have completed all the swaps and all + // the Lloyd's iterations. If the distortion has improved + // or if the simulated annealing random choice says to, + // save the current solution (and update the overall best + // if needed). Otherwise, restore the previously saved + // solution. + //------------------------------------------------------------------------ + + class KMeans : public ::KMlocal { + private: + double temperature; // temperature used in SA + int initTempRunStage; // stage when temp run started + bool areSwapping; // are we swapping? (or Lloyd's) + double prevDist; // distortion from prev stage + double sumTrials; // sum of RDL's over trials + int trialCt; // trial count + ::KMfilterCenters save; // saved solution + protected: // local utilities + double accumRDL() // accumulated RDL + { return (save.getDist() - curr.getDist()) / save.getDist(); } + + double consecRDL() // consecutive RDL + { return (prevDist - curr.getDist()) / prevDist; } + + virtual void printStageStats() { // print end of stage info + if (kmStatLev >= STAGE) { + *kmOut << " " << endl; + } + } + virtual void printRunStats() { // print end of run info + if (kmStatLev >= STAGE) { + *kmOut << " " << endl; + } + } + protected: // SA utilities + int nTrials() // number of trials + { return kmMax(20, term.getTempRunLength()); } + + bool simAnnealAccept(double rdl) { // random accept choice + double prob; + if (--trialCt >= 0) { // still in trial phase? + sumTrials += fabs(rdl); // increment sum of RDLs + if (trialCt == 0) { // last trial? get temp + temperature = -sumTrials/(nTrials()*log(term.getInitProbAccept())); + initTempRunStage = stageNo; // start counting stages + } + prob = term.getInitProbAccept(); // use initial probability + } + else { // use SA probability + prob = kmMin(term.getInitProbAccept(), exp(rdl/temperature)); + } + return prob > kmRanUnif(); + } + + void initTempRuns() { // initialize for temp runs + sumTrials = 0; + trialCt = nTrials(); + initTempRunStage = ::KM_HUGE_INT; // not counting stages + } + + bool isTempRunDone() // end of temperature run? + { return stageNo - initTempRunStage >= term.getTempRunLength(); } + + void endTempRun() { // process end of temp run + temperature *= term.getTempReducFact(); // reduce temperature + initTempRunStage = stageNo; + } + + public: + // constructor + KMeans(const ::KMfilterCenters &sol, const ::KMterm &t) + : ::KMlocal(sol, t), save(sol) { } + protected: // overridden methods + virtual void reset() { + ::KMlocal::reset(); // reset base class + save = curr; // save initial centers + areSwapping = true; // start with swapping + initTempRuns(); // initialize sim. annealing + printStageStats(); + } + virtual void beginStage() { // start of stage processing + prevDist = curr.getDist(); // save previous distortion + } + virtual ::KMalg selectMethod() { // select method + return (areSwapping ? SWAP : LLOYD ); + } + virtual void endStage() { // end of stage processing + stageNo++; // increment stage number + curr.getDist(); // get distortion + printStageStats(); + } + virtual bool isRunDone() { // run is done + if (areSwapping) { // swapping? + if (!simAnnealAccept(consecRDL())) { // check SA acceptance + areSwapping = false; // transition to Lloyd's + } + return false; + } + else { // doing Lloyd's algorithm + return consecRDL() <= term.getMinConsecRDL(); // test for convergence + } + } + virtual void endRun() { // end of run processing + if (isTempRunDone()) endTempRun(); // check/process end of temp run + areSwapping = true; // return to swapping + printRunStats(); + } + virtual void tryAcceptance() { // test acceptance + if (accumRDL() > 0) { // improvement over saved? + save = curr; // save this one + if (save.getDist() < best.getDist()) { // new best? + best = save; + } + } + else if (simAnnealAccept(accumRDL())) { // SA says save anyway + save = best; + } + else { // reject, restore old solution + curr = save; + } + } + }; + + + + + } +} + +#endif diff --git a/src/bts/math/munkres.h b/src/bts/math/munkres.h new file mode 100644 index 0000000..2e5e73a --- /dev/null +++ b/src/bts/math/munkres.h @@ -0,0 +1,568 @@ +/* + Copyright 2010 Brain Research Institute/National ICT Australia (NICTA), Melbourne, Australia + + Written by Thomas G Close, 5/05/09. + + This file is part of Bayesian Tractlet Sampling (BTS). + + BTS is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + BTS is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with BTS. If not, see . + +*/ + + +#ifndef __bts_math_munkres_h__ +#define __bts_math_munkres_h__ + +namespace BTS { + namespace Math { + + template class Munkres; + } +} + +#include + + +#include "math/matrix.h" +#include "math/vector.h" +#include "bts/common.h" + +namespace BTS { + + namespace Math { + + class Index { + + public: + + size_t row, column; + + Index () : row(99999999), column(99999999) {} + Index (size_t row, size_t column) : row(row), column(column) {} + + friend std::ostream& operator<< (std::ostream& stream, const Index& idx) + { + stream << "(" << idx.row << ", " << idx.column << ")"; + + return stream; + } + + }; + + template class Munkres { + + protected: + + const static int UNASSIGNED; + const static int NOT_PROPOSED; + + size_t nrows, ncolumns; + + MR::Math::Matrix Costs; + + + std::set all_rows; + std::set all_cols; + + std::set open_rows; + std::set open_cols; + + std::vector assigned_col; + std::vector assigned_row; + + std::vector proposed_col; + + public: + + + Munkres(size_t nrows, size_t ncolumns) : nrows(nrows), ncolumns(ncolumns), Costs(nrows,ncolumns), assigned_col(nrows), assigned_row(ncolumns), proposed_col(nrows) { + + if (ncolumns < nrows) + throw Exception ("Number of columns (" + str(ncolumns) + ") must exceed number of rows (" + str(nrows) + ")."); + + for (size_t row_i = 0; row_i < nrows; row_i++) all_rows.insert(row_i); + for (size_t col_i = 0; col_i < ncolumns; col_i++) all_cols.insert(col_i); + + } + + ~Munkres() {} + + + void match(MR::Math::Matrix& Costs, std::vector& matched_indices); + + protected: + + void subtract_row_min(); + + T min_open_value(); + + void initial_assignment(); + + bool found_solution(); + + Index new_match(); + + void increment_costs(); + + void add_to_closed_rows(T value); + + void subtract_from_open_columns(T value); + + void reassign_matches(Index new_match); + + void assign(size_t row, size_t col); + + void unassign(size_t row, size_t col); + + void propose(size_t row, size_t col); + + void clear_assignments(); + + void clear_proposals(); + + void open_all_rows(); + + void open_all_columns(); + + public: + + friend std::ostream& operator<< (std::ostream& stream, const Munkres& H) + { + + stream << std::endl << "----------------" << std::endl << "Cost: " << std::endl << H.Costs << std::endl; + + stream << "Assigned cols: "; + for (std::vector::const_iterator it = H.assigned_col.begin(); it != H.assigned_col.end(); it++) + stream << *it << ", "; + stream << std::endl; + + stream << "Assigned rows: "; + for (std::vector::const_iterator it = H.assigned_row.begin(); it != H.assigned_row.end(); it++) + stream << *it << ", "; + stream << std::endl; + + stream << "proposed cols: "; + for (std::vector::const_iterator it = H.proposed_col.begin(); it != H.proposed_col.end(); it++) + stream << *it << ", "; + stream << std::endl; + + stream << "Open rows: "; + for (std::set::const_iterator row_it = H.open_rows.begin(); row_it != H.open_rows.end(); row_it++) + stream << *row_it << ", "; + stream << std::endl; + + std::cout << "Open columns: "; + for (std::set::const_iterator col_it = H.open_cols.begin(); col_it != H.open_cols.end(); col_it++) + stream << *col_it << ", "; + stream << std::endl; + + stream << "-------end------" << std::endl << std::endl; + + return (stream); + } + + + }; + + + template const int Munkres::UNASSIGNED = -1; + template const int Munkres::NOT_PROPOSED = -1; + + + template void Munkres::match(MR::Math::Matrix& Costs, std::vector& matched_indices) { + + + if ((Costs.rows() != nrows) || (Costs.columns() != ncolumns) || (matched_indices.size() != nrows)) + throw Exception ("Size of cost matrix " + str(Costs.rows()) + "x" + str(Costs.columns()) + " or matched_indices vector " + str(matched_indices.size()) + " does not match Munkres object " + str(nrows) + "x" + str(ncolumns) + "."); + + this->Costs = Costs; + + open_rows = all_rows; + open_cols = all_cols; + + clear_assignments(); + + subtract_row_min(); + + initial_assignment(); + + while (!found_solution()) { + + clear_proposals(); + + Index proposed_match = new_match(); + + reassign_matches(proposed_match); + + } + + //Assign assigned cols to output vector reference (and cast to unsigned ints) + for (size_t i = 0; i < nrows; i++) + matched_indices[i] = (size_t)assigned_col[i]; + + } + + + template void Munkres::assign(size_t row, size_t col) { + + + assigned_row[col] = row; + assigned_col[row] = col; + +#ifdef _DEBUG_VERBOSE_ + std::cout << "assigned: " << row << ", " << col << *this << std::endl; +#endif + + } + + + template void Munkres::unassign(size_t row, size_t col) { + + + + assigned_row[col] = UNASSIGNED; + assigned_col[row] = UNASSIGNED; + +#ifdef _DEBUG_VERBOSE_ + std::cout << "unassigned: " << row << ", " << col << *this << std::endl; +#endif + + } + + + template void Munkres::propose(size_t row, size_t col) { + + + proposed_col[row] = col; + +#ifdef _DEBUG_VERBOSE_ + std::cout << "proposed: " << row << ", " << col << *this << std::endl; +#endif + + } + + + template void Munkres::open_all_rows() { + + open_rows = all_rows; + +#ifdef _DEBUG_VERBOSE_ + std::cout << "open all rows: " << *this << std::endl; +#endif + + } + + + template void Munkres::open_all_columns() { + + open_cols = all_cols; + +#ifdef _DEBUG_VERBOSE_ + std::cout << "open all cols: " << *this << std::endl; +#endif + + } + + + template void Munkres::clear_assignments() { + + + fill(assigned_col.begin(), assigned_col.end(), UNASSIGNED); + fill(assigned_row.begin(), assigned_row.end(), UNASSIGNED); + +#ifdef _DEBUG_VERBOSE_ + std::cout << "cleared assignments" << *this << std::endl; +#endif + + } + + + template void Munkres::clear_proposals() { + + fill(proposed_col.begin(), proposed_col.end(), NOT_PROPOSED); + +#ifdef _DEBUG_VERBOSE_ + std::cout << "cleared proposals" << *this << std::endl; +#endif + } + + + template void Munkres::subtract_row_min() { + + + for (size_t row_i = 0; row_i < nrows; row_i++) { + MR::Math::Vector row = Costs.row(row_i); + size_t index; + T min_val = min (row, index); + row -= min_val; + } + +#ifdef _DEBUG_VERBOSE_ + std::cout << "subtracted min cost in row" << *this << std::endl; +#endif + + + } + + + template void Munkres::initial_assignment() { + + std::set::iterator next_row = open_rows.begin(); + + for (std::set::iterator row_it = next_row; row_it != open_rows.end(); row_it = next_row) { + + ++next_row; + + for (std::set::iterator col_it = open_cols.begin(); col_it != open_cols.end(); col_it++) { + + if ( Costs (*row_it, *col_it) == 0 ) { + + assign(*row_it, *col_it); + open_rows.erase(row_it); + open_cols.erase(col_it); + break; + } + } + + } + + open_all_rows(); + open_all_columns(); + +#ifdef _DEBUG_VERBOSE_ + std::cout << "Initial assignment: " << *this << std::endl; +#endif + + + } + + + +// Close each column containing a starred zero. If 'n' columns are closed, the starred zeros describe a complete set of unique +// assignments. + + template bool Munkres::found_solution() { + + size_t num_assigned = 0; + + for (size_t col_i = 0; col_i < ncolumns; col_i++) { + + if (assigned_row[col_i] != UNASSIGNED) { + open_cols.erase(col_i); + num_assigned++; + } + + } + + bool found_sol = false; + if (num_assigned == nrows) + found_sol = true; + +#ifdef _DEBUG_VERBOSE_ + std::cout << "Covered columns: " << *this << std::endl; +#endif + + return found_sol; + + } + + + +// Find a open zero and propose it. If there is no assigned zero in the row containing this proposed zero, reassign the new chain +// of matches. Otherwise, close this row and open the column containing the assigned zero. Continue in this manner until there are +// no open zeros left. + + template Index Munkres::new_match() { + + while (true) { + + std::set::iterator next_row = open_rows.begin(); + + for (std::set::iterator row_it = next_row; row_it != open_rows.end(); row_it = next_row) { + + ++next_row; + + for (std::set::iterator col_it = open_cols.begin(); col_it != open_cols.end(); col_it++) { + + if ( Costs (*row_it, *col_it) == 0) { + + propose(*row_it, *col_it); + + if ( assigned_col[*row_it] == UNASSIGNED ) { + +#ifdef _DEBUG_VERBOSE_ + std::cout << "proposed new zero, (no assignment returning...) (" << *row_it << ", " << *col_it << ")" << *this << std::endl; +#endif + return Index(*row_it, *col_it); + } else { + open_cols.insert(assigned_col[*row_it]); + open_rows.erase(row_it); + +#ifdef _DEBUG_VERBOSE_ + std::cout << "proposed new zero, (found assignment continuing...)" << *this << std::endl; +#endif + + break; + } + + } + + } + + } + + increment_costs(); + + } + + } + + + +// Add the minimum open value to every element of each closed row, and subtract it from every element of each opened column. +// This step uses the smallest opened value in the cost matrix to modify the matrix. It may seem that since the values in the +// cost matrix are being altered, we would lose sight of the original problem. However, we are only changing certain values +/// that have already been tested and found not to be elements of the minimal assignment. Also we are only +// changing the values by an amount equal to the smallest value in the cost matrix, so we will not jump over the optimal +// (i.e. minimal assignment) with this change. + + + template void Munkres::increment_costs() { + + T min_value = min_open_value(); + + add_to_closed_rows(min_value); + + subtract_from_open_columns(min_value); + + + } + + + template T Munkres::min_open_value() { + + + T min_value = INFINITY; + + for (std::set::iterator row_it = open_rows.begin(); row_it != open_rows.end(); row_it++) { + + for (std::set::iterator col_it = open_cols.begin(); col_it != open_cols.end(); col_it++) { + + if ( Costs(*row_it, *col_it) < min_value ) + min_value = Costs(*row_it, *col_it); + + } + + } + +#ifdef _DEBUG_VERBOSE_ + std::cout << "min open value: " << min_value << *this << std::endl; +#endif + + return min_value; + + } + + + template void Munkres::add_to_closed_rows(T value) { + + + for (size_t row_i = 0; row_i < nrows; row_i++) { + + //If row is closed. + if (open_rows.find(row_i) == open_rows.end()) { + + for (size_t col_i = 0; col_i < ncolumns; col_i++) + Costs (row_i, col_i) += value; + + } + + } + + } + + + template void Munkres::subtract_from_open_columns(T value) { + + for (size_t row_i = 0; row_i < nrows; row_i++) { + + for (std::set::iterator col_it = open_cols.begin(); col_it != open_cols.end(); col_it++) { + + Costs( row_i, *col_it) -= value; + + } + } + } + + + +// Construct a chain of alternating proposed and assigned zeros as follows. Let Z0 represent the unclosed proposed zero +// found in Step 4. Let Z1 denote the assigned zero in the column of Z0 (if any). Let Z2 denote the proposed zero in the +// row of Z1 (there will always be one). Continue until the series terminates at a proposed zero that has no assigned zero +// in its column. Unassign each assigned zero of the series, assign each proposed zero of the series, remove all proposals +// and open all rows and columns. This step is very similar to the augmenting location algorithm (for solving the maximal +// matching problem) + + template void Munkres::reassign_matches(Index new_match) { + + std::vector unassign_indices; + std::vector assign_indices; + + assign_indices.push_back(new_match); + + size_t col_i = new_match.column; + + while (assigned_row[col_i] != UNASSIGNED) { + + + Index unassign_idx (assigned_row[col_i], col_i); + Index assign_idx (assigned_row[col_i], proposed_col[assigned_row[col_i]]); + + assign_indices.push_back(assign_idx); + unassign_indices.push_back(unassign_idx); + + col_i = proposed_col[assigned_row[col_i]]; + + } + +#ifdef _DEBUG_VERBOSE_ + std::cout << "reassigning matches" << *this << std::endl; +#endif + + + for (std::vector::iterator it = unassign_indices.begin(); it != unassign_indices.end(); it++) + unassign(it->row, it->column); + + for (std::vector::iterator it = assign_indices.begin(); it != assign_indices.end(); it++) + assign(it->row, it->column); + + assign_indices.clear(); + unassign_indices.clear(); + + open_all_rows(); + open_all_columns(); + + + } + + + + + } + +} + + +#endif + diff --git a/src/bts/math/odr.h b/src/bts/math/odr.h new file mode 100644 index 0000000..3092a4b --- /dev/null +++ b/src/bts/math/odr.h @@ -0,0 +1,110 @@ +/* + Copyright 2010 Brain Research Institute/National ICT Australia (NICTA), Melbourne, Australia + + Written by Thomas G Close, 5/05/09. + + This file is part of Bayesian Tractlet Sampling (BTS). + + BTS is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + BTS is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with BTS. If not, see . + +*/ + + +#ifndef __bts_math_odr_h__ +#define __bts_math_odr_h__ + +#include "math/matrix.h" +#include "math/vector.h" + +#include "bts/math/svd.h" +#include "bts/coord.h" + + +#include "bts/triple.h" + +//#define _DEBUG_VERBOSE_ + +namespace BTS { + namespace Math { + + class Line { + + public: + Coord centre; + Coord direction; + + friend std::ostream& operator<< (std::ostream& stream, const Line line) + { + std::cout << "centre = " << line.centre << std::endl; + std::cout << "direction = " << line.direction << std::endl; + return (stream); + } + + }; + + // Find the centroid of a set of points. + inline Coord centroid(const std::vector& points) { + + Coord sum(0.0,0.0,0.0); + + for (std::vector::const_iterator it = points.begin(); it != points.end(); it++) + sum += *it; + + sum /= points.size(); + + return sum; + + } + + + // Find the orthogonal-distance regressor line through a set of points. + inline Line odr(const std::vector& points) { + + Line line; + + line.centre = centroid(points); + + MR::Math::Matrix matrix(points.size(), 3); + + for (size_t point_i = 0; point_i < points.size(); point_i++) { + + matrix(point_i,X) = points[point_i][X] - line.centre[X]; + matrix(point_i,Y) = points[point_i][Y] - line.centre[Y]; + matrix(point_i,Z) = points[point_i][Z] - line.centre[Z]; + + } + + + USV usv = svd(matrix); +// +// std::cout << "V = ["; +// for (size_t row_i = 0; row_i < usv.v.rows(); row_i++) { +// for (size_t col_i = 0; col_i < usv.v.columns(); col_i++) +// std::cout << usv.v(row_i,col_i) << " "; +// std::cout << "; "; +// } +// std::cout << "]" << std::endl; + + line.direction.set(usv.v(X,0), usv.v(Y,0), usv.v(Z,0)); +// line.direction.set(usv.v(max_sigma_i,X), usv.v(max_sigma_i,Y), usv.v(max_sigma_i,Z)); + return line; + + } + + + + } +} + +#endif diff --git a/src/bts/math/polygon_intersect.h b/src/bts/math/polygon_intersect.h new file mode 100644 index 0000000..2d342ce --- /dev/null +++ b/src/bts/math/polygon_intersect.h @@ -0,0 +1,132 @@ +#include + +typedef double real; // could be double. +#define C const +#define bigReal 1.E38 // FLT_MAX, DBL_MAX if double above +#include + +typedef struct{real x; real y;} point; + +real inter(point * a, int na, point * b, int nb) { + + typedef struct{point min; point max;} box; + typedef long long hp; + typedef struct{long x; long y;} ipoint; + typedef struct{long mn; long mx;} rng; + typedef struct{ipoint ip; rng rx; rng ry; short in;} vertex; + + vertex ipa[na+1], ipb[nb+1]; + box B = { {bigReal, bigReal}, {-bigReal, -bigReal} }; + + double ascale; + + void range(point * x, int c) { + + while(c--) { + + void bd(real * X, real y){ + *X = *Xy ? *X:y; + } + + bd(&B.min.x, x[c].x); + bu(&B.max.x, x[c].x); + bd(&B.min.y, x[c].y); + bu(&B.max.y, x[c].y); + } + } + + if(na < 3 || nb < 3) + return 0; + + range(a, na); + range(b, nb); + + { const real gamut = 500000000., mid = gamut/2.; + real rngx = B.max.x - B.min.x, sclx = gamut/rngx, + rngy = B.max.y - B.min.y, scly = gamut/rngy; + { void fit(point * x, int cx, vertex * ix, int fudge){ + {int c=cx; while(c--){ + ix[c].ip.x = (long)((x[c].x - B.min.x)*sclx - mid)&~7|fudge|c&1; + ix[c].ip.y = (long)((x[c].y - B.min.y)*scly - mid)&~7|fudge; + }} + ix[0].ip.y += cx&1; + ix[cx] = ix[0]; + {int c=cx; while(c--) { + ix[c].rx = ix[c].ip.x < ix[c+1].ip.x ? + (rng){ix[c].ip.x,ix[c+1].ip.x}:(rng){ix[c+1].ip.x,ix[c].ip.x}; + ix[c].ry = ix[c].ip.y < ix[c+1].ip.y ? + (rng){ix[c].ip.y,ix[c+1].ip.y}:(rng){ix[c+1].ip.y,ix[c].ip.y}; + ix[c].in=0;}}} + fit(a, na, ipa, 0); fit(b, nb, ipb, 2);} + ascale = sclx*scly;} + { hp area(ipoint a, ipoint p, ipoint q) + {return (hp)p.x*q.y - (hp)p.y*q.x + + (hp)a.x*(p.y - q.y) + (hp)a.y*(q.x - p.x);} + hp s = 0; int j, k; + void cntrib(ipoint f, ipoint t, short w) + {s += (hp)w*(t.x-f.x)*(t.y+f.y)/2;} + int ovl(rng p, rng q){return p.mn < q.mx && q.mn < p.mx;} + for(j=0; jip.x + r1*(b->ip.x-a->ip.x), + a->ip.y + r1*(b->ip.y-a->ip.y)}, + b->ip, 1); + cntrib(d->ip, (ipoint){ + c->ip.x + r2*(d->ip.x - c->ip.x), + c->ip.y + r2*(d->ip.y - c->ip.y)}, 1); + ++a->in; --c->in;} + if(o) cross(&ipa[j], &ipa[j+1], &ipb[k], &ipb[k+1], a1, a2, a3, a4); + else cross(&ipb[k], &ipb[k+1], &ipa[j], &ipa[j+1], a3, a4, a1, a2); + }}}} + {void inness(vertex * P, int cP, vertex * Q, int cQ){ + int s=0, c=cQ; ipoint p = P[0].ip; + while(c--)if(Q[c].rx.mn < p.x && p.x < Q[c].rx.mx) + {int sgn = 0 < area(p, Q[c].ip, Q[c+1].ip); + s += sgn != Q[c].ip.x < Q[c+1].ip.x ? 0 : (sgn?-1:1); } + {int j; for(j=0; j. + +*/ + + +#ifndef __bts_math_svd_h__ +#define __bts_math_svd_h__ + + +extern "C" { +#include +} + +#include "math/matrix.h" +#include "math/vector.h" + +#include "bts/common.h" + + + + + + +namespace BTS { + + namespace Math { + + class USV { + + public: + + MR::Math::Matrix u; + MR::Math::Matrix v; + MR::Math::Vector sigma; + + USV(size_t rows, size_t columns) : u(rows, columns), v(columns, columns), sigma(columns) {} + ~USV() {} + + + + }; + + + // Protects M from being copied over by U in the gsl SVD computation. + inline USV svd(const MR::Math::Matrix& matrix) { + + USV usv(matrix.rows(), matrix.columns()); + + usv.u = matrix; + + MR::Math::Vector work(usv.sigma.size()); + + gsl_linalg_SV_decomp (usv.u.gsl(), usv.v.gsl(), usv.sigma.gsl(), work.gsl()); + + return usv; + + } + + + + + + // 'matrix' will be replaced by 'u' in the SVD computation. This saves copying although the input matrix is destroyed. + inline MR::Math::Vector& svd(MR::Math::Matrix& matrix, MR::Math::Matrix& v, MR::Math::Vector& sigma) { + + + + MR::Math::Vector work(sigma.size()); + + gsl_linalg_SV_decomp (matrix.gsl(), v.gsl(), sigma.gsl(), work.gsl()); + + + return sigma; + + + } + + + + } + + +} + +#endif diff --git a/src/bts/mcmc/annealer.cpp b/src/bts/mcmc/annealer.cpp new file mode 100644 index 0000000..1282324 --- /dev/null +++ b/src/bts/mcmc/annealer.cpp @@ -0,0 +1,55 @@ +/* + Copyright 2008 Brain Research Institute, Melbourne, Australia + + Written by Thomas G Close, 24/01/2011. + + This file is part of MRtrix. + + MRtrix is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + MRtrix is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with MRtrix. If not, see . + +*/ + +#include "bts/mcmc/annealer.h" + +namespace BTS { + + namespace MCMC { + + + const double Annealer::START_FRACTION_DEFAULT = 0.01; + + + Annealer::Annealer(size_t num_steps, double start_fraction) { + + t = MR::Math::log(start_fraction); + t_inc = - t / (double)num_steps; + + } + + double Annealer::factor() const { + + return MR::Math::exp(t); + + } + + void Annealer::increment() { + + t += t_inc; + + } + + + } + +} diff --git a/src/bts/mcmc/annealer.h b/src/bts/mcmc/annealer.h new file mode 100644 index 0000000..2a54dda --- /dev/null +++ b/src/bts/mcmc/annealer.h @@ -0,0 +1,61 @@ +/* + Copyright 2008 Brain Research Institute, Melbourne, Australia + + Written by Thomas G Close, 24/01/2011. + + This file is part of MRtrix. + + MRtrix is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + MRtrix is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with MRtrix. If not, see . + +*/ + +#ifndef __bts_mcmc_annealer_h__ +#define __bts_mcmc_annealer_h__ + +#include "bts/common.h" + +namespace BTS { + + namespace MCMC { + + class Annealer { + + //Public static variables, nested classes and typedefs + public: + + const static double START_FRACTION_DEFAULT; + + //Protected member variables + protected: + + double t; + double t_inc; + + //Public member functions + public: + + Annealer(size_t num_steps, double start_fraction); + + double factor() const; + + void increment(); + + + }; + + } + +} + +#endif /* __bts_mcmc_annealer_h__ */ diff --git a/src/bts/mcmc/common.h b/src/bts/mcmc/common.h new file mode 100644 index 0000000..f7ff333 --- /dev/null +++ b/src/bts/mcmc/common.h @@ -0,0 +1,47 @@ +/* + Copyright 2009 Brain Research Institute, Melbourne, Australia + + Created by Tom Close on 13/03/09. + + This file is part of Bayesian Tractlet Sampling (BTS). + + BTS is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + BTS is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with BTS. If not, see . + + */ + + +#ifndef __bts_mcmc_common_h__ +#define __bts_mcmc_common_h__ + +namespace BTS { + + namespace MCMC { + + const std::string LOG_PROB_PROP = "log_px"; + const std::string ANNEAL_LOG_PROB_PROP = "anneal_log_px"; + const std::string ACCEPTANCE_RATIO_PROP = "acceptance_ratio"; + const std::string ELAPSED_TIME_PROP = "elapsed_time"; + const std::string H_PROP = "H"; + const std::string PROPOSED_H_PROP = "Proposed H"; + + typedef std::map SampleProperties; + typedef std::vector SamplePropertyHeader; + + } + +} + + +#endif + diff --git a/src/bts/mcmc/hamiltonian.h b/src/bts/mcmc/hamiltonian.h new file mode 100644 index 0000000..9663c0d --- /dev/null +++ b/src/bts/mcmc/hamiltonian.h @@ -0,0 +1,345 @@ +/* + Copyright 2009 Brain Research Institute, Melbourne, Australia + + Created by Tom Close on 13/03/09. + + This file is part of Bayesian Tractlet Sampling (BTS). + + BTS is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + BTS is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with BTS. If not, see . + + */ + + +#ifndef __bts_mcmc_hamiltonian_h__ +#define __bts_mcmc_hamiltonian_h__ + +extern "C" { +#include +#include +} + +#include + +#include "progressbar.h" + +#include "bts/fibre/properties/extended.h" +#include "bts/mcmc/common.h" + +#include "bts/common.h" + + + +namespace BTS { + + namespace MCMC { + + namespace Hamiltonian { + + const size_t NUM_SAMPLES_DEFAULT = 20; + const size_t NUM_LEAPFROG_STEPS_DEFAULT = 30; + const size_t BURN_NUM_SAMPLES_DEFAULT = 0; + const size_t BURN_NUM_LEAPFROG_STEPS_DEFAULT = 30; + const size_t BURN_SNR_DEFAULT = 1; + + } + + + template State hamiltonian (State& initial_x, + Likelihood& likelihood, + Prior& prior, + MCMC::Proposal::Momentum& momentum, + const std::string& samples_location, + const std::map& run_properties, + size_t num_samples, + size_t num_leapfrog_steps, + gsl_rng* rand_gen, + bool prior_only = false, + bool save_iterations = false, + bool suppress_print = false ) { + + + std::vector sample_header; + + sample_header.push_back(LOG_PROB_PROP); +// sample_header.push_back(ELAPSED_TIME_PROP); + sample_header.push_back(H_PROP); + sample_header.push_back(PROPOSED_H_PROP); +// sample_header.push_back("total_signal"); +// sample_header.push_back("likelihood"); +// sample_header.push_back("prior"); + + std::vector components_list = prior.list_components(); + + sample_header.insert(sample_header.end(), components_list.begin(), components_list.end()); + + typename State::Writer samples (samples_location, initial_x, sample_header, run_properties); + + typename State::Writer iterations; +// typename State::Writer iteration_gradients; +// typename State::Momentum::Writer iteration_momentums; +// typename State::Writer iteration_prior_gradients; +// typename State::Writer iteration_curv_gradients; +// typename State::Writer iteration_end_gradients; +// typename State::Writer iteration_all_gradients; +// typename State::Writer iteration_likelihood_gradients; + + SamplePropertyHeader iteration_property_header; + + iteration_property_header.push_back("log_px"); + iteration_property_header.push_back("pred_d_log_px"); + iteration_property_header.push_back("act_d_log_px"); + iteration_property_header.push_back("grad_norm2"); + iteration_property_header.push_back("log_kinetic_energy"); + +// iteration_property_header.push_back("curv_pred_d_log_px"); +// iteration_property_header.push_back("curv_act_d_log_px"); +// +// iteration_property_header.push_back("end_pred_d_log_px"); +// iteration_property_header.push_back("end_act_d_log_px"); +// +// iteration_property_header.push_back("all_pred_d_log_px"); +// iteration_property_header.push_back("all_act_d_log_px"); + + + if (save_iterations) { + iterations.create(File::strip_extension(samples_location) + ".iter." + File::extension(samples_location), initial_x, iteration_property_header, run_properties); + +// iteration_gradients.create(File::strip_extension(samples_location) + ".gradient." + File::extension(samples_location), run_properties, std::vector()); +// iteration_momentums.create(File::strip_extension(samples_location) + ".momentum." + File::extension(samples_location), run_properties, std::vector()); +// iteration_likelihood_gradients.create(File::strip_extension(samples_location) + ".like_gradient." + File::extension(samples_location), run_properties, std::vector()); +// iteration_prior_gradients.create(File::strip_extension(samples_location) + ".prior_gradient." + File::extension(samples_location), run_properties, std::vector()); +// +// iteration_curv_gradients.create(File::strip_extension(samples_location) + ".curv_gradient." + File::extension(samples_location), run_properties, std::vector()); +// iteration_end_gradients.create(File::strip_extension(samples_location) + ".end_gradient." + File::extension(samples_location), run_properties, std::vector()); +// iteration_all_gradients.create(File::strip_extension(samples_location) + ".all_gradient." + File::extension(samples_location), run_properties, std::vector()); + } + + + + State x = initial_x; + + State zero = x; + zero.zero(); + + State gradient (zero); + State prior_gradient (zero); + State likelihood_gradient (zero); + +// double curv_log_prob = 0.0; +// double end_log_prob = 0.0; +// double all_log_prob = 0.0; + + State curv_gradient (zero); + State end_gradient (zero); + State all_gradient (zero); + + double start_log_kinetic_energy = NAN; + + double px = prior.log_prob(x, prior_gradient); + + if (!prior_only) + px += likelihood.log_prob(x, likelihood_gradient); + + gradient = prior_gradient + likelihood_gradient; + + //-------------------------// + // Take the MCMC samples // + //-------------------------// + + size_t iteration_count = 0; + + // Initialise the progress bar + MR::ProgressBar progress_bar ("Generating " + str(num_samples) + " Hamiltonian MCMC samples ...", num_samples); + + for (size_t sample_i = 0; sample_i < num_samples; sample_i++) { + + momentum.randomize(); + + double log_kinetic_energy = momentum.log_kinetic_energy(); // momentum.norm2() / 2.0; + + if (!suppress_print) + start_log_kinetic_energy = log_kinetic_energy; + + // NB: Since we want to find maxima not minima the probability of x is inverted when compared from the classical algorithm + // (as implemented in Mackay, D. 2003. Information Theory, Inference and Learning Algorithms, Cambridge University Press, pp388.) + + double H = log_kinetic_energy - px; + + clock_t sample_starttime = clock(); + + State prop_x = x; + State prop_gradient = gradient; + double prop_px = px; + + if (save_iterations) { +// curv_log_prob = prior.component_log_prob("curv_mag", prop_x, curv_gradient); +// end_log_prob = prior.component_log_prob("end_in_sphere", prop_x, end_gradient); +// all_log_prob = prior.component_log_prob("all_in_cube", prop_x, all_gradient); + } + + + // Make 'num_leapfrog_steps' leapfrog steps. + + + for (size_t leapfrog_i = 0; leapfrog_i < num_leapfrog_steps; leapfrog_i++) { + + // NB: Since we want to find maxima not minima the gradient of x is inverted when compared from the classical algorithm. + momentum.half_update_momentum(prop_gradient); // += prop_gradient * (leapfrog_step_size / 2.0); + + if (save_iterations) { + + prop_x.set_extend_prop("pred_d_log_px", str(momentum.predicted_change(prop_gradient))); +// prop_x.set_extend_prop("curv_pred_d_log_px"] = str(momentum.predicted_change(curv_gradient)); +// prop_x.set_extend_prop("end_pred_d_log_px"] = str(momentum.predicted_change(end_gradient)); +// prop_x.set_extend_prop("all_pred_d_log_px"] = str(momentum.predicted_change(all_gradient)); + + } + + // Debug purposes only. + double prev_prop_px = prop_px; + + momentum.update_state(prop_x); //prop_x += leapfrog_step_size * momentum; + + prop_px = prior.log_prob(prop_x, prior_gradient); + + if (!prior_only) + prop_px += likelihood.log_prob(prop_x, likelihood_gradient); + + prop_gradient = prior_gradient + likelihood_gradient; + + // NB: Since we want to find maxima not minima the gradient of x is inverted when compared from the classical algorithm. + momentum.half_update_momentum(prop_gradient); // momentum += prop_gradient * (leapfrog_step_size / 2.0); + + if (save_iterations) { + + prop_x.set_extend_prop("log_px", str(prop_px)); + prop_x.set_extend_prop("act_d_log_px", str(prop_px - prev_prop_px)); + prop_x.set_extend_prop("grad_norm2", str(prop_gradient.norm2())); + prop_x.set_extend_prop("log_kinetic_energy", str(momentum.log_kinetic_energy())); +// iteration_gradients.append(prop_gradient); +// iteration_likelihood_gradients.append(likelihood_gradient); +// iteration_prior_gradients.append(prior_gradient); +// iteration_momentums.append(momentum); + + +// double new_curv_log_prob = prior.component_log_prob("curv_mag", prop_x, curv_gradient); +// double new_all_log_prob = prior.component_log_prob("end_in_sphere", prop_x, all_gradient); +// double new_end_log_prob = prior.component_log_prob("all_in_cube", prop_x, end_gradient); +// +// prop_x.set_extend_prop("curv_act_d_log_px"] = str(new_curv_log_prob - curv_log_prob); +// prop_x.set_extend_prop("end_act_d_log_px"] = str(new_end_log_prob - end_log_prob); +// prop_x.set_extend_prop("all_act_d_log_px"] = str(new_all_log_prob - all_log_prob); +// +// iteration_curv_gradients.append(curv_gradient); +// iteration_end_gradients.append(end_gradient); +// iteration_all_gradients.append(all_gradient); +// +// curv_log_prob = new_curv_log_prob; +// end_log_prob = new_end_log_prob; +// all_log_prob = new_all_log_prob; + + std::map prop_component_values = prior.get_component_values(prop_x); + + for (std::map::iterator comp_it = prop_component_values.begin(); comp_it != prop_component_values.end(); ++comp_it) + prop_x.set_extend_prop(comp_it->first, comp_it->second); + + iterations.append(prop_x); + + } + ++iteration_count; + } + + breakpoint(); + + // Decide whether to accept 'step' (or rather chain of leapfrog steps). + + log_kinetic_energy = momentum.log_kinetic_energy(); //momentum.norm2() / 2.0; + + // NB: Since we want to find maxima not minima the gradient of x is inverted when compared from the classical algorithm. + double prop_H = log_kinetic_energy - prop_px; + + + // NB: Since we want to find maxima not minima the order of this subtraction is reversed. + double dH = prop_H - H; + + + + double elapsed_time = (double)(clock() - sample_starttime) / (double)CLOCKS_PER_SEC; + + + // Print out sample properties. + if (!suppress_print) { + std::cout << std::endl; + std::cout << "Sample: " << sample_i << ", "; +// std::cout << "state: " << x << ", "; + std::cout << "log[px]: " << px << ", "; + std::cout << "Start kinetic energy: " << start_log_kinetic_energy << ", "; + std::cout << "H: " << H << ", "; +// std::cout << "proposed state: " << prop_x << ", "; + std::cout << "Proposed log[px]: " << prop_px << ", "; + std::cout << "Final kinetic energy: " << log_kinetic_energy << ", "; + std::cout << "Proposed H: " << prop_H << ", "; + std::cout << "Elapsed time: " << elapsed_time; + + } + + + // If Hamiltonian decreases (i.e. there is less energy in the system) or the increase is below log[Y] (where Y is a uniformly distributed random variable between 0 and 1), accept the proposer. + + if ((dH < 0) || (log(gsl_ran_flat(rand_gen, 0,1)) < -dH)) { + x = prop_x; + gradient = prop_gradient; + px = prop_px; + if (!suppress_print) + std::cout << ", Accepted!." << std::endl; + } else if (!suppress_print) + std::cout << ", Not accepted." << std::endl; + + // Record sample stats. + + x.set_extend_prop(LOG_PROB_PROP, str(px)); +// x.set_extend_prop(ELAPSED_TIME_PROP] = str(elapsed_time); + x.set_extend_prop(H_PROP, str(H)); + x.set_extend_prop(PROPOSED_H_PROP, str(prop_H)); +// x.set_extend_prop("likelihood"] = str(likelihood_log_px); +// x.set_extend_prop("prior"] = str(prior_px); +// x.set_extend_prop("total_signal"] = str(total_signal); + + std::map component_values = prior.get_component_values(x); + + for (std::map::iterator comp_it =component_values.begin(); comp_it != component_values.end(); ++comp_it) + prop_x.set_extend_prop(comp_it->first, comp_it->second); + + // Save sample. + samples.append(x); + + + progress_bar++; + + } + + + State out_x = x; + + return out_x; + + } + + + + } + +} + +#endif diff --git a/src/bts/mcmc/inline_functions.h b/src/bts/mcmc/inline_functions.h new file mode 100644 index 0000000..28c86fc --- /dev/null +++ b/src/bts/mcmc/inline_functions.h @@ -0,0 +1,46 @@ +/* + Copyright 2008 Brain Research Institute, Melbourne, Australia + + Written by Thomas G Close, 16/07/2010. + + This file is part of MRtrix. + + MRtrix is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + MRtrix is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with MRtrix. If not, see . + +*/ + +#ifndef __bts_mcmc_inline_functions_h__ +#define __bts_mcmc_inline_functions_h__ + + +#ifdef __bts_mcmc_proposal_momentum_h__ + +#include "bts/mcmc/proposal/momentum.cpp.h" + +#endif + +#ifdef __bts_mcmc_proposal_momentum_weighted_h__ + +#include "bts/mcmc/proposal/momentum/weighted.cpp.h" + +#endif + + +#ifdef __bts_mcmc_proposal_momentum_weighted_nonseparable_h__ + +#include "bts/mcmc/proposal/momentum/weighted/non_separable.cpp.h" + +#endif + +#endif /* __bts_proposal_inline_functions_h__ */ diff --git a/src/bts/mcmc/metropolis.h b/src/bts/mcmc/metropolis.h new file mode 100644 index 0000000..dbf5936 --- /dev/null +++ b/src/bts/mcmc/metropolis.h @@ -0,0 +1,295 @@ +/* + Copyright 2009 Brain Research Institute, Melbourne, Australia + + Created by Tom Close on 13/03/09. + + This file is part of Bayesian Tractlet Sampling (BTS). + + BTS is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + BTS is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with BTS. If not, see . + + */ + + +#ifndef __bts_mcmc_metropolis_h__ +#define __bts_mcmc_metropolis_h__ + +extern "C" { +#include +#include +} + +#include + +#include "progressbar.h" + +#include "bts/fibre/properties/extended.h" +#include "bts/mcmc/common.h" + +#include "bts/mcmc/annealer.h" + +#include "bts/image/expected/buffer.h" + +#include "bts/common.h" + + + +namespace BTS { + + namespace MCMC { + + + namespace Metropolis { + + const size_t NUM_ITERATIONS_DEFAULT = 1e5; + const size_t SAMPLE_PERIOD_DEFAULT = 1e3; + const size_t BURN_NUM_ITERATIONS_DEFAULT = 0; //1e4; + const size_t BURN_SAMPLE_PERIOD_DEFAULT = 1e2; + const double BURN_SNR_DEFAULT = 20; + const double ANNEAL_FRAC_START_DEFAULT = 1.0; //0.05; + + } + + template State metropolis ( State& initial_x, + Likelihood& likelihood, + Prior& prior, + typename State::Walker& walker, + const std::string& samples_location, + const std::map& run_properties, + size_t num_iterations, + size_t sample_period, + gsl_rng* rand_gen, + double anneal_frac_start = 1.0, + bool prior_only = false, + bool verbose = true, + bool save_images = false) { + + + if (save_images) + likelihood.get_observed_image().save(samples_location + ".obs.mif"); + + std::vector sample_header; + + sample_header.push_back(LOG_PROB_PROP); + sample_header.push_back(ANNEAL_LOG_PROB_PROP); + sample_header.push_back(ACCEPTANCE_RATIO_PROP); + sample_header.push_back(ELAPSED_TIME_PROP); + sample_header.push_back("densities"); + +#ifndef TEST_BED +// sample_header.push_back("total_signal"); +#endif + + sample_header.push_back("likelihood"); + sample_header.push_back("prior"); + + std::vector elem_header; + +// State::append_characteristic_property_keys(elem_header); + + std::vector components_list = prior.list_components(); + + sample_header.insert(sample_header.end(), components_list.begin(), components_list.end()); + + + typename State::Writer samples (samples_location, initial_x, sample_header, elem_header, run_properties); +// typename State::Writer iterations (File::strip_extension(samples_location) + ".iter." + File::extension(samples_location), run_properties, sample_header); + + State x = initial_x; + State prop_x = x; + + double prior_px = prior.log_prob(x); + + + double likelihood_px; + + MCMC::Annealer annealer(num_iterations, anneal_frac_start); + + if (prior_only) + likelihood_px = 0; + else + likelihood_px = likelihood.log_prob(x); + + + double px = likelihood_px * annealer.factor() + prior_px; + + + //-------------------------// + // Take the MCMC samples // + //-------------------------// + + size_t num_samples = num_iterations / sample_period; + + // Initialise the progress bar + MR::ProgressBar progress_bar ("Generating " + str(num_samples) + " Metropolis-Hastings MCMC samples ...", num_samples); + + + for (size_t sample_i = 0; sample_i < num_samples; sample_i++) { + + size_t accepted = 0; + + clock_t sample_starttime = clock(); + + for (size_t iteration_i = 0; iteration_i < sample_period; iteration_i++) { + + // Draw a new sample from the proposal distribution centred on the current state. + walker.step(x, prop_x, 1.0 / MR::Math::sqrt(annealer.factor())); + + //Calculate the unnormalised probability of the stepd state. + double prop_prior_px = prior.log_prob(prop_x); + + double prop_likelihood_px; + + if (prior_only) + prop_likelihood_px = 0; + else + prop_likelihood_px = likelihood.log_prob(prop_x); + + double prop_px = prop_likelihood_px * annealer.factor() + prop_prior_px; + + +// prop_x.set_extend_prop(LOG_PROB_PROP] = str(prop_px); +// prop_x.set_extend_prop("likelihood"] = str(likelihood_px); +// prop_x.set_extend_prop("prior"] = str(prior_px); +// +// std::map component_values = prior.get_component_values(prop_x); +// +// prop_x.properties.insert(component_values.begin(), component_values.end()); +// +// iterations.append(prop_x); + + // Divide the unnormalised probability of the stepd state by the unnormalised probability of the current state + // (remembering that we are dealing with log probability so it is implemented as a subtraction). + double a = prop_px - px; + +// std::cout << "prop_px: " << prop_px << " px: " << px << " a: " << a << std::endl; + +// prop_x.save("/home/tclose/data/tmp.tct"); + + //If the ratio is greater than a uniform value between 0 and 1 then accept the stepd step. + if ( (a > 0) || log(gsl_ran_flat(rand_gen, 0.0, 1.0)) <= a ) { + + // Accept the stepd tractlets + x = prop_x; + px = prop_px; + + //debugging only + likelihood_px = prop_likelihood_px; + prior_px = prop_prior_px; + + accepted++; + + } + + annealer.increment(); + + px = likelihood_px * annealer.factor() + prior_px; + + } + + + // Calculate stats about the current sample + double acceptance_ratio = ((double)accepted)/(double)sample_period; + double elapsed_time = (double)(clock() - sample_starttime) / (double)CLOCKS_PER_SEC; + + + std::vector areas = x[0].cross_sectional_areas(100); + std::vector densities(100); + for (size_t i = 0; i < 100; ++i) + densities[i] = areas[i] / x[0].acs(); + + // Record sample stats. + x.set_extend_prop(ANNEAL_LOG_PROB_PROP,str(likelihood_px + prior_px)); + x.set_extend_prop(LOG_PROB_PROP,str(px)); + x.set_extend_prop(ACCEPTANCE_RATIO_PROP,str(acceptance_ratio)); + x.set_extend_prop(ELAPSED_TIME_PROP,str(elapsed_time)); + x.set_extend_prop("densities", str(densities)); + +#ifndef TEST_BED + //-------- Debugging ---------// +// Image::Expected::Buffer& exp_image = *likelihood.get_expected_image().clone(); +// +// Image::Expected::Buffer& blank_image = *exp_image.clone(); +// Image::Expected::Buffer& dummy_image_gradient = *exp_image.clone(); +// blank_image.zero(); + +// double total_signal = exp_image.sum_strong_difference(blank_image, dummy_image_gradient,0); +#endif + + + State dummy_gradient = x; + + x.set_extend_prop("likelihood", str(likelihood_px)); + x.set_extend_prop("prior", str(prior_px)); + +#ifndef TEST_BED +// x.set_extend_prop("total_signal"] = str(total_signal); +#endif + + std::map component_values = prior.get_component_values(x); + + for (std::map::iterator comp_it = component_values.begin(); comp_it != component_values.end(); ++comp_it) + x.set_extend_prop(comp_it->first, comp_it->second); + +// x.properties.insert(component_values.begin(), component_values.end()); + +#ifndef TEST_BED +// exp_image.save("/home/tclose/data/metropolis/signal/iter_" + str(sample_i) + ".mif"); + +// delete &exp_image; +// delete &blank_image; +// delete &dummy_image_gradient; +#endif + + //-------- End Debugging ------// + + x.calc_characteristic_properties(); + + // Save sample. + samples.append(x); + + + if (save_images) { + likelihood.get_expected_image().save(samples_location + ".exp.mif"); + } + + + // Print out sample properties. + if (verbose) { + std::cout << std::endl; + std::cout << "Iteration: " << (sample_i+1) * sample_period << "/" << num_iterations << ", "; + std::cout << "log[px]: " << px << ", "; + std::cout << "acceptance ratio: " << acceptance_ratio << ", "; + std::cout << "elapsed time: " << elapsed_time; + std::cout << std::endl; + } + + progress_bar++; + + } + + //MR::ProgressBar::done(); + + State x_return(x); + + return x_return; + + } + + + + } + +} + +#endif diff --git a/src/bts/mcmc/naninf_exception.h b/src/bts/mcmc/naninf_exception.h new file mode 100644 index 0000000..f875c3d --- /dev/null +++ b/src/bts/mcmc/naninf_exception.h @@ -0,0 +1,53 @@ +/* + Copyright 2008 Brain Research Institute, Melbourne, Australia + + Written by Thomas G Close, 24/11/2010. + + This file is part of MRtrix. + + MRtrix is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + MRtrix is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with MRtrix. If not, see . + +*/ + +#ifndef __bts_mcmc_naninfexception_h__ +#define __bts_mcmc_naninfexception_h__ + + +namespace BTS { + + namespace MCMC { + + class NanInfException : public MR::Exception { + + public: + + NanInfException() + : MR::Exception ("Nan or Inf values found.") {} + + NanInfException(const NanInfException& e) + : MR::Exception(e) {} + + NanInfException& operator=(const NanInfException& e) + { MR::Exception::operator=(e); return *this; } + + ~NanInfException() {} + + }; + + } + +} + + +#endif /* __bts_mcmc_naninfexception_h__ */ diff --git a/src/bts/mcmc/proposal/distribution.cpp b/src/bts/mcmc/proposal/distribution.cpp new file mode 100644 index 0000000..d088046 --- /dev/null +++ b/src/bts/mcmc/proposal/distribution.cpp @@ -0,0 +1,65 @@ +/* + Copyright 2010 Brain Research Institute/National ICT Australia (NICTA), Melbourne, Australia + + Written by Thomas G Close, 5/05/09. + + This file is part of Bayesian Tractlet Sampling (BTS). + + BTS is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + BTS is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with BTS. If not, see . + +*/ + +#include "bts/mcmc/proposal/distribution.h" +#include "bts/mcmc/proposal/distribution/gaussian.h" +#include "bts/common.h" + +#include "bts/mcmc/inline_functions.h" + +namespace BTS { + + namespace MCMC { + + namespace Proposal { + + const char* Distribution::TYPE_DEFAULT = "gaussian"; + + + Distribution* Distribution::factory(const std::string& type, gsl_rng* rand_gen) { + + Proposal::Distribution* distribution; + + if (type == "gaussian") + + distribution = new Proposal::Distribution::Gaussian (rand_gen); + + else + throw Exception ("Unrecognised proposal type '" + type + "' passed to option '-prop_distr_type'."); + + return distribution; + + } + +// const double PROPOSAL_DEGREE_ARRAY_DEFAULT[] = {1.0, 1.5, 0.2, 0.01, 0.002, 0.0001, 0.0001, 0.0001, 0.0001, 0.0001, 0.0001, 0.0001, 0}; +// const std::vector Distribution::DEGREE_DEFAULTS (PROPOSAL_DEGREE_ARRAY_DEFAULT, &(PROPOSAL_DEGREE_ARRAY_DEFAULT[12])); +// +// +// const double PROPOSAL_SECONDARY_DEGREE_ARRAY_DEFAULT[] = {0.2, 0.1, 0.1, 0.01, 0.002, 0.0001, 0.0001, 0.0001, 0.0001, 0.0001, 0.0001, 0.0001, 0}; +// const std::vector Distribution::SECONDARY_DEGREE_DEFAULTS (PROPOSAL_SECONDARY_DEGREE_ARRAY_DEFAULT, &(PROPOSAL_SECONDARY_DEGREE_ARRAY_DEFAULT[12])); + + + } + + } + +} diff --git a/src/bts/mcmc/proposal/distribution.h b/src/bts/mcmc/proposal/distribution.h new file mode 100644 index 0000000..d8d02e8 --- /dev/null +++ b/src/bts/mcmc/proposal/distribution.h @@ -0,0 +1,146 @@ +/* + Copyright 2010 Brain Research Institute/National ICT Australia (NICTA), Melbourne, Australia + + Written by Thomas G Close, 5/05/09. + + This file is part of Bayesian Tractlet Sampling (BTS). + + BTS is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + BTS is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with BTS. If not, see . + +*/ + + +#ifndef __bts_mcmc_proposal_distribution_h__ +#define __bts_mcmc_proposal_distribution_h__ + + +#define PROPOSAL_DISTRIBUTION_PARAMETERS \ + Option ("prop_distr_type", "The 'Proposal::Distribution' object used to calculate the prior probability.") \ + + Argument ("prop_distr_type", "").type_text(MCMC::Proposal::Distribution::TYPE_DEFAULT) \ +\ + + +//Loads the 'proposal' parameters into variables +#define SET_PROPOSAL_DISTRIBUTION_PARAMETERS \ + std::string prop_distr_type = MCMC::Proposal::Distribution::TYPE_DEFAULT; \ +\ + Options prop_opt = get_options("prop_distr_type"); \ + if (prop_opt.size()) \ + prop_distr_type = prop_opt[0][0].c_str(); \ +\ + + +//Adds the 'proposal distribution' parameters to the properties to be saved with the data. +#define ADD_PROPOSAL_DISTRIBUTION_PROPERTIES(properties) \ + properties["prop_distr_type"] = prop_distr_type; \ + + + +#include +#include + +namespace BTS { + + namespace MCMC { + + namespace Proposal { + + class Distribution; + + } + + } + +} + + +extern "C" { +#include +#include +} + +namespace BTS { + + namespace MCMC { + + namespace Proposal { + + class Distribution { + + public: + + class Gaussian; + class HeavyTailed; + + public: + + const static double STEP_SIZE_DEFAULT; + const static double SHEER_SCALE_DEFAULT; + const static double SPREAD_SCALE_DEFAULT; + const static double BASEWIDTH_SCALE_DEFAULT; + const static double ENDPOINT_SCALE_DEFAULT; + const static double MIDPOINT_SCALE_DEFAULT; + const static double INTENSITY_STEP_SIZE_DEFAULT; + const static double BASE_INTENSITY_STEP_SIZE_DEFAULT; + +// const static std::vector DEGREE_DEFAULTS; +// const static std::vector SECONDARY_DEGREE_DEFAULTS; + + + //Public static constants + public: + + const static char* TYPE_DEFAULT; + + protected: + + gsl_rng* rand_gen; + + + //Public static methods + public: + + static Distribution* factory(const std::string& type, gsl_rng* rand_gen); + + public: + + virtual double sample(double current_state, double scale) = 0; + + virtual Distribution* clone() const = 0; + + virtual ~Distribution() {} + + protected: + + Distribution(gsl_rng* rand_gen) + : rand_gen(rand_gen) {} + + Distribution (const Distribution& g) + : rand_gen(g.rand_gen) {} + + Distribution& operator=(const Distribution& g) + { rand_gen = g.rand_gen; return *this; } + + + }; + + + } + + } + +} + + +#endif diff --git a/src/bts/mcmc/proposal/distribution/gaussian.cpp b/src/bts/mcmc/proposal/distribution/gaussian.cpp new file mode 100644 index 0000000..b44943a --- /dev/null +++ b/src/bts/mcmc/proposal/distribution/gaussian.cpp @@ -0,0 +1,50 @@ +/* + Copyright 2009 Brain Research Institute, Melbourne, Australia + + Created by Tom Close on 13/03/09. + + This file is part of Bayesian Tractlet Sampling (BTS). + + BTS is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + BTS is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with BTS. If not, see . + + */ + +extern "C" { +#include +#include +} + + +#include "bts/mcmc/proposal/distribution/gaussian.h" + + +#include "bts/mcmc/inline_functions.h" + +namespace BTS { + + namespace MCMC { + + namespace Proposal { + + double Distribution::Gaussian::sample(double current_state, double scale) { + + return current_state + gsl_ran_gaussian(rand_gen, scale); + + } + + } + + } + +} diff --git a/src/bts/mcmc/proposal/distribution/gaussian.h b/src/bts/mcmc/proposal/distribution/gaussian.h new file mode 100644 index 0000000..fe7aca3 --- /dev/null +++ b/src/bts/mcmc/proposal/distribution/gaussian.h @@ -0,0 +1,72 @@ +/* + Copyright 2009 Brain Research Institute, Melbourne, Australia + + Created by Tom Close on 13/03/09. + + This file is part of Bayesian Tractlet Sampling (BTS). + + BTS is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + BTS is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with BTS. If not, see . + + */ + + +#ifndef __bts_mcmc_proposal_distribution_gaussian_h__ +#define __bts_mcmc_proposal_distribution_gaussian_h__ + + +#include "bts/mcmc/proposal/distribution.h" + + +namespace BTS { + + namespace MCMC { + + namespace Proposal { + + class Distribution::Gaussian : public Distribution { + + public: + + Gaussian (gsl_rng* rand_gen) + : Distribution(rand_gen) {} + + Gaussian (const Gaussian& g) + : Distribution(g) {} + + Gaussian& operator=(const Gaussian& g) + { Distribution::operator=(g); return *this; } + + Gaussian* clone() const + { return new Gaussian(*this); } + + double sample(double current_state, double scale); + + + }; + + } + + } + +} + + + + + + + + + +#endif diff --git a/src/bts/mcmc/proposal/momentum.cpp b/src/bts/mcmc/proposal/momentum.cpp new file mode 100644 index 0000000..a873aca --- /dev/null +++ b/src/bts/mcmc/proposal/momentum.cpp @@ -0,0 +1,114 @@ +/* + Copyright 2008 Brain Research Institute, Melbourne, Australia + + Written by Thomas G Close, Jul 20, 2010. + + This file is part of MRtrix. + + MRtrix is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version size() of the License, or + (at your option) any later version. + + MRtrix is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with MRtrix. If not, see . + +*/ + +#ifndef __bts_proposal_momentum_cpp_h__ +#define __bts_proposal_momentum_cpp_h__ + +#include "bts/mcmc/proposal/momentum.h" +#include "math/vector.h" + + + +namespace BTS { + + namespace MCMC { + + namespace Proposal { + + const double Momentum::STEP_SCALE_DEFAULT = 0.05; + const std::string Momentum::STEP_LOCATION_DEFAULT = "/home/tclose/data/mcmc/hamiltonian/params/momentum/scaling.sta"; + + + void Momentum::set( Distribution* const proposal_distribution, + MR::Math::Vector relative_step) { + + momen = relative_step; + momen *= NAN; + step = relative_step; + + if (prop_distr) + delete prop_distr; + + this->prop_distr = proposal_distribution->clone(); + + } + + void Momentum::randomize() { + + for (size_t elem_i = 0; elem_i < size(); elem_i++) + momen[elem_i] = prop_distr->sample(0.0, 1.0); + + } + + + void Momentum::half_update_momentum(const MR::Math::Vector& gradient, double time_direction) { + + assert((time_direction == -1.0) || (time_direction == 1.0)); + + for (size_t elem_i = 0; elem_i < size(); elem_i++) + momen[elem_i] += time_direction * gradient[elem_i] * step[elem_i] / 2.0; + + } + + + + void Momentum::update_state(MR::Math::Vector& state, double time_direction) const { + + assert((time_direction == -1.0) || (time_direction == 1.0)); + + for (size_t elem_i = 0; elem_i < size(); elem_i++) + state[elem_i] += time_direction * momen[elem_i] * step[elem_i]; + + } + + + + double Momentum::predicted_change(const MR::Math::Vector& gradient, double time_direction) const { + + assert((time_direction == -1.0) || (time_direction == 1.0)); + + double pred_change = 0.0; + + for (size_t elem_i = 0; elem_i < size(); elem_i++) + pred_change += time_direction * momen[elem_i] * gradient[elem_i] * step[elem_i]; + + return pred_change; + + } + + std::ostream& operator<<(std::ostream& stream, const Momentum& momen) { + + stream << "Momentum: " << momen.momen << std::endl; + stream << "Step sizes: " << momen.step << std::endl; + + return stream; + + } + + + } + + } + +} + +#endif /* __bts_proposal_momentum_cpp_h__ */ diff --git a/src/bts/mcmc/proposal/momentum.cpp.h b/src/bts/mcmc/proposal/momentum.cpp.h new file mode 100644 index 0000000..c9ee284 --- /dev/null +++ b/src/bts/mcmc/proposal/momentum.cpp.h @@ -0,0 +1,106 @@ +/* + Copyright 2008 Brain Research Institute, Melbourne, Australia + + Written by Thomas G Close, 15/09/2010. + + This file is part of MRtrix. + + MRtrix is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + MRtrix is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with MRtrix. If not, see . + +*/ + +#ifndef __bts_mcmc_proposal_momentum_cpp_h__ +#define __bts_mcmc_proposal_momentum_cpp_h__ + +namespace BTS { + + namespace MCMC { + + namespace Proposal { + + template Momentum Momentum::factory(const T& state, + double step_scale, + const std::string& step_location, + const std::string& weight_location, + MCMC::Proposal::Distribution* const proposal_distribution) { + + + Momentum momentum; + + T step; + + if (step_location.size()) { + + T loaded_step; + + loaded_step.load(step_location); + + if (loaded_step.size() == 1) + step.resize(state.size(), loaded_step[0]); + else if (loaded_step.size() == state.size()) + step = loaded_step; + else + throw Exception ("Size of loaded step (" + str(loaded_step.size()) + ") from file '" + step_location + "' is not singular and does not match that of state (" + str(state.size()) + ")."); + + step *= step_scale; + + } else + step.resize(state.size(),step_scale); + + MR::Math::Vector& step_vector = step; + + //TODO: Reinstate this and create fixed weighted class. +// if (weight_location.size()) { +// +// size_t state_vector_size = state.vsize(); +// MR::Math::Matrix weights(state_vector_size, state_vector_size); +// weights = 0.0; +// +// MR::Math::Matrix loaded_weights (weight_location); +// +// size_t loaded_weights_size = loaded_weights.rows(); +// +// if (loaded_weights_size != loaded_weights.columns()) +// throw Exception ("Loaded matrix is not square (" + str(loaded_weights_size) + " x " + str(loaded_weights.columns()) + ")."); +// +// if (loaded_weights_size == state_vector_size) +// weights = loaded_weights; +// +// else if (!(state_vector_size % loaded_weights_size)) { +// +// for (size_t block_i = 0; block_i < state_vector_size; block_i += loaded_weights_size) +// weights.sub(block_i, block_i+loaded_weights_size, block_i, block_i+loaded_weights_size) = loaded_weights; +// +// } else +// throw Exception ("Loaded weights size (" + str(loaded_weights_size) + ") does not divide evenly into state vector size (" + str(state_vector_size) + ")."); +// +// +// momentum = Momentum::Weighted(proposal_distribution, step_vector, weights); +// } else + momentum = Momentum (proposal_distribution, step_vector); + + VAR(momentum); + + return momentum; + + } + + + } + + } + +} + +#endif /* __bts_mcmc_proposal_momentum_cpp_h__ */ diff --git a/src/bts/mcmc/proposal/momentum.h b/src/bts/mcmc/proposal/momentum.h new file mode 100644 index 0000000..9d43036 --- /dev/null +++ b/src/bts/mcmc/proposal/momentum.h @@ -0,0 +1,215 @@ +/* + Copyright 2008 Brain Research Institute, Melbourne, Australia + + Written by Thomas G Close, Jun 28, 2010. + + This file is part of MRtrix. + + MRtrix is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + MRtrix is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with MRtrix. If not, see . + +*/ + +#ifndef __bts_mcmc_proposal_momentum_h__ +#define __bts_mcmc_proposal_momentum_h__ + + +namespace BTS { + + namespace MCMC { + + namespace Proposal { + + class Momentum; + + } + + } + +} + + +#include "math/vector.h" +#include "bts/common.h" + + + +#define PROPOSAL_MOMENTUM_PARAMETERS \ + Option ("momen_step_scale", "The overall scale of the momen step sizes.") \ + + Argument ("momen_step_scale", "").type_float(SMALL_FLOAT, MCMC::Proposal::Momentum::STEP_SCALE_DEFAULT, LARGE_FLOAT), \ +\ + Option ("momen_step_location", "The relative scales of the momen step sizes.") \ + + Argument ("momen_step_location", "").type_text(), \ + \ + Option ("momen_weight_location", "The weight matrix used for the update of the momen.") \ + + Argument ("momen_weight_location", "").type_text() \ + +//Loads the 'proposal' parameters into variables +#define SET_PROPOSAL_MOMENTUM_PARAMETERS(state_location) \ + double momen_step_scale; \ + std::string momen_step_location; \ + std::string momen_weight_location; \ + if (File::has_extension(state_location)) { \ + momen_step_scale = Fibre::Strand::Set::Momentum::STEP_SCALE_DEFAULT; \ + momen_step_location = Fibre::Strand::Set::Momentum::STEP_LOCATION_DEFAULT; \ + } else if (File::has_extension(state_location)) { \ + momen_step_scale = Fibre::Tractlet::Set::Momentum::STEP_SCALE_DEFAULT; \ + momen_step_location = Fibre::Tractlet::Set::Momentum::STEP_LOCATION_DEFAULT; \ + } else { \ + momen_step_scale = MCMC::Proposal::Momentum::STEP_SCALE_DEFAULT; \ + momen_step_location = MCMC::Proposal::Momentum::STEP_LOCATION_DEFAULT; \ + } \ +\ + opt = get_options("momen_step_scale"); \ + if (opt.size()) \ + momen_step_scale = opt[0][0]; \ +\ + opt = get_options("momen_step_location"); \ + if (opt.size()) \ + momen_step_location = opt[0][0].c_str(); \ +\ + opt = get_options("momen_weight_location"); \ + if (opt.size()) \ + momen_weight_location = opt[0][0].c_str(); \ + +//Adds the 'prior' parameters to the momerties to be saved with the data. +#define ADD_PROPOSAL_MOMENTUM_PROPERTIES(properties) \ +\ + properties["momen_step_scale"] = str(momen_step_scale); \ + properties["momen_step_location"] = momen_step_location; \ + properties["momen_step"] = Fibre::Base::Object::load_matlab_str(momen_step_location, momen_step_scale); \ + if (momen_weight_location.size()) { \ + properties["momen_weight_location"] = momen_weight_location; \ + properties["momen_weight"] = Fibre::Base::Object::load_matlab_str(momen_weight_location,1.0); \ + } \ + +#include "bts/mcmc/proposal/distribution.h" +#include "bts/mcmc/state.h" + +namespace BTS { + + namespace MCMC { + + namespace Proposal { + + class Momentum { + + //Nested Classes and Typedefs + public: + + class Weighted; + + //Public static constants + public: + + static const double STEP_SCALE_DEFAULT; + static const std::string STEP_LOCATION_DEFAULT; + + //Public static functions. + public: + + template static Momentum factory( const T& state, + double step_scale, + const std::string& step_location, + const std::string& weight_location, + MCMC::Proposal::Distribution* const proposal_distribution); + + //Member variables + protected: + + MR::Math::Vector momen; + MR::Math::Vector step; + + Distribution* prop_distr; + + //Member functions + public: + + + Momentum(Distribution* const prop_distr = 0) : prop_distr(prop_distr) {} + + + Momentum(Distribution* const proposal_distribution, + const MR::Math::Vector& relative_step) + : prop_distr(0) + { set(proposal_distribution, relative_step); } + + ~Momentum() + { if (prop_distr) delete prop_distr; } + + Momentum(const Momentum& m) + : momen(m.momen), step(m.step) { if (m.prop_distr) delete prop_distr; prop_distr = m.prop_distr->clone(); } + + Momentum& operator=(const Momentum& m) + { momen = m.momen, step = m.step; if (m.prop_distr) delete prop_distr; prop_distr = m.prop_distr->clone(); return *this; } + + + void set(Distribution* const proposal_distribution, MR::Math::Vector relative_step); + + + size_t size() const + { return momen.size(); } + + double log_kinetic_energy() const + { return norm2(momen) / 2.0; } + + const MR::Math::Vector& momentum() const + { return momen; } + + const MR::Math::Vector& step_sizes() const + { return step; } + + void randomize(); + + + virtual void half_update_momentum(const MR::Math::Vector& gradient, double time_direction = 1.0); + + + virtual void update_state(MR::Math::Vector& state, double time_direction = 1.0) const; + + + template void half_update_momentum(const T& gradient, double time_direction = 1.0) + { half_update_momentum(gradient, time_direction); } + + + template void update_state(T& state, double time_direction = 1.0) const + { MR::Math::Vector& state_vector = state; update_state(state_vector, time_direction); } + + + void half_update_momentum(const MCMC::State& gradient, double time_direction = 1.0) + { half_update_momentum((const MR::Math::Vector&)gradient, time_direction); } + + + void update_state(MCMC::State& state, double time_direction = 1.0) const + { update_state((MR::Math::Vector&)state, time_direction);} + + //For debugging purposes. + double predicted_change(const MR::Math::Vector& gradient, double time_direction = 1.0) const; + + template double predicted_change(const T& gradient, double time_direction = 1.0) const + { return predicted_change(gradient, time_direction); } + + + friend std::ostream& operator<<(std::ostream& stream, const Momentum& momen); + + }; + + + std::ostream& operator<<(std::ostream& stream, const Momentum& momen); + + } + } +} + + +#endif /* __bts_proposal_momentum_h__ */ diff --git a/src/bts/mcmc/proposal/momentum/weighted.cpp b/src/bts/mcmc/proposal/momentum/weighted.cpp new file mode 100644 index 0000000..367d11e --- /dev/null +++ b/src/bts/mcmc/proposal/momentum/weighted.cpp @@ -0,0 +1,122 @@ +/* + Copyright 2008 Brain Research Institute, Melbourne, Australia + + Written by Thomas G Close, 15/09/2010. + + This file is part of MRtrix. + + MRtrix is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + MRtrix is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with MRtrix. If not, see . + +*/ + +#include "bts/mcmc/proposal/momentum/weighted.h" +#include "math/cholesky.h" + +namespace BTS { + + namespace MCMC { + + namespace Proposal { + + + Momentum::Weighted::Weighted(Distribution* const proposal_distribution, + const MR::Math::Vector& relative_step_sizes) + : Momentum(proposal_distribution, relative_step_sizes), + momen_step(relative_step_sizes.size()) {} + + + + + //!The kinetic energy is the weighted inner product of the momentum, normalized by 1/2 * log(2*pi)^D |weights|. + double Momentum::Weighted::log_kinetic_energy(const MR::Math::Matrix& weights_chol) const { + + MR::Math::Vector weights_momen(size()); + + MR::Math::Cholesky::solve(weights_momen, weights_chol, momen); + double energy = MR::Math::dot(weights_momen, momen) / 2.0; + + energy += log_normalization(MR::Math::Cholesky::det_from_decomp(weights_chol)); + + return energy; + + } + + + + //!The kinetic energy is the weighted inner product of the momentum, normalized by 1/2 * log(2*pi)^D |weights|. + double Momentum::Weighted::log_normalization(double inv_weights_determinant) const { + + return 0.5 * (LOG_2 + LOG_PI * size() + MR::Math::log(inv_weights_determinant)); + + } + + //!At the start of each leapfrog chain the momentum is randomized to have the a normal distribution with covariance matrix equal to the weighting matrix. + void Momentum::Weighted::randomize(const MR::Math::Matrix& cholesky) { + + MR::Math::Vector random_vec(size()); + + for (size_t elem_i = 0; elem_i < size(); ++elem_i) + random_vec[elem_i] = prop_distr->sample(0.0, 1.0); + + +// MR::Math::Vector random_vec("/home/tclose/data/mcmc/state/random_vec.txt"); + + MR::Math::Matrix lower_cholesky = cholesky; + + for (size_t elem_i = 0; elem_i < size(); ++elem_i) + for (size_t elem_i2 = elem_i+1; elem_i2 < size(); ++elem_i2) + lower_cholesky(elem_i, elem_i2) = 0.0; + + +// MR::Math::mult(momen, CblasNoTrans, CblasLower, cholesky, random_vec); + + MR::Math::mult(momen, lower_cholesky, random_vec); + + + + } + + + void Momentum::Weighted::update_state(MR::Math::Vector& state, const MR::Math::Matrix& weights_chol, double time_direction) const { + + + MR::Math::Vector working(state.size()); + MR::Math::Cholesky::solve(working, weights_chol, momen); + + for (size_t elem_i = 0; elem_i < size(); elem_i++) + state[elem_i] += time_direction * working[elem_i] * step[elem_i]; + + + } + + double Momentum::Weighted::predicted_change(const MR::Math::Vector& gradient, const MR::Math::Matrix& weights_chol, double time_direction) const { + + double pred_change = 0.0; + + MR::Math::Vector working(gradient.size()); + MR::Math::Cholesky::solve(working, weights_chol, momen); + + for (size_t elem_i = 0; elem_i < size(); elem_i++) + pred_change += time_direction * working[elem_i] * gradient[elem_i] * step[elem_i]; + + return pred_change; + + } + + + } + + } + +} diff --git a/src/bts/mcmc/proposal/momentum/weighted.cpp.h b/src/bts/mcmc/proposal/momentum/weighted.cpp.h new file mode 100644 index 0000000..5811d98 --- /dev/null +++ b/src/bts/mcmc/proposal/momentum/weighted.cpp.h @@ -0,0 +1,81 @@ +/* + Copyright 2008 Brain Research Institute, Melbourne, Australia + + Written by Thomas G Close, 22/11/2010. + + This file is part of MRtrix. + + MRtrix is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + MRtrix is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with MRtrix. If not, see . + +*/ + +#ifndef __bts_mcmc_proposal_momentum_weighted_cpp_h__ +#define __bts_mcmc_proposal_momentum_weighted_cpp_h__ + +namespace BTS { + + namespace MCMC { + + namespace Proposal { + + + template Momentum::Weighted Momentum::Weighted::factory(const T& state, + double step_scale, + const std::string& step_location, + MCMC::Proposal::Distribution* const proposal_distribution) { + + + Momentum::Weighted momentum; + + T step; + + if (step_location.size()) { + + T loaded_step; + + loaded_step.load(step_location); + + if (loaded_step.size() == 1) + step.resize(state.size(), loaded_step[0]); + else if (loaded_step.size() == state.size()) + step = loaded_step; + else + throw Exception ("Size of loaded step (" + str(loaded_step.size()) + ") from file '" + step_location + "' is not singular and does not match that of state (" + str(state.size()) + ")."); + + step *= step_scale; + + } else + step.resize(state.size(),step_scale); + +// step.base_intensity = 0.0; +// +// //TODO: Remove from production version +// for (size_t i = 0; i < step.size(); ++i) +// step[i].acs = 0.0; + + MR::Math::Vector& step_vector = step; + + return Momentum::Weighted (proposal_distribution, step_vector); + + } + + + + } + + } + +} + +#endif /* __bts_mcmc_proposal_momentum_weighted_cpp_h__ */ diff --git a/src/bts/mcmc/proposal/momentum/weighted.h b/src/bts/mcmc/proposal/momentum/weighted.h new file mode 100644 index 0000000..dc8b9c0 --- /dev/null +++ b/src/bts/mcmc/proposal/momentum/weighted.h @@ -0,0 +1,110 @@ +/* + Copyright 2008 Brain Research Institute, Melbourne, Australia + + Written by Thomas G Close, 15/09/2010. + + This file is part of MRtrix. + + MRtrix is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + MRtrix is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with MRtrix. If not, see . + +*/ + +#ifndef __bts_mcmc_proposal_momentum_weighted_h__ +#define __bts_mcmc_proposal_momentum_weighted_h__ + +#include "bts/mcmc/proposal/momentum.h" + +namespace BTS { + + namespace MCMC { + + namespace Proposal { + + class Momentum::Weighted : public Momentum { + + //Public nested classes + public: + + class NonSeparable; + + public: + + + template static Weighted factory(const T& state, + double step_scale, + const std::string& step_location, + MCMC::Proposal::Distribution* const proposal_distribution); + + protected: + + MR::Math::Vector momen_step; + + //Public static functions + public: + + //Public member functions + public: + + Weighted(Distribution* const prop_distr = 0) : Momentum(prop_distr) {} + + + Weighted(Distribution* const proposal_distribution, const MR::Math::Vector& relative_step_sizes); + + + ~Weighted() {} + + + Weighted(const Weighted& W) + : Momentum(W), momen_step(W.size()) {} + + + Weighted& operator=(const Weighted& W) + { Momentum::operator=(W); momen_step.resize(W.size()); return *this; } + + + virtual void update_state(MR::Math::Vector& state, const MR::Math::Matrix& weights_chol, double time_direction = 1.0) const; + + + template void update_state(T& state, const MR::Math::Matrix& weights_chol, double time_direction = 1.0) const + { MR::Math::Vector& state_vector = state; update_state(state_vector, weights_chol, time_direction); } + + + void randomize(const MR::Math::Matrix& cholesky); + + + double log_kinetic_energy(const MR::Math::Matrix& cholesky) const; + + //For debugging purposes. + double predicted_change(const MR::Math::Vector& gradient, const MR::Math::Matrix& weights_chol, double time_direction = 1.0) const; + + + template double predicted_change(const T& gradient, const MR::Math::Matrix& weights_chol, double time_direction = 1.0) const + { return predicted_change(gradient, weights_chol, time_direction); } + + protected: + + double log_normalization(double determinant) const; + + + + + }; + + } + + } + +} + +#endif /* __bts_mcmc_proposal_momentum_weighted_h__ */ diff --git a/src/bts/mcmc/proposal/momentum/weighted/non_separable.cpp b/src/bts/mcmc/proposal/momentum/weighted/non_separable.cpp new file mode 100644 index 0000000..8ce397e --- /dev/null +++ b/src/bts/mcmc/proposal/momentum/weighted/non_separable.cpp @@ -0,0 +1,71 @@ +/* + Copyright 2008 Brain Research Institute, Melbourne, Australia + + Written by Thomas G Close, Sep 27, 2010. + + This file is part of MRtrix. + + MRtrix is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + MRtrix is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with MRtrix. If not, see . + +*/ + +#include "math/matrix.h" +#include "math/cholesky.h" +#include "bts/mcmc/naninf_exception.h" + +#include "bts/math/common.h" + +#include "bts/mcmc/proposal/momentum/weighted/non_separable.h" + +namespace BTS { + + namespace MCMC { + + namespace Proposal { + + +// double Momentum::Weighted::NonSeparable::log_kinetic_energy(const MR::Math::Matrix& weights_chol) const { +// +// MR::Math::Vector weights_momen(size()); +// +// MR::Math::Cholesky::solve(weights_momen, weights_chol, momen); +// double energy = MR::Math::dot(weights_momen, momen) / 2.0; +// +// energy += log_normalization(MR::Math::Cholesky::det_from_decomp(weights_chol)); +// +// return energy; +// +// } + + + double Momentum::Weighted::NonSeparable::predicted_change(const MR::Math::Vector& gradient, const MR::Math::Matrix& fisher_chol, double time_direction) const { + + double pred_change = 0.0; + + MR::Math::Vector working(gradient.size()); + + MR::Math::Cholesky::solve(working, fisher_chol, momen); + + for (size_t elem_i = 0; elem_i < size(); elem_i++) + pred_change += working[elem_i] * gradient[elem_i] * step[elem_i]; + + return pred_change * time_direction; + + } + + } + + } + +} diff --git a/src/bts/mcmc/proposal/momentum/weighted/non_separable.cpp.h b/src/bts/mcmc/proposal/momentum/weighted/non_separable.cpp.h new file mode 100644 index 0000000..2d4cfc9 --- /dev/null +++ b/src/bts/mcmc/proposal/momentum/weighted/non_separable.cpp.h @@ -0,0 +1,82 @@ +/* + Copyright 2008 Brain Research Institute, Melbourne, Australia + + Written by Thomas G Close, Sep 28, 2010. + + This file is part of MRtrix. + + MRtrix is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + MRtrix is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with MRtrix. If not, see . + +*/ + +#ifndef __bts_mcmc_proposal_momentum_weighted_nonseparable_cpp_h__ +#define __bts_mcmc_proposal_momentum_weighted_nonseparable_cpp_h__ + + +namespace BTS { + + namespace MCMC { + + namespace Proposal { + + template Momentum::Weighted::NonSeparable Momentum::Weighted::NonSeparable::factory(const T& state, + double step_scale, + const std::string& step_location, + MCMC::Proposal::Distribution* const proposal_distribution, + size_t num_newton_steps) { + + + Momentum::Weighted::NonSeparable momentum; + + T step; + + if (step_location.size()) { + + T loaded_step; + + loaded_step.load(step_location); + + if (loaded_step.size() == 1) + step.resize(state.size(), loaded_step[0]); + else if (loaded_step.size() == state.size()) + step = loaded_step; + else + throw Exception ("Size of loaded step (" + str(loaded_step.size()) + ") from file '" + step_location + "' is not singular and does not match that of state (" + str(state.size()) + ")."); + + step *= step_scale; + + } else + step.resize(state.size(),step_scale); + +// step.base_intensity = 0.0; +// +// //TODO: Remove from production version +// for (size_t i = 0; i < step.size(); ++i) +// step[i].acs = 0.0; + + MR::Math::Vector& step_vector = step; + + return Momentum::Weighted::NonSeparable (proposal_distribution, step_vector, num_newton_steps); + + } + + + } + + } + +} + + +#endif /* __bts_mcmc_proposal_momentum_weighted_non_separable_cpp_h__ */ diff --git a/src/bts/mcmc/proposal/momentum/weighted/non_separable.h b/src/bts/mcmc/proposal/momentum/weighted/non_separable.h new file mode 100644 index 0000000..08f1c26 --- /dev/null +++ b/src/bts/mcmc/proposal/momentum/weighted/non_separable.h @@ -0,0 +1,174 @@ +/* + Copyright 2008 Brain Research Institute, Melbourne, Australia + + Written by Thomas G Close, Sep 27, 2010. + + This file is part of MRtrix. + + MRtrix is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + MRtrix is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with MRtrix. If not, see . + +*/ + +#ifndef __bts_mcmc_proposal_momentum_weighted_nonseparable_h__ +#define __bts_mcmc_proposal_momentum_weighted_nonseparable_h__ + +#include "bts/math/common.h" +#include "bts/mcmc/naninf_exception.h" +#include "bts/mcmc/proposal/momentum/weighted.h" + +namespace BTS { + + namespace MCMC { + + namespace Proposal { + + class Momentum::Weighted::NonSeparable : public Momentum::Weighted { + + //Public static variables, nested classes and typedefs + public: + + //Protected member variables + protected: + + //Working matrices and vectors. + MR::Math::Vector tmp_momen; + MR::Math::Vector working1; + MR::Math::Vector working2; + std::vector< MR::Math::Matrix > Winv_dWdx; + std::vector trace_Winv_dWdx; + + + //Public static functions + public: + + + template static NonSeparable factory(const T& state, + double step_scale, + const std::string& step_location, + MCMC::Proposal::Distribution* const proposal_distribution, + size_t num_newton_steps); + + //Public member functions + public: + + + NonSeparable(Distribution* const prop_distr = 0) : Weighted(prop_distr) {} + + NonSeparable(Distribution* const proposal_distribution, const MR::Math::Vector& step_sizes, size_t num_newton_steps) + : Weighted(proposal_distribution, step_sizes), + tmp_momen(step_sizes.size()), + working1(step_sizes.size()), + working2(step_sizes.size()), + Winv_dWdx(step_sizes.size(), MR::Math::Matrix(step_sizes.size(),step_sizes.size())), + trace_Winv_dWdx(step_sizes.size()) {} + + + virtual ~NonSeparable() {} + + + NonSeparable(const NonSeparable& NS) + : Weighted(NS), + tmp_momen(NS.tmp_momen), + working1(NS.working1), + working2(NS.working2), + Winv_dWdx(NS.Winv_dWdx), + trace_Winv_dWdx(NS.trace_Winv_dWdx) {} + + + NonSeparable& operator=(const NonSeparable& NS) { + + Weighted::operator=(NS); + tmp_momen = NS.tmp_momen; + working1 = NS.working1; + working2 = NS.working2; + Winv_dWdx = NS.Winv_dWdx; + trace_Winv_dWdx = NS.trace_Winv_dWdx; + + return *this; + } + + void randomize(const MR::Math::Matrix& weights_chol) + { Momentum::Weighted::randomize(weights_chol); } + +// double log_kinetic_energy(const MR::Math::Matrix& weights_chol) const; + + + template void half_update_momentum(const MR::Math::Vector& gradient, const MR::Math::Matrix& weights, std::vector& weights_gradient, double time_direction, size_t num_newton_steps = 1); + + + double predicted_change(const MR::Math::Vector& gradient, const MR::Math::Matrix& fisher_chol, double time_direction) const; + + + template double predicted_change(const T& gradient, const MR::Math::Matrix& fisher_chol, double time_direction) const + { return predicted_change(gradient, fisher_chol, time_direction); } + + }; + + + template void Momentum::Weighted::NonSeparable::half_update_momentum(const MR::Math::Vector& gradient, + const MR::Math::Matrix& weights_chol, + std::vector& weights_gradient, + double time_direction, + size_t num_newton_steps) { + + + assert((time_direction == -1.0) || (time_direction == 1.0)); + + for (size_t elem_i = 0; elem_i < size(); ++elem_i) { + + //More numerically sound than calculating the inverse and multiplying it with the gradient. + for (size_t col_i = 0; col_i < size(); ++col_i) { + MR::Math::Vector Winv_dWdx_col = Winv_dWdx[elem_i].column(col_i); + MR::Math::Cholesky::solve(Winv_dWdx_col, weights_chol, weights_gradient[elem_i].column(col_i)); + } + + trace_Winv_dWdx[elem_i] = Math::trace(Winv_dWdx[elem_i]) / 2.0; + } + + tmp_momen = momen; + + MR::Math::Vector weights_momen(size()); + + for (size_t newton_i = 0; newton_i < num_newton_steps; ++newton_i) { + + MR::Math::Cholesky::solve(weights_momen, weights_chol, tmp_momen); + + for (size_t elem_i = 0; elem_i < size(); ++elem_i) { + MR::Math::mult(working1, Winv_dWdx[elem_i], weights_momen); + working2[elem_i] = MR::Math::dot(working1 , tmp_momen) / 2.0; + + } + + for (size_t elem_i = 0; elem_i < size(); ++elem_i) { + + tmp_momen[elem_i] = momen[elem_i] + 0.5 * time_direction * step[elem_i] * (gradient[elem_i] - trace_Winv_dWdx[elem_i] + working2[elem_i]); + + if (isnan(tmp_momen[elem_i]) || isinf(tmp_momen[elem_i])) + throw NanInfException(); +// throw Exception ("Momentum has NaN or inf values in " + str(newton_i) + " newton step.\n\n" + str(tmp_momen) + "\n\n"); + } + + } + + momen = tmp_momen; + + } + + } + + } + +} + +#endif /* __bts_mcmc_proposal_momentum_weighted_non_separable_h__ */ diff --git a/src/bts/mcmc/proposal/walker.cpp b/src/bts/mcmc/proposal/walker.cpp new file mode 100644 index 0000000..5de1ae0 --- /dev/null +++ b/src/bts/mcmc/proposal/walker.cpp @@ -0,0 +1,62 @@ +/* + Copyright 2008 Brain Research Institute, Melbourne, Australia + + Written by Thomas G Close, Jul 28, 2010. + + This file is part of MRtrix. + + MRtrix is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + MRtrix is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with MRtrix. If not, see . + +*/ + +#include "bts/common.h" +#include "bts/mcmc/proposal/walker.h" + +namespace BTS { + + namespace MCMC { + + namespace Proposal { + + const std::string Walker::TYPE_DEFAULT = "standard"; + const double Walker::STEP_SCALE_DEFAULT = 1.0; + const std::string Walker::STEP_LOCATION_DEFAULT = "/home/tclose/data/mcmc/parameters/walker.sta"; + + void Walker::set(Distribution* const proposal_distribution, + MR::Math::Vector relative_step_sizes) { + + if (prop_distr) + delete prop_distr; + + this->prop_distr = proposal_distribution->clone(); + + step_sizes = relative_step_sizes; + + } + + + void Walker::step(const MR::Math::Vector& current, MR::Math::Vector& proposed, double scalar) const { + + assert(current.size() == proposed.size()); + + for (size_t elem_i = 0; elem_i < current.size(); elem_i++) + proposed[elem_i] = prop_distr->sample(current[elem_i], step_sizes[elem_i] * scalar); + + } + + } + + } + +} diff --git a/src/bts/mcmc/proposal/walker.h b/src/bts/mcmc/proposal/walker.h new file mode 100644 index 0000000..72a0191 --- /dev/null +++ b/src/bts/mcmc/proposal/walker.h @@ -0,0 +1,176 @@ +/* + Copyright 2008 Brain Research Institute, Melbourne, Australia + + Written by Thomas G Close, 26/07/2010. + + This file is part of MRtrix. + + MRtrix is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your walk_option) any later version. + + MRtrix is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with MRtrix. If not, see . + +*/ + +#ifndef __bts_mcmc_proposal_walker_h__ +#define __bts_mcmc_proposal_walker_h__ + +namespace BTS { + + namespace MCMC { + + namespace Proposal { + + class Walker; + + } + + } + +} + + + +#define PROPOSAL_WALKER_PARAMETERS \ + Option ("walk_type", "The 'Proposal Walker' object used to propose new fibres in MCMC sampling.") \ + + Argument ("walk_type", "").type_text(), \ +\ + Option ("walk_step_scale", "Overall scaling, every scaling is multiplied by this value.") \ + + Argument ("walk_step_scale", "").type_float (0.0, 1e5, NAN), \ +\ + Option ("walk_step_location", "The location of the relative scalings for each of the parameters.") \ + + Argument ("walk_step_location", "").type_text(), \ +\ + Option ("walk_intens_scale", "Intensity step size scaling.") \ + + Argument ("walk_intens_scale", "").type_float (0.0, 1e5, NAN) + + +//Loads the 'proposal' parameters into variables +#define SET_PROPOSAL_WALKER_PARAMETERS(state_location) \ + std::string walk_type; \ + double walk_step_scale; \ + std::string walk_step_location; \ + double walk_base_intens_scale; \ + \ + if (File::has_extension(state_location)) { \ + walk_type = Fibre::Strand::Set::Walker::TYPE_DEFAULT; \ + walk_step_scale = Fibre::Strand::Set::Walker::STEP_SCALE_DEFAULT; \ + walk_base_intens_scale = 0.01; \ + walk_step_location = Fibre::Strand::Set::Walker::STEP_LOCATION_DEFAULT; \ + \ + } else if (File::has_extension(state_location)) { \ + walk_type = Fibre::Tractlet::Set::Walker::TYPE_DEFAULT; \ + walk_step_scale = Fibre::Tractlet::Set::Walker::STEP_SCALE_DEFAULT; \ + walk_base_intens_scale = 0.01; \ + walk_step_location = Fibre::Tractlet::Set::Walker::STEP_LOCATION_DEFAULT; \ + \ + } else { \ + walk_type = MCMC::Proposal::Walker::TYPE_DEFAULT; \ + walk_step_scale = MCMC::Proposal::Walker::STEP_SCALE_DEFAULT; \ + walk_step_location = MCMC::Proposal::Walker::STEP_LOCATION_DEFAULT; \ + } \ + \ + Options walk_opt = get_options("walk_type"); \ + if (walk_opt.size()) \ + walk_type = walk_opt[0][0].c_str(); \ + \ + walk_opt = get_options("walk_step_scale"); \ + if (walk_opt.size()) \ + walk_step_scale = walk_opt[0][0]; \ + \ + walk_opt = get_options("walk_step_location"); \ + if (walk_opt.size()) \ + walk_step_location = walk_opt[0][0].c_str(); \ + \ + walk_opt = get_options("walk_base_intens_scale"); \ + if (walk_opt.size()) \ + walk_base_intens_scale = walk_opt[0][0]; + + + +//Adds the 'proposal' parameters to the properties to be saved with the data. +#define ADD_PROPOSAL_WALKER_PROPERTIES(properties) \ + properties["walk_type"] = walk_type; \ + properties["walk_step_scale"] = str(walk_step_scale); \ + properties["walk_base_intens_scale"] = str(walk_base_intens_scale); \ +\ + if (walk_type == "standard") { \ + properties["walk_step"] = Fibre::Base::Object::load_matlab_str(walk_step_location, walk_step_scale); \ + properties["walk_step_location"] = walk_step_location; \ +\ + } + + +#include "bts/mcmc/proposal/distribution.h" +#include "bts/mcmc/state.h" + +namespace BTS { + + namespace MCMC { + + namespace Proposal { + + class Walker { + + public: + + const static std::string TYPE_DEFAULT; + const static double STEP_SCALE_DEFAULT; + const static std::string STEP_LOCATION_DEFAULT; + + //Member variables + protected: + + MR::Math::Vector step_sizes; + + Distribution* prop_distr; + + //Member functions + public: + + + Walker(Distribution* const prop_distr = 0) : prop_distr(prop_distr) {} + + Walker(Distribution* const proposal_distribution, + const MR::Math::Vector& relative_step_sizes) + : prop_distr(0) + + { set(proposal_distribution, relative_step_sizes); } + + ~Walker() + { if (prop_distr) delete prop_distr; } + + + Walker(const Walker& m) + : step_sizes(m.step_sizes) { if (m.prop_distr) prop_distr = m.prop_distr->clone(); } + + + Walker& operator=(const Walker& m) + { step_sizes = m.step_sizes; if (m.prop_distr) prop_distr = m.prop_distr->clone(); return *this; } + + + void step(const MR::Math::Vector& current, MR::Math::Vector& proposed, double scalar = 1.0) const; + + + void set(Distribution* const proposal_distribution, + MR::Math::Vector relative_step_sizes); + + + + }; + + } + + } + +} + +#endif /* __bts_mcmc_proposal_walker_h__ */ diff --git a/src/bts/mcmc/riemannian.h b/src/bts/mcmc/riemannian.h new file mode 100644 index 0000000..b3f1522 --- /dev/null +++ b/src/bts/mcmc/riemannian.h @@ -0,0 +1,449 @@ +/* + Copyright 2009 Brain Research Institute, Melbourne, Australia + + Created by Tom Close on 13/03/09. + + This file is part of Bayesian Tractlet Sampling (BTS). + + BTS is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + BTS is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with BTS. If not, see . + + */ + + +#ifndef __bts_mcmc_riemannian_h__ +#define __bts_mcmc_riemannian_h__ + +extern "C" { +#include +#include +} + +#include + +#include "progressbar.h" +#include "math/cholesky.h" + +#include "bts/fibre/strand/set/tensor.h" +#include "bts/fibre/tractlet/set/tensor.h" +#include "bts/mcmc/common.h" + +#include "bts/mcmc/proposal/momentum/weighted/non_separable.h" +#include "bts/mcmc/naninf_exception.h" + + +#include "bts/common.h" + + + + +namespace BTS { + + namespace MCMC { + + namespace Riemannian { + + const size_t NUM_SAMPLES_DEFAULT = 100; + const size_t NUM_LEAPFROG_STEPS_DEFAULT = 30; + const size_t NUM_NEWTON_STEPS_DEFAULT = 6; + const size_t BURN_NUM_SAMPLES_DEFAULT = 0; + const size_t BURN_NUM_LEAPFROG_STEPS_DEFAULT = 30; + const size_t BURN_NUM_NEWTON_STEPS_DEFAULT = 6; + const size_t BURN_SNR_DEFAULT = 1; + const float PRECONDITION_DEFAULT = 1000; + + } + + template class Posterior { + + //Public static variables, nested classes and typedefs + public: + + + //Protected member variables + protected: + + Prior_T& prior; + Likelihood_T& likelihood; + double precondition; + + size_t dimension; + + State_T prior_gradient, likelihood_gradient; + typename State_T::Tensor prior_fisher, likelihood_fisher; + std::vector prior_fisher_gradient, likelihood_fisher_gradient; + + typename State_T::Tensor::Writer fisher_writer; + + //Public member functions + public: + + Posterior(const State_T& state, Prior_T& prior, Likelihood_T& likelihood, double precondition = 0.0) + : prior(prior), + likelihood(likelihood), + precondition(precondition), + dimension(state.vsize()), + prior_gradient(state), + likelihood_gradient(state), + prior_fisher(state), + likelihood_fisher(state) { + + prior_gradient.zero(); + likelihood_gradient.zero(); + + prior_fisher.zero(); + likelihood_fisher.zero(); + + for (size_t elem_i = 0; elem_i < dimension; ++elem_i) { + prior_fisher_gradient.push_back(prior_fisher); + likelihood_fisher_gradient.push_back(likelihood_fisher); + } + + fisher_writer.create("/home/tclose/data/mcmc/riemannian/fishers.sta.tnr", state); + + } + + + double log_prob_and_fisher (const State_T& state, State_T& gradient, typename State_T::Tensor& fisher, std::vector& fisher_gradient) { + + double px = prior.log_prob_and_fisher(state, prior_gradient, prior_fisher, prior_fisher_gradient); + px += likelihood.log_prob_and_fisher(state, likelihood_gradient, likelihood_fisher, likelihood_fisher_gradient); + + gradient = prior_gradient + likelihood_gradient; + fisher = prior_fisher; + fisher += likelihood_fisher; + + if (precondition) { + + for (size_t elem_i = 0; elem_i < dimension; ++elem_i) + fisher(elem_i,elem_i) += precondition; + + } + + for (size_t elem_i = 0; elem_i < dimension; ++elem_i) { + fisher_gradient[elem_i] = prior_fisher_gradient[elem_i]; + fisher_gradient[elem_i] += likelihood_fisher_gradient[elem_i]; + } + + fisher_writer.append(fisher); + + return px; + + } + + + double log_prob_and_fisher (const State_T& state, State_T& gradient, typename State_T::Tensor& fisher) { + + double px = prior.log_prob_and_fisher(state, prior_gradient, prior_fisher); + px += likelihood.log_prob_and_fisher(state, likelihood_gradient, likelihood_fisher); + + gradient = prior_gradient; + gradient += likelihood_gradient; + + fisher = prior_fisher; + fisher += likelihood_fisher; + + if (precondition) { + + for (size_t elem_i = 0; elem_i < dimension; ++elem_i) + fisher(elem_i,elem_i) += precondition; + + } + + fisher_writer.append(fisher); + + return px; + + } + + //Protected member functions + protected: + + + }; + + + template State_T riemannian (State_T& initial_x, + Likelihood_T& likelihood, + Prior_T& prior, + MCMC::Proposal::Momentum::Weighted::NonSeparable& momentum, + const std::string& samples_location, + const std::map& run_properties, + size_t num_samples, + size_t num_leapfrog_steps, + size_t num_newton_steps, + gsl_rng* rand_gen, + double precondition = 0.0, + bool prior_only = false, + bool save_iterations = false, + bool suppress_print = false ) { + + + + Posterior posterior(initial_x, prior, likelihood, precondition); + + std::vector sample_header; + + sample_header.push_back(LOG_PROB_PROP); + sample_header.push_back(H_PROP); + sample_header.push_back(PROPOSED_H_PROP); + + + std::vector components_list = prior.list_components(); + + sample_header.insert(sample_header.end(), components_list.begin(), components_list.end()); + + typename State_T::Writer samples (samples_location, initial_x, sample_header, run_properties); + + typename State_T::Writer iterations, gradient_iterations; + + + SamplePropertyHeader iteration_property_header; + + iteration_property_header.push_back("log_px"); + iteration_property_header.push_back("pred_d_log_px"); + iteration_property_header.push_back("act_d_log_px"); + iteration_property_header.push_back("grad_norm2"); + iteration_property_header.push_back("log_kinetic_energy"); + + + + if (save_iterations) { + iterations.create(File::strip_extension(samples_location) + ".iter." + File::extension(samples_location), initial_x, iteration_property_header, run_properties); + gradient_iterations.create(File::strip_extension(samples_location) + ".grad_iter." + File::extension(samples_location), initial_x, SamplePropertyHeader(), run_properties); + } + + + + State_T x = initial_x; + + size_t dimension = x.vsize(); + + State_T gradient(x); + gradient.zero(); + + typename State_T::Tensor fisher(x); + fisher.zero(); + + std::vector fisher_gradient; + for (size_t elem_i = 0; elem_i < dimension; ++elem_i) + fisher_gradient.push_back(fisher); + + + typename State_T::Tensor fisher_chol (fisher); + + + double px = posterior.log_prob_and_fisher(x, gradient, fisher, fisher_gradient); + + fisher_chol = fisher; + + MR::Math::Cholesky::decomp(fisher_chol); + + + //-------------------------// + // Take the MCMC samples // + //-------------------------// + + size_t iteration_count = 0; + + // Initialise the progress bar + MR::ProgressBar progress_bar ("Generating " + str(num_samples) + " Riemannian Hamiltonian MCMC samples ...", num_samples); + + for (size_t sample_i = 0; sample_i < num_samples; sample_i++) { + + momentum.randomize(fisher_chol); + + double log_kinetic_energy = momentum.log_kinetic_energy(fisher_chol); //(LOG_2 + LOG_PI * dimension + fisher_det) / 2.0 + + // NB: Since we want to find maxima not minima the probability of x is inverted when compared from the classical algorithm + // (as implemented in Mackay, D. 2003. Information Theory, Inference and Learning Algorithms, Cambridge University Press, pp388.) + + double H = log_kinetic_energy - px; + + clock_t sample_starttime = clock(); + + State_T prop_x = x; + State_T prop_gradient = gradient; + typename State_T::Tensor prop_fisher = fisher; + typename State_T::Tensor prop_fisher_chol = fisher_chol; + double prop_px = px; + + + //Randomly select to evolve forwards or backwards in time. + double time_direction; + + if (gsl_rng_uniform(rand_gen) > 0.5) + time_direction = 1.0; + else + time_direction = -1.0; + +// MR::Math::Vector time_direction_matrix ("/home/tclose/data/mcmc/state/time_direction.txt"); +// +// time_direction = time_direction_matrix[0]; + + try { + + // Make 'num_leapfrog_steps' leapfrog steps. + for (size_t leapfrog_i = 0; leapfrog_i < num_leapfrog_steps; leapfrog_i++) { + + + if (save_iterations) { + + prop_x.set_extend_prop("pred_d_log_px",str(momentum.predicted_change(prop_gradient, prop_fisher_chol, time_direction))); + + } + + // NB: Since we want to find maxima not minima the gradient of x is inverted when compared from the classical algorithm. + momentum.half_update_momentum(prop_gradient, prop_fisher_chol, fisher_gradient, time_direction, num_newton_steps); + + // Debug purposes only. + double prev_prop_px = prop_px; + + MR::Math::Vector fishinv_momen(dimension), tmp_fishinv_momen(dimension); + MR::Math::Vector& prop_x_vector = prop_x; + State_T tmp_x (prop_x); + MR::Math::Vector& tmp_x_vector = tmp_x; + + MR::Math::Cholesky::solve(fishinv_momen, fisher_chol, momentum.momentum()); + + for (size_t newton_i = 0; newton_i < num_newton_steps; ++newton_i) { + + posterior.log_prob_and_fisher(tmp_x, prop_gradient, prop_fisher); + + MR::Math::Cholesky::decomp(prop_fisher_chol = prop_fisher); + MR::Math::Cholesky::solve(tmp_fishinv_momen, prop_fisher_chol, momentum.momentum()); + + for (size_t elem_i = 0; elem_i < dimension; ++elem_i) { + tmp_x_vector[elem_i] = prop_x_vector[elem_i] + (fishinv_momen[elem_i] + tmp_fishinv_momen[elem_i]) * momentum.step_sizes()[elem_i] * time_direction * 0.5; + if (isnan(tmp_x_vector[elem_i]) || isinf(tmp_x_vector[elem_i])) + throw NanInfException(); + // throw Exception ("State_T has NaN values in " + str(newton_i) + " newton step of " + str(leapfrog_i) + " leapfrog step.\n\n" + str(tmp_x_vector) + "\n\n"); + } + + + } + + prop_x = tmp_x; + + prop_px = posterior.log_prob_and_fisher(prop_x, prop_gradient, prop_fisher, fisher_gradient); + + MR::Math::Cholesky::decomp(prop_fisher_chol = prop_fisher); + + // NB: Since we want to find maxima not minima the gradient of x is inverted when compared from the classical algorithm. + momentum.half_update_momentum(prop_gradient, prop_fisher_chol, fisher_gradient, time_direction); + + if (save_iterations) { + + prop_x.set_extend_prop("log_px",str(prop_px)); + prop_x.set_extend_prop("act_d_log_px",str(prop_px - prev_prop_px)); + prop_x.set_extend_prop("grad_norm2",str(prop_gradient.norm2())); + prop_x.set_extend_prop("log_kinetic_energy",str(momentum.log_kinetic_energy(prop_fisher_chol))); + + std::map prop_component_values = prior.get_component_values(prop_x); + + for (std::map::iterator comp_it = prop_component_values.begin(); comp_it != prop_component_values.end(); ++comp_it) + prop_x.set_extend_prop(comp_it->first, comp_it->second); + + iterations.append(prop_x); + gradient_iterations.append(prop_gradient); + + } + + + ++iteration_count; + + } + + // Decide whether to accept 'step' (or rather chain of leapfrog steps). + double prop_log_kinetic_energy = momentum.log_kinetic_energy(prop_fisher_chol); + + // NB: Since we want to find maxima not minima the gradient of x is inverted when compared from the classical algorithm. + double prop_H = prop_log_kinetic_energy - prop_px; + + // NB: Since we want to find maxima not minima the order of this subtraction is reversed. + double dH = prop_H - H; + + double elapsed_time = (double)(clock() - sample_starttime) / (double)CLOCKS_PER_SEC; + + // Print out sample properties. + if (!suppress_print) { + std::cout << std::endl; + std::cout << "Sample: " << sample_i << ", "; + std::cout << "log[px]: " << px << ", "; + std::cout << "Start kinetic energy: " << log_kinetic_energy << ", "; + std::cout << "H: " << H << ", "; + std::cout << "Proposed log[px]: " << prop_px << ", "; + std::cout << "Final kinetic energy: " << prop_log_kinetic_energy << ", "; + std::cout << "Proposed H: " << prop_H << ", "; + std::cout << "Elapsed time: " << elapsed_time; + + } + + + // If Hamiltonian decreases (i.e. there is less energy in the system) or the increase is below log[Y] (where Y is a uniformly distributed random variable between 0 and 1), accept the proposer. + if ((dH < 0) || (log(gsl_ran_flat(rand_gen, 0,1)) < -dH)) { + x = prop_x; + gradient = prop_gradient; + fisher = prop_fisher; + fisher_chol = prop_fisher_chol; + px = prop_px; + + if (!suppress_print) + std::cout << ", Accepted!." << std::endl; + + } else if (!suppress_print) + std::cout << ", Not accepted." << std::endl; + + // Record sample stats. + + x.set_extend_prop(LOG_PROB_PROP, str(px)); + x.set_extend_prop(H_PROP, str(H)); + x.set_extend_prop(PROPOSED_H_PROP, str(prop_H)); + + + std::map component_values = prior.get_component_values(x); + + for (std::map::iterator comp_it = component_values.begin(); comp_it != component_values.end(); ++comp_it) + x.set_extend_prop(comp_it->first, comp_it->second); + + + } catch (const NanInfException& e) { + + std::cout << std::endl; + std::cout << "Sample: " << sample_i << " - "; + std::cout << "Not accepted due to NaN or Inf values found" << std::endl; + + } + + // Save sample. + samples.append(x); + + + progress_bar++; + + } + + + State_T out_x = x; + + return out_x; + + } + + + + } + +} + +#endif diff --git a/src/bts/mcmc/state.cpp b/src/bts/mcmc/state.cpp new file mode 100644 index 0000000..7263e31 --- /dev/null +++ b/src/bts/mcmc/state.cpp @@ -0,0 +1,35 @@ +/* + Copyright 2008 Brain Research Institute, Melbourne, Australia + + Written by Thomas G Close, Aug 2, 2010. + + This file is part of MRtrix. + + MRtrix is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + MRtrix is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with MRtrix. If not, see . + +*/ + +#include "bts/mcmc/state.h" + +namespace BTS { + + namespace MCMC { + + + const std::string State::FILE_EXTENSION = "sta"; + + + } + +} diff --git a/src/bts/mcmc/state.h b/src/bts/mcmc/state.h new file mode 100644 index 0000000..ab08c05 --- /dev/null +++ b/src/bts/mcmc/state.h @@ -0,0 +1,175 @@ +/* + Copyright 2008 Brain Research Institute, Melbourne, Australia + + Written by Thomas G Close, Aug 2, 2010. + + This file is part of MRtrix. + + MRtrix is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + MRtrix is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with MRtrix. If not, see . + +*/ + +#include "bts/mcmc/proposal/momentum.h" +#include "bts/mcmc/proposal/walker.h" + + +#ifndef __bts_mcmc_state_h__ +#define __bts_mcmc_state_h__ + +#include + +namespace BTS { + + namespace MCMC { + + class State; + + } +} + + +#include "math/vector.h" +#include "bts/utilities/reader.h" +#include "bts/utilities/writer.h" + + +namespace BTS { + + namespace MCMC { + + class State : public MR::Math::Vector { + + //Public static variables, nested classes and typedefs + public: + + typedef Proposal::Walker Walker; + typedef Proposal::Momentum Momentum; + typedef std::map Properties; + typedef Utilities::Reader Reader; + typedef Utilities::Writer Writer; + + template class Tensor_tpl; + class Tensor; + + public: + + Properties properties; + + + public: + + static const std::string FILE_EXTENSION; + + public: + + + //Do nothing, no characteristic properties in MCMC::State class. + static std::vector& append_characteristic_property_keys(std::vector& header) { return header; } + + //Public member functions + public: + + //! construct empty state + State () throw () {} + + //! copy constructor + State (const State& state) + : MR::Math::Vector (state), properties(state.properties) {} + + State(const MR::Math::Vector& vector) + : MR::Math::Vector(vector) {} + + //! construct state of size \a nelements + /** \note the elements of the state are left uninitialised. */ + State (size_t nelements) + : MR::Math::Vector(nelements) {} + + //! construct from existing data array + State (double* state_data, size_t nelements, size_t skip = 1) throw () + : MR::Math::Vector(state_data,nelements,skip) {} + + //! construct a state by reading from the text file \a filename + State (const std::string& file) + : MR::Math::Vector(file) {} + + + State& operator= (const State& state) + { MR::Math::Vector::operator=(state); properties = state.properties; return *this; } + + + //! destructor + ~State () {} + + + + double norm2() const + { return MR::Math::norm2(*this); } + + double norm() const + { return MR::Math::norm(*this); } + + double inner_product(const State& state) const + { return MR::Math::dot(*this, state); } + + State& zero() + { for (size_t i = 0; i < size(); i++) operator[](i) = 0.0; return *this;} + + State& invalidate() + { for (size_t i = 0; i < size(); i++) operator[](i) = NAN; return *this; } + + State operator- () { operator*=(-1.0); return *this; } + + + void set_extend_prop(const std::string& prop, const std::string& value) { + + properties[prop] = value; + + } + + + + + State operator+(const State& state) const { State answer = *this; answer += state; return answer; } + State operator-(const State& state) const { State answer = *this; answer -= state; return answer; } + + State operator* (const State& state) const { State answer = *this; answer *= state; return answer; } + State operator/ (const State& state) const { State answer = *this; answer /= state; return answer; } + + State operator* (double scalar) const { State answer = *this; answer *= scalar; return answer; } + State operator/ (double scalar) const { State answer = *this; answer /= scalar; return answer; } + + + MR::Math::Vector vector() const + { return *this; } + + void from_vector(const MR::Math::Vector& vec) + { MR::Math::Vector::operator=(vec); } + + size_t vsize() const + { return size(); } + + + void calc_characteristic_properties() {} + + }; + + + inline State operator*(double scalar, const State& state) + { return state * scalar; } + + } + +} + +#endif /* __bts_mcmc_state_h__ */ diff --git a/src/bts/mcmc/state/tensor.cpp b/src/bts/mcmc/state/tensor.cpp new file mode 100644 index 0000000..12e070f --- /dev/null +++ b/src/bts/mcmc/state/tensor.cpp @@ -0,0 +1,58 @@ +/* + Copyright 2008 Brain Research Institute, Melbourne, Australia + + Written by Thomas G Close, 11/08/2010. + + This file is part of MRtrix. + + MRtrix is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + MRtrix is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with MRtrix. If not, see . + +*/ + +#include "bts/mcmc/state/tensor.h" + +namespace BTS { + + namespace MCMC { + + + State::Tensor::Tensor(const State& template_value) + : MR::Math::Matrix(template_value.size(),template_value.size()) { + + for (size_t row_i = 0; row_i < template_value.size(); ++row_i) + this->row(row_i) = template_value; + + } + + State::Tensor& State::Tensor::invalidate() { + + MR::Math::Matrix::operator=(NAN); + + return *this; + + } + + State::Tensor& State::Tensor::zero() { + + MR::Math::Matrix::operator=(0.0); + + return *this; + + } + + + + } + +} diff --git a/src/bts/mcmc/state/tensor.h b/src/bts/mcmc/state/tensor.h new file mode 100644 index 0000000..0ae9359 --- /dev/null +++ b/src/bts/mcmc/state/tensor.h @@ -0,0 +1,77 @@ +/* + Copyright 2008 Brain Research Institute, Melbourne, Australia + + Written by Thomas G Close, 11/08/2010. + + This file is part of MRtrix. + + MRtrix is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + MRtrix is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with MRtrix. If not, see . + +*/ + +#ifndef __bts_mcmc_state_tensor_h__ +#define __bts_mcmc_state_tensor_h__ + +#include "bts/mcmc/state.h" +#include "math/matrix.h" + +namespace BTS { + + namespace MCMC { + + class State::Tensor : public MR::Math::Matrix { + + //Public static variables, nested classes and typedefs + public: + + class Writer; + + //Public member functions + public: + + Tensor () {} + + Tensor (size_t size) + : MR::Math::Matrix(size,size) {} + + Tensor (const State& value); + + Tensor (const MR::Math::Matrix& tensor) + : MR::Math::Matrix(tensor) {} + + ~Tensor() {} + + Tensor& operator=(const MR::Math::Matrix& tensor) + { MR::Math::Matrix::operator=(tensor); return *this; } + + size_t length() const + { return MR::Math::Matrix::rows(); } + + Tensor& invalidate(); + + Tensor& zero(); + + MR::Math::Matrix matrix() const + { return *this; } + + void from_matrix(const MR::Math::Matrix& matrix) + { MR::Math::Matrix::operator=(matrix); } + + }; + + } + +} + +#endif /* __bts_mcmc_state_tensor_h__ */ diff --git a/src/bts/mcmc/state/tensor/writer.cpp b/src/bts/mcmc/state/tensor/writer.cpp new file mode 100644 index 0000000..fcff0f4 --- /dev/null +++ b/src/bts/mcmc/state/tensor/writer.cpp @@ -0,0 +1,59 @@ +/* + Copyright 2008 Brain Research Institute, Melbourne, Australia + + Written by Thomas G Close, 11/08/2010. + + This file is part of MRtrix. + + MRtrix is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + MRtrix is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with MRtrix. If not, see . + +*/ + +#include "bts/mcmc/state/tensor/writer.h" + +namespace BTS { + + namespace MCMC { + + const std::string State::Tensor::Writer::HEADER_PREAMBLE = "%%% Keys %%%:"; + + + void State::Tensor::Writer::create (const std::string& location, size_t length) { + + this->length = length; + + out.open(location.c_str()); + + out << HEADER_PREAMBLE; + + for (size_t i = 0; i < length; i++) + out << "elem" << i << " "; + + out << std::endl; + + } + + + void State::Tensor::Writer::append(const MCMC::State::Tensor& tensor) { + + if (length != tensor.length()) + throw Exception ("Length of tensor matrix (" + str(tensor.length()) + ") did not match size of template value vector (" + str(length) + ")."); + + out << tensor; + + } + + } + +} diff --git a/src/bts/mcmc/state/tensor/writer.h b/src/bts/mcmc/state/tensor/writer.h new file mode 100644 index 0000000..60b0104 --- /dev/null +++ b/src/bts/mcmc/state/tensor/writer.h @@ -0,0 +1,78 @@ +/* + Copyright 2008 Brain Research Institute, Melbourne, Australia + + Written by Thomas G Close, 11/08/2010. + + This file is part of MRtrix. + + MRtrix is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + MRtrix is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with MRtrix. If not, see . + +*/ + +#ifndef __bts_mcmc_state_tensor_writer_h__ +#define __bts_mcmc_state_tensor_writer_h__ + +#include "bts/mcmc/state.h" +#include "bts/mcmc/state/tensor.h" + +namespace BTS { + + namespace MCMC { + + class State::Tensor::Writer { + + + //Public static variables, nested classes and typedefs + public: + + static const std::string HEADER_PREAMBLE; + + //Protected member variables + protected: + + std::vector header; + size_t length; + std::ofstream out; + + //Public member functions + public: + + Writer() {} + + Writer(const std::string& location, size_t size) + { create(location, size); } + + Writer(const std::string& location, const MCMC::State& template_value) + { create(location, template_value); } + + ~Writer() { close(); } + + void close() + { out.close(); } + + void create (const std::string& location, size_t size); + + void create (const std::string& location, const MCMC::State& template_value) + { create (location, template_value.size()); } + + void append(const MCMC::State::Tensor& tensor); + + + }; + + } + +} + +#endif /* __bts_mcmc_state_tensor_writer_h__ */ diff --git a/src/bts/prob/inline_functions.h b/src/bts/prob/inline_functions.h new file mode 100644 index 0000000..811f0be --- /dev/null +++ b/src/bts/prob/inline_functions.h @@ -0,0 +1,40 @@ +/* + Copyright 2008 Brain Research Institute, Melbourne, Australia + + Written by Thomas G Close, 16/07/2010. + + This file is part of MRtrix. + + MRtrix is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + MRtrix is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with MRtrix. If not, see . + +*/ + +#ifndef __bts_prob_inline_functions_h__ +#define __bts_prob_inline_functions_h__ + + +#ifdef __bts_prob_likelihood_imagediff_h__ + +#include "bts/prob/likelihood.cpp.h" + +#endif + + +#ifdef __bts_prob_likelihood_imagediff_gaussian_h__ + +//#include "bts/prob/likelihood/gaussian.cpp.h" + +#endif + +#endif /* __bts_prob_inline_functions_h__ */ diff --git a/src/bts/prob/likelihood.cpp b/src/bts/prob/likelihood.cpp new file mode 100644 index 0000000..c215731 --- /dev/null +++ b/src/bts/prob/likelihood.cpp @@ -0,0 +1,220 @@ +/* + Copyright 2010 Brain Research Institute/National ICT Australia (NICTA), Melbourne, Australia + + Written by Thomas G Close, 5/05/09. + + This file is part of Bayesian Tractlet Sampling (BTS). + + BTS is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + BTS is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with BTS. If not, see . + +*/ + +#include "bts/prob/likelihood.h" +#include "bts/image/observed/buffer.h" +#include "bts/image/expected/trilinear/buffer.h" + +#include "bts/prob/likelihood/gaussian.h" +#include "bts/prob/likelihood/one_sided_gaussian.h" +#include "bts/prob/likelihood/rician.h" + +#include "bts/prob/likelihood/gaussian.cpp.h" + +#include "bts/prob/inline_functions.h" +#include "bts/image/inline_functions.h" +#include "bts/prob/likelihood.cpp.h" +#include "bts/image/buffer.cpp.h" +#include "bts/diffusion/response.h" + +namespace BTS { + + namespace Prob { + + const char* Likelihood::TYPE_DEFAULT = "gaussian"; + const double Likelihood::SNR_DEFAULT = 20.0; + const char* Likelihood::B0_INCLUDE_DEFAULT = "none"; //Also "half" or "full" + const double Likelihood::OUTSIDE_SCALE_DEFAULT = 1.0; + const char* Likelihood::REF_B0_DEFAULT = "max"; // Also could be "average" + + + const Image::Observed::Buffer Likelihood::dummy_observed_buffer; + const Image::Expected::Trilinear::Buffer Likelihood::dummy_expected_buffer; + + + Likelihood* Likelihood::factory(const std::string& type, + const Image::Observed::Buffer& obs_image, + Image::Expected::Buffer* exp_image, + double assumed_snr, + const std::string& b0_include, + double outside_scale, + const std::string& ref_b0, + double ref_signal) { + + //FIXME: Not sure why this happens, but before exp_image is cloned it must be cleared to produce consistent results. + //Investigate and resolve. + exp_image->clear(); + + Likelihood* likelihood; + + if (type == "gaussian") + + likelihood = new Gaussian (obs_image, exp_image, assumed_snr, b0_include, outside_scale, ref_b0, ref_signal); + + else if (type == "one_sided_gaussian") + + likelihood = new OneSidedGaussian (obs_image, exp_image, assumed_snr, b0_include, outside_scale, ref_b0, ref_signal); + + else if (type == "rician") { + + const Diffusion::Model& diffusion_model = exp_image->get_diffusion_model(); + + if (!diffusion_model.includes_isotropic()) + throw Exception ("Only diffusion models that include isotropic components can be used with Rician noise model."); + + if (!exp_image->bounds_are_enforced()) + throw Exception ("Enforce bounds must be set with Rician noise model to avoid -inf values."); + + likelihood = new Rician (obs_image, exp_image, assumed_snr, b0_include, outside_scale, ref_b0, ref_signal); + + } else + throw Exception ("Unrecognised likelihood type '" + type + "' passed to option '-like_type'."); + + + return likelihood; + + + } + + + + + Likelihood::Likelihood ( + const Image::Observed::Buffer& observed_image, + Image::Expected::Buffer* const expected_image, + double assumed_snr, + const std::string& b0_include, + double outside_scale, + const std::string& ref_b0, + double ref_signal + ) : + obs_image(observed_image), + exp_image(expected_image->clone()), + b0_include(b0_include) + { + + if (!expected_image->dims_match(obs_image)) + throw Exception ("Expected image dimensions (" + str(expected_image->dims()) + ") do not match and observed image (" + str(obs_image.dims()) + ")."); + + set_assumed_snr(assumed_snr, ref_b0, ref_signal); + + this->exp_image->zero(); + + } + + Likelihood::Likelihood (const Likelihood& l) + : sigma2(l.sigma2), + obs_image(l.obs_image), + exp_image(l.exp_image->clone()), + b0_include(l.b0_include) {} + + + Likelihood& Likelihood::operator= (const Likelihood& l) { + + delete this->exp_image; + + sigma2 = l.sigma2; + obs_image = l.obs_image; + exp_image = l.exp_image->clone(); + b0_include = l.b0_include; + + return *this; + + } + + + + void Likelihood::set_assumed_snr(double assumed_snr, const std::string& ref_b0, double reference_signal) { + + double ref_signal; + + if (!isnan(reference_signal)) + ref_signal = reference_signal; + else if (obs_image.properties().count("noise_ref_signal")) + ref_signal = to(obs_image.properties()["noise_ref_signal"]); + else if (ref_b0 == "average") + ref_signal = obs_image.average_b0(); + else if (ref_b0 == "max") + ref_signal = obs_image.max_b0(); + else + throw Exception ("Unrecognised value for '-like_ref_b0' ('" + ref_b0 + "'), can be either 'average', or 'max'."); + + if (!ref_signal) + throw Exception ("The " + ref_b0 + " b0 of observed image is 0."); + + sigma2 = MR::Math::pow2(ref_signal / assumed_snr); + + } + + + void Likelihood::set_enforce_bounds(bool flag) { + + if (flag) + exp_image->clear_and_enforce_bounds(); + else + exp_image->relax_bounds(); + + } + + + //TODO: Collapse the workings of the different log_prob_tpl's into common subfunctions. + double Likelihood::log_prob(Image::Expected::Buffer& image) { + + double lprob = 0.0; + + std::set coords = image.non_empty(); + + for (size_t x = 0; x < image.dim(X); ++x) + for (size_t y = 0; y < image.dim(Y); ++y) + for (size_t z = 0; z < image.dim(Z); ++z) + coords.insert(Image::Index(x,y,z)); + + for (std::set::iterator coord_it = coords.begin(); coord_it != coords.end(); ++coord_it) { + + const Image::Expected::Voxel& exp_voxel = image.operator()(*coord_it); + + for (size_t encode_i = 0; encode_i < image.num_encodings(); encode_i++) { + + double observed; + + if (obs_image.in_bounds(*coord_it)) + observed = obs_image(*coord_it)[encode_i]; + else + observed = 0.0; + + if (image.encoding(encode_i).b_value()) + lprob += log_prob(exp_voxel[encode_i], observed); + else + lprob += b0_log_prob(exp_voxel[encode_i], observed); + + } + + } + + return lprob; + + + } + + } + +} diff --git a/src/bts/prob/likelihood.cpp.h b/src/bts/prob/likelihood.cpp.h new file mode 100644 index 0000000..dd04dd1 --- /dev/null +++ b/src/bts/prob/likelihood.cpp.h @@ -0,0 +1,268 @@ +/* + Copyright 2008 Brain Research Institute, Melbourne, Australia + + Written by Thomas G Close, 30/06/2010. + + This file is part of MRtrix. + + MRtrix is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + MRtrix is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with MRtrix. If not, see . + +*/ + +#ifndef __bts_prob_likelihood_imagediff_cpp_h__ +#define __bts_prob_likelihood_imagediff_cpp_h__ + +#include "bts/math/common.h" + +#include "bts/fibre/strand/set/tensor.h" +#include "bts/fibre/tractlet/set/tensor.h" +#include "bts/image/expected/quartic/buffer.h" + +namespace BTS { + + namespace Prob { + + + //TODO: Collapse the workings of the different log_prob_tpl's into common subfunctions. + template double Likelihood::log_prob_tpl(const typename T::Set& fibres) { + + exp_image->expected_image(fibres); + + return log_prob(*exp_image); + + } + + template double Likelihood::log_prob_tpl(const typename T::Set& fibres, typename T::Set& gradient) { + + typename Image::Reference::Buffer::Set& section_references = exp_image->expected_image_with_references(fibres); + + exp_image->precalculate_section_weighting_gradients(T()); + + double lprob = 0.0; + + gradient = fibres; + gradient.zero(); + + std::set coords = exp_image->non_empty_or_inbounds(); + + for (std::set::iterator coord_it = coords.begin(); coord_it != coords.end(); ++coord_it) { + + Image::Expected::Voxel& voxel = exp_image->operator()(*coord_it); + + std::vector d_lprob(exp_image->num_encodings()); + + for (size_t encode_i = 0; encode_i < exp_image->num_encodings(); encode_i++) { + + if (b0_include == "full" || exp_image->encoding(encode_i).b_value()) { + + double observed; + + if (obs_image.in_bounds(*coord_it)) + observed = obs_image(*coord_it)[encode_i]; + else + observed = 0; + + lprob += log_prob(exp_image->operator()(*coord_it)[encode_i], observed, d_lprob[encode_i]); + + } + + } + + for (size_t fibre_i = 0; fibre_i < fibres.size(); fibre_i++) { + + if (!section_references[fibre_i].is_empty(*coord_it)) { + + std::vector& voxel_section_references = section_references[fibre_i](*coord_it); + + for (typename std::vector::iterator section_it = voxel_section_references.begin(); + section_it != voxel_section_references.end(); ++section_it) { + + typename T::Section& section = **section_it; + typename T::Section section_gradient; + + voxel.precalculate_interpolation_gradient(section); + + for (size_t encode_i = 0; encode_i < exp_image->num_encodings(); encode_i++) { + + if (b0_include == "full" || exp_image->encoding(encode_i).b_value()) { + + voxel.direction(encode_i).signal(section, section_gradient); + + section_gradient.unnormalize_gradient(exp_image->vox_lengths()); + + + //Pre-multiply the section gradient with the lprob derivative, so it can be added directly to the + //fibre gradient. + section_gradient *= d_lprob[encode_i]; + + gradient[fibre_i].add_section_gradient(fibres[fibre_i], section, section_gradient); + + + } + + } + + } + + } + + } + + } + + return lprob; + + + } + + + template double Likelihood::log_prob_tpl(const typename T::Set& fibres, typename T::Set& gradient, typename T::Set::Tensor& hessian) { + + typename Image::Container::Buffer::Set& buffer_gradients = get_recycled_gradients(); + typename Image::Container::Buffer::Set& buffer_hessians = get_recycled_hessians(); + + exp_image->expected_image(fibres, buffer_gradients, buffer_hessians); + + double lprob = 0.0; + +// size_t fibres_vector_size = fibres.vsize(); +// size_t fibres_vector_size = fibres.vsize() - 1; + + //TODO: Add zero(T::Set& template_value) overload + gradient = fibres; + hessian = typename T::Set::Tensor(fibres); + + gradient.zero(); + hessian.zero(); + +// bool has_base_intensity = fibres.has_intrinsic_property("base_intensity"); + + std::vector fibre_block_start; + std::vector fibre_block_end; + +// size_t block_start = has_base_intensity; + size_t block_start = 0; + + for (size_t fibre_i = 0; fibre_i < fibres.size(); fibre_i++) { + fibre_block_start.push_back(block_start); + fibre_block_end.push_back(block_start += fibres[fibre_i].vsize()); + } + + + std::set coords = exp_image->non_empty(); + + for (size_t x = 0; x < exp_image->dim(X); ++x) + for (size_t y = 0; y < exp_image->dim(Y); ++y) + for (size_t z = 0; z < exp_image->dim(Z); ++z) + coords.insert(Image::Index(x,y,z)); + + + for (std::set::iterator coord_it = coords.begin(); coord_it != coords.end(); ++coord_it) { + + for (size_t encode_i = 0; encode_i < exp_image->num_encodings(); encode_i++) { + + if (b0_include == "full" || exp_image->encoding(encode_i).b_value()) { + + + double observed; + + if (obs_image.in_bounds(*coord_it)) + observed = obs_image(*coord_it)[encode_i]; + else + observed = 0; + + double d_lprob, d2_lprob2; + + lprob += log_prob(exp_image->operator()(*coord_it)[encode_i], observed, d_lprob, d2_lprob2); + + typename T::Set direction_gradient(fibres); + direction_gradient.zero(); + + typename T::Set::Tensor hessian_fibre_blocks(fibres); + hessian_fibre_blocks = 0.0; + + for (size_t fibre_i = 0; fibre_i < fibres.size(); fibre_i++) { + + if (!buffer_gradients[fibre_i].is_empty(*coord_it)) { + + direction_gradient[fibre_i] = buffer_gradients[fibre_i](*coord_it)[encode_i]; + + MR::Math::Matrix hessian_fibre_block_view = hessian_fibre_blocks.sub(fibre_block_start[fibre_i], fibre_block_end[fibre_i], fibre_block_start[fibre_i], fibre_block_end[fibre_i]); + + MR::Math::Matrix hessian_fibre_block = buffer_hessians[fibre_i](*coord_it)[encode_i]; + + hessian_fibre_block *= d_lprob; + + hessian_fibre_block_view = hessian_fibre_block; + + } else + direction_gradient[fibre_i] = T(fibres[fibre_i].size(), 0.0); + + } + + + MR::Math::Matrix hessian_outer_prod = Math::outer(direction_gradient, direction_gradient); + + hessian_outer_prod *= d2_lprob2; + + hessian += hessian_fibre_blocks; + hessian += hessian_outer_prod; + + gradient += direction_gradient * d_lprob; + + } + + } + + } + + return lprob; + + + } + + + //! Used to get the right used gradients for the templated type. + template <> inline Image::Container::Buffer::Set& Likelihood::get_recycled_gradients() { + + return recycled_strand_gradients; + + } + + //! Used to get the right used gradients for the templated type. + template <> inline Image::Container::Buffer::Set& Likelihood::get_recycled_gradients() { + + return recycled_tractlet_gradients; + + } + + //! Used to get the right used hessians for the templated type. + template <> inline Image::Container::Buffer::Set& Likelihood::get_recycled_hessians() { + + return recycled_strand_hessians; + + } + + //! Used to get the right used hessians for the templated type. + template <> inline Image::Container::Buffer::Set& Likelihood::get_recycled_hessians() { + + return recycled_tractlet_hessians; + + } + + } + +} + +#endif /* __bts_prob_likelihood_imagediff_cpp_h__ */ diff --git a/src/bts/prob/likelihood.h b/src/bts/prob/likelihood.h new file mode 100644 index 0000000..a866f54 --- /dev/null +++ b/src/bts/prob/likelihood.h @@ -0,0 +1,294 @@ +/* + Copyright 2010 Brain Research Institute/National ICT Australia (NICTA), Melbourne, Australia + + Written by Thomas G Close, 5/05/09. + + This file is part of Bayesian Tractlet Sampling (BTS). + + BTS is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + BTS is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with BTS. If not, see . + +*/ + + +#ifndef __bts_prob_likelihood_h__ +#define __bts_prob_likelihood_h__ + +namespace BTS { + + namespace Prob { + + class Likelihood; + + } + +} + +#define LIKELIHOOD_PARAMETERS \ + Option ("like_snr", "The assumed Signal-to-noise ratio (SNR) in the likelihood model.") \ + + Argument ("like_snr", "").type_float(0, Prob::Likelihood::SNR_DEFAULT,LARGE_FLOAT), \ +\ + Option ("like_type", "The 'Likelihood' object used to calculate the likelihood probability.") \ + + Argument ("like_type", "").type_text(Prob::Likelihood::TYPE_DEFAULT), \ +\ + Option ("like_b0_include", "Include b values in comparison between observed and expected images.") \ + + Argument ("like_b0_include", "").type_text(Prob::Likelihood::B0_INCLUDE_DEFAULT), \ +\ + Option ("like_outside_scale", "The scale of the outside signal contribution to the probability.") \ + + Argument ("like_outside_scale", "").type_float(0.0, Prob::Likelihood::OUTSIDE_SCALE_DEFAULT,LARGE_FLOAT), \ +\ + Option ("like_ref_b0", "Speicify whether to use the 'max' or 'average' b0 signal in the observed image for the calculation of the noise variance from the SNR.") \ + + Argument ("like_ref_b0", "").type_text(Prob::Likelihood::REF_B0_DEFAULT), \ +\ + Option ("like_ref_signal", "Manually speicify b0 signal for the calculation of the noise variance from the SNR.") \ + + Argument ("like_ref_signal", "").type_float(SMALL_FLOAT, NAN, LARGE_FLOAT) \ +\ +//Loads the 'prior' parameters into variables +#define SET_LIKELIHOOD_PARAMETERS \ + double like_snr = Prob::Likelihood::SNR_DEFAULT; \ + std::string like_type = Prob::Likelihood::TYPE_DEFAULT; \ + std::string like_b0_include = Prob::Likelihood::B0_INCLUDE_DEFAULT; \ + double like_outside_scale = Prob::Likelihood::OUTSIDE_SCALE_DEFAULT; \ + std::string like_ref_b0 = Prob::Likelihood::REF_B0_DEFAULT; \ + double like_ref_signal = NAN; \ +\ + Options like_opt = get_options("like_snr"); \ + if (like_opt.size()) \ + like_snr = like_opt[0][0]; \ +\ + like_opt = get_options("like_type"); \ + if (like_opt.size()) \ + like_type = like_opt[0][0].c_str(); \ +\ + like_opt = get_options("like_b0_include"); \ + if (like_opt.size()) \ + like_b0_include = like_opt[0][0].c_str(); \ +\ + like_opt = get_options("like_outside_scale"); \ + if (like_opt.size()) \ + like_outside_scale = like_opt[0][0]; \ +\ + like_opt = get_options("like_ref_b0"); \ + if (like_opt.size()) \ + like_ref_b0 = like_opt[0][0].c_str(); \ +\ + like_opt = get_options("like_ref_signal"); \ + if (like_opt.size()) \ + like_ref_signal = like_opt[0][0]; \ + + +//Adds the 'prior' parameters to the properties to be saved with the data. +#define ADD_LIKELIHOOD_PROPERTIES(properties) \ + properties["like_type"] = like_type; \ + if (like_type != "uniform") {\ + properties["like_snr"] = str(like_snr); \ + properties["like_b0_include"] = like_b0_include; \ + properties["like_outside_scale"] = str(like_outside_scale); \ + if (!isnan(like_ref_signal)) \ + properties["like_ref_signal"] = str(like_ref_signal); \ + else \ + properties["like_ref_b0"] = like_ref_b0; \ + } \ + +#include "bts/image/expected/buffer.h" +#include "bts/image/expected/trilinear/buffer.h" +#include "bts/image/observed/buffer.h" + +#include "bts/prob/prob.h" + +#include "bts/fibre/strand/set.h" +#include "bts/fibre/tractlet/set.h" +#include "bts/mcmc/state.h" + + + +namespace BTS { + + namespace Prob { + + class Likelihood { + + //Public nested classes. + public: + + class Gaussian; + class OneSidedGaussian; + class Rician; + + //Public static constants + public: + + const static char* TYPE_DEFAULT; + const static double SNR_DEFAULT; + const static char* B0_INCLUDE_DEFAULT; + const static double OUTSIDE_SCALE_DEFAULT; + const static char* REF_B0_DEFAULT; + + + const static Image::Observed::Buffer dummy_observed_buffer; + const static Image::Expected::Trilinear::Buffer dummy_expected_buffer; + + public: + + static Likelihood* factory(const std::string& type, + const Image::Observed::Buffer& obs_image, + Image::Expected::Buffer* exp_image, + double assumed_snr, + const std::string& b0_include, + double outside_scale, + const std::string& ref_b0, + double ref_signal); + + + protected: + + double sigma2; + + Image::Observed::Buffer obs_image; + Image::Expected::Buffer* exp_image; + + Image::Container::Buffer::Set recycled_strand_gradients; + Image::Container::Buffer::Set recycled_tractlet_gradients; + Image::Container::Buffer::Set recycled_strand_hessians; + Image::Container::Buffer::Set recycled_tractlet_hessians; + + size_t difference_mode; + + std::string b0_include; + + public: + + Likelihood(const Image::Observed::Buffer& observed_image, + Image::Expected::Buffer* const expected_image, + double assumed_snr, + const std::string& b0_include, + double outside_scale, + const std::string& ref_b0, + double ref_signal); + + + Likelihood(const Likelihood& l); + + + virtual ~Likelihood() + { delete this->exp_image; } + + + Likelihood& operator= (const Likelihood& l); + + virtual double log_prob(Image::Expected::Buffer& image); + + double log_prob(const Fibre::Strand& strand) + { Fibre::Strand::Set set; set.push_back(strand); return log_prob(set); } + + double log_prob(const Fibre::Tractlet& tractlet) + { Fibre::Tractlet::Set set; set.push_back(tractlet); return log_prob(set); } + + double log_prob(const Fibre::Strand& strand, Fibre::Strand& gradient) + { Fibre::Strand::Set set, set_gradient; set.push_back(strand); set_gradient = set; double lprob = log_prob(set, set_gradient); gradient = set_gradient[0]; return lprob; } + + double log_prob(const Fibre::Tractlet& tractlet, Fibre::Tractlet& gradient) + { Fibre::Tractlet::Set set, set_gradient; set.push_back(tractlet); set_gradient = set; double lprob = log_prob(set, set_gradient); gradient = set_gradient[0]; return lprob; } + + virtual double log_prob(const Fibre::Strand::Set& strands) + { return log_prob_tpl(strands); } + + virtual double log_prob(const Fibre::Tractlet::Set& tractlets) + { return log_prob_tpl(tractlets); } + + virtual double log_prob(const Fibre::Strand::Set& strands, Fibre::Strand::Set& gradient) + { return log_prob_tpl(strands, gradient); } + + + virtual double log_prob(const Fibre::Tractlet::Set& tractlets, Fibre::Tractlet::Set& gradient) + { return log_prob_tpl(tractlets, gradient); } + + + virtual double log_prob(const Fibre::Strand::Set& strands, Fibre::Strand::Set& gradient, Fibre::Strand::Set::Tensor& hessian) + { return log_prob_tpl(strands, gradient, hessian); } + + + virtual double log_prob(const Fibre::Tractlet::Set& tractlets, Fibre::Tractlet::Set& gradient, Fibre::Tractlet::Set::Tensor& hessian) + { return log_prob_tpl(tractlets, gradient, hessian); } + + + virtual double log_prob_and_fisher( const Fibre::Strand::Set& strands, + Fibre::Strand::Set& gradient, + Fibre::Strand::Set::Tensor& fisher_info) + { throw Exception ("should be implemented in derrived class."); } + + virtual double log_prob_and_fisher( const Fibre::Tractlet::Set& strands, + Fibre::Tractlet::Set& gradient, + Fibre::Tractlet::Set::Tensor& fisher_info) + { throw Exception ("should be implemented in derrived class."); } + + + template double log_prob_tpl(const typename T::Set& fibres); + + + template double log_prob_tpl(const typename T::Set& fibres, typename T::Set& gradient); + + + template double log_prob_tpl(const typename T::Set& fibres, typename T::Set& gradient, typename T::Set::Tensor& hessian); + + + virtual double log_prob(double expected, double observed) = 0; + + + virtual double b0_log_prob(double expected, double observed) = 0; + + + virtual double log_prob(double expected, double observed, double& d_lprob) = 0; + + + virtual double log_prob(double expected, double observed, double& d_lprob, double& d2_lprob2) = 0; + + + void save_expected_image(const std::string& location) //Used for debugging + { exp_image->save(location); } + + + const Image::Expected::Buffer& get_expected_image() //Used for debugging + { return *exp_image; } + + + const Image::Observed::Buffer& get_observed_image() //Used for debugging + { return obs_image; } + + + void set_enforce_bounds(bool flag); + + + void set_assumed_snr(double snr, const std::string& ref_b0, double ref_signal); + + protected: + + //! Used to get the right used gradients for the templated type. + template typename Image::Container::Buffer::Set& get_recycled_gradients(); + + //! Used to get the right used hessians for the templated type. + template typename Image::Container::Buffer::Set& get_recycled_hessians(); + + Likelihood() {} + + friend std::ostream& operator<< (std::ostream& stream, const Likelihood& likelihood); + + }; + + + } + +} + + +#endif diff --git a/src/bts/prob/likelihood/gaussian.cpp.h b/src/bts/prob/likelihood/gaussian.cpp.h new file mode 100644 index 0000000..11fd0f6 --- /dev/null +++ b/src/bts/prob/likelihood/gaussian.cpp.h @@ -0,0 +1,436 @@ +/* + Copyright 2008 Brain Research Institute, Melbourne, Australia + + Written by Thomas G Close, 23/09/2010. + + This file is part of MRtrix. + + MRtrix is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + MRtrix is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with MRtrix. If not, see . + +*/ + +#ifndef ___bts_prob_likelihood_imagediff_gaussian_cpp_h__ +#define ___bts_prob_likelihood_imagediff_gaussian_cpp_h__ + +namespace BTS { + + namespace Prob { + + + template double Likelihood::Gaussian::log_prob_and_fisher_tpl(const typename T::Set& fibres, typename T::Set& gradient, typename T::Set::Tensor& fisher_info, std::vector& fisher_info_gradients) { + + size_t fibres_vector_size = fibres.vsize(); + + typename Image::Reference::Buffer::Set& section_references = exp_image->expected_image_with_references(fibres); + + exp_image->precalculate_section_weighting_gradients_and_hessians(T()); + // + double lprob = 0.0; + + gradient = fibres; + fisher_info = typename T::Set::Tensor(fibres); + + gradient.zero(); + fisher_info.zero(); + + fisher_info_gradients.clear(); + + for (size_t elem_i = 0; elem_i < fibres_vector_size; elem_i++) + fisher_info_gradients.push_back(fisher_info); + + // bool has_base_intensity = fibres.has_intrinsic_property("base_intensity"); + // + // double base_intensity = 1.0; + // + // if (has_base_intensity) + // base_intensity = fibres.intrinsic_property("base_intensity"); + + + + std::vector fibre_block_start; + std::vector fibre_block_end; + + // size_t block_start = has_base_intensity; + size_t block_start = 0; + + for (size_t fibre_i = 0; fibre_i < fibres.size(); fibre_i++) { + fibre_block_start.push_back(block_start); + fibre_block_end.push_back(block_start += fibres[fibre_i].vsize()); + } + + // assert(block_start == fibre_vector_size); + + std::set coords = exp_image->non_empty_or_inbounds(); +// std::set coords; +// coords.insert(Image::Index(1,1,1)); + + //Testing + + for (std::set::iterator coord_it = coords.begin(); coord_it != coords.end(); ++coord_it) { + + Image::Expected::Voxel& voxel = exp_image->operator()(*coord_it); + + std::vector d_lprob(exp_image->num_encodings()); + std::vector d2_lprob2(exp_image->num_encodings()); + + + //--------------------------------------------------------------------------------// + // Calculate log probability and first and second derivatives for current voxel // + //--------------------------------------------------------------------------------// + for (size_t encode_i = 0; encode_i < exp_image->num_encodings(); encode_i++) { + + if (exp_image->encoding(encode_i).b_value()) { + + double observed; + + if (obs_image.in_bounds(*coord_it)) + observed = obs_image(*coord_it)[encode_i]; + else + observed = 0; + + lprob += log_prob(exp_image->operator()(*coord_it)[encode_i], observed, d_lprob[encode_i], d2_lprob2[encode_i]); + + } + + } + + + //--------------------------------------------------------------------------// + // Precalculate interpolation gradients between sections and current voxel // + //--------------------------------------------------------------------------// + + std::vector nonzero_fibres; + + for (size_t fibre_i = 0; fibre_i < fibres.size(); fibre_i++) + if (!section_references[fibre_i].is_empty(*coord_it)) { + + for (typename std::vector::iterator section_it = section_references[fibre_i](*coord_it).begin(); + section_it != section_references[fibre_i](*coord_it).end(); ++section_it) + voxel.precalculate_interpolation_gradient_and_hessian(**section_it); + + nonzero_fibres.push_back(fibre_i); + + } + + + + for (size_t encode_i = 0; encode_i < exp_image->num_encodings(); encode_i++) { + if (b0_include == "full" || exp_image->encoding(encode_i).b_value()) { + + +// if (has_base_intensity) { +// gradient.intrinsic_property("base_intensity") -= signal * diff / base_intensity; +// fisher_info(0,0) -= MR::Math::pow2(signal / base_intensity); +// } + + + std::vector< MR::Math::Vector > gradient_vectors; + std::vector< MR::Math::Matrix > hessian_matrices; + + + //-----------------------------------------------------------------------------------------------------------// + // Combine to calculate gradient and hessian for each fibre with nonzero contributions to the voxels signal // + //-----------------------------------------------------------------------------------------------------------// + + for (std::vector::iterator fibre_i_it = nonzero_fibres.begin(); fibre_i_it != nonzero_fibres.end(); ++fibre_i_it) { + + T direction_gradient (fibres[*fibre_i_it]); + typename T::Tensor direction_hessian (fibres[*fibre_i_it]); + + direction_gradient.zero(); + direction_hessian.zero(); + + std::vector& fibre_section_references = section_references[*fibre_i_it](*coord_it); + + for (typename std::vector::iterator section_it = fibre_section_references.begin(); + section_it != fibre_section_references.end(); ++section_it) { + + Fibre::Strand::BasicSection section_gradient; + Fibre::Strand::BasicSection::Tensor section_hessian; + + voxel.direction(encode_i).signal(**section_it, section_gradient, section_hessian); + + section_gradient.unnormalize_gradient(exp_image->vox_lengths()); + section_hessian.unnormalise_hessian(exp_image->vox_lengths()); + + direction_gradient.add_section_gradient(fibres[*fibre_i_it], **section_it, section_gradient); + direction_hessian.add_section_hessian(fibres[*fibre_i_it], **section_it, section_gradient, section_hessian); + + } + + direction_gradient *= fibres.base_intensity(); + direction_hessian *= fibres.base_intensity(); + + gradient_vectors.push_back(direction_gradient); + hessian_matrices.push_back(direction_hessian); + + gradient[*fibre_i_it] += direction_gradient * d_lprob[encode_i]; + + + } + + + + for (size_t nonzero_i1 = 0; nonzero_i1 < nonzero_fibres.size(); ++nonzero_i1) { + + size_t start1 = fibre_block_start[nonzero_fibres[nonzero_i1]]; + MR::Math::Vector& gradient1 = gradient_vectors[nonzero_i1]; + MR::Math::Matrix& hessian1 = hessian_matrices[nonzero_i1]; + + + for (size_t i1 = 0; i1 < gradient1.size(); i1++) + for (size_t i2 = 0; i2 < gradient1.size(); i2++) { + fisher_info(start1 + i1, start1 + i2) += d2_lprob2[encode_i] * gradient1[i1] * gradient1[i2]; +// std::cout << "fisher_info(" << start1 + i1 << ", " << start1 + i2 << ") = " << fisher_info(start1 + i1, start1 + i2) << " (" << d2_lprob2[encode_i] * gradient1[i1] * gradient1[i2] << ")" << std::endl; + } + + + + for (size_t i1 = 0; i1 < gradient1.size(); i1++) + for (size_t i2 = 0; i2 < gradient1.size(); i2++) + for (size_t i3 = 0; i3 < gradient1.size(); i3++) + fisher_info_gradients[start1 + i1](start1 + i2, start1 + i3) + += d2_lprob2[encode_i] * (hessian1(i2, i1) * gradient1[i3] + gradient1[i2] * hessian1(i3,i1)); + + + for (size_t nonzero_i2 = nonzero_i1+1; nonzero_i2 < nonzero_fibres.size(); ++nonzero_i2) { + + size_t start2 = fibre_block_start[nonzero_fibres[nonzero_i2]]; + MR::Math::Vector& gradient2 = gradient_vectors[nonzero_i2]; + + for (size_t i1 = 0; i1 < gradient1.size(); i1++) + for (size_t i2 = 0; i2 < gradient2.size(); i2++) { + + double incr = d2_lprob2[encode_i] * gradient1[i1] * gradient2[i2]; + + fisher_info(start1 + i1, start2 + i2) += incr; + fisher_info(start2 + i2, start1 + i1) += incr; + + } + + for (size_t i1 = 0; i1 < gradient1.size(); i1++) + for (size_t i2 = 0; i2 < gradient1.size(); i2++) + for (size_t i3 = 0; i3 < gradient2.size(); i3++) { + + double incr = d2_lprob2[encode_i] * hessian1(i2, i1) * gradient2[i3]; + + fisher_info_gradients[start1 + i1](start1 + i2, start2 + i3) += incr; + fisher_info_gradients[start1 + i1](start2 + i3, start1 + i2) += incr; + + } + + } + + + } + + + } + } + } + + return lprob; + + + } + + + template double Likelihood::Gaussian::log_prob_and_fisher_tpl(const typename T::Set& fibres, typename T::Set& gradient, typename T::Set::Tensor& fisher_info) { + + typename Image::Reference::Buffer::Set& section_references = exp_image->expected_image_with_references(fibres); + + exp_image->precalculate_section_weighting_gradients(T()); + + double lprob = 0.0; + + gradient = fibres; + fisher_info = typename T::Set::Tensor(fibres); + + gradient.zero(); + fisher_info.zero(); + + + + std::vector fibre_block_start; + std::vector fibre_block_end; + + // size_t block_start = has_base_intensity; + size_t block_start = 0; + + for (size_t fibre_i = 0; fibre_i < fibres.size(); fibre_i++) { + fibre_block_start.push_back(block_start); + fibre_block_end.push_back(block_start += fibres[fibre_i].vsize()); + } + + // assert(block_start == fibre_vector_size); + + std::set coords = exp_image->non_empty_or_inbounds(); + + + for (std::set::iterator coord_it = coords.begin(); coord_it != coords.end(); ++coord_it) { + + Image::Expected::Voxel& voxel = exp_image->operator()(*coord_it); + + std::vector d_lprob(exp_image->num_encodings()); + std::vector d2_lprob2(exp_image->num_encodings()); + + + //--------------------------------------------------------------------------------// + // Calculate log probability and first and second derivatives for current voxel // + //--------------------------------------------------------------------------------// + for (size_t encode_i = 0; encode_i < exp_image->num_encodings(); encode_i++) { + + if (b0_include == "full" || exp_image->encoding(encode_i).b_value()) { + + double observed; + + if (obs_image.in_bounds(*coord_it)) + observed = obs_image(*coord_it)[encode_i]; + else + observed = 0; + + lprob += log_prob(exp_image->operator()(*coord_it)[encode_i], observed, d_lprob[encode_i], d2_lprob2[encode_i]); + + } + + } + + + //--------------------------------------------------------------------------// + // Precalculate interpolation gradients between sections and current voxel // + //--------------------------------------------------------------------------// + for (size_t fibre_i = 0; fibre_i < fibres.size(); fibre_i++) + if (!section_references[fibre_i].is_empty(*coord_it)) + for (typename std::vector::iterator section_it = section_references[fibre_i](*coord_it).begin(); + section_it != section_references[fibre_i](*coord_it).end(); ++section_it) + voxel.precalculate_interpolation_gradient(**section_it); + + + + //-------------------------------------------// + // Combine to calculate gradient and fisher // + //-------------------------------------------// + + for (size_t encode_i = 0; encode_i < exp_image->num_encodings(); encode_i++) { + if (b0_include == "full" || exp_image->encoding(encode_i).b_value()) { + + + // if (has_base_intensity) { + // gradient.intrinsic_property("base_intensity") -= signal * diff / base_intensity; + // fisher_info(0,0) -= MR::Math::pow2(signal / base_intensity); + // } + + for (size_t fibre_i1 = 0; fibre_i1 < fibres.size(); fibre_i1++) { + if (!section_references[fibre_i1].is_empty(*coord_it)) { + + + //--------------------------------------------// + // Calculate the first fibre gradient vector // + //--------------------------------------------// + T gradient1 = fibres[fibre_i1]; + gradient1.zero(); + + for (typename std::vector::iterator section_it = section_references[fibre_i1](*coord_it).begin(); + section_it != section_references[fibre_i1](*coord_it).end(); ++section_it) { + + Fibre::Strand::BasicSection section_gradient; + + voxel.direction(encode_i).signal(**section_it, section_gradient); + section_gradient.unnormalize_gradient(exp_image->vox_lengths()); + gradient1.add_section_gradient(fibres[fibre_i1], **section_it, section_gradient); + + } + + gradient1 *= fibres.base_intensity(); + + MR::Math::Vector& gradient_vector1 = gradient1; + + gradient[fibre_i1] += gradient1 * d_lprob[encode_i]; + + + // if (has_base_intensity) + // for (size_t fibre_elem_i = 0; fibre_elem_i < gradient_vector1.size(); fibre_elem_i++) { + // + // size_t elem_i = fibre_block_start[fibre_i1] + fibre_elem_i; + // + // fisher_info(0, elem_i) -= gradient_vector1[fibre_elem_i] * signal; + // fisher_info(elem_i, 0) -= gradient_vector1[fibre_elem_i] * signal; + // + // } + + for (size_t fibre_i2 = 0; fibre_i2 < fibres.size(); fibre_i2++) { + if (!section_references[fibre_i2].is_empty(*coord_it)) { + + + //---------------------------------------------// + // Calculate the second fibre gradient vector // + //---------------------------------------------// + T gradient2 = fibres[fibre_i2]; + gradient2.zero(); + for (typename std::vector::iterator section_it = section_references[fibre_i2](*coord_it).begin(); + section_it != section_references[fibre_i2](*coord_it).end(); ++section_it) { + + Fibre::Strand::BasicSection section_gradient; + + voxel.direction(encode_i).signal(**section_it, section_gradient); + section_gradient.unnormalize_gradient(exp_image->vox_lengths()); + gradient2.add_section_gradient(fibres[fibre_i2], **section_it, section_gradient); + + } + + gradient2 *= fibres.base_intensity(); + + MR::Math::Vector& gradient_vector2 = gradient2; + + + //--------------------------------------------------------------------------------------------// + // Add the outer product of the two gradient vectors to the appropriate block of the Hessian // + //--------------------------------------------------------------------------------------------// + + for (size_t fibre_elem_i1 = 0; fibre_elem_i1 < gradient_vector1.size(); fibre_elem_i1++) { + + size_t elem_i1 = fibre_block_start[fibre_i1] + fibre_elem_i1; + + for (size_t fibre_elem_i2 = 0; fibre_elem_i2 < gradient_vector2.size(); fibre_elem_i2++) { + + size_t elem_i2 = fibre_block_start[fibre_i2] + fibre_elem_i2; + + fisher_info(elem_i1, elem_i2) += gradient_vector1[fibre_elem_i1] * gradient_vector2[fibre_elem_i2] * d2_lprob2[encode_i]; + + } + } + + size_t dummy = 0; + dummy++; + + } + } + + } + } + + } + } + } + + return lprob; + + } + + + } + +} + +#endif /* */ diff --git a/src/bts/prob/likelihood/gaussian.h b/src/bts/prob/likelihood/gaussian.h new file mode 100644 index 0000000..e4bebd5 --- /dev/null +++ b/src/bts/prob/likelihood/gaussian.h @@ -0,0 +1,163 @@ +/* + Copyright 2010 Brain Research Institute/National ICT Australia (NICTA), Melbourne, Australia + + Written by Thomas G Close, 5/05/09. + + This file is part of Bayesian Tractlet Sampling (BTS). + + BTS is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + BTS is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with BTS. If not, see . + +*/ + + +#ifndef __bts_prob_likelihood_imagediff_gaussian_h__ +#define __bts_prob_likelihood_imagediff_gaussian_h__ + + +#include "bts/prob/prob.h" +#include "bts/prob/likelihood.h" +#include "bts/prob/likelihood.h" + + +namespace BTS { + + namespace Prob { + + class Likelihood::Gaussian : public Likelihood { + + + public: + + Gaussian( const Image::Observed::Buffer& obs_image, + Image::Expected::Buffer* const exp_image, + double assumed_snr = Likelihood::SNR_DEFAULT, + const std::string& b0_include = Likelihood::B0_INCLUDE_DEFAULT, + double outside_scale = Likelihood::OUTSIDE_SCALE_DEFAULT, + const std::string& ref_b0 = Likelihood::REF_B0_DEFAULT, + double ref_signal = NAN) + + : Likelihood(obs_image, exp_image, assumed_snr, b0_include, outside_scale, ref_b0, ref_signal) {} + + + Gaussian(const Gaussian& s) + : Likelihood(s) {} + + + ~Gaussian() {} + + Gaussian& operator= (const Gaussian& s) + { this->Likelihood::operator=(s); return *this; } + + + using Likelihood::log_prob; + + double log_prob_and_fisher( const Fibre::Strand::Set& strands, + Fibre::Strand::Set& gradient, + Fibre::Strand::Set::Tensor& fisher_info, + std::vector& fisher_info_gradients) + { return log_prob_and_fisher_tpl(strands, gradient, fisher_info, fisher_info_gradients); } + + double log_prob_and_fisher( const Fibre::Tractlet::Set& tractlets, + Fibre::Tractlet::Set& gradient, + Fibre::Tractlet::Set::Tensor& fisher_info, + std::vector& fisher_info_gradients) + { return log_prob_and_fisher_tpl(tractlets, gradient, fisher_info, fisher_info_gradients); } + + + template double log_prob_and_fisher_tpl(const typename T::Set& fibres, + typename T::Set& gradient, + typename T::Set::Tensor& fisher_info, + std::vector& fisher_info_gradients); + + + double log_prob_and_fisher( const Fibre::Strand::Set& strands, + Fibre::Strand::Set& gradient, + Fibre::Strand::Set::Tensor& fisher_info) + { return log_prob_and_fisher_tpl(strands, gradient, fisher_info); } + + double log_prob_and_fisher( const Fibre::Tractlet::Set& strands, + Fibre::Tractlet::Set& gradient, + Fibre::Tractlet::Set::Tensor& fisher_info) + { return log_prob_and_fisher_tpl(strands, gradient, fisher_info); } + + + template double log_prob_and_fisher_tpl(const typename T::Set& fibres, + typename T::Set& gradient, + typename T::Set::Tensor& fisher_info); + + + double log_prob(double expected, double observed) { + + double diff = expected - observed; + + double lprob = - MR::Math::pow2(diff) / (2.0 * this->sigma2); + + //Add normalising constant. +// lprob += - MR::Math::log(MR::Math::sqrt(2.0 * M_PI * this->sigma2)); + + return lprob; + + } + + double b0_log_prob(double expected, double observed) { + + double diff = expected - observed; + + double lprob; + + if (b0_include == "full" || ((b0_include == "half") && diff > 0)) { + lprob = - MR::Math::pow2(diff) / (2.0 * this->sigma2); + //Add normalising constant. +// lprob += - MR::Math::log(MR::Math::sqrt(2.0 * M_PI * this->sigma2)); + } else + lprob = 0.0; + + + return lprob; + + } + + double log_prob(double expected, double observed, double& d_lprob) { + + double diff = expected - observed; + + d_lprob = - diff / this->sigma2; + + return log_prob(expected, observed); + + } + + double log_prob(double expected, double observed, double& d_lprob, double& d2_lprob2) { + + + d2_lprob2 = - 1.0 / this->sigma2; + + return log_prob(expected, observed, d_lprob); + + } + + + }; + + + + + + } + +} + +#include "bts/prob/likelihood/gaussian.cpp.h" + +#endif diff --git a/src/bts/prob/likelihood/one_sided_gaussian.h b/src/bts/prob/likelihood/one_sided_gaussian.h new file mode 100644 index 0000000..1834024 --- /dev/null +++ b/src/bts/prob/likelihood/one_sided_gaussian.h @@ -0,0 +1,141 @@ +/* + Copyright 2010 Brain Research Institute/National ICT Australia (NICTA), Melbourne, Australia + + Written by Thomas G Close, 5/05/09. + + This file is part of Bayesian Tractlet Sampling (BTS). + + BTS is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + BTS is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with BTS. If not, see . + +*/ + + +#ifndef __bts_prob_likelihood_imagediff_onesidedgaussian_h__ +#define __bts_prob_likelihood_imagediff_onesidedgaussian_h__ + + +#include "bts/prob/prob.h" +#include "bts/prob/likelihood.h" +#include "bts/prob/likelihood.h" + + +namespace BTS { + + namespace Prob { + + class Likelihood::OneSidedGaussian : public Likelihood { + + + public: + + OneSidedGaussian( const Image::Observed::Buffer& obs_image, + Image::Expected::Buffer* const exp_image, + double assumed_snr = Likelihood::SNR_DEFAULT, + const std::string& b0_include = Likelihood::B0_INCLUDE_DEFAULT, + double outside_scale = Likelihood::OUTSIDE_SCALE_DEFAULT, + const std::string& ref_b0 = Likelihood::REF_B0_DEFAULT, + double ref_signal = NAN) + + : Likelihood(obs_image, exp_image, assumed_snr, b0_include, outside_scale, ref_b0, ref_signal) {} + + + OneSidedGaussian(const OneSidedGaussian& s) + : Likelihood(s) {} + + + ~OneSidedGaussian() {} + + OneSidedGaussian& operator= (const OneSidedGaussian& s) + { this->Likelihood::operator=(s); return *this; } + + + using Likelihood::log_prob; + + + double log_prob(double expected, double observed) { + + double diff = expected - observed ; + + double lprob; + + if (diff > 0) + lprob = - MR::Math::pow2(diff) / (2.0 * this->sigma2);// - MR::Math::log(MR::Math::sqrt(2.0 * M_PI * this->sigma2)); + else + lprob = 0.0; + + return lprob; + + } + + double b0_log_prob(double expected, double observed) { + + double diff = expected - observed ; + + double lprob; + + if (this->b0_include == "full" || this->b0_include == "half") { + + if (diff > 0) + lprob = - MR::Math::pow2(diff) / (2.0 * this->sigma2);// - MR::Math::log(MR::Math::sqrt(2.0 * M_PI * this->sigma2)); + else + lprob = 0.0; + + } else + lprob = 0.0; + + + return lprob; + + } + + double log_prob(double expected, double observed, double& d_lprob) { + + double diff = expected - observed ; + + if (diff < 0) + d_lprob = - diff / this->sigma2; + else + d_lprob = 0.0; + + return log_prob(expected, observed); + + } + + double log_prob(double expected, double observed, double& d_lprob, double& d2_lprob2) { + + double diff = expected - observed ; + + if (diff < 0) + d2_lprob2 = - 1.0 / this->sigma2; + else + d2_lprob2 = 0.0; + + return log_prob(expected, observed, d_lprob); + + } + + + + }; + + + + + + } + +} + + +#endif diff --git a/src/bts/prob/likelihood/rician.h b/src/bts/prob/likelihood/rician.h new file mode 100644 index 0000000..c620b9b --- /dev/null +++ b/src/bts/prob/likelihood/rician.h @@ -0,0 +1,157 @@ +/* + Copyright 2008 Brain Research Institute, Melbourne, Australia + + Written by Thomas G Close, 26/01/2011. + + This file is part of MRtrix. + + MRtrix is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + MRtrix is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with MRtrix. If not, see . + +*/ + +#ifndef __bts_prob_likelihood_imagediff_rician_h__ +#define __bts_prob_likelihood_imagediff_rician_h__ + +#include "math/math.h" +#include "math/bessel.h" + +#include "bts/prob/likelihood.h" + +namespace BTS { + + namespace Prob { + + + class Likelihood::Rician : public Likelihood { + + + public: + + Rician( const Image::Observed::Buffer& obs_image, + Image::Expected::Buffer* const exp_image, + double assumed_snr = Likelihood::SNR_DEFAULT, + const std::string& b0_include = Likelihood::B0_INCLUDE_DEFAULT, + double outside_scale = Likelihood::OUTSIDE_SCALE_DEFAULT, + const std::string& ref_b0 = Likelihood::REF_B0_DEFAULT, + double ref_signal = NAN) + + : Likelihood(obs_image, exp_image, assumed_snr, b0_include, outside_scale, ref_b0, ref_signal) {} + + + Rician(const Rician& s) + : Likelihood(s) {} + + + ~Rician() {} + + Rician& operator= (const Rician& s) + { this->Likelihood::operator=(s); return *this; } + + + using Likelihood::log_prob; + + double log_prob_and_fisher( const Fibre::Strand::Set& strands, + Fibre::Strand::Set& gradient, + Fibre::Strand::Set::Tensor& fisher_info, + std::vector< MR::Math::Matrix >& fisher_info_gradients) + { return log_prob_and_fisher_tpl(strands, gradient, fisher_info, fisher_info_gradients); } + + double log_prob_and_fisher( const Fibre::Tractlet::Set& strands, + Fibre::Tractlet::Set& gradient, + Fibre::Tractlet::Set::Tensor& fisher_info, + std::vector< MR::Math::Matrix >& fisher_info_gradients) + { return log_prob_and_fisher_tpl(strands, gradient, fisher_info, fisher_info_gradients); } + + + template double log_prob_and_fisher_tpl(const typename T::Set& fibres, + typename T::Set& gradient, + typename T::Set::Tensor& fisher_info, + std::vector< MR::Math::Matrix >& fisher_info_gradients) + { throw Exception ("Not implemented yet."); } + + + double log_prob_and_fisher( const Fibre::Strand::Set& strands, + Fibre::Strand::Set& gradient, + Fibre::Strand::Set::Tensor& fisher_info) + { return log_prob_and_fisher_tpl(strands, gradient, fisher_info); } + + double log_prob_and_fisher( const Fibre::Tractlet::Set& strands, + Fibre::Tractlet::Set& gradient, + Fibre::Tractlet::Set::Tensor& fisher_info) + { return log_prob_and_fisher_tpl(strands, gradient, fisher_info); } + + + template double log_prob_and_fisher_tpl(const typename T::Set& fibres, + typename T::Set& gradient, + typename T::Set::Tensor& fisher_info) + { throw Exception ("Not implemented yet."); } + + + double log_prob(double expected, double observed) { + + assert(expected > 0.0 && observed > 0.0); + + double bessel_x = expected * observed / this->sigma2; + + double lprob = MR::Math::log(observed / this->sigma2 * + MR::Math::exp (- (MR::Math::pow2(observed) + MR::Math::pow2(expected))/ (2.0 * this->sigma2)) * + MR::Math::Bessel::I0_scaled(bessel_x)) + bessel_x; + + return lprob; + + } + + + double b0_log_prob(double expected, double observed) { + + assert(expected > 0.0 && observed > 0.0); + + double lprob; + + if (b0_include == "full") { + + double bessel_x = expected * observed / this->sigma2; + + lprob = MR::Math::log(observed / this->sigma2 * + MR::Math::exp (- (MR::Math::pow2(observed) + MR::Math::pow2(expected))/ (2.0 * this->sigma2)) * + MR::Math::Bessel::I0_scaled(bessel_x)) + bessel_x; + + } else + lprob = 0.0; + + return lprob; + + } + + + double log_prob(double expected, double observed, double& d_lprob) { + + throw Exception ("Not implemented yet."); + + } + + double log_prob(double expected, double observed, double& d_lprob, double& d2_lprob2) { + + throw Exception ("Not implemented yet."); + } + + + + }; + + } + +} + +#endif /* __bts_prob_likelihood_imagediff_rician_h__ */ diff --git a/src/bts/prob/posterior.h b/src/bts/prob/posterior.h new file mode 100644 index 0000000..72b279b --- /dev/null +++ b/src/bts/prob/posterior.h @@ -0,0 +1,59 @@ +/* + Copyright 2008 Brain Research Institute, Melbourne, Australia + + Written by Thomas G Close, Sep 28, 2010. + + This file is part of MRtrix. + + MRtrix is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + MRtrix is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with MRtrix. If not, see . + +*/ + +#ifndef __bts_prob_posterior_h__ +#define __bts_prob_posterior_h__ + +namespace BTS { + + namespace Prob { + + template class Posterior { + + //Public static variables, nested classes and typedefs + public: + + + //Protected member variables + protected: + + Prior* prior; + Likelihood* likelihood; + + //Public member functions + public: + + Posterior(const State& state, Prior* prior, Likelihood* likelihood) + : prior(prior->clone()), likelihood(likelihood->clone()) {} + + + //Protected member functions + protected: + + + }; + + } + +} + +#endif /* __bts_prob_posterior_h__ */ diff --git a/src/bts/prob/prior.cpp b/src/bts/prob/prior.cpp new file mode 100644 index 0000000..a39dc5f --- /dev/null +++ b/src/bts/prob/prior.cpp @@ -0,0 +1,111 @@ +/* + Copyright 2010 Brain Research Institute/National ICT Australia (NICTA), Melbourne, Australia + + Written by Thomas G Close, 5/05/09. + + This file is part of Bayesian Tractlet Sampling (BTS). + + BTS is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + BTS is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with BTS. If not, see . + +*/ + +#include "bts/prob/prior.h" +#include "bts/prob/prior_component/magnitude.h" +#include "bts/prob/prior_component/hook.h" +#include "bts/prob/prior_component/density.h" + +#include "bts/prob/inline_functions.h" + + +namespace BTS { + + namespace Prob { + + const char* Prior::TYPE_DEFAULT = "default"; + const double Prior::SCALE_DEFAULT = 1; + + Prior::Prior(double scale, + double mag_scale, + double mag_aux_scale, + double hook_scale, + double hook_num_points, + double density_high_scale, + double density_low_scale, + double density_num_points, + double acs_scale, + double acs_mean, + double length_scale, + double length_mean) + : scale(scale), + magnitude(mag_scale, mag_aux_scale), + hook(hook_scale, hook_num_points), + density(density_high_scale, density_low_scale, density_num_points), + acs(acs_scale, acs_mean), + length(length_scale,length_mean){} + + std::map Prior::get_component_values(const Fibre::Strand fibres) { + Fibre::Strand gradient; + gradient = fibres; + std::map component_map; + component_map[PriorComponent::Magnitude::NAME] = str(magnitude.log_prob(fibres, gradient)); + component_map[PriorComponent::Hook::NAME] = str(hook.log_prob(fibres, gradient)); + component_map[PriorComponent::Length::NAME] = str(length.log_prob(fibres, gradient)); + component_map[PriorComponent::Density::NAME] = 0.0; + component_map[PriorComponent::ACS::NAME] = 0.0; + return component_map; + } + + + std::map Prior::get_component_values(const Fibre::Tractlet fibres) { + Fibre::Tractlet gradient; + gradient = fibres; + std::map component_map; + component_map[PriorComponent::Magnitude::NAME] = str(magnitude.log_prob(fibres, gradient)); + component_map[PriorComponent::Hook::NAME] = str(hook.log_prob(fibres[0], gradient[0])); + component_map[PriorComponent::Length::NAME] = str(length.log_prob(fibres[0], gradient[0])); + component_map[PriorComponent::Density::NAME] = str(density.log_prob(fibres, gradient)); + component_map[PriorComponent::ACS::NAME] = str(acs.log_prob(fibres));; + return component_map; + } + + + + double Prior::log_prob(const Fibre::Strand strand, Fibre::Strand gradient) { + + double lprob = 0.0; + + lprob += magnitude.log_prob(strand, gradient); + lprob += hook.log_prob(strand, gradient); + lprob += length.log_prob(strand, gradient); + + return lprob; + + } + + double Prior::log_prob(const Fibre::Tractlet tractlet, Fibre::Tractlet gradient) { + + double lprob = 0.0; + + lprob += magnitude.log_prob(tractlet, gradient); + lprob += hook.log_prob(tractlet[0], gradient[0]); + lprob += length.log_prob(tractlet[0], gradient[0]); + lprob += density.log_prob(tractlet, gradient); + lprob += acs.log_prob(tractlet, gradient); + + return lprob; + + } + + } +} diff --git a/src/bts/prob/prior.cpp.h b/src/bts/prob/prior.cpp.h new file mode 100644 index 0000000..8f057b6 --- /dev/null +++ b/src/bts/prob/prior.cpp.h @@ -0,0 +1,50 @@ +/* + Copyright 2010 Brain Research Institute/National ICT Australia (NICTA), Melbourne, Australia + + Written by Thomas G Close, 5/05/09. + + This file is part of Bayesian Tractlet Sampling (BTS). + + BTS is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + BTS is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with BTS. If not, see . + +*/ + +#include "bts/prob/prior.h" + +#include "bts/prob/inline_functions.h" + + +namespace BTS { + + namespace Prob { + + const char* Prior::TYPE_DEFAULT = "default"; + const double Prior::SCALE_DEFAULT = 1; + + + template std::map get_component_values(const T& fibre) { + + std::map component_values; + + component_values["magnitude"] = magnitude.log_prob(fibre); + component_values["hook"] = hook.log_prob(fibre); + component_values["density"] = density.log_prob(fibre); + + return component_values; + + } + + + } +} diff --git a/src/bts/prob/prior.h b/src/bts/prob/prior.h new file mode 100644 index 0000000..3c01740 --- /dev/null +++ b/src/bts/prob/prior.h @@ -0,0 +1,289 @@ +/* + Copyright 2010 Brain Research Institute/National ICT Australia (NICTA), Melbourne, Australia + + Written by Thomas G Close, 5/05/09. + + This file is part of Bayesian Tractlet Sampling (BTS). + + BTS is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your prior_option) any later version. + + BTS is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with BTS. If not, see . + +*/ + + +#ifndef __bts_prob_prior_h__ +#define __bts_prob_prior_h__ + + +//Defines the parameters that are required to initialise the prior objects. +#define PRIOR_PARAMETERS \ + Option ("prior_scale", "Scales the weight of the whole prior distribution") \ + + Argument ("prior_scale", "").type_float(0, Prob::Prior::SCALE_DEFAULT,LARGE_FLOAT), \ +\ + Option ("prior_hook", "The type of prior placed on the sheer of the secondary axes") \ + + Argument ("prior_hook_scale", "").optional().type_float(0, Prob::PriorComponent::Hook::SCALE_DEFAULT,LARGE_FLOAT) \ + + Argument ("prior_hook_num_points", "").optional().type_integer(1, Prob::PriorComponent::Hook::NUM_POINTS_DEFAULT,LARGE_INT), \ +\ + Option ("prior_mag", "The prior placed on the tractlet magnitude") \ + + Argument ("prior_mag_scale", "").optional().type_float(0, Prob::PriorComponent::Magnitude::SCALE_DEFAULT,LARGE_FLOAT) \ + + Argument ("prior_mag_aux_scale", "").optional().type_float(0, Prob::PriorComponent::Magnitude::AUX_SCALE_DEFAULT,LARGE_FLOAT), \ +\ + Option ("prior_density", "The type of prior placed on the sheer of the secondary axes") \ + + Argument ("prior_density_high_scale", "").optional().type_float(0, Prob::PriorComponent::Density::HIGH_SCALE_DEFAULT,LARGE_FLOAT) \ + + Argument ("prior_density_low_scale", "").optional().type_float(0, Prob::PriorComponent::Density::LOW_SCALE_DEFAULT,LARGE_FLOAT) \ + + Argument ("prior_density_num_points", "").optional().type_integer(1, Prob::PriorComponent::Density::NUM_POINTS_DEFAULT,LARGE_INT), \ +\ + Option ("prior_acs", "The prior placed on the tractlet acs") \ + + Argument ("prior_acs_scale", "").optional().type_float(0, Prob::PriorComponent::ACS::SCALE_DEFAULT,LARGE_FLOAT) \ + + Argument ("prior_acs_mean", "").optional().type_float(0, Prob::PriorComponent::ACS::MEAN_DEFAULT,LARGE_FLOAT), \ +\ + Option ("prior_length", "The prior placed on the tractlet length") \ + + Argument ("prior_length_scale", "").optional().type_float(0, Prob::PriorComponent::Length::SCALE_DEFAULT,LARGE_FLOAT) \ + + Argument ("prior_length_mean", "").optional().type_float(0, Prob::PriorComponent::Length::MEAN_DEFAULT,LARGE_FLOAT) \ +\ + +//Loads the 'prior' parameters into variables +#define SET_PRIOR_PARAMETERS \ + double prior_scale = Prob::Prior::SCALE_DEFAULT; \ + \ + Options prior_opt = get_options("prior_scale"); \ + if (prior_opt.size()) \ + prior_scale = prior_opt[0][0]; \ +\ + double prior_hook_scale = Prob::PriorComponent::Hook::SCALE_DEFAULT; \ + size_t prior_hook_num_points = Prob::PriorComponent::Hook::NUM_POINTS_DEFAULT; \ + \ + prior_opt = get_options("prior_hook"); \ + if (prior_opt.size()) { \ + if (prior_opt[0].size() >= 1) \ + prior_hook_scale = prior_opt[0][0]; \ + if (prior_opt[0].size() >= 2) \ + prior_hook_num_points = prior_opt[0][1]; \ + } \ + \ + double prior_mag_scale = Prob::PriorComponent::Magnitude::SCALE_DEFAULT; \ + double prior_mag_aux_scale = Prob::PriorComponent::Magnitude::AUX_SCALE_DEFAULT; \ + \ + prior_opt = get_options("prior_mag"); \ + if (prior_opt.size()) { \ + if (prior_opt[0].size() >= 1) \ + prior_mag_scale = prior_opt[0][0]; \ + if (prior_opt[0].size() >= 2) \ + prior_mag_aux_scale = prior_opt[0][1]; \ + } \ + \ + double prior_density_high_scale = Prob::PriorComponent::Density::HIGH_SCALE_DEFAULT; \ + double prior_density_low_scale = Prob::PriorComponent::Density::LOW_SCALE_DEFAULT; \ + size_t prior_density_num_points = Prob::PriorComponent::Density::NUM_POINTS_DEFAULT; \ +\ + prior_opt = get_options("prior_density"); \ + if (prior_opt.size()) { \ + if (prior_opt[0].size() >= 1) \ + prior_density_high_scale = prior_opt[0][0]; \ + if (prior_opt[0].size() >= 1) \ + prior_density_low_scale = prior_opt[0][1]; \ + if (prior_opt[0].size() >= 2) \ + prior_density_num_points = prior_opt[0][2]; \ + } \ + \ + double prior_acs_scale = Prob::PriorComponent::ACS::SCALE_DEFAULT; \ + double prior_acs_mean = Prob::PriorComponent::ACS::MEAN_DEFAULT; \ + \ + prior_opt = get_options("prior_acs"); \ + if (prior_opt.size()) { \ + if (prior_opt[0].size() >= 1) \ + prior_acs_scale = prior_opt[0][0]; \ + if (prior_opt[0].size() >= 2) \ + prior_acs_mean = prior_opt[0][1]; \ + } \ + \ + double prior_length_scale = Prob::PriorComponent::Length::SCALE_DEFAULT; \ + double prior_length_mean = Prob::PriorComponent::Length::MEAN_DEFAULT; \ + \ + prior_opt = get_options("prior_length"); \ + if (prior_opt.size()) { \ + if (prior_opt[0].size() >= 1) \ + prior_length_scale = prior_opt[0][0]; \ + if (prior_opt[0].size() >= 2) \ + prior_length_mean = prior_opt[0][1]; \ + } \ + \ + + + +//Adds the 'prior' parameters to the properties to be saved with the data. +#define ADD_PRIOR_PROPERTIES(properties) \ + if (prior_scale) { \ + properties["prior_scale"] = str(prior_scale); \ +\ + if (prior_mag_scale) { \ + properties["prior_mag_scale"] = str(prior_mag_scale); \ + properties["prior_mag_aux_scale"] = str(prior_mag_aux_scale); \ + } \ +\ + if (prior_hook_scale) { \ + properties["prior_hook_scale"] = str(prior_hook_scale); \ + properties["prior_hook_num_points"] = str(prior_hook_num_points); \ + } \ +\ + if (prior_density_high_scale) { \ + properties["prior_density_high_scale"] = str(prior_density_high_scale); \ + properties["prior_density_low_scale"] = str(prior_density_low_scale); \ + properties["prior_density_num_points"] = str(prior_density_num_points); \ + } \ +\ + if (prior_acs_scale) { \ + properties["prior_acs_scale"] = str(prior_acs_scale); \ + properties["prior_acs_mean"] = str(prior_acs_mean); \ + } \ + \ + if (prior_length_scale) { \ + properties["prior_length_scale"] = str(prior_length_scale); \ + properties["prior_length_mean"] = str(prior_length_mean); \ + } \ + } \ + +#include "bts/prob/prior_component/magnitude.h" +#include "bts/prob/prior_component/hook.h" +#include "bts/prob/prior_component/density.h" +#include "bts/prob/prior_component/acs.h" +#include "bts/prob/prior_component/length.h" + +#include "bts/common.h" + +#include "bts/prob/prob.h" + +#include "bts/fibre/strand/set.h" +#include "bts/fibre/tractlet/set.h" +#include "bts/mcmc/state.h" + + +namespace BTS { + + namespace Prob { + + class Prior { + + public: + + const static char* TYPE_DEFAULT; + const static double SCALE_DEFAULT; + + protected: + + double scale; + PriorComponent::Magnitude magnitude; + PriorComponent::Hook hook; + PriorComponent::Density density; + PriorComponent::ACS acs; + PriorComponent::Length length; + + public: + + Prior(double scale, + double mag_scale, + double mag_aux_scale, + double hook_scale, + double hook_num_points, + double density_high_scale, + double density_low_scale, + double density_num_points, + double acs_scale, + double acs_mean, + double length_scale, + double length_mean); + + Prior(const Prior& p) + : scale(p.scale), magnitude(p.magnitude), hook(p.hook), density(p.density), acs(p.acs), length(p.length) {} + + Prior& operator=(const Prior& p) + { scale =p.scale; magnitude = p.magnitude; hook = p.hook; density = p.density; acs = p.acs; length = p.length; return *this; } + + virtual ~Prior() {} + + std::vector list_components() const { + std::vector components; + components.push_back(PriorComponent::Magnitude::NAME); + components.push_back(PriorComponent::Hook::NAME); + components.push_back(PriorComponent::Density::NAME); + components.push_back(PriorComponent::ACS::NAME); + components.push_back(PriorComponent::Length::NAME); + return components; + } + + std::map get_component_values(const Fibre::Strand strand); + + std::map get_component_values(const Fibre::Tractlet tractlet); + + template std::map get_component_values(const T fibres) { + std::map overall_map, elem_map; + std::vector components = list_components(); + for (std::vector::iterator comp_it = components.begin(); comp_it != components.end(); ++comp_it) + overall_map[*comp_it] = 0.0; + for (size_t fibre_i = 0; fibre_i < fibres.size(); ++fibre_i) { + elem_map = get_component_values(fibres[fibre_i]); + for (std::map::iterator comp_it = elem_map.begin(); comp_it != elem_map.end(); ++comp_it) + overall_map[comp_it->first] += comp_it->second; + + } + return overall_map; + } + + double log_prob(const Fibre::Strand strand, Fibre::Strand gradient); + + double log_prob(const Fibre::Tractlet tractlet, Fibre::Tractlet gradient); + + template double log_prob(const T fibres, T gradient) { + + double lprob = 0.0; + + if (scale) + for (size_t fibre_i = 0; fibre_i < fibres.size(); ++fibre_i) + lprob += log_prob(fibres[fibre_i], gradient[fibre_i]); + + return lprob; + } + + template double log_prob(const T& fibre) { + + T dummy_gradient; + dummy_gradient = fibre; + + return log_prob(fibre, dummy_gradient); + + } + + template double log_prob(const T strand, T gradient, typename T::Tensor hessian) + { throw Exception ("Not implemented yet."); } + + + template double log_prob_and_fisher(const T strand, T gradient, typename T::Tensor fisher) + { throw Exception ("Not implemented yet."); } + + + template double log_prob_and_fisher(const T strand, + T gradient, typename T::Tensor fisher, + std::vector fisher_gradient) + { throw Exception ("Not implemented yet."); } + + }; + + + } + +} + + + + +#endif diff --git a/src/bts/prob/prior_component/acs.cpp b/src/bts/prob/prior_component/acs.cpp new file mode 100644 index 0000000..da0589b --- /dev/null +++ b/src/bts/prob/prior_component/acs.cpp @@ -0,0 +1,67 @@ +/* + Copyright 2009 Brain Research Institute, Melbourne, Australia + + Created by Tom Close on 13/03/09. + + This file is part of Bayesian Tractlet Sampling (BTS). + + BTS is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + BTS is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with BTS. If not, see . + + */ + +#include "math/math.h" +#include "bts/prob/prior_component/acs.h" + + +namespace BTS { + + namespace Prob { + + namespace PriorComponent { + + const double ACS::SCALE_DEFAULT = 0.0; //1000 + const double ACS::MEAN_DEFAULT = 0.05; + const std::string ACS::NAME = "acs"; + + double ACS::log_prob(const Fibre::Tractlet tractlet) { + + return -scale * MR::Math::pow2(tractlet.acs() - mean); + + } + + + double ACS::log_prob(const Fibre::Tractlet tractlet, Fibre::Tractlet gradient) { + + assert(!gradient.is_owner()); + + // If gradient hasn't been initialised, initialise it to the size of the tractlet, otherwise check its degree. + if (!gradient.degree()) { + gradient = tractlet; + gradient.zero(); + } else if (gradient.degree() != tractlet.degree()) + throw Exception ("Tractlet degree (" + str(tractlet.degree()) + ") does not match that of the supplied gradient (" + str(gradient.degree()) + ")."); + + double lprob = -scale * MR::Math::pow2(tractlet.acs() - mean); + + if (tractlet.has_var_acs()) + gradient.acs_sqrt() -= 4.0 * scale * tractlet.acs_sqrt() * (tractlet.acs() - mean) ; + + return lprob; + } + + } + + } + +} diff --git a/src/bts/prob/prior_component/acs.h b/src/bts/prob/prior_component/acs.h new file mode 100644 index 0000000..faa49a7 --- /dev/null +++ b/src/bts/prob/prior_component/acs.h @@ -0,0 +1,83 @@ +/* + Copyright 2009 Brain Research Institute, Melbourne, Australia + + Created by Tom Close on 13/03/09. + + This file is part of Bayesian Tractlet Sampling (BTS). + + BTS is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + BTS is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with BTS. If not, see . + + */ + + +#ifndef __bts_prob_priorcomponent_acs_h__ +#define __bts_prob_priorcomponent_acs_h__ + +#include "math/math.h" + +#include "bts/fibre/strand/set.h" + +namespace BTS { + + namespace Prob { + + namespace PriorComponent { + + class ACS { + + public: + + const static double SCALE_DEFAULT; + const static double MEAN_DEFAULT; + const static std::string NAME; + + //Protected member variables. + protected: + + double scale; + double mean; + + public: + + ACS (double scale, double mean) + : scale(scale), mean(mean) {} + + ACS(const ACS& m) + : scale(m.scale), mean(m.mean) {} + + ACS& operator=(const ACS& m) + { scale = m.scale; mean = m.mean; return *this; } + + ~ACS() {} + + ACS* clone() const + { return new ACS(*this); } + + double log_prob(const Fibre::Tractlet tractlet); + + double log_prob(const Fibre::Tractlet tractlet, Fibre::Tractlet gradient); + + const std::string& get_name() + { return NAME; } + }; + + } + + } + +} + + + +#endif diff --git a/src/bts/prob/prior_component/density.cpp b/src/bts/prob/prior_component/density.cpp new file mode 100644 index 0000000..2657c60 --- /dev/null +++ b/src/bts/prob/prior_component/density.cpp @@ -0,0 +1,66 @@ +/* + Copyright 2009 Brain Research Institute, Melbourne, Australia + + Created by Tom Close on 13/03/09. + + This file is part of Bayesian Tractlet Sampling (BTS). + + BTS is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + BTS is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with BTS. If not, see . + + */ + + +#include "bts/fibre/track/set.h" +#include "bts/prob/prior_component/density.h" +#include "bts/prob/inline_functions.h" + +namespace BTS { + + namespace Prob { + + namespace PriorComponent { + + const double Density::HIGH_SCALE_DEFAULT = 1; + const double Density::LOW_SCALE_DEFAULT = 1; + const std::string Density::NAME = "density"; + const size_t Density::NUM_POINTS_DEFAULT = 100; + + double Density::log_prob(const Fibre::Tractlet tractlet, Fibre::Tractlet gradient) { + + double log_prob = 0.0; + gradient.invalidate(); + + std::vector areas = tractlet.cross_sectional_areas(num_points); + + for (size_t point_i = 0; point_i < num_points; ++point_i) { + + // Divide the Apparrent Connection Strength (ACS) of the tractlet by the perpendicular component of the area. + double density = tractlet.acs() / areas[point_i]; + + // Arbitrary function that makes the probability of the density being either very large or very low improbable. + log_prob -= high_scale* MR::Math::pow2(1.0 - density); + log_prob -= low_scale * MR::Math::pow2(1.0 - 1.0 / density); + + } + + return log_prob; + + + } + + } + + } + +} diff --git a/src/bts/prob/prior_component/density.h b/src/bts/prob/prior_component/density.h new file mode 100644 index 0000000..a9b9c92 --- /dev/null +++ b/src/bts/prob/prior_component/density.h @@ -0,0 +1,95 @@ +/* + Copyright 2009 Brain Research Institute, Melbourne, Australia + + Created by Tom Close on 13/03/09. + + This file is part of Bayesian Tractlet Sampling (BTS). + + BTS is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + BTS is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with BTS. If not, see . + + */ + + +#ifndef __bts_prob_prior_tractlet_density__ +#define __bts_prob_prior_tractlet_density__ + +#include "bts/fibre/tractlet.h" +#include "bts/fibre/tractlet/tensor.h" + + + +namespace BTS { + + namespace Prob { + + namespace PriorComponent { + + class Density { + + public: + + const static double HIGH_SCALE_DEFAULT; + const static double LOW_SCALE_DEFAULT; + const static std::string NAME; + const static size_t NUM_POINTS_DEFAULT; + + protected: + + double high_scale; + double low_scale; + size_t num_points; + + public: + + Density() {} + + Density(double high_scale, + double low_scale, + size_t num_points=NUM_POINTS_DEFAULT) + : high_scale(high_scale), low_scale(low_scale), num_points(num_points) {} + + Density(const Density& d) + : high_scale(d.high_scale), low_scale(d.low_scale), num_points(num_points) {} + + Density& operator= (const Density& d) + { high_scale = d.high_scale; low_scale = d.low_scale; num_points = d.num_points; return *this; } + + Density* clone() const + { return new Density(*this); } + + double log_prob(const Fibre::Tractlet, Fibre::Tractlet gradient); + + double log_prob(const Fibre::Tractlet tractlet, Fibre::Tractlet gradient, Fibre::Tractlet::Tensor hessian) + { throw Exception ("Not implemented"); } + + double log_prob_and_fisher(const Fibre::Tractlet tractlet, Fibre::Tractlet gradient, Fibre::Tractlet::Tensor hessian) + { throw Exception ("Not implemented"); } + + double log_prob_and_fisher(const Fibre::Tractlet tractlet, Fibre::Tractlet gradient, Fibre::Tractlet::Tensor fisher, std::vector& fisher_gradient) + { throw Exception ("Not implemented"); } + + const std::string& get_name() + { return NAME; } + + }; + + } + + } + +} + + + +#endif diff --git a/src/bts/prob/prior_component/hook.cpp b/src/bts/prob/prior_component/hook.cpp new file mode 100644 index 0000000..10d091d --- /dev/null +++ b/src/bts/prob/prior_component/hook.cpp @@ -0,0 +1,88 @@ +/* + Copyright 2009 Brain Research Institute, Melbourne, Australia + + Created by Tom Close on 13/03/09. + + This file is part of Bayesian Tractlet Sampling (BTS). + + BTS is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + BTS is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with BTS. If not, see . + + */ + +#include "bts/prob/prior_component/hook.h" + +#include "bts/prob/inline_functions.h" + +namespace BTS { + + namespace Prob { + + namespace PriorComponent { + + const double Hook::SCALE_DEFAULT = 50.0; + const std::string Hook::NAME = "hook"; + const size_t Hook::NUM_POINTS_DEFAULT = 100; + + double Hook::log_prob(const Fibre::Strand strand, Fibre::Strand gradient) { + + double lprob = 0.0; + gradient.invalidate(); + + std::pair endpoints = strand.endpoints(); + Coord end_to_end = endpoints.second - endpoints.second; + Coord normed_end_to_end = end_to_end.normalise(); + double end_to_end_length = end_to_end.norm2(); + + Fibre::Track track(strand, num_points); + + for (size_t point_i = 0; point_i < num_points; ++point_i) { + + Coord start_diff = track[point_i] - endpoints.first; + double start_dot = normed_end_to_end.dot(start_diff); + + //If the point on the track is before the start point of the strand w.r.t. the ultimate endpoint of the strand + if (start_dot < 0.0) { + double start_dist2 = start_diff.norm2(); + lprob -= 0.5 * MR::Math::pow2(start_dot) / (start_dist2 * end_to_end_length); + } else { + + Coord end_diff = track[point_i] - endpoints.second; + double end_dot = normed_end_to_end.dot(end_diff); + + if (end_dot > 0.0) { + double end_dist2 = end_diff.norm2(); + lprob -= 0.5 * MR::Math::pow2(end_dot) / (end_dist2 * end_to_end_length); + + } + + } + + } + + lprob *= scale; + return lprob; + } + + + double Hook::log_prob(const Fibre::Strand& strand, Fibre::Strand& gradient, Fibre::Strand::Tensor& hessian) { + + throw Exception("Not implemented yet"); + + } + + } + + } + +} diff --git a/src/bts/prob/prior_component/hook.h b/src/bts/prob/prior_component/hook.h new file mode 100644 index 0000000..e0b9100 --- /dev/null +++ b/src/bts/prob/prior_component/hook.h @@ -0,0 +1,85 @@ +/* + Copyright 2009 Brain Research Institute, Melbourne, Australia + + Created by Tom Close on 13/03/09. + + This file is part of Bayesian Tractlet Sampling (BTS). + + BTS is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + BTS is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with BTS. If not, see . + + */ + + +#ifndef __bts_prob_prior_strand_hook_h__ +#define __bts_prob_prior_strand_hook_h__ + +#include "math/math.h" + +#include "bts/fibre/strand/set.h" + +namespace BTS { + + namespace Prob { + + namespace PriorComponent { + + class Hook { + + public: + + const static double SCALE_DEFAULT; + const static std::string NAME; + const static bool ACTIVE_DEFAULT; + const static size_t NUM_POINTS_DEFAULT; + + + //Protected member variables. + protected: + + double scale; + size_t num_points; + + public: + + Hook (double scale, size_t num_points) + : scale(scale), num_points(num_points) {} + + Hook(const Hook& m) + : scale(m.scale), num_points(m.num_points) {} + + Hook& operator=(const Hook& m) + { scale = m.scale; num_points = m.num_points; return *this; } + + ~Hook() {} + + Hook* clone() const + { return new Hook(*this); } + + double log_prob(const Fibre::Strand strand, Fibre::Strand gradient); + + double log_prob(const Fibre::Strand& strand, Fibre::Strand& gradient, Fibre::Strand::Tensor& hessian); + + const std::string& get_name() + { return NAME; } + }; + + } + + } + +} + + + +#endif diff --git a/src/bts/prob/prior_component/length.cpp b/src/bts/prob/prior_component/length.cpp new file mode 100644 index 0000000..ec2a46c --- /dev/null +++ b/src/bts/prob/prior_component/length.cpp @@ -0,0 +1,68 @@ +/* + Copyright 2009 Brain Research Institute, Melbourne, Australia + + Created by Tom Close on 13/03/09. + + This file is part of Bayesian Tractlet Sampling (BTS). + + BTS is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + BTS is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with BTS. If not, see . + + */ + +#include "math/math.h" +#include "bts/prob/prior_component/length.h" + + +namespace BTS { + + namespace Prob { + + namespace PriorComponent { + + const double Length::SCALE_DEFAULT = 0.0; //10 + const double Length::MEAN_DEFAULT = 0.05; + const std::string Length::NAME = "length"; + + double Length::log_prob(const Fibre::Strand strand) { + + return - scale * MR::Math::pow2(strand[1].norm() - mean); + + } + + + double Length::log_prob(const Fibre::Strand strand, Fibre::Strand gradient) { + + assert(!gradient.is_owner()); + + // If gradient hasn't been initialised, initialise it to the size of the tractlet, otherwise check its degree. + if (!gradient.degree()) { + gradient = strand; + gradient.zero(); + } else if (gradient.degree() != strand.degree()) + throw Exception ("Tractlet degree (" + str(strand.degree()) + ") does not match that of the supplied gradient (" + str(gradient.degree()) + ")."); + + double lprob = -scale * MR::Math::pow2(strand[1].norm() - mean); + + gradient[1][X] = -2.0 * scale * strand[1][X] * (strand[1].norm() - mean) / strand[1].norm(); + gradient[1][Y] = -2.0 * scale * strand[1][Y] * (strand[1].norm() - mean) / strand[1].norm(); + gradient[1][Z] = -2.0 * scale * strand[1][Z] * (strand[1].norm() - mean) / strand[1].norm(); + + return lprob; + } + + } + + } + +} diff --git a/src/bts/prob/prior_component/length.h b/src/bts/prob/prior_component/length.h new file mode 100644 index 0000000..b7efac4 --- /dev/null +++ b/src/bts/prob/prior_component/length.h @@ -0,0 +1,83 @@ +/* + Copyright 2009 Brain Research Institute, Melbourne, Australia + + Created by Tom Close on 13/03/09. + + This file is part of Bayesian Tractlet Sampling (BTS). + + BTS is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + BTS is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with BTS. If not, see . + + */ + + +#ifndef __bts_prob_priorcomponent_length_h__ +#define __bts_prob_priorcomponent_length_h__ + +#include "math/math.h" + +#include "bts/fibre/strand/set.h" + +namespace BTS { + + namespace Prob { + + namespace PriorComponent { + + class Length { + + public: + + const static double SCALE_DEFAULT; + const static double MEAN_DEFAULT; + const static std::string NAME; + + //Protected member variables. + protected: + + double scale; + double mean; + + public: + + Length (double scale, double mean) + : scale(scale), mean(mean) {} + + Length(const Length& m) + : scale(m.scale), mean(m.mean) {} + + Length& operator=(const Length& m) + { scale = m.scale; mean = m.mean; return *this; } + + ~Length() {} + + Length* clone() const + { return new Length(*this); } + + double log_prob(const Fibre::Strand strand); + + double log_prob(const Fibre::Strand strand, Fibre::Strand gradient); + + const std::string& get_name() + { return NAME; } + }; + + } + + } + +} + + + +#endif diff --git a/src/bts/prob/prior_component/magnitude.cpp b/src/bts/prob/prior_component/magnitude.cpp new file mode 100644 index 0000000..137beda --- /dev/null +++ b/src/bts/prob/prior_component/magnitude.cpp @@ -0,0 +1,260 @@ +/* + Copyright 2009 Brain Research Institute, Melbourne, Australia + + Created by Tom Close on 13/03/09. + + This file is part of Bayesian Tractlet Sampling (BTS). + + BTS is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + BTS is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with BTS. If not, see . + + */ + +#include "bts/prob/prior_component/magnitude.h" + +#include "bts/prob/inline_functions.h" + +namespace BTS { + + namespace Prob { + + namespace PriorComponent { + + const double Magnitude::SCALE_DEFAULT = 25.0; + const double Magnitude::AUX_SCALE_DEFAULT = 75.0; + const std::string Magnitude::NAME = "magnitude"; + + double Magnitude::log_prob(const Fibre::Strand strand, Fibre::Strand gradient) { + + double lprob = 0.0; + gradient.zero(); + + const Triple& v1 = strand[1]; + + double v1_norm2 = v1.norm2(); + + for (size_t degree_i = 2; degree_i < strand.degree(); degree_i++) { + + const Triple& vm = strand[degree_i]; + double vm_norm2 = vm.norm2(); + + if (v1_norm2) { + + lprob -= scale * MR::Math::pow2(degree_i) * vm_norm2 / v1_norm2; + +#ifndef GRADIENT_NOT_REQUIRED + //The gradient of the curve magnitude w.r.t. Vm. + gradient[degree_i] -= vm * 2.0 * MR::Math::pow2(degree_i) * scale / v1_norm2; + + //The gradient of the curve magnitude w.r.t. V1. + gradient[1] += v1 * 2.0 * MR::Math::pow2(degree_i) * scale * vm_norm2/(v1_norm2 * v1_norm2); +#endif + + } else if (vm_norm2) // If v1 is zero and vm is non zero set the probability to be very low + lprob = -LARGE_FLOAT; + } + + return lprob; + + } + +// double Magnitude::log_prob(const Fibre::Strand& strand, Fibre::Strand& gradient, Fibre::Strand::Tensor& hessian) { +// +// double lprob = 0.0; +// gradient.zero(); +// +// hessian.reset(strand); +// +// const Triple& v1 = strand[1]; +// +// double v1_norm2 = v1.norm2(); +// +// for (size_t degree_i = 2; degree_i < strand.degree(); degree_i++) { +// +// const Triple& vm = strand[degree_i]; +// double vm_norm2 = vm.norm2(); +// +// lprob -= scale * degree_i * vm_norm2 / v1_norm2; +// +// #ifndef GRADIENT_NOT_REQUIRED +// //The gradient of the curve magnitude w.r.t. Vm. +// gradient[degree_i] -= vm * 2.0 * degree_i * scale / v1_norm2; +// +// //The gradient of the curve magnitude w.r.t. V1. +// gradient[1] += v1 * 2.0 * scale * degree_i * vm_norm2/(v1_norm2 * v1_norm2); +// +// #ifndef HESSIAN_NOT_REQUIRED +// +// for (size_t dim_i1 = 0; dim_i1 < 3; dim_i1++) { +// +// hessian(degree_i,dim_i1,degree_i,dim_i1) -= 2.0 * degree_i * scale / v1_norm2; +// hessian(1, dim_i1, 1, dim_i1) += 2.0 * scale * degree_i * vm_norm2 / MR::Math::pow2(v1_norm2); +// +// for (size_t dim_i2 = 0; dim_i2 < 3; dim_i2++) { +// +// hessian(degree_i, dim_i1, 1, dim_i2) += 4.0 * scale * degree_i * vm[dim_i1] * v1[dim_i2] / MR::Math::pow2(v1_norm2); +// hessian(1, dim_i1, degree_i, dim_i2) += 4.0 * scale * degree_i * v1[dim_i1] * vm[dim_i2] / MR::Math::pow2(v1_norm2); +// +// hessian(1, dim_i1, 1, dim_i2) -= 8.0 * scale * degree_i * v1[dim_i1] * v1[dim_i2] * vm_norm2 / MR::Math::pow3(v1_norm2); +// } +// +// +// } +// +// +// #endif +// +// #endif +// +// } +// +// +// return lprob; +// +// } + + + double Magnitude::log_prob(const Fibre::Tractlet tractlet, Fibre::Tractlet gradient) { + + gradient.zero(); + + double lprob = log_prob(tractlet[0], gradient[0]); + + const Coord v1 = tractlet(0,1); + + double v1_norm2 = v1.norm2(); + + for (size_t ax_i = 1; ax_i < 3; ++ax_i) { + for (size_t degree_i = 1; degree_i < tractlet.degree(); degree_i++) { + + const Coord vm = tractlet(ax_i,degree_i); + double vm_norm2 = vm.norm2(); + + if (v1_norm2) { + + lprob -= scale * MR::Math::pow2(degree_i) * vm_norm2 / v1_norm2; + + #ifndef GRADIENT_NOT_REQUIRED + //The gradient of the curve magnitude w.r.t. Vm. + gradient(ax_i, degree_i) -= vm * 2.0 * MR::Math::pow2(degree_i) * scale / v1_norm2; + + //The gradient of the curve magnitude w.r.t. V1. + gradient(0,1) += v1 * 2.0 * MR::Math::pow2(degree_i) * scale * vm_norm2/(v1_norm2 * v1_norm2); + #endif + + } else if (vm_norm2) // If v1 is zero and vm is non zero set the probability to be very low + lprob = -LARGE_FLOAT; + } + } + + return lprob; + + } + + +// +// double Magnitude::log_prob_and_fisher(const Fibre::Strand& strand, Fibre::Strand& gradient, Fibre::Strand::Tensor& fisher) { +// +// double log_prob = 0.0; +// gradient.zero(); +// +// fisher.reset(strand); +// +// const Coord v1 = strand[1]; +// +// double v1_norm2 = v1.norm2(); +// +// for (size_t degree_i = 2; degree_i < strand.degree(); degree_i++) { +// +// Coord vm = strand[degree_i]; +// double vm_norm2 = vm.norm2(); +// +// log_prob -= degree_i * scale * vm_norm2 / v1_norm2; +// +// #ifndef GRADIENT_NOT_REQUIRED +// //The gradient of the curve magnitude w.r.t. Vm. +// gradient[degree_i] -= vm * 2.0 * degree_i * scale / v1_norm2; +// +// //The gradient of the curve magnitude w.r.t. V1. +// gradient[1] += v1 * 2.0 * degree_i * scale * vm_norm2/(v1_norm2 * v1_norm2); +// +// for (size_t dim_i1 = 0; dim_i1 < 3; dim_i1++) +// fisher(degree_i, dim_i1, degree_i, dim_i1) += 2.0 * degree_i * scale / v1_norm2; +// +// #endif +// +// } +// +// +// return log_prob; +// +// } +// +// +// double Magnitude::log_prob_and_fisher(const Fibre::Strand& strand, Fibre::Strand& gradient, Fibre::Strand::Tensor& fisher, std::vector& fisher_gradient) { +// +// double lprob = 0.0; +// gradient.zero(); +// +// size_t vector_size = strand.vsize(); +// +// fisher.reset(strand); +// +// //TODO: Make reset function to do this +// fisher_gradient.resize(vector_size); +// for (size_t elem_i = 0; elem_i < vector_size; ++elem_i) +// fisher_gradient[elem_i].reset(strand); +// +// const Coord v1 = strand[1]; +// +// double v1_norm2 = v1.norm2(); +// +// for (size_t degree_i = 2; degree_i < strand.degree(); degree_i++) { +// +// const Triple& vm = strand[degree_i]; +// double vm_norm2 = vm.norm2(); +// +// lprob -= degree_i * scale * vm_norm2 / v1_norm2; +// +// #ifndef GRADIENT_NOT_REQUIRED +// //The gradient of the curve magnitude w.r.t. Vm. +// gradient[degree_i] -= vm * 2.0 * degree_i * scale / v1_norm2; +// +// //The gradient of the curve magnitude w.r.t. V1. +// gradient[1] += v1 * 2.0 * degree_i * scale * vm_norm2/(v1_norm2 * v1_norm2); +// +// for (size_t dim_i1 = 0; dim_i1 < 3; dim_i1++) { +// +// fisher(degree_i, dim_i1, degree_i, dim_i1) += 2.0 * degree_i * scale / v1_norm2; +// +// //TODO: Make this independent of whether the strand has an acs; +// for (size_t dim_i2 = 0; dim_i2 < 3; dim_i2++) +// fisher_gradient[dim_i2 + 3 + strand.has_var_acs()](degree_i, dim_i1, degree_i, dim_i1) -= 4.0 * degree_i * scale * v1[dim_i2] / MR::Math::pow2(v1_norm2); +// +// } +// +// +// #endif +// +// } +// +// +// return lprob; +// +// } + + } + + } + +} diff --git a/src/bts/prob/prior_component/magnitude.h b/src/bts/prob/prior_component/magnitude.h new file mode 100644 index 0000000..20d35cd --- /dev/null +++ b/src/bts/prob/prior_component/magnitude.h @@ -0,0 +1,92 @@ +/* + Copyright 2009 Brain Research Institute, Melbourne, Australia + + Created by Tom Close on 13/03/09. + + This file is part of Bayesian Tractlet Sampling (BTS). + + BTS is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + BTS is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with BTS. If not, see . + + */ + + +#ifndef __bts_prob_prior_strand_curvature_h__ +#define __bts_prob_prior_strand_curvature_h__ + +#include "math/math.h" + +#include "bts/fibre/strand/set.h" +#include "bts/fibre/strand/tensor.h" +#include "bts/fibre/strand/set/tensor.h" + +namespace BTS { + + namespace Prob { + + namespace PriorComponent { + + class Magnitude { + + public: + + const static double SCALE_DEFAULT; + const static double AUX_SCALE_DEFAULT; + const static std::string NAME; + + //Protected member variables. + protected: + + double scale; + double aux_scale; + + public: + + Magnitude (double scale, double aux_scale) + : scale(scale), aux_scale(aux_scale) {} + + Magnitude(const Magnitude& m) + : scale(m.scale), aux_scale(aux_scale) {} + + Magnitude& operator=(const Magnitude& m) + { scale = m.scale; aux_scale = m.aux_scale; return *this; } + + ~Magnitude() {} + + Magnitude* clone() const + { return new Magnitude(*this); } + + double log_prob(const Fibre::Strand strand, Fibre::Strand gradient); + + double log_prob(const Fibre::Tractlet, Fibre::Tractlet gradient); + + double log_prob(const Fibre::Strand strand, Fibre::Strand gradient, Fibre::Strand::Tensor hessian) { throw Exception ("Not implemented yet."); } + + double log_prob_and_fisher(const Fibre::Strand strand, Fibre::Strand gradient, Fibre::Strand::Tensor fisher) { throw Exception ("Not implemented yet."); } + + + double log_prob_and_fisher(const Fibre::Strand strand, Fibre::Strand gradient, Fibre::Strand::Tensor fisher, std::vector& fisher_gradient) { throw Exception ("Not implemented yet."); } + + const std::string& get_name() + { return NAME; } + }; + + } + + } + +} + + + +#endif diff --git a/src/bts/prob/prob.h b/src/bts/prob/prob.h new file mode 100644 index 0000000..a17bd8e --- /dev/null +++ b/src/bts/prob/prob.h @@ -0,0 +1,40 @@ +/* + Copyright 2010 Brain Research Institute/National ICT Australia (NICTA), Melbourne, Australia + + Written by Thomas G Close, 5/05/09. + + This file is part of Bayesian Tractlet Sampling (BTS). + + BTS is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + BTS is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with BTS. If not, see . + +*/ + +#ifndef __bts_prob_prob_h__ +#define __bts_prob_prob_h__ + +#include "bts/common.h" + +namespace BTS { + + namespace Prob { + + const static size_t STRONG_ERROR = 0; + const static size_t WEAK_ERROR = 1; + + } + +} + + +#endif diff --git a/src/bts/prob/test/bayes_log_regression.cpp b/src/bts/prob/test/bayes_log_regression.cpp new file mode 100644 index 0000000..e93aa38 --- /dev/null +++ b/src/bts/prob/test/bayes_log_regression.cpp @@ -0,0 +1,176 @@ +/* + Copyright 2008 Brain Research Institute, Melbourne, Australia + + Written by Thomas G Close, 01/10/2010. + + This file is part of MRtrix. + + MRtrix is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + MRtrix is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with MRtrix. If not, see . + +*/ + +#include "bts/prob/test/bayes_log_regression.h" +#include "bts/mcmc/state/tensor.h" + +namespace BTS { + + namespace Prob { + + namespace Test { + + const char* BayesLogRegression::DATA_LOCATION_DEFAULT = "/home/tclose/data/prob/test/bayes_log_regression/australian.txt"; + const size_t BayesLogRegression::POLY_ORDER_DEFAULT = 1; + const float BayesLogRegression::PRIOR_VARIANCE_DEFAULT = 100.0; + + + BayesLogRegression::BayesLogRegression(const std::string& location, size_t poly_order, double alpha) + : poly_order(poly_order), alpha(alpha) { + + MR::Math::Matrix loaded_data (location); + MR::Math::Matrix X = loaded_data.sub(0, loaded_data.rows(), 0, loaded_data.columns()-1); + t = loaded_data.column(loaded_data.columns()-1); + + XX.resize(X.rows(), X.columns() * poly_order + 1); + XX.column(0) = 1.0; + + for (size_t poly_i = 0; poly_i < poly_order; ++poly_i) + for (size_t col_i = 0; col_i < X.columns(); ++col_i) + for (size_t row_i = 0; row_i < X.rows(); ++row_i) + XX(row_i, poly_i*X.columns() + col_i + 1) = MR::Math::pow(X(row_i, col_i), poly_i+1); + + + N = XX.rows(); + D = XX.columns(); + + f.resize(N); + working.resize(D,N); + v.resize(N); + p.resize(N); + V.resize(D,N); + + Z2.resize(N,D); + + + } + + + + double BayesLogRegression::log_prob (const MR::Math::Vector& w) { + + + double lprior = 0.0; + + for (size_t d = 0; d < D; ++d) + lprior -= 0.5 * MR::Math::log(2.0 * M_PI * alpha) - MR::Math::pow2(w[d]) / (2.0 * alpha); + + MR::Math::mult(f, XX, w); + + double llike = MR::Math::dot(f,t); + + for (size_t n = 0; n < N; ++n) + llike -= MR::Math::log(1.0 + MR::Math::exp(f[n])); + + return lprior + llike; + + } + + + double BayesLogRegression::log_prob (const MR::Math::Vector& w, MR::Math::Vector& d_w) { + + MR::Math::mult(f, XX, w); + + for (size_t n = 0; n < N; ++n) + v[n] = t[n] - 1.0 / ( 1.0 + MR::Math::exp(-f[n])); + + MR::Math::mult(d_w, 0.0, 1.0, CblasTrans, XX, v); + + for (size_t d = 0; d < D; ++d) + d_w[d] -= 1.0 / alpha * w[d]; + + return log_prob(w); + + } + + + double BayesLogRegression::log_prob_and_fisher (const MR::Math::Vector& w, MR::Math::Vector& d_w, MR::Math::Matrix& G) { + + assert(w.size() == D); + + G.resize(D,D); + d_w.resize(D); + + MR::Math::mult(f, XX, w); + + for (size_t n = 0; n < N; ++n) { + p[n] = 1/(1 + MR::Math::exp(-f[n])); + v[n] = p[n] * (1 - p[n]); + for (size_t d = 0; d < D; ++d) + working(d,n) = v[n] * XX(n,d); + } + + + MR::Math::mult(G, working, XX); + + for (size_t d = 0; d < D; ++d) + G(d,d) += 1.0/alpha; + + return log_prob(w, d_w); + + + } + + + double BayesLogRegression::log_prob_and_fisher (const MR::Math::Vector& w, MR::Math::Vector& d_w, MR::Math::Matrix& G, std::vector& d_G) { + + d_G.clear(); + d_G.resize(D, MCMC::State::Tensor(w)); + + Z = 0.0; + + MR::Math::mult(f, XX, w); + + for (size_t n = 0; n < N; ++n) { + p[n] = 1/(1 + MR::Math::exp(-f[n])); + v[n] = p[n] * (1 - p[n]); + for (size_t d = 0; d < D; ++d) + V(d,n) = v[n]; + } + + for (size_t d = 0; d < D; ++d) { + + for (size_t n = 0; n < N; ++n) { + double z1 = (1.0 - 2.0 * p[n]) * XX(n,d) * v[n]; + for (size_t d2 = 0; d2 < D; ++d2) + Z2(n,d2) = XX(n,d2) * z1; + } + + MR::Math::Matrix d_G_d; + + MR::Math::mult(d_G_d, 1.0, CblasTrans, XX, CblasNoTrans, Z2); + + d_G[d] = d_G_d; + + } + + + return log_prob_and_fisher(w, d_w, G); + + } + + + } + + } + +} diff --git a/src/bts/prob/test/bayes_log_regression.h b/src/bts/prob/test/bayes_log_regression.h new file mode 100644 index 0000000..0a9a335 --- /dev/null +++ b/src/bts/prob/test/bayes_log_regression.h @@ -0,0 +1,95 @@ +/* + Copyright 2008 Brain Research Institute, Melbourne, Australia + + Written by Thomas G Close, 01/10/2010. + + This file is part of MRtrix. + + MRtrix is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + MRtrix is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with MRtrix. If not, see . + +*/ + +#ifndef __bts_prob_test_bayeslogregression_h__ +#define __bts_prob_test_bayeslogregression_h__ + +#include +#include + +#include "math/vector.h" +#include "math/matrix.h" +#include "math/math.h" + +#include "bts/mcmc/state.h" + +namespace BTS { + + namespace Prob { + + namespace Test { + + class BayesLogRegression { + + public: + + const static char* DATA_LOCATION_DEFAULT; + const static size_t POLY_ORDER_DEFAULT; + const static float PRIOR_VARIANCE_DEFAULT; + +// protected: + + MR::Math::Matrix X; + MR::Math::Matrix XX; + MR::Math::Vector t; + + MR::Math::Vector f; + MR::Math::Matrix working; + MR::Math::Vector v; + MR::Math::Vector p; + MR::Math::Matrix V; + MR::Math::Matrix Z; + MR::Math::Matrix Z1; + MR::Math::Matrix Z2; + + size_t poly_order; + double alpha; + size_t D; + size_t N; + + + public: + + BayesLogRegression(const std::string& location, size_t poly_order = 1, double alpha = 100.0); + + + double log_prob (const MR::Math::Vector& w); + + + double log_prob (const MR::Math::Vector& w, MR::Math::Vector& d_w); + + + double log_prob_and_fisher (const MR::Math::Vector& w, MR::Math::Vector& d_w, MR::Math::Matrix& G); + + + double log_prob_and_fisher (const MR::Math::Vector& w, MR::Math::Vector& d_w, MR::Math::Matrix& G, std::vector& d_G); + + + }; + + } + + } + +} + +#endif /* __bts_prob_test_bayeslogregression_h__ */ diff --git a/src/bts/prob/test/gaussian.cpp b/src/bts/prob/test/gaussian.cpp new file mode 100644 index 0000000..bb9a067 --- /dev/null +++ b/src/bts/prob/test/gaussian.cpp @@ -0,0 +1,76 @@ +/* + * test_gaussian.cpp + * tractography + * + * Created by Tom Close on 16/12/09. + * Copyright 2009 National ICT Australia (NICTA). All rights reserved. + * + */ + +#include "bts/prob/test/gaussian.h" +#include "bts/mcmc/state/tensor.h" + +#include "bts/prob/inline_functions.h" + +#include "bts/image/buffer.cpp.h" + +namespace BTS { + + namespace Prob { + + namespace Test { + + const char* Gaussian::AXIS_SCALES_LOCATION_DEFAULT = "/home/tclose/data/prob/test/gaussian/axis_scales.sta"; + + + double Gaussian::log_prob(const MCMC::State& state) { + + double log_prob = 0.0; + + for (size_t i = 0; i < state.size(); i++) + log_prob += -MR::Math::pow2(state[i]) * axis_scales[i]; + + return log_prob; + + } + + + double Gaussian::log_prob(const MCMC::State& state, MCMC::State& gradient) { + + for (size_t i = 0; i < state.size(); i++) + gradient[i] = -2.0 * state[i] * axis_scales[i]; + + return log_prob(state); + + } + + + double Gaussian::log_prob(const MCMC::State& state, MCMC::State& gradient, MCMC::State::Tensor& hessian) { + + hessian.zero(); + + for (size_t i = 0; i < state.size(); i++) + hessian(i,i) = 2.0 * axis_scales[i]; + + return log_prob(state, gradient); + + } + + double Gaussian::log_prob_and_fisher(const MCMC::State& state, MCMC::State& gradient, MCMC::State::Tensor& fisher, std::vector& fisher_gradient) { + + fisher_gradient.resize(state.size()); + + for (size_t i = 0; i < state.size(); i++) { + fisher_gradient[i].resize(state.size(), state.size()); + fisher_gradient[i] = 0.0; + } + + return log_prob(state, gradient, fisher); + + } + + } + + } + +} diff --git a/src/bts/prob/test/gaussian.h b/src/bts/prob/test/gaussian.h new file mode 100644 index 0000000..be337e1 --- /dev/null +++ b/src/bts/prob/test/gaussian.h @@ -0,0 +1,100 @@ +/* + Copyright 2009 Brain Research Institute, Melbourne, Australia + + Created by Tom Close on 13/03/09. + + This file is part of Bayesian Tractlet Sampling (BTS). + + BTS is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + BTS is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with BTS. If not, see . + + */ + + +#ifndef __bts_prob_testgaussian__ +#define __bts_prob_testgaussian__ + + + +#include "bts/prob/likelihood.h" +#include "bts/prob/prior.h" + +//TODO: remove +#include "bts/image/expected/buffer.h" +#include "bts/mcmc/state.h" + +namespace BTS { + + namespace Prob { + + namespace Test { + + class Gaussian { + + public: + + const static char* AXIS_SCALES_LOCATION_DEFAULT; + + + protected: + + MR::Math::Vector& axis_scales; + + public: + + //TODO: remove + BTS::Image::Expected::Buffer* exp_image; + + Gaussian(MR::Math::Vector& axis_scales) : axis_scales(axis_scales) {} + + double log_prob(const MCMC::State& test_state); + + double log_prob(const MCMC::State& test_state, MCMC::State& gradient); + + double log_prob(const MCMC::State& test_state, MCMC::State& gradient, MCMC::State::Tensor& hessian); + + double log_prob_and_fisher(const MCMC::State& test_state, MCMC::State& gradient, MCMC::State::Tensor& fisher) + { return log_prob(test_state,gradient,fisher); } + + + double log_prob_and_fisher(const MCMC::State& test_state, MCMC::State& gradient, MCMC::State::Tensor& fisher, std::vector& fisher_gradient); + + void set_assumed_snr(double assumed_snr, const std::string& ref_b0, double ref_signal) {} + + void set_enforce_bounds(bool flag) {} + + std::vector list_components() { return std::vector(); } + + template std::map get_component_values(T& t) { return std::map(); } + + + friend std::ostream& operator<< (std::ostream& stream, const Gaussian& test); + + }; + + inline std::ostream& operator<< (std::ostream& stream, const Gaussian& test) { + + + stream << "Axis scales: " << test.axis_scales << std::endl; + + return stream; + + } + + } + + } + +} + +#endif diff --git a/src/bts/prob/test/landscape.cpp b/src/bts/prob/test/landscape.cpp new file mode 100644 index 0000000..5473944 --- /dev/null +++ b/src/bts/prob/test/landscape.cpp @@ -0,0 +1,350 @@ +/* + Copyright 2009 Brain Research Institute, Melbourne, Australia + + Created by Tom Close on 13/03/09. + + This file is part of Bayesian Tractlet Sampling (BTS). + + BTS is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + BTS is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with BTS. If not, see . + + */ + + +extern "C" { +#include +#include +} + +#include "bts/prob/test/landscape.h" +#include "bts/prob/test/landscape/peak.h" +#include "bts/prob/test/landscape/peak/writer.h" +#include "bts/prob/test/landscape/peak/reader.h" + +#include "bts/prob/inline_functions.h" + +#include "bts/image/buffer.cpp.h" +#include "bts/math/common.h" + +namespace BTS { + + namespace Prob { + + namespace Test { + + const char* Landscape::LOCATION_DEFAULT = "/home/tclose/data/prob/test/landscape/a.lnd"; + const double Landscape::WIDTH_MU_DEFAULT = 10; + const double Landscape::WIDTH_SIGMA_DEFAULT = 5; + const double Landscape::WIDTH_MIN_DEFAULT = 15; + const double Landscape::HEIGHT_VAR_DEFAULT = 6; + const double Landscape::ROI_RADIUS_DEFAULT = 10.0; + const double Landscape::FRACTION_PYRAMID_DEFAULT = 0.0; + const double Landscape::BARRIER_RATE_DEFAULT = 0.3; + + Landscape::Landscape(double roi_radius, double barrier_rate) + : roi_radius (roi_radius), barrier_rate(barrier_rate) {} + + Landscape::Landscape(const std::string& location, double roi_radius, double barrier_rate) + : roi_radius(roi_radius), barrier_rate(barrier_rate) { load(location); } + + + Landscape Landscape::randomly_generate( size_t ndims, + size_t num_peaks, + double peak_width_mu, + double peak_width_sigma, + double peak_width_min, + double peak_height_var, + double roi_radius, + double fraction_pyramid, + double barrier_rate, + size_t seed) { + + Landscape landscape; + + landscape.ndims = ndims; + landscape.roi_radius = roi_radius; + landscape.barrier_rate = barrier_rate; + + gsl_rng* rand_gen = gsl_rng_alloc(gsl_rng_taus); + gsl_rng_set(rand_gen, seed); + + for (size_t peak_i = 0; peak_i < num_peaks; peak_i++) { + + // Rejection sampling to get peaks randomly distributed within the roi_radius. + MCMC::State centre(ndims); + + for (size_t dim_i = 0; dim_i < ndims; ++dim_i) + centre[dim_i] = roi_radius; + + while (centre.norm() >= roi_radius) + for (size_t dim_i = 0; dim_i < ndims; ++dim_i) + centre[dim_i] = gsl_ran_flat(rand_gen, -roi_radius, roi_radius); + + MCMC::State::Tensor widths(ndims); + + MR::Math::Matrix eig_matrix(ndims,ndims), working(ndims,ndims); + + eig_matrix = 0; + + for (size_t dim_i = 0; dim_i < 2; dim_i++) { + double width = MR::Math::sqrt(MR::Math::pow2(gsl_ran_gaussian(rand_gen, peak_width_sigma) + peak_width_mu * (1.0 - peak_width_min)) + + MR::Math::pow2(gsl_ran_gaussian(rand_gen, peak_width_sigma) + peak_width_mu * (1.0 - peak_width_min))) / M_SQRT2; + + width += peak_width_min * peak_width_mu; + + eig_matrix(dim_i,dim_i) = 3.0 / MR::Math::pow2(width); + } + + MR::Math::Matrix rotate_matrix = Math::random_rotation(rand_gen, ndims); + + MR::Math::mult(working, eig_matrix, rotate_matrix); + MR::Math::mult(widths, 1.0, CblasTrans, rotate_matrix, CblasNoTrans, working); + + // Rayleigh distribution for peak height. + double height = gsl_ran_gaussian(rand_gen, peak_height_var); + + size_t type = 0; + + // Select the peak to be a pyramid instead of a gaussian with probability = fraction_pyramid. + if (gsl_ran_flat(rand_gen, 0.0, 1.0) < fraction_pyramid) + type = 1; + + // Create peak object. + Peak peak(ndims, centre, widths, height, type); + + landscape.peaks.push_back(peak); + + } + + gsl_rng_free(rand_gen); + + return landscape; + + } + + Landscape::~Landscape() {} + + + double Landscape::log_prob(const MCMC::State& state) { + + MCMC::State dummy; + + return log_prob(state, dummy); + + + } + + + double Landscape::log_prob(const MCMC::State& state, MCMC::State& gradient) { + + double log_prob = 0.0; + gradient.zero(); + + MCMC::State peak_gradient; + + for (std::vector::iterator peak_it = peaks.begin(); peak_it != peaks.end(); ++peak_it) { + + log_prob += peak_it->log_prob(state, peak_gradient); + + gradient += peak_gradient; + + } + + + if (state.norm() > roi_radius) { + + log_prob -= barrier_rate * MR::Math::pow2((state.norm() - roi_radius)); + gradient -= 2.0 * barrier_rate * state * (state.norm() - roi_radius) / state.norm(); + + } + + return log_prob; + + + } + + + double Landscape::log_prob(const MCMC::State& state, MCMC::State& gradient, MCMC::State::Tensor& hessian) { + + double log_prob = 0.0; + gradient.resize(state.size()); + hessian.resize(state.size(), state.size()); + + gradient.zero(); + hessian.zero(); + + MCMC::State peak_gradient; + MCMC::State::Tensor peak_hessian; + + for (std::vector::iterator peak_it = peaks.begin(); peak_it != peaks.end(); ++peak_it) { + + log_prob += peak_it->log_prob(state, peak_gradient, peak_hessian); + + gradient += peak_gradient; + + hessian += peak_hessian; + + } + + + if (state.norm() > roi_radius) { + + log_prob -= barrier_rate * MR::Math::pow2((state.norm() - roi_radius)); + gradient -= 2.0 * barrier_rate * state * (state.norm() - roi_radius) / state.norm(); + + MR::Math::Matrix hess_part = BTS::Math::outer(state, state); + hess_part *= 2.0 * barrier_rate * (-1.0 * (state.norm() - roi_radius) / MR::Math::pow3(state.norm()) + 1 / state.norm2()); + hessian -= hess_part; + + for (size_t elem_i = 0; elem_i < state.size(); elem_i++) + hessian(elem_i, elem_i) -= 2 * barrier_rate * (state.norm() - roi_radius)/ state.norm(); + + + + } + + return log_prob; + + + } + + + double Landscape::log_prob(const MCMC::State& state, MCMC::State& gradient, MCMC::State::Tensor& hessian, std::vector& rank3_hessian) { + + double log_prob = 0.0; + gradient.resize(state.size()); + hessian.resize(state.size(), state.size()); + + gradient.zero(); + hessian.zero(); + + MCMC::State peak_gradient; + MCMC::State::Tensor peak_hessian; + std::vector peak_rank3_hessian; + + for (size_t dim_i = 0; dim_i < state.size(); dim_i++) + rank3_hessian.push_back(hessian); + + + for (std::vector::iterator peak_it = peaks.begin(); peak_it != peaks.end(); ++peak_it) { + + log_prob += peak_it->log_prob(state, peak_gradient, peak_hessian, peak_rank3_hessian); + + gradient += peak_gradient; + + hessian += peak_hessian; + + for (size_t dim_i = 0; dim_i < state.size(); dim_i++) + rank3_hessian[dim_i] += peak_rank3_hessian[dim_i]; + + } + + if (state.norm() > roi_radius) { + + log_prob -= barrier_rate * MR::Math::pow2((state.norm() - roi_radius)); + gradient -= 2.0 * barrier_rate * state * (state.norm() - roi_radius) / state.norm(); + + MR::Math::Matrix hess_part = BTS::Math::outer(state, state); + hess_part *= -2.0 * barrier_rate * (-1.0 * (state.norm() - roi_radius) / MR::Math::pow3(state.norm()) + 1 / state.norm2()); + hessian += hess_part; + + for (size_t elem_i = 0; elem_i < state.size(); elem_i++) + hessian(elem_i, elem_i) -= 2 * barrier_rate * (state.norm() - roi_radius)/ state.norm(); + + + for (size_t dim_i = 0; dim_i < state.size(); dim_i++) { + + MCMC::State::Tensor& d_hessian = rank3_hessian[dim_i]; + + MR::Math::Matrix d_scalar_hess = Math::outer(state,state); + d_scalar_hess *= -2.0 * barrier_rate * state[dim_i] * (3.0 * (state.norm() - roi_radius) / MR::Math::pow5(state.norm()) - 3.0 / MR::Math::pow4(state.norm())); + + MR::Math::Matrix d_outer_hess (state.size(), state.size()); + d_outer_hess = 0.0; + d_outer_hess.column(dim_i) = state; + d_outer_hess.row(dim_i) += state; + d_outer_hess *= -2.0 * barrier_rate * (-1.0 * (state.norm() - roi_radius) / MR::Math::pow3(state.norm()) + 1 / state.norm2()); + + d_hessian += d_scalar_hess; + d_hessian += d_outer_hess; + + for (size_t dim_i2 = 0; dim_i2 < state.size(); dim_i2++) + d_hessian(dim_i2, dim_i2) -= 2.0 * barrier_rate * state[dim_i] * (1/state.norm2() - (state.norm() - roi_radius)/ MR::Math::pow3(state.norm())); + + } + + } + + return log_prob; + + + } + + + void Landscape::save(const std::string& location) { + + + Peak::Writer writer(location); + + for (std::vector::iterator peak_it = peaks.begin(); peak_it != peaks.end(); ++peak_it) + writer.append(*peak_it); + + } + + + + void Landscape::load(const std::string& location) { + + + this->peaks.clear(); + + Peak::Reader reader(location); + + Peak peak; + + ndims = 0; + + while (reader.next(peak)) { + + if (!ndims) + ndims = peak.num_dims(); + else if (ndims != peak.num_dims()) + throw Exception ("Peak dimension (" + str(peak.num_dims()) + ") does not match overall dimension (" + str(ndims) + ")."); + + this->peaks.push_back(peak); + + } + + if (!ndims) + throw Exception ("Loaded test landscape ('" + location + "') does not have any dimension."); + + + + } + + + + std::ostream& operator<< (std::ostream& stream, const Landscape& test) { + + for (std::vector::const_iterator peak_it = test.peaks.begin(); peak_it != test.peaks.end(); ++peak_it) + stream << *peak_it << std::endl; + + return stream; + + } + + } + + } + +} diff --git a/src/bts/prob/test/landscape.h b/src/bts/prob/test/landscape.h new file mode 100644 index 0000000..133958f --- /dev/null +++ b/src/bts/prob/test/landscape.h @@ -0,0 +1,189 @@ +/* + Copyright 2009 Brain Research Institute, Melbourne, Australia + + Created by Tom Close on 13/03/09. + + This file is part of Bayesian Tractlet Sampling (BTS). + + BTS is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + BTS is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with BTS. If not, see . + + */ + +#ifndef __bts_prob_testpeaks__ +#define __bts_prob_testpeaks__ + +#define TEST_LANDSCAPE_PARAMETERS \ +\ + Option ("lnd_location", "") \ + + Argument ("lnd_location", "").type_text (Prob::Test::Landscape::LOCATION_DEFAULT), \ +\ + Option ("lnd_scale", "") \ + + Argument ("lnd_scale", "").type_float (SMALL_FLOAT, LARGE_FLOAT, 1.0), \ +\ + Option ("lnd_roi_radius", "") \ + + Argument ("lnd_roi_radius", "").type_float (SMALL_FLOAT, LARGE_FLOAT,Prob::Test::Landscape::ROI_RADIUS_DEFAULT), \ +\ + Option ("lnd_barrier_rate", "") \ + + Argument ("lnd_barrier_rate", "").type_float (SMALL_FLOAT, LARGE_FLOAT,Prob::Test::Landscape::BARRIER_RATE_DEFAULT) \ + +//Loads the 'prior' parameters into variables +#define SET_TEST_LANDSCAPE_PARAMETERS \ + std::string lnd_location = Prob::Test::Landscape::LOCATION_DEFAULT; \ + double lnd_scale = 1.0; \ + double lnd_roi_radius = Prob::Test::Landscape::ROI_RADIUS_DEFAULT; \ + double lnd_barrier_rate = Prob::Test::Landscape::BARRIER_RATE_DEFAULT; \ +\ + opt = get_options("lnd_location"); \ + if (opt.size()) \ + lnd_location = opt[0][0].c_str(); \ +\ + opt = get_options("lnd_scale"); \ + if (opt.size()) \ + lnd_scale = opt[0][0]; \ +\ + opt = get_options("lnd_roi_radius"); \ + if (opt.size()) \ + lnd_roi_radius = opt[0][0]; \ +\ + opt = get_options("lnd_barrier_rate"); \ + if (opt.size()) \ + lnd_barrier_rate = opt[0][0]; \ + +//Adds the 'prior' parameters to the properties to be saved with the data. +#define ADD_TEST_LANDSCAPE_PROPERTIES(properties) \ + properties["lnd_location"] = lnd_location; \ + properties["lnd_scale"] = str(lnd_scale); \ + properties["lnd_roi_radius"] = str(lnd_roi_radius); \ + properties["lnd_barrier_rate"] = str(lnd_barrier_rate); + +#include "bts/prob/likelihood.h" +#include "bts/prob/prior.h" + +//TODO: remove +#include "bts/image/expected/buffer.h" + +namespace BTS { + + namespace Prob { + + namespace Test { + + class Landscape { + + public: + + class Peak; + + public: + + const static char* LOCATION_DEFAULT; + + const static size_t NUM_DIMS_DEFAULT = 2; + const static size_t NUM_PEAKS_DEFAULT = 40; + const static double WIDTH_MU_DEFAULT; + const static double WIDTH_SIGMA_DEFAULT; + const static double WIDTH_MIN_DEFAULT; + const static double HEIGHT_VAR_DEFAULT; + const static double ROI_RADIUS_DEFAULT; + const static double FRACTION_PYRAMID_DEFAULT; + const static double BARRIER_RATE_DEFAULT; + + //TODO: remove + // BTS::Image::Expected::Buffer* exp_image; + + public: + + static Landscape randomly_generate( size_t num_dims, + size_t num_peaks, + double peak_width_mu, + double peak_width_sigma, + double peak_width_min, + double peak_height_var, + double roi_radius, + double fraction_pyramid, + double barrier_rate = BARRIER_RATE_DEFAULT, + size_t seed = time(NULL)); + + protected: + + size_t ndims; + + double roi_radius; + + double barrier_rate; + + std::vector peaks; + + public: + + Landscape(double roi_radius = ROI_RADIUS_DEFAULT, + double barrier_rate = BARRIER_RATE_DEFAULT); + + Landscape(const std::string& location, double roi_radius = + ROI_RADIUS_DEFAULT, double barrier_rate = BARRIER_RATE_DEFAULT); + + ~Landscape(); + + Landscape(double magnitude, size_t num_points, double spacing, + size_t seed = time(NULL)); + + double log_prob(const MCMC::State& test_state); + + double log_prob(const MCMC::State& test_state, MCMC::State& gradient); + + double log_prob(const MCMC::State& test_state, MCMC::State& gradient, MCMC::State::Tensor& hessian); + + double log_prob(const MCMC::State& test_state, MCMC::State& gradient, MCMC::State::Tensor& hessian, std::vector& rank3_hessian); + + void save(const std::string& location); + + void load(const std::string& location); + + size_t num_dims() const { + return ndims; + } + + Peak& operator[](size_t index) { + return peaks[index]; + } + + const Peak& operator[](size_t index) const { + return peaks[index]; + } + + void set_assumed_snr(double assumed_snr, const std::string& ref_b0, double ref_signal) { + } + + void set_enforce_bounds(bool flag) {} + + std::vector list_components() { return std::vector(); } + + template std::map get_component_values(T& t) { return std::map(); } + + friend std::ostream& operator<<(std::ostream& stream, + const Landscape& test); + + }; + + std::ostream& operator<<(std::ostream& stream, const Landscape& test); + + } + + } + +} + +#include "bts/prob/test/landscape/peak.h" + +#endif diff --git a/src/bts/prob/test/landscape/peak.cpp b/src/bts/prob/test/landscape/peak.cpp new file mode 100644 index 0000000..930b714 --- /dev/null +++ b/src/bts/prob/test/landscape/peak.cpp @@ -0,0 +1,233 @@ +/* + Copyright 2009 Brain Research Institute, Melbourne, Australia + + Created by Tom Close on 13/03/09. + + This file is part of Bayesian Tractlet Sampling (BTS). + + BTS is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + BTS is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with BTS. If not, see . + + */ + + + #include "bts/prob/test/landscape/peak.h" + +#include "bts/prob/inline_functions.h" + +#include "bts/math/common.h" +#include "math/matrix.h" +#include "bts/image/buffer.cpp.h" + +namespace BTS { + + namespace Prob { + + namespace Test { + + Landscape::Peak::Peak(size_t ndims, + const MCMC::State& centre, + const MCMC::State::Tensor& widths, + double height, + size_t type) + : type(type), + ndims(ndims), + height(height), + centre(centre), + widths(widths) + + { + + if (ndims!= widths.rows()) + throw Exception ("Size of centre (" + str(ndims) + ") and length of widths (" + str(widths.rows()) + ") do not match."); + + + + } + + + double Landscape::Peak::log_prob(const MCMC::State& point, MCMC::State& gradient) { + + double log_prob; + + if (type == GAUSSIAN) + log_prob = gaussian_log_prob(point, gradient); + else if (type == PYRAMID) + log_prob = pyramid_log_prob(point, gradient); + else + throw Exception ("Unrecognised peak type, " + str(type) + "."); + + return log_prob; + + } + + + double Landscape::Peak::log_prob(const MCMC::State& point, MCMC::State& gradient, MCMC::State::Tensor& hessian) { + + double log_prob; + + if (type == GAUSSIAN) + log_prob = gaussian_log_prob(point, gradient, hessian); + else if (type == PYRAMID) + throw Exception ("Hessian is not useful for pyramid type peaks."); + else + throw Exception ("Unrecognised peak type, " + str(type) + "."); + + return log_prob; + + } + + double Landscape::Peak::log_prob(const MCMC::State& point, MCMC::State& gradient, MCMC::State::Tensor& hessian, std::vector& rank3_hessian) { + + double log_prob; + + if (type == GAUSSIAN) + log_prob = gaussian_log_prob(point, gradient, hessian, rank3_hessian); + else if (type == PYRAMID) + throw Exception ("Hessian or a 3rd order Hessian is not useful for pyramid type peaks."); + else + throw Exception ("Unrecognised peak type, " + str(type) + "."); + + return log_prob; + + } + + + double Landscape::Peak::gaussian_log_prob(const MCMC::State& point, MCMC::State& gradient, MCMC::State::Tensor& hessian) { + + MCMC::State disp = point - this->centre; + + MCMC::State widths_mult_disp(ndims); + + MR::Math::mult(widths_mult_disp, widths, disp); + + double exponent = -MR::Math::dot(disp, widths_mult_disp); + + if (exponent > 0) + throw Exception ("Tensor was not a positive definite matrix."); + + double log_prob = height * exp (exponent); + + gradient = widths_mult_disp; + gradient *= -2.0 * log_prob; + + hessian = Math::outer(widths_mult_disp, widths_mult_disp); + hessian *= 4.0 * log_prob; + + MR::Math::Matrix hess_part = widths; + hess_part *= -2.0 * log_prob; + hessian += hess_part; + + return log_prob; + + } + + + double Landscape::Peak::gaussian_log_prob(const MCMC::State& point, MCMC::State& gradient, MCMC::State::Tensor& hessian, std::vector& rank3_hessian) { + + MCMC::State disp = point - this->centre; + + MCMC::State widths_mult_disp(ndims); + + MR::Math::mult(widths_mult_disp, widths, disp); + + double exponent = -MR::Math::dot(disp, widths_mult_disp); + + if (exponent > 0) + throw Exception ("Tensor was not a positive definite matrix."); + + double log_prob = height * exp (exponent); + + gradient = widths_mult_disp; + gradient *= -2.0 * log_prob; + + MR::Math::Matrix outer_hess_part = Math::outer(widths_mult_disp, widths_mult_disp); + outer_hess_part *= 4.0 * log_prob; + + MR::Math::Matrix width_hess_part = widths; + width_hess_part *= -2.0 * log_prob; + + hessian = outer_hess_part; + hessian += width_hess_part; + + for (size_t dim_i = 0; dim_i < ndims; dim_i++) { + + rank3_hessian.push_back(MCMC::State::Tensor(point.size())); + + MCMC::State::Tensor& d_hessian = rank3_hessian[dim_i]; + + MR::Math::Matrix outer_hess_part1 = outer_hess_part; + outer_hess_part1 *= -2.0 * widths_mult_disp[dim_i]; + + MR::Math::Matrix outer_hess_part2 = Math::outer(widths.column(dim_i), widths_mult_disp); + outer_hess_part2 += Math::outer(widths_mult_disp, widths.column(dim_i)); + outer_hess_part2 *= 4.0 * log_prob; + + MR::Math::Matrix width_hess_part1 = width_hess_part; + width_hess_part1 *= -2.0 * widths_mult_disp[dim_i]; + + + d_hessian = outer_hess_part1; + d_hessian += outer_hess_part2; + d_hessian += width_hess_part1; + + + } + + return log_prob; + + } + + double Landscape::Peak::pyramid_log_prob(const MCMC::State& point, MCMC::State& gradient) { + + + MCMC::State disp = point - this->centre; + + gradient.resize(ndims); + + double log_prob = MR::Math::abs(height); + + for (size_t dim_i = 0; dim_i < ndims; dim_i++) + log_prob -= MR::Math::abs(disp[dim_i]) * widths(dim_i, dim_i); + + if (log_prob > 0) { + + for (size_t dim_i = 0; dim_i < disp.size(); dim_i++) + gradient[dim_i] = - widths(dim_i, dim_i) * Math::sign(disp[dim_i]); + + gradient *= Math::sign(height); + log_prob *= Math::sign(height); + + } else { + log_prob = 0.0; + gradient.zero(); + } + + return log_prob; + } + + + + std::ostream& operator<< (std::ostream& stream, const Landscape::Peak& peak) { + + stream << "centre: " << peak.centre << ", height: " << peak.height << " type: " << peak.type << ", widths: " << peak.widths << std::endl; + + return stream; + + } + + } + + } + +} diff --git a/src/bts/prob/test/landscape/peak.h b/src/bts/prob/test/landscape/peak.h new file mode 100644 index 0000000..45d7683 --- /dev/null +++ b/src/bts/prob/test/landscape/peak.h @@ -0,0 +1,102 @@ +/* + Copyright 2009 Brain Research Institute, Melbourne, Australia + + Created by Tom Close on 13/03/09. + + This file is part of Bayesian Tractlet Sampling (BTS). + + BTS is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + BTS is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with BTS. If not, see . + + */ + + +#ifndef __bts_prob_testpeaks_peak__ +#define __bts_prob_testpeaks_peak__ + +#include "bts/prob/test/landscape.h" +#include "bts/mcmc/state/tensor.h" + +namespace BTS { + + namespace Prob { + + namespace Test { + + class Landscape::Peak { + + public: + + class Gaussian; + class Pyramid; + class Quartic; + + public: + + const static size_t GAUSSIAN = 0; + const static size_t PYRAMID = 1; + + public: + + class Reader; + class Writer; + + friend class Reader; + friend class Writer; + + protected: + + + size_t type; + size_t ndims; + double height; + MCMC::State centre; + MCMC::State::Tensor widths; + + public: + + Peak() {} + + Peak(size_t ndims, const MCMC::State& centre, const MCMC::State::Tensor& widths, double height, size_t type = GAUSSIAN); + + double log_prob(const MCMC::State& point, MCMC::State& gradient); + + double log_prob(const MCMC::State& point, MCMC::State& gradient, MCMC::State::Tensor& hessian); + + double log_prob(const MCMC::State& point, MCMC::State& gradient, MCMC::State::Tensor& hessian, std::vector& rank3_hessian); + + double gaussian_log_prob(const MCMC::State& point, MCMC::State& gradient) + { MCMC::State::Tensor dummy; return log_prob(point, gradient, dummy); } + + double gaussian_log_prob(const MCMC::State& point, MCMC::State& gradient, MCMC::State::Tensor& hessian); + + double gaussian_log_prob(const MCMC::State& point, MCMC::State& gradient, MCMC::State::Tensor& hessian, std::vector& rank3_hessian); + + double pyramid_log_prob(const MCMC::State& point, MCMC::State& gradient); + + size_t num_dims() const + { return ndims; } + + + friend std::ostream& operator<< (std::ostream& stream, const Peak& peak); + + }; + + } + + } + +} + + +#endif diff --git a/src/bts/prob/test/landscape/peak/reader.h b/src/bts/prob/test/landscape/peak/reader.h new file mode 100644 index 0000000..d6c66fe --- /dev/null +++ b/src/bts/prob/test/landscape/peak/reader.h @@ -0,0 +1,91 @@ +/* + Copyright 2009 Brain Research Institute, Melbourne, Australia + + Created by Tom Close on 13/03/09. + + This file is part of Bayesian Tractlet Sampling (BTS). + + BTS is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + BTS is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with BTS. If not, see . + + */ + + +#ifndef __bts_prob_testpeaks_peak_reader__ +#define __bts_prob_testpeaks_peak_reader__ + +namespace BTS { + + namespace Prob { + + class Test::Landscape::Peak::Reader { + + protected: + + std::ifstream fin; + + public: + + Reader() {} + + Reader(const std::string& location) + { this->open(location); } + + ~Reader() { if (fin.is_open()) this->close(); } + + void open(const std::string& location) + { fin.open(location.c_str()); } + + void close() + { fin.close(); } + + bool next(Peak& peak) { + + std::string line; + bool is_next; + + if (std::getline(fin, line)) { + + std::istringstream line_stream(line); + + line_stream >> peak.type >> peak.ndims >> peak.height; + + peak.centre.resize(peak.ndims); + peak.widths.resize(peak.ndims, peak.ndims); + + for (size_t dim_i = 0; dim_i < peak.ndims; ++dim_i) + line_stream >> peak.centre[dim_i]; + + for (size_t dim_i1 = 0; dim_i1 < peak.ndims; ++dim_i1) + for (size_t dim_i2 = 0; dim_i2 < peak.ndims; ++dim_i2) + line_stream >> peak.widths(dim_i1, dim_i2); + +// line_stream >> peak.centre[X] >> peak.centre[Y] >> peak.width[X] >> peak.width[Y] >> peak.height >> peak.type; + + is_next = true; + + } else + is_next = false; + + + return is_next; + } + + + }; + + } + +} + +#endif diff --git a/src/bts/prob/test/landscape/peak/writer.h b/src/bts/prob/test/landscape/peak/writer.h new file mode 100644 index 0000000..3f7b55d --- /dev/null +++ b/src/bts/prob/test/landscape/peak/writer.h @@ -0,0 +1,76 @@ +/* + Copyright 2009 Brain Research Institute, Melbourne, Australia + + Created by Tom Close on 13/03/09. + + This file is part of Bayesian Tractlet Sampling (BTS). + + BTS is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + BTS is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with BTS. If not, see . + + */ + + +#ifndef __bts_prob_testpeaks_peak_writer__ +#define __bts_prob_testpeaks_peak_writer__ + +namespace BTS { + + namespace Prob { + + + class Test::Landscape::Peak::Writer { + + + protected: + + std::ofstream fout; + + public: + + Writer() {} + + Writer(const std::string& location) + { this->create(location); } + + ~Writer() { if (fout.is_open()) this->close(); } + + void create(const std::string& location) + { fout.open(location.c_str()); } + + void close() + { fout.close(); } + + void append(const Peak& peak) { + + fout << peak.type << " " << peak.ndims << " " << peak.height; + + for (size_t dim_i = 0; dim_i < peak.ndims; ++dim_i) + fout << " " << peak.centre[dim_i]; + + for (size_t dim_i1 = 0; dim_i1 < peak.ndims; ++dim_i1) + for (size_t dim_i2 = 0; dim_i2 < peak.ndims; ++dim_i2) + fout << " " << peak.widths(dim_i1,dim_i2); + + fout << std::endl; + + } + + + }; + + } + +} + +#endif diff --git a/src/bts/prob/uniform.cpp b/src/bts/prob/uniform.cpp new file mode 100644 index 0000000..524c0b0 --- /dev/null +++ b/src/bts/prob/uniform.cpp @@ -0,0 +1,40 @@ +/* + Copyright 2009 Brain Research Institute, Melbourne, Australia + + Created by Tom Close on 13/03/09. + + This file is part of Bayesian Tractlet Sampling (BTS). + + BTS is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + BTS is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with BTS. If not, see . + + */ + +#include +#include "image/header.h" +#include "bts/common.h" + +#include "bts/prob/uniform.h" + +#include "bts/prob/inline_functions.h" + +#include "bts/image/buffer.cpp.h" + +namespace BTS { + + namespace Prob { + + const std::string Uniform::NAME = "uniform"; + + } +} diff --git a/src/bts/prob/uniform.h b/src/bts/prob/uniform.h new file mode 100644 index 0000000..459b3e1 --- /dev/null +++ b/src/bts/prob/uniform.h @@ -0,0 +1,133 @@ +/* + Copyright 2009 Brain Research Institute, Melbourne, Australia + + Created by Tom Close on 13/03/09. + + This file is part of Bayesian Tractlet Sampling (BTS). + + BTS is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + BTS is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with BTS. If not, see . + + */ + + +#ifndef __bts_prob_uniform__ +#define __bts_prob_uniform__ + +#include "bts/prob/likelihood.h" +#include "bts/prob/prior.h" +#include "bts/prob/uniform.h" + +#include "bts/mcmc/state.h" +#include "bts/mcmc/state/tensor.h" + + +namespace BTS { + + namespace Prob { + + //Used as a filler instead of adding any particular prior. + class Uniform { + + public: + + const static std::string NAME; + + public: + + + double get_scalar() + { return 1.0; } + + Uniform* clone() const + { return new Uniform(*this); } + + double log_prob(const Fibre::Strand& strand) + { return 0.0; } + + double log_prob(const Fibre::Tractlet& tractlet) + { return 0.0; } + + double log_prob(const Fibre::Strand::Set& strand) + { return 0.0; } + + double log_prob(const Fibre::Tractlet::Set& tractlet) + { return 0.0; } + + double log_prob(const Fibre::Strand& strand, Fibre::Strand& gradient) + { gradient.zero(); return 0.0; } + + double log_prob(const Fibre::Tractlet& tractlet, Fibre::Tractlet& gradient) + { gradient.zero(); return 0.0; } + + double log_prob(const Fibre::Strand::Set& strand, Fibre::Strand::Set& gradient) + { gradient.zero(); return 0.0; } + + double log_prob(const Fibre::Tractlet::Set& strand, Fibre::Tractlet::Set& gradient) + { gradient.zero(); return 0.0; } + + double log_prob(const MCMC::State& state, MCMC::State& gradient) + { gradient.zero(); return 0.0; } + + double log_prob(const double& f, double& gradient) + { gradient = 0.0; return 0.0; } + + double log_prob_and_fisher(const MCMC::State& state, MCMC::State& gradient, MCMC::State::Tensor& fisher) + { gradient.zero(); fisher.zero(); return 0.0; } + + double log_prob_and_fisher(const MCMC::State& state, MCMC::State& gradient, MCMC::State::Tensor& fisher, std::vector& fisher_gradient) + { gradient.zero(); fisher.zero(); for (size_t i =0; i < fisher_gradient.size(); ++i) fisher_gradient[i] = 0.0; return 0.0; } + + double component_log_prob(const std::string&, const BTS::Fibre::Strand& strand, BTS::Fibre::Strand& gradient) + { gradient.zero(); return 0.0; } + + double component_log_prob(const std::string&, const BTS::Fibre::Strand::Set& strands, BTS::Fibre::Strand::Set& gradient) + { gradient.zero(); return 0.0; } + + double component_log_prob(const std::string&, const BTS::Fibre::Tractlet& tractlet, BTS::Fibre::Tractlet& gradient) + { gradient.zero(); return 0.0; } + + double component_log_prob(const std::string&, const BTS::Fibre::Tractlet::Set& tractlets, BTS::Fibre::Tractlet::Set& gradient) + { gradient.zero(); return 0.0; } + + double log_prob(double expected, double observed) { return 0; } + + + double b0_log_prob(double expected, double observed) { return 0; } + + + double log_prob(double expected, double observed, double& d_lprob) { return 0; } + + + double log_prob(double expected, double observed, double& d_lprob, double& d2_lprob2) { return 0; } + + + + void set_enforce_bounds(bool flag) {} + + std::vector list_components() { return std::vector(); } + + template std::map get_component_values(T& t) { return std::map(); } + + const std::string& get_name() + { return NAME; } + + void set_assumed_snr(double assumed_snr, const std::string& ref_b0, double ref_signal) {} + + }; + + } + +} + +#endif diff --git a/src/bts/triple.cpp b/src/bts/triple.cpp new file mode 100644 index 0000000..07faa4f --- /dev/null +++ b/src/bts/triple.cpp @@ -0,0 +1,50 @@ +/* + Copyright 2008 Brain Research Institute, Melbourne, Australia + + Written by Thomas G Close, 07/08/2010. + + This file is part of MRtrix. + + MRtrix is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + MRtrix is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with MRtrix. If not, see . + +*/ + +#include "bts/triple.h" +#include "bts/coord.h" + +namespace BTS { + + template<> const Triple Triple::Invalid (NAN, NAN, NAN); + template<> const Triple Triple::Zeros (0.0, 0.0, 0.0); + template<> const Triple Triple::Ones(1.0,1.0,1.0); + template<> const Triple Triple::Halves(0.5,0.5,0.5); + + template<> const Triple Triple::Invalid (-999999999, -999999999,-999999999); + template<> const Triple Triple::Zeros (0, 0, 0); + template<> const Triple Triple::Ones(1,1,1); + + template<> const Triple Triple::Invalid (999999999, 999999999, 999999999); + template<> const Triple Triple::Zeros (0, 0, 0); + template<> const Triple Triple::Ones(1,1,1); + + template <> Triple::Triple (const Coord& coord) { + set (coord[0], coord[1], coord[2]); + } + + template <> Triple::Triple (const Coord& coord) { + set (coord[0], coord[1], coord[2]); + } + + +} diff --git a/src/bts/triple.h b/src/bts/triple.h new file mode 100644 index 0000000..b32abf9 --- /dev/null +++ b/src/bts/triple.h @@ -0,0 +1,461 @@ +/* + Copyright 2010 Brain Research Institute/National ICT Australia (NICTA), Melbourne, Australia + + Written by J-Donald Tournier, 27/06/08. + + This file is part of Bayesian Tractlet Sampling (BTS). + + BTS is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + BTS is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with BTS. If not, see . + +*/ + + +#include + +#include "bts/common.h" +#include "bts/coord.h" + +#ifndef __bts_triple_h__ +#define __bts_triple_h__ + +#include + +#include "mrtrix.h" +#include "math/math.h" +#include "math/vector.h" +#include "bts/utilities/reader.h" +#include "bts/utilities/writer.h" + + +namespace BTS { + + + template class Triple { + + public: + + typedef Utilities::Reader > Reader; + typedef Utilities::Writer > Writer; + + template class Tensor_tpl; //Dummy class used to get template functions in Hessian Tester to work; + typedef T Element; + + const static Triple Invalid; + const static Triple Zeros; + const static Triple Halves; + const static Triple Ones; + + const static std::string FILE_EXTENSION; + + + protected: + T p[3]; + + public: + + Triple () + { invalidate(); } + + Triple (T value) + { set(value); } + + Triple (T x_value, T y_value, T z_value) + { set (x_value, y_value, z_value); } + + Triple (const Coord& coord); + + bool operator! () const { return (isnan(p[X]) || isnan(p[Y]) || isnan(p[Z])); } + bool valid () const { return (!(isnan(p[X]) || isnan(p[Y]) || isnan(p[Z]))); } + + T* get () { return (p); } + const T* get () const { return (p); } + void copy_to(double* array) { array[X] = (double)p[X]; array[Y] = (double)p[Y]; array[Z] = (double)p[Z]; } + + Triple& set (T x_value, T y_value, T z_value) { p[X] = x_value; p[Y] = y_value; p[Z] = z_value; return *this; } + Triple& set (const T point[3]) { set(point[X], point[Y], point[Z]); return *this; } + Triple& set (T value) { set(value,value,value); return *this; } + + Triple& zero (); + Triple& invalidate (); + + Triple abs() const { return Triple(fabs(p[X]), fabs(p[Y]), fabs(p[Z]));} + + Triple invert() const { return Triple (1/p[X], 1/p[Y], 1/p[Z]); } + + T& operator[] (int idx) { return (p[idx]); } + const T& operator[] (int idx) const { return (p[idx]); } + + bool operator== (const Triple& A) const; + bool operator!= (const Triple& A) const; + + Triple operator- () const { return (Triple (-p[X], -p[Y], -p[Z])); } + + Triple& operator= (const Triple& A) { p[X] = A[X]; p[Y] = A[Y]; p[Z] = A[Z]; return (*this); } + + + MR::Math::Vector vector() const + { MR::Math::Vector vec(3); vec[X] = p[X]; vec[Y] = p[Y]; vec[Z] = p[Z]; return vec; } + + + void from_vector(const MR::Math::Vector& vec) + { assert(vec.size() == 3); p[X] = vec[X]; p[Y] = vec[Y]; p[Z] = vec[Z]; } + + //Scalar addition, subtraction, multiplication and division. + Triple& operator+= (T inc) { p[X] += inc; p[Y] += inc; p[Z] += inc; return *this; } + Triple& operator-= (T inc) { p[X] -= inc; p[Y] -= inc; p[Z] -= inc; return *this; } + Triple& operator*= (T M) { p[X]*=M; p[Y]*=M; p[Z]*=M; return *this; } + Triple& operator/= (T M) { p[X]/=M; p[Y]/=M; p[Z]/=M; return *this; } + + + Triple operator+ (T M) const { return (Triple (p[X]+M, p[Y]+M, p[Z]+M)); } + Triple operator- (T M) const { return (Triple (p[X]-M, p[Y]-M, p[Z]-M)); } + Triple operator* (T M) const { return (Triple (p[X]*M, p[Y]*M, p[Z]*M)); } + Triple operator/ (T M) const { return (Triple (p[X]/M, p[Y]/M, p[Z]/M)); } + + //Pairwise addition, subtraction, multiplication and division. + Triple operator+ (const Triple& A) const { return Triple (p[X]+A[X], p[Y]+A[Y], p[Z]+A[Z]); } + Triple operator- (const Triple& A) const { return Triple (p[X]-A[X], p[Y]-A[Y], p[Z]-A[Z]); } + Triple operator* (const Triple& A) const { return Triple (p[X]*A[X], p[Y]*A[Y], p[Z]*A[Z]); } + Triple operator/ (const Triple& A) const { return Triple (p[X]/A[X], p[Y]/A[Y], p[Z]/A[Z]); } + + Triple& operator+= (const Triple& A) { p[X] += A[X]; p[Y] += A[Y]; p[Z] += A[Z]; return *this; } + Triple& operator-= (const Triple& A) { p[X] -= A[X]; p[Y] -= A[Y]; p[Z] -= A[Z]; return *this; } + Triple& operator*= (const Triple& A) { p[X] *= A[X]; p[Y] *= A[Y]; p[Z] *= A[Z]; return *this; } + Triple& operator/= (const Triple& A) { p[X] /= A[X]; p[Y] /= A[Y]; p[Z] /= A[Z]; return *this; } + + +// //Scalar addition, subtraction, multiplication and division by doubles. +// template Triple& operator+= (U inc); +// template Triple& operator-= (U inc); +// template Triple& operator*= (U M); +// template Triple& operator/= (U M); +// +// +// template Triple operator+ (U M) const; +// template Triple operator- (U M) const; +// template Triple operator* (U M) const; +// template Triple operator/ (U M) const; + + + bool positive() const { return (p[X] > 0.0) && (p[Y] > 0.0) && (p[Z] > 0.0); } + bool non_negative() const { return (p[X] >= 0.0) && (p[Y] >= 0.0) && (p[Z] >= 0.0); } + bool non_zero() const { return p[X] || p[Y] || p[Z]; } + + template bool upper_bounded(U bound) const { return (p[X] <= (T)bound) && (p[Y] <= (T)bound) && (p[Z] <= (T)bound); } + template bool lower_bounded(U bound) const { return (p[X] >= (T)bound) && (p[Y] >= (T)bound) && (p[Z] >= (T)bound); } + + template bool upper_bounded(const Triple& bound) const { return (p[X] <= (T)bound[X]) && (p[Y] <= (T)bound[Y]) && (p[Z] <= (T)bound[Z]); } + template bool lower_bounded(const Triple& bound) const { return (p[X] >= (T)bound[X]) && (p[Y] >= (T)bound[Y]) && (p[Z] >= (T)bound[Z]); } + + T dot (const Triple& A) const { return (p[X]*A[X] + p[Y]*A[Y] + p[Z]*A[Z]); } + T dot (const Triple& t, Triple& gradient) const; + + T angle(const Triple& t) const; + + T norm2 () const { return (p[X]*p[X] + p[Y]*p[Y] + p[Z]*p[Z]); } + T norm () const { return (sqrt (norm2())); } + + + const Triple& normalise () { MR::Math::normalise (p); return (*this); } + + + Triple cross (const Triple& A) const { return (Triple (p[Y]*A[Z]-p[Z]*A[Y], p[Z]*A[X]-p[X]*A[Z], p[X]*A[Y]-p[Y]*A[X])); } + + Triple min_axis() const { Triple axis(0.0,0.0,0.0); if (fabs(p[X]) < fabs(p[Y])) { if (fabs(p[X]) < fabs(p[Z])) axis[X] = 1.0; else axis[Z] = 1.0; } else if (fabs(p[Y]) < fabs(p[Z])) axis[Y] = 1.0; else axis[Z] = 1.0; return axis; } + + + Triple sign() const { Triple s; for (size_t i = 0; i < 3; ++i) s[i] = p[i] > 0 ? 1 : (p[i] < 0 ? -1 : 0); return s; } + + + //These functions and static members are only required for Fibre::Base::Reader/Writer< Triple > functions. + void clear() {} + + size_t size() const { return 3; } + + void resize(size_t dummy) { assert(dummy == 3); } + + protected: + + explicit Triple (const T point[3]) { set (point); } + + }; + +#include "bts/coord.h" +#include "bts/common.h" + + + template <> inline Triple& Triple::zero() { + memset (p, 0, sizeof(p)); return *this; + } + + template <> inline Triple& Triple::zero() { + memset (p, 0, sizeof(p)); return *this; + } + + template <> inline Triple& Triple::zero() { + memset (p, 0, sizeof(p)); return *this; + } + + template <> inline Triple& Triple::zero() { + memset (p, 0, sizeof(p)); return *this; + } + + + template <> inline Triple& Triple::invalidate() { + p[X] = p[Y] = p[Z] = std::numeric_limits::min(); return *this; + } + + + template <> inline Triple& Triple::invalidate() { + p[X] = p[Y] = p[Z] = std::numeric_limits::max(); return *this; + } + + + template <> inline Triple& Triple::invalidate() { + p[X] = p[Y] = p[Z] = NAN; return *this; + } + + template <> inline Triple& Triple::invalidate() { + p[X] = p[Y] = p[Z] = NAN; return *this; + } + + template std::ostream& operator<< (std::ostream& stream , const Triple& pt) + { + stream << "[ " << pt[X] << ", " << pt[Y] << ", " << pt[Z] << " ]"; + return (stream); + } + + template Triple& Triple::zero() { + + p[X].zero(); + p[Y].zero(); + p[Z].zero(); + + return *this; + } + + template Triple& Triple::invalidate() { + + p[X].invalidate(); + p[Y].invalidate(); + p[Z].invalidate(); + + return *this; + } + + template bool Triple::operator== (const Triple& A) const + { return (p[X] == A[X]) && (p[Y] == A[Y]) && (p[Z] == A[Z]); }; + + template bool Triple::operator!= (const Triple& A) const + { return (p[X] != A[X]) || (p[Y] != A[Y]) || (p[Z] != A[Z]); }; + + + template<> inline bool Triple::operator== (const Triple& A) const + { return (memcmp (p, A.p, sizeof(p)) == 0); }; + + template<> inline bool Triple::operator!= (const Triple& A) const + { return (memcmp (p, A.p, sizeof(p))); }; + + template<> inline bool Triple::operator== (const Triple& A) const + { return (memcmp (p, A.p, sizeof(p)) == 0); }; + + template<> inline bool Triple::operator!= (const Triple& A) const + { return (memcmp (p, A.p, sizeof(p))); }; + + template<> inline bool Triple::operator== (const Triple& A) const + { return (memcmp (p, A.p, sizeof(p)) == 0); }; + + template<> inline bool Triple::operator!= (const Triple& A) const + { return (memcmp (p, A.p, sizeof(p))); }; + + template<> inline bool Triple::operator== (const Triple& A) const + { return (memcmp (p, A.p, sizeof(p)) == 0); }; + + template<> inline bool Triple::operator!= (const Triple& A) const + { return (memcmp (p, A.p, sizeof(p))); }; + + + + template const std::string Triple::FILE_EXTENSION = "trp"; + + template inline Triple operator* (T M, const Triple& P) + { return Triple (P[X]*M, P[Y]*(T)M, P[Z]*(T)M); } + + template inline Triple< Triple > operator* (T M, const Triple< Triple >& t) + { return Triple< Triple > (t[X] * M, t[Y] * M, t[Z] * M); } + + + inline Triple operator+ (const Triple& P, double M) { return Triple (((double)P[X])+M, ((double)P[Y])+M, ((double)P[Z])+M); } + inline Triple operator+ (const Triple& P, double M) { return Triple (((double)P[X])+M, ((double)P[Y])+M, ((double)P[Z])+M); } + inline Triple operator+ (const Triple& P, int M) { return Triple (((int)P[X])+M, ((int)P[Y])+M, ((int)P[Z])+M); } + inline Triple operator+ (int M, const Triple& P) { return Triple (((int)P[X])+M, ((int)P[Y])+M, ((int)P[Z])+M); } + + + inline Triple operator+ (double M, const Triple& P) { return Triple (((double)P[X])+M, ((double)P[Y])+M, ((double)P[Z])+M); } + inline Triple operator+ (double M, const Triple& P) { return Triple (((double)P[X])+M, ((double)P[Y])+M, ((double)P[Z])+M); } + + inline Triple operator+ (int M, const Triple& P) { return Triple (P[X]+(double)M, P[Y]+(double)M, P[Z]+(double)M); } + + inline Triple operator+ (const Triple& f, const Triple& i) { return Triple(f[X] + (double)i[X], f[Y] + (double)i[Y], f[Z] + (double)i[Z] ); } + inline Triple operator+ (const Triple& f, const Triple& ui) { return Triple(f[X] + (double)ui[X], f[Y] + (double)ui[Y], f[Z] + (double)ui[Z] ); } + + inline Triple operator+ (const Triple& i, const Triple& f) { return Triple(f[X] + (double)i[X], f[Y] + (double)i[Y], f[Z] + (double)i[Z] ); } + inline Triple operator+ (const Triple& ui, const Triple& f) { return Triple(f[X] + (double)ui[X], f[Y] + (double)ui[Y], f[Z] + (double)ui[Z] ); } + + inline Triple operator- (const Triple& P, double M) { return Triple (((double)P[X])-M, ((double)P[Y])-M, ((double)P[Z])-M); } + inline Triple operator- (const Triple& P, double M) { return Triple (((double)P[X])-M, ((double)P[Y])-M, ((double)P[Z])-M); } + + + inline Triple operator- (const Triple& f, const Triple& i) { return Triple(f[X] - (double)i[X], f[Y] - (double)i[Y], f[Z] - (double)i[Z] ); } + inline Triple operator- (const Triple& f, const Triple& ui) { return Triple(f[X] - (double)ui[X], f[Y] - (double)ui[Y], f[Z] - (double)ui[Z] ); } + + inline Triple operator- (const Triple& i, const Triple& f) { return Triple(f[X] - (double)i[X], f[Y] - (double)i[Y], f[Z] - (double)i[Z] ); } + inline Triple operator- (const Triple& ui, const Triple& f) { return Triple(f[X] - (double)ui[X], f[Y] - (double)ui[Y], f[Z] - (double)ui[Z] ); } + + + inline Triple operator* (const Triple& P, double M) { return Triple (((double)P[X])*M, ((double)P[Y])*M, ((double)P[Z])*M); } + inline Triple operator* (const Triple& P, double M) { return Triple (((double)P[X])*M, ((double)P[Y])*M, ((double)P[Z])*M); } + + inline Triple operator* (double M, const Triple& P) { return Triple (((double)P[X])*M, ((double)P[Y])*M, ((double)P[Z])*M); } + inline Triple operator* (double M, const Triple& P) { return Triple (((double)P[X])*M, ((double)P[Y])*M, ((double)P[Z])*M); } + + inline Triple operator* (int M, const Triple& P) { return Triple (P[X]*(double)M, P[Y]*(double)M, P[Z]*(double)M); } + + inline Triple operator* (const Triple& f, const Triple& i) { return Triple(f[X] * (double)i[X], f[Y] * (double)i[Y], f[Z] * (double)i[Z] ); } + inline Triple operator* (const Triple& f, const Triple& ui) { return Triple(f[X] * (double)ui[X], f[Y] * (double)ui[Y], f[Z] * (double)ui[Z] ); } + + inline Triple operator* (const Triple& i, const Triple& f) { return Triple(f[X] * (double)i[X], f[Y] * (double)i[Y], f[Z] * (double)i[Z] ); } + inline Triple operator* (const Triple& ui, const Triple& f) { return Triple(f[X] * (double)ui[X], f[Y] * (double)ui[Y], f[Z] * (double)ui[Z] ); } + + + inline Triple operator/ (const Triple& f, const Triple& i) { return Triple(f[X] / (double)i[X], f[Y] / (double)i[Y], f[Z] / (double)i[Z] ); } + inline Triple operator/ (const Triple& f, const Triple& ui) { return Triple(f[X] / (double)ui[X], f[Y] / (double)ui[Y], f[Z] / (double)ui[Z] ); } + + inline Triple operator/ (const Triple& i, const Triple& f) { return Triple(f[X] / (double)i[X], f[Y] / (double)i[Y], f[Z] / (double)i[Z] ); } + inline Triple operator/ (const Triple& ui, const Triple& f) { return Triple(f[X] / (double)ui[X], f[Y] / (double)ui[Y], f[Z] / (double)ui[Z] ); } + +// template Triple operator*(double M, const Triple& t) { return t * M; } + + + //Scalar addition, subtraction, multiplication and division by doubles. + +// +// template <> template <> inline Triple& Triple::operator+= (double inc) { throw Exception("Triple is forbidden from scalar addition with double to avoid accidental use."); } +// template <> template <> inline Triple& Triple::operator-= (double inc) { throw Exception("Triple is forbidden from scalar subtraction with double to avoid accidental use."); } +// template <> template <> inline Triple& Triple::operator*= (double M) { throw Exception("Triple is forbidden from scalar multiplication with double to avoid accidental use."); } +// template <> template <> inline Triple& Triple::operator/= (double M) { throw Exception("Triple is forbidden from scalar division with scalar double to avoid accidental use."); } +// +// template <> template <> inline Triple Triple::operator+ (double M) const { throw Exception("Triple is forbidden from scalar addition with double to avoid accidental use."); } +// template <> template <> inline Triple Triple::operator- (double M) const { throw Exception("Triple is forbidden from scalar subtraction with double to avoid accidental use."); } +// template <> template <> inline Triple Triple::operator* (double M) const { throw Exception("Triple is forbidden from scalar multiplication with double to avoid accidental use."); } +// template <> template <> inline Triple Triple::operator/ (double M) const { throw Exception("Triple is forbidden from scalar division with scalar double to avoid accidental use."); } +// +// template <> template <> inline Triple& Triple::operator+= (double inc) { throw Exception("Triple is forbidden from scalar addition with double to avoid accidental use."); } +// template <> template <> inline Triple& Triple::operator-= (double inc) { throw Exception("Triple is forbidden from scalar subtraction with double to avoid accidental use."); } +// template <> template <> inline Triple& Triple::operator*= (double M) { throw Exception("Triple is forbidden from scalar multiplication with double to avoid accidental use."); } +// template <> template <> inline Triple& Triple::operator/= (double M) { throw Exception("Triple is forbidden from scalar division with scalar double to avoid accidental use."); } +// +// template <> template <> inline Triple Triple::operator+ (double M) const { throw Exception("Triple is forbidden from scalar addition with double to avoid accidental use."); } +// template <> template <> inline Triple Triple::operator- (double M) const { throw Exception("Triple is forbidden from scalar subtraction with double to avoid accidental use."); } +// template <> template <> inline Triple Triple::operator* (double M) const { throw Exception("Triple is forbidden from scalar multiplication with double to avoid accidental use."); } +// template <> template <> inline Triple Triple::operator/ (double M) const { throw Exception("Triple is forbidden from scalar division with scalar double to avoid accidental use."); } +// +// +// template template Triple& Triple::operator+= (U inc) { p[X] += inc; p[Y] += inc; p[Z] += inc; return *this; } +// template template Triple& Triple::operator-= (U inc) { p[X] -= inc; p[Y] -= inc; p[Z] -= inc; return *this; } +// template template Triple& Triple::operator*= (U M) { p[X]*=M; p[Y]*=M; p[Z]*=M; return *this; } +// template template Triple& Triple::operator/= (U M) { p[X]/=M; p[Y]/=M; p[Z]/=M; return *this; } +// +// template template Triple Triple::operator+ (U M) const { return (Triple (p[X]+M, p[Y]+M, p[Z]+M)); } +// template template Triple Triple::operator- (U M) const { return (Triple (p[X]-M, p[Y]-M, p[Z]-M)); } +// template template Triple Triple::operator* (U M) const { return (Triple (p[X]*M, p[Y]*M, p[Z]*M)); } +// template template Triple Triple::operator/ (U M) const { return (Triple (p[X]/M, p[Y]/M, p[Z]/M)); } + + + template inline T dist2 (const Triple& a, const Triple& b) { return ((a-b).norm2()); } + template inline T dist (const Triple& a, const Triple& b) { return ((a-b).norm()); } + + + + + template T Triple::dot (const Triple& t, Triple& gradient) const { + +#ifndef GRADIENT_NOT_REQUIRED + gradient = *this; +#endif + + return dot(t); + + } + + + template T Triple::angle(const Triple& t) const { + + return MR::Math::acos(dot(t)/(norm() * t.norm())); + + } + + + + inline Triple rand_triple(double scale, gsl_rng *rand_gen) { + + Triple triple(0.0,0.0,0.0); + + for (size_t dim_i = 0; dim_i < 3; dim_i++) + triple[dim_i] = (double)gsl_ran_gaussian(rand_gen, scale); + + return triple; + + } + + + template Triple parse_triple(const std::string& s) { + + Triple triple; + + size_t start_number = 0; + size_t end_number; + + size_t dim_i = 0; + + start_number = s.find_first_of("0123456789.-"); + + while (start_number != std::string::npos && (dim_i < 3) ) { + + end_number = s.find_first_not_of("0123456789.-", start_number); + + std::string num_string = s.substr(start_number, end_number-start_number); + + + if (num_string.find_first_of('-', 1) != std::string::npos || num_string.find('.', num_string.find('.')+1) != std::string::npos) // If there is a '-' character anywhere other than the first character, or if there is more than one decimal triple then throw an error. + throw Exception("Coordinate, " + num_string + " at dim: " + str(dim_i+1) + ", is invalid");// + + triple[dim_i] = to(num_string); + + start_number = s.find_first_of("0123456789.-", end_number); + dim_i++; + + } + + if (dim_i != 3) + throw Exception("Incorrect number of values in sequence '" + s +"' for conversion to triple."); + + return triple; + + } + +} + + +#endif diff --git a/src/bts/utilities/common.h b/src/bts/utilities/common.h new file mode 100644 index 0000000..5825d7b --- /dev/null +++ b/src/bts/utilities/common.h @@ -0,0 +1,43 @@ +/* + Copyright 2008 Brain Research Institute, Melbourne, Australia + + Written by Thomas G Close, Aug 12, 2010. + + This file is part of MRtrix. + + MRtrix is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + MRtrix is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with MRtrix. If not, see . + +*/ + +#ifndef bts_utilities_common_h__ +#define bts_utilities_common_h__ + +#include +#include +#include + +namespace BTS { + + namespace Utilities { + + + typedef std::map Properties; + + typedef std::vector Header; + + } + +} + +#endif /* bts_utilities_common_h__ */ diff --git a/src/bts/utilities/inline_functions.h b/src/bts/utilities/inline_functions.h new file mode 100644 index 0000000..1124f9d --- /dev/null +++ b/src/bts/utilities/inline_functions.h @@ -0,0 +1,40 @@ +/* + Copyright 2008 Brain Research Institute, Melbourne, Australia + + Written by Thomas G Close, Aug 12, 2010. + + This file is part of MRtrix. + + MRtrix is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + MRtrix is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with MRtrix. If not, see . + +*/ + +#ifndef __bts_utilities_inlinefunctions_h__ +#define __bts_utilities_inlinefunctions_h__ + +#ifdef __bts_utilities_reader_h__ + +#include "bts/utilities/reader.cpp.h" + +#endif + + +#ifdef __bts_utilities_writer_h__ + +#include "bts/utilities/writer.cpp.h" + +#endif + + +#endif /* __bts_utilities_inlinefunctions_h__ */ diff --git a/src/bts/utilities/reader.cpp.h b/src/bts/utilities/reader.cpp.h new file mode 100644 index 0000000..ee4dbae --- /dev/null +++ b/src/bts/utilities/reader.cpp.h @@ -0,0 +1,81 @@ +/* + Copyright 2008 Brain Research Institute, Melbourne, Australia + + Written by Thomas G Close, 12/08/2010. + + This file is part of MRtrix. + + MRtrix is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + MRtrix is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with MRtrix. If not, see . + +*/ + +#include "bts/utilities/reader.h" +#include "bts/file.h" + +namespace BTS { + + namespace Utilities { + + template void Reader::open(const std::string& location) { + + if (File::is_file(location)) { + + fin.open((location).c_str()); + + if (!fin.good()) + throw Exception("Error opening file '" + location + "'."); + + } else + throw Exception ("No file at location '" + location + "'"); + + } + + + template bool Reader::next(T& state, Properties& properties_row) { + + if (!fin.good()) + throw Exception ("Corrupted utilities file."); + + std::string line; + std::getline(fin, line); + + if (line == "%END") + return false; + + size_t count = 0; + size_t pos = 0; + + while (pos != std::string::npos) { + pos = line.find(' ', pos+1); + count++; + } + + state.resize(count); + + std::istringstream line_stream(line); + + std::string value; + + for (size_t elem_i = 0; elem_i < state.size(); elem_i++) { + std::getline(line_stream, value, ' '); + state[elem_i] = to(value); + } + + return true; + + } + + } + +} diff --git a/src/bts/utilities/reader.h b/src/bts/utilities/reader.h new file mode 100644 index 0000000..52fad4c --- /dev/null +++ b/src/bts/utilities/reader.h @@ -0,0 +1,74 @@ +/* + Copyright 2010 Brain Research Institute, Melbourne, Australia + + Written by Thomas G Close on 16/06/2010. + + This file is part of MRtrix. + + MRtrix is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + MRtrix is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with MRtrix. If not, see . + +*/ + +#ifndef __bts_utilities_reader_h__ +#define __bts_utilities_reader_h__ + +#include "bts/utilities/common.h" + +namespace BTS { + + namespace Utilities { + + template class Reader { + + public: + + std::ifstream fin; + + Reader() {}; + + Reader(const std::string& location, Properties& properties, Header& key_list) + { open(location); } + + Reader(const std::string& location) + { open(location); } + + + ~Reader() + { close(); } + + void open(const std::string& location); + + void open(const std::string& location, const Properties& dummy_properties, const Header& dummy_header) + { open(location); } + + + void close() + { fin.close(); } + + bool next(T& state) + { Properties dummy; return next(state,dummy); } + + bool next(T& state, Properties& properties_row); + + + }; + + + + } + +} + + +#endif /* __bts_utilities_reader_h__ */ diff --git a/src/bts/utilities/writer.cpp.h b/src/bts/utilities/writer.cpp.h new file mode 100644 index 0000000..c2df827 --- /dev/null +++ b/src/bts/utilities/writer.cpp.h @@ -0,0 +1,65 @@ +/* + Copyright 2008 Brain Research Institute, Melbourne, Australia + + Written by Thomas G Close, 12/08/2010. + + This file is part of MRtrix. + + MRtrix is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + MRtrix is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with MRtrix. If not, see . + +*/ + +#include "bts/utilities/writer.h" +#include "bts/file.h" + + +namespace BTS { + + namespace Utilities { + + + template void Writer::create(const std::string& location) { + + fout.open((location).c_str()); + + if (!fout.good()) + throw Exception("Error opening file '" + location + "'."); + + fout << "%END\n"; + fout.flush(); + + } + + + template void Writer::append(const T& state) { + + if (state.size()) { + + off64_t start_pos = fout.tellp(); + start_pos -= sizeof("%END\n")-1; + fout.seekp(start_pos); + + for (size_t elem_i = 0; elem_i < state.size()-1; ++elem_i) + fout << state[elem_i] << " "; + + fout << state[state.size()-1] << "\n%END\n"; + fout.flush(); + + } else + throw Exception ("No elements found in state."); + } + + } + +} diff --git a/src/bts/utilities/writer.h b/src/bts/utilities/writer.h new file mode 100644 index 0000000..e3d7955 --- /dev/null +++ b/src/bts/utilities/writer.h @@ -0,0 +1,108 @@ +/* + Copyright 2010 Brain Research Institute, Melbourne, Australia + + Written by Thomas G Close on 16/06/2010. + + This file is part of MRtrix. + + MRtrix is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + MRtrix is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with MRtrix. If not, see . + +*/ + +#ifndef __bts_utilities_writer_h__ +#define __bts_utilities_writer_h__ + +#include "bts/utilities/common.h" + +namespace BTS { + + namespace Utilities { + + template class Writer { + + public: + + std::ofstream fout; + + Writer() {}; + + Writer(const std::string& location) + { create(location); } + + template Writer( const std::string& location, + const U& template_or_reader, + const std::map& properties = std::map()) + { create(location); } + + template Writer( const std::string& location, + const U& template_or_reader, + const Header& key_list, + const std::map& properties = std::map()) + { create(location); } + + + template Writer( const std::string& location, + const U& template_or_reader, + const Header& key_list, + const Header& elem_key_list, + const std::map& properties = std::map()) + { create(location); } + + ~Writer() + { close(); } + + //!Used in template functions, ignores properties. + template void create( const std::string& location, + const U& template_or_reader, + const std::map& properties = std::map()) + { create(location); } + + template void create( const std::string& location, + const U& template_or_reader, + const Header& key_list, + const std::map& properties = std::map()) + { create(location); } + + + template void create( const std::string& location, + const U& template_or_reader, + const Header& key_list, + const Header& elem_key_list, + const std::map& properties = std::map()) + { create(location); } + + + + void create(const std::string& location); + + void close() + { fout.close(); } + + //!Used in template functions, ignores properties. + void append(const T& state, std::map& properties_row) + { append(state); } + + void append(const T& state); + + + }; + + + + } + +} + + +#endif /* __bts_utilities_writer_h__ */ diff --git a/src/bts/version.h b/src/bts/version.h new file mode 100644 index 0000000..c723d5c --- /dev/null +++ b/src/bts/version.h @@ -0,0 +1,93 @@ +/* + Copyright 2008 Brain Research Institute, Melbourne, Australia + + Written by Thomas G Close, 18/02/2011. + + This file is part of MRtrix. + + MRtrix is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + MRtrix is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with MRtrix. If not, see . + +*/ + +#ifndef __bts_version_h__ +#define __bts_version_h__ + +namespace BTS { + + const size_t BTS_MAJOR_VERSION = 0; + const size_t BTS_MINOR_VERSION = 0; + const size_t BTS_MICRO_VERSION = 3; + const size_t BTS_NANO_VERSION = 23; + + inline std::string version_number_string() + { return str(BTS_MAJOR_VERSION) + "." + str(BTS_MINOR_VERSION) + "." + str(BTS_MICRO_VERSION) + "." + str(BTS_NANO_VERSION); } + + inline bool before_version (const std::string& version_number_string, size_t major_version, size_t minor_version = 0, size_t micro_version = 0, size_t nano_version = 0) { + + if (!version_number_string.size()) + return true; //If version number is not present assume that it is from an early version (or MRtrix). + + bool is_before = false; + + size_t major_dot_index = version_number_string.find("."); + size_t read_major = to(version_number_string.substr(0,major_dot_index)); + + if (read_major > major_version) + is_before = false; + + else if (read_major < major_version) + is_before = true; + + else { + + size_t minor_dot_index = version_number_string.find(".", major_dot_index + 1); + size_t read_minor = to(version_number_string.substr(major_dot_index + 1, minor_dot_index)); + + if (read_minor > minor_version) + is_before = false; + else if (read_minor < minor_version) + is_before = true; + else { + + size_t micro_dot_index = version_number_string.find(".", minor_dot_index + 1); + size_t read_micro = to(version_number_string.substr(minor_dot_index + 1, micro_dot_index)); + + if (read_micro > micro_version) + is_before = false; + else if (read_micro < micro_version) + is_before = true; + else { + + size_t nano_dot_index = version_number_string.find(".", micro_dot_index + 1); + size_t read_nano = to(version_number_string.substr(micro_dot_index + 1, nano_dot_index)); + + if (read_nano < nano_version) + is_before = true; + else + is_before = false; + + } + + + } + + } + + return is_before; + + } + +} + +#endif /* __bts_version_h__ */ diff --git a/src/k_means/KCtree.cpp b/src/k_means/KCtree.cpp new file mode 100644 index 0000000..5662004 --- /dev/null +++ b/src/k_means/KCtree.cpp @@ -0,0 +1,832 @@ +//---------------------------------------------------------------------- +// File: KCtree.cc +// Programmer: David Mount +// Last modified: 08/10/2005 +// Description: Old methods for kc-trees. +//---------------------------------------------------------------------- +// Copyright (C) 2004-2005 David M. Mount and University of Maryland +// All Rights Reserved. +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or (at +// your option) any later version. See the file Copyright.txt in the +// main directory. +// +// The University of Maryland and the authors make no representations +// about the suitability or fitness of this software for any purpose. +// It is provided "as is" without express or implied warranty. +//---------------------------------------------------------------------- + +#include "k_means/KCtree.h" // kc-tree declarations +#include "k_means/KMfilterCenters.h" // center set structure +#include "k_means/KMrand.h" // random number includes + +#include +#include + +//---------------------------------------------------------------------- +// Declaration of local utilities. These are used in getNeighbors(). +//---------------------------------------------------------------------- +static int closestToBox( // get closest point to box center + KMctrIdxArray cands, // candidates for closest + int kCands, // number of candidates + KMorthRect &bnd_box); // bounding box of cell + +static bool pruneTest( // test whether to prune candidate + KMcenter cand, // candidate to test + KMcenter closeCand, // closest candidate + KMorthRect &bnd_box); // bounding box + +static void postNeigh( // assign neighbors to center + KCptr p, // the node posting + KMpoint sum, // the sum of coordinates + double sumSq, // the sum of squares + int n_data, // number of points + KMctrIdx ctrIdx); // center index + +//---------------------------------------------------------------------- +// KCtree constructors +// There is a skeleton kc-tree constructor which does (almost) +// all the initialization, without actually building the tree. +// The arguments are essentially the same as the constructor +// for the kc-tree. The last argument (pi) is an optional array +// for the point indices. Normally, this will be NULL (meaning +// that the constructor should initialize the array of indices), +// but for the load constructor the point indices will be set +// created and passesd through this argument. +//---------------------------------------------------------------------- + +void KCtree::skeletonTree( // construct skeleton tree + KMdataArray pa, // point array (with at least n pts) + int n, // number of points + int dd, // dimension + int n_max, // maximum number of points (optional) + KMpoint bb_lo, // bounding box low point (optional) + KMpoint bb_hi, // bounding box high point (optional) + KMdatIdxArray pi) // point indices (optional) +{ + // initialize basic elements + dim = dd; // dimension + n_pts = n; // number of points + if (n_max < n) n_max = n; // max_pts must be >= n + max_pts = n_max; // set max_pts + + if (pa == NULL) { // no points supplied? + kmError("Points must be supplied to construct tree.", KMabort); + } + pts = pa; // initialize point array + + if (pi == NULL) { // point indices provided? + pidx = new KMdataIdx[max_pts]; // no, allocate them + for (int i = 0; i < n; i++) // initialize to identity + pidx[i] = i; + } + else pidx = pi; // yes, just use them + + + if (bb_lo == NULL || bb_hi == NULL) // boundng box fully specified? + kmEnclRect(pa, pidx, n, dd, bnd_box); // no, construct from points + // save bounding box + if (bb_lo != NULL) // if lower point given, then use it + bnd_box.lo = kmAllocCopyPt(dd, bb_lo); + + if (bb_hi != NULL) // same for upper point + bnd_box.hi = kmAllocCopyPt(dd, bb_hi); + + root = NULL; // no associated tree yet +} + +//---------------------------------------------------------------------- +// OldGlobals - global variables +// To prevent long argument lists in a number of the tree traversal +// programs, we store a number of common global variables here. +// In the case of construction, these are initialized before +// calling buildKcTree. They are used in getNeighbors() and by +// sampleCtr(). +//---------------------------------------------------------------------- + +int kcDim; // dimension of space +int kcDataSize; // number of data points +KMdataArray kcPoints; // data points + +//---------------------------------------------------------------------- +// initOldGlobals - initialize basic globals +//---------------------------------------------------------------------- + +static void initOldGlobals( // initialize basic globals + int dim, // dimension + int data_size, // number of data points + KMdataArray data_pts) // data points +{ + kcDim = dim; + kcDataSize = data_size; + kcPoints = data_pts; +} + +//---------------------------------------------------------------------- +// kc-tree constructor +// This is the main constructor for kc-trees given a set of +// points. It first builds a skeleton tree, then computes the +// bounding box, and then invokes buildKcTree() to actually +// build the tree. It passes in the appropriate splitting +// routine. +// +// The constructor has a number of optional arguments. +// +// n_max Max number of points. (default: n). +// bb_lo, bb_hi Bounding box low and high points (default: +// compute bounding box from points). +// +// As long as the number of points is nonzero, or if a bounding +// box is provided, then the constructor will build a tree with +// at least one node (even an empty leaf). Otherwise, it returns +// with a null tree. +// +// Under the current implementation, point insertion generates +// leaf nodes with a bucket size of 1. If the requested bucket +// size is higher, and it looks like insertion is requested, then +// we generate a warning message. +//---------------------------------------------------------------------- + +KCtree::KCtree( // construct from point array + KMdataArray pa, // point array (with at least n pts) + int n, // number of points + int dd, // dimension + int n_max, // maximum number of points (optional) + KMpoint bb_lo, // bounding box low point (optional) + KMpoint bb_hi) : // bounding box high point (optional) + bnd_box(dd) // create initial bounding box +{ + // set up the basic stuff + skeletonTree(pa, n, dd, n_max, bb_lo, bb_hi, NULL); + initOldGlobals(dd, n, pa); // initialize globals + + root = buildKcTree(pa, pidx, n, dd, bnd_box); + + int ignoreMe1; // ignore results of call + KMpoint ignoreMe2; + double ignoreMe3; + // compute sums + root->makeSums(ignoreMe1, ignoreMe2, ignoreMe3); + assert(ignoreMe1 == n); // should be all the points +} + +//---------------------------------------------------------------------- +// buildKcTree - recursive procedure to build a kc-tree +// Builds a kc-tree for points in pa as indexed through the array +// pidx[0..n-1] (typically a subarray of the array used in the +// top-level call). This routine permutes the array pidx, but does +// not alter pa[]. +// +// The construction is based on a standard algorithm for +// constructing the kc-tree (see Friedman, Bentley, and Finkel, +// ``An algorithm for finding best matches in logarithmic expected +// time,'' ACM Transactions on Mathematical Software, 3(3):209-226, +// 1977). The procedure operates by a simple divide-and-conquer +// strategy, which determines an appropriate orthogonal cutting +// plane (see below), and splits the points. When the number of +// points falls below 1, we simply store the points in a leaf +// node's bucket. +// +// This procedure selects a cutting dimension and cutting value, +// partitions pa about these values, and returns the number of +// points on the low side of the cut. +// +// Note that this procedure is not only used for constructing full +// trees, but is also used by the insertion routine to rebuild a +// subtree. +// +//---------------------------------------------------------------------- + +KCptr KCtree::buildKcTree( // recursive construction of kc-tree + KMdataArray pa, // point array + KMdatIdxArray pidx, // point indices to store in subtree + int n, // number of points + int dim, // dimension of space + KMorthRect &bnd_box) // bounding box for current node +{ + if (n <= 1) { // n small, make a leaf node + return new KCleaf(dim, bnd_box, n, pidx); + } + else { // n large, make a splitting node + int cd; // cutting dimension + KMcoord cv; // cutting value + int n_lo; // number on low side of cut + KCptr lo, hi; // low and high children + + // invoke splitting procedure + sl_midpt_split(pa, pidx, bnd_box, n, dim, cd, cv, n_lo); + + KMcoord lv = bnd_box.lo[cd]; // save bounds for cutting dimension + KMcoord hv = bnd_box.hi[cd]; + + bnd_box.hi[cd] = cv; // modify bounds for left subtree + lo = buildKcTree( // build left subtree + pa, pidx, n_lo, // ...from pidx[0..n_lo-1] + dim, bnd_box); + bnd_box.hi[cd] = hv; // restore bounds + + bnd_box.lo[cd] = cv; // modify bounds for right subtree + hi = buildKcTree( // build right subtree + pa, pidx + n_lo, n-n_lo,// ...from pidx[n_lo..n-1] + dim, bnd_box); + bnd_box.lo[cd] = lv; // restore bounds + + // create the splitting node + KCsplit *ptr = new KCsplit(dim, bnd_box, cd, cv, + lv, hv, lo, hi); + return ptr; // return pointer to this node + } +} + +//---------------------------------------------------------------------- +// cellMidpt - return bounding box midpoint +// The result is returned by modifying the argument. +// getPoint - return point in a leaf cell +// If the leaf cell has no point, then NULL is returned. +// (This cannot be inlined in KCtree.h because of reference +// to thePoints.) +//---------------------------------------------------------------------- + +void KCnode::cellMidpt( // compute cell midpoint + KMpoint pt) // the midpoint (returned) +{ + for (int d = 0; d < kcDim; d++) { // compute box midpoint + pt[d] = (bnd_box.lo[d] + bnd_box.hi[d])/2; + } +} + +KMpoint KCleaf::getPoint() // get data point +{ return (n_data == 1 ? kcPoints[bkt[0]] : NULL); } + + +//---------------------------------------------------------------------- +// kc-tree make sums (part of constructor) +// Computes the sums of points for each node of the kc-tree, +// and the sums of squares (the sums of dot products of each +// point with itself). These values are returned through the +// arguments. +// +// The sum of points is assumed to have been allocated as part +// of the constructor, and hence already exists. +//---------------------------------------------------------------------- + +void KCsplit::makeSums( + int &n, // number of points (returned) + KMpoint &theSum, // sum (returned) + double &theSumSq) // sum of squares (returned) +{ + assert(sum != NULL); // should already be allocated + int n_child = 0; // n_data of child + KMpoint s_child = NULL; // sum of child + double ssq_child = 0; // sum of squares for child + + n_data = 0; // initialize no. points + // process each child + for (int i = KM_LO; i <= KM_HI; i++) { + // visit low child + child[i]->makeSums(n_child, s_child, ssq_child); + n_data += n_child; // increment no. points + for (int d = 0; d < kcDim; d++) { // update sum and sumSq + sum[d] += s_child[d]; + } + sumSq += ssq_child; + } + n = n_data; // return results + theSum = sum; + theSumSq = sumSq; +} + +//---------------------------------------------------------------------- +void KCleaf::makeSums( + int &n, // number of points (returned) + KMpoint &theSum, // sum (returned) + double &theSumSq) // sum of squares (returned) +{ + assert(sum != NULL); // should already be allocated + + sumSq = 0; + for (int i = 0; i < n_data; i++) { // compute sum + for (int d = 0; d < kcDim; d++) { + KMcoord theCoord = kcPoints[bkt[i]][d]; + sum[d] += theCoord; + sumSq += theCoord * theCoord; + } + } + + n = n_data; // return results + theSum = sum; + theSumSq = sumSq; +} + +//---------------------------------------------------------------------- +// kc-tree destructors - deletes kc-tree +// (The other elements of the underlying kd-tree are deleted along +// with the base class.) +// +// Because of our "dirty trick" of recasting all child pointers +// to type KCptr (from KMkd_ptr), we must be careful to not +// allow the kd-tree constructors apply themselves recursively +// to the child nodes. We do this by setting the child pointers +// to NULL after deleting them, which keeps the KMkd_split +// destructor from activating itself. +//---------------------------------------------------------------------- + +KCtree::~KCtree() // tree destructor +{ + if (root != NULL) delete root; + if (pidx != NULL) delete [] pidx; +} + +KCnode::~KCnode() // node destructor +{ + if (sum != NULL) kmDeallocPt(sum); // deallocate sum +} + +//---------------------------------------------------------------------- +// Sample a center point +// This implements an approach suggested by Matoushek for sampling +// a center point. A node of the kd-tree is selected at random. +// If this is an interior node, a point is sampled uniformly from a +// 3x expansion of the cell about its center. If the node is a +// leaf, then a data point is sampled at random from the associated +// bucket. +// +// Here is how sampling is done from an interior node. Let m +// denote the number of data points descended from this node. Then +// with probability 1/(2m-1), this cell is chosen. Otherwise, let +// mL and mR denote the number of points associated with the left +// and right subtrees, respectively. We sample from the left +// subtree with probability (2mL-1)/(2m-1) and sample from the +// right subtree with probability (2mR-1)/(2m-1). +// +// The rationale is that, assuming there is exactly one point per +// leaf node, a subtree with m points has exactly 2m-1 total nodes. +// (This should be true for this implementation, but it depends in +// general on the fact that there is exactly one point per leaf +// node.) Hence the root should be sampled with probability +// 1/(2m-1), and the subtrees should be sampled with the given +// probabilities. +//---------------------------------------------------------------------- + +void KCtree::sampleCtr(KMpoint c) // sample a point +{ + initOldGlobals(dim, n_pts, pts); // initialize globals + // _todo_ bb_save check is just for debugging. + KMorthRect bb_save(dim, bnd_box); // save bounding box + root->sampleCtr(c, bnd_box); // start at root + for (int i = 0; i < dim; i++) { // check that bnd_box unchanged + assert(bb_save.lo[i] == bnd_box.lo[i] && + bb_save.hi[i] == bnd_box.hi[i]); + } +} + +void KCsplit::sampleCtr( // sample from splitting node + KMpoint c, // the sampled point (returned) + KMorthRect &bnd_box) // bounding box for current node +{ + int r = kmRanInt(n_nodes()); // random integer [0..n_nodes-1] + if (r == 0) { // sample from this node + KMorthRect expBox(kcDim); + bnd_box.expand(kcDim, 3, expBox); // compute 3x expanded box + expBox.sample(kcDim, c); // sample c from box + } + else if (r <= child[KM_LO]->n_nodes()) { // sample from left + KMcoord save = bnd_box.hi[cut_dim]; // save old upper bound + bnd_box.hi[cut_dim] = cut_val; // modify for left subtree + child[KM_LO]->sampleCtr(c, bnd_box); + bnd_box.hi[cut_dim] = save; // restore upper bound + } + else { // sample from right subtree + KMcoord save = bnd_box.lo[cut_dim]; // save old lower bound + bnd_box.lo[cut_dim] = cut_val; // modify for right subtree + child[KM_HI]->sampleCtr(c, bnd_box); + bnd_box.lo[cut_dim] = save; // restore lower bound + } +} + +void KCleaf::sampleCtr( // sample from leaf node + KMpoint c, // the sampled point (returned) + KMorthRect &bnd_box) // bounding box for current node +{ + int ri = kmRanInt(n_data); // generate random index + kmCopyPt(kcDim, kcPoints[bkt[ri]], c); // copy to destination +} + +//---------------------------------------------------------------------- +// Printing the kc-tree +// These routines print a kc-tree in reverse inorder (high then +// root then low). (This is so that if you look at the output +// from the right side it appear from left to right in standard +// inorder.) When outputting leaves we output only the point +// indices rather than the point coordinates. There is an option +// to print the point coordinates separately. +// +// The tree printing routine calls the printing routines on the +// individual nodes of the tree, passing in the level or depth +// in the tree. The level in the tree is used to print indentation +// for readability. +//---------------------------------------------------------------------- + +void KCsplit::print( // print splitting node + int level) // depth of node in tree +{ + // print high child + child[KM_HI]->print(level+1); + + *kmOut << " "; // print indentation + for (int i = 0; i < level; i++) + *kmOut << "."; + + kmOut->precision(4); + *kmOut << "Split" // print without address + << " cd=" << cut_dim << " cv=" << setw(6) << cut_val + << " nd=" << n_data + << " sm="; kmPrintPt(sum, kcDim, true); + *kmOut << " ss=" << sumSq << "\n"; + // print low child + child[KM_LO]->print(level+1); +} + +//---------------------------------------------------------------------- +void KCleaf::print( // print leaf node + int level) // depth of node in tree +{ + *kmOut << " "; + for (int i = 0; i < level; i++) // print indentation + *kmOut << "."; + + // *kmOut << "Leaf <" << (void*) this << ">"; + *kmOut << "Leaf"; // print without address + *kmOut << " n=" << n_data << " <"; + for (int j = 0; j < n_data; j++) { + *kmOut << bkt[j]; + if (j < n_data-1) *kmOut << ","; + } + *kmOut << ">" + << " sm="; kmPrintPt(sum, kcDim, true); + *kmOut << " ss=" << sumSq << "\n"; +} + +//---------------------------------------------------------------------- +void KCtree::print( // print entire tree + bool with_pts) // print points as well? +{ + if (with_pts) { // print point coordinates + *kmOut << " Points:\n"; + for (int i = 0; i < n_pts; i++) { + *kmOut << "\t" << i << ": "; + kmPrintPt(pts[i], kcDim, true); + *kmOut << "\n"; + } + } + if (root == NULL) // empty tree? + *kmOut << " Null tree.\n"; + else { + root->print(0); // invoke printing at root + } +} + +//---------------------------------------------------------------------- +// DistGlobals - globals used in computing distortions +// To prevent long argument lists in the computation of +// distortions, we store a number of common global variables here. +// These are initialized in KCtree::getNeighbors. +// +// Note: kcDim and kcPoints (from Old Globals) are used as well. +//---------------------------------------------------------------------- + +int kcKCtrs; // number of centers +int* kcWeights; // weights of each point +KMpointArray kcCenters; // the center points +KMpointArray kcSums; // sums +double* kcSumSqs; // sum of squares +double* kcDists; // distortions +KMpoint kcBoxMidpt; // bounding-box midpoint + +//---------------------------------------------------------------------- +// initDistGlobals - initialize distortion globals +//---------------------------------------------------------------------- + +static void initDistGlobals( // initialize distortion globals + KMfilterCenters& ctrs) // the centers +{ + initOldGlobals(ctrs.getDim(), ctrs.getNPts(), ctrs.getDataPts()); + kcKCtrs = ctrs.getK(); + kcCenters = ctrs.getCtrPts(); // get ptrs to KMcenter arrays + kcWeights = ctrs.getWeights(false); + kcSums = ctrs.getSums(false); + kcSumSqs = ctrs.getSumSqs(false); + kcDists = ctrs.getDists(false); + kcBoxMidpt = kmAllocPt(kcDim); + + for (int j = 0; j < kcKCtrs; j++) { // initialize sums + kcWeights[j] = 0; + kcSumSqs[j] = 0; + for (int d = 0; d < kcDim; d++) { + kcSums[j][d] = 0; + } + } +} + +static void deleteDistGlobals() // delete distortion globals +{ + kmDeallocPt(kcBoxMidpt); +} + +//---------------------------------------------------------------------- +// getNeighbors - get neighbors for each candidate +// This is the heart of the filter-based k-means algorithm. It is +// given an array of centers (ctrs) and an array of center sums +// (sums), and an array of sums of squares (sumSqs). All three +// arrays consist of k points. It computes the sum, sum of +// squares, and weights of all the neighbors of each center, and +// stores the results in these arrays. From these quantities, the +// final centroid and distortion (mean squared error) can be +// computed. +// +// This is done by determining the set of candidates for each node +// in the kc-tree. When the number of candidates for a node is +// equal to 1 (it cannot be 0) then all of the points in the +// subtree rooted at this node are assigned as neighbors to this +// center. This means that the centroid and weight for this cell +// is added into the neighborhood centroid sum for this center. If +// this node is a leaf, then we compute (by brute-force) the +// distance from each candidate to each data point, and assign the +// data point to the closest center. +// +// The key to pruning the set of candidates for each node is +// handled by two functions. The function nearCand() finds the +// candidate that is nearest to the midpoint of the cell. The +// function pruneTest() determines whether another candidate is +// close enough to the cell to be closer to some part of the cell +// than the nearest candidate. +//---------------------------------------------------------------------- + +void KCtree::getNeighbors( // compute neighbors for centers + KMfilterCenters& ctrs) // the centers +{ + initDistGlobals(ctrs); // initialize globals + int *candIdx = new int[kcKCtrs]; // allocate center indices + for (int j = 0; j < kcKCtrs; j++) { // initialize everything + candIdx[j] = j; // initialize indices + } + root->getNeighbors(candIdx, kcKCtrs); // get neighbors for tree + delete [] candIdx; // delete center indices + deleteDistGlobals(); // delete globals +} + +//---------------------------------------------------------------------- +void KCsplit::getNeighbors( // get neighbors for internal node + KMctrIdxArray cands, // candidate centers + int kCands) // number of centers +{ + if (kCands == 1) { // only one cand left? + // post points as neighbors + postNeigh(this, sum, sumSq, n_data, cands[0]); + } + else { + // get closest cand to box + int cc = closestToBox(cands, kCands, bnd_box); + KMctrIdx closeCand = cands[cc]; // closest candidate index + // space for new candidates + KMctrIdxArray newCands = new KMctrIdx[kCands]; + int newK = 0; // number of new candidates + for (int j = 0; j < kCands; j++) { + if (j == cc || !pruneTest( // is candidate close enough? + kcCenters[cands[j]], + kcCenters[closeCand], + bnd_box)) { + newCands[newK++] = cands[j]; // yes, keep it + } + } + // apply to children + child[KM_LO]->getNeighbors(newCands, newK); + child[KM_HI]->getNeighbors(newCands, newK); + delete [] newCands; // delete new candidates + } +} + +//---------------------------------------------------------------------- +void KCleaf::getNeighbors( // get neighbors for leaf node + KMctrIdxArray cands, // candidate centers + int kCands) // number of centers +{ + if (kCands == 1) { // only one cand left? + // post points as neighbors + postNeigh(this, sum, sumSq, n_data, cands[0]); + } + else { // find closest centers + for (int i = 0; i < n_data; i++) { // for each point in bucket + KMdist minDist = KM_DIST_INF; // distance to nearest point + int minK = 0; // index of this point + KMpoint thisPt = kcPoints[bkt[i]]; // this data point + + for (int j = 0; j < kCands; j++) { // compute closest candidate + KMdist dist = kmDist(kcDim, kcCenters[cands[j]], thisPt); + if (dist < minDist) { // best so far? + minDist = dist; // yes, save it + minK = j; // ...and its index + } + } + postNeigh(this, kcPoints[bkt[i]], sumSq, 1, cands[minK]); + } + } +} + +//---------------------------------------------------------------------- +// getAssignments +// This determines the assignments of the closest center to each of +// the data points. It is basically a structural copy of the +// procedure getNeighbors, but rather than incrementing the various +// sums and sums of squares, it simply records the assignment of +// each data point to its closest center. Unlike the filtering +// search, when only one candidate remains, it does not stop the +// search, but continues to traverse all the leaves descended from +// this node in order to perform the assignments. +//---------------------------------------------------------------------- + +void KCtree::getAssignments( // compute assignments for points + KMfilterCenters& ctrs, // the current centers + KMctrIdxArray closeCtr, // closest center per point + double* sqDist) // sq'd distance to center +{ + initDistGlobals(ctrs); // initialize globals + + int *candIdx = new int[kcKCtrs]; // allocate center indices + for (int j = 0; j < kcKCtrs; j++) { // initialize everything + candIdx[j] = j; // initialize indices + } + // search the tree + root->getAssignments(candIdx, kcKCtrs, closeCtr, sqDist); + delete [] candIdx; // delete center indices + deleteDistGlobals(); // delete globals +} + +//---------------------------------------------------------------------- +void KCsplit::getAssignments( // get assignments for internal node + KMctrIdxArray cands, // candidate centers + int kCands, // number of centers + KMctrIdxArray closeCtr, // closest center per point + double* sqDist) // sq'd distance to center +{ + if (kCands == 1) { // only one cand left? + // no more pruning needed + child[KM_LO]->getAssignments(cands, kCands, closeCtr, sqDist); + child[KM_HI]->getAssignments(cands, kCands, closeCtr, sqDist); + } + else { + // get closest cand to box + int cc = closestToBox(cands, kCands, bnd_box); + KMctrIdx closeCand = cands[cc]; // closest candidate index + // space for new candidates + KMctrIdxArray newCands = new KMctrIdx[kCands]; + int newK = 0; // number of new candidates + for (int j = 0; j < kCands; j++) { + if (j == cc || !pruneTest( // is candidate close enough? + kcCenters[cands[j]], + kcCenters[closeCand], + bnd_box)) { + newCands[newK++] = cands[j]; // yes, keep it + } + } + // apply to children + child[KM_LO]->getAssignments(newCands, newK, closeCtr, sqDist); + child[KM_HI]->getAssignments(newCands, newK, closeCtr, sqDist); + delete [] newCands; // delete new candidates + } +} + +//---------------------------------------------------------------------- +void KCleaf::getAssignments( // get assignments for leaf node + KMctrIdxArray cands, // candidate centers + int kCands, // number of centers + KMctrIdxArray closeCtr, // closest center per point + double* sqDist) // sq'd distance to center +{ + for (int i = 0; i < n_data; i++) { // for each point in bucket + KMdist minDist = KM_DIST_INF; // distance to nearest point + int minK = 0; // index of this point + KMpoint thisPt = kcPoints[bkt[i]]; // this data point + + for (int j = 0; j < kCands; j++) { // compute closest candidate + KMdist dist = kmDist(kcDim, kcCenters[cands[j]], thisPt); + if (dist < minDist) { // best so far? + minDist = dist; // yes, save it + minK = j; // ...and its index + } + } + if (closeCtr != NULL) closeCtr[bkt[i]] = cands[minK]; + if (sqDist != NULL) sqDist[bkt[i]] = minDist; + } +} + +//---------------------------------------------------------------------- +// Local utilities +//---------------------------------------------------------------------- + +//---------------------------------------------------------------------- +// closestToBox - compute the closest point to the box +// This procedure is given a list of candidates (cands), the number +// of candidates (kCands), and a cell (bnd_box), and returns the +// index (in cands) of the element of cands that is closest to the +// midpoint of the cell. The global variable kcBoxMidpt is used to +// store the cell midpoint. +//---------------------------------------------------------------------- + +static int closestToBox( // get closest point to box center + KMctrIdxArray cands, // candidates for closest + int kCands, // number of candidates + KMorthRect &bnd_box) // bounding box of cell +{ + for (int d = 0; d < kcDim; d++) { // compute midpoint + kcBoxMidpt[d] = (bnd_box.lo[d] + bnd_box.hi[d])/2; + } + + KMdist minDist = KM_DIST_INF; // distance to nearest point + int minK = 0; // index of this point + + for (int j = 0; j < kCands; j++) { // compute dist to each point + KMdist dist = kmDist(kcDim, kcCenters[cands[j]], kcBoxMidpt); + if (dist < minDist) { // best so far? + minDist = dist; // yes, save it + minK = j; // ...and its index + } + } + return minK; // return closest index +} + +//---------------------------------------------------------------------- +// pruneTest - determine whether a point should be pruned +// This procedure is given a cell of the kc-tree (bnd_box or B), +// and candidate (cand or c) and the closest candidate to the +// cell (closeCand or c'). It determines whether the entire +// cell is closer to c' than it is to c. +// +// The procedure works by considering the relationship between +// two vectors. Let (a.b) denote the dot product of vectors a +// and b. Observe that a point p is closer c than to c' if and +// only if +// +// (p-c).(p-c) < (p-c').(p-c') +// +// after simple manipulations this is true if and only if +// +// (c-c').(c-c') < 2(p-c').(c-c'). +// +// We want to know whether this relation is satisfied for any +// point p in B. If so then it is satisfied for the point p +// in B that maximizes (p-c').(c-c'). Observe that p will be +// a vertex of B. To determine p, we consider the sign of each +// coordinate of (c-c'). If the d-th coordinate is positive then +// we set p[d] = B.hi[d], and otherwise we set it to B.lo[d]. +// +// NOTE: This procedure assumes that Euclidean distances are +// used. +//---------------------------------------------------------------------- + +static bool pruneTest( + KMcenter cand, // candidate to test + KMcenter closeCand, // closest candidate + KMorthRect &bnd_box) // bounding box +{ + double boxDot = 0; // holds (p-c').(c-c') + double ccDot = 0; // holds (c-c').(c-c') + for (int d = 0; d < kcDim; d++) { + double ccComp = cand[d] - closeCand[d]; // one component c-c' + ccDot += ccComp * ccComp; // increment dot product + if (ccComp > 0) { // candidate on high side + // use high side of box + boxDot += (bnd_box.hi[d] - closeCand[d]) * ccComp; + } + else { // candidate on low side + // use low side of box + boxDot += (bnd_box.lo[d] - closeCand[d]) * ccComp; + } + } + return (ccDot >= 2*boxDot); // return final result +} + +//---------------------------------------------------------------------- +// postNeigh - registers neighbors for a given candidate +// This procedure registers a set of points as neighbors +// of a given center (cand). The points are represented by +// their sum and sum of squares. A pointer to the +// node doing the posting is passed along, but it is used +// only if tracing. +//---------------------------------------------------------------------- + +static void postNeigh( + KCptr p, // the node posting + KMpoint sum, // the sum of coordinates + double sumSq, // the sum of squares + int n_data, // number of points + KMctrIdx ctrIdx) // center index +{ + for (int d = 0; d < kcDim; d++) { // increment sum + kcSums[ctrIdx][d] += sum[d]; + } + kcWeights[ctrIdx] += n_data; // increment weight + kcSumSqs[ctrIdx] += sumSq; // incr sum of squares +} diff --git a/src/k_means/KCtree.h b/src/k_means/KCtree.h new file mode 100644 index 0000000..b115701 --- /dev/null +++ b/src/k_means/KCtree.h @@ -0,0 +1,315 @@ +//---------------------------------------------------------------------- +// File: KCtree.h +// Programmer: David Mount +// Last modified: 08/10/2005 +// Description: Declarations for standard kc-tree routines +//---------------------------------------------------------------------- +// Copyright (C) 2004-2005 David M. Mount and University of Maryland +// All Rights Reserved. +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or (at +// your option) any later version. See the file Copyright.txt in the +// main directory. +// +// The University of Maryland and the authors make no representations +// about the suitability or fitness of this software for any purpose. +// It is provided "as is" without express or implied warranty. +//---------------------------------------------------------------------- + +#ifndef KC_TREE_H +#define KC_TREE_H + +#include + +#include "k_means/KMeans.h" // all k-means includes +#include "k_means/KCutil.h" // kc-tree utilities + +class KMfilterCenters; // see KMfilterCenters.h + +//---------------------------------------------------------------------- +// kc-tree - the k-center tree. +// This is a stripped-down modification of the kd-tree of the ANN +// library (see ann/include/ANN/ANN.h and ann/src/kd_tree.h). +// There are a number of technical difficulties in attempting to +// design this structure through inheritance.) The main difference +// is that we do not support nearest neighbor searching, but +// instead support an operation (getNeighbors) which given a set of +// center points, computes the subset of data points in the tree +// that is closest to each center. +// +// In addition to the kd-tree information, the nodes of the kc-tree +// also store the number of data points associated with each node +// of the tree and they keep an associated sum and sums of squares +// for these points. There are also a few 'hooks' inserted for +// the eventual goal of extending this to a dynamic structure. +// +// The tree is constructed in three phases. The first phase is +// borrowed from the ANN library, and builds the kc-tree for the +// data points. The second phase computes sum and sum of squares +// for each node, by a simple postorder tree traversal. The third +// phase (which may be repeated) is given a set of centers, and +// computes the candidates for each node in the tree. +//---------------------------------------------------------------------- +class KCnode; +typedef KCnode *KCptr; // pointer to kc-node + +class KCtree { +protected: + int dim; // dimension of space + int n_pts; // number of points in tree + int max_pts; // max number of points in tree + KMdataArray pts; // the points (of size max(n,m_max)) + KMdatIdxArray pidx; // point indices (to pts) + KCptr root; // root of kc-tree + KMorthRect bnd_box; // bounding box +//---------------------------------------------------------------------- +// Protected utilities +// skeletonTree Initializes the basic tree elements (without +// building the tree). +// builtKc_tree Recursive utility that actually builds the +// kc-tree from a set of points. +//---------------------------------------------------------------------- + void skeletonTree( // construct skeleton tree + KMdataArray pa, // point array (with at least n pts) + int n, // number of points + int dd, // dimension + int n_max, // maximum number of points (optional) + KMpoint bb_lo, // bounding box low point (optional) + KMpoint bb_hi, // bounding box high point (optional) + KMdatIdxArray pi); // point indices (optional) + + KCptr buildKcTree( // recursive construction of kc-tree + KMdataArray pa, // point array + KMdatIdxArray pidx, // point indices to store in subtree + int n, // number of points + int dim, // dimension of space + KMorthRect &bnd_box); // bounding box for current node + +public: + KCtree( // build from point array + KMdataArray pa, // point array + int n, // number of points + int dd, // dimension + int n_max = 0, // max num of points (def = n) + KMpoint bb_lo = NULL, // bounding box low point + KMpoint bb_hi = NULL); // bounding box high point + + // compute neighbors for centers + void getNeighbors(KMfilterCenters& ctrs); + + void getAssignments( // compute assignments for points + KMfilterCenters& ctrs, // the current centers + KMctrIdxArray closeCtr, // closest center per point + double* sqDist); // sq'd distance to center + + ~KCtree(); // tree destructor + + void sampleCtr(KMpoint c); // sample a center point c + + void print( // print the tree (for debugging) + bool with_pts); // print points as well? +}; + +//---------------------------------------------------------------------- +// Generic kc-tree node +// Nodes in kc-trees are of two types, splitting nodes which contain +// splitting information (a splitting hyperplane orthogonal to one +// of the coordinate axes) and leaf nodes which contain point +// information (an array of points stored in a bucket). This is +// handled by making a generic class kc-node. The kc-node contains +// the following basic information. +// +// n_data The number of data points associated +// with this node. +// sum This is the sum of points (i.e., the +// weighted centroid) of all the points +// associated with this node. +// sumSq This is the sum of squares (i.e., the +// sum of the dot products of each point +// with itself). +// bnd_box Bounding box for the cell. +// +// NOTE: The constructor does no (interesting) initialization. +// This is handled in getSums(). +//---------------------------------------------------------------------- + +class KCnode { // generic kc-tree node +protected: + const int multCand; // multiple candidate flag + int n_data; // number of data points + KMpoint sum; // sum of points + double sumSq; // sum of squares + KMorthRect bnd_box; // bounding box for cell +public: + KCnode( // basic constructor + int dim, // dimension + KMorthRect &bb) // bounding box + : multCand(-1), bnd_box(dim, bb)// create bounding box + { sum = kmAllocPt(dim, 0); sumSq = 0; } + + virtual ~KCnode(); // destructor + + void cellMidpt(KMpoint pt); // get cell's midpoint (pt modified) + + KMorthRect &bndBox() // get cell's bounding box + { return bnd_box; } + + virtual void makeSums( // compute sums of points + int &n, // number of points (returned) + KMpoint &theSum, // sum (returned) + double &theSumSq) = 0; // sum of squares (returned) + + virtual void getNeighbors( // compute neighbors for centers + KMctrIdxArray cands, // candidate centers + int kCands) = 0; // number of centers + + virtual void getAssignments( // get assignments for leaf node + KMctrIdxArray cands, // candidate centers + int kCands, // number of centers + KMctrIdxArray closeCtr, // closest center per point + double* sqDist) = 0; // sq'd distance to center + + // sample a center point c + virtual void sampleCtr(KMpoint c, KMorthRect& bb) = 0; + // + virtual void print(int level) = 0; // print node + + int n_nodes() // number of nodes in this subtree + { return 2*n_data - 1; } // this assumes bucket size=1! + + friend class KCtree; // allow kc-tree to access us +}; + +//---------------------------------------------------------------------- +// Leaf kc-tree node +// Leaf nodes of the kc-tree store the set of points associated +// with this bucket, stored as an array of point indices. These +// are indices in the array points, which resides with the +// root of the kc-tree. We also store the number of points +// that reside in this bucket. +//---------------------------------------------------------------------- + +class KCleaf: public KCnode +{ +protected: + KMidxArray bkt; // bucket of points +public: + KCleaf( // constructor + int dim, // dimension + KMorthRect &bb, // bounding box + int n, // number of points + KMdatIdxArray b) // the bucket + : KCnode(dim, bb) // create kc-node + { assert(n <= 1); n_data = n; bkt = b; } + + virtual ~KCleaf() {} // destructor (none) + + KMpoint getPoint(); // get data point + + virtual void makeSums( // compute sums + int &n, // number of points (returned) + KMpoint &theSum, // sum (returned) + double &theSumSq); // sum of squares (returned) + + virtual void getNeighbors( // compute neighbors for centers + KMctrIdxArray cands, // candidate centers + int kCands); // number of centers + + virtual void getAssignments( // get assignments for leaf node + KMctrIdxArray cands, // candidate centers + int kCands, // number of centers + KMctrIdxArray closeCtr, // closest center per point + double* sqDist); // sq'd distance to center + + // sample a center point c + virtual void sampleCtr(KMpoint c, KMorthRect& bb); + + // print node + virtual void print(int level); +}; + +//---------------------------------------------------------------------- +// kc-tree splitting node. +// Splitting nodes contain a cutting dimension and a cutting value. +// These indicate the axis-parellel plane which subdivide the +// box for this node. The extent of the bounding box along the +// cutting dimension is maintained (this is used to speed up point +// to box distance calculations) [we do not store the entire bounding +// box since this may be wasteful of space in high dimensions]. +// We also store pointers to the 2 children. +//---------------------------------------------------------------------- + +class KCsplit : public KCnode // splitting node of a kc-tree +{ +protected: + int cut_dim; // dim orthogonal to cutting plane + KMcoord cut_val; // location of cutting plane + KMcoord cd_bnds[2]; // lower and upper bounds of + // rectangle along cut_dim + KCptr child[2]; // left and right children +public: + KCsplit( // constructor + int dim, // cutting dimension + KMorthRect &bb, // bounding box + int cd, // cutting dimension + KMcoord cv, // cutting value + KMcoord lv, KMcoord hv, // low and high values + KCptr lc=NULL, KCptr hc=NULL) // children + : KCnode(dim, bb) // create kc-node + { + cut_dim = cd; // cutting dimension + cut_val = cv; // cutting value + cd_bnds[KM_LO] = lv; // lower bound for rectangle + cd_bnds[KM_HI] = hv; // upper bound for rectangle + child[KM_LO] = lc; // left child + child[KM_HI] = hc; // right child + } + + virtual ~KCsplit() // destructor + { + if (child[KM_LO] != NULL) delete child[KM_LO]; + if (child[KM_HI] != NULL) delete child[KM_HI]; + } + + virtual void makeSums( // compute sums + int &n, // number of points (returned) + KMpoint &theSum, // sum (returned) + double &theSumSq); // sum of squares (returned) + + virtual void getNeighbors( // compute neighbors for centers + KMctrIdxArray cands, // candidate centers + int kCands); // number of centers + + virtual void getAssignments( // get assignments for leaf node + KMctrIdxArray cands, // candidate centers + int kCands, // number of centers + KMctrIdxArray closeCtr, // closest center per point + double* sqDist); // sq'd distance to center + + // sample a center point c + virtual void sampleCtr(KMpoint c, KMorthRect& bb); + + // print node + virtual void print(int level); +}; + +//---------------------------------------------------------------------- +// kc-splitting function: +// kd_splitter is a pointer to a splitting procedure for preprocessing. +// Different splitting procedures result in different strategies +// for building the tree. +//---------------------------------------------------------------------- + +typedef void (*KMkd_splitter)( // splitting procedure for kd-trees + KMpointArray pa, // point array (unaltered) + KMidxArray pidx, // point indices (permuted on return) + const KMorthRect &bnds, // bounding rectangle for cell + int n, // number of points + int dim, // dimension of space + int &cut_dim, // cutting dimension (returned) + KMcoord &cut_val, // cutting value (returned) + int &n_lo); // num of points on low side (returned) + +#endif diff --git a/src/k_means/KCutil.cpp b/src/k_means/KCutil.cpp new file mode 100644 index 0000000..093b8ff --- /dev/null +++ b/src/k_means/KCutil.cpp @@ -0,0 +1,240 @@ +//---------------------------------------------------------------------- +// File: KCutil.h +// Programmer: David Mount +// Last modified: 03/27/02 +// Description: Utilities for kc-tree splitting rules +//---------------------------------------------------------------------- +// Copyright (C) 2004-2005 David M. Mount and University of Maryland +// All Rights Reserved. +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or (at +// your option) any later version. See the file Copyright.txt in the +// main directory. +// +// The University of Maryland and the authors make no representations +// about the suitability or fitness of this software for any purpose. +// It is provided "as is" without express or implied warranty. +//---------------------------------------------------------------------- + +#include "k_means/KCutil.h" // kc-utility declarations + +//---------------------------------------------------------------------- +// NOTE: Virtually all point indexing is done through an +// index (i.e. permutation) array pidx. Consequently, +// a reference to the d-th coordinate of the i-th point +// is pa[pidx[i]][d]. The macro PA(i,d) is a shorthand +// for this. +//---------------------------------------------------------------------- + // standard 2-d indirect indexing +#define PA(i,d) (pa[pidx[(i)]][(d)]) + // accessing a single point +#define PP(i) (pa[pidx[(i)]]) + // swap two points +#define PASWAP(a,b) { int tmp = pidx[a];\ + pidx[a] = pidx[b];\ + pidx[b] = tmp; } + +//---------------------------------------------------------------------- +// Constants +//---------------------------------------------------------------------- + +const double ERR = 0.001; // a small value + +//---------------------------------------------------------------------- +// kmEnclRect, kmEnclCube +// These utilities compute the smallest rectangle and cube enclosing +// a set of points, respectively. +//---------------------------------------------------------------------- + +void kmEnclRect( + KMpointArray pa, // point array + KMidxArray pidx, // point indices + int n, // number of points + int dim, // dimension + KMorthRect &bnds) // bounding cube (returned) +{ + for (int d = 0; d < dim; d++) { // find smallest enclosing rectangle + KMcoord lo_bnd = PA(0,d); // lower bound on dimension d + KMcoord hi_bnd = PA(0,d); // upper bound on dimension d + for (int i = 0; i < n; i++) { + if (PA(i,d) < lo_bnd) lo_bnd = PA(i,d); + else if (PA(i,d) > hi_bnd) hi_bnd = PA(i,d); + } + bnds.lo[d] = lo_bnd; + bnds.hi[d] = hi_bnd; + } +} + +//---------------------------------------------------------------------- +// kmSpread - find spread along given dimension +// kmMinMax - find min and max coordinates along given dimension +// kmMaxSpread - find dimension of max spread +//---------------------------------------------------------------------- + +KMcoord kmSpread( // compute point spread along dimension + KMpointArray pa, // point array + KMidxArray pidx, // point indices + int n, // number of points + int d) // dimension to check +{ + KMcoord min = PA(0,d); // compute max and min coords + KMcoord max = PA(0,d); + for (int i = 1; i < n; i++) { + KMcoord c = PA(i,d); + if (c < min) min = c; + else if (c > max) max = c; + } + return (max - min); // total spread is difference +} + +void kmMinMax( // compute min and max coordinates along dim + KMpointArray pa, // point array + KMidxArray pidx, // point indices + int n, // number of points + int d, // dimension to check + KMcoord &min, // minimum value (returned) + KMcoord &max) // maximum value (returned) +{ + min = PA(0,d); // compute max and min coords + max = PA(0,d); + for (int i = 1; i < n; i++) { + KMcoord c = PA(i,d); + if (c < min) min = c; + else if (c > max) max = c; + } +} + +//---------------------------------------------------------------------- +// kmPlaneSplit - split point array about a cutting plane +// Split the points in an array about a given plane along a +// given cutting dimension. On exit, br1 and br2 are set so +// that: +// +// pa[ 0 ..br1-1] < cv +// pa[br1..br2-1] == cv +// pa[br2.. n -1] > cv +// +// All indexing is done indirectly through the index array pidx. +//---------------------------------------------------------------------- + +void kmPlaneSplit( // split points by a plane + KMpointArray pa, // points to split + KMidxArray pidx, // point indices + int n, // number of points + int d, // dimension along which to split + KMcoord cv, // cutting value + int &br1, // first break (values < cv) + int &br2) // second break (values == cv) +{ + int l = 0; + int r = n-1; + for(;;) { // partition pa[0..n-1] about cv + while (l < n && PA(l,d) < cv) l++; + while (r >= 0 && PA(r,d) >= cv) r--; + if (l > r) break; + PASWAP(l,r); + l++; r--; + } + br1 = l; // now: pa[0..br1-1] < cv <= pa[br1..n-1] + r = n-1; + for(;;) { // partition pa[br1..n-1] about cv + while (l < n && PA(l,d) <= cv) l++; + while (r >= br1 && PA(r,d) > cv) r--; + if (l > r) break; + PASWAP(l,r); + l++; r--; + } + br2 = l; // now: pa[br1..br2-1] == cv < pa[br2..n-1] +} + +//---------------------------------------------------------------------- +// sl_midpt_split - sliding midpoint splitting rule +// +// This is a modification of midpt_split, which has the nonsensical +// name "sliding midpoint". The idea is that we try to use the +// midpoint rule, by bisecting the longest side. If there are +// ties, the dimension with the maximum spread is selected. If, +// however, the midpoint split produces a trivial split (no points +// on one side of the splitting plane) then we slide the splitting +// (maintaining its orientation) until it produces a nontrivial +// split. For example, if the splitting plane is along the x-axis, +// and all the data points have x-coordinate less than the x-bisector, +// then the split is taken along the maximum x-coordinate of the +// data points. +// +// Intuitively, this rule cannot generate trivial splits, and +// hence avoids midpt_split's tendency to produce trees with +// a very large number of nodes. +// +//---------------------------------------------------------------------- + +void sl_midpt_split( + KMpointArray pa, // point array + KMidxArray pidx, // point indices (permuted on return) + const KMorthRect &bnds, // bounding rectangle for cell + int n, // number of points + int dim, // dimension of space + int &cut_dim, // cutting dimension (returned) + KMcoord &cut_val, // cutting value (returned) + int &n_lo) // num of points on low side (returned) +{ + int d; + + KMcoord max_length = bnds.hi[0] - bnds.lo[0]; + for (d = 1; d < dim; d++) { // find length of longest box side + KMcoord length = bnds.hi[d] - bnds.lo[d]; + if (length > max_length) { + max_length = length; + } + } + KMcoord max_spread = -1; // find long side with most spread + for (d = 0; d < dim; d++) { + // is it among longest? + if ((bnds.hi[d] - bnds.lo[d]) >= (1-ERR)*max_length) { + // compute its spread + KMcoord spr = kmSpread(pa, pidx, n, d); + if (spr > max_spread) { // is it max so far? + max_spread = spr; + cut_dim = d; + } + } + } + // ideal split at midpoint + KMcoord ideal_cut_val = (bnds.lo[cut_dim] + bnds.hi[cut_dim])/2; + + KMcoord min, max; + kmMinMax(pa, pidx, n, cut_dim, min, max); // find min/max coordinates + + if (ideal_cut_val < min) // slide to min or max as needed + cut_val = min; + else if (ideal_cut_val > max) + cut_val = max; + else + cut_val = ideal_cut_val; + + // permute points accordingly + int br1, br2; + kmPlaneSplit(pa, pidx, n, cut_dim, cut_val, br1, br2); + //------------------------------------------------------------------ + // On return: pa[pidx[[0..br1-1]] < cut_val + // pa[pidx[[br1..br2-1]] = cut_val + // pa[pidx[[br2..n-1]] > cut_val + // + // We can set n_lo to any value in the range [br1..br2] to satisfy + // the exit conditions of the procedure. + // + // if ideal_cut_val < min (implying br2 >= 1), + // then we select n_lo = 1 (so there is one point on left) and + // if ideal_cut_val > max (implying br1 <= n-1), + // then we select n_lo = n-1 (so there is one point on right). + // Otherwise, we select n_lo as close to n/2 as possible within + // [br1..br2]. + //------------------------------------------------------------------ + if (ideal_cut_val < min) n_lo = 1; + else if (ideal_cut_val > max) n_lo = n-1; + else if (br1 > n/2) n_lo = br1; + else if (br2 < n/2) n_lo = br2; + else n_lo = n/2; +} diff --git a/src/k_means/KCutil.h b/src/k_means/KCutil.h new file mode 100644 index 0000000..342bf12 --- /dev/null +++ b/src/k_means/KCutil.h @@ -0,0 +1,70 @@ +//---------------------------------------------------------------------- +// File: KCutil.h +// Programmer: David Mount +// Last modified: 03/27/02 +// Description: Declarations for kc-tree utilities +//---------------------------------------------------------------------- +// Copyright (C) 2004-2005 David M. Mount and University of Maryland +// All Rights Reserved. +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or (at +// your option) any later version. See the file Copyright.txt in the +// main directory. +// +// The University of Maryland and the authors make no representations +// about the suitability or fitness of this software for any purpose. +// It is provided "as is" without express or implied warranty. +//---------------------------------------------------------------------- + +#ifndef KC_UTIL_H +#define KC_UTIL_H + +#include "k_means/KCtree.h" // kc-tree declarations + +//---------------------------------------------------------------------- +// externally accessible functions +//---------------------------------------------------------------------- + +void kmEnclRect( // compute smallest enclosing rectangle + KMpointArray pa, // point array + KMidxArray pidx, // point indices + int n, // number of points + int dim, // dimension + KMorthRect &bnds); // bounding cube (returned) + +KMcoord kmSpread( // compute point spread along dimension + KMpointArray pa, // point array + KMidxArray pidx, // point indices + int n, // number of points + int d); // dimension to check + +void kmMinMax( // compute min and max coordinates along dim + KMpointArray pa, // point array + KMidxArray pidx, // point indices + int n, // number of points + int d, // dimension to check + KMcoord& min, // minimum value (returned) + KMcoord& max); // maximum value (returned) + +void kmPlaneSplit( // split points by a plane + KMpointArray pa, // points to split + KMidxArray pidx, // point indices + int n, // number of points + int d, // dimension along which to split + KMcoord cv, // cutting value + int &br1, // first break (values < cv) + int &br2); // second break (values == cv) + +void sl_midpt_split( // sliding midpoint kd-splitter + KMpointArray pa, // point array (unaltered) + KMidxArray pidx, // point indices (permuted on return) + const KMorthRect &bnds, // bounding rectangle for cell + int n, // number of points + int dim, // dimension of space + int &cut_dim, // cutting dimension (returned) + KMcoord &cut_val, // cutting value (returned) + int &n_lo); // num of points on low side (returned) + +#endif diff --git a/src/k_means/KM_ANN.cpp b/src/k_means/KM_ANN.cpp new file mode 100644 index 0000000..d6ad2ec --- /dev/null +++ b/src/k_means/KM_ANN.cpp @@ -0,0 +1,191 @@ +//---------------------------------------------------------------------- +// File: KM_ANN.cc +// Programmer: David Mount +// Last modified: 03/27/02 +// Description: Utilities from ANN +//---------------------------------------------------------------------- +// Copyright (C) 2004-2005 David M. Mount and University of Maryland +// All Rights Reserved. +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or (at +// your option) any later version. See the file Copyright.txt in the +// main directory. +// +// The University of Maryland and the authors make no representations +// about the suitability or fitness of this software for any purpose. +// It is provided "as is" without express or implied warranty. +//---------------------------------------------------------------------- + +#include "k_means/KM_ANN.h" // KM-ANN includes +#include "k_means/KMrand.h" // random number includes + +//---------------------------------------------------------------------- +// Point methods +//---------------------------------------------------------------------- + +//---------------------------------------------------------------------- +// Distance utility. +// (Note: In the nearest neighbor search, most distances are +// computed using partial distance calculations, not this +// procedure.) +//---------------------------------------------------------------------- + +KMdist kmDist( // interpoint squared distance + int dim, + KMpoint p, + KMpoint q) +{ + register int d; + register KMcoord diff; + register KMcoord dist; + + dist = 0; + for (d = 0; d < dim; d++) { + diff = p[d] - q[d]; + dist = KM_SUM(dist, KM_POW(diff)); + } + return dist; +} + +//---------------------------------------------------------------------- +// kmEqualPts - test two points for equality +//---------------------------------------------------------------------- +bool kmEqualPts( // are two points equal? + int dim, // dimension + KMpoint p1, // the points + KMpoint p2) +{ + for (int d = 0; d < dim; d++) { + if (p1[d] != p2[d]) return false; + } + return true; +} + +//---------------------------------------------------------------------- +// Point allocation/deallocation/copying: +//---------------------------------------------------------------------- +KMpoint kmAllocPt(int dim, KMcoord c) // allocate a point +{ + KMpoint p = new KMcoord[dim]; + for (int i = 0; i < dim; i++) p[i] = c; + return p; +} + +void kmDeallocPt(KMpoint &p) // deallocate one point +{ + delete [] p; + p = NULL; +} + +KMpointArray kmAllocPts(int n, int dim) // allocate n pts in dim +{ + KMpointArray pa = new KMpoint[n]; // allocate points + KMpoint p = new KMcoord[n*dim]; // allocate space for coords + for (int i = 0; i < n; i++) { + pa[i] = &(p[i*dim]); + } + return pa; +} + +void kmDeallocPts(KMpointArray &pa) // deallocate points +{ + delete [] pa[0]; // dealloc coordinate storage + delete [] pa; // dealloc points + pa = NULL; +} + +//---------------------------------------------------------------------- +// Point and other type copying: +//---------------------------------------------------------------------- + +KMpoint kmAllocCopyPt( // allocate and copy point + int dim, + const KMpoint source) +{ + KMpoint p = new KMcoord[dim]; + for (int i = 0; i < dim; i++) p[i] = source[i]; + return p; +} + +void kmCopyPt( // copy point w/o allocation + int dim, + const KMpoint source, + KMpoint dest) +{ + for (int i = 0; i < dim; i++) dest[i] = source[i]; +} + +void kmCopyPts( // copy point array w/o allocation + int n, // number of points + int dim, // dimension + const KMpointArray source, // source point + KMpointArray dest) // destination point +{ + for (int j = 0; j < n; j++) { + for (int i = 0; i < dim; i++) { + dest[j][i] = source[j][i]; + } + } +} + +KMpointArray kmAllocCopyPts( // allocate and copy point array + int n, // number of points + int dim, // dimension + const KMpointArray source) // source point +{ + KMpointArray dest = kmAllocPts(n, dim); + for (int j = 0; j < n; j++) { + for (int i = 0; i < dim; i++) { + dest[j][i] = source[j][i]; + } + } + return dest; +} + +//---------------------------------------------------------------------- +// Methods for orthogonal rectangles: +// kmAssignRect() assigns the coordinates of one rectangle to +// another. The two rectangles must have the same dimension +// (and it is not possible to test this here). +// +// inside() returns true if a point lies inside the (closed) +// rectangle and false otherwise. +// +// expand(d,x,r) expands this rectangle by a factor of x, centrally +// about its origin and stores the resulting rectangle in r. +//---------------------------------------------------------------------- + + // assign one rect to another +void kmAssignRect(int dim, KMorthRect &dest, const KMorthRect &source) +{ + for (int i = 0; i < dim; i++) { + dest.lo[i] = source.lo[i]; + dest.hi[i] = source.hi[i]; + } +} + // is point inside rectangle? +bool KMorthRect::inside(int dim, KMpoint p) +{ + for (int i = 0; i < dim; i++) { + if (p[i] < lo[i] || p[i] > hi[i]) return false; + } + return true; +} + // expand by factor x +void KMorthRect::expand(int dim, double x, KMorthRect r) +{ + for (int i = 0; i < dim; i++) { + KMcoord wid = hi[i] - lo[i]; + r.lo[i] = lo[i] - (wid/2)*(x - 1); + r.hi[i] = hi[i] + (wid/2)*(x - 1); + } +} + // sample uniformly +void KMorthRect::sample(int dim, KMpoint p) +{ + for (int i = 0; i < dim; i++) + p[i] = kmRanUnif(lo[i], hi[i]); +} + diff --git a/src/k_means/KM_ANN.h b/src/k_means/KM_ANN.h new file mode 100644 index 0000000..0b94fee --- /dev/null +++ b/src/k_means/KM_ANN.h @@ -0,0 +1,416 @@ +//---------------------------------------------------------------------- +// File: KM_ANN.h +// Programmer: David Mount +// Last modified: 05/14/04 +// Description: Stripped down ANN utilities +//---------------------------------------------------------------------- +// Copyright (C) 2004-2005 David M. Mount and University of Maryland +// All Rights Reserved. +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or (at +// your option) any later version. See the file Copyright.txt in the +// main directory. +// +// The University of Maryland and the authors make no representations +// about the suitability or fitness of this software for any purpose. +// It is provided "as is" without express or implied warranty. +//---------------------------------------------------------------------- +// This file contains basic definitions for points, rectangles and +// distance computations, which have been taken from ANN. These +// are heavily used by the kc-tree, which was adapted from ANN's +// kd-tree routines. +//---------------------------------------------------------------------- + +#ifndef KM_ANN_H +#define KM_ANN_H + +//---------------------------------------------------------------------- +// basic includes +//---------------------------------------------------------------------- +#include // standard libs and definitions +#include // file I/O streams +#include // I/O manipulators (for setw) +#include // for INT_MAX +#include // for DBL_MAX +#include // for system clock +#include // assertion checking +#include // STL strings +#include // numeric limits + +//---------------------------------------------------------------------- +// Old Types: KMcoord, KMdist, KMidx +// KMcoord and KMdist are the types used for representing +// point coordinates and distances. They can be modified by the +// user, with some care. It is assumed that they are both numeric +// types, and that KMdist is generally of an equal or higher type +// from KMcoord. A variable of type KMdist should be large +// enough to store the sum of squared components of a variable +// of type KMcoord for the number of dimensions needed in the +// application. For example, the following combinations are +// legal: +// +// KMcoord KMdist +// --------- ------------------------------- +// short short, int, long, float, double +// int int, long, float, double +// long long, float, double +// float float, double +// double double +// +// It is the user's responsibility to make sure that overflow does +// not occur in distance calculation. +// +// The code assumes that there is an infinite distance, KM_DIST_INF +// (as large as any legal distance). Possible values are given below: +// +// Examples: +// KMdist: double, float, long, int, short +// KM_DIST_INF: DBL_MAX, FLT_MAX, LONG_MAX, INT_MAX, SHRT_MAX +// +// The routine that dumps a tree needs to know roughly how many +// significant digits there are in a KMcoord, so it can output +// points to full precision. This is defined in KMcoordPrec. +// If you have ANSI C++, you should be able to use the following +// values from values.h to help in computing this: +// +// KMcoord KMcoordBits +// -------------------- ------------------------------- +// short, int, long,... BITS(short), BITS(int), ... +// float FSIGNIF +// double DSIGNIF +// +// Then KMcoordPrec = KMcoordBits/(log_2 10) where log_2 10 +// is the base 2 logarithm of 10. +// +// KMidx is a point index. When the data structure is built, +// the points are given as an array. Nearest neighbor results are +// returned as an index into this array. To make it clearer when +// this is happening, we define the integer type KMidx. +// +//---------------------------------------------------------------------- + +typedef double KMcoord; // coordinate data type +typedef double KMdist; // distance data type +typedef int KMidx; // point index + + // largest possible distance +const KMdist KM_DIST_INF = DBL_MAX; + +#ifdef DSIGNIF // number of sig. digits in KMcoord + const int KMcoordPrec = DBL_DIG; +#else + const int KMcoordPrec = 15; // default precision +#endif + +//---------------------------------------------------------------------- +// Norms and metrics: +// KM supports any Minkowski norm for defining distance. In +// particular, for any p >= 1, the L_p Minkowski norm defines the +// length of a d-vector (v0, v1, ..., v(d-1)) to be +// +// (|v0|^p + |v1|^p + ... + |v(d-1)|^p)^(1/p), +// +// (where ^ denotes exponentiation, and |.| denotes absolute +// value). The distance between two points is defined to be +// the norm of the vector joining them. Some common distance +// metrics include +// +// Euclidean metric p = 2 +// Manhattan metric p = 1 +// Max metric p = infinity +// +// In the case of the max metric, the norm is computed by +// taking the maxima of the absolute values of the components. +// KM is highly "coordinate-based" and does not support general +// distances functions (e.g. those obeying just the triangle +// inequality). It also does not support distance functions +// based on inner-products. +// +// For the purpose of computing nearest neighbors, it is not +// necessary to compute the final power (1/p). Thus the only +// component that is used by the program is |v(i)|^p. +// +// KM parameterizes the distance computation through the following +// macros. (Macros are used rather than procedures for efficiency.) +// Recall that the distance between two points is given by the length +// of the vector joining them, and the length or norm of a vector v +// is given by formula: +// +// |v| = ROOT(POW(v0) # POW(v1) # ... # POW(v(d-1))) +// +// where ROOT, POW are unary functions and # is an associative and +// commutative binary operator satisfying: +// +// ** POW: coord --> dist +// ** #: dist x dist --> dist +// ** ROOT: dist (>0) --> double +// +// For early termination in distance calculation (partial distance +// calculation) we assume that POW and # together are monotonically +// increasing on sequences of arguments, meaning that for all +// v0..vk and y: +// +// POW(v0) #...# POW(vk) <= (POW(v0) #...# POW(vk)) # POW(y). +// +// Due to the use of incremental distance calculations in the code +// for searching k-d trees, we assume that there is an incremental +// update function DIFF(x,y) for #, such that if: +// +// s = x0 # ... # xi # ... # xk +// +// then if s' is s with xi replaced by y, that is, +// +// s' = x0 # ... # y # ... # xk +// +// can be computed by: +// +// s' = s # DIFF(xi,y). +// +// Thus, if # is + then DIFF(xi,y) is (yi-x). For the L_infinity +// norm we make use of the fact that in the program this function +// is only invoked when y > xi, and hence DIFF(xi,y)=y. +// +// Finally, for approximate nearest neighbor queries we assume +// that POW and ROOT are related such that +// +// v*ROOT(x) = ROOT(POW(v)*x) +// +// Here are the values for the various Minkowski norms: +// +// L_p: p even: p odd: +// ------------------------- ------------------------ +// POW(v) = v^p POW(v) = |v|^p +// ROOT(x) = x^(1/p) ROOT(x) = x^(1/p) +// # = + # = + +// DIFF(x,y) = y - x DIFF(x,y) = y - x +// +// L_inf: +// POW(v) = |v| +// ROOT(x) = x +// # = max +// DIFF(x,y) = y +// +// By default the Euclidean norm is assumed. To change the norm, +// uncomment the appropriate set of macros below. +// +//---------------------------------------------------------------------- + +//---------------------------------------------------------------------- +// Use the following for the Euclidean norm +//---------------------------------------------------------------------- +#define KM_POW(v) ((v)*(v)) +#define KM_ROOT(x) sqrt(x) +#define KM_SUM(x,y) ((x) + (y)) +#define KM_DIFF(x,y) ((y) - (x)) + +//---------------------------------------------------------------------- +// Array types +// +// KMpoint: +// A point is represented as a (dimensionless) vector of +// coordinates, that is, as a pointer to KMcoord. It is the +// user's responsibility to be sure that each such vector has +// been allocated with enough components. Because only +// pointers are stored, the values should not be altered +// through the lifetime of the nearest neighbor data structure. +// KMpointArray is a dimensionless array of KMpoint. +// KMdistArray is a dimensionless array of KMdist. +// KMidxArray is a dimensionless array of KMidx. This is used for +// storing buckets of points in the search trees, and for returning +// the results of k nearest neighbor queries. +//---------------------------------------------------------------------- + +typedef KMcoord *KMpoint; // a point +typedef KMpoint *KMpointArray; // an array of points +typedef KMdist *KMdistArray; // an array of distances +typedef KMidx *KMidxArray; // an array of point indices + +//---------------------------------------------------------------------- +// Point utilities: +// +// kmDist(dim, p, q) +// Returns the squared distances between p and q. +// +// kmEqualPts(dim, p, q) +// Returns true if p and q are the same points. +// +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +// Point and Point-array Allocation/Deallocation: +// +// Because points (somewhat like strings in C) are stored as +// pointers. Consequently, creating and destroying copies of +// points may require storage allocation. These procedures do +// this. +// +// p = kmAllocPt(dim, c=0) +// Allocates storage for a single point, and return a pointer +// to it. The second argument is used to initialize all the +// points components. +// +// kmDeallocPt(p) +// Deallocates a point allocated by kmAllocPt(). +// +// pa = kmAllocPts(n, dim) +// Allocates an array of n points in dimension d. It performs +// no initialization. +// +// kmDeallocPts(pa) +// Deallocates points allocated by kmAllocPts(). +//---------------------------------------------------------------------- + +KMdist kmDist( // compute squared distance + int dim, // dimension of space + KMpoint p, // points + KMpoint q); + +bool kmEqualPts( // are two points equal? + int dim, // dimension + KMpoint p1, // the points + KMpoint p2); + +KMpoint kmAllocPt( // allocate point storage + int dim, // dimension + KMcoord c = 0); // coordinate value (all equal) + +void kmDeallocPt( // deallocate a point + KMpoint &p); + +KMpointArray kmAllocPts( // allocate point array + int n, // number of points + int dim); // dimension + +void kmDeallocPts( // deallocate a point array + KMpointArray &pa); // the array + +//---------------------------------------------------------------------- +// Point and other type copying: +// +// kmCopyPt(dim, source, dest) +// Copies point source to point dest, without allocation. +// +// dest = kmAllocCopyPt(dim, source) +// Allocates storage for and copies a point source to dest. +// +// kmCopyPts(n, dim, source, dest) +// Copies point array source to point dest, without allocation. +// +// dest = kmAllocCopyPts(n, dim, source) +// Allocates storage for and copies a point array source to dest. +// +// kmCopy(n, source, dest) +// A generic copy routine for any time for which "=" is defined. +// +// kmAllocCopy(n, source, dest) +// A generic allocate and copy routine for any time for which +// "=" is defined. +//---------------------------------------------------------------------- + +void kmCopyPt( // copy point without allocation + int dim, // dimension + KMpoint source, // source point + KMpoint dest); // destination point + +KMpoint kmAllocCopyPt( // allocate and copy point + int dim, // dimension + KMpoint source); // point to copy + +void kmCopyPts( // copy point array without allocation + int n, // number of points + int dim, // dimension + const KMpointArray source, // source point + KMpointArray dest); // destination point + +KMpointArray kmAllocCopyPts( // allocate and copy point array + int n, // number of points + int dim, // dimension + const KMpointArray source); // source point + +template +void kmCopy( // copy anything without allocation + int n, // number of object + const Object* source, // source array + Object* dest) // destination array +{ + for (int i = 0; i < n; i++) { // copy contents + dest[i] = source[i]; + } +} + +template +Object* kmAllocCopy( // allocate and copy anything + int n, // number of object + const Object* source) // source array +{ + Object* dest = new Object[n]; // allocate array + for (int i = 0; i < n; i++) { // copy contents + dest[i] = source[i]; + } + return dest; +} + +//---------------------------------------------------------------------- +// Global constants and types +//---------------------------------------------------------------------- +enum KMtreeType {KM_KD_TREE, KM_BD_TREE}; // tree types +enum {KM_LO=0, KM_HI=1}; // splitting indices +enum {KM_IN=0, KM_OUT=1}; // shrinking indices + +const int KM_STRING_LEN = 100; // default string length + +//---------------------------------------------------------------------- +// Orthogonal (axis aligned) rectangle +// Orthogonal rectangles are represented by two points, one +// for the lower left corner (min coordinates) and the other +// for the upper right corner (max coordinates). +// +// The constructor initializes from either a pair of coordinates, +// pair of points, or another rectangle. Note that all constructors +// allocate new point storage. The destructor deallocates this +// storage. +// +// BEWARE: Orthogonal rectangles should be passed ONLY BY BASIC_IMAGE. +// (C++'s default copy constructor will not allocate new point +// storage, then on return the destructor free's storage, and then +// you get into big trouble in the calling procedure.) +//---------------------------------------------------------------------- + +class KMorthRect { +public: + KMpoint lo; // rectangle lower bounds + KMpoint hi; // rectangle upper bounds +// + KMorthRect( // basic constructor + int dd, // dimension of space + KMcoord l=0, // default is empty + KMcoord h=0) + { lo = kmAllocPt(dd, l); hi = kmAllocPt(dd, h); } + + KMorthRect( // (almost a) copy constructor + int dd, // dimension + const KMorthRect &r) // rectangle to copy + { lo = kmAllocCopyPt(dd, r.lo); hi = kmAllocCopyPt(dd, r.hi); } + + KMorthRect( // construct from points + int dd, // dimension + KMpoint l, // low point + KMpoint h) // hight point + { lo = kmAllocCopyPt(dd, l); hi = kmAllocCopyPt(dd, h); } + + ~KMorthRect() // destructor + { kmDeallocPt(lo); kmDeallocPt(hi); } + + bool inside(int dim, KMpoint p); // is point p inside rectangle? + // expand by factor x and store in r + void expand(int dim, double x, KMorthRect r); + void sample(int dim, KMpoint p); // sample point p uniformly +}; + +void kmAssignRect( // assign one rect to another + int dim, // dimension (both must be same) + KMorthRect &dest, // destination (modified) + const KMorthRect &source); // source + +#endif diff --git a/src/k_means/KMcenters.cpp b/src/k_means/KMcenters.cpp new file mode 100644 index 0000000..74ab946 --- /dev/null +++ b/src/k_means/KMcenters.cpp @@ -0,0 +1,61 @@ +//---------------------------------------------------------------------- +// File: KMcenters.cc +// Programmer: David Mount +// Last modified: 03/27/02 +// Description: Functions for KMcenters +//---------------------------------------------------------------------- +// Copyright (C) 2004-2005 David M. Mount and University of Maryland +// All Rights Reserved. +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or (at +// your option) any later version. See the file Copyright.txt in the +// main directory. +// +// The University of Maryland and the authors make no representations +// about the suitability or fitness of this software for any purpose. +// It is provided "as is" without express or implied warranty. +//---------------------------------------------------------------------- + +#include "k_means/KMcenters.h" + // standard constructor +KMcenters::KMcenters(int k, KMdata& p) + : kCtrs(k), pts(&p) { + ctrs = kmAllocPts(kCtrs, p.getDim()); +} + // copy constructor +KMcenters::KMcenters(const KMcenters& s) + : kCtrs(s.kCtrs), pts(s.pts) { + ctrs = kmAllocCopyPts(kCtrs, s.getDim(), s.ctrs); +} + // assignment operator +KMcenters& KMcenters::operator=(const KMcenters& s) { + if (this != &s) { // avoid self assignment (x=x) + // size change? + if (kCtrs != s.kCtrs || getDim() != s.getDim()) { + kmDeallocPts(ctrs); // reallocate points + ctrs = kmAllocPts(s.kCtrs, s.getDim()); + } + kCtrs = s.kCtrs; + pts = s.pts; + kmCopyPts(kCtrs, s.getDim(), s.ctrs, ctrs); + } + return *this; +} + +KMcenters::~KMcenters() { // destructor + kmDeallocPts(ctrs); +} + +void KMcenters::resize(int k) { // resize array (if needed) + if (k == kCtrs) return; + kCtrs = k; + kmDeallocPts(ctrs); + ctrs = kmAllocPts(kCtrs, pts->getDim()); +} + +void KMcenters::print( // print centers + bool fancy) { + kmPrintPts("Center_Points", ctrs, getK(), fancy); +} diff --git a/src/k_means/KMcenters.h b/src/k_means/KMcenters.h new file mode 100644 index 0000000..b42f315 --- /dev/null +++ b/src/k_means/KMcenters.h @@ -0,0 +1,77 @@ +//---------------------------------------------------------------------- +// File: KMCenters.h +// Programmer: David Mount +// Last modified: 03/27/02 +// Description: Include file for KMcenters +//---------------------------------------------------------------------- +// Copyright (C) 2004-2005 David M. Mount and University of Maryland +// All Rights Reserved. +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or (at +// your option) any later version. See the file Copyright.txt in the +// main directory. +// +// The University of Maryland and the authors make no representations +// about the suitability or fitness of this software for any purpose. +// It is provided "as is" without express or implied warranty. +//---------------------------------------------------------------------- + +#ifndef KM_CENTERS_H +#define KM_CENTERS_H + +#include "k_means/KMeans.h" // kmeans includes +#include "k_means/KMdata.h" // provides KMdata + +//---------------------------------------------------------------------- +// KMcenters - set of centers +// This object encodes the information needed for describing a set +// of centers. It also stores a pointer to the data set. +// +// When copying this object, we allocate new storage for the center +// points, but we just copy the pointer to the data set. +//---------------------------------------------------------------------- + +class KMcenters { +protected: + int kCtrs; // number of centers + KMdata* pts; // the data points + KMcenterArray ctrs; // the centers +public: // constructors, etc. + KMcenters(int k, KMdata& p); // standard constructor + KMcenters(const KMcenters& s); // copy constructor + // assignment operator + KMcenters& operator=(const KMcenters& s); + virtual ~KMcenters(); // virtual destructor +public: // accessors + int getDim() const { // get dimension + return pts->getDim(); + } + int getNPts() const { // get number of points + return pts->getNPts(); + } + int getK() const { // get number of centers + return kCtrs; + } + KMdata& getData() { // get the data point structure + return *pts; + } + KMpointArray getDataPts() const { // get the data point array + return pts->getPts(); + } + KMcenterArray getCtrPts() const { // get the center points + return ctrs; + } + KMcenter& operator[](int i) { // index centers + return ctrs[i]; + } + const KMcenter& operator[](int i) const { + return ctrs[i]; + } + void resize(int k); // resize array + + virtual void print( // print centers + bool fancy = true); +}; +#endif diff --git a/src/k_means/KMdata.cpp b/src/k_means/KMdata.cpp new file mode 100644 index 0000000..09869b6 --- /dev/null +++ b/src/k_means/KMdata.cpp @@ -0,0 +1,101 @@ +//---------------------------------------------------------------------- +// File: KMdata.cc +// Programmer: David Mount +// Last modified: 03/27/02 +// Description: Functions for KMdata +//---------------------------------------------------------------------- +// Copyright (C) 2004-2005 David M. Mount and University of Maryland +// All Rights Reserved. +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or (at +// your option) any later version. See the file Copyright.txt in the +// main directory. +// +// The University of Maryland and the authors make no representations +// about the suitability or fitness of this software for any purpose. +// It is provided "as is" without express or implied warranty. +//---------------------------------------------------------------------- + +#include "k_means/KMdata.h" +#include "k_means/KMrand.h" // provides kmRanInt() + + // standard constructor +KMdata::KMdata(int d, int n) : dim(d), maxPts(n), nPts(n) { + pts = kmAllocPts(n, d); + kcTree = NULL; +} + +KMdata::~KMdata() { // destructor + kmDeallocPts(pts); // deallocate point array + delete kcTree; // deallocate kc-tree +} + +void KMdata::buildKcTree() { // build kc-tree for points + if (kcTree != NULL) delete kcTree; // destroy existing tree + kcTree = new KCtree(pts, nPts, dim); // construct the tree +} + +void KMdata::resize(int d, int n) { // resize point array + if (d != dim || n != nPts) { // size change? + dim = d; + nPts = n; + kmDeallocPts(pts); // deallocate old points + pts = kmAllocPts(nPts, dim); + } + if (kcTree != NULL) { // kc-tree exists? + delete kcTree; // deallocate kc-tree + kcTree = NULL; + } +} + +//------------------------------------------------------------------------ +// sampleCtr - Sample a center point at random. +// Generates a randomly sampled center point. +//------------------------------------------------------------------------ + +void KMdata::sampleCtr( // sample a center point + KMcenter sample) // where to store sample +{ + int ri = kmRanInt(nPts); // generate random index + kmCopyPt(dim, pts[ri], sample); // copy to destination +} + +//------------------------------------------------------------------------ +// sampleCtrs - Sample center points at random. +// Generates a set of center points by sampling (allowing or +// disallowing duplicates) from this point set. It is assumed that +// the point storage has already been allocated. +//------------------------------------------------------------------------ + +void KMdata::sampleCtrs( // sample points randomly + KMcenterArray sample, // where to store sample + int k, // number of points to sample + bool allowDuplicate) // sample with replacement? +{ + if (!allowDuplicate) // duplicates not allowed + assert(k <= nPts); // can't do more than nPts + + int* sampIdx = new int[k]; // allocate index array + + for (int i = 0; i < k; i++) { // sample each point of sample + int ri = kmRanInt(nPts); // random index in pts + if (!allowDuplicate) { // duplicates not allowed? + bool dupFound; // duplicate found flag + do { // repeat until successful + dupFound = false; + for (int j = 0; j < i; j++) { // search for duplicates + if (sampIdx[j] == ri) { // duplicate found + dupFound = true; + ri = kmRanInt(nPts); // try again + break; + } + } + } while (dupFound); + } + kmCopyPt(dim, pts[ri], sample[i]); // copy sample point + sampIdx[i] = ri; // save index + } + delete [] sampIdx; +} diff --git a/src/k_means/KMdata.h b/src/k_means/KMdata.h new file mode 100644 index 0000000..012fe98 --- /dev/null +++ b/src/k_means/KMdata.h @@ -0,0 +1,107 @@ +//---------------------------------------------------------------------- +// File: KMData.h +// Programmer: David Mount +// Last modified: 03/27/02 +// Description: Include file for KMdata +//---------------------------------------------------------------------- +// Copyright (C) 2004-2005 David M. Mount and University of Maryland +// All Rights Reserved. +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or (at +// your option) any later version. See the file Copyright.txt in the +// main directory. +// +// The University of Maryland and the authors make no representations +// about the suitability or fitness of this software for any purpose. +// It is provided "as is" without express or implied warranty. +//---------------------------------------------------------------------- + +#ifndef KM_DATA_H +#define KM_DATA_H + +#include "k_means/KMeans.h" // kmeans includes +#include "k_means/KCtree.h" // kc-tree includes + +//---------------------------------------------------------------------- +// KMdata - data point set +// This object represents a set of data points in d-space. The +// array can be resized. Doing so destroys the existing contents. +// +// In addition to the points, we also (optionally) provide a +// kc-tree data structure for the points as well. This is +// constructed by first initializing the points and then calling +// buildKcTree(). +// +// We support a virtual function samplePt and samplePts, which +// sample one or a set of random center points. In this version, +// the sample is just a random sample of the point set. However, +// it is possible to derive classes from this in which sampling is +// done by some more sophisticated method. +// +// Note that this structure does not support copying or +// assignments. If you want to resuse the structure, the only way +// to do so is to first apply resize(), which destroys the kc-tree +// (if it exists), and then assign to it a new set of points. +//---------------------------------------------------------------------- + +class KMdata { +private: + int dim; // dimension + int maxPts; // max number of points + int nPts; // number of data points + KMdataArray pts; // the data points + KCtree* kcTree; // kc-tree for the points +private: // copy functions (not implemented) + KMdata(const KMdata& p) // copy constructor + { assert(false); } + KMdata& operator=(const KMdata& p) // assignment operator + { assert(false); return *this; } +public: + KMdata(int d, int n); // standard constructor + + int getDim() const { // get dimension + return dim; + } + int getNPts() const { // get number of points + return nPts; + } + KMdataArray getPts() const { // get the points + return pts; + } + KCtree* getKcTree() const { // get kc-tree + return kcTree; + } + KMdataPoint& operator[](int i) { // index + return pts[i]; + } + const KMdataPoint& operator[](int i) const { + return pts[i]; + } + void setNPts(int n) { // set number of points + assert(n <= maxPts); // can't be more than array size + nPts = n; + } + void buildKcTree(); // build the kc-tree for points + + virtual void sampleCtr( // sample a center point + KMpoint sample); // where to store sample + + virtual void sampleCtrs( // sample center points + KMpointArray sample, // where to store sample + int k, // number of points to sample + bool allowDuplicate); // allowing duplicates? + + void resize(int d, int n); // resize array + + void print( // print data points + bool fancy = true) { // nicely formatted? + kmPrintPts("Data_Points", pts, nPts, dim, fancy); + } + + virtual ~KMdata(); // destructor +}; + +typedef KMdata* KMdataPtr; // pointer to KMdata +#endif diff --git a/src/k_means/KMeans.cpp b/src/k_means/KMeans.cpp new file mode 100644 index 0000000..22d628f --- /dev/null +++ b/src/k_means/KMeans.cpp @@ -0,0 +1,114 @@ +//---------------------------------------------------------------------- +// File: KMeans.cc +// Programmer: David Mount +// Last modified: 05/14/04 +// Description: Shared utilities for k-means. +//---------------------------------------------------------------------- +// Copyright (C) 2004-2005 David M. Mount and University of Maryland +// All Rights Reserved. +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or (at +// your option) any later version. See the file Copyright.txt in the +// main directory. +// +// The University of Maryland and the authors make no representations +// about the suitability or fitness of this software for any purpose. +// It is provided "as is" without express or implied warranty. +//---------------------------------------------------------------------- + +#include // C++ I/O + +#include "k_means/KMeans.h" // kmeans includes +#include "k_means/KCtree.h" // kc tree +#include "k_means/KMrand.h" // random number generators + +//------------------------------------------------------------------------ +// Global data (shared by all files) +// The following variables are used by all the procedures and are +// initialized in kmInitGlobals(). kmInitTime is the CPU time +// needed to initialize things before the first stage. +//------------------------------------------------------------------------ + +StatLev kmStatLev = SILENT; // global stats output level +ostream* kmOut = &std::cout; // standard output stream +ostream* kmErr = &std::cerr; // output error stream +istream* kmIn = &std::cin; // input stream + +//---------------------------------------------------------------------- +// Output utilities +//---------------------------------------------------------------------- + +void kmPrintPt( // print a point + KMpoint p, // the point + int dim, // the dimension + bool fancy) // print plain or fancy? +{ + if (fancy) *kmOut << "[ "; + for (int i = 0; i < dim; i++) { + *kmOut << setw(8) << p[i]; + if (i < dim-1) *kmOut << " "; + } + if (fancy) *kmOut << " ]"; +} + +void kmPrintPts( // print points + string title, // name of point set + KMpointArray pa, // the point array + int n, // number of points + int dim, // the dimension + bool fancy) // print plain or fancy? +{ + *kmOut << " (" << title << ":\n"; + for (int i = 0; i < n; i++) { + *kmOut << " " << i << "\t"; + kmPrintPt(pa[i], dim, fancy); + *kmOut << "\n"; + } + *kmOut << " )" << endl; +} + +//------------------------------------------------------------------------ +// kmError - print error message +// If KMerr is KMabort we also abort the program. +//------------------------------------------------------------------------ + +void kmError( // error routine + const string &msg, // error message + KMerr level) // abort afterwards +{ + if (level == KMabort) { + *kmErr << "kmlocal: ERROR------->" << msg << "<-------------ERROR" + << endl; + *kmOut << "kmlocal: ERROR------->" << msg << "<-------------ERROR" + << endl; + kmExit(1); + } + else { + *kmErr << "kmlocal: WARNING----->" << msg << "<-------------WARNING" + << endl; + *kmOut << "kmlocal: WARNING----->" << msg << "<-------------WARNING" + << endl; + } +} + +//------------------------------------------------------------------------ +// kmExit - exit from program +// This is used because some Windows implementations create a +// tempoarary window, which is removed immediately on exit. +// This keeps until the user verifies termination. +//------------------------------------------------------------------------ + + +void kmExit(int status) // exit program +{ + #ifdef WAIT_FOR_CONFIRM + char ch; + if (kmIn == &cin) { // input from std in + cerr << "Hit return to continue..." << endl; + kmIn->get(ch); + } + #endif + exit(status); +} diff --git a/src/k_means/KMeans.h b/src/k_means/KMeans.h new file mode 100644 index 0000000..9220b48 --- /dev/null +++ b/src/k_means/KMeans.h @@ -0,0 +1,145 @@ +//---------------------------------------------------------------------- +// File: KMeans.h +// Programmer: David Mount +// Last modified: 08/10/05 +// Description: Include file for kmeans algorithms. +//---------------------------------------------------------------------- +// Copyright (C) 2004-2005 David M. Mount and University of Maryland +// All Rights Reserved. +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or (at +// your option) any later version. See the file Copyright.txt in the +// main directory. +// +// The University of Maryland and the authors make no representations +// about the suitability or fitness of this software for any purpose. +// It is provided "as is" without express or implied warranty. +//---------------------------------------------------------------------- +// History: (Changes to source code) +// Version 1.0 04/29/2002 +// Initial release. +// Version: 1.01 10/02/2002 +// Modified output levels. +// Version: 1.1 04/08/2003 +// Added EZ_Hybrid and dampening. Fixed memory leaks. +// Version: 1.2 09/13/2003 +// Added sample programs, kmlsample.cpp and kmlminimal.cpp. +// Version: 1.5 05/14/2004 +// Changed sample program kmlsample to allow random point +// generation. Made minor changes for compilation under Redhat +// Linux and Visual Studio.NET. +// Version: 1.6 03/09/2005 +// Fixed memory leak in KMfilterCenters.cpp. Fixed random +// number error for Microsoft Visual C++. +// Version: 1.7 08/10/2005 +// Added capability for reporting final assignment to clusters. +//---------------------------------------------------------------------- + +#ifndef KMEANS_H +#define KMEANS_H + +#include "k_means/KM_ANN.h" // basic definitions + +using namespace std; // make standard names available + +//---------------------------------------------------------------------- +// Important strings +//---------------------------------------------------------------------- +const string KMshortName = "KMlocal"; +const string KMlongName = "KMlocal (k-means clustering by local search)"; +const string KMversion = "1.7"; +const string KMversionCmt = "(Use at your own risk)"; +const string KMcopyright = "David M. Mount"; +const string KMlatestRev = "August 10, 2005"; + +//------------------------------------------------------------------------ +// Type definitions +// Although data points and centers are of the same type +// as a KMpoint, we distinguish these types here for the +// sake of making the code a little easier to interpret. +// +// KMdataPoint Used for k-means data points. +// KMcenter Used for k-means center points. +// KMpoint Used for any other points and intermediate +// results used in the program. +//------------------------------------------------------------------------ + +typedef KMpoint KMdataPoint; // data point +typedef KMpoint KMcenter; // center point + +typedef KMpointArray KMdataArray; // array of data points +typedef KMpointArray KMcenterArray; // array of center + +typedef KMidx KMdataIdx; // a data point index +typedef KMidx KMctrIdx; // a center point index +typedef KMdataIdx *KMdatIdxArray; // array of data indices +typedef KMctrIdx *KMctrIdxArray; // array of center indices + +//------------------------------------------------------------------------ +// Global constants +//------------------------------------------------------------------------ + +const double KM_ERR = 1E-6; // epsilon (for floating compares) +const double KM_HUGE = DBL_MAX; // huge double value +const int KM_HUGE_INT = INT_MAX; // huge int value + +enum KMerr {KMwarn = 0, KMabort = 1}; // what to do in case of error + +enum StatLev { // output statistics levels + SILENT, // no output + EXEC_TIME, // just execution time + SUMMARY, // summary of entire algorithm + PHASE, // summary of each phase + RUN, // summary of each run + STAGE, // summary of each stage + STEP, // summary of each step + CENTERS, // output centers with each step + TREE, // output tree and points + N_STAT_LEVELS}; // number of levels + +enum KMalg { // k-means algorithm names + LLOYD, // Lloyd's (using filtering) + SWAP, // swap heuristic + HYBRID, // hybrid algorithm + EZ_HYBRID, // EZ-hybrid algorithm + RANDOM, // random centers + N_KM_ALGS}; // number of algorithms + +//---------------------------------------------------------------------- +// Global variables +//---------------------------------------------------------------------- + +extern StatLev kmStatLev; // statistics output level +extern ostream* kmOut; // standard output stream +extern ostream* kmErr; // error output stream +extern istream* kmIn; // input stream + +//---------------------------------------------------------------------- +// Printing utilities +//---------------------------------------------------------------------- + +void kmPrintPt( // print a point + KMpoint p, // the point + int dim, // the dimension + bool fancy = true); // print plain or fancy? + +void kmPrintPts( // print points + string title, // name of point set + KMpointArray pa, // the point array + int n, // number of points + int dim, // the dimension + bool fancy = true); // print plain or fancy? + +//---------------------------------------------------------------------- +// Utility function declarations +//---------------------------------------------------------------------- + +void kmError( // error routine + const string &msg, // error message + KMerr level); // abort afterwards + +void kmExit(int x = 0); // exit the program + +#endif diff --git a/src/k_means/KMfilterCenters.cpp b/src/k_means/KMfilterCenters.cpp new file mode 100644 index 0000000..76b1b3b --- /dev/null +++ b/src/k_means/KMfilterCenters.cpp @@ -0,0 +1,237 @@ +//---------------------------------------------------------------------- +// File: KMfilterCenters.cc +// Programmer: David Mount +// Last modified: 08/10/2005 +// Description: Member functions for KMfilterCenters +//---------------------------------------------------------------------- +// Copyright (C) 2004-2005 David M. Mount and University of Maryland +// All Rights Reserved. +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or (at +// your option) any later version. See the file Copyright.txt in the +// main directory. +// +// The University of Maryland and the authors make no representations +// about the suitability or fitness of this software for any purpose. +// It is provided "as is" without express or implied warranty. +//---------------------------------------------------------------------- + +#include "k_means/KMfilterCenters.h" +#include "k_means/KMrand.h" + + // standard constructor +KMfilterCenters::KMfilterCenters(int k, KMdata& p, double df) + : KMcenters(k, p) { + if (p.getKcTree() == NULL) { // kc-tree not yet built? + kmError("Building kc-tree", KMwarn); + p.buildKcTree(); // build it now + } + sums = kmAllocPts(kCtrs, getDim()); + sumSqs = new double[kCtrs]; + weights = new int[kCtrs]; + dists = new double[kCtrs]; + currDist = KM_HUGE; + dampFactor = df; + invalidate(); // distortions are initially invalid +} + // copy constructor +KMfilterCenters::KMfilterCenters(const KMfilterCenters& s) + : KMcenters(s) { + sums = kmAllocCopyPts(kCtrs, getDim(), s.sums); + sumSqs = kmAllocCopy(kCtrs, s.sumSqs); + weights = kmAllocCopy(kCtrs, s.weights); + dists = kmAllocCopy(kCtrs, s.dists); + currDist = s.currDist; + dampFactor = s.dampFactor; + valid = s.valid; +} + // assignment operator +KMfilterCenters& KMfilterCenters::operator=(const KMfilterCenters& s) { + if (this != &s) { // avoid self copy (x=x) + // different sizes? + if (kCtrs != s.kCtrs || getDim() != s.getDim()) { + kmDeallocPts(sums); // deallocate old storage + delete [] sumSqs; + delete [] weights; + delete [] dists; + // allocate new storage + sums = kmAllocPts(s.kCtrs, s.getDim()); + sumSqs = new double[s.kCtrs]; + weights = new int[s.kCtrs]; + dists = new double[s.kCtrs]; + } + KMcenters& base = *this; + base.operator=(s); // copy base class + // copy array contents + kmCopyPts(kCtrs, getDim(), s.sums, sums); + kmCopy(kCtrs, s.sumSqs, sumSqs); + kmCopy(kCtrs, s.weights, weights); + kmCopy(kCtrs, s.dists, dists); + valid = s.valid; + } + currDist = s.currDist; + dampFactor = s.dampFactor; + return *this; +} + // virtual destructor +KMfilterCenters::~KMfilterCenters() { + kmDeallocPts(sums); + delete [] sumSqs; + delete [] weights; + delete [] dists; +} + +//---------------------------------------------------------------------- +// computeDistortion +// This procedure computes the total and individual distortions for +// a set of center points. It invokes getNeighbors() on the +// kc-tree for the point set,which computes the values of weights, +// sums, and sumSqs, from which the distortion is computed as +// follows. +// +// Distortion Computation: +// ----------------------- +// Assume that some center has been fixed (indexed by j in the code +// below). Let SUM_i denote a summation over all (wgt[j]) +// neighbors of the given center. The data points (p[i]) and +// center points (c[j]) are vectors, and the product of two vectors +// means the dot product (u*v = (u.v), u^2 = (u.u)). The +// distortion for a single center j, denoted dists[j], is defined +// to be the sum of squared distances from each point to its +// closest center, That is: +// +// dists[j] = SUM_i (p[i] - c[j])^2 +// = SUM_i (p[i]^2 - 2*c[j]*p[i] + c[j]^2) +// = SUM_i p[i]^2 - 2*c[j]*SUM_i p[i] + wgt[j]*c[j]^2 +// = sumSqs[j] - 2*(c[j].sums[j]) + wgt[j]*(c[j]^2) +// +// Thus the individual distortion can be computed from these +// quantities. The total distortion is the sum of the individual +// distortions. +//---------------------------------------------------------------------- + +void KMfilterCenters::computeDistortion() // compute distortions +{ + // *kmOut << "------------------------------Computing Distortions" << endl; + KCtree* t = getData().getKcTree(); + assert(t != NULL); // tree better exist + t->getNeighbors(*this); // get neighbors + double totDist = 0; + for (int j = 0; j < kCtrs; j++) { + double cDotC = 0; // init: (c[j] . c[j]) + double cDotS = 0; // init: (c[j] . sum[j]) + for (int d = 0; d < getDim(); d++) { // compute dot products + cDotC += ctrs[j][d] * ctrs[j][d]; + cDotS += ctrs[j][d] * sums[j][d]; + } + // final distortion + dists[j] = sumSqs[j] - 2*cDotS + weights[j]*cDotC; + totDist += dists[j]; + } + currDist = totDist; // save total distortion + + validate(); // distortions are now valid +} + +//---------------------------------------------------------------------- +// getAssignments +// This procedure computes the assignment of points to centers. +// It simply passes the request along to the associated kc-tree. +// +// Even though this makes a full traversal of the kc-tree, it does +// not update the sum or sum of squares, etc., but it does not +// modify them either. Thus, we do not change the validation +// status. +//---------------------------------------------------------------------- +// +void KMfilterCenters::getAssignments( // get point assignments + KMctrIdxArray closeCtr, // closest center per point + double* sqDist) // sq'd dist to center +{ + KCtree* t = getData().getKcTree(); + assert(t != NULL); // tree better exist + t->getAssignments(*this, closeCtr, sqDist); // ask KC tree to do it +} + +//---------------------------------------------------------------------- +// moveToCentroid +// This procedure moves each center point to the centroid of its +// associated cluster. We call computeDistortion() if necessary to +// compute the weights and sums. The centroid is the weighted +// average of the sum of neighbors. Thus the +// +// ctrs[j] = sums[j] / weights[j]. +// +// We generally allow a dampening factor on the motion, which is a +// floating quantity between 0 (full dampening) and 1 (no +// dampening). Given the dampening factor df, the above formula +// is: +// ctrs[j] = (1-df) * ctrs[j] + df * sums[j]/ weights[j] +// +//---------------------------------------------------------------------- + +void KMfilterCenters::moveToCentroid() // move center to cluster centroid +{ + if (!valid) computeDistortion(); // compute sums if needed + for (int j = 0; j < kCtrs; j++) { + int wgt = weights[j]; // weight of this center + if (wgt > 0) { // update only if weight > 0 + for (int d = 0; d < getDim(); d++) { + ctrs[j][d] = (1 - dampFactor) * ctrs[j][d] + + dampFactor * sums[j][d]/wgt; + } + } + } + invalidate(); // distortions now invalid +} + +//---------------------------------------------------------------------- +// swapOneCenter +// Swaps one center point with a sample point. Optionally we make +// sure that the new point is not a duplicate of any of the centers +// (including the point being replaced). +//---------------------------------------------------------------------- +void KMfilterCenters::swapOneCenter( // swap one center + bool allowDuplicate) // allow duplicate centers +{ + int rj = kmRanInt(kCtrs); // index of center to replace + int dim = getDim(); + KMpoint p = kmAllocPt(dim); // alloc replacement point + pts->sampleCtr(p); // sample a replacement + if (!allowDuplicate) { // duplicates not allowed? + bool dupFound; // was a duplicate found? + do { // repeat until successful + dupFound = false; + for (int j = 0; j < kCtrs; j++) { // search for duplicates + if (kmEqualPts(dim, p, ctrs[j])) { + dupFound = true; + pts->sampleCtr(p); // try again + break; + } + } + } while (dupFound); + } + kmCopyPt(dim, p, ctrs[rj]); // copy sampled point + if (kmStatLev >= STEP) { // output swap info + *kmOut << "\tswapping: "; + kmPrintPt(p, getDim(), true); + *kmOut << "<-->Center[" << rj << "]\n"; + } + kmDeallocPt(p); // deallocate point storage + invalidate(); // distortions now invalid +} + +//---------------------------------------------------------------------- +// print centers and distortions +//---------------------------------------------------------------------- + +void KMfilterCenters::print(bool fancy) // print centers and distortion +{ + for (int j = 0; j < kCtrs; j++) { + *kmOut << " " << setw(4) << j << "\t"; + kmPrintPt(ctrs[j], getDim(), true); + *kmOut << " dist = " << setw(8) << dists[j] << endl; + } +} diff --git a/src/k_means/KMfilterCenters.h b/src/k_means/KMfilterCenters.h new file mode 100644 index 0000000..855021e --- /dev/null +++ b/src/k_means/KMfilterCenters.h @@ -0,0 +1,185 @@ +//---------------------------------------------------------------------- +// File: KMfilterCenters.h +// Programmer: David Mount +// Last modified: 08/10/2005 +// Description: Include file for KMfilterCenters +//---------------------------------------------------------------------- +// Copyright (C) 2004-2005 David M. Mount and University of Maryland +// All Rights Reserved. +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or (at +// your option) any later version. See the file Copyright.txt in the +// main directory. +// +// The University of Maryland and the authors make no representations +// about the suitability or fitness of this software for any purpose. +// It is provided "as is" without express or implied warranty. +//---------------------------------------------------------------------- + +#ifndef KM_FILTER_CENTERS_H +#define KM_FILTER_CENTERS_H + +#include "k_means/KMcenters.h" // provides KMcenters + +//---------------------------------------------------------------------- +// KMfilterCenters +// This extends the KMcenters class, by providing a more efficient +// algorithm for computing distortions, by the filtering algorithm. +// This algorithm makes use of a data structure called a kc-tree, +// which is given in the file KCtree.h. In addition to the +// KMcenter functions we provide the following additional +// functions: +// +// getDist() +// getDists() +// Computes the total and individual distortions, +// respectively, for the centers points (see definitions +// below). +// moveToCentroid() +// Moves the center points to the centroids of their +// associated neighborhoods. +// getAssignments() +// Computes the assignment of points to the closest center. +// +// These functions are not computed independently. In particular, +// for a given set of centers, they can each be computed very +// efficiently (in O(k*d) time) provided that some intermediate +// values has already been computed. We maintain a status variable +// "valid," which indicates whether these intermediate values have +// been computed and are current. The intermediate values are +// computed by computeDistortion(). +// +// >> If you modify this class note that any function that << +// >> modifies the center or data points must set run << +// >> invalidate() or equivalently, set valid=false. << +// +// Immediate access: +// ----------------- +// To disable the automatic recomputation of distortions on +// getDist() and getDists(), call them with a "false" argument. +// +// Distortion Overview: +// -------------------- +// Let C[j] denote the j-th center. For each j in [0..k-1], define +// the j-th neighborhood V(j), to be the set of data points that +// are closer to j than to any other center. The "j-th distortion" +// is defined to be the sum of squared distances of every point in +// V(j) to the j-th center. The "total distortion" is the sum of +// the distortions over all the centers. +// +// Intermediate Values: +// -------------------- +// Instead of computing distortions from scratch by brute force +// (which would take O(n*k*d) time), we use an algorithm called the +// filtering algorithm. This algorithm does not compute the +// distortion directly, but instead computes the following +// intermediate values, from which the distortion can be computed +// efficiently. Let j be an index in [0..k-1]. The notation (u.v) +// denotes the dot product of vectors u and v. +// +// KMpoint sums[j] Vector sum of points in V(j) +// double sumsSqs[j] Sum of (u.u) for all u in V(j) +// double weights[j] Number of data points such that +// this C[j] is closest +// +// See the function computeDistortion() and moveToCentroid() for +// explanations of how these quantities are combined to compute +// the total distortion and move centers to their centroids. +// +// Final Values: +// ------------- +// Given the above intermediate values, we then compute the +// following final distortion values. +// +// double dists[j] Total distortion for points of V(j) +// double currDist Current total distortion +// +// Although they are not used by this program, the center +// distortions are useful, because they may be used in a more +// general clustering algorithm to determine whether clusters +// should be split or merged. +//---------------------------------------------------------------------- + +class KMfilterCenters : public KMcenters{ +protected: // intermediates + KMpointArray sums; // vector sum of points + double* sumSqs; // sum of squares + int* weights; // the weight of each center +protected: // distortion data + double* dists; // individual distortions + double currDist; // current total distortion + bool valid; // are sums/distortions valid? + double dampFactor; // dampening factor [0,1] +protected: // local utilities + void computeDistortion(); // compute distortions + void moveToCentroid(); // move centers to cluster centroids + // swap one center + void swapOneCenter(bool allowDuplicate = true); + void validate() // make valid + { valid = true; } + void invalidate() { // make invalid + if (kmStatLev >= CENTERS) print();// print centers + valid = false; + } +public: + // standard constructor + KMfilterCenters(int k, KMdata& p, double df = 1); + // copy constructor + KMfilterCenters(const KMfilterCenters& s); + // assignment operator + KMfilterCenters& operator=(const KMfilterCenters& s); + + virtual ~KMfilterCenters(); // virtual destructor + +public: // public accessors + // returns sums + KMpointArray getSums(bool autoUpdate = true) { + if (autoUpdate && !valid) computeDistortion(); + return sums; + } + // returns sums of squares + double* getSumSqs(bool autoUpdate = true) { + if (autoUpdate && !valid) computeDistortion(); + return sumSqs; + } + // returns weights + int* getWeights(bool autoUpdate = true) { + if (autoUpdate && !valid) computeDistortion(); + return weights; + } + // returns total distortion + double getDist(bool autoUpdate = true) { + if (autoUpdate && !valid) computeDistortion(); + return currDist; + } + // returns average distortion + double getAvgDist(bool autoUpdate = true) { + if (autoUpdate && !valid) computeDistortion(); + return currDist/double(getNPts()); + } + // returns individual distortions + double* getDists(bool autoUpdate = true) { + if (autoUpdate && !valid) computeDistortion(); + return dists; + } + + void getAssignments( // get point assignments + KMctrIdxArray closeCtr, // closest center per point + double* sqDist); // sq'd dist to center + + void genRandom() { // generate random centers + pts->sampleCtrs(ctrs, kCtrs, false); + invalidate(); + } + void lloyd1Stage() { // one stage of LLoyd's algorithm + moveToCentroid(); + } + void swap1Stage() { // one stage of swap heuristic + swapOneCenter(); + } + virtual void print( // print centers + bool fancy = true); +}; +#endif diff --git a/src/k_means/KMlocal.cpp b/src/k_means/KMlocal.cpp new file mode 100644 index 0000000..60f4eaa --- /dev/null +++ b/src/k_means/KMlocal.cpp @@ -0,0 +1,57 @@ +//---------------------------------------------------------------------- +// File: KMlocal.cc +// Programmer: David Mount +// Last modified: 03/27/02 +// Description: k-means clustering by local search +//---------------------------------------------------------------------- +// Copyright (C) 2004-2005 David M. Mount and University of Maryland +// All Rights Reserved. +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or (at +// your option) any later version. See the file Copyright.txt in the +// main directory. +// +// The University of Maryland and the authors make no representations +// about the suitability or fitness of this software for any purpose. +// It is provided "as is" without express or implied warranty. +//---------------------------------------------------------------------- + +#include "k_means/KMlocal.h" // KMlocal includes + +//---------------------------------------------------------------------- +// execute - execute the clustering algorithm +// This function executes the clustering algorithm. See the file +// KMlocal.h for a description of this algorithm. +//---------------------------------------------------------------------- + +KMfilterCenters KMlocal::execute() // execute the algorithm +{ + reset(); // resets everything + while (!isDone()) { // while not done + beginRun(); // start a new run + do { // do while run is not done + beginStage(); // start of stage processing + KMalg method = selectMethod(); // select a method + switch(method) { // apply one stage + case LLOYD: // Lloyd's algorithm + curr.lloyd1Stage(); + break; + case SWAP: // swap heuristic + curr.swap1Stage(); + break; + case RANDOM: // get random centers + curr.genRandom(); + break; + default: // shouldn't come here + assert(false); + break; + } + endStage(); // end of stage processing + } while (!isRunDone()); // while run is not done + endRun(); // end of run processing + tryAcceptance(); // accept if appropriate + } + return best; // return best solution +} diff --git a/src/k_means/KMlocal.h b/src/k_means/KMlocal.h new file mode 100644 index 0000000..fe45e78 --- /dev/null +++ b/src/k_means/KMlocal.h @@ -0,0 +1,846 @@ +//---------------------------------------------------------------------- +// File: KMlocal.h +// Programmer: David Mount +// Last modified: 05/14/04 +// Description: Include file for generic local search kmeans. +//---------------------------------------------------------------------- +// Copyright (C) 2004-2005 David M. Mount and University of Maryland +// All Rights Reserved. +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or (at +// your option) any later version. See the file Copyright.txt in the +// main directory. +// +// The University of Maryland and the authors make no representations +// about the suitability or fitness of this software for any purpose. +// It is provided "as is" without express or implied warranty. +//---------------------------------------------------------------------- + +#ifndef KM_LOCAL_H +#define KM_LOCAL_H + +//---------------------------------------------------------------------- +// basic includes +//---------------------------------------------------------------------- +#include // math includes (exp, log) +#include "k_means/KMeans.h" // kmeans includes +#include "k_means/KMdata.h" // data points +#include "k_means/KMfilterCenters.h" // centers +#include "k_means/KMterm.h" // termination conditions +#include "k_means/KMrand.h" // random number generation + +class KMlocal; +typedef KMlocal* KMlocalPtr; // generic algorithm pointer + +//------------------------------------------------------------------------ +// Generic Local Search Overview +// KMlocal provides a generic algorithm for k-means clustering by +// local search. This generic algorithm is controlled by a class, +// KMlocal, whose methods provide the particular elements of each +// algorithm. +// +// Overview: +// --------- +// The generic algorithm begins by generating an initial solution +// "curr" and saving it in "best". These objects are local to the +// KMlocal structure. The value of "curr" reflects the current +// solution and "best" reflects the best solution seen so far. +// +// The algorithm consists of some number of basic iterations, +// called "stages". Each stage involves the execution of one step +// of either the swap heuristic or Lloyd's algorithm. +// +// Stages are grouped into "runs". Intuitively, a run involves a +// (small) number of stages in search of a better solution. A run +// might end, say, because a better solution was found or a fixed +// number of stages have been performed without any improvement. +// +// After a run is finished, we check to see whether we want to +// "accept" the solution. Presumably this happens if the cost is +// lower, but it may happen even if the cost is inferior in other +// circumstances (e.g., as part of a simulated annealing approach). +// Accepting a solution means copying the current solution to the +// saved solution. In some cases, the acceptance may involve +// reseting the current solution to a random solution. +// +// Generic Algorithm: +// ------------------ +// The generic local search algorithm is shown below. The various +// functions are overridden by the specific classes which provide +// the concrete details. +// +// reset() // resets curr and best +// while ( !isDone() ) { // while not done +// beginRun() // begin a new run +// do { // do while run is not done +// beginStage() // end of stage processing +// method = selectMethod() // select a method +// switch( method ) { // apply the method +// LLOYD: curr.Lloyd(); break +// SWAP: curr.Swap(); break +// RANDOM: curr.Random(); break +// } +// endStage() // end of stage processing +// } while ( !isRunDone() ) // while run is not done +// tryAcceptance() // accept if appropriate +// endRun() // end of run processing +// } +// return best // return best solution +// +// Termination Parameters +// ---------------------- +// Each algorithm relies on various parameter settings to determine +// termination conditions for runs and phases. These settings are +// stored in a class KMterm (see KMterm.h). +// +// Parameters (in term) +// -------------------- +// maxTotStage +// Maximum number of stages total. +//------------------------------------------------------------------------ + +class KMlocal { // generic local search +protected: + // fixed quantities + int nPts; // number of points + int kCtrs; // number of centers + int dim; // dimension + KMterm term; // termination conditions + int maxTotStage; // max total stages (from term) + // varying quantities + int stageNo; // current stage number + int runInitStage; // stage at which run started + KMfilterCenters curr; // current solution + KMfilterCenters best; // saved solution +protected: // utility functions + virtual void printStageStats() { // print stage information + if (kmStatLev >= STAGE) { + *kmOut << "\t" << endl; + } + } +public: + // constructor + KMlocal(const KMfilterCenters &sol, const KMterm &t) + : term(t), curr(sol), best(sol) { + nPts = sol.getNPts(); + kCtrs = sol.getK(); + dim = sol.getDim(); + stageNo = 0; + maxTotStage = term.getMaxTotStage(kCtrs, nPts); + } + + virtual ~KMlocal() { } // virtual destructor + virtual KMfilterCenters execute(); // execute the algorithm + + int getTotalStages() const { // return total no. of stages + return stageNo; + } + +protected: // overridden by subclasses + virtual void reset() { // reset everything + stageNo = 0; + runInitStage = 0; + curr.genRandom(); // generate random centers + curr.getDist(); // compute initial distortion + best = curr; + } + virtual bool isDone() const { // are we done? + return stageNo >= maxTotStage; + } + virtual void beginRun() { // begin of run processing + runInitStage = stageNo; + } + virtual void beginStage() { } // start of stage processing + virtual KMalg selectMethod() = 0; // method: LLOYD or SWAP + virtual void endStage() { // end of stage processing + stageNo++; + } + virtual bool isRunDone() { // is run done? + return isDone(); + } + virtual void endRun() { } // end of run processing + virtual void tryAcceptance() { // test acceptance + if (curr.getDist() < best.getDist()) { // is current distortion lower? + best = curr; // then best the current + } + } +}; + +//------------------------------------------------------------------------ +// Concrete Implementations +// The generic KMlocal class is an abstract class. Each derived +// class provides concrete implementation of the various member +// functions, such as selectMethod() and isRunDone(). +// +// +// Relative Distortion Loss (RDL): +// ------------------------------- +// There are some concepts that are important to run/phase +// transitions. One is the maximum number of stages. Most +// algorithms provide some sort of parameter that limits the number +// of stages that the algorithm can spend in a particular run +// (before giving up). The second is the relative distortion loss, +// or RDL. (See also KMterm.h.) The RDL is defined: +// +// initDistortion - currDistortion +// RDL = ------------------------------- +// initDistortion +// +// Note that a positive value indicates that the distortion has +// decreased. The definition of "initDistortion" depends on the +// algorithm. It may be the distortion of the previous stage +// (RDL = consecutive RDL), or it may be the distortion at the +// beginning of the run (RDL = accumulated RDL). +//------------------------------------------------------------------------ + +//------------------------------------------------------------------------ +// KMlocalLloyds - Lloyd's algorithm with random restarts +// The algorithm is broken into phases, and each phase is broken +// into runs. Each phase starts by sampling center points at +// random. Each run is provided two parameters, a maximum number +// of runs per stage (maxRunStage) and a minimum accumulated +// relative distortion loss (minAccumRDL). If the accumulated RDL +// for the run exceeds this value, then the run ends in success. +// If the number of stages is exceeded before this happens, the run +// ends in failure. The phase ends with the first failed run. +// +// This multi-level algorithm is implemented as follows. When a +// run is finished, we test whether the accumlated RDL exceeds the +// minAccumRDL. If not, then the run is unsuccessful and so we +// need to end the phase. +// +// Parameters (in term) +// -------------------- +// maxRunStage +// Maximum number of stages per run. +// minAccumRDL +// Minimum accumlated RDL for stage to be considered +// successful. +// +// State variables +// --------------- +// initRunDist +// The distortion at the start of the run. +// isNewPhase +// True if this is the first stage at the start of a new +// phase. If true, then random centers are generated. +// Note that since random centers have been generated as +// part of reset(), the initial value is false. +// +// Overridden methods +// ------------------ +// reset() +// Do base class resetting. Initialize isNewPhase to false +// and save the initial run distortion. +// selectMethod() +// If new phase starting the select centers at random, +// otherwise do Lloyds algorithm. +// endStage() +// Do base class endStage processing. If there has been +// an improvement, save the current solution. Output stage +// information. +// isRunDone() +// If the number of stages exceeds the maximum runs per +// stages, then we are done. If this is the first stage of +// the phase, then we are not done, and we do beginning of +// phase processing (by resetting the isNewPhase flag and +// save the current distortion). Otherwise, if the +// relative distortion loss (RDL) is greater than +// minAccumRDL then we are done (success). +// endRun() +// If accumulated RDL < minAccumRDL then the run ended +// unsuccessfully (too many stages) and we request the +// start of a new phase. Otherwise the run has ended +// successfully, and we start a new run by saving the +// current run distortion. +//------------------------------------------------------------------------ + +class KMlocalLloyds : public KMlocal { +private: + double initRunDist; // initial run distortion + bool isNewPhase; // starting new phase +protected: + double accumRDL() // relative RDL for run + { return (initRunDist - curr.getDist()) / initRunDist; } + virtual void printStageStats() { // print end of stage info + if (kmStatLev >= STAGE) { + *kmOut << "\t" << endl; + } + } + virtual void printRunStats() { // print end of run info + if (kmStatLev >= STAGE) { + *kmOut << " " << endl; + } + } +public: + // constructor + KMlocalLloyds(const KMfilterCenters &sol, const KMterm &t) + : KMlocal(sol, t) { } +protected: // overridden methods + virtual void reset() { + KMlocal::reset(); // reset base class + isNewPhase = false; // first phase was started + initRunDist = curr.getDist(); // initialize run dist + printStageStats(); + } + virtual KMalg selectMethod() { // method = Lloyd's + return (isNewPhase ? RANDOM : LLOYD); // ...unless start of phase + } + virtual void endStage() { // end of stage processing + KMlocal::endStage(); // base class processing + // get distortions + if (curr.getAvgDist() < best.getAvgDist()) + best = curr; // update if better + printStageStats(); + } + virtual bool isRunDone() { // is run done + if (KMlocal::isRunDone() || // check base conditions + stageNo - runInitStage >= term.getMaxRunStage()) { + return true; // too many stages + } + else if (isNewPhase) { // start of new phase? + isNewPhase = false; // remove flag + initRunDist = curr.getDist(); // initialize run distortion + return false; // run is just starting + } + else { // continue if improvement + return accumRDL() >= term.getMinAccumRDL(); + } + } + virtual void endRun() { // end of run processing + if (accumRDL() < term.getMinAccumRDL()){// unsuccessful run? + isNewPhase = true; // start a new phase + } + else { + initRunDist = curr.getDist(); // next run distortion + } + printRunStats(); + } +}; + +//------------------------------------------------------------------------ +// KMlocalSwap - an implementation of the p-Swap heuristic +// Each run consists of p executions of the swap heuristic. Each +// sequence of swaps is treated as a single stage. +// +// Parameters (in term) +// -------------------- +// (none) +// +// State variables +// --------------- +// maxSwaps +// Maximum number of swaps per run. +// swapNo Number of swaps so far this run. +// +// Overridden methods +// ------------------ +// beginRun() +// Reset count of swaps. +// selectMethod() +// Swap +// endStage() +// (Does nothing, since stage doesn't end until run ends). +// isRunDone() +// If the number of swaps (incremented) exceeds maxSwaps. +// endRun() +// Gets new distortion and increments stage counter. This +// is the real end of a stage. +// tryAcceptance() +// If distortion decreased copy current to best, else +// restore best centers. +//------------------------------------------------------------------------ + +class KMlocalSwap : public KMlocal { +private: + const int maxSwaps; // maximum swaps per run + int swapNo; // no. of swaps this run +public: + // constructor + KMlocalSwap(const KMfilterCenters &sol, const KMterm &t, int p = 1) + : KMlocal(sol, t), maxSwaps(p) { + } +protected: // overridden methods + virtual void reset() { + KMlocal::reset(); // reset base class + printStageStats(); + } + virtual void beginRun() { // start of run processing + KMlocal::beginRun(); // base class processing + swapNo = 0; // init number of swaps + } + virtual KMalg selectMethod() { // method = Swap + return SWAP; + } + virtual void endStage() { } // do nothing + virtual bool isRunDone() { // run is done + return KMlocal::isRunDone() || // base class say's done + ++swapNo >= maxSwaps; // or enough swaps done + } + + virtual void endRun() { // end of run processing + curr.getDist(); + stageNo++; + printStageStats(); // print stage info + } + virtual void tryAcceptance() { // test acceptance + if (curr.getDist() < best.getDist()) { // current distortion lower? + best = curr; // then save the current + } + else { // current distortion worse + curr = best; // restore old centers + } + } +}; + +//------------------------------------------------------------------------ +// KMlocalHybrid - a hybrid version combining Lloyd's and swaps. +// +// Overview +// -------- +// This implements a hybrid algorithm, which combines both of the +// previous methods along with something like simulated annealing. +// Because this uses a fast annealing schedule (T = T*timeFact) it +// should probably be called simulated quenching. +// +// The algorithm's execution is broken into the following different +// groups. +// +// Stage: One invocation of the Swap or Lloyd's algorithm. +// Run: A run consists of a consecutive sequence of swaps +// followed by a consecutive sequence of Lloyd's steps. A +// graphical representation of one run is presented below. +// +// +--+ +---+ +--------> save -----> +// | | | | Y| +// V | V | | N +// ----> Swap ------> Lloyd's ----> Accept? ----> restore --> +// old +// +// Decisions +// --------- +// There are three decisions which this algorithm needs to make. +// +// Continue swapping or move on to Lloyd's? +// This is based on the simulated annealing decision choice, +// based on the consecutive RDL. +// +// Make another pass through Lloyd's or go to acceptance? +// This is based on whether the relative improvement since the +// last stage (consecutive relative distortion loss) is above a +// certain fixed threshold (minConsecRDL). +// +// Accept the current solution: +// If the current solution is better than the saved solution, +// then yes. Otherwise, use the simulated annealing decision +// choice, based on the accumulated RDL. +// +// Simulated Annealing Choice +// -------------------------- +// Following the principal of simulated annealing, we somtimes +// chose to accept a solution, even if it is not an improvement. +// This choice occurs with probability: +// +// exp(RDL/T), +// +// where RDL is the relative distortion loss (relative to the +// saved solution), and T is the current temperature. Note that +// if RDL > 0 (improvement) then this quantity is > 1, and so we +// always accept. (Note that this is not formally correct, since +// in simulated annealing the probability should be based on the +// absolute distortion change not the relative distortion change.) +// +// Annealing Schedule +// ------------------ +// The temperature value T is a decreasing function of the number +// of the number of stages. It starts at some initial value T0 and +// decreases slowly over time. Rather than using the standard (slow) +// Boltzman annealing schedule, we use the following fast annealing +// schedule, every L stages we set +// +// T = TF * T, +// +// where: +// L (= tempRunLength) is an integer parameter set by the +// user. (Presumably it depends on the number of +// centers and the dimension of the space.) +// TF (= tempReducFactor) is a real number of the form 1-x, +// for some small x. +// +// These parameters are provided by the user and are stored in the +// termination condition class. +// +// Initial Temperature +// ------------------- +// The initial temperature T0 is a tricky thing to set. The user +// supplies a parameter p0 = initProbAccept, the initial +// probability of accepting a random swap. However, the +// probability of acceting a swap depends on the given RDL value. +// To estimate this, for the first L runs we use p0 as the +// probability. Over these runs we compute the average rdl value. +// Once the first L runs have completed, we set T0 so that: +// +// exp(-averageRDL/T0) = initProbAccept, +// +// or equivalently +// +// T0 = -averageRDL/(ln initProbAccept). +// +// Parameters (in term) +// -------------------- +// initProbAccept +// Initial probability of accepting an solution that does +// not alter the distortion. +// tempRunLength +// The number of stages before chaning the temperature. +// tempReducFactor +// The factor by which temperature is reduced at the end of +// a temperature run. +// minConsecRDL +// Minimum consecutive RDL needed to keep Lloyd's algorithm +// going. +// +// State variables +// --------------- +// temperature +// Temperature parameter for simulated annealing. +// initTempRunStage +// The stage number at the start of a temperature run. +// areSwapping +// True if we are still in swapping portion of a run, and +// false if we are in the Lloyd's portion of the run. +// prevDist +// In order to compute the consecutive RDL we need to save +// the distortion at the start of each trip through Lloyd's +// algorithm. +// save Simulated annealing may move to a worse solution at +// times. The "best" solution stores the global best. The +// "save" solution is the solution that simulated annealing +// falls back to if a solution is not accepted. +// sumTrials +// Sum of rdl values during the initial trials, where we +// are trying to estimate the mean RDL value. +// trialCt +// A counter which starts at the number of initial trials. +// When it reaches 0, we compute the average RDL value and +// set the initial temperature value. +// +// Utilities particular to Simulated Annealing +// ------------------------------------------- +// simAnnealAccept() +// Random acceptance test for simulated annealing. +// initTempRun() +// Initialize a temperature run process by computing the +// initial temperature value and saving the current +// stage number in initTempRunStage. +// isTempRunDone() +// Check whether the current temperature run is done. +// endTempRun() +// End a temperature run by updating the temperature value +// and saving the current stage number in initTempRunStage. +// +// Overridden methods +// ------------------ +// reset() +// Do base class resetting. Initialize areSwapping to +// true. Save the current solution in save. Initialize +// temperature runs. +// beginStage() +// Save current distortion in prevDist (for computing +// consecutive RDL). +// selectMethod() +// If we are swapping, use Swap, and otherwise use Lloyd's. +// endStage() +// Increment the stage number, get the distortion, and print +// the end-of-stage information. +// isRunDone() +// If we are swapping, then compute the simulated annealing +// random choice. If it rejects, then we have ended the +// swapping process and are transitioning to Lloyd's +// algorithm. In either case, return false. +// +// If we are doing Lloyd's, return true if the consecutive +// RDL is less than minConsecRDL, meaning that Lloyd's +// algorithm has converged. +// endRun() +// If temperature run is done then do processing for the +// end of a temperature run. Set areSwapping to true. +// tryAcceptance() +// At this point we have completed all the swaps and all +// the Lloyd's iterations. If the distortion has improved +// or if the simulated annealing random choice says to, +// save the current solution (and update the overall best +// if needed). Otherwise, restore the previously saved +// solution. +//------------------------------------------------------------------------ + +template // min function +T kmMin(const T& x, const T& y) +{ return (x < y ? x : y); } + +template // max function +T kmMax(const T& x, const T& y) +{ return (x > y ? x : y); } + +class KMlocalHybrid : public KMlocal { +private: + double temperature; // temperature used in SA + int initTempRunStage; // stage when temp run started + bool areSwapping; // are we swapping? (or Lloyd's) + double prevDist; // distortion from prev stage + double sumTrials; // sum of RDL's over trials + int trialCt; // trial count + KMfilterCenters save; // saved solution +protected: // local utilities + double accumRDL() // accumulated RDL + { return (save.getDist() - curr.getDist()) / save.getDist(); } + + double consecRDL() // consecutive RDL + { return (prevDist - curr.getDist()) / prevDist; } + + virtual void printStageStats() { // print end of stage info + if (kmStatLev >= STAGE) { + *kmOut << " " << endl; + } + } + virtual void printRunStats() { // print end of run info + if (kmStatLev >= STAGE) { + *kmOut << " " << endl; + } + } +protected: // SA utilities + int nTrials() // number of trials + { return kmMax(20, term.getTempRunLength()); } + + bool simAnnealAccept(double rdl) { // random accept choice + double prob; + if (--trialCt >= 0) { // still in trial phase? + sumTrials += fabs(rdl); // increment sum of RDLs + if (trialCt == 0) { // last trial? get temp + temperature = -sumTrials/(nTrials()*log(term.getInitProbAccept())); + initTempRunStage = stageNo; // start counting stages + } + prob = term.getInitProbAccept(); // use initial probability + } + else { // use SA probability + prob = kmMin(term.getInitProbAccept(), exp(rdl/temperature)); + } + return prob > kmRanUnif(); + } + + void initTempRuns() { // initialize for temp runs + sumTrials = 0; + trialCt = nTrials(); + initTempRunStage = KM_HUGE_INT; // not counting stages + } + + bool isTempRunDone() // end of temperature run? + { return stageNo - initTempRunStage >= term.getTempRunLength(); } + + void endTempRun() { // process end of temp run + temperature *= term.getTempReducFact(); // reduce temperature + initTempRunStage = stageNo; + } + +public: + // constructor + KMlocalHybrid(const KMfilterCenters &sol, const KMterm &t) + : KMlocal(sol, t), save(sol) { } +protected: // overridden methods + virtual void reset() { + KMlocal::reset(); // reset base class + save = curr; // save initial centers + areSwapping = true; // start with swapping + initTempRuns(); // initialize sim. annealing + printStageStats(); + } + virtual void beginStage() { // start of stage processing + prevDist = curr.getDist(); // save previous distortion + } + virtual KMalg selectMethod() { // select method + return (areSwapping ? SWAP : LLOYD ); + } + virtual void endStage() { // end of stage processing + stageNo++; // increment stage number + curr.getDist(); // get distortion + printStageStats(); + } + virtual bool isRunDone() { // run is done + if (areSwapping) { // swapping? + if (!simAnnealAccept(consecRDL())) { // check SA acceptance + areSwapping = false; // transition to Lloyd's + } + return false; + } + else { // doing Lloyd's algorithm + return consecRDL() <= term.getMinConsecRDL(); // test for convergence + } + } + virtual void endRun() { // end of run processing + if (isTempRunDone()) endTempRun(); // check/process end of temp run + areSwapping = true; // return to swapping + printRunStats(); + } + virtual void tryAcceptance() { // test acceptance + if (accumRDL() > 0) { // improvement over saved? + save = curr; // save this one + if (save.getDist() < best.getDist()) { // new best? + best = save; + } + } + else if (simAnnealAccept(accumRDL())) { // SA says save anyway + save = best; + } + else { // reject, restore old solution + curr = save; + } + } +}; + +//------------------------------------------------------------------------ +// KMlocalEZ_Hybrid - a simpler hybrid combination of Lloyd's and swaps. +// +// Overview +// -------- +// This implements a simpler hybrid algorithm, than the previous +// one. The algorithm performs only one swap, followed by some +// number of iterations of Lloyd's algorithm. Lloyd's algorithm +// is repeated until the consecutive RDL falls below a given +// threshold. +// +// Stage: One invocation of the Swap or Lloyd's algorithm. +// Run: A run consists of a single swap followed by a consecutive +// sequence of Lloyd's steps. A graphical representation +// of one run is presented below. +// +// +---+ +// | | +// V | +// ----> Swap -------> Lloyd's -----> +// +// Decisions +// --------- +// Make another pass through Lloyd's or go to acceptance? +// This is based on whether the relative improvement since the +// last stage (consecutive relative distortion loss) is above a +// certain fixed threshold (minConsecRDL). +// +// Parameters (in term) +// -------------------- +// minConsecRDL +// Minimum consecutive RDL needed to keep Lloyd's algorithm +// going. +// +// State variables +// --------------- +// areSwapping +// True if we are still in swapping portion of a run, and +// false if we are in the Lloyd's portion of the run. +// prevDist +// In order to compute the consecutive RDL we need to save +// the distortion at the start of each trip through Lloyd's +// algorithm. +// +// Overridden methods +// ------------------ +// reset() +// Do base class resetting. Initialize areSwapping to +// true. +// beginStage() +// Save current distortion in prevDist (for computing +// consecutive RDL). +// selectMethod() +// If we are swapping, use Swap, and otherwise use Lloyd's. +// endStage() +// Increment the stage number, get the distortion, and print +// the end-of-stage information. +// isRunDone() +// If we are swapping, transition to Lloyd's and return +// false. If we are doing Lloyd's, return true if the +// consecutive RDL is less than minConsecRDL, meaning that +// Lloyd's algorithm has converged. +// endRun() +// Set areSwaping to true. +// tryAcceptance() +// At this point we have completed the swap and the Lloyd's +// iterations. Update the overall best if appropriate. +//------------------------------------------------------------------------ + +class KMlocalEZ_Hybrid : public KMlocal { +private: + bool areSwapping; // are we swapping? (or Lloyd's) + double prevDist; // distortion from prev stage +protected: // local utilities + double consecRDL() // consecutive RDL + { return (prevDist - curr.getDist()) / prevDist; } + + virtual void printStageStats() { // print end of stage info + if (kmStatLev >= STAGE) { + *kmOut << " " << endl; + } + } + virtual void printRunStats() { // print end of run info + if (kmStatLev >= STAGE) { + *kmOut << " " << endl; + } + } +public: + // constructor + KMlocalEZ_Hybrid(const KMfilterCenters &sol, const KMterm &t) + : KMlocal(sol, t) { } +protected: // overridden methods + virtual void reset() { + KMlocal::reset(); // reset base class + areSwapping = true; // start with swapping + printStageStats(); + } + virtual void beginStage() { // start of stage processing + prevDist = curr.getDist(); // save previous distortion + } + virtual KMalg selectMethod() { // select method + return (areSwapping ? SWAP : LLOYD ); + } + virtual void endStage() { // end of stage processing + stageNo++; // increment stage number + curr.getDist(); // get distortion + printStageStats(); + } + virtual bool isRunDone() { // run is done + if (areSwapping) { // swapping? + areSwapping = false; // transition to Lloyd's + return false; + } + else { // doing Lloyd's algorithm + return consecRDL() <= term.getMinConsecRDL(); // test for convergence + } + } + virtual void endRun() { // end of run processing + areSwapping = true; // return to swapping + printRunStats(); + } + virtual void tryAcceptance() { // test acceptance + if (curr.getDist() < best.getDist()) { // new best? + best = curr; + } + } +}; + +#endif diff --git a/src/k_means/KMrand.cpp b/src/k_means/KMrand.cpp new file mode 100644 index 0000000..0c84ffb --- /dev/null +++ b/src/k_means/KMrand.cpp @@ -0,0 +1,609 @@ +//---------------------------------------------------------------------- +// File: KMrand.cpp +// Programmer: Sunil Arya and David Mount +// Last modified: 05/14/04 +// Description: Routines for random point generation +//---------------------------------------------------------------------- +// Copyright (C) 2004-2005 David M. Mount and University of Maryland +// All Rights Reserved. +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or (at +// your option) any later version. See the file Copyright.txt in the +// main directory. +// +// The University of Maryland and the authors make no representations +// about the suitability or fitness of this software for any purpose. +// It is provided "as is" without express or implied warranty. +//---------------------------------------------------------------------- + +#include "k_means/KMrand.h" // random generator declarations + +#ifdef WIN32 // Visual C++ (no srandom/random) +void srandom(unsigned int seed) { srand(seed); } +long random(void) { return long(rand()); } +#endif + +//---------------------------------------------------------------------- +// Globals +//---------------------------------------------------------------------- +int kmIdum = 0; // used for random number generation + +//------------------------------------------------------------------------ +// kmRan0 - (safer) uniform random number generator +// +// The code given here is taken from "Numerical Recipes in C" by +// William Press, Brian Flannery, Saul Teukolsky, and William +// Vetterling. The task of the code is to do an additional randomizing +// shuffle on the system-supplied random number generator to make it +// safer to use. +// +// Returns a uniform deviate between 0.0 and 1.0 using the +// system-supplied routine "random()". Set kmIdum to any negative value +// to initialise or reinitialise the sequence. +//------------------------------------------------------------------------ + +static double kmRan0() +{ + int j; + + static double y, maxran, v[98]; // The exact number 98 is unimportant + static int iff = 0; + + // As a precaution against misuse, we will always initialize on the first + // call, even if "kmIdum" is not set negative. Determine "maxran", the + // next integer after the largest representable value of type int. We + // assume this is a factor of 2 smaller than the corresponding value of + // type unsigned int. + + if (kmIdum < 0 || iff == 0) { // initialize + /* compute maximum random number */ +#ifdef WIN32 // Microsoft Visual C++ + maxran = RAND_MAX; +#else + unsigned i, k; + i = 2; + do { + k = i; + i <<= 1; + } while (i); + maxran = (double) k; +#endif + iff = 1; + + srandom(kmIdum); + kmIdum = 1; + + for (j = 1; j <= 97; j++) // exercise the system routine + random(); // (value intentionally ignored) + + for (j = 1; j <= 97; j++) // Then save 97 values and a 98th + v[j] = random(); + y = random(); + } + + // This is where we start if not initializing. Use the previously saved + // random number y to get an index j between 1 and 97. Then use the + // corresponding v[j] for both the next j and as the output number. */ + + j = 1 + (int) (97.0 * (y / maxran)); + y = v[j]; + v[j] = random(); // Finally, refill the table entry + // with the next random number from + // "random()" + return(y / maxran); +} + +//------------------------------------------------------------------------ +// kmRanInt - generate a random integer from {0,1,...,n-1} +// +// If n == 0, then -1 is returned. +//------------------------------------------------------------------------ + +int kmRanInt( + int n) +{ + int r = (int) (kmRan0()*n); + if (r == n) r--; // (in case kmRan0() == 1 or n == 0) + return r; +} + +//------------------------------------------------------------------------ +// kmRanUnif - generate a random uniform in [lo,hi] +//------------------------------------------------------------------------ + +double kmRanUnif( + double lo, + double hi) +{ + return kmRan0()*(hi-lo) + lo; +} + +//------------------------------------------------------------------------ +// kmRanGauss - Gaussian random number generator +// Returns a normally distributed deviate with zero mean and unit +// variance, using kmRan0() as the source of uniform deviates. +//------------------------------------------------------------------------ + +static double kmRanGauss() +{ + static int iset=0; + static double gset; + + if (iset == 0) { // we don't have a deviate handy + double v1, v2; + double r = 2.0; + while (r >= 1.0) { + //------------------------------------------------------------ + // Pick two uniform numbers in the square extending from -1 to + // +1 in each direction, see if they are in the circle of radius + // 1. If not, try again + //------------------------------------------------------------ + v1 = kmRanUnif(-1, 1); + v2 = kmRanUnif(-1, 1); + r = v1 * v1 + v2 * v2; + } + double fac = sqrt(-2.0 * log(r) / r); + //----------------------------------------------------------------- + // Now make the Box-Muller transformation to get two normal + // deviates. Return one and save the other for next time. + //----------------------------------------------------------------- + gset = v1 * fac; + iset = 1; // set flag + return v2 * fac; + } + else { // we have an extra deviate handy + iset = 0; // so unset the flag + return gset; // and return it + } +} + +//------------------------------------------------------------------------ +// kmRanLaplace - Laplacian random number generator +// Returns a Laplacian distributed deviate with zero mean and +// unit variance, using kmRan0() as the source of uniform deviates. +// +// prob(x) = b/2 * exp(-b * |x|). +// +// b is chosen to be sqrt(2.0) so that the variance of the Laplacian +// distribution [2/(b^2)] becomes 1. +//------------------------------------------------------------------------ + +static double kmRanLaplace() +{ + const double b = 1.4142136; + + double laprand = -log(kmRan0()) / b; + double sign = kmRan0(); + if (sign < 0.5) laprand = -laprand; + return(laprand); +} + +//---------------------------------------------------------------------- +// kmUniformPts - Generate uniformly distributed points +// A uniform distribution over [-1,1]. +//---------------------------------------------------------------------- + +void kmUniformPts( // uniform distribution + KMpointArray pa, // point array (modified) + int n, // number of points + int dim) // dimension +{ + for (int i = 0; i < n; i++) { + for (int d = 0; d < dim; d++) { + pa[i][d] = (KMcoord) (kmRanUnif(-1,1)); + } + } +} + +//---------------------------------------------------------------------- +// kmGaussPts - Generate Gaussian distributed points +// A Gaussian distribution with zero mean and the given standard +// deviation. +//---------------------------------------------------------------------- + +void kmGaussPts( // Gaussian distribution + KMpointArray pa, // point array (modified) + int n, // number of points + int dim, // dimension + double std_dev) // standard deviation +{ + for (int i = 0; i < n; i++) { + for (int d = 0; d < dim; d++) { + pa[i][d] = (KMcoord) (kmRanGauss() * std_dev); + } + } +} + +//---------------------------------------------------------------------- +// kmLaplacePts - Generate Laplacian distributed points +// Generates a Laplacian distribution (zero mean and unit variance). +//---------------------------------------------------------------------- + +void kmLaplacePts( // Laplacian distribution + KMpointArray pa, // point array (modified) + int n, // number of points + int dim) // dimension +{ + for (int i = 0; i < n; i++) { + for (int d = 0; d < dim; d++) { + pa[i][d] = (KMcoord) kmRanLaplace(); + } + } +} + +//---------------------------------------------------------------------- +// kmCoGaussPts - Generate correlated Gaussian distributed points +// Generates a Gauss-Markov distribution of zero mean and unit +// variance. +//---------------------------------------------------------------------- + +void kmCoGaussPts( // correlated-Gaussian distribution + KMpointArray pa, // point array (modified) + int n, // number of points + int dim, // dimension + double correlation) // correlation +{ + double std_dev_w = sqrt(1.0 - correlation * correlation); + for (int i = 0; i < n; i++) { + double previous = kmRanGauss(); + pa[i][0] = (KMcoord) previous; + for (int d = 1; d < dim; d++) { + previous = correlation*previous + std_dev_w*kmRanGauss(); + pa[i][d] = (KMcoord) previous; + } + } +} + +//---------------------------------------------------------------------- +// kmCoLaplacePts - Generate correlated Laplacian distributed points +// Generates a Laplacian-Markov distribution of zero mean and unit +// variance. +//---------------------------------------------------------------------- + +void kmCoLaplacePts( // correlated-Laplacian distribution + KMpointArray pa, // point array (modified) + int n, // number of points + int dim, // dimension + double correlation) // correlation +{ + double wn; + double corr_sq = correlation * correlation; + + for (int i = 0; i < n; i++) { + double previous = kmRanLaplace(); + pa[i][0] = (KMcoord) previous; + for (int d = 1; d < dim; d++) { + double temp = kmRan0(); + if (temp < corr_sq) + wn = 0.0; + else + wn = kmRanLaplace(); + previous = correlation * previous + wn; + pa[i][d] = (KMcoord) previous; + } + } +} + +//---------------------------------------------------------------------- +// kmClusGaussPts - Generate clusters of Gaussian distributed points +// Cluster centers are uniformly distributed over [-1,1], and the +// standard deviation within each cluster is fixed. +// +// Note: Once cluster centers have been set, they are not changed, +// unless new_clust = true. This is so that subsequent calls generate +// points from the same distribution. It follows, of course, that any +// attempt to change the dimension or number of clusters without +// generating new clusters is asking for trouble. +// +// Note: Cluster centers are not generated by a call to uniformPts(). +// Although this could be done, it has been omitted for +// compatibility with kmClusGaussPts() in the colored version, +// rand_c.cc. +// +// As a side effect we compute the cluster separation. This is +// defined to be min_{i != j} dist(cc[i],cc[j])/std, where cc[i] is +// the i-th cluster center and std is the global deviation. It is +// defined to be the square root of the trace of the covariance +// matrix, which is equivalent to the std_dev for each coordinate +// times sqrt(d). +//---------------------------------------------------------------------- +static KMpointArray cgClusters = NULL; // cluster storage + +void kmClusGaussPts( // clustered-Gaussian distribution + KMpointArray pa, // point array (modified) + int n, // number of points + int dim, // dimension + int n_col, // number of colors + bool new_clust, // generate new clusters. + double std_dev, // standard deviation within clusters + double* clus_sep) // cluster separation (returned) +{ + if (cgClusters == NULL || new_clust) {// need new cluster centers + if (cgClusters != NULL) // clusters already exist + kmDeallocPts(cgClusters); // get rid of them + cgClusters = kmAllocPts(n_col, dim); + // generate cluster center coords + for (int i = 0; i < n_col; i++) { + for (int d = 0; d < dim; d++) { + cgClusters[i][d] = (KMcoord) kmRanUnif(-1,1); + } + } + } + + double minDist = double(dim); // minimum inter-center sq'd distance + for (int i = 0; i < n_col; i++) { // compute minimum separation + for (int j = i+1; j < n_col; j++) { + double dist = kmDist(dim, cgClusters[i], cgClusters[j]); + if (dist < minDist) minDist = dist; + } + } + // cluster separation + if (clus_sep != NULL) + *clus_sep = sqrt(minDist)/(sqrt(double(dim))*std_dev); + + for (int i = 0; i < n; i++) { + int c = kmRanInt(n_col); // generate cluster index + for (int d = 0; d < dim; d++) { + pa[i][d] = (KMcoord) (std_dev*kmRanGauss() + cgClusters[c][d]); + } + } +} + +KMpointArray kmGetCGclusters() // get clustered gauss cluster centers +{ + return cgClusters; +} + +//---------------------------------------------------------------------- +// kmClusOrthFlats - points clustered along orthogonal flats +// +// This distribution consists of a collection points clustered +// among a collection of low dimensional flats (hyperplanes) in +// the hypercube [-1,1]^d. A set of n_col orthogonal flats are +// generated, each whose dimension is a random number between 1 +// and max_dim. The points are evenly distributed among the clusters. +// For each cluster, we generate points uniformly distributed along +// the flat within the hypercube. +// +// This is done as follows. Each cluster is defined by a d-element +// control vector whose components are either: +// +// CO_FLAG indicating that this component is to be generated +// uniformly in [-1,1], +// x a value other than CO_FLAG in the range [-1,1], +// which indicating that this coordinate is to be +// generated as x plus a Gaussian random deviation +// with the given standard deviation. +// +// The number of zero components is the dimension of the flat, which +// is a random integer in the range from 1 to max_dim. The points +// are disributed between clusters in nearly equal sized groups. +// +// Note: Once cluster centers have been set, they are not changed, +// unless new_clust = true. This is so that subsequent calls generate +// points from the same distribution. It follows, of course, that any +// attempt to change the dimension or number of clusters without +// generating new clusters is asking for trouble. +// +// To make this a bad scenario at query time, query points should be +// selected from a different distribution, e.g. uniform or Gaussian. +// +// We use a little programming trick to generate groups of roughly +// equal size. If n is the total number of points, and n_col is +// the number of clusters, then the c-th cluster (0 <= c < n_col) +// is given floor((n+c)/n_col) points. It can be shown that this +// will exactly consume all n points. +// +//---------------------------------------------------------------------- + +void kmClusOrthFlats( // clustered along orthogonal flats + KMpointArray pa, // point array (modified) + int n, // number of points + int dim, // dimension + int n_col, // number of colors + bool new_clust, // generate new clusters. + double std_dev, // standard deviation within clusters + int max_dim) // maximum dimension of the flats +{ + const double CO_FLAG = 999; // special flag value + static KMpointArray control = NULL; // control vectors + + if (control == NULL || new_clust) { // need new cluster centers + if (control != NULL) { // clusters already exist + kmDeallocPts(control); // get rid of them + } + control = kmAllocPts(n_col, dim); + + for (int c = 0; c < n_col; c++) { // generate clusters + int n_dim = 1 + kmRanInt(max_dim); // number of dimensions in flat + for (int d = 0; d < dim; d++) { // generate side locations + // prob. of picking next dim + double Prob = ((double) n_dim)/((double) (dim-d)); + if (kmRan0() < Prob) { // add this one to flat + control[c][d] = CO_FLAG; // flag this entry + n_dim--; // one fewer dim to fill + } + else { // don't take this one + control[c][d] = kmRanUnif(-1,1);// random value in [-1,1] + } + } + } + } + + int next = 0; // next slot to fill + for (int c = 0; c < n_col; c++) { // generate clusters + int pick = (n+c)/n_col; // number of points to pick + for (int i = 0; i < pick; i++) { + for (int d = 0; d < dim; d++) { + if (control[c][d] == CO_FLAG) // dimension on flat + pa[next][d] = (KMcoord) kmRanUnif(-1,1); + else // dimension off flat + pa[next][d] = + (KMcoord) (std_dev*kmRanGauss() + control[c][d]); + } + next++; + } + } +} + +//---------------------------------------------------------------------- +// kmClusEllipsoids - points clustered around ellipsoids +// +// This distribution consists of a collection points clustered +// among a collection of low dimensional ellipsoids in the +// hypercube [-1,1]^d. The objective is to model distributions +// in which the points are distributed in lower dimensional +// subspaces, and within this lower dimensional space the points +// are distributed with a Gaussian distribution (with no +// correlation between the dimensions). +// +// The distribution is given the number of clusters or "colors" +// (n_col), maximum number of dimensions (max_dim) of the lower +// dimensional subspace, a "small" standard deviation (std_dev_small), +// and a "large" standard deviation range (std_dev_lo, std_dev_hi). +// +// The algorithm generates n_col cluster centers uniformly from the +// hypercube [-1,1]^d. For each cluster, it selects the dimension +// of the subspace as a random number r between 1 and max_dim. +// These are the dimensions of the ellipsoid. Then it generates +// a d-element std dev vector whose entries are the standard +// deviation for the coordinates of each cluster in the distribution. +// Among the d-element control vector, r randomly chosen values are +// chosen uniformly from the range [std_dev_lo, std_dev_hi]. The +// remaining values are set to std_dev_small. +// +// Note that kmClusGaussPts is a special case of this in which +// max_dim = 0, and std_dev = std_dev_small. +// +// If the flag new_clust is set, then new cluster centers are +// generated. +// +//---------------------------------------------------------------------- + +void kmClusEllipsoids( // clustered around ellipsoids + KMpointArray pa, // point array (modified) + int n, // number of points + int dim, // dimension + int n_col, // number of colors + bool new_clust, // generate new clusters. + double std_dev_small, // small standard deviation + double std_dev_lo, // low standard deviation for ellipses + double std_dev_hi, // high standard deviation for ellipses + int max_dim) // maximum dimension of the flats +{ + static KMpointArray clusters = NULL; // cluster centers + static KMpointArray stdDev = NULL; // standard deviations + + if (clusters == NULL || new_clust) { // need new cluster centers + if (clusters != NULL) // clusters already exist + kmDeallocPts(clusters); // get rid of them + if (stdDev != NULL) // std deviations already exist + kmDeallocPts(stdDev); // get rid of them + + clusters = kmAllocPts(n_col, dim); // alloc new clusters and devs + stdDev = kmAllocPts(n_col, dim); + + for (int i = 0; i < n_col; i++) { // gen cluster center coords + for (int d = 0; d < dim; d++) { + clusters[i][d] = (KMcoord) kmRanUnif(-1,1); + } + } + for (int c = 0; c < n_col; c++) { // generate cluster std dev + int n_dim = 1 + kmRanInt(max_dim); // number of dimensions in flat + for (int d = 0; d < dim; d++) { // generate std dev's + // prob. of picking next dim + double Prob = ((double) n_dim)/((double) (dim-d)); + if (kmRan0() < Prob) { // add this one to ellipse + // generate random std dev + stdDev[c][d] = kmRanUnif(std_dev_lo, std_dev_hi); + n_dim--; // one fewer dim to fill + } + else { // don't take this one + stdDev[c][d] = std_dev_small;// use small std dev + } + } + } + } + + int next = 0; // next slot to fill + for (int c = 0; c < n_col; c++) { // generate clusters + int pick = (n+c)/n_col; // number of points to pick + for (int i = 0; i < pick; i++) { + for (int d = 0; d < dim; d++) { + pa[next][d] = (KMcoord) + (stdDev[c][d]*kmRanGauss() + clusters[c][d]); + } + next++; + } + } +} + +//---------------------------------------------------------------------- +// kmMultiClus - multi-sized clusters +// This distribution is designed to be a challenge for clustering +// algorithm. It consists of a clusters of varying sizes, located +// within the cube [-1,1]^d. The cluster centers are uniformly +// distributed. We generate clusters one by one. For each +// cluster, the size of the cluster m is chosen so that the +// probability of generating a cluster of size 2^i is 1/2^i. +// +// We want each cluster to have a similar total squared distortion +// (variance). Thus a group of size m is generated from a gaussian +// distribution with a standard deviation of B*sqrt(1/m). We call +// B the base standard deviation, which is given as an argument. +// +// The expected number of clusters is (lg n)-2, but there is a very +// high variance here. The total distortion in each dimension then +// is B^2*((lg n)-2) (but don't trust me here, since this is just +// based on back-of- the-envelope computations). Hence the expected +// average distortion, for n points in dim d would be: +// +// d*B^2*((log n)-2)/n +// +// The reason that this is challenging is that each cluster has an +// equal claim to a center (since distortions are similar) but many +// sampling based methods will favor placing clusters in the +// relatively few clusters with a large number of points. +//---------------------------------------------------------------------- + +void kmMultiClus( // multi-sized clusters + KMpointArray pa, // point array (modified) + int n, // number of points + int dim, // dimension + int &k, // number of clusters (returned) + double base_dev) // base standard deviation +{ + int next = 0; // next point in array + int nSamp = 0; // number of points sampled + k = 0; // number of clusters generated + KMpoint clusCenter = kmAllocPt(dim); // allocate center storage + while (nSamp < n) { // until we have sampled enough + int remain = n - nSamp; // number remaining to sample + int clusSize = 2; + // repeatedly double cluster size + // with prob 1/2 + while ((clusSize < remain) && (kmRan0() < 0.5)) + clusSize *= 2; + // don't exceed upper limit + if (clusSize > remain) clusSize = remain; + + // generate center uniformly + for (int d = 0; d < dim; d++) { + clusCenter[d] = (KMcoord) kmRanUnif(-1,1); + } + // desired std dev for cluster + double stdDev = base_dev*sqrt(1.0/clusSize); + // generate cluster points + for (int i = 0; i < clusSize; i++) { + for (int d = 0; d < dim; d++) { + pa[next][d] = (KMcoord) (stdDev*kmRanGauss()+clusCenter[d]); + } + next++; + } + nSamp += clusSize; // update number sampled + k++; // one more cluster + } + kmDeallocPt(clusCenter); +} diff --git a/src/k_means/KMrand.h b/src/k_means/KMrand.h new file mode 100644 index 0000000..d8c3b22 --- /dev/null +++ b/src/k_means/KMrand.h @@ -0,0 +1,113 @@ +//---------------------------------------------------------------------- +// File: KMrand.h +// Programmer: Sunil Arya and David Mount +// Last modified: 03/27/02 +// Description: Old include file for random point generators +//---------------------------------------------------------------------- +// Copyright (C) 2004-2005 David M. Mount and University of Maryland +// All Rights Reserved. +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or (at +// your option) any later version. See the file Copyright.txt in the +// main directory. +// +// The University of Maryland and the authors make no representations +// about the suitability or fitness of this software for any purpose. +// It is provided "as is" without express or implied warranty. +//---------------------------------------------------------------------- + +#ifndef KM_RAND_H +#define KM_RAND_H + +//---------------------------------------------------------------------- +// Old includes +//---------------------------------------------------------------------- +#include // standard C++ includes +#include // math routines +#include "k_means/KMeans.h" // KMeans includes + +//---------------------------------------------------------------------- +// Globals +//---------------------------------------------------------------------- +extern int kmIdum; // used for random number generation + +//---------------------------------------------------------------------- +// External entry points +//---------------------------------------------------------------------- + +int kmRanInt( // random integer + int n); // in the range [0,n-1] + +double kmRanUnif( // random uniform in [lo,hi] + double lo = 0.0, + double hi = 1.0); + +void kmUniformPts( // uniform distribution + KMpointArray pa, // point array (modified) + int n, // number of points + int dim); // dimension + +void kmGaussPts( // Gaussian distribution + KMpointArray pa, // point array (modified) + int n, // number of points + int dim, // dimension + double std_dev); // standard deviation + +void kmCoGaussPts( // correlated-Gaussian distribution + KMpointArray pa, // point array (modified) + int n, // number of points + int dim, // dimension + double correlation); // correlation + +void kmLaplacePts( // Laplacian distribution + KMpointArray pa, // point array (modified) + int n, // number of points + int dim); // dimension + +void kmCoLaplacePts( // correlated-Laplacian distribution + KMpointArray pa, // point array (modified) + int n, // number of points + int dim, // dimension + double correlation); // correlation + +void kmClusGaussPts( // clustered-Gaussian distribution + KMpointArray pa, // point array (modified) + int n, // number of points + int dim, // dimension + int n_col, // number of colors (clusters) + bool new_clust = true, // generate new cluster centers + double std_dev = 0.1, // std deviation within clusters + double* clus_sep = NULL); // cluster separation (returned) + +KMpointArray kmGetCGclusters(); // get clustered-gauss cluster centers + +void kmClusOrthFlats( // clustered along orthogonal flats + KMpointArray pa, // point array (modified) + int n, // number of points + int dim, // dimension + int n_col, // number of colors + bool new_clust, // generate new clusters. + double std_dev, // standard deviation within clusters + int max_dim); // maximum dimension of the flats + +void kmClusEllipsoids( // clustered around ellipsoids + KMpointArray pa, // point array (modified) + int n, // number of points + int dim, // dimension + int n_col, // number of colors + bool new_clust, // generate new clusters. + double std_dev_small, // small standard deviation + double std_dev_lo, // low standard deviation for ellipses + double std_dev_hi, // high standard deviation for ellipses + int max_dim); // maximum dimension of the flats + +void kmMultiClus( // multi-sized clusters + KMpointArray pa, // point array (modified) + int n, // number of points + int dim, // dimension + int &k, // number of clusters (returned) + double base_dev); // base standard deviation + +#endif diff --git a/src/k_means/KMterm.cpp b/src/k_means/KMterm.cpp new file mode 100644 index 0000000..cf172a1 --- /dev/null +++ b/src/k_means/KMterm.cpp @@ -0,0 +1,70 @@ +//---------------------------------------------------------------------- +// File: KMterm.cc +// Programmer: David Mount +// Last modified: 03/27/02 +// Description: Functions for KMterm.h +//---------------------------------------------------------------------- +// Copyright (C) 2004-2005 David M. Mount and University of Maryland +// All Rights Reserved. +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or (at +// your option) any later version. See the file Copyright.txt in the +// main directory. +// +// The University of Maryland and the authors make no representations +// about the suitability or fitness of this software for any purpose. +// It is provided "as is" without express or implied warranty. +//---------------------------------------------------------------------- + +#include // math includes +#include "k_means/KMterm.h" + +//---------------------------------------------------------------------- +// Default constructor +// These are not reasonable values. Use the standard constructor if +// you want meaningful results. +//---------------------------------------------------------------------- +KMterm::KMterm() { // default constructor + for (int i = 0; i < KM_TERM_VEC_LEN; i++) { + maxTotStageVec[i] = 0; + } + minConsecRDL = 0; + minAccumRDL = 0; + maxRunStage = 0; + initProbAccept = 0; + tempRunLength = 0; + tempReducFact = 0; +} + +//---------------------------------------------------------------------- +// Standard constructor +//---------------------------------------------------------------------- +KMterm::KMterm( // standard constructor + double a, double b, double c, double d, // maxTotStage + double mcr, double mar, int mrs, + double ipa, int trl, double trf) +{ + maxTotStageVec[0] = a; maxTotStageVec[1] = b; + maxTotStageVec[2] = c; maxTotStageVec[3] = d; + minConsecRDL = mcr; + minAccumRDL = mar; + maxRunStage = mrs; + initProbAccept = ipa; + tempRunLength = trl; + tempReducFact = trf; +} + +int KMterm::maxStage(const double param[KM_TERM_VEC_LEN], + int k, int n) const +{ + double count = param[KM_TERM_CONST]; + if (param[KM_TERM_POW] != 0) { + double sum = param[KM_TERM_LIN_K] * k + param[KM_TERM_LIN_N] * n; + count += pow(sum, param[KM_TERM_POW]); + } + assert(count >= 0 && count <= INT_MAX); // should be positive integer + if (count <= 0) count = INT_MAX; // 0 means infinity + return int(count); +} diff --git a/src/k_means/KMterm.h b/src/k_means/KMterm.h new file mode 100644 index 0000000..c84981c --- /dev/null +++ b/src/k_means/KMterm.h @@ -0,0 +1,158 @@ +//---------------------------------------------------------------------- +// File: KMterm.h +// Programmer: David Mount +// Last modified: 03/27/02 +// Description: Include file for kmeans algorithms. +//---------------------------------------------------------------------- +// Copyright (C) 2004-2005 David M. Mount and University of Maryland +// All Rights Reserved. +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or (at +// your option) any later version. See the file Copyright.txt in the +// main directory. +// +// The University of Maryland and the authors make no representations +// about the suitability or fitness of this software for any purpose. +// It is provided "as is" without express or implied warranty. +//---------------------------------------------------------------------- + +#ifndef KM_TERM_H +#define KM_TERM_H + +#include "k_means/KMeans.h" + +//------------------------------------------------------------------------ +// KMterm - termination condition +// This structure is used for storing information controlling the +// termination and phase changes of the various algorithms. +// +// Maximum Total Stages: +// --------------------- +// The algorithm is terminated after some maximum number of stages +// have been performed. Rather than computing this as a fixed +// constant, it is given as a function of n (number of data points) +// and k (number of centers). We use the following formula, where +// the coefficients a, ..., d are supplied by the user (see +// kmltest.cpp). +// +// MAX_STAGE = a + (b*k + c*n)^d +// +// Parameters Determining Phase/Run Transitions: +// --------------------------------------------- +// The local improvement algorithms consist of a series of stages, +// which are grouped into "runs" and series of runs are grouped in +// "phases". The meaning of these groupings depends on the +// particular algorithm. (See KMlocal.h for more information.) The +// transition between runs and phases are either based on the +// number of stages performed or on the change in distortion over +// the course of the run. +// +// maxRunStage +// This is used to limit the maximum number of stages in +// any run. +// +// Some transitions are defined in terms of a quantity called the +// "relative distortion loss" (RDL), which is defined to be the +// relative decrease in the distortion. (See KMlocal.h for +// definition.) The relative distortion loss between the current +// and previous stages is called the "consecutive RDL" and the +// relative distortion loss since the start of a run is called the +// "accumulated RDL". +// +// minConsecRDL +// This is used in the hybrid's algorithm. If the RDL of +// two consecutive runs is less than this value, Lloyd's +// algorithm is deemed to have converged. +// minAccumRDL +// This is used in run-based algorithms. It is the RDL of +// the current distortion relative to the distortion at +// some prior time (e.g. the start of a run). +// +// Parameters used in Simulated Annealing +// -------------------------------------- +// initProbAccept +// Initial probability of accepting an solution that does +// not alter the distortion. +// tempRunLength +// The number of stages before chaning the temperature. +// tempReducFactor +// The factor by which temperature is reduced at the end of +// a temperature run. +//------------------------------------------------------------------------ + +enum { // entry names + KM_TERM_CONST, // constant term + KM_TERM_LIN_K, // linear k multiplier + KM_TERM_LIN_N, // linear n multiplier + KM_TERM_POW, // power exponent + KM_TERM_VEC_LEN}; // length of termination param vector + +class KMterm { +private: + double maxTotStageVec[KM_TERM_VEC_LEN]; // max total stages + double minConsecRDL; // min consecutive RDL + double minAccumRDL; // min accumulated RDL + int maxRunStage; // max stages/run for Lloyd's + double initProbAccept; // initial prob. of acceptance + int tempRunLength; // length of temp run + double tempReducFact; // temperature reduction factor + +protected: // stage count + int maxStage(const double param[KM_TERM_VEC_LEN], int k, int n) const; +public: + KMterm(); // default constructor + KMterm( // standard constructor + double a, double b, double c, double d, // maxTotStage + double mcr, double mar, int mrs, + double ipa, int trl, double trf); + + void setMaxTotStage(int i, double val) { // set max stage parameters + assert(i >= 0 && i < KM_TERM_VEC_LEN); + maxTotStageVec[i] = val; + } + void setAbsMaxTotStage(int s) { // set max number of stages + maxTotStageVec[KM_TERM_CONST] = s; + maxTotStageVec[KM_TERM_POW] = 0; + } + int getMaxTotStage(int k, int n) const // max total stages + { return maxStage(maxTotStageVec, k, n); } + + double getMinConsecRDL() const // return min consec RDL + { return minConsecRDL; } + + double getMinAccumRDL() const // return min accum RDL + { return minAccumRDL; } + + int getMaxRunStage() const // return max runs per stage + { return maxRunStage; } + + void setMinConsecRDL(double rdl) // set min consec RDL + { minConsecRDL = rdl; } + + void setMinAccumRDL(double rdl) // set min accum RDL + { minAccumRDL = rdl; } + + void setMaxRunStage(int ms) // set max runs per stage + { maxRunStage = ms; } + + double getInitProbAccept() const // return init. prob. accept + { return initProbAccept; } + + void setInitProbAccept(double ipa) // set init. prob. accept + { initProbAccept = ipa; } + + int getTempRunLength() const // return temperature run len. + { return tempRunLength; } + + void setTempRunLength(int trl) // set temperature run length + { tempRunLength = trl; } + + double getTempReducFact() const // return temp. reduction fact. + { return tempReducFact; } + + void setTempReducFact(double trf) // set temp. reduction fact. + { tempReducFact = trf; } +}; +#endif diff --git a/src/phantom/draw_rois/draw_rois.cpp b/src/phantom/draw_rois/draw_rois.cpp new file mode 120000 index 0000000..4bd77eb --- /dev/null +++ b/src/phantom/draw_rois/draw_rois.cpp @@ -0,0 +1 @@ +/home/tclose/Code/Phantom/phantom/draw_rois/draw_rois.c \ No newline at end of file diff --git a/src/phantom/draw_rois/draw_rois.h b/src/phantom/draw_rois/draw_rois.h new file mode 120000 index 0000000..4646066 --- /dev/null +++ b/src/phantom/draw_rois/draw_rois.h @@ -0,0 +1 @@ +/home/tclose/Code/Phantom/phantom/draw_rois/draw_rois.h \ No newline at end of file diff --git a/src/phantom/interface.cpp b/src/phantom/interface.cpp new file mode 100644 index 0000000..5cdb2d8 --- /dev/null +++ b/src/phantom/interface.cpp @@ -0,0 +1,211 @@ +/* + Copyright 2009 Brain Research Institute, Melbourne, Australia + + Created by Tom Close on 13/03/09. + + This file is part of Bayesian Tractlet Sampling (BTS). + + BTS is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + BTS is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with BTS. If not, see . + + */ + +#include + +//#include "bts/cmd.h" + +#include "bts/common.h" + +#include "phantom/interface.h" + +#include "bts/fibre/strand.h" +#include "bts/fibre/track.h" +#include "bts/fibre/track/set.h" + + + + +#include "bts/inline_functions.h" + +//extern "C" { +#include "phantom/shared/strand_collection.h" +//} + + +std::vector >& generate_pre_points(BTS::Fibre::Track::Set& tracks, std::vector >& pre_points) { + + + for (size_t tck_i = 0; tck_i < tracks.size(); ++tck_i) { + + BTS::Fibre::Track tck = tracks[tck_i]; + + if (tck.size() > 1) { + BTS::Triple pre_point = tck[0] - (tck[1] - tck[0]); + pre_points.push_back(pre_point); + } else { + std::cout << "Warning strand " << tck_i << " has been ommitted as it has less than two control points (" << tck.size() << ")" << std::endl; + } + + } + + return pre_points; + +} + + +std::vector >& generate_post_points(BTS::Fibre::Track::Set& tracks, std::vector >& post_points) { + + for (size_t tck_i = 0; tck_i < tracks.size(); ++tck_i) { + + BTS::Fibre::Track tck = tracks[tck_i]; + + if (tck.size() > 1) { + BTS::Triple post_point = tck[tck.size()-1] + (tck[tck.size() - 1] - tck[tck.size() - 2]); + post_points.push_back(post_point); + } else { + std::cout << "Warning strand " << tck_i << " has been ommitted as it has less than two control points (" << tck.size() << ")" << std::endl; + } + + } + + return post_points; +} + + +Strand_collection* convert_mr_to_nfg(Strand_collection* c, BTS::Fibre::Track::Set& tracks, std::vector >& pre_points, std::vector >& post_points) { + + if (tracks.size() == 0) + throw BTS::Exception("Track set supplied to BTSTrix to NFG conversion function does not have any tracks in it."); + + if (!tracks.has_extend_elem_prop(BTS::Fibre::Track::RADIUS_PROP)) + tracks.add_extend_elem_prop(BTS::Fibre::Track::RADIUS_PROP, "0.03"); + + size_t total_num_control_points = 0; + + for (size_t tck_i = 0; tck_i < tracks.size(); ++tck_i) + total_num_control_points += tracks[tck_i].size() - 2; + + + collection_alloc(c, tracks.size(), total_num_control_points, 0); + + size_t control_point_count = 0; + + for (size_t strand_i = 0; strand_i < tracks.size(); strand_i++) { + + BTS::Fibre::Track tck = tracks[strand_i]; + + c->num_strand_control_points[strand_i] = tck.size()-2; //Start and end points are not included. + + c->strand_r[strand_i] = atof(tracks.get_extend_elem_prop(BTS::Fibre::Track::RADIUS_PROP, strand_i).c_str()); + + size_t bundle_i; + if (tracks.has_extend_elem_prop(BTS::Fibre::Track::BUNDLE_INDEX_EPROP)) + bundle_i = atoi(tracks.get_extend_elem_prop(BTS::Fibre::Track::BUNDLE_INDEX_EPROP, strand_i).c_str()); + else + bundle_i = strand_i; + + c->bundle_i_of_strand[strand_i] = bundle_i; + + pre_points[strand_i].copy_to(&(c->pre_points[strand_i * 3])); + post_points[strand_i].copy_to(&(c->post_points[strand_i * 3])); + + tck[0].copy_to(&(c->start_points[strand_i * 3])); + + + size_t point_i; + + for (point_i = 1; point_i < (tck.size() - 1); point_i++) + tck[point_i].copy_to(&(c->control_points[(control_point_count + point_i - 1) * 3])); + + + tck[point_i].copy_to(&(c->end_points[strand_i * 3])); + + + construct_strand(&(c->strands[strand_i]), strand_i, bundle_i, &(c->control_points[control_point_count * 3]), &(c->start_points[strand_i * 3]), &(c->end_points[strand_i * 3]), &(c->pre_points[strand_i * 3]), &(c->post_points[strand_i * 3]), &(c->segments[control_point_count + 3 * strand_i]), c->num_strand_control_points[strand_i], 0.0, c->strand_r[strand_i]); + + + control_point_count += c->num_strand_control_points[strand_i]; + + } + + + + c->num_bundles = construct_bundles(c->bundles, c->bundle_i_of_strand, c->num_strands, c->strands); + + + + return c; +} + + +BTS::Fibre::Track::Set& convert_nfg_to_mr(BTS::Fibre::Track::Set& tracks, std::vector >& pre_points, std::vector >& post_points, Strand_collection* c) { + + + size_t total_num_control_points = 0; + + tracks.clear(); + pre_points.clear(); + post_points.clear(); + + tracks.add_extend_elem_prop(BTS::Fibre::Track::BUNDLE_INDEX_EPROP, "NaN"); + tracks.add_extend_elem_prop(BTS::Fibre::Track::RADIUS_PROP, "NaN"); + + + for (int strand_i = 0; strand_i < c->num_strands; strand_i++) { + + BTS::Fibre::Track tck; + + pre_points.push_back (BTS::Triple((double)c->pre_points[strand_i * 3 + X], (double)c->pre_points[strand_i * 3 + Y], (double)c->pre_points[strand_i * 3 + Z] )); + post_points.push_back (BTS::Triple((double)c->post_points[strand_i * 3 + X], (double)c->post_points[strand_i * 3 + Y], (double)c->post_points[strand_i * 3 + Z] )); + + tck.push_back(BTS::Coord((double)c->start_points[strand_i * 3 + X], (double)c->start_points[strand_i * 3 + Y], (double)c->start_points[strand_i * 3 + Z])); + + for (int point_i = 0; point_i < c->num_strand_control_points[strand_i]; point_i++) { + + tck.push_back(BTS::Coord((double)c->control_points[total_num_control_points * 3 + X], (double)c->control_points[total_num_control_points * 3 + Y], (double)c->control_points[total_num_control_points * 3 + Z])); + + total_num_control_points++; + + } + + + tck.push_back(BTS::Coord((double)c->end_points[strand_i * 3 + X], (double)c->end_points[strand_i * 3 + Y], (double)c->end_points[strand_i * 3 + Z])); + + + std::map properties_row; + properties_row[BTS::Fibre::Track::BUNDLE_INDEX_EPROP] = BTS::str(c->bundle_i_of_strand[strand_i]); + properties_row[BTS::Fibre::Track::RADIUS_PROP] = BTS::str(c->strand_r[strand_i]); + + tracks.push_back(tck, properties_row); + + + } + + + return tracks; + +} + + + + + + + + + + + + + + diff --git a/src/phantom/interface.h b/src/phantom/interface.h new file mode 100644 index 0000000..d6d2dd9 --- /dev/null +++ b/src/phantom/interface.h @@ -0,0 +1,48 @@ +/* + Copyright 2009 Brain Research Institute, Melbourne, Australia + + Created by Tom Close on 13/03/09. + + This file is part of Bayesian Tractlet Sampling (BTS). + + BTS is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + BTS is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with BTS. If not, see . + + */ + +#ifndef __phantom_interface_h__ +#define __phantom_interface_h__ + +#include "bts/fibre/strand/set.h" + +//#include "point.h" + +//extern "C" { +#include "phantom/shared/strand_collection.h" +//} + + +std::vector >& generate_pre_points(BTS::Fibre::Track::Set& strands, std::vector >& pre_points); + + +std::vector >& generate_post_points(BTS::Fibre::Track::Set& strands, std::vector >& post_points); + + +BTS::Fibre::Track::Set& convert_nfg_to_mr(BTS::Fibre::Track::Set& strands, std::vector >& pre_points, std::vector >& post_points, Strand_collection* c); + + +Strand_collection* convert_mr_to_nfg(Strand_collection* c, BTS::Fibre::Track::Set& strands, std::vector >& pre_points, std::vector >& post_points); + + + +#endif diff --git a/src/phantom/mri_sim/isotropic_region_register.cpp b/src/phantom/mri_sim/isotropic_region_register.cpp new file mode 120000 index 0000000..3ecc856 --- /dev/null +++ b/src/phantom/mri_sim/isotropic_region_register.cpp @@ -0,0 +1 @@ +/home/tclose/Code/Phantom/phantom/mri_sim/isotropic_region_register.c \ No newline at end of file diff --git a/src/phantom/mri_sim/isotropic_region_register.h b/src/phantom/mri_sim/isotropic_region_register.h new file mode 120000 index 0000000..2a44302 --- /dev/null +++ b/src/phantom/mri_sim/isotropic_region_register.h @@ -0,0 +1 @@ +/home/tclose/Code/Phantom/phantom/mri_sim/isotropic_region_register.h \ No newline at end of file diff --git a/src/phantom/mri_sim/mri_sim.cpp b/src/phantom/mri_sim/mri_sim.cpp new file mode 120000 index 0000000..d103925 --- /dev/null +++ b/src/phantom/mri_sim/mri_sim.cpp @@ -0,0 +1 @@ +/home/tclose/Code/Phantom/phantom/mri_sim/mri_sim.c \ No newline at end of file diff --git a/src/phantom/mri_sim/mri_sim.h b/src/phantom/mri_sim/mri_sim.h new file mode 120000 index 0000000..3548172 --- /dev/null +++ b/src/phantom/mri_sim/mri_sim.h @@ -0,0 +1 @@ +/home/tclose/Code/Phantom/phantom/mri_sim/mri_sim.h \ No newline at end of file diff --git a/src/phantom/mri_sim/overlap_strands.cpp b/src/phantom/mri_sim/overlap_strands.cpp new file mode 120000 index 0000000..d5565c9 --- /dev/null +++ b/src/phantom/mri_sim/overlap_strands.cpp @@ -0,0 +1 @@ +/home/tclose/Code/Phantom/phantom/mri_sim/overlap_strands.c \ No newline at end of file diff --git a/src/phantom/mri_sim/overlap_strands.h b/src/phantom/mri_sim/overlap_strands.h new file mode 120000 index 0000000..3887f3d --- /dev/null +++ b/src/phantom/mri_sim/overlap_strands.h @@ -0,0 +1 @@ +/home/tclose/Code/Phantom/phantom/mri_sim/overlap_strands.h \ No newline at end of file diff --git a/src/phantom/mri_sim/segment_register.cpp b/src/phantom/mri_sim/segment_register.cpp new file mode 120000 index 0000000..cfd79a1 --- /dev/null +++ b/src/phantom/mri_sim/segment_register.cpp @@ -0,0 +1 @@ +/home/tclose/Code/Phantom/phantom/mri_sim/segment_register.c \ No newline at end of file diff --git a/src/phantom/mri_sim/segment_register.h b/src/phantom/mri_sim/segment_register.h new file mode 120000 index 0000000..b9f7d3a --- /dev/null +++ b/src/phantom/mri_sim/segment_register.h @@ -0,0 +1 @@ +/home/tclose/Code/Phantom/phantom/mri_sim/segment_register.h \ No newline at end of file diff --git a/src/phantom/mri_sim/segment_stats.cpp b/src/phantom/mri_sim/segment_stats.cpp new file mode 120000 index 0000000..7b79a5b --- /dev/null +++ b/src/phantom/mri_sim/segment_stats.cpp @@ -0,0 +1 @@ +/home/tclose/Code/Phantom/phantom/mri_sim/segment_stats.c \ No newline at end of file diff --git a/src/phantom/mri_sim/segment_stats.h b/src/phantom/mri_sim/segment_stats.h new file mode 120000 index 0000000..efbad81 --- /dev/null +++ b/src/phantom/mri_sim/segment_stats.h @@ -0,0 +1 @@ +/home/tclose/Code/Phantom/phantom/mri_sim/segment_stats.h \ No newline at end of file diff --git a/src/phantom/mri_sim/sim_voxel_intensities.cpp b/src/phantom/mri_sim/sim_voxel_intensities.cpp new file mode 120000 index 0000000..57fd2e6 --- /dev/null +++ b/src/phantom/mri_sim/sim_voxel_intensities.cpp @@ -0,0 +1 @@ +/home/tclose/Code/Phantom/phantom/mri_sim/sim_voxel_intensities.c \ No newline at end of file diff --git a/src/phantom/mri_sim/sim_voxel_intensities.h b/src/phantom/mri_sim/sim_voxel_intensities.h new file mode 120000 index 0000000..bfdfb9e --- /dev/null +++ b/src/phantom/mri_sim/sim_voxel_intensities.h @@ -0,0 +1 @@ +/home/tclose/Code/Phantom/phantom/mri_sim/sim_voxel_intensities.h \ No newline at end of file diff --git a/src/phantom/mri_sim/strand_collection_stats.cpp b/src/phantom/mri_sim/strand_collection_stats.cpp new file mode 120000 index 0000000..1917d3f --- /dev/null +++ b/src/phantom/mri_sim/strand_collection_stats.cpp @@ -0,0 +1 @@ +/home/tclose/Code/Phantom/phantom/mri_sim/strand_collection_stats.c \ No newline at end of file diff --git a/src/phantom/mri_sim/strand_collection_stats.h b/src/phantom/mri_sim/strand_collection_stats.h new file mode 120000 index 0000000..a22c8aa --- /dev/null +++ b/src/phantom/mri_sim/strand_collection_stats.h @@ -0,0 +1 @@ +/home/tclose/Code/Phantom/phantom/mri_sim/strand_collection_stats.h \ No newline at end of file diff --git a/src/phantom/mri_sim/subvoxel.cpp b/src/phantom/mri_sim/subvoxel.cpp new file mode 120000 index 0000000..85a8ffb --- /dev/null +++ b/src/phantom/mri_sim/subvoxel.cpp @@ -0,0 +1 @@ +/home/tclose/Code/Phantom/phantom/mri_sim/subvoxel.c \ No newline at end of file diff --git a/src/phantom/mri_sim/subvoxel.h b/src/phantom/mri_sim/subvoxel.h new file mode 120000 index 0000000..b8b5d91 --- /dev/null +++ b/src/phantom/mri_sim/subvoxel.h @@ -0,0 +1 @@ +/home/tclose/Code/Phantom/phantom/mri_sim/subvoxel.h \ No newline at end of file diff --git a/src/phantom/mri_sim/voxel.cpp b/src/phantom/mri_sim/voxel.cpp new file mode 120000 index 0000000..1c6e3ef --- /dev/null +++ b/src/phantom/mri_sim/voxel.cpp @@ -0,0 +1 @@ +/home/tclose/Code/Phantom/phantom/mri_sim/voxel.c \ No newline at end of file diff --git a/src/phantom/mri_sim/voxel.h b/src/phantom/mri_sim/voxel.h new file mode 120000 index 0000000..30f4f50 --- /dev/null +++ b/src/phantom/mri_sim/voxel.h @@ -0,0 +1 @@ +/home/tclose/Code/Phantom/phantom/mri_sim/voxel.h \ No newline at end of file diff --git a/src/phantom/noisify/noisify.cpp b/src/phantom/noisify/noisify.cpp new file mode 120000 index 0000000..65d78d5 --- /dev/null +++ b/src/phantom/noisify/noisify.cpp @@ -0,0 +1 @@ +/home/tclose/Code/Phantom/phantom/noisify/noisify.c \ No newline at end of file diff --git a/src/phantom/noisify/noisify.h b/src/phantom/noisify/noisify.h new file mode 120000 index 0000000..dca2ffb --- /dev/null +++ b/src/phantom/noisify/noisify.h @@ -0,0 +1 @@ +/home/tclose/Code/Phantom/phantom/noisify/noisify.h \ No newline at end of file diff --git a/src/phantom/optimise/cost_function.cpp b/src/phantom/optimise/cost_function.cpp new file mode 120000 index 0000000..f3ac1e8 --- /dev/null +++ b/src/phantom/optimise/cost_function.cpp @@ -0,0 +1 @@ +/home/tclose/Code/Phantom/phantom/optimise/cost_function.c \ No newline at end of file diff --git a/src/phantom/optimise/cost_function.h b/src/phantom/optimise/cost_function.h new file mode 120000 index 0000000..11fcb2b --- /dev/null +++ b/src/phantom/optimise/cost_function.h @@ -0,0 +1 @@ +/home/tclose/Code/Phantom/phantom/optimise/cost_function.h \ No newline at end of file diff --git a/src/phantom/optimise/optimise.cpp b/src/phantom/optimise/optimise.cpp new file mode 120000 index 0000000..54d46b0 --- /dev/null +++ b/src/phantom/optimise/optimise.cpp @@ -0,0 +1 @@ +/home/tclose/Code/Phantom/phantom/optimise/optimise.c \ No newline at end of file diff --git a/src/phantom/optimise/optimise.h b/src/phantom/optimise/optimise.h new file mode 120000 index 0000000..304033d --- /dev/null +++ b/src/phantom/optimise/optimise.h @@ -0,0 +1 @@ +/home/tclose/Code/Phantom/phantom/optimise/optimise.h \ No newline at end of file diff --git a/src/phantom/optimise/reference_block.cpp b/src/phantom/optimise/reference_block.cpp new file mode 120000 index 0000000..a63090d --- /dev/null +++ b/src/phantom/optimise/reference_block.cpp @@ -0,0 +1 @@ +/home/tclose/Code/Phantom/phantom/optimise/reference_block.c \ No newline at end of file diff --git a/src/phantom/optimise/reference_block.h b/src/phantom/optimise/reference_block.h new file mode 120000 index 0000000..e58fd90 --- /dev/null +++ b/src/phantom/optimise/reference_block.h @@ -0,0 +1 @@ +/home/tclose/Code/Phantom/phantom/optimise/reference_block.h \ No newline at end of file diff --git a/src/phantom/optimise/sample.cpp b/src/phantom/optimise/sample.cpp new file mode 120000 index 0000000..55f2393 --- /dev/null +++ b/src/phantom/optimise/sample.cpp @@ -0,0 +1 @@ +/home/tclose/Code/Phantom/phantom/optimise/sample.c \ No newline at end of file diff --git a/src/phantom/optimise/sample.h b/src/phantom/optimise/sample.h new file mode 120000 index 0000000..b0221e7 --- /dev/null +++ b/src/phantom/optimise/sample.h @@ -0,0 +1 @@ +/home/tclose/Code/Phantom/phantom/optimise/sample.h \ No newline at end of file diff --git a/src/phantom/optimise/sample_block.cpp b/src/phantom/optimise/sample_block.cpp new file mode 120000 index 0000000..54c859d --- /dev/null +++ b/src/phantom/optimise/sample_block.cpp @@ -0,0 +1 @@ +/home/tclose/Code/Phantom/phantom/optimise/sample_block.c \ No newline at end of file diff --git a/src/phantom/optimise/sample_block.h b/src/phantom/optimise/sample_block.h new file mode 120000 index 0000000..5128b0c --- /dev/null +++ b/src/phantom/optimise/sample_block.h @@ -0,0 +1 @@ +/home/tclose/Code/Phantom/phantom/optimise/sample_block.h \ No newline at end of file diff --git a/src/phantom/rand_init/rand_init.cpp b/src/phantom/rand_init/rand_init.cpp new file mode 120000 index 0000000..8bfaa75 --- /dev/null +++ b/src/phantom/rand_init/rand_init.cpp @@ -0,0 +1 @@ +/home/tclose/Code/Phantom/phantom/rand_init/rand_init.c \ No newline at end of file diff --git a/src/phantom/rand_init/rand_init.h b/src/phantom/rand_init/rand_init.h new file mode 120000 index 0000000..336ad68 --- /dev/null +++ b/src/phantom/rand_init/rand_init.h @@ -0,0 +1 @@ +/home/tclose/Code/Phantom/phantom/rand_init/rand_init.h \ No newline at end of file diff --git a/src/phantom/resample/resample.cpp b/src/phantom/resample/resample.cpp new file mode 120000 index 0000000..847dbb3 --- /dev/null +++ b/src/phantom/resample/resample.cpp @@ -0,0 +1 @@ +/home/tclose/Code/Phantom/phantom/resample/resample.c \ No newline at end of file diff --git a/src/phantom/resample/resample.h b/src/phantom/resample/resample.h new file mode 120000 index 0000000..66a81ca --- /dev/null +++ b/src/phantom/resample/resample.h @@ -0,0 +1 @@ +/home/tclose/Code/Phantom/phantom/resample/resample.h \ No newline at end of file diff --git a/src/phantom/shared/bundle.cpp b/src/phantom/shared/bundle.cpp new file mode 120000 index 0000000..0826ca9 --- /dev/null +++ b/src/phantom/shared/bundle.cpp @@ -0,0 +1 @@ +/home/tclose/Code/Phantom/phantom/shared/bundle.c \ No newline at end of file diff --git a/src/phantom/shared/bundle.h b/src/phantom/shared/bundle.h new file mode 120000 index 0000000..31886fc --- /dev/null +++ b/src/phantom/shared/bundle.h @@ -0,0 +1 @@ +/home/tclose/Code/Phantom/phantom/shared/bundle.h \ No newline at end of file diff --git a/src/phantom/shared/control_point.cpp b/src/phantom/shared/control_point.cpp new file mode 120000 index 0000000..a61a915 --- /dev/null +++ b/src/phantom/shared/control_point.cpp @@ -0,0 +1 @@ +/home/tclose/Code/Phantom/phantom/shared/control_point.c \ No newline at end of file diff --git a/src/phantom/shared/control_point.h b/src/phantom/shared/control_point.h new file mode 120000 index 0000000..d064f33 --- /dev/null +++ b/src/phantom/shared/control_point.h @@ -0,0 +1 @@ +/home/tclose/Code/Phantom/phantom/shared/control_point.h \ No newline at end of file diff --git a/src/phantom/shared/isotropic_region.cpp b/src/phantom/shared/isotropic_region.cpp new file mode 120000 index 0000000..cd743fc --- /dev/null +++ b/src/phantom/shared/isotropic_region.cpp @@ -0,0 +1 @@ +/home/tclose/Code/Phantom/phantom/shared/isotropic_region.c \ No newline at end of file diff --git a/src/phantom/shared/isotropic_region.h b/src/phantom/shared/isotropic_region.h new file mode 120000 index 0000000..a6d7f7b --- /dev/null +++ b/src/phantom/shared/isotropic_region.h @@ -0,0 +1 @@ +/home/tclose/Code/Phantom/phantom/shared/isotropic_region.h \ No newline at end of file diff --git a/src/phantom/shared/segment.cpp b/src/phantom/shared/segment.cpp new file mode 120000 index 0000000..84adaf5 --- /dev/null +++ b/src/phantom/shared/segment.cpp @@ -0,0 +1 @@ +/home/tclose/Code/Phantom/phantom/shared/segment.c \ No newline at end of file diff --git a/src/phantom/shared/segment.h b/src/phantom/shared/segment.h new file mode 120000 index 0000000..0838dcd --- /dev/null +++ b/src/phantom/shared/segment.h @@ -0,0 +1 @@ +/home/tclose/Code/Phantom/phantom/shared/segment.h \ No newline at end of file diff --git a/src/phantom/shared/shared.cpp b/src/phantom/shared/shared.cpp new file mode 120000 index 0000000..6cbdd85 --- /dev/null +++ b/src/phantom/shared/shared.cpp @@ -0,0 +1 @@ +/home/tclose/Code/Phantom/phantom/shared/shared.c \ No newline at end of file diff --git a/src/phantom/shared/shared.h b/src/phantom/shared/shared.h new file mode 120000 index 0000000..1072a65 --- /dev/null +++ b/src/phantom/shared/shared.h @@ -0,0 +1 @@ +/home/tclose/Code/Phantom/phantom/shared/shared.h \ No newline at end of file diff --git a/src/phantom/shared/strand.cpp b/src/phantom/shared/strand.cpp new file mode 120000 index 0000000..e1bf015 --- /dev/null +++ b/src/phantom/shared/strand.cpp @@ -0,0 +1 @@ +/home/tclose/Code/Phantom/phantom/shared/strand.c \ No newline at end of file diff --git a/src/phantom/shared/strand.h b/src/phantom/shared/strand.h new file mode 120000 index 0000000..a0d45df --- /dev/null +++ b/src/phantom/shared/strand.h @@ -0,0 +1 @@ +/home/tclose/Code/Phantom/phantom/shared/strand.h \ No newline at end of file diff --git a/src/phantom/shared/strand_collection.cpp b/src/phantom/shared/strand_collection.cpp new file mode 120000 index 0000000..ff4376a --- /dev/null +++ b/src/phantom/shared/strand_collection.cpp @@ -0,0 +1 @@ +/home/tclose/Code/Phantom/phantom/shared/strand_collection.c \ No newline at end of file diff --git a/src/phantom/shared/strand_collection.h b/src/phantom/shared/strand_collection.h new file mode 120000 index 0000000..56b81c3 --- /dev/null +++ b/src/phantom/shared/strand_collection.h @@ -0,0 +1 @@ +/home/tclose/Code/Phantom/phantom/shared/strand_collection.h \ No newline at end of file diff --git a/src/phantom/subdiv/subdiv.cpp b/src/phantom/subdiv/subdiv.cpp new file mode 120000 index 0000000..5063a16 --- /dev/null +++ b/src/phantom/subdiv/subdiv.cpp @@ -0,0 +1 @@ +/home/tclose/Code/Phantom/phantom/subdiv/subdiv.c \ No newline at end of file diff --git a/src/phantom/subdiv/subdiv.h b/src/phantom/subdiv/subdiv.h new file mode 120000 index 0000000..8680157 --- /dev/null +++ b/src/phantom/subdiv/subdiv.h @@ -0,0 +1 @@ +/home/tclose/Code/Phantom/phantom/subdiv/subdiv.h \ No newline at end of file diff --git a/src/phantom/trim/strand_section.cpp b/src/phantom/trim/strand_section.cpp new file mode 120000 index 0000000..8e29815 --- /dev/null +++ b/src/phantom/trim/strand_section.cpp @@ -0,0 +1 @@ +/home/tclose/Code/Phantom/phantom/trim/strand_section.c \ No newline at end of file diff --git a/src/phantom/trim/strand_section.h b/src/phantom/trim/strand_section.h new file mode 120000 index 0000000..1442684 --- /dev/null +++ b/src/phantom/trim/strand_section.h @@ -0,0 +1 @@ +/home/tclose/Code/Phantom/phantom/trim/strand_section.h \ No newline at end of file diff --git a/src/phantom/trim/trim.cpp b/src/phantom/trim/trim.cpp new file mode 120000 index 0000000..9cbcaea --- /dev/null +++ b/src/phantom/trim/trim.cpp @@ -0,0 +1 @@ +/home/tclose/Code/Phantom/phantom/trim/trim.c \ No newline at end of file diff --git a/src/phantom/trim/trim.h b/src/phantom/trim/trim.h new file mode 120000 index 0000000..1f3afc4 --- /dev/null +++ b/src/phantom/trim/trim.h @@ -0,0 +1 @@ +/home/tclose/Code/Phantom/phantom/trim/trim.h \ No newline at end of file diff --git a/sysconf/__init__.py b/sysconf/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/sysconf/common.py b/sysconf/common.py new file mode 100644 index 0000000..353b587 --- /dev/null +++ b/sysconf/common.py @@ -0,0 +1,24 @@ +import os + +bin_dir = 'bin' +cmd_dir = 'cmd' +lib_dir = 'lib' +misc_dir = 'src' +doc_dir = 'doc' +dev_dir = 'dev' +gl = os.path.join ('src', 'opengl', 'gl.h') + +cpp_suffix = '.cpp' +h_suffix = '.h' + +libname = 'mrtrix' + +icon = 'icons/icon.o' +icon_dep = 'icons/icon.rc' + +# Qt4 settings: +moc = 'moc' +qt4_modules = [ 'Core', 'Gui', 'OpenGL' ] +qt4_lib_flags = [ '-lGLEW' ] +qt4_cflags = [ '-DQT_SHARED' ] + [ '-DQT_' + entry.upper() + '_LIB' for entry in qt4_modules ] + diff --git a/sysconf/darwin.py b/sysconf/darwin.py new file mode 100644 index 0000000..fce613b --- /dev/null +++ b/sysconf/darwin.py @@ -0,0 +1,42 @@ +from sysconf.common import * + +obj_suffix = '.o' +exe_suffix = '' +lib_prefix = 'lib' +lib_suffix = '.dylib' + +cpp = [ 'g++', '-c', '$flags$', '$path$', '$src$', '-o', '$obj$' ] +cpp_flags = [ '-Wall', '-DMACOSX', '-fPIC', '-I/data/home/tclose/Code/Tractography/mrtrix_bundle/include', '-mtune=G5' ] +cflags_thread = [] + +ld = [ 'g++', '$flags$', '$path$', '$obj$', '$mrtrix$', '-o', '$bin$' ] +ld_flags = [ '-lm', '-L/data/home/tclose/Code/Tractography/mrtrix_bundle/lib', '-latlas_mrtrix', '/usr/local/lib/libgslcblas.a', '/usr/local/lib/libgsl.a' ] +ld_flags_lib_prefix = '-l' +libs_thread = [ '-lpthread' ] + +ld_lib = [ 'g++', '-dynamiclib', '$flags$', '$obj$', '-o', '$lib$' ] +ld_lib_flags = ['-L/data/home/tclose/Code/Tractography/mrtrix_bundle/lib', '-latlas_mrtrix' ] + +cpp_flags_debug = cpp_flags + [ '-O0', '-g', '-D_GLIBCXX_DEBUG' ] +ld_flags_debug = ld_flags + [ '-g' ] +ld_lib_flags_debug = ld_lib_flags + [ '-g' ] + +cpp_flags += [ '-DNDEBUG', '-DOPTIMISED', '-DCALCULATE_GRADIENT' ] + +cpp_flags_profile = cpp_flags + [ '-g', '-pg' ] +ld_flags_profile = ld_flags + [ '-g', '-pg' ] +ld_lib_flags_profile = ld_lib_flags + [ '-g', '-pg' ] + +cpp_flags += [ '-O3' ] + +ld_flags_gl = [] + +pkgconfig = [ 'pkg-config' ] +pkgconfig_env = None + +# Qt4 settings: +qt4_path = '/Library/Frameworks' +qt4_include_path = [ qt4_path + '/Qt' + entry + '.framework/Headers' for entry in qt4_modules ] +qt4_lib_flags += [ '-L/Library/Frameworks', '-L/System/Library/Frameworks', '-framework', 'Carbon', '-framework', 'AppKit', '-framework', 'ApplicationServices', '-framework', 'OpenGL', '-lz', '-lGLEW' ] +for entry in qt4_modules: + qt4_lib_flags += [ '-framework', 'Qt'+entry ] diff --git a/sysconf/linux.py b/sysconf/linux.py new file mode 100644 index 0000000..2d2b25b --- /dev/null +++ b/sysconf/linux.py @@ -0,0 +1,42 @@ +from sysconf.common import * + +obj_suffix = '.o' +exe_suffix = '' +lib_prefix = 'lib' +lib_suffix = '.so' + + +cpp = [ 'g++', '-c', '$flags$', '$path$', '$src$', '-o', '$obj$' ] +cpp_flags = [ '-Wall', '-march=x86-64', '-fPIC', '-Wno-deprecated'] +cflags_thread = [] + +ld = [ 'g++', '$flags$', '$path$', '$obj$', '$mrtrix$', '-o', '$bin$' ] +ld_flags = [ '-lm', '-L/usr/lib/sse2', '-lcblas', '-latlas', '-llapack_atlas', '-lgfortran', '-L/usr/local/lib/' '-lgslcblas', '-lgsl' ] +ld_flags_lib_prefix = '-l' +libs_thread = [ '-lpthread' ] + +ld_lib = [ 'g++', '-shared', '$flags$', '$obj$', '-o', '$lib$' ] +ld_lib_flags = [] + +cpp_flags_debug = cpp_flags + [ '-O0', '-g3', '-D_GLIBCXX_DEBUG' ] +ld_flags_debug = ld_flags + [ '-g3' ] +ld_lib_flags_debug = ld_lib_flags + [ '-g3' ] + +cpp_flags += [ '-DNDEBUG', '-DOPTIMISED'] + +cpp_flags_profile = cpp_flags + [ '-g', '-pg' ] +ld_flags_profile = ld_flags + [ '-g', '-pg' ] +ld_lib_flags_profile = ld_lib_flags + [ '-g', '-pg' ] + +cpp_flags += [ '-O3' ] + +ld_flags_gl = [] + +pkgconfig = [ 'pkg-config' ] +pkgconfig_env = None + +# Qt4 settings: +qt4_path = '/usr/include/qt4' +qt4_include_path = [ qt4_path ] + [ qt4_path + '/Qt' + entry for entry in qt4_modules ] +qt4_lib_flags += [ '-lQt' + entry for entry in qt4_modules ] + diff --git a/sysconf/windows.py b/sysconf/windows.py new file mode 100644 index 0000000..1208355 --- /dev/null +++ b/sysconf/windows.py @@ -0,0 +1,38 @@ +from sysconf.common import * + +obj_suffix = '.o' +exe_suffix = '.exe' +lib_prefix = '' +lib_suffix = '.dll' + +cpp = [ 'g++', '-c', '$flags$', '$gtk$', '$path$', '$src$', '-o', '$obj$' ] +cpp_flags = [ '-Wall', '-march=i686', '-fno-strict-aliasing', '-DGL_GLEXT_PROTOTYPES', '-mno-cygwin', '-mms-bitfields' ] +windres = [ 'windres' ] + +ld = [ 'g++', '--no-undefined', '--enable-runtime-pseudo-reloc', '$flags$', '$obj$', '$path$', '$gsl$', '$gtk$', '$mrtrix$', '-o', '$bin$' ] +ld_flags = [ '-mno-cygwin' ] +ld_flags_lib_prefix = '-l' + +ld_lib = [ 'g++', '--no-undefined', '--enable-runtime-pseudo-reloc', '-shared', '$flags$', '$obj$', '-o', '$lib$' ] +ld_lib_flags = [ '-mno-cygwin' ] + +cpp_flags_debug = cpp_flags + [ '-g' ] +ld_flags_debug = ld_flags + [ '-g' ] +ld_lib_flags_debug = ld_lib_flags + [ '-g' ] + +cpp_flags_profile = [ '-pg' ] + cpp_flags_debug +ld_flags_profile = ld_flags_debug + [ '-pg' ] +ld_lib_flags_profile = ld_lib_flags_debug + [ '-pg' ] + +cpp_flags += [ '-O3', '-DOPTIMISED', '-DCALCULATE_GRADIENT' ] + +cpp_flags_release = cpp_flags + [ '-DNDEBUG', '-DOPTIMISED', '-DCALCULATE_GRADIENT' ] + +cpp_flags_gsl = [ '-IC:\dev\include', '-DGSL_DLL' ] +ld_flags_gsl = [ '-lgsl', '-lgslcblas' ] +ld_flags_gl = [ '-lopengl32', '-lglu32' ] +pkgconfig = [ 'pkg-config' ] +pkgconfig_env = None + + + diff --git a/sysconf/xmingw.py b/sysconf/xmingw.py new file mode 100644 index 0000000..0a85f36 --- /dev/null +++ b/sysconf/xmingw.py @@ -0,0 +1,39 @@ +from sysconf.common import * + +obj_suffix = '.o' +exe_suffix = '.exe' +lib_prefix = '' +lib_suffix = '.dll' + +cpp = [ 'i586-mingw32msvc-g++', '-c', '$flags$', '$gtk$', '$path$', '$src$', '-o', '$obj$' ] +cpp_flags = [ '-Wall', '-march=i686', '-fno-strict-aliasing', '-DGL_GLEXT_PROTOTYPES', '-mno-cygwin', '-mms-bitfields' ] +windres = [ 'i586-mingw32msvc-windres' ] + +ld_use_shell = True +ld = [ 'i586-mingw32msvc-g++', '--no-undefined', '--enable-runtime-pseudo-reloc', '$flags$', '$obj$', '$path$', '$gsl$', '$gtk$', '$mrtrix$', '-o', '$bin$' ] +ld_flags = [ '-mno-cygwin', '-Wl,-subsystem,windows' ] +ld_flags_lib_prefix = '-l' + +ld_lib = [ 'i586-mingw32msvc-g++', '--no-undefined', '--enable-runtime-pseudo-reloc', '-shared', '$flags$', '$obj$', '-o', '$lib$' ] +ld_lib_flags = [ '-mno-cygwin' ] + +cpp_flags_debug = cpp_flags + [ '-g' ] +ld_flags_debug = ld_flags + [ '-g' ] +ld_lib_flags_debug = ld_lib_flags + [ '-g' ] + +cpp_flags_profile = [ '-pg' ] + cpp_flags_debug +ld_flags_profile = ld_flags_debug + [ '-pg' ] +ld_lib_flags_profile = ld_lib_flags_debug + [ '-pg' ] + +cpp_flags += [ '-O3' ] + +cpp_flags_release = cpp_flags + [ '-DNDEBUG' ] + +cpp_flags_gsl = [ '-I/target/include', '-DGSL_DLL' ] +ld_flags_gsl = [ '-L/target/lib -lgsl', '-lgslcblas' ] +ld_flags_gl = [ '-lopengl32', '-lglu32' ] +pkgconfig = [ 'pkg-config' ] +pkgconfig_env = { 'PKG_CONFIG_PATH': '/target/lib/pkgconfig' } + + + diff --git a/test_output/cpp_output.txt b/test_output/cpp_output.txt new file mode 100644 index 0000000..3ca7f85 --- /dev/null +++ b/test_output/cpp_output.txt @@ -0,0 +1,19 @@ +set.prop_names(): [ PROP_1 PROP_2 PROP_3 PROP_4 PROP_5 ] +set.elem_prop_index(ELEM_PROP_1): 0 +set.num_elem_props(): 5 +set.has_prop(PROP_2): 1 +set.has_elem_prop(ELEM_PROP_7): 0 +set.prop_names(): [ PROP_1 PROP_2 PROP_3 PROP_4 PROP_5 ] +set.get_extend_elem_prop_header(): [ EXT_ELEM_PROP_1 EXT_ELEM_PROP_2 EXT_ELEM_PROP_3 EXT_ELEM_PROP_4 EXT_ELEM_PROP_5 ] +set.prop_names(): [ PROP_1 PROP_2 PROP_3 PROP_5 ] +set.get_extend_elem_prop(EXT_ELEM_PROP_2,0): Boogle 2-0 +set.prop_index(PROP_2): 1 +set.has_extend_elem_prop(EXT_ELEM_PROP_3): 1 +set.elem_prop_name(1): ELEM_PROP_2 +set.prop(PROP_5): 411 +set.prop_index(PROP_1): 0 +set.num_props(): 4 +set.size(): 2 +set.size(): 2 +set.num_extend_elem_props(): 6 +set.num_extend_elem_props(): 6 diff --git a/test_output/python_output.txt b/test_output/python_output.txt new file mode 100644 index 0000000..b050011 --- /dev/null +++ b/test_output/python_output.txt @@ -0,0 +1,55 @@ +set.prop_names(): ['PROP_1', 'PROP_2', 'PROP_3', 'PROP_4', 'PROP_5'] +set.elem_prop_index(ELEM_PROP_1): 0 +set.num_elem_props(): 5 +set.has_prop(PROP_2): True +set.has_elem_prop(ELEM_PROP_7): 0 +set.prop_names(): ['PROP_1', 'PROP_2', 'PROP_3', 'PROP_4', 'PROP_5'] +set.get_extend_elem_prop_header(): ['EXT_ELEM_PROP_5', 'EXT_ELEM_PROP_4', 'EXT_ELEM_PROP_1', 'EXT_ELEM_PROP_3', 'EXT_ELEM_PROP_2'] +set.prop_names(): ['PROP_1', 'PROP_2', 'PROP_3', 'PROP_5'] +set.get_extend_elem_prop(EXT_ELEM_PROP_2,0): Ooogle 2-0 +set.prop_index(PROP_2): 1 +set.has_extend_elem_prop(EXT_ELEM_PROP_3): 1 +set.elem_prop_name(1): ELEM_PROP_2 +set.prop(PROP_5): 5.5 +set.prop_index(PROP_1): 0 +set.num_props(): 4 +set.size(): 2 +set.size(): 2 +set.num_extend_elem_props(): 6 +set.num_extend_elem_props(): 6 +set.vsize(): 82 +set.num_props(): 4 +set.prop(PROP_5): 5.5 +set.num_elem_props(): 5 +set.prop_index(PROP_2): 1 +set.has_extend_elem_prop(EXT_ELEM_PROP_9): 0 +set.has_extend_elem_prop(EXT_ELEM_PROP_1): 1 +set.has_extend_elem_prop(EXT_ELEM_PROP_1): 1 +set.num_props(): 4 +set.has_prop(PROP_5): True +set.has_extend_elem_prop(EXT_ELEM_PROP_3): 1 +set.num_props(): 4 +set.has_prop(PROP_6): False +set.num_extend_elem_props(): 10 +set.prop_names(): ['PROP_1', 'PROP_2', 'PROP_3', 'PROP_5'] +set.has_elem_prop(ELEM_PROP_7): 0 +set.has_prop(PROP_3): True +set.bsize(): 75 +set.elem_prop_name(0): ELEM_PROP_1 +set.num_elem_props(): 4 +set.prop_index(PROP_5): 3 +set.prop_index(PROP_1): 0 +set.num_elem_props(): 4 +set.prop_index(PROP_2): 1 +set.vsize(): 4 + + +------------------------------------- + FINAL PRINT +------------------------------------- + +PROP_1: 1.1 +PROP_2: 2.2 +PROP_3: 3.3 +PROP_5: 5.5 +

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 FH$oqvQ*jo5*VCwsh8M+Cgc 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
MxL5Jf6wq>vf1_g;U; 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