Current task: —

E-016-herglotz-fine-structure.py

Experiments: E-016 · script updated 08-18-2026

E-016-herglotz-fine-structure.csv — 130.1 KB, updated 08-18-2026

← prev page 3 of 8 · 500/page · 3519 rows next →
# seriesayrho
1002 W_thzero 4.0 11.400000 1.2714935548e+00
1003 W_thzero 4.0 11.450000 1.2714951040e+00
1004 W_thzero 4.0 11.500000 1.2714966457e+00
1005 W_thzero 4.0 11.550000 1.2714981798e+00
1006 W_thzero 4.0 11.600000 1.2714997064e+00
1007 W_thzero 4.0 11.650000 1.2715012254e+00
1008 W_thzero 4.0 11.700000 1.2715027370e+00
1009 W_thzero 4.0 11.750000 1.2715042410e+00
1010 W_thzero 4.0 11.800000 1.2715057376e+00
1011 W_thzero 4.0 11.850000 1.2715072267e+00
1012 W_thzero 4.0 11.900000 1.2715087084e+00
1013 W_thzero 4.0 11.950000 1.2715101827e+00
1014 W_thzero 4.0 12.000000 1.2715116495e+00
1015 W_thzero 4.0 12.050000 1.2715131090e+00
1016 W_thzero 4.0 12.100000 1.2715145610e+00
1017 W_thzero 4.0 12.150000 1.2715160057e+00
1018 W_thzero 4.0 12.200000 1.2715174431e+00
1019 W_thzero 4.0 12.250000 1.2715188731e+00
1020 W_thzero 4.0 12.300000 1.2715202959e+00
1021 W_thzero 4.0 12.350000 1.2715217113e+00
1022 W_thzero 4.0 12.400000 1.2715231195e+00
1023 W_thzero 4.0 12.450000 1.2715245204e+00
1024 W_thzero 4.0 12.500000 1.2715259141e+00
1025 W_thzero 4.0 12.550000 1.2715273006e+00
1026 W_thzero 4.0 12.600000 1.2715286799e+00
1027 W_thzero 4.0 12.650000 1.2715300520e+00
1028 W_thzero 4.0 12.700000 1.2715314170e+00
1029 W_thzero 4.0 12.750000 1.2715327749e+00
1030 W_thzero 4.0 12.800000 1.2715341256e+00
1031 W_thzero 4.0 12.850000 1.2715354692e+00
1032 W_thzero 4.0 12.900000 1.2715368058e+00
1033 W_thzero 4.0 12.950000 1.2715381354e+00
1034 W_thzero 4.0 13.000000 1.2715394579e+00
1035 W_thzero 4.0 13.050000 1.2715407734e+00
1036 W_thzero 4.0 13.100000 1.2715420819e+00
1037 W_thzero 4.0 13.150000 1.2715433835e+00
1038 W_thzero 4.0 13.200000 1.2715446781e+00
1039 W_thzero 4.0 13.250000 1.2715459658e+00
1040 W_thzero 4.0 13.300000 1.2715472466e+00
1041 W_thzero 4.0 13.350000 1.2715485206e+00
1042 W_thzero 4.0 13.400000 1.2715497877e+00
1043 W_thzero 4.0 13.450000 1.2715510480e+00
1044 W_thzero 4.0 13.500000 1.2715523015e+00
1045 W_thzero 4.0 13.550000 1.2715535482e+00
1046 W_thzero 4.0 13.600000 1.2715547882e+00
1047 W_thzero 4.0 13.650000 1.2715560214e+00
1048 W_thzero 4.0 13.700000 1.2715572480e+00
1049 W_thzero 4.0 13.750000 1.2715584678e+00
1050 W_thzero 4.0 13.800000 1.2715596810e+00
1051 W_thzero 4.0 13.850000 1.2715608876e+00
1052 W_thzero 4.0 13.900000 1.2715620876e+00
1053 W_thzero 4.0 13.950000 1.2715632810e+00
1054 W_thzero 4.0 14.000000 1.2715644678e+00
1055 W_thzero 4.0 14.050000 1.2715656481e+00
1056 W_thzero 4.0 14.100000 1.2715668219e+00
1057 W_thzero 4.0 14.150000 1.2715679892e+00
1058 W_thzero 4.0 14.200000 1.2715691500e+00
1059 W_thzero 4.0 14.250000 1.2715703044e+00
1060 W_thzero 4.0 14.300000 1.2715714524e+00
1061 W_thzero 4.0 14.350000 1.2715725941e+00
1062 W_thzero 4.0 14.400000 1.2715737293e+00
1063 W_thzero 4.0 14.450000 1.2715748583e+00
1064 W_thzero 4.0 14.500000 1.2715759809e+00
1065 W_thzero 4.0 14.550000 1.2715770973e+00
1066 W_thzero 4.0 14.600000 1.2715782074e+00
1067 W_thzero 4.0 14.650000 1.2715793113e+00
1068 W_thzero 4.0 14.700000 1.2715804090e+00
1069 W_thzero 4.0 14.750000 1.2715815005e+00
1070 W_thzero 4.0 14.800000 1.2715825858e+00
1071 W_thzero 4.0 14.850000 1.2715836651e+00
1072 W_thzero 4.0 14.900000 1.2715847382e+00
1073 W_thzero 4.0 14.950000 1.2715858053e+00
1074 W_thzero 4.0 15.000000 1.2715868663e+00
1075 W_thzero 4.0 15.050000 1.2715879213e+00
1076 W_thzero 4.0 15.100000 1.2715889703e+00
1077 W_thzero 4.0 15.150000 1.2715900134e+00
1078 W_thzero 4.0 15.200000 1.2715910505e+00
1079 W_thzero 4.0 15.250000 1.2715920817e+00
1080 W_thzero 4.0 15.300000 1.2715931071e+00
1081 W_thzero 4.0 15.350000 1.2715941265e+00
1082 W_thzero 4.0 15.400000 1.2715951402e+00
1083 W_thzero 4.0 15.450000 1.2715961480e+00
1084 W_thzero 4.0 15.500000 1.2715971501e+00
1085 W_thzero 4.0 15.550000 1.2715981464e+00
1086 W_thzero 4.0 15.600000 1.2715991370e+00
1087 W_thzero 4.0 15.650000 1.2716001219e+00
1088 W_thzero 4.0 15.700000 1.2716011011e+00
1089 W_thzero 4.0 15.750000 1.2716020747e+00
1090 W_thzero 4.0 15.800000 1.2716030427e+00
1091 W_thzero 4.0 15.850000 1.2716040051e+00
1092 W_thzero 4.0 15.900000 1.2716049619e+00
1093 W_thzero 4.0 15.950000 1.2716059132e+00
1094 W_thzero 4.0 16.000000 1.2716068590e+00
1095 W_thzero 4.0 16.050000 1.2716077993e+00
1096 W_thzero 4.0 16.100000 1.2716087342e+00
1097 W_thzero 4.0 16.150000 1.2716096636e+00
1098 W_thzero 4.0 16.200000 1.2716105877e+00
1099 W_thzero 4.0 16.250000 1.2716115063e+00
1100 W_thzero 4.0 16.300000 1.2716124197e+00
1101 W_thzero 4.0 16.350000 1.2716133277e+00
1102 W_thzero 4.0 16.400000 1.2716142304e+00
1103 W_thzero 4.0 16.450000 1.2716151278e+00
1104 W_thzero 4.0 16.500000 1.2716160201e+00
1105 W_thzero 4.0 16.550000 1.2716169071e+00
1106 W_thzero 4.0 16.600000 1.2716177889e+00
1107 W_thzero 4.0 16.650000 1.2716186656e+00
1108 W_thzero 4.0 16.700000 1.2716195371e+00
1109 W_thzero 4.0 16.750000 1.2716204036e+00
1110 W_thzero 4.0 16.800000 1.2716212650e+00
1111 W_thzero 4.0 16.850000 1.2716221213e+00
1112 W_thzero 4.0 16.900000 1.2716229726e+00
1113 W_thzero 4.0 16.950000 1.2716238189e+00
1114 W_thzero 4.0 17.000000 1.2716246603e+00
1115 W_thzero 4.0 17.050000 1.2716254967e+00
1116 W_thzero 4.0 17.100000 1.2716263282e+00
1117 W_thzero 4.0 17.150000 1.2716271548e+00
1118 W_thzero 4.0 17.200000 1.2716279765e+00
1119 W_thzero 4.0 17.250000 1.2716287935e+00
1120 W_thzero 4.0 17.300000 1.2716296056e+00
1121 W_thzero 4.0 17.350000 1.2716304129e+00
1122 W_thzero 4.0 17.400000 1.2716312155e+00
1123 W_thzero 4.0 17.450000 1.2716320134e+00
1124 W_thzero 4.0 17.500000 1.2716328065e+00
1125 W_thzero 4.0 17.550000 1.2716335950e+00
1126 W_thzero 4.0 17.600000 1.2716343788e+00
1127 W_thzero 4.0 17.650000 1.2716351580e+00
1128 W_thzero 4.0 17.700000 1.2716359326e+00
1129 W_thzero 4.0 17.750000 1.2716367027e+00
1130 W_thzero 4.0 17.800000 1.2716374682e+00
1131 W_thzero 4.0 17.850000 1.2716382292e+00
1132 W_thzero 4.0 17.900000 1.2716389857e+00
1133 W_thzero 4.0 17.950000 1.2716397377e+00
1134 W_thzero 4.0 18.000000 1.2716404853e+00
1135 W_thzero 4.0 18.050000 1.2716412285e+00
1136 W_thzero 4.0 18.100000 1.2716419673e+00
1137 W_thzero 4.0 18.150000 1.2716427017e+00
1138 W_thzero 4.0 18.200000 1.2716434318e+00
1139 W_thzero 4.0 18.250000 1.2716441576e+00
1140 W_thzero 4.0 18.300000 1.2716448791e+00
1141 W_thzero 4.0 18.350000 1.2716455963e+00
1142 W_thzero 4.0 18.400000 1.2716463094e+00
1143 W_thzero 4.0 18.450000 1.2716470182e+00
1144 W_thzero 4.0 18.500000 1.2716477228e+00
1145 W_thzero 4.0 18.550000 1.2716484232e+00
1146 W_thzero 4.0 18.600000 1.2716491196e+00
1147 W_thzero 4.0 18.650000 1.2716498118e+00
1148 W_thzero 4.0 18.700000 1.2716504999e+00
1149 W_thzero 4.0 18.750000 1.2716511840e+00
1150 W_thzero 4.0 18.800000 1.2716518640e+00
1151 W_thzero 4.0 18.850000 1.2716525401e+00
1152 W_thzero 4.0 18.900000 1.2716532121e+00
1153 W_thzero 4.0 18.950000 1.2716538802e+00
1154 W_thzero 4.0 19.000000 1.2716545444e+00
1155 W_thzero 4.0 19.050000 1.2716552046e+00
1156 W_thzero 4.0 19.100000 1.2716558610e+00
1157 W_thzero 4.0 19.150000 1.2716565135e+00
1158 W_thzero 4.0 19.200000 1.2716571621e+00
1159 W_thzero 4.0 19.250000 1.2716578070e+00
1160 W_thzero 4.0 19.300000 1.2716584481e+00
1161 W_thzero 4.0 19.350000 1.2716590854e+00
1162 W_thzero 4.0 19.400000 1.2716597189e+00
1163 W_thzero 4.0 19.450000 1.2716603488e+00
1164 W_thzero 4.0 19.500000 1.2716609749e+00
1165 W_thzero 4.0 19.550000 1.2716615974e+00
1166 W_thzero 4.0 19.600000 1.2716622162e+00
1167 W_thzero 4.0 19.650000 1.2716628314e+00
1168 W_thzero 4.0 19.700000 1.2716634430e+00
1169 W_thzero 4.0 19.750000 1.2716640510e+00
1170 W_thzero 4.0 19.800000 1.2716646555e+00
1171 W_thzero 4.0 19.850000 1.2716652565e+00
1172 W_thzero 4.0 19.900000 1.2716658539e+00
1173 W_thzero 4.0 19.950000 1.2716664479e+00
1174 W_thzero 4.0 20.000000 1.2716670384e+00
1175 W_thpi 6.0 0.500000 2.2048901760e+00
1176 W_thpi 6.0 0.550000 2.1486585198e+00
1177 W_thpi 6.0 0.600000 2.1062210383e+00
1178 W_thpi 6.0 0.650000 2.0736208329e+00
1179 W_thpi 6.0 0.700000 2.0481665424e+00
1180 W_thpi 6.0 0.750000 2.0279909833e+00
1181 W_thpi 6.0 0.800000 2.0117760591e+00
1182 W_thpi 6.0 0.850000 1.9985765094e+00
1183 W_thpi 6.0 0.900000 1.9877044479e+00
1184 W_thpi 6.0 0.950000 1.9786523168e+00
1185 W_thpi 6.0 1.000000 1.9710406532e+00
1186 W_thpi 6.0 1.050000 1.9645821740e+00
1187 W_thpi 6.0 1.100000 1.9590567604e+00
1188 W_thpi 6.0 1.150000 1.9542938193e+00
1189 W_thpi 6.0 1.200000 1.9501597006e+00
1190 W_thpi 6.0 1.250000 1.9465486198e+00
1191 W_thpi 6.0 1.300000 1.9433760370e+00
1192 W_thpi 6.0 1.350000 1.9405737750e+00
1193 W_thpi 6.0 1.400000 1.9380863840e+00
1194 W_thpi 6.0 1.450000 1.9358684054e+00
1195 W_thpi 6.0 1.500000 1.9338822937e+00
1196 W_thpi 6.0 1.550000 1.9320968226e+00
1197 W_thpi 6.0 1.600000 1.9304858523e+00
1198 W_thpi 6.0 1.650000 1.9290273674e+00
1199 W_thpi 6.0 1.700000 1.9277027203e+00
1200 W_thpi 6.0 1.750000 1.9264960312e+00
1201 W_thpi 6.0 1.800000 1.9253937095e+00
1202 W_thpi 6.0 1.850000 1.9243840688e+00
1203 W_thpi 6.0 1.900000 1.9234570153e+00
1204 W_thpi 6.0 1.950000 1.9226037941e+00
1205 W_thpi 6.0 2.000000 1.9218167816e+00
1206 W_thpi 6.0 2.050000 1.9210893144e+00
1207 W_thpi 6.0 2.100000 1.9204155476e+00
1208 W_thpi 6.0 2.150000 1.9197903372e+00
1209 W_thpi 6.0 2.200000 1.9192091412e+00
1210 W_thpi 6.0 2.250000 1.9186679372e+00
1211 W_thpi 6.0 2.300000 1.9181631526e+00
1212 W_thpi 6.0 2.350000 1.9176916055e+00
1213 W_thpi 6.0 2.400000 1.9172504546e+00
1214 W_thpi 6.0 2.450000 1.9168371560e+00
1215 W_thpi 6.0 2.500000 1.9164494270e+00
1216 W_thpi 6.0 2.550000 1.9160852145e+00
1217 W_thpi 6.0 2.600000 1.9157426676e+00
1218 W_thpi 6.0 2.650000 1.9154201142e+00
1219 W_thpi 6.0 2.700000 1.9151160408e+00
1220 W_thpi 6.0 2.750000 1.9148290747e+00
1221 W_thpi 6.0 2.800000 1.9145579685e+00
1222 W_thpi 6.0 2.850000 1.9143015867e+00
1223 W_thpi 6.0 2.900000 1.9140588939e+00
1224 W_thpi 6.0 2.950000 1.9138289441e+00
1225 W_thpi 6.0 3.000000 1.9136108720e+00
1226 W_thpi 6.0 3.050000 1.9134038846e+00
1227 W_thpi 6.0 3.100000 1.9132072541e+00
1228 W_thpi 6.0 3.150000 1.9130203117e+00
1229 W_thpi 6.0 3.200000 1.9128424417e+00
1230 W_thpi 6.0 3.250000 1.9126730768e+00
1231 W_thpi 6.0 3.300000 1.9125116933e+00
1232 W_thpi 6.0 3.350000 1.9123578076e+00
1233 W_thpi 6.0 3.400000 1.9122109719e+00
1234 W_thpi 6.0 3.450000 1.9120707716e+00
1235 W_thpi 6.0 3.500000 1.9119368223e+00
1236 W_thpi 6.0 3.550000 1.9118087670e+00
1237 W_thpi 6.0 3.600000 1.9116862739e+00
1238 W_thpi 6.0 3.650000 1.9115690343e+00
1239 W_thpi 6.0 3.700000 1.9114567607e+00
1240 W_thpi 6.0 3.750000 1.9113491850e+00
1241 W_thpi 6.0 3.800000 1.9112460571e+00
1242 W_thpi 6.0 3.850000 1.9111471432e+00
1243 W_thpi 6.0 3.900000 1.9110522249e+00
1244 W_thpi 6.0 3.950000 1.9109610976e+00
1245 W_thpi 6.0 4.000000 1.9108735700e+00
1246 W_thpi 6.0 4.050000 1.9107894622e+00
1247 W_thpi 6.0 4.100000 1.9107086061e+00
1248 W_thpi 6.0 4.150000 1.9106308432e+00
1249 W_thpi 6.0 4.200000 1.9105560249e+00
1250 W_thpi 6.0 4.250000 1.9104840115e+00
1251 W_thpi 6.0 4.300000 1.9104146712e+00
1252 W_thpi 6.0 4.350000 1.9103478802e+00
1253 W_thpi 6.0 4.400000 1.9102835216e+00
1254 W_thpi 6.0 4.450000 1.9102214852e+00
1255 W_thpi 6.0 4.500000 1.9101616668e+00
1256 W_thpi 6.0 4.550000 1.9101039684e+00
1257 W_thpi 6.0 4.600000 1.9100482969e+00
1258 W_thpi 6.0 4.650000 1.9099945645e+00
1259 W_thpi 6.0 4.700000 1.9099426881e+00
1260 W_thpi 6.0 4.750000 1.9098925890e+00
1261 W_thpi 6.0 4.800000 1.9098441925e+00
1262 W_thpi 6.0 4.850000 1.9097974279e+00
1263 W_thpi 6.0 4.900000 1.9097522282e+00
1264 W_thpi 6.0 4.950000 1.9097085297e+00
1265 W_thpi 6.0 5.000000 1.9096662718e+00
1266 W_thpi 6.0 5.050000 1.9096253970e+00
1267 W_thpi 6.0 5.100000 1.9095858508e+00
1268 W_thpi 6.0 5.150000 1.9095475812e+00
1269 W_thpi 6.0 5.200000 1.9095105386e+00
1270 W_thpi 6.0 5.250000 1.9094746760e+00
1271 W_thpi 6.0 5.300000 1.9094399485e+00
1272 W_thpi 6.0 5.350000 1.9094063133e+00
1273 W_thpi 6.0 5.400000 1.9093737295e+00
1274 W_thpi 6.0 5.450000 1.9093421584e+00
1275 W_thpi 6.0 5.500000 1.9093115628e+00
1276 W_thpi 6.0 5.550000 1.9092819070e+00
1277 W_thpi 6.0 5.600000 1.9092531574e+00
1278 W_thpi 6.0 5.650000 1.9092252815e+00
1279 W_thpi 6.0 5.700000 1.9091982482e+00
1280 W_thpi 6.0 5.750000 1.9091720281e+00
1281 W_thpi 6.0 5.800000 1.9091465927e+00
1282 W_thpi 6.0 5.850000 1.9091219148e+00
1283 W_thpi 6.0 5.900000 1.9090979686e+00
1284 W_thpi 6.0 5.950000 1.9090747291e+00
1285 W_thpi 6.0 6.000000 1.9090521724e+00
1286 W_thpi 6.0 6.050000 1.9090302757e+00
1287 W_thpi 6.0 6.100000 1.9090090169e+00
1288 W_thpi 6.0 6.150000 1.9089883750e+00
1289 W_thpi 6.0 6.200000 1.9089683299e+00
1290 W_thpi 6.0 6.250000 1.9089488620e+00
1291 W_thpi 6.0 6.300000 1.9089299528e+00
1292 W_thpi 6.0 6.350000 1.9089115843e+00
1293 W_thpi 6.0 6.400000 1.9088937393e+00
1294 W_thpi 6.0 6.450000 1.9088764012e+00
1295 W_thpi 6.0 6.500000 1.9088595541e+00
1296 W_thpi 6.0 6.550000 1.9088431827e+00
1297 W_thpi 6.0 6.600000 1.9088272722e+00
1298 W_thpi 6.0 6.650000 1.9088118085e+00
1299 W_thpi 6.0 6.700000 1.9087967778e+00
1300 W_thpi 6.0 6.750000 1.9087821671e+00
1301 W_thpi 6.0 6.800000 1.9087679635e+00
1302 W_thpi 6.0 6.850000 1.9087541548e+00
1303 W_thpi 6.0 6.900000 1.9087407294e+00
1304 W_thpi 6.0 6.950000 1.9087276757e+00
1305 W_thpi 6.0 7.000000 1.9087149829e+00
1306 W_thpi 6.0 7.050000 1.9087026403e+00
1307 W_thpi 6.0 7.100000 1.9086906377e+00
1308 W_thpi 6.0 7.150000 1.9086789653e+00
1309 W_thpi 6.0 7.200000 1.9086676135e+00
1310 W_thpi 6.0 7.250000 1.9086565732e+00
1311 W_thpi 6.0 7.300000 1.9086458354e+00
1312 W_thpi 6.0 7.350000 1.9086353915e+00
1313 W_thpi 6.0 7.400000 1.9086252333e+00
1314 W_thpi 6.0 7.450000 1.9086153527e+00
1315 W_thpi 6.0 7.500000 1.9086057419e+00
1316 W_thpi 6.0 7.550000 1.9085963935e+00
1317 W_thpi 6.0 7.600000 1.9085873002e+00
1318 W_thpi 6.0 7.650000 1.9085784549e+00
1319 W_thpi 6.0 7.700000 1.9085698508e+00
1320 W_thpi 6.0 7.750000 1.9085614814e+00
1321 W_thpi 6.0 7.800000 1.9085533403e+00
1322 W_thpi 6.0 7.850000 1.9085454213e+00
1323 W_thpi 6.0 7.900000 1.9085377184e+00
1324 W_thpi 6.0 7.950000 1.9085302258e+00
1325 W_thpi 6.0 8.000000 1.9085229378e+00
1326 W_thpi 6.0 8.050000 1.9085158492e+00
1327 W_thpi 6.0 8.100000 1.9085089545e+00
1328 W_thpi 6.0 8.150000 1.9085022486e+00
1329 W_thpi 6.0 8.200000 1.9084957266e+00
1330 W_thpi 6.0 8.250000 1.9084893836e+00
1331 W_thpi 6.0 8.300000 1.9084832150e+00
1332 W_thpi 6.0 8.350000 1.9084772163e+00
1333 W_thpi 6.0 8.400000 1.9084713830e+00
1334 W_thpi 6.0 8.450000 1.9084657109e+00
1335 W_thpi 6.0 8.500000 1.9084601958e+00
1336 W_thpi 6.0 8.550000 1.9084548337e+00
1337 W_thpi 6.0 8.600000 1.9084496207e+00
1338 W_thpi 6.0 8.650000 1.9084445529e+00
1339 W_thpi 6.0 8.700000 1.9084396268e+00
1340 W_thpi 6.0 8.750000 1.9084348387e+00
1341 W_thpi 6.0 8.800000 1.9084301850e+00
1342 W_thpi 6.0 8.850000 1.9084256626e+00
1343 W_thpi 6.0 8.900000 1.9084212679e+00
1344 W_thpi 6.0 8.950000 1.9084169980e+00
1345 W_thpi 6.0 9.000000 1.9084128495e+00
1346 W_thpi 6.0 9.050000 1.9084088196e+00
1347 W_thpi 6.0 9.100000 1.9084049052e+00
1348 W_thpi 6.0 9.150000 1.9084011035e+00
1349 W_thpi 6.0 9.200000 1.9083974118e+00
1350 W_thpi 6.0 9.250000 1.9083938272e+00
1351 W_thpi 6.0 9.300000 1.9083903473e+00
1352 W_thpi 6.0 9.350000 1.9083869693e+00
1353 W_thpi 6.0 9.400000 1.9083836909e+00
1354 W_thpi 6.0 9.450000 1.9083805096e+00
1355 W_thpi 6.0 9.500000 1.9083774229e+00
1356 W_thpi 6.0 9.550000 1.9083744287e+00
1357 W_thpi 6.0 9.600000 1.9083715247e+00
1358 W_thpi 6.0 9.650000 1.9083687086e+00
1359 W_thpi 6.0 9.700000 1.9083659784e+00
1360 W_thpi 6.0 9.750000 1.9083633320e+00
1361 W_thpi 6.0 9.800000 1.9083607674e+00
1362 W_thpi 6.0 9.850000 1.9083582825e+00
1363 W_thpi 6.0 9.900000 1.9083558756e+00
1364 W_thpi 6.0 9.950000 1.9083535447e+00
1365 W_thpi 6.0 10.000000 1.9083512880e+00
1366 W_thpi 6.0 10.050000 1.9083491037e+00
1367 W_thpi 6.0 10.100000 1.9083469901e+00
1368 W_thpi 6.0 10.150000 1.9083449455e+00
1369 W_thpi 6.0 10.200000 1.9083429683e+00
1370 W_thpi 6.0 10.250000 1.9083410569e+00
1371 W_thpi 6.0 10.300000 1.9083392097e+00
1372 W_thpi 6.0 10.350000 1.9083374252e+00
1373 W_thpi 6.0 10.400000 1.9083357018e+00
1374 W_thpi 6.0 10.450000 1.9083340383e+00
1375 W_thpi 6.0 10.500000 1.9083324331e+00
1376 W_thpi 6.0 10.550000 1.9083308848e+00
1377 W_thpi 6.0 10.600000 1.9083293922e+00
1378 W_thpi 6.0 10.650000 1.9083279538e+00
1379 W_thpi 6.0 10.700000 1.9083265686e+00
1380 W_thpi 6.0 10.750000 1.9083252350e+00
1381 W_thpi 6.0 10.800000 1.9083239521e+00
1382 W_thpi 6.0 10.850000 1.9083227185e+00
1383 W_thpi 6.0 10.900000 1.9083215332e+00
1384 W_thpi 6.0 10.950000 1.9083203949e+00
1385 W_thpi 6.0 11.000000 1.9083193026e+00
1386 W_thpi 6.0 11.050000 1.9083182552e+00
1387 W_thpi 6.0 11.100000 1.9083172517e+00
1388 W_thpi 6.0 11.150000 1.9083162910e+00
1389 W_thpi 6.0 11.200000 1.9083153721e+00
1390 W_thpi 6.0 11.250000 1.9083144940e+00
1391 W_thpi 6.0 11.300000 1.9083136558e+00
1392 W_thpi 6.0 11.350000 1.9083128566e+00
1393 W_thpi 6.0 11.400000 1.9083120954e+00
1394 W_thpi 6.0 11.450000 1.9083113713e+00
1395 W_thpi 6.0 11.500000 1.9083106835e+00
1396 W_thpi 6.0 11.550000 1.9083100311e+00
1397 W_thpi 6.0 11.600000 1.9083094133e+00
1398 W_thpi 6.0 11.650000 1.9083088293e+00
1399 W_thpi 6.0 11.700000 1.9083082783e+00
1400 W_thpi 6.0 11.750000 1.9083077595e+00
1401 W_thpi 6.0 11.800000 1.9083072721e+00
1402 W_thpi 6.0 11.850000 1.9083068155e+00
1403 W_thpi 6.0 11.900000 1.9083063888e+00
1404 W_thpi 6.0 11.950000 1.9083059915e+00
1405 W_thpi 6.0 12.000000 1.9083056228e+00
1406 W_thpi 6.0 12.050000 1.9083052820e+00
1407 W_thpi 6.0 12.100000 1.9083049684e+00
1408 W_thpi 6.0 12.150000 1.9083046815e+00
1409 W_thpi 6.0 12.200000 1.9083044207e+00
1410 W_thpi 6.0 12.250000 1.9083041851e+00
1411 W_thpi 6.0 12.300000 1.9083039744e+00
1412 W_thpi 6.0 12.350000 1.9083037879e+00
1413 W_thpi 6.0 12.400000 1.9083036250e+00
1414 W_thpi 6.0 12.450000 1.9083034852e+00
1415 W_thpi 6.0 12.500000 1.9083033680e+00
1416 W_thpi 6.0 12.550000 1.9083032727e+00
1417 W_thpi 6.0 12.600000 1.9083031988e+00
1418 W_thpi 6.0 12.650000 1.9083031459e+00
1419 W_thpi 6.0 12.700000 1.9083031135e+00
1420 W_thpi 6.0 12.750000 1.9083031011e+00
1421 W_thpi 6.0 12.800000 1.9083031081e+00
1422 W_thpi 6.0 12.850000 1.9083031341e+00
1423 W_thpi 6.0 12.900000 1.9083031787e+00
1424 W_thpi 6.0 12.950000 1.9083032415e+00
1425 W_thpi 6.0 13.000000 1.9083033219e+00
1426 W_thpi 6.0 13.050000 1.9083034195e+00
1427 W_thpi 6.0 13.100000 1.9083035340e+00
1428 W_thpi 6.0 13.150000 1.9083036649e+00
1429 W_thpi 6.0 13.200000 1.9083038119e+00
1430 W_thpi 6.0 13.250000 1.9083039745e+00
1431 W_thpi 6.0 13.300000 1.9083041523e+00
1432 W_thpi 6.0 13.350000 1.9083043450e+00
1433 W_thpi 6.0 13.400000 1.9083045523e+00
1434 W_thpi 6.0 13.450000 1.9083047737e+00
1435 W_thpi 6.0 13.500000 1.9083050089e+00
1436 W_thpi 6.0 13.550000 1.9083052576e+00
1437 W_thpi 6.0 13.600000 1.9083055194e+00
1438 W_thpi 6.0 13.650000 1.9083057941e+00
1439 W_thpi 6.0 13.700000 1.9083060812e+00
1440 W_thpi 6.0 13.750000 1.9083063805e+00
1441 W_thpi 6.0 13.800000 1.9083066917e+00
1442 W_thpi 6.0 13.850000 1.9083070145e+00
1443 W_thpi 6.0 13.900000 1.9083073485e+00
1444 W_thpi 6.0 13.950000 1.9083076935e+00
1445 W_thpi 6.0 14.000000 1.9083080493e+00
1446 W_thpi 6.0 14.050000 1.9083084155e+00
1447 W_thpi 6.0 14.100000 1.9083087919e+00
1448 W_thpi 6.0 14.150000 1.9083091782e+00
1449 W_thpi 6.0 14.200000 1.9083095741e+00
1450 W_thpi 6.0 14.250000 1.9083099795e+00
1451 W_thpi 6.0 14.300000 1.9083103940e+00
1452 W_thpi 6.0 14.350000 1.9083108174e+00
1453 W_thpi 6.0 14.400000 1.9083112496e+00
1454 W_thpi 6.0 14.450000 1.9083116902e+00
1455 W_thpi 6.0 14.500000 1.9083121390e+00
1456 W_thpi 6.0 14.550000 1.9083125958e+00
1457 W_thpi 6.0 14.600000 1.9083130605e+00
1458 W_thpi 6.0 14.650000 1.9083135327e+00
1459 W_thpi 6.0 14.700000 1.9083140123e+00
1460 W_thpi 6.0 14.750000 1.9083144992e+00
1461 W_thpi 6.0 14.800000 1.9083149930e+00
1462 W_thpi 6.0 14.850000 1.9083154936e+00
1463 W_thpi 6.0 14.900000 1.9083160008e+00
1464 W_thpi 6.0 14.950000 1.9083165144e+00
1465 W_thpi 6.0 15.000000 1.9083170343e+00
1466 W_thpi 6.0 15.050000 1.9083175602e+00
1467 W_thpi 6.0 15.100000 1.9083180921e+00
1468 W_thpi 6.0 15.150000 1.9083186296e+00
1469 W_thpi 6.0 15.200000 1.9083191728e+00
1470 W_thpi 6.0 15.250000 1.9083197213e+00
1471 W_thpi 6.0 15.300000 1.9083202751e+00
1472 W_thpi 6.0 15.350000 1.9083208340e+00
1473 W_thpi 6.0 15.400000 1.9083213978e+00
1474 W_thpi 6.0 15.450000 1.9083219664e+00
1475 W_thpi 6.0 15.500000 1.9083225396e+00
1476 W_thpi 6.0 15.550000 1.9083231174e+00
1477 W_thpi 6.0 15.600000 1.9083236995e+00
1478 W_thpi 6.0 15.650000 1.9083242858e+00
1479 W_thpi 6.0 15.700000 1.9083248763e+00
1480 W_thpi 6.0 15.750000 1.9083254707e+00
1481 W_thpi 6.0 15.800000 1.9083260690e+00
1482 W_thpi 6.0 15.850000 1.9083266710e+00
1483 W_thpi 6.0 15.900000 1.9083272766e+00
1484 W_thpi 6.0 15.950000 1.9083278856e+00
1485 W_thpi 6.0 16.000000 1.9083284981e+00
1486 W_thpi 6.0 16.050000 1.9083291137e+00
1487 W_thpi 6.0 16.100000 1.9083297326e+00
1488 W_thpi 6.0 16.150000 1.9083303544e+00
1489 W_thpi 6.0 16.200000 1.9083309792e+00
1490 W_thpi 6.0 16.250000 1.9083316068e+00
1491 W_thpi 6.0 16.300000 1.9083322371e+00
1492 W_thpi 6.0 16.350000 1.9083328701e+00
1493 W_thpi 6.0 16.400000 1.9083335055e+00
1494 W_thpi 6.0 16.450000 1.9083341434e+00
1495 W_thpi 6.0 16.500000 1.9083347836e+00
1496 W_thpi 6.0 16.550000 1.9083354261e+00
1497 W_thpi 6.0 16.600000 1.9083360707e+00
1498 W_thpi 6.0 16.650000 1.9083367174e+00
1499 W_thpi 6.0 16.700000 1.9083373661e+00
1500 W_thpi 6.0 16.750000 1.9083380167e+00
1501 W_thpi 6.0 16.800000 1.9083386691e+00

