Navigation

Main Page
Download
Support
Installation
Tutorial
Examples
Reference Manual
   Version 1.0.4
      Class Index
      File List
   Version 1.0.4dev
Publications


Hosted by Get Ion Beam Simulator at SourceForge.net. Fast, secure and Free Open Source software downloads

histogram.hpp

Go to the documentation of this file.
00001 
00005 /* Copyright (c) 2005-2010 Taneli Kalvas. All rights reserved.
00006  *
00007  * You can redistribute this software and/or modify it under the terms
00008  * of the GNU General Public License as published by the Free Software
00009  * Foundation; either version 2 of the License, or (at your option)
00010  * any later version.
00011  * 
00012  * This library is distributed in the hope that it will be useful, but
00013  * WITHOUT ANY WARRANTY; without even the implied warranty of
00014  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
00015  * General Public License for more details.
00016  * 
00017  * You should have received a copy of the GNU General Public License
00018  * along with this library (file "COPYING" included in the package);
00019  * if not, write to the Free Software Foundation, Inc., 51 Franklin
00020  * Street, Fifth Floor, Boston, MA 02110-1301 USA
00021  * 
00022  * If you have questions about your rights to use or distribute this
00023  * software, please contact Berkeley Lab's Technology Transfer
00024  * Department at TTD@lbl.gov. Other questions, comments and bug
00025  * reports should be sent directly to the author via email at
00026  * taneli.kalvas@jyu.fi.
00027  * 
00028  * NOTICE. This software was developed under partial funding from the
00029  * U.S.  Department of Energy.  As such, the U.S. Government has been
00030  * granted for itself and others acting on its behalf a paid-up,
00031  * nonexclusive, irrevocable, worldwide license in the Software to
00032  * reproduce, prepare derivative works, and perform publicly and
00033  * display publicly.  Beginning five (5) years after the date
00034  * permission to assert copyright is obtained from the U.S. Department
00035  * of Energy, and subject to any subsequent five (5) year renewals,
00036  * the U.S. Government is granted for itself and others acting on its
00037  * behalf a paid-up, nonexclusive, irrevocable, worldwide license in
00038  * the Software to reproduce, prepare derivative works, distribute
00039  * copies to the public, perform publicly and display publicly, and to
00040  * permit others to do so.
00041  */
00042 
00043 #ifndef HISTOGRAM_HPP
00044 #define HISTOGRAM_HPP 1
00045 
00046 
00047 #include <vector>
00048 
00049 
00052 class Histogram
00053 {
00054 
00055 public:
00056 
00059     virtual ~Histogram() {}
00060 
00061 };
00062 
00063 
00066 class Histogram1D : public Histogram
00067 {
00068     int                 _n;         
00069     double              _range[2];  
00070     double              _step;      
00071     std::vector<double> _data;      
00073 public:
00074 
00077     Histogram1D( size_t n, const double range[2] );
00078 
00081     Histogram1D( size_t n, const std::vector<double> &xdata );
00082 
00085     Histogram1D( size_t n, const std::vector<double> &xdata, const std::vector<double> &wdata );
00086 
00089     virtual ~Histogram1D();
00090 
00093     size_t n( void ) const { return( _n ); }
00094 
00097     double step( void ) const { return( _step ); }
00098 
00101     double coord( size_t i ) const { return( _range[0] + i*(_range[1]-_range[0]) / (_n-1.0) ); }
00102 
00107     void accumulate( size_t i, double weight ) {
00108         _data[i] += weight;
00109     }
00110 
00120     void accumulate_linear( double x, double weight );
00121 
00124     void get_range( double range[2] ) const { 
00125         range[0] =  _range[0];
00126         range[1] =  _range[1];
00127     }
00128     
00133     void get_bin_range( double &min, double &max ) const;
00134     
00137     std::vector<double> &get_data( void ) { return( _data ); }
00138 
00141     const std::vector<double> &get_data( void ) const { return( _data ); }
00142 
00145     const double &operator()( size_t i ) const {
00146         return( _data[i] );
00147     }
00148 
00151     double &operator()( size_t i ) {
00152         return( _data[i] );
00153     }
00154 };
00155 
00156 
00159 class Histogram2D : public Histogram
00160 {
00161     int                 _n;         
00162     int                 _m;         
00163     double              _range[4];  
00164     double              _nstep;     
00165     double              _mstep;     
00166     std::vector<double> _data;      
00168 public:
00169 
00172     Histogram2D( size_t n, size_t m, const double range[4] );
00173 
00176     Histogram2D( size_t n, size_t m, 
00177                  const std::vector<double> &xdata,
00178                  const std::vector<double> &ydata );
00179 
00182     Histogram2D( size_t n, size_t m, 
00183                  const std::vector<double> &xdata,
00184                  const std::vector<double> &ydata,
00185                  const std::vector<double> &wdata );
00186 
00189     virtual ~Histogram2D();
00190 
00193     size_t n( void ) const { return( _n ); }
00194 
00197     size_t m( void ) const { return( _m ); }
00198 
00201     double nstep( void ) const { return( _nstep ); }
00202 
00205     double mstep( void ) const { return( _mstep ); }
00206 
00209     double icoord( size_t i ) const { return( _range[0] + i*(_range[2]-_range[0]) / (_n-1.0) ); }
00210 
00213     double jcoord( size_t j ) const { return( _range[1] + j*(_range[3]-_range[1]) / (_m-1.0) ); }
00214 
00219     void accumulate( size_t i, size_t j, double weight ) {
00220         _data[i+j*_n] += weight;
00221     }
00222 
00232     void accumulate_linear( double x, double y, double weight );
00233 
00236     void get_range( double range[4] ) const { 
00237         range[0] =  _range[0];
00238         range[1] =  _range[1];
00239         range[2] =  _range[2];
00240         range[3] =  _range[3];
00241     }
00242     
00247     void get_bin_range( double &min, double &max ) const;
00248     
00251     std::vector<double> &get_data( void ) { return( _data ); }
00252 
00255     const std::vector<double> &get_data( void ) const { return( _data ); }
00256 
00259     const double &operator()( size_t i, size_t j ) const {
00260         return( _data[i+j*_n] );
00261     }
00262 
00265     double &operator()( size_t i, size_t j ) {
00266         return( _data[i+j*_n] );
00267     }
00268 };
00269 
00270 
00271 #endif
00272 
00273 
00274 
00275 
00276 
00277 
00278 
00279 
00280 
00281 
00282 
00283 
00284 
00285 
00286 
00287 
00288 
00289 


Reference manual for Ion Beam Simulator 1.0.4
Generated by Doxygen 1.7.1 on Wed Apr 13 2011 23:25:32.