CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
gridConverters.h
Go to the documentation of this file.
1 //=========================================================================
2 // gridConverters.h
3 //
4 // Utility functions for combining Grid2d objects templated on different
5 // types
6 //
7 // I. Volobouev
8 // June 2011
9 //=========================================================================
10 
11 #ifndef RecoJets_FFTJetAlgorithms_gridConverters_h
12 #define RecoJets_FFTJetAlgorithms_gridConverters_h
13 
14 #include <cassert>
15 #include "fftjet/Grid2d.hh"
16 
17 namespace fftjetcms {
18  template <typename Numeric>
19  fftjet::Grid2d<float>* convert_Grid2d_to_float(const fftjet::Grid2d<Numeric>& grid);
20 
21  template <typename Numeric>
22  fftjet::Grid2d<double>* convert_Grid2d_to_double(const fftjet::Grid2d<Numeric>& grid);
23 
24  template <typename F1, typename F2>
25  void copy_Grid2d_data(fftjet::Grid2d<F2>* to, const fftjet::Grid2d<F1>& from);
26 
27  template <typename F1, typename F2>
28  void add_Grid2d_data(fftjet::Grid2d<F2>* to, const fftjet::Grid2d<F1>& from);
29 } // namespace fftjetcms
30 
32 //
33 // Implementation follows
34 //
36 
37 namespace fftjetcms {
38  template <typename F1, typename F2>
39  void copy_Grid2d_data(fftjet::Grid2d<F2>* to, const fftjet::Grid2d<F1>& from) {
40  assert(to);
41  assert(from.nEta() == to->nEta());
42  assert(from.nPhi() == to->nPhi());
43  const unsigned len = from.nEta() * from.nPhi();
44  const F1* fromData = from.data();
45  F2* toData = const_cast<F2*>(to->data());
46  for (unsigned i = 0; i < len; ++i)
47  toData[i] = fromData[i];
48  }
49 
50  template <typename F1, typename F2>
51  void add_Grid2d_data(fftjet::Grid2d<F2>* to, const fftjet::Grid2d<F1>& from) {
52  assert(to);
53  assert(from.nEta() == to->nEta());
54  assert(from.nPhi() == to->nPhi());
55  const unsigned len = from.nEta() * from.nPhi();
56  const F1* fromData = from.data();
57  F2* toData = const_cast<F2*>(to->data());
58  for (unsigned i = 0; i < len; ++i)
59  toData[i] += fromData[i];
60  }
61 
62  template <typename Numeric>
63  fftjet::Grid2d<float>* convert_Grid2d_to_float(const fftjet::Grid2d<Numeric>& grid) {
64  fftjet::Grid2d<float>* to = new fftjet::Grid2d<float>(
65  grid.nEta(), grid.etaMin(), grid.etaMax(), grid.nPhi(), grid.phiBin0Edge(), grid.title());
66  copy_Grid2d_data(to, grid);
67  return to;
68  }
69 
70  template <typename Numeric>
71  fftjet::Grid2d<double>* convert_Grid2d_to_double(const fftjet::Grid2d<Numeric>& grid) {
72  fftjet::Grid2d<double>* to = new fftjet::Grid2d<double>(
73  grid.nEta(), grid.etaMin(), grid.etaMax(), grid.nPhi(), grid.phiBin0Edge(), grid.title());
74  copy_Grid2d_data(to, grid);
75  return to;
76  }
77 } // namespace fftjetcms
78 
79 #endif // RecoJets_FFTJetAlgorithms_gridConverters_h
fftjet::Grid2d< float > * convert_Grid2d_to_float(const fftjet::Grid2d< Numeric > &grid)
assert(be >=bs)
void copy_Grid2d_data(fftjet::Grid2d< F2 > *to, const fftjet::Grid2d< F1 > &from)
fftjet::Grid2d< double > * convert_Grid2d_to_double(const fftjet::Grid2d< Numeric > &grid)
void add_Grid2d_data(fftjet::Grid2d< F2 > *to, const fftjet::Grid2d< F1 > &from)