21 #define COLORVEC_MATELEM_TYPE_ZERO 0
22 #define COLORVEC_MATELEM_TYPE_ONE 1
23 #define COLORVEC_MATELEM_TYPE_MONE -1
24 #define COLORVEC_MATELEM_TYPE_GENERIC 10
33 namespace InlineBaryonMatElemColorVecEnv
38 XMLReader paramtop(xml, path);
62 XMLReader paramtop(xml, path);
65 read(paramtop,
"version", version);
78 QDPIO::cerr <<
"Input parameter version " << version <<
" unsupported." << std::endl;
100 write(xml,
"version", version);
116 XMLReader inputtop(xml, path);
143 namespace InlineBaryonMatElemColorVecEnv
148 AbsInlineMeasurement* createMeasurement(XMLReader& xml_in,
151 return new InlineMeas(Params(xml_in, path));
178 StandardOutputStream&
operator<<(StandardOutputStream& os,
const multi1d<int>&
d)
184 for(
int i=1;
i <
d.size(); ++
i)
191 StandardOutputStream&
operator<<(StandardOutputStream& os,
const Params::Param_t::Displacement_t&
d)
193 os <<
"left= " <<
d.left
194 <<
" middle= " <<
d.middle
195 <<
" right= " <<
d.right;
214 XMLReader paramtop(xml_in, path);
216 if (paramtop.count(
"Frequency") == 1)
228 if (paramtop.count(
"xml_file") != 0)
235 QDPIO::cerr << __func__ <<
": Caught Exception reading XML: " << e << std::endl;
271 multi3d<ComplexD>
op;
308 XMLReader paramtop(xml, path);
314 read(paramtop,
"mom", param.
mom);
340 param.
op.resize(
n,
n,
n);
342 for(
int i=0;
i <
n; ++
i)
344 for(
int j=0;
j <
n; ++
j)
346 for(
int k=0;
k <
n; ++
k)
359 int n = param.
op.size1();
361 for(
int i=0;
i <
n; ++
i)
363 for(
int j=0;
j <
n; ++
j)
365 for(
int k=0;
k <
n; ++
k)
382 multi1d<int> no_disp(1); no_disp[0] = 0;
386 if (orig.size() == 1)
406 multi1d<Params::Param_t::Displacement_t>
411 multi1d<Params::Param_t::Displacement_t> displacement_list(orig_list.size());
414 for(
int n=0;
n < orig_list.size(); ++
n)
432 return displacement_list;
447 push(xml_out,
"BaryonMatElemColorVec");
448 write(xml_out,
"update_no", update_no);
449 write(xml_out,
"xml_file", xml_file);
452 XMLFileWriter xml(xml_file);
453 func(update_no, xml);
457 func(update_no, xml_out);
469 QDPIO::cerr<<
" code only works for Nc=3 and Ns=4\n";
484 XMLBufferWriter gauge_xml;
493 catch( std::bad_cast )
495 QDPIO::cerr <<
name <<
": caught dynamic cast error" << std::endl;
500 QDPIO::cerr <<
name <<
": std::map call failed: " << e << std::endl;
505 const multi1d<LatticeColorMatrix>&
u =
508 const MapObject<int,EVPair<LatticeColorVector> >&
eigen_source =
511 push(xml_out,
"BaryonMatElemColorVec");
512 write(xml_out,
"update_no", update_no);
514 QDPIO::cout <<
name <<
": Baryon color-std::vector matrix element" << std::endl;
522 write(xml_out,
"Config_info", gauge_xml);
524 push(xml_out,
"Output_version");
525 write(xml_out,
"out_version", 1);
530 MesPlq(xml_out,
"Observables",
u);
540 multi1d<LatticeColorMatrix> u_smr =
u;
545 XMLReader linktop(xml_l);
554 (*linkSmearing)(u_smr);
558 QDPIO::cerr <<
name <<
": Caught Exception link smearing: " << e << std::endl;
562 MesPlq(xml_out,
"Smeared_Observables", u_smr);
567 QDPIO::cout <<
"Normalize displacement lengths" << std::endl;
587 XMLBufferWriter file_xml;
589 push(file_xml,
"DBMetaData");
591 write(file_xml,
"lattSize", QDP::Layout::lattSize());
595 write(file_xml,
"Op_Info",displacement_list);
596 write(file_xml,
"Config_info", gauge_xml);
601 qdp_db.setMaxUserInfoLen(file_str.size());
605 qdp_db.insertUserdata(file_str);
619 QDPIO::cout <<
"Building baryon operators" << std::endl;
621 push(xml_out,
"ElementalOps");
627 for(
int l=0;
l < displacement_list.size(); ++
l)
631 QDPIO::cout <<
"Elemental operator: op = " <<
l << std::endl;
633 QDPIO::cout <<
"displacement: " << displacement_list[
l] << std::endl;
640 for(
int mom_num = 0 ; mom_num < phases.
numMom() ; ++mom_num)
644 multi1d<KeyValBaryonElementalOperator_t> buf(phases.
numSubsets());
647 buf[
t].key.key().t_slice =
t;
648 buf[
t].key.key().left = displacement_list[
l].left;
649 buf[
t].key.key().middle = displacement_list[
l].middle;
650 buf[
t].key.key().right = displacement_list[
l].right;
651 buf[
t].key.key().mom = phases.
numToMom(mom_num);
661 multi1d<KeyDispColorVector_t> keyDispColorVector(3);
664 keyDispColorVector[0].displacement = displacement_list[
l].left;
665 keyDispColorVector[1].displacement = displacement_list[
l].middle;
666 keyDispColorVector[2].displacement = displacement_list[
l].right;
674 keyDispColorVector[0].colvec =
i;
675 keyDispColorVector[1].colvec =
j;
676 keyDispColorVector[2].colvec =
k;
684 LatticeComplex lop = colorContract(smrd_disp_vecs.
getDispVector(keyDispColorVector[0]),
689 multi1d<ComplexD> op_sum = sumMulti(phases[mom_num] * lop, phases.
getSet());
693 for(
int t=0;
t < op_sum.size(); ++
t)
695 buf[
t].val.data().op(
i,
j,
k) = op_sum[
t];
701 QDPIO::cout <<
"insert: mom_num= " << mom_num <<
" displacement num= " <<
l << std::endl;
704 qdp_db.insert(buf[
t].key, buf[
t].val);
710 QDPIO::cout <<
"Baryon operator= " <<
l
712 << swiss.getTimeInSeconds()
713 <<
" secs" << std::endl;
723 QDPIO::cout <<
name <<
": total time = "
724 << snoop.getTimeInSeconds()
725 <<
" secs" << std::endl;
727 QDPIO::cout <<
name <<
": ran successfully" << std::endl;
Inline measurement factory.
const LatticeColorVector getDispVector(const KeyDispColorVector_t &key)
Accessor.
Class for counted reference semantics.
void operator()(const unsigned long update_no, XMLWriter &xml_out)
Do the measurement.
void func(const unsigned long update_no, XMLWriter &xml_out)
Do the measurement.
Serializable value harness.
Serializable key harness.
Fourier transform phase factor support.
int numSubsets() const
Number of subsets - length in decay direction.
multi1d< int > numToMom(int mom_num) const
Convert momenta id to actual array of momenta.
int numMom() const
Number of momenta.
const Set & getSet() const
The set to be used in sumMulti.
Holds displaced color vectors.
void proginfo(XMLWriter &xml)
Print out basic information about this program.
std::string makeXMLFileName(std::string xml_file, unsigned long update_no)
Return a xml file name for inline measurements.
GroupXML_t readXMLGroup(XMLReader &xml_in, const std::string &path, const std::string &type_name)
Read group and return as a std::string.
Class for counted reference semantics.
#define COLORVEC_MATELEM_TYPE_GENERIC
Inline measurement of baryon operators via colorstd::vector matrix elements.
MODS_t & eigen_source
Eigenvectors.
All link smearing constructors.
Factory for producing link smearing objects.
Named object function std::map.
static bool registered
Local registration flag.
multi1d< int > normDisp(const multi1d< int > &orig)
Normalize just one displacement array.
multi1d< Params::Param_t::Displacement_t > normalizeDisplacements(const multi1d< Params::Param_t::Displacement_t > &orig_list)
Make sure displacements are something sensible.
void read(XMLReader &xml, const std::string &path, InlineBaryonMatElemColorVecEnv::Params::Param_t::Displacement_t ¶m)
bool registerAll()
Register all the factories.
void write(XMLWriter &xml, const std::string &path, const InlineBaryonMatElemColorVecEnv::Params::Param_t::Displacement_t ¶m)
bool registerAll()
Register all the factories.
Asqtad Staggered-Dirac operator.
QDP::StandardOutputStream & operator<<(QDP::StandardOutputStream &s, const multi1d< int > &d)
static multi1d< LatticeColorMatrix > u
push(xml_out,"Condensates")
multi1d< SubsetVectorWeight_t > getEigenValues(const MapObject< int, EVPair< LatticeColorVector > > &eigen_source, int num_vecs)
void MesPlq(const multi1d< LatticeColorMatrixF3 > &u, multi2d< Double > &plane_plaq, Double &link)
Print out basic info about this program.
Fourier transform phase factor support.
Holds key and value as temporaries.
SerialDBKey< KeyBaryonElementalOperator_t > key
SerialDBData< ValBaryonElementalOperator_t > val
std::string baryon_op_file
multi1d< Displacement_t > displacement_list
void writeXML(XMLWriter &xml_out, const std::string &path) const
Holds of vectors and weights.