Ignore:
Timestamp:
Feb 10, 2011, 6:58:48 PM (15 years ago)
Author:
Frederik Heber <heber@…>
Branches:
Action_Thermostats, Add_AtomRandomPerturbation, Add_FitFragmentPartialChargesAction, Add_RotateAroundBondAction, Add_SelectAtomByNameAction, Added_ParseSaveFragmentResults, AddingActions_SaveParseParticleParameters, Adding_Graph_to_ChangeBondActions, Adding_MD_integration_tests, Adding_ParticleName_to_Atom, Adding_StructOpt_integration_tests, AtomFragments, Automaking_mpqc_open, AutomationFragmentation_failures, Candidate_v1.5.4, Candidate_v1.6.0, Candidate_v1.6.1, Candidate_v1.7.0, ChangeBugEmailaddress, ChangingTestPorts, ChemicalSpaceEvaluator, CombiningParticlePotentialParsing, Combining_Subpackages, Debian_Package_split, Debian_package_split_molecuildergui_only, Disabling_MemDebug, Docu_Python_wait, EmpiricalPotential_contain_HomologyGraph, EmpiricalPotential_contain_HomologyGraph_documentation, Enable_parallel_make_install, Enhance_userguide, Enhanced_StructuralOptimization, Enhanced_StructuralOptimization_continued, Example_ManyWaysToTranslateAtom, Exclude_Hydrogens_annealWithBondGraph, FitPartialCharges_GlobalError, Fix_BoundInBox_CenterInBox_MoleculeActions, Fix_ChargeSampling_PBC, Fix_ChronosMutex, Fix_FitPartialCharges, Fix_FitPotential_needs_atomicnumbers, Fix_ForceAnnealing, Fix_IndependentFragmentGrids, Fix_ParseParticles, Fix_ParseParticles_split_forward_backward_Actions, Fix_PopActions, Fix_QtFragmentList_sorted_selection, Fix_Restrictedkeyset_FragmentMolecule, Fix_StatusMsg, Fix_StepWorldTime_single_argument, Fix_Verbose_Codepatterns, Fix_fitting_potentials, Fixes, ForceAnnealing_goodresults, ForceAnnealing_oldresults, ForceAnnealing_tocheck, ForceAnnealing_with_BondGraph, ForceAnnealing_with_BondGraph_continued, ForceAnnealing_with_BondGraph_continued_betteresults, ForceAnnealing_with_BondGraph_contraction-expansion, FragmentAction_writes_AtomFragments, FragmentMolecule_checks_bonddegrees, GeometryObjects, Gui_Fixes, Gui_displays_atomic_force_velocity, ImplicitCharges, IndependentFragmentGrids, IndependentFragmentGrids_IndividualZeroInstances, IndependentFragmentGrids_IntegrationTest, IndependentFragmentGrids_Sole_NN_Calculation, JobMarket_RobustOnKillsSegFaults, JobMarket_StableWorkerPool, JobMarket_unresolvable_hostname_fix, MoreRobust_FragmentAutomation, ODR_violation_mpqc_open, PartialCharges_OrthogonalSummation, PdbParser_setsAtomName, PythonUI_with_named_parameters, QtGui_reactivate_TimeChanged_changes, Recreated_GuiChecks, Rewrite_FitPartialCharges, RotateToPrincipalAxisSystem_UndoRedo, SaturateAtoms_findBestMatching, SaturateAtoms_singleDegree, StoppableMakroAction, Subpackage_CodePatterns, Subpackage_JobMarket, Subpackage_LinearAlgebra, Subpackage_levmar, Subpackage_mpqc_open, Subpackage_vmg, Switchable_LogView, ThirdParty_MPQC_rebuilt_buildsystem, TrajectoryDependenant_MaxOrder, TremoloParser_IncreasedPrecision, TremoloParser_MultipleTimesteps, TremoloParser_setsAtomName, Ubuntu_1604_changes, stable
Children:
b6b3b2
Parents:
4cbca0
git-author:
Frederik Heber <heber@…> (02/10/11 18:36:56)
git-committer:
Frederik Heber <heber@…> (02/10/11 18:58:48)
Message:

