[LON-CAPA-cvs] cvs: loncom /interface loncoursedata.pm lonstatistics.pm /interface/statistics lonproblemanalysis.pm

stredwic lon-capa-cvs@mail.lon-capa.org
Tue, 30 Jul 2002 21:31:48 -0000


This is a MIME encoded message

--stredwic1028064708
Content-Type: text/plain

stredwic		Tue Jul 30 17:31:48 2002 EDT

  Modified files:              
    /loncom/interface	loncoursedata.pm lonstatistics.pm 
    /loncom/interface/statistics	lonproblemanalysis.pm 
  Log:
  Fixed the problem gathering the correct data to be used for the analysis.
  The problem stemmed mostly to the correct use of the result from ssi.
  
  
--stredwic1028064708
Content-Type: text/plain
Content-Disposition: attachment; filename="stredwic-20020730173148.txt"

Index: loncom/interface/loncoursedata.pm
diff -u loncom/interface/loncoursedata.pm:1.7 loncom/interface/loncoursedata.pm:1.8
--- loncom/interface/loncoursedata.pm:1.7	Fri Jul 26 12:22:09 2002
+++ loncom/interface/loncoursedata.pm	Tue Jul 30 17:31:48 2002
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # (Publication Handler
 #
-# $Id: loncoursedata.pm,v 1.7 2002/07/26 16:22:09 stredwic Exp $
+# $Id: loncoursedata.pm,v 1.8 2002/07/30 21:31:48 stredwic Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -337,6 +337,8 @@
 		    ':'.$currentResourceID;
 	    }
 
+            $cache->{$currentResourceID.':source'} = 
+                $hash{'src_'.$currentResourceID};
 	    my $meta=$hash{'src_'.$currentResourceID};
 #            $cache->{$currentResourceID.':title'}=
 #                &Apache::lonnet::metdata($meta,'title');
@@ -344,36 +346,49 @@
                 $hash{'title_'.$currentResourceID};
 
             # Get Parts for problem
