13 chi2_tau<Chan>::chi2_tau(params_t
const ¶ms_, qmc_config_t &qmc_config_, container_set *results)
14 : params(params_), qmc_config(qmc_config_), tau_mesh{params_.beta, Boson, params_.n_tau_chi2} {
32 for (
int bl1 : range(params.n_blocks()))
33 for (
int bl2 : range(params.n_blocks())) {
35 auto &det1 = qmc_config.dets[bl1];
36 auto &det2 = qmc_config.dets[bl2];
37 auto &chi2_tau = chi2_tau_(bl1, bl2);
38 int bl1_size = chi2_tau.target_shape()[0];
39 int bl2_size = chi2_tau.target_shape()[2];
41 for (
int a : range(bl1_size))
42 for (
int b : range(bl1_size))
43 for (
int c : range(bl2_size))
44 for (
int d : range(bl2_size))
45 for (
auto tau : tau_mesh) {
47 cdag_t cdag_a, cdag_c;
50 auto tau_point = make_tau_t(
double(tau));
51 auto taup_point = tau_point;
57 if (tau.index() == params.n_tau_chi2 - 1) {
62 if constexpr (Chan == Chan_t::PP) {
64 cdag_a = cdag_t{tau_point, a};
66 cdag_c = cdag_t{taup_point, c};
69 }
else if constexpr (Chan == Chan_t::PH) {
71 cdag_a = cdag_t{tau_point, a};
72 c_b = c_t{taup_point, b};
78 chi2_tau[tau](a, b, c, d) += sign * det1.try_insert2(0, 1, 0, 1, c_b, c_d, cdag_a, cdag_c);
80 chi2_tau[tau](a, b, c, d) += sign * det1.try_insert(0, 0, c_b, cdag_a) * det2.try_insert(0, 0, c_d, cdag_c);
82 det1.reject_last_try();
83 det2.reject_last_try();