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 "kineticenergyhist.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 KineticEnergyHistogram::KineticEnergyHistogram(const ConfigurationDatabase &conf):BaseHistogram(conf.doubleValue("KineticEnergyHistogram", "min"), conf.doubleValue("KineticEnergyHistogram", "max"), conf.intValue("KineticEnergyHistogram", "bins")) 00031 { 00032 m_pullingInterval=conf.intValue("KineticEnergyHistogram", "pull"); 00033 } 00034 00035 void KineticEnergyHistogram::acquire(const Cluster& cluster) 00036 { 00037 double del = (m_max - m_min)/m_bins; 00038 int nbin=0; 00039 ++m_numberHistogramsTaken; 00040 00041 for(int i = 0; i < cluster.size() ; ++i) 00042 { 00043 nbin=( (int)( ( cluster[i].properties.kineticEnergy - m_min )/del ) ); 00044 if(nbin < m_bins && nbin >= 0) 00045 ++m_histogramBin[nbin]; 00046 } 00047 } 00048 00049 void KineticEnergyHistogram::write(int numAtoms, string base_name) 00050 { 00051 double del = (m_max - m_min)/m_bins; 00052 00053 ofstream out((base_name+".keh").c_str()); 00054 out.precision(Cluster::PRECISION); 00055 out.setf(ios::scientific); 00056 out.setf(ios::showpos); 00057 for(int i = 0; i < m_bins; ++i) 00058 out << m_min + (i*del) + (del/2.0) << " " << m_histogramBin[i]/(del*(double)(m_numberHistogramsTaken*numAtoms)) << "\n"; 00059 out.close(); 00060 }