void scaling_t::analyze()
{
    if ( sim -> canceled ) return;
    init_deltas();
    analyze_stats();
    analyze_lag();
    analyze_gear_weights();
    normalize();

    for ( player_t* p = sim -> player_list; p; p = p -> next )
    {
        if ( p -> quiet ) continue;

        chart_t::scale_factors( p -> scale_factors_chart, p );
    }

}
void reforge_plot_t::analyze()
{
  if ( sim -> is_canceled() ) return;

  if ( reforge_plot_stat_str.empty() ) return;

  analyze_stats();

  io::ofstream out;
  if ( ! sim -> reforge_plot_output_file_str.empty() )
  {
    out.open( sim -> reforge_plot_output_file_str, io::ofstream::out | io::ofstream::app );
    if ( ! out.is_open() )
    {
      sim -> errorf( "Unable to open plot output file '%s'.\n", sim -> reforge_plot_output_file_str.c_str() );
      return;
    }
  }

  for ( size_t i = 0; i < sim -> player_list.size(); ++i )
  {
    player_t* p = sim -> player_list[ i ];
    if ( p -> quiet ) continue;

    out <<  p -> name() << " Reforge Plot Results:\n";

    for ( int j = 0; j < ( int ) reforge_plot_stat_indices.size(); j++ )
    {
      out << util::stat_type_string( reforge_plot_stat_indices[ j ] ) << ", ";
    }
    out << " DPS, DPS-Error\n";

    for ( size_t j = 0; j < p -> reforge_plot_data.size(); j++ )
    {
      for ( size_t k = 0; k < p -> reforge_plot_data[ j ].size(); k++ )
      {
        out << p -> reforge_plot_data[ j ][ k ].value << ", ";
        if ( k + 1 == p -> reforge_plot_data[ j ].size() )
          out << p -> reforge_plot_data[ j ][ k ].error << ", ";
      }
      out << "\n";
    }
  }
}