FIX: Changed MpqcParser.

  • some ASSERTs were missing and showed up failure in parsings.
  • in MpqcSection keywords molecule and basis are now ignored.
  • BUGFIX: due to missing whitespacefilter most of the keys were actually not really parsed which lead to strange "A'" and ""A'"" behavior, because in unit test key was without whitespace, hence recognized (and there we switch theories from CLHF parsed file only), whereas in regression test key was not recognized.
  • TESTFIX: ParserMpqcUnitTest - now checks whether MpqcParser_Parameters:: getInt() throws and also if ::operator>> throws in case of debugging.
File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/Parser/MpqcParser_Parameters.cpp

    r4cbca0 r311da7b  
    152152  boost::char_separator<char> semicolonsep(";");
    153153  boost::char_separator<char> equalitysep(" =");
     154  boost::char_separator<char> ticksep("\"");
    154155  std::string line;
    155156  std::getline( ist, line );
     
    157158  tokenizer tokens(line, semicolonsep);
    158159  ASSERT(tokens.begin() != tokens.end(),
    159       "operator<< on MpqcParser_Parameters - empty string, need at least ';'!");
     160      "operator<< on MpqcParser_Parameters - empty string, need at least ';' in line "+line+"!");
    160161  for (tokenizer::iterator tok_iter = tokens.begin();
    161162        tok_iter != tokens.end(); ++tok_iter) {
     
    165166      tokenizer::iterator tok_valueiter = tok_paramiter;
    166167      tokenizer::iterator tok_checkiter = ++tok_valueiter;
     168      ++tok_checkiter;
    167169      // TODO: throw exception instead of ASSERT
    168       ASSERT(tok_valueiter == params.end(),
    169           "operator<< on MpqcParser_Parameters - missing value before ';'!");
    170       ++tok_checkiter;
    171       ASSERT(tok_checkiter == params.end(),
    172           "operator<< on MpqcParser_Parameters - still tokens before ';'!");
    173       DoLog(0) && (Log() << Verbose(0)
    174           << "INFO: Token pair is " << *tok_paramiter << "," << *tok_valueiter << std::endl);
    175       std::stringstream value(*tok_valueiter);
     170      ASSERT(tok_paramiter != paramtokens.end(),
     171          "operator<< on MpqcParser_Parameters - missing value before ' =' in token "+*tok_iter+"!");
     172      ASSERT(tok_valueiter != paramtokens.end(),
     173          "operator<< on MpqcParser_Parameters - missing value after ' =' in token "+*tok_iter+"!");
     174      ASSERT(tok_checkiter == paramtokens.end(),
     175          "operator<< on MpqcParser_Parameters - still more tokens after ' =' in token "+*tok_iter+":"
     176          +*tok_checkiter+"!");
     177      std::stringstream keystream(*tok_paramiter);
     178      std::string key;
     179      keystream >> ws >> key;
     180      tokenizer ticklesstokens(*tok_valueiter, ticksep);
     181      ASSERT(ticklesstokens.begin() != ticklesstokens.end(),
     182          "operator<< on MpqcParser_Parameters - no tokens present after removing ticks in token "+*tok_valueiter+"!");
     183      std::stringstream valuestream(*(ticklesstokens.begin()));
     184      DoLog(2) && (Log() << Verbose(2)
     185          << "INFO: Token pair is " << key << "," << valuestream.str() << std::endl);
    176186
    177187      // TODO: throw exception instead of DoeLog()
    178       if ((params.haveParam(*tok_paramiter))) {
    179         params.setter(params.getParam(*tok_paramiter), value);
    180       } else {
    181         DoeLog(0) && (eLog() << Verbose(0)
    182             << *tok_paramiter << " is not a valid parameter name!" << std::endl);
    183       }
     188      ASSERT(params.haveParam(key),
     189          "operator >> on MpqcParser_Parameters - unknown parameter name '"
     190          +key+"' with value "+valuestream.str()+"!");
     191      if (params.haveParam(key))
     192        params.setter(params.getParam(key), valuestream);
    184193    } else {
    185194      ist.setstate(std::ios::eofbit);
     
    247256{
    248257  // TODO: throw exception instead of eLog()
    249   try {
     258//  try {
    250259    params[theoryParam] = _theory;
    251   } catch(const boost::bad_any_cast &) {
    252     DoeLog(0) && (eLog() << Verbose(0)
    253         << "MpqcParser_Parameters::setTheory() - could not set boolean!" << std::endl);
    254   }
     260//  } catch(const boost::bad_any_cast &) {
     261//    DoeLog(0) && (eLog() << Verbose(0)
     262//        << "MpqcParser_Parameters::setTheory() - could not set boolean!" << std::endl);
     263//  }
    255264}
    256265
    257266void MpqcParser_Parameters::setIntegration(enum MpqcParser_Parameters::IntegrationMethod _integration){
    258267  // TODO: throw exception instead of eLog()
    259   try {
     268//  try {
    260269    params[integrationParam] = _integration;
    261   } catch(const boost::bad_any_cast &) {
    262     DoeLog(0) && (eLog() << Verbose(0)
    263         << "MpqcParser_Parameters::setIntegration() - could not set boolean!" << std::endl);
    264   }
     270//  } catch(const boost::bad_any_cast &) {
     271//    DoeLog(0) && (eLog() << Verbose(0)
     272//        << "MpqcParser_Parameters::setIntegration() - could not set boolean!" << std::endl);
     273//  }
    265274}
    266275
     
    279288  enum IntegrationMethod value;
    280289  // TODO: throw exception instead of eLog()
    281   try {
     290//  try {
    282291    value = boost::any_cast<enum IntegrationMethod>(params[integrationParam]);
    283   } catch(const boost::bad_any_cast &) {
    284     DoeLog(0) && (eLog() << Verbose(0)
    285         << "MpqcParser_Parameters::getIntegration() - could not convert "
    286         +ParamNames[integrationParam]+" to enum IntegrationMethod!" << std::endl);
    287   }
     292//  } catch(const boost::bad_any_cast &) {
     293//    DoeLog(0) && (eLog() << Verbose(0)
     294//        << "MpqcParser_Parameters::getIntegration() - could not convert "
     295//        +ParamNames[integrationParam]+" to enum IntegrationMethod!" << std::endl);
     296//  }
    288297  return value;
    289298}
     
    293302  enum Theory value;
    294303  // TODO: throw exception instead of eLog()
    295   try {
     304//  try {
    296305    value = boost::any_cast<enum Theory>(params[theoryParam]);
    297   } catch(const boost::bad_any_cast &) {
    298     DoeLog(0) && (eLog() << Verbose(0)
    299         << "MpqcParser_Parameters::getTheory() - could not convert "
    300         +ParamNames[theoryParam]+" to enum Theory!" << std::endl);
    301   }
     306//  } catch(const boost::bad_any_cast &) {
     307//    DoeLog(0) && (eLog() << Verbose(0)
     308//        << "MpqcParser_Parameters::getTheory() - could not convert "
     309//        +ParamNames[theoryParam]+" to enum Theory!" << std::endl);
     310//  }
    302311  return value;
    303312}
     
    321330    case integrationParam:
    322331      // TODO: throw exception instead of eLog()
    323       try {
     332//      try {
    324333        Iindex = boost::any_cast<enum IntegrationMethod>(params[_param]);
    325       } catch(const boost::bad_any_cast &) {
    326         DoeLog(0) && (eLog() << Verbose(0)
    327             << "MpqcParser_Parameters::getString() - could not convert "
    328             +ParamNames[_param]+" to string!" << std::endl);
    329       }
     334//      } catch(const boost::bad_any_cast &) {
     335//        DoeLog(0) && (eLog() << Verbose(0)
     336//            << "MpqcParser_Parameters::getString() - could not convert "
     337//            +ParamNames[_param]+" to string!" << std::endl);
     338//      }
    330339      value = IntegrationNames[Iindex];
    331340      break;
    332341    case theoryParam:
    333342      // TODO: throw exception instead of eLog()
    334       try {
     343//      try {
    335344        Tindex = boost::any_cast<enum Theory>(params[_param]);
    336       } catch(const boost::bad_any_cast &) {
    337         DoeLog(0) && (eLog() << Verbose(0)
    338             << "MpqcParser_Parameters::getString() - could not convert "
    339             +ParamNames[_param]+" to string!" << std::endl);
    340       }
     345//      } catch(const boost::bad_any_cast &) {
     346//        DoeLog(0) && (eLog() << Verbose(0)
     347//            << "MpqcParser_Parameters::getString() - could not convert "
     348//            +ParamNames[_param]+" to string!" << std::endl);
     349//      }
    341350      value = TheoryNames[(enum Theory)Tindex];
    342351      break;
    343352    default:
    344353      // TODO: throw exception instead of eLog()
    345       try {
     354//      try {
    346355        value = boost::any_cast<std::string>(params[_param]);
    347       } catch(const boost::bad_any_cast &) {
    348         DoeLog(0) && (eLog() << Verbose(0)
    349             << "MpqcParser_Parameters::getString() - could not convert "
    350             +ParamNames[_param]+" to string!" << std::endl);
    351       }
     356//      } catch(const boost::bad_any_cast &) {
     357//        DoeLog(0) && (eLog() << Verbose(0)
     358//            << "MpqcParser_Parameters::getString() - could not convert "
     359//            +ParamNames[_param]+" to string!" << std::endl);
     360//      }
    352361      break;
    353362  }
     
    362371    default:
    363372      // TODO: throw exception instead of eLog()
    364       try {
     373//      try {
    365374        value = boost::any_cast<int>(params[_param]);
    366       } catch(const boost::bad_any_cast &) {
    367         DoeLog(0) && (eLog() << Verbose(0)
    368             << "MpqcParser_Parameters::getInt() - could not convert "
    369             +ParamNames[_param]+" to int!" << std::endl);
    370       }
     375//      } catch(const boost::bad_any_cast &) {
     376//        DoeLog(0) && (eLog() << Verbose(0)
     377//            << "MpqcParser_Parameters::getInt() - could not convert "
     378//            +ParamNames[_param]+" to int!" << std::endl);
     379//      }
    371380      break;
    372381  }
     
    378387  double value;
    379388  // TODO: throw exception instead of eLog()
    380   try {
     389//  try {
    381390    value = boost::any_cast<double>(params[_param]);
    382   } catch(const boost::bad_any_cast &) {
    383     DoeLog(0) && (eLog() << Verbose(0)
    384         << "MpqcParser_Parameters::getDouble() - could not convert "
    385         +ParamNames[_param]+" to double!" << std::endl);
    386   }
     391//  } catch(const boost::bad_any_cast &) {
     392//    DoeLog(0) && (eLog() << Verbose(0)
     393//        << "MpqcParser_Parameters::getDouble() - could not convert "
     394//        +ParamNames[_param]+" to double!" << std::endl);
     395//  }
    387396  return value;
    388397}
     
    392401  bool value;
    393402  // TODO: throw exception instead of eLog()
    394   try {
     403//  try {
    395404    value = boost::any_cast<bool>(params[_param]);
    396   } catch(const boost::bad_any_cast &) {
    397     DoeLog(0) && (eLog() << Verbose(0)
    398         << "MpqcParser_Parameters::getBool() - could not convert "
    399         +ParamNames[_param]+" to bool!" << std::endl);
    400   }
     405//  } catch(const boost::bad_any_cast &) {
     406//    DoeLog(0) && (eLog() << Verbose(0)
     407//        << "MpqcParser_Parameters::getBool() - could not convert "
     408//        +ParamNames[_param]+" to bool!" << std::endl);
     409//  }
    401410  return value;
    402411}
Note: See TracChangeset for help on using the changeset viewer.