Changeset 8dcfb9


Ignore:
Timestamp:
May 18, 2016, 10:04:49 PM (9 years ago)
Author:
Frederik Heber <heber@…>
Branches:
CombiningParticlePotentialParsing
Children:
9bb977
Parents:
ff4fff9
git-author:
Frederik Heber <heber@…> (03/09/16 11:54:33)
git-committer:
Frederik Heber <heber@…> (05/18/16 22:04:49)
Message:

ParsePotentialsAction parses both EmpiricalPotentials and Particles.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/Actions/PotentialAction/ParsePotentialsAction.cpp

    rff4fff9 r8dcfb9  
    6565    std::ifstream returnstream(params.potential_file.get().string().c_str());
    6666    if (returnstream.good()) {
    67       try {
    68         RegistryDeserializer<EmpiricalPotential> deserialize(
    69             returnstream,
    70             PotentialFactory::getInstance(),
    71             PotentialRegistry::getInstance(),
    72             std::string("potential"));
    73         deserialize();
    74       } catch (SerializerMissingValueException &e) {
    75         if (const std::string *key = boost::get_error_info<SerializerKey>(e))
    76           STATUS("Missing value when parsing information for potential "+*key+".");
    77         else
    78           STATUS("Missing value parsing information for potential with unknown key.");
    79         return Action::failure;
    80       } catch (SerializerIllegalKeyException &e) {
    81         if (const std::string *key = boost::get_error_info<SerializerKey>(e))
    82           STATUS("Illegal key parsing information for potential "+*key+".");
    83         else
    84           STATUS("Illegal key parsing information for potential with unknown key.");
    85         return Action::failure;
     67      std::string linestring;
     68      std::string token;
     69      while (returnstream.good()) {
     70        getline(returnstream, linestring);
     71        const std::string comment("#");
     72        if (linestring.find(comment) != std::string::npos) {
     73          LOG(4, "DEBUG: Skippeing comment line:"+linestring);
     74          continue;
     75        }
     76        const std::string whitespace(" \t");
     77        const size_t strBegin = linestring.find_first_not_of(whitespace);
     78        const size_t curlyopenpos = linestring.find("{");
     79        const size_t curlyclosedpos = linestring.find("}");
     80        if (curlyopenpos != std::string::npos) {
     81          // begin of new type section
     82          token = linestring.substr(strBegin, curlyopenpos);
     83          const size_t tokenEnd = token.find_first_of(whitespace);
     84          token = token.substr(0, tokenEnd);
     85          LOG(1, "INFO: Token is " << token);
     86          const type_name_map_t::right_const_iterator tokeniter = TypeNameMap.right.find(token);
     87          ASSERT( tokeniter != TypeNameMap.right.end(),
     88              "PotentialParsePotentialsAction::performCall() - could not find type to "
     89              +toString(token)+".");
     90          const tokentype_t tokentype = tokeniter->second;
     91          // get either particles {} or potentials {}
     92          switch (tokentype) {
     93            case particles:
     94            {
     95              if (!parseItems<Particle>(
     96                    returnstream,
     97                    ParticleFactory::getInstance(),
     98                    ParticleRegistry::getInstance(),
     99                    std::string("particle")))
     100                return Action::failure;
     101              break;
     102            }
     103            case bonds:
     104            case angles:
     105            case torsions:
     106            case impropers:
     107            case nonbonded_2body_potentials:
     108            {
     109              if (!parseItems<EmpiricalPotential>(
     110                  returnstream,
     111                  PotentialFactory::getInstance(),
     112                  PotentialRegistry::getInstance(),
     113                  std::string("potential")))
     114                return Action::failure;
     115              break;
     116            }
     117            default:
     118              ASSERT( 0,
     119                  "PotentialParsePotentialsAction::performCall() - token type "
     120                  +toString(tokentype)+" is unknown.");
     121          }
     122        } else if (curlyclosedpos != std::string::npos) {
     123          // section end encountered, just read next line
     124        } else {
     125          ELOG(0, "Parser confused, neither curly open nor curly closed on line "
     126              << linestring);
     127          return Action::failure;
     128        }
    86129      }
    87130    } else {
Note: See TracChangeset for help on using the changeset viewer.