read(inputtop, "prop_file", input.prop_file);
try { read(inputtop, "IO_version/version", input.io_version.version); } catch (const string& e) { QDPIO::cerr << "Error reading data: " << e << endl; throw; }       try { XMLReader paramtop(inputtop, "param");  switch (input.io_version.version) {  case 1 :  break;  default :   QDPIO::cerr << "Input parameter version " << input.io_version.version << " unsupported." << endl; QDP_abort(1); } } catch (const string& e) { QDPIO::cerr << "Error reading data: " << e << endl; throw; }    try { XMLReader paramtop(inputtop, "param");  { string ferm_type_str; read(paramtop, "FermTypeP", ferm_type_str); if (ferm_type_str == "STAGGERED") { input.param.FermTypeP = FERM_TYPE_STAGGERED; } }    switch (input.param.FermTypeP) { case FERM_TYPE_STAGGERED :  QDPIO::cout << " PROPAGATOR: Propagator for Staggered fermions" << endl;  read(paramtop, "Mass", input.param.Mass); read(paramtop, "u0" , input.param.u0);  #if 0 for (int i=0; i < input.param.numKappa; ++i) { if (toBool(input.param.Kappa[i] < 0.0)) { QDPIO::cerr << "Unreasonable value for Kappa." << endl; QDPIO::cerr << "  Kappa[" << i << "] = " << input.param.Kappa[i] << endl; QDP_abort(1); } else { QDPIO::cout << " Spectroscopy Kappa: " << input.param.Kappa[i] << endl; } } #endif  break;  default : QDP_error_exit("Fermion type not supported\n."); }  { string cfg_type_str; read(paramtop, "cfg_type", cfg_type_str); if (cfg_type_str == "NERSC") { input.param.cfg_type = CFG_TYPE_NERSC; } else { QDP_error_exit("Dont know non NERSC files yet"); }  }  { string prop_type_str; read(paramtop, "prop_type", prop_type_str); if (prop_type_str == "SZIN") { input.param.prop_type = PROP_TYPE_SZIN; } else { QDP_error_exit("Dont know non SZIN files yet"); } }    read(paramtop, "RsdCG", input.param.RsdCG); read(paramtop, "MaxCG", input.param.MaxCG); read(paramtop, "GFAccu", input.param.GFAccu); read(paramtop, "OrPara", input.param.OrPara); read(paramtop, "GFMax", input.param.GFMax);  read(paramtop, "nrow", input.param.nrow); read(paramtop, "boundary", input.param.boundary); read(paramtop, "t_srce", input.param.t_srce); } catch (const string& e) { QDPIO::cerr << "Error reading data: " << e << endl; throw; }    try { read(inputtop, "Cfg", input.cfg); read(inputtop, "Prop", input.prop); } catch (const string& e) { QDPIO::cerr << "Error reading data: " << e << endl; throw; }
void read(XMLReader& xml, const string& path, Prop_t& input){  XMLReader inputtop(xml, path);//  read(inputtop, "source_file", input.source_file);  read(inputtop, "prop_file", input.prop_file);}