static function performDNARNAFilter($con, $previousTable, $currentTable, $args) { if ($args == null || count($args) == 0) { return; } else { if (count($args) != 2) { REDLog::writeErrLog("Args for DNA-RNA Filter are incomplete, please have a check"); } } TableCreator::createFilterTable($con, $previousTable, $currentTable); REDLog::writeInfoLog("Start performing DNA-RNA Filter"); $dnaVcfTable = $args[0]; $editingType = $args[1]; $negativeType = REDTools::getNegativeStrandEditingType($editingType); try { $num1 = substr($editingType, 0, 1); $num2 = substr($negativeType, 0, 1); $sqlClause = "insert into {$currentTable} select * from {$previousTable} where exists (select chrom\nfrom {$dnaVcfTable} where ({$dnaVcfTable}.chrom={$previousTable}.chrom and {$dnaVcfTable}.pos={$previousTable}.pos and (\n{$dnaVcfTable}.ref='{$num1}' or {$dnaVcfTable}.ref='{$num2}')))"; $v = mysqli_query($con, $sqlClause); if (!$v) { throw new Exception("Error execute sql clause in performDNARNAFilter"); } } catch (Exception $e) { REDLog::writeErrLog($e->getMessage()); } REDLog::writeInfoLog("End performing DNA-RNA Filter"); }
static function loadDbSNPTable($con, $dbSNPPath) { REDLog::writeInfoLog("Start loading dbSNP file into database"); $dbSNPTable = "dbsnp_database"; try { if (!DatabaseManager::hasEstablishTable($con, $dbSNPTable)) { self::createDBSNPTable($con, $dbSNPTable); $count = 0; $fp = fopen($dbSNPPath, 'r'); while ($line = fgets($fp) != null) { if (strpos($line, "#") === 0) { $count++; } else { break; } } fclose($fp); $sqlClause = "load data local infile '{$dbSNPPath}' into table {$dbSNPTable} IGNORE {$count} LINES"; //fields terminated by '\t' lines terminated by '\n' echo $sqlClause; $v = mysqli_query($con, $sqlClause); if (!$v) { throw new Exception("Error execute sql clause in loadDbSNPTable()"); } } } catch (Exception $e) { REDLog::writeErrLog($e->getMessage()); } REDLog::writeInfoLog("End loading dbSNP file into database"); }
static function loadRepeatTable($con, $repeatPath) { REDLog::writeInfoLog("Start loading RepeatMasker file into database"); $repeatTable = "repeat_masker"; try { if (!DatabaseManager::hasEstablishTable($con, $repeatTable)) { self::createRepeatRegionsTable($con, $repeatTable); DatabaseManager::setAutoCommit($con, false); $count = 0; $fp = fopen($repeatPath, 'r'); fgets($fp); fgets($fp); fgets($fp); while (($line = fgets($fp)) != null) { $line1 = trim($line); $section = explode(" ", preg_replace("/\\s(?=\\s)/", "\\1", $line1)); # /[\s]+/ $sqlClause = "insert into {$repeatTable}(chrom,begin,end,type) values('{$section['4']}','{$section['5']}','{$section['6']}','{$section['10']}')"; $v = mysqli_query($con, $sqlClause); if (++$count % 10000 == 0) { DatabaseManager::commit($con); } } DatabaseManager::commit($con); DatabaseManager::setAutoCommit($con, true); if (!$v) { throw new Exception("Error execute sql clause in loadRepeatTable()\n"); } } } catch (Exception $e) { REDLog::writeErrLog($e->getMessage()); } fclose($fp); REDLog::writeInfoLog("End loading RepeatMasker file into database"); }
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"); }
static function loadDarnedTable($con, $darnedPath) { REDLog::writeInfoLog("Start loading DARNED file into database"); $darnedTable = "darned_database"; if (!DatabaseManager::hasEstablishTable($con, $darnedTable)) { self::createDARNEDTable($con, $darnedTable); try { $count = 0; DatabaseManager::setAutoCommit($con, false); $fp = fopen($darnedPath, 'r'); fgets($fp); while (($line = fgets($fp)) != null) { $line1 = trim($line); $section = explode("\t", $line1); $stringBulider = "insert into " . $darnedTable . "(chrom,coordinate,strand,inchr,inrna) values("; for ($i = 0; $i < 5; $i++) { if ($i == 0) { $stringBulider = $stringBulider . "'chr" . $section[$i] . "',"; } else { if ($i == 4) { $sec = str_replace("I", "G", $section[$i]); $stringBulider = $stringBulider . "'" . $sec . "'"; } else { if ($i == 1) { $stringBulider = $stringBulider . $section[$i] . ","; } else { $stringBulider = $stringBulider . "'" . $section[$i] . "',"; } } } } $stringBulider = $stringBulider . ")"; $v = mysqli_query($con, $stringBulider); if (!$v) { throw new Exception("Error execute sql clause in loadDarnedTable()"); } if (++$count % 10000 == 0) { DatabaseManager::commit($con); } DatabaseManager::commit($con); DatabaseManager::setAutoCommit($con, true); } } catch (Exception $e) { REDLog::writeErrLog($e->getMessage()); } } REDLog::writeInfoLog("End loading DARNED file into database"); }
static function performKnownSNPFilter($con, $previousTable, $currentTable, $args) { REDLog::writeInfoLog("Start performing Known SNP Filter"); TableCreator::createFilterTable($con, $previousTable, $currentTable); $dbSnpTable = "dbsnp_database"; try { $sqlClause = "insert into {$currentTable} select * from {$previousTable} where not exists (select chrom from\n{$dbSnpTable} where ({$dbSnpTable}.chrom={$previousTable}.chrom and {$dbSnpTable}.pos={$previousTable}.pos))"; $v = mysqli_query($con, $sqlClause); if (!$v) { throw new Exception("Error execute sql clause in performKnownSNPFilter"); } } catch (Exception $e) { REDLog::writeErrLog($e->getMessage()); } REDLog::writeInfoLog("End performing Known SNP Filter"); }
static function loadSpliceJunctionTable($con, $spliceJunctionPath) { REDLog::writeInfoLog("Start loading Gene Annotation File into database"); $spliceJunctionTable = "splice_junction"; if (!DatabaseManager::hasEstablishTable($con, $spliceJunctionTable)) { self::createSpliceJunctionTable($con, $spliceJunctionTable); try { $sqlClause = "load data local infile '{$spliceJunctionPath}' into table {$spliceJunctionTable}"; /*fields terminated by '\t' lines terminated by '\n'*/ $v = mysqli_query($con, $sqlClause); if (!$v) { throw new Exception("Error execute sql clause in loadSpliceJunctionTable()"); } } catch (Exception $e) { REDLog::writeErrLog($e->getMessage()); } } REDLog::writeInfoLog("End loading Gene Annotation File into database"); }
static function loadRefSeqGeneTable($con, $refSeqGenePath) { REDLog::writeInfoLog("Start loading Ref Seq Gene File into database"); $refseqGeneTableName = "reference_gene"; if (!DatabaseManager::hasEstablishTable($con, $refseqGeneTableName)) { self::createRefSeqGeneTable($con, $refseqGeneTableName); try { $sqlClause = "load data local infile '" . $refSeqGenePath . "' into table " . $refseqGeneTableName; /*." fields terminated" ."by '\t' lines terminated by '\n'";*/ /*echo $sqlClause;*/ $v = mysqli_query($con, $sqlClause); if (!$v) { throw new Exception("Error execute sql clause in loadRefSeqGeneTable()"); } } catch (Exception $e) { REDLog::writeErrLog($e->getMessage()); } } REDLog::writeInfoLog("End loading Ref Seq Gene File into database"); }
static function performRepeatRegionsFilter($con, $previousTable, $currentTable, $args) { TableCreator::createFilterTable($con, $previousTable, $currentTable); REDLog::writeInfoLog("Start performing Repeat Regions Filter"); $repeatTable = "repeat_masker"; try { $sqlClause1 = "insert into " . $currentTable . " select * from " . $previousTable . " where not exists (select * from " . $repeatTable . " where (" . $repeatTable . ".chrom= " . $previousTable . ".chrom and " . $repeatTable . ".begin<=" . $previousTable . ".pos and " . $repeatTable . ".end>=" . $previousTable . ".pos)) "; $a = mysqli_query($con, $sqlClause1); if (!$a) { throw new Exception("Error execute sqlA clause in performRepeatRegionsFilter"); } REDLog::writeInfoLog("Start finding sites in Alu Regions"); $tempTable = REDTools::getRandomString(10); $sqlClause2 = "create temporary table {$tempTable} like {$currentTable}"; $b = mysqli_query($con, $sqlClause2); if (!$b) { throw new Exception("Error execute sqlB clause in performRepeatRegionsFilter"); } $sqlClause3 = "insert into {$tempTable} select * from {$previousTable} where exists (select chrom from {$repeatTable}\nwhere {$repeatTable}.chrom = {$previousTable}.chrom and {$repeatTable}.begin<={$previousTable}.pos and\n{$repeatTable}.end>={$previousTable}.pos and {$repeatTable}.type='SINE/Alu')"; $c = mysqli_query($con, $sqlClause3); if (!$c) { throw new Exception("Error execute sqlC clause in performRepeatRegionsFilter"); } $sqlClause4 = "update {$tempTable} set alu='T'"; $d = mysqli_query($con, $sqlClause4); if (!$d) { throw new Exception("Error execute sqlD clause in performRepeatRegionsFilter"); } $sqlClause5 = "insert into {$currentTable} select * from {$tempTable}"; $e = mysqli_query($con, $sqlClause5); if (!$e) { throw new Exception("Error execute sqlE clause in performRepeatRegionsFilter"); } DatabaseManager::deleteTable($con, $tempTable); REDLog::writeInfoLog("End finding sites in Alu Regions"); } catch (Exception $e) { REDLog::writeErrLog($e->getMessage()); } REDLog::writeInfoLog("End performing Repeat Regions Filter"); }
static function performEditingTypeFilter($con, $previousTable, $currentTable, $args) { REDLog::writeInfoLog('Star executing Editing Type Filter'); TableCreator::createFilterTable($con, $previousTable, $currentTable); $refAlt = $args; $refAlt2 = REDTools::getNegativeStrandEditingType($refAlt); $sql11 = substr($refAlt, 0, 1); $sql12 = substr($refAlt, 1); $sql21 = substr($refAlt2, 0, 1); $sql22 = substr($refAlt2, 1); $sql1 = "insert into " . $currentTable . " select * from " . $previousTable . " WHERE REF='{$sql11}' AND ALT='{$sql12}' AND GT!='0/0'"; $v = DatabaseManager::insertClause($con, $sql1); if (!$v) { REDLog::writeErrLog('There is a syntax error for SQL clause:' . $sql1); } $sql2 = "insert into " . $currentTable . " select * from " . $previousTable . " WHERE REF='{$sql21}' AND ALT='{$sql22}' AND GT!='0/0'"; $v = DatabaseManager::insertClause($con, $sql2); if (!$v) { REDLog::writeErrLog('There is a syntax error for SQL clause:' . $sql2); } REDLog::writeInfoLog('End executing Editing Type Filter'); }
static function performSpliceJunctionFilter($con, $previousTable, $currentTable, $args) { if ($args == null || $args == 0) { return; } else { if (count($args) != 1) { REDLog::writeErrLog("Args for Splice Junction Filter are incomplete, please have a check"); } } TableCreator::createFilterTable($con, $previousTable, $currentTable); REDLog::writeInfoLog("Start performing Splice Junction Filter..."); $spliceJunctionTable = "splice_junction"; $edge = (int) $args[0]; try { $sqlClause = "insert into {$currentTable} select * from {$previousTable} where not exists (select chrom from\n{$spliceJunctionTable} where ({$spliceJunctionTable}.type='CDS' and {$spliceJunctionTable}.chrom={$previousTable}.chrom\nand (({$spliceJunctionTable}.begin<{$previousTable}.pos+{$edge} and {$spliceJunctionTable}.begin>{$previousTable}.pos-{$edge})\nor ({$spliceJunctionTable}.end<{$previousTable}.pos+{$edge} and {$spliceJunctionTable}.end>{$previousTable}.pos-{$edge}))))"; $v = mysqli_query($con, $sqlClause); if (!$v) { throw new Exception("Error execute sql clause in performSpliceJunctionFilter"); } } catch (Exception $e) { REDLog::writeErrLog($e->getMessage()); } REDLog::writeInfoLog("End performing Splice Junction Filter..."); }
static function parseMultiRNAVCFFile($con, $vcfPath, $userid) { $altColumn = 4; $infoColumn = 7; $formatColumnIndex = 8; $columnLength = 0; REDLog::writeInfoLog("Start parsing RNA VCF file"); try { $fp = fopen($vcfPath, 'r'); DatabaseManager::setAutoCommit($con, false); $lineCount = 0; $hasEstablishTable = false; while (($line1 = fgets($fp)) != null) { $line = trim($line1); if (strpos($line, "##") === 0) { continue; } if (strpos($line, "#") === 0) { $columnStrings = explode("\t", substr($line, 1)); $columnLength = count($columnStrings); $sampleNamesLength = $columnLength - $formatColumnIndex - 1; for ($j = 0; $j < $sampleNamesLength; $j++) { $sampleNames[$j] = $columnStrings[$formatColumnIndex + 1 + $j]; } $tableBuilders = "{$columnStrings['0']} varchar(30),{$columnStrings['1']} int,{$columnStrings['2']} varchar(30),\n\t\t\t\t {$columnStrings['3']} varchar(5),{$columnStrings['4']} varchar(5),{$columnStrings['5']} float(10,2),\n\t\t\t\t {$columnStrings['6']} text,{$columnStrings['7']} text,"; continue; } if ($sampleNames == null) { throw new Exception("There are no samples in this vcf file"); } $sections = explode("\t", $line); for ($i = $formatColumnIndex + 1; $i < $columnLength; $i++) { if (!strpos($sections[$i], ".")) { $contain = false; $rr = 1; } else { $contain = true; $rr = 2; } if (strcmp($sections[$altColumn], ".") == 0 || $contain) { continue; } $formatColumns = explode(":", $sections[$formatColumnIndex]); $formatLength = count($formatColumns); $dataColumns = explode(":", str_replace(",", "/", $sections[$i])); $dataColumnLength = count($dataColumns); if ($formatLength != $dataColumnLength) { continue; } if (!$hasEstablishTable) { for ($j = 0; $j < $formatLength; $j++) { $formatColumn = $formatColumns[$j]; $tableBuilders = $tableBuilders . $formatColumn . " text,"; } $tableBuilders = $tableBuilders . "alu varchar(1) default 'F',index(chrom,pos)"; for ($j = 0, $len = count($sampleNames); $j < $len; $j++) { $tableName[$j] = $userid . "_" . $sampleNames[$j] . "_rnavcf" . "_" . date("Ymdhisa"); DatabaseManager::deleteTable($con, $tableName[$j]); $createClause = "create table " . $tableName[$j] . "({$tableBuilders})"; $v = mysqli_query($con, $createClause); if (!$v) { throw new Exception("Error create RNATable."); } } DatabaseManager::commit($con); $hasEstablishTable = true; } $sqlClause = "insert into " . $tableName[$i - $formatColumnIndex - 1] . "("; for ($j = 0; $j < $formatColumnIndex; $j++) { $sqlClause = $sqlClause . $columnStrings[$j] . ","; } for ($j = 0; $j < $formatLength; $j++) { $formatColumn = $formatColumns[$j]; $sqlClause = $sqlClause . $formatColumn . ","; } $sqlClause = substr($sqlClause, 0, strlen($sqlClause) - 1); $sqlClause = $sqlClause . ") values('"; if (strpos($sections[0], "ch") === 0 && !(strpos($sections[0], "chr") === 0)) { $str = str_replace("ch", "chr", $sections[0]) . "'"; $sqlClause = $sqlClause . $str; } else { if (strlen($sections[0]) < 3) { $sqlClause = $sqlClause . "chr" . $sections[0] . "'"; } else { $sqlClause = $sqlClause . $sections[0] . "'"; } } for ($j = 1; $j < $formatColumnIndex; $j++) { $sqlClause = $sqlClause . ",'" . $sections[$j] . "'"; } for ($j = 0; $j < count($dataColumns); $j++) { $dataColumn = $dataColumns[$j]; $sqlClause = $sqlClause . ",'" . $dataColumn . "'"; } $sqlClause = $sqlClause . ")"; $v = mysqli_query($con, $sqlClause); if (!$v) { throw new Exception("Error execute sql clause: {$sqlClause}"); } if (++$lineCount % 10000 == 0) { DatabaseManager::commit($con); } } } DatabaseManager::commit($con); DatabaseManager::setAutoCommit($con, true); } catch (Exception $e) { REDLog::writeInfoLog($e->getMessage()); } REDLog::writeInfoLog("End parsing RNA VCF file..."); return $tableName; }
static function executeFilters() { $startInfo = "RNA Editing Detector start\r\n" . "--------------------------\r\n" . "--------------------------\r\n"; REDLog::writeInfoLog($startInfo); $infoPath = "../infoFile"; if (($lineArray = REDTools::readInfoFile($infoPath)) != false) { $con = DatabaseConnect::mysqlConnect(); $userid = $lineArray[0]; $rnaVcfName = $lineArray[1]; $dnaVcfName = $lineArray[2]; $etArgs = $lineArray[3]; $qcArray = explode('/', $lineArray[4]); $qcArgs = array($qcArray[0], $qcArray[1]); $rrArgs = array(0); $sjArgs = array($lineArray[5]); $ksArgs = array(0); $drArgs = array(); //assignment in DRMode $lrArgs = array(); $storgePath = "G:/Taruca/data/"; $rnaVcfFilePath = $storgePath . $rnaVcfName; $dnaVcfFilePath = $storgePath . $dnaVcfName; if ($rnaVcfName !== "null") { //denove mode //load RNAVcfFile $rnaVcfTableNameArray = RNAVCFParser::parseMultiRNAVCFFile($con, $rnaVcfFilePath, $userid); if ($dnaVcfName !== "null") { $dnaVcfTableNameArray = DNAVCFParser::parseMultiDNAVCFFile($con, $dnaVcfFilePath, $userid); } if (count($rnaVcfTableNameArray) != 0) { $i = 0; foreach ($rnaVcfTableNameArray as $rnaVcfTableName) { $etTableName = REDTools::getFirstHalfTableName($rnaVcfTableName) . EditingTypeFilter::getName() . "_" . date("Ymdhisa"); EditingTypeFilter::performEditingTypeFilter($con, $rnaVcfTableName, $etTableName, $etArgs); $qcTableName = REDTools::getFirstHalfTableName($etTableName) . QualityControlFilter::getName() . "_" . date("Ymdhisa"); QualityControlFilter::performQualityControlFilter($con, $etTableName, $qcTableName, $qcArgs); $rrTableName = REDTools::getFirstHalfTableName($qcTableName) . RepeatRegionsFilter::getName() . "_" . date("Ymdhisa"); RepeatRegionsFilter::performRepeatRegionsFilter($con, $qcTableName, $rrTableName, $rrArgs); $sjTableName = REDTools::getFirstHalfTableName($rrTableName) . SpliceJunctionFilter::getName() . "_" . date("Ymdhisa"); SpliceJunctionFilter::performSpliceJunctionFilter($con, $rrTableName, $sjTableName, $sjArgs); $ksTableName = REDTools::getFirstHalfTableName($sjTableName) . KnownSNPFilter::getName() . "_" . date("Ymdhisa"); KnownSNPFilter::performKnownSNPFilter($con, $sjTableName, $ksTableName, $ksArgs); if ($dnaVcfName == "null") { REDTools::writeTableIntoDb($con, $userid, $ksTableName); } else { if (count($dnaVcfTableNameArray) == count($rnaVcfTableNameArray)) { $drTableName = REDTools::getFirstHalfTableName($ksTableName) . DNARNAFilter::getName() . "_" . date("Ymdhisa"); $drArgs[0] = $dnaVcfTableNameArray[$i]; $drArgs[1] = $lineArray[6]; DNARNAFilter::performDNARNAFilter($con, $ksTableName, $drTableName, $drArgs); $lrTableName = REDTools::getFirstHalfTableName($drTableName) . LikelihoodRateFilter::getName() . "_" . date("Ymdhisa"); $lrArgs[0] = $dnaVcfTableNameArray[$i]; $lrArgs[1] = $lineArray[7]; LikelihoodRateFilter::performLikelihoodRateFilter($con, $drTableName, $lrTableName, $lrArgs); REDTools::writeTableIntoDb($con, $userid, $lrTableName); } else { REDLog::writeErrLog("The num of DNA sample is different from RNA sample, please check your vcf file"); } } $i++; } } else { REDLog::writeErrLog("There is no rnaVcfTables"); } } $endInfo = "------------------------\r\n" . "------------------------\r\n" . "RNA Editing Detector end\r\n"; REDLog::writeInfoLog("{$endInfo}"); } else { //sleep 10 minute,20s to test sleep(20); self::executeFilters(); } }