30 namespace InlineBarSpecEnv
61 XMLReader paramtop(xml, path);
74 XMLReader paramtop(xml, path);
89 XMLReader paramtop(xml, path);
104 XMLReader paramtop(xml, path);
107 read(paramtop,
"name" ,
s.name );
108 read(paramtop,
"flavor" ,
s.flavor );
109 read(paramtop,
"db" ,
s.db );
110 read(paramtop,
"spin" ,
s.spin );
111 read(paramtop,
"Operators" ,
s.ops );
116 write(xml,
"name" ,
s.name );
117 write(xml,
"flavor" ,
s.flavor );
119 write(xml,
"spin" ,
s.spin );
120 write(xml,
"Operators" ,
s.ops );
129 XMLReader paramtop(xml, path);
132 read(paramtop,
"version", version);
140 QDPIO::cerr <<
"Input parameter version " << version <<
" unsupported." << std::endl;
162 write(xml,
"version", version);
183 XMLReader inputtop(xml, path);
186 if(inputtop.count(
"down_id")!=0)
190 if(inputtop.count(
"strange_id")!=0)
194 if(inputtop.count(
"charm_id")!=0)
217 XMLReader inputtop(xml, path);
243 XMLReader paramtop(xml_in, path);
245 if (paramtop.count(
"Frequency") == 1)
257 if (paramtop.count(
"xml_file") != 0)
264 QDPIO::cerr << __func__ <<
": Caught Exception reading XML: " << e << std::endl;
284 const multi2d<LatticeComplex>&
l,
285 const multi2d<LatticeComplex>&
m,
286 const multi2d<LatticeComplex>&
r){
291 res =
l(0,0)*
m(1,1)*
r(2,2);
292 res -=
l(0,0)*
m(1,2)*
r(2,1);
293 res -=
l(0,0)*
m(2,1)*
r(1,2);
294 res +=
l(0,0)*
m(2,2)*
r(1,1);
295 res -=
l(0,1)*
m(1,0)*
r(2,2);
296 res +=
l(0,1)*
m(1,2)*
r(2,0);
297 res +=
l(0,1)*
m(2,0)*
r(1,2);
298 res -=
l(0,1)*
m(2,2)*
r(1,0);
299 res +=
l(0,2)*
m(1,0)*
r(2,1);
300 res -=
l(0,2)*
m(1,1)*
r(2,0);
301 res -=
l(0,2)*
m(2,0)*
r(1,1);
302 res +=
l(0,2)*
m(2,1)*
r(1,0);
303 res -=
l(1,0)*
m(0,1)*
r(2,2);
304 res +=
l(1,0)*
m(0,2)*
r(2,1);
305 res +=
l(1,0)*
m(2,1)*
r(0,2);
306 res -=
l(1,0)*
m(2,2)*
r(0,1);
307 res +=
l(1,1)*
m(0,0)*
r(2,2);
308 res -=
l(1,1)*
m(0,2)*
r(2,0);
309 res -=
l(1,1)*
m(2,0)*
r(0,2);
310 res +=
l(1,1)*
m(2,2)*
r(0,0);
311 res -=
l(1,2)*
m(0,0)*
r(2,1);
312 res +=
l(1,2)*
m(0,1)*
r(2,0);
313 res +=
l(1,2)*
m(2,0)*
r(0,1);
314 res -=
l(1,2)*
m(2,1)*
r(0,0);
315 res +=
l(2,0)*
m(0,1)*
r(1,2);
316 res -=
l(2,0)*
m(0,2)*
r(1,1);
317 res -=
l(2,0)*
m(1,1)*
r(0,2);
318 res +=
l(2,0)*
m(1,2)*
r(0,1);
319 res -=
l(2,1)*
m(0,0)*
r(1,2);
320 res +=
l(2,1)*
m(0,2)*
r(1,0);
321 res +=
l(2,1)*
m(1,0)*
r(0,2);
322 res -=
l(2,1)*
m(1,2)*
r(0,0);
323 res +=
l(2,2)*
m(0,0)*
r(1,1);
324 res -=
l(2,2)*
m(0,1)*
r(1,0);
325 res -=
l(2,2)*
m(1,0)*
r(0,1);
326 res +=
l(2,2)*
m(1,1)*
r(0,0);
335 class SinkPropContainer_t{
350 SinkPropContainer_t(){
362 const LatticePropagator& foo =
370 XMLReader prop_file_xml, prop_record_xml;
380 read(prop_record_xml,
"/SinkSmear/PropSource/Source/SourceType",
source_type);
381 xpath =
"/SinkSmear/PropSource/Source/Displacement/DisplacementType";
382 if (prop_record_xml.count(xpath) != 0)
387 read(prop_record_xml,
"/SinkSmear/PropSink/Sink/SinkType",
sink_type);
388 xpath =
"/SinkSmear/PropSink/Sink/Displacement/DisplacementType";
389 if (prop_record_xml.count(xpath) != 0)
395 catch( std::bad_cast )
397 QDPIO::cerr <<
name <<
": caught dynamic cast error"
403 QDPIO::cerr <<
name <<
": error message: " << e
413 QDPIO::cout <<
"Try action and mass" << std::endl;
430 <<
": caught exception. No BC found in these headers. Will assume dirichlet: " << e
434 QDPIO::cout <<
"FermAct = " <<
prop_header.prop_header.fermact.id << std::endl;
435 QDPIO::cout <<
"Mass = " <<
Mass << std::endl;
444 void sanity_check_props(
const SinkPropContainer_t& p1,
445 const SinkPropContainer_t& p2){
447 int j_decay = p1.prop_header.source_header.j_decay;
448 if (p2.prop_header.source_header.j_decay !=
449 p1.prop_header.source_header.j_decay){
450 QDPIO::cerr <<
"Error!! j_decay must be the same for all propagators " << std::endl;
453 if (p2.prop_header.source_header.t_source !=
454 p1.prop_header.source_header.t_source)
456 QDPIO::cerr <<
"Error!! t_source must be the same for all propagators " << std::endl;
459 if (p1.source_type != p2.source_type)
461 QDPIO::cerr <<
"Error!! source_type must be the same in a pair " << std::endl;
464 if (p1.sink_type != p2.sink_type)
466 QDPIO::cerr <<
"Error!! source_type must be the same in a pair " << std::endl;
472 QDPIO::cerr <<
"Error!! bc must be the same for all propagators " << std::endl;
481 struct AllSinkProps_t
487 std::map<std::string,SinkPropContainer_t>
prop;
488 std::map<std::string,BarSpec::RPropagator>
rprop;
491 AllSinkProps_t(
const Params::NamedObject_t::Props_t&
p){
493 QDPIO::cout<<
"Attempt to parse forward propagator= "<<
p.up_id<<std::endl;
494 prop[
"up"].readSinkProp(
p.up_id);
496 QDPIO::cout<<
"up quark propagator successfully parsed" << std::endl;
497 j_decay =
prop[
"up"].prop_header.source_header.j_decay;
498 t0 =
prop[
"up"].prop_header.source_header.t_source;
499 t_srce =
prop[
"up"].prop_header.source_header.getTSrce();
502 QDPIO::cout<<
"Attempt to parse forward propagator= " <<
p.down_id<<std::endl;
504 prop[
"down"].readSinkProp(
p.down_id);
505 QDPIO::cout <<
"down quark propagator successfully parsed" << std::endl;
507 QDPIO::cout<<__func__<<
": Need to convert prop id: "
508 <<
p.down_id<<std::endl;
511 QDPIO::cout<<
"Attempt to parse forward propagator= "<<
p.strange_id<<std::endl;
512 prop[
"strange"].readSinkProp(
p.strange_id);
513 if(
p.strange_id !=
"NULL"){
514 QDPIO::cout <<
"strange quark propagator successfully parsed" << std::endl;
516 QDPIO::cout<<__func__<<
": Need to convert prop id: "
517 <<
p.strange_id<<std::endl;
522 QDPIO::cout<<
"Attempt to parse forward propagator= "<<
p.charm_id<<std::endl;
523 prop[
"charm"].readSinkProp(
p.charm_id);
524 if(
p.charm_id !=
"NULL"){
525 QDPIO::cout <<
"charm quark propagator successfully parsed" << std::endl;
527 QDPIO::cout<<__func__<<
": Need to convert prop id: "
528 <<
p.charm_id<<std::endl;
534 sanity_check_props(
prop[
"up"],
prop[
"down"]) ;
536 sanity_check_props(
prop[
"up"],
prop[
"strange"]) ;
538 sanity_check_props(
prop[
"up"],
prop[
"charm"]) ;
544 return prop[flavor].sink_type ;
548 return prop[flavor].source_type ;
553 return rprop[
prop[flavor].quark_propagator_id] ;
563 void xml_print_prop_info(XMLWriter& xml_out,
564 const SinkPropContainer_t&
p,
570 push(xml_out,
p.quark_propagator_id);
572 const LatticePropagator&
prop =
575 QDPIO::cout <<
"propagator_id = " <<
p.quark_propagator_id << std::endl;
576 QDPIO::cout <<
"Source_type = " <<
p.source_type << std::endl;
577 QDPIO::cout <<
"Sink_type = " <<
p.sink_type << std::endl;
579 write(xml_out,
"correlator",sumMulti(localNorm2(
prop),
s));
580 write(xml_out,
"source_type",
p.source_type);
581 write(xml_out,
"source_disp_type",
p.source_disp_type);
582 write(xml_out,
"sink_type",
p.sink_type);
583 write(xml_out,
"sink_disp_type",
p.sink_disp_type);
584 write(xml_out,
"Mass",
p.Mass);
598 std::vector<int>
p =
s ;
601 for(
int j(2);
j<=
s.size();
j++){
603 ss=
p[jj];
p[jj]=
p[
j-1];
p[
j-1]=ss;
612 for(
int j(2);
j<=
n;
j++){
629 for(
int s(0);
s<src.
terms.size();
s++)
630 for(
int ss(0);ss<snk.
terms.size();ss++){
635 latC += (snk.
terms[ss].weight*src.
terms[
s].weight)*cc ;
652 push(xml_out,
"barspec");
653 write(xml_out,
"update_no", update_no);
654 write(xml_out,
"xml_file", xml_file);
657 XMLFileWriter xml(xml_file);
658 func(update_no, xml);
662 func(update_no, xml_out);
679 XMLBufferWriter gauge_xml;
685 catch( std::bad_cast )
687 QDPIO::cerr <<
name <<
": caught dynamic cast error"
693 QDPIO::cerr <<
name <<
": std::map call failed: " << e
697 const multi1d<LatticeColorMatrix>&
u =
700 push(xml_out,
"barspec");
701 write(xml_out,
"update_no", update_no);
703 QDPIO::cout <<
" BARSPEC: Spectroscopy for Wilson-like fermions" << std::endl;
704 QDPIO::cout << std::endl <<
" Gauge group: SU(" << Nc <<
")" << std::endl;
705 QDPIO::cout <<
" volume: " << Layout::lattSize()[0];
706 for (
int i=1;
i<
Nd; ++
i) {
707 QDPIO::cout <<
" x " << Layout::lattSize()[
i];
709 QDPIO::cout << std::endl;
717 write(xml_out,
"Config_info", gauge_xml);
719 push(xml_out,
"Output_version");
720 write(xml_out,
"out_version", 1);
725 MesPlq(xml_out,
"Observables",
u);
737 push(xml_out,
"elem");
742 const multi1d<int>&
t_srce = all_sinks.t_srce ;
743 const int&
j_decay = all_sinks.j_decay ;
744 const int&
t0 = all_sinks.t0 ;
746 const int&
bc_spec = all_sinks.bc_spec ;
759 push(xml_out,
"Forward_prop_headers");
760 write(xml_out,
"up_prop", all_sinks.prop[
"up"].prop_header);
761 write(xml_out,
"down_prop", all_sinks.prop[
"down"].prop_header);
762 if(all_sinks.prop[
"strange"].exists)
763 write(xml_out,
"strange_prop", all_sinks.prop[
"strange"].prop_header);
764 if(all_sinks.prop[
"charm"].exists)
765 write(xml_out,
"charm_prop", all_sinks.prop[
"charm"].prop_header);
769 push(xml_out,
"Forward_Propagator_Properties" );
770 std::map<std::string,SinkPropContainer_t>::iterator
it;
771 for(
it=all_sinks.prop.begin();
it!=all_sinks.prop.end();
it++)
772 xml_print_prop_info(xml_out,
it->second , phases.
getSet() );
776 int Nt = Layout::lattSize()[
j_decay];
778 LatticeComplex latC ;
784 QDPIO::cout<<
" Flavor structure: " ;
787 QDPIO::cout<<std::endl;
794 XMLBufferWriter file_xml;
796 push(file_xml,
"DBMetaData");
798 write(file_xml,
"lattSize", QDP::Layout::lattSize());
803 write(file_xml,
"Config_info", gauge_xml);
807 qdp_db.setMaxUserInfoLen(file_str.size());
809 qdp_db.insertUserdata(file_str);
824 std::ostringstream os ;
825 os<<all_sinks.prop[prop_id[0]].Mass<<
" ";
826 os<<all_sinks.prop[prop_id[1]].Mass<<
" ";
827 os<<all_sinks.prop[prop_id[2]].Mass ;
832 key.
src_smear = all_sinks.source(prop_id[0])+
" ";
833 key.
src_smear += all_sinks.source(prop_id[1])+
" ";
834 key.
src_smear += all_sinks.source(prop_id[2]) ;
839 key.
snk_smear = all_sinks.sink(prop_id[0])+
" ";
840 key.
snk_smear += all_sinks.sink(prop_id[1])+
" ";
841 key.
snk_smear += all_sinks.sink(prop_id[2]) ;
859 multi2d<ComplexD> hsum;
860 hsum = phases.
sft(latC) ;
862 for(
int mom(0);mom<phases.
numMom();mom++){
868 for(
int t(0);
t<Nt;
t++){
869 int t_eff = (
t -
t0 + Nt) % Nt;
871 V.
data()[t_eff] = -hsum[mom][
t];
873 V.
data()[t_eff] = hsum[mom][
t];
883 QDPIO::cout <<
name <<
": contraction time = "
884 << tictoc.getTimeInSeconds()
885 <<
" secs" << std::endl;
892 QDPIO::cout <<
name <<
": total time = "
893 << snoop.getTimeInSeconds()
894 <<
" secs" << std::endl;
896 QDPIO::cout <<
name <<
": ran successfully" << std::endl;
Inline measurement factory.
Heavy-light baryon 2-pt functions.
multi2d< multi2d< LatticeComplex > > p
void permutations(const multi1d< std::string > &flavor)
std::vector< Params::SpinTerms_t > terms
Inline measurement of hadron spectrum.
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.
multi1d< int > numToMom(int mom_num) const
Convert momenta id to actual array of momenta.
multi2d< DComplex > sft(const LatticeComplex &cf) const
Do a sumMulti(cf*phases,getSet())
int numMom() const
Number of momenta.
const Set & getSet() const
The set to be used in sumMulti.
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.
std::string source_disp_type
std::string quark_propagator_id
std::map< std::string, BarSpec::RPropagator > rprop
std::map< std::string, SinkPropContainer_t > prop
ForwardProp_t prop_header
std::string sink_disp_type
Inline hadron spectrum calculations.
Named object function std::map.
static bool registered
Local registration flag.
const std::string name
Name to be used.
int permutation_sign(int k, int n)
BasePropagator< Ns > RPropagator
std::vector< int > permutation(int k, const std::vector< int > &s)
void contract(LatticeComplex &latC, const RPropagator &q1, const RPropagator &q2, const RPropagator &q3, const SpinWF_t &snk, const SpinWF_t &src)
bool registerAll()
Register all the factories.
void write(XMLWriter &xml, const std::string &path, const Params::SpinTerms_t &ter)
void read(XMLReader &xml, const std::string &path, Params::SpinTerms_t &ter)
void epsilon_contract(LatticeComplex &res, const multi2d< LatticeComplex > &l, const multi2d< LatticeComplex > &m, const multi2d< LatticeComplex > &r)
std::string getName()
Return the name.
Asqtad Staggered-Dirac operator.
Real getMass(const GroupXML_t &fermact)
Given a fermion action in std::string form, return the Mass.
static multi1d< LatticeColorMatrix > u
const WilsonTypeFermAct< multi1d< LatticeFermion > > Handle< const ConnectState > const multi1d< Real > & Mass
push(xml_out,"Condensates")
multi1d< int > getFermActBoundary(const GroupXML_t &fermact)
Given a fermion action in std::string form, return the boundary.
void MesPlq(const multi1d< LatticeColorMatrixF3 > &u, multi2d< Double > &plane_plaq, Double &link)
multi1d< LatticeFermion > s(Ncb)
Various parameter structs and reader/writers.
Print out basic info about this program.
Routines associated with Chroma propagator IO.
Fourier transform phase factor support.
multi1d< State_t > states
multi1d< SpinTerms_t > terms
void writeXML(XMLWriter &xml_out, const std::string &path)
struct Chroma::InlineBarSpecEnv::Params::Param_t param
struct Chroma::InlineBarSpecEnv::Params::NamedObject_t named_obj
multi1d< int > snk_lorentz
multi1d< int > src_lorentz
static INTERNAL_PRECISION K