20 #include <utility/FixedSizeLexicographicalIterator.tmpl.hh>
27 using namespace utility;
34 Size3 const & n_xyz_bins,
35 Size3 const & n_euler_bins,
36 Real3 const & xyz_bin_widths,
37 Real3 const & euler_bin_widths,
38 Real3 const & xyz_bin_halfwidths,
39 Real3 const & euler_bin_halfwidths,
43 n_xyz_bins_( n_xyz_bins ),
44 n_euler_bins_( n_euler_bins ),
45 xyz_bin_widths_( xyz_bin_widths ),
46 euler_bin_widths_( euler_bin_widths ),
47 xyz_bin_halfwidths_( xyz_bin_halfwidths ),
48 euler_bin_halfwidths_( euler_bin_halfwidths ),
51 theta_near_0_( false ),
52 theta_near_180_( false ),
53 wrapped_phipsi_bins_( 0 ),
54 wrapped_phipsi_halfbins_( 0 ),
68 for (
Size ii = 1; ii <= 3; ++ii ) {
73 for (
Size ii = 4, ii_minus3 = 1; ii <= 6; ++ii, ++ii_minus3 ) {
75 assert( ii != 6 ||
point_[ ii ] <= 180 );
87 fixedsizearray1< Size, 6 > twos( 2 );
88 iter64_.set_dimension_sizes( twos );
94 Real wrapped_phi, wrapped_psi;
99 wrapped_phi =
point_[ 4 ] - 180;
103 wrapped_phi =
point_[ 4 ];
104 wrapped_psi =
point_[ 5 ];
116 if (
iter64_.at_end() )
return;
121 bool outside_bounding_box(
false );
122 for (
Size ii = start; ii <= 3; ++ii ) {
125 start = 7 -
iter64_.continue_at_dimension( ii );
126 outside_bounding_box =
true;
130 if ( ! outside_bounding_box )
break;
153 for (
Size ii = 1; ii <= 3; ++ii ) {
158 curr_pos_ += ii == 1 ? 32 : ( ii == 2 ? 16 : 8 );
170 for (
Size ii = 4, ii_minus3 = 1; ii <= 5; ++ii, ++ii_minus3 ) {
188 for (
Size ii = 4, ii_minus3 = 1; ii <= 6; ++ii, ++ii_minus3 ) {
195 }
else if (
basehalfbin_[ ii ] == 1 || iter64_[ ii ] == 2 ) {
196 curr_pos_ += ii == 4 ? 4 : ( ii == 5 ? 2 : 1 );