E-016-herglotz-fine-structure.json — 3.0 KB, updated 08-18-2026

JSON sidecar (click to expand)
{
  "experiment": "E-016",
  "task": "Q-S3c: Herglotz fine structure of W at theta=pi vs F",
  "description": "Poisson-smoothed zero density -(1/pi) Im W'/W(iy) at theta=pi (and theta=0 control) vs rho_F; analytic Galerkin z-derivative; zero-Poisson reconstruction cross-check",
  "script": "research/numerics/scripts/E-016-herglotz-fine-structure.py",
  "parameters": {
    "a_sweep": [
      4.0,
      6.0,
      8.0,
      10.0
    ],
    "h": 0.01,
    "lambda": -1.0,
    "y_grid": [
      0.5,
      20.0,
      391
    ],
    "z_max_zeros": 300.0
  },
  "checks": {
    "V1_plateau_density": true,
    "V2_rhoF_finitediff": true,
    "V3_poisson_reconstruction": false,
    "V4_vmirror_symmetry": true
  },
  "key_values": {
    "xi_flint_crosscheck_rel": 8.821833278620677e-17,
    "rhoF_finitediff_max_rel": 1.3322584092623682e-08,
    "metrics": {
      "4.0": {
        "n_zeros": 381,
        "z1": 1.1260734006983593,
        "plateau": 1.2713747663068067,
        "density_a_over_pi": 1.2732395447351628,
        "plateau_rel_dev": 0.0014645935527740487,
        "v3_rel": 0.32451368257591473,
        "kappa_shift": -0.21982980149584136,
        "d_pi": 1.2200734562385358,
        "d_zero": 1.2165204320831793
      },
      "6.0": {
        "n_zeros": 572,
        "z1": 0.7499016225074712,
        "plateau": 1.9083309455490012,
        "density_a_over_pi": 1.909859317102744,
        "plateau_rel_dev": 0.00080025347419903,
        "v3_rel": 0.2938167612479611,
        "kappa_shift": -0.39086861455767985,
        "d_pi": 1.855357135046592,
        "d_zero": 1.8529753375094085
      },
      "8.0": {
        "n_zeros": 763,
        "z1": 0.5621012628096893,
        "plateau": 2.5451204974114527,
        "density_a_over_pi": 2.5464790894703255,
        "plateau_rel_dev": 0.0005335178539225225,
        "v3_rel": 0.2792472337188209,
        "kappa_shift": -0.5618837715660804,
        "d_pi": 2.4914430957151077,
        "d_zero": 2.489482228965594
      },
      "10.0": {
        "n_zeros": 954,
        "z1": 0.44959700551214055,
        "plateau": 3.1817851862991344,
        "density_a_over_pi": 3.183098861837907,
        "plateau_rel_dev": 0.00041270334218086014,
        "v3_rel": 0.27086948306792724,
        "kappa_shift": -0.7328752211905654,
        "d_pi": 3.127620084707738,
        "d_zero": 3.126136732274815
      }
    },
    "vmirror_sym_err": 3.797860165317667e-14
  },
  "caveats": [
    "Galerkin discretization h=0.01 (E-010 h-convergence: z1 rel drift 4e-4 between h=0.01 and 0.005 at a=4)",
    "Poisson smoothing at height y averages over scale ~y: lattice oscillations at spacing pi/a are suppressed ~e^{-2ay}; the sensitive region is y <~ few (low zeros resolve individually)",
    "theta=pi vs theta=0 comparison is the sharp test of the H4 read-off (D-023): if theta=pi is correct, d_pi should lie systematically below d_zero as a grows"
  ],
  "elapsed_seconds": 32.7,
  "timestamp_utc": "2026-08-18T10:57:35.113504+00:00",
  "row_count": 3520
}