-	    foreach (split(/\,/,&Apache::lonnet::metadata($meta,'keys'))) {
-		if($_=~/^stores\_(\d+)\_tries$/) {
-		    my $Part=&Apache::lonnet::metadata($meta,$_.'.part');
-                    if(!defined($cache->{$currentSequence.':'.
-                                          $currentResourceID.':parts'})) {
-                        $cache->{$currentSequence.':'.$currentResourceID.
-                                   ':parts'}=$Part;
-                    } else {
-                        $cache->{$currentSequence.':'.$currentResourceID.
-                                   ':parts'}.=':'.$Part;
+            my %beenHere;
+            foreach (split(/\,/,&Apache::lonnet::metadata($meta,'packages'))) {
+                if(/^\w+response_\d+.*/) {
+                    my (undef, $partId, $responseId) = split(/_/,$_);
+                    if($beenHere{'p:'.$partId} ==  0) {
+                        $beenHere{'p:'.$partId}++;
+                        if(!defined($cache->{$currentSequence.':'.
+                                            $currentResourceID.':parts'})) {
+                            $cache->{$currentSequence.':'.$currentResourceID.
+                                     ':parts'}=$partId;
+                        } else {
+                            $cache->{$currentSequence.':'.$currentResourceID.
+                                     ':parts'}.=':'.$partId;
+                        }
+                    }
+                    if($beenHere{'r:'.$partId.':'.$responseId} == 0) {
+                        $beenHere{'r:'.$partId.':'.$responseId}++;
+                        if(!defined($cache->{$currentSequence.':'.
+                                             $currentResourceID.':'.$partId.
+                                             ':responseIDs'})) {
+                            $cache->{$currentSequence.':'.$currentResourceID.
+                                     ':'.$partId.':responseIDs'}=$responseId;
+                        } else {
+                            $cache->{$currentSequence.':'.$currentResourceID.
+                                     ':'.$partId.':responseIDs'}.=':'.
+                                                                  $responseId;
+                        }
                     }
-                    foreach (split(/\,/,
-                             &Apache::lonnet::metadata($meta,'packages'))) {
-                        if($_=~/^optionresponse\_($Part)\_(\w+)$/) {
-                            if(defined($cache->{'OptionResponses'})) {
-                                $cache->{'OptionResponses'}.= ':::'.
-                                    $hash{'src_'.$currentResourceID}.'::'.
-                                    $hash{'title_'.$currentResourceID}.'::'.
-                                    $Part.'::'.$Problem;
-                            } else {
-                                $cache->{'OptionResponses'}=
-                                    $hash{'src_'.$currentResourceID}.'::'.
-                                    $hash{'title_'.$currentResourceID}.'::'.
-                                    $Part.'::'.$Problem;
-                            }
+                    if(/^optionresponse/ && 
+                       $beenHere{'o:'.$partId.':'.$currentResourceID} == 0) {
+                        $beenHere{'o:'.$partId.$currentResourceID}++;
+                        if(defined($cache->{'OptionResponses'})) {
+                            $cache->{'OptionResponses'}.= ':::'.
+                                $currentResourceID.':'.
+                                $partId.':'.$responseId;
+                        } else {
+                            $cache->{'OptionResponses'}= $currentResourceID.
+                                ':'.$partId.':'.$responseId;
                         }
                     }
                 }
-	    }
-	}
+            }
+        }
 
 	# if resource == finish resource, then it is the end of a sequence/page
 	if($currentResourceID eq $lastResourceID) {
Index: loncom/interface/lonstatistics.pm
diff -u loncom/interface/lonstatistics.pm:1.36 loncom/interface/lonstatistics.pm:1.37
--- loncom/interface/lonstatistics.pm:1.36	Mon Jul 29 17:19:44 2002
+++ loncom/interface/lonstatistics.pm	Tue Jul 30 17:31:48 2002
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # (Publication Handler
 #
-# $Id: lonstatistics.pm,v 1.36 2002/07/29 21:19:44 minaeibi Exp $
+# $Id: lonstatistics.pm,v 1.37 2002/07/30 21:31:48 stredwic Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -128,16 +128,18 @@
         }
     }
 
+    $cache->{'reportKey'} = 'false';
+    if($cache->{'reportSelected'} eq 'Analyze') {
+        $cache->{'reportKey'} = 'Analyze';
+    }
+
     foreach (keys(%ENV)) {
-        if(/form\.Analyze:::/) {
-#            $cache->{'reportSelected'} = 'Analyze';
-#            $cache->{'reportKey'} = 'Problem Analysis';
-            my ($uri, $title, $part, $problem);
-            (undef, $uri, $title, $part, $problem)=split(':::', $_);
-            $cache->{'AnalyzeURI'}     = $uri;
-            $cache->{'AnalyzeTitle'}   = $title;
-            $cache->{'AnalyzePart'}    = $part;
-            $cache->{'AnalyzeProblem'} = $problem;
+        if(/form\.Analyze/) {
+            $cache->{'reportSelected'} = 'Analyze';
+            $cache->{'reportKey'} = 'Analyze';
+            my $data;
+            (undef, $data)=split(':::', $_);
+            $cache->{'AnalyzeInfo'}=$data;
             
             &CheckFormElement($cache, 'Interval', 'Interval', '1');
         } elsif(/form\.HeadingColumn/) {
@@ -561,9 +563,11 @@
     if(tie(%cache,'GDBM_File',$cacheDB,&GDBM_READER,0640)) {
         $GoToPage = $cache{'reportSelected'};
         $reports{'reportSelected'} = $cache{'reportSelected'};
-#        if(defined($cache{'reportKey'}) && $cache{'reportKey'} ne 'false') {
-#            $reports{$cache{'reportKey'}} = $cache{'reportSelected'};
-#        }
+        if(defined($cache{'reportKey'}) && 
+           !exists($reports{$cache{'reportKey'}}) && 
+           $cache{'reportKey'} ne 'false') {
+            $reports{$cache{'reportKey'}} = $cache{'reportSelected'};
+        }
 
         if(defined($cache{'OptionResponses'})) {
             $reports{'problem_analysis'} = 'Problem Analysis';
@@ -592,17 +596,17 @@
     } elsif($GoToPage eq 'Student Assessment') {
         $r->print(
             &Apache::lonstudentassessment::BuildStudentAssessmentPage($cacheDB,
-                                                            $students,
-                                                            $courseID,
-                                                            'Statistics',
-                                                            \@headings,
-                                                            $spacing,
-                                                            \@studentInformation,
-                                                            $r, $c));
+                                                          $students,
+                                                          $courseID,
+                                                          'Statistics',
+                                                          \@headings,
+                                                          $spacing,
+                                                          \@studentInformation,
+                                                          $r, $c));
     } elsif($GoToPage eq 'Analyze') {
         $r->print(&Apache::lonproblemanalysis::BuildAnalyzePage($cacheDB, 
                                                                 $students, 
-                                                                $courseID));
+                                                                $courseID,$r));
     } elsif($GoToPage eq 'DoDiffGraph') {
         &Apache::lonproblemstatistics::BuildDiffGraph($r);
     } elsif($GoToPage eq 'PercentWrongGraph') {
Index: loncom/interface/statistics/lonproblemanalysis.pm
diff -u loncom/interface/statistics/lonproblemanalysis.pm:1.1 loncom/interface/statistics/lonproblemanalysis.pm:1.2
--- loncom/interface/statistics/lonproblemanalysis.pm:1.1	Wed Jul 24 10:52:32 2002
+++ loncom/interface/statistics/lonproblemanalysis.pm	Tue Jul 30 17:31:48 2002
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # (Publication Handler
 #
-# $Id: lonproblemanalysis.pm,v 1.1 2002/07/24 14:52:32 stredwic Exp $
+# $Id: lonproblemanalysis.pm,v 1.2 2002/07/30 21:31:48 stredwic Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -41,6 +41,8 @@
 use Apache::lonnet();
 use GDBM_File;
 
+my $jr;
+
 sub BuildProblemAnalysisPage {
     my ($cacheDB)=@_;
 
@@ -52,7 +54,7 @@
     }
 
     $Str .= &IntervalOptions($cache{'Interval'});
-    $Str .= &OptionResponseTable($cache{'OptionResponses'});
+    $Str .= &OptionResponseTable($cache{'OptionResponses'}, \%cache);
 
     untie(%cache);
 
@@ -60,61 +62,85 @@
 }
 
 sub BuildAnalyzePage {
-    my ($cacheDB, $students, $courseID)=@_;
+    my ($cacheDB, $students, $courseID,$r)=@_;
 
-    my $Str = '';
+    $jr = $r;
+    my $c = $r->connection;
+
+    my $Str = '</form>';
     my %cache;
+    foreach (@$students) {
+        if($c->aborted) {
+            return $Str;
+        }
+        my $courseData = 
+            &Apache::loncoursedata::DownloadCourseInformation($_, 
+                                                              $courseID);
+        if(tie(%cache,'GDBM_File',$cacheDB,&GDBM_WRCREAT,0640)) {
+            &Apache::loncoursedata::ProcessStudentData(\%cache, 
+                                                       $courseData, $_);
+            untie(%cache);
+        } else {
+            last if($c->aborted());
+            next;
+        }
+    }
+
     unless(tie(%cache,'GDBM_File',$cacheDB,&GDBM_READER,0640)) {
         $Str .= '<html><body>Unable to tie database.</body></html>';
         return $Str;
     }
 
-    my $uri      = $cache{'AnalyzeURI'}, 
-    my $part     = $cache{'AnalyzePart'}, 
-    my $problem  = $cache{'AnalyzeProblem'}, 
-    my $title    = $cache{'AnalyzeTitle'},
-    my $interval = $cache{'Interval'}, 
+    my ($problemId, $part, $responseId)=split(':',$cache{'AnalyzeInfo'});
+    my $uri      = $cache{$problemId.':source'};
+    my $problem  = $cache{$problemId.':problem'}; 
+    my $title    = $cache{$problemId.':title'};
+    my $interval = $cache{'Interval'};
 
     my %ConceptData;
     $ConceptData{"Interval"} = $interval;
 
     #Initialize the option response true answers
-    my ($Concepts, $foil_to_concept, $answer) = &InitAnalysis($uri, $part, 
-                                                              $problem, 
-                                                              $students->[0], 
-                                                              $courseID);
+    my ($analyzeData) = &InitAnalysis($uri, $part, $responseId, $problem, 
+                                      $students->[0], $courseID);
+    if(defined($analyzeData->{'error'})) {
+        $Str .= 'Incorrect part requested.<br>';
+        return $Str;
+    }
 
     #compute the intervals
-    &Interval($part, $problem, $interval, $Concepts, \%ConceptData);
+    &Interval($part, $problem, $interval, $analyzeData->{'concepts'}, 
+              \%ConceptData);
 
     $title =~ s/\ /"_"/eg;
     $Str .= '<br><b>'.$uri.'</b>';
          
     #Java script Progress window
-    &Create_PrgWin();
-    &Update_PrgWin("Starting-to-analyze-problem");
-    for (my $index=0;$index<(scalar @$students);$index++) {
-	&Update_PrgWin($index);
-	&OpStatus($problem, $students->[$index], $courseID, $answer);
+#    &Create_PrgWin();
+#    &Update_PrgWin("Starting-to-analyze-problem");
+    for(my $index=0; $index<(scalar @$students); $index++) {
+#	&Update_PrgWin($index);
+#	&OpStatus($problem, $students->[$index], $courseID, \%ConceptData,
+#                  $analyzeData->{'foil_to_concept'}, $analyzeData, \%cache);
+	&OpStatus($problem, $students->[$index], \%ConceptData, 
+                  $analyzeData->{'foil_to_concept'}, $analyzeData, \%cache);
     }
-    &Close_PrgWin();
+#    &Close_PrgWin();
 
     $Str .= '<br>';
     for (my $k=0; $k<$interval; $k++ ) {
-	$Str .= &DrawGraph($k, $title, $Concepts, \%ConceptData);
+	$Str .= &DrawGraph($k, $title, $analyzeData->{'concepts'}, 
+                           \%ConceptData);
     }
     for (my $k=0; $k<$interval; $k++ ) {
-	$Str .= &DrawTable($k, $Concepts, \%ConceptData);
+	$Str .= &DrawTable($k, $analyzeData->{'concepts'}, \%ConceptData);
     }
-#$Apache::lonxml::debug=1;
-#&Apache::lonhomework::showhash(%ConceptData);
-#$Apache::lonxml::debug=0;
     my $Answ=&Apache::lonnet::ssi($uri);
     $Str .= '<br><b>Here you can see the Problem:</b><br>'.$Answ;
 
     untie(%cache);
 
-    return $Str;
+    return $Str.'<form>';
 }
 
 #---- Problem Analysis Web Page ----------------------------------------------
@@ -144,7 +170,7 @@
 }
 
 sub OptionResponseTable {
-    my ($optionResponses)=@_;
+    my ($optionResponses,$cache)=@_;
     my $Str = '';
     $Str .= '<br><b> Option Response Problems in this course:</b>'."\n";
     $Str .= '<br><br>'."\n";
@@ -152,16 +178,33 @@
     $Str .= '<th> Resource </th><th> Analysis  </th></tr>'."\n";
 
     my $number=1;
-    foreach (split(':::', $optionResponses)) {
-        my ($uri,$title,$part,$problem)=split('::',$_);
+    my @optionResponses=split(':::', $optionResponses);
+    my %partCount;
+    foreach (@optionResponses) {
+        my ($problemId, $part, undef)=split(':',$_);
+        $partCount{$problemId.':'.$part}++;
+    }
+
+    foreach (@optionResponses) {
+        my ($problemId, $part, $response)=split(':',$_);
+        my $uri = $cache->{$problemId.':source'};
+        my $title = $cache->{$problemId.':title'};
+
         my $Temp = '<a href="'.$uri.'" target="_blank">'.$title.'</a>';
         $Str .= '<tr>';
         $Str .= '<td> '.$number.' </td>';
-        $Str .= '<td bgcolor="#DDFFDD"> '.$Temp.' </td>';
-        $Str .= '<td bgcolor="#EEFFCC"> '.$uri.' </td>';
-        $Str .= '<td><input type="submit" name="Analyze:::'.$uri.':::';
-        $Str .= $title.':::'.$part.':::'.$problem.'" value="';
-        $Str .= 'Analyze" /></td></tr>'."\n";
+        $Str .= '<td bgcolor="#DDFFDD">'.$Temp.'</td>';
+        $Str .= '<td bgcolor="#EEFFCC">'.$uri.'</td>';
+        if($partCount{$problemId.':'.$part} < 2) {
+            $Str .= '<td><input type="submit" name="Analyze:::';
+            $Str .= $problemId.':'.$part.'" value="';
+            $Str .= 'Part '.$part;
+            $Str .= '" /></td></tr>'."\n";
+        } else {
+            $Str .= '<td><input type="submit" name="Analyze:::'.$_.'" value="';
+            $Str .= 'Part '.$part.' Response '.$response;
+            $Str .= '" /></td></tr>'."\n";
+        }
         $number++;
     }
     $Str .= '</table>'."\n";
@@ -175,48 +218,52 @@
 
 #restore the student submissions and finding the result
 sub OpStatus {
-    my ($problem, $student, $courseID, $ConceptData, $foil_to_concept,
-        $Answer)=@_;
-    my ($username,$userdomain)=split(/':'/,$student);
-    my $code='U';
-    my %reshash=&Apache::lonnet::restore($problem, $courseID, $userdomain, 
-                                         $username);
+    my ($problem, $student, $ConceptData, $foil_to_concept, 
+        $analyzeData, $cache)=@_;
+
+    my $ids = $analyzeData->{'parts'};
     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", $foil_to_concept->{$_},
-                                        $time, $ConceptData);
-			    } else {
-                                &Decide("false", $foil_to_concept->{$_},
-                                        $time, $ConceptData);}
-			}
-		    }
-	        }	  
-	    }
+    my $latestVersion = $cache->{$student.':version:'.$problem};
+    if(!$latestVersion) {
+        return;
+    }
+
+    my $tries=0;
+    for(my $version=1; $version<=$latestVersion; $version++) {
+        my $time=$cache->{$student.':'.$version.':'.$problem.':timestamp'};
+
+        foreach my $id (@$ids) {
+            my ($currentPart, undef) = split(/\./, $id);
+            #check if this is a repeat submission, if so skip it
+            next if($cache->{$student.':'.$version.':'.$problem.
+                             ':resource.'.$currentPart.'.previous'});
+            #if no solved this wasn't a real submission, ignore it
+            if(!defined($cache->{"$student:$version:$problem".
+                                 ":resource.$currentPart.solved"})) {
+                &Apache::lonxml::debug("skipping ");
+                next;
+            }
+            my $Resp = $cache->{$student.':'.$version.':'.$problem.
+                                ':resource.'.$id.'.submission'};
+            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->{$_}, 
+                                $time, $ConceptData);
+                    }
+                }
+            }
         }
     }
