--- loncom/interface/statistics/lonproblemanalysis.pm 2006/05/30 12:46:49 1.126 +++ loncom/interface/statistics/lonproblemanalysis.pm 2008/12/11 14:55:27 1.133 @@ -1,6 +1,6 @@ # The LearningOnline Network with CAPA # -# $Id: lonproblemanalysis.pm,v 1.126 2006/05/30 12:46:49 www Exp $ +# $Id: lonproblemanalysis.pm,v 1.133 2008/12/11 14:55:27 bisitz Exp $ # # Copyright Michigan State University Board of Trustees # @@ -62,6 +62,7 @@ sub BuildProblemAnalysisPage { # my %Saveable_Parameters = ('Status' => 'scalar', 'Section' => 'array', + 'Groups' => 'array', 'NumPlots' => 'scalar', 'AnalyzeOver' => 'scalar', ); @@ -77,7 +78,10 @@ sub BuildProblemAnalysisPage { my @Students = @Apache::lonstatistics::Students; # if (@Students < 1 && exists($env{'form.firstrun'})) { - $r->print('
'.
+ ' '.
&mt($no_data_message,$plot_num,@extra_data).
- ' | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
'.
@@ -325,11 +340,14 @@ sub numerical_plot_percent {
last;
}
}
+ $percent_spread = $highest_percent - $lowest_percent;
my $bin_size = 1;
foreach (qw/0.01 0.05 0.1 0.5 1 2 5 10 20 25 50 100/) {
if ($lowest_percent/2 < $_){
$bin_size = $_;
- last;
+ if ( ($percent_spread/$bin_size) < $max_bins ) {
+ last;
+ }
}
}
my @bins;
@@ -404,6 +422,10 @@ sub numerical_plot_differences {
} elsif ($low_bin < 0 && $high_bin < -$low_bin) {
$high_bin = -$low_bin;
}
+ if ($high_bin == $low_bin) {
+ $high_bin+=1;
+ $low_bin-=1;
+ }
if (!$min_bin_size ||
($high_bin -$low_bin)/$min_bin_size * 2 > $max_bins) {
$min_bin_size = abs($high_bin - $low_bin) / $max_bins * 2;
@@ -625,11 +647,21 @@ sub numerical_determine_answers {
$sdom);
# make the key
my $key = $partid.'.'.$respid;
+ # pick one of the possible answers
+ my $which = 'INTERNAL';
+ if (!exists($analysis->{$key}{$which})) {
+ $which = (sort(keys(%{ $analysis->{$key} })))[0];
+ }
foreach my $item ('answer','unit','ans_high','ans_low') {
- $correct->{$sname.':'.$sdom}->{$item} =
- $analysis->{$key.'.'.$item}->[0];
+ if (ref($analysis->{$key.'.'.$item}) eq 'ARRAY') {
+ $correct->{$sname.':'.$sdom}->{$item} =
+ $analysis->{$key.'.'.$item}[0];
+ } else {
+ $correct->{$sname.':'.$sdom}->{$item} =
+ $analysis->{$key.'.'.$item}{$which}[0][0];
+ }
}
- $answers{$analysis->{$key.'.answer'}->[0]}++;
+ $answers{$correct->{$sname.':'.$sdom}{'answer'}}++;
&Apache::lonhtmlcommon::Increment_PrgWin($r,\%prog_state,
&mt('last student'));
}
@@ -785,6 +817,7 @@ sub radio_response_analysis {
# Gather student data
my $response_data = &Apache::loncoursedata::get_response_data
([&Apache::lonstatistics::get_selected_sections()],
+ [&Apache::lonstatistics::get_selected_groups()],
$Apache::lonstatistics::enrollment_status,
$resource->symb,$respid);
my $correct; # either a hash reference or a scalar
@@ -808,9 +841,9 @@ sub radio_response_analysis {
}
#
if (! defined($response_data) || ref($response_data) ne 'ARRAY' ) {
- $analysis_html = ''. - &mt('There is no submission data for this resource'). - ''; + $analysis_html = ''
+ .&mt('There is no submission data for this resource.')
+ .' ';
$r->print($analysis_html);
return;
}
@@ -841,7 +874,9 @@ sub radio_response_analysis {
&get_time_from_row($response_data->[-1]),
$plot_num);
$pre_graph_text =
- 'Data from [_6] to [_7][_2] submissions from [_5] students, [_3] correct, [_4] incorrect'; + 'Data from [_6] to [_7]' + .' ' + .'[_2] submissions from [_5] students, [_3] correct, [_4] incorrect'; $extra_data[0] = &Apache::lonlocal::locallocaltime($starttime); $extra_data[1] = &Apache::lonlocal::locallocaltime($endtime); # @@ -929,11 +964,13 @@ sub radio_response_analysis { } } elsif ($no_data_text ne '') { $analysis_html.=' '.
+ ' | '.
&mt($no_data_text,
$plot_num,$foil_choice_data->{'_count'},
$correct,
$foil_choice_data->{'_count'}-$correct,
- @extra_data);
+ @extra_data).
+ ' ';
if (defined($post_graph_text)) {
$analysis_html.=''.$post_graph_text; } @@ -1190,13 +1227,15 @@ sub OptionResponseAnalysis { # Note: part data is not needed. my $PerformanceData = &Apache::loncoursedata::get_response_data ([&Apache::lonstatistics::get_selected_sections()], + [&Apache::lonstatistics::get_selected_groups()], $Apache::lonstatistics::enrollment_status, $resource->symb,$respid); if (! defined($PerformanceData) || ref($PerformanceData) ne 'ARRAY' ) { - $r->print(' '. - &mt('There is no student data for this problem.'). - ''); + $r->print(''
+ .&mt('There is no student data for this problem.')
+ .' '
+ );
} else {
$r->rflush();
if ($env{'form.AnalyzeOver'} eq 'tries') {
@@ -1211,10 +1250,10 @@ sub OptionResponseAnalysis {
$r->print($analysis_html);
$r->rflush();
} else {
- $r->print(''. - &mt('The analysis you have selected is '. - 'not supported at this time'). - ''); + $r->print('div class="LC_warning"' + .&mt('The analysis you have selected is not supported at this time.') + .'' + ); } } } @@ -1291,12 +1330,18 @@ sub OR_tries_analysis { if (! defined($response_data{'_total'}->[$try]) || $response_data{'_total'}->[$try] == 0) { if ($try > 1) { - $analysis_html.= ''.
- &mt('None of the selected students attempted the problem more than [_1] times.',$try-1).
- ' | '
+ .' | '
+ .&mt('None of the selected students attempted the problem more than [_1] times.'
+ ,$try-1)
+ .' '
+ .''.
- &mt('None of the selected students have attempted the problem').' | '
+ .' | '
+ .&mt('None of the selected students have attempted the problem.')
+ .' '
+ .''.&mt('There is no data to plot').'',''); + return (''
+ .&mt('There is no data to plot.')
+ .' '
+ ,''
+ );
}
my $analysis_html;
my @plotdata;
@@ -1700,23 +1749,23 @@ sub build_foil_index {
}
#
# Build up the table of row labels.
- my $table = '
|