Source code

Python script (click to expand)
"""E-016 — Q-S3c: Herglotz (Poisson) fine structure of W at theta=pi vs F.

Theory (D-023 §4, item 3): for entire W with ALL REAL zeros z_j,
  -Im(W'/W)(iy) = -Im(kappa) + sum_j y/(y^2 + z_j^2)
is (pi times) the Poisson-smoothed zero density at height y. Individual
zeros within |z_j| <~ y leave distinguishable fingerprints, so this
diagnostic detects sub-lattice-scale zero redistribution BEFORE the
density collapses (Cor 1.6 requires the a->inf zeros to become the
gamma_j / xi'-zeros of F = z^2 xi(1/2-iz)/xi'(1/2-iz)).

For F on the imaginary axis (z = iy, s = 1/2+y real):
  rho_F(y) := -(1/pi) Im F'/F(iy)
           = (1/pi)[ 2/y + xi'/xi(1/2+y) - xi''/xi'(1/2+y) ].
Equivalently rho_F(y) = (1/pi) d/dy log|F(iy)|  (finite-diff check V2).

Diagnostics per a in {4,6,8,10} (h=0.01, lambda=-1, theta=pi; theta=0
control):
  D1. rho_W(y; a, pi) on y in [0.5, 20] via the ANALYTIC z-derivative of
      the Galerkin Fourier representation (no finite differences):
        V(z)  = hat(z) sum c_j e^{i z x_j}
        V'(z) = hat'(z) sum c_j e^{i z x_j} + hat(z) sum (i x_j) c_j e^{i z x_j}
        W(z)  = (z-i) Vp + e^{i theta} (z+i) Vm   (and z-derivative).
  D2. rho_F(y) analytic; cross-checked vs finite differences of
      log|F(iy)| (V2).
  D3. Zero-Poisson reconstruction: zeros of W(.,pi) located on the real
      axis (|W|-minima polished); rho from the Poisson sum must match D1
      up to the additive constant -Im(kappa)/pi (mean-matched over the
      window) — validates the derivative machinery (V3).
  D4. Metrics vs a: plateau value vs a/pi (density law); L2 distance
      d(a,theta) = ||rho_W - rho_F|| on [1,20] (theta=pi vs theta=0 —
      does theta=pi actually sharpen the approach?); oscillation
      envelope of rho_W at small y.

Checks:
  V1. plateau: |mean rho_W(y in [10,20]) - a/pi| / (a/pi) < 0.05.
  V2. rho_F analytic vs finite-diff of log|F|: max rel dev < 1e-6.
  V3. Poisson reconstruction from located zeros matches D1 (mean-matched
      L2 / rms < 0.02).
  V4. mirror symmetry v-(x) = v+(-x) rel err < 1e-6 (machinery regression).

Outputs: research/numerics/data/E-016-herglotz-fine-structure.csv (+ .json)
"""
import json
import sys
import time
from datetime import datetime, timezone
from pathlib import Path

