CMS 3D CMS Logo

/afs/cern.ch/work/a/aaltunda/public/www/CMSSW_5_3_13_patch3/src/RecoJets/FFTJetAlgorithms/interface/gridConverters.h

Go to the documentation of this file.
00001 //=========================================================================
00002 // gridConverters.h
00003 //
00004 // Utility functions for combining Grid2d objects templated on different
00005 // types
00006 //
00007 // I. Volobouev
00008 // June 2011
00009 //=========================================================================
00010 
00011 #ifndef RecoJets_FFTJetAlgorithms_gridConverters_h
00012 #define RecoJets_FFTJetAlgorithms_gridConverters_h
00013 
00014 #include <cassert>
00015 #include "fftjet/Grid2d.hh"
00016 
00017 namespace fftjetcms {
00018     template<typename Numeric>
00019     fftjet::Grid2d<float>* convert_Grid2d_to_float(
00020         const fftjet::Grid2d<Numeric>& grid);
00021 
00022     template<typename Numeric>
00023     fftjet::Grid2d<double>* convert_Grid2d_to_double(
00024         const fftjet::Grid2d<Numeric>& grid);
00025 
00026     template<typename F1, typename F2>
00027     void copy_Grid2d_data(
00028         fftjet::Grid2d<F2>* to, const fftjet::Grid2d<F1>& from);
00029 
00030     template<typename F1, typename F2>
00031     void add_Grid2d_data(
00032         fftjet::Grid2d<F2>* to, const fftjet::Grid2d<F1>& from);
00033 }
00034 
00036 //
00037 //  Implementation follows
00038 //
00040 
00041 namespace fftjetcms {
00042     template<typename F1, typename F2>
00043     void copy_Grid2d_data(
00044         fftjet::Grid2d<F2>* to, const fftjet::Grid2d<F1>& from)
00045     {
00046         assert(to);
00047         assert(from.nEta() == to->nEta());
00048         assert(from.nPhi() == to->nPhi());
00049         const unsigned len = from.nEta()*from.nPhi();
00050         const F1* fromData = from.data();
00051         F2* toData = const_cast<F2*>(to->data());
00052         for (unsigned i=0; i<len; ++i)
00053             toData[i] = fromData[i];
00054     }
00055 
00056     template<typename F1, typename F2>
00057     void add_Grid2d_data(
00058         fftjet::Grid2d<F2>* to, const fftjet::Grid2d<F1>& from)
00059     {
00060         assert(to);
00061         assert(from.nEta() == to->nEta());
00062         assert(from.nPhi() == to->nPhi());
00063         const unsigned len = from.nEta()*from.nPhi();
00064         const F1* fromData = from.data();
00065         F2* toData = const_cast<F2*>(to->data());
00066         for (unsigned i=0; i<len; ++i)
00067             toData[i] += fromData[i];
00068     }
00069 
00070     template<typename Numeric>
00071     fftjet::Grid2d<float>* convert_Grid2d_to_float(
00072         const fftjet::Grid2d<Numeric>& grid)
00073     {
00074         fftjet::Grid2d<float>* to = new fftjet::Grid2d<float>(
00075             grid.nEta(), grid.etaMin(), grid.etaMax(),
00076             grid.nPhi(), grid.phiBin0Edge(), grid.title());
00077         copy_Grid2d_data(to, grid);
00078         return to;
00079     }
00080 
00081     template<typename Numeric>
00082     fftjet::Grid2d<double>* convert_Grid2d_to_double(
00083         const fftjet::Grid2d<Numeric>& grid)
00084     {
00085         fftjet::Grid2d<double>* to = new fftjet::Grid2d<double>(
00086             grid.nEta(), grid.etaMin(), grid.etaMax(),
00087             grid.nPhi(), grid.phiBin0Edge(), grid.title());
00088         copy_Grid2d_data(to, grid);
00089         return to;
00090     }
00091 }
00092 
00093 #endif // RecoJets_FFTJetAlgorithms_gridConverters_h