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

matthew lon-capa-cvs@mail.lon-capa.org
Fri, 29 Oct 2004 15:52:32 -0000


matthew		Fri Oct 29 11:52:32 2004 EDT

  Modified files:              
    /loncom/interface/statistics	lonproblemanalysis.pm 
  Log:
  radiobutton response analysis: Added %true_foils to keep track of which
     foils are true.  Modified RR_create_stacked_selection_plot to use
     this hash to ensure all correct foils show in the stacked plot.
  
  
Index: loncom/interface/statistics/lonproblemanalysis.pm
diff -u loncom/interface/statistics/lonproblemanalysis.pm:1.97 loncom/interface/statistics/lonproblemanalysis.pm:1.98
--- loncom/interface/statistics/lonproblemanalysis.pm:1.97	Fri Oct 29 11:27:39 2004
+++ loncom/interface/statistics/lonproblemanalysis.pm	Fri Oct 29 11:52:32 2004
@@ -1,6 +1,6 @@
 # The LearningOnline Network with CAPA
 #
-# $Id: lonproblemanalysis.pm,v 1.97 2004/10/29 15:27:39 matthew Exp $
+# $Id: lonproblemanalysis.pm,v 1.98 2004/10/29 15:52:32 matthew Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -390,11 +390,15 @@
     my $foildata = $problem_analysis->{'_Foils'};
     my ($table,$foils,$concepts) = &build_foil_index($problem_analysis);
     #
+    my %true_foils;
     my $num_true = 0;
-    foreach my $foil (@$foils) {
-        if ($foildata->{$foil}->{'value'} eq 'true') {
-            $num_true++; 
+    if (! $problem_analysis->{'answercomputed'}) {
+        foreach my $foil (@$foils) {
+            if ($foildata->{$foil}->{'value'} eq 'true') {
+                $true_foils{$foil}++; 
+            }
         }
+        $num_true = scalar(keys(%true_foils));
     }
     #
     $analysis_html .= $table;
@@ -433,7 +437,6 @@
     #
     $analysis_html.='<table>';
     for (my $plot_num = 1;$plot_num<=$ENV{'form.NumPlots'};$plot_num++) {
-        &Apache::lonnet::logthis('plot num = '.$plot_num);
         # classify data ->correct foil -> selected foil
         my ($restriction_function,
             $correct_foil_title,$incorrect_foil_title,
@@ -509,7 +512,8 @@
         if ($problem_analysis->{'answercomputed'} || $num_true > 1) {
             ($stacked_plot,$count_by_foil) =
                 &RR_create_stacked_selection_plot($foils,$foil_choice_data,
-                                                  $incorrect_foil_title);
+                                                  $incorrect_foil_title,
+                                                  \%true_foils);
         }
         #
         if ($concept_plot ne '' ||
@@ -698,23 +702,29 @@
 }
 
 sub RR_create_stacked_selection_plot {
-    my ($foils,$foil_data,$title)=@_;
+    my ($foils,$foil_data,$title,$true_foils)=@_;
     #
     my @dataset; # array of array refs - multicolor rows $datasets[row]->[col]
     my @labels;
     my $count;
     my %column; # maps foil name to column in @datasets
     for (my $i=0;$i<scalar(@$foils);$i++) {
+        my $foil = $foils->[$i];
+        if (defined($true_foils) && scalar(keys(%$true_foils)) > 0 ) {
+            next if (! $true_foils->{$foil} );
+            push(@labels,$i+1);
+        } else {
+            next if (! exists($foil_data->{$foil}));
+            push(@labels,$i+1);
+        }
         next if (! exists($foil_data->{$foils->[$i]}));
-        my $correct_foil = $foils->[$i];
-        push(@labels,$i+1);
-        $column{$correct_foil}= $count++;
+        $column{$foil}= $count++;
         for (my $j=0;$j<scalar(@$foils);$j++) {
             my $value = 0;
             if ($i != $j ) {
-                $value += $foil_data->{$correct_foil}->{$foils->[$j]};
+                $value += $foil_data->{$foil}->{$foils->[$j]};
             }
-            $dataset[$j]->[$column{$correct_foil}]=$value;
+            $dataset[$j]->[$column{$foil}]=$value;
         }
     }
     #