| 14 use alg_tools::lingrid::LinGrid; |
14 use alg_tools::lingrid::LinGrid; |
| 15 use alg_tools::mapping::RealMapping; |
15 use alg_tools::mapping::RealMapping; |
| 16 use alg_tools::loc::Loc; |
16 use alg_tools::loc::Loc; |
| 17 use alg_tools::bisection_tree::Bounds; |
17 use alg_tools::bisection_tree::Bounds; |
| 18 use alg_tools::maputil::map4; |
18 use alg_tools::maputil::map4; |
| 19 use alg_tools::tabledump::write_csv; |
19 use alg_tools::tabledump::{write_csv, TableDump}; |
| 20 use crate::measures::*; |
20 use crate::measures::*; |
| 21 |
21 |
| 22 /// Default RGB ramp from [`colorbrewer`]. |
22 /// Default RGB ramp from [`colorbrewer`]. |
| 23 /// |
23 /// |
| 24 /// This is a tuple of parameters to [`colorbrewer::get_color_ramp`]. |
24 /// This is a tuple of parameters to [`colorbrewer::get_color_ramp`]. |
| 76 let end = grid.end[0].as_(); |
76 let end = grid.end[0].as_(); |
| 77 let m = μ.iter_masses().fold(F::ZERO, |m, α| m.max(α)); |
77 let m = μ.iter_masses().fold(F::ZERO, |m, α| m.max(α)); |
| 78 let s = μ.iter_masses().fold(F::ZERO, |m, α| m.add(α)); |
78 let s = μ.iter_masses().fold(F::ZERO, |m, α| m.add(α)); |
| 79 let mut spike_scale = F::ONE; |
79 let mut spike_scale = F::ONE; |
| 80 |
80 |
| |
81 μ.write_csv(format!("{filename}_mu.txt").into()).expect("CSV save error"); |
| |
82 |
| 81 let mut plotter = poloto::plot( |
83 let mut plotter = poloto::plot( |
| 82 "f", "x", |
84 "f", "x", |
| 83 format!("f(x); spike max={:.4}, n={}, ∑={:.4}", m, μ.len(), s) |
85 format!("f(x); spike max={:.4}, n={}, ∑={:.4}", m, μ.len(), s) |
| 84 ).move_into(); |
86 ).move_into(); |
| 85 |
87 |
| 86 if let Some(ω) = ω0 { |
88 if let Some(ω) = ω0 { |
| 87 let graph_ω = grid.into_iter().map(|x@Loc([x0]) : Loc<F, 1>| { |
89 let graph_ω = grid.into_iter().map(|x@Loc([x0]) : Loc<F, 1>| { |
| 88 [x0.as_(), ω.apply(&x).as_()] |
90 [x0.as_(), ω.apply(&x).as_()] |
| 89 }); |
91 }); |
| 90 plotter.line(ω_explanation.as_str(), graph_ω.clone()); |
92 plotter.line(ω_explanation.as_str(), graph_ω.clone()); |
| 91 // let csv_f = format!("{}.txt", filename); |
93 write_csv(graph_ω, format!("{filename}_omega.txt")).expect("CSV save error"); |
| 92 // write_csv(graph_ω, csv_f).expect("CSV save error"); |
|
| 93 } |
94 } |
| 94 |
95 |
| 95 let graph_g = grid.into_iter().map(|x@Loc([x0]) : Loc<F, 1>| { |
96 let graph_g = grid.into_iter().map(|x@Loc([x0]) : Loc<F, 1>| { |
| 96 [x0.as_(), g.apply(&x).as_()] |
97 [x0.as_(), g.apply(&x).as_()] |
| 97 }); |
98 }); |
| 98 plotter.line(g_explanation.as_str(), graph_g.clone()); |
99 plotter.line(g_explanation.as_str(), graph_g.clone()); |
| 99 // let csv_f = format!("{}.txt", filename); |
100 write_csv(graph_g, format!("{filename}_g.txt")).expect("CSV save error"); |
| 100 // write_csv(graph_g, csv_f).expect("CSV save error"); |
|
| 101 |
101 |
| 102 bnd0.map(|bnd| { |
102 bnd0.map(|bnd| { |
| 103 let upperb = bnd.upper().as_(); |
103 let upperb = bnd.upper().as_(); |
| 104 let lowerb = bnd.lower().as_(); |
104 let lowerb = bnd.lower().as_(); |
| 105 let upper : [[f64; 2]; 2] = [[start, upperb], [end, upperb]]; |
105 let upper : [[f64; 2]; 2] = [[start, upperb], [end, upperb]]; |
| 106 let lower = [[start, lowerb], [end, lowerb]]; |
106 let lower = [[start, lowerb], [end, lowerb]]; |
| 107 spike_scale *= bnd.upper(); |
107 spike_scale *= bnd.upper(); |
| |
108 |
| |
109 write_csv([[lowerb, upperb]].into_iter(), |
| |
110 format!("{filename}_bounds.txt")).expect("CSV save error"); |
| 108 |
111 |
| 109 plotter.line("upper bound", upper) |
112 plotter.line("upper bound", upper) |
| 110 .line("lower bound", lower) |
113 .line("lower bound", lower) |
| 111 .ymarker(lowerb) |
114 .ymarker(lowerb) |
| 112 .ymarker(upperb); |
115 .ymarker(upperb); |