#!/usr/bin/env php
<?php # (jEdit options) :folding=explicit:collapseFolds=1:
/*****************************************************************************
INPUTS / SWITCHES (via $_SERVER['argv']):
    inFile          the input PDB file
    outDir          a place to put the output files
    -q              quiet mode (no progress messages)

OUTPUTS / RESULTS:
    Splits each MODEL into its own PDB file, named 1XYZ_1.pdb, 1XYZ_2.pdb, etc.

*****************************************************************************/
// 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/model.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() {}
#}}}########################################################################

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

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

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

# MAIN - the beginning of execution for this page
############################################################################
// Default options
$optVerbose = true;
$padModelNumbers = true;

// First argument is the name of this script...
if(is_array($_SERVER['argv'])) foreach(array_slice($_SERVER['argv'], 1) as $arg)
{
    if($arg == '-q')            $optVerbose = false;
    elseif($arg == '-n')        $padModelNumbers = false;
    elseif(!isset($inFile))     $inFile = $arg;
    elseif(!isset($outDir))     $outDir = $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");
elseif(!isset($outDir))     die("No output directory specified.\n");
elseif(!is_dir($outDir))    die("Output directory '$outDir' does not exist.\n");

if($optVerbose)
{
    echo "INPUT   : ".realpath($inFile)."\n";
    echo "OUTPUT  : ".realpath($outDir)."\n";
}

$baseName = basename($inFile, ".pdb");
$splitFiles = splitPdbModels($inFile);
if (empty($splitFiles)) { // covers case if the PDB has only one model.
  $tmpFile = mpTempfile("tmp_pdb_1");
  copy($inFile, $tmpFile);
  $splitFiles = array( 1 => $tmpFile);
}
foreach($splitFiles as $number => $outFile)
{
    if(!$padModelNumbers)
    {
      $destFile = $baseName.'_'.trim($number).'.pdb';
    }
    else
    {
      $destFile = sprintf($baseName.'_%02d.pdb', $number);
    }
    if($optVerbose) echo "$inFile > $destFile\n";
    copy($outFile, $outDir.'/'.$destFile);
    unlink($outFile);
}
// Test of file joining (comment out the unlink() above!)
/*
$joinedFile = joinPdbModels($splitFiles);
copy($joinedFile, "$outDir/$baseName-joined.pdb");

foreach($splitFiles as $number => $outFile)
    unlink($outFile);
unlink($joinedFile);
*/

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