getOne("select bedfile_id from bedfile where befile_id = ? and token = ? and token_expires > now()", $_GET['id'], $_GET['token']))) { $bedfile = $db->getRow("select * from bedfile where bedfile_id = ?", array($_GET['id'])); $chrom_length = ($bedfile['genome_id'] ? $db->getAssoc("select chrom, length from chrom_length where genome_id = ?", FALSE, $bedfile['genome_id']) : array()); print $bedfile['header'] . "\n"; if($bedfile['filetype'] == 'rawbed') { // esp for large files, it's better to pre-process for chromosome length, in the interest of speed //readfile($db->getOne("select filepath from rawbed where bedfile_id = ?", $_GET['id'])); $fp = fopen($db->getOne("select filepath from rawbed where bedfile_id = ?", $_GET['id']), "r"); fgets($fp); // strip header from original file while($r = fgetcsv($fp, 0, "\t")) { if(isset($chrom_length[$r[0]]) && $r[2] > $chrom_length[$r[0]]) { $r[2] = $chrom_length[$r[0]]; //continue; } if(isset($chrom_length[$r[0]]) && $r[1] > $chrom_length[$r[0]]) { $r[1] = $chrom_length[$r[0]]; //continue; } print join("\t", $r) . "\n"; } fclose($fp); } else { //print $bedfile['header'] . "\n"; $rows = $db->query("select * from summarybed where bedfile_id = ?", $_GET['id']); $filterOutKeys = array('summarybed_id', 'bedfile_id'); while($r = $rows->fetchRow()) { if(isset($chrom_length[$r['chrom']]) && $r['chromend'] > $chrom_length[$r['chrom']]) { $r['chromend'] = $chrom_length[$r['chrom']]; //continue; } if(isset($chrom_length[$r['chrom']]) && $r['chromstart'] > $chrom_length[$r['chrom']]) { $r['chromstart'] = $chrom_length[$r['chrom']]; //continue; } $r = array_diff_key($r, array_flip($filterOutKeys)); print trim(join("\t", $r)) . "\n"; } } } ?>