import mpmath as mp
import numpy as np
import scipy.linalg
import scipy.optimize
from numpy.polynomial.legendre import leggauss

REPO = Path(__file__).resolve().parents[3]
DATA = REPO / "research" / "numerics" / "data"
CSV = DATA / "E-016-herglotz-fine-structure.csv"
JSON = DATA / "E-016-herglotz-fine-structure.json"

T_MAXG = 20.0            # sieve to e^20 covers 2a <= 20 (a <= 10)
T_LERCH = 0.05
GL_N = 8
A_SWEEP = [4.0, 6.0, 8.0, 10.0]
H_MAIN = 0.01
LAM_SHIFT = -1.0
Y_GRID = np.linspace(0.5, 20.0, 391)
Y_PLATEAU = (10.0, 20.0)
Z_MAX_ZERO = 300.0
N_GRID = 40000


# ---------------------------------------------------------- g (as E-014)
def mangoldt_sieve_fast(n_max: int) -> np.ndarray:
    is_comp = np.zeros(n_max + 1, dtype=bool)
    for p in range(2, int(n_max ** 0.5) + 1):
        if not is_comp[p]:
            is_comp[p * p::p] = True
    lam_log = np.zeros(n_max + 1)
    primes = np.flatnonzero(~is_comp[2:]) + 2
    lp = np.log(primes)
    pk = primes.copy()
    while pk.size and pk[0] <= n_max:
        lam_log[pk] = lp
        pk = pk * primes[: pk.size]
        keep = pk <= n_max
        pk = pk[keep]
        lp = lp[keep]
    return lam_log


