--- loncom/interface/statistics/loncorrectproblemplot.pm 2004/02/20 16:38:49 1.7 +++ loncom/interface/statistics/loncorrectproblemplot.pm 2004/03/07 20:53:41 1.9 @@ -1,6 +1,6 @@ # The LearningOnline Network with CAPA # -# $Id: loncorrectproblemplot.pm,v 1.7 2004/02/20 16:38:49 matthew Exp $ +# $Id: loncorrectproblemplot.pm,v 1.9 2004/03/07 20:53:41 matthew Exp $ # # Copyright Michigan State University Board of Trustees # @@ -103,22 +103,32 @@ sub BuildCorrectProblemsPage { # Determine which problem symbs we are to sum over if (exists($ENV{'form.CreatePlot'})) { my @ProblemSymbs; + my $total_parts = 0; + my $title = ''; if ($Apache::lonstatistics::SelectedMaps[0] ne 'all') { foreach my $seq (&Apache::lonstatistics::Sequences_with_Assess()){ + if ($title eq '') { + $title = $seq->{'title'}; + } else { + $title = 'Multiple Sequences'; + } foreach my $res (@{$seq->{'contents'}}) { next if ($res->{'type'} ne 'assessment'); foreach my $part (@{$res->{'parts'}}) { + $total_parts++; push(@ProblemSymbs,{symb=>$res->{'symb'}, part=>$part}); } } } } + my ($starttime,$endtime) = &Apache::lonstathelpers::get_time_limits(); my $score_data = &Apache::loncoursedata::get_student_scores (\@Apache::lonstatistics::SelectedSections, \@ProblemSymbs, - $Apache::lonstatistics::enrollment_status); - $r->print(&AnalyzeScoreData($score_data)); + $Apache::lonstatistics::enrollment_status,undef, + $starttime,$endtime); + $r->print(&AnalyzeScoreData($score_data,$title,$total_parts)); } return; } @@ -138,7 +148,7 @@ return html with a plot of the data and ######################################################### ######################################################### sub AnalyzeScoreData { - my ($score_data) = @_; + my ($score_data,$title,$total_parts) = @_; # # Basic check first if (@$score_data < 1) { @@ -149,6 +159,7 @@ sub AnalyzeScoreData { my $lowest = $score_data->[0]->[0]; $lowest = 0; my $highest = $score_data->[-1]->[0]; + &Apache::lonnet::logthis('highest = '.$highest); my $binsize = 1; if ($highest > 50) { $binsize = 2; } if ($highest > 100) { $binsize = 5; } @@ -161,9 +172,11 @@ sub AnalyzeScoreData { my @Bins = &bin_data($score_data,$binsize,$lowest,$highest); my @Xdata; my @Ydata; my $max; my $Str = ''."\n".''."\n"; + my $sum = 0; while (my $bin = shift(@Bins)) { push (@Xdata,$bin->{'start'}); push (@Ydata,$bin->{'count'}); + $sum += $bin->{'count'}; if ($bin->{'count'} > $max) { $max = $bin->{'count'}; } @@ -172,10 +185,10 @@ sub AnalyzeScoreData { } # scale max to an integer. $max = 5*(int($max/5)+1); - my $title = 'Correct Problems Plot'; $Str .= "
RangeCount

\n"; - $Str = "
\n".&Apache::loncommon::DrawBarGraph($title, - 'Num Correct Problems', + $title = &HTML::Entities::decode($title); + $Str = "
\n".&Apache::loncommon::DrawBarGraph($title.' N = '.$sum, + 'Num Correct Problems (max:'.$total_parts.')', 'Number of students', $max, undef, # colors @@ -218,10 +231,10 @@ sub bin_data { my @Bins; my $count=0; my $idx=0; - while ($idx < scalar(@$data) && ($binend-$endbin)<$binsize) { + while ($idx < scalar(@$data) && ($endbin-$binend + $binsize)>0) { my $dataset = $data->[$idx++]; my ($x,$y) = @{$dataset}; - while ($x > $binend) { + while ($x > ($binend-.001)) { # store the old data push (@Bins,{ start => $binstart, count => $count, @@ -233,6 +246,11 @@ sub bin_data { } $count+=$y; } + if ($count > 0) { + push (@Bins,{ start => $binstart, + count => $count, + end => $binend }); + } return @Bins; } @@ -256,12 +274,14 @@ sub CreateInterface { ## Environment variable initialization my $Str; $Str .= &Apache::lonhtmlcommon::breadcrumbs - (undef,&mt('Correct Problems Plot')); + (undef,'Correct Problems Plot'); $Str .= ''."\n"; $Str .= ''; $Str .= ''; $Str .= ''; $Str .= ''; + $Str .= ''; $Str .= ''."\n"; ## ## @@ -283,7 +303,8 @@ sub CreateInterface { }; $Str .= &Apache::lonstatistics::MapSelect('Maps','multiple,all',5, $only_seq_with_assessments); - $Str .= ''; + # ## $Str .= ''."\n"; $Str .= '
'.&mt('Sections').''.&mt('Enrollment Status').''.&mt('Sequences and Folders').''. + &Apache::lonstathelpers::limit_by_time_form().'
'."\n"; + $Str .= '
'."\n";