P# | '; - $Result .= "\n".''.$Header{0}.' | '; - $Result .= "\n".''.'Discrimination Factor'.' | '; - $Result .= "\n".''.'%Upper Award'.' | '; - $Result .= "\n".''.'%Lower Award'.' | '; - $Result .= "\n".''.'Upper Records'.' | '; - $Result .= "\n".''.'Lower Records'.' | '; - $Result .= "\n".''.'%Degree of Difficulty'.' | '; - $Result .= "\n".'
---|---|---|---|---|---|---|---|
'.($nIdx+1).' | '. - "\n".''.$Temp.' | '. - "\n".''.$_Dis.' | '. - "\n".''.$U_Dis.' | '. - "\n".''.$L_Dis.' | '. - "\n".''.$UpNo.' | '. - "\n".''.$LwNo.' | '. - "\n".''.($DoD).' | '. - "\n".'
# | '. - "\n".'Set Title | '. - "\n".'Results | '. - "\n".'Tries | '. + "\n".'Concept | '. + "\n".'Correct | '. + "\n".'Wrong | '. "\n".'
---|---|---|---|---|---|---|
$SetNo | ". - "\n"."$Set | ". - "\n"."$PtrCod | ". - "\n"."$PtrTry | ". - "\n"."|||
".($n+1)." | ". + "\n".''.$Concepts[$n]." | ". + "\n".''.$data1[$n]." | ". + "\n".''.$data2[$n]." | ". + "\n"."From:['.localtime($ConceptData{'Int.'.$k}). + '] To: ['.localtime($ConceptData{'Int.'.($k+1)}-1). + "] | $Correct | $Wrong | "; + + $Str .= "\n".'
'. - ' #Stdnts: Total Number of Students opened the problem.'; - $r->print($Ptr); - $r->rflush(); - - my $Result = "\n".'
'. - ' Tries : Total Number of Tries for solving the problem.
'. - ' Mod : Maximunm Number of Tries for solving the problem.
'. - ' Mean : Average Number of the tries. [ Tries / #Stdns ]
'. - ' #YES : Number of students solved the problem correctly.
'. - ' #yes : Number of students solved the problem by override.
'. - ' %Wrng : Percentage of students tried to solve the problem but still incorrect. [ 100*((#Stdnts-(#YES+#yes))/#Stdnts) ]
'. - ' S.D. : Standard Deviation of the tries.[ sqrt(sum((Xi - Mean)^2)) / (#Stdnts-1) where Xi is every student\'s tries ]
'. - ' Skew. : Skewness of the students tries. [ (sqrt( sum((Xi - Mean)^3) / #Stdnts)) / (S.D.^3) ]
'. -# ' DoDiff : Degree of Difficulty of the problem. [ Tries/(#YES+#yes+0.1) ]
'. - ' DoDiff : Degree of Difficulty of the problem. [ 1 - ((#YES+#yes) / Tries) ]
'. -# ' Dis.F. : Discrimination Factor. [ Sum of Partial Credits Awarded / Total Number of Tries in %27 upper and lower students]'. - '
P# | '."\n"; - for ( my $nIdx=0; $nIdx < 12; $nIdx++ ) { - $Result .= ''.''.' | '."\n"; - } - $Result .= "\n".'
---|
P# | '."\n"; + for(my $nIndex=0; $nIndex < (scalar (keys %$headings)); $nIndex++) { + $Result .= ''.''.' | '."\n"; + } + $Result .= "\n".'
---|
'; + $Ptr .= '#Stdnts: | '; + $Ptr .= 'Total Number of Students opened the problem.'; + $Ptr .= ' |
'; + $Ptr .= 'Tries: | '; + $Ptr .= 'Total Number of Tries for solving the problem.'; + $Ptr .= ' |
'; + $Ptr .= 'Mod: | '; + $Ptr .= 'Maximunm Number of Tries for solving the problem.'; + $Ptr .= ' |
'; + $Ptr .= 'Mean: | '; + $Ptr .= 'Average Number of the tries. [ Tries / #Stdnts ]'; + $Ptr .= ' |
'; + $Ptr .= '#YES: | '; + $Ptr .= 'Number of students solved the problem correctly.'; + $Ptr .= ' |
'; + $Ptr .= '#yes: | '; + $Ptr .= 'Number of students solved the problem by override.'; + $Ptr .= ' |
'; + $Ptr .= '%Wrng: | '; + $Ptr .= 'Percentage of students tried to solve the problem '; + $Ptr .= 'but still incorrect. [ 100*((#Stdnts-(#YES+#yes))/#Stdnts) ]'; + $Ptr .= ' |
';
+# Kashy formula
+# ' DoDiff : Degree of Difficulty of the problem. '. +# '[ Tries/(#YES+#yes+0.1) ] '. + #Gerd formula + $Ptr .= 'DoDiff: | ';
+ $Ptr .= 'Degree of Difficulty of the problem. '; + $Ptr .= '[ 1 - ((#YES+#yes) / Tries) ]'; + $Ptr .= ' |
'; + $Ptr .= 'S.D.: | '; + $Ptr .= 'Standard Deviation of the tries. '; + $Ptr .= '[ sqrt(sum((Xi - Mean)^2)) / (#Stdnts-1) '; + $Ptr .= 'where Xi denotes every student\'s tries ]'; + $Ptr .= ' |
'; + $Ptr .= 'Skew.: | '; + $Ptr .= 'Skewness of the students tries.'; + $Ptr .= '[(sqrt( sum((Xi - Mean)^3) / #Stdnts)) / (S.D.^3)]'; + $Ptr .= ' |
'; + $Ptr .= 'Dis.F.: | '; + $Ptr .= 'Discrimination Factor: A Standard for evaluating the ';
+ $Ptr .= 'problem according to a Criterion '; + $Ptr .= '[Applied Criterion in %27 Upper Students - '; + $Ptr .= 'Applied the same Criterion in %27 Lower Students] '; + $Ptr .= '1st Criterion for Sorting the Students: '; + $Ptr .= 'Sum of Partial Credit Awarded / Total Number of Tries '; + $Ptr .= '2nd Criterion for Sorting the Students: '; + $Ptr .= 'Total number of Correct Answers / Total Number of Tries'; + $Ptr .= ' |
Disc. | '; + $Ptr .= 'Number of Students had at least one discussion.'; + $Ptr .= ' |
\# | Problem Title | "; + $Str .= 'Resource | Analysis |
---|---|---|---|
'.$number.' | '; + $Str .= ''.$Temp.' | '; + $Str .= ''.$uri.' | '; + $Str .= '
\# | Set Title | "; + $Str .= 'Results | Tries |
---|---|---|---|
'.$sequence.' | '; + $Str .= ''.$cache->{$sequence.':title'}.' | '; + + $codes = ''; + $attempts = ''; + foreach my $problemID (split(':', $cache->{$sequence.':problems'})) { + my $problem = $cache->{$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. + if(!$LatestVersion) { + foreach my $part (split(/\:/,$cache->{$sequence.':'. + $problemID. + ':parts'})) { + $codes .= "-,"; + $attempts .= "0,"; + } + next; + } + + my %partData=undef; + # Initialize part data, display skips correctly + # Skip refers to when a student made no submissions on that + # part/problem. + foreach my $part (split(/\:/,$cache->{$sequence.':'. + $problemID. + ':parts'})) { + $partData{$part.':tries'}=0; + $partData{$part.':code'}='-'; + } + + # Looping through all the versions of each part, starting with the + # oldest version. Basically, it gets the most recent + # set of grade data for each part. + for(my $Version=1; $Version<=$LatestVersion; $Version++) { + foreach my $part (split(/\:/,$cache->{$sequence.':'. + $problemID. + ':parts'})) { + + if(!defined($cache->{$name.":$Version:$problem". + ":resource.$part.solved"})) { + # No grade for this submission, so skip + next; + } + + my $tries=0; + my $code='U'; + + $tries = $cache->{$name.":$Version:$problem". + ":resource.$part.tries"}; + $partData{$part.':tries'}=($tries) ? $tries : 0; + + my $val = $cache->{$name.":$Version:$problem". + ":resource.$part.solved"}; + if ($val eq 'correct_by_student') {$code = 'Y';} + elsif ($val eq 'correct_by_override') {$code = 'y';} + elsif ($val eq 'incorrect_attempted') {$code = 'N';} + elsif ($val eq 'incorrect_by_override'){$code = 'N';} + elsif ($val eq 'excused') {$code = 'x';} + $partData{$part.':code'}=$code; + } + } + + # Loop through all the parts for the current problem in the + # correct order and prepare the output + foreach (split(/\:/,$cache->{$sequence.':'.$problemID. + ':parts'})) { + $codes .= $partData{$_.':code'}.','; + $attempts .= $partData{$_.':tries'}.','; + } + } + $codes =~ s/,$//; + $attempts =~ s/,$//; + $Str .= ''.$codes.' | '; + $Str .= ''.$attempts.' | '; + $Str .= '
Select Map | '."\n"; + $Ptr .= ''; + $Ptr .= &Apache::lonhtmlcommon::MapOptions(\%cache, 'ProblemStatistics'); + $Ptr .= ' |
Select Map | '."\n"; + $Ptr .= ''; + $Ptr .= &Apache::lonhtmlcommon::MapOptions(\%cache, 'StudentAssessment'); + $Ptr .= ' | ||||||
Select Student | '."\n"; + $Ptr .= ''."\n"; + $Ptr .= &Apache::lonhtmlcommon::StudentOptions(\%cache, $students, + $selectedName, + 'StudentAssessment'); + $Ptr .= ' | ||||||
';
+ $Ptr .= 'print($Ptr);
+
+ if($selectedName eq 'No Student Selected') {
+ $r->print('WARNING: '); + $r->print('Please select a student'); + return; + } + + my $selected=0; + foreach (@$students) { + next if ($_ ne $selectedName && + $selectedName ne 'All Students'); + $selected = 1; + my $courseData = + &Apache::loncoursedata::DownloadStudentCourseInformation($_, + $courseID); + last if ($c->aborted()); + if(tie(%cache,'GDBM_File',$cacheDB,&GDBM_WRCREAT,0640)) { + &Apache::loncoursedata::ProcessStudentData(\%cache, + $courseData, $_); + if(!$c->aborted()) { $r->print(&StudentReport(\%cache, $_)); } + untie(%cache); + } + } + if($selected == 0) { + $r->print('WARNING: '); + $r->print('Please select a student'); + return; + } + + return; +} + +sub BuildClasslist { + my ($cacheDB,$students,$studentInformation,$headings,$spacePadding)=@_; + + my %cache; + unless(tie(%cache,'GDBM_File',$cacheDB,&GDBM_READER,0640)) { + return 'Unable to tie database.'; + } + + my $Str=''; + $Str .= '
|