Line data Source code
1 : /* +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 : Copyright (c) 2012-2020 The plumed team 3 : (see the PEOPLE file at the root of the distribution for a list of names) 4 : 5 : See http://www.plumed.org for more information. 6 : 7 : This file is part of plumed, version 2. 8 : 9 : plumed is free software: you can redistribute it and/or modify 10 : it under the terms of the GNU Lesser General Public License as published by 11 : the Free Software Foundation, either version 3 of the License, or 12 : (at your option) any later version. 13 : 14 : plumed is distributed in the hope that it will be useful, 15 : but WITHOUT ANY WARRANTY; without even the implied warranty of 16 : MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 17 : GNU Lesser General Public License for more details. 18 : 19 : You should have received a copy of the GNU Lesser General Public License 20 : along with plumed. If not, see <http://www.gnu.org/licenses/>. 21 : +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */ 22 : #ifndef __PLUMED_tools_BiasRepresentation_h 23 : #define __PLUMED_tools_BiasRepresentation_h 24 : 25 : #include "Exception.h" 26 : #include <memory> 27 : #include <vector> 28 : 29 : namespace PLMD { 30 : 31 : class Value; 32 : class Grid; 33 : class IFile; 34 : class KernelFunctions; 35 : class Communicator; 36 : 37 : //+PLUMEDOC INTERNAL biasrepresentation 38 : /* 39 : 40 : */ 41 : //+ENDPLUMEDOC 42 : 43 : /// this class implements a general purpose class that aims to 44 : /// provide a Grid/list 45 : /// transparently add gaussians to a bias 46 : 47 33 : class BiasRepresentation { 48 : public: 49 : /// create a bias representation from a list of pointer to values 50 : BiasRepresentation(const std::vector<Value*> & tmpvalues, Communicator &cc ); 51 : /// create a bias using explicit sigma in input (needed for histogram building) 52 : BiasRepresentation(const std::vector<Value*> & tmpvalues, Communicator &cc, const std::vector<double> & sigma); 53 : /// create a bias containing a grid representation 54 : BiasRepresentation(const std::vector<Value*> & tmpvalues, Communicator &cc, const std::vector<std::string> & gmin, const std::vector<std::string> & gmax, 55 : const std::vector<unsigned> & nbin, bool doInt, double lowI_, double uppI_); 56 : /// create a histogram with grid representation and sigmas in input 57 : BiasRepresentation(const std::vector<Value*> & tmpvalues, Communicator &cc, const std::vector<std::string> & gmin, const std::vector<std::string> & gmax, const std::vector<unsigned> & nbin, const std::vector<double> & sigma); 58 : /// retrieve the number of dimension of the representation 59 : unsigned getNumberOfDimensions(); 60 : /// add the grid to the representation 61 : void addGrid(const std::vector<std::string> & gmin, const std::vector<std::string> & gmax, const std::vector<unsigned> & nbin ); 62 : /// push a kernel on the representation (includes widths and height) 63 : void pushKernel( IFile * ff); 64 : /// set the flag that rescales the free energy to the bias 65 : void setRescaledToBias(bool rescaled); 66 : /// check if the representation is rescaled to the bias 67 : const bool & isRescaledToBias(); 68 : /// check if the sigma values are already provided (in case of a histogram representation with input sigmas) 69 : bool hasSigmaInInput(); 70 : /// get the names of the variables 71 : std::vector<std::string> getNames(); 72 : /// get the pointer to the values 73 : const std::vector<Value*> & getPtrToValues(); 74 : /// get the number of kernels contained in the representation 75 : int getNumberOfKernels(); 76 : /// get the name of the i-th value 77 : const std::string & getName(unsigned i); 78 : /// get a pointer to a specific value 79 : Value* getPtrToValue(unsigned i); 80 : /// get the pointer to the grid 81 : Grid* getGridPtr(); 82 : /// get a new histogram point from a file 83 : std::unique_ptr<KernelFunctions> readFromPoint(IFile *ifile); 84 : /// get an automatic min/max from the set so to know how to configure the grid 85 : void getMinMaxBin(std::vector<double> &vmin, std::vector<double> &vmax, std::vector<unsigned> &vbin); 86 : /// clear the representation (grid included) 87 : void clear(); 88 : private: 89 : int ndim; 90 : bool hasgrid; 91 : bool rescaledToBias; 92 : bool doInt_; 93 : double lowI_; 94 : double uppI_; 95 : std::vector<Value*> values; 96 : std::vector<std::string> names; 97 : std::vector<std::unique_ptr<KernelFunctions>> hills; 98 : std::vector<double> biasf; 99 : std::vector<double> histosigma; 100 : Communicator& mycomm; 101 : std::unique_ptr<Grid> BiasGrid_; 102 : }; 103 : 104 : } 105 : 106 : #endif