[LON-CAPA-cvs] cvs: loncom /interface/statistics lonproblemanalysis.pm
minaeibi
lon-capa-cvs@mail.lon-capa.org
Fri, 22 Nov 2002 03:46:57 -0000
This is a MIME encoded message
--minaeibi1037936817
Content-Type: text/plain
minaeibi Thu Nov 21 22:46:57 2002 EDT
Modified files:
/loncom/interface/statistics lonproblemanalysis.pm
Log:
Start to fix inconsitency in problem analysis and fix bug 939
It needs more work.
--minaeibi1037936817
Content-Type: text/plain
Content-Disposition: attachment; filename="minaeibi-20021121224657.txt"
Index: loncom/interface/statistics/lonproblemanalysis.pm
diff -u loncom/interface/statistics/lonproblemanalysis.pm:1.10 loncom/interface/statistics/lonproblemanalysis.pm:1.11
--- loncom/interface/statistics/lonproblemanalysis.pm:1.10 Sat Sep 7 19:07:38 2002
+++ loncom/interface/statistics/lonproblemanalysis.pm Thu Nov 21 22:46:57 2002
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# (Publication Handler
#
-# $Id: lonproblemanalysis.pm,v 1.10 2002/09/07 23:07:38 minaeibi Exp $
+# $Id: lonproblemanalysis.pm,v 1.11 2002/11/22 03:46:57 minaeibi Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -27,11 +27,11 @@
#
# (Navigate problems for statistical reports
# YEAR=2002
-# 5/12,7/26 Behrouz Minaei
+# 5/12,7/26,9/7,11/22 Behrouz Minaei
#
###
-package Apache::lonproblemanalysis;
+package Apache::lonproblemanalysis;
use strict;
use Apache::lonnet();
@@ -116,11 +116,11 @@
$r->rflush();
}
- my $error =
+ my $error =
&Apache::loncoursedata::DownloadStudentCourseDataSeparate($students,
'true',
$cacheDB,
- 'true',
+ 'true',
'true',
$courseID,
$r, $c);
@@ -138,7 +138,7 @@
my ($problemId, $part, $responseId)=split(':',$cache{'AnalyzeInfo'});
my $uri = $cache{$problemId.':source'};
- my $problem = $cache{$problemId.':problem'};
+ my $problem = $cache{$problemId.':problem'};
my $title = $cache{$problemId.':title'};
my $interval = $cache{'Interval'};
@@ -146,7 +146,7 @@
$ConceptData{"Interval"} = $interval;
#Initialize the option response true answers
- my ($analyzeData) = &InitAnalysis($uri, $part, $responseId, $problem,
+ my ($analyzeData) = &InitAnalysis($uri, $part, $responseId, $problem,
$students->[0], $courseID);
if(defined($analyzeData->{'error'})) {
$Str .= $analyzeData->{'error'}.'<br>Incorrect part requested.<br>';
@@ -159,7 +159,7 @@
if($c->aborted()) { untie(%cache); return; }
#compute the intervals
- &Interval($part, $problem, $interval, $analyzeData->{'concepts'},
+ &Interval($part, $problem, $interval, $analyzeData->{'concepts'},
\%ConceptData);
$title =~ s/\ /"_"/eg;
@@ -168,18 +168,19 @@
$r->print($Str);
$Str = '';
if($c->aborted()) { untie(%cache); return; }
-
+
#Java script Progress window
for(my $index=0; $index<(scalar @$students); $index++) {
if($c->aborted()) { untie(%cache); return; }
- &OpStatus($problemId, $students->[$index], \%ConceptData,
- $analyzeData->{'foil_to_concept'}, $analyzeData, \%cache);
+ &OpStatus($problemId, $students->[$index], \%ConceptData,
+ $analyzeData->{'foil_to_concept'}, $analyzeData,
+ \%cache, $courseID);
}
$Str .= '<br>';
for (my $k=0; $k<$interval; $k++ ) {
if($c->aborted()) { untie(%cache); return $Str; }
- $Str .= &DrawGraph($k, $title, $analyzeData->{'concepts'},
+ $Str .= &DrawGraph($k, $title, $analyzeData->{'concepts'},
\%ConceptData);
$r->print($Str);
$Str = '';
@@ -242,7 +243,7 @@
$sequences{$sequence} .= ':::'.$_;
}
}
-
+
my $Str = '';
foreach my $sequence (@orderedSequences) {
@@ -290,11 +291,13 @@
#---- Analyze Web Page -------------------------------------------------------
#restore the student submissions and finding the result
+=pod
sub OpStatus {
- my ($problemID, $student, $ConceptData, $foil_to_concept,
+ my ($problemID, $student, $ConceptData, $foil_to_concept,
$analyzeData, $cache)=@_;
my $ids = $analyzeData->{'parts'};
+
my @True = ();
my @False = ();
my $flag=0;
@@ -302,7 +305,7 @@
my $tries=0;
foreach my $id (@$ids) {
- my ($part, $response) = split(/\./, $id);
+ my ($part, $response) = split(/\./, $id);
my $time=$cache->{$student.':'.$problemID.':'.$part.':timestamp'};
my @submissions = split(':::', $cache->{$student.':'.$problemID.':'.
$part.':'.$response.
@@ -313,27 +316,152 @@
if($submission{$_}) {
my $answer = $analyzeData->{$id.'.foil.value.'.$_};
if($submission{$_} eq $answer) {
- &Decide("true", $foil_to_concept->{$_},
+ &Decide("true", $foil_to_concept->{$_},
+ $time, $ConceptData);
+ } else {
+ &Decide("false", $foil_to_concept->{$_},
+ $time, $ConceptData);
+ }
+ }
+ }
+ }
+ }
+
+ return;
+}
+=cut
+
+sub OpStatus {
+ my ($problemID, $student, $ConceptData, $foil_to_concept,
+ $analyzeData, $cache, $courseID)=@_;
+
+ my $ids = $analyzeData->{'parts'};
+ my ($uname,$udom)=split(/\:/,$student);
+ my $symb = $cache->{$problemID.':problem'};
+
+ my @True = ();
+ my @False = ();
+ my $flag=0;
+ my $tries=0;
+
+# $jr->print("<br> ID= $problemID <br> student= $student<br> prob= $symb<br>");
+
+ foreach my $id (@$ids) {
+ my ($part, $response) = split(/\./, $id);
+=pod
+ my %reshash=&Apache::lonnet::restore($symb,$courseID,$udom,$uname);
+ if ($reshash{'version'}) {
+ my $tries=0;
+ #&Apache::lonhomework::showhash(%$analyzeData);
+ for (my $version=1;$version<=$reshash{'version'};$version++) {
+ my $time=$reshash{"$version:timestamp"};
+
+ foreach my $key (sort(split(/\:/,$reshash{$version.':keys'}))) {
+ if (($key=~/\.(\w+)\.(\w+)\.submission$/)) {
+ my $Id1 = $1; my $Id2 = $2;
+ #check if this is a repeat submission, if so skip it
+ if ($reshash{"$version:resource.$Id1.previous"}) { next; }
+ #if no solved this wasn't a real submission, ignore it
+ if (!defined($reshash{"$version:resource.$Id1.solved"})) {
+ &Apache::lonxml::debug("skipping ");
+ next;
+ }
+ my $Resp = $reshash{"$version:$key"};
+ my %submission=&Apache::lonnet::str2hash($Resp);
+ foreach (keys %submission) {
+ my $Ansr = $analyzeData->{"$Id1.$Id2.foil.value.$_"};
+ if ($submission{$_}) {
+ if ($submission{$_} eq $Ansr) {
+ &Decide("true",$_,$time );
+ }
+ else {&Decide("false",$_,$time );}
+ }
+ }
+ }
+ }
+ }
+ }
+=cut
+
+ my $time=$cache->{$student.':'.$problemID.':'.$part.':timestamp'};
+ my @submissions = split(':::', $cache->{$student.':'.$problemID.':'.
+ $part.':'.$response.
+ ':submission'});
+ foreach my $Resp (@submissions) {
+ my %submission=&Apache::lonnet::str2hash($Resp);
+ foreach (keys(%submission)) {
+ if($submission{$_}) {
+ my $answer = $analyzeData->{$id.'.foil.value.'.$_};
+ if($submission{$_} eq $answer) {
+ &Decide("true", $foil_to_concept->{$_},
$time, $ConceptData);
} else {
- &Decide("false", $foil_to_concept->{$_},
+ &Decide("false", $foil_to_concept->{$_},
$time, $ConceptData);
}
}
}
}
+
+
}
return;
}
+=pod
+sub OpStatus {
+ my ($rid,$student,$ConceptData,$foil_to_concept,$analyzeData,$cache)=@_;
+ my ($uname,$udom)=split(/\:/,$student);
+ my $code='U';
+ $rid=~/(\d+)\.(\d+)/;
+ my $symb=&Apache::lonnet::declutter($hash{'map_id_'.$1}).'___'.$2.'___'.
+ &Apache::lonnet::declutter($hash{'src_'.$rid});
+ my %reshash=&Apache::lonnet::restore($symb,$cid,$udom,$uname);
+ my @True = ();
+ my @False = ();
+ my $flag=0;
+ if ($reshash{'version'}) {
+ my $tries=0;
+ &Apache::lonhomework::showhash(%Answer);
+ for (my $version=1;$version<=$reshash{'version'};$version++) {
+ my $time=$reshash{"$version:timestamp"};
+
+ foreach my $key (sort(split(/\:/,$reshash{$version.':keys'}))) {
+ if (($key=~/\.(\w+)\.(\w+)\.submission$/)) {
+ my $Id1 = $1; my $Id2 = $2;
+ #check if this is a repeat submission, if so skip it
+ if ($reshash{"$version:resource.$Id1.previous"}) { next; }
+ #if no solved this wasn't a real submission, ignore it
+ if (!defined($reshash{"$version:resource.$Id1.solved"})) {
+ &Apache::lonxml::debug("skipping ");
+ next;
+ }
+ my $Resp = $reshash{"$version:$key"};
+ my %submission=&Apache::lonnet::str2hash($Resp);
+ foreach (keys %submission) {
+ my $Ansr = $Answer{"$Id1.$Id2.foil.value.$_"};
+ if ($submission{$_}) {
+ if ($submission{$_} eq $Ansr) {
+ &Decide("true",$_,$time );
+ }
+ else {&Decide("false",$_,$time );}
+ }
+ }
+ }
+ }
+ }
+ }
+}
+=cut
+
sub DrawGraph {
my ($k,$Src,$Concepts,$ConceptData)=@_;
my $Max=0;
my @data1;
my @data2;
- # Adjust Data and find the Max
+ # Adjust Data and find the Max
for (my $n=0; $n<(scalar @$Concepts); $n++ ) {
my $tmp=$Concepts->[$n];
$data1[$n]=$ConceptData->{$tmp.'.'.$k.'.true'};
@@ -392,7 +520,7 @@
my $P_No = (scalar @data1);
my $Str = '';
# $Str .= '<br><b>From: ['.localtime($ConceptData->{'Int.'.($k-1)});
-# $Str .= '] To: ['.localtime($ConceptData->{"Int.$k"}).']</b>';
+# $Str .= '] To: ['.localtime($ConceptData->{"Int.$k"}).']</b>';
$Str .= "\n".'<table border=2>'.
"\n".'<tr>'.
"\n".'<th> # </th>'.
@@ -518,7 +646,7 @@
for(my $i=1; $i<$Int; $i++) {
$ConceptData->{'Int.'.$i}=$opn+$i*$add;
}
- $ConceptData->{'Int.'.$Int}=$due;
+ $ConceptData->{'Int.'.$Int}=$due;
for(my $i=0; $i<$Int; $i++) {
for(my $n=0; $n<(scalar @$Concepts); $n++ ) {
my $tmp=$Concepts->[$n];
--minaeibi1037936817--