[LON-CAPA-cvs] cvs: loncom /interface/statistics lonproblemstatistics.pm
minaeibi
lon-capa-cvs@mail.lon-capa.org
Mon, 29 Jul 2002 21:23:22 -0000
This is a MIME encoded message
--minaeibi1027977802
Content-Type: text/plain
minaeibi Mon Jul 29 17:23:22 2002 EDT
Modified files:
/loncom/interface/statistics lonproblemstatistics.pm
Log:
Many changes made to load statistics table in new method that applied in chart and statistics perl modules.
--minaeibi1027977802
Content-Type: text/plain
Content-Disposition: attachment; filename="minaeibi-20020729172322.txt"
Index: loncom/interface/statistics/lonproblemstatistics.pm
diff -u loncom/interface/statistics/lonproblemstatistics.pm:1.4 loncom/interface/statistics/lonproblemstatistics.pm:1.5
--- loncom/interface/statistics/lonproblemstatistics.pm:1.4 Sat Jul 27 16:48:36 2002
+++ loncom/interface/statistics/lonproblemstatistics.pm Mon Jul 29 17:23:22 2002
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# (Publication Handler
#
-# $Id: lonproblemstatistics.pm,v 1.4 2002/07/27 20:48:36 minaeibi Exp $
+# $Id: lonproblemstatistics.pm,v 1.5 2002/07/29 21:23:22 minaeibi Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -45,7 +45,7 @@
sub BuildProblemStatisticsPage {
- my ($cacheDB, $students, $courseID, $c, $r,%color)=@_;
+ my ($cacheDB, $students, $courseID, $c, $r)=@_;
my %cache;
#my %DoDiff;
unless(tie(%cache,'GDBM_File',$cacheDB,&GDBM_READER,0640)) {
@@ -61,8 +61,8 @@
$Ptr .= &AscendOrderOptions($cache{'Ascend'});
$Ptr .= &ProblemStatisticsButtons($cache{'DisplayFormat'});
$Ptr .= '</table>';
-
$Ptr .= &ProblemStatisticsLegend();
+ $r->print($Ptr);
untie(%cache);
foreach (@$students) {
@@ -75,7 +75,7 @@
untie(%cache);
}
}
- if($c->aborted()) { return $Ptr; }
+ if($c->aborted()) { return; }
unless(tie(%cache,'GDBM_File',$cacheDB,&GDBM_READER,0640)) {
return '<html><body>Unable to tie database.</body></html>';
@@ -91,18 +91,15 @@
\%Discuss, $r);
}
#&Apache::lonstatistics::Close_PrgWin($r);
-
+
my ($upper, $lower) = &Discriminant($discriminantFactor);
my %Header = (0,"Homework Sets Order",1,"#Stdnts",2,"Tries",3,"Mod",
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.");
-
+ my $color=&setbgcolor(0);
my %GraphDat= &BuildStatisticsTable(\%cache, $discriminantFactor, \@list,
- \%Header, $students, $r, \%color);
-
+ \%Header, $students, $r, $color);
untie(%cache);
-
- return $Ptr;
}
@@ -154,7 +151,6 @@
my $totalTries = 0;
my $totalAwarded = 0;
- my $tempProblemOrder=0;
my $spent=0;
my $spent_yes=0;
my $TotDiscuss=0;
@@ -164,23 +160,27 @@
my $TotFirst = 0;
my $TimeTot = 0;
my $Discussed=0;
+ my $tempSequenceOrder=100;
-$Apache::lonxml::debug=1;
+#$Apache::lonxml::debug=1;
#&Apache::lonhomework::showhash(%$cache);
-$Apache::lonxml::debug=0;
+#$Apache::lonxml::debug=0;
foreach my $sequence (split(':', $cache->{'orderedSequences'})) {
+ my $tempProblemOrder=100;
+ $tempSequenceOrder++;
# if($cache->{'ProblemStatisticsMap'} ne 'All Maps' &&
# $cache->{'ProblemStatisticsMap'} ne $cache->{$sequence.':title'}) {
-# $r->print("<br>$name --- $sequence");
+# $r->print("<br>sequences=$cache->{'orderedSequences'}");
# $r->print("<br>".$cache->{$sequence.':title'});
# next;
# }
my $Dis = '';
foreach my $problemID (split(':', $cache->{$sequence.':problems'})) {
+# $r->print("<br>problems=$cache->{$sequence.':problems'}");
my $problem = $cache->{$problemID.':problem'};
- $r->print("<br>$problemID === $problem");
+# $r->print("<br>$problemID === $problem");
my $LatestVersion = $cache->{$name.':version:'.$problem};
# Output dashes for all the parts of this problem if there
# is no version information about the current problem.
@@ -201,6 +201,9 @@
foreach my $part (split(/\:/,$cache->{$sequence.':'.
$problemID.
':parts'})) {
+ $tempProblemOrder++;
+# $r->print("<br>parts=$cache->{$sequence.':'.$problemID.':parts'}");
+ $partData{$part.':order'}=$tempProblemOrder;
$partData{$part.':tries'}=0;
$partData{$part.':code'}='-';
}
@@ -223,7 +226,7 @@
my $time=0;
my $awarded=0;
$Discussed=0;
- my $code='U';
+ my $code='-';
$awarded = $cache->{$name.
"$Version:$problem:resource.".
@@ -252,6 +255,10 @@
}
}
+#$Apache::lonxml::debug=1;
+#&Apache::lonhomework::showhash(%partData);
+#$Apache::lonxml::debug=0;
+
# Loop through all the parts for the current problem in the
# correct order and prepare the output
foreach (split(/\:/,$cache->{$sequence.':'.$problemID.
@@ -263,7 +270,8 @@
$partData{$_.':code'} eq 'O') {
$Yes=1;
}
- my $ptr = $tempProblemOrder.'&'.$problemID;
+ my $pOrder=$partData{$_.':order'};
+ my $ptr = $tempSequenceOrder.':'.$pOrder.':'.$problemID;
if($_ > 1) {
$ptr .= "*(part $_)";
@@ -274,7 +282,7 @@
# my $DoDiff=$DoDiff->{$dod};
# $r->print('<br>'.$name.'---'.$ptr.'==='.$DoDiff);
- my $Fac = ($partData{$_.':Tries'}) ?
+ my $Fac = ($partData{$_.':tries'}) ?
($partData{$_.':awarded'}/$partData{$_.':tries'}) : 0;
my $DisF;
if($Fac > 0 && $Fac < 1) {
@@ -289,17 +297,17 @@
}
my $time = $cache->{"$name:$LatestVersion:$problem:timestamp"};
$Dis .= $tempProblemOrder.'='.$DisF.'+'.$Yes;
- $ptr .= '&'.$partData{$_.'.tries'}.
- '&'.$partData{$_.'.wrongs'}.
- '&'.$partData{$_.'.code'};
+ $ptr .= '&'.$partData{$_.':tries'}.
+ '&'.$partData{$_.':wrong'}.
+ '&'.$partData{$_.':code'};
push (@$list, $ptr."&$Discussed");
- $r->print('<br>'.$name.'---'.$ptr);
+# $r->print('<br>'.$_.$name.'---'.$ptr);
#### if ($DoDiff>0.85) {
$TimeTot += $time;
- if ($Yes==1 && $partData{$_.'.Tries'}==1) {
+ if ($Yes==1 && $partData{$_.':tries'}==1) {
$TotFirst++;
}
# my $Acts= $Activity->{$name.':'.$problem};
@@ -351,7 +359,15 @@
sub BuildStatisticsTable {
- my ($cache,$discriminantFactor,$list,$headings,$students,$r,%color)=@_;
+ my ($cache,$discriminantFactor,$list,$headings,$students,$r,$color)=@_;
+
+ my $NoElements = scalar @$list;
+ my @List=sort(@$list);
+
+# for (my $c=0;$c<$NoElements;$c++) {
+## $r->print('<br>'.$c.')'.$List[$c]);
+# $r->print("<br>$List[$c]");
+# }
#6666666
# my $file="/home/httpd/perl/tmp/183d.txt";
@@ -364,39 +380,30 @@
## 'Loading Discussion...";</script>');
## my ($doDiffFile) = &LoadDoDiffFile();
+##777777
+## $Str .= &Classify($discriminantFactor, $students);
+
my $p_count = 0;
- my $nIndex = 0;
my $dummy;
my $p_val;
my $ResId;
my %GraphDat;
- my $NoElements = scalar @$list;
-
+ my $cIdx=0;
foreach my $sequence (split(':', $cache->{'orderedSequences'})) {
- &CreateProblemStatisticsTableHeading($cache->{'DisplayFormat'},
- $cache->{$sequence.':source'},
- $cache->{$sequence.':title'},
+ &CreateProblemStatisticsTableHeading(1,$cache->{$sequence.':source'},
+ $cache->{$sequence.':title'},
$headings,$r);
- foreach my $problemID (split(':', $cache->{$sequence.':problems'})) {
- my $problem = $cache->{$problemID.':problem'};
- $r->print("<br>$problem");
-
- }
- }
-}
-=pod
-##777777
-## $Str .= &Classify($discriminantFactor, $students);
+ my ($tar,$Tries,$Wrongs,$Code,$Disc)=split(/\&/,
+ $List[$cIdx]);
-
- my ($Hid,$pr)=split(/\:/,$mapsort{$_});
- my @lpr=split(/\&/,$pr);
- for (my $i=1; $i<=$#lpr; $i++) {
+ my ($SqOrd,$PrOrd,$Prob)=split(/\:/,$tar);
+ $sequence+=100;
+ while ($SqOrd==$sequence && $cIdx<$NoElements) {
my %storestats=();
- my ($PrOrd,$Prob,$Tries,$Wrongs,$Code,$Disc)=split(/\&/,$list->[$nIndex]);
+ my $pOrd=$PrOrd;
my $Temp = $Prob;
my $MxTries = 0;
my $TotalTries = 0;
@@ -406,9 +413,9 @@
my $StdNo = 0;
my $DiscNo=0;
my @StdLst;
- while ( $PrOrd == $lpr[$i] )
+ while ($pOrd==$PrOrd && $cIdx<$NoElements)
{
- $nIndex++;
+ $cIdx++;
$StdNo++;
$StdLst[ $StdNo ] = $Tries;
$TotalTries += $Tries;
@@ -416,16 +423,26 @@
if ( $Code eq 'C' ){ $YES++; }
elsif( $Code eq 'I' ) { $Incorrect++; }
elsif( $Code eq 'O' ) { $Override++; }
- elsif( $Code eq 'U' ) { $StdNo--; }
- ($PrOrd,$Prob,$Tries,$Wrongs,$Code,$Disc)=split(/\&/,$list->[$nIndex]);
- }
+ elsif( $Code eq '-' ) { $StdNo--; }
+ ($tar,$Tries,$Wrongs,$Code,$Disc)=split(/\&/,
+ $List[$cIdx]);
+ ($SqOrd,$PrOrd,$Prob)=split(/\:/,$tar);
+
+#$r->print("<br>$cIdx ... $SqOrd, $PrOrd, $Tries, $Wrongs, $Code, $Disc");
+#$r->rflush();
+
+ }
+
+#$r->print("<br>$cIdx ... $SqOrd , $Temp , $TotalTries");
+#$r->rflush();
$p_count++;
my $Dummy;
($ResId,$Dummy)=split(/\*/,$Temp);
- $Temp = '<a href="'.$cache->{'src_'.$ResId}.
- '" target="_blank">'.$cache->{'title_'.$ResId}.$Dummy.'</a>';
+######################
+ $Temp = '<a href="'.$cache->{$ResId.':source'}.
+ '" target="_blank">'.$cache->{$ResId.':title'}.$Dummy.'</a>';
my $res = &Apache::lonnet::declutter($cache->{'src_'.$ResId});
my $urlres=$res;
@@ -433,14 +450,15 @@
$ResId=~/(\d+)\.(\d+)/;
my $Map = &Apache::lonnet::declutter( $cache->{'map_id_'.$1} );
$urlres=$Map;
-
- $res = '<a href="'.$cache->{'src_'.$ResId}.'">'.$res.'</a>';
+#######################
+
+# $res = '<a href="'.$cache->{'src_'.$ResId}.'">'.$res.'</a>';
#$Map = '<a href="'.$Map.'">'.$res.'</a>';
#------------------------ Compute the Average of Tries about one problem
my $Average = ($StdNo) ? $TotalTries/$StdNo : 0;
- $storestats{$ENV{'request.course.id'}.'___'.$urlres.'___timestamp'}=time;
+ $storestats{$ENV{'request.course.id'}.'___'.$urlres.'___timestamp'}=time;
$storestats{$ENV{'request.course.id'}.'___'.$urlres.'___stdno'}=$StdNo;
$storestats{$ENV{'request.course.id'}.'___'.$urlres.'___avetries'}=$Average;
@@ -493,7 +511,7 @@
my $SD = sprintf( "%.1f", $StdDev );
my $DoD = sprintf( "%.2f", $DoDiff );
my $Sk = sprintf( "%.1f", $Skewness );
- my $join = $lpr[$i].'&'.$Temp.'&'.$StdNo.'&'.
+ my $join = $Prob.'&'.$Temp.'&'.$StdNo.'&'.
$TotalTries.'&'.$MxTries.'&'.$Avg.'&'.
$YES.'&'.$Override.'&'.$Wrng.'&'.$DoD.'&'.
$SD.'&'.$Sk.'&'.$_D1.'&'.$_D2.'&'.
@@ -510,16 +528,15 @@
&Apache::lonnet::put('resevaldata',\%storestats,$1,$2);
}
#-------------------------------- Row of statistical table
- &TableRow($cache,$join,$i,($p_count-1),$r,\%color,\%GraphDat);
+ &TableRow($cache,$join,$cIdx,($p_count-1),$r,$color,\%GraphDat);
}
&CloseTable($cache,$r);
}
- &Close_PrgWin();
+### &Close_PrgWin();
#666666
# close( OUT );
#666666
}
-=cut
=pod
sub Cache_Statistics {
@@ -556,7 +573,7 @@
for (my $i=1; $i<=$#lpr; $i++) {
my($Pre, $Post) = split(/\@/,$list[$nIndex]);
#$r->print('<br>'.$Pre.'---'.$Post);
- &TableRow($cache,$Post,$i,$nIndex,\%color,\%GraphDat);
+ &TableRow($cache,$Post,$i,$nIndex,$color,\%GraphDat);
$nIndex++;
}
&CloseTable($cache);
@@ -566,7 +583,7 @@
&CreateProblemStatisticsTableHeading($cache,0);
for ( my $nIndex = 0; $nIndex < $p_count; $nIndex++ ) {
my($Pre, $Post) = split(/\@/,$list[$nIndex]);
- &TableRow($cache,$Post,$nIndex,$nIndex,\%color,\%GraphDat);
+ &TableRow($cache,$Post,$nIndex,$nIndex,$color,\%GraphDat);
}
&CloseTable($cache);
}
@@ -577,6 +594,7 @@
my ($cache,$Str,$Idx,$RealIdx,$r,$color,$GraphDat)=@_;
my($PrOrd,$Temp,$StdNo,$TotalTries,$MxTries,$Avg,$YES,$Override,
$Wrng,$DoD,$SD,$Sk,$_D1,$_D2,$DiscNo,$Prob)=split(/\&/,$Str);
+# $r->print('<br>'.$Str);
if ($ENV{'form.showcsv'}) {
my ($ResId,$Dummy)=split(/\*/,$Prob);
my $Ptr = "\n".'<br>'.
@@ -619,8 +637,31 @@
"\n".'<td bgcolor='.$color->{"yellow"}.'> '.$DiscNo.'</td>';
$r->print("\n".$Ptr.'</tr>' );
}
- $GraphDat->{$RealIdx}=$DoD.':'.$Wrng;
+# $GraphDat->{$RealIdx}=$DoD.':'.$Wrng;
}
+
+
+# For loading the colored table for display or un-colored for print
+sub setbgcolor {
+ my $PrintTable=shift;
+ my %color;
+ if ($PrintTable){
+ $color{"gb"}="#FFFFFF";
+ $color{"red"}="#FFFFFF";
+ $color{"yellow"}="#FFFFFF";
+ $color{"green"}="#FFFFFF";
+ $color{"purple"}="#FFFFFF";
+ } else {
+ $color{"gb"}="#DDFFFF";
+ $color{"red"}="#FFDDDD";
+ $color{"yellow"}="#EEFFCC";
+ $color{"green"}="#DDFFDD";
+ $color{"purple"}="#FFDDFF";
+ }
+
+ return \%color;
+}
+
sub StatusOptions {
my ($cache)=@_;
--minaeibi1027977802--