static function performLikelihoodRateFilter($con, $previousTable, $currentTable, $args) { if ($args == null || count($args) == 0) { return; } else { if (count($args) != 2) { REDLog::writeErrLog("Args for Likelihood Rate Test Filter are incomplete, please have a check"); } } $dnaVcfTable = $args[0]; $threshold = (double) $args[1]; TableCreator::createFilterTable($con, $previousTable, $currentTable); REDLog::writeInfoLog("Start performing Likelihood Rate Test Filter"); $sqlClause1 = "select {$previousTable}.chrom,{$previousTable}.pos,{$previousTable}.AD,\n{$dnaVcfTable}.qual from {$previousTable},{$dnaVcfTable} where {$previousTable}.chrom=\n{$dnaVcfTable}.chrom and {$previousTable}.pos={$dnaVcfTable}.pos"; $rs = DatabaseManager::query1($con, $sqlClause1); $i = 0; while ($row = mysqli_fetch_array($rs)) { $chr = (string) $row[0]; $pos = (int) $row[1]; $ad = (string) $row[2]; $qual = (double) $row[3]; $pb = new SiteBean(); $pb->SiteBean1($chr, $pos); $pb->setAd($ad); $pb->setQual($qual); $siteBeans[$i] = $pb; $i++; } DatabaseManager::setAutoCommit($con, false); $count = 0; for ($j = 0; $j < $i; $j++) { $str = $siteBeans[$j]->getAd(); $section = explode("/", $str); $ref = (int) $section[0]; $alt = (int) $section[1]; if ($ref + $alt > 0) { $f_ml = 1.0 * $ref / ($ref + $alt); $y = pow($f_ml, $ref) * pow(1 - $f_ml, $alt); $y = log($y) / log(10.0); $judge = $y + $siteBeans[$j]->getQual() / 10.0; if ($judge >= $threshold) { $siteChr = $siteBeans[$j]->getChr(); $sitePos = $siteBeans[$j]->getPos(); $sqlClause2 = "insert into {$currentTable} select * from {$previousTable} where chrom='" . $siteChr . "' and pos=" . $sitePos; DatabaseManager::insertClause($con, $sqlClause2); if (++$count % 10000 == 0) { DatabaseManager::commit($con); } } } } DatabaseManager::commit($con); DatabaseManager::setAutoCommit($con, true); REDLog::writeInfoLog("End performing Likelihood Rate Test Filter"); }
static function performQualityControlFilter($con, $previousTable, $currentTable, $args) { $COMMIT_COUNTS_PER_ONCE = 10000; if ($args == null || count($args) == 0) { return; } elseif (count($args) != 2) { REDLog::writeErrLog("Args for Quality Control Filter are incomplete, please have a check"); } $quality = (double) $args[0]; $depth = (int) $args[1]; TableCreator::createFilterTable($con, $previousTable, $currentTable); REDLog::writeInfoLog("Start performing Quality Control Filter"); try { $count = 0; $str = array("CHROM", "POS", "AD"); $rs = DatabaseManager::query2($con, $previousTable, $str, null, null); $i = 0; while ($row = mysqli_fetch_array($rs)) { if ($row[2] != null) { $siteBean = new SiteBean(); $siteBean->SiteBean1($row[0], $row[1]); $siteBean->setAd($row[2]); $siteBeans[$i] = $siteBean; $i = $i + 1; } } DatabaseManager::setAutoCommit($con, false); for ($j = 0; $j < $i; $j++) { $str = $siteBeans[$j]->getAd(); $section = explode("/", $str); $ref_n = (int) $section[0]; $alt_n = (int) $section[1]; $pos = $siteBeans[$j]->getPos(); $chr = $siteBeans[$j]->getChr(); if ($ref_n + $alt_n >= $depth) { $sqlClause = "insert into " . $currentTable . " (select * from " . $previousTable . " where filter='PASS' and pos={$pos} and qual>=" . $quality . " and chrom='" . $chr . "')"; $v = mysqli_query($con, $sqlClause); if (++$count % $COMMIT_COUNTS_PER_ONCE == 0) { DatabaseManager::commit($con); } } } DatabaseManager::commit($con); DatabaseManager::setAutoCommit($con, true); if (!$v) { throw new Exception("Error execute sql clause in QualityControlFilter:performFilter()"); } } catch (Exception $e) { REDLog::writeErrLog($e->getMessage()); } REDLog::writeInfoLog("End performing Quality Control Filter"); }