print("sieving von Mangoldt to e^20 ...", flush=True)
t_sv = time.time()
N_MAXG = int(np.exp(T_MAXG)) + 2
LAM_LOG = mangoldt_sieve_fast(N_MAXG)
NS = np.arange(2, N_MAXG + 1, dtype=np.float64)
LAM = LAM_LOG[2:] / np.sqrt(NS)
LOG_NS = np.log(NS)
C1 = np.cumsum(LAM)
C0 = np.cumsum(LAM * LOG_NS)
del LAM, LOG_NS, NS
print(f"  sieve done: {time.time()-t_sv:.0f}s", flush=True)

mp.mp.dps = 30
DIG_COEFF = float(-(mp.digamma(mp.mpf(1) / 4) - mp.log(mp.pi)) / 2)
PHI1 = float(mp.lerchphi(1, 2, mp.mpf(1) / 4))
KK = np.arange(0, 400)
DENOM = (KK + 0.25) ** 2


def prime_sum_vec(t):
    m = np.floor(np.exp(t) + 1e-9).astype(np.int64) - 1
    out = np.zeros_like(t)
    pos = m > 0
    idx = m[pos] - 1
    out[pos] = C1[idx] * t[pos] - C0[idx]
    return out


def lerch_comb(t):
    out = np.empty_like(t)
    fast = t > T_LERCH
    if fast.any():
        z = np.exp(-2.0 * t[fast])
        phi = (np.power.outer(z, KK) / DENOM).sum(axis=1)
        out[fast] = -0.25 * (PHI1 - np.exp(-t[fast] / 2) * phi)
    if (~fast).any():
        for i in np.flatnonzero(~fast):
            ti = mp.mpf(float(t[i]))
            out[i] = float(-0.25 * (mp.lerchphi(1, 2, mp.mpf(1) / 4)
                                    - mp.exp(-ti / 2)
                                    * mp.lerchphi(mp.exp(-2 * ti), 2,
                                                  mp.mpf(1) / 4)))
    return out


