/** * $outfile will be overwritten with a data structure suitable for * sortable_table.php; see that code for documentation. * $snapfile will be overwritten with an HTML snapshot of the unsorted table; * if null, this will be skipped. * $resout is the file name for the table of residue analysis required for horiz * chart. if null, this will be skipped. * $clash is the data structure from loadClashlist() * $rama is the data structure from loadRamachandran() * $rota is the data structure from loadRotamer() * $cbdev is the data structure from loadCbetaDev() * $pperp is the data structure from loadBasePhosPerp() * $suites is the data structure from loadSuitenameReport() * Any of them can be set to null if the data is unavailable. */ function writeMulticritChart($infile, $outfile, $snapfile, $resout, $clash, $rama, $rota, $cbdev, $pperp, $suites, $bbonds, $bangles, $cablam, $omega, $outliersOnly = false, $doHtmlTable = true, $cleanupAltloc = true) { $startTime = time(); //{{{ Process validation data // Make sure all residues are represented, and in the right order. $res = listResidues($infile); //foreach($res as $k => $v) //{ // echo $k.$v."\n"; //} $alts = mapAlternates($res); //foreach($alts as $k => $v) //{ // foreach($alts[$k] as $i => $j) // { // echo $k.$j."\n"; // } //} $Bfact = listResidueBfactors($infile); $Bfact = $Bfact['res']; $orderIndex = 0; // used to maintain original PDB order on sorting. foreach ($res as $k => $v) { $res[$k] = array('cnit' => $v, 'order' => $orderIndex++, 'resHiB' => $Bfact[$v]); } $cell_color_mild = '#ffb3cc'; $cell_color_bad = '#ff76a9'; //this is used for all xxx_isbad not set otherwise $cell_color_severe = '#ee4d4d'; if (is_array($clash)) { $with = $clash['clashes-with']; foreach ($clash['clashes'] as $cnit => $worst) { $res[$cnit]['clash_val'] = $worst; $res[$cnit]['clash'] = sprintf("%.2f", $worst) . "Å<br><small>" . $with[$cnit]['srcatom'] . " with " . $with[$cnit]['dstcnit'] . " " . $with[$cnit]['dstatom'] . "</small>"; $res[$cnit]['clash_isbad'] = true; $res[$cnit]['any_isbad'] = true; if ($res[$cnit]['clash_val'] < 0.5) { $res[$cnit]['clash_color'] = $cell_color_mild; } elseif ($res[$cnit]['clash_val'] > 0.9) { $res[$cnit]['clash_color'] = $cell_color_severe; } //$res[$cnit]['clash_color'] = '#ff3333'; //echo "clash ".$cnit."\n"; } } //}}} if (is_array($rama)) { foreach ($rama as $item) { $res[$item['resName']]['rama_val'] = $item['scorePct']; $phipsi = sprintf("%.1f,%.1f", $item['phi'], $item['psi']); if (isset($item['type'])) { if ($item['eval'] == "OUTLIER") { $res[$item['resName']]['rama'] = "{$item['eval']} ({$item['scorePct']})%)<br><small>{$item['type']} / {$phipsi}</small>"; $res[$item['resName']]['rama_isbad'] = true; $res[$item['resName']]['any_isbad'] = true; // ensures that all outliers sort to the top, b/c 0.2 is a Gly outlier but not a General outlier $res[$item['resName']]['rama_val'] -= 100.0; } elseif ($item['eval'] == "Allowed") { $res[$item['resName']]['rama'] = "{$item['eval']} ({$item['scorePct']}%)<br><small>{$item['type']} / {$phipsi}</small>"; $res[$item['resName']]['rama_isbad'] = true; $res[$item['resName']]['any_isbad'] = true; $res[$item['resName']]['rama_color'] = $cell_color_mild; // ensures that all outliers sort to the top, b/c 0.2 is a Gly outlier but not a General outlier //$res[$item['resName']]['rama_val'] -= 100.0; $res[$item['resName']]['rama_val'] -= 50.0; } else { $res[$item['resName']]['rama'] = "{$item['eval']} ({$item['scorePct']}%)<br><small>{$item['type']} / {$phipsi}</small>"; } } } } //}}} if (is_array($rota)) { foreach ($rota as $item) { $res[$item['resName']]['rota_val'] = $item['scorePct']; #if($item['scorePct'] <= 1.0) if ($item['eval'] == 'OUTLIER') { $res[$item['resName']]['rota'] = "{$item['eval']} ({$item['scorePct']}%)<br><small>chi angles: " . formatChiAngles($item) . "</small>"; $res[$item['resName']]['rota_isbad'] = true; $res[$item['resName']]['any_isbad'] = true; $res[$item['resName']]['rota_val'] -= 100.0; //sorting hack } elseif ($item['eval'] == 'Allowed') { $res[$item['resName']]['rota'] = "{$item['eval']} ({$item['scorePct']}%) <i>{$item['rotamer']}</i><br><small>chi angles: " . formatChiAngles($item) . "</small>"; $res[$item['resName']]['rota_color'] = $cell_color_mild; $res[$item['resName']]['rota_val'] -= 50.0; //sorting hack } else { $res[$item['resName']]['rota'] = "{$item['eval']} ({$item['scorePct']}%) <i>{$item['rotamer']}</i><br><small>chi angles: " . formatChiAngles($item) . "</small>"; } } } //}}} if (is_array($cablam)) { //note: sorting keys off of cablam_val foreach ($cablam as $item) { $outlierType = trim($item['outlierType']); if ($outlierType == "CaBLAM Outlier") { $res[$item['resName']]['cablam'] = "{$item['outlierType']} ({$item['cablamScore']}%)<br><small>{$item['secStruc']}</small>"; $res[$item['resName']]['cablam_val'] = "{$item['cablamScore']}"; $res[$item['resName']]['any_isbad'] = true; $res[$item['resName']]['cablam_isbad'] = true; //$res[$item['resName']]['cablam_color'] = '#ff6699'; } elseif ($outlierType == "CaBLAM Disfavored") { $res[$item['resName']]['cablam'] = "{$item['outlierType']} ({$item['cablamScore']}%)<br><small>{$item['secStruc']}</small>"; $res[$item['resName']]['cablam_val'] = "{$item['cablamScore']}"; $res[$item['resName']]['any_isbad'] = true; $res[$item['resName']]['cablam_isbad'] = true; $res[$item['resName']]['cablam_color'] = $cell_color_mild; } elseif ($outlierType == "CA Geom Outlier") { $res[$item['resName']]['cablam'] = "{$item['outlierType']} ({$item['caGeomScore']}%)"; $res[$item['resName']]['cablam_val'] = "{$item['caGeomScore']}"; $res[$item['resName']]['any_isbad'] = true; $res[$item['resName']]['cablam_isbad'] = true; //$res[$item['resName']]['cablam_color'] = '#999999';//dark grey $res[$item['resName']]['cablam_color'] = $cell_color_severe; } else { $secStruc = ltrim(trim($item['secStruc']), 'try'); $res[$item['resName']]['cablam'] = "Favored ({$item['cablamScore']}%)<br><small>{$secStruc}</small>"; $res[$item['resName']]['cablam_val'] = "{$item['cablamScore']}"; } } } //}}} if (is_array($cbdev)) { foreach ($cbdev as $item) { $res[$item['resName']]['cbdev_val'] = $item['dev']; if ($item['dev'] >= 0.25) { $res[$item['resName']]['cbdev'] = sprintf("%.2f", $item['dev']) . "Å"; $res[$item['resName']]['cbdev_isbad'] = true; $res[$item['resName']]['any_isbad'] = true; if ($item['dev'] >= 0.7) { $res[$item['resName']]['cbdev_color'] = $cell_color_severe; } } else { if ($res[$item['resName']]['cbdev'] == null) { //for fixing a bug where an ok alt conf dev would get reported instead of the bad dev. $res[$item['resName']]['cbdev'] = sprintf("%.2f", $item['dev']) . "Å"; } } } } //}}} if (is_array($omega)) { foreach ($omega as $item) { if ($item['conf'] == 'Cis') { $res[$item['resName']]['any_isbad'] = true; if ($item['type'] == 'General') { $res[$item['resName']]['omega'] = "{$item['conf']} nonPRO<br><small>omega= {$item['omega']}</small>"; $res[$item['resName']]['omega_val'] = "1"; //for column sort $res[$item['resName']]['omega_isbad'] = true; } elseif ($item['type'] == 'Pro') { $res[$item['resName']]['omega'] = "{$item['conf']} PRO<br><small>omega= {$item['omega']}</small>"; $res[$item['resName']]['omega_val'] = "2"; //for column sort } } elseif ($item['conf'] == 'Twisted') { $res[$item['resName']]['any_isbad'] = true; $res[$item['resName']]['omega_isbad'] = true; if ($item['type'] == 'General') { $res[$item['resName']]['omega'] = "{$item['conf']} nonPRO<br><small>omega= {$item['omega']}</small>"; $res[$item['resName']]['omega_val'] = "1"; } elseif ($item['type'] == 'Pro') { $res[$item['resName']]['omega'] = "{$item['conf']} PRO<br><small>omega= {$item['omega']}</small>"; $res[$item['resName']]['omega_val'] = "1"; } //for column sort } } } //}}} if (is_array($pperp)) { foreach ($pperp as $item) { if ($item['outlier']) { //echo "pperp ".$item['resName']."\n"; $reasons = array(); if ($item['deltaOut'] && $item['epsilonOut']) { $reasons[] = "δ & ε outlier <br><small>(P-perp distance implies {$item['probpucker']})</small>"; } elseif ($item['deltaOut']) { $reasons[] = "δ outlier <br><small>(P-perp distance implies {$item['probpucker']})</small>"; } elseif ($item['epsilonOut']) { $reasons[] = "ε outlier <br><small>(P-perp distance implies {$item['probpucker']})</small>"; } $res[$item['resName']]['pperp_val'] = 1; // no way to quantify this $res[$item['resName']]['pperp'] = "suspect sugar pucker - " . implode(", ", $reasons) . ""; $res[$item['resName']]['pperp_isbad'] = true; $res[$item['resName']]['any_isbad'] = true; } } } //}}} if (is_array($suites)) { foreach ($suites as $cnit => $item) { $res[$cnit]['suites_val'] = $item['suiteness']; $bin = "δ-1δγ {$item['bin']}"; if ($bin == 'δ-1δγ trig') { $bin = "δ-1δγ none (triaged {$item['triage']} )"; $res[$cnit]['suites_val'] = -1; // sorts to very top } elseif ($bin == 'δ-1δγ inc ') { $bin = 'δ-1δγ none (incomplete)'; $res[$cnit]['suites_val'] = 0.0001; // sorts just below all outliers } elseif (preg_match('/7D dist/', $item['triage'])) { $bin = "{$bin} ( {$item['triage']} )"; } //echo $cnit."\n"; if ($item['isOutlier']) { $res[$cnit]['suites'] = "OUTLIER<br><small>{$bin}</small>"; $res[$cnit]['suites_isbad'] = true; $res[$cnit]['any_isbad'] = true; } elseif ($item['bin'] == 'inc ') { $res[$cnit]['suites'] = "conformer: {$item['conformer']}<br><small>{$bin}</small>"; } else { $res[$cnit]['suites'] = "conformer: {$item['conformer']}<br><small>{$bin}, suiteness = " . sprintf("%.2f", $item[suiteness]) . "</small>"; } } } //}}} if (is_array($bbonds)) { //{{{ foreach ($bbonds as $cnit => $item) { if ($item['isOutlier']) { $res[$cnit]['bbonds_val'] = abs($item['sigma']); $res[$cnit]['bbonds'] = "{$item['count']} OUTLIER(S)<br><small>worst is {$item['measure']}: " . sprintf("%.1f", $item[sigma]) . " σ</small>"; $res[$cnit]['bbonds_isbad'] = true; $res[$cnit]['any_isbad'] = true; if ($res[$cnit]['bbonds_val'] >= 10) { $res[$cnit]['bbonds_color'] = $cell_color_severe; } } } } //}}} if (is_array($bangles)) { //{{{ foreach ($bangles as $cnit => $item) { if ($item['isOutlier']) { $res[$cnit]['bangles_val'] = abs($item['sigma']); $res[$cnit]['bangles'] = "{$item['count']} OUTLIER(S)<br><small>worst is {$item['measure']}: " . sprintf("%.1f", $item[sigma]) . " σ</small>"; $res[$cnit]['bangles_isbad'] = true; $res[$cnit]['any_isbad'] = true; if ($res[$cnit]['bangles_val'] >= 10) { $res[$cnit]['bangles_color'] = $cell_color_severe; } } } } //}}} //}}} Process validation data //echo "Processing validation data took ".(time() - $startTime)." seconds\n"; //{{{check for alternates foreach ($res as $cnit => $current) { $altloc = substr($cnit, 7, 1); if ($altloc != ' ') { $b_key = substr($cnit, 0, 7) . ' ' . substr($cnit, 8, 3); if (isset($res[$b_key])) { //{{{clash if (!isset($res[$cnit]['clash'])) { $res[$cnit]['clash_val'] = $res[$b_key]['clash_val']; $res[$cnit]['clash'] = $res[$b_key]['clash']; $res[$cnit]['clash_isbad'] = $res[$b_key]['clash_isbad']; $res[$cnit]['any_isbad'] = $res[$b_key]['any_isbad']; } //}}} //{{{rama if (!isset($res[$cnit]['rama'])) { $res[$cnit]['rama_val'] = $res[$b_key]['rama_val']; $res[$cnit]['rama'] = $res[$b_key]['rama']; if (isset($res[$b_key]['rama_isbad'])) { $res[$cnit]['rama_isbad'] = $res[$b_key]['rama_isbad']; $res[$cnit]['any_isbad'] = $res[$b_key]['any_isbad']; } } //}}} //{{{rota if (!isset($res[$cnit]['rota'])) { $res[$cnit]['rota_val'] = $res[$b_key]['rota_val']; $res[$cnit]['rota'] = $res[$b_key]['rota']; if (isset($res[$b_key]['rota_isbad'])) { $res[$cnit]['rota_isbad'] = $res[$b_key]['rota_isbad']; $res[$cnit]['any_isbad'] = $res[$b_key]['any_isbad']; } } //}}} //{{{cbdev if (!isset($res[$cnit]['cbdev_val'])) { $res[$cnit]['cbdev_val'] = $res[$b_key]['cbdev_val']; $res[$cnit]['cbdev'] = $res[$b_key]['cbdev']; if (isset($res[$b_key]['rama_isbad'])) { $res[$cnit]['cbdev_isbad'] = $res[$b_key]['cbdev_isbad']; $res[$cnit]['any_isbad'] = $res[$b_key]['any_isbad']; } } //}}} //{{{pperp if (!isset($res[$cnit]['pperp'])) { if (isset($res[$b_key]['pperp'])) { $res[$cnit]['pperp_val'] = $res[$b_key]['pperp_val']; $res[$cnit]['pperp'] = $res[$b_key]['pperp']; $res[$cnit]['pperp_isbad'] = $res[$b_key]['pperp_isbad']; $res[$cnit]['any_isbad'] = $res[$b_key]['any_isbad']; } } //}}} //{{{suites if (!isset($res[$cnit]['suites'])) { $res[$cnit]['suites_val'] = $res[$b_key]['suites_val']; $res[$cnit]['suites'] = $res[$b_key]['suites']; if (isset($res[$b_key]['suites_isbad'])) { $res[$cnit]['suites_isbad'] = $res[$b_key]['suites_isbad']; $res[$cnit]['any_isbad'] = $res[$b_key]['any_isbad']; } } //}}} //{{{bbonds if (!isset($res[$cnit]['bbonds'])) { if (isset($res[$b_key]['bbonds_isbad'])) { $res[$cnit]['bbonds_val'] = $res[$b_key]['bbonds_val']; $res[$cnit]['bbonds'] = $res[$b_key]['bbonds']; $res[$cnit]['bbonds_isbad'] = $res[$b_key]['bbonds_isbad']; $res[$cnit]['any_isbad'] = $res[$b_key]['any_isbad']; } } //}}} //{{{bangles if (!isset($res[$cnit]['bangles'])) { if (isset($res[$b_key]['bangles_isbad'])) { $res[$cnit]['bangles_val'] = $res[$b_key]['bangles_val']; $res[$cnit]['bangles'] = $res[$b_key]['bangles']; $res[$cnit]['bangles_isbad'] = $res[$b_key]['bangles_isbad']; $res[$cnit]['any_isbad'] = $res[$b_key]['any_isbad']; } } //}}} //{{{omega if (isset($res[$cnit]['omega'])) { if (isset($res[$b_key]['omega_isbad'])) { $res[$cnit]['omega_val'] = $res[$b_key]['omega_val']; $res[$cnit]['omega'] = $res[$b_key]['omega']; $res[$cnit]['omega_isbad'] = $res[$b_key]['omega_isbad']; $res[$cnit]['any_isbad'] = $res[$b_key]['any_isbad']; } } //}}} //{{{Bfactor if (isset($res[$b_key]['resHiB'])) { $res[$cnit]['resHiB'] = max($res[$cnit]['resHiB'], $res[$b_key]['resHiB']); } //}}} //{{{CaBLAM if (isset($res[$cnit]['cablam'])) { if (isset($res[$b_key]['cablam_isbad'])) { $res[$cnit]['cablam_val'] = $res[$b_key]['cablam_val']; $res[$cnit]['cablam'] = $res[$b_key]['cablam']; $res[$cnit]['cablam_isbad'] = $res[$b_key]['cablam_isbad']; } } //}}} } } } //}}} //remove redundant ' ' entries for residues with alternates if ($cleanupAltloc) { foreach ($alts as $cnit => $alt) { foreach ($alts[$cnit] as $i => $j) { $b_key = substr($cnit, 0, 7) . ' ' . substr($cnit, 8, 3); unset($res[$b_key]); } } } //foreach ($bbonds as $cnit => $alt) //{ // echo $bbonds[$cnit]['resName']."\n"; //} // $res needs to be saved in raw_data for the horoizontal chart if ($resout) { $out = fopen($resout, 'wb'); fwrite($out, mpSerialize($res)); fclose($out); } // Set up output data structure $table = array('prequel' => '', 'headers' => array(), 'rows' => array(), 'footers' => array(), 'sequel' => ''); $startTime = time(); //{{{ Table prequel and headers // Do summary chart $pdbstats = pdbstat($infile); $table['prequel'] = makeSummaryStatsTable($pdbstats['resolution'], $clash, $rama, $rota, $cbdev, $pperp, $suites, $bbonds, $bangles, $cablam, $omega); if ($doHtmlTable) { $header1 = array(); $header1[] = array('html' => "<b>#</b>", 'sort' => 1); $header1[] = array('html' => "<b>Alt</b>", 'sort' => 1); $header1[] = array('html' => "<b>Res</b>", 'sort' => 1); $header1[] = array('html' => "<b>High B</b>", 'sort' => -1); if (is_array($clash)) { $header1[] = array('html' => "<b>Clash > 0.4Å</b>", 'sort' => -1); } if (is_array($rama)) { $header1[] = array('html' => "<b>Ramachandran</b>", 'sort' => 1); } if (is_array($rota)) { $header1[] = array('html' => "<b>Rotamer</b>", 'sort' => 1); } if (is_array($cbdev)) { $header1[] = array('html' => "<b>Cβ deviation</b>", 'sort' => -1); } if (is_array($cablam)) { $header1[] = array('html' => "<b>CaBLAM</b>", 'sort' => 1); } if (is_array($pperp)) { $header1[] = array('html' => "<b>Base-P perp. dist.</b>", 'sort' => -1); } if (is_array($suites)) { $header1[] = array('html' => "<b>RNA suite conf.</b>", 'sort' => 1); } if (is_array($bbonds)) { $header1[] = array('html' => "<b>Bond lengths</b>", 'sort' => -1); } if (is_array($bangles)) { $header1[] = array('html' => "<b>Bond angles</b>", 'sort' => -1); } if (is_array($omega)) { $header1[] = array('html' => "<b>Cis Peptides</b>", 'sort' => 1); } $header2 = array(); $header2[] = array('html' => ""); $header2[] = array('html' => ""); $header2[] = array('html' => ""); $header2[] = array('html' => sprintf("Avg: %.2f", array_sum($Bfact) / count($Bfact))); if (is_array($clash)) { $header2[] = array('html' => "Clashscore: {$clash['scoreAll']}"); } if (is_array($rama)) { $header2[] = array('html' => "Outliers: " . count(findRamaOutliers($rama)) . " of " . findAltTotal($rama)); } if (is_array($rota)) { $header2[] = array('html' => "Poor rotamers: " . count(findRotaOutliers($rota)) . " of " . findAltTotal($rota)); } if (is_array($cbdev)) { $header2[] = array('html' => "Outliers: " . count(findCbetaOutliers($cbdev)) . " of " . findAltTotal($cbdev)); } if (is_array($cablam)) { $header2[] = array('html' => "Outliers: " . count(findCablamOutliers($cablam)) . " of " . findAltTotal($cablam)); } if (is_array($pperp)) { $header2[] = array('html' => "Outliers: " . count(findBasePhosPerpOutliers($pperp)) . " of " . findAltTotal($pperp)); } if (is_array($suites)) { $header2[] = array('html' => "Outliers: " . count(findSuitenameOutliers($suites)) . " of " . findAltTotal($suites)); } if (is_array($bbonds)) { $header2[] = array('html' => "Outliers: " . count(findGeomOutliers($bbonds)) . " of " . findAltTotal($bbonds)); } if (is_array($bangles)) { $header2[] = array('html' => "Outliers: " . count(findGeomOutliers($bangles)) . " of " . findAltTotal($bangles)); } if (is_array($omega)) { $header2[] = array('html' => "Non-Trans: " . count(findOmegaOutliers($omega)) . " of " . findAltTotal($omega)); } $table['headers'] = array($header1, $header2); } //}}} Table prequel and headers //echo "Table prequel and headers took ".(time() - $startTime)." seconds\n"; $startTime = time(); //{{{ Table body if ($doHtmlTable) { $rows = array(); foreach ($res as $cnit => $eval) { if ($outliersOnly && !$eval['any_isbad']) { continue; } if (!$_SESSION['useSEGID']) { $cni = substr($cnit, 0, 7); $alt = substr($cnit, 7, 1); $type = substr($cnit, 8, 3); } else { $cni = substr($cnit, 0, 9); $alt = substr($cnit, 9, 1); $type = substr($cnit, 10, 3); } //$cni = "'".$cni."'"; $row = array(); //$row[] = array('html' => $cnit, 'sort_val' => $eval['order']+0); $row[] = array('html' => $cni, 'sort_val' => $eval['order'] + 0); $row[] = array('html' => $alt, 'sort_val' => $alt); $row[] = array('html' => $type, 'sort_val' => $type); $row[] = array('html' => $eval['resHiB'], 'sort_val' => $eval['resHiB'] + 0); foreach (array('clash', 'rama', 'rota', 'cbdev', 'cablam', 'pperp', 'suites', 'bbonds', 'bangles', 'omega') as $type) { if (is_array(${$type})) { $cell = array(); if (isset($eval[$type])) { $cell['html'] = $eval[$type]; } else { $cell['html'] = "-"; } if (isset($eval[$type . '_color'])) { $cell['color'] = $eval[$type . '_color']; } elseif (isset($eval[$type . '_isbad'])) { $cell['color'] = $cell_color_bad; } if (isset($eval[$type . '_val'])) { $cell['sort_val'] = $eval[$type . '_val'] + 0; } $row[] = $cell; } } /* if(is_array($clash)) $row[] = array('html' => (isset($eval['clash']) ? $eval['clash'] : "-"), 'sort_val' => $eval['clash_val']+0); if(is_array($rama)) $row[] = array('html' => (isset($eval['rama']) ? $eval['rama'] : "-"), 'sort_val' => $eval['rama_val']+0); if(is_array($rota)) $row[] = array('html' => (isset($eval['rota']) ? $eval['rota'] : "-"), 'sort_val' => $eval['rota_val']+0); if(is_array($cbdev)) $row[] = array('html' => (isset($eval['cbdev']) ? $eval['cbdev'] : "-"), 'sort_val' => $eval['cbdev_val']+0); if(is_array($pperp)) $row[] = array('html' => (isset($eval['pperp']) ? $eval['pperp'] : "-"), 'sort_val' => $eval['pperp_val']+0); */ $rows[] = $row; } $table['rows'] = $rows; } //}}} Table body //echo "Table body took ".(time() - $startTime)." seconds\n"; $startTime = time(); $out = fopen($outfile, 'wb'); fwrite($out, mpSerialize($table)); fclose($out); //echo "Serializing table took ".(time() - $startTime)." seconds\n"; // serialize() and unserialize() screw up floating point numbers sometimes. // Not only is there a change in precision, but sometimes numbers become INF // in some versions of PHP 4, like those shipped with Mac OS X. // #$tmpfile = $_SESSION['dataDir'].'/'.MP_DIR_RAWDATA.'/table_dump'; #$out = fopen($tmpfile.'1', 'wb'); #fwrite($out, var_export($table, true)); #fclose($out); #$time = time(); # $out = fopen($tmpfile.'2', 'wb'); # fwrite($out, var_export(unserialize(serialize($table)), true)); # fclose($out); #echo "Dump+load time for serialize: ".(time() - $time)." seconds\n"; #$time = time(); # $out = fopen($tmpfile.'3', 'wb'); # fwrite($out, var_export(eval("return ".var_export($table, true).";"), true)); # fclose($out); #echo "Dump+load time for var_export: ".(time() - $time)." seconds\n"; # WAY TOO SLOW (all in PHP, no C code): #$time = time(); # $json = new Services_JSON(); # $out = fopen($tmpfile.'4', 'wb'); # fwrite($out, var_export($json->decode($json->encode($table)), true)); # fclose($out); #echo "Dump+load time for JSON: ".(time() - $time)." seconds\n"; if ($snapfile) { $startTime = time(); $out = fopen($snapfile, 'wb'); //fwrite($out, formatSortableTable($table, 'DUMMY_URL')); fwrite($out, formatSortableTableJS($table)); fclose($out); //echo "Formatting sortable table took ".(time() - $startTime)." seconds\n"; } }
/** * Composites the results of the find___Outliers() functions into a simple, * non-redundant list of 9-char residues names (keys) * and counts of outliers (values). */ function findAllOutliers($clash, $rama, $rota, $cbdev, $pperp) { $worst = array(); #$worst = array_merge($worst, findClashOutliers($clash)); #$worst = array_merge($worst, findRamaOutliers($rama)); #$worst = array_merge($worst, findRotaOutliers($rota)); #$worst = array_merge($worst, findCbetaOutliers($cbdev)); #$worst = array_merge($worst, findBasePhosPerpOutliers($pperp)); foreach (array(findClashOutliers($clash), findRamaOutliers($rama), findRotaOutliers($rota), findCbetaOutliers($cbdev), findBasePhosPerpOutliers($pperp)) as $criterion) { if (is_array($criterion)) { foreach ($criterion as $cnit => $dummy) { $worst[$cnit] += 1; } } } ksort($worst); // Put the residues into a sensible order #return array_keys($worst); return $worst; }