| 124 | 
  | 
          myKeys.push_back((*i)->getName()); | 
| 125 | 
  | 
          myKeys.push_back((*j)->getName()); | 
| 126 | 
  | 
 | 
| 127 | 
– | 
          std::cerr << "looking for " << myKeys[0] << " " << myKeys[1] << "\n"; | 
| 127 | 
  | 
          BondType* bondType = bondTypeCont_.find(myKeys); | 
| 128 | 
  | 
          if (bondType) { | 
| 129 | 
  | 
            foundBonds.push_back(std::make_pair(bondTypeScore, myKeys)); | 
| 141 | 
  | 
        int bestScore = foundBonds[0].first; | 
| 142 | 
  | 
        std::vector<std::string> theKeys = foundBonds[0].second; | 
| 143 | 
  | 
         | 
| 145 | 
– | 
        std::cout << "best matching bond = " << theKeys[0] << "\t" << theKeys[1]  << "\t(score = "<< bestScore << ")\n";       | 
| 144 | 
  | 
        BondType* bestType = bondTypeCont_.find(theKeys); | 
| 145 | 
  | 
         | 
| 146 | 
  | 
        return bestType; | 
| 224 | 
  | 
        std::sort(foundBends.begin(), foundBends.end()); | 
| 225 | 
  | 
        int jscore = foundBends[0].first; | 
| 226 | 
  | 
        int ikscore = foundBends[0].second; | 
| 227 | 
< | 
        std::vector<std::string> theKeys = foundBends[0].third; | 
| 227 | 
> | 
        std::vector<std::string> theKeys = foundBends[0].third;        | 
| 228 | 
  | 
         | 
| 231 | 
– | 
        std::cout << "best matching bend = " << theKeys[0] << "\t" <<theKeys[1]  << "\t" << theKeys[2] << "\t(scores = "<< jscore << "\t" << ikscore << ")\n";       | 
| 232 | 
– | 
         | 
| 229 | 
  | 
        BendType* bestType = bendTypeCont_.find(theKeys);   | 
| 230 | 
  | 
        return bestType; | 
| 231 | 
  | 
      } else {         | 
| 328 | 
  | 
        int ilscore = foundTorsions[0].second; | 
| 329 | 
  | 
        std::vector<std::string> theKeys = foundTorsions[0].third; | 
| 330 | 
  | 
         | 
| 335 | 
– | 
        std::cout << "best matching torsion = " << theKeys[0] << "\t" <<theKeys[1]  << "\t" << theKeys[2] << "\t" << theKeys[3] << "\t(scores = "<< jkscore << "\t" << ilscore << ")\n"; | 
| 336 | 
– | 
                 | 
| 331 | 
  | 
        TorsionType* bestType = torsionTypeCont_.find(theKeys); | 
| 332 | 
  | 
        return bestType; | 
| 333 | 
  | 
      } else { | 
| 348 | 
  | 
    keys.push_back(at4);     | 
| 349 | 
  | 
 | 
| 350 | 
  | 
    //try exact match first | 
| 351 | 
< | 
    InversionType* inversionType = inversionTypeCont_.find(keys); | 
| 351 | 
> | 
    InversionType* inversionType = inversionTypeCont_.permutedFindSkippingFirstElement(keys); | 
| 352 | 
  | 
    if (inversionType) { | 
| 353 | 
  | 
      return inversionType; | 
| 354 | 
  | 
    } else { | 
| 410 | 
  | 
              myKeys.push_back((*k)->getName()); | 
| 411 | 
  | 
              myKeys.push_back((*l)->getName()); | 
| 412 | 
  | 
               | 
| 413 | 
< | 
              InversionType* inversionType = inversionTypeCont_.find(myKeys); | 
| 413 | 
> | 
              InversionType* inversionType = inversionTypeCont_.permutedFindSkippingFirstElement(myKeys); | 
| 414 | 
  | 
              if (inversionType) {  | 
| 415 | 
  | 
                foundInversions.push_back( make_tuple3(Iscore, JKLscore, myKeys) ); | 
| 416 | 
  | 
              } | 
| 429 | 
  | 
        int jklscore = foundInversions[0].second; | 
| 430 | 
  | 
        std::vector<std::string> theKeys = foundInversions[0].third; | 
| 431 | 
  | 
         | 
| 432 | 
< | 
        std::cout << "best matching inversion = " << theKeys[0] << "\t" <<theKeys[1]  << "\t" << theKeys[2] << "\t" << theKeys[3] << "\t(scores = "<< iscore << "\t" << jklscore << ")\n"; | 
| 439 | 
< | 
                 | 
| 440 | 
< | 
        InversionType* bestType = inversionTypeCont_.find(theKeys); | 
| 432 | 
> | 
        InversionType* bestType = inversionTypeCont_.permutedFindSkippingFirstElement(theKeys); | 
| 433 | 
  | 
        return bestType; | 
| 434 | 
  | 
      } else { | 
| 435 | 
  | 
        //if no exact match found, try wild card match | 
| 509 | 
  | 
    return atomTypeCont_.add(keys, atomType); | 
| 510 | 
  | 
  } | 
| 511 | 
  | 
 | 
| 512 | 
+ | 
  bool ForceField::replaceAtomType(const std::string &at, AtomType* atomType) { | 
| 513 | 
+ | 
    std::vector<std::string> keys; | 
| 514 | 
+ | 
    keys.push_back(at); | 
| 515 | 
+ | 
    return atomTypeCont_.replace(keys, atomType); | 
| 516 | 
+ | 
  } | 
| 517 | 
+ | 
 | 
| 518 | 
  | 
  bool ForceField::addBondType(const std::string &at1, const std::string &at2, | 
| 519 | 
  | 
                               BondType* bondType) { | 
| 520 | 
  | 
    std::vector<std::string> keys; |