#!/usr/bin/env php
<?php # (jEdit options) :folding=explicit:collapseFolds=1:
/*****************************************************************************
INPUTS / SWITCHES (via $_SERVER['argv']):
    inFile          a PDB file to operate on, with hydrogens already added

OUTPUTS / RESULTS:
    A Scheme script for Coot on stdout, which creates buttons to visit every
    outlier in the file.

*****************************************************************************/
// EVERY *top-level* page must start this way:
// 1. Define it's relationship to the root of the MolProbity installation.
// Pages in subdirectories of lib/ or public_html/ will need more "/.." 's.
    if(!defined('MP_BASE_DIR')) define('MP_BASE_DIR', realpath(dirname(__FILE__).'/..'));
// 2. Include core functionality - defines constants, etc.
    require_once(MP_BASE_DIR.'/lib/core.php');
    require_once(MP_BASE_DIR.'/lib/analyze.php');
    require_once(MP_BASE_DIR.'/lib/visualize.php');
// 3. Restore session data. If you don't want to access the session
// data for some reason, you must call mpInitEnvirons() instead.
    mpInitEnvirons();       // use std PATH, etc.
    //mpStartSession(true);   // create session dir
// 5. Set up reasonable values to emulate CLI behavior if we're CGI
    set_time_limit(0); // don't want to bail after 30 sec!
// 6. Unlimited memory for processing large files
    ini_set('memory_limit', -1);

#{{{ a_function_definition - sumary_statement_goes_here
############################################################################
/**
* Documentation for this function.
*/
//function someFunctionName() {}
#}}}########################################################################

# MAIN - the beginning of execution for this page
############################################################################
// First argument is the name of this script...
if(is_array($_SERVER['argv'])) foreach(array_slice($_SERVER['argv'], 1) as $arg)
{
    if(!isset($inFile))         $inFile = $arg;
    else                        die("Too many or unrecognized arguments: '$arg'\n");
}

if(!isset($inFile))         die("No input file specified.\n");
elseif(!is_file($inFile))   die("Input file '$inFile' does not exist.\n");

mpStartSession(true); // create a new session

$inpath = $inFile;
$modelID = addModelOrEnsemble(
             $inpath,
             basename($inpath),
             false,
             true,
             true,
             false);

$model =& $_SESSION['models'][$modelID];
$reduce_blength = $_SESSION['reduce_blength'];
//$bcutval = 40; TO-DO - make these user controllable
//$ocutval = 10;
$pdbfile = $_SESSION['dataDir'].'/'.MP_DIR_MODELS."/$model[pdb]";
$rawDir  = $_SESSION['dataDir'].'/'.MP_DIR_RAWDATA;
    if(!file_exists($rawDir)) mkdir($rawDir, 0777);
$filename = basename($pdbfile);

$stats = $model['stats'];
$hasProtein = ($stats['sidechains'] > 0 ? True : False);
$hasNucAcid = ($stats['nucacids'] > 0 ? True : False);


if($hasProtein)
{
  runRotamer($pdbfile, "$rawDir/$model[prefix]rota.data");
  $rota = loadRotamer("$rawDir/$model[prefix]rota.data");

  runRamachandran($pdbfile, "$rawDir/$model[prefix]rama.data");
  $rama = loadRamachandran("$rawDir/$model[prefix]rama.data");

  runCbetaDev($pdbfile, "$rawDir/$model[prefix]cbdev.data");
  $cbdev = loadCbetaDev("$rawDir/$model[prefix]cbdev.data");
}
else
{
  $rota = null;
  $rama = null;
  $cbdev = null;
}

runClashlist($pdbfile, "$rawDir/$model[prefix]clash.data", $reduce_blength);
$clash = loadClashlist("$rawDir/$model[prefix]clash.data");

if($hasNucAcid)
{
  runBasePhosPerp($pdbfile, "$rawDir/$model[prefix]pperp.data");
  $pperp = loadBasePhosPerp("$rawDir/$model[prefix]pperp.data");
}
{
  $pperp = null;
}

$scmfile = $inFile;
$scmfile = preg_replace("/\./","-",$scmfile);
$scmfile .= "-multi-coot.scm";

$pyfile = $inFile;
$pyfile = preg_replace("/\./","-",$pyfile);
$pyfile .= "-multi-coot.py";

// makeCootMulticritChart($inFile, "php://stdout", $clash, $rama, $rota, $cbdev, $pperp)
makeCootClusteredChart($pdbfile, $scmfile, $pyfile, $clash, $rama, $rota, $cbdev, $pperp);

mpDestroySession();

############################################################################
// Clean up and go home
//mpDestroySession(); // only call this if we created one
?>
