CHROMA
walldeltapff_w.cc
Go to the documentation of this file.
1 /*! \file
2  * \brief Wall-sink delta^+ -> gamma+proton form-factors
3  *
4  * Form factors constructed from a quark and a backward quark propagator
5  */
6 #include "qdp_config.h"
7 #if QDP_NS == 4
8 #if QDP_ND == 4
9 #if QDP_NC == 3
10 
11 
12 #include "chromabase.h"
14 
15 namespace Chroma {
16 
17 
18 //! Compute the 123-123 contraction of a delta and P
19 /*!
20  * \ingroup hadron
21  *
22  * quark contraction within a baryon
23  *
24  * \param q1 first quark ( Read )
25  * \param q2 second quark ( Read )
26  * \param q3 third quark ( Read )
27  * \param n Lorentz index of delta ( Read )
28  * \param m Lorentz index of P ( Read )
29  *
30  * \return color-contracted spin object
31  */
32 template<class T1, class T2, class T3>
33 LatticeSpinMatrix deltaPContract123(const T1& q1,
34  const T2& q2,
35  const T3& q3,
36  int n, int m)
37 {
38  /* C gamma_5 = Gamma(5) = - (C gamma_5)^T */
39  /* C gamma_mu = Gamma(10) * Gamma(1 << mu) = + (C gamma_mu)^T */
40  LatticeSpinMatrix S =
41  traceColor(q3 * traceSpin(quarkContract13((q1*Gamma(10))*Gamma(n), Gamma(10)*(Gamma(m)*q2))));
42 
43  return S;
44 }
45 
46 //! Compute the 123-132 contraction of a delta and P
47 /*!
48  * \ingroup hadron
49  *
50  * quark contraction within a baryon
51  *
52  * \param q1 first quark ( Read )
53  * \param q2 second quark ( Read )
54  * \param q3 third quark ( Read )
55  * \param n Lorentz index of delta ( Read )
56  * \param m Lorentz index of P ( Read )
57  *
58  * \return color-contracted spin object
59  */
60 template<class T1, class T2, class T3>
61 LatticeSpinMatrix deltaPContract132(const T1& q1,
62  const T2& q2,
63  const T3& q3,
64  int n, int m)
65 {
66  /* C gamma_5 = Gamma(5) = - (C gamma_5)^T */
67  /* C gamma_mu = Gamma(10) * Gamma(1 << mu) = + (C gamma_mu)^T */
68  LatticeSpinMatrix S =
69  traceColor(q3 * quarkContract13((q1*Gamma(10))*Gamma(n), Gamma(10)*(Gamma(m)*q2)));
70 
71  return S;
72 }
73 
74 //! Compute delta-P 2-pt contraction
75 /*!
76  * \ingroup hadron
77  *
78  * quark contraction within a baryon
79  *
80  * \param u1 first quark ( Read )
81  * \param u2 second quark ( Read )
82  * \param d third quark ( Read )
83  * \param n Lorentz index of delta ( Read )
84  * \param m Lorentz index of P ( Read )
85  *
86  * \return color-contracted spin object
87  */
88 template<class T1, class T2, class T3>
89 LatticeSpinMatrix deltaPContract(const T1& u1,
90  const T2& u2,
91  const T3& d,
92  int n, int m)
93 {
94  LatticeSpinMatrix S =
95  2*deltaPContract123( d, u1, u2, n, m) + 2*deltaPContract132( d, u1, u2, n, m)
96  - deltaPContract132(u1, u2, d, n, m) - deltaPContract132(u2, u1, d, n, m);
97 
98 // S *= -1;
99 
100  return S;
101 }
102 
103 
104 //! Compute the 123-123 contraction of a P and Delta
105 /*!
106  * \ingroup hadron
107  *
108  * quark contraction within a baryon
109  *
110  * \param q1 first quark ( Read )
111  * \param q2 second quark ( Read )
112  * \param q3 third quark ( Read )
113  * \param n Lorentz index of P ( Read )
114  * \param m Lorentz index of delta ( Read )
115  *
116  * \return color-contracted spin object
117  */
118 template<class T1, class T2, class T3>
119 LatticeSpinMatrix pDeltaContract123(const T1& q1,
120  const T2& q2,
121  const T3& q3,
122  int n, int m)
123 {
124  /* C gamma_5 = Gamma(5) = - (C gamma_5)^T */
125  /* C gamma_mu = Gamma(10) * Gamma(1 << mu) = + (C gamma_mu)^T */
126  LatticeSpinMatrix S =
127  traceColor(q3 * traceSpin(quarkContract13((q1*Gamma(10))*Gamma(n), Gamma(10)*(Gamma(m)*q2))));
128 
129  return S;
130 }
131 
132 //! Compute the 123-132 contraction of a P and Delta
133 /*!
134  * \ingroup hadron
135  *
136  * quark contraction within a baryon
137  *
138  * \param q1 first quark ( Read )
139  * \param q2 second quark ( Read )
140  * \param q3 third quark ( Read )
141  * \param n Lorentz index of P ( Read )
142  * \param m Lorentz index of delta ( Read )
143  *
144  * \return color-contracted spin object
145  */
146 template<class T1, class T2, class T3>
147 LatticeSpinMatrix pDeltaContract132(const T1& q1,
148  const T2& q2,
149  const T3& q3,
150  int n, int m)
151 {
152  /* C gamma_5 = Gamma(5) = - (C gamma_5)^T */
153  /* C gamma_mu = Gamma(10) * Gamma(1 << mu) = + (C gamma_mu)^T */
154  LatticeSpinMatrix S =
155  traceColor(q3 * quarkContract13((q1*Gamma(10))*Gamma(n), Gamma(10)*(Gamma(m)*q2)));
156 
157  return S;
158 }
159 
160 //! Compute P-Delta 2-pt contraction
161 /*!
162  * \ingroup hadron
163  *
164  * quark contraction within a baryon
165  *
166  * \param u1 first quark ( Read )
167  * \param u2 second quark ( Read )
168  * \param d third quark ( Read )
169  * \param n Lorentz index of P ( Read )
170  * \param m Lorentz index of delta ( Read )
171  *
172  * \return color-contracted spin object
173  */
174 template<class T1, class T2, class T3>
175 LatticeSpinMatrix pDeltaContract(const T1& u1,
176  const T2& u2,
177  const T3& d,
178  int n, int m)
179 {
180  LatticeSpinMatrix S =
181  2*pDeltaContract123( d, u1, u2, n, m) + 2*pDeltaContract132( d, u1, u2, n, m)
182  - pDeltaContract132(u1, u2, d, n, m) - pDeltaContract132(u1, d, u2, n, m);
183 
184  return S;
185 }
186 
187 
188 //! Compute contractions for current insertion 3-point functions.
189 /*!
190  * \ingroup hadron
191  *
192  * This routine is specific to Wilson fermions!
193  *
194  * \param xml buffer for writing the data ( Write )
195  * \param u gauge fields (used for non-local currents) ( Read )
196  * \param forw_u_prop forward U quark propagator ( Read )
197  * \param back_u_prop backward D quark propagator ( Read )
198  * \param forw_d_prop forward U quark propagator ( Read )
199  * \param back_d_prop backward D quark propagator ( Read )
200  * \param u_x2 forward U quark propagator evaluated at sink ( Read )
201  * \param d_x2 forward D quark propagator evaluated at sink ( Read )
202  * \param phases fourier transform phase factors ( Read )
203  * \param t0 time slice of the source ( Read )
204  * \param wall_source true if using a wall source ( Read )
205  */
206 
207 void wallDeltaPFormFac(WallFormFac_formfacs_t& form,
208  const multi1d<LatticeColorMatrix>& u,
209  const LatticePropagator& forw_u_prop,
210  const LatticePropagator& back_u_prop,
211  const LatticePropagator& forw_d_prop,
212  const LatticePropagator& back_d_prop,
213  const Propagator& u_x2,
214  const Propagator& d_x2,
215  const SftMom& phases,
216  int t0,
217  bool wall_source)
218 {
219  START_CODE();
220 
221  if ( Ns != 4 || Nc != 3 || Nd != 4 ) // Code is specific to Ns=4, Nc=3, Nd=4
222  return;
223 
224  form.subroutine = "wallDeltaPFormFac";
225 
226  // Length of lattice in decay direction and 3pt correlations fcns
227  int length = phases.numSubsets();
228 
229  int G5 = Ns*Ns-1;
230 
231  // The list of meaningful insertions
232  // The gamma matrices specified correspond to
233  // V_mu and A_mu = gamma_mu gamma_5, specificially
234  // where in the Chroma code gamma_5 = g_3 g_2 g_1 g_0
235  //
236  // GAMMA CURRENT
237  // 1 V_0
238  // 2 V_1
239  // 4 V_2
240  // 8 V_3
241  // 14 -A_0
242  // 13 A_1
243  // 11 -A_2
244  // 7 A_3
245  multi1d<int> gamma_list(2*Nd);
246  gamma_list[0] = 1;
247  gamma_list[1] = 2;
248  gamma_list[2] = 4;
249  gamma_list[3] = 8;
250  gamma_list[4] = 14;
251  gamma_list[5] = 13;
252  gamma_list[6] = 11;
253  gamma_list[7] = 7;
254 
255  // Spin projectors
256  multi1d<SpinMatrix> S_proj(Nd);
257  SpinMatrix g_one = 1.0;
258 
259  // T = (1 + gamma_4) / 2 = (1 + Gamma(8)) / 2
260  S_proj[0] = 0.5 * (g_one + (g_one * Gamma(8)));
261 
262  // T = \Sigma_k (1 + gamma_4) / 2 = -i gamma_i gamma_j S_proj[0] i,j cyclic perms
263  S_proj[1] = timesMinusI(Gamma(1 << 1) * (Gamma(1 << 2) * S_proj[0]));
264  S_proj[2] = timesMinusI(Gamma(1 << 2) * (Gamma(1 << 0) * S_proj[0]));
265  S_proj[3] = timesMinusI(Gamma(1 << 0) * (Gamma(1 << 1) * S_proj[0]));
266 
267 
268  // Quark names
269  multi1d<std::string> quark_name(2);
270  quark_name[0] = "u";
271  quark_name[1] = "d";
272 
273  // Formfac names
274  multi1d<std::string> formfac_name(2);
275  formfac_name[0] = "delta->gamma+p";
276  formfac_name[1] = "p+gamma->delta";
277 
278  // Projector names
279  multi1d<std::string> proj_name(Nd);
280  proj_name[0] = "I";
281  proj_name[1] = "sigma_1";
282  proj_name[2] = "sigma_2";
283  proj_name[3] = "sigma_3";
284 
285 
286  // Antiquarks
287  LatticePropagator anti_u_prop = adj(Gamma(G5)*back_u_prop*Gamma(G5));
288  LatticePropagator anti_d_prop = adj(Gamma(G5)*back_d_prop*Gamma(G5));
289 
290 
291 
292  // Resize some things - this is needed upfront because I traverse the
293  // structure in a non-recursive scheme
294  form.quark.resize(quark_name.size());
295  for (int ud=0; ud < form.quark.size(); ++ud)
296  {
297  form.quark[ud].formfac.resize(formfac_name.size());
298  for(int dp = 0; dp < form.quark[ud].formfac.size(); ++dp)
299  {
300  form.quark[ud].formfac[dp].lorentz.resize(Nd);
301  for(int lorz = 0; lorz < form.quark[ud].formfac[dp].lorentz.size(); ++lorz)
302  {
303  form.quark[ud].formfac[dp].lorentz[lorz].projector.resize(proj_name.size());
304  for (int proj = 0; proj < form.quark[ud].formfac[dp].lorentz[lorz].projector.size(); ++proj)
305  {
306  form.quark[ud].formfac[dp].lorentz[lorz].projector[proj].insertion.resize(gamma_list.size());
307  }
308  }
309  }
310  }
311 
312 
313  // For calculational purpose, loop over insertions first.
314  // This is out-of-order from storage within the data structure
315  // Loop over gamma matrices of the insertion current of insertion current
316  for(int gamma_ctr = 0; gamma_ctr < gamma_list.size(); ++gamma_ctr)
317  {
318  int gamma_value = gamma_list[gamma_ctr];
319  int mu = gamma_ctr % Nd;
320  bool compute_nonlocal = (gamma_ctr < Nd) ? true : false;
321 
322  // Loop over "u"=0 or "d"=1 pieces
323  for(int ud = 0; ud < form.quark.size(); ++ud)
324  {
325  WallFormFac_quark_t& quark = form.quark[ud];
326  quark.quark_ctr = ud;
327  quark.quark_name = quark_name[ud];
328 
329  LatticePropagator local_insert_prop, nonlocal_insert_prop;
330 
331 
332  switch (ud)
333  {
334  case 0:
335  {
336  // "\bar u O u" insertion in rho
337  // The local non-conserved current contraction
338  local_insert_prop = anti_u_prop*Gamma(gamma_value)*forw_u_prop;
339 
340  if (compute_nonlocal)
341  {
342  // Construct the non-local (possibly conserved) current contraction
343  nonlocal_insert_prop = nonlocalCurrentProp(u, mu, forw_u_prop, anti_u_prop);
344  }
345  }
346  break;
347 
348  case 1:
349  {
350  // "\bar d O d" insertion in rho
351  // The local non-conserved current contraction
352  local_insert_prop = anti_d_prop*Gamma(gamma_value)*forw_d_prop;
353 
354  if (compute_nonlocal)
355  {
356  // Construct the non-local (possibly conserved) current contraction
357  nonlocal_insert_prop = nonlocalCurrentProp(u, mu, forw_d_prop, anti_d_prop);
358  }
359  }
360  break;
361 
362  default:
363  QDP_error_exit("Unknown ud type", ud);
364  }
365 
366 
367  // Loop over "delta->p"=0, "p->delta"=1 types of form-factors
368  for(int dp = 0; dp < quark.formfac.size(); ++dp)
369  {
370  WallFormFac_formfac_t& formfac = quark.formfac[dp];
371  formfac.formfac_ctr = dp;
372  formfac.formfac_name = formfac_name[dp];
373 
374  LatticeSpinMatrix local_contract, nonlocal_contract;
375 
376 
377  // Loop over Lorentz indices of source and sink hadron operators
378  for(int lorz = 0; lorz < formfac.lorentz.size(); ++lorz)
379  {
380  WallFormFac_lorentz_t& lorentz = formfac.lorentz[lorz];
381  lorentz.lorentz_ctr = lorz;
382 
383  int sigma = lorz; // Lorentz index at source or sink
384  int gamma_value1, gamma_value2;
385 
386  if (dp == 0)
387  {
388  gamma_value1 = 1 << sigma;
389  gamma_value2 = G5;
390  }
391  else
392  {
393  gamma_value1 = G5;
394  gamma_value2 = 1 << sigma;
395  }
396 
397  lorentz.snk_gamma = gamma_value1;
398  lorentz.src_gamma = gamma_value2;
399 
400  // Contractions depend on "ud" (u or d quark contribution)
401  // and source/sink operators
402  switch (ud)
403  {
404  case 0:
405  {
406  // "\bar u O u" insertion in rho
407  // The local non-conserved current contraction
408  if (dp == 0)
409  {
410  local_contract =
411  deltaPContract(local_insert_prop, u_x2, d_x2, gamma_value1, gamma_value2) +
412  deltaPContract(u_x2, local_insert_prop, d_x2, gamma_value1, gamma_value2);
413  }
414  else
415  {
416  local_contract =
417  pDeltaContract(local_insert_prop, u_x2, d_x2, gamma_value1, gamma_value2) +
418  pDeltaContract(u_x2, local_insert_prop, d_x2, gamma_value1, gamma_value2);
419  }
420 
421  if (compute_nonlocal)
422  {
423  // Construct the non-local (possibly conserved) current contraction
424  if (dp == 0)
425  {
426  nonlocal_contract =
427  deltaPContract(nonlocal_insert_prop, u_x2, d_x2, gamma_value1, gamma_value2) +
428  deltaPContract(u_x2, nonlocal_insert_prop, d_x2, gamma_value1, gamma_value2);
429  }
430  else
431  {
432  nonlocal_contract =
433  pDeltaContract(nonlocal_insert_prop, u_x2, d_x2, gamma_value1, gamma_value2) +
434  pDeltaContract(u_x2, nonlocal_insert_prop, d_x2, gamma_value1, gamma_value2);
435  }
436  }
437  }
438  break;
439 
440  case 1:
441  {
442  // "\bar d O d" insertion in rho
443  // The local non-conserved current contraction
444  if (dp == 0)
445  {
446  local_contract =
447  deltaPContract(u_x2, u_x2, local_insert_prop, gamma_value1, gamma_value2);
448  }
449  else
450  {
451  local_contract =
452  pDeltaContract(u_x2, u_x2, local_insert_prop, gamma_value1, gamma_value2);
453  }
454 
455  if (compute_nonlocal)
456  {
457  // Construct the non-local (possibly conserved) current contraction
458  if (dp == 0)
459  {
460  nonlocal_contract =
461  deltaPContract(u_x2, u_x2, nonlocal_insert_prop, gamma_value1, gamma_value2);
462  }
463  else
464  {
465  nonlocal_contract =
466  pDeltaContract(u_x2, u_x2, nonlocal_insert_prop, gamma_value1, gamma_value2);
467  }
468  }
469  }
470  break;
471 
472  default:
473  QDP_error_exit("Unknown ud type", ud);
474  }
475 
476 
477  // Loop over the spin projectors
478  for (int proj = 0; proj < lorentz.projector.size(); ++proj)
479  {
480  WallFormFac_projector_t& projector = lorentz.projector[proj];
481  projector.proj_ctr = proj;
482  projector.proj_name = proj_name[proj];
483 
484  WallFormFac_insertion_t& insertion = projector.insertion[gamma_ctr];
485 
486  insertion.gamma_ctr = gamma_ctr;
487  insertion.mu = mu;
488  insertion.gamma_value = gamma_value;
489 
490  // The local non-conserved std::vector-current matrix element
491  LatticeComplex corr_local_fn = traceSpin(S_proj[proj] * local_contract);
492 
493  // The nonlocal (possibly conserved) current matrix element
494  LatticeComplex corr_nonlocal_fn = traceSpin(S_proj[proj] * nonlocal_contract);
495 
496  multi1d<WallFormFac_momenta_t>& momenta = insertion.momenta;
497 
498  wallFormFacSft(momenta, corr_local_fn, corr_nonlocal_fn, phases,
499  compute_nonlocal, t0);
500 
501  } // end for(proj)
502  } // end for(dp)
503  } // end for(lorz)
504  } // end for(ud)
505  } // end for(gamma_ctr)
506 
507  END_CODE();
508 }
509 
510 } // end namespace Chroma
511 
512 #endif
513 #endif
514 #endif
Primary include file for CHROMA library code.
int mu
Definition: cool.cc:24
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.
Definition: wallff_w.cc:54
LatticePropagator nonlocalCurrentProp(const multi1d< LatticeColorMatrix > &u, int mu, const LatticePropagator &forw_prop, const LatticePropagator &anti_prop)
Compute nonlocal current propagator.
Definition: wallff_w.cc:28
void wallDeltaPFormFac(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 delta <-> gamma+delta form-factors.
unsigned n
Definition: ldumul_w.cc:36
static int m[4]
Definition: make_seeds.cc:16
Nd
Definition: meslate.cc:74
Asqtad Staggered-Dirac operator.
Definition: klein_gord.cc:10
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)
int G5
Definition: pbg5p_w.cc:57
static multi1d< LatticeColorMatrix > u
DComplex d
Definition: invbicg.cc:99
START_CODE()
Wall-sink delta^+ -> gamma+proton form-factors.