[LON-CAPA-cvs] cvs: loncom /interface/statistics lonproblemanalysis.pm

matthew lon-capa-cvs@mail.lon-capa.org
Fri, 29 Oct 2004 16:10:30 -0000


matthew		Fri Oct 29 12:10:30 2004 EDT

  Modified files:              
    /loncom/interface/statistics	lonproblemanalysis.pm 
  Log:
  RR_create_percent_selected_plot: Fixed bug where if a foil could be true for
     some students but not all students the bar for the foil would appear 
     green (indicating true) for everyone.  Now keep track of those for whom 
     the foil is true seperately than those for whom the foil is false and 
     produce a stacked bar graph (green & red = true & false).
  
  
Index: loncom/interface/statistics/lonproblemanalysis.pm
diff -u loncom/interface/statistics/lonproblemanalysis.pm:1.98 loncom/interface/statistics/lonproblemanalysis.pm:1.99
--- loncom/interface/statistics/lonproblemanalysis.pm:1.98	Fri Oct 29 11:52:32 2004
+++ loncom/interface/statistics/lonproblemanalysis.pm	Fri Oct 29 12:10:30 2004
@@ -1,6 +1,6 @@
 # The LearningOnline Network with CAPA
 #
-# $Id: lonproblemanalysis.pm,v 1.98 2004/10/29 15:52:32 matthew Exp $
+# $Id: lonproblemanalysis.pm,v 1.99 2004/10/29 16:10:30 matthew Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -631,14 +631,18 @@
 sub RR_create_percent_selected_plot {
     my ($concepts,$foils,$foil_data,$title) = @_;
     #
-    my %foil_selections;
-    my %true;
+    if ($foil_data->{'_count'} == 0) { return ''; };
+    my %correct_selections;
+    my %incorrect_selections;
     foreach my $foil (@$foils) {
         # foil_data has format $foil_data->{true_foil}->{selected foil}
         next if (! exists($foil_data->{$foil}));
-        $true{$foil}++;
         while (my ($f,$count)= each(%{$foil_data->{$foil}})) {
-            $foil_selections{$f}+=$count;
+            if ($f eq $foil) {
+                $correct_selections{$foil} += $count;
+            } else {
+                $incorrect_selections{$foil} += $count;
+            }
         }
     }
     # 
@@ -647,24 +651,18 @@
     my @correct;
     my @incorrect;
     #
-    my $total =0;
+    my $total = $foil_data->{'_count'};
     for (my $i=0;$i<scalar(@$foils);$i++) {
         my $foil = $foils->[$i];
-        if ($true{$foil}) {
-            $correct[$i]   = $foil_selections{$foil};
-            $incorrect[$i] = 0;
-        } else {
-            $correct[$i]   = 0;
-            $incorrect[$i] = $foil_selections{$foil};
-        }
-        $total+=$foil_selections{$foil};
+        $correct[$i]   = $correct_selections{$foil};
+        $incorrect[$i] = $incorrect_selections{$foil};
     }
-    if ($total == 0) { return ''; };
     for (my $i=0;$i<=$#correct;$i++) { 
-        $correct[$i] = sprintf('%0f',$correct[$i]/$total*100);
+        &Apache::lonnet::logthis('correct['.$i.']='.$correct[$i]);
+        $correct[$i] = sprintf('%2f',$correct[$i]/$total*100);
     }
     for (my $i=0;$i<=$#incorrect;$i++) {
-        $incorrect[$i] = sprintf('%0f',$incorrect[$i]/$total*100);
+        $incorrect[$i] = sprintf('%2f',$incorrect[$i]/$total*100);
     }
     #
     # Put a blank in the data sets between concepts, if there are concepts