-
Notifications
You must be signed in to change notification settings - Fork 175
Instrument Scoring
HOME > SETUP > DEVELOPER'S INSTRUMENT GUIDE > HOW TO CODE AN INSTRUMENT > SCORING
##Scoring Algorithm Script
If an instrument form should include a scoring algorithm, a scoring script can be coded manually to accompany the form. This scoring script will be executed by Loris automatically when a user saves data entered in the instrument form via their browser. The script should be stored as an executable file in the project/instruments/ directory, and the filename must be called Instrument_name.score
.
It can be coded in any scripting language, but we suggest using our PHP example below. CommentID is passed as the first argument, after which it selects from Instrument_table, performs calculations and updates using the CommentID. To test your scoring script, run it from the tools directory and provide CommentID. Below is a sample scoring script for BMI calculation - this file can be copied from the docs/instruments/ directory:
<?php
/* Test_name Scoring
* Description of the scoring algorithm
* @category Instrument
* @package Test_name
* @author Author
* @license Loris License */
require_once "../tools/generic_includes.php";
require_once "Database.class.inc";
$CommentID = $argv[1];
$db =& Database::singleton();
$query = "SELECT * from 'test_name' WHERE CommentID = :CommentID";
$WhereCriteria = array('CommentID'=>$CommentID);
$result = $db->pselectRow($query, $WhereCriteria);
$scores = array();
//check unit of measurement
if ($result['unit_of_measurement'] == 'standard') {
$query_std = "SELECT bmi_value FROM bmi_standard WHERE height_feet =:hgt_feet AND height_inches=:hgt_inches AND weight=:wgt_pounds";
$Where = array('hgt_feet'=>$result['height_feet'], 'hgt_inches'=>$result['height_inches'],
'wgt_pounds'=>$result['weight_pound']);
$scores['bmi_value'] = $db->pselectOne($query_std, $Where);
} else if ($result['unit_of_measurement'] == metric) {$query_metric = "SELECT bmi_value FROM bmi_metric WHERE height_cms=:hgt_cms'' AND weight_kgs=:wgt_kgs";
$Where = array('hgt_cms'=>$result['height_cms'], 'hgt_kgs'=>$result['weight_kgs']);
$scores['bmi_value'] = $db->pselectOne($query_metric, $Where);}
if ($bmi_value <= 18.5) { $scores['bmi_category'] = 'Underweight';}
else if ($bmi_value > 18.5 && $bmi_value <= 24.9 ) {$scores['bmi_category'] = 'Normal weight';}
else if ($bmi_value >= 25 && $bmi_value <= 29.9) {$scores['bmi_category’] = 'Overweight';}
else if ($bmi_value >= 30) {$scores['bmi_category'] = 'Obesity';}
//save scores
$result = $db->update('test_name', $scores, $WhereCriteria);
##Scoring Function If your instrument was coded manually in PHP, then your scoring algorithm can be implemented within your instrument’s PHP file as a function. The function must be named score. Below is an example of what a scoring function typically looks like:
/**
* Example scoring function
*
* @return void
*/
function score() {
if ($this->_determineDataEntryCompletionStatus() == "Incomplete") {
return;
}
$db =& Database::singleton();
//Get raw questions point values
$query = "SELECT * FROM " . $this->table .
" WHERE CommentID='" . $this->getCommentID() . "'";
$record = $db->pselectRow($query, null);
$score = array(
'score_1' => null,
);
$score['score_1'] = true;
if ($record['abc_1'] <> 'yes') {
$score['score_1'] = false;
}
// save the scores
$db->update(
$this->table,
$score,
array('CommentID'=>$this->getCommentID())
);
}
##Reliability Scoring Under construction.