Diff for /loncom/interface/statistics/lonproblemanalysis.pm between versions 1.56 and 1.58

version 1.56, 2004/01/16 20:19:33 version 1.58, 2004/01/19 18:55:10
Line 232  sub RR_Tries_Analysis { Line 232  sub RR_Tries_Analysis {
     my $mintries = 1;      my $mintries = 1;
     my $maxtries = $ENV{'form.NumPlots'};      my $maxtries = $ENV{'form.NumPlots'};
     my ($table,$Foils,$Concepts) = &build_foil_index($ProblemData);      my ($table,$Foils,$Concepts) = &build_foil_index($ProblemData);
     if ((@$Concepts < 2) && ($ENV{'form.AnalyzeAs'} ne 'Foils')) {      if ((! defined($Concepts)) || ((@$Concepts < 2) && 
                                      ($ENV{'form.AnalyzeAs'} ne 'Foils'))) {
         $table = '<h3>'.          $table = '<h3>'.
             &mt('Not enough data for concept analysis.  '.              &mt('Not enough data for concept analysis.  '.
                 'Performing Foil Analysis').                  'Performing Foil Analysis').
Line 387  sub OptionResponseAnalysis { Line 388  sub OptionResponseAnalysis {
     }  else {      }  else {
         $r->rflush();          $r->rflush();
         if (exists($ENV{'form.ExcelOutput'})) {          if (exists($ENV{'form.ExcelOutput'})) {
             my $result = &prepare_optionresponse_excel_sheet($r,$resource,              my $result = &OR_excel_sheet($r,$resource,
                                                              $PerformanceData,                                           $PerformanceData,
                                                              $ProblemData);                                           $ProblemData);
             $r->print($result);              $r->print($result);
             $r->rflush();              $r->rflush();
         } else {          } else {
             if ($ENV{'form.AnalyzeOver'} eq 'Tries') {              if ($ENV{'form.AnalyzeOver'} eq 'Tries') {
                 my $analysis_html = &tries_analysis($r,                  my $analysis_html = &OR_tries_analysis($r,
                                                     $PerformanceData,                                                      $PerformanceData,
                                                     $ProblemData);                                                      $ProblemData);
                 $r->print($analysis_html);                  $r->print($analysis_html);
                 $r->rflush();                  $r->rflush();
             } elsif ($ENV{'form.AnalyzeOver'} eq 'Time') {              } elsif ($ENV{'form.AnalyzeOver'} eq 'Time') {
                 my $analysis_html = &time_analysis($PerformanceData,                  my $analysis_html = &OR_time_analysis($PerformanceData,
                                                    $ProblemData);                                                     $ProblemData);
                 $r->print($analysis_html);                  $r->print($analysis_html);
                 $r->rflush();                  $r->rflush();
Line 419  sub OptionResponseAnalysis { Line 420  sub OptionResponseAnalysis {
 #       Option Response:  Tries Analysis  #       Option Response:  Tries Analysis
 #  #
 #########################################################  #########################################################
 sub tries_analysis {  sub OR_tries_analysis {
     my ($r,$PerformanceData,$ORdata) = @_;      my ($r,$PerformanceData,$ORdata) = @_;
     my $mintries = 1;      my $mintries = 1;
     my $maxtries = $ENV{'form.NumPlots'};      my $maxtries = $ENV{'form.NumPlots'};
Line 431  sub tries_analysis { Line 432  sub tries_analysis {
             '</h3>'.$table;              '</h3>'.$table;
         $ENV{'form.AnalyzeAs'} = 'Foils';          $ENV{'form.AnalyzeAs'} = 'Foils';
     }      }
     my %ResponseData = &analyze_option_data_by_tries($r,$PerformanceData,      my %ResponseData = &OR_analyze_by_tries($r,$PerformanceData,
                                                      $mintries,$maxtries);                                                       $mintries,$maxtries);
     my $analysis = '';      my $analysis = '';
     if ($ENV{'form.AnalyzeAs'} eq 'Foils') {      if ($ENV{'form.AnalyzeAs'} eq 'Foils') {
         $analysis = &Tries_Foil_Analysis($mintries,$maxtries,$Foils,          $analysis = &OR_Tries_Foil_Analysis($mintries,$maxtries,$Foils,
                                          \%ResponseData,$ORdata);                                           \%ResponseData,$ORdata);
     } else {      } else {
         $analysis = &Tries_Concept_Analysis($mintries,$maxtries,          $analysis = &OR_Tries_Concept_Analysis($mintries,$maxtries,
                                             $Concepts,\%ResponseData,$ORdata);                                              $Concepts,\%ResponseData,$ORdata);
     }      }
     $table .= $analysis;      $table .= $analysis;
     return $table;      return $table;
 }  }
   
 sub Tries_Foil_Analysis {  sub OR_Tries_Foil_Analysis {
     my ($mintries,$maxtries,$Foils,$respdat,$ORdata) = @_;      my ($mintries,$maxtries,$Foils,$respdat,$ORdata) = @_;
     my %ResponseData = %$respdat;      my %ResponseData = %$respdat;
     #      #
Line 504  sub Tries_Foil_Analysis { Line 505  sub Tries_Foil_Analysis {
         $analysis_html.= '<tr><td>'.$correctgraph.'</td>';          $analysis_html.= '<tr><td>'.$correctgraph.'</td>';
         ##          ##
         ##          ##
           next if (! defined($Datasets[0]));
         for (my $i=0; $i< scalar(@{$Datasets[0]});$i++) {          for (my $i=0; $i< scalar(@{$Datasets[0]});$i++) {
             $Datasets[0]->[$i]=0;              $Datasets[0]->[$i]=0;
         }          }
Line 526  sub Tries_Foil_Analysis { Line 528  sub Tries_Foil_Analysis {
     return $analysis_html;      return $analysis_html;
 }  }
   
 sub Tries_Concept_Analysis {  sub OR_Tries_Concept_Analysis {
     my ($mintries,$maxtries,$Concepts,$respdat,$ORdata) = @_;      my ($mintries,$maxtries,$Concepts,$respdat,$ORdata) = @_;
     my %ResponseData = %$respdat;      my %ResponseData = %$respdat;
     my $analysis_html = "<table>\n";      my $analysis_html = "<table>\n";
Line 592  sub Tries_Concept_Analysis { Line 594  sub Tries_Concept_Analysis {
     return $analysis_html;      return $analysis_html;
 }  }
   
 sub analyze_option_data_by_tries {  sub OR_analyze_by_tries {
     my ($r,$PerformanceData,$mintries,$maxtries) = @_;      my ($r,$PerformanceData,$mintries,$maxtries) = @_;
     my %Trydata;      my %Trydata;
     $mintries = 1         if (! defined($mintries) || $mintries < 1);      $mintries = 1         if (! defined($mintries) || $mintries < 1);
Line 620  sub analyze_option_data_by_tries { Line 622  sub analyze_option_data_by_tries {
 #     Option Response: Time Analysis  #     Option Response: Time Analysis
 #  #
 #########################################################  #########################################################
 sub time_analysis {  sub OR_time_analysis {
     my ($PerformanceData,$ORdata) = @_;      my ($PerformanceData,$ORdata) = @_;
     my ($table,$Foils,$Concepts) = &build_foil_index($ORdata);      my ($table,$Foils,$Concepts) = &build_foil_index($ORdata);
     if ((@$Concepts < 2) && ($ENV{'form.AnalyzeAs'} ne 'Foils')) {      if ((@$Concepts < 2) && ($ENV{'form.AnalyzeAs'} ne 'Foils')) {
Line 678  sub time_analysis { Line 680  sub time_analysis {
             enddateform   => $enddateform,              enddateform   => $enddateform,
         };          };
         if ($ENV{'form.AnalyzeAs'} eq 'Foils') {          if ($ENV{'form.AnalyzeAs'} eq 'Foils') {
             $table .= &Foil_Time_Analysis($PerformanceData,$ORdata,$Foils,              $table .= &OR_Foil_Time_Analysis($PerformanceData,$ORdata,$Foils,
                                           $interval);                                            $interval);
         } else {          } else {
             $table .= &Concept_Time_Analysis($PerformanceData,$ORdata,              $table .= &OR_Concept_Time_Analysis($PerformanceData,$ORdata,
                                              $Concepts,$interval);                                               $Concepts,$interval);
         }          }
     }      }
Line 689  sub time_analysis { Line 691  sub time_analysis {
     return $table;      return $table;
 }  }
   
 sub Foil_Time_Analysis {  sub OR_Foil_Time_Analysis {
     my ($PerformanceData,$ORdata,$Foils,$interval) = @_;      my ($PerformanceData,$ORdata,$Foils,$interval) = @_;
     my $analysis_html;      my $analysis_html;
     my $foilkey = &build_option_index($ORdata);      my $foilkey = &build_option_index($ORdata);
Line 784  sub Foil_Time_Analysis { Line 786  sub Foil_Time_Analysis {
     return $analysis_html;      return $analysis_html;
 }  }
   
 sub Concept_Time_Analysis {  sub OR_Concept_Time_Analysis {
     my ($PerformanceData,$ORdata,$Concepts,$interval) = @_;      my ($PerformanceData,$ORdata,$Concepts,$interval) = @_;
     my $analysis_html;      my $analysis_html;
     ##      ##
Line 852  sub Concept_Time_Analysis { Line 854  sub Concept_Time_Analysis {
 ##  ##
 #########################################################  #########################################################
 #########################################################  #########################################################
 sub prepare_optionresponse_excel_sheet {  sub OR_excel_sheet {
     my ($r,$resource,$PerformanceData,$ORdata) = @_;      my ($r,$resource,$PerformanceData,$ORdata) = @_;
     my $response = '';      my $response = '';
     my (undef,$Foils,$Concepts) = &build_foil_index($ORdata);      my (undef,$Foils,$Concepts) = &build_foil_index($ORdata);
Line 924  sub prepare_optionresponse_excel_sheet { Line 926  sub prepare_optionresponse_excel_sheet {
     return $result;      return $result;
 }  }
   
 sub build_problem_data_worksheet {  sub OR_build_problem_data_worksheet {
     my ($worksheet,$format,$Concepts,$ORdata) = @_;      my ($worksheet,$format,$Concepts,$ORdata) = @_;
     my $rows_output = 3;      my $rows_output = 3;
     my $cols_output = 0;      my $cols_output = 0;
Line 993  sub build_problem_data_worksheet { Line 995  sub build_problem_data_worksheet {
     return 'okay';      return 'okay';
 }  }
   
 sub build_student_data_worksheet {  sub OR_build_student_data_worksheet {
     my ($worksheet,$format) = @_;      my ($worksheet,$format) = @_;
     my $rows_output = 3;      my $rows_output = 3;
     my $cols_output = 0;      my $cols_output = 0;
Line 1019  sub build_student_data_worksheet { Line 1021  sub build_student_data_worksheet {
     return;      return;
 }  }
   
 sub build_response_data_worksheet {  sub OR_build_response_data_worksheet {
     my ($worksheet,$format,$PerformanceData,$Foils,$ORdata)=@_;      my ($worksheet,$format,$PerformanceData,$Foils,$ORdata)=@_;
     my $rows_output = 3;      my $rows_output = 3;
     my $cols_output = 0;      my $cols_output = 0;
Line 1269  sub build_foil_index { Line 1271  sub build_foil_index {
                        ten   => 10,);                         ten   => 10,);
         my $a1 = lc($a);           my $a1 = lc($a); 
         my $b1 = lc($b);          my $b1 = lc($b);
         if (exists($Numbers{$a})) {          if (exists($Numbers{$a1})) {
             $a1 = $Numbers{$a};              $a = $Numbers{$a1};
           }
           if (exists($Numbers{$b1})) {
               $b = $Numbers{$b1};
         }          }
         if (exists($Numbers{$b})) {          if (($a =~/^\d+$/) && ($b =~/^\d+$/)) {
             $b1 = $Numbers{$b};              return $a <=> $b;
           } else {
               return $a cmp $b;
         }          }
         $a1 cmp $b1;  
     };      };
     my @Concepts;      my @Concepts;
     foreach my $concept (sort $sortfunction (keys(%Concepts))) {      foreach my $concept (sort $sortfunction (keys(%Concepts))) {
           if (! defined($Concepts{$concept})) {
               $Concepts{$concept}=[];
   #            next;
           }
         push(@Concepts,{ name => $concept,          push(@Concepts,{ name => $concept,
                         foils => [@{$Concepts{$concept}}]});                          foils => [@{$Concepts{$concept}}]});
         push(@Foils,(@{$Concepts{$concept}}));          push(@Foils,(@{$Concepts{$concept}}));
Line 1526  sub ProblemSelector { Line 1536  sub ProblemSelector {
                         $seq_str .= '<tr><td>'.                          $seq_str .= '<tr><td>'.
   '<input type="radio" name="problemchoice" value="'.$value.'" '.$checked.'/>'.    '<input type="radio" name="problemchoice" value="'.$value.'" '.$checked.'/>'.
   '</td><td>'.              '</td><td>'.          
 #.$resptype.'</td><td>'.    $resptype.'</td><td>'.
   '<a href="'.$res->{'src'}.'">'.$title.'</a> ';    '<a href="'.$res->{'src'}.'">'.$title.'</a> ';
 #  '<a href="'.$res->{'src'}.'">'.$resptype.' '.$res->{'title'}.'</a> ';  #  '<a href="'.$res->{'src'}.'">'.$resptype.' '.$res->{'title'}.'</a> ';
                         if ($partdata->{'option'} > 1) {                          if ($partdata->{'option'} > 1) {
Line 1538  sub ProblemSelector { Line 1548  sub ProblemSelector {
             }              }
         }          }
         if ($seq_str ne '') {          if ($seq_str ne '') {
             $Str .= '<tr><td>&nbsp</td><td><b>'.$seq->{'title'}.'</b></td>'.              $Str .= '<tr><td>&nbsp</td><td colspan="2"><b>'.$seq->{'title'}.'</b></td>'.
                 "</tr>\n".$seq_str;                  "</tr>\n".$seq_str;
         }          }
     }      }
Line 1707  sub Process_OR_Row { Line 1717  sub Process_OR_Row {
     my @Foilsubs   = split('&',$submission);      my @Foilsubs   = split('&',$submission);
     for (my $j=0;$j<=$#Foilgrades;$j++) {      for (my $j=0;$j<=$#Foilgrades;$j++) {
         my ($foilid,$correct)  = split('=',$Foilgrades[$j]);          my ($foilid,$correct)  = split('=',$Foilgrades[$j]);
           $foilid = &Apache::lonnet::unescape($foilid);
         my (undef,$submission) = split('=',$Foilsubs[$j]);          my (undef,$submission) = split('=',$Foilsubs[$j]);
         if ($correct) {          if ($correct) {
             $RowData{$foilid}->{'_correct'}++;              $RowData{$foilid}->{'_correct'}++;

Removed from v.1.56  
changed lines
  Added in v.1.58


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>