+
+    return;
 }
 
 sub DrawGraph {
@@ -296,7 +343,8 @@
     for(my $n=0; $n<(scalar @$Concepts); $n++ ) {
 	$Str .= '<tr>'."\n";
         $Str .= '<td>'.($n+1).'</td>'."\n";
-        $Str .= '<td bgcolor="EEFFCC">'.$Concepts->[$n];
+        my ($currentConcept) = split('::',$Concepts->[$n]);
+        $Str .= '<td bgcolor="EEFFCC">'.$currentConcept;
         $Str .= '</td>'."\n";
         $Str .= '<td bgcolor="DDFFDD">'.$data1[$n].'</td>'."\n";
         $Str .= '<td bgcolor="FFDDDD">'.$data2[$n].'</td>'."\n";
@@ -319,17 +367,20 @@
     #deciding the true or false answer belongs to each interval
     my ($type,$concept,$time,$ConceptData)=@_; 
     my $k=0;
-    while ($time>$ConceptData->{'Int.'.($k+1)} && 
-           $k<$ConceptData->{'Interval'}) {$k++;}
+    while($time > $ConceptData->{'Int.'.($k+1)} && 
+           $k < $ConceptData->{'Interval'}) {
+        $k++;
+    }
     $ConceptData->{$concept.'.'.$k.'.'.$type}++;
 
     return;
 }
 
 sub InitAnalysis {
-    my ($uri,$part,$problem,$student,$courseID)=@_;
+    my ($uri,$part,$responseId,$problem,$student,$courseID)=@_;
     my ($name,$domain)=split(/\:/,$student);
 
+    my %analyzeData;
     # Render the student's view of the problem.  $Answ is the problem 
     # Stringafied
     my $Answ=&Apache::lonnet::ssi($uri,('grade_target'   => 'analyze',
@@ -337,32 +388,65 @@
                                         'grade_domain'   => $domain,
                                         'grade_courseid' => $courseID,
                                         'grade_symb'     => $problem));
-#    my $Answ=&Apache::lonnet::ssi($URI,('grade_target' => 'analyze'));
 
-#    (my $garbage,$Answ)=split(/_HASH_REF__/,$Answ,2);
     my %Answer=();
     %Answer=&Apache::lonnet::str2hash($Answ);
 
-    my $parts='';
-    foreach my $elm (@{$Answer{'parts'}}) {
-	$parts.= $elm.',';
+    my $found = 0;
+    my @parts=();
+    if(defined($responseId)) {
+        foreach (@{$Answer{'parts'}}) {
+            if($_ eq $part.'.'.$responseId) {
+                push(@parts, $_);
+                $found = 1;
+                last;
+            }
+        }
+    } else {
+        foreach (@{$Answer{'parts'}}) {
+            if($_ =~ /$part/) {
+                push(@parts, $_);
+                $found = 1;
+                last;
+            }
+        }
     }
-    $parts =~ s/,$//;
 
-    my @Concepts=();
-    foreach my $elm (@{$Answer{$parts.'.concepts'}}) {
-        push(@Concepts, $elm);
+    if($found == 0) {
+        $analyzeData{'error'} = 'No parts matching selected values';
+        return \%analyzeData;
     }
 
+    my @Concepts=();
     my %foil_to_concept;
-    foreach my $concept (@Concepts) {
-	foreach my $foil (@{$Answer{$parts.'.concept.'.$concept}}) {
-	    $foil_to_concept{$foil} = $concept;
-	    #$ConceptData{$foil} = $Answer{$parts.'.foil.value.'.$foil};
-	}
+    foreach my $currentPart (@parts) {
+        if(defined($Answer{$currentPart.'.concepts'})) {
+            foreach my $concept (@{$Answer{$currentPart.'.concepts'}}) {
+                push(@Concepts, $concept);
+                foreach my $foil (@{$Answer{$currentPart.'.concept.'.
+                                            $concept}}) {
+                    $analyzeData{$currentPart.'.foil.value.'.$foil} =
+                        $Answer{$currentPart.'.foil.value.'.$foil};
+                    $foil_to_concept{$foil} = $concept;
+                }
+            }
+        } else {
+            foreach (keys(%Answer)) {
+                if(/$currentPart.foil\.value\.(.*)$/) {
+                    push(@Concepts, $1);
+                    $foil_to_concept{$1} = $1;
+                    $analyzeData{$currentPart.'.foil.value.'.$1} =
+                        $Answer{$currentPart.'.foil.value.'.$1};
+                }
+            }
+        }
     }
 
-    return (\@Concepts, \%foil_to_concept, \%Answer);
+    $analyzeData{'parts'} = \@parts;
+    $analyzeData{'concepts'} = \@Concepts;
+    $analyzeData{'foil_to_concept'} = \%foil_to_concept;
+
+    return \%analyzeData;
 }
 
 sub Interval {
@@ -372,12 +456,12 @@
     my $opn = &Apache::lonnet::EXT('resource.'.$part.'.opendate',$symb);
     my $add=int(($due-$opn)/$Int);
     $ConceptData->{'Int.0'}=$opn;
-    for (my $i=1;$i<$Int;$i++) {
+    for(my $i=1; $i<$Int; $i++) {
 	$ConceptData->{'Int.'.$i}=$opn+$i*$add;
     }
     $ConceptData->{'Int.'.$Int}=$due;     
-    for (my $i=0;$i<$Int;$i++) {
-	for (my $n=0; $n<(scalar @$Concepts); $n++ ) {
+    for(my $i=0; $i<$Int; $i++) {
+	for(my $n=0; $n<(scalar @$Concepts); $n++ ) {
 	    my $tmp=$Concepts->[$n];
 	    $ConceptData->{$tmp.'.'.$i.'.true'}=0;
 	    $ConceptData->{$tmp.'.'.$i.'.false'}=0;

--stredwic1028064708--