def g_float(t):
    t = np.asarray(t, dtype=float)
    g = -4.0 * (np.exp(t / 2) + np.exp(-t / 2) - 2.0)
    g += prime_sum_vec(t)
    g += DIG_COEFF * t
    g += lerch_comb(t)
    g[t == 0.0] = 0.0
    return g


A_CONST = 0.5 * (np.log(2 * np.pi) + np.euler_gamma - 1.0)


def sigma_vec(t):
    t = np.asarray(t, dtype=float)
    with np.errstate(divide="ignore", invalid="ignore"):
        return np.where(t > 0, 0.5 * t * np.log(t) + A_CONST * t, 0.0)


def F_sing(t):
    if t <= 0:
        return 0.0
    return (A_CONST * t**3 / 6.0 + t**3 * np.log(t) / 12.0
            - 5.0 * t**3 / 72.0)


def S_sing(k, h):
    return (F_sing((k + 1) * h) - 2.0 * F_sing(k * h)
            + F_sing(abs(k - 1) * h))


XN, XW = leggauss(GL_N)


def S_full(k, h):
    def quad_plain(lo, hi, peak):
        tot = 0.0
        for a, b in ((lo, peak), (peak, hi)):
            if b - a <= 0:
                continue
            mid, half = 0.5 * (a + b), 0.5 * (b - a)
            xs = mid + half * XN
            rho = g_float(xs) - sigma_vec(xs)
            tot += half * float(np.dot(XW, (h - np.abs(xs - peak)) * rho))
        return tot

    def quad(lo, hi, peak):
        n_lo = int(np.ceil(np.exp(lo)))
        n_hi = int(np.floor(np.exp(hi)))
        if n_hi - n_lo > 64:
            return quad_plain(lo, hi, peak)
        pts = sorted({lo, peak, hi} |
                     {float(np.log(n))
                      for n in range(max(n_lo, 2), n_hi + 1)
                      if lo < np.log(n) < hi})
        tot = 0.0
        for p0, p1 in zip(pts, pts[1:]):
            if p1 - p0 <= 0:
                continue
            mid, half = 0.5 * (p0 + p1), 0.5 * (p1 - p0)
            xs = mid + half * XN
            rho = g_float(xs) - sigma_vec(xs)
            tot += half * float(np.dot(XW, (h - np.abs(xs - peak)) * rho))
        return tot

    if k == 0:
        return S_sing(0, h) + 2.0 * quad(0.0, h, 0.0)
    return S_sing(k, h) + quad((k - 1) * h, (k + 1) * h, k * h)


