33 #include "fastjet/RectangularGrid.hh"
37 FASTJET_BEGIN_NAMESPACE
40 RectangularGrid::RectangularGrid()
41 : _ymax(-1.0), _ymin(1.0), _requested_drap(-1.0), _requested_dphi(-1.0) {
60 double y_minus_ymin = p.
rap() - _ymin;
61 if (y_minus_ymin < 0)
return -1;
62 int iy = int(y_minus_ymin * _inverse_dy);
63 if (iy >= _ny)
return -1;
72 int iphi = int( p.
phi() * _inverse_dphi );
73 if (iphi == _nphi) iphi = 0;
75 return iy*_nphi + iphi;
80 void RectangularGrid::_setup_grid() {
82 assert(_ymax > _ymin);
83 assert(_requested_drap > 0);
84 assert(_requested_dphi > 0);
86 double ny_double = (_ymax-_ymin) / _requested_drap;
87 _ny = max(
int(ny_double+0.5),1);
88 _dy = (_ymax-_ymin) / _ny;
89 _inverse_dy = _ny/(_ymax-_ymin);
91 _nphi = int (twopi / _requested_dphi + 0.5);
92 _dphi = twopi / _nphi;
93 _inverse_dphi = _nphi/twopi;
96 assert(_ny >= 1 && _nphi >= 1);
98 _ntotal = _nphi * _ny;
100 _cell_area = _dy * _dphi;
104 if (_tile_selector.
worker()) {
107 for (
int i = 0; i <
n_tiles(); i++) {
108 int iphi = i % _nphi;
109 int irap = i / _nphi;
110 double phi = (iphi + 0.5)*_dphi;
111 double rap = (irap + 0.5)*_dy + _ymin;
112 _is_good[i] = _tile_selector.
pass(
PtYPhiM(1.0, rap, phi));
113 if (_is_good[i]) _ngood++;
123 return "Uninitialised rectangular grid";
126 oss <<
"rectangular grid with rapidity extent " << _ymin <<
" < rap < " << _ymax
127 <<
", tile size drap x dphi = " << _dy <<
" x " << _dphi;
129 if (_tile_selector.
worker()) {
130 oss <<
", good tiles are those that pass selector " << _tile_selector.
description();
135 FASTJET_END_NAMESPACE