From b1381d39bc5d2b7d80c8b8260197b56029dab35e Mon Sep 17 00:00:00 2001
From: Lisa Biermann
Date: Mon, 4 Nov 2024 14:20:55 +0100
Subject: [PATCH 01/10] add mass over temperature ratio check output
---
.../transition_tracer/transition_tracer.h | 13 +++-
src/transition_tracer/transition_tracer.cpp | 67 ++++++++++++++++++-
2 files changed, 77 insertions(+), 3 deletions(-)
diff --git a/include/BSMPT/transition_tracer/transition_tracer.h b/include/BSMPT/transition_tracer/transition_tracer.h
index 8ca1690a2..43cf73ff3 100644
--- a/include/BSMPT/transition_tracer/transition_tracer.h
+++ b/include/BSMPT/transition_tracer/transition_tracer.h
@@ -181,7 +181,6 @@ class TransitionTracer
/**
* @brief Store the list of bounce solutions
- *
*/
std::vector ListBounceSolution;
@@ -189,6 +188,16 @@ class TransitionTracer
* @brief output data storage
*/
output output_store;
+
+ /**
+ * @brief CheckMassRatio
+ * @param input
+ * @param vev
+ * @param temp
+ */
+ void CheckMassRatio(const user_input &input,
+ const std::vector &vec,
+ const double &temp) const;
};
-} // namespace BSMPT
\ No newline at end of file
+} // namespace BSMPT
diff --git a/src/transition_tracer/transition_tracer.cpp b/src/transition_tracer/transition_tracer.cpp
index 5041100cc..6e22e8c94 100644
--- a/src/transition_tracer/transition_tracer.cpp
+++ b/src/transition_tracer/transition_tracer.cpp
@@ -138,6 +138,9 @@ TransitionTracer::TransitionTracer(user_input &input)
new_transition_data.crit_false_vev =
pair.false_phase.Get(pair.crit_temp).point;
+ CheckMassRatio(
+ input, new_transition_data.crit_false_vev, pair.crit_temp);
+
BounceSolution bounce(input.modelPointer,
mintracer,
pair,
@@ -172,6 +175,10 @@ TransitionTracer::TransitionTracer(user_input &input)
.Get(new_transition_data.nucl_approx_temp.value_or(
EmptyValue))
.point;
+
+ CheckMassRatio(input,
+ new_transition_data.nucl_approx_false_vev,
+ bounce.GetNucleationTempApprox());
}
else
{
@@ -195,6 +202,9 @@ TransitionTracer::TransitionTracer(user_input &input)
pair.false_phase
.Get(new_transition_data.nucl_temp.value_or(EmptyValue))
.point;
+ CheckMassRatio(input,
+ new_transition_data.nucl_false_vev,
+ bounce.GetNucleationTemp());
}
else
{
@@ -218,6 +228,9 @@ TransitionTracer::TransitionTracer(user_input &input)
pair.false_phase
.Get(new_transition_data.perc_temp.value_or(EmptyValue))
.point;
+ CheckMassRatio(input,
+ new_transition_data.perc_false_vev,
+ bounce.GetPercolationTemp());
}
else
{
@@ -243,6 +256,9 @@ TransitionTracer::TransitionTracer(user_input &input)
.Get(
new_transition_data.compl_temp.value_or(EmptyValue))
.point;
+ CheckMassRatio(input,
+ new_transition_data.compl_false_vev,
+ bounce.GetCompletionTemp());
}
else
{
@@ -489,4 +505,53 @@ TransitionTracer::~TransitionTracer()
{
}
-} // namespace BSMPT
\ No newline at end of file
+void TransitionTracer::CheckMassRatio(const user_input &input,
+ const std::vector &vec,
+ const double &temp) const
+{
+ std::stringstream ss;
+ std::vector massOverTempSq, tmp;
+ massOverTempSq = input.modelPointer->HiggsMassesSquared(
+ input.modelPointer->MinimizeOrderVEV(vec), temp) /
+ std::pow(temp, 2);
+ tmp = input.modelPointer->GaugeMassesSquared(
+ input.modelPointer->MinimizeOrderVEV(vec), temp) /
+ std::pow(temp, 2);
+
+ massOverTempSq.insert(massOverTempSq.end(), tmp.begin(), tmp.end());
+
+ int color = 0;
+ for (auto el : massOverTempSq)
+ {
+ if (el > 0.25) // m/T > 0.5
+ {
+ color = 1;
+ if (el > 1) // m/T > 1.0
+ {
+ color = 2;
+ break;
+ }
+ }
+ }
+
+ if (color == 0)
+ {
+ ss << "\n\033[1;92mm^2(vev_false, T = " << std::to_string(temp)
+ << ") / T^2 = " << vec_to_string(massOverTempSq) << "\033[0m\n";
+ }
+ else if (color == 1)
+ {
+ ss << "\n\033[1;93mm^2(vev_false, T = " << std::to_string(temp)
+ << ") / T^2 = " << vec_to_string(massOverTempSq) << "\033[0m\n";
+ }
+ else
+ {
+ ss << "\n\033[1;91mm^2(vev_false, T = " << std::to_string(temp)
+ << ") / T^2 = " << vec_to_string(massOverTempSq) << "\033[0m\n";
+ }
+
+ Logger::Write(LoggingLevel::TransitionDetailed, ss.str());
+ return;
+}
+
+} // namespace BSMPT
From 19f92392ddc2b987e3b000aa4f43b7c213ad23c7 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jo=C3=A3o=20Viana?=
<57032457+vollous@users.noreply.github.com>
Date: Mon, 9 Dec 2024 20:05:58 +0000
Subject: [PATCH 02/10] Move negative bosons spline into the .cpp files (#182)
* Fix
* Fix windows
---
.../ThermalFunctions/NegativeBosonSpline.h | 692 +----------------
src/ThermalFunctions/NegativeBosonSpline.cpp | 693 +++++++++++++++++-
src/ThermalFunctions/ThermalFunctions.cpp | 9 -
3 files changed, 703 insertions(+), 691 deletions(-)
diff --git a/include/BSMPT/ThermalFunctions/NegativeBosonSpline.h b/include/BSMPT/ThermalFunctions/NegativeBosonSpline.h
index 98c750619..7f91864da 100644
--- a/include/BSMPT/ThermalFunctions/NegativeBosonSpline.h
+++ b/include/BSMPT/ThermalFunctions/NegativeBosonSpline.h
@@ -8,6 +8,9 @@
* @file
*/
+#define _USE_MATH_DEFINES
+#include
+#include
#include
#ifndef INCLUDE_BSMPT_THERMALFUNCTIONS_NEGATIVEBOSONSPLINE_H_
@@ -27,686 +30,13 @@ extern const double NegLinearInt[3001][2];
/**
* @brief NegLinearInt Transpose of NegLinearInt
*/
-const std::vector> NegLinearIntTransposed = {
- {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11,
- 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23,
- 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35,
- 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
- 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59,
- 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71,
- 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83,
- 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95,
- 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107,
- 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119,
- 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131,
- 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143,
- 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155,
- 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167,
- 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179,
- 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191,
- 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203,
- 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215,
- 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227,
- 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239,
- 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251,
- 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263,
- 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275,
- 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287,
- 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299,
- 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311,
- 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323,
- 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335,
- 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347,
- 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359,
- 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371,
- 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383,
- 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395,
- 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407,
- 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419,
- 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431,
- 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443,
- 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455,
- 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467,
- 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479,
- 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491,
- 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503,
- 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515,
- 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527,
- 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539,
- 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551,
- 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563,
- 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575,
- 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587,
- 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599,
- 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611,
- 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623,
- 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635,
- 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647,
- 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659,
- 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671,
- 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683,
- 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695,
- 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707,
- 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719,
- 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731,
- 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743,
- 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755,
- 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767,
- 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779,
- 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791,
- 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803,
- 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815,
- 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827,
- 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839,
- 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851,
- 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863,
- 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875,
- 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887,
- 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899,
- 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911,
- 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923,
- 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935,
- 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947,
- 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959,
- 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971,
- 972, 973, 974, 975, 976, 977, 978, 979, 980, 981, 982, 983,
- 984, 985, 986, 987, 988, 989, 990, 991, 992, 993, 994, 995,
- 996, 997, 998, 999, 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007,
- 1008, 1009, 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1017, 1018, 1019,
- 1020, 1021, 1022, 1023, 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031,
- 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039, 1040, 1041, 1042, 1043,
- 1044, 1045, 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055,
- 1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067,
- 1068, 1069, 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077, 1078, 1079,
- 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1088, 1089, 1090, 1091,
- 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1099, 1100, 1101, 1102, 1103,
- 1104, 1105, 1106, 1107, 1108, 1109, 1110, 1111, 1112, 1113, 1114, 1115,
- 1116, 1117, 1118, 1119, 1120, 1121, 1122, 1123, 1124, 1125, 1126, 1127,
- 1128, 1129, 1130, 1131, 1132, 1133, 1134, 1135, 1136, 1137, 1138, 1139,
- 1140, 1141, 1142, 1143, 1144, 1145, 1146, 1147, 1148, 1149, 1150, 1151,
- 1152, 1153, 1154, 1155, 1156, 1157, 1158, 1159, 1160, 1161, 1162, 1163,
- 1164, 1165, 1166, 1167, 1168, 1169, 1170, 1171, 1172, 1173, 1174, 1175,
- 1176, 1177, 1178, 1179, 1180, 1181, 1182, 1183, 1184, 1185, 1186, 1187,
- 1188, 1189, 1190, 1191, 1192, 1193, 1194, 1195, 1196, 1197, 1198, 1199,
- 1200, 1201, 1202, 1203, 1204, 1205, 1206, 1207, 1208, 1209, 1210, 1211,
- 1212, 1213, 1214, 1215, 1216, 1217, 1218, 1219, 1220, 1221, 1222, 1223,
- 1224, 1225, 1226, 1227, 1228, 1229, 1230, 1231, 1232, 1233, 1234, 1235,
- 1236, 1237, 1238, 1239, 1240, 1241, 1242, 1243, 1244, 1245, 1246, 1247,
- 1248, 1249, 1250, 1251, 1252, 1253, 1254, 1255, 1256, 1257, 1258, 1259,
- 1260, 1261, 1262, 1263, 1264, 1265, 1266, 1267, 1268, 1269, 1270, 1271,
- 1272, 1273, 1274, 1275, 1276, 1277, 1278, 1279, 1280, 1281, 1282, 1283,
- 1284, 1285, 1286, 1287, 1288, 1289, 1290, 1291, 1292, 1293, 1294, 1295,
- 1296, 1297, 1298, 1299, 1300, 1301, 1302, 1303, 1304, 1305, 1306, 1307,
- 1308, 1309, 1310, 1311, 1312, 1313, 1314, 1315, 1316, 1317, 1318, 1319,
- 1320, 1321, 1322, 1323, 1324, 1325, 1326, 1327, 1328, 1329, 1330, 1331,
- 1332, 1333, 1334, 1335, 1336, 1337, 1338, 1339, 1340, 1341, 1342, 1343,
- 1344, 1345, 1346, 1347, 1348, 1349, 1350, 1351, 1352, 1353, 1354, 1355,
- 1356, 1357, 1358, 1359, 1360, 1361, 1362, 1363, 1364, 1365, 1366, 1367,
- 1368, 1369, 1370, 1371, 1372, 1373, 1374, 1375, 1376, 1377, 1378, 1379,
- 1380, 1381, 1382, 1383, 1384, 1385, 1386, 1387, 1388, 1389, 1390, 1391,
- 1392, 1393, 1394, 1395, 1396, 1397, 1398, 1399, 1400, 1401, 1402, 1403,
- 1404, 1405, 1406, 1407, 1408, 1409, 1410, 1411, 1412, 1413, 1414, 1415,
- 1416, 1417, 1418, 1419, 1420, 1421, 1422, 1423, 1424, 1425, 1426, 1427,
- 1428, 1429, 1430, 1431, 1432, 1433, 1434, 1435, 1436, 1437, 1438, 1439,
- 1440, 1441, 1442, 1443, 1444, 1445, 1446, 1447, 1448, 1449, 1450, 1451,
- 1452, 1453, 1454, 1455, 1456, 1457, 1458, 1459, 1460, 1461, 1462, 1463,
- 1464, 1465, 1466, 1467, 1468, 1469, 1470, 1471, 1472, 1473, 1474, 1475,
- 1476, 1477, 1478, 1479, 1480, 1481, 1482, 1483, 1484, 1485, 1486, 1487,
- 1488, 1489, 1490, 1491, 1492, 1493, 1494, 1495, 1496, 1497, 1498, 1499,
- 1500, 1501, 1502, 1503, 1504, 1505, 1506, 1507, 1508, 1509, 1510, 1511,
- 1512, 1513, 1514, 1515, 1516, 1517, 1518, 1519, 1520, 1521, 1522, 1523,
- 1524, 1525, 1526, 1527, 1528, 1529, 1530, 1531, 1532, 1533, 1534, 1535,
- 1536, 1537, 1538, 1539, 1540, 1541, 1542, 1543, 1544, 1545, 1546, 1547,
- 1548, 1549, 1550, 1551, 1552, 1553, 1554, 1555, 1556, 1557, 1558, 1559,
- 1560, 1561, 1562, 1563, 1564, 1565, 1566, 1567, 1568, 1569, 1570, 1571,
- 1572, 1573, 1574, 1575, 1576, 1577, 1578, 1579, 1580, 1581, 1582, 1583,
- 1584, 1585, 1586, 1587, 1588, 1589, 1590, 1591, 1592, 1593, 1594, 1595,
- 1596, 1597, 1598, 1599, 1600, 1601, 1602, 1603, 1604, 1605, 1606, 1607,
- 1608, 1609, 1610, 1611, 1612, 1613, 1614, 1615, 1616, 1617, 1618, 1619,
- 1620, 1621, 1622, 1623, 1624, 1625, 1626, 1627, 1628, 1629, 1630, 1631,
- 1632, 1633, 1634, 1635, 1636, 1637, 1638, 1639, 1640, 1641, 1642, 1643,
- 1644, 1645, 1646, 1647, 1648, 1649, 1650, 1651, 1652, 1653, 1654, 1655,
- 1656, 1657, 1658, 1659, 1660, 1661, 1662, 1663, 1664, 1665, 1666, 1667,
- 1668, 1669, 1670, 1671, 1672, 1673, 1674, 1675, 1676, 1677, 1678, 1679,
- 1680, 1681, 1682, 1683, 1684, 1685, 1686, 1687, 1688, 1689, 1690, 1691,
- 1692, 1693, 1694, 1695, 1696, 1697, 1698, 1699, 1700, 1701, 1702, 1703,
- 1704, 1705, 1706, 1707, 1708, 1709, 1710, 1711, 1712, 1713, 1714, 1715,
- 1716, 1717, 1718, 1719, 1720, 1721, 1722, 1723, 1724, 1725, 1726, 1727,
- 1728, 1729, 1730, 1731, 1732, 1733, 1734, 1735, 1736, 1737, 1738, 1739,
- 1740, 1741, 1742, 1743, 1744, 1745, 1746, 1747, 1748, 1749, 1750, 1751,
- 1752, 1753, 1754, 1755, 1756, 1757, 1758, 1759, 1760, 1761, 1762, 1763,
- 1764, 1765, 1766, 1767, 1768, 1769, 1770, 1771, 1772, 1773, 1774, 1775,
- 1776, 1777, 1778, 1779, 1780, 1781, 1782, 1783, 1784, 1785, 1786, 1787,
- 1788, 1789, 1790, 1791, 1792, 1793, 1794, 1795, 1796, 1797, 1798, 1799,
- 1800, 1801, 1802, 1803, 1804, 1805, 1806, 1807, 1808, 1809, 1810, 1811,
- 1812, 1813, 1814, 1815, 1816, 1817, 1818, 1819, 1820, 1821, 1822, 1823,
- 1824, 1825, 1826, 1827, 1828, 1829, 1830, 1831, 1832, 1833, 1834, 1835,
- 1836, 1837, 1838, 1839, 1840, 1841, 1842, 1843, 1844, 1845, 1846, 1847,
- 1848, 1849, 1850, 1851, 1852, 1853, 1854, 1855, 1856, 1857, 1858, 1859,
- 1860, 1861, 1862, 1863, 1864, 1865, 1866, 1867, 1868, 1869, 1870, 1871,
- 1872, 1873, 1874, 1875, 1876, 1877, 1878, 1879, 1880, 1881, 1882, 1883,
- 1884, 1885, 1886, 1887, 1888, 1889, 1890, 1891, 1892, 1893, 1894, 1895,
- 1896, 1897, 1898, 1899, 1900, 1901, 1902, 1903, 1904, 1905, 1906, 1907,
- 1908, 1909, 1910, 1911, 1912, 1913, 1914, 1915, 1916, 1917, 1918, 1919,
- 1920, 1921, 1922, 1923, 1924, 1925, 1926, 1927, 1928, 1929, 1930, 1931,
- 1932, 1933, 1934, 1935, 1936, 1937, 1938, 1939, 1940, 1941, 1942, 1943,
- 1944, 1945, 1946, 1947, 1948, 1949, 1950, 1951, 1952, 1953, 1954, 1955,
- 1956, 1957, 1958, 1959, 1960, 1961, 1962, 1963, 1964, 1965, 1966, 1967,
- 1968, 1969, 1970, 1971, 1972, 1973, 1974, 1975, 1976, 1977, 1978, 1979,
- 1980, 1981, 1982, 1983, 1984, 1985, 1986, 1987, 1988, 1989, 1990, 1991,
- 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003,
- 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015,
- 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024, 2025, 2026, 2027,
- 2028, 2029, 2030, 2031, 2032, 2033, 2034, 2035, 2036, 2037, 2038, 2039,
- 2040, 2041, 2042, 2043, 2044, 2045, 2046, 2047, 2048, 2049, 2050, 2051,
- 2052, 2053, 2054, 2055, 2056, 2057, 2058, 2059, 2060, 2061, 2062, 2063,
- 2064, 2065, 2066, 2067, 2068, 2069, 2070, 2071, 2072, 2073, 2074, 2075,
- 2076, 2077, 2078, 2079, 2080, 2081, 2082, 2083, 2084, 2085, 2086, 2087,
- 2088, 2089, 2090, 2091, 2092, 2093, 2094, 2095, 2096, 2097, 2098, 2099,
- 2100, 2101, 2102, 2103, 2104, 2105, 2106, 2107, 2108, 2109, 2110, 2111,
- 2112, 2113, 2114, 2115, 2116, 2117, 2118, 2119, 2120, 2121, 2122, 2123,
- 2124, 2125, 2126, 2127, 2128, 2129, 2130, 2131, 2132, 2133, 2134, 2135,
- 2136, 2137, 2138, 2139, 2140, 2141, 2142, 2143, 2144, 2145, 2146, 2147,
- 2148, 2149, 2150, 2151, 2152, 2153, 2154, 2155, 2156, 2157, 2158, 2159,
- 2160, 2161, 2162, 2163, 2164, 2165, 2166, 2167, 2168, 2169, 2170, 2171,
- 2172, 2173, 2174, 2175, 2176, 2177, 2178, 2179, 2180, 2181, 2182, 2183,
- 2184, 2185, 2186, 2187, 2188, 2189, 2190, 2191, 2192, 2193, 2194, 2195,
- 2196, 2197, 2198, 2199, 2200, 2201, 2202, 2203, 2204, 2205, 2206, 2207,
- 2208, 2209, 2210, 2211, 2212, 2213, 2214, 2215, 2216, 2217, 2218, 2219,
- 2220, 2221, 2222, 2223, 2224, 2225, 2226, 2227, 2228, 2229, 2230, 2231,
- 2232, 2233, 2234, 2235, 2236, 2237, 2238, 2239, 2240, 2241, 2242, 2243,
- 2244, 2245, 2246, 2247, 2248, 2249, 2250, 2251, 2252, 2253, 2254, 2255,
- 2256, 2257, 2258, 2259, 2260, 2261, 2262, 2263, 2264, 2265, 2266, 2267,
- 2268, 2269, 2270, 2271, 2272, 2273, 2274, 2275, 2276, 2277, 2278, 2279,
- 2280, 2281, 2282, 2283, 2284, 2285, 2286, 2287, 2288, 2289, 2290, 2291,
- 2292, 2293, 2294, 2295, 2296, 2297, 2298, 2299, 2300, 2301, 2302, 2303,
- 2304, 2305, 2306, 2307, 2308, 2309, 2310, 2311, 2312, 2313, 2314, 2315,
- 2316, 2317, 2318, 2319, 2320, 2321, 2322, 2323, 2324, 2325, 2326, 2327,
- 2328, 2329, 2330, 2331, 2332, 2333, 2334, 2335, 2336, 2337, 2338, 2339,
- 2340, 2341, 2342, 2343, 2344, 2345, 2346, 2347, 2348, 2349, 2350, 2351,
- 2352, 2353, 2354, 2355, 2356, 2357, 2358, 2359, 2360, 2361, 2362, 2363,
- 2364, 2365, 2366, 2367, 2368, 2369, 2370, 2371, 2372, 2373, 2374, 2375,
- 2376, 2377, 2378, 2379, 2380, 2381, 2382, 2383, 2384, 2385, 2386, 2387,
- 2388, 2389, 2390, 2391, 2392, 2393, 2394, 2395, 2396, 2397, 2398, 2399,
- 2400, 2401, 2402, 2403, 2404, 2405, 2406, 2407, 2408, 2409, 2410, 2411,
- 2412, 2413, 2414, 2415, 2416, 2417, 2418, 2419, 2420, 2421, 2422, 2423,
- 2424, 2425, 2426, 2427, 2428, 2429, 2430, 2431, 2432, 2433, 2434, 2435,
- 2436, 2437, 2438, 2439, 2440, 2441, 2442, 2443, 2444, 2445, 2446, 2447,
- 2448, 2449, 2450, 2451, 2452, 2453, 2454, 2455, 2456, 2457, 2458, 2459,
- 2460, 2461, 2462, 2463, 2464, 2465, 2466, 2467, 2468, 2469, 2470, 2471,
- 2472, 2473, 2474, 2475, 2476, 2477, 2478, 2479, 2480, 2481, 2482, 2483,
- 2484, 2485, 2486, 2487, 2488, 2489, 2490, 2491, 2492, 2493, 2494, 2495,
- 2496, 2497, 2498, 2499, 2500, 2501, 2502, 2503, 2504, 2505, 2506, 2507,
- 2508, 2509, 2510, 2511, 2512, 2513, 2514, 2515, 2516, 2517, 2518, 2519,
- 2520, 2521, 2522, 2523, 2524, 2525, 2526, 2527, 2528, 2529, 2530, 2531,
- 2532, 2533, 2534, 2535, 2536, 2537, 2538, 2539, 2540, 2541, 2542, 2543,
- 2544, 2545, 2546, 2547, 2548, 2549, 2550, 2551, 2552, 2553, 2554, 2555,
- 2556, 2557, 2558, 2559, 2560, 2561, 2562, 2563, 2564, 2565, 2566, 2567,
- 2568, 2569, 2570, 2571, 2572, 2573, 2574, 2575, 2576, 2577, 2578, 2579,
- 2580, 2581, 2582, 2583, 2584, 2585, 2586, 2587, 2588, 2589, 2590, 2591,
- 2592, 2593, 2594, 2595, 2596, 2597, 2598, 2599, 2600, 2601, 2602, 2603,
- 2604, 2605, 2606, 2607, 2608, 2609, 2610, 2611, 2612, 2613, 2614, 2615,
- 2616, 2617, 2618, 2619, 2620, 2621, 2622, 2623, 2624, 2625, 2626, 2627,
- 2628, 2629, 2630, 2631, 2632, 2633, 2634, 2635, 2636, 2637, 2638, 2639,
- 2640, 2641, 2642, 2643, 2644, 2645, 2646, 2647, 2648, 2649, 2650, 2651,
- 2652, 2653, 2654, 2655, 2656, 2657, 2658, 2659, 2660, 2661, 2662, 2663,
- 2664, 2665, 2666, 2667, 2668, 2669, 2670, 2671, 2672, 2673, 2674, 2675,
- 2676, 2677, 2678, 2679, 2680, 2681, 2682, 2683, 2684, 2685, 2686, 2687,
- 2688, 2689, 2690, 2691, 2692, 2693, 2694, 2695, 2696, 2697, 2698, 2699,
- 2700, 2701, 2702, 2703, 2704, 2705, 2706, 2707, 2708, 2709, 2710, 2711,
- 2712, 2713, 2714, 2715, 2716, 2717, 2718, 2719, 2720, 2721, 2722, 2723,
- 2724, 2725, 2726, 2727, 2728, 2729, 2730, 2731, 2732, 2733, 2734, 2735,
- 2736, 2737, 2738, 2739, 2740, 2741, 2742, 2743, 2744, 2745, 2746, 2747,
- 2748, 2749, 2750, 2751, 2752, 2753, 2754, 2755, 2756, 2757, 2758, 2759,
- 2760, 2761, 2762, 2763, 2764, 2765, 2766, 2767, 2768, 2769, 2770, 2771,
- 2772, 2773, 2774, 2775, 2776, 2777, 2778, 2779, 2780, 2781, 2782, 2783,
- 2784, 2785, 2786, 2787, 2788, 2789, 2790, 2791, 2792, 2793, 2794, 2795,
- 2796, 2797, 2798, 2799, 2800, 2801, 2802, 2803, 2804, 2805, 2806, 2807,
- 2808, 2809, 2810, 2811, 2812, 2813, 2814, 2815, 2816, 2817, 2818, 2819,
- 2820, 2821, 2822, 2823, 2824, 2825, 2826, 2827, 2828, 2829, 2830, 2831,
- 2832, 2833, 2834, 2835, 2836, 2837, 2838, 2839, 2840, 2841, 2842, 2843,
- 2844, 2845, 2846, 2847, 2848, 2849, 2850, 2851, 2852, 2853, 2854, 2855,
- 2856, 2857, 2858, 2859, 2860, 2861, 2862, 2863, 2864, 2865, 2866, 2867,
- 2868, 2869, 2870, 2871, 2872, 2873, 2874, 2875, 2876, 2877, 2878, 2879,
- 2880, 2881, 2882, 2883, 2884, 2885, 2886, 2887, 2888, 2889, 2890, 2891,
- 2892, 2893, 2894, 2895, 2896, 2897, 2898, 2899, 2900, 2901, 2902, 2903,
- 2904, 2905, 2906, 2907, 2908, 2909, 2910, 2911, 2912, 2913, 2914, 2915,
- 2916, 2917, 2918, 2919, 2920, 2921, 2922, 2923, 2924, 2925, 2926, 2927,
- 2928, 2929, 2930, 2931, 2932, 2933, 2934, 2935, 2936, 2937, 2938, 2939,
- 2940, 2941, 2942, 2943, 2944, 2945, 2946, 2947, 2948, 2949, 2950, 2951,
- 2952, 2953, 2954, 2955, 2956, 2957, 2958, 2959, 2960, 2961, 2962, 2963,
- 2964, 2965, 2966, 2967, 2968, 2969, 2970, 2971, 2972, 2973, 2974, 2975,
- 2976, 2977, 2978, 2979, 2980, 2981, 2982, 2983, 2984, 2985, 2986, 2987,
- 2988, 2989, 2990, 2991, 2992, 2993, 2994, 2995, 2996, 2997, 2998, 2999,
- 3000},
- {-2.16465, -2.81845, -3.22285, -3.42892, -3.46485, -3.35103, -3.10376,
- -2.73681, -2.26226, -1.691, -1.03302, -0.297651, 0.506268, 1.37029,
- 2.28626, 3.24622, 4.24234, 5.26689, 6.31214, 7.37034, 8.43366,
- 9.4941, 10.5435, 11.5734, 12.575, 13.5392, 14.4561, 15.3155,
- 16.1061, 16.8158, 17.4311, 17.9371, 18.3165, 18.5494, 18.612,
- 18.4748, 18.0994, 17.4327, 16.3916, 14.8107, 12.1662, 9.29873,
- 6.55297, 3.92694, 1.4187, -0.973639, -3.25195, -5.41807, -7.47383,
- -9.42101, -11.2614, -12.9967, -14.6288, -16.1592, -17.5897, -18.922,
- -20.1578, -21.2986, -22.3462, -23.3021, -24.1679, -24.9454, -25.636,
- -26.2413, -26.7629, -27.2024, -27.5613, -27.8411, -28.0435, -28.1699,
- -28.2218, -28.2008, -28.1085, -27.9462, -27.7156, -27.4181, -27.0553,
- -26.6287, -26.1397, -25.5899, -24.9808, -24.3138, -23.5906, -22.8126,
- -21.9814, -21.0984, -20.1651, -19.1832, -18.1542, -17.0795, -15.9608,
- -14.7995, -13.5973, -12.3558, -11.0764, -9.76091, -8.4108, -7.02773,
- -5.61332, -4.16922, -2.6971, -1.19864, 0.324478, 1.87053, 3.43778,
- 5.02448, 6.62884, 8.24907, 9.88334, 11.5298, 13.1865, 14.8517,
- 16.5232, 18.1992, 19.8777, 21.5565, 23.2336, 24.9069, 26.5741,
- 28.2329, 29.8812, 31.5165, 33.1364, 34.7384, 36.32, 37.8785,
- 39.4112, 40.9152, 42.3878, 43.8257, 45.226, 46.5852, 47.9001,
- 49.167, 50.3822, 51.5418, 52.6416, 53.6773, 54.6443, 55.5376,
- 56.3519, 57.0818, 57.721, 58.263, 58.7007, 59.0263, 59.2311,
- 59.3054, 59.2383, 59.0176, 58.6289, 58.0554, 57.2767, 56.268,
- 54.9967, 53.4189, 51.4689, 49.0315, 45.7413, 41.6262, 37.6,
- 33.6623, 29.8123, 26.0495, 22.3732, 18.7829, 15.2779, 11.8576,
- 8.52136, 5.26863, 2.09877, -0.988822, -3.99476, -6.91965, -9.76409,
- -12.5287, -15.2141, -17.8209, -20.3496, -22.8009, -25.1754, -27.4738,
- -29.6965, -31.8442, -33.9175, -35.917, -37.8434, -39.6971, -41.4789,
- -43.1893, -44.8289, -46.3983, -47.8981, -49.329, -50.6915, -51.9863,
- -53.2139, -54.3749, -55.47, -56.4998, -57.4648, -58.3657, -59.203,
- -59.9774, -60.6896, -61.34, -61.9293, -62.4582, -62.9272, -63.3369,
- -63.688, -63.981, -64.2167, -64.3956, -64.5182, -64.5854, -64.5975,
- -64.5554, -64.4596, -64.3107, -64.1094, -63.8563, -63.5519, -63.1971,
- -62.7923, -62.3383, -61.8356, -61.2849, -60.6868, -60.042, -59.3512,
- -58.6149, -57.8339, -57.0087, -56.1401, -55.2287, -54.2751, -53.2801,
- -52.2443, -51.1683, -50.0528, -48.8986, -47.7062, -46.4764, -45.2099,
- -43.9073, -42.5694, -41.1968, -39.7903, -38.3505, -36.8781, -35.3739,
- -33.8387, -32.273, -30.6777, -29.0534, -27.401, -25.7211, -24.0146,
- -22.2821, -20.5244, -18.7422, -16.9365, -15.1079, -13.2572, -11.3852,
- -9.49267, -7.58049, -5.64942, -3.70029, -1.73393, 0.248825, 2.24714,
- 4.26016, 6.28703, 8.32687, 10.3788, 12.442, 14.5154, 16.5983,
- 18.6896, 20.7885, 22.894, 25.0052, 27.1211, 29.2406, 31.3629,
- 33.4869, 35.6116, 37.7359, 39.8589, 41.9794, 44.0964, 46.2087,
- 48.3152, 50.4149, 52.5065, 54.5888, 56.6607, 58.721, 60.7684,
- 62.8015, 64.8193, 66.8202, 68.803, 70.7663, 72.7086, 74.6286,
- 76.5248, 78.3955, 80.2394, 82.0547, 83.84, 85.5934, 87.3132,
- 88.9978, 90.6453, 92.2535, 93.8209, 95.3453, 96.8246, 98.2567,
- 99.6393, 100.97, 102.247, 103.467, 104.627, 105.726, 106.759,
- 107.725, 108.619, 109.44, 110.182, 110.843, 111.418, 111.903,
- 112.294, 112.587, 112.775, 112.853, 112.816, 112.657, 112.368,
- 111.941, 111.368, 110.639, 109.742, 108.664, 107.389, 105.9,
- 104.173, 102.179, 99.881, 97.223, 94.1156, 90.3639, 85.4774,
- 80.4874, 75.5704, 70.7263, 65.9546, 61.255, 56.6273, 52.0712,
- 47.5862, 43.172, 38.8285, 34.5551, 30.3517, 26.2179, 22.1533,
- 18.1577, 14.2307, 10.372, 6.58129, 2.85824, -0.79747, -4.38616,
- -7.90816, -11.3638, -14.7534, -18.0772, -21.3357, -24.529, -27.6577,
- -30.7218, -33.7219, -36.6582, -39.5311, -42.3408, -45.0877, -47.7721,
- -50.3944, -52.9548, -55.4538, -57.8916, -60.2677, -62.5849, -64.8412,
- -67.0375, -69.1744, -71.252, -73.2708, -75.2311, -77.1331, -78.9773,
- -80.7639, -82.4933, -84.1658, -85.7818, -87.3416, -88.8455, -90.2939,
- -91.687, -93.0253, -94.3091, -95.5387, -96.7143, -97.8365, -98.9056,
- -99.9217, -100.885, -101.797, -102.657, -103.465, -104.222, -104.928,
- -105.584, -106.19, -106.746, -107.253, -107.71, -108.119, -108.48,
- -108.792, -109.057, -109.275, -109.445, -109.569, -109.647, -109.679,
- -109.665, -109.606, -109.503, -109.355, -109.162, -108.926, -108.647,
- -108.325, -107.96, -107.553, -107.103, -106.613, -106.081, -105.508,
- -104.895, -104.242, -103.549, -102.817, -102.046, -101.236, -100.388,
- -99.5027, -98.5796, -97.6195, -96.6228, -95.5898, -94.5209, -93.4165,
- -92.277, -91.1028, -89.8944, -88.6519, -87.376, -86.067, -84.7252,
- -83.3511, -81.9451, -80.5076, -79.039, -77.5397, -76.0102, -74.4507,
- -72.8618, -71.2439, -69.5974, -67.9227, -66.2202, -64.4903, -62.7336,
- -60.9503, -59.141, -57.3061, -55.446, -53.5612, -51.652, -49.719,
- -47.7626, -45.7833, -43.7814, -41.7575, -39.7121, -37.6454, -35.5581,
- -33.4507, -31.3234, -29.177, -27.0117, -24.8282, -22.6268, -20.4081,
- -18.1726, -15.9207, -13.653, -11.3699, -9.072, -6.75974, -4.43366,
- -2.09427, 0.257911, 2.62236, 4.99854, 7.38592, 9.78397, 12.1921,
- 14.6099, 17.0367, 19.4719, 21.915, 24.3655, 26.8228, 29.2862,
- 31.7552, 34.2293, 36.7077, 39.19, 41.6755, 44.1637, 46.6537,
- 49.1452, 51.6373, 54.1295, 56.6212, 59.1116, 61.6001, 64.0861,
- 66.5688, 69.0476, 71.5218, 73.9906, 76.4534, 78.9094, 81.3579,
- 83.7982, 86.2295, 88.651, 91.0619, 93.4615, 95.849, 98.2235,
- 100.584, 102.93, 105.261, 107.576, 109.873, 112.152, 114.412,
- 116.652, 118.871, 121.069, 123.243, 125.394, 127.52, 129.62,
- 131.693, 133.738, 135.755, 137.74, 139.695, 141.616, 143.504,
- 145.357, 147.174, 148.953, 150.693, 152.393, 154.051, 155.666,
- 157.236, 158.76, 160.236, 161.663, 163.038, 164.361, 165.629,
- 166.841, 167.994, 169.087, 170.117, 171.082, 171.981, 172.81,
- 173.567, 174.25, 174.856, 175.382, 175.826, 176.183, 176.451,
- 176.626, 176.705, 176.683, 176.557, 176.321, 175.971, 175.502,
- 174.907, 174.181, 173.317, 172.307, 171.142, 169.814, 168.311,
- 166.62, 164.729, 162.619, 160.269, 157.653, 154.737, 151.473,
- 147.787, 143.539, 138.236, 132.442, 126.711, 121.044, 115.441,
- 109.9, 104.423, 99.0076, 93.6551, 88.3649, 83.1368, 77.9705,
- 72.8659, 67.8228, 62.841, 57.9202, 53.0603, 48.2611, 43.5223,
- 38.8437, 34.2252, 29.6666, 25.1675, 20.7279, 16.3476, 12.0262,
- 7.76365, 3.55971, -0.585837, -4.67319, -8.70255, -12.6741, -16.5881,
- -20.4448, -24.2443, -27.9868, -31.6726, -35.3019, -38.8748, -42.3916,
- -45.8526, -49.2578, -52.6075, -55.902, -59.1413, -62.3259, -65.4557,
- -68.5312, -71.5524, -74.5196, -77.433, -80.2928, -83.0992, -85.8525,
- -88.5528, -91.2004, -93.7954, -96.3381, -98.8288, -101.268, -103.655,
- -105.99, -108.275, -110.508, -112.69, -114.822, -116.904, -118.935,
- -120.917, -122.849, -124.731, -126.564, -128.348, -130.083, -131.769,
- -133.407, -134.997, -136.539, -138.033, -139.48, -140.879, -142.231,
- -143.536, -144.795, -146.007, -147.173, -148.294, -149.368, -150.397,
- -151.38, -152.319, -153.213, -154.062, -154.866, -155.627, -156.343,
- -157.016, -157.646, -158.232, -158.775, -159.276, -159.734, -160.149,
- -160.523, -160.854, -161.144, -161.393, -161.6, -161.767, -161.893,
- -161.978, -162.024, -162.029, -161.995, -161.921, -161.808, -161.656,
- -161.465, -161.235, -160.967, -160.662, -160.318, -159.937, -159.519,
- -159.063, -158.571, -158.042, -157.477, -156.876, -156.238, -155.566,
- -154.858, -154.115, -153.337, -152.524, -151.677, -150.796, -149.882,
- -148.934, -147.952, -146.937, -145.89, -144.81, -143.698, -142.554,
- -141.378, -140.17, -138.932, -137.662, -136.362, -135.031, -133.67,
- -132.279, -130.859, -129.409, -127.93, -126.423, -124.887, -123.322,
- -121.73, -120.109, -118.462, -116.787, -115.085, -113.357, -111.603,
- -109.822, -108.016, -106.184, -104.327, -102.445, -100.539, -98.6078,
- -96.653, -94.6745, -92.6725, -90.6473, -88.5993, -86.5288, -84.436,
- -82.3213, -80.1849, -78.0272, -75.8485, -73.649, -71.4291, -69.189,
- -66.9292, -64.6499, -62.3514, -60.0341, -57.6981, -55.344, -52.972,
- -50.5824, -48.1755, -45.7517, -43.3113, -40.8547, -38.382, -35.8938,
- -33.3903, -30.8719, -28.3389, -25.7916, -23.2304, -20.6557, -18.0677,
- -15.4669, -12.8535, -10.228, -7.59073, -4.94198, -2.28216, 0.388381,
- 3.06927, 5.76014, 8.46062, 11.1703, 13.8889, 16.616, 19.3511,
- 22.094, 24.8442, 27.6013, 30.3649, 33.1348, 35.9103, 38.6912,
- 41.477, 44.2673, 47.0618, 49.8599, 52.6614, 55.4656, 58.2723,
- 61.081, 63.8913, 66.7027, 69.5147, 72.327, 75.1391, 77.9505,
- 80.7608, 83.5694, 86.3761, 89.1802, 91.9813, 94.7788, 97.5725,
- 100.362, 103.146, 105.925, 108.697, 111.464, 114.223, 116.975,
- 119.718, 122.453, 125.179, 127.896, 130.602, 133.297, 135.981,
- 138.653, 141.312, 143.958, 146.591, 149.209, 151.812, 154.4,
- 156.971, 159.526, 162.063, 164.582, 167.082, 169.563, 172.024,
- 174.463, 176.881, 179.277, 181.65, 183.999, 186.323, 188.622,
- 190.895, 193.141, 195.359, 197.549, 199.709, 201.839, 203.938,
- 206.005, 208.039, 210.039, 212.004, 213.933, 215.826, 217.68,
- 219.496, 221.272, 223.007, 224.7, 226.35, 227.955, 229.515,
- 231.028, 232.492, 233.907, 235.272, 236.584, 237.843, 239.047,
- 240.194, 241.283, 242.312, 243.28, 244.185, 245.025, 245.799,
- 246.504, 247.138, 247.699, 248.186, 248.595, 248.925, 249.173,
- 249.336, 249.412, 249.398, 249.29, 249.087, 248.783, 248.376,
- 247.862, 247.236, 246.495, 245.634, 244.646, 243.528, 242.273,
- 240.874, 239.324, 237.615, 235.738, 233.682, 231.436, 228.986,
- 226.316, 223.406, 220.232, 216.762, 212.954, 208.744, 204.02,
- 198.451, 191.954, 185.514, 179.131, 172.804, 166.535, 160.322,
- 154.165, 148.065, 142.021, 136.033, 130.101, 124.225, 118.404,
- 112.638, 106.929, 101.274, 95.674, 90.1292, 84.639, 79.2035,
- 73.8225, 68.4957, 63.2231, 58.0046, 52.8399, 47.729, 42.6716,
- 37.6677, 32.7171, 27.8196, 22.9752, 18.1836, 13.4447, 8.7584,
- 4.12452, -0.457087, -4.98656, -9.46405, -13.8897, -18.2637, -22.5861,
- -26.8571, -31.0769, -35.2456, -39.3633, -43.4302, -47.4465, -51.4122,
- -55.3276, -59.1928, -63.0079, -66.7731, -70.4886, -74.1544, -77.7708,
- -81.3378, -84.8557, -88.3246, -91.7446, -95.1159, -98.4386, -101.713,
- -104.939, -108.117, -111.247, -114.329, -117.364, -120.351, -123.29,
- -126.183, -129.028, -131.827, -134.579, -137.284, -139.943, -142.555,
- -145.122, -147.642, -150.117, -152.546, -154.929, -157.267, -159.56,
- -161.808, -164.011, -166.17, -168.283, -170.353, -172.378, -174.359,
- -176.296, -178.189, -180.039, -181.845, -183.608, -185.327, -187.004,
- -188.638, -190.229, -191.778, -193.285, -194.749, -196.171, -197.551,
- -198.89, -200.187, -201.443, -202.657, -203.83, -204.963, -206.055,
- -207.106, -208.117, -209.087, -210.018, -210.908, -211.759, -212.571,
- -213.342, -214.075, -214.769, -215.423, -216.039, -216.616, -217.155,
- -217.656, -218.118, -218.543, -218.93, -219.279, -219.591, -219.866,
- -220.104, -220.304, -220.468, -220.596, -220.687, -220.742, -220.761,
- -220.744, -220.691, -220.603, -220.479, -220.321, -220.127, -219.898,
- -219.635, -219.338, -219.006, -218.64, -218.24, -217.806, -217.339,
- -216.839, -216.305, -215.738, -215.138, -214.506, -213.841, -213.144,
- -212.414, -211.653, -210.86, -210.036, -209.18, -208.292, -207.374,
- -206.425, -205.445, -204.435, -203.395, -202.324, -201.224, -200.094,
- -198.934, -197.745, -196.527, -195.279, -194.003, -192.699, -191.366,
- -190.005, -188.616, -187.199, -185.755, -184.283, -182.784, -181.257,
- -179.705, -178.125, -176.519, -174.887, -173.229, -171.544, -169.835,
- -168.1, -166.339, -164.554, -162.744, -160.909, -159.05, -157.166,
- -155.259, -153.328, -151.373, -149.395, -147.394, -145.37, -143.323,
- -141.253, -139.162, -137.048, -134.912, -132.754, -130.576, -128.376,
- -126.154, -123.912, -121.65, -119.367, -117.064, -114.741, -112.399,
- -110.036, -107.655, -105.255, -102.836, -100.398, -97.9419, -95.4676,
- -92.9756, -90.4659, -87.9388, -85.3945, -82.8333, -80.2553, -77.6609,
- -75.0503, -72.4236, -69.7812, -67.1233, -64.4501, -61.7619, -59.0588,
- -56.3413, -53.6094, -50.8636, -48.1039, -45.3306, -42.5441, -39.7445,
- -36.9322, -34.1073, -31.2702, -28.421, -25.5601, -22.6876, -19.804,
- -16.9094, -14.0041, -11.0883, -8.16242, -5.22661, -2.28118, 0.6736,
- 3.63746, 6.61011, 9.59128, 12.5807, 15.5781, 18.5831, 21.5956,
- 24.6151, 27.6415, 30.6745, 33.7135, 36.7586, 39.8093, 42.8654,
- 45.9265, 48.9924, 52.0627, 55.1371, 58.2154, 61.2972, 64.3822,
- 67.4701, 70.5606, 73.6533, 76.748, 79.8443, 82.9418, 86.0404,
- 89.1395, 92.239, 95.3384, 98.4375, 101.536, 104.633, 107.729,
- 110.823, 113.915, 117.004, 120.091, 123.175, 126.255, 129.331,
- 132.402, 135.469, 138.532, 141.588, 144.639, 147.684, 150.722,
- 153.753, 156.776, 159.792, 162.8, 165.799, 168.789, 171.77,
- 174.741, 177.702, 180.651, 183.59, 186.517, 189.432, 192.335,
- 195.225, 198.101, 200.964, 203.812, 206.645, 209.463, 212.265,
- 215.051, 217.82, 220.572, 223.306, 226.022, 228.719, 231.396,
- 234.054, 236.691, 239.307, 241.902, 244.475, 247.024, 249.551,
- 252.053, 254.531, 256.984, 259.411, 261.812, 264.186, 266.532,
- 268.849, 271.138, 273.397, 275.626, 277.823, 279.989, 282.122,
- 284.222, 286.288, 288.318, 290.314, 292.273, 294.194, 296.078,
- 297.922, 299.727, 301.491, 303.213, 304.893, 306.529, 308.121,
- 309.667, 311.167, 312.619, 314.023, 315.377, 316.68, 317.931,
- 319.129, 320.272, 321.36, 322.39, 323.363, 324.276, 325.127,
- 325.916, 326.641, 327.301, 327.893, 328.416, 328.868, 329.248,
- 329.554, 329.784, 329.935, 330.006, 329.994, 329.897, 329.713,
- 329.439, 329.073, 328.611, 328.051, 327.39, 326.624, 325.75,
- 324.764, 323.662, 322.44, 321.094, 319.617, 318.006, 316.253,
- 314.353, 312.299, 310.082, 307.695, 305.126, 302.365, 299.399,
- 296.212, 292.785, 289.096, 285.116, 280.804, 276.106, 270.926,
- 265.05, 258.031, 250.953, 243.928, 236.955, 230.034, 223.165,
- 216.348, 209.582, 202.868, 196.206, 189.594, 183.034, 176.525,
- 170.067, 163.66, 157.304, 150.998, 144.744, 138.539, 132.385,
- 126.281, 120.228, 114.224, 108.27, 102.367, 96.5125, 90.708,
- 84.953, 79.2474, 73.5911, 67.9839, 62.4258, 56.9167, 51.4565,
- 46.0449, 40.682, 35.3677, 30.1017, 24.884, 19.7145, 14.5931,
- 9.51967, 4.49408, -0.483758, -5.41396, -10.2966, -15.1319, -19.9199,
- -24.6607, -29.3543, -34.0011, -38.601, -43.1541, -47.6606, -52.1206,
- -56.5341, -60.9014, -65.2225, -69.4975, -73.7266, -77.9098, -82.0473,
- -86.1392, -90.1855, -94.1865, -98.1422, -102.053, -105.918, -109.739,
- -113.514, -117.245, -120.932, -124.574, -128.171, -131.725, -135.234,
- -138.699, -142.12, -145.498, -148.832, -152.122, -155.369, -158.572,
- -161.732, -164.85, -167.924, -170.955, -173.944, -176.89, -179.793,
- -182.654, -185.473, -188.249, -190.984, -193.677, -196.327, -198.937,
- -201.504, -204.03, -206.515, -208.959, -211.361, -213.723, -216.043,
- -218.323, -220.563, -222.761, -224.92, -227.038, -229.116, -231.154,
- -233.152, -235.111, -237.029, -238.909, -240.748, -242.549, -244.31,
- -246.032, -247.716, -249.36, -250.966, -252.534, -254.063, -255.553,
- -257.006, -258.42, -259.796, -261.135, -262.436, -263.699, -264.925,
- -266.114, -267.265, -268.38, -269.457, -270.498, -271.502, -272.469,
- -273.4, -274.294, -275.153, -275.975, -276.762, -277.512, -278.227,
- -278.907, -279.551, -280.16, -280.733, -281.272, -281.776, -282.244,
- -282.679, -283.079, -283.444, -283.775, -284.072, -284.335, -284.564,
- -284.76, -284.922, -285.05, -285.145, -285.207, -285.236, -285.232,
- -285.195, -285.125, -285.023, -284.889, -284.722, -284.523, -284.292,
- -284.029, -283.735, -283.409, -283.051, -282.662, -282.242, -281.791,
- -281.309, -280.797, -280.253, -279.68, -279.075, -278.441, -277.777,
- -277.082, -276.358, -275.604, -274.821, -274.008, -273.166, -272.295,
- -271.395, -270.467, -269.509, -268.523, -267.509, -266.466, -265.396,
- -264.297, -263.171, -262.017, -260.835, -259.626, -258.39, -257.127,
- -255.836, -254.519, -253.176, -251.806, -250.409, -248.987, -247.538,
- -246.064, -244.563, -243.037, -241.486, -239.91, -238.308, -236.681,
- -235.03, -233.353, -231.653, -229.927, -228.178, -226.405, -224.607,
- -222.786, -220.942, -219.074, -217.182, -215.268, -213.33, -211.37,
- -209.387, -207.381, -205.353, -203.303, -201.231, -199.137, -197.022,
- -194.885, -192.726, -190.547, -188.346, -186.124, -183.882, -181.619,
- -179.336, -177.032, -174.709, -172.365, -170.002, -167.619, -165.217,
- -162.796, -160.356, -157.897, -155.419, -152.922, -150.407, -147.874,
- -145.323, -142.755, -140.168, -137.564, -134.943, -132.305, -129.649,
- -126.977, -124.288, -121.583, -118.862, -116.125, -113.371, -110.602,
- -107.818, -105.018, -102.203, -99.3733, -96.5286, -93.6694, -90.7957,
- -87.9079, -85.006, -82.0904, -79.161, -76.2183, -73.2623, -70.2932,
- -67.3113, -64.3167, -61.3096, -58.2902, -55.2588, -52.2155, -49.1604,
- -46.094, -43.0162, -39.9273, -36.8276, -33.7172, -30.5963, -27.4652,
- -24.324, -21.1729, -18.0122, -14.8421, -11.6628, -8.4744, -5.27724,
- -2.07151, 1.1426, 4.36486, 7.59506, 10.833, 14.0784, 17.3311,
- 20.5908, 23.8574, 27.1306, 30.4102, 33.6959, 36.9876, 40.285,
- 43.5878, 46.8959, 50.209, 53.5269, 56.8493, 60.176, 63.5068,
- 66.8414, 70.1796, 73.5211, 76.8657, 80.2132, 83.5633, 86.9158,
- 90.2703, 93.6267, 96.9847, 100.344, 103.705, 107.066, 110.428,
- 113.79, 117.152, 120.514, 123.876, 127.237, 130.596, 133.955,
- 137.312, 140.667, 144.02, 147.37, 150.718, 154.063, 157.405,
- 160.743, 164.078, 167.408, 170.734, 174.055, 177.371, 180.682,
- 183.987, 187.286, 190.579, 193.865, 197.145, 200.418, 203.683,
- 206.94, 210.189, 213.429, 216.661, 219.884, 223.097, 226.3,
- 229.494, 232.676, 235.848, 239.009, 242.158, 245.295, 248.42,
- 251.533, 254.632, 257.718, 260.79, 263.849, 266.892, 269.921,
- 272.934, 275.932, 278.914, 281.879, 284.827, 287.758, 290.672,
- 293.567, 296.443, 299.301, 302.139, 304.957, 307.755, 310.532,
- 313.287, 316.021, 318.733, 321.422, 324.088, 326.73, 329.349,
- 331.942, 334.511, 337.053, 339.57, 342.059, 344.522, 346.957,
- 349.363, 351.74, 354.088, 356.406, 358.693, 360.949, 363.173,
- 365.366, 367.523, 369.647, 371.738, 373.793, 375.812, 377.795,
- 379.741, 381.649, 383.518, 385.348, 387.138, 388.887, 390.595,
- 392.26, 393.882, 395.46, 396.993, 398.48, 399.921, 401.314,
- 402.659, 403.954, 405.199, 406.392, 407.533, 408.621, 409.654,
- 410.632, 411.552, 412.415, 413.219, 413.962, 414.644, 415.263,
- 415.818, 416.307, 416.729, 417.082, 417.365, 417.577, 417.716,
- 417.779, 417.766, 417.674, 417.502, 417.247, 416.908, 416.482,
- 415.967, 415.361, 414.661, 413.865, 412.97, 411.972, 410.87,
- 409.659, 408.336, 406.898, 405.341, 403.66, 401.851, 399.91,
- 397.83, 395.606, 393.233, 390.702, 388.007, 385.166, 382.087,
- 378.842, 375.39, 371.717, 367.806, 363.633, 359.172, 354.386,
- 349.223, 343.601, 337.35, 329.951, 322.291, 314.68, 307.117,
- 299.603, 292.137, 284.718, 277.348, 270.026, 262.751, 255.524,
- 248.345, 241.213, 234.129, 227.093, 220.103, 213.161, 206.266,
- 199.418, 192.617, 185.863, 179.156, 172.495, 165.881, 159.314,
- 152.793, 146.318, 139.89, 133.508, 127.172, 120.882, 114.639,
- 108.441, 102.288, 96.1817, 90.1207, 84.1053, 78.1352, 72.2106,
- 66.3312, 60.497, 54.7078, 48.9637, 43.2645, 37.6101, 32.0004,
- 26.4354, 20.915, 15.439, 10.0075, 4.62023, -0.722813, -6.02172,
- -11.2766, -16.4875, -21.6546, -26.7778, -31.8574, -36.8934, -41.8859,
- -46.8349, -51.7406, -56.6031, -61.4224, -66.1986, -70.9318, -75.6222,
- -80.2697, -84.8746, -89.4368, -93.9565, -98.4337, -102.869, -107.261,
- -111.612, -115.92, -120.186, -124.411, -128.593, -132.734, -136.833,
- -140.891, -144.907, -148.882, -152.816, -156.708, -160.56, -164.37,
- -168.139, -171.868, -175.556, -179.203, -182.81, -186.376, -189.902,
- -193.387, -196.833, -200.238, -203.603, -206.929, -210.214, -213.46,
- -216.667, -219.833, -222.961, -226.049, -229.097, -232.107, -235.077,
- -238.009, -240.902, -243.755, -246.571, -249.347, -252.085, -254.785,
- -257.446, -260.069, -262.654, -265.201, -267.71, -270.181, -272.615,
- -275.011, -277.369, -279.69, -281.973, -284.219, -286.428, -288.6,
- -290.735, -292.833, -294.894, -296.919, -298.907, -300.858, -302.774,
- -304.652, -306.495, -308.301, -310.072, -311.806, -313.505, -315.168,
- -316.795, -318.387, -319.944, -321.465, -322.951, -324.402, -325.817,
- -327.198, -328.544, -329.855, -331.132, -332.374, -333.582, -334.755,
- -335.894, -336.999, -338.07, -339.107, -340.11, -341.08, -342.016,
- -342.918, -343.787, -344.623, -345.425, -346.194, -346.931, -347.634,
- -348.304, -348.942, -349.547, -350.12, -350.66, -351.168, -351.644,
- -352.088, -352.5, -352.88, -353.228, -353.544, -353.829, -354.083,
- -354.305, -354.495, -354.655, -354.784, -354.881, -354.948, -354.984,
- -354.99, -354.965, -354.91, -354.824, -354.708, -354.562, -354.386,
- -354.18, -353.945, -353.68, -353.385, -353.061, -352.707, -352.324,
- -351.913, -351.472, -351.002, -350.504, -349.977, -349.421, -348.837,
- -348.224, -347.584, -346.915, -346.218, -345.493, -344.741, -343.961,
- -343.153, -342.318, -341.455, -340.566, -339.649, -338.705, -337.734,
- -336.737, -335.713, -334.662, -333.585, -332.482, -331.352, -330.197,
- -329.015, -327.808, -326.575, -325.316, -324.032, -322.722, -321.387,
- -320.027, -318.642, -317.232, -315.798, -314.338, -312.855, -311.346,
- -309.814, -308.257, -306.676, -305.071, -303.442, -301.79, -300.114,
- -298.414, -296.692, -294.946, -293.176, -291.384, -289.569, -287.732,
- -285.871, -283.989, -282.083, -280.156, -278.207, -276.235, -274.242,
- -272.227, -270.19, -268.132, -266.052, -263.952, -261.83, -259.687,
- -257.523, -255.339, -253.134, -250.909, -248.663, -246.397, -244.111,
- -241.805, -239.479, -237.134, -234.769, -232.384, -229.981, -227.558,
- -225.116, -222.655, -220.176, -217.678, -215.161, -212.627, -210.073,
- -207.502, -204.913, -202.306, -199.682, -197.04, -194.38, -191.704,
- -189.01, -186.299, -183.572, -180.827, -178.067, -175.29, -172.496,
- -169.687, -166.861, -164.02, -161.163, -158.29, -155.402, -152.499,
- -149.58, -146.647, -143.699, -140.736, -137.759, -134.767, -131.761,
- -128.741, -125.707, -122.659, -119.598, -116.523, -113.435, -110.334,
- -107.219, -104.092, -100.952, -97.7999, -94.635, -91.4579, -88.2687,
- -85.0675, -81.8546, -78.6301, -75.3941, -72.1469, -68.8884, -65.619,
- -62.3388, -59.048, -55.7466, -52.4349, -49.1131, -45.7812, -42.4395,
- -39.0881, -35.7273, -32.3571, -28.9777, -25.5893, -22.1921, -18.7863,
- -15.3719, -11.9493, -8.51846, -5.07968, -1.6331, 1.8211, 5.28275,
- 8.75167, 12.2277, 15.7106, 19.2003, 22.6965, 26.1991, 29.7079,
- 33.2228, 36.7434, 40.2697, 43.8015, 47.3385, 50.8806, 54.4277,
- 57.9794, 61.5357, 65.0963, 68.6611, 72.2298, 75.8023, 79.3783,
- 82.9578, 86.5403, 90.1259, 93.7143, 97.3052, 100.898, 104.494,
- 108.091, 111.691, 115.291, 118.894, 122.497, 126.101, 129.706,
- 133.312, 136.918, 140.523, 144.129, 147.735, 151.34, 154.944,
- 158.547, 162.149, 165.75, 169.349, 172.946, 176.541, 180.133,
- 183.723, 187.311, 190.895, 194.476, 198.053, 201.627, 205.197,
- 208.763, 212.324, 215.88, 219.432, 222.978, 226.519, 230.054,
- 233.584, 237.107, 240.624, 244.134, 247.638, 251.133, 254.621,
- 258.102, 261.574, 265.038, 268.494, 271.941, 275.379, 278.807,
- 282.226, 285.635, 289.034, 292.422, 295.799, 299.165, 302.52,
- 305.863, 309.195, 312.514, 315.82, 319.113, 322.393, 325.66,
- 328.913, 332.152, 335.376, 338.585, 341.78, 344.959, 348.122,
- 351.269, 354.399, 357.513, 360.609, 363.688, 366.75, 369.793,
- 372.817, 375.822, 378.809, 381.775, 384.722, 387.647, 390.553,
- 393.437, 396.299, 399.139, 401.957, 404.752, 407.524, 410.272,
- 412.996, 415.696, 418.371, 421.02, 423.644, 426.241, 428.812,
- 431.355, 433.871, 436.358, 438.817, 441.247, 443.648, 446.018,
- 448.357, 450.666, 452.943, 455.188, 457.4, 459.579, 461.724,
- 463.834, 465.91, 467.95, 469.954, 471.921, 473.851, 475.744,
- 477.597, 479.411, 481.186, 482.919, 484.612, 486.263, 487.871,
- 489.436, 490.956, 492.432, 493.862, 495.246, 496.583, 497.871,
- 499.111, 500.301, 501.441, 502.529, 503.565, 504.55, 505.476,
- 506.35, 507.167, 507.927, 508.628, 509.271, 509.852, 510.373,
- 510.83, 511.224, 511.552, 511.814, 512.008, 512.133, 512.188,
- 512.17, 512.079, 511.912, 511.67, 511.348, 510.947, 510.463,
- 509.896, 509.243, 508.503, 507.672, 506.75, 505.732, 504.618,
- 503.405, 502.089, 500.669, 499.14, 497.5, 495.745, 493.873,
- 491.878, 489.757, 487.505, 485.119, 482.591, 479.918, 477.092,
- 474.107, 470.955, 467.629, 464.118, 460.413, 456.5, 452.365,
- 447.992, 443.358, 438.438, 433.198, 427.588, 421.534, 414.892,
- 407.158, 398.959, 390.806, 382.698, 374.635, 366.617, 358.645,
- 350.717, 342.834, 334.997, 327.204, 319.455, 311.752, 304.093,
- 296.478, 288.908, 281.382, 273.901, 266.464, 259.071, 251.722,
- 244.417, 237.156, 229.94, 222.766, 215.637, 208.551, 201.509,
- 194.511, 187.556, 180.644, 173.776, 166.951, 160.169, 153.431,
- 146.735, 140.083, 133.473, 126.906, 120.382, 113.901, 107.462,
- 101.066, 94.7126, 88.4015, 82.1327, 75.9062, 69.722, 63.5799,
- 57.4798, 51.4218, 45.4057, 39.4315, 33.499, 27.6083, 21.7593,
- 15.9518, 10.1859, 4.46133, -1.22182, -6.86368, -12.4643, -18.0238,
- -23.5422, -29.0196, -34.456, -39.8516, -45.2064, -50.5205, -55.7939,
- -61.0268, -66.2191, -71.371, -76.4826, -81.5539, -86.5849, -91.5758,
- -96.5266, -101.437, -106.308, -111.139, -115.931, -120.682, -125.394,
- -130.067, -134.7, -139.293, -143.847, -148.362, -152.838, -157.274,
- -161.672, -166.031, -170.35, -174.631, -178.873, -183.077, -187.241,
- -191.368, -195.456, -199.505, -203.516, -207.489, -211.424, -215.321,
- -219.18, -223., -226.783, -230.528, -234.236, -237.906, -241.538,
- -245.133, -248.69, -252.21, -255.693, -259.139, -262.547, -265.919,
- -269.254, -272.551, -275.812, -279.037, -282.224, -285.375, -288.49,
- -291.568, -294.61, -297.615, -300.584, -303.518, -306.415, -309.276,
- -312.102, -314.891, -317.645, -320.363, -323.046, -325.693, -328.305,
- -330.882, -333.423, -335.929, -338.4, -340.836, -343.237, -345.603,
- -347.935, -350.231, -352.493, -354.721, -356.914, -359.073, -361.197,
- -363.287, -365.343, -367.365, -369.353, -371.308, -373.228, -375.114,
- -376.967, -378.786, -380.572, -382.325, -384.044, -385.729, -387.382,
- -389.001, -390.588, -392.141, -393.662, -395.15, -396.597, -398.027,
- -399.418, -400.775, -402.1, -403.393, -404.654, -405.883, -407.079,
- -408.244, -409.376, -410.477, -411.547, -412.584, -413.59, -414.565,
- -415.508, -416.42, -417.301, -418.151, -418.969, -419.757, -420.514,
- -421.24, -421.935, -422.6, -423.234, -423.837, -424.411, -424.954,
- -425.467, -425.949, -426.402, -426.825, -427.218, -427.581, -427.914,
- -428.218, -428.493, -428.738, -428.953, -429.14, -429.297, -429.425,
- -429.524, -429.594, -429.636, -429.649, -429.633, -429.588, -429.515,
- -429.414, -429.284, -429.127, -428.941, -428.727, -428.485, -428.215,
- -427.918, -427.593, -427.24, -426.86, -426.453, -426.018, -425.556,
- -425.066, -424.55, -424.007, -423.437, -422.84, -422.217, -421.567,
- -420.89, -420.187, -419.458, -418.703, -417.921, -417.114, -416.28,
- -415.421, -414.536, -413.625, -412.689, -411.727, -410.74, -409.727,
- -408.69, -407.627, -406.539, -405.427, -404.289, -403.127, -401.94,
- -400.729, -399.493, -398.233, -396.949, -395.641, -394.308, -392.952,
- -391.571, -390.167, -388.74, -387.288, -385.813, -384.315, -382.794,
- -381.249, -379.682, -378.091, -376.477, -374.841, -373.182, -371.501,
- -369.797, -368.07, -366.321, -364.545, -362.758, -360.943, -359.106,
- -357.247, -355.367, -353.465, -351.542, -349.597, -347.631, -345.644,
- -343.635, -341.606, -339.556, -337.485, -335.394, -333.282, -331.149,
- -328.996, -326.823, -324.63, -322.417, -320.183, -317.93, -315.658,
- -313.365, -311.053, -308.722, -306.372, -304.002, -301.613, -299.205,
- -296.779, -294.333, -291.869, -289.387, -286.886, -284.366, -281.829,
- -279.273, -276.7, -274.108, -271.499, -268.872, -266.228, -263.566,
- -260.887, -258.19, -255.477, -252.746, -249.999, -247.235, -244.454,
- -241.657, -238.843, -236.013, -233.167, -230.304, -227.426, -224.532,
- -221.622, -218.697, -215.756, -212.8, -209.828, -206.841, -203.84,
- -200.823, -197.792, -194.746, -191.685, -188.61, -185.521, -182.417,
- -179.3, -176.168, -173.023, -169.864, -166.691, -163.505, -160.306,
- -157.093, -153.867, -150.629, -147.377, -144.113, -140.836, -137.547,
- -134.246, -130.932, -127.606, -124.268, -120.919, -117.557, -114.185,
- -110.8, -107.405, -103.998, -100.58, -97.1516, -93.7122, -90.2621,
- -86.8015, -83.3305, -79.8493, -76.3579, -72.8566, -69.3454, -65.8245,
- -62.2941, -58.7542, -55.205, -51.6467, -48.0794, -44.5031, -40.9181,
- -37.3246, -33.7225, -30.1121, -26.4936, -22.867, -19.2325, -15.5902,
- -11.9404, -8.28305, -4.6184, -0.946567, 2.7323, 6.41805, 10.1105,
- 13.8096, 17.5151, 21.227, 24.9449, 28.6689, 32.3987, 36.1342,
- 39.8753, 43.6217, 47.3734, 51.1301, 54.8918, 58.6583, 62.4293,
- 66.2049, 69.9847, 73.7687, 77.5567, 81.3485, 85.144, 88.943,
- 92.7453, 96.5508, 100.359, 104.171, 107.985, 111.801, 115.62,
- 119.442, 123.265, 127.09, 130.917, 134.745, 138.574, 142.405,
- 146.237, 150.07, 153.903, 157.737, 161.571, 165.405, 169.239,
- 173.073, 176.906, 180.739, 184.571, 188.402, 192.232, 196.061,
- 199.888, 203.714, 207.537, 211.359, 215.178}};
+extern const std::vector> NegLinearIntTransposed;
+
+/**
+ * @brief Cubic spline with the \f$ J_b(\frac{m}{T}) \f$ for \f$ \frac{m}{T} < 0
+ * \f$
+ *
+ */
+extern const tk::spline JbosonNegativeSpline;
#endif /* INCLUDE_BSMPT_THERMALFUNCTIONS_NEGATIVEBOSONSPLINE_H_ */
diff --git a/src/ThermalFunctions/NegativeBosonSpline.cpp b/src/ThermalFunctions/NegativeBosonSpline.cpp
index 6d8677563..4f48d3276 100644
--- a/src/ThermalFunctions/NegativeBosonSpline.cpp
+++ b/src/ThermalFunctions/NegativeBosonSpline.cpp
@@ -1014,4 +1014,695 @@ const double NegLinearInt[3001][2] = {
{-2991, 180.7391523}, {-2992, 184.5712622}, {-2993, 188.4024214},
{-2994, 192.2324214}, {-2995, 196.0611014}, {-2996, 199.8882735},
{-2997, 203.7137417}, {-2998, 207.5373262}, {-2999, 211.3588207},
- {-3000, 215.1780691}};
\ No newline at end of file
+ {-3000, 215.1780691}};
+
+const std::vector> NegLinearIntTransposed = {
+ {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11,
+ 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23,
+ 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35,
+ 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
+ 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59,
+ 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71,
+ 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83,
+ 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95,
+ 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107,
+ 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119,
+ 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131,
+ 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143,
+ 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155,
+ 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167,
+ 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179,
+ 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191,
+ 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203,
+ 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215,
+ 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227,
+ 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239,
+ 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251,
+ 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263,
+ 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275,
+ 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287,
+ 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299,
+ 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311,
+ 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323,
+ 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335,
+ 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347,
+ 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359,
+ 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371,
+ 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383,
+ 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395,
+ 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407,
+ 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419,
+ 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431,
+ 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443,
+ 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455,
+ 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467,
+ 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479,
+ 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491,
+ 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503,
+ 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515,
+ 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527,
+ 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539,
+ 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551,
+ 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563,
+ 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575,
+ 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587,
+ 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599,
+ 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611,
+ 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623,
+ 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635,
+ 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647,
+ 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659,
+ 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671,
+ 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683,
+ 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695,
+ 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707,
+ 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719,
+ 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731,
+ 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743,
+ 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755,
+ 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767,
+ 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779,
+ 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791,
+ 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803,
+ 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815,
+ 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827,
+ 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839,
+ 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851,
+ 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863,
+ 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875,
+ 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887,
+ 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899,
+ 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911,
+ 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923,
+ 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935,
+ 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947,
+ 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959,
+ 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971,
+ 972, 973, 974, 975, 976, 977, 978, 979, 980, 981, 982, 983,
+ 984, 985, 986, 987, 988, 989, 990, 991, 992, 993, 994, 995,
+ 996, 997, 998, 999, 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007,
+ 1008, 1009, 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1017, 1018, 1019,
+ 1020, 1021, 1022, 1023, 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031,
+ 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039, 1040, 1041, 1042, 1043,
+ 1044, 1045, 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055,
+ 1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067,
+ 1068, 1069, 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077, 1078, 1079,
+ 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1088, 1089, 1090, 1091,
+ 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1099, 1100, 1101, 1102, 1103,
+ 1104, 1105, 1106, 1107, 1108, 1109, 1110, 1111, 1112, 1113, 1114, 1115,
+ 1116, 1117, 1118, 1119, 1120, 1121, 1122, 1123, 1124, 1125, 1126, 1127,
+ 1128, 1129, 1130, 1131, 1132, 1133, 1134, 1135, 1136, 1137, 1138, 1139,
+ 1140, 1141, 1142, 1143, 1144, 1145, 1146, 1147, 1148, 1149, 1150, 1151,
+ 1152, 1153, 1154, 1155, 1156, 1157, 1158, 1159, 1160, 1161, 1162, 1163,
+ 1164, 1165, 1166, 1167, 1168, 1169, 1170, 1171, 1172, 1173, 1174, 1175,
+ 1176, 1177, 1178, 1179, 1180, 1181, 1182, 1183, 1184, 1185, 1186, 1187,
+ 1188, 1189, 1190, 1191, 1192, 1193, 1194, 1195, 1196, 1197, 1198, 1199,
+ 1200, 1201, 1202, 1203, 1204, 1205, 1206, 1207, 1208, 1209, 1210, 1211,
+ 1212, 1213, 1214, 1215, 1216, 1217, 1218, 1219, 1220, 1221, 1222, 1223,
+ 1224, 1225, 1226, 1227, 1228, 1229, 1230, 1231, 1232, 1233, 1234, 1235,
+ 1236, 1237, 1238, 1239, 1240, 1241, 1242, 1243, 1244, 1245, 1246, 1247,
+ 1248, 1249, 1250, 1251, 1252, 1253, 1254, 1255, 1256, 1257, 1258, 1259,
+ 1260, 1261, 1262, 1263, 1264, 1265, 1266, 1267, 1268, 1269, 1270, 1271,
+ 1272, 1273, 1274, 1275, 1276, 1277, 1278, 1279, 1280, 1281, 1282, 1283,
+ 1284, 1285, 1286, 1287, 1288, 1289, 1290, 1291, 1292, 1293, 1294, 1295,
+ 1296, 1297, 1298, 1299, 1300, 1301, 1302, 1303, 1304, 1305, 1306, 1307,
+ 1308, 1309, 1310, 1311, 1312, 1313, 1314, 1315, 1316, 1317, 1318, 1319,
+ 1320, 1321, 1322, 1323, 1324, 1325, 1326, 1327, 1328, 1329, 1330, 1331,
+ 1332, 1333, 1334, 1335, 1336, 1337, 1338, 1339, 1340, 1341, 1342, 1343,
+ 1344, 1345, 1346, 1347, 1348, 1349, 1350, 1351, 1352, 1353, 1354, 1355,
+ 1356, 1357, 1358, 1359, 1360, 1361, 1362, 1363, 1364, 1365, 1366, 1367,
+ 1368, 1369, 1370, 1371, 1372, 1373, 1374, 1375, 1376, 1377, 1378, 1379,
+ 1380, 1381, 1382, 1383, 1384, 1385, 1386, 1387, 1388, 1389, 1390, 1391,
+ 1392, 1393, 1394, 1395, 1396, 1397, 1398, 1399, 1400, 1401, 1402, 1403,
+ 1404, 1405, 1406, 1407, 1408, 1409, 1410, 1411, 1412, 1413, 1414, 1415,
+ 1416, 1417, 1418, 1419, 1420, 1421, 1422, 1423, 1424, 1425, 1426, 1427,
+ 1428, 1429, 1430, 1431, 1432, 1433, 1434, 1435, 1436, 1437, 1438, 1439,
+ 1440, 1441, 1442, 1443, 1444, 1445, 1446, 1447, 1448, 1449, 1450, 1451,
+ 1452, 1453, 1454, 1455, 1456, 1457, 1458, 1459, 1460, 1461, 1462, 1463,
+ 1464, 1465, 1466, 1467, 1468, 1469, 1470, 1471, 1472, 1473, 1474, 1475,
+ 1476, 1477, 1478, 1479, 1480, 1481, 1482, 1483, 1484, 1485, 1486, 1487,
+ 1488, 1489, 1490, 1491, 1492, 1493, 1494, 1495, 1496, 1497, 1498, 1499,
+ 1500, 1501, 1502, 1503, 1504, 1505, 1506, 1507, 1508, 1509, 1510, 1511,
+ 1512, 1513, 1514, 1515, 1516, 1517, 1518, 1519, 1520, 1521, 1522, 1523,
+ 1524, 1525, 1526, 1527, 1528, 1529, 1530, 1531, 1532, 1533, 1534, 1535,
+ 1536, 1537, 1538, 1539, 1540, 1541, 1542, 1543, 1544, 1545, 1546, 1547,
+ 1548, 1549, 1550, 1551, 1552, 1553, 1554, 1555, 1556, 1557, 1558, 1559,
+ 1560, 1561, 1562, 1563, 1564, 1565, 1566, 1567, 1568, 1569, 1570, 1571,
+ 1572, 1573, 1574, 1575, 1576, 1577, 1578, 1579, 1580, 1581, 1582, 1583,
+ 1584, 1585, 1586, 1587, 1588, 1589, 1590, 1591, 1592, 1593, 1594, 1595,
+ 1596, 1597, 1598, 1599, 1600, 1601, 1602, 1603, 1604, 1605, 1606, 1607,
+ 1608, 1609, 1610, 1611, 1612, 1613, 1614, 1615, 1616, 1617, 1618, 1619,
+ 1620, 1621, 1622, 1623, 1624, 1625, 1626, 1627, 1628, 1629, 1630, 1631,
+ 1632, 1633, 1634, 1635, 1636, 1637, 1638, 1639, 1640, 1641, 1642, 1643,
+ 1644, 1645, 1646, 1647, 1648, 1649, 1650, 1651, 1652, 1653, 1654, 1655,
+ 1656, 1657, 1658, 1659, 1660, 1661, 1662, 1663, 1664, 1665, 1666, 1667,
+ 1668, 1669, 1670, 1671, 1672, 1673, 1674, 1675, 1676, 1677, 1678, 1679,
+ 1680, 1681, 1682, 1683, 1684, 1685, 1686, 1687, 1688, 1689, 1690, 1691,
+ 1692, 1693, 1694, 1695, 1696, 1697, 1698, 1699, 1700, 1701, 1702, 1703,
+ 1704, 1705, 1706, 1707, 1708, 1709, 1710, 1711, 1712, 1713, 1714, 1715,
+ 1716, 1717, 1718, 1719, 1720, 1721, 1722, 1723, 1724, 1725, 1726, 1727,
+ 1728, 1729, 1730, 1731, 1732, 1733, 1734, 1735, 1736, 1737, 1738, 1739,
+ 1740, 1741, 1742, 1743, 1744, 1745, 1746, 1747, 1748, 1749, 1750, 1751,
+ 1752, 1753, 1754, 1755, 1756, 1757, 1758, 1759, 1760, 1761, 1762, 1763,
+ 1764, 1765, 1766, 1767, 1768, 1769, 1770, 1771, 1772, 1773, 1774, 1775,
+ 1776, 1777, 1778, 1779, 1780, 1781, 1782, 1783, 1784, 1785, 1786, 1787,
+ 1788, 1789, 1790, 1791, 1792, 1793, 1794, 1795, 1796, 1797, 1798, 1799,
+ 1800, 1801, 1802, 1803, 1804, 1805, 1806, 1807, 1808, 1809, 1810, 1811,
+ 1812, 1813, 1814, 1815, 1816, 1817, 1818, 1819, 1820, 1821, 1822, 1823,
+ 1824, 1825, 1826, 1827, 1828, 1829, 1830, 1831, 1832, 1833, 1834, 1835,
+ 1836, 1837, 1838, 1839, 1840, 1841, 1842, 1843, 1844, 1845, 1846, 1847,
+ 1848, 1849, 1850, 1851, 1852, 1853, 1854, 1855, 1856, 1857, 1858, 1859,
+ 1860, 1861, 1862, 1863, 1864, 1865, 1866, 1867, 1868, 1869, 1870, 1871,
+ 1872, 1873, 1874, 1875, 1876, 1877, 1878, 1879, 1880, 1881, 1882, 1883,
+ 1884, 1885, 1886, 1887, 1888, 1889, 1890, 1891, 1892, 1893, 1894, 1895,
+ 1896, 1897, 1898, 1899, 1900, 1901, 1902, 1903, 1904, 1905, 1906, 1907,
+ 1908, 1909, 1910, 1911, 1912, 1913, 1914, 1915, 1916, 1917, 1918, 1919,
+ 1920, 1921, 1922, 1923, 1924, 1925, 1926, 1927, 1928, 1929, 1930, 1931,
+ 1932, 1933, 1934, 1935, 1936, 1937, 1938, 1939, 1940, 1941, 1942, 1943,
+ 1944, 1945, 1946, 1947, 1948, 1949, 1950, 1951, 1952, 1953, 1954, 1955,
+ 1956, 1957, 1958, 1959, 1960, 1961, 1962, 1963, 1964, 1965, 1966, 1967,
+ 1968, 1969, 1970, 1971, 1972, 1973, 1974, 1975, 1976, 1977, 1978, 1979,
+ 1980, 1981, 1982, 1983, 1984, 1985, 1986, 1987, 1988, 1989, 1990, 1991,
+ 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003,
+ 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015,
+ 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024, 2025, 2026, 2027,
+ 2028, 2029, 2030, 2031, 2032, 2033, 2034, 2035, 2036, 2037, 2038, 2039,
+ 2040, 2041, 2042, 2043, 2044, 2045, 2046, 2047, 2048, 2049, 2050, 2051,
+ 2052, 2053, 2054, 2055, 2056, 2057, 2058, 2059, 2060, 2061, 2062, 2063,
+ 2064, 2065, 2066, 2067, 2068, 2069, 2070, 2071, 2072, 2073, 2074, 2075,
+ 2076, 2077, 2078, 2079, 2080, 2081, 2082, 2083, 2084, 2085, 2086, 2087,
+ 2088, 2089, 2090, 2091, 2092, 2093, 2094, 2095, 2096, 2097, 2098, 2099,
+ 2100, 2101, 2102, 2103, 2104, 2105, 2106, 2107, 2108, 2109, 2110, 2111,
+ 2112, 2113, 2114, 2115, 2116, 2117, 2118, 2119, 2120, 2121, 2122, 2123,
+ 2124, 2125, 2126, 2127, 2128, 2129, 2130, 2131, 2132, 2133, 2134, 2135,
+ 2136, 2137, 2138, 2139, 2140, 2141, 2142, 2143, 2144, 2145, 2146, 2147,
+ 2148, 2149, 2150, 2151, 2152, 2153, 2154, 2155, 2156, 2157, 2158, 2159,
+ 2160, 2161, 2162, 2163, 2164, 2165, 2166, 2167, 2168, 2169, 2170, 2171,
+ 2172, 2173, 2174, 2175, 2176, 2177, 2178, 2179, 2180, 2181, 2182, 2183,
+ 2184, 2185, 2186, 2187, 2188, 2189, 2190, 2191, 2192, 2193, 2194, 2195,
+ 2196, 2197, 2198, 2199, 2200, 2201, 2202, 2203, 2204, 2205, 2206, 2207,
+ 2208, 2209, 2210, 2211, 2212, 2213, 2214, 2215, 2216, 2217, 2218, 2219,
+ 2220, 2221, 2222, 2223, 2224, 2225, 2226, 2227, 2228, 2229, 2230, 2231,
+ 2232, 2233, 2234, 2235, 2236, 2237, 2238, 2239, 2240, 2241, 2242, 2243,
+ 2244, 2245, 2246, 2247, 2248, 2249, 2250, 2251, 2252, 2253, 2254, 2255,
+ 2256, 2257, 2258, 2259, 2260, 2261, 2262, 2263, 2264, 2265, 2266, 2267,
+ 2268, 2269, 2270, 2271, 2272, 2273, 2274, 2275, 2276, 2277, 2278, 2279,
+ 2280, 2281, 2282, 2283, 2284, 2285, 2286, 2287, 2288, 2289, 2290, 2291,
+ 2292, 2293, 2294, 2295, 2296, 2297, 2298, 2299, 2300, 2301, 2302, 2303,
+ 2304, 2305, 2306, 2307, 2308, 2309, 2310, 2311, 2312, 2313, 2314, 2315,
+ 2316, 2317, 2318, 2319, 2320, 2321, 2322, 2323, 2324, 2325, 2326, 2327,
+ 2328, 2329, 2330, 2331, 2332, 2333, 2334, 2335, 2336, 2337, 2338, 2339,
+ 2340, 2341, 2342, 2343, 2344, 2345, 2346, 2347, 2348, 2349, 2350, 2351,
+ 2352, 2353, 2354, 2355, 2356, 2357, 2358, 2359, 2360, 2361, 2362, 2363,
+ 2364, 2365, 2366, 2367, 2368, 2369, 2370, 2371, 2372, 2373, 2374, 2375,
+ 2376, 2377, 2378, 2379, 2380, 2381, 2382, 2383, 2384, 2385, 2386, 2387,
+ 2388, 2389, 2390, 2391, 2392, 2393, 2394, 2395, 2396, 2397, 2398, 2399,
+ 2400, 2401, 2402, 2403, 2404, 2405, 2406, 2407, 2408, 2409, 2410, 2411,
+ 2412, 2413, 2414, 2415, 2416, 2417, 2418, 2419, 2420, 2421, 2422, 2423,
+ 2424, 2425, 2426, 2427, 2428, 2429, 2430, 2431, 2432, 2433, 2434, 2435,
+ 2436, 2437, 2438, 2439, 2440, 2441, 2442, 2443, 2444, 2445, 2446, 2447,
+ 2448, 2449, 2450, 2451, 2452, 2453, 2454, 2455, 2456, 2457, 2458, 2459,
+ 2460, 2461, 2462, 2463, 2464, 2465, 2466, 2467, 2468, 2469, 2470, 2471,
+ 2472, 2473, 2474, 2475, 2476, 2477, 2478, 2479, 2480, 2481, 2482, 2483,
+ 2484, 2485, 2486, 2487, 2488, 2489, 2490, 2491, 2492, 2493, 2494, 2495,
+ 2496, 2497, 2498, 2499, 2500, 2501, 2502, 2503, 2504, 2505, 2506, 2507,
+ 2508, 2509, 2510, 2511, 2512, 2513, 2514, 2515, 2516, 2517, 2518, 2519,
+ 2520, 2521, 2522, 2523, 2524, 2525, 2526, 2527, 2528, 2529, 2530, 2531,
+ 2532, 2533, 2534, 2535, 2536, 2537, 2538, 2539, 2540, 2541, 2542, 2543,
+ 2544, 2545, 2546, 2547, 2548, 2549, 2550, 2551, 2552, 2553, 2554, 2555,
+ 2556, 2557, 2558, 2559, 2560, 2561, 2562, 2563, 2564, 2565, 2566, 2567,
+ 2568, 2569, 2570, 2571, 2572, 2573, 2574, 2575, 2576, 2577, 2578, 2579,
+ 2580, 2581, 2582, 2583, 2584, 2585, 2586, 2587, 2588, 2589, 2590, 2591,
+ 2592, 2593, 2594, 2595, 2596, 2597, 2598, 2599, 2600, 2601, 2602, 2603,
+ 2604, 2605, 2606, 2607, 2608, 2609, 2610, 2611, 2612, 2613, 2614, 2615,
+ 2616, 2617, 2618, 2619, 2620, 2621, 2622, 2623, 2624, 2625, 2626, 2627,
+ 2628, 2629, 2630, 2631, 2632, 2633, 2634, 2635, 2636, 2637, 2638, 2639,
+ 2640, 2641, 2642, 2643, 2644, 2645, 2646, 2647, 2648, 2649, 2650, 2651,
+ 2652, 2653, 2654, 2655, 2656, 2657, 2658, 2659, 2660, 2661, 2662, 2663,
+ 2664, 2665, 2666, 2667, 2668, 2669, 2670, 2671, 2672, 2673, 2674, 2675,
+ 2676, 2677, 2678, 2679, 2680, 2681, 2682, 2683, 2684, 2685, 2686, 2687,
+ 2688, 2689, 2690, 2691, 2692, 2693, 2694, 2695, 2696, 2697, 2698, 2699,
+ 2700, 2701, 2702, 2703, 2704, 2705, 2706, 2707, 2708, 2709, 2710, 2711,
+ 2712, 2713, 2714, 2715, 2716, 2717, 2718, 2719, 2720, 2721, 2722, 2723,
+ 2724, 2725, 2726, 2727, 2728, 2729, 2730, 2731, 2732, 2733, 2734, 2735,
+ 2736, 2737, 2738, 2739, 2740, 2741, 2742, 2743, 2744, 2745, 2746, 2747,
+ 2748, 2749, 2750, 2751, 2752, 2753, 2754, 2755, 2756, 2757, 2758, 2759,
+ 2760, 2761, 2762, 2763, 2764, 2765, 2766, 2767, 2768, 2769, 2770, 2771,
+ 2772, 2773, 2774, 2775, 2776, 2777, 2778, 2779, 2780, 2781, 2782, 2783,
+ 2784, 2785, 2786, 2787, 2788, 2789, 2790, 2791, 2792, 2793, 2794, 2795,
+ 2796, 2797, 2798, 2799, 2800, 2801, 2802, 2803, 2804, 2805, 2806, 2807,
+ 2808, 2809, 2810, 2811, 2812, 2813, 2814, 2815, 2816, 2817, 2818, 2819,
+ 2820, 2821, 2822, 2823, 2824, 2825, 2826, 2827, 2828, 2829, 2830, 2831,
+ 2832, 2833, 2834, 2835, 2836, 2837, 2838, 2839, 2840, 2841, 2842, 2843,
+ 2844, 2845, 2846, 2847, 2848, 2849, 2850, 2851, 2852, 2853, 2854, 2855,
+ 2856, 2857, 2858, 2859, 2860, 2861, 2862, 2863, 2864, 2865, 2866, 2867,
+ 2868, 2869, 2870, 2871, 2872, 2873, 2874, 2875, 2876, 2877, 2878, 2879,
+ 2880, 2881, 2882, 2883, 2884, 2885, 2886, 2887, 2888, 2889, 2890, 2891,
+ 2892, 2893, 2894, 2895, 2896, 2897, 2898, 2899, 2900, 2901, 2902, 2903,
+ 2904, 2905, 2906, 2907, 2908, 2909, 2910, 2911, 2912, 2913, 2914, 2915,
+ 2916, 2917, 2918, 2919, 2920, 2921, 2922, 2923, 2924, 2925, 2926, 2927,
+ 2928, 2929, 2930, 2931, 2932, 2933, 2934, 2935, 2936, 2937, 2938, 2939,
+ 2940, 2941, 2942, 2943, 2944, 2945, 2946, 2947, 2948, 2949, 2950, 2951,
+ 2952, 2953, 2954, 2955, 2956, 2957, 2958, 2959, 2960, 2961, 2962, 2963,
+ 2964, 2965, 2966, 2967, 2968, 2969, 2970, 2971, 2972, 2973, 2974, 2975,
+ 2976, 2977, 2978, 2979, 2980, 2981, 2982, 2983, 2984, 2985, 2986, 2987,
+ 2988, 2989, 2990, 2991, 2992, 2993, 2994, 2995, 2996, 2997, 2998, 2999,
+ 3000},
+ {-2.16465, -2.81845, -3.22285, -3.42892, -3.46485, -3.35103, -3.10376,
+ -2.73681, -2.26226, -1.691, -1.03302, -0.297651, 0.506268, 1.37029,
+ 2.28626, 3.24622, 4.24234, 5.26689, 6.31214, 7.37034, 8.43366,
+ 9.4941, 10.5435, 11.5734, 12.575, 13.5392, 14.4561, 15.3155,
+ 16.1061, 16.8158, 17.4311, 17.9371, 18.3165, 18.5494, 18.612,
+ 18.4748, 18.0994, 17.4327, 16.3916, 14.8107, 12.1662, 9.29873,
+ 6.55297, 3.92694, 1.4187, -0.973639, -3.25195, -5.41807, -7.47383,
+ -9.42101, -11.2614, -12.9967, -14.6288, -16.1592, -17.5897, -18.922,
+ -20.1578, -21.2986, -22.3462, -23.3021, -24.1679, -24.9454, -25.636,
+ -26.2413, -26.7629, -27.2024, -27.5613, -27.8411, -28.0435, -28.1699,
+ -28.2218, -28.2008, -28.1085, -27.9462, -27.7156, -27.4181, -27.0553,
+ -26.6287, -26.1397, -25.5899, -24.9808, -24.3138, -23.5906, -22.8126,
+ -21.9814, -21.0984, -20.1651, -19.1832, -18.1542, -17.0795, -15.9608,
+ -14.7995, -13.5973, -12.3558, -11.0764, -9.76091, -8.4108, -7.02773,
+ -5.61332, -4.16922, -2.6971, -1.19864, 0.324478, 1.87053, 3.43778,
+ 5.02448, 6.62884, 8.24907, 9.88334, 11.5298, 13.1865, 14.8517,
+ 16.5232, 18.1992, 19.8777, 21.5565, 23.2336, 24.9069, 26.5741,
+ 28.2329, 29.8812, 31.5165, 33.1364, 34.7384, 36.32, 37.8785,
+ 39.4112, 40.9152, 42.3878, 43.8257, 45.226, 46.5852, 47.9001,
+ 49.167, 50.3822, 51.5418, 52.6416, 53.6773, 54.6443, 55.5376,
+ 56.3519, 57.0818, 57.721, 58.263, 58.7007, 59.0263, 59.2311,
+ 59.3054, 59.2383, 59.0176, 58.6289, 58.0554, 57.2767, 56.268,
+ 54.9967, 53.4189, 51.4689, 49.0315, 45.7413, 41.6262, 37.6,
+ 33.6623, 29.8123, 26.0495, 22.3732, 18.7829, 15.2779, 11.8576,
+ 8.52136, 5.26863, 2.09877, -0.988822, -3.99476, -6.91965, -9.76409,
+ -12.5287, -15.2141, -17.8209, -20.3496, -22.8009, -25.1754, -27.4738,
+ -29.6965, -31.8442, -33.9175, -35.917, -37.8434, -39.6971, -41.4789,
+ -43.1893, -44.8289, -46.3983, -47.8981, -49.329, -50.6915, -51.9863,
+ -53.2139, -54.3749, -55.47, -56.4998, -57.4648, -58.3657, -59.203,
+ -59.9774, -60.6896, -61.34, -61.9293, -62.4582, -62.9272, -63.3369,
+ -63.688, -63.981, -64.2167, -64.3956, -64.5182, -64.5854, -64.5975,
+ -64.5554, -64.4596, -64.3107, -64.1094, -63.8563, -63.5519, -63.1971,
+ -62.7923, -62.3383, -61.8356, -61.2849, -60.6868, -60.042, -59.3512,
+ -58.6149, -57.8339, -57.0087, -56.1401, -55.2287, -54.2751, -53.2801,
+ -52.2443, -51.1683, -50.0528, -48.8986, -47.7062, -46.4764, -45.2099,
+ -43.9073, -42.5694, -41.1968, -39.7903, -38.3505, -36.8781, -35.3739,
+ -33.8387, -32.273, -30.6777, -29.0534, -27.401, -25.7211, -24.0146,
+ -22.2821, -20.5244, -18.7422, -16.9365, -15.1079, -13.2572, -11.3852,
+ -9.49267, -7.58049, -5.64942, -3.70029, -1.73393, 0.248825, 2.24714,
+ 4.26016, 6.28703, 8.32687, 10.3788, 12.442, 14.5154, 16.5983,
+ 18.6896, 20.7885, 22.894, 25.0052, 27.1211, 29.2406, 31.3629,
+ 33.4869, 35.6116, 37.7359, 39.8589, 41.9794, 44.0964, 46.2087,
+ 48.3152, 50.4149, 52.5065, 54.5888, 56.6607, 58.721, 60.7684,
+ 62.8015, 64.8193, 66.8202, 68.803, 70.7663, 72.7086, 74.6286,
+ 76.5248, 78.3955, 80.2394, 82.0547, 83.84, 85.5934, 87.3132,
+ 88.9978, 90.6453, 92.2535, 93.8209, 95.3453, 96.8246, 98.2567,
+ 99.6393, 100.97, 102.247, 103.467, 104.627, 105.726, 106.759,
+ 107.725, 108.619, 109.44, 110.182, 110.843, 111.418, 111.903,
+ 112.294, 112.587, 112.775, 112.853, 112.816, 112.657, 112.368,
+ 111.941, 111.368, 110.639, 109.742, 108.664, 107.389, 105.9,
+ 104.173, 102.179, 99.881, 97.223, 94.1156, 90.3639, 85.4774,
+ 80.4874, 75.5704, 70.7263, 65.9546, 61.255, 56.6273, 52.0712,
+ 47.5862, 43.172, 38.8285, 34.5551, 30.3517, 26.2179, 22.1533,
+ 18.1577, 14.2307, 10.372, 6.58129, 2.85824, -0.79747, -4.38616,
+ -7.90816, -11.3638, -14.7534, -18.0772, -21.3357, -24.529, -27.6577,
+ -30.7218, -33.7219, -36.6582, -39.5311, -42.3408, -45.0877, -47.7721,
+ -50.3944, -52.9548, -55.4538, -57.8916, -60.2677, -62.5849, -64.8412,
+ -67.0375, -69.1744, -71.252, -73.2708, -75.2311, -77.1331, -78.9773,
+ -80.7639, -82.4933, -84.1658, -85.7818, -87.3416, -88.8455, -90.2939,
+ -91.687, -93.0253, -94.3091, -95.5387, -96.7143, -97.8365, -98.9056,
+ -99.9217, -100.885, -101.797, -102.657, -103.465, -104.222, -104.928,
+ -105.584, -106.19, -106.746, -107.253, -107.71, -108.119, -108.48,
+ -108.792, -109.057, -109.275, -109.445, -109.569, -109.647, -109.679,
+ -109.665, -109.606, -109.503, -109.355, -109.162, -108.926, -108.647,
+ -108.325, -107.96, -107.553, -107.103, -106.613, -106.081, -105.508,
+ -104.895, -104.242, -103.549, -102.817, -102.046, -101.236, -100.388,
+ -99.5027, -98.5796, -97.6195, -96.6228, -95.5898, -94.5209, -93.4165,
+ -92.277, -91.1028, -89.8944, -88.6519, -87.376, -86.067, -84.7252,
+ -83.3511, -81.9451, -80.5076, -79.039, -77.5397, -76.0102, -74.4507,
+ -72.8618, -71.2439, -69.5974, -67.9227, -66.2202, -64.4903, -62.7336,
+ -60.9503, -59.141, -57.3061, -55.446, -53.5612, -51.652, -49.719,
+ -47.7626, -45.7833, -43.7814, -41.7575, -39.7121, -37.6454, -35.5581,
+ -33.4507, -31.3234, -29.177, -27.0117, -24.8282, -22.6268, -20.4081,
+ -18.1726, -15.9207, -13.653, -11.3699, -9.072, -6.75974, -4.43366,
+ -2.09427, 0.257911, 2.62236, 4.99854, 7.38592, 9.78397, 12.1921,
+ 14.6099, 17.0367, 19.4719, 21.915, 24.3655, 26.8228, 29.2862,
+ 31.7552, 34.2293, 36.7077, 39.19, 41.6755, 44.1637, 46.6537,
+ 49.1452, 51.6373, 54.1295, 56.6212, 59.1116, 61.6001, 64.0861,
+ 66.5688, 69.0476, 71.5218, 73.9906, 76.4534, 78.9094, 81.3579,
+ 83.7982, 86.2295, 88.651, 91.0619, 93.4615, 95.849, 98.2235,
+ 100.584, 102.93, 105.261, 107.576, 109.873, 112.152, 114.412,
+ 116.652, 118.871, 121.069, 123.243, 125.394, 127.52, 129.62,
+ 131.693, 133.738, 135.755, 137.74, 139.695, 141.616, 143.504,
+ 145.357, 147.174, 148.953, 150.693, 152.393, 154.051, 155.666,
+ 157.236, 158.76, 160.236, 161.663, 163.038, 164.361, 165.629,
+ 166.841, 167.994, 169.087, 170.117, 171.082, 171.981, 172.81,
+ 173.567, 174.25, 174.856, 175.382, 175.826, 176.183, 176.451,
+ 176.626, 176.705, 176.683, 176.557, 176.321, 175.971, 175.502,
+ 174.907, 174.181, 173.317, 172.307, 171.142, 169.814, 168.311,
+ 166.62, 164.729, 162.619, 160.269, 157.653, 154.737, 151.473,
+ 147.787, 143.539, 138.236, 132.442, 126.711, 121.044, 115.441,
+ 109.9, 104.423, 99.0076, 93.6551, 88.3649, 83.1368, 77.9705,
+ 72.8659, 67.8228, 62.841, 57.9202, 53.0603, 48.2611, 43.5223,
+ 38.8437, 34.2252, 29.6666, 25.1675, 20.7279, 16.3476, 12.0262,
+ 7.76365, 3.55971, -0.585837, -4.67319, -8.70255, -12.6741, -16.5881,
+ -20.4448, -24.2443, -27.9868, -31.6726, -35.3019, -38.8748, -42.3916,
+ -45.8526, -49.2578, -52.6075, -55.902, -59.1413, -62.3259, -65.4557,
+ -68.5312, -71.5524, -74.5196, -77.433, -80.2928, -83.0992, -85.8525,
+ -88.5528, -91.2004, -93.7954, -96.3381, -98.8288, -101.268, -103.655,
+ -105.99, -108.275, -110.508, -112.69, -114.822, -116.904, -118.935,
+ -120.917, -122.849, -124.731, -126.564, -128.348, -130.083, -131.769,
+ -133.407, -134.997, -136.539, -138.033, -139.48, -140.879, -142.231,
+ -143.536, -144.795, -146.007, -147.173, -148.294, -149.368, -150.397,
+ -151.38, -152.319, -153.213, -154.062, -154.866, -155.627, -156.343,
+ -157.016, -157.646, -158.232, -158.775, -159.276, -159.734, -160.149,
+ -160.523, -160.854, -161.144, -161.393, -161.6, -161.767, -161.893,
+ -161.978, -162.024, -162.029, -161.995, -161.921, -161.808, -161.656,
+ -161.465, -161.235, -160.967, -160.662, -160.318, -159.937, -159.519,
+ -159.063, -158.571, -158.042, -157.477, -156.876, -156.238, -155.566,
+ -154.858, -154.115, -153.337, -152.524, -151.677, -150.796, -149.882,
+ -148.934, -147.952, -146.937, -145.89, -144.81, -143.698, -142.554,
+ -141.378, -140.17, -138.932, -137.662, -136.362, -135.031, -133.67,
+ -132.279, -130.859, -129.409, -127.93, -126.423, -124.887, -123.322,
+ -121.73, -120.109, -118.462, -116.787, -115.085, -113.357, -111.603,
+ -109.822, -108.016, -106.184, -104.327, -102.445, -100.539, -98.6078,
+ -96.653, -94.6745, -92.6725, -90.6473, -88.5993, -86.5288, -84.436,
+ -82.3213, -80.1849, -78.0272, -75.8485, -73.649, -71.4291, -69.189,
+ -66.9292, -64.6499, -62.3514, -60.0341, -57.6981, -55.344, -52.972,
+ -50.5824, -48.1755, -45.7517, -43.3113, -40.8547, -38.382, -35.8938,
+ -33.3903, -30.8719, -28.3389, -25.7916, -23.2304, -20.6557, -18.0677,
+ -15.4669, -12.8535, -10.228, -7.59073, -4.94198, -2.28216, 0.388381,
+ 3.06927, 5.76014, 8.46062, 11.1703, 13.8889, 16.616, 19.3511,
+ 22.094, 24.8442, 27.6013, 30.3649, 33.1348, 35.9103, 38.6912,
+ 41.477, 44.2673, 47.0618, 49.8599, 52.6614, 55.4656, 58.2723,
+ 61.081, 63.8913, 66.7027, 69.5147, 72.327, 75.1391, 77.9505,
+ 80.7608, 83.5694, 86.3761, 89.1802, 91.9813, 94.7788, 97.5725,
+ 100.362, 103.146, 105.925, 108.697, 111.464, 114.223, 116.975,
+ 119.718, 122.453, 125.179, 127.896, 130.602, 133.297, 135.981,
+ 138.653, 141.312, 143.958, 146.591, 149.209, 151.812, 154.4,
+ 156.971, 159.526, 162.063, 164.582, 167.082, 169.563, 172.024,
+ 174.463, 176.881, 179.277, 181.65, 183.999, 186.323, 188.622,
+ 190.895, 193.141, 195.359, 197.549, 199.709, 201.839, 203.938,
+ 206.005, 208.039, 210.039, 212.004, 213.933, 215.826, 217.68,
+ 219.496, 221.272, 223.007, 224.7, 226.35, 227.955, 229.515,
+ 231.028, 232.492, 233.907, 235.272, 236.584, 237.843, 239.047,
+ 240.194, 241.283, 242.312, 243.28, 244.185, 245.025, 245.799,
+ 246.504, 247.138, 247.699, 248.186, 248.595, 248.925, 249.173,
+ 249.336, 249.412, 249.398, 249.29, 249.087, 248.783, 248.376,
+ 247.862, 247.236, 246.495, 245.634, 244.646, 243.528, 242.273,
+ 240.874, 239.324, 237.615, 235.738, 233.682, 231.436, 228.986,
+ 226.316, 223.406, 220.232, 216.762, 212.954, 208.744, 204.02,
+ 198.451, 191.954, 185.514, 179.131, 172.804, 166.535, 160.322,
+ 154.165, 148.065, 142.021, 136.033, 130.101, 124.225, 118.404,
+ 112.638, 106.929, 101.274, 95.674, 90.1292, 84.639, 79.2035,
+ 73.8225, 68.4957, 63.2231, 58.0046, 52.8399, 47.729, 42.6716,
+ 37.6677, 32.7171, 27.8196, 22.9752, 18.1836, 13.4447, 8.7584,
+ 4.12452, -0.457087, -4.98656, -9.46405, -13.8897, -18.2637, -22.5861,
+ -26.8571, -31.0769, -35.2456, -39.3633, -43.4302, -47.4465, -51.4122,
+ -55.3276, -59.1928, -63.0079, -66.7731, -70.4886, -74.1544, -77.7708,
+ -81.3378, -84.8557, -88.3246, -91.7446, -95.1159, -98.4386, -101.713,
+ -104.939, -108.117, -111.247, -114.329, -117.364, -120.351, -123.29,
+ -126.183, -129.028, -131.827, -134.579, -137.284, -139.943, -142.555,
+ -145.122, -147.642, -150.117, -152.546, -154.929, -157.267, -159.56,
+ -161.808, -164.011, -166.17, -168.283, -170.353, -172.378, -174.359,
+ -176.296, -178.189, -180.039, -181.845, -183.608, -185.327, -187.004,
+ -188.638, -190.229, -191.778, -193.285, -194.749, -196.171, -197.551,
+ -198.89, -200.187, -201.443, -202.657, -203.83, -204.963, -206.055,
+ -207.106, -208.117, -209.087, -210.018, -210.908, -211.759, -212.571,
+ -213.342, -214.075, -214.769, -215.423, -216.039, -216.616, -217.155,
+ -217.656, -218.118, -218.543, -218.93, -219.279, -219.591, -219.866,
+ -220.104, -220.304, -220.468, -220.596, -220.687, -220.742, -220.761,
+ -220.744, -220.691, -220.603, -220.479, -220.321, -220.127, -219.898,
+ -219.635, -219.338, -219.006, -218.64, -218.24, -217.806, -217.339,
+ -216.839, -216.305, -215.738, -215.138, -214.506, -213.841, -213.144,
+ -212.414, -211.653, -210.86, -210.036, -209.18, -208.292, -207.374,
+ -206.425, -205.445, -204.435, -203.395, -202.324, -201.224, -200.094,
+ -198.934, -197.745, -196.527, -195.279, -194.003, -192.699, -191.366,
+ -190.005, -188.616, -187.199, -185.755, -184.283, -182.784, -181.257,
+ -179.705, -178.125, -176.519, -174.887, -173.229, -171.544, -169.835,
+ -168.1, -166.339, -164.554, -162.744, -160.909, -159.05, -157.166,
+ -155.259, -153.328, -151.373, -149.395, -147.394, -145.37, -143.323,
+ -141.253, -139.162, -137.048, -134.912, -132.754, -130.576, -128.376,
+ -126.154, -123.912, -121.65, -119.367, -117.064, -114.741, -112.399,
+ -110.036, -107.655, -105.255, -102.836, -100.398, -97.9419, -95.4676,
+ -92.9756, -90.4659, -87.9388, -85.3945, -82.8333, -80.2553, -77.6609,
+ -75.0503, -72.4236, -69.7812, -67.1233, -64.4501, -61.7619, -59.0588,
+ -56.3413, -53.6094, -50.8636, -48.1039, -45.3306, -42.5441, -39.7445,
+ -36.9322, -34.1073, -31.2702, -28.421, -25.5601, -22.6876, -19.804,
+ -16.9094, -14.0041, -11.0883, -8.16242, -5.22661, -2.28118, 0.6736,
+ 3.63746, 6.61011, 9.59128, 12.5807, 15.5781, 18.5831, 21.5956,
+ 24.6151, 27.6415, 30.6745, 33.7135, 36.7586, 39.8093, 42.8654,
+ 45.9265, 48.9924, 52.0627, 55.1371, 58.2154, 61.2972, 64.3822,
+ 67.4701, 70.5606, 73.6533, 76.748, 79.8443, 82.9418, 86.0404,
+ 89.1395, 92.239, 95.3384, 98.4375, 101.536, 104.633, 107.729,
+ 110.823, 113.915, 117.004, 120.091, 123.175, 126.255, 129.331,
+ 132.402, 135.469, 138.532, 141.588, 144.639, 147.684, 150.722,
+ 153.753, 156.776, 159.792, 162.8, 165.799, 168.789, 171.77,
+ 174.741, 177.702, 180.651, 183.59, 186.517, 189.432, 192.335,
+ 195.225, 198.101, 200.964, 203.812, 206.645, 209.463, 212.265,
+ 215.051, 217.82, 220.572, 223.306, 226.022, 228.719, 231.396,
+ 234.054, 236.691, 239.307, 241.902, 244.475, 247.024, 249.551,
+ 252.053, 254.531, 256.984, 259.411, 261.812, 264.186, 266.532,
+ 268.849, 271.138, 273.397, 275.626, 277.823, 279.989, 282.122,
+ 284.222, 286.288, 288.318, 290.314, 292.273, 294.194, 296.078,
+ 297.922, 299.727, 301.491, 303.213, 304.893, 306.529, 308.121,
+ 309.667, 311.167, 312.619, 314.023, 315.377, 316.68, 317.931,
+ 319.129, 320.272, 321.36, 322.39, 323.363, 324.276, 325.127,
+ 325.916, 326.641, 327.301, 327.893, 328.416, 328.868, 329.248,
+ 329.554, 329.784, 329.935, 330.006, 329.994, 329.897, 329.713,
+ 329.439, 329.073, 328.611, 328.051, 327.39, 326.624, 325.75,
+ 324.764, 323.662, 322.44, 321.094, 319.617, 318.006, 316.253,
+ 314.353, 312.299, 310.082, 307.695, 305.126, 302.365, 299.399,
+ 296.212, 292.785, 289.096, 285.116, 280.804, 276.106, 270.926,
+ 265.05, 258.031, 250.953, 243.928, 236.955, 230.034, 223.165,
+ 216.348, 209.582, 202.868, 196.206, 189.594, 183.034, 176.525,
+ 170.067, 163.66, 157.304, 150.998, 144.744, 138.539, 132.385,
+ 126.281, 120.228, 114.224, 108.27, 102.367, 96.5125, 90.708,
+ 84.953, 79.2474, 73.5911, 67.9839, 62.4258, 56.9167, 51.4565,
+ 46.0449, 40.682, 35.3677, 30.1017, 24.884, 19.7145, 14.5931,
+ 9.51967, 4.49408, -0.483758, -5.41396, -10.2966, -15.1319, -19.9199,
+ -24.6607, -29.3543, -34.0011, -38.601, -43.1541, -47.6606, -52.1206,
+ -56.5341, -60.9014, -65.2225, -69.4975, -73.7266, -77.9098, -82.0473,
+ -86.1392, -90.1855, -94.1865, -98.1422, -102.053, -105.918, -109.739,
+ -113.514, -117.245, -120.932, -124.574, -128.171, -131.725, -135.234,
+ -138.699, -142.12, -145.498, -148.832, -152.122, -155.369, -158.572,
+ -161.732, -164.85, -167.924, -170.955, -173.944, -176.89, -179.793,
+ -182.654, -185.473, -188.249, -190.984, -193.677, -196.327, -198.937,
+ -201.504, -204.03, -206.515, -208.959, -211.361, -213.723, -216.043,
+ -218.323, -220.563, -222.761, -224.92, -227.038, -229.116, -231.154,
+ -233.152, -235.111, -237.029, -238.909, -240.748, -242.549, -244.31,
+ -246.032, -247.716, -249.36, -250.966, -252.534, -254.063, -255.553,
+ -257.006, -258.42, -259.796, -261.135, -262.436, -263.699, -264.925,
+ -266.114, -267.265, -268.38, -269.457, -270.498, -271.502, -272.469,
+ -273.4, -274.294, -275.153, -275.975, -276.762, -277.512, -278.227,
+ -278.907, -279.551, -280.16, -280.733, -281.272, -281.776, -282.244,
+ -282.679, -283.079, -283.444, -283.775, -284.072, -284.335, -284.564,
+ -284.76, -284.922, -285.05, -285.145, -285.207, -285.236, -285.232,
+ -285.195, -285.125, -285.023, -284.889, -284.722, -284.523, -284.292,
+ -284.029, -283.735, -283.409, -283.051, -282.662, -282.242, -281.791,
+ -281.309, -280.797, -280.253, -279.68, -279.075, -278.441, -277.777,
+ -277.082, -276.358, -275.604, -274.821, -274.008, -273.166, -272.295,
+ -271.395, -270.467, -269.509, -268.523, -267.509, -266.466, -265.396,
+ -264.297, -263.171, -262.017, -260.835, -259.626, -258.39, -257.127,
+ -255.836, -254.519, -253.176, -251.806, -250.409, -248.987, -247.538,
+ -246.064, -244.563, -243.037, -241.486, -239.91, -238.308, -236.681,
+ -235.03, -233.353, -231.653, -229.927, -228.178, -226.405, -224.607,
+ -222.786, -220.942, -219.074, -217.182, -215.268, -213.33, -211.37,
+ -209.387, -207.381, -205.353, -203.303, -201.231, -199.137, -197.022,
+ -194.885, -192.726, -190.547, -188.346, -186.124, -183.882, -181.619,
+ -179.336, -177.032, -174.709, -172.365, -170.002, -167.619, -165.217,
+ -162.796, -160.356, -157.897, -155.419, -152.922, -150.407, -147.874,
+ -145.323, -142.755, -140.168, -137.564, -134.943, -132.305, -129.649,
+ -126.977, -124.288, -121.583, -118.862, -116.125, -113.371, -110.602,
+ -107.818, -105.018, -102.203, -99.3733, -96.5286, -93.6694, -90.7957,
+ -87.9079, -85.006, -82.0904, -79.161, -76.2183, -73.2623, -70.2932,
+ -67.3113, -64.3167, -61.3096, -58.2902, -55.2588, -52.2155, -49.1604,
+ -46.094, -43.0162, -39.9273, -36.8276, -33.7172, -30.5963, -27.4652,
+ -24.324, -21.1729, -18.0122, -14.8421, -11.6628, -8.4744, -5.27724,
+ -2.07151, 1.1426, 4.36486, 7.59506, 10.833, 14.0784, 17.3311,
+ 20.5908, 23.8574, 27.1306, 30.4102, 33.6959, 36.9876, 40.285,
+ 43.5878, 46.8959, 50.209, 53.5269, 56.8493, 60.176, 63.5068,
+ 66.8414, 70.1796, 73.5211, 76.8657, 80.2132, 83.5633, 86.9158,
+ 90.2703, 93.6267, 96.9847, 100.344, 103.705, 107.066, 110.428,
+ 113.79, 117.152, 120.514, 123.876, 127.237, 130.596, 133.955,
+ 137.312, 140.667, 144.02, 147.37, 150.718, 154.063, 157.405,
+ 160.743, 164.078, 167.408, 170.734, 174.055, 177.371, 180.682,
+ 183.987, 187.286, 190.579, 193.865, 197.145, 200.418, 203.683,
+ 206.94, 210.189, 213.429, 216.661, 219.884, 223.097, 226.3,
+ 229.494, 232.676, 235.848, 239.009, 242.158, 245.295, 248.42,
+ 251.533, 254.632, 257.718, 260.79, 263.849, 266.892, 269.921,
+ 272.934, 275.932, 278.914, 281.879, 284.827, 287.758, 290.672,
+ 293.567, 296.443, 299.301, 302.139, 304.957, 307.755, 310.532,
+ 313.287, 316.021, 318.733, 321.422, 324.088, 326.73, 329.349,
+ 331.942, 334.511, 337.053, 339.57, 342.059, 344.522, 346.957,
+ 349.363, 351.74, 354.088, 356.406, 358.693, 360.949, 363.173,
+ 365.366, 367.523, 369.647, 371.738, 373.793, 375.812, 377.795,
+ 379.741, 381.649, 383.518, 385.348, 387.138, 388.887, 390.595,
+ 392.26, 393.882, 395.46, 396.993, 398.48, 399.921, 401.314,
+ 402.659, 403.954, 405.199, 406.392, 407.533, 408.621, 409.654,
+ 410.632, 411.552, 412.415, 413.219, 413.962, 414.644, 415.263,
+ 415.818, 416.307, 416.729, 417.082, 417.365, 417.577, 417.716,
+ 417.779, 417.766, 417.674, 417.502, 417.247, 416.908, 416.482,
+ 415.967, 415.361, 414.661, 413.865, 412.97, 411.972, 410.87,
+ 409.659, 408.336, 406.898, 405.341, 403.66, 401.851, 399.91,
+ 397.83, 395.606, 393.233, 390.702, 388.007, 385.166, 382.087,
+ 378.842, 375.39, 371.717, 367.806, 363.633, 359.172, 354.386,
+ 349.223, 343.601, 337.35, 329.951, 322.291, 314.68, 307.117,
+ 299.603, 292.137, 284.718, 277.348, 270.026, 262.751, 255.524,
+ 248.345, 241.213, 234.129, 227.093, 220.103, 213.161, 206.266,
+ 199.418, 192.617, 185.863, 179.156, 172.495, 165.881, 159.314,
+ 152.793, 146.318, 139.89, 133.508, 127.172, 120.882, 114.639,
+ 108.441, 102.288, 96.1817, 90.1207, 84.1053, 78.1352, 72.2106,
+ 66.3312, 60.497, 54.7078, 48.9637, 43.2645, 37.6101, 32.0004,
+ 26.4354, 20.915, 15.439, 10.0075, 4.62023, -0.722813, -6.02172,
+ -11.2766, -16.4875, -21.6546, -26.7778, -31.8574, -36.8934, -41.8859,
+ -46.8349, -51.7406, -56.6031, -61.4224, -66.1986, -70.9318, -75.6222,
+ -80.2697, -84.8746, -89.4368, -93.9565, -98.4337, -102.869, -107.261,
+ -111.612, -115.92, -120.186, -124.411, -128.593, -132.734, -136.833,
+ -140.891, -144.907, -148.882, -152.816, -156.708, -160.56, -164.37,
+ -168.139, -171.868, -175.556, -179.203, -182.81, -186.376, -189.902,
+ -193.387, -196.833, -200.238, -203.603, -206.929, -210.214, -213.46,
+ -216.667, -219.833, -222.961, -226.049, -229.097, -232.107, -235.077,
+ -238.009, -240.902, -243.755, -246.571, -249.347, -252.085, -254.785,
+ -257.446, -260.069, -262.654, -265.201, -267.71, -270.181, -272.615,
+ -275.011, -277.369, -279.69, -281.973, -284.219, -286.428, -288.6,
+ -290.735, -292.833, -294.894, -296.919, -298.907, -300.858, -302.774,
+ -304.652, -306.495, -308.301, -310.072, -311.806, -313.505, -315.168,
+ -316.795, -318.387, -319.944, -321.465, -322.951, -324.402, -325.817,
+ -327.198, -328.544, -329.855, -331.132, -332.374, -333.582, -334.755,
+ -335.894, -336.999, -338.07, -339.107, -340.11, -341.08, -342.016,
+ -342.918, -343.787, -344.623, -345.425, -346.194, -346.931, -347.634,
+ -348.304, -348.942, -349.547, -350.12, -350.66, -351.168, -351.644,
+ -352.088, -352.5, -352.88, -353.228, -353.544, -353.829, -354.083,
+ -354.305, -354.495, -354.655, -354.784, -354.881, -354.948, -354.984,
+ -354.99, -354.965, -354.91, -354.824, -354.708, -354.562, -354.386,
+ -354.18, -353.945, -353.68, -353.385, -353.061, -352.707, -352.324,
+ -351.913, -351.472, -351.002, -350.504, -349.977, -349.421, -348.837,
+ -348.224, -347.584, -346.915, -346.218, -345.493, -344.741, -343.961,
+ -343.153, -342.318, -341.455, -340.566, -339.649, -338.705, -337.734,
+ -336.737, -335.713, -334.662, -333.585, -332.482, -331.352, -330.197,
+ -329.015, -327.808, -326.575, -325.316, -324.032, -322.722, -321.387,
+ -320.027, -318.642, -317.232, -315.798, -314.338, -312.855, -311.346,
+ -309.814, -308.257, -306.676, -305.071, -303.442, -301.79, -300.114,
+ -298.414, -296.692, -294.946, -293.176, -291.384, -289.569, -287.732,
+ -285.871, -283.989, -282.083, -280.156, -278.207, -276.235, -274.242,
+ -272.227, -270.19, -268.132, -266.052, -263.952, -261.83, -259.687,
+ -257.523, -255.339, -253.134, -250.909, -248.663, -246.397, -244.111,
+ -241.805, -239.479, -237.134, -234.769, -232.384, -229.981, -227.558,
+ -225.116, -222.655, -220.176, -217.678, -215.161, -212.627, -210.073,
+ -207.502, -204.913, -202.306, -199.682, -197.04, -194.38, -191.704,
+ -189.01, -186.299, -183.572, -180.827, -178.067, -175.29, -172.496,
+ -169.687, -166.861, -164.02, -161.163, -158.29, -155.402, -152.499,
+ -149.58, -146.647, -143.699, -140.736, -137.759, -134.767, -131.761,
+ -128.741, -125.707, -122.659, -119.598, -116.523, -113.435, -110.334,
+ -107.219, -104.092, -100.952, -97.7999, -94.635, -91.4579, -88.2687,
+ -85.0675, -81.8546, -78.6301, -75.3941, -72.1469, -68.8884, -65.619,
+ -62.3388, -59.048, -55.7466, -52.4349, -49.1131, -45.7812, -42.4395,
+ -39.0881, -35.7273, -32.3571, -28.9777, -25.5893, -22.1921, -18.7863,
+ -15.3719, -11.9493, -8.51846, -5.07968, -1.6331, 1.8211, 5.28275,
+ 8.75167, 12.2277, 15.7106, 19.2003, 22.6965, 26.1991, 29.7079,
+ 33.2228, 36.7434, 40.2697, 43.8015, 47.3385, 50.8806, 54.4277,
+ 57.9794, 61.5357, 65.0963, 68.6611, 72.2298, 75.8023, 79.3783,
+ 82.9578, 86.5403, 90.1259, 93.7143, 97.3052, 100.898, 104.494,
+ 108.091, 111.691, 115.291, 118.894, 122.497, 126.101, 129.706,
+ 133.312, 136.918, 140.523, 144.129, 147.735, 151.34, 154.944,
+ 158.547, 162.149, 165.75, 169.349, 172.946, 176.541, 180.133,
+ 183.723, 187.311, 190.895, 194.476, 198.053, 201.627, 205.197,
+ 208.763, 212.324, 215.88, 219.432, 222.978, 226.519, 230.054,
+ 233.584, 237.107, 240.624, 244.134, 247.638, 251.133, 254.621,
+ 258.102, 261.574, 265.038, 268.494, 271.941, 275.379, 278.807,
+ 282.226, 285.635, 289.034, 292.422, 295.799, 299.165, 302.52,
+ 305.863, 309.195, 312.514, 315.82, 319.113, 322.393, 325.66,
+ 328.913, 332.152, 335.376, 338.585, 341.78, 344.959, 348.122,
+ 351.269, 354.399, 357.513, 360.609, 363.688, 366.75, 369.793,
+ 372.817, 375.822, 378.809, 381.775, 384.722, 387.647, 390.553,
+ 393.437, 396.299, 399.139, 401.957, 404.752, 407.524, 410.272,
+ 412.996, 415.696, 418.371, 421.02, 423.644, 426.241, 428.812,
+ 431.355, 433.871, 436.358, 438.817, 441.247, 443.648, 446.018,
+ 448.357, 450.666, 452.943, 455.188, 457.4, 459.579, 461.724,
+ 463.834, 465.91, 467.95, 469.954, 471.921, 473.851, 475.744,
+ 477.597, 479.411, 481.186, 482.919, 484.612, 486.263, 487.871,
+ 489.436, 490.956, 492.432, 493.862, 495.246, 496.583, 497.871,
+ 499.111, 500.301, 501.441, 502.529, 503.565, 504.55, 505.476,
+ 506.35, 507.167, 507.927, 508.628, 509.271, 509.852, 510.373,
+ 510.83, 511.224, 511.552, 511.814, 512.008, 512.133, 512.188,
+ 512.17, 512.079, 511.912, 511.67, 511.348, 510.947, 510.463,
+ 509.896, 509.243, 508.503, 507.672, 506.75, 505.732, 504.618,
+ 503.405, 502.089, 500.669, 499.14, 497.5, 495.745, 493.873,
+ 491.878, 489.757, 487.505, 485.119, 482.591, 479.918, 477.092,
+ 474.107, 470.955, 467.629, 464.118, 460.413, 456.5, 452.365,
+ 447.992, 443.358, 438.438, 433.198, 427.588, 421.534, 414.892,
+ 407.158, 398.959, 390.806, 382.698, 374.635, 366.617, 358.645,
+ 350.717, 342.834, 334.997, 327.204, 319.455, 311.752, 304.093,
+ 296.478, 288.908, 281.382, 273.901, 266.464, 259.071, 251.722,
+ 244.417, 237.156, 229.94, 222.766, 215.637, 208.551, 201.509,
+ 194.511, 187.556, 180.644, 173.776, 166.951, 160.169, 153.431,
+ 146.735, 140.083, 133.473, 126.906, 120.382, 113.901, 107.462,
+ 101.066, 94.7126, 88.4015, 82.1327, 75.9062, 69.722, 63.5799,
+ 57.4798, 51.4218, 45.4057, 39.4315, 33.499, 27.6083, 21.7593,
+ 15.9518, 10.1859, 4.46133, -1.22182, -6.86368, -12.4643, -18.0238,
+ -23.5422, -29.0196, -34.456, -39.8516, -45.2064, -50.5205, -55.7939,
+ -61.0268, -66.2191, -71.371, -76.4826, -81.5539, -86.5849, -91.5758,
+ -96.5266, -101.437, -106.308, -111.139, -115.931, -120.682, -125.394,
+ -130.067, -134.7, -139.293, -143.847, -148.362, -152.838, -157.274,
+ -161.672, -166.031, -170.35, -174.631, -178.873, -183.077, -187.241,
+ -191.368, -195.456, -199.505, -203.516, -207.489, -211.424, -215.321,
+ -219.18, -223., -226.783, -230.528, -234.236, -237.906, -241.538,
+ -245.133, -248.69, -252.21, -255.693, -259.139, -262.547, -265.919,
+ -269.254, -272.551, -275.812, -279.037, -282.224, -285.375, -288.49,
+ -291.568, -294.61, -297.615, -300.584, -303.518, -306.415, -309.276,
+ -312.102, -314.891, -317.645, -320.363, -323.046, -325.693, -328.305,
+ -330.882, -333.423, -335.929, -338.4, -340.836, -343.237, -345.603,
+ -347.935, -350.231, -352.493, -354.721, -356.914, -359.073, -361.197,
+ -363.287, -365.343, -367.365, -369.353, -371.308, -373.228, -375.114,
+ -376.967, -378.786, -380.572, -382.325, -384.044, -385.729, -387.382,
+ -389.001, -390.588, -392.141, -393.662, -395.15, -396.597, -398.027,
+ -399.418, -400.775, -402.1, -403.393, -404.654, -405.883, -407.079,
+ -408.244, -409.376, -410.477, -411.547, -412.584, -413.59, -414.565,
+ -415.508, -416.42, -417.301, -418.151, -418.969, -419.757, -420.514,
+ -421.24, -421.935, -422.6, -423.234, -423.837, -424.411, -424.954,
+ -425.467, -425.949, -426.402, -426.825, -427.218, -427.581, -427.914,
+ -428.218, -428.493, -428.738, -428.953, -429.14, -429.297, -429.425,
+ -429.524, -429.594, -429.636, -429.649, -429.633, -429.588, -429.515,
+ -429.414, -429.284, -429.127, -428.941, -428.727, -428.485, -428.215,
+ -427.918, -427.593, -427.24, -426.86, -426.453, -426.018, -425.556,
+ -425.066, -424.55, -424.007, -423.437, -422.84, -422.217, -421.567,
+ -420.89, -420.187, -419.458, -418.703, -417.921, -417.114, -416.28,
+ -415.421, -414.536, -413.625, -412.689, -411.727, -410.74, -409.727,
+ -408.69, -407.627, -406.539, -405.427, -404.289, -403.127, -401.94,
+ -400.729, -399.493, -398.233, -396.949, -395.641, -394.308, -392.952,
+ -391.571, -390.167, -388.74, -387.288, -385.813, -384.315, -382.794,
+ -381.249, -379.682, -378.091, -376.477, -374.841, -373.182, -371.501,
+ -369.797, -368.07, -366.321, -364.545, -362.758, -360.943, -359.106,
+ -357.247, -355.367, -353.465, -351.542, -349.597, -347.631, -345.644,
+ -343.635, -341.606, -339.556, -337.485, -335.394, -333.282, -331.149,
+ -328.996, -326.823, -324.63, -322.417, -320.183, -317.93, -315.658,
+ -313.365, -311.053, -308.722, -306.372, -304.002, -301.613, -299.205,
+ -296.779, -294.333, -291.869, -289.387, -286.886, -284.366, -281.829,
+ -279.273, -276.7, -274.108, -271.499, -268.872, -266.228, -263.566,
+ -260.887, -258.19, -255.477, -252.746, -249.999, -247.235, -244.454,
+ -241.657, -238.843, -236.013, -233.167, -230.304, -227.426, -224.532,
+ -221.622, -218.697, -215.756, -212.8, -209.828, -206.841, -203.84,
+ -200.823, -197.792, -194.746, -191.685, -188.61, -185.521, -182.417,
+ -179.3, -176.168, -173.023, -169.864, -166.691, -163.505, -160.306,
+ -157.093, -153.867, -150.629, -147.377, -144.113, -140.836, -137.547,
+ -134.246, -130.932, -127.606, -124.268, -120.919, -117.557, -114.185,
+ -110.8, -107.405, -103.998, -100.58, -97.1516, -93.7122, -90.2621,
+ -86.8015, -83.3305, -79.8493, -76.3579, -72.8566, -69.3454, -65.8245,
+ -62.2941, -58.7542, -55.205, -51.6467, -48.0794, -44.5031, -40.9181,
+ -37.3246, -33.7225, -30.1121, -26.4936, -22.867, -19.2325, -15.5902,
+ -11.9404, -8.28305, -4.6184, -0.946567, 2.7323, 6.41805, 10.1105,
+ 13.8096, 17.5151, 21.227, 24.9449, 28.6689, 32.3987, 36.1342,
+ 39.8753, 43.6217, 47.3734, 51.1301, 54.8918, 58.6583, 62.4293,
+ 66.2049, 69.9847, 73.7687, 77.5567, 81.3485, 85.144, 88.943,
+ 92.7453, 96.5508, 100.359, 104.171, 107.985, 111.801, 115.62,
+ 119.442, 123.265, 127.09, 130.917, 134.745, 138.574, 142.405,
+ 146.237, 150.07, 153.903, 157.737, 161.571, 165.405, 169.239,
+ 173.073, 176.906, 180.739, 184.571, 188.402, 192.232, 196.061,
+ 199.888, 203.714, 207.537, 211.359, 215.178}};
+
+const tk::spline JbosonNegativeSpline(NegLinearIntTransposed[0],
+ NegLinearIntTransposed[1],
+ tk::spline::cspline,
+ false,
+ tk::spline::first_deriv,
+ -pow(M_PI, 2) / 12,
+ tk::spline::first_deriv,
+ 3.816357189);
\ No newline at end of file
diff --git a/src/ThermalFunctions/ThermalFunctions.cpp b/src/ThermalFunctions/ThermalFunctions.cpp
index 2f67693ff..444fba398 100644
--- a/src/ThermalFunctions/ThermalFunctions.cpp
+++ b/src/ThermalFunctions/ThermalFunctions.cpp
@@ -338,15 +338,6 @@ double JbosonInterpolated(const double &x, int diff)
return res;
}
-tk::spline JbosonNegativeSpline(NegLinearIntTransposed[0],
- NegLinearIntTransposed[1],
- tk::spline::cspline,
- false,
- tk::spline::first_deriv,
- -pow(M_PI, 2) / 12,
- tk::spline::first_deriv,
- 3.816357189);
-
double JbosonInterpolatedNegative(const double &x, int diff)
{
if (x >= 0) return 0;
From 0478ad47e66a1899be932cba7de0449154e77ebc Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jo=C3=A3o=20Viana?=
<57032457+vollous@users.noreply.github.com>
Date: Wed, 11 Dec 2024 15:35:12 +0000
Subject: [PATCH 03/10] Mathematica model implementation (#171)
* Mathematica implementation
* Small improvements
* Automate model implementation (src still not implemented)
* N2HDM full mathematica implementation
* nQuark nGauge nLepton different from SM support. Still has to be tested.
* Update tools/ModelGeneration/Mathematica/N2HDM.m
Co-authored-by: Lisa Biermann <51697431+lisabiermann@users.noreply.github.com>
* Update tools/ModelGeneration/Mathematica/CreateModel.m
Co-authored-by: Lisa Biermann <51697431+lisabiermann@users.noreply.github.com>
* Remove "21" to nRows of EqMatrix
* Import Helper functions at the end
* Remove some errors
* Move helper function to the beginning
* Moved "InputParameters"
* Fix test not passing. All dependent vars need to be defined as function of the input parameters.
* More appropriate name
* Example file is created right away with some values set by the user
* Removing warning
* Add reference for implementation and add R2HDM
---------
Co-authored-by: Lisa Biermann <51697431+lisabiermann@users.noreply.github.com>
Co-authored-by: Lisa Biermann
---
.../ModelGeneration/Mathematica/CreateModel.m | 663 ++++++++++++++++++
tools/ModelGeneration/Mathematica/N2HDM.m | 414 +++++++++++
tools/ModelGeneration/Mathematica/R2HDM.m | 414 +++++++++++
3 files changed, 1491 insertions(+)
create mode 100644 tools/ModelGeneration/Mathematica/CreateModel.m
create mode 100644 tools/ModelGeneration/Mathematica/N2HDM.m
create mode 100644 tools/ModelGeneration/Mathematica/R2HDM.m
diff --git a/tools/ModelGeneration/Mathematica/CreateModel.m b/tools/ModelGeneration/Mathematica/CreateModel.m
new file mode 100644
index 000000000..4d73bbc79
--- /dev/null
+++ b/tools/ModelGeneration/Mathematica/CreateModel.m
@@ -0,0 +1,663 @@
+(* ::Package:: *)
+
+(* ::Section:: *)
+(*Disable error message*)
+
+
+Off[Part::partd]
+
+
+(* ::Section:: *)
+(*Helper functions*)
+
+
+ToC[x_]:=StringReplace[ToString[CForm[x//HoldForm]],{"Power"->"pow", "vev0" -> "SMConstants.C_vev0","Sqrt"->"sqrt"}]
+RemoveDuplicates[list__] := Cases[Tally[list], {x_, 1} :> x]
+
+
+(* ::Section:: *)
+(*Curvatures*)
+
+
+GenerateCurvature[n_]:= Module[{AllCombinationsN,CodeLn},
+AllCombinationsN = Tuples[Range[RepHiggsZero//Length],{n}];
+CodeLn={};
+Table[curvature=(D[VHiggs,Sequence@@higgsbase[[Combination]]]/.RepHiggsZero)//Simplify;
+If[Not[PossibleZeroQ[curvature]],AppendTo[CodeLn,"Curvature_Higgs_L"<>ToString[n]<>"["<>StringRiffle[Combination-1, "]["]<>"] = "<>ToString[curvature//CForm]<>";"]],{Combination,AllCombinationsN}];
+Return[CodeLn]];
+
+
+(* ::Section:: *)
+(*CTs Curvatures*)
+
+
+GenerateCTsCurvature[n_]:= Module[{AllCombinationsN,CodeLn},
+AllCombinationsN = Tuples[Range[RepHiggsZero//Length],{n}];
+CodeLn={};
+Table[curvature=(D[VCT,Sequence@@higgsbase[[Combination]]]/.RepHiggsZero);
+If[Not[PossibleZeroQ[curvature]],AppendTo[CodeLn,"Curvature_Higgs_CT_L"<>ToString[n]<>"["<>StringRiffle[Combination-1, "]["]<>"] = "<>ToString[curvature//CForm]<>";"]],{Combination,AllCombinationsN}];
+Return[CodeLn]];
+
+
+(* ::Section:: *)
+(*Gauge Curvatures*)
+
+
+GenerateGaugeCurvature := Module[{AllCombinationsN,CodeLn},
+AllCombinationsN = Tuples[{Range[Length[GaugeBasis]],Range[Length[GaugeBasis]],Range[Length[higgsbase]],Range[Length[higgsbase]]}];
+CodeLn={};
+Table[curvature=(D[Vgauge,Sequence@@GaugeBasis[[Combination[[;;2]]]],Sequence@@higgsbase[[Combination[[3;;]]]]]/.RepHiggsZero);
+If[Not[PossibleZeroQ[curvature]],AppendTo[CodeLn,"Curvature_Gauge_G2H2["<>StringRiffle[Combination-1, "]["]<>"] = "<>(ToString[(curvature//CForm)]//StringReplace[#,{"Power"->"pow","Subscript(C,g)"->"SMConstants.C_g","Subscript(C,gs)"->"SMConstants.C_gs"}]&)<>";"]],{Combination,AllCombinationsN}];
+Return[CodeLn]];
+
+
+(* ::Section:: *)
+(*Leptonic Curvatures*)
+
+
+GenerateLeptonCurvature := Module[{AllCombinationsN,CodeLn},
+AllCombinationsN = Tuples[{Range[Length[LepBase]],Range[Length[LepBase]],Range[Length[higgsbase]]}];
+CodeLn={};
+Table[curvature=(D[VFLep,Sequence@@LepBase[[Combination[[;;2]]]],Sequence@@higgsbase[[Combination[[3;;]]]]]/.RepHiggsZero);
+If[Not[PossibleZeroQ[curvature]],AppendTo[CodeLn,"Curvature_Lepton_F2H1["<>StringRiffle[Combination-1, "]["]<>"] = "<>(ToString[(curvature/.RepLepMass//CForm)]//StringReplace[#,{"Power"->"pow","Complex(0,1)"-> "II", "CMass" -> "SMConstants.C_Mass"}]&)<>";"]],{Combination,AllCombinationsN}];
+Return[CodeLn]];
+
+
+(* ::Section:: *)
+(*Quark Curvatures*)
+
+
+GenerateQuarkCurvature := Module[{AllCombinationsN,CodeLn},
+AllCombinationsN = Tuples[{Range[Length[baseQuarks]],Range[Length[baseQuarks]],Range[Length[higgsbase]]}];
+CodeLn={};
+Table[curvature=(D[VF,Sequence@@baseQuarks[[Combination[[;;2]]]],Sequence@@higgsbase[[Combination[[3;;]]]]]/.RepHiggsZero);
+If[Not[PossibleZeroQ[curvature]],AppendTo[CodeLn,"Curvature_Quark_F2H1["<>StringRiffle[Combination-1, "]["]<>"] = "<>(ToString[(curvature/.RepMassQuark//CForm)]//StringReplace[#,{"Power"->"pow","Complex(0,1)"-> "II","Complex(0,-1)"-> "-II", "CMass" -> "SMConstants.C_Mass","Conjugate"->"conj"}]&)<>";"]],{Combination,AllCombinationsN}];
+Return[CodeLn]];
+
+
+(* ::Section:: *)
+(*Model Implementation*)
+
+
+ListImplementedModels := Block[{}, models = Import[Nest[ParentDirectory, NotebookDirectory[], 3]<>"/src/models/IncludeAllModels.cpp", "Text"]//StringDelete[#, WhitespaceCharacter]&;
+Return[StringSplit[models, {"caseModelIDs::", ":returnstd::make_unique"}][[2;;-2;;2]]]]
+
+
+InsertCMakeLists[name_] := Block[{},
+filename = Nest[ParentDirectory, NotebookDirectory[], 3]<>"/src/models/CMakeLists.txt";
+file = FromCharacterCode[ToCharacterCode[ReadList[filename, "String",NullRecords->True]], "UTF-8"];
+If[MemberQ[file," ${header_path}/"<> ToString[name] <>".h"] || MemberQ[file," ClassPotential"<> ToString[name] <>".cpp"],Print["Model is already in CMakeList.txt"];Return[]];
+indexheader = Position[file, "set(header_path \"${BSMPT_SOURCE_DIR}/include/BSMPT/models\")"][[1,1]]+1;
+indexsrc = Position[file, "set(src"][[1,1]];
+indexaddlibrary = Position[file, "add_library(Models ${header} ${src})"][[1,1]];
+before = file[[;;indexheader]];
+coreheader = Insert[file[[indexheader+1;; indexsrc-1]]," ${header_path}/ClassPotential" <> ToString[name] <> ".h",-3];
+middlecore = file[[indexsrc;;indexsrc]];
+corecpp = Insert[file[[indexsrc+1;;indexaddlibrary-1]]," ClassPotential" <> ToString[name] <> ".cpp",-3];
+after = file[[indexaddlibrary;;]];
+file = Join[before, coreheader, middlecore, corecpp, after,{""}];
+Export[filename, file, "Table"];]
+
+
+InsertIncludeAllModelsHeader[name_] := Block[{},
+filename = Nest[ParentDirectory, NotebookDirectory[], 3]<>"/include/BSMPT/models/IncludeAllModels.h";
+file = FromCharacterCode[ToCharacterCode[ReadList[filename, "String",NullRecords->True]], "UTF-8"];
+If[MemberQ[file," " <> ToUpperCase[ToString[name]] <> ","] || MemberQ[file," {\"" <> ToLowerCase[ToString[name]] <> "\", ModelIDs::"<> ToUpperCase[ToString[name]] <>"},"],Print["Model is already in IncludeAllModels.h"];Return[]];
+indexheader = Position[file, " // DO NOT EDIT the part below"][[1,1]];
+indexunorderedmap = Position[file, "const std::unordered_map ModelNames{"][[1,1]];
+indexendunorderedmap = Position[file, "};"][[2,1]];
+before = Insert[file[[;;indexheader]]," " <> ToUpperCase[ToString[name]] <> ",", -3];
+middle = file[[indexheader+1;;indexunorderedmap]];
+unorderedmap = Append[file[[indexunorderedmap+1;;indexendunorderedmap-1]], " {\"" <> ToLowerCase[ToString[name]] <> "\", ModelIDs::"<> ToUpperCase[ToString[name]] <>"},"];
+end =file[[indexendunorderedmap;;]];
+file = Join[before,middle,unorderedmap,end,{""}];
+Export[filename, file, "Table"];]
+
+
+InsertIncludeAllModelssrc[name_] := Block[{},
+filename = Nest[ParentDirectory, NotebookDirectory[], 3]<>"/src/models/IncludeAllModels.cpp";
+file = FromCharacterCode[ToCharacterCode[ReadList[filename, "String",NullRecords->True]], "UTF-8"];
+If[MemberQ[file,"#include ToString[name] <> ".h>"] || MemberQ[file," case ModelIDs::" <> ToUpperCase[ToString[name]] <> ":"],Print["Model is already in IncludeAllModels.h"];Return[]];
+indexinclude = Position[file, "#include "][[1,1]];
+indexchoice = Position[file, " switch (choice)"][[1,1]]+1;
+indexinvalidmodel = Position[file, " default: throw std::runtime_error(\"Invalid model\");"][[1,1]];
+include = Insert[file[[;;indexinclude]],"#include ToString[name] <> ".h>",-2];
+untilchoice = file[[indexinclude+1;;indexchoice]];
+cases = Append[file[[indexchoice+1;;indexinvalidmodel-1]], " case ModelIDs::" <> ToUpperCase[ToString[name]] <> ":\n return std::make_unique ToString[name] <> ">(smConstants);\n break;"];
+end = file[[indexinvalidmodel;;]];
+file = Join[include,untilchoice, cases, end,{""}];
+Export[filename, file, "Table"];]
+
+
+CreateModelHeader[name_,InputParameters_,DepententParameters_,parCT_,higgsvev_] :=Block[{},
+filename = Nest[ParentDirectory, NotebookDirectory[], 3]<>"/include/BSMPT/models/ClassPotential" <> ToString[name] <> ".h";
+uppercasename = ToUpperCase[ToString[name]];
+
+file={"#ifndef SRC_CLASSPOTENTIAL"<>uppercasename<>"_H_
+#define SRC_CLASSPOTENTIAL"<>uppercasename<>"_H_
+
+#include
+
+namespace BSMPT
+{
+namespace Models
+{
+class Class_Potential_"<> ToString[name] <>" : public Class_Potential_Origin
+{
+public:
+ Class_Potential_"<>ToString[name]<>"(const ISMConstants &smConstants);
+ virtual ~Class_Potential_"<>ToString[name]<>"();
+",
+ " // Initialize input parameters", Sequence@@Table[" double " <> ToString[i] <> " = 0;",{i,InputParameters}],"",
+ " // Initialize dependent parameters", Sequence@@Table[" double " <> ToString[i[[1]]] <> " = 0;",{i,DepententParameters}],"",
+ " // Initialize counter terms", Sequence@@Table[" double " <> ToString[i] <> " = 0;",{i,parCT}],"","
+ void ReadAndSet(const std::string &linestr,
+ std::vector &par) override;
+ std::vector addLegendCT() const override;
+ std::vector addLegendTemp() const override;
+ std::vector addLegendTripleCouplings() const override;
+ std::vector addLegendVEV() const override;
+
+ void set_gen(const std::vector &par) override;
+ void set_CT_Pot_Par(const std::vector &par) override;
+ void write() const override;
+
+ void TripleHiggsCouplings() override;
+ std::vector calc_CT() const override;
+
+ void SetCurvatureArrays() override;
+ bool CalculateDebyeSimplified() override;
+ bool CalculateDebyeGaugeSimplified() override;
+ double VTreeSimplified(const std::vector &v) const override;
+ double VCounterSimplified(const std::vector &v) const override;
+ void Debugging(const std::vector &input,
+ std::vector &output) const override;
+};
+
+} // namespace Models
+} // namespace BSMPT
+#endif /* SRC_"<>uppercasename<>"_H_ */
+"};
+Export[filename, file, "Table"];]
+
+
+CreateModelFile[name_,higgsbase_,higgsvev_,higgsvevFiniteTemp_,VEVList_,par_,InputParameters_,DepententParameters_,CurvatureL1_,CurvatureL2_,CurvatureL3_,CurvatureL4_,GaugeCurvatureL4_,LeptonCurvatureL3_,QuarkCurvatureL3_,parCT_,CTCurvatureL1_,CTCurvatureL2_,CTCurvatureL3_,CTCurvatureL4_,GaugeBasis_,LepBase_,baseQuarks_] :=Block[{},
+filename = Nest[ParentDirectory, NotebookDirectory[], 3]<>"/src/models/ClassPotential" <> ToString[name] <> ".cpp";
+uppercasename = ToUpperCase[ToString[name]];
+
+file={"#include \"Eigen/Dense\"
+#include \"Eigen/Eigenvalues\"
+#include \"Eigen/IterativeLinearSolvers\"
+#include // for SMConstants.C_vev0, SMConstants.C_MassTop, SMConstants.C_g
+#include // for max, copy
+#include
+#include // for operator<<, endl, basic_o...
+#include // for allocator_traits<>::value...
+#include // for std::size_t
+
+#include name <> ".h>
+#include
+#include
+#include
+using namespace Eigen;
+
+namespace BSMPT
+{
+namespace Models
+{
+
+Class_Potential_" <> name <> "::Class_Potential_" <> name <> "(
+ const ISMConstants &smConstants)
+ : Class_Potential_Origin(smConstants)
+{
+ Model = ModelID::ModelIDs::" <> uppercasename <> ";
+
+ nPar = " <> ToString[Length[par]] <> "; // number of parameters in the tree-Level Lagrangian AFTER using
+ // tadpole equations
+ nParCT = " <> ToString[Length[parCT]] <> "; // number of parameters in the counterterm potential
+
+ nVEV = " <> ToString[Length[Select[higgsvevFiniteTemp,Not[PossibleZeroQ[#]]&]]] <>"; // number of VEVs to minimize the potential
+
+ NHiggs = " <> ToString[Length[higgsbase]] <> "; // number of scalar d.o.f.
+
+ NGauge = " <> ToString[Length[GaugeBasis]] <> "; // number of gauge fields
+
+ NLepton = " <> ToString[Length[LepBase]] <> "; // number of lepton fields
+
+ NQuarks = " <> ToString[Length[baseQuarks]] <> "; // number of quark fields
+
+ VevOrder.resize(nVEV);", Sequence@@Table[" VevOrder[" <> ToString[i-1] <> "] = "<> ToString[VEVList[[i]]] <>"; // " <> ToString[higgsvevFiniteTemp[[VEVList[[i]]+1]]],{i,Length[VEVList]}],
+ "
+ // Set UseVTreeSimplified to use the tree-level potential defined in
+ // VTreeSimplified
+ UseVTreeSimplified = false;
+
+ // Set UseVCounterSimplified to use the counterterm potential defined in
+ // VCounterSimplified
+ UseVCounterSimplified = false;
+}
+
+Class_Potential_"<>name<>"::~Class_Potential_"<>name<>"()
+{
+}
+
+/**
+ * returns a string which tells the user the chronological order of the
+ * counterterms. Use this to complement the legend of the given input file
+ */
+std::vector Class_Potential_"<>name<>"::addLegendCT() const
+{
+ std::vector labels;",
+ Sequence@@Table[" labels.push_back(\""<> ToString[i] <>"\");",{i,parCT}],
+ "
+ return labels;
+}
+
+/**
+ * returns a string which tells the user the chronological order of the VEVs and
+ * the critical temperature. Use this to complement the legend of the given
+ * input file
+ */
+std::vector Class_Potential_"<>name<>"::addLegendTemp() const
+{
+ std::vector labels;
+ labels.push_back(\"T_c\"); // Label for the critical temperature
+ labels.push_back(\"v_c\"); // Label for the critical vev
+ labels.push_back(\"v_c/T_c\"); // Label for xi_c
+ // out += \"VEV order\";",
+ Sequence@@Table[" labels.push_back(\"" <> ToString[i] <> "(T_c)\");",{i,Select[higgsvevFiniteTemp,Not[PossibleZeroQ[#]]&]}]
+ ,"
+ return labels;
+}
+
+/**
+ * returns a string which tells the user the chronological order of the Triple
+ * Higgs couplings. Use this to complement the legend of the given input file
+ */
+std::vector
+Class_Potential_"<>name<>"::addLegendTripleCouplings() const
+{
+ std::vector labels;
+ std::vector particles;
+
+ // mass basis, you can identify here your particles",Sequence@@Table[" particles.push_back(\"h_" <> ToString[i] <> "\");",{i,nHiggs}],"
+ for (std::size_t i = 0; i < NHiggs; i++)
+ {
+ for (std::size_t j = i; j < NHiggs; j++)
+ {
+ for (std::size_t k = j; k < NHiggs; k++)
+ {
+ labels.push_back(\"Tree_\" + particles.at(i) + particles.at(j) +
+ particles.at(k));
+ labels.push_back(\"CT_\" + particles.at(i) + particles.at(j) +
+ particles.at(k));
+ labels.push_back(\"CW_\" + particles.at(i) + particles.at(j) +
+ particles.at(k));
+ }
+ }
+ }
+
+ return labels;
+}
+
+/**
+ * returns a string which tells the user the chronological order of the VEVs.
+ * Use this to complement the legend of the given input file
+ */
+std::vector Class_Potential_"<>name<>"::addLegendVEV() const
+{
+ std::vector labels;
+ // out = \"Your VEV order\"",
+ Sequence@@Table[" labels.push_back(\"" <> ToString[i] <> "\");",{i,Select[higgsvevFiniteTemp,Not[PossibleZeroQ[#]]&]}]
+ ,"
+ return labels;
+}
+
+/**
+ * Reads the string linestr and sets the parameter point
+ */
+void Class_Potential_"<>name<>"::ReadAndSet(const std::string &linestr,
+ std::vector &par)
+{
+ std::stringstream ss(linestr);
+ double tmp;
+
+ if (UseIndexCol)
+ {
+ ss >> tmp;
+ }
+
+ for (int k = 1; k <= "<>ToString[Length[InputParameters]]<>"; k++)
+ {
+ ss >> tmp;",Sequence@@Table[" if (k == " <> ToString[i] <>")\n par[" <> ToString[i-1] <> "] = tmp; // " <> ToString[InputParameters[[i]]],{i,Length[InputParameters]}],"
+ }
+
+ set_gen(par);
+ return;
+}
+
+/**
+ * Set Class Object as well as the VEV configuration
+ */
+void Class_Potential_"<>name<>"::set_gen(const std::vector &par)
+{
+", Sequence@@Table[" " <> ToString[InputParameters[[i]]] <>" = par[" <> ToString[i-1] <> "]; ",{i,Length[InputParameters]}],"",Sequence@@Table[" " <> (DepententParameters[[i]][[1]]//ToC) <> " = " <> ToString[DepententParameters[[i]][[2]]//ToC] <> "; ",{i,Length[DepententParameters]}],"
+ scale = SMConstants.C_vev0; // renormalisation scale is set to the SM VEV
+
+ vevTreeMin.resize(nVEV);
+ vevTree.resize(NHiggs);
+ // set the vector vevTreeMin. vevTree will then be set by the
+ // function MinimizeOrderVEV", Sequence@@Table[" vevTreeMin[" <> ToString[i-1] <> "] = "<> ToString[higgsvev[[VEVList[[i]]+1]]] <>"; // " <> ToString[higgsvevFiniteTemp[[VEVList[[i]]+1]]],{i,Length[VEVList]}],"
+ vevTree = MinimizeOrderVEV(vevTreeMin);
+ if (!SetCurvatureDone) SetCurvatureArrays();
+}
+
+/**
+ * set your counterterm parameters from the entries of par as well as the
+ * entries of Curvature_Higgs_CT_L1 to Curvature_Higgs_CT_L4.
+ */
+void Class_Potential_"<>name<>"::set_CT_Pot_Par(const std::vector &par)
+{",
+ Sequence@@Table[" " <> ToString[parCT[[i]]] <> " = par[" <> ToString[i-1]<>"];",{i,Length[parCT]}],"
+ // assign the non-zero entries",
+ Sequence@@Table[ " " <> ToString[i],{i,CTCurvatureL1}] ,"",
+ Sequence@@Table[ " " <> ToString[i],{i,CTCurvatureL2}] ,"",
+ Sequence@@Table[ " " <> ToString[i],{i,CTCurvatureL3}] ,
+ Sequence@@Table[ " " <> ToString[i],{i,CTCurvatureL4}] ,""
+ ,"
+}
+
+/**
+ * console output of all parameters
+ */
+void Class_Potential_"<>name<>"::write() const
+{
+ std::stringstream ss;
+ typedef std::numeric_limits dbl;
+ ss.precision(dbl::max_digits10);
+
+ ss << \"Model = \" << Model << \"\\n\";\n
+ ss << \"\\nThe input parameters are : \\n\";",
+ Sequence@@Table[" ss << \""<> ToString[i] <> " = \" << " <> ToString[i] <> " << \"\\n\";",{i,InputParameters}],"
+ ss << \"\\nThe parameters are : \\n\";",
+ Sequence@@Table[" ss << \""<> ToString[i] <> " = \" << " <> ToString[i] <> " << \"\\n\";",{i,par}],"
+ ss << \"\\nThe counterterm parameters are : \\n\";",
+ Sequence@@Table[" ss << \""<> ToString[i] <> " = \" << " <> ToString[i] <> " << \"\\n\";",{i,parCT}],"
+ ss << \"\\nThe scale is given by mu = \" << scale << \" GeV \\n\";
+
+ Logger::Write(LoggingLevel::Default, ss.str());
+}
+
+/**
+ * Calculates the counterterms. Here you need to work out the scheme and
+ * implement the formulas.
+ */
+std::vector Class_Potential_"<>name<>"::calc_CT() const
+{
+ std::vector parCT;
+
+ if (!SetCurvatureDone)
+ {
+ std::string retmes = __func__;
+ retmes += \" was called before SetCurvatureArrays()!\\n\";
+ throw std::runtime_error(retmes);
+ }
+ if (!CalcCouplingsdone)
+ {
+ std::string retmes = __func__;
+ retmes += \" was called before CalculatePhysicalCouplings()!\\n\";
+ throw std::runtime_error(retmes);
+ }
+
+ std::vector WeinbergNabla, WeinbergHesse;
+ WeinbergNabla = WeinbergFirstDerivative();
+ WeinbergHesse = WeinbergSecondDerivative();
+
+ VectorXd NablaWeinberg(NHiggs);
+ MatrixXd HesseWeinberg(NHiggs, NHiggs), HiggsRot(NHiggs, NHiggs);
+ for (std::size_t i = 0; i < NHiggs; i++)
+ {
+ NablaWeinberg[i] = WeinbergNabla[i];
+ for (std::size_t j = 0; j < NHiggs; j++)
+ HesseWeinberg(i, j) = WeinbergHesse.at(j * NHiggs + i);
+ }
+
+ // formulae for the counterterm scheme",Sequence@@Table[" parCT.push_back(" <> ToC[tiCTs[[i]]/.{NCW[x_]->NablaWeinberg[x-1],HCW[x_,y_]->HesseWeinberg[x-1,y-1]}]<> "); //"<>ToString[parCT[[i]]//CForm]<>";",{i,Length[parCT]}],"
+ return parCT;
+}
+
+// mass basis triple couplings
+void Class_Potential_"<>name<>"::TripleHiggsCouplings()
+{
+ if (!SetCurvatureDone) SetCurvatureArrays();
+ if (!CalcCouplingsdone) CalculatePhysicalCouplings();
+
+ // new rotation matrix with
+ MatrixXd HiggsRotSort(NHiggs, NHiggs);
+
+ std::vector HiggsOrder(NHiggs);
+
+ // example for keeping the mass order
+ for (std::size_t i = 0; i < NHiggs; i++)
+ {
+ HiggsOrder[i] = i;
+ }
+
+ std::vector TripleDeriv;
+ TripleDeriv = WeinbergThirdDerivative();
+ std::vector>> GaugeBasis(
+ NHiggs,
+ std::vector>(NHiggs, std::vector(NHiggs)));
+ for (std::size_t i = 0; i < NHiggs; i++)
+ {
+ for (std::size_t j = 0; j < NHiggs; j++)
+ {
+ for (std::size_t k = 0; k < NHiggs; k++)
+ {
+ GaugeBasis[i][j][k] =
+ TripleDeriv.at(i + j * NHiggs + k * NHiggs * NHiggs);
+ }
+ }
+ }
+
+ TripleHiggsCorrectionsCWPhysical.resize(NHiggs);
+ TripleHiggsCorrectionsTreePhysical.resize(NHiggs);
+ TripleHiggsCorrectionsCTPhysical.resize(NHiggs);
+ for (std::size_t i = 0; i < NHiggs; i++)
+ {
+ TripleHiggsCorrectionsTreePhysical[i].resize(NHiggs);
+ TripleHiggsCorrectionsCWPhysical[i].resize(NHiggs);
+ TripleHiggsCorrectionsCTPhysical[i].resize(NHiggs);
+ for (std::size_t j = 0; j < NHiggs; j++)
+ {
+ TripleHiggsCorrectionsCWPhysical[i][j].resize(NHiggs);
+ TripleHiggsCorrectionsTreePhysical[i][j].resize(NHiggs);
+ TripleHiggsCorrectionsCTPhysical[i][j].resize(NHiggs);
+ }
+ }
+
+ for (std::size_t i = 0; i < NHiggs; i++)
+ {
+ for (std::size_t j = 0; j < NHiggs; j++)
+ {
+ for (std::size_t k = 0; k < NHiggs; k++)
+ {
+ TripleHiggsCorrectionsCWPhysical[i][j][k] = 0;
+ TripleHiggsCorrectionsTreePhysical[i][j][k] = 0;
+ TripleHiggsCorrectionsCTPhysical[i][j][k] = 0;
+ for (std::size_t l = 0; l < NHiggs; l++)
+ {
+ for (std::size_t m = 0; m < NHiggs; m++)
+ {
+ for (std::size_t n = 0; n < NHiggs; n++)
+ {
+ double RotFac =
+ HiggsRotSort(i, l) * HiggsRotSort(j, m) * HiggsRotSort(k, n);
+ TripleHiggsCorrectionsCWPhysical[i][j][k] +=
+ RotFac * GaugeBasis[l][m][n];
+ TripleHiggsCorrectionsTreePhysical[i][j][k] +=
+ RotFac * LambdaHiggs_3[l][m][n];
+ TripleHiggsCorrectionsCTPhysical[i][j][k] +=
+ RotFac * LambdaHiggs_3_CT[l][m][n];
+ }
+ }
+ }
+ }
+ }
+ }
+}
+
+void Class_Potential_"<>name<>"::SetCurvatureArrays()
+{
+ initVectors();
+ SetCurvatureDone = true;
+ for (std::size_t i = 0; i < NHiggs; i++)
+ HiggsVev[i] = vevTree[i];
+
+ // assign the non-zero entries",
+ Sequence@@Table[ " " <> ToString[i],{i,CurvatureL1}] ,
+ Sequence@@Table[ " " <> ToString[i],{i,CurvatureL2}] ,"",
+ Sequence@@Table[ " " <> ToString[i],{i,CurvatureL3}] ,
+ Sequence@@Table[ " " <> ToString[i],{i,CurvatureL4}] ,"",
+ Sequence@@Table[ " " <> ToString[i],{i,GaugeCurvatureL4}] ,
+ "
+ std::complex V11, V12, V13, V21, V22, V23, V31, V32, V33;
+ V11 = SMConstants.C_Vud;
+ V12 = SMConstants.C_Vus;
+ V13 = SMConstants.C_Vub;
+ V21 = SMConstants.C_Vcd;
+ V22 = SMConstants.C_Vcs;
+ V23 = SMConstants.C_Vcb;
+ V31 = SMConstants.C_Vtd;
+ V32 = SMConstants.C_Vts;
+ V33 = SMConstants.C_Vtb;
+",
+ Sequence@@Table[ " " <> ToString[i],{i,LeptonCurvatureL3}] ,"",
+ Sequence@@Table[ " " <> ToString[i],{i,QuarkCurvatureL3}] ,"
+}
+
+bool Class_Potential_"<>name<>"::CalculateDebyeSimplified()
+{
+ return false;
+ /*
+ * Use this function if you calculated the Debye corrections to the Higgs mass
+ * matrix and implement your formula here and return true. The vector is given
+ * by DebyeHiggs[NHiggs][NHiggs]
+ */
+}
+
+bool Class_Potential_"<>name<>"::CalculateDebyeGaugeSimplified()
+{
+ /*
+ * Use this function if you calculated the Debye corrections to the gauge mass
+ * matrix and implement your formula here and return true. The vector is given
+ * by DebyeGauge[NGauge][NGauge]
+ */
+ return false;
+}
+double
+Class_Potential_"<>name<>"::VTreeSimplified(const std::vector &v) const
+{
+ if (not UseVTreeSimplified) return 0;
+ double res = 0;
+ res = " <> ToC[Simplify[VHiggs/.Thread[higgsbase->Table[If[PossibleZeroQ[higgsvevFiniteTemp[[i]]],0,v[[i-1]]],{i,Length[higgsvevFiniteTemp]}]]]] <> ";
+
+ return res;
+}
+
+double Class_Potential_"<>name<>"::VCounterSimplified(
+ const std::vector &v) const
+{
+ if (not UseVTreeSimplified) return 0;
+ double res = 0;
+ res = " <> ToC[Simplify[VCT/.Thread[higgsbase->Table[If[PossibleZeroQ[higgsvevFiniteTemp[[i]]],0,v[[i-1]]],{i,Length[higgsvevFiniteTemp]}]]]] <> ";
+
+ return res;
+}
+
+void Class_Potential_"<>name<>"::Debugging(const std::vector &input,
+ std::vector &output) const
+{
+ (void)input;
+ (void)output;
+}
+
+} // namespace Models
+} // namespace BSMPT
+"};
+Export[filename, file, "Table"];]
+
+
+CreateExamplePoint[name_,InputParameters_,InputParametersExample_] := Block[{},
+filename = Nest[ParentDirectory, NotebookDirectory[], 3]<>"/example/" <> name <> "_Input.tsv";
+file = {Prepend[InputParameters,Null],{1,Sequence@@InputParametersExample}};
+fileTest = FileNames["Test",Nest[ParentDirectory, NotebookDirectory[], 3]<>"/build/*/bin"][[1]];
+Print["To run example point \n" <> fileTest <> " --model=" <> name <> " --input="<> filename <> " --line=2"];
+Export[filename, file, "Table"];]
+
+
+
+
+
+ImplementModel[
+name_,
+higgsbase_,
+higgsvev_,
+higgsvevFiniteTemp_,
+VEVList_,par_,
+InputParameters_,
+InputParametersExample_,
+DepententParameters_,
+CurvatureL1_,
+CurvatureL2_,
+CurvatureL3_,
+CurvatureL4_,
+GaugeCurvatureL4_,
+LeptonCurvatureL3_,
+QuarkCurvatureL3_,
+parCT_,
+CTCurvatureL1_,
+CTCurvatureL2_,
+CTCurvatureL3_,
+CTCurvatureL4_,
+GaugeBasis_,
+LepBase_,
+baseQuarks_]:=Block[{},
+Print["Inserting model name into CMakeList"];
+InsertCMakeLists[name];
+Print["Inserting model name into IncludeAllModels.h"];
+InsertIncludeAllModelsHeader[name];
+Print["Inserting model name into IncludeAllModels.cpp"];
+InsertIncludeAllModelssrc[name];
+Print["Creating model header"];
+CreateModelHeader[name,InputParameters,DepententParameters,parCT,higgsvev];
+Print["Creating model implementation .cpp"];
+CreateModelFile[name,
+higgsbase,
+higgsvev,
+higgsvevFiniteTemp,
+VEVList,
+par,
+InputParameters,
+DepententParameters,
+CurvatureL1,
+CurvatureL2,
+CurvatureL3,
+CurvatureL4,
+GaugeCurvatureL4,
+LeptonCurvatureL3,
+QuarkCurvatureL3,
+parCT,
+CTCurvatureL1,
+CTCurvatureL2,
+CTCurvatureL3,
+CTCurvatureL4,
+GaugeBasis,
+LepBase,
+baseQuarks];
+Print["Created example point in BSMPT/example"];
+CreateExamplePoint[name,InputParameters,InputParametersExample];
+Print[Style["Remember to recompile!",Red]]]
+
+
+Print[Style["Helper functions successfully imported!",FontSize->20, Directive[Thick]]];
diff --git a/tools/ModelGeneration/Mathematica/N2HDM.m b/tools/ModelGeneration/Mathematica/N2HDM.m
new file mode 100644
index 000000000..1456cfafb
--- /dev/null
+++ b/tools/ModelGeneration/Mathematica/N2HDM.m
@@ -0,0 +1,414 @@
+(* ::Package:: *)
+
+(* ::Chapter:: *)
+(*Helper functions*)
+
+
+(*Import helper functions*)
+<< (NotebookDirectory[]<>"CreateModel.m")
+
+
+(* ::Chapter:: *)
+(*In this section the scalar potential is defined. As an example the N2HDM in the convention of [arXiv:1803.02846] is shown*)
+
+
+(*Define higgs fields*)
+higgsbase = {\[Rho]1, \[Rho]2, \[Eta]1, \[Eta]2, \[Psi]1, \[Psi]2, \[Zeta]1, \[Zeta]2, \[Zeta]S};
+
+
+(*Assign vevs at T=0*)
+higgsvev = {0, 0, 0, 0, 0, 0, v1, v2, vs};
+
+
+(*Assign vevs at T != 0*)
+higgsvevFiniteTemp = {0, wcb, 0, 0, 0, wcp, w1, w2, ws};
+
+
+(*Replacement list for the vevs*)
+VEVRep = Table[i[[1]]->i[[2]],{i,Transpose[{higgsbase,higgsvev}]}];
+
+
+(*Replacement list set fields zero*)
+RepHiggsZero = Table[i->0,{i,higgsbase}];
+
+
+(*Define number of Higgses*)
+nHiggs = Length[higgsbase];
+
+
+(*Define parameters of the potential*)
+par = {m11Sq, m22Sq, m12Sq, L1, L2, L3, L4, L5, msSq, L6, L7, L8};
+
+
+(*Define doublets and scalar fields*)
+Phi1 = {higgsbase[[1]] + higgsbase[[3]]*I, higgsbase[[7]] + higgsbase[[5]]*I}/Sqrt[2];
+Phi2 = {higgsbase[[2]] + higgsbase[[4]]*I, higgsbase[[8]] + higgsbase[[6]]*I}/Sqrt[2];
+S = higgsbase[[9]];
+(*Print fields*)
+Phi1//MatrixForm//TraditionalForm
+Phi2//MatrixForm//TraditionalForm
+S//MatrixForm//TraditionalForm
+
+
+(*Write the potential*)
+$Assumptions = higgsbase \[Element] Reals;
+C11 = Simplify[ConjugateTranspose[Phi1] . Phi1];
+C12 = Simplify[ConjugateTranspose[Phi1] . Phi2];
+C21 = Simplify[ConjugateTranspose[Phi2] . Phi1];
+C22 = Simplify[ConjugateTranspose[Phi2] . Phi2];
+CS = Simplify[Conjugate[S]*S];
+VHiggs = par[[1]]*C11 + par[[2]]*C22 - par[[3]]*(C12 + C21) + par[[4]]/2*C11^2 + par[[5]]/2*C22^2 + par[[6]]*C11*C22 + par[[7]]*C12*C21 + par[[8]]/2*(C12^2 + C21^2) + par[[9]]/2*CS + par[[10]]/8*CS^2 + par[[11]]/2*C11*CS + par[[12]]/2*C22*CS//Simplify
+
+
+(*Calculate Tadpoles for Minimisation conditions*)
+VHiggsGrad=D[VHiggs,{higgsbase}]/.VEVRep//Transpose//Simplify;
+{"Derivative with respective to" higgsbase,VHiggsGrad}//Transpose//TableForm
+
+
+(*Define input parameters of the potential*)
+InputParameters={tanbeta, vs, L1, L2, L3, L4, L5, L6, L7, L8,m12Sq};
+
+
+ListOfDependentParameter = Select[RemoveDuplicates[Join[RemoveDuplicates[InputParameters],RemoveDuplicates[Join[par,higgsvev]]]],MemberQ[Join[par,higgsvev],#]&];
+Print["List of dependent parameters that you have to calculate is\n", ListOfDependentParameter//TableForm]
+
+
+(*Which parameters should be replaced through the minimum conditions?*)
+ParToReplace = {m11Sq, m22Sq, msSq};
+TadpoleRep = Solve[VHiggsGrad == Table[0,{VHiggsGrad}],ParToReplace][[1]];
+AdditionalConditions = Solve[v1^2+v2^2==vev0^2&& tanbeta==v2/v1,{v1,v2}][[2]];
+(DepententParameters = Flatten[{TadpoleRep//.AdditionalConditions//Simplify,AdditionalConditions }])//TableForm
+
+
+(*Sanity check*)
+If[(DepententParameters[[All,1]]//Sort) == (ListOfDependentParameter//Sort),Print["Everything looks good!\nAll dependent parameters have been defined!"],Print["You still have to define\n",TableForm[RemoveDuplicates[Join[RemoveDuplicates[DepententParameters[[All,1]]],RemoveDuplicates[ListOfDependentParameter]]]]]]
+
+
+(* ::Chapter:: *)
+(*Code*)
+(*In this section the model implementation is generated.*)
+
+
+(* ::Section:: *)
+(*MinimizeOrderVEV*)
+
+
+(*This section calculates the vector VevOrder which is set in the MinimizeOrderVEV function.*)
+VEVList={};
+Table[If[Not[PossibleZeroQ[higgsvevFiniteTemp[[i]]]],AppendTo[VEVList,i-1]];{i,higgsvevFiniteTemp[[i]]},{i,Length[higgsvevFiniteTemp]}];
+Table["VevOrder[" <> ToString[vev-1] <> "] = " <> ToString[VEVList[[vev]]] <> ";" ,{vev,Length[VEVList]}]//TableForm
+
+
+(* ::Section:: *)
+(*Calculate Higgs Curvature L1*)
+
+
+CurvatureL1 = GenerateCurvature[1];
+If[CurvatureL1=={},"No entries for Curvature_Higgs_L1",CurvatureL1//TableForm]
+
+
+(* ::Section:: *)
+(*Calculate Higgs Curvature L2*)
+
+
+CurvatureL2 = GenerateCurvature[2];
+If[CurvatureL2=={},"No entries for Curvature_Higgs_L2",CurvatureL2//TableForm]
+
+
+(* ::Section:: *)
+(*Calculate Higgs Curvature L3*)
+
+
+CurvatureL3 = GenerateCurvature[3];
+If[CurvatureL3=={},"No entries for Curvature_Higgs_L3",CurvatureL3//TableForm]
+
+
+(* ::Section:: *)
+(*Calculate Higgs Curvature L4*)
+
+
+CurvatureL4 = GenerateCurvature[4];
+If[CurvatureL4=={},"No entries for Curvature_Higgs_L4",CurvatureL4//TableForm]
+
+
+(* ::Section:: *)
+(*Counterterm potential*)
+
+
+(*Define counterterms*)
+parCT = Join[Table[Symbol["d"<>ToString[p]],{p,par}], Table[Symbol["dT"<>ToString[i]],{i,Length[higgsbase]}]]
+
+
+(*Define the counterterm potential*)
+VCT = ((VHiggs/.Table[par[[i]]->parCT[[i]],{i,Length[par]}]) + parCT[[(par//Length)+1;;]] . higgsbase)
+
+
+(*Define the sytem of equation to determine the CTs*)
+nCount=0;
+EqTar={};
+Table[nCount+=1; GL[nCount]=D[VCT,higgsbase[[i]]]/.VEVRep; If[PossibleZeroQ[GL[nCount]],nCount-=1,AppendTo[EqTar,-NCW[i]]],{i,Length[higgsbase]}];
+Table[nCount+=1; GL[nCount]=D[VCT,higgsbase[[i]],higgsbase[[j]]]/.VEVRep; If[PossibleZeroQ[GL[nCount]],nCount-=1,AppendTo[EqTar,-HCW[i,j]]],{i,Length[higgsbase]},{j,i,Length[higgsbase]}];
+EqMatrix = Table[D[GL[i],j],{i,nCount},{j,parCT}];
+Print["EqMatrix rank is ", EqMatrix//MatrixRank]
+EqMatrix//MatrixForm
+Print["EqTar is ", EqTar//TableForm]
+
+
+(*Define the sytem of equation to determine the CTs*)
+SysOriginal = Append[EqMatrix//Transpose,EqTar]//Transpose;
+Print["SysOriginal rank is ", SysOriginal//MatrixRank]
+SysOriginal//MatrixForm
+
+
+(*Find the CW relations that help solve the system*)
+SysOriginal = Append[EqMatrix//Transpose,EqTar]//Transpose;
+Stmp=RowReduce[SysOriginal, ZeroTest -> (! FreeQ[#, HCW[_,_]] || !FreeQ[#,NCW[_]] &)];
+CWRelations =Solve[Select[Stmp,#[[;;-2]]==Table[0,{i,(EqMatrix//Dimensions)[[2]]}]&][[All,-1]]==0,-EqTar][[1]];
+Print["Relations found between the CW 1st and 2nd derivative\n", CWRelations//TableForm]
+
+
+(*Reduce the system of equation so that Mathematica can solve it*)
+SysOriginal = Append[EqMatrix//Transpose,EqTar]//Transpose;
+SysOriginal = (SysOriginal/.CWRelations);
+NewMatrix={SysOriginal[[1]]};
+nCount=1;
+While[MatrixRank[NewMatrix]!=MatrixRank[SysOriginal] && nCount < (Length[SysOriginal] + 1),
+nCount+=1;
+If[MatrixRank[Append[NewMatrix,SysOriginal[[nCount]]]]>MatrixRank[NewMatrix],AppendTo[NewMatrix,SysOriginal[[nCount]]]]]
+
+
+(*Determine the CTs*)
+NullSpaceofCT = NullSpace[NewMatrix[[All,;;-2]]];
+NullSpaceofCT = Sum[NullSpaceofCT[[i]]*Subscript[t, i],{i,Length[NullSpaceofCT]}];
+CTs = LinearSolve[NewMatrix[[All,;;-2]],NewMatrix[[All,-1]]];
+CTs += NullSpaceofCT;
+{parCT,Table["\t\[RightArrow]\t",{i,parCT}],CTs}//Transpose//TableForm
+
+
+(* ::Subsection:: *)
+(*The Subscript[t, i] still need to be fixed *)
+(*We chose the following Subscript[t, i] to match the python and Maple implementation, but any other choice is valid .*)
+
+
+(*Chosen so that dL4 = 0 and dT9 = 0*)
+tiChoice = Solve[CTs[[7]]==0 && CTs[[21]]==0,{Subscript[t, 1],Subscript[t, 2]}][[1]]/.CWRelations
+
+
+(*Fixed CTs*)
+tiCTs = CTs/.tiChoice//Simplify;
+{parCT,Table["\t\[RightArrow]\t",{i,parCT}],tiCTs}//Transpose//TableForm
+
+
+(* ::Subsection:: *)
+(*Check that the counter terms are correct*)
+
+
+test = (((((EqMatrix) . parCT)/.(Thread[parCT -> tiCTs]))==(EqTar/.CWRelations))//Simplify);
+If[test,Print["Success!"],Print["Something went wrong.\nMake sure the missmatch between the CW derivatives and CT cannot bet solved by a CWRelations substitution rule."];test//TableForm]
+
+
+(* ::Subsection:: *)
+(*Print the CT into C++*)
+
+
+Table[ToString[parCT[[i]]//CForm] <> " = " <> ToString[CForm[tiCTs[[i]]/.{NCW[x_]->NablaWeinberg[x-1],HCW[x_,y_]->HesseWeinberg[x-1,y-1]}]] <> ";",{i,Length[parCT]}]//TableForm
+
+
+(* ::Section:: *)
+(*CTs Curvatures*)
+
+
+(* ::Section:: *)
+(*Calculate Higgs Curvature CT L1*)
+
+
+CTCurvatureL1 = GenerateCTsCurvature[1];
+If[CTCurvatureL1=={},"No entries for Curvature_Higgs_CT_L1",CTCurvatureL1//TableForm]
+
+
+(* ::Section:: *)
+(*Calculate Higgs Curvature CT L2*)
+
+
+CTCurvatureL2 = GenerateCTsCurvature[2];
+If[CTCurvatureL2=={},"No entries for Curvature_Higgs_CT_L2",CTCurvatureL2//TableForm]
+
+
+(* ::Section:: *)
+(*Calculate Higgs Curvature CT L3*)
+
+
+CTCurvatureL3 = GenerateCTsCurvature[3];
+If[CTCurvatureL3=={},"No entries for Curvature_Higgs_CT_L3",CTCurvatureL3//TableForm]
+
+
+(* ::Section:: *)
+(*Calculate Higgs Curvature CT L4*)
+
+
+CTCurvatureL4 = GenerateCTsCurvature[4];
+If[CTCurvatureL4=={},"No entries for Curvature_Higgs_CT_L4",CTCurvatureL4//TableForm]
+
+
+(* ::Chapter:: *)
+(*Gauge interaction*)
+(*This section defines the interaction between gauge bosons and scalars*)
+(*First define the basis for the gauge bosons*)
+
+
+(*Define the gauge fields*)
+GaugeBasis={Subscript[W, 1],Subscript[W, 2],Subscript[W, 3],Subscript[B, 0]}
+
+
+(*Define the covariant derivative*)
+Subscript[D, \[Mu]]= -I Subscript[C, g]/2 Sum[Subscript[W, i]PauliMatrix[i],{i,3}] -I Subscript[C, gs]/2 Subscript[B, 0] IdentityMatrix[2];
+Subscript[D, \[Mu]]//MatrixForm
+
+
+(*Define the gauge potential*)
+Vgauge = (Conjugate[(Subscript[D, \[Mu]] . Phi1)] . (Subscript[D, \[Mu]] . Phi1) + Conjugate[(Subscript[D, \[Mu]] . Phi2)] . (Subscript[D, \[Mu]] . Phi2))//ComplexExpand//Simplify
+
+
+(* ::Section:: *)
+(*Gauge Curvatures*)
+
+
+(* ::Section:: *)
+(*Calculate Gauge Curvature L4*)
+
+
+GaugeCurvatureL4 = GenerateGaugeCurvature;
+If[GaugeCurvatureL4=={},"No entries for "Curvature_Gauge _G2H2 "",GaugeCurvatureL4//TableForm]
+
+
+(* ::Chapter:: *)
+(*Lepton interaction*)
+(*This defines the interactions with Leptons. The N2HDM has several types to avoid FCNC. *)
+(*I am showing only Type 1 here as an example, meaning the Leptons and down-type quarks couple to the first doublet while the up-type quark couple to the second doublet.*)
+
+
+(*First we define the coupling matrix for the leptons*)
+PiLep = {{ye, 0, 0}, {0, ymu, 0}, {0, 0, ytau}};
+PiLep//MatrixForm
+
+
+(*Define the components of the lepton sectors*)
+NuL = {veL, vmuL, vtauL};
+ER = {eR, muR, tauR};
+EL = {eL, muL, tauL};
+LepBase = {eL, eR, muL, muR, tauL, tauR, veL, vmuL, vtauL};
+
+
+(*Defining the Lepton potential (=-L_yuk)*)
+VFLep = (NuL . PiLep . ER)Phi2[[1]] + (EL . PiLep . ER)Phi2[[2]]
+
+
+(*Leptonic mass matrix*)
+MassLep = D[VFLep,{LepBase,2}]/.VEVRep;
+MassLep//MatrixForm
+
+
+(*Fermionic masses*)
+MatrixForm[MLep = Eigenvalues[MassLep]]
+
+
+(*Calculate the Yukawas*)
+RepLepMass = Solve[{MLep[[5]] == CMassElectron, MLep[[7]] == CMassMu, MLep[[9]] == CMassTau}, {ye, ymu, ytau}][[1]]
+
+
+(* ::Section:: *)
+(*Leptonic Curvatures*)
+
+
+LeptonCurvatureL3 = GenerateLeptonCurvature;
+If[LeptonCurvatureL3=={},"No entries for Curvature_Lepton_F2H1",LeptonCurvatureL3//TableForm]
+
+
+(* ::Chapter:: *)
+(*Quark interaction*)
+(*As for the Leptons this shows the Type I scenario*)
+
+
+(*First we define the quark doublets*)
+UL = {uL, cL, tL};
+DL = {dL, sL, bL};
+UR = {uR, cR, tR};
+DR = {dR, sR, bR};
+
+baseQuarks = {uR, cR, tR, dR, sR, bR, uL, cL, tL, dL, sL, bL};
+
+
+(*This part is the CKM matrix. If you don't want to include it, set it to unity*)
+VCKM = {{V11, V12, V13}, {V21, V22, V23}, {V31, V32, V33}};
+VCKM//MatrixForm
+CKML = {V11 -> Vud, V12 -> Vus, V13 -> Vub, V21 -> Vcd, V22 -> Vcs, V23 -> Vcb, V31 -> Vtd, V32 -> Vts, V33 -> Vtb};
+VCKM/.CKML//MatrixForm
+
+
+(*Yukawa*)
+Dd = {{yd, 0, 0}, {0, ys, 0}, {0, 0, yb}};
+DU = {{yu, 0, 0}, {0, yc, 0}, {0, 0, yt}};
+Dd//MatrixForm
+DU//MatrixForm
+
+
+VF = (UL . VCKM . Dd . DR) Phi2[[1]] + (DL . Dd . DR)Phi2[[2]] + (UL . DU . UR)Conjugate[Phi2[[2]]] - (DL . ConjugateTranspose[VCKM] . DU . UR) Conjugate[Phi2[[1]]]//Simplify
+
+
+MQuark = D[VF,{baseQuarks,2}]/.VEVRep;
+MQuark//MatrixForm
+
+
+mQ = Eigenvalues[MQuark];
+mQ//MatrixForm
+
+
+RepMassQuark = Solve[{mQ[[2]] == CMassBottom, mQ[[4]] == CMassCharm, mQ[[6]] == CMassDown, mQ[[8]] ==CMassStrange, mQ[[10]] == CMassTop, mQ[[12]] == CMassUp}, {yb, yc, yd, ys, yt, yu}][[1]];
+RepMassQuark//MatrixForm
+
+
+(* ::Section:: *)
+(*Quark Curvatures*)
+
+
+QuarkCurvatureL3 = GenerateQuarkCurvature;
+If[QuarkCurvatureL3=={},"No entries for Curvature_Quark_F2H1",QuarkCurvatureL3//TableForm]
+
+
+(* ::Section:: *)
+(*Model implementation*)
+
+
+ListImplementedModels//TableForm
+
+
+(*Arguments of CreateModelFile*)
+ImplementModel[
+"N2HDMMathematica", (*Model name*)
+higgsbase, (*List of all field*)
+higgsvev, (*VEVs as T = 0*)
+higgsvevFiniteTemp, (*VEVs as T != 0*)
+VEVList, (*Derivation VEVList (calculated automatically)*)
+par, (*Potential parameters *)
+InputParameters, (*Input parameters *)
+{5.91129,293.035,0.300812,0.321809,-0.133425,4.11105,-3.84178,9.46329,-0.750455,0.743982,4842.28},(*Specific input parameters for the example file*)
+DepententParameters, (*Depentent parameters and how to calculate them*)
+CurvatureL1, (*Scalar curvatures L1 (calculated automatically)*)
+CurvatureL2, (*Scalar curvatures L2 (calculated automatically)*)
+CurvatureL3, (*Scalar curvatures L3 (calculated automatically)*)
+CurvatureL4, (*Scalar curvatures L4 (calculated automatically)*)
+GaugeCurvatureL4, (*Gauge curvatures L4 (calculated automatically)*)
+LeptonCurvatureL3, (*Lepton curvatures L3 (calculated automatically)*)
+QuarkCurvatureL3, (*Quark curvatures L3 (calculated automatically)*)
+parCT, (*Counter terms*)
+CTCurvatureL1, (*Counterterm scalar curvatures L1 (calculated automatically)*)
+CTCurvatureL2, (*Counterterm scalar curvatures L2 (calculated automatically)*)
+CTCurvatureL3, (*Counterterm scalar curvatures L3 (calculated automatically)*)
+CTCurvatureL4, (*Counterterm scalar curvatures L4 (calculated automatically)*)
+GaugeBasis, (*Gauge fields*)
+LepBase, (*Leptonic fields*)
+baseQuarks] (*Quark fields*)
+
+
+
+
diff --git a/tools/ModelGeneration/Mathematica/R2HDM.m b/tools/ModelGeneration/Mathematica/R2HDM.m
new file mode 100644
index 000000000..1536802b7
--- /dev/null
+++ b/tools/ModelGeneration/Mathematica/R2HDM.m
@@ -0,0 +1,414 @@
+(* ::Package:: *)
+
+(* ::Chapter:: *)
+(*Helper functions*)
+
+
+(*Import helper functions*)
+<< (NotebookDirectory[]<>"CreateModel.m")
+
+
+(* ::Chapter:: *)
+(*In this section the scalar potential is defined. As an example the Type-1 R2HDM in the convention of [arXiv:1803.02846] is shown*)
+
+
+(*Define higgs fields*)
+higgsbase = {\[Rho]1, \[Eta]1, \[Rho]2, \[Eta]2, \[Zeta]1, \[Psi]1, \[Zeta]2, \[Psi]2};
+
+
+(*Assign vevs at T=0*)
+higgsvev = {0, 0, 0, 0, v1, 0, v2, 0};
+
+
+(*Assign vevs at T != 0*)
+higgsvevFiniteTemp = {0, 0, wcb, 0, w1, 0, w2, wcp};
+
+
+(*Replacement list for the vevs*)
+VEVRep = Table[i[[1]]->i[[2]],{i,Transpose[{higgsbase,higgsvev}]}];
+
+
+(*Replacement list set fields zero*)
+RepHiggsZero = Table[i->0,{i,higgsbase}];
+
+
+(*Define number of Higgses*)
+nHiggs = Length[higgsbase];
+
+
+(*Define parameters of the potential*)
+par = {m11Sq, m22Sq, m12Sq, L1, L2, L3, L4, L5};
+
+
+(*Define doublets and scalar fields*)
+Phi1 = {higgsbase[[1]] + higgsbase[[2]]*I, higgsbase[[5]] + higgsbase[[6]]*I}/Sqrt[2];
+Phi2 = {higgsbase[[3]] + higgsbase[[4]]*I, higgsbase[[7]] + higgsbase[[8]]*I}/Sqrt[2];
+(*Print fields*)
+Phi1//MatrixForm//TraditionalForm
+Phi2//MatrixForm//TraditionalForm
+
+
+(*Write the potential*)
+$Assumptions = higgsbase \[Element] Reals;
+C11 = Simplify[ConjugateTranspose[Phi1] . Phi1];
+C12 = Simplify[ConjugateTranspose[Phi1] . Phi2];
+C21 = Simplify[ConjugateTranspose[Phi2] . Phi1];
+C22 = Simplify[ConjugateTranspose[Phi2] . Phi2];
+VHiggs = par[[1]]*C11 + par[[2]]*C22 - par[[3]]*(C12 + C21) + \
+ par[[4]]/2*C11^2 + par[[5]]/2*C22^2 + par[[6]]*C11*C22 + \
+ par[[7]]*C12*C21 + par[[8]]/2*(C12^2 + C21^2)//Simplify
+
+
+(*Calculate Tadpoles for Minimisation conditions*)
+VHiggsGrad=D[VHiggs,{higgsbase}]/.VEVRep//Transpose//Simplify;
+{"Derivative with respective to" higgsbase,VHiggsGrad}//Transpose//TableForm
+
+
+(*Define input parameters of the potential*)
+InputParameters={type, L1, L2, L3, L4, L5, m12Sq, tanbeta};
+
+
+ListOfDependentParameter = Select[RemoveDuplicates[Join[RemoveDuplicates[InputParameters],RemoveDuplicates[Join[par,higgsvev]]]],MemberQ[Join[par,higgsvev],#]&];
+Print["List of dependent parameters that you have to calculate is\n", ListOfDependentParameter//TableForm]
+
+
+(*Which parameters should be replaced through the minimum conditions?*)
+ParToReplace = {m11Sq, m22Sq};
+TadpoleRep = Solve[VHiggsGrad == Table[0,{VHiggsGrad}],ParToReplace][[1]];
+AdditionalConditions = Solve[v1^2+v2^2==vev0^2&& tanbeta==v2/v1,{v1,v2}][[2]];
+(DepententParameters = Flatten[{TadpoleRep//.AdditionalConditions//Simplify,AdditionalConditions }])//TableForm
+
+
+(*Sanity check*)
+If[(DepententParameters[[All,1]]//Sort) == (ListOfDependentParameter//Sort),Print["Everything looks good!\nAll dependent parameters have been defined!"],Print["You still have to define\n",TableForm[RemoveDuplicates[Join[RemoveDuplicates[DepententParameters[[All,1]]],RemoveDuplicates[ListOfDependentParameter]]]]]]
+
+
+(* ::Chapter:: *)
+(*Code*)
+(*In this section the model implementation is generated.*)
+
+
+(* ::Section:: *)
+(*MinimizeOrderVEV*)
+
+
+(*This section calculates the vector VevOrder which is set in the MinimizeOrderVEV function.*)
+VEVList={};
+Table[If[Not[PossibleZeroQ[higgsvevFiniteTemp[[i]]]],AppendTo[VEVList,i-1]];{i,higgsvevFiniteTemp[[i]]},{i,Length[higgsvevFiniteTemp]}];
+Table["VevOrder[" <> ToString[vev-1] <> "] = " <> ToString[VEVList[[vev]]] <> ";" ,{vev,Length[VEVList]}]//TableForm
+
+
+(* ::Section:: *)
+(*Calculate Higgs Curvature L1*)
+
+
+CurvatureL1 = GenerateCurvature[1];
+If[CurvatureL1=={},"No entries for Curvature_Higgs_L1",CurvatureL1//TableForm]
+
+
+(* ::Section:: *)
+(*Calculate Higgs Curvature L2*)
+
+
+CurvatureL2 = GenerateCurvature[2];
+If[CurvatureL2=={},"No entries for Curvature_Higgs_L2",CurvatureL2//TableForm]
+
+
+(* ::Section:: *)
+(*Calculate Higgs Curvature L3*)
+
+
+CurvatureL3 = GenerateCurvature[3];
+If[CurvatureL3=={},"No entries for Curvature_Higgs_L3",CurvatureL3//TableForm]
+
+
+(* ::Section:: *)
+(*Calculate Higgs Curvature L4*)
+
+
+CurvatureL4 = GenerateCurvature[4];
+If[CurvatureL4=={},"No entries for Curvature_Higgs_L4",CurvatureL4//TableForm]
+
+
+(* ::Section:: *)
+(*Counterterm potential*)
+
+
+(*Define counterterms*)
+parCT = Join[Table[Symbol["d"<>ToString[p]],{p,par}], Table[Symbol["dT"<>ToString[i]],{i,Length[higgsbase]}]]
+
+
+(*Define the counterterm potential*)
+VCT = ((VHiggs/.Table[par[[i]]->parCT[[i]],{i,Length[par]}]) + parCT[[(par//Length)+1;;]] . higgsbase)
+
+
+(*Define the sytem of equation to determine the CTs*)
+nCount=0;
+EqTar={};
+Table[nCount+=1; GL[nCount]=D[VCT,higgsbase[[i]]]/.VEVRep; If[PossibleZeroQ[GL[nCount]],nCount-=1,AppendTo[EqTar,-NCW[i]]],{i,Length[higgsbase]}];
+Table[nCount+=1; GL[nCount]=D[VCT,higgsbase[[i]],higgsbase[[j]]]/.VEVRep; If[PossibleZeroQ[GL[nCount]],nCount-=1,AppendTo[EqTar,-HCW[i,j]]],{i,Length[higgsbase]},{j,i,Length[higgsbase]}];
+EqMatrix = Table[D[GL[i],j],{i,nCount},{j,parCT}];
+Print["EqMatrix rank is ", EqMatrix//MatrixRank]
+EqMatrix//MatrixForm
+Print["EqTar is ", EqTar//TableForm]
+
+
+(*Define the sytem of equation to determine the CTs*)
+SysOriginal = Append[EqMatrix//Transpose,EqTar]//Transpose;
+Print["SysOriginal rank is ", SysOriginal//MatrixRank]
+SysOriginal//MatrixForm
+
+
+(*Find the CW relations that help solve the system*)
+SysOriginal = Append[EqMatrix//Transpose,EqTar]//Transpose;
+Stmp=RowReduce[SysOriginal, ZeroTest -> (! FreeQ[#, HCW[_,_]] || !FreeQ[#,NCW[_]] &)];
+CWRelations =Solve[Select[Stmp,#[[;;-2]]==Table[0,{i,(EqMatrix//Dimensions)[[2]]}]&][[All,-1]]==0,-EqTar][[1]];
+Print["Relations found between the CW 1st and 2nd derivative\n", CWRelations//TableForm]
+
+
+(*Reduce the system of equation so that Mathematica can solve it*)
+SysOriginal = Append[EqMatrix//Transpose,EqTar]//Transpose;
+SysOriginal = (SysOriginal/.CWRelations);
+NewMatrix={SysOriginal[[1]]};
+nCount=1;
+While[MatrixRank[NewMatrix]!=MatrixRank[SysOriginal] && nCount < (Length[SysOriginal] + 1),
+nCount+=1;
+If[MatrixRank[Append[NewMatrix,SysOriginal[[nCount]]]]>MatrixRank[NewMatrix],AppendTo[NewMatrix,SysOriginal[[nCount]]]]]
+
+
+(*Determine the CTs*)
+NullSpaceofCT = NullSpace[NewMatrix[[All,;;-2]]];
+NullSpaceofCT = Sum[NullSpaceofCT[[i]]*Subscript[t, i],{i,Length[NullSpaceofCT]}];
+CTs = LinearSolve[NewMatrix[[All,;;-2]],NewMatrix[[All,-1]]];
+CTs += NullSpaceofCT;
+{parCT,Table["\t\[RightArrow]\t",{i,parCT}],CTs}//Transpose//TableForm
+
+
+(* ::Subsection:: *)
+(*The Subscript[t, i] still need to be fixed *)
+(*We chose the following Subscript[t, i] to match the python and Maple implementation, but any other choice is valid .*)
+
+
+(*Chosen so that dL4 = 0 and dT9 = 0*)
+tiChoice = Solve[CTs[[7]]==0,{Subscript[t, 1]}][[1]]/.CWRelations
+
+
+(*Fixed CTs*)
+tiCTs = CTs/.tiChoice//Simplify;
+{parCT,Table["\t\[RightArrow]\t",{i,parCT}],tiCTs}//Transpose//TableForm
+
+
+(* ::Subsection:: *)
+(*Check that the counter terms are correct*)
+
+
+test = (((((EqMatrix) . parCT)/.(Thread[parCT -> tiCTs]))==(EqTar/.CWRelations))//Simplify);
+If[test,Print["Success!"],Print["Something went wrong.\nMake sure the missmatch between the CW derivatives and CT cannot bet solved by a CWRelations substitution rule."];test//TableForm]
+
+
+(* ::Subsection:: *)
+(*Print the CT into C++*)
+
+
+Table[ToString[parCT[[i]]//CForm] <> " = " <> ToString[CForm[tiCTs[[i]]/.{NCW[x_]->NablaWeinberg[x-1],HCW[x_,y_]->HesseWeinberg[x-1,y-1]}]] <> ";",{i,Length[parCT]}]//TableForm
+
+
+(* ::Section:: *)
+(*CTs Curvatures*)
+
+
+(* ::Section:: *)
+(*Calculate Higgs Curvature CT L1*)
+
+
+CTCurvatureL1 = GenerateCTsCurvature[1];
+If[CTCurvatureL1=={},"No entries for Curvature_Higgs_CT_L1",CTCurvatureL1//TableForm]
+
+
+(* ::Section:: *)
+(*Calculate Higgs Curvature CT L2*)
+
+
+CTCurvatureL2 = GenerateCTsCurvature[2];
+If[CTCurvatureL2=={},"No entries for Curvature_Higgs_CT_L2",CTCurvatureL2//TableForm]
+
+
+(* ::Section:: *)
+(*Calculate Higgs Curvature CT L3*)
+
+
+CTCurvatureL3 = GenerateCTsCurvature[3];
+If[CTCurvatureL3=={},"No entries for Curvature_Higgs_CT_L3",CTCurvatureL3//TableForm]
+
+
+(* ::Section:: *)
+(*Calculate Higgs Curvature CT L4*)
+
+
+CTCurvatureL4 = GenerateCTsCurvature[4];
+If[CTCurvatureL4=={},"No entries for Curvature_Higgs_CT_L4",CTCurvatureL4//TableForm]
+
+
+(* ::Chapter:: *)
+(*Gauge interaction*)
+(*This section defines the interaction between gauge bosons and scalars*)
+(*First define the basis for the gauge bosons*)
+
+
+(*Define the gauge fields*)
+GaugeBasis={Subscript[W, 1],Subscript[W, 2],Subscript[W, 3],Subscript[B, 0]}
+
+
+(*Define the covariant derivative*)
+Subscript[D, \[Mu]]= -I Subscript[C, g]/2 Sum[Subscript[W, i]PauliMatrix[i],{i,3}] -I Subscript[C, gs]/2 Subscript[B, 0] IdentityMatrix[2];
+Subscript[D, \[Mu]]//MatrixForm
+
+
+(*Define the gauge potential*)
+Vgauge = (Conjugate[(Subscript[D, \[Mu]] . Phi1)] . (Subscript[D, \[Mu]] . Phi1) + Conjugate[(Subscript[D, \[Mu]] . Phi2)] . (Subscript[D, \[Mu]] . Phi2))//ComplexExpand//Simplify
+
+
+(* ::Section:: *)
+(*Gauge Curvatures*)
+
+
+(* ::Section:: *)
+(*Calculate Gauge Curvature L4*)
+
+
+GaugeCurvatureL4 = GenerateGaugeCurvature;
+If[GaugeCurvatureL4=={},"No entries for "Curvature_Gauge _G2H2 "",GaugeCurvatureL4//TableForm]
+
+
+(* ::Chapter:: *)
+(*Lepton interaction*)
+(*This defines the interactions with Leptons. The N2HDM has several types to avoid FCNC. *)
+(*I am showing only Type 1 here as an example, meaning the Leptons and down-type quarks couple to the first doublet while the up-type quark couple to the second doublet.*)
+
+
+(*First we define the coupling matrix for the leptons*)
+PiLep = {{ye, 0, 0}, {0, ymu, 0}, {0, 0, ytau}};
+PiLep//MatrixForm
+
+
+(*Define the components of the lepton sectors*)
+NuL = {veL, vmuL, vtauL};
+ER = {eR, muR, tauR};
+EL = {eL, muL, tauL};
+LepBase = {eL, eR, muL, muR, tauL, tauR, veL, vmuL, vtauL};
+
+
+(*Defining the Lepton potential (=-L_yuk)*)
+VFLep = (NuL . PiLep . ER)Phi2[[1]] + (EL . PiLep . ER)Phi2[[2]]
+
+
+(*Leptonic mass matrix*)
+MassLep = D[VFLep,{LepBase,2}]/.VEVRep;
+MassLep//MatrixForm
+
+
+(*Fermionic masses*)
+MatrixForm[MLep = Eigenvalues[MassLep]]
+
+
+(*Calculate the Yukawas*)
+RepLepMass = Solve[{MLep[[5]] == CMassElectron, MLep[[7]] == CMassMu, MLep[[9]] == CMassTau}, {ye, ymu, ytau}][[1]]
+
+
+(* ::Section:: *)
+(*Leptonic Curvatures*)
+
+
+LeptonCurvatureL3 = GenerateLeptonCurvature;
+If[LeptonCurvatureL3=={},"No entries for Curvature_Lepton_F2H1",LeptonCurvatureL3//TableForm]
+
+
+(* ::Chapter:: *)
+(*Quark interaction*)
+(*As for the Leptons this shows the Type I scenario*)
+
+
+(*First we define the quark doublets*)
+UL = {uL, cL, tL};
+DL = {dL, sL, bL};
+UR = {uR, cR, tR};
+DR = {dR, sR, bR};
+
+baseQuarks = {uR, cR, tR, dR, sR, bR, uL, cL, tL, dL, sL, bL};
+
+
+(*This part is the CKM matrix. If you don't want to include it, set it to unity*)
+VCKM = {{V11, V12, V13}, {V21, V22, V23}, {V31, V32, V33}};
+VCKM//MatrixForm
+CKML = {V11 -> Vud, V12 -> Vus, V13 -> Vub, V21 -> Vcd, V22 -> Vcs, V23 -> Vcb, V31 -> Vtd, V32 -> Vts, V33 -> Vtb};
+VCKM/.CKML//MatrixForm
+
+
+(*Yukawa*)
+Dd = {{yd, 0, 0}, {0, ys, 0}, {0, 0, yb}};
+DU = {{yu, 0, 0}, {0, yc, 0}, {0, 0, yt}};
+Dd//MatrixForm
+DU//MatrixForm
+
+
+VF = (UL . VCKM . Dd . DR) Phi2[[1]] + (DL . Dd . DR)Phi2[[2]] + (UL . DU . UR)Conjugate[Phi2[[2]]] -\
+ (DL . ConjugateTranspose[VCKM] . DU . UR) Conjugate[Phi2[[1]]]//Simplify
+
+
+MQuark = D[VF,{baseQuarks,2}]/.VEVRep;
+MQuark//MatrixForm
+
+
+mQ = Eigenvalues[MQuark];
+mQ//MatrixForm
+
+
+RepMassQuark = Solve[{mQ[[2]] == CMassBottom, mQ[[4]] == CMassCharm, mQ[[6]] == CMassDown, mQ[[8]] ==CMassStrange, mQ[[10]] == CMassTop, mQ[[12]] == CMassUp}, {yb, yc, yd, ys, yt, yu}][[1]];
+RepMassQuark//MatrixForm
+
+
+(* ::Section:: *)
+(*Quark Curvatures*)
+
+
+QuarkCurvatureL3 = GenerateQuarkCurvature;
+If[QuarkCurvatureL3=={},"No entries for Curvature_Quark_F2H1",QuarkCurvatureL3//TableForm]
+
+
+(* ::Section:: *)
+(*Model implementation*)
+
+
+ListImplementedModels//TableForm
+
+
+(*Arguments of CreateModelFile*)
+ImplementModel[
+"R2HDMMathematica", (*Model name*)
+higgsbase, (*List of all field*)
+higgsvev, (*VEVs as T = 0*)
+higgsvevFiniteTemp, (*VEVs as T != 0*)
+VEVList, (*Derivation VEVList (calculated automatically)*)
+par, (*Potential parameters *)
+InputParameters, (*Input parameters *)
+(* type, L1, L2, L3, L4, L5, m12Sq, tanbeta *)
+{1, 2.740594787, 0.2423556498, 5.534491052, -2.585467181, -2.225991025, 7738.56, 4.63286},(*Specific input parameters for the example file*)
+DepententParameters, (*Depentent parameters and how to calculate them*)
+CurvatureL1, (*Scalar curvatures L1 (calculated automatically)*)
+CurvatureL2, (*Scalar curvatures L2 (calculated automatically)*)
+CurvatureL3, (*Scalar curvatures L3 (calculated automatically)*)
+CurvatureL4, (*Scalar curvatures L4 (calculated automatically)*)
+GaugeCurvatureL4, (*Gauge curvatures L4 (calculated automatically)*)
+LeptonCurvatureL3, (*Lepton curvatures L3 (calculated automatically)*)
+QuarkCurvatureL3, (*Quark curvatures L3 (calculated automatically)*)
+parCT, (*Counter terms*)
+CTCurvatureL1, (*Counterterm scalar curvatures L1 (calculated automatically)*)
+CTCurvatureL2, (*Counterterm scalar curvatures L2 (calculated automatically)*)
+CTCurvatureL3, (*Counterterm scalar curvatures L3 (calculated automatically)*)
+CTCurvatureL4, (*Counterterm scalar curvatures L4 (calculated automatically)*)
+GaugeBasis, (*Gauge fields*)
+LepBase, (*Leptonic fields*)
+baseQuarks] (*Quark fields*)
+
+
+
From 3bd4f9d46a4c8bb1a52da0af146162e834d33b88 Mon Sep 17 00:00:00 2001
From: Lisa Biermann
Date: Wed, 11 Dec 2024 16:37:46 +0100
Subject: [PATCH 04/10] Rename tmp in a meaningful way
---
src/transition_tracer/transition_tracer.cpp | 12 +++++++-----
1 file changed, 7 insertions(+), 5 deletions(-)
diff --git a/src/transition_tracer/transition_tracer.cpp b/src/transition_tracer/transition_tracer.cpp
index 6e22e8c94..f14066009 100644
--- a/src/transition_tracer/transition_tracer.cpp
+++ b/src/transition_tracer/transition_tracer.cpp
@@ -510,15 +510,17 @@ void TransitionTracer::CheckMassRatio(const user_input &input,
const double &temp) const
{
std::stringstream ss;
- std::vector massOverTempSq, tmp;
+ std::vector massOverTempSq, massOverTempSqGauge;
massOverTempSq = input.modelPointer->HiggsMassesSquared(
input.modelPointer->MinimizeOrderVEV(vec), temp) /
std::pow(temp, 2);
- tmp = input.modelPointer->GaugeMassesSquared(
- input.modelPointer->MinimizeOrderVEV(vec), temp) /
- std::pow(temp, 2);
+ massOverTempSqGauge = input.modelPointer->GaugeMassesSquared(
+ input.modelPointer->MinimizeOrderVEV(vec), temp) /
+ std::pow(temp, 2);
- massOverTempSq.insert(massOverTempSq.end(), tmp.begin(), tmp.end());
+ massOverTempSq.insert(massOverTempSq.end(),
+ massOverTempSqGauge.begin(),
+ massOverTempSqGauge.end());
int color = 0;
for (auto el : massOverTempSq)
From 0b8c2d4dfd17c6df893c28422296851afd03652b Mon Sep 17 00:00:00 2001
From: Philipp Basler <28863303+phbasler@users.noreply.github.com>
Date: Wed, 11 Dec 2024 16:51:15 +0100
Subject: [PATCH 05/10] Dont try to autocommit on dependabot or fork jobs
(#187)
* Dont use secret in dependabot job
* add brackets
* trigger change
* Automatically applied linter
* print env
* add brackets
* Automatically applied linter
* remove debug line
---------
Co-authored-by: GitHub Actions Bot <>
---
.github/workflows/linter.yml | 19 +++++++++++++++----
1 file changed, 15 insertions(+), 4 deletions(-)
diff --git a/.github/workflows/linter.yml b/.github/workflows/linter.yml
index 905fd7eca..a3a53e608 100644
--- a/.github/workflows/linter.yml
+++ b/.github/workflows/linter.yml
@@ -11,6 +11,8 @@ concurrency:
jobs:
linter:
runs-on: ubuntu-latest
+ env:
+ LocalCommit: ${{ github.event.pull_request.head.repo.full_name == github.repository && github.actor != 'dependabot[bot]' }}
steps:
- uses: actions/checkout@v4
@@ -18,10 +20,13 @@ jobs:
fetch-depth: 0
ref: ${{ github.head_ref }}
token: ${{ secrets.LINTER_PAT }}
+ if: env.LocalCommit
- - name: Install clang-format
- if: inputs.apply_clang_format
- run: pip3 install clang-format==14.0.0
+ - uses: actions/checkout@v4
+ with:
+ fetch-depth: 0
+ ref: ${{ github.head_ref }}
+ if: ${{ !env.LocalCommit }}
- run: git fetch origin $GITHUB_BASE_REF
@@ -59,8 +64,14 @@ jobs:
git config user.email "<>"
- name: Commit changes
- if: steps.check-changes.outputs.ChangesFound == 'True'
+ if: steps.check-changes.outputs.ChangesFound == 'True' && env.LocalCommit
run: |
git commit -am "Automatically applied linter"
git push
+ - name: Notify that changes are required
+ if: ${{ steps.check-changes.outputs.ChangesFound == 'True' && !env.LocalCommit }}
+ run: |
+ echo "Linter changes are required" >> $GITHUB_STEP_SUMMARY
+ exit 1
+
From 27bfc3ee81c278a4ca2dbd66eee54301ff2413fd Mon Sep 17 00:00:00 2001
From: Philipp Basler <28863303+phbasler@users.noreply.github.com>
Date: Wed, 11 Dec 2024 20:26:40 +0100
Subject: [PATCH 06/10] Next attempt at fixing linter for non local (#188)
* Next attempt at fixing linter for non local
* Update linter.yml
* Update .github/workflows/linter.yml
* Update .github/workflows/linter.yml
---
.github/workflows/linter.yml | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/.github/workflows/linter.yml b/.github/workflows/linter.yml
index a3a53e608..905a050b1 100644
--- a/.github/workflows/linter.yml
+++ b/.github/workflows/linter.yml
@@ -20,13 +20,13 @@ jobs:
fetch-depth: 0
ref: ${{ github.head_ref }}
token: ${{ secrets.LINTER_PAT }}
- if: env.LocalCommit
+ if: env.LocalCommit == 'true'
- uses: actions/checkout@v4
with:
fetch-depth: 0
ref: ${{ github.head_ref }}
- if: ${{ !env.LocalCommit }}
+ if: env.LocalCommit != 'true'
- run: git fetch origin $GITHUB_BASE_REF
@@ -64,13 +64,13 @@ jobs:
git config user.email "<>"
- name: Commit changes
- if: steps.check-changes.outputs.ChangesFound == 'True' && env.LocalCommit
+ if: steps.check-changes.outputs.ChangesFound == 'True' && env.LocalCommit == 'true'
run: |
git commit -am "Automatically applied linter"
git push
- name: Notify that changes are required
- if: ${{ steps.check-changes.outputs.ChangesFound == 'True' && !env.LocalCommit }}
+ if: ${{ steps.check-changes.outputs.ChangesFound == 'True' && env.LocalCommit != 'true' }}
run: |
echo "Linter changes are required" >> $GITHUB_STEP_SUMMARY
exit 1
From 5e91ba45b19ff0a6687f973b014ad644fb54021e Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Wed, 11 Dec 2024 20:51:23 +0000
Subject: [PATCH 07/10] Bump JamesIves/github-pages-deploy-action from 4.6.9 to
4.7.2 (#186)
* Bump JamesIves/github-pages-deploy-action from 4.6.9 to 4.7.2
Bumps [JamesIves/github-pages-deploy-action](https://github.com/jamesives/github-pages-deploy-action) from 4.6.9 to 4.7.2.
- [Release notes](https://github.com/jamesives/github-pages-deploy-action/releases)
- [Commits](https://github.com/jamesives/github-pages-deploy-action/compare/v4.6.9...v4.7.2)
---
updated-dependencies:
- dependency-name: JamesIves/github-pages-deploy-action
dependency-type: direct:production
update-type: version-update:semver-minor
...
Signed-off-by: dependabot[bot]
* Next attempt at fixing linter for non local
* Update linter.yml
* Update linter.yml
---------
Signed-off-by: dependabot[bot]
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Philipp Basler <28863303+phbasler@users.noreply.github.com>
---
.github/workflows/doc.yml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/.github/workflows/doc.yml b/.github/workflows/doc.yml
index 697bf3faa..193e2f6c2 100644
--- a/.github/workflows/doc.yml
+++ b/.github/workflows/doc.yml
@@ -54,7 +54,7 @@ jobs:
name: documentation
path: documentation
- name: Deploy
- uses: JamesIves/github-pages-deploy-action@v4.6.9
+ uses: JamesIves/github-pages-deploy-action@v4.7.2
with:
branch: gh-pages # The branch the action should deploy to.
folder: documentation # The folder the action should deploy.
From 3ac2b2b5e2d031588a2407e5a51c5d9ad441fa03 Mon Sep 17 00:00:00 2001
From: Lisa Biermann
Date: Fri, 13 Dec 2024 10:15:17 +0100
Subject: [PATCH 08/10] Add max ratio output and unit test
---
.../transition_tracer/transition_tracer.h | 7 +--
src/transition_tracer/transition_tracer.cpp | 41 ++++++++------
tests/unittests/Test-gw.cpp | 54 ++++++++++++++++++-
3 files changed, 81 insertions(+), 21 deletions(-)
diff --git a/include/BSMPT/transition_tracer/transition_tracer.h b/include/BSMPT/transition_tracer/transition_tracer.h
index 43cf73ff3..32e4e7be7 100644
--- a/include/BSMPT/transition_tracer/transition_tracer.h
+++ b/include/BSMPT/transition_tracer/transition_tracer.h
@@ -194,10 +194,11 @@ class TransitionTracer
* @param input
* @param vev
* @param temp
+ * @return maximal ratio
*/
- void CheckMassRatio(const user_input &input,
- const std::vector &vec,
- const double &temp) const;
+ double CheckMassRatio(const user_input &input,
+ const std::vector &vec,
+ const double &temp) const;
};
} // namespace BSMPT
diff --git a/src/transition_tracer/transition_tracer.cpp b/src/transition_tracer/transition_tracer.cpp
index f14066009..c52033580 100644
--- a/src/transition_tracer/transition_tracer.cpp
+++ b/src/transition_tracer/transition_tracer.cpp
@@ -138,7 +138,7 @@ TransitionTracer::TransitionTracer(user_input &input)
new_transition_data.crit_false_vev =
pair.false_phase.Get(pair.crit_temp).point;
- CheckMassRatio(
+ auto max_ratio = CheckMassRatio(
input, new_transition_data.crit_false_vev, pair.crit_temp);
BounceSolution bounce(input.modelPointer,
@@ -176,9 +176,10 @@ TransitionTracer::TransitionTracer(user_input &input)
EmptyValue))
.point;
- CheckMassRatio(input,
- new_transition_data.nucl_approx_false_vev,
- bounce.GetNucleationTempApprox());
+ auto max_ratio =
+ CheckMassRatio(input,
+ new_transition_data.nucl_approx_false_vev,
+ bounce.GetNucleationTempApprox());
}
else
{
@@ -202,9 +203,11 @@ TransitionTracer::TransitionTracer(user_input &input)
pair.false_phase
.Get(new_transition_data.nucl_temp.value_or(EmptyValue))
.point;
- CheckMassRatio(input,
- new_transition_data.nucl_false_vev,
- bounce.GetNucleationTemp());
+
+ auto max_ratio =
+ CheckMassRatio(input,
+ new_transition_data.nucl_false_vev,
+ bounce.GetNucleationTemp());
}
else
{
@@ -228,9 +231,11 @@ TransitionTracer::TransitionTracer(user_input &input)
pair.false_phase
.Get(new_transition_data.perc_temp.value_or(EmptyValue))
.point;
- CheckMassRatio(input,
- new_transition_data.perc_false_vev,
- bounce.GetPercolationTemp());
+
+ auto max_ratio =
+ CheckMassRatio(input,
+ new_transition_data.perc_false_vev,
+ bounce.GetPercolationTemp());
}
else
{
@@ -256,9 +261,11 @@ TransitionTracer::TransitionTracer(user_input &input)
.Get(
new_transition_data.compl_temp.value_or(EmptyValue))
.point;
- CheckMassRatio(input,
- new_transition_data.compl_false_vev,
- bounce.GetCompletionTemp());
+
+ auto max_ratio =
+ CheckMassRatio(input,
+ new_transition_data.compl_false_vev,
+ bounce.GetCompletionTemp());
}
else
{
@@ -505,9 +512,9 @@ TransitionTracer::~TransitionTracer()
{
}
-void TransitionTracer::CheckMassRatio(const user_input &input,
- const std::vector &vec,
- const double &temp) const
+double TransitionTracer::CheckMassRatio(const user_input &input,
+ const std::vector &vec,
+ const double &temp) const
{
std::stringstream ss;
std::vector massOverTempSq, massOverTempSqGauge;
@@ -553,7 +560,7 @@ void TransitionTracer::CheckMassRatio(const user_input &input,
}
Logger::Write(LoggingLevel::TransitionDetailed, ss.str());
- return;
+ return *std::max_element(massOverTempSq.begin(), massOverTempSq.end());
}
} // namespace BSMPT
diff --git a/tests/unittests/Test-gw.cpp b/tests/unittests/Test-gw.cpp
index 83292683b..4866f588d 100644
--- a/tests/unittests/Test-gw.cpp
+++ b/tests/unittests/Test-gw.cpp
@@ -683,6 +683,58 @@ TEST_CASE("Checking phase tracking for SM with Mode 2", "[gw]")
REQUIRE(vac.PhasesList.size() == 2);
}
+TEST_CASE("Check maximal thermal mass squared over temperature ratio")
+{
+ const std::vector example_point_SM{
+ /* muSq = */ -7823.7540500000005,
+ /* lambda = */ 0.12905349405143487};
+
+ using namespace BSMPT;
+ const auto SMConstants = GetSMConstants();
+ std::shared_ptr modelPointer =
+ ModelID::FChoose(ModelID::ModelIDs::SM, SMConstants);
+ modelPointer->initModel(example_point_SM);
+
+ std::shared_ptr MinTracer(
+ new MinimumTracer(modelPointer, Minimizer::WhichMinimizerDefault, false));
+
+ user_input input;
+ input.modelPointer = modelPointer;
+ input.gw_calculation = true;
+ TransitionTracer trans(input);
+ trans.ListBounceSolution.at(0).CalculatePercolationTemp();
+
+ auto output = trans.output_store;
+
+ REQUIRE(0.781639 == Approx(trans.CheckMassRatio(
+ input,
+ output.vec_trans_data.at(0).crit_false_vev,
+ output.vec_trans_data.at(0).crit_temp.value()))
+ .epsilon(1e-2));
+ REQUIRE(0.781639 ==
+ Approx(trans.CheckMassRatio(
+ input,
+ output.vec_trans_data.at(0).nucl_approx_false_vev,
+ output.vec_trans_data.at(0).nucl_approx_temp.value()))
+ .epsilon(1e-2));
+ REQUIRE(0.781639 == Approx(trans.CheckMassRatio(
+ input,
+ output.vec_trans_data.at(0).nucl_false_vev,
+ output.vec_trans_data.at(0).nucl_temp.value()))
+ .epsilon(1e-2));
+ REQUIRE(0.781639 == Approx(trans.CheckMassRatio(
+ input,
+ output.vec_trans_data.at(0).perc_false_vev,
+ output.vec_trans_data.at(0).perc_temp.value()))
+ .epsilon(1e-2));
+ REQUIRE(0.781639 ==
+ Approx(trans.CheckMassRatio(
+ input,
+ output.vec_trans_data.at(0).compl_false_vev,
+ output.vec_trans_data.at(0).compl_temp.value()))
+ .epsilon(1e-2));
+}
+
TEST_CASE("Checking phase tracking and GW for BP3", "[gw]")
{
const std::vector example_point_CXSM{/* v = */ 245.34120667410863,
@@ -843,7 +895,7 @@ TEST_CASE("Checking phase tracking and GW for BP3 (low sample)", "[gw]")
}
TEST_CASE(
- "Checking phase tracking and GW for BP3 (low sample) (suposed to fail)",
+ "Checking phase tracking and GW for BP3 (low sample) (supposed to fail)",
"[gw]")
{
const std::vector example_point_CXSM{/* v = */ 245.34120667410863,
From ca040c64fd80dbe0e4d152cc6571b03a321278bf Mon Sep 17 00:00:00 2001
From: Philipp Basler <28863303+phbasler@users.noreply.github.com>
Date: Tue, 17 Dec 2024 08:56:23 +0100
Subject: [PATCH 09/10] Remove test for ubuntu 20.04 (#189)
---
.github/workflows/test.yml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml
index 2a0e71595..fab89bf91 100644
--- a/.github/workflows/test.yml
+++ b/.github/workflows/test.yml
@@ -23,7 +23,7 @@ jobs:
tests-fullSetup:
strategy:
matrix:
- setup: [ {os: ubuntu-latest}, {os: windows-latest}, {os: macos-latest}, {os: ubuntu-20.04}]
+ setup: [ {os: ubuntu-latest}, {os: windows-latest}, {os: macos-latest}]
runs-on: ${{matrix.setup.os}}
if: "!contains(github.event.head_commit.message, 'skip-ci')"
From 52326c80b0720d72a43d392c6b952acbe5211402 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jo=C3=A3o=20Viana?=
<57032457+vollous@users.noreply.github.com>
Date: Thu, 19 Dec 2024 16:17:41 +0000
Subject: [PATCH 10/10] Update develop branch (#190)
* Dont try to autocommit on dependabot or fork jobs (#187)
* Dont use secret in dependabot job
* add brackets
* trigger change
* Automatically applied linter
* print env
* add brackets
* Automatically applied linter
* remove debug line
---------
Co-authored-by: GitHub Actions Bot <>
* Next attempt at fixing linter for non local (#188)
* Next attempt at fixing linter for non local
* Update linter.yml
* Update .github/workflows/linter.yml
* Update .github/workflows/linter.yml
* Bump JamesIves/github-pages-deploy-action from 4.6.9 to 4.7.2 (#186)
* Bump JamesIves/github-pages-deploy-action from 4.6.9 to 4.7.2
Bumps [JamesIves/github-pages-deploy-action](https://github.com/jamesives/github-pages-deploy-action) from 4.6.9 to 4.7.2.
- [Release notes](https://github.com/jamesives/github-pages-deploy-action/releases)
- [Commits](https://github.com/jamesives/github-pages-deploy-action/compare/v4.6.9...v4.7.2)
---
updated-dependencies:
- dependency-name: JamesIves/github-pages-deploy-action
dependency-type: direct:production
update-type: version-update:semver-minor
...
Signed-off-by: dependabot[bot]
* Next attempt at fixing linter for non local
* Update linter.yml
* Update linter.yml
---------
Signed-off-by: dependabot[bot]
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Philipp Basler <28863303+phbasler@users.noreply.github.com>
* Remove test for ubuntu 20.04 (#189)
---------
Signed-off-by: dependabot[bot]
Co-authored-by: Philipp Basler <28863303+phbasler@users.noreply.github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
---
.github/workflows/doc.yml | 2 +-
.github/workflows/linter.yml | 19 +++++++++++++++----
.github/workflows/test.yml | 2 +-
3 files changed, 17 insertions(+), 6 deletions(-)
diff --git a/.github/workflows/doc.yml b/.github/workflows/doc.yml
index 697bf3faa..193e2f6c2 100644
--- a/.github/workflows/doc.yml
+++ b/.github/workflows/doc.yml
@@ -54,7 +54,7 @@ jobs:
name: documentation
path: documentation
- name: Deploy
- uses: JamesIves/github-pages-deploy-action@v4.6.9
+ uses: JamesIves/github-pages-deploy-action@v4.7.2
with:
branch: gh-pages # The branch the action should deploy to.
folder: documentation # The folder the action should deploy.
diff --git a/.github/workflows/linter.yml b/.github/workflows/linter.yml
index 905fd7eca..905a050b1 100644
--- a/.github/workflows/linter.yml
+++ b/.github/workflows/linter.yml
@@ -11,6 +11,8 @@ concurrency:
jobs:
linter:
runs-on: ubuntu-latest
+ env:
+ LocalCommit: ${{ github.event.pull_request.head.repo.full_name == github.repository && github.actor != 'dependabot[bot]' }}
steps:
- uses: actions/checkout@v4
@@ -18,10 +20,13 @@ jobs:
fetch-depth: 0
ref: ${{ github.head_ref }}
token: ${{ secrets.LINTER_PAT }}
+ if: env.LocalCommit == 'true'
- - name: Install clang-format
- if: inputs.apply_clang_format
- run: pip3 install clang-format==14.0.0
+ - uses: actions/checkout@v4
+ with:
+ fetch-depth: 0
+ ref: ${{ github.head_ref }}
+ if: env.LocalCommit != 'true'
- run: git fetch origin $GITHUB_BASE_REF
@@ -59,8 +64,14 @@ jobs:
git config user.email "<>"
- name: Commit changes
- if: steps.check-changes.outputs.ChangesFound == 'True'
+ if: steps.check-changes.outputs.ChangesFound == 'True' && env.LocalCommit == 'true'
run: |
git commit -am "Automatically applied linter"
git push
+ - name: Notify that changes are required
+ if: ${{ steps.check-changes.outputs.ChangesFound == 'True' && env.LocalCommit != 'true' }}
+ run: |
+ echo "Linter changes are required" >> $GITHUB_STEP_SUMMARY
+ exit 1
+
diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml
index 2a0e71595..fab89bf91 100644
--- a/.github/workflows/test.yml
+++ b/.github/workflows/test.yml
@@ -23,7 +23,7 @@ jobs:
tests-fullSetup:
strategy:
matrix:
- setup: [ {os: ubuntu-latest}, {os: windows-latest}, {os: macos-latest}, {os: ubuntu-20.04}]
+ setup: [ {os: ubuntu-latest}, {os: windows-latest}, {os: macos-latest}]
runs-on: ${{matrix.setup.os}}
if: "!contains(github.event.head_commit.message, 'skip-ci')"