Diff for /loncom/interface/statistics/lonproblemstatistics.pm between versions 1.11 and 1.12

version 1.11, 2002/08/02 21:04:46 version 1.12, 2002/08/05 18:10:08
Line 31 Line 31
 # 11/1,11/4,11/16,12/14,12/16,12/18,12/20,12/31 Behrouz Minaei  # 11/1,11/4,11/16,12/14,12/16,12/18,12/20,12/31 Behrouz Minaei
 # YEAR=2002  # YEAR=2002
 # 1/22,2/1,2/6,2/25,3/2,3/6,3/17,3/21,3/22,3/26,4/7,5/6 Behrouz Minaei  # 1/22,2/1,2/6,2/25,3/2,3/6,3/17,3/21,3/22,3/26,4/7,5/6 Behrouz Minaei
 # 5/12,5/14,5/15,5/19,5/26,7/16,7/25,7/29  Behrouz Minaei  # 5/12,5/14,5/15,5/19,5/26,7/16,7/25,7/29,8/5  Behrouz Minaei
 #  #
 ###  ###
   
Line 87  sub BuildProblemStatisticsPage { Line 87  sub BuildProblemStatisticsPage {
     unless(tie(%cache,'GDBM_File',$cacheDB,&GDBM_READER,0640)) {      unless(tie(%cache,'GDBM_File',$cacheDB,&GDBM_READER,0640)) {
         return '<html><body>Unable to tie database.</body></html>';          return '<html><body>Unable to tie database.</body></html>';
     }      }
     my %discriminant=();  
     my @list=();  
     my %Discuss=&Apache::loncoursedata::LoadDiscussion($courseID);  
     my $index=0;  
     foreach (@$students) {  
  $index++;  
  #&Apache::lonstatistics::Update_PrgWin(++$index,$r);  
         &ExtractStudentData(\%cache, $_, \@list,\%Discuss, $r, \%discriminant);  
     }  
     #&Apache::lonstatistics::Close_PrgWin($r);  
    
     my ($upper, $lower) = &Discriminant(\%discriminant,$r);  
     my %Header = (0,"Homework Sets Order",1,"#Stdnts",2,"Tries",3,"Mod",      my %Header = (0,"Homework Sets Order",1,"#Stdnts",2,"Tries",3,"Mod",
                   4,"Mean",5,"#YES",6,"#yes",7,"%Wrng",8,"DoDiff",                    4,"Mean",5,"#YES",6,"#yes",7,"%Wrng",8,"DoDiff",
                   9,"S.D.",10,"Skew.",11,"D.F.1st",12,"D.F.2nd", 13, "Disc.");                    9,"S.D.",10,"Skew.",11,"D.F.1st",12,"D.F.2nd", 13, "Disc.");
     my $color=&setbgcolor(0);      my $color=&setbgcolor(0);
     my %GraphDat= &BuildStatisticsTable(\%cache, $upper, $lower, \@list,   
                                         \%Header, $students, $r, $color);      my $state=$ENV{'form.ProblemStatisticsHeading'}; 
   
   #    my $state=&Apache::lonstatistics::CheckFormElement(\%cache,
   #                                                  'ProblemStatisticsHeading',
   #                                                  'ProblemStatisticsHeading',
   #                                                  'Homework Sets Order'); 
       $r->print("<br>state=".$state);
   
       my $TempCache;
   
       if ($state) {
    $TempCache=&CacheStatisticsTable($state,\%cache,\%Header,
    $r,$color);
       } else {    
    my %discriminant=();
    my @list=();
    my %Discuss=&Apache::loncoursedata::LoadDiscussion($courseID);
    my $index=0;
    foreach (@$students) {
       $index++;
       #&Apache::lonstatistics::Update_PrgWin(++$index,$r);
       &ExtractStudentData(\%cache, $_, \@list,\%Discuss, $r,
                                   \%discriminant);
    }
    #&Apache::lonstatistics::Close_PrgWin($r);
    my ($upper, $lower) = &Discriminant(\%discriminant,$r);
    $TempCache= &BuildStatisticsTable(\%cache, $upper, $lower, 
      \@list, \%Header, $students,
      $r, $color);
       }
       untie(%cache);
   
       foreach (keys %$TempCache) {
           last if ($c->aborted());
           if(tie(%cache,'GDBM_File',$cacheDB,&GDBM_WRCREAT,0640)) {
       $cache{$_}=$TempCache->{$_};
   
               untie(%cache);
           }
       }
       if($c->aborted()) { return; }
     untie(%cache);      untie(%cache);
 }  }
   
