@@ -2675,63 +2675,68 @@ bool CGridBasic::writeMidplaneFits(string data_path, parameters & param, uint bi
2675
2675
}
2676
2676
2677
2677
bool CGridBasic::getPolarRTGridParameterWorker (double max_len,
2678
- double pixel_width,
2679
- uint max_subpixel_lvl,
2680
- dlist & _listR,
2681
- uint & N_polar_r,
2682
- uint *& N_polar_ph,
2683
- const uint &N_r,
2684
- const double *listR
2678
+ double pixel_width,
2679
+ uint max_subpixel_lvl,
2680
+ dlist & _listR,
2681
+ uint & N_polar_r,
2682
+ uint *& N_polar_ph,
2683
+ const uint &N_r,
2684
+ const double *listR
2685
2685
)
2686
2686
{
2687
2687
uint subpixel_multiplier = pow (2 , max_subpixel_lvl);
2688
-
2688
+
2689
2689
// Add polar detector pixels in the inner region to obtain resolution specified by max_subpixel_lvl
2690
2690
// inner grid cell diameter is 2.*listR[0]
2691
- uint N_r_inner = uint (ceil (subpixel_multiplier * 2.0 * listR[0 ]/ pixel_width));
2692
-
2691
+ uint N_r_inner = uint (ceil (subpixel_multiplier * 2.0 * listR[0 ] / pixel_width));
2692
+
2693
2693
for (uint i_r = 0 ; i_r <= N_r_inner; i_r++)
2694
- _listR.push_back (listR[0 ] * (i_r / double (N_r_inner)));
2694
+ _listR.push_back (listR[0 ] * (i_r / double (N_r_inner)));
2695
2695
2696
2696
for (uint i_r = 1 ; i_r <= N_r; i_r++)
2697
2697
{
2698
- double r1 = _listR[_listR.size () - 1 ];
2699
- double r2 = listR[i_r];
2700
- // r2-r1 is width of current grid cell's ring
2701
- uint N_r_sub = uint (ceil (subpixel_multiplier * (r2 - r1) / pixel_width));
2702
-
2703
- for (uint i_r_sub = 1 ; i_r_sub <= N_r_sub; i_r_sub++)
2704
- _listR.push_back (r1 + (r2 - r1) * i_r_sub / double (N_r_sub));
2698
+ double r1 = _listR[_listR.size () - 1 ];
2699
+ double r2 = listR[i_r];
2705
2700
2706
- // break if sidelength is smaller than full grid
2707
- if (_listR.back () > max_len)
2708
- {
2709
- _listR.pop_back ();
2710
- _listR.push_back (max_len);
2711
- break ;
2712
- }
2701
+ // if sidelength is smaller than full grid, only consider visible grid
2702
+ if (r2 > max_len)
2703
+ r2 = max_len;
2704
+
2705
+ // r2 - r1 is width of current grid cell's ring
2706
+ uint N_r_sub = uint (ceil (subpixel_multiplier * (r2 - r1) / pixel_width));
2707
+
2708
+ for (uint i_r_sub = 1 ; i_r_sub <= N_r_sub; i_r_sub++)
2709
+ _listR.push_back (r1 + (r2 - r1) * i_r_sub / double (N_r_sub));
2710
+
2711
+ // break if sidelength is smaller than full grid
2712
+ if (_listR.back () >= max_len)
2713
+ {
2714
+ _listR.pop_back ();
2715
+ _listR.push_back (max_len);
2716
+ break ;
2717
+ }
2713
2718
}
2714
2719
2715
2720
if (_listR.back () < max_len)
2716
2721
{
2717
- // Create additional outer rings with outermost grid cell radial distance
2718
- // and store them in buffer to do subpixeling afterwards
2719
- uint N_r_outer = uint (ceil ((max_len - listR[N_r]) / (listR[N_r] - listR[N_r - 1 ])));
2720
- std::vector<double > outerR_buffer;
2721
-
2722
- for (uint i_r = 1 ; i_r <= N_r_outer; i_r++)
2723
- outerR_buffer.push_back (listR[N_r] + (max_len - listR[N_r]) * i_r / double (N_r_outer));
2722
+ // Create additional outer rings with outermost grid cell radial distance
2723
+ // and store them in buffer to do subpixeling afterwards
2724
+ uint N_r_outer = uint (ceil ((max_len - listR[N_r]) / (listR[N_r] - listR[N_r - 1 ])));
2725
+ std::vector<double > outerR_buffer;
2726
+
2727
+ for (uint i_r = 1 ; i_r <= N_r_outer; i_r++)
2728
+ outerR_buffer.push_back (listR[N_r] + (max_len - listR[N_r]) * i_r / double (N_r_outer));
2724
2729
2725
- // loop over equally spaced rings outside the grid and do subpixeling
2726
- for (uint i_r = 0 ; i_r < N_r_outer; i_r++){
2727
-
2728
- double r1 = _listR[_listR.size () - 1 ];
2729
- double r2 = outerR_buffer[i_r];
2730
- uint N_r_sub = uint (ceil (subpixel_multiplier * (r2 - r1) / pixel_width));
2730
+ // loop over equally spaced rings outside the grid and do subpixeling
2731
+ for (uint i_r = 0 ; i_r < N_r_outer; i_r++)
2732
+ {
2733
+ double r1 = _listR[_listR.size () - 1 ];
2734
+ double r2 = outerR_buffer[i_r];
2735
+ uint N_r_sub = uint (ceil (subpixel_multiplier * (r2 - r1) / pixel_width));
2731
2736
2732
- for (uint i_r_sub = 1 ; i_r_sub <= N_r_sub; i_r_sub++)
2733
- _listR.push_back (r1 + (r2 - r1) * i_r_sub / double (N_r_sub));
2734
- }
2737
+ for (uint i_r_sub = 1 ; i_r_sub <= N_r_sub; i_r_sub++)
2738
+ _listR.push_back (r1 + (r2 - r1) * i_r_sub / double (N_r_sub));
2739
+ }
2735
2740
}
2736
2741
2737
2742
// Set total size of the radial cells
@@ -2741,7 +2746,7 @@ bool CGridBasic::getPolarRTGridParameterWorker(double max_len,
2741
2746
N_polar_ph = new uint [N_polar_r];
2742
2747
for (uint i_r = 0 ; i_r < N_polar_r; i_r++)
2743
2748
{
2744
- N_polar_ph[i_r] = uint (ceil (PIx2 * _listR[i_r + 1 ] / (_listR[i_r + 1 ] - _listR[i_r])));
2749
+ N_polar_ph[i_r] = uint (ceil (PIx2 * _listR[i_r + 1 ] / (_listR[i_r + 1 ] - _listR[i_r])));
2745
2750
}
2746
2751
2747
2752
return true ;
0 commit comments