[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--