Line 349  sub ExtractStudentData { Line 378  sub ExtractStudentData {
 }  }
   
   
 =pod  
 sub MySort {            sub MySort {
     if ( $Pos > 0 ) {      my $pos=shift;
       if ( $pos > 0 ) {
  if ($ENV{'form.order'} eq 'Descending') {$b <=> $a;}   if ($ENV{'form.order'} eq 'Descending') {$b <=> $a;}
  else { $a <=> $b; }   else { $a <=> $b; }
     }      }
     else {      else {
  if ($ENV{'form.order'} eq 'Descending') {$b cmp $a;}  # if ($ENV{'form.order'} eq 'Descending') {$b cmp $a;}
  else { $a cmp $b; }  # else { $a cmp $b; }
    $a cmp $b;
     }      }
 }  }
 =cut  
   
   
 sub BuildStatisticsTable {  sub BuildStatisticsTable {
     my ($cache,$upper,$lower,$list,$headings,$students,$r,$color)=@_;      my ($cache,$upper,$lower,$list,$headings,$students,$r,$color)=@_;
     my $NoElements = scalar @$list;      my $NoElements = scalar @$list;
     my @List=sort(@$list);      my @list=sort(@$list);
   
 #6666666  #6666666
 #    my $file="/home/httpd/perl/tmp/183d.txt";  #    my $file="/home/httpd/perl/tmp/183d.txt";
Line 386  sub BuildStatisticsTable { Line 417  sub BuildStatisticsTable {
     my $dummy;      my $dummy;
     my $p_val;      my $p_val;
     my $ResId;      my $ResId;
     my %GraphDat;      my %TempCache;
     my $cIdx=0;      my $cIdx=0;
   
     foreach my $sequence (split(':', $cache->{'orderedSequences'})) {      foreach my $sequence (split(':', $cache->{'orderedSequences'})) {
Line 399  sub BuildStatisticsTable { Line 430  sub BuildStatisticsTable {
                                              $cache->{$sequence.':title'},                                                $cache->{$sequence.':title'}, 
                                              $headings,$r);                                               $headings,$r);
  my ($tar,$Tries,$Wrongs,$Code,$Disc)=split(/\&/,   my ($tar,$Tries,$Wrongs,$Code,$Disc)=split(/\&/,
                                                    $List[$cIdx]);                                                     $list[$cIdx]);
         my ($SqOrd,$PrOrd,$Prob)=split(/\:/,$tar);          my ($SqOrd,$PrOrd,$Prob)=split(/\:/,$tar);
  $sequence+=100;   $sequence+=100;
  while ($SqOrd==$sequence && $cIdx<$NoElements) {   while ($SqOrd==$sequence && $cIdx<$NoElements) {
Line 426  sub BuildStatisticsTable { Line 457  sub BuildStatisticsTable {
  elsif( $Code eq 'O' ) { $Override++; }   elsif( $Code eq 'O' ) { $Override++; }
  elsif( $Code eq '-' ) { $StdNo--; }   elsif( $Code eq '-' ) { $StdNo--; }
  ($tar,$Tries,$Wrongs,$Code,$Disc)=split(/\&/,   ($tar,$Tries,$Wrongs,$Code,$Disc)=split(/\&/,
                                                      $List[$cIdx]);                                                       $list[$cIdx]);
         ($SqOrd,$PrOrd,$Prob)=split(/\:/,$tar);          ($SqOrd,$PrOrd,$Prob)=split(/\:/,$tar);
     }      }
   
Line 510  sub BuildStatisticsTable { Line 541  sub BuildStatisticsTable {
     my $SD = sprintf( "%.1f", $StdDev );      my $SD = sprintf( "%.1f", $StdDev );
     my $DoD = sprintf( "%.2f", $DoDiff );      my $DoD = sprintf( "%.2f", $DoDiff );
     my $Sk = sprintf( "%.1f", $Skewness );      my $Sk = sprintf( "%.1f", $Skewness );
     my $join = $Prob.'&'.$Temp.'&'.$StdNo.'&'.      my $join = $sequence.'@'.$pOrd.'&'.$Temp.'&'.$StdNo.'&'.
                        $TotalTries.'&'.$MxTries.'&'.$Avg.'&'.                         $TotalTries.'&'.$MxTries.'&'.$Avg.'&'.
                        $YES.'&'.$Override.'&'.$Wrng.'&'.$DoD.'&'.                         $YES.'&'.$Override.'&'.$Wrng.'&'.$DoD.'&'.
        $SD.'&'.$Sk.'&'.$_D1.'&'.$_D2.'&'.         $SD.'&'.$Sk.'&'.$_D1.'&'.$_D2.'&'.
                        $DiscNo.'&'.$Prob;                         $DiscNo.'&'.$Prob;
   
 #####{$sequence.'@'.$pOrd}  #####{$sequence.'@'.$pOrd}
   #  $cache->{'tableCache:'.$p_count-1}=$join;      $TempCache{'CacheTable:'.($p_count-1)}=$join;
   
 #6666666  #6666666
 #    $r->print('<br>'.$out.'&'.$DoD);  #    $r->print('<br>'.$out.'&'.$DoD);
Line 529  sub BuildStatisticsTable { Line 560  sub BuildStatisticsTable {
  &Apache::lonnet::put('resevaldata',\%storestats,$1,$2);    &Apache::lonnet::put('resevaldata',\%storestats,$1,$2); 
     }      }
 #-------------------------------- Row of statistical table  #-------------------------------- Row of statistical table
             &TableRow($cache,$join,$cIdx,($p_count-1),$r,$color,\%GraphDat);              &TableRow($cache,$join,$cIdx,($p_count-1),$r,$color,
                         \%TempCache);
  }   }
    $TempCache{'ProblemCount'}=$p_count;
  &CloseTable($cache,$r);   &CloseTable($cache,$r);
     }      }
 ###    &Close_PrgWin();  ###    &Close_PrgWin();
 #666666  #666666
 #    close( OUT );  #    close( OUT );
 #666666  #666666
       return \%TempCache;
 }  }
   
 =pod  
 sub Cache_Statistics {  sub CacheStatisticsTable {
     my ($cache,$color)=@_;      my ($state,$cache,$Header,$r,$color)=@_;
     my @list = ();      my @list = ();
     my $Useful;      my $Useful;
     my $UnUseful;      my $UnUseful; 
 #    $r->print('<input type="hidden" name="show" value="excel" />'."\n");       my %TempCache;
     my %myHeader = reverse( %Header );      my %myHeader = reverse( %$Header );
     $Pos = $myHeader{$ENV{'form.sort'}};      my $pos = $myHeader{$state};
     if ($Pos > 0) {$Pos++;}      if ($pos > 0) {$pos++;}
     my $p_count = 0;      my $p_count = $cache->{'ProblemCount'};
     foreach my $key( keys %CachData) {   
  my @Temp=split(/\&/,$CachData{$key});      for ( my $k=0; $k<$p_count;$k++) {
  if ( $Pos == 0 ) {   my $key=$cache->{'CacheTable:'.$k};
     ($UnUseful,$Useful)=split(/\>/,$Temp[$Pos]);   my @Temp=split(/\&/,$key);
    if ( $pos == 0 ) {
       ($UnUseful,$Useful)=split(/\>/,$Temp[$pos]);
  }   }
  else {   else {
     $Useful = $Temp[$Pos];      $Useful = $Temp[$pos];
  }      }   
  $list[$p_count]=$Useful.'@'.$CachData{$key};   $list[$k]=$Useful.'@'.$key;
         $p_count++;   $r->print('<br>'.$list[$k]);
     }      }
   
   
     @list = sort MySort (@list);      @list = sort MySort (@list);
   
     my $nIndex=0;      my $nIndex=0;
   
       return \%TempCache;
   }
   
   
   =pod
   
     if ( $Pos == 0 ) {      if ( $Pos == 0 ) {
  foreach (sort keys %mapsort) {   foreach my $sequence (split(':', $cache->{'orderedSequences'})) {
     my ($Hid,$pr)=split(/\:/,$mapsort{$_});      if($cache->{'ProblemStatisticsMaps'} ne 'All Maps'  &&
     &CreateProblemStatisticsTableHeading($cache,1,$Hid);         $cache->{'ProblemStatisticsMaps'} ne $cache->{$sequence.':title'}) {
    next;
       }
       &CreateProblemStatisticsTableHeading($cache->{'DisplayFormat'}, 
                                                $cache->{$sequence.':source'},
                                                $cache->{$sequence.':title'}, 
                                                $headings,$r);
   
       my ($tar,$Tries,$Wrongs,$Code,$Disc)=split(/\&/,
                                                          $list[$cIdx]);
       my ($SqOrd,$PrOrd,$Prob)=split(/\:/,$tar);
       $sequence+=100;
    while ($SqOrd==$sequence && $cIdx<$NoElements) {
       my %storestats=();
     my @lpr=split(/\&/,$pr);      my @lpr=split(/\&/,$pr);
     for (my $i=1; $i<=$#lpr; $i++) {      for (my $i=1; $i<=$#lpr; $i++) {
  my($Pre, $Post) = split(/\@/,$list[$nIndex]);    my($Pre, $Post) = split(/\@/,$list[$nIndex]); 
Line 581  sub Cache_Statistics { Line 637  sub Cache_Statistics {
  }   }
     }      }
     else {      else {
  &CreateProblemStatisticsTableHeading($cache,0);          &CreateProblemStatisticsTableHeading($cache->{'DisplayFormat'}, 
                                                $cache->{$sequence.':source'},
                                                $cache->{$sequence.':title'}, 
                                                $headings,$r);
  for ( my $nIndex = 0; $nIndex < $p_count; $nIndex++ ) {   for ( my $nIndex = 0; $nIndex < $p_count; $nIndex++ ) {
     my($Pre, $Post) = split(/\@/,$list[$nIndex]);       my($Pre, $Post) = split(/\@/,$list[$nIndex]); 
     &TableRow($cache,$Post,$nIndex,$nIndex,$color,\%GraphDat);      &TableRow($cache,$Post,$nIndex,$nIndex,$color,\%GraphDat);
  }    } 
  &CloseTable($cache);   &CloseTable($cache);
     }      }
   
       return \%TempCache;
 }  }
 =cut   
   =cut
   
   
 sub TableRow {  sub TableRow {
     my ($cache,$Str,$Idx,$RealIdx,$r,$color,$GraphDat)=@_;      my ($cache,$Str,$Idx,$RealIdx,$r,$color,$GraphDat)=@_;
     my($PrOrd,$Temp,$StdNo,$TotalTries,$MxTries,$Avg,$YES,$Override,      my($PrOrd,$Temp,$StdNo,$TotalTries,$MxTries,$Avg,$YES,$Override,
        $Wrng,$DoD,$SD,$Sk,$_D1,$_D2,$DiscNo,$Prob)=split(/\&/,$Str);         $Wrng,$DoD,$SD,$Sk,$_D1,$_D2,$DiscNo,$Prob)=split(/\&/,$Str);
 #    $r->print('<br>'.$Str);  
     my $Ptr;      my $Ptr;
     if($cache->{'DisplayFormat'} eq 'Display CSV Format') {      if($cache->{'DisplayFormat'} eq 'Display CSV Format') {
         my ($ResId,$Dummy)=split(/\*/,$Prob);          my ($ResId,$Dummy)=split(/\*/,$Prob);
Line 638  sub TableRow { Line 700  sub TableRow {
              "\n".'<td bgcolor='.$color->{"yellow"}.'> '.$DiscNo.'</td>';               "\n".'<td bgcolor='.$color->{"yellow"}.'> '.$DiscNo.'</td>';
         $r->print("\n".$Ptr.'</tr>' );          $r->print("\n".$Ptr.'</tr>' );
     }      }
 #    $cache->{'graph_gif:'.$RealIdx}=$DoD.':'.$Wrng;      $GraphDat->{'graph_gif:'.$RealIdx}=$DoD.':'.$Wrng;
 }  }
   
   

Removed from v.1.11  
changed lines
  Added in v.1.12


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