%3 ::nx::Object ::nx::Object ::xowf::test_item::grading::Grading ::xowf::test_item::grading::Grading calc_grade grading_dict init print ::xowf::test_item::grading::Grading->::nx::Object ::xowf::test_item::grading::GradingNone ::xowf::test_item::grading::GradingNone grade ::xowf::test_item::grading::GradingNone->::xowf::test_item::grading::Grading ::xowf::test_item::grading::GradingRoundNone ::xowf::test_item::grading::GradingRoundNone grade ::xowf::test_item::grading::GradingRoundNone->::xowf::test_item::grading::Grading ::xowf::test_item::grading::GradingRoundPoints ::xowf::test_item::grading::GradingRoundPoints grade ::xowf::test_item::grading::GradingRoundPoints->::xowf::test_item::grading::Grading ::xowf::test_item::grading::GradingRoundPercentage ::xowf::test_item::grading::GradingRoundPercentage grade ::xowf::test_item::grading::GradingRoundPercentage->::xowf::test_item::grading::Grading

Class ::xowf::test_item::grading::Grading

::xowf::test_item::grading::Grading[i] create ... \
           [ -csv:required csv:required ] \
           [ -percentage_boundaries:required percentage_boundaries:required ] \
           [ -precision (default "") ] \
           [ -title (default "") ]

Superclass representing a generic grading
Defined in packages/xowf/tcl/grading-procs.tcl

Class Relations

  • class: ::nx::Class[i]
  • superclass: ::nx::Object[i]
  • subclass: ::xowf::test_item::grading::GradingNone[i], ::xowf::test_item::grading::GradingRoundNone[i], ::xowf::test_item::grading::GradingRoundPoints[i], ::xowf::test_item::grading::GradingRoundPercentage[i]
::nx::Class create ::xowf::test_item::grading::Grading \
     -superclass ::nx::Object

Methods (to be applied on instances)

  • grading_dict (scripted, public)

     <instance of xowf::test_item::grading::Grading[i]> grading_dict \
        achieved_points

    Important dict members of "achieved_points": - achievedPoints: points that the student has achieved in her exam - achievablePoints: points that the student could have achieved so far - totalPoints: points that the student can achieve when finishing the exam achieved_points: {achievedPoints 4.0 achievablePoints 4 totalPoints 4} percentage_mapping: {50.0 60.0 70.0 80.0} While "achievedPoints" and "achievablePoints" are calculated by iterating over the submitted values, "totalPoints" contains the sum of points of all questions of the exam, no matter if these were answered or not.

    Parameters:
    achieved_points

    Partial Call Graph (max 5 caller/called nodes):
    %3 xo::show_stack xo::show_stack xowf::test_item::grading::Grading instproc grading_dict xowf::test_item::grading::Grading instproc grading_dict xowf::test_item::grading::Grading instproc grading_dict->xo::show_stack

    Testcases:
    No testcase defined.
    if {![dict exists $achieved_points achievablePoints] && [dict exists $achieved_points totalPoints]} {
      ns_log warning "test_item::grading legacy call, use 'achievablePoints' instead of 'totalPoints'"
      dict set achieved_points achievablePoints [dict get $achieved_points totalPoints]
    }
    #
    # When the "achievedPoints" member is set to empty, and "details" are
    # provided, the caller can request a new calculation based on
    # the "details" member.
    #
    if {[dict get $achieved_points achievedPoints] eq ""
        && [dict exists $achieved_points details]
      } {
      set achievablePoints 0
      set achievedPoints 0
      #ns_log notice "RECALC in grading_dict "
      foreach detail [dict get $achieved_points details] {
        #ns_log notice "RECALC in grading_dict '$detail'"
        set achievedPoints   [expr {$achievedPoints   + [dict get $detail achieved]}]
        set achievablePoints [expr {$achievablePoints + [dict get $detail achievable]}]
      }
      dict set achieved_points achievedPoints $achievedPoints
      dict set achieved_points achievablePoints $achievablePoints
    }
    
    foreach key {
      achievedPoints
      achievablePoints
      totalPoints
    } {
      if {![dict exists $achieved_points $key]} {
        ns_log warning "test_item::grading dict without $key: $achieved_points"
        ::xo::show_stack
        dict set achieved_points $key 0
      }
    }
    #
    # Format all values with two comma precision. The values
    # achievedPointsRounded and "percentageRounded" are rounded to
    # the custom precision.
    #
    dict with achieved_points {
      dict set achieved_points achievedPointsRounded [format %.${:precision}$achievedPoints]
      set achievedPoints [format %.2f $achievedPoints]
      set percentage  [format %.2f [expr {$totalPoints > 0 ? ($achievedPoints*100.0/$totalPoints) : 0}]]
      dict set achieved_points percentage $percentage
      dict set achieved_points percentageRounded [format %.${:precision}$percentage]
    }
    #ns_log notice "R=$achieved_points"
    return $achieved_points
  • print (scripted, public)

     <instance of xowf::test_item::grading::Grading[i]> print \
        -achieved_points achieved_points 

    Return a dict containing the members "panel" and "csv" depending on the type of rounding options

    Switches:
    -achieved_points
    (required)

    Partial Call Graph (max 5 caller/called nodes):
    %3 test_create_test_items create_test_items (test xowf) xowf::test_item::grading::Grading instproc print xowf::test_item::grading::Grading instproc print test_create_test_items->xowf::test_item::grading::Grading instproc print _ _ (public) xowf::test_item::grading::Grading instproc print->_

    Testcases:
    create_test_items
    set achieved_points  [:grading_dict $achieved_points]
    set grade            [:grade -achieved_points $achieved_points]
    dict with achieved_points {
      return [list panel [_ xowf.panel_[namespace tail [:info class]]] csv [subst ${:csv}]]
    }