Ignore:
Timestamp:
Mar 20, 2017, 2:54:42 PM (9 years ago)
Author:
Frederik Heber <heber@…>
Branches:
FitPartialCharges_GlobalError, PartialCharges_OrthogonalSummation
Children:
5b3781
Parents:
dbd841
git-author:
Frederik Heber <heber@…> (06/12/16 14:28:29)
git-committer:
Frederik Heber <heber@…> (03/20/17 14:54:42)
Message:

Extracted IndexedValue from IndexedVectors.

  • we may now sum up indexed values of arbitrary type, i.e. an arbitrary class that fulfills a certain interface, and each instance connected to a specific index (within index sets).
  • added detail::force where std::vector<double> is specialized for three components.
  • IndexedVectors is now a specialization of IndexedValue for detail::force.
  • adapated usage signatures in AnalyseFragmentationResultsAction, InterfaceVMGJob, and MPQCCommandJob.
  • slight changes in IndexedVectorsUnitTest because boost::assign is no longer used for detail::force.
File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/Fragmentation/Summation/SetValues/IndexedVectors.cpp

    rdbd841 r346b0c  
    22 * Project: MoleCuilder
    33 * Description: creates and alters molecular systems
    4  * Copyright (C)  2012 University of Bonn. All rights reserved.
    5  * Copyright (C)  2013 Frederik Heber. All rights reserved.
    6  *
     4 * Copyright (C)  2016 Frederik Heber. All rights reserved.
     5 *
    76 *
    87 *   This file is part of MoleCuilder.
     
    2524 * IndexedVectors.cpp
    2625 *
    27  *  Created on: 29.07.2012
     26 *  Created on: Jun 12, 2016
    2827 *      Author: heber
    2928 */
     29
    3030
    3131// include config.h
     
    3636#include "CodePatterns/MemDebug.hpp"
    3737
    38 #include "Fragmentation/Summation/SetValues/IndexedVectors.hpp"
     38#include "IndexedVectors.hpp"
    3939
    40 #include <iostream>
    41 
    42 #include "CodePatterns/Assert.hpp"
    43 
    44 // static member variables
    45 const size_t IndexedVectors::FixedSize = 3;
    46 const IndexedVectors::vector_t IndexedVectors::nullvector( FixedSize, 0.);
    47 
    48 IndexedVectors::IndexedVectors(const indices_t &_indices, const vectors_t &_vectors)
    49 {
    50   ASSERT(_indices.size() == _vectors.size(),
    51       "IndexedVectors::IndexedVectors() - vector of indices and vectors don't match in size.");
    52   indices_t::const_iterator indexiter = _indices.begin();
    53   vectors_t::const_iterator vectoriter = _vectors.begin();
    54   for (; vectoriter != _vectors.end(); ++indexiter, ++vectoriter) {
    55     ASSERT( vectoriter->size() == FixedSize,
    56         "IndexedVectors::IndexedVectors() - vector to instance "
    57         +toString(*indexiter)+" has size "
    58         +toString(vectoriter->size())+" different to FixedSize "
    59         +toString(FixedSize)+".");
    60     if (*indexiter != (size_t)DropIndex) { // skip all force vectors associated to -1
    61 #ifndef NDEBUG
    62       std::pair<indexedvectors_t::iterator, bool> inserter =
    63 #endif
    64       vectors.insert( std::make_pair( *indexiter, *vectoriter) );
    65       ASSERT( inserter.second,
    66           "IndexedVectors::IndexedVectors() - index "
    67           +toString(inserter.first->first)+" already present with vector "
    68           +toString(inserter.first->second)+".");
    69     }
    70   }
    71 }
    72 
    73 IndexedVectors& IndexedVectors::operator=(const IndexedVectors &other)
    74 {
    75   // check for self-assignment
    76   if (this != &other) {
    77     vectors.clear();
    78     vectors = other.vectors;
    79   }
    80   return *this;
    81 }
    82 
    83 void IndexedVectors::superposeOtherIndexedVectors(const IndexedVectors &other, const double prefactor)
    84 {
    85   for (indexedvectors_t::const_iterator otheriter = other.vectors.begin();
    86       otheriter != other.vectors.end(); ++otheriter) {
    87     indexedvectors_t::iterator iter = vectors.find(otheriter->first);
    88     if (iter == vectors.end()) {
    89       // index does not exist
    90       std::pair<indexedvectors_t::iterator, bool> inserter =
    91           vectors.insert( std::make_pair( otheriter->first, nullvector) );
    92       ASSERT( inserter.second,
    93           "IndexedVectors::superposeOtherIndexedVectors() - index is present though unfound before?");
    94       iter = inserter.first;
    95     }
    96     // now simply vector to index from other instance add with prefactor
    97     vector_t::iterator vectoriter = iter->second.begin();
    98     vector_t::const_iterator othervectoriter = otheriter->second.begin();
    99     for (;vectoriter != iter->second.end(); ++vectoriter, ++othervectoriter) {
    100       *vectoriter += prefactor * (*othervectoriter);
    101     }
    102   }
    103 }
    104 
    105 bool IndexedVectors::operator==(const IndexedVectors& other) const
    106 {
    107   bool status = vectors == other.vectors;
    108   return status;
    109 }
    110 
    111 std::ostream & operator<<(std::ostream &ost, const IndexedVectors &other)
    112 {
    113   for (IndexedVectors::indexedvectors_t::const_iterator iter = other.vectors.begin();
    114       iter != other.vectors.end(); ++iter)
    115     ost << "(" << iter->first << "," << iter->second << ") ";
    116   return ost;
    117 }
    118 
    119 template<> IndexedVectors ZeroInstance<IndexedVectors>()
     40template <>
     41IndexedVectors ZeroInstance<IndexedVectors>()
    12042{
    12143  IndexedVectors returnvalue;
    12244  return returnvalue;
    12345}
     46
     47template<>
     48detail::force ZeroInstance< detail::force >()
     49{
     50  return detail::force::nullvector;
     51}
Note: See TracChangeset for help on using the changeset viewer.