Navigation

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


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

particlediagplot.hpp

Go to the documentation of this file.
00001 
00005 /* Copyright (c) 2005-2011 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 PARTICLEDIAGPLOT_HPP
00044 #define PARTICLEDIAGPLOT_HPP 1
00045 
00046 
00047 #include "frame.hpp"
00048 #include "geometry.hpp"
00049 #include "particledatabase.hpp"
00050 #include "types.hpp"
00051 #include "histogram.hpp"
00052 #include "trajectorydiagnostics.hpp"
00053 
00054 #include "xygraph.hpp"
00055 #include "colormap.hpp"
00056 
00057 
00058 
00059 enum particle_diag_plot_type_e {
00060     PARTICLE_DIAG_PLOT_NONE = 0,
00061     PARTICLE_DIAG_PLOT_SCATTER,
00062     PARTICLE_DIAG_PLOT_HISTO2D,
00063     PARTICLE_DIAG_PLOT_HISTO1D
00064 };
00065 
00066 
00078 class ParticleDiagPlot {
00079     
00080     Frame                     *_frame;
00081 
00082     const Geometry            *_geom;
00083     const ParticleDataBase    *_pdb;
00084 
00085     bool                       _free_plane;
00086 
00087     coordinate_axis_e          _axis;
00088     double                     _level;
00089 
00090     Vec3D                      _c;
00091     Vec3D                      _o;
00092     Vec3D                      _p;
00093 
00094     particle_diag_plot_type_e  _type;
00095     trajectory_diagnostic_e    _diagx;
00096     trajectory_diagnostic_e    _diagy;
00097     trajectory_diagnostic_e    _diagz;
00098 
00099     int                        _pdb_it_no;
00100     bool                       _update;
00101     TrajectoryDiagnosticData  *_tdata;  
00102     Histogram                 *_histo;  
00103     Emittance                 *_emit;   
00105     XYGraph                   *_scatter;
00106 
00107     XYGraph                   *_ellipse;
00108     bool                       _ellipse_enable;
00109 
00110     Colormap                  *_colormap;
00111     std::vector<double>        _zdata;
00112 
00113     XYGraph                   *_profile;
00114 
00115     size_t                     _histogram_n;
00116     size_t                     _histogram_m;
00117     interpolation_e            _interpolation;
00118     double                     _dot_size;
00119     
00120     void build_data( void );
00121     void merge_bbox( double bbox[4], const double bb[4] );
00122     
00123 public:
00124 
00133     ParticleDiagPlot( Frame *frame, const Geometry *geom, const ParticleDataBase *pdb, 
00134                       coordinate_axis_e axis, double level, 
00135                       particle_diag_plot_type_e type,
00136                       trajectory_diagnostic_e diagx, trajectory_diagnostic_e diagy = DIAG_NONE );
00137 
00147     ParticleDiagPlot( Frame *frame, const Geometry *geom, const ParticleDataBase *pdb, 
00148                       const Vec3D &c, const Vec3D &o, const Vec3D &p,
00149                       particle_diag_plot_type_e type,
00150                       trajectory_diagnostic_e diagx, trajectory_diagnostic_e diagy = DIAG_NONE );
00151 
00154     ~ParticleDiagPlot();
00155 
00158     void set_emittance_ellipse( bool enable ) {
00159         _ellipse_enable = enable;
00160     }
00161 
00164     bool get_emittance_ellipse( void ) {
00165         return( _ellipse_enable );
00166     }
00167 
00170     void set_view( coordinate_axis_e axis, double level ) {     
00171         _update = true;
00172         _axis = axis;
00173         _level = level;
00174     }
00175 
00178     void get_view( coordinate_axis_e &axis, double &level ) {
00179         axis = _axis;
00180         level = _level;
00181     }
00182 
00185     void set_type( particle_diag_plot_type_e type ) {
00186         _update = true;
00187         _type = type;
00188     }
00189 
00192     particle_diag_plot_type_e get_type( void ) {
00193         return( _type );
00194     }
00195 
00198     void set_plot( particle_diag_plot_type_e type,
00199                    trajectory_diagnostic_e diagx, trajectory_diagnostic_e diagy ) {
00200         _update = true;
00201         _type = type;
00202         _diagx = diagx;
00203         _diagy = diagy;
00204     }
00205 
00208     void get_plot( particle_diag_plot_type_e &type,
00209                    trajectory_diagnostic_e &diagx, trajectory_diagnostic_e &diagy ) {
00210         type = _type;
00211         diagx = _diagx;
00212         diagy = _diagy;
00213     }
00214 
00217     void set_histogram_n( size_t n ) {
00218         _update = true;
00219         _histogram_n = n;
00220     }
00221 
00224     size_t get_histogram_n( void ) {
00225         return( _histogram_n );
00226     }
00227 
00230     void set_histogram_m( size_t m ) {
00231         _update = true;
00232         _histogram_m = m;
00233     }
00234 
00237     size_t get_histogram_m( void ) {
00238         return( _histogram_m );
00239     }
00240 
00243     void set_colormap_interpolation( interpolation_e interpolation ) {
00244         _interpolation = interpolation;
00245         if( _colormap )
00246             _colormap->set_interpolation( interpolation );
00247     }
00248 
00251     interpolation_e get_colormap_interpolation( void ) {
00252         return( _interpolation );
00253     }
00254 
00257     const Colormap *get_colormap( void ) const {
00258         return( _colormap );
00259     }
00260 
00263     void set_dot_size( double size ) {
00264         _dot_size = size;
00265         if( _scatter )
00266             _scatter->set_point_style( XYGRAPH_POINT_CIRCLE, true, _dot_size );
00267     }
00268 
00271     double get_dot_size( void ) {
00272         return( _dot_size );
00273     }
00274 
00279     const Histogram *get_histogram( void ) {
00280         return( _histo );
00281     }
00282 
00285     const Emittance &calculate_emittance( void );
00286 
00294     void export_data( const std::string &filename );
00295 
00298     void build_plot( void );
00299 };
00300 
00301 
00302 #endif


Reference manual for Ion Beam Simulator 1.0.4dev
Generated by Doxygen 1.7.1 on Wed May 18 2011 23:03:48.