def stiffness_first_col(n_elem, h):
    n_q = n_elem - 1
    s = np.array([S_full(k, h) for k in range(n_elem)])
    q = np.empty(n_q)
    q[0] = (2.0 * s[0] - 2.0 * s[1]) / h**2
    for k in range(1, n_q):
        q[k] = (2.0 * s[k] - s[k + 1] - s[k - 1]) / h**2
    return q


_BUILD = {}


def build(a, h):
    if (a, h) in _BUILD:
        return _BUILD[(a, h)]
    n_elem = int(round(2 * a / h))
    n = n_elem - 1
    q = stiffness_first_col(n_elem, h)
    Q = scipy.linalg.toeplitz(q)
    M = scipy.linalg.toeplitz(np.r_[2 * h / 3, h / 6,
                                    np.zeros(max(n - 2, 0))])
    ii = np.arange(1, n_elem)
    x = -a + ii * h
    xg, wg = leggauss(8)
    b = {}
    for sgn in (+1.0, -1.0):
        mid1 = x - h / 2
        xs1 = mid1[:, None] + (h / 2) * xg[None, :]
        phi1 = (xs1 - (x - h)[:, None]) / h
        mid2 = x + h / 2
        xs2 = mid2[:, None] + (h / 2) * xg[None, :]
        phi2 = ((x + h)[:, None] - xs2) / h
        b[sgn] = ((h / 2) * (np.exp(sgn * xs1) * phi1) @ wg
                  + (h / 2) * (np.exp(sgn * xs2) * phi2) @ wg)
    _BUILD[(a, h)] = (x, h, Q, M, b)
    return _BUILD[(a, h)]


def solve_v(Q, M, b_s, lam, n):
    T = Q - lam * M
    e = np.ones(n)
    B = np.zeros((n + 1, n + 1))
    B[:n, :n] = T
    B[:n, n] = e
    B[n, :n] = e
    sol = scipy.linalg.solve(B, np.r_[b_s, 0.0], assume_a="sym")
    return sol[:n], T


# ------------------------------------------- V(z), V'(z), W(z), W'(z)
def hat_FT(z, h):
    return h * np.sinc(z * h / (2 * np.pi)) ** 2


def hat_FT_d(z, h):
    """d/dz [h sinc(zh/2pi)^2], sinc(x)=sin(pi x)/(pi x)."""
    u = z * h / 2.0
    s = np.sinc(z * h / (2 * np.pi))          # sin(u)/u
    with np.errstate(divide="ignore", invalid="ignore"):
        ds = np.where(np.abs(u) > 1e-8,
                      (u * np.cos(u) - np.sin(u)) / u**2,
                      -u / 3.0)
    return h**2 * s * ds                      # d/dz[h s^2] = h^2 s ds/du


def V_and_dV(z, c, x, h):
    E = np.exp(1j * np.outer(z, x))
    S1 = E @ c
    S2 = (1j * x * E) @ c
    return hat_FT(z, h) * S1, hat_FT_d(z, h) * S1 + hat_FT(z, h) * S2


def W_and_dW(z, Vp, dVp, Vm, dVm, theta):
    eit = np.exp(1j * theta)
    W = (z - 1j) * Vp + eit * (z + 1j) * Vm
    dW = Vp + (z - 1j) * dVp + eit * (Vm + (z + 1j) * dVm)
    return W, dW


# --------------------------------------------------------------- F side
def xi_real(s):
    s = mp.mpf(s)
    if s == 1:                       # xi(1) = 1/2 (removable: zeta pole
        return mp.mpf(0.5)           # cancels the (s-1) factor)
    return 0.5 * s * (s - 1) * mp.pi ** (-s / 2) * mp.gamma(s / 2) * mp.zeta(s)


mp.mp.dps = 40


def rho_F_analytic(y):
    """rho_F(y) = (1/pi)[2/y + xi'/xi(1/2+y) - xi''/xi'(1/2+y)]."""
    s = mp.mpf(0.5) + mp.mpf(y)
    f = lambda t: xi_real(t)
    x0 = xi_real(s)
    x1 = mp.diff(f, s)
    x2 = mp.diff(f, s, 2)
    return float((2.0 / mp.mpf(y) + x1 / x0 - x2 / x1) / mp.pi)


def logabs_F_imag(y):
    s = mp.mpf(0.5) + mp.mpf(y)
    xiv = xi_real(s)
    dx = mp.diff(xi_real, s)
    return mp.log(abs(-mp.mpf(y) ** 2 * xiv / dx))


