diff --git a/help_shape.jl b/help_shape.jl new file mode 100644 index 0000000..ec8e658 --- /dev/null +++ b/help_shape.jl @@ -0,0 +1,236 @@ + +const ALPHABET_GLYPHS = Dict{String, NamedTuple}( + "A" => (x = [0.121, 0.123, 0.444, 0.573, 0.883, 0.76, 0.675, 0.669, 0.333, 0.323, 0.238, 0.121, 0.121, 0.369, 0.638, 0.506, 0.502, 0.496, 0.367, 0.369, 0.121], y = [0.005, 0.007, 1.0, 1.0, 0.0, 0.0, 0.289, 0.301, 0.301, 0.277, 0.0, 0.0, 0.005, 0.41, 0.413, 0.85, 0.85, 0.833, 0.413, 0.41, 0.005]), + "B" => (x = [0.19, 0.612, 0.65, 0.694, 0.719, 0.75, 0.783, 0.806, 0.815, 0.812, 0.802, 0.781, 0.74, 0.7, 0.76, 0.788, 0.815, 0.829, 0.846, 0.856, 0.856, 0.852, 0.842, 0.827, 0.808, 0.771, 0.742, 0.715, 0.65, 0.588, 0.19, 0.19, 0.19, 0.302, 0.304, 0.571, 0.617, 0.658, 0.679, 0.694, 0.7, 0.7, 0.696, 0.683, 0.669, 0.648, 0.615, 0.55, 0.304, 0.302, 0.19, 0.304, 0.302, 0.304, 0.602, 0.65, 0.675, 0.708, 0.723, 0.735, 0.742, 0.742, 0.731, 0.721, 0.698, 0.683, 0.635, 0.571, 0.304, 0.19], y = [1.0, 0.998, 0.99, 0.973, 0.959, 0.932, 0.886, 0.828, 0.777, 0.706, 0.66, 0.614, 0.566, 0.539, 0.505, 0.483, 0.451, 0.427, 0.383, 0.32, 0.265, 0.233, 0.192, 0.155, 0.121, 0.075, 0.051, 0.034, 0.01, 0.0, 0.0, 0.998, 1.0, 0.886, 0.575, 0.578, 0.59, 0.617, 0.643, 0.677, 0.714, 0.757, 0.784, 0.818, 0.84, 0.859, 0.876, 0.888, 0.888, 0.886, 1.0, 0.468, 0.466, 0.117, 0.119, 0.133, 0.148, 0.182, 0.206, 0.24, 0.279, 0.32, 0.369, 0.391, 0.42, 0.432, 0.456, 0.468, 0.468, 1.0]), + "C" => (x = [0.127, 0.129, 0.131, 0.142, 0.158, 0.175, 0.204, 0.231, 0.273, 0.317, 0.352, 0.39, 0.44, 0.494, 0.556, 0.631, 0.679, 0.723, 0.758, 0.785, 0.831, 0.852, 0.862, 0.873, 0.76, 0.748, 0.731, 0.708, 0.669, 0.621, 0.554, 0.5, 0.458, 0.429, 0.385, 0.342, 0.31, 0.283, 0.267, 0.252, 0.246, 0.246, 0.254, 0.271, 0.29, 0.321, 0.354, 0.381, 0.435, 0.475, 0.544, 0.575, 0.606, 0.646, 0.667, 0.7, 0.721, 0.752, 0.767, 0.879, 0.869, 0.854, 0.84, 0.812, 0.765, 0.715, 0.667, 0.61, 0.538, 0.477, 0.408, 0.348, 0.302, 0.271, 0.225, 0.183, 0.16, 0.142, 0.131, 0.127, 0.127], y = [0.548, 0.551, 0.599, 0.664, 0.724, 0.767, 0.823, 0.862, 0.908, 0.942, 0.963, 0.979, 0.993, 1.0, 1.0, 0.988, 0.972, 0.949, 0.922, 0.894, 0.829, 0.786, 0.753, 0.691, 0.691, 0.737, 0.774, 0.809, 0.848, 0.873, 0.887, 0.887, 0.88, 0.871, 0.848, 0.811, 0.772, 0.721, 0.673, 0.601, 0.53, 0.447, 0.373, 0.306, 0.26, 0.207, 0.171, 0.15, 0.124, 0.115, 0.113, 0.118, 0.127, 0.147, 0.164, 0.2, 0.233, 0.309, 0.373, 0.373, 0.304, 0.253, 0.217, 0.166, 0.104, 0.06, 0.032, 0.012, 0.0, 0.0, 0.012, 0.035, 0.062, 0.088, 0.138, 0.207, 0.265, 0.336, 0.406, 0.465, 0.548]), + "D" => (x = [0.171, 0.542, 0.619, 0.683, 0.723, 0.762, 0.792, 0.817, 0.84, 0.856, 0.867, 0.871, 0.871, 0.865, 0.85, 0.831, 0.815, 0.783, 0.758, 0.708, 0.65, 0.602, 0.565, 0.171, 0.171, 0.171, 0.288, 0.288, 0.542, 0.575, 0.604, 0.65, 0.69, 0.719, 0.74, 0.75, 0.752, 0.746, 0.725, 0.702, 0.675, 0.65, 0.617, 0.571, 0.517, 0.29, 0.288, 0.171], y = [1.0, 1.0, 0.985, 0.956, 0.927, 0.886, 0.845, 0.799, 0.74, 0.677, 0.612, 0.558, 0.473, 0.4, 0.32, 0.255, 0.211, 0.15, 0.114, 0.063, 0.027, 0.01, 0.002, 0.0, 0.998, 1.0, 0.881, 0.119, 0.119, 0.126, 0.138, 0.172, 0.223, 0.284, 0.362, 0.434, 0.539, 0.609, 0.704, 0.76, 0.803, 0.83, 0.854, 0.874, 0.883, 0.883, 0.881, 1.0]), + "E" => (x = [0.206, 0.829, 0.829, 0.319, 0.321, 0.79, 0.79, 0.321, 0.319, 0.835, 0.835, 0.206, 0.206, 0.206], y = [1.0, 1.0, 0.879, 0.876, 0.573, 0.573, 0.456, 0.456, 0.119, 0.117, 0.0, 0.0, 0.998, 1.0]), + "F" => (x = [0.238, 0.833, 0.833, 0.354, 0.356, 0.775, 0.775, 0.354, 0.354, 0.238, 0.238, 0.238], y = [1.0, 1.0, 0.879, 0.876, 0.573, 0.573, 0.456, 0.454, 0.0, 0.0, 0.998, 1.0]), + "G" => (x = [0.1, 0.102, 0.104, 0.115, 0.135, 0.156, 0.188, 0.21, 0.248, 0.29, 0.331, 0.375, 0.429, 0.469, 0.529, 0.606, 0.673, 0.715, 0.769, 0.808, 0.838, 0.856, 0.744, 0.729, 0.717, 0.696, 0.658, 0.612, 0.571, 0.544, 0.473, 0.425, 0.39, 0.344, 0.302, 0.267, 0.244, 0.227, 0.219, 0.219, 0.227, 0.244, 0.269, 0.294, 0.333, 0.377, 0.435, 0.473, 0.525, 0.569, 0.61, 0.648, 0.677, 0.721, 0.738, 0.754, 0.762, 0.765, 0.494, 0.494, 0.871, 0.871, 0.798, 0.769, 0.725, 0.675, 0.612, 0.562, 0.508, 0.446, 0.41, 0.344, 0.281, 0.242, 0.202, 0.169, 0.14, 0.117, 0.106, 0.1, 0.1], y = [0.528, 0.53, 0.581, 0.647, 0.724, 0.774, 0.829, 0.862, 0.903, 0.938, 0.963, 0.982, 0.995, 1.0, 1.0, 0.988, 0.965, 0.942, 0.896, 0.841, 0.774, 0.691, 0.691, 0.744, 0.772, 0.804, 0.841, 0.866, 0.88, 0.885, 0.887, 0.878, 0.864, 0.834, 0.793, 0.74, 0.684, 0.613, 0.532, 0.452, 0.373, 0.304, 0.242, 0.2, 0.159, 0.131, 0.113, 0.108, 0.108, 0.115, 0.129, 0.15, 0.173, 0.226, 0.26, 0.316, 0.371, 0.426, 0.429, 0.532, 0.532, 0.025, 0.025, 0.147, 0.097, 0.053, 0.021, 0.007, 0.0, 0.0, 0.005, 0.023, 0.055, 0.085, 0.127, 0.177, 0.24, 0.316, 0.373, 0.445, 0.528]), + "H" => (x = [0.167, 0.283, 0.285, 0.723, 0.725, 0.842, 0.842, 0.725, 0.723, 0.285, 0.283, 0.167, 0.167, 0.167], y = [1.0, 1.0, 0.585, 0.585, 1.0, 1.0, 0.0, 0.0, 0.468, 0.468, 0.0, 0.0, 0.998, 1.0]), + "I" => (x = [0.452, 0.569, 0.569, 0.452, 0.452, 0.452], y = [1.0, 1.0, 0.0, 0.0, 0.998, 1.0]), + "J" => (x = [0.223, 0.331, 0.331, 0.342, 0.356, 0.379, 0.398, 0.442, 0.498, 0.538, 0.556, 0.571, 0.592, 0.602, 0.602, 0.715, 0.715, 0.708, 0.698, 0.679, 0.667, 0.644, 0.612, 0.567, 0.523, 0.485, 0.412, 0.373, 0.329, 0.29, 0.265, 0.24, 0.231, 0.223, 0.223, 0.223], y = [0.338, 0.338, 0.243, 0.187, 0.156, 0.13, 0.118, 0.106, 0.109, 0.123, 0.137, 0.154, 0.201, 0.296, 1.0, 1.0, 0.274, 0.213, 0.163, 0.116, 0.095, 0.066, 0.04, 0.017, 0.005, 0.0, 0.002, 0.012, 0.031, 0.059, 0.087, 0.139, 0.17, 0.234, 0.336, 0.338]), + "K" => (x = [0.19, 0.302, 0.304, 0.729, 0.888, 0.865, 0.558, 0.529, 0.898, 0.748, 0.481, 0.442, 0.302, 0.302, 0.19, 0.19, 0.19, 0.89, 0.89, 0.19, 0.9, 0.9, 0.19], y = [1.0, 1.0, 0.512, 1.0, 1.0, 0.971, 0.633, 0.597, 0.002, 0.0, 0.442, 0.502, 0.347, 0.0, 0.0, 0.998, 1.0, 1.0, 1.0, 1.0, 0.0, 0.0, 1.0]), + "L" => (x = [0.265, 0.381, 0.381, 0.808, 0.808, 0.265, 0.265, 0.265], y = [1.0, 1.0, 0.119, 0.117, 0.0, 0.0, 0.998, 1.0]), + "M" => (x = [0.09, 0.256, 0.504, 0.75, 0.917, 0.917, 0.806, 0.806, 0.81, 0.808, 0.56, 0.446, 0.215, 0.2, 0.196, 0.196, 0.2, 0.2, 0.09, 0.09, 0.09], y = [1.0, 1.0, 0.153, 0.998, 1.0, 0.0, 0.0, 0.65, 0.738, 0.842, 0.0, 0.0, 0.791, 0.84, 0.84, 0.745, 0.66, 0.0, 0.0, 0.998, 1.0]), + "N" => (x = [0.167, 0.304, 0.727, 0.729, 0.84, 0.84, 0.708, 0.279, 0.277, 0.167, 0.167, 0.167], y = [1.0, 1.0, 0.194, 1.0, 1.0, 0.0, 0.0, 0.808, 0.0, 0.0, 0.998, 1.0]), + "O" => (x = [0.081, 0.083, 0.088, 0.102, 0.121, 0.138, 0.167, 0.202, 0.235, 0.288, 0.338, 0.408, 0.465, 0.533, 0.592, 0.648, 0.704, 0.735, 0.777, 0.81, 0.838, 0.86, 0.881, 0.9, 0.912, 0.919, 0.919, 0.915, 0.902, 0.89, 0.873, 0.846, 0.804, 0.769, 0.717, 0.66, 0.604, 0.552, 0.462, 0.406, 0.34, 0.279, 0.227, 0.192, 0.15, 0.123, 0.106, 0.09, 0.081, 0.081, 0.2, 0.2, 0.204, 0.215, 0.231, 0.25, 0.277, 0.315, 0.34, 0.375, 0.427, 0.477, 0.533, 0.569, 0.617, 0.656, 0.688, 0.708, 0.735, 0.771, 0.785, 0.796, 0.8, 0.8, 0.796, 0.785, 0.771, 0.754, 0.715, 0.662, 0.627, 0.592, 0.529, 0.477, 0.423, 0.375, 0.344, 0.312, 0.273, 0.25, 0.231, 0.217, 0.204, 0.202, 0.2, 0.081], y = [0.537, 0.539, 0.601, 0.675, 0.733, 0.772, 0.825, 0.873, 0.908, 0.947, 0.972, 0.993, 1.0, 1.0, 0.993, 0.979, 0.956, 0.938, 0.906, 0.871, 0.834, 0.795, 0.749, 0.689, 0.624, 0.558, 0.477, 0.424, 0.35, 0.304, 0.258, 0.203, 0.141, 0.101, 0.06, 0.03, 0.012, 0.002, 0.0, 0.007, 0.025, 0.055, 0.094, 0.131, 0.194, 0.251, 0.3, 0.373, 0.456, 0.537, 0.528, 0.452, 0.408, 0.353, 0.3, 0.258, 0.214, 0.173, 0.154, 0.136, 0.12, 0.113, 0.113, 0.118, 0.131, 0.152, 0.177, 0.2, 0.242, 0.323, 0.373, 0.433, 0.479, 0.551, 0.594, 0.65, 0.696, 0.733, 0.793, 0.841, 0.862, 0.876, 0.887, 0.887, 0.878, 0.859, 0.841, 0.816, 0.772, 0.735, 0.694, 0.647, 0.578, 0.53, 0.528, 0.537]), + "P" => (x = [0.206, 0.617, 0.66, 0.702, 0.74, 0.762, 0.785, 0.804, 0.823, 0.833, 0.844, 0.842, 0.838, 0.823, 0.8, 0.779, 0.752, 0.723, 0.688, 0.619, 0.323, 0.323, 0.206, 0.206, 0.206, 0.323, 0.325, 0.596, 0.654, 0.692, 0.708, 0.721, 0.727, 0.727, 0.721, 0.708, 0.679, 0.64, 0.581, 0.325, 0.323, 0.206], y = [1.0, 1.0, 0.993, 0.978, 0.956, 0.937, 0.913, 0.886, 0.847, 0.813, 0.745, 0.665, 0.638, 0.587, 0.539, 0.507, 0.478, 0.456, 0.439, 0.425, 0.422, 0.0, 0.0, 0.998, 1.0, 0.881, 0.536, 0.539, 0.558, 0.587, 0.612, 0.646, 0.687, 0.738, 0.774, 0.808, 0.847, 0.871, 0.883, 0.883, 0.881, 1.0]), + "Q" => (x = [0.081, 0.083, 0.088, 0.102, 0.121, 0.138, 0.167, 0.202, 0.235, 0.288, 0.338, 0.408, 0.465, 0.533, 0.592, 0.648, 0.704, 0.758, 0.815, 0.86, 0.881, 0.898, 0.91, 0.917, 0.917, 0.91, 0.896, 0.881, 0.854, 0.825, 0.794, 0.802, 0.91, 0.852, 0.723, 0.671, 0.6, 0.527, 0.462, 0.406, 0.34, 0.275, 0.246, 0.217, 0.181, 0.169, 0.138, 0.112, 0.094, 0.085, 0.081, 0.081, 0.2, 0.2, 0.204, 0.217, 0.229, 0.246, 0.273, 0.298, 0.34, 0.39, 0.419, 0.479, 0.54, 0.577, 0.608, 0.629, 0.631, 0.623, 0.54, 0.54, 0.596, 0.708, 0.746, 0.762, 0.777, 0.792, 0.798, 0.798, 0.785, 0.771, 0.754, 0.715, 0.685, 0.652, 0.617, 0.583, 0.529, 0.477, 0.44, 0.404, 0.369, 0.338, 0.306, 0.273, 0.252, 0.235, 0.219, 0.21, 0.202, 0.202, 0.2, 0.081], y = [0.537, 0.54, 0.602, 0.676, 0.733, 0.772, 0.825, 0.873, 0.908, 0.947, 0.972, 0.993, 1.0, 1.0, 0.993, 0.979, 0.956, 0.922, 0.867, 0.795, 0.749, 0.699, 0.639, 0.588, 0.45, 0.399, 0.33, 0.282, 0.22, 0.172, 0.135, 0.123, 0.031, 0.0, 0.066, 0.038, 0.013, 0.001, 0.001, 0.008, 0.027, 0.059, 0.079, 0.105, 0.144, 0.162, 0.218, 0.28, 0.351, 0.406, 0.457, 0.537, 0.531, 0.452, 0.406, 0.342, 0.303, 0.266, 0.222, 0.192, 0.158, 0.132, 0.123, 0.114, 0.114, 0.119, 0.128, 0.139, 0.142, 0.151, 0.222, 0.227, 0.3, 0.206, 0.261, 0.296, 0.337, 0.406, 0.455, 0.579, 0.65, 0.696, 0.733, 0.793, 0.823, 0.848, 0.867, 0.878, 0.887, 0.887, 0.883, 0.873, 0.86, 0.841, 0.816, 0.779, 0.747, 0.712, 0.662, 0.625, 0.563, 0.533, 0.531, 0.537]), + "R" => (x = [0.181, 0.602, 0.644, 0.685, 0.731, 0.769, 0.8, 0.815, 0.829, 0.84, 0.846, 0.846, 0.842, 0.829, 0.806, 0.762, 0.725, 0.777, 0.802, 0.819, 0.829, 0.833, 0.84, 0.848, 0.858, 0.879, 0.879, 0.733, 0.727, 0.723, 0.723, 0.715, 0.7, 0.692, 0.658, 0.621, 0.588, 0.3, 0.298, 0.181, 0.181, 0.181, 0.298, 0.3, 0.581, 0.644, 0.685, 0.708, 0.721, 0.727, 0.727, 0.723, 0.706, 0.673, 0.642, 0.596, 0.3, 0.298, 0.181], y = [1.0, 1.0, 0.995, 0.985, 0.966, 0.939, 0.905, 0.881, 0.847, 0.808, 0.76, 0.704, 0.665, 0.617, 0.57, 0.519, 0.493, 0.456, 0.427, 0.388, 0.32, 0.146, 0.087, 0.058, 0.039, 0.019, 0.0, 0.002, 0.029, 0.08, 0.138, 0.311, 0.362, 0.376, 0.41, 0.425, 0.43, 0.43, 0.0, 0.0, 0.998, 1.0, 0.881, 0.541, 0.541, 0.556, 0.583, 0.614, 0.648, 0.689, 0.74, 0.772, 0.818, 0.857, 0.874, 0.883, 0.883, 0.881, 1.0]), + "S" => (x = [0.169, 0.277, 0.279, 0.288, 0.306, 0.321, 0.346, 0.367, 0.402, 0.433, 0.479, 0.533, 0.579, 0.61, 0.642, 0.669, 0.692, 0.706, 0.717, 0.721, 0.719, 0.704, 0.679, 0.638, 0.583, 0.373, 0.315, 0.285, 0.252, 0.233, 0.217, 0.202, 0.198, 0.198, 0.208, 0.219, 0.235, 0.275, 0.327, 0.385, 0.462, 0.527, 0.577, 0.633, 0.692, 0.733, 0.767, 0.79, 0.804, 0.808, 0.7, 0.694, 0.683, 0.667, 0.633, 0.606, 0.562, 0.519, 0.465, 0.421, 0.394, 0.36, 0.338, 0.319, 0.308, 0.306, 0.312, 0.325, 0.346, 0.381, 0.471, 0.65, 0.683, 0.733, 0.76, 0.79, 0.804, 0.823, 0.833, 0.831, 0.821, 0.794, 0.775, 0.754, 0.69, 0.617, 0.533, 0.465, 0.392, 0.329, 0.279, 0.235, 0.21, 0.188, 0.173, 0.169, 0.169], y = [0.332, 0.332, 0.3, 0.256, 0.207, 0.184, 0.157, 0.141, 0.122, 0.113, 0.106, 0.106, 0.113, 0.122, 0.136, 0.154, 0.177, 0.2, 0.23, 0.256, 0.311, 0.355, 0.385, 0.41, 0.431, 0.486, 0.509, 0.525, 0.553, 0.576, 0.606, 0.654, 0.684, 0.735, 0.8, 0.832, 0.866, 0.919, 0.961, 0.986, 1.0, 1.0, 0.993, 0.977, 0.947, 0.915, 0.873, 0.825, 0.767, 0.698, 0.698, 0.742, 0.779, 0.813, 0.85, 0.869, 0.885, 0.892, 0.892, 0.885, 0.876, 0.855, 0.829, 0.797, 0.763, 0.714, 0.684, 0.659, 0.636, 0.615, 0.585, 0.539, 0.528, 0.502, 0.482, 0.449, 0.426, 0.38, 0.32, 0.242, 0.189, 0.129, 0.104, 0.083, 0.041, 0.014, 0.0, 0.0, 0.012, 0.035, 0.067, 0.111, 0.147, 0.198, 0.258, 0.329, 0.332]), + "T" => (x = [0.154, 0.85, 0.85, 0.56, 0.56, 0.444, 0.444, 0.154, 0.154, 0.154], y = [1.0, 1.0, 0.883, 0.881, 0.0, 0.0, 0.881, 0.883, 0.998, 1.0]), + "U" => (x = [0.171, 0.288, 0.288, 0.292, 0.304, 0.331, 0.344, 0.373, 0.41, 0.446, 0.475, 0.546, 0.579, 0.61, 0.658, 0.692, 0.708, 0.721, 0.729, 0.729, 0.846, 0.846, 0.838, 0.825, 0.815, 0.796, 0.775, 0.742, 0.715, 0.677, 0.631, 0.581, 0.542, 0.475, 0.421, 0.365, 0.319, 0.277, 0.25, 0.227, 0.206, 0.192, 0.181, 0.171, 0.171, 0.171], y = [1.0, 1.0, 0.364, 0.324, 0.267, 0.206, 0.187, 0.156, 0.132, 0.121, 0.116, 0.118, 0.125, 0.137, 0.17, 0.213, 0.248, 0.293, 0.362, 1.0, 1.0, 0.402, 0.303, 0.239, 0.203, 0.158, 0.123, 0.083, 0.059, 0.035, 0.017, 0.005, 0.0, 0.0, 0.007, 0.024, 0.047, 0.08, 0.111, 0.147, 0.191, 0.239, 0.288, 0.402, 0.998, 1.0]), + "V" => (x = [0.133, 0.258, 0.488, 0.508, 0.754, 0.883, 0.569, 0.446, 0.133, 0.133], y = [1.0, 0.998, 0.211, 0.148, 0.998, 1.0, 0.0, 0.0, 0.998, 1.0]), + "W" => (x = [0.006, 0.121, 0.267, 0.271, 0.446, 0.558, 0.725, 0.738, 0.744, 0.885, 1.0, 0.796, 0.683, 0.502, 0.321, 0.319, 0.208, 0.006, 0.006], y = [1.0, 0.997, 0.191, 0.194, 1.0, 1.0, 0.231, 0.186, 0.207, 1.0, 1.0, 0.0, 0.003, 0.83, 0.005, 0.0, 0.0, 0.997, 1.0]), + "X" => (x = [0.129, 0.133, 0.435, 0.152, 0.294, 0.512, 0.727, 0.867, 0.579, 0.875, 0.735, 0.529, 0.506, 0.271, 0.129], y = [0.0, 0.005, 0.515, 1.0, 1.0, 0.617, 1.0, 1.0, 0.507, 0.0, 0.0, 0.374, 0.41, 0.0, 0.0]), + "Y" => (x = [0.125, 0.262, 0.51, 0.758, 0.896, 0.569, 0.569, 0.452, 0.452, 0.127, 0.125], y = [1.0, 0.998, 0.519, 1.0, 1.0, 0.403, 0.0, 0.0, 0.403, 0.995, 1.0]), + "Z" => (x = [0.16, 0.162, 0.694, 0.2, 0.2, 0.842, 0.842, 0.306, 0.842, 0.842, 0.16, 0.16], y = [0.112, 0.114, 0.881, 0.883, 1.0, 1.0, 0.883, 0.119, 0.117, 0.0, 0.0, 0.112]), + "a" => (x = [0.298, 0.3, 0.3, 0.312, 0.327, 0.356, 0.392, 0.415, 0.538, 0.583, 0.6, 0.598, 0.59, 0.581, 0.552, 0.515, 0.458, 0.423, 0.398, 0.381, 0.312, 0.323, 0.346, 0.358, 0.383, 0.435, 0.477, 0.535, 0.577, 0.606, 0.631, 0.65, 0.665, 0.671, 0.673, 0.679, 0.694, 0.621, 0.61, 0.606, 0.602, 0.577, 0.55, 0.527, 0.492, 0.435, 0.383, 0.346, 0.319, 0.304, 0.298, 0.375, 0.375, 0.381, 0.392, 0.41, 0.444, 0.496, 0.519, 0.544, 0.571, 0.59, 0.6, 0.598, 0.535, 0.442, 0.425, 0.4, 0.383, 0.375, 0.375, 0.298], y = [0.278, 0.282, 0.324, 0.403, 0.449, 0.505, 0.542, 0.556, 0.593, 0.616, 0.634, 0.736, 0.787, 0.81, 0.852, 0.87, 0.866, 0.838, 0.782, 0.69, 0.708, 0.796, 0.88, 0.907, 0.944, 0.986, 1.0, 1.0, 0.986, 0.963, 0.931, 0.889, 0.824, 0.755, 0.185, 0.102, 0.023, 0.023, 0.074, 0.134, 0.139, 0.093, 0.056, 0.032, 0.009, 0.0, 0.019, 0.06, 0.12, 0.185, 0.278, 0.282, 0.255, 0.213, 0.181, 0.148, 0.125, 0.13, 0.144, 0.171, 0.222, 0.287, 0.403, 0.505, 0.463, 0.431, 0.421, 0.394, 0.352, 0.287, 0.282, 0.278]), + "b" => (x = [0.323, 0.394, 0.396, 0.435, 0.46, 0.481, 0.533, 0.583, 0.623, 0.658, 0.683, 0.696, 0.694, 0.685, 0.675, 0.665, 0.644, 0.6, 0.55, 0.517, 0.483, 0.454, 0.427, 0.406, 0.392, 0.39, 0.323, 0.323, 0.323, 0.46, 0.458, 0.442, 0.412, 0.402, 0.392, 0.388, 0.39, 0.402, 0.419, 0.442, 0.467, 0.481, 0.512, 0.54, 0.569, 0.59, 0.61, 0.623, 0.621, 0.606, 0.588, 0.575, 0.546, 0.523, 0.492, 0.46, 0.323], y = [1.0, 1.0, 0.652, 0.71, 0.731, 0.741, 0.745, 0.724, 0.686, 0.621, 0.531, 0.424, 0.303, 0.234, 0.186, 0.152, 0.103, 0.041, 0.007, 0.0, 0.003, 0.017, 0.041, 0.072, 0.103, 0.017, 0.017, 0.997, 1.0, 0.631, 0.628, 0.61, 0.555, 0.521, 0.462, 0.39, 0.303, 0.214, 0.169, 0.131, 0.107, 0.1, 0.097, 0.107, 0.134, 0.169, 0.231, 0.328, 0.452, 0.538, 0.586, 0.607, 0.638, 0.648, 0.648, 0.631, 1.0]), + "c" => (x = [0.327, 0.329, 0.331, 0.338, 0.358, 0.373, 0.398, 0.417, 0.442, 0.475, 0.502, 0.546, 0.594, 0.627, 0.65, 0.671, 0.685, 0.694, 0.625, 0.619, 0.604, 0.588, 0.575, 0.542, 0.506, 0.481, 0.454, 0.429, 0.415, 0.406, 0.4, 0.4, 0.412, 0.433, 0.462, 0.488, 0.51, 0.56, 0.592, 0.608, 0.619, 0.631, 0.7, 0.694, 0.679, 0.662, 0.635, 0.615, 0.588, 0.554, 0.531, 0.49, 0.46, 0.442, 0.404, 0.367, 0.342, 0.333, 0.327, 0.327], y = [0.574, 0.579, 0.644, 0.699, 0.81, 0.856, 0.912, 0.94, 0.968, 0.991, 1.0, 1.0, 0.977, 0.94, 0.898, 0.838, 0.773, 0.699, 0.676, 0.722, 0.782, 0.824, 0.843, 0.87, 0.87, 0.856, 0.824, 0.769, 0.713, 0.657, 0.574, 0.431, 0.296, 0.218, 0.162, 0.139, 0.13, 0.144, 0.185, 0.227, 0.269, 0.37, 0.352, 0.278, 0.199, 0.144, 0.083, 0.051, 0.023, 0.005, 0.0, 0.005, 0.019, 0.032, 0.079, 0.162, 0.269, 0.333, 0.421, 0.574]), + "d" => (x = [0.298, 0.3, 0.3, 0.308, 0.331, 0.344, 0.369, 0.415, 0.458, 0.498, 0.519, 0.533, 0.567, 0.598, 0.6, 0.671, 0.671, 0.604, 0.602, 0.585, 0.567, 0.521, 0.49, 0.454, 0.423, 0.396, 0.375, 0.346, 0.321, 0.308, 0.3, 0.298, 0.371, 0.371, 0.379, 0.396, 0.425, 0.448, 0.479, 0.512, 0.531, 0.554, 0.573, 0.592, 0.604, 0.606, 0.604, 0.594, 0.573, 0.552, 0.529, 0.5, 0.46, 0.431, 0.402, 0.388, 0.375, 0.373, 0.371, 0.298], y = [0.428, 0.431, 0.455, 0.521, 0.61, 0.641, 0.683, 0.728, 0.745, 0.745, 0.738, 0.731, 0.7, 0.648, 1.0, 1.0, 0.017, 0.017, 0.103, 0.069, 0.041, 0.007, 0.0, 0.003, 0.017, 0.038, 0.062, 0.11, 0.176, 0.231, 0.293, 0.428, 0.424, 0.324, 0.248, 0.186, 0.134, 0.11, 0.097, 0.1, 0.11, 0.134, 0.166, 0.217, 0.3, 0.366, 0.428, 0.51, 0.576, 0.61, 0.634, 0.648, 0.645, 0.624, 0.579, 0.541, 0.476, 0.428, 0.424, 0.428]), + "e" => (x = [0.3, 0.302, 0.302, 0.308, 0.329, 0.35, 0.371, 0.394, 0.423, 0.46, 0.523, 0.575, 0.61, 0.627, 0.654, 0.677, 0.688, 0.694, 0.696, 0.375, 0.373, 0.383, 0.402, 0.433, 0.452, 0.479, 0.529, 0.567, 0.596, 0.619, 0.69, 0.692, 0.675, 0.66, 0.629, 0.594, 0.571, 0.517, 0.469, 0.446, 0.419, 0.39, 0.367, 0.342, 0.331, 0.312, 0.3, 0.3, 0.377, 0.379, 0.619, 0.619, 0.61, 0.594, 0.573, 0.544, 0.519, 0.481, 0.44, 0.427, 0.398, 0.383, 0.377, 0.3], y = [0.569, 0.574, 0.611, 0.676, 0.792, 0.856, 0.903, 0.94, 0.972, 0.995, 1.0, 0.972, 0.931, 0.903, 0.838, 0.745, 0.676, 0.602, 0.463, 0.463, 0.435, 0.324, 0.245, 0.176, 0.153, 0.134, 0.134, 0.167, 0.227, 0.329, 0.31, 0.292, 0.204, 0.153, 0.083, 0.037, 0.019, 0.0, 0.005, 0.014, 0.032, 0.065, 0.102, 0.162, 0.194, 0.282, 0.421, 0.569, 0.597, 0.593, 0.593, 0.634, 0.708, 0.773, 0.819, 0.856, 0.87, 0.87, 0.838, 0.819, 0.75, 0.681, 0.597, 0.569]), + "f" => (x = [0.394, 0.454, 0.458, 0.46, 0.473, 0.496, 0.519, 0.552, 0.604, 0.644, 0.633, 0.61, 0.565, 0.55, 0.54, 0.531, 0.529, 0.612, 0.612, 0.529, 0.529, 0.458, 0.458, 0.394, 0.394, 0.394], y = [0.71, 0.71, 0.717, 0.869, 0.924, 0.966, 0.986, 1.0, 1.0, 0.99, 0.886, 0.893, 0.89, 0.879, 0.862, 0.834, 0.714, 0.71, 0.621, 0.617, 0.0, 0.0, 0.617, 0.621, 0.707, 0.71]), + "g" => (x = [0.296, 0.298, 0.3, 0.306, 0.315, 0.331, 0.346, 0.369, 0.415, 0.46, 0.502, 0.523, 0.567, 0.583, 0.606, 0.608, 0.675, 0.673, 0.667, 0.658, 0.644, 0.617, 0.59, 0.552, 0.508, 0.452, 0.415, 0.39, 0.356, 0.335, 0.315, 0.31, 0.31, 0.379, 0.383, 0.394, 0.406, 0.438, 0.46, 0.502, 0.525, 0.55, 0.562, 0.583, 0.598, 0.602, 0.602, 0.6, 0.585, 0.56, 0.529, 0.5, 0.446, 0.415, 0.392, 0.373, 0.346, 0.319, 0.304, 0.298, 0.296, 0.369, 0.369, 0.377, 0.39, 0.412, 0.444, 0.475, 0.5, 0.521, 0.554, 0.579, 0.596, 0.606, 0.608, 0.604, 0.59, 0.577, 0.552, 0.531, 0.5, 0.473, 0.435, 0.4, 0.388, 0.373, 0.371, 0.369, 0.296], y = [0.681, 0.685, 0.732, 0.773, 0.814, 0.868, 0.902, 0.939, 0.983, 1.0, 1.0, 0.993, 0.963, 0.942, 0.902, 0.983, 0.983, 0.278, 0.207, 0.159, 0.115, 0.068, 0.037, 0.014, 0.0, 0.0, 0.01, 0.024, 0.054, 0.085, 0.153, 0.186, 0.224, 0.207, 0.176, 0.146, 0.125, 0.102, 0.095, 0.095, 0.102, 0.119, 0.132, 0.169, 0.224, 0.285, 0.373, 0.376, 0.349, 0.319, 0.295, 0.285, 0.288, 0.302, 0.319, 0.339, 0.383, 0.454, 0.519, 0.566, 0.681, 0.685, 0.607, 0.525, 0.475, 0.427, 0.393, 0.38, 0.38, 0.386, 0.414, 0.454, 0.505, 0.573, 0.678, 0.729, 0.8, 0.831, 0.871, 0.892, 0.905, 0.905, 0.885, 0.834, 0.803, 0.736, 0.688, 0.685, 0.681]), + "h" => (x = [0.323, 0.396, 0.398, 0.438, 0.475, 0.504, 0.548, 0.579, 0.606, 0.623, 0.65, 0.667, 0.673, 0.673, 0.602, 0.6, 0.588, 0.571, 0.55, 0.519, 0.488, 0.46, 0.44, 0.412, 0.4, 0.396, 0.396, 0.323, 0.323, 0.323], y = [1.0, 1.0, 0.646, 0.702, 0.73, 0.74, 0.74, 0.73, 0.712, 0.695, 0.649, 0.586, 0.523, 0.0, 0.0, 0.519, 0.575, 0.607, 0.628, 0.639, 0.635, 0.621, 0.6, 0.551, 0.498, 0.456, 0.0, 0.0, 0.996, 1.0]), + "i" => (x = [0.465, 0.535, 0.535, 0.465, 0.465, 0.465, 0.465, 0.465, 0.465, 0.535, 0.535, 0.465, 0.465], y = [1.0, 1.0, 0.863, 0.863, 0.996, 1.0, 0.723, 0.719, 0.0, 0.0, 0.723, 0.723, 1.0]), + "j" => (x = [0.371, 0.373, 0.383, 0.402, 0.435, 0.452, 0.46, 0.462, 0.533, 0.531, 0.517, 0.498, 0.477, 0.446, 0.404, 0.371, 0.371, 0.462, 0.533, 0.533, 0.462, 0.462, 0.462, 0.371], y = [0.016, 0.019, 0.087, 0.081, 0.084, 0.1, 0.13, 0.786, 0.786, 0.119, 0.057, 0.027, 0.011, 0.0, 0.0, 0.008, 0.016, 0.894, 0.894, 1.0, 1.0, 0.897, 0.894, 0.016]), + "k" => (x = [0.35, 0.421, 0.423, 0.594, 0.683, 0.523, 0.702, 0.702, 0.617, 0.473, 0.421, 0.421, 0.35, 0.35, 0.35, 0.685, 0.685, 0.35, 0.704, 0.704, 0.35], y = [1.0, 1.0, 0.432, 0.723, 0.723, 0.456, 0.007, 0.0, 0.0, 0.372, 0.288, 0.0, 0.0, 0.996, 1.0, 0.723, 0.723, 1.0, 0.0, 0.0, 1.0]), + "l" => (x = [0.462, 0.533, 0.533, 0.462, 0.462, 0.462], y = [1.0, 1.0, 0.0, 0.0, 0.996, 1.0]), + "m" => (x = [0.208, 0.273, 0.275, 0.308, 0.344, 0.385, 0.427, 0.448, 0.467, 0.494, 0.508, 0.527, 0.552, 0.569, 0.606, 0.642, 0.696, 0.74, 0.767, 0.781, 0.792, 0.792, 0.721, 0.719, 0.708, 0.692, 0.677, 0.648, 0.612, 0.579, 0.554, 0.542, 0.538, 0.538, 0.467, 0.467, 0.462, 0.454, 0.438, 0.417, 0.392, 0.358, 0.325, 0.304, 0.288, 0.281, 0.281, 0.208, 0.208, 0.208], y = [0.976, 0.976, 0.844, 0.929, 0.976, 1.0, 1.0, 0.991, 0.976, 0.938, 0.905, 0.829, 0.9, 0.934, 0.981, 1.0, 0.995, 0.957, 0.9, 0.839, 0.744, 0.0, 0.0, 0.735, 0.791, 0.829, 0.848, 0.863, 0.853, 0.815, 0.754, 0.682, 0.63, 0.0, 0.0, 0.645, 0.73, 0.782, 0.829, 0.853, 0.863, 0.853, 0.815, 0.768, 0.687, 0.607, 0.0, 0.0, 0.972, 0.976]), + "n" => (x = [0.323, 0.388, 0.39, 0.406, 0.427, 0.467, 0.504, 0.546, 0.585, 0.623, 0.648, 0.667, 0.673, 0.673, 0.602, 0.602, 0.598, 0.59, 0.567, 0.54, 0.515, 0.488, 0.465, 0.435, 0.415, 0.402, 0.396, 0.396, 0.323, 0.323, 0.323], y = [0.976, 0.976, 0.844, 0.891, 0.934, 0.981, 1.0, 1.0, 0.981, 0.938, 0.882, 0.791, 0.692, 0.0, 0.0, 0.64, 0.716, 0.768, 0.825, 0.853, 0.863, 0.858, 0.844, 0.806, 0.754, 0.687, 0.616, 0.0, 0.0, 0.972, 0.976]), + "o" => (x = [0.296, 0.298, 0.302, 0.315, 0.327, 0.342, 0.369, 0.39, 0.44, 0.475, 0.538, 0.581, 0.602, 0.629, 0.65, 0.671, 0.685, 0.698, 0.698, 0.688, 0.675, 0.665, 0.635, 0.6, 0.577, 0.529, 0.49, 0.452, 0.433, 0.394, 0.367, 0.346, 0.317, 0.3, 0.296, 0.369, 0.371, 0.383, 0.404, 0.429, 0.465, 0.508, 0.544, 0.579, 0.604, 0.617, 0.625, 0.625, 0.619, 0.602, 0.592, 0.567, 0.54, 0.512, 0.471, 0.431, 0.402, 0.388, 0.373, 0.371, 0.369, 0.296], y = [0.528, 0.532, 0.653, 0.745, 0.801, 0.847, 0.907, 0.94, 0.986, 1.0, 0.995, 0.968, 0.944, 0.903, 0.856, 0.792, 0.722, 0.597, 0.412, 0.292, 0.222, 0.185, 0.111, 0.056, 0.032, 0.005, 0.0, 0.009, 0.019, 0.056, 0.097, 0.144, 0.245, 0.375, 0.528, 0.514, 0.417, 0.306, 0.227, 0.176, 0.139, 0.13, 0.148, 0.199, 0.269, 0.333, 0.426, 0.583, 0.653, 0.741, 0.773, 0.824, 0.856, 0.87, 0.866, 0.829, 0.769, 0.718, 0.616, 0.519, 0.514, 0.528]), + "p" => (x = [0.323, 0.388, 0.39, 0.423, 0.438, 0.465, 0.494, 0.535, 0.567, 0.59, 0.625, 0.65, 0.662, 0.677, 0.688, 0.696, 0.696, 0.692, 0.675, 0.648, 0.623, 0.596, 0.556, 0.521, 0.483, 0.454, 0.425, 0.398, 0.396, 0.323, 0.323, 0.323, 0.423, 0.4, 0.392, 0.388, 0.388, 0.392, 0.402, 0.41, 0.421, 0.448, 0.469, 0.494, 0.535, 0.558, 0.577, 0.594, 0.606, 0.617, 0.623, 0.621, 0.61, 0.6, 0.59, 0.562, 0.535, 0.51, 0.49, 0.465, 0.446, 0.425, 0.423, 0.323], y = [0.983, 0.983, 0.893, 0.952, 0.969, 0.99, 1.0, 1.0, 0.99, 0.976, 0.938, 0.897, 0.866, 0.817, 0.766, 0.69, 0.576, 0.531, 0.441, 0.366, 0.324, 0.293, 0.266, 0.255, 0.259, 0.272, 0.3, 0.341, 0.0, 0.0, 0.979, 0.983, 0.834, 0.766, 0.714, 0.659, 0.59, 0.531, 0.472, 0.445, 0.421, 0.379, 0.362, 0.352, 0.359, 0.376, 0.4, 0.431, 0.466, 0.514, 0.569, 0.721, 0.783, 0.817, 0.841, 0.883, 0.903, 0.91, 0.907, 0.893, 0.872, 0.838, 0.834, 0.983]), + "q" => (x = [0.298, 0.3, 0.302, 0.31, 0.331, 0.346, 0.369, 0.394, 0.429, 0.46, 0.5, 0.521, 0.552, 0.571, 0.604, 0.606, 0.671, 0.671, 0.6, 0.6, 0.596, 0.577, 0.552, 0.508, 0.479, 0.446, 0.415, 0.396, 0.373, 0.35, 0.329, 0.319, 0.302, 0.298, 0.298, 0.371, 0.371, 0.379, 0.394, 0.419, 0.45, 0.481, 0.521, 0.552, 0.577, 0.592, 0.6, 0.606, 0.606, 0.598, 0.585, 0.56, 0.533, 0.504, 0.469, 0.435, 0.408, 0.39, 0.377, 0.373, 0.371, 0.298], y = [0.669, 0.672, 0.728, 0.786, 0.866, 0.9, 0.938, 0.966, 0.99, 1.0, 1.0, 0.993, 0.972, 0.952, 0.89, 0.983, 0.983, 0.0, 0.0, 0.341, 0.345, 0.31, 0.283, 0.259, 0.255, 0.262, 0.279, 0.297, 0.324, 0.362, 0.41, 0.445, 0.538, 0.593, 0.669, 0.666, 0.597, 0.51, 0.452, 0.4, 0.366, 0.352, 0.359, 0.386, 0.428, 0.469, 0.51, 0.576, 0.666, 0.748, 0.8, 0.855, 0.89, 0.907, 0.907, 0.886, 0.848, 0.803, 0.741, 0.669, 0.666, 0.669]), + "r" => (x = [0.417, 0.481, 0.483, 0.506, 0.527, 0.552, 0.59, 0.61, 0.65, 0.625, 0.592, 0.554, 0.538, 0.523, 0.506, 0.494, 0.488, 0.488, 0.417, 0.417, 0.417, 0.625, 0.625, 0.417], y = [0.976, 0.976, 0.834, 0.919, 0.967, 0.995, 1.0, 0.991, 0.948, 0.801, 0.829, 0.829, 0.815, 0.791, 0.744, 0.659, 0.564, 0.0, 0.0, 0.972, 0.976, 0.796, 0.796, 0.976]), + "s" => (x = [0.319, 0.39, 0.396, 0.41, 0.438, 0.465, 0.494, 0.533, 0.556, 0.575, 0.592, 0.602, 0.602, 0.596, 0.581, 0.565, 0.448, 0.4, 0.377, 0.356, 0.34, 0.331, 0.331, 0.34, 0.354, 0.39, 0.431, 0.467, 0.533, 0.581, 0.606, 0.623, 0.638, 0.652, 0.658, 0.658, 0.654, 0.59, 0.581, 0.562, 0.546, 0.517, 0.469, 0.427, 0.406, 0.4, 0.4, 0.408, 0.421, 0.435, 0.583, 0.627, 0.652, 0.669, 0.677, 0.675, 0.667, 0.642, 0.612, 0.581, 0.55, 0.49, 0.429, 0.385, 0.365, 0.35, 0.331, 0.321, 0.319, 0.66, 0.66, 0.319], y = [0.306, 0.329, 0.273, 0.213, 0.162, 0.139, 0.13, 0.134, 0.148, 0.171, 0.208, 0.255, 0.315, 0.343, 0.375, 0.394, 0.463, 0.5, 0.528, 0.569, 0.63, 0.704, 0.75, 0.824, 0.88, 0.949, 0.986, 1.0, 0.995, 0.968, 0.94, 0.912, 0.875, 0.81, 0.759, 0.736, 0.731, 0.713, 0.778, 0.829, 0.852, 0.87, 0.87, 0.843, 0.796, 0.755, 0.731, 0.69, 0.662, 0.644, 0.551, 0.509, 0.463, 0.403, 0.301, 0.255, 0.194, 0.111, 0.06, 0.028, 0.009, 0.0, 0.019, 0.06, 0.097, 0.134, 0.208, 0.301, 0.306, 0.736, 0.736, 0.306]), + "t" => (x = [0.4, 0.45, 0.454, 0.454, 0.521, 0.525, 0.525, 0.598, 0.598, 0.525, 0.525, 0.533, 0.548, 0.598, 0.608, 0.608, 0.585, 0.523, 0.506, 0.483, 0.462, 0.454, 0.454, 0.4, 0.4, 0.4], y = [0.743, 0.743, 0.75, 0.929, 1.0, 1.0, 0.746, 0.743, 0.65, 0.646, 0.168, 0.132, 0.114, 0.114, 0.021, 0.007, 0.0, 0.0, 0.007, 0.029, 0.071, 0.146, 0.646, 0.65, 0.739, 0.743]), + "u" => (x = [0.323, 0.394, 0.396, 0.408, 0.419, 0.435, 0.465, 0.502, 0.531, 0.556, 0.581, 0.594, 0.6, 0.6, 0.671, 0.671, 0.606, 0.604, 0.579, 0.554, 0.523, 0.475, 0.429, 0.402, 0.381, 0.356, 0.333, 0.323, 0.323, 0.323], y = [1.0, 1.0, 0.294, 0.223, 0.194, 0.166, 0.142, 0.142, 0.161, 0.194, 0.256, 0.327, 0.464, 1.0, 1.0, 0.024, 0.024, 0.161, 0.095, 0.052, 0.019, 0.0, 0.009, 0.028, 0.052, 0.095, 0.18, 0.284, 0.995, 1.0]), + "v" => (x = [0.304, 0.381, 0.471, 0.5, 0.504, 0.523, 0.623, 0.698, 0.535, 0.467, 0.306, 0.304], y = [1.0, 1.0, 0.417, 0.204, 0.209, 0.354, 0.995, 1.0, 0.0, 0.005, 0.995, 1.0]), + "w" => (x = [0.202, 0.277, 0.371, 0.375, 0.394, 0.462, 0.538, 0.617, 0.621, 0.625, 0.723, 0.792, 0.658, 0.583, 0.521, 0.498, 0.492, 0.41, 0.333, 0.204, 0.202], y = [1.0, 1.0, 0.209, 0.223, 0.413, 1.0, 1.0, 0.277, 0.243, 0.233, 1.0, 1.0, 0.0, 0.0, 0.544, 0.772, 0.738, 0.0, 0.0, 0.995, 1.0]), + "x" => (x = [0.3, 0.388, 0.5, 0.506, 0.615, 0.702, 0.3, 0.698, 0.542, 0.681, 0.688, 0.604, 0.498, 0.402, 0.312, 0.456, 0.456, 0.304, 0.698, 0.3, 0.69, 0.69, 0.3], y = [0.0, 0.0, 0.393, 0.383, 0.0, 0.0, 0.0, 0.01, 0.529, 0.971, 1.0, 1.0, 0.655, 1.0, 1.0, 0.529, 0.515, 0.01, 0.01, 0.0, 1.0, 1.0, 0.0]), + "y" => (x = [0.308, 0.385, 0.485, 0.506, 0.54, 0.629, 0.7, 0.51, 0.483, 0.458, 0.433, 0.408, 0.375, 0.346, 0.338, 0.367, 0.392, 0.419, 0.444, 0.471, 0.31, 0.308], y = [1.0, 1.0, 0.538, 0.424, 0.6, 1.0, 1.0, 0.162, 0.079, 0.034, 0.01, 0.0, 0.0, 0.014, 0.124, 0.114, 0.114, 0.128, 0.169, 0.29, 0.993, 1.0]), + "z" => (x = [0.31, 0.312, 0.583, 0.327, 0.327, 0.677, 0.677, 0.448, 0.4, 0.69, 0.69, 0.31, 0.31], y = [0.136, 0.141, 0.869, 0.869, 1.0, 1.0, 0.888, 0.262, 0.141, 0.141, 0.0, 0.0, 0.136]), + "0" => (x = [0.304, 0.306, 0.308, 0.315, 0.335, 0.371, 0.406, 0.433, 0.467, 0.525, 0.575, 0.602, 0.619, 0.642, 0.66, 0.681, 0.69, 0.69, 0.683, 0.665, 0.635, 0.606, 0.581, 0.55, 0.515, 0.481, 0.438, 0.408, 0.39, 0.36, 0.333, 0.325, 0.312, 0.304, 0.304, 0.377, 0.377, 0.381, 0.39, 0.406, 0.44, 0.473, 0.521, 0.554, 0.577, 0.594, 0.606, 0.615, 0.615, 0.604, 0.598, 0.585, 0.56, 0.523, 0.477, 0.442, 0.415, 0.396, 0.383, 0.379, 0.377, 0.304], y = [0.595, 0.598, 0.663, 0.722, 0.828, 0.918, 0.966, 0.986, 1.0, 1.0, 0.976, 0.948, 0.924, 0.876, 0.818, 0.708, 0.595, 0.412, 0.316, 0.199, 0.11, 0.058, 0.031, 0.01, 0.0, 0.0, 0.014, 0.034, 0.055, 0.103, 0.182, 0.216, 0.299, 0.412, 0.595, 0.588, 0.409, 0.333, 0.258, 0.189, 0.127, 0.1, 0.1, 0.127, 0.165, 0.21, 0.275, 0.368, 0.636, 0.742, 0.777, 0.818, 0.866, 0.9, 0.904, 0.88, 0.835, 0.773, 0.687, 0.591, 0.588, 0.595]), + "1" => (x = [0.36, 0.362, 0.41, 0.469, 0.508, 0.531, 0.577, 0.577, 0.506, 0.506, 0.504, 0.473, 0.438, 0.362, 0.36], y = [0.749, 0.753, 0.794, 0.868, 0.937, 0.997, 1.0, 0.0, 0.0, 0.777, 0.78, 0.735, 0.697, 0.634, 0.749]), + "2" => (x = [0.294, 0.296, 0.296, 0.306, 0.319, 0.342, 0.383, 0.496, 0.556, 0.594, 0.606, 0.612, 0.61, 0.594, 0.562, 0.521, 0.465, 0.442, 0.425, 0.404, 0.39, 0.383, 0.381, 0.308, 0.312, 0.323, 0.346, 0.371, 0.41, 0.442, 0.469, 0.546, 0.583, 0.612, 0.65, 0.665, 0.675, 0.683, 0.685, 0.675, 0.656, 0.625, 0.569, 0.435, 0.394, 0.685, 0.685, 0.294, 0.294], y = [0.024, 0.028, 0.049, 0.101, 0.143, 0.199, 0.276, 0.437, 0.535, 0.619, 0.664, 0.71, 0.769, 0.829, 0.878, 0.902, 0.899, 0.885, 0.867, 0.832, 0.79, 0.755, 0.703, 0.717, 0.773, 0.829, 0.895, 0.937, 0.976, 0.993, 1.0, 0.997, 0.979, 0.955, 0.899, 0.864, 0.829, 0.78, 0.696, 0.622, 0.559, 0.49, 0.395, 0.203, 0.119, 0.115, 0.0, 0.0, 0.024]), + "3" => (x = [0.304, 0.375, 0.388, 0.408, 0.435, 0.452, 0.479, 0.521, 0.56, 0.592, 0.608, 0.617, 0.617, 0.612, 0.6, 0.571, 0.554, 0.521, 0.477, 0.448, 0.456, 0.496, 0.531, 0.558, 0.581, 0.59, 0.59, 0.585, 0.573, 0.554, 0.529, 0.494, 0.469, 0.44, 0.408, 0.39, 0.383, 0.312, 0.312, 0.325, 0.35, 0.375, 0.404, 0.431, 0.46, 0.517, 0.565, 0.61, 0.631, 0.644, 0.652, 0.662, 0.662, 0.658, 0.648, 0.635, 0.617, 0.583, 0.629, 0.662, 0.679, 0.692, 0.692, 0.685, 0.669, 0.654, 0.623, 0.598, 0.552, 0.515, 0.471, 0.435, 0.406, 0.375, 0.346, 0.329, 0.308, 0.304, 0.304], y = [0.275, 0.289, 0.216, 0.158, 0.12, 0.107, 0.096, 0.1, 0.127, 0.175, 0.223, 0.278, 0.33, 0.364, 0.409, 0.46, 0.478, 0.495, 0.495, 0.485, 0.584, 0.588, 0.605, 0.632, 0.677, 0.725, 0.773, 0.804, 0.842, 0.873, 0.897, 0.907, 0.904, 0.887, 0.842, 0.784, 0.729, 0.749, 0.766, 0.832, 0.9, 0.942, 0.973, 0.99, 1.0, 1.0, 0.979, 0.935, 0.9, 0.869, 0.842, 0.78, 0.715, 0.687, 0.646, 0.615, 0.584, 0.55, 0.515, 0.467, 0.423, 0.347, 0.268, 0.216, 0.155, 0.12, 0.069, 0.041, 0.01, 0.0, 0.0, 0.01, 0.027, 0.058, 0.103, 0.141, 0.223, 0.271, 0.275]), + "4" => (x = [0.279, 0.281, 0.548, 0.608, 0.608, 0.69, 0.69, 0.612, 0.608, 0.608, 0.538, 0.535, 0.279, 0.279, 0.35, 0.535, 0.535, 0.352, 0.35, 0.279], y = [0.351, 0.354, 0.996, 1.0, 0.354, 0.351, 0.242, 0.242, 0.235, 0.0, 0.0, 0.242, 0.242, 0.351, 0.354, 0.351, 0.804, 0.358, 0.354, 0.351]), + "5" => (x = [0.304, 0.379, 0.381, 0.396, 0.427, 0.46, 0.479, 0.508, 0.535, 0.571, 0.6, 0.61, 0.619, 0.621, 0.617, 0.608, 0.594, 0.575, 0.544, 0.506, 0.458, 0.44, 0.415, 0.4, 0.383, 0.317, 0.373, 0.669, 0.669, 0.433, 0.429, 0.4, 0.404, 0.419, 0.45, 0.498, 0.546, 0.583, 0.631, 0.667, 0.685, 0.696, 0.696, 0.692, 0.679, 0.665, 0.648, 0.612, 0.585, 0.542, 0.51, 0.456, 0.41, 0.385, 0.362, 0.329, 0.31, 0.304, 0.304], y = [0.276, 0.287, 0.255, 0.192, 0.133, 0.105, 0.098, 0.098, 0.108, 0.143, 0.199, 0.234, 0.283, 0.378, 0.42, 0.458, 0.497, 0.528, 0.559, 0.573, 0.566, 0.556, 0.531, 0.51, 0.476, 0.49, 1.0, 1.0, 0.888, 0.888, 0.881, 0.622, 0.619, 0.636, 0.661, 0.678, 0.675, 0.657, 0.608, 0.542, 0.479, 0.402, 0.304, 0.266, 0.199, 0.154, 0.115, 0.059, 0.031, 0.007, 0.0, 0.003, 0.024, 0.045, 0.073, 0.14, 0.21, 0.273, 0.276]), + "6" => (x = [0.3, 0.302, 0.302, 0.308, 0.327, 0.346, 0.358, 0.39, 0.435, 0.483, 0.542, 0.565, 0.608, 0.623, 0.648, 0.662, 0.675, 0.681, 0.61, 0.604, 0.592, 0.573, 0.55, 0.529, 0.506, 0.488, 0.462, 0.433, 0.415, 0.39, 0.375, 0.371, 0.375, 0.388, 0.404, 0.438, 0.477, 0.508, 0.546, 0.588, 0.619, 0.644, 0.667, 0.685, 0.692, 0.692, 0.683, 0.671, 0.654, 0.629, 0.602, 0.581, 0.558, 0.519, 0.473, 0.444, 0.406, 0.388, 0.365, 0.34, 0.317, 0.302, 0.3, 0.4, 0.39, 0.383, 0.383, 0.398, 0.417, 0.446, 0.473, 0.492, 0.529, 0.558, 0.573, 0.602, 0.612, 0.619, 0.619, 0.615, 0.608, 0.594, 0.569, 0.542, 0.527, 0.494, 0.462, 0.442, 0.429, 0.408, 0.402, 0.4, 0.3], y = [0.54, 0.543, 0.588, 0.667, 0.784, 0.849, 0.88, 0.935, 0.979, 1.0, 1.0, 0.993, 0.962, 0.945, 0.904, 0.866, 0.814, 0.759, 0.753, 0.79, 0.835, 0.869, 0.893, 0.904, 0.907, 0.904, 0.89, 0.856, 0.821, 0.746, 0.646, 0.526, 0.526, 0.557, 0.584, 0.622, 0.646, 0.653, 0.649, 0.629, 0.598, 0.56, 0.509, 0.433, 0.375, 0.299, 0.227, 0.172, 0.124, 0.076, 0.041, 0.024, 0.01, 0.0, 0.003, 0.014, 0.041, 0.062, 0.096, 0.151, 0.241, 0.371, 0.54, 0.454, 0.419, 0.378, 0.292, 0.213, 0.165, 0.124, 0.103, 0.096, 0.1, 0.12, 0.137, 0.196, 0.237, 0.289, 0.364, 0.402, 0.433, 0.474, 0.515, 0.54, 0.546, 0.55, 0.54, 0.522, 0.509, 0.474, 0.457, 0.454, 0.54]), + "7" => (x = [0.308, 0.692, 0.692, 0.65, 0.606, 0.558, 0.519, 0.494, 0.481, 0.469, 0.465, 0.392, 0.398, 0.417, 0.446, 0.494, 0.556, 0.6, 0.308, 0.308, 0.308], y = [1.0, 1.0, 0.901, 0.819, 0.709, 0.564, 0.411, 0.287, 0.206, 0.082, 0.0, 0.0, 0.128, 0.277, 0.433, 0.613, 0.787, 0.879, 0.883, 0.996, 1.0]), + "8" => (x = [0.302, 0.304, 0.304, 0.31, 0.331, 0.365, 0.415, 0.388, 0.367, 0.346, 0.331, 0.327, 0.327, 0.338, 0.35, 0.385, 0.419, 0.444, 0.467, 0.527, 0.575, 0.61, 0.64, 0.66, 0.669, 0.667, 0.65, 0.619, 0.583, 0.631, 0.66, 0.679, 0.692, 0.694, 0.681, 0.662, 0.629, 0.583, 0.548, 0.519, 0.46, 0.408, 0.388, 0.365, 0.342, 0.327, 0.315, 0.306, 0.302, 0.375, 0.377, 0.39, 0.402, 0.421, 0.446, 0.483, 0.515, 0.548, 0.581, 0.6, 0.612, 0.621, 0.621, 0.617, 0.604, 0.594, 0.562, 0.546, 0.512, 0.469, 0.435, 0.398, 0.388, 0.377, 0.377, 0.375, 0.302, 0.452, 0.479, 0.517, 0.533, 0.554, 0.577, 0.594, 0.596, 0.59, 0.569, 0.554, 0.533, 0.494, 0.467, 0.444, 0.417, 0.406, 0.4, 0.4, 0.412, 0.435, 0.45, 0.452, 0.302], y = [0.323, 0.326, 0.351, 0.395, 0.46, 0.512, 0.55, 0.57, 0.595, 0.632, 0.684, 0.715, 0.784, 0.849, 0.887, 0.948, 0.979, 0.993, 1.0, 1.0, 0.979, 0.945, 0.897, 0.835, 0.777, 0.698, 0.632, 0.581, 0.55, 0.509, 0.464, 0.416, 0.351, 0.271, 0.182, 0.127, 0.069, 0.024, 0.007, 0.0, 0.003, 0.027, 0.045, 0.072, 0.11, 0.144, 0.186, 0.23, 0.323, 0.309, 0.261, 0.199, 0.168, 0.137, 0.113, 0.096, 0.096, 0.11, 0.144, 0.179, 0.216, 0.271, 0.32, 0.354, 0.402, 0.426, 0.471, 0.485, 0.498, 0.495, 0.474, 0.419, 0.392, 0.34, 0.313, 0.309, 0.323, 0.608, 0.595, 0.595, 0.601, 0.619, 0.653, 0.708, 0.77, 0.808, 0.859, 0.88, 0.897, 0.907, 0.9, 0.883, 0.842, 0.814, 0.78, 0.722, 0.667, 0.625, 0.612, 0.608, 0.323]), + "9" => (x = [0.304, 0.306, 0.308, 0.319, 0.331, 0.348, 0.388, 0.433, 0.462, 0.519, 0.546, 0.596, 0.64, 0.654, 0.671, 0.688, 0.694, 0.692, 0.681, 0.665, 0.638, 0.602, 0.565, 0.535, 0.498, 0.462, 0.427, 0.388, 0.348, 0.329, 0.321, 0.315, 0.321, 0.383, 0.392, 0.402, 0.419, 0.45, 0.469, 0.498, 0.529, 0.556, 0.585, 0.608, 0.621, 0.623, 0.621, 0.61, 0.577, 0.544, 0.519, 0.492, 0.462, 0.429, 0.398, 0.371, 0.344, 0.321, 0.31, 0.304, 0.304, 0.377, 0.377, 0.385, 0.404, 0.431, 0.45, 0.471, 0.51, 0.538, 0.565, 0.59, 0.604, 0.612, 0.615, 0.61, 0.6, 0.583, 0.558, 0.54, 0.517, 0.481, 0.442, 0.425, 0.402, 0.388, 0.379, 0.379, 0.377, 0.304], y = [0.722, 0.725, 0.763, 0.818, 0.859, 0.897, 0.955, 0.99, 1.0, 1.0, 0.99, 0.952, 0.887, 0.852, 0.797, 0.694, 0.584, 0.412, 0.296, 0.206, 0.127, 0.065, 0.027, 0.01, 0.0, 0.0, 0.01, 0.038, 0.096, 0.148, 0.186, 0.241, 0.244, 0.251, 0.196, 0.162, 0.131, 0.103, 0.096, 0.096, 0.11, 0.137, 0.192, 0.282, 0.378, 0.474, 0.478, 0.454, 0.402, 0.371, 0.357, 0.351, 0.351, 0.361, 0.381, 0.412, 0.457, 0.519, 0.567, 0.622, 0.722, 0.704, 0.632, 0.577, 0.526, 0.485, 0.467, 0.457, 0.454, 0.464, 0.488, 0.529, 0.574, 0.622, 0.701, 0.749, 0.797, 0.838, 0.876, 0.893, 0.904, 0.904, 0.88, 0.859, 0.818, 0.773, 0.729, 0.708, 0.704, 0.722]), + "*" => (x = [0.749, 0.749, 0.554, 0.646, 0.603, 0.5, 0.397, 0.354, 0.446, 0.251, 0.251, 0.446, 0.354, 0.397, 0.5, 0.603, 0.646, 0.554, 0.749, 0.749], y = [0.445, 0.555, 0.569, 0.946, 1.001, 0.638, 1.001, 0.946, 0.569, 0.555, 0.445, 0.431, 0.054, -0.001, 0.362, -0.001, 0.054, 0.431, 0.445, 0.555]), +) + +mutable struct shape + x::Vector{Float64} + y::Vector{Float64} +end + +function get_arrow_basic(;line_scale=1.0, right=true, x_offset=0.0) + #= + the horizontal line + -------- + -------- + part of the arrow (before the arrow head) + + x_offset: + positive: shift to the right + negative: shift to the left + =# + arrow_line_width = line_scale * 4.0 + x = [0.0, arrow_line_width, arrow_line_width, line_scale * 7.5, arrow_line_width, arrow_line_width, 0.0] .+ x_offset + y = [1.05, 1.05, 1.15, 1.0, 0.85, 0.95, 0.95 ] + if right shape(x,y) + else + shape(-x, y) + end +end + +#### helpers ##### +get_right_most_point(_shape_::shape) = maximum(_shape_.x) +get_right_most_point(coords::Vector{shape}) = maximum(get_right_most_point.(coords)) +get_left_most_point(_shape_::shape) = minimum(_shape_.x) +get_left_most_point(coords::Vector{shape}) = minimum(get_left_most_point.(coords)) + +get_top_most_point(_shape_::shape) = maximum(_shape_.y) +get_top_most_point(coords::Vector{shape}) = maximum(get_top_most_point.(coords)) +get_bottom_most_point(_shape_::shape) = minimum(_shape_.y) +get_bottom_most_point(coords::Vector{shape}) = minimum(get_bottom_most_point.(coords)) + +x_substract!(_shape_::shape, a) = begin _shape_.x .= _shape_.x .- a end +x_substract!(coords::Vector{shape}, a) = x_substract!.(coords, a) +x_add!(_shape_::shape, a) = begin _shape_.x .= _shape_.x .+ a end +x_add!(coords::Vector{shape}, a) = x_add!.(coords, a) +x_divide!(_shape_::shape, a) = begin + @assert a != 0.0 "a cannot be zero" + _shape_.x .= _shape_.x ./ a +end +x_divide!(coords::Vector{shape}, a) = x_divide!.(coords, a) +x_multiply!(_shape_::shape, a) = begin _shape_.x .= _shape_.x .* a end +x_multiply!(coords::Vector{shape}, a) = x_multiply!.(coords, a) + +get_width(coords::Vector{shape}) = get_right_most_point(coords) - get_left_most_point(coords) +get_height(coords::Vector{shape}) = get_top_most_point(coords) - get_bottom_most_point(coords) + +y_substract!(_shape_::shape, a) = begin _shape_.y .= _shape_.y .- a end +y_substract!(coords::Vector{shape}, a) = y_substract!.(coords, a) +y_add!(_shape_::shape, a) = begin _shape_.y .= _shape_.y .+ a end +y_add!(coords::Vector{shape}, a) = y_add!.(coords, a) +y_divide!(_shape_::shape, a) = begin + @assert a != 0.0 "a cannot be zero" + _shape_.y .= _shape_.y ./ a +end +y_divide!(coords::Vector{shape}, a) = y_divide!.(coords, a) +y_multiply!(_shape_::shape, a) = begin _shape_.y .= _shape_.y .* a end +y_multiply!(coords::Vector{shape}, a) = y_multiply!.(coords, a) + +shift_right(_shape_::shape, a) = shape(_shape_.x .+ a, _shape_.y) +shift_right(_shapes_::Vector{shape}, a) = shift_right.(_shapes_, a) +shift_left(_shape_::shape, a) = shape(_shape_.x .- a, _shape_.y) +shift_up(_shape_::shape, a) = shape(_shape_.x, _shape_.y .+ a) +shift_up(_shapes_::Vector{shape}, a) = shift_up.(_shapes_, a) +shift_down(_shape_::shape, a) = shape(_shape_.x, _shape_.y .- a) + +Base.copy(_shape_::shape) = shape(copy(_shape_.x), copy(_shape_.y)) + +########################### + +#= +minmax normalize y and returns the +original top_most_pt and bottom_most_pt of the shape +=# +min_max_normalize_y!(coords::Vector{shape}) = begin + top_most_pt = get_top_most_point(coords) + bottom_most_pt = get_bottom_most_point(coords) + @assert 0 < top_most_pt ≤ 2 "top_most_pt should be in the range of (0,2)" + @assert 0 ≤ bottom_most_pt < 2 "bottom_most_pt should be in the range of (0,2)" + @assert top_most_pt > bottom_most_pt "top_most_pt should be greater than bottom_most_pt" + y_substract!(coords, bottom_most_pt) + y_divide!(coords, top_most_pt - bottom_most_pt) +end + +min_max_normalize_x!(coords::Vector{shape}) = begin + right_most_pt = get_right_most_point(coords) + left_most_pt = get_left_most_point(coords) + @assert right_most_pt > left_most_pt "right_most_pt should be greater than left_most_pt" + x_substract!(coords, left_most_pt) + x_divide!(coords, right_most_pt - left_most_pt) +end + +function scale_height!(coords::Vector{shape}, scaled_height) + min_max_normalize_y!(coords) + y_multiply!(coords, scaled_height) # scale the height + #= translate the shape so that it keeps the + same proportional relation to y = 0 and y = 2. =# + # y_add!(coords, 1.0 - (scaled_height / 2)) +end + + +function scale_width!(coords::Vector{shape}, scaled_width) + min_max_normalize_x!(coords) + x_multiply!(coords, scaled_width) +end + +#= + scale_height_by_proportion!(coords::Vector{shape}, proportion; in_range=(0.0, 2.0)) + scale the height of the shape by the proportion + proportion: the proportion to scale the height + in_range: the range of the height after scaling +=# +function scale_width_height_by_proportion!(coords::Vector{shape}, proportion) + @assert 0.0 < proportion < 1.0 "proportion should be in the range of (0,1)" + top_most_pt = get_top_most_point(coords) + bottom_most_pt = get_bottom_most_point(coords) + orig_height = top_most_pt - bottom_most_pt + + right_most_pt = get_right_most_point(coords) + left_most_pt = get_left_most_point(coords) + orig_width = right_most_pt - left_most_pt + + changed_height = orig_height * proportion + changed_width = orig_width * proportion + + scale_width!(coords, changed_width) + scale_height!(coords, changed_height) +end + +function two_adjusted_glyphs(ALPHABET_GLYPHS_i; stretch_x=8.0) + x = stretch_x .* (ALPHABET_GLYPHS_i.x .- minimum(ALPHABET_GLYPHS_i.x)) + # y = (ALPHABET_GLYPHS_i.y .- minimum(ALPHABET_GLYPHS_i.y)) + return shape(x, ALPHABET_GLYPHS_i.y .+ 0.5) +end + +function make_in_between_basic(num_bt::Int; + word_increment=4.0, + arrow_increment=1.0, + arrow_line_scale=1.25 + ) + GLYPHS_2_adjusted = merge( + Dict("$i" => two_adjusted_glyphs(ALPHABET_GLYPHS["$i"]) for i = 0:9), # 0-9 + Dict("b"=> two_adjusted_glyphs(ALPHABET_GLYPHS["b"]), + "p"=> two_adjusted_glyphs(ALPHABET_GLYPHS["p"])) )# b and p + + in_bt_str = vcat(split("$num_bt", ""), ["b", "p"]) + coords = shape[]; + k = 0.0 + for i in in_bt_str + g = copy(GLYPHS_2_adjusted["$i"]) + push!(coords, shift_right(g, k)) + k += word_increment + end + + push!(coords, shift_right( + get_arrow_basic(;line_scale=arrow_line_scale), get_right_most_point(coords) + arrow_increment)) + push!(coords, shift_left( + get_arrow_basic(;line_scale=arrow_line_scale, right=false), arrow_increment)) + + # return coords + coords = shift_right.(coords, get_left_most_point(coords) * -1.0) # left aligned to the origin + bottom_most_pt = get_bottom_most_point(coords) + y_substract!(coords, bottom_most_pt) + return coords +end diff --git a/tmp3.jl b/tmp3.jl index 2232687..21b04cb 100644 --- a/tmp3.jl +++ b/tmp3.jl @@ -1,71 +1,6 @@ using Plots using PlotPWM -const ALPHABET_GLYPHS = Dict{String, NamedTuple}( - "A" => (x = [0.121, 0.123, 0.444, 0.573, 0.883, 0.76, 0.675, 0.669, 0.333, 0.323, 0.238, 0.121, 0.121, 0.369, 0.638, 0.506, 0.502, 0.496, 0.367, 0.369, 0.121], y = [0.005, 0.007, 1.0, 1.0, 0.0, 0.0, 0.289, 0.301, 0.301, 0.277, 0.0, 0.0, 0.005, 0.41, 0.413, 0.85, 0.85, 0.833, 0.413, 0.41, 0.005]), - "B" => (x = [0.19, 0.612, 0.65, 0.694, 0.719, 0.75, 0.783, 0.806, 0.815, 0.812, 0.802, 0.781, 0.74, 0.7, 0.76, 0.788, 0.815, 0.829, 0.846, 0.856, 0.856, 0.852, 0.842, 0.827, 0.808, 0.771, 0.742, 0.715, 0.65, 0.588, 0.19, 0.19, 0.19, 0.302, 0.304, 0.571, 0.617, 0.658, 0.679, 0.694, 0.7, 0.7, 0.696, 0.683, 0.669, 0.648, 0.615, 0.55, 0.304, 0.302, 0.19, 0.304, 0.302, 0.304, 0.602, 0.65, 0.675, 0.708, 0.723, 0.735, 0.742, 0.742, 0.731, 0.721, 0.698, 0.683, 0.635, 0.571, 0.304, 0.19], y = [1.0, 0.998, 0.99, 0.973, 0.959, 0.932, 0.886, 0.828, 0.777, 0.706, 0.66, 0.614, 0.566, 0.539, 0.505, 0.483, 0.451, 0.427, 0.383, 0.32, 0.265, 0.233, 0.192, 0.155, 0.121, 0.075, 0.051, 0.034, 0.01, 0.0, 0.0, 0.998, 1.0, 0.886, 0.575, 0.578, 0.59, 0.617, 0.643, 0.677, 0.714, 0.757, 0.784, 0.818, 0.84, 0.859, 0.876, 0.888, 0.888, 0.886, 1.0, 0.468, 0.466, 0.117, 0.119, 0.133, 0.148, 0.182, 0.206, 0.24, 0.279, 0.32, 0.369, 0.391, 0.42, 0.432, 0.456, 0.468, 0.468, 1.0]), - "C" => (x = [0.127, 0.129, 0.131, 0.142, 0.158, 0.175, 0.204, 0.231, 0.273, 0.317, 0.352, 0.39, 0.44, 0.494, 0.556, 0.631, 0.679, 0.723, 0.758, 0.785, 0.831, 0.852, 0.862, 0.873, 0.76, 0.748, 0.731, 0.708, 0.669, 0.621, 0.554, 0.5, 0.458, 0.429, 0.385, 0.342, 0.31, 0.283, 0.267, 0.252, 0.246, 0.246, 0.254, 0.271, 0.29, 0.321, 0.354, 0.381, 0.435, 0.475, 0.544, 0.575, 0.606, 0.646, 0.667, 0.7, 0.721, 0.752, 0.767, 0.879, 0.869, 0.854, 0.84, 0.812, 0.765, 0.715, 0.667, 0.61, 0.538, 0.477, 0.408, 0.348, 0.302, 0.271, 0.225, 0.183, 0.16, 0.142, 0.131, 0.127, 0.127], y = [0.548, 0.551, 0.599, 0.664, 0.724, 0.767, 0.823, 0.862, 0.908, 0.942, 0.963, 0.979, 0.993, 1.0, 1.0, 0.988, 0.972, 0.949, 0.922, 0.894, 0.829, 0.786, 0.753, 0.691, 0.691, 0.737, 0.774, 0.809, 0.848, 0.873, 0.887, 0.887, 0.88, 0.871, 0.848, 0.811, 0.772, 0.721, 0.673, 0.601, 0.53, 0.447, 0.373, 0.306, 0.26, 0.207, 0.171, 0.15, 0.124, 0.115, 0.113, 0.118, 0.127, 0.147, 0.164, 0.2, 0.233, 0.309, 0.373, 0.373, 0.304, 0.253, 0.217, 0.166, 0.104, 0.06, 0.032, 0.012, 0.0, 0.0, 0.012, 0.035, 0.062, 0.088, 0.138, 0.207, 0.265, 0.336, 0.406, 0.465, 0.548]), - "D" => (x = [0.171, 0.542, 0.619, 0.683, 0.723, 0.762, 0.792, 0.817, 0.84, 0.856, 0.867, 0.871, 0.871, 0.865, 0.85, 0.831, 0.815, 0.783, 0.758, 0.708, 0.65, 0.602, 0.565, 0.171, 0.171, 0.171, 0.288, 0.288, 0.542, 0.575, 0.604, 0.65, 0.69, 0.719, 0.74, 0.75, 0.752, 0.746, 0.725, 0.702, 0.675, 0.65, 0.617, 0.571, 0.517, 0.29, 0.288, 0.171], y = [1.0, 1.0, 0.985, 0.956, 0.927, 0.886, 0.845, 0.799, 0.74, 0.677, 0.612, 0.558, 0.473, 0.4, 0.32, 0.255, 0.211, 0.15, 0.114, 0.063, 0.027, 0.01, 0.002, 0.0, 0.998, 1.0, 0.881, 0.119, 0.119, 0.126, 0.138, 0.172, 0.223, 0.284, 0.362, 0.434, 0.539, 0.609, 0.704, 0.76, 0.803, 0.83, 0.854, 0.874, 0.883, 0.883, 0.881, 1.0]), - "E" => (x = [0.206, 0.829, 0.829, 0.319, 0.321, 0.79, 0.79, 0.321, 0.319, 0.835, 0.835, 0.206, 0.206, 0.206], y = [1.0, 1.0, 0.879, 0.876, 0.573, 0.573, 0.456, 0.456, 0.119, 0.117, 0.0, 0.0, 0.998, 1.0]), - "F" => (x = [0.238, 0.833, 0.833, 0.354, 0.356, 0.775, 0.775, 0.354, 0.354, 0.238, 0.238, 0.238], y = [1.0, 1.0, 0.879, 0.876, 0.573, 0.573, 0.456, 0.454, 0.0, 0.0, 0.998, 1.0]), - "G" => (x = [0.1, 0.102, 0.104, 0.115, 0.135, 0.156, 0.188, 0.21, 0.248, 0.29, 0.331, 0.375, 0.429, 0.469, 0.529, 0.606, 0.673, 0.715, 0.769, 0.808, 0.838, 0.856, 0.744, 0.729, 0.717, 0.696, 0.658, 0.612, 0.571, 0.544, 0.473, 0.425, 0.39, 0.344, 0.302, 0.267, 0.244, 0.227, 0.219, 0.219, 0.227, 0.244, 0.269, 0.294, 0.333, 0.377, 0.435, 0.473, 0.525, 0.569, 0.61, 0.648, 0.677, 0.721, 0.738, 0.754, 0.762, 0.765, 0.494, 0.494, 0.871, 0.871, 0.798, 0.769, 0.725, 0.675, 0.612, 0.562, 0.508, 0.446, 0.41, 0.344, 0.281, 0.242, 0.202, 0.169, 0.14, 0.117, 0.106, 0.1, 0.1], y = [0.528, 0.53, 0.581, 0.647, 0.724, 0.774, 0.829, 0.862, 0.903, 0.938, 0.963, 0.982, 0.995, 1.0, 1.0, 0.988, 0.965, 0.942, 0.896, 0.841, 0.774, 0.691, 0.691, 0.744, 0.772, 0.804, 0.841, 0.866, 0.88, 0.885, 0.887, 0.878, 0.864, 0.834, 0.793, 0.74, 0.684, 0.613, 0.532, 0.452, 0.373, 0.304, 0.242, 0.2, 0.159, 0.131, 0.113, 0.108, 0.108, 0.115, 0.129, 0.15, 0.173, 0.226, 0.26, 0.316, 0.371, 0.426, 0.429, 0.532, 0.532, 0.025, 0.025, 0.147, 0.097, 0.053, 0.021, 0.007, 0.0, 0.0, 0.005, 0.023, 0.055, 0.085, 0.127, 0.177, 0.24, 0.316, 0.373, 0.445, 0.528]), - "H" => (x = [0.167, 0.283, 0.285, 0.723, 0.725, 0.842, 0.842, 0.725, 0.723, 0.285, 0.283, 0.167, 0.167, 0.167], y = [1.0, 1.0, 0.585, 0.585, 1.0, 1.0, 0.0, 0.0, 0.468, 0.468, 0.0, 0.0, 0.998, 1.0]), - "I" => (x = [0.452, 0.569, 0.569, 0.452, 0.452, 0.452], y = [1.0, 1.0, 0.0, 0.0, 0.998, 1.0]), - "J" => (x = [0.223, 0.331, 0.331, 0.342, 0.356, 0.379, 0.398, 0.442, 0.498, 0.538, 0.556, 0.571, 0.592, 0.602, 0.602, 0.715, 0.715, 0.708, 0.698, 0.679, 0.667, 0.644, 0.612, 0.567, 0.523, 0.485, 0.412, 0.373, 0.329, 0.29, 0.265, 0.24, 0.231, 0.223, 0.223, 0.223], y = [0.338, 0.338, 0.243, 0.187, 0.156, 0.13, 0.118, 0.106, 0.109, 0.123, 0.137, 0.154, 0.201, 0.296, 1.0, 1.0, 0.274, 0.213, 0.163, 0.116, 0.095, 0.066, 0.04, 0.017, 0.005, 0.0, 0.002, 0.012, 0.031, 0.059, 0.087, 0.139, 0.17, 0.234, 0.336, 0.338]), - "K" => (x = [0.19, 0.302, 0.304, 0.729, 0.888, 0.865, 0.558, 0.529, 0.898, 0.748, 0.481, 0.442, 0.302, 0.302, 0.19, 0.19, 0.19, 0.89, 0.89, 0.19, 0.9, 0.9, 0.19], y = [1.0, 1.0, 0.512, 1.0, 1.0, 0.971, 0.633, 0.597, 0.002, 0.0, 0.442, 0.502, 0.347, 0.0, 0.0, 0.998, 1.0, 1.0, 1.0, 1.0, 0.0, 0.0, 1.0]), - "L" => (x = [0.265, 0.381, 0.381, 0.808, 0.808, 0.265, 0.265, 0.265], y = [1.0, 1.0, 0.119, 0.117, 0.0, 0.0, 0.998, 1.0]), - "M" => (x = [0.09, 0.256, 0.504, 0.75, 0.917, 0.917, 0.806, 0.806, 0.81, 0.808, 0.56, 0.446, 0.215, 0.2, 0.196, 0.196, 0.2, 0.2, 0.09, 0.09, 0.09], y = [1.0, 1.0, 0.153, 0.998, 1.0, 0.0, 0.0, 0.65, 0.738, 0.842, 0.0, 0.0, 0.791, 0.84, 0.84, 0.745, 0.66, 0.0, 0.0, 0.998, 1.0]), - "N" => (x = [0.167, 0.304, 0.727, 0.729, 0.84, 0.84, 0.708, 0.279, 0.277, 0.167, 0.167, 0.167], y = [1.0, 1.0, 0.194, 1.0, 1.0, 0.0, 0.0, 0.808, 0.0, 0.0, 0.998, 1.0]), - "O" => (x = [0.081, 0.083, 0.088, 0.102, 0.121, 0.138, 0.167, 0.202, 0.235, 0.288, 0.338, 0.408, 0.465, 0.533, 0.592, 0.648, 0.704, 0.735, 0.777, 0.81, 0.838, 0.86, 0.881, 0.9, 0.912, 0.919, 0.919, 0.915, 0.902, 0.89, 0.873, 0.846, 0.804, 0.769, 0.717, 0.66, 0.604, 0.552, 0.462, 0.406, 0.34, 0.279, 0.227, 0.192, 0.15, 0.123, 0.106, 0.09, 0.081, 0.081, 0.2, 0.2, 0.204, 0.215, 0.231, 0.25, 0.277, 0.315, 0.34, 0.375, 0.427, 0.477, 0.533, 0.569, 0.617, 0.656, 0.688, 0.708, 0.735, 0.771, 0.785, 0.796, 0.8, 0.8, 0.796, 0.785, 0.771, 0.754, 0.715, 0.662, 0.627, 0.592, 0.529, 0.477, 0.423, 0.375, 0.344, 0.312, 0.273, 0.25, 0.231, 0.217, 0.204, 0.202, 0.2, 0.081], y = [0.537, 0.539, 0.601, 0.675, 0.733, 0.772, 0.825, 0.873, 0.908, 0.947, 0.972, 0.993, 1.0, 1.0, 0.993, 0.979, 0.956, 0.938, 0.906, 0.871, 0.834, 0.795, 0.749, 0.689, 0.624, 0.558, 0.477, 0.424, 0.35, 0.304, 0.258, 0.203, 0.141, 0.101, 0.06, 0.03, 0.012, 0.002, 0.0, 0.007, 0.025, 0.055, 0.094, 0.131, 0.194, 0.251, 0.3, 0.373, 0.456, 0.537, 0.528, 0.452, 0.408, 0.353, 0.3, 0.258, 0.214, 0.173, 0.154, 0.136, 0.12, 0.113, 0.113, 0.118, 0.131, 0.152, 0.177, 0.2, 0.242, 0.323, 0.373, 0.433, 0.479, 0.551, 0.594, 0.65, 0.696, 0.733, 0.793, 0.841, 0.862, 0.876, 0.887, 0.887, 0.878, 0.859, 0.841, 0.816, 0.772, 0.735, 0.694, 0.647, 0.578, 0.53, 0.528, 0.537]), - "P" => (x = [0.206, 0.617, 0.66, 0.702, 0.74, 0.762, 0.785, 0.804, 0.823, 0.833, 0.844, 0.842, 0.838, 0.823, 0.8, 0.779, 0.752, 0.723, 0.688, 0.619, 0.323, 0.323, 0.206, 0.206, 0.206, 0.323, 0.325, 0.596, 0.654, 0.692, 0.708, 0.721, 0.727, 0.727, 0.721, 0.708, 0.679, 0.64, 0.581, 0.325, 0.323, 0.206], y = [1.0, 1.0, 0.993, 0.978, 0.956, 0.937, 0.913, 0.886, 0.847, 0.813, 0.745, 0.665, 0.638, 0.587, 0.539, 0.507, 0.478, 0.456, 0.439, 0.425, 0.422, 0.0, 0.0, 0.998, 1.0, 0.881, 0.536, 0.539, 0.558, 0.587, 0.612, 0.646, 0.687, 0.738, 0.774, 0.808, 0.847, 0.871, 0.883, 0.883, 0.881, 1.0]), - "Q" => (x = [0.081, 0.083, 0.088, 0.102, 0.121, 0.138, 0.167, 0.202, 0.235, 0.288, 0.338, 0.408, 0.465, 0.533, 0.592, 0.648, 0.704, 0.758, 0.815, 0.86, 0.881, 0.898, 0.91, 0.917, 0.917, 0.91, 0.896, 0.881, 0.854, 0.825, 0.794, 0.802, 0.91, 0.852, 0.723, 0.671, 0.6, 0.527, 0.462, 0.406, 0.34, 0.275, 0.246, 0.217, 0.181, 0.169, 0.138, 0.112, 0.094, 0.085, 0.081, 0.081, 0.2, 0.2, 0.204, 0.217, 0.229, 0.246, 0.273, 0.298, 0.34, 0.39, 0.419, 0.479, 0.54, 0.577, 0.608, 0.629, 0.631, 0.623, 0.54, 0.54, 0.596, 0.708, 0.746, 0.762, 0.777, 0.792, 0.798, 0.798, 0.785, 0.771, 0.754, 0.715, 0.685, 0.652, 0.617, 0.583, 0.529, 0.477, 0.44, 0.404, 0.369, 0.338, 0.306, 0.273, 0.252, 0.235, 0.219, 0.21, 0.202, 0.202, 0.2, 0.081], y = [0.537, 0.54, 0.602, 0.676, 0.733, 0.772, 0.825, 0.873, 0.908, 0.947, 0.972, 0.993, 1.0, 1.0, 0.993, 0.979, 0.956, 0.922, 0.867, 0.795, 0.749, 0.699, 0.639, 0.588, 0.45, 0.399, 0.33, 0.282, 0.22, 0.172, 0.135, 0.123, 0.031, 0.0, 0.066, 0.038, 0.013, 0.001, 0.001, 0.008, 0.027, 0.059, 0.079, 0.105, 0.144, 0.162, 0.218, 0.28, 0.351, 0.406, 0.457, 0.537, 0.531, 0.452, 0.406, 0.342, 0.303, 0.266, 0.222, 0.192, 0.158, 0.132, 0.123, 0.114, 0.114, 0.119, 0.128, 0.139, 0.142, 0.151, 0.222, 0.227, 0.3, 0.206, 0.261, 0.296, 0.337, 0.406, 0.455, 0.579, 0.65, 0.696, 0.733, 0.793, 0.823, 0.848, 0.867, 0.878, 0.887, 0.887, 0.883, 0.873, 0.86, 0.841, 0.816, 0.779, 0.747, 0.712, 0.662, 0.625, 0.563, 0.533, 0.531, 0.537]), - "R" => (x = [0.181, 0.602, 0.644, 0.685, 0.731, 0.769, 0.8, 0.815, 0.829, 0.84, 0.846, 0.846, 0.842, 0.829, 0.806, 0.762, 0.725, 0.777, 0.802, 0.819, 0.829, 0.833, 0.84, 0.848, 0.858, 0.879, 0.879, 0.733, 0.727, 0.723, 0.723, 0.715, 0.7, 0.692, 0.658, 0.621, 0.588, 0.3, 0.298, 0.181, 0.181, 0.181, 0.298, 0.3, 0.581, 0.644, 0.685, 0.708, 0.721, 0.727, 0.727, 0.723, 0.706, 0.673, 0.642, 0.596, 0.3, 0.298, 0.181], y = [1.0, 1.0, 0.995, 0.985, 0.966, 0.939, 0.905, 0.881, 0.847, 0.808, 0.76, 0.704, 0.665, 0.617, 0.57, 0.519, 0.493, 0.456, 0.427, 0.388, 0.32, 0.146, 0.087, 0.058, 0.039, 0.019, 0.0, 0.002, 0.029, 0.08, 0.138, 0.311, 0.362, 0.376, 0.41, 0.425, 0.43, 0.43, 0.0, 0.0, 0.998, 1.0, 0.881, 0.541, 0.541, 0.556, 0.583, 0.614, 0.648, 0.689, 0.74, 0.772, 0.818, 0.857, 0.874, 0.883, 0.883, 0.881, 1.0]), - "S" => (x = [0.169, 0.277, 0.279, 0.288, 0.306, 0.321, 0.346, 0.367, 0.402, 0.433, 0.479, 0.533, 0.579, 0.61, 0.642, 0.669, 0.692, 0.706, 0.717, 0.721, 0.719, 0.704, 0.679, 0.638, 0.583, 0.373, 0.315, 0.285, 0.252, 0.233, 0.217, 0.202, 0.198, 0.198, 0.208, 0.219, 0.235, 0.275, 0.327, 0.385, 0.462, 0.527, 0.577, 0.633, 0.692, 0.733, 0.767, 0.79, 0.804, 0.808, 0.7, 0.694, 0.683, 0.667, 0.633, 0.606, 0.562, 0.519, 0.465, 0.421, 0.394, 0.36, 0.338, 0.319, 0.308, 0.306, 0.312, 0.325, 0.346, 0.381, 0.471, 0.65, 0.683, 0.733, 0.76, 0.79, 0.804, 0.823, 0.833, 0.831, 0.821, 0.794, 0.775, 0.754, 0.69, 0.617, 0.533, 0.465, 0.392, 0.329, 0.279, 0.235, 0.21, 0.188, 0.173, 0.169, 0.169], y = [0.332, 0.332, 0.3, 0.256, 0.207, 0.184, 0.157, 0.141, 0.122, 0.113, 0.106, 0.106, 0.113, 0.122, 0.136, 0.154, 0.177, 0.2, 0.23, 0.256, 0.311, 0.355, 0.385, 0.41, 0.431, 0.486, 0.509, 0.525, 0.553, 0.576, 0.606, 0.654, 0.684, 0.735, 0.8, 0.832, 0.866, 0.919, 0.961, 0.986, 1.0, 1.0, 0.993, 0.977, 0.947, 0.915, 0.873, 0.825, 0.767, 0.698, 0.698, 0.742, 0.779, 0.813, 0.85, 0.869, 0.885, 0.892, 0.892, 0.885, 0.876, 0.855, 0.829, 0.797, 0.763, 0.714, 0.684, 0.659, 0.636, 0.615, 0.585, 0.539, 0.528, 0.502, 0.482, 0.449, 0.426, 0.38, 0.32, 0.242, 0.189, 0.129, 0.104, 0.083, 0.041, 0.014, 0.0, 0.0, 0.012, 0.035, 0.067, 0.111, 0.147, 0.198, 0.258, 0.329, 0.332]), - "T" => (x = [0.154, 0.85, 0.85, 0.56, 0.56, 0.444, 0.444, 0.154, 0.154, 0.154], y = [1.0, 1.0, 0.883, 0.881, 0.0, 0.0, 0.881, 0.883, 0.998, 1.0]), - "U" => (x = [0.171, 0.288, 0.288, 0.292, 0.304, 0.331, 0.344, 0.373, 0.41, 0.446, 0.475, 0.546, 0.579, 0.61, 0.658, 0.692, 0.708, 0.721, 0.729, 0.729, 0.846, 0.846, 0.838, 0.825, 0.815, 0.796, 0.775, 0.742, 0.715, 0.677, 0.631, 0.581, 0.542, 0.475, 0.421, 0.365, 0.319, 0.277, 0.25, 0.227, 0.206, 0.192, 0.181, 0.171, 0.171, 0.171], y = [1.0, 1.0, 0.364, 0.324, 0.267, 0.206, 0.187, 0.156, 0.132, 0.121, 0.116, 0.118, 0.125, 0.137, 0.17, 0.213, 0.248, 0.293, 0.362, 1.0, 1.0, 0.402, 0.303, 0.239, 0.203, 0.158, 0.123, 0.083, 0.059, 0.035, 0.017, 0.005, 0.0, 0.0, 0.007, 0.024, 0.047, 0.08, 0.111, 0.147, 0.191, 0.239, 0.288, 0.402, 0.998, 1.0]), - "V" => (x = [0.133, 0.258, 0.488, 0.508, 0.754, 0.883, 0.569, 0.446, 0.133, 0.133], y = [1.0, 0.998, 0.211, 0.148, 0.998, 1.0, 0.0, 0.0, 0.998, 1.0]), - "W" => (x = [0.006, 0.121, 0.267, 0.271, 0.446, 0.558, 0.725, 0.738, 0.744, 0.885, 1.0, 0.796, 0.683, 0.502, 0.321, 0.319, 0.208, 0.006, 0.006], y = [1.0, 0.997, 0.191, 0.194, 1.0, 1.0, 0.231, 0.186, 0.207, 1.0, 1.0, 0.0, 0.003, 0.83, 0.005, 0.0, 0.0, 0.997, 1.0]), - "X" => (x = [0.129, 0.133, 0.435, 0.152, 0.294, 0.512, 0.727, 0.867, 0.579, 0.875, 0.735, 0.529, 0.506, 0.271, 0.129], y = [0.0, 0.005, 0.515, 1.0, 1.0, 0.617, 1.0, 1.0, 0.507, 0.0, 0.0, 0.374, 0.41, 0.0, 0.0]), - "Y" => (x = [0.125, 0.262, 0.51, 0.758, 0.896, 0.569, 0.569, 0.452, 0.452, 0.127, 0.125], y = [1.0, 0.998, 0.519, 1.0, 1.0, 0.403, 0.0, 0.0, 0.403, 0.995, 1.0]), - "Z" => (x = [0.16, 0.162, 0.694, 0.2, 0.2, 0.842, 0.842, 0.306, 0.842, 0.842, 0.16, 0.16], y = [0.112, 0.114, 0.881, 0.883, 1.0, 1.0, 0.883, 0.119, 0.117, 0.0, 0.0, 0.112]), - "a" => (x = [0.298, 0.3, 0.3, 0.312, 0.327, 0.356, 0.392, 0.415, 0.538, 0.583, 0.6, 0.598, 0.59, 0.581, 0.552, 0.515, 0.458, 0.423, 0.398, 0.381, 0.312, 0.323, 0.346, 0.358, 0.383, 0.435, 0.477, 0.535, 0.577, 0.606, 0.631, 0.65, 0.665, 0.671, 0.673, 0.679, 0.694, 0.621, 0.61, 0.606, 0.602, 0.577, 0.55, 0.527, 0.492, 0.435, 0.383, 0.346, 0.319, 0.304, 0.298, 0.375, 0.375, 0.381, 0.392, 0.41, 0.444, 0.496, 0.519, 0.544, 0.571, 0.59, 0.6, 0.598, 0.535, 0.442, 0.425, 0.4, 0.383, 0.375, 0.375, 0.298], y = [0.278, 0.282, 0.324, 0.403, 0.449, 0.505, 0.542, 0.556, 0.593, 0.616, 0.634, 0.736, 0.787, 0.81, 0.852, 0.87, 0.866, 0.838, 0.782, 0.69, 0.708, 0.796, 0.88, 0.907, 0.944, 0.986, 1.0, 1.0, 0.986, 0.963, 0.931, 0.889, 0.824, 0.755, 0.185, 0.102, 0.023, 0.023, 0.074, 0.134, 0.139, 0.093, 0.056, 0.032, 0.009, 0.0, 0.019, 0.06, 0.12, 0.185, 0.278, 0.282, 0.255, 0.213, 0.181, 0.148, 0.125, 0.13, 0.144, 0.171, 0.222, 0.287, 0.403, 0.505, 0.463, 0.431, 0.421, 0.394, 0.352, 0.287, 0.282, 0.278]), - "b" => (x = [0.323, 0.394, 0.396, 0.435, 0.46, 0.481, 0.533, 0.583, 0.623, 0.658, 0.683, 0.696, 0.694, 0.685, 0.675, 0.665, 0.644, 0.6, 0.55, 0.517, 0.483, 0.454, 0.427, 0.406, 0.392, 0.39, 0.323, 0.323, 0.323, 0.46, 0.458, 0.442, 0.412, 0.402, 0.392, 0.388, 0.39, 0.402, 0.419, 0.442, 0.467, 0.481, 0.512, 0.54, 0.569, 0.59, 0.61, 0.623, 0.621, 0.606, 0.588, 0.575, 0.546, 0.523, 0.492, 0.46, 0.323], y = [1.0, 1.0, 0.652, 0.71, 0.731, 0.741, 0.745, 0.724, 0.686, 0.621, 0.531, 0.424, 0.303, 0.234, 0.186, 0.152, 0.103, 0.041, 0.007, 0.0, 0.003, 0.017, 0.041, 0.072, 0.103, 0.017, 0.017, 0.997, 1.0, 0.631, 0.628, 0.61, 0.555, 0.521, 0.462, 0.39, 0.303, 0.214, 0.169, 0.131, 0.107, 0.1, 0.097, 0.107, 0.134, 0.169, 0.231, 0.328, 0.452, 0.538, 0.586, 0.607, 0.638, 0.648, 0.648, 0.631, 1.0]), - "c" => (x = [0.327, 0.329, 0.331, 0.338, 0.358, 0.373, 0.398, 0.417, 0.442, 0.475, 0.502, 0.546, 0.594, 0.627, 0.65, 0.671, 0.685, 0.694, 0.625, 0.619, 0.604, 0.588, 0.575, 0.542, 0.506, 0.481, 0.454, 0.429, 0.415, 0.406, 0.4, 0.4, 0.412, 0.433, 0.462, 0.488, 0.51, 0.56, 0.592, 0.608, 0.619, 0.631, 0.7, 0.694, 0.679, 0.662, 0.635, 0.615, 0.588, 0.554, 0.531, 0.49, 0.46, 0.442, 0.404, 0.367, 0.342, 0.333, 0.327, 0.327], y = [0.574, 0.579, 0.644, 0.699, 0.81, 0.856, 0.912, 0.94, 0.968, 0.991, 1.0, 1.0, 0.977, 0.94, 0.898, 0.838, 0.773, 0.699, 0.676, 0.722, 0.782, 0.824, 0.843, 0.87, 0.87, 0.856, 0.824, 0.769, 0.713, 0.657, 0.574, 0.431, 0.296, 0.218, 0.162, 0.139, 0.13, 0.144, 0.185, 0.227, 0.269, 0.37, 0.352, 0.278, 0.199, 0.144, 0.083, 0.051, 0.023, 0.005, 0.0, 0.005, 0.019, 0.032, 0.079, 0.162, 0.269, 0.333, 0.421, 0.574]), - "d" => (x = [0.298, 0.3, 0.3, 0.308, 0.331, 0.344, 0.369, 0.415, 0.458, 0.498, 0.519, 0.533, 0.567, 0.598, 0.6, 0.671, 0.671, 0.604, 0.602, 0.585, 0.567, 0.521, 0.49, 0.454, 0.423, 0.396, 0.375, 0.346, 0.321, 0.308, 0.3, 0.298, 0.371, 0.371, 0.379, 0.396, 0.425, 0.448, 0.479, 0.512, 0.531, 0.554, 0.573, 0.592, 0.604, 0.606, 0.604, 0.594, 0.573, 0.552, 0.529, 0.5, 0.46, 0.431, 0.402, 0.388, 0.375, 0.373, 0.371, 0.298], y = [0.428, 0.431, 0.455, 0.521, 0.61, 0.641, 0.683, 0.728, 0.745, 0.745, 0.738, 0.731, 0.7, 0.648, 1.0, 1.0, 0.017, 0.017, 0.103, 0.069, 0.041, 0.007, 0.0, 0.003, 0.017, 0.038, 0.062, 0.11, 0.176, 0.231, 0.293, 0.428, 0.424, 0.324, 0.248, 0.186, 0.134, 0.11, 0.097, 0.1, 0.11, 0.134, 0.166, 0.217, 0.3, 0.366, 0.428, 0.51, 0.576, 0.61, 0.634, 0.648, 0.645, 0.624, 0.579, 0.541, 0.476, 0.428, 0.424, 0.428]), - "e" => (x = [0.3, 0.302, 0.302, 0.308, 0.329, 0.35, 0.371, 0.394, 0.423, 0.46, 0.523, 0.575, 0.61, 0.627, 0.654, 0.677, 0.688, 0.694, 0.696, 0.375, 0.373, 0.383, 0.402, 0.433, 0.452, 0.479, 0.529, 0.567, 0.596, 0.619, 0.69, 0.692, 0.675, 0.66, 0.629, 0.594, 0.571, 0.517, 0.469, 0.446, 0.419, 0.39, 0.367, 0.342, 0.331, 0.312, 0.3, 0.3, 0.377, 0.379, 0.619, 0.619, 0.61, 0.594, 0.573, 0.544, 0.519, 0.481, 0.44, 0.427, 0.398, 0.383, 0.377, 0.3], y = [0.569, 0.574, 0.611, 0.676, 0.792, 0.856, 0.903, 0.94, 0.972, 0.995, 1.0, 0.972, 0.931, 0.903, 0.838, 0.745, 0.676, 0.602, 0.463, 0.463, 0.435, 0.324, 0.245, 0.176, 0.153, 0.134, 0.134, 0.167, 0.227, 0.329, 0.31, 0.292, 0.204, 0.153, 0.083, 0.037, 0.019, 0.0, 0.005, 0.014, 0.032, 0.065, 0.102, 0.162, 0.194, 0.282, 0.421, 0.569, 0.597, 0.593, 0.593, 0.634, 0.708, 0.773, 0.819, 0.856, 0.87, 0.87, 0.838, 0.819, 0.75, 0.681, 0.597, 0.569]), - "f" => (x = [0.394, 0.454, 0.458, 0.46, 0.473, 0.496, 0.519, 0.552, 0.604, 0.644, 0.633, 0.61, 0.565, 0.55, 0.54, 0.531, 0.529, 0.612, 0.612, 0.529, 0.529, 0.458, 0.458, 0.394, 0.394, 0.394], y = [0.71, 0.71, 0.717, 0.869, 0.924, 0.966, 0.986, 1.0, 1.0, 0.99, 0.886, 0.893, 0.89, 0.879, 0.862, 0.834, 0.714, 0.71, 0.621, 0.617, 0.0, 0.0, 0.617, 0.621, 0.707, 0.71]), - "g" => (x = [0.296, 0.298, 0.3, 0.306, 0.315, 0.331, 0.346, 0.369, 0.415, 0.46, 0.502, 0.523, 0.567, 0.583, 0.606, 0.608, 0.675, 0.673, 0.667, 0.658, 0.644, 0.617, 0.59, 0.552, 0.508, 0.452, 0.415, 0.39, 0.356, 0.335, 0.315, 0.31, 0.31, 0.379, 0.383, 0.394, 0.406, 0.438, 0.46, 0.502, 0.525, 0.55, 0.562, 0.583, 0.598, 0.602, 0.602, 0.6, 0.585, 0.56, 0.529, 0.5, 0.446, 0.415, 0.392, 0.373, 0.346, 0.319, 0.304, 0.298, 0.296, 0.369, 0.369, 0.377, 0.39, 0.412, 0.444, 0.475, 0.5, 0.521, 0.554, 0.579, 0.596, 0.606, 0.608, 0.604, 0.59, 0.577, 0.552, 0.531, 0.5, 0.473, 0.435, 0.4, 0.388, 0.373, 0.371, 0.369, 0.296], y = [0.681, 0.685, 0.732, 0.773, 0.814, 0.868, 0.902, 0.939, 0.983, 1.0, 1.0, 0.993, 0.963, 0.942, 0.902, 0.983, 0.983, 0.278, 0.207, 0.159, 0.115, 0.068, 0.037, 0.014, 0.0, 0.0, 0.01, 0.024, 0.054, 0.085, 0.153, 0.186, 0.224, 0.207, 0.176, 0.146, 0.125, 0.102, 0.095, 0.095, 0.102, 0.119, 0.132, 0.169, 0.224, 0.285, 0.373, 0.376, 0.349, 0.319, 0.295, 0.285, 0.288, 0.302, 0.319, 0.339, 0.383, 0.454, 0.519, 0.566, 0.681, 0.685, 0.607, 0.525, 0.475, 0.427, 0.393, 0.38, 0.38, 0.386, 0.414, 0.454, 0.505, 0.573, 0.678, 0.729, 0.8, 0.831, 0.871, 0.892, 0.905, 0.905, 0.885, 0.834, 0.803, 0.736, 0.688, 0.685, 0.681]), - "h" => (x = [0.323, 0.396, 0.398, 0.438, 0.475, 0.504, 0.548, 0.579, 0.606, 0.623, 0.65, 0.667, 0.673, 0.673, 0.602, 0.6, 0.588, 0.571, 0.55, 0.519, 0.488, 0.46, 0.44, 0.412, 0.4, 0.396, 0.396, 0.323, 0.323, 0.323], y = [1.0, 1.0, 0.646, 0.702, 0.73, 0.74, 0.74, 0.73, 0.712, 0.695, 0.649, 0.586, 0.523, 0.0, 0.0, 0.519, 0.575, 0.607, 0.628, 0.639, 0.635, 0.621, 0.6, 0.551, 0.498, 0.456, 0.0, 0.0, 0.996, 1.0]), - "i" => (x = [0.465, 0.535, 0.535, 0.465, 0.465, 0.465, 0.465, 0.465, 0.465, 0.535, 0.535, 0.465, 0.465], y = [1.0, 1.0, 0.863, 0.863, 0.996, 1.0, 0.723, 0.719, 0.0, 0.0, 0.723, 0.723, 1.0]), - "j" => (x = [0.371, 0.373, 0.383, 0.402, 0.435, 0.452, 0.46, 0.462, 0.533, 0.531, 0.517, 0.498, 0.477, 0.446, 0.404, 0.371, 0.371, 0.462, 0.533, 0.533, 0.462, 0.462, 0.462, 0.371], y = [0.016, 0.019, 0.087, 0.081, 0.084, 0.1, 0.13, 0.786, 0.786, 0.119, 0.057, 0.027, 0.011, 0.0, 0.0, 0.008, 0.016, 0.894, 0.894, 1.0, 1.0, 0.897, 0.894, 0.016]), - "k" => (x = [0.35, 0.421, 0.423, 0.594, 0.683, 0.523, 0.702, 0.702, 0.617, 0.473, 0.421, 0.421, 0.35, 0.35, 0.35, 0.685, 0.685, 0.35, 0.704, 0.704, 0.35], y = [1.0, 1.0, 0.432, 0.723, 0.723, 0.456, 0.007, 0.0, 0.0, 0.372, 0.288, 0.0, 0.0, 0.996, 1.0, 0.723, 0.723, 1.0, 0.0, 0.0, 1.0]), - "l" => (x = [0.462, 0.533, 0.533, 0.462, 0.462, 0.462], y = [1.0, 1.0, 0.0, 0.0, 0.996, 1.0]), - "m" => (x = [0.208, 0.273, 0.275, 0.308, 0.344, 0.385, 0.427, 0.448, 0.467, 0.494, 0.508, 0.527, 0.552, 0.569, 0.606, 0.642, 0.696, 0.74, 0.767, 0.781, 0.792, 0.792, 0.721, 0.719, 0.708, 0.692, 0.677, 0.648, 0.612, 0.579, 0.554, 0.542, 0.538, 0.538, 0.467, 0.467, 0.462, 0.454, 0.438, 0.417, 0.392, 0.358, 0.325, 0.304, 0.288, 0.281, 0.281, 0.208, 0.208, 0.208], y = [0.976, 0.976, 0.844, 0.929, 0.976, 1.0, 1.0, 0.991, 0.976, 0.938, 0.905, 0.829, 0.9, 0.934, 0.981, 1.0, 0.995, 0.957, 0.9, 0.839, 0.744, 0.0, 0.0, 0.735, 0.791, 0.829, 0.848, 0.863, 0.853, 0.815, 0.754, 0.682, 0.63, 0.0, 0.0, 0.645, 0.73, 0.782, 0.829, 0.853, 0.863, 0.853, 0.815, 0.768, 0.687, 0.607, 0.0, 0.0, 0.972, 0.976]), - "n" => (x = [0.323, 0.388, 0.39, 0.406, 0.427, 0.467, 0.504, 0.546, 0.585, 0.623, 0.648, 0.667, 0.673, 0.673, 0.602, 0.602, 0.598, 0.59, 0.567, 0.54, 0.515, 0.488, 0.465, 0.435, 0.415, 0.402, 0.396, 0.396, 0.323, 0.323, 0.323], y = [0.976, 0.976, 0.844, 0.891, 0.934, 0.981, 1.0, 1.0, 0.981, 0.938, 0.882, 0.791, 0.692, 0.0, 0.0, 0.64, 0.716, 0.768, 0.825, 0.853, 0.863, 0.858, 0.844, 0.806, 0.754, 0.687, 0.616, 0.0, 0.0, 0.972, 0.976]), - "o" => (x = [0.296, 0.298, 0.302, 0.315, 0.327, 0.342, 0.369, 0.39, 0.44, 0.475, 0.538, 0.581, 0.602, 0.629, 0.65, 0.671, 0.685, 0.698, 0.698, 0.688, 0.675, 0.665, 0.635, 0.6, 0.577, 0.529, 0.49, 0.452, 0.433, 0.394, 0.367, 0.346, 0.317, 0.3, 0.296, 0.369, 0.371, 0.383, 0.404, 0.429, 0.465, 0.508, 0.544, 0.579, 0.604, 0.617, 0.625, 0.625, 0.619, 0.602, 0.592, 0.567, 0.54, 0.512, 0.471, 0.431, 0.402, 0.388, 0.373, 0.371, 0.369, 0.296], y = [0.528, 0.532, 0.653, 0.745, 0.801, 0.847, 0.907, 0.94, 0.986, 1.0, 0.995, 0.968, 0.944, 0.903, 0.856, 0.792, 0.722, 0.597, 0.412, 0.292, 0.222, 0.185, 0.111, 0.056, 0.032, 0.005, 0.0, 0.009, 0.019, 0.056, 0.097, 0.144, 0.245, 0.375, 0.528, 0.514, 0.417, 0.306, 0.227, 0.176, 0.139, 0.13, 0.148, 0.199, 0.269, 0.333, 0.426, 0.583, 0.653, 0.741, 0.773, 0.824, 0.856, 0.87, 0.866, 0.829, 0.769, 0.718, 0.616, 0.519, 0.514, 0.528]), - "p" => (x = [0.323, 0.388, 0.39, 0.423, 0.438, 0.465, 0.494, 0.535, 0.567, 0.59, 0.625, 0.65, 0.662, 0.677, 0.688, 0.696, 0.696, 0.692, 0.675, 0.648, 0.623, 0.596, 0.556, 0.521, 0.483, 0.454, 0.425, 0.398, 0.396, 0.323, 0.323, 0.323, 0.423, 0.4, 0.392, 0.388, 0.388, 0.392, 0.402, 0.41, 0.421, 0.448, 0.469, 0.494, 0.535, 0.558, 0.577, 0.594, 0.606, 0.617, 0.623, 0.621, 0.61, 0.6, 0.59, 0.562, 0.535, 0.51, 0.49, 0.465, 0.446, 0.425, 0.423, 0.323], y = [0.983, 0.983, 0.893, 0.952, 0.969, 0.99, 1.0, 1.0, 0.99, 0.976, 0.938, 0.897, 0.866, 0.817, 0.766, 0.69, 0.576, 0.531, 0.441, 0.366, 0.324, 0.293, 0.266, 0.255, 0.259, 0.272, 0.3, 0.341, 0.0, 0.0, 0.979, 0.983, 0.834, 0.766, 0.714, 0.659, 0.59, 0.531, 0.472, 0.445, 0.421, 0.379, 0.362, 0.352, 0.359, 0.376, 0.4, 0.431, 0.466, 0.514, 0.569, 0.721, 0.783, 0.817, 0.841, 0.883, 0.903, 0.91, 0.907, 0.893, 0.872, 0.838, 0.834, 0.983]), - "q" => (x = [0.298, 0.3, 0.302, 0.31, 0.331, 0.346, 0.369, 0.394, 0.429, 0.46, 0.5, 0.521, 0.552, 0.571, 0.604, 0.606, 0.671, 0.671, 0.6, 0.6, 0.596, 0.577, 0.552, 0.508, 0.479, 0.446, 0.415, 0.396, 0.373, 0.35, 0.329, 0.319, 0.302, 0.298, 0.298, 0.371, 0.371, 0.379, 0.394, 0.419, 0.45, 0.481, 0.521, 0.552, 0.577, 0.592, 0.6, 0.606, 0.606, 0.598, 0.585, 0.56, 0.533, 0.504, 0.469, 0.435, 0.408, 0.39, 0.377, 0.373, 0.371, 0.298], y = [0.669, 0.672, 0.728, 0.786, 0.866, 0.9, 0.938, 0.966, 0.99, 1.0, 1.0, 0.993, 0.972, 0.952, 0.89, 0.983, 0.983, 0.0, 0.0, 0.341, 0.345, 0.31, 0.283, 0.259, 0.255, 0.262, 0.279, 0.297, 0.324, 0.362, 0.41, 0.445, 0.538, 0.593, 0.669, 0.666, 0.597, 0.51, 0.452, 0.4, 0.366, 0.352, 0.359, 0.386, 0.428, 0.469, 0.51, 0.576, 0.666, 0.748, 0.8, 0.855, 0.89, 0.907, 0.907, 0.886, 0.848, 0.803, 0.741, 0.669, 0.666, 0.669]), - "r" => (x = [0.417, 0.481, 0.483, 0.506, 0.527, 0.552, 0.59, 0.61, 0.65, 0.625, 0.592, 0.554, 0.538, 0.523, 0.506, 0.494, 0.488, 0.488, 0.417, 0.417, 0.417, 0.625, 0.625, 0.417], y = [0.976, 0.976, 0.834, 0.919, 0.967, 0.995, 1.0, 0.991, 0.948, 0.801, 0.829, 0.829, 0.815, 0.791, 0.744, 0.659, 0.564, 0.0, 0.0, 0.972, 0.976, 0.796, 0.796, 0.976]), - "s" => (x = [0.319, 0.39, 0.396, 0.41, 0.438, 0.465, 0.494, 0.533, 0.556, 0.575, 0.592, 0.602, 0.602, 0.596, 0.581, 0.565, 0.448, 0.4, 0.377, 0.356, 0.34, 0.331, 0.331, 0.34, 0.354, 0.39, 0.431, 0.467, 0.533, 0.581, 0.606, 0.623, 0.638, 0.652, 0.658, 0.658, 0.654, 0.59, 0.581, 0.562, 0.546, 0.517, 0.469, 0.427, 0.406, 0.4, 0.4, 0.408, 0.421, 0.435, 0.583, 0.627, 0.652, 0.669, 0.677, 0.675, 0.667, 0.642, 0.612, 0.581, 0.55, 0.49, 0.429, 0.385, 0.365, 0.35, 0.331, 0.321, 0.319, 0.66, 0.66, 0.319], y = [0.306, 0.329, 0.273, 0.213, 0.162, 0.139, 0.13, 0.134, 0.148, 0.171, 0.208, 0.255, 0.315, 0.343, 0.375, 0.394, 0.463, 0.5, 0.528, 0.569, 0.63, 0.704, 0.75, 0.824, 0.88, 0.949, 0.986, 1.0, 0.995, 0.968, 0.94, 0.912, 0.875, 0.81, 0.759, 0.736, 0.731, 0.713, 0.778, 0.829, 0.852, 0.87, 0.87, 0.843, 0.796, 0.755, 0.731, 0.69, 0.662, 0.644, 0.551, 0.509, 0.463, 0.403, 0.301, 0.255, 0.194, 0.111, 0.06, 0.028, 0.009, 0.0, 0.019, 0.06, 0.097, 0.134, 0.208, 0.301, 0.306, 0.736, 0.736, 0.306]), - "t" => (x = [0.4, 0.45, 0.454, 0.454, 0.521, 0.525, 0.525, 0.598, 0.598, 0.525, 0.525, 0.533, 0.548, 0.598, 0.608, 0.608, 0.585, 0.523, 0.506, 0.483, 0.462, 0.454, 0.454, 0.4, 0.4, 0.4], y = [0.743, 0.743, 0.75, 0.929, 1.0, 1.0, 0.746, 0.743, 0.65, 0.646, 0.168, 0.132, 0.114, 0.114, 0.021, 0.007, 0.0, 0.0, 0.007, 0.029, 0.071, 0.146, 0.646, 0.65, 0.739, 0.743]), - "u" => (x = [0.323, 0.394, 0.396, 0.408, 0.419, 0.435, 0.465, 0.502, 0.531, 0.556, 0.581, 0.594, 0.6, 0.6, 0.671, 0.671, 0.606, 0.604, 0.579, 0.554, 0.523, 0.475, 0.429, 0.402, 0.381, 0.356, 0.333, 0.323, 0.323, 0.323], y = [1.0, 1.0, 0.294, 0.223, 0.194, 0.166, 0.142, 0.142, 0.161, 0.194, 0.256, 0.327, 0.464, 1.0, 1.0, 0.024, 0.024, 0.161, 0.095, 0.052, 0.019, 0.0, 0.009, 0.028, 0.052, 0.095, 0.18, 0.284, 0.995, 1.0]), - "v" => (x = [0.304, 0.381, 0.471, 0.5, 0.504, 0.523, 0.623, 0.698, 0.535, 0.467, 0.306, 0.304], y = [1.0, 1.0, 0.417, 0.204, 0.209, 0.354, 0.995, 1.0, 0.0, 0.005, 0.995, 1.0]), - "w" => (x = [0.202, 0.277, 0.371, 0.375, 0.394, 0.462, 0.538, 0.617, 0.621, 0.625, 0.723, 0.792, 0.658, 0.583, 0.521, 0.498, 0.492, 0.41, 0.333, 0.204, 0.202], y = [1.0, 1.0, 0.209, 0.223, 0.413, 1.0, 1.0, 0.277, 0.243, 0.233, 1.0, 1.0, 0.0, 0.0, 0.544, 0.772, 0.738, 0.0, 0.0, 0.995, 1.0]), - "x" => (x = [0.3, 0.388, 0.5, 0.506, 0.615, 0.702, 0.3, 0.698, 0.542, 0.681, 0.688, 0.604, 0.498, 0.402, 0.312, 0.456, 0.456, 0.304, 0.698, 0.3, 0.69, 0.69, 0.3], y = [0.0, 0.0, 0.393, 0.383, 0.0, 0.0, 0.0, 0.01, 0.529, 0.971, 1.0, 1.0, 0.655, 1.0, 1.0, 0.529, 0.515, 0.01, 0.01, 0.0, 1.0, 1.0, 0.0]), - "y" => (x = [0.308, 0.385, 0.485, 0.506, 0.54, 0.629, 0.7, 0.51, 0.483, 0.458, 0.433, 0.408, 0.375, 0.346, 0.338, 0.367, 0.392, 0.419, 0.444, 0.471, 0.31, 0.308], y = [1.0, 1.0, 0.538, 0.424, 0.6, 1.0, 1.0, 0.162, 0.079, 0.034, 0.01, 0.0, 0.0, 0.014, 0.124, 0.114, 0.114, 0.128, 0.169, 0.29, 0.993, 1.0]), - "z" => (x = [0.31, 0.312, 0.583, 0.327, 0.327, 0.677, 0.677, 0.448, 0.4, 0.69, 0.69, 0.31, 0.31], y = [0.136, 0.141, 0.869, 0.869, 1.0, 1.0, 0.888, 0.262, 0.141, 0.141, 0.0, 0.0, 0.136]), - "0" => (x = [0.304, 0.306, 0.308, 0.315, 0.335, 0.371, 0.406, 0.433, 0.467, 0.525, 0.575, 0.602, 0.619, 0.642, 0.66, 0.681, 0.69, 0.69, 0.683, 0.665, 0.635, 0.606, 0.581, 0.55, 0.515, 0.481, 0.438, 0.408, 0.39, 0.36, 0.333, 0.325, 0.312, 0.304, 0.304, 0.377, 0.377, 0.381, 0.39, 0.406, 0.44, 0.473, 0.521, 0.554, 0.577, 0.594, 0.606, 0.615, 0.615, 0.604, 0.598, 0.585, 0.56, 0.523, 0.477, 0.442, 0.415, 0.396, 0.383, 0.379, 0.377, 0.304], y = [0.595, 0.598, 0.663, 0.722, 0.828, 0.918, 0.966, 0.986, 1.0, 1.0, 0.976, 0.948, 0.924, 0.876, 0.818, 0.708, 0.595, 0.412, 0.316, 0.199, 0.11, 0.058, 0.031, 0.01, 0.0, 0.0, 0.014, 0.034, 0.055, 0.103, 0.182, 0.216, 0.299, 0.412, 0.595, 0.588, 0.409, 0.333, 0.258, 0.189, 0.127, 0.1, 0.1, 0.127, 0.165, 0.21, 0.275, 0.368, 0.636, 0.742, 0.777, 0.818, 0.866, 0.9, 0.904, 0.88, 0.835, 0.773, 0.687, 0.591, 0.588, 0.595]), - "1" => (x = [0.36, 0.362, 0.41, 0.469, 0.508, 0.531, 0.577, 0.577, 0.506, 0.506, 0.504, 0.473, 0.438, 0.362, 0.36], y = [0.749, 0.753, 0.794, 0.868, 0.937, 0.997, 1.0, 0.0, 0.0, 0.777, 0.78, 0.735, 0.697, 0.634, 0.749]), - "2" => (x = [0.294, 0.296, 0.296, 0.306, 0.319, 0.342, 0.383, 0.496, 0.556, 0.594, 0.606, 0.612, 0.61, 0.594, 0.562, 0.521, 0.465, 0.442, 0.425, 0.404, 0.39, 0.383, 0.381, 0.308, 0.312, 0.323, 0.346, 0.371, 0.41, 0.442, 0.469, 0.546, 0.583, 0.612, 0.65, 0.665, 0.675, 0.683, 0.685, 0.675, 0.656, 0.625, 0.569, 0.435, 0.394, 0.685, 0.685, 0.294, 0.294], y = [0.024, 0.028, 0.049, 0.101, 0.143, 0.199, 0.276, 0.437, 0.535, 0.619, 0.664, 0.71, 0.769, 0.829, 0.878, 0.902, 0.899, 0.885, 0.867, 0.832, 0.79, 0.755, 0.703, 0.717, 0.773, 0.829, 0.895, 0.937, 0.976, 0.993, 1.0, 0.997, 0.979, 0.955, 0.899, 0.864, 0.829, 0.78, 0.696, 0.622, 0.559, 0.49, 0.395, 0.203, 0.119, 0.115, 0.0, 0.0, 0.024]), - "3" => (x = [0.304, 0.375, 0.388, 0.408, 0.435, 0.452, 0.479, 0.521, 0.56, 0.592, 0.608, 0.617, 0.617, 0.612, 0.6, 0.571, 0.554, 0.521, 0.477, 0.448, 0.456, 0.496, 0.531, 0.558, 0.581, 0.59, 0.59, 0.585, 0.573, 0.554, 0.529, 0.494, 0.469, 0.44, 0.408, 0.39, 0.383, 0.312, 0.312, 0.325, 0.35, 0.375, 0.404, 0.431, 0.46, 0.517, 0.565, 0.61, 0.631, 0.644, 0.652, 0.662, 0.662, 0.658, 0.648, 0.635, 0.617, 0.583, 0.629, 0.662, 0.679, 0.692, 0.692, 0.685, 0.669, 0.654, 0.623, 0.598, 0.552, 0.515, 0.471, 0.435, 0.406, 0.375, 0.346, 0.329, 0.308, 0.304, 0.304], y = [0.275, 0.289, 0.216, 0.158, 0.12, 0.107, 0.096, 0.1, 0.127, 0.175, 0.223, 0.278, 0.33, 0.364, 0.409, 0.46, 0.478, 0.495, 0.495, 0.485, 0.584, 0.588, 0.605, 0.632, 0.677, 0.725, 0.773, 0.804, 0.842, 0.873, 0.897, 0.907, 0.904, 0.887, 0.842, 0.784, 0.729, 0.749, 0.766, 0.832, 0.9, 0.942, 0.973, 0.99, 1.0, 1.0, 0.979, 0.935, 0.9, 0.869, 0.842, 0.78, 0.715, 0.687, 0.646, 0.615, 0.584, 0.55, 0.515, 0.467, 0.423, 0.347, 0.268, 0.216, 0.155, 0.12, 0.069, 0.041, 0.01, 0.0, 0.0, 0.01, 0.027, 0.058, 0.103, 0.141, 0.223, 0.271, 0.275]), - "4" => (x = [0.279, 0.281, 0.548, 0.608, 0.608, 0.69, 0.69, 0.612, 0.608, 0.608, 0.538, 0.535, 0.279, 0.279, 0.35, 0.535, 0.535, 0.352, 0.35, 0.279], y = [0.351, 0.354, 0.996, 1.0, 0.354, 0.351, 0.242, 0.242, 0.235, 0.0, 0.0, 0.242, 0.242, 0.351, 0.354, 0.351, 0.804, 0.358, 0.354, 0.351]), - "5" => (x = [0.304, 0.379, 0.381, 0.396, 0.427, 0.46, 0.479, 0.508, 0.535, 0.571, 0.6, 0.61, 0.619, 0.621, 0.617, 0.608, 0.594, 0.575, 0.544, 0.506, 0.458, 0.44, 0.415, 0.4, 0.383, 0.317, 0.373, 0.669, 0.669, 0.433, 0.429, 0.4, 0.404, 0.419, 0.45, 0.498, 0.546, 0.583, 0.631, 0.667, 0.685, 0.696, 0.696, 0.692, 0.679, 0.665, 0.648, 0.612, 0.585, 0.542, 0.51, 0.456, 0.41, 0.385, 0.362, 0.329, 0.31, 0.304, 0.304], y = [0.276, 0.287, 0.255, 0.192, 0.133, 0.105, 0.098, 0.098, 0.108, 0.143, 0.199, 0.234, 0.283, 0.378, 0.42, 0.458, 0.497, 0.528, 0.559, 0.573, 0.566, 0.556, 0.531, 0.51, 0.476, 0.49, 1.0, 1.0, 0.888, 0.888, 0.881, 0.622, 0.619, 0.636, 0.661, 0.678, 0.675, 0.657, 0.608, 0.542, 0.479, 0.402, 0.304, 0.266, 0.199, 0.154, 0.115, 0.059, 0.031, 0.007, 0.0, 0.003, 0.024, 0.045, 0.073, 0.14, 0.21, 0.273, 0.276]), - "6" => (x = [0.3, 0.302, 0.302, 0.308, 0.327, 0.346, 0.358, 0.39, 0.435, 0.483, 0.542, 0.565, 0.608, 0.623, 0.648, 0.662, 0.675, 0.681, 0.61, 0.604, 0.592, 0.573, 0.55, 0.529, 0.506, 0.488, 0.462, 0.433, 0.415, 0.39, 0.375, 0.371, 0.375, 0.388, 0.404, 0.438, 0.477, 0.508, 0.546, 0.588, 0.619, 0.644, 0.667, 0.685, 0.692, 0.692, 0.683, 0.671, 0.654, 0.629, 0.602, 0.581, 0.558, 0.519, 0.473, 0.444, 0.406, 0.388, 0.365, 0.34, 0.317, 0.302, 0.3, 0.4, 0.39, 0.383, 0.383, 0.398, 0.417, 0.446, 0.473, 0.492, 0.529, 0.558, 0.573, 0.602, 0.612, 0.619, 0.619, 0.615, 0.608, 0.594, 0.569, 0.542, 0.527, 0.494, 0.462, 0.442, 0.429, 0.408, 0.402, 0.4, 0.3], y = [0.54, 0.543, 0.588, 0.667, 0.784, 0.849, 0.88, 0.935, 0.979, 1.0, 1.0, 0.993, 0.962, 0.945, 0.904, 0.866, 0.814, 0.759, 0.753, 0.79, 0.835, 0.869, 0.893, 0.904, 0.907, 0.904, 0.89, 0.856, 0.821, 0.746, 0.646, 0.526, 0.526, 0.557, 0.584, 0.622, 0.646, 0.653, 0.649, 0.629, 0.598, 0.56, 0.509, 0.433, 0.375, 0.299, 0.227, 0.172, 0.124, 0.076, 0.041, 0.024, 0.01, 0.0, 0.003, 0.014, 0.041, 0.062, 0.096, 0.151, 0.241, 0.371, 0.54, 0.454, 0.419, 0.378, 0.292, 0.213, 0.165, 0.124, 0.103, 0.096, 0.1, 0.12, 0.137, 0.196, 0.237, 0.289, 0.364, 0.402, 0.433, 0.474, 0.515, 0.54, 0.546, 0.55, 0.54, 0.522, 0.509, 0.474, 0.457, 0.454, 0.54]), - "7" => (x = [0.308, 0.692, 0.692, 0.65, 0.606, 0.558, 0.519, 0.494, 0.481, 0.469, 0.465, 0.392, 0.398, 0.417, 0.446, 0.494, 0.556, 0.6, 0.308, 0.308, 0.308], y = [1.0, 1.0, 0.901, 0.819, 0.709, 0.564, 0.411, 0.287, 0.206, 0.082, 0.0, 0.0, 0.128, 0.277, 0.433, 0.613, 0.787, 0.879, 0.883, 0.996, 1.0]), - "8" => (x = [0.302, 0.304, 0.304, 0.31, 0.331, 0.365, 0.415, 0.388, 0.367, 0.346, 0.331, 0.327, 0.327, 0.338, 0.35, 0.385, 0.419, 0.444, 0.467, 0.527, 0.575, 0.61, 0.64, 0.66, 0.669, 0.667, 0.65, 0.619, 0.583, 0.631, 0.66, 0.679, 0.692, 0.694, 0.681, 0.662, 0.629, 0.583, 0.548, 0.519, 0.46, 0.408, 0.388, 0.365, 0.342, 0.327, 0.315, 0.306, 0.302, 0.375, 0.377, 0.39, 0.402, 0.421, 0.446, 0.483, 0.515, 0.548, 0.581, 0.6, 0.612, 0.621, 0.621, 0.617, 0.604, 0.594, 0.562, 0.546, 0.512, 0.469, 0.435, 0.398, 0.388, 0.377, 0.377, 0.375, 0.302, 0.452, 0.479, 0.517, 0.533, 0.554, 0.577, 0.594, 0.596, 0.59, 0.569, 0.554, 0.533, 0.494, 0.467, 0.444, 0.417, 0.406, 0.4, 0.4, 0.412, 0.435, 0.45, 0.452, 0.302], y = [0.323, 0.326, 0.351, 0.395, 0.46, 0.512, 0.55, 0.57, 0.595, 0.632, 0.684, 0.715, 0.784, 0.849, 0.887, 0.948, 0.979, 0.993, 1.0, 1.0, 0.979, 0.945, 0.897, 0.835, 0.777, 0.698, 0.632, 0.581, 0.55, 0.509, 0.464, 0.416, 0.351, 0.271, 0.182, 0.127, 0.069, 0.024, 0.007, 0.0, 0.003, 0.027, 0.045, 0.072, 0.11, 0.144, 0.186, 0.23, 0.323, 0.309, 0.261, 0.199, 0.168, 0.137, 0.113, 0.096, 0.096, 0.11, 0.144, 0.179, 0.216, 0.271, 0.32, 0.354, 0.402, 0.426, 0.471, 0.485, 0.498, 0.495, 0.474, 0.419, 0.392, 0.34, 0.313, 0.309, 0.323, 0.608, 0.595, 0.595, 0.601, 0.619, 0.653, 0.708, 0.77, 0.808, 0.859, 0.88, 0.897, 0.907, 0.9, 0.883, 0.842, 0.814, 0.78, 0.722, 0.667, 0.625, 0.612, 0.608, 0.323]), - "9" => (x = [0.304, 0.306, 0.308, 0.319, 0.331, 0.348, 0.388, 0.433, 0.462, 0.519, 0.546, 0.596, 0.64, 0.654, 0.671, 0.688, 0.694, 0.692, 0.681, 0.665, 0.638, 0.602, 0.565, 0.535, 0.498, 0.462, 0.427, 0.388, 0.348, 0.329, 0.321, 0.315, 0.321, 0.383, 0.392, 0.402, 0.419, 0.45, 0.469, 0.498, 0.529, 0.556, 0.585, 0.608, 0.621, 0.623, 0.621, 0.61, 0.577, 0.544, 0.519, 0.492, 0.462, 0.429, 0.398, 0.371, 0.344, 0.321, 0.31, 0.304, 0.304, 0.377, 0.377, 0.385, 0.404, 0.431, 0.45, 0.471, 0.51, 0.538, 0.565, 0.59, 0.604, 0.612, 0.615, 0.61, 0.6, 0.583, 0.558, 0.54, 0.517, 0.481, 0.442, 0.425, 0.402, 0.388, 0.379, 0.379, 0.377, 0.304], y = [0.722, 0.725, 0.763, 0.818, 0.859, 0.897, 0.955, 0.99, 1.0, 1.0, 0.99, 0.952, 0.887, 0.852, 0.797, 0.694, 0.584, 0.412, 0.296, 0.206, 0.127, 0.065, 0.027, 0.01, 0.0, 0.0, 0.01, 0.038, 0.096, 0.148, 0.186, 0.241, 0.244, 0.251, 0.196, 0.162, 0.131, 0.103, 0.096, 0.096, 0.11, 0.137, 0.192, 0.282, 0.378, 0.474, 0.478, 0.454, 0.402, 0.371, 0.357, 0.351, 0.351, 0.361, 0.381, 0.412, 0.457, 0.519, 0.567, 0.622, 0.722, 0.704, 0.632, 0.577, 0.526, 0.485, 0.467, 0.457, 0.454, 0.464, 0.488, 0.529, 0.574, 0.622, 0.701, 0.749, 0.797, 0.838, 0.876, 0.893, 0.904, 0.904, 0.88, 0.859, 0.818, 0.773, 0.729, 0.708, 0.704, 0.722]), - "*" => (x = [0.749, 0.749, 0.554, 0.646, 0.603, 0.5, 0.397, 0.354, 0.446, 0.251, 0.251, 0.446, 0.354, 0.397, 0.5, 0.603, 0.646, 0.554, 0.749, 0.749], y = [0.445, 0.555, 0.569, 0.946, 1.001, 0.638, 1.001, 0.946, 0.569, 0.555, 0.445, 0.431, 0.054, -0.001, 0.362, -0.001, 0.054, 0.431, 0.445, 0.555]), -) pfm1 = [0.02 1.0 0.98 0.0 0.0 0.0 0.98 0.0 0.18 1.0 0.98 0.0 0.02 0.19 0.0 0.96 0.01 0.89 0.03 0.0 @@ -84,176 +19,13 @@ pfm3 = [0.02 1.0 0.98 0.0 0.0 0.0 0.98 0.0 0.18 1.0 pfms = [pfm1, pfm2, pfm3] -function get_arrow_basic(;line_scale=1.0, right=true, x_offset=0.0) - #= - the horizontal line - -------- - -------- - part of the arrow (before the arrow head) - - x_offset: - positive: shift to the right - negative: shift to the left - =# - arrow_line_width = line_scale * 4.0 - x = [0.0, arrow_line_width, arrow_line_width, line_scale * 7.5, arrow_line_width, arrow_line_width, 0.0] .+ x_offset - y = [1.05, 1.05, 1.15, 1.0, 0.85, 0.95, 0.95 ] - if right shape(x,y) - else - shape(-x, y) - end -end - -mutable struct shape - x::Vector{Float64} - y::Vector{Float64} -end - -#### helpers ##### -get_right_most_point(_shape_::shape) = maximum(_shape_.x) -get_right_most_point(coords::Vector{shape}) = maximum(get_right_most_point.(coords)) -get_left_most_point(_shape_::shape) = minimum(_shape_.x) -get_left_most_point(coords::Vector{shape}) = minimum(get_left_most_point.(coords)) - -get_top_most_point(_shape_::shape) = maximum(_shape_.y) -get_top_most_point(coords::Vector{shape}) = maximum(get_top_most_point.(coords)) -get_bottom_most_point(_shape_::shape) = minimum(_shape_.y) -get_bottom_most_point(coords::Vector{shape}) = minimum(get_bottom_most_point.(coords)) - -x_substract!(_shape_::shape, a) = begin _shape_.x .= _shape_.x .- a end -x_substract!(coords::Vector{shape}, a) = x_substract!.(coords, a) -x_add!(_shape_::shape, a) = begin _shape_.x .= _shape_.x .+ a end -x_add!(coords::Vector{shape}, a) = x_add!.(coords, a) -x_divide!(_shape_::shape, a) = begin - @assert a != 0.0 "a cannot be zero" - _shape_.x .= _shape_.x ./ a -end -x_divide!(coords::Vector{shape}, a) = x_divide!.(coords, a) -x_multiply!(_shape_::shape, a) = begin _shape_.x .= _shape_.x .* a end -x_multiply!(coords::Vector{shape}, a) = x_multiply!.(coords, a) - -get_width(coords::Vector{shape}) = get_right_most_point(coords) - get_left_most_point(coords) -get_height(coords::Vector{shape}) = get_top_most_point(coords) - get_bottom_most_point(coords) - -y_substract!(_shape_::shape, a) = begin _shape_.y .= _shape_.y .- a end -y_substract!(coords::Vector{shape}, a) = y_substract!.(coords, a) -y_add!(_shape_::shape, a) = begin _shape_.y .= _shape_.y .+ a end -y_add!(coords::Vector{shape}, a) = y_add!.(coords, a) -y_divide!(_shape_::shape, a) = begin - @assert a != 0.0 "a cannot be zero" - _shape_.y .= _shape_.y ./ a -end -y_divide!(coords::Vector{shape}, a) = y_divide!.(coords, a) -y_multiply!(_shape_::shape, a) = begin _shape_.y .= _shape_.y .* a end -y_multiply!(coords::Vector{shape}, a) = y_multiply!.(coords, a) - -shift_right(_shape_::shape, a) = shape(_shape_.x .+ a, _shape_.y) -shift_right(_shapes_::Vector{shape}, a) = shift_right.(_shapes_, a) -shift_left(_shape_::shape, a) = shape(_shape_.x .- a, _shape_.y) -shift_up(_shape_::shape, a) = shape(_shape_.x, _shape_.y .+ a) -shift_down(_shape_::shape, a) = shape(_shape_.x, _shape_.y .- a) - -Base.copy(_shape_::shape) = shape(copy(_shape_.x), copy(_shape_.y)) - -#= -minmax normalize y and returns the -original top_most_pt and bottom_most_pt of the shape -=# -min_max_normalize_y!(coords::Vector{shape}) = begin - top_most_pt = get_top_most_point(coords) - bottom_most_pt = get_bottom_most_point(coords) - @assert 0 < top_most_pt ≤ 2 "top_most_pt should be in the range of (0,2)" - @assert 0 ≤ bottom_most_pt < 2 "bottom_most_pt should be in the range of (0,2)" - @assert top_most_pt > bottom_most_pt "top_most_pt should be greater than bottom_most_pt" - y_substract!(coords, bottom_most_pt) - y_divide!(coords, top_most_pt - bottom_most_pt) -end - -min_max_normalize_x!(coords::Vector{shape}) = begin - right_most_pt = get_right_most_point(coords) - left_most_pt = get_left_most_point(coords) - @assert right_most_pt > left_most_pt "right_most_pt should be greater than left_most_pt" - x_substract!(coords, left_most_pt) - x_divide!(coords, right_most_pt - left_most_pt) -end - -function scale_height!(coords::Vector{shape}, scaled_height) - min_max_normalize_y!(coords) - y_multiply!(coords, scaled_height) # scale the height - #= translate the shape so that it keeps the - same proportional relation to y = 0 and y = 2. =# - # y_add!(coords, 1.0 - (scaled_height / 2)) -end - -function scale_width!(coords::Vector{shape}, scaled_width) - min_max_normalize_x!(coords) - x_multiply!(coords, scaled_width) -end - -#= - scale_height_by_proportion!(coords::Vector{shape}, proportion; in_range=(0.0, 2.0)) - scale the height of the shape by the proportion - proportion: the proportion to scale the height - in_range: the range of the height after scaling -=# -function scale_height_by_proportion!(coords::Vector{shape}, proportion) - @assert 0.0 < proportion < 1.0 "proportion should be in the range of (0,1)" - top_most_pt = get_top_most_point(coords) - bottom_most_pt = get_bottom_most_point(coords) - orig_height = top_most_pt - bottom_most_pt - - right_most_pt = get_right_most_point(coords) - left_most_pt = get_left_most_point(coords) - orig_width = right_most_pt - left_most_pt - - changed_height = orig_height * proportion - changed_width = orig_width * proportion - scale_width!(coords, changed_width) - scale_height!(coords, changed_height) -end -function two_adjusted_glyphs(ALPHABET_GLYPHS_i; stretch_x=8.0) - x = stretch_x .* (ALPHABET_GLYPHS_i.x .- minimum(ALPHABET_GLYPHS_i.x)) - y = (ALPHABET_GLYPHS_i.y .- minimum(ALPHABET_GLYPHS_i.y)) - return shape(x, ALPHABET_GLYPHS_i.y .+ 0.5) -end #= by =# -function make_in_between_basic(num_bt::Int; - word_increment=4.0, - arrow_increment=5.0, - arrow_line_scale=1.25 - ) - GLYPHS_2_adjusted = merge( - Dict("$i" => two_adjusted_glyphs(ALPHABET_GLYPHS["$i"]) for i = 0:9), # 0-9 - Dict("b"=> two_adjusted_glyphs(ALPHABET_GLYPHS["b"]), - "p"=> two_adjusted_glyphs(ALPHABET_GLYPHS["p"])) )# b and p - - in_bt_str = vcat(split("$num_bt", ""), ["b", "p"]) - coords = shape[]; - k = 0.0 - for i in in_bt_str - g = copy(GLYPHS_2_adjusted["$i"]) - push!(coords, shift_right(g, k)) - k += word_increment - end - - push!(coords, shift_right( - get_arrow_basic(;line_scale=arrow_line_scale), get_right_most_point(coords) + arrow_increment)) - push!(coords, shift_left( - get_arrow_basic(;line_scale=arrow_line_scale, right=false), arrow_increment)) - - # return coords - coords = shift_right.(coords, get_left_most_point(coords) * -1.0) # left aligned to the origin - bottom_most_pt = get_bottom_most_point(coords) - y_substract!(coords, bottom_most_pt) - return coords -end - function plt2chk(coords; xlim=(-60,60), ylim=(-0,2), arr_ratio=0.5) _coords_ = deepcopy(coords) total_width = xlim[2] - xlim[1] @@ -318,22 +90,22 @@ end coords = make_in_between_basic(11; arrow_line_scale=1.25) # get_height(coords) -scale_width!(coords, 45.0) +# scale_width!(coords, 45.0) -scale_height!(coords, 2.0) -scale_height!(coords, 2.0) -scale_width!(coords, 2.0) +# scale_height!(coords, 2.0) +# scale_height!(coords, 2.0) +# scale_width!(coords, 2.0) -y_substract!.(coords, 0.5) +# y_substract!.(coords, 0.5) -coords[1].y[1] = 22 -coords[1].y -coords[2].y -y_substract!(coords, 0.5) +# coords[1].y[1] = 22 +# coords[1].y +# coords[2].y +# y_substract!(coords, 0.5) -min_max_normalize_y!(coords) +# min_max_normalize_y!(coords) -plt2chk(coords) +# plt2chk(coords) ###################################### @@ -342,6 +114,17 @@ function get_height_increments(scaled_heights) vcat(reverse(cumsum(reverse(scaled_heights)))[2:end], 0) end +function get_center_point_x(vec_shape::Vector{shape}) + right_most_pt = get_right_most_point(vec_shape) + left_most_pt = get_left_most_point(vec_shape) + return (right_most_pt + left_most_pt) / 2 +end + +function get_center_point_y(vec_shape::Vector{shape}) + top_most_pt = get_top_most_point(vec_shape) + bottom_most_pt = get_bottom_most_point(vec_shape) + return (top_most_pt + bottom_most_pt) / 2 +end #= num_col_each_col!(coords_mat::Matrix{Vector{shape}}, given_len) @@ -351,7 +134,6 @@ Note that this function does the following: 1. scale the width of each arrow-shapes 2. returns the number of columns for each "column" =# - function num_col_each_col!(coords_mat::Matrix{Vector{shape}}, given_len) widths = get_width.(coords_mat) # get the maximum length of each column (set of arrow-shapes) @@ -364,27 +146,7 @@ function num_col_each_col!(coords_mat::Matrix{Vector{shape}}, given_len) return num_cols_each end -ds_mat = [12 6; 32 6] -weights = [0.7, 0.3] - -coords_mat = map(x->make_in_between_basic(x; arrow_line_scale=log(x)), ds_mat) - -# shift heights -scaled_heights = weights .* 2.0 -scale_height!.(coords_mat, scaled_heights) - -# shift the arrow-shapes upwards -height_increments = get_height_increments(scaled_heights) -for i in axes(coords_mat, 1) - for j in axes(coords_mat, 2) - coords_mat[i,j] = shift_up.(coords_mat[i,j], height_increments[i]) - end -end -# scale the width of each arrow-shapes and -# get the number of columns for each "column" -num_cols_each = num_col_each_col!(coords_mat, 10) - -function obtain_pfm_regions_and_dstarts(pfms, num_cols_each) +function obtain_pfm_regions_and_dstarts(pfms, num_cols_each; d_ϵ = 0.5) pfm_num_cols_each = size.(pfms,2) pfm_starts = Int[] d_starts = Int[] @@ -397,19 +159,77 @@ function obtain_pfm_regions_and_dstarts(pfms, num_cols_each) offset += num_cols_each[ind] end end - return pfm_starts, d_starts + return pfm_starts, d_starts .+ d_ϵ end -pfm_starts, d_starts = obtain_pfm_regions_and_dstarts(pfms, num_cols_each) -d_starts .+= 1 -# shift right the arrow-shapes -for (ind, right_inc) in enumerate(d_starts) - coords_mat[:,ind] .= shift_right.((coords_mat[:,ind]), right_inc) + +ds_mats = [12 6; 32 6] +weights = [0.7, 0.3] + +#= + +dist_cols: + +=# + +function make_arrow_shapes(ds_mats, weights, dist_cols::Int, pfms; + arrow_shape_scale_ratio=0.8, height_top=2.0) + coords_mat = map(x->make_in_between_basic(x; arrow_line_scale=1.0), ds_mats) + # scale the width of each arrow-shapes and + # get the number of columns for each "column" + num_cols_each = num_col_each_col!(coords_mat, dist_cols) + pfm_starts, d_starts = obtain_pfm_regions_and_dstarts(pfms, num_cols_each) + + # shift heights + scaled_heights = weights .* height_top + scale_height!.(coords_mat, scaled_heights) + + # centering + center_pts_x_orig = get_center_point_x.(coords_mat) + center_pts_y_orig = get_center_point_y.(coords_mat) + max_center_x = maximum(center_pts_x_orig, dims=1) + scale_width_height_by_proportion!.(coords_mat, arrow_shape_scale_ratio) + center_pts_x = get_center_point_x.(coords_mat) + center_pts_y = get_center_point_y.(coords_mat) + + right_shift_pts = max_center_x .- center_pts_x + up_shift_pts = center_pts_y_orig .- center_pts_y + coords_mat = shift_right.(coords_mat, right_shift_pts) + coords_mat = shift_up.(coords_mat, up_shift_pts) + + # shift the arrow-shapes upwards + height_increments = get_height_increments(scaled_heights) + for i in axes(coords_mat, 1) + for j in axes(coords_mat, 2) + coords_mat[i,j] = shift_up.(coords_mat[i,j], height_increments[i]) + end + end + + # shift right the arrow-shapes + for (ind, right_inc) in enumerate(d_starts) + coords_mat[:,ind] .= shift_right.((coords_mat[:,ind]), right_inc) + end + + total_pfm_cols = size.(pfms,2) |> sum + total_d_cols = num_cols_each |> sum + return coords_mat, pfm_starts, total_pfm_cols, total_d_cols end -total_pfm_cols = size.(pfms,2) |> sum -total_d_cols = num_cols_each |> sum + +ds_mats = [12 6; 32 6; 35 14] +weights = [0.5, 0.2, 0.3] + +ds_mats = [12 6; 32 6; 35 14; 356 4] +weights = [0.3, 0.2, 0.3, 0.2] + +inds_sorted = sortperm(weights) +weights = weights[inds_sorted] +ds_mats = @view ds_mats[inds_sorted, :] + +coords_mat, pfm_starts, total_pfm_cols, total_d_cols = + make_arrow_shapes(ds_mats, weights, 15, pfms; + arrow_shape_scale_ratio=0.7, height_top=1.7) p = nothinglogo(total_pfm_cols + total_d_cols); @@ -421,7 +241,6 @@ for (ind, pfm) in enumerate(pfms) logo_x_offset=logo_x_offset) end - for col in eachcol(coords_mat) arrowplot!(p, col) end @@ -429,13 +248,6 @@ end p -for r in pfm_regions - logo_x_offset = r.start-1 - logoplot!(p, (@view pfm[:, r]), background; - dpi=dpi, - setup_off=true, - logo_x_offset=logo_x_offset) -end