6 #include "qdp_config.h"
30 template<
class T1,
class T2,
class T3>
32 LatticeSpinMatrix baryonContract(
const T1& q1,
38 S = traceColor(q1 * traceSpin(quarkContract13(q3*Gamma(5), Gamma(5)*q2)))
39 + traceColor(q1 * quarkContract13(q3*Gamma(5), Gamma(5)*q2));
65 const multi1d<LatticeColorMatrix>&
u,
66 const LatticePropagator& forw_u_prop,
67 const LatticePropagator& back_u_prop,
68 const LatticePropagator& forw_d_prop,
69 const LatticePropagator& back_d_prop,
70 const Propagator& u_x2,
71 const Propagator& d_x2,
78 if ( Ns != 4 || Nc != 3 ||
Nd != 4 )
81 form.subroutine =
"wallNuclFormFac";
84 int length = phases.numSubsets();
102 multi1d<int> gamma_list(2*
Nd);
113 multi1d<SpinMatrix> S_proj(
Nd);
114 SpinMatrix g_one = 1.0;
117 S_proj[0] = 0.5 * (g_one + (g_one * Gamma(8)));
120 S_proj[1] = timesMinusI(Gamma(1 << 1) * (Gamma(1 << 2) * S_proj[0]));
121 S_proj[2] = timesMinusI(Gamma(1 << 2) * (Gamma(1 << 0) * S_proj[0]));
122 S_proj[3] = timesMinusI(Gamma(1 << 0) * (Gamma(1 << 1) * S_proj[0]));
126 multi1d<std::string> quark_name(2);
131 multi1d<std::string> formfac_name(1);
132 formfac_name[0] =
"nucleon->gamma+nucleon";
135 multi1d<std::string> proj_name(
Nd);
137 proj_name[1] =
"sigma_1";
138 proj_name[2] =
"sigma_2";
139 proj_name[3] =
"sigma_3";
143 LatticePropagator anti_u_prop = adj(Gamma(
G5)*back_u_prop*Gamma(
G5));
144 LatticePropagator anti_d_prop = adj(Gamma(
G5)*back_d_prop*Gamma(
G5));
148 form.quark.resize(quark_name.size());
149 for (
int ud=0; ud < form.quark.size(); ++ud)
151 form.quark[ud].formfac.resize(formfac_name.size());
152 for(
int dp = 0; dp < form.quark[ud].formfac.size(); ++dp)
154 form.quark[ud].formfac[dp].lorentz.resize(1);
155 for(
int lorz = 0; lorz < form.quark[ud].formfac[dp].lorentz.size(); ++lorz)
157 form.quark[ud].formfac[dp].lorentz[lorz].projector.resize(proj_name.size());
158 for (
int proj = 0; proj < form.quark[ud].formfac[dp].lorentz[lorz].projector.size(); ++proj)
160 form.quark[ud].formfac[dp].lorentz[lorz].projector[proj].insertion.resize(gamma_list.size());
170 for(
int gamma_ctr = 0; gamma_ctr < gamma_list.size(); ++gamma_ctr)
172 int gamma_value = gamma_list[gamma_ctr];
173 int mu = gamma_ctr %
Nd;
174 bool compute_nonlocal = (gamma_ctr <
Nd) ?
true :
false;
177 for(
int ud = 0; ud < form.quark.size(); ++ud)
179 WallFormFac_quark_t& quark = form.quark[ud];
180 quark.quark_ctr = ud;
181 quark.quark_name = quark_name[ud];
183 LatticePropagator local_insert_prop, nonlocal_insert_prop;
192 local_insert_prop = anti_u_prop*Gamma(gamma_value)*forw_u_prop;
194 if (compute_nonlocal)
206 local_insert_prop = anti_d_prop*Gamma(gamma_value)*forw_d_prop;
208 if (compute_nonlocal)
222 for(
int dp = 0; dp < quark.formfac.size(); ++dp)
224 WallFormFac_formfac_t& formfac = quark.formfac[dp];
225 formfac.formfac_ctr = dp;
226 formfac.formfac_name = formfac_name[dp];
228 LatticeSpinMatrix local_contract, nonlocal_contract;
232 for(
int lorz = 0; lorz < formfac.lorentz.size(); ++lorz)
234 WallFormFac_lorentz_t& lorentz = formfac.lorentz[lorz];
235 lorentz.lorentz_ctr = lorz;
237 int gamma_value1 =
G5;
238 int gamma_value2 =
G5;
240 lorentz.snk_gamma = gamma_value1;
241 lorentz.src_gamma = gamma_value2;
252 baryonContract(local_insert_prop, u_x2, d_x2) +
253 baryonContract(u_x2, local_insert_prop, d_x2);
255 if (compute_nonlocal)
259 baryonContract(nonlocal_insert_prop, u_x2, d_x2) +
260 baryonContract(u_x2, nonlocal_insert_prop, d_x2);
270 baryonContract(u_x2, u_x2, local_insert_prop);
272 if (compute_nonlocal)
276 baryonContract(u_x2, u_x2, nonlocal_insert_prop);
287 for (
int proj = 0; proj < lorentz.projector.size(); ++proj)
289 WallFormFac_projector_t& projector = lorentz.projector[proj];
290 projector.proj_ctr = proj;
291 projector.proj_name = proj_name[proj];
293 WallFormFac_insertion_t& insertion = projector.insertion[gamma_ctr];
295 insertion.gamma_ctr = gamma_ctr;
297 insertion.gamma_value = gamma_value;
300 LatticeComplex corr_local_fn = traceSpin(S_proj[proj] * local_contract);
303 LatticeComplex corr_nonlocal_fn = traceSpin(S_proj[proj] * nonlocal_contract);
305 multi1d<WallFormFac_momenta_t>& momenta = insertion.momenta;
308 compute_nonlocal,
t0);
Primary include file for CHROMA library code.
void wallFormFacSft(multi1d< WallFormFac_momenta_t > &momenta, const LatticeComplex &corr_local_fn, const LatticeComplex &corr_nonlocal_fn, const SftMom &phases, bool compute_nonlocal, int t0)
Do slow SFT over hadron correlator data.
LatticePropagator nonlocalCurrentProp(const multi1d< LatticeColorMatrix > &u, int mu, const LatticePropagator &forw_prop, const LatticePropagator &anti_prop)
Compute nonlocal current propagator.
void wallNuclFormFac(WallFormFac_formfacs_t &form, const multi1d< LatticeColorMatrix > &u, const LatticePropagator &forw_u_prop, const LatticePropagator &back_u_prop, const LatticePropagator &forw_d_prop, const LatticePropagator &back_d_prop, const Propagator &u_x2, const Propagator &d_x2, const SftMom &phases, int t0, bool wall_source)
Wall-sink nucleon-> gamma+nucleon form-factors.
Asqtad Staggered-Dirac operator.
QDP_error_exit("too many BiCG iterations", n_count, rsd_sq, cp, c, re_rvr, im_rvr, re_a, im_a, re_b, im_b)
static multi1d< LatticeColorMatrix > u
Wall-sink nucleon form-factors.