% if ($data->{fit_chi2}) {
<span class="alertbox">Fitted &Chi;<sup>2</sup> = <% sprintf "%.3f", $data->{fit_chi2} %></span><br>
% }
<% sprintf("Moment ratio: %.2f<br>", $moment_ratio) %>
<% sprintf("Major axis: %.2fpx$fail_str<br>", $maj_px) %>
<% sprintf("Minor axis: %.2fpx$fail_str<br>", $min_px) %>
<% sprintf("PA: %.2f&deg<br>", $theta_deg) %>
<% sprintf("<i>&chi;</i><sup>2</sup>/DOF: %.2f<br>", $chi2n) %>
<div class="extattr" style="display: none">
<% sprintf("M<sub>xx</sub>: %.2f, M<sub>yy</sub>: %.2f, M<sub>xy</sub>: %.2f<br>", $data->{moments_xx}, $data->{moments_yy}, $data->{moments_xy}) %>
<% sprintf("M<sub>r1</sub>: %.2f, M<sub>rh</sub>: %.2f<br>", $data->{moments_r1}, $data->{moments_rh}) %>
<% sprintf("n_pos: %d", $data->{n_pos}) %><br>
<% sprintf("f_pos: %.2f", $data->{f_pos}) %><br>
<% sprintf("ratio_bad: %.2f", $data->{ratio_bad}) %><br>
<% sprintf("ratio_mask: %.2f", $data->{ratio_mask}) %><br>
<% sprintf("ratio_all: %.2f", $data->{ratio_all}) %><br>
<% sprintf("PSF_QUALITY: %.2f", $data->{psf_quality}) %><br>
<% sprintf("PSF_QF_PERFECT: %.2f", $data->{psf_qf_perfect}) %><br>
<p>
<% sprintf("Diff P: R=%.2f, S/N=%.2f", $data->{diff_r_p} || 0, $data->{diff_sn_p} || 0) %><br>
<% sprintf("Diff M: R=%.2f, S/N=%.2f", $data->{diff_r_m} || 0, $data->{diff_sn_m} || 0) %><br>
<p>
<b>Stellar</b><br>
<% sprintf("PSF major axis: %.2fpx<br>", 2 * $data->{psf_major}) %>
<% sprintf("PSF minor axis: %.2fpx<br>", 2 * $data->{psf_minor}) %>
<% sprintf("PSF <i>&theta;</i>: %.2f&deg;<br>", $data->{psf_theta}) %>
<% sprintf("X-scale: %.2f&quot;/px<br>", $xscale) %>
</div>
<p style="height: 12">

<%args>
$data
$field => undef
$sep => ' '
</%args>

<%init>
use Math::Trig;
use POSIX qw(fmod); # ugh

# Report momentous morphological parameters from RAWATTR_V2.
my $fail1;      # set these if $arg or $arg2 <= 0
my $fail2;
my $fail_str;

# X axis orientation.
my $xscale = $field->de->[9] || 0.26;       # PS1

my $arg2 = 4 * $data->{moments_xy}**2 + ($data->{moments_xx} - $data->{moments_yy})**2;
if ($arg2 < 0) {
    $arg2 = 0;
    $fail2 = 1;
}

my $maj_arg = $data->{moments_xx} + $data->{moments_yy} + sqrt($arg2);
if ($maj_arg < 0) {
    $maj_arg = 0;
    $fail1 = 0;
}

my $min_arg = $data->{moments_xx} + $data->{moments_yy} - sqrt($arg2);
if ($min_arg < 0) {
    $min_arg = 0;
}

if ($fail1 or $fail2) {
    $fail_str = ' (' . join(', ', grep {$_} ($fail1, $fail2)) . ')';
}

my $maj_px = 2 * sqrt($maj_arg / 2);
my $min_px = 2 * sqrt($min_arg / 2);
my $theta_deg = fmod(270 + ($xscale < 0 ? -1 : 1) * rad2deg(0.5 * atan2(2 * $data->{moments_xy}, $data->{moments_xx} - $data->{moments_yy})), 180);
my $chi2n = $data->{psf_chi2} / ($data->{psf_dof} || 1);
my $moment_ratio = 0;
my $arg = $data->{psf_major} * $data->{psf_minor};
if ($arg != 0) {
    $arg = $data->{moments_xx} * $data->{moments_yy} / $arg;
    if ($arg > 0) {
        $moment_ratio = sqrt($arg);
    }
}
</%init>