def main() -> int:
    if CSV.exists() and "--force" not in sys.argv:
        print(f"cached: {CSV} (use --force to recompute)")
        return 0
    t0 = time.time()

    # ---- F side
    print("F side: rho_F analytic + finite-diff cross-check ...", flush=True)
    # flint cross-check of xi_real (mpmath zeta is broken beyond ~16-19
    # digits in this env; E-014 verified 1e-8 at s=2.5,10.5 — extend to
    # the y-range endpoints used here)
    import flint
    flint.ctx.prec = 200
    def xi_flint(s):
        aa = flint.arb(str(s))
        return float(0.5 * aa * (aa - 1) * (aa / 2).gamma()
                     * flint.arb.pi() ** (-aa / 2) * aa.zeta())
    xi_err = float(max(abs(xi_real(s) - xi_flint(s)) / abs(xi_flint(s))
                       for s in (1.5, 10.5, 20.5)))  # s=1: arb zeta pole
                                                     # (xi(1)=1/2 exact)
    print(f"  xi vs flint max rel err: {xi_err:.2e}", flush=True)
    rhoF = np.array([rho_F_analytic(y) for y in Y_GRID])
    dlogF = np.array([
        float((logabs_F_imag(mp.mpf(y) + mp.mpf(1e-4))
               - logabs_F_imag(mp.mpf(y) - mp.mpf(1e-4))) / mp.mpf(2e-4))
        for y in Y_GRID]) / np.pi
    rel = np.abs(rhoF - dlogF) / np.maximum(np.abs(rhoF), 1e-12)
    v2_err = float(rel.max())
    print(f"  V2 finite-diff max rel dev: {v2_err:.2e}", flush=True)

    rows = []
    for y, r in zip(Y_GRID, rhoF):
        rows.append(f"F,{y:.6f},{r:.10e}")

    sym_err = 0.0
    metrics = {}
    for a in A_SWEEP:
        print(f"a={a}: solve v±, Herglotz densities ...", flush=True)
        x, hh, Q, M, b = build(a, H_MAIN)
        n = len(x)
        cp, T = solve_v(Q, M, b[+1.0], LAM_SHIFT, n)
        cm, _ = solve_v(Q, M, b[-1.0], LAM_SHIFT, n)
        np_ = float(cp @ T @ cp)
        nm = float(cm @ T @ cm)
        cm = cm * np.sqrt(np_ / nm)
        sym_err = max(sym_err,
                      float(np.max(np.abs(cm - cp[::-1]))
                            / max(1.0, float(np.max(np.abs(cp))))))

        ziy = 1j * Y_GRID
        Vp, dVp = V_and_dV(ziy, cp, x, hh)
        Vm, dVm = V_and_dV(ziy, cm, x, hh)

        out = {}
        for th, tag in ((np.pi, "pi"), (0.0, "zero")):
            W, dW = W_and_dW(ziy, Vp, dVp, Vm, dVm, th)
            rhoW = -np.imag(dW / W) / np.pi
            out[tag] = rhoW
            for y, r in zip(Y_GRID, rhoW):
                rows.append(f"W_th{tag},{a},{y:.6f},{r:.10e}")

        # ---- zeros of W(., pi) on the real axis (for V3)
        # c = sqrt(np_/nm) = 1 exactly (mirror symmetry), so for real z,
        # Vm = conj(Vp) and W(z) = 2i*g(z) with the REAL gauge
        # g(z) = z Im Vp - Re Vp. Zeros = sign changes of g -> brentq.
        assert abs(np_ / nm - 1.0) < 1e-12, "norm asymmetry breaks gauge"
        zg = np.linspace(1e-3, Z_MAX_ZERO, N_GRID)
        Vpr, _ = V_and_dV(zg, cp, x, hh)
        g = zg * Vpr.imag - Vpr.real

        def g_direct(zz):
            V = hat_FT(np.array([zz]), hh)[0] * complex(
                np.exp(1j * zz * x) @ cp)
            return zz * V.imag - V.real

        idx = np.flatnonzero(np.sign(g[:-1]) * np.sign(g[1:]) < 0)
        zeros = []
        for i in idx:
            try:
                zeros.append(scipy.optimize.brentq(g_direct, zg[i],
                                                   zg[i + 1], xtol=1e-13,
                                                   rtol=1e-13))
            except ValueError:
                pass
        zeros = np.array(zeros)

        # V3: Poisson reconstruction (+- symmetric located zeros to
        # Z_MAX_ZERO + Euler-Maclaurin lattice tail beyond, spacing pi/a,
        # phase matched to last located zero; mean-matched vs analytic).
        d_lat = np.pi / a
        z_last = zeros[-1] + d_lat / 2.0
        recon = np.empty_like(Y_GRID)
        for k, y in enumerate(Y_GRID):
            tail = (y / d_lat) * (np.pi / 2.0 - np.arctan(z_last / y))
            recon[k] = (2.0 * (np.sum(y / (y**2 + zeros**2)) + tail)) / np.pi
        rhoW = out["pi"]
        shift = float(np.mean(rhoW - recon))
        rms = float(np.sqrt(np.mean(rhoW**2)))
        v3_rel = float(np.sqrt(np.mean((rhoW - recon - shift)**2)) / rms)

        # D4 metrics
        pm = (Y_GRID >= Y_PLATEAU[0]) & (Y_GRID <= Y_PLATEAU[1])
        plateau = float(np.mean(rhoW[pm]))
        dens = a / np.pi
        sel = Y_GRID >= 1.0
        d_pi = float(np.sqrt(np.mean((out["pi"][sel] - rhoF[sel])**2)))
        d_zero = float(np.sqrt(np.mean((out["zero"][sel] - rhoF[sel])**2)))
        metrics[a] = {
            "n_zeros": len(zeros), "z1": float(zeros[0]) if len(zeros) else None,
            "plateau": plateau, "density_a_over_pi": dens,
            "plateau_rel_dev": abs(plateau - dens) / dens,
            "v3_rel": v3_rel, "kappa_shift": shift,
            "d_pi": d_pi, "d_zero": d_zero,
        }
        print(f"  zeros={len(zeros)} z1={metrics[a]['z1']:.4f} "
              f"plateau={plateau:.4f} (a/pi={dens:.4f}) "
              f"V3 rel={v3_rel:.2e} d_pi={d_pi:.4f} d_zero={d_zero:.4f}",
              flush=True)

    checks = {
        "V1_plateau_density": bool(all(
            metrics[a]["plateau_rel_dev"] < 0.05 for a in A_SWEEP)),
        "V2_rhoF_finitediff": bool(v2_err < 1e-6),
        "V3_poisson_reconstruction": bool(all(
            metrics[a]["v3_rel"] < 0.02 for a in A_SWEEP)),
        "V4_vmirror_symmetry": bool(sym_err < 1e-6),
    }

    with CSV.open("w", encoding="utf-8", newline="") as f:
        f.write("series,a,y,rho\n")
        for r in rows:
            parts = r.split(",")
            if parts[0] == "F":
                f.write(f"F,-,{parts[1]},{parts[2]}\n")
            else:
                f.write(f"{parts[0]},{parts[1]},{parts[2]},{parts[3]}\n")

    meta = {
        "experiment": "E-016",
        "task": "Q-S3c: Herglotz fine structure of W at theta=pi vs F",
        "description": "Poisson-smoothed zero density -(1/pi) Im W'/W(iy) "
                       "at theta=pi (and theta=0 control) vs rho_F; "
                       "analytic Galerkin z-derivative; zero-Poisson "
                       "reconstruction cross-check",
        "script": "research/numerics/scripts/E-016-herglotz-fine-structure.py",
        "parameters": {"a_sweep": A_SWEEP, "h": H_MAIN, "lambda": LAM_SHIFT,
                       "y_grid": [0.5, 20.0, 391], "z_max_zeros": Z_MAX_ZERO},
        "checks": checks,
        "key_values": {
            "xi_flint_crosscheck_rel": xi_err,
            "rhoF_finitediff_max_rel": v2_err,
            "metrics": {str(a): metrics[a] for a in A_SWEEP},
            "vmirror_sym_err": sym_err,
        },
        "caveats": [
            "Galerkin discretization h=0.01 (E-010 h-convergence: z1 rel "
            "drift 4e-4 between h=0.01 and 0.005 at a=4)",
            "Poisson smoothing at height y averages over scale ~y: lattice "
            "oscillations at spacing pi/a are suppressed ~e^{-2ay}; the "
            "sensitive region is y <~ few (low zeros resolve individually)",
            "theta=pi vs theta=0 comparison is the sharp test of the H4 "
            "read-off (D-023): if theta=pi is correct, d_pi should lie "
            "systematically below d_zero as a grows",
        ],
        "elapsed_seconds": round(time.time() - t0, 1),
        "timestamp_utc": datetime.now(timezone.utc).isoformat(),
        "row_count": None,
    }
    meta["row_count"] = sum(1 for _ in CSV.open())
    JSON.write_text(json.dumps(meta, indent=2), encoding="utf-8")
    ok = all(checks.values())
    print(f"wrote {CSV.name}, {JSON.name} — "
          f"{'ALL CHECKS PASS' if ok else 'CHECK FAILURE: ' + str(checks)}")
    return 0 if ok else 1


if __name__ == "__main__":
    raise SystemExit(main())