00001 /*************************************************************************************************** 00002 ***** Copyright (C) 2005 John Schneiderman <JohnMS@member.fsf.org> ***** 00003 ***** ***** 00004 ***** This program is free software; you can redistribute it and/or modify ***** 00005 ***** it under the terms of the GNU General Public License as published by ***** 00006 ***** the Free Software Foundation; either version 2 of the License, or ***** 00007 ***** (at your option) any later version. ***** 00008 ***** ***** 00009 ***** This program is distributed in the hope that it will be useful, ***** 00010 ***** but WITHOUT ANY WARRANTY; without even the implied warranty of ***** 00011 ***** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ***** 00012 ***** GNU General Public License for more details. ***** 00013 ***** ***** 00014 ***** You should have received a copy of the GNU General Public License ***** 00015 ***** along with this program; if not, write to the Free Software ***** 00016 ***** Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA ***** 00017 ***************************************************************************************************/ 00018 #include "potentialenergyhist.h" 00019 #include "cluster.h" 00020 #include "configurationdatabase.h" 00021 00022 #include <fstream> 00023 using std::ofstream; 00024 00025 #include <iomanip> 00026 using std::ios; 00027 using std::scientific; 00028 using std::showpos; 00029 00030 PotentialEnergyHistogram::PotentialEnergyHistogram(const ConfigurationDatabase &conf):BaseHistogram(conf.doubleValue("PotentialEnergyHistogram", "min"), conf.doubleValue("PotentialEnergyHistogram", "max"), conf.intValue("PotentialEnergyHistogram", "bins")) 00031 { 00032 m_pullingInterval=conf.intValue("PotentialEnergyHistogram", "pull"); 00033 } 00034 00035 void PotentialEnergyHistogram::acquire(const Cluster& cluster) 00036 { 00037 int n = int(cluster.size()); 00038 00039 double del = (m_max - m_min)/m_bins; 00040 ++m_numberHistogramsTaken; 00041 00042 for(int i = 0; i < n ; ++i) 00043 { 00044 int nbin=((int)(( cluster[i].properties.potentialEnergy - m_min )/del)); 00045 if(nbin < m_bins && nbin >= 0) 00046 m_histogramBin.at(nbin)++; 00047 } 00048 return; 00049 } 00050 00051 void PotentialEnergyHistogram::write(int numAtoms, string base_name) 00052 { 00053 // cout << "\n opening output file:\n"; 00054 ofstream out((base_name+".peh").c_str()); 00055 out.precision(Cluster::PRECISION); 00056 out.setf(ios::scientific); 00057 out.setf(ios::showpos); 00058 00059 double del = (m_max - m_min)/m_bins; 00060 // cout << "del = " << del << "\n"; 00061 00062 for(int i = 0; i < m_bins; ++i) 00063 { 00064 out << m_min + (i*del) + (del/2.) << " " 00065 << m_histogramBin[i]/(del*(double)(m_numberHistogramsTaken*numAtoms)) << "\n"; 00066 } 00067 00068 out.close(); 00069 00070 // cout << "\n leaving writepotentialEnergyHistogram:\n"; 00071 return; 00072 }