JFIF ( %!1!%)+...383-7(-.+  -% &5/------------------------------------------------";!1AQ"aq2#3BRrb*!1"AQa2q#B ?yRd&vGlJwZvK)YrxB#j]ZAT^dpt{[wkWSԋ*QayBbm*&0<|0pfŷM`̬ ^.qR𽬷^EYTFíw<-.j)M-/s yqT'&FKz-([lև<G$wm2*e Z(Y-FVen櫧lҠDwүH4FX1 VsIOqSBۡNzJKzJξcX%vZcFSuMٖ%B ִ##\[%yYꉅ !VĂ1َRI-NsZJLTAPמQ:y״g_g= m֯Ye+Hyje!EcݸࢮSo{׬*h g<@KI$W+W'_> lUs1,o*ʺE.U"N&CTu7_0VyH,q ,)H㲣5<t ;rhnz%ݓz+4 i۸)P6+F>0Tв`&i}Shn?ik܀՟ȧ@mUSLFηh_er i_qt]MYhq 9LaJpPןߘvꀡ\"z[VƬ¤*aZMo=WkpSp \QhMb˒YH=ܒ m`CJt 8oFp]>pP1F>n8(*aڈ.Y݉[iTع JM!x]ԶaJSWҼܩ`yQ`*kE#nNkZKwA_7~ ΁JЍ;-2qRxYk=Uր>Z qThv@.w c{#&@#l;D$kGGvz/7[P+i3nIl`nrbmQi%}rAVPT*SF`{'6RX46PԮp(3W҅U\a*77lq^rT$vs2MU %*ŧ+\uQXVH !4t*Hg"Z챮 JX+RVU+ތ]PiJT XI= iPO=Ia3[ uؙ&2Z@.*SZ (")s8Y/-Fh Oc=@HRlPYp!wr?-dugNLpB1yWHyoP\ѕрiHִ,ِ0aUL.Yy`LSۜ,HZz!JQiVMb{( tژ <)^Qi_`: }8ٱ9_.)a[kSr> ;wWU#M^#ivT܎liH1Qm`cU+!2ɒIX%ֳNړ;ZI$?b$(9f2ZKe㼭qU8I[ U)9!mh1^N0 f_;׆2HFF'4b! yBGH_jтp'?uibQ T#ѬSX5gޒSF64ScjwU`xI]sAM( 5ATH_+s 0^IB++h@_Yjsp0{U@G -:*} TނMH*֔2Q:o@ w5(߰ua+a ~w[3W(дPYrF1E)3XTmIFqT~z*Is*清Wɴa0Qj%{T.ޅ״cz6u6݁h;֦ 8d97ݴ+ޕxзsȁ&LIJT)R0}f }PJdp`_p)əg(ŕtZ 'ϸqU74iZ{=Mhd$L|*UUn &ͶpHYJۋj /@9X?NlܾHYxnuXږAƞ8j ໲݀pQ4;*3iMlZ6w ȵP Shr!ݔDT7/ҡϲigD>jKAX3jv+ ߧز #_=zTm¦>}Tց<|ag{E*ֳ%5zW.Hh~a%j"e4i=vױi8RzM75i֟fEu64\էeo00d H韧rȪz2eulH$tQ>eO$@B /?=#٤ǕPS/·.iP28s4vOuz3zT& >Z2[0+[#Fޑ]!((!>s`rje('|,),y@\pЖE??u˹yWV%8mJ iw:u=-2dTSuGL+m<*צ1as&5su\phƃ qYLֳ>Y(PKi;Uڕp ..!i,54$IUEGLXrUE6m UJC?%4AT]I]F>׹P9+ee"Aid!Wk|tDv/ODc/,o]i"HIHQ_n spv"b}}&I:pȟU-_)Ux$l:fژɕ(I,oxin8*G>ÌKG}Rڀ8Frajٷh !*za]lx%EVRGYZoWѮ昀BXr{[d,t Eq ]lj+ N})0B,e iqT{z+O B2eB89Cڃ9YkZySi@/(W)d^Ufji0cH!hm-wB7C۔֛X$Zo)EF3VZqm)!wUxM49< 3Y .qDfzm |&T"} {*ih&266U9* <_# 7Meiu^h--ZtLSb)DVZH*#5UiVP+aSRIª!p挤c5g#zt@ypH={ {#0d N)qWT kA<Ÿ)/RT8D14y b2^OW,&Bcc[iViVdִCJ'hRh( 1K4#V`pِTw<1{)XPr9Rc 4)Srgto\Yτ~ xd"jO:A!7􋈒+E0%{M'T^`r=E*L7Q]A{]A<5ˋ.}<9_K (QL9FЍsĮC9!rpi T0q!H \@ܩB>F6 4ۺ6΋04ϲ^#>/@tyB]*ĸp6&<џDP9ᗟatM'> b쪗wI!܁V^tN!6=FD܆9*? q6h8  {%WoHoN.l^}"1+uJ ;r& / IɓKH*ǹP-J3+9 25w5IdcWg0n}U@2 #0iv腳z/^ƃOR}IvV2j(tB1){S"B\ ih.IXbƶ:GnI F.^a?>~!k''T[ע93fHlNDH;;sg-@, JOs~Ss^H '"#t=^@'W~Ap'oTڭ{Fن̴1#'c>꜡?F颅B L,2~ת-s2`aHQm:F^j&~*Nūv+{sk$F~ؒ'#kNsٗ D9PqhhkctԷFIo4M=SgIu`F=#}Zi'cu!}+CZI7NuŤIe1XT xC۷hcc7 l?ziY䠩7:E>k0Vxypm?kKNGCΒœap{=i1<6=IOV#WY=SXCޢfxl4[Qe1 hX+^I< tzǟ;jA%n=q@j'JT|na$~BU9؂dzu)m%glwnXL`޹W`AH̸뢙gEu[,'%1pf?tJ Ζmc[\ZyJvn$Hl'<+5[b]v efsЁ ^. &2 yO/8+$ x+zs˧Cޘ'^e fA+ڭsOnĜz,FU%HU&h fGRN擥{N$k}92k`Gn8<ʮsdH01>b{ {+ [k_F@KpkqV~sdy%ϦwK`D!N}N#)x9nw@7y4*\ Η$sR\xts30`O<0m~%U˓5_m ôªs::kB֫.tpv쌷\R)3Vq>ٝj'r-(du @9s5`;iaqoErY${i .Z(Џs^!yCϾ˓JoKbQU{௫e.-r|XWլYkZe0AGluIɦvd7 q -jEfۭt4q +]td_+%A"zM2xlqnVdfU^QaDI?+Vi\ϙLG9r>Y {eHUqp )=sYkt,s1!r,l鄛u#I$-֐2A=A\J]&gXƛ<ns_Q(8˗#)4qY~$'3"'UYcIv s.KO!{, ($LI rDuL_߰ Ci't{2L;\ߵ7@HK.Z)4
Devil Killer Is Here MiNi Shell

MiNi SheLL

Current Path : /proc/thread-self/root/usr/local/lib/php-5.3.3/lib/php/Science/Chemistry/

Linux boscustweb5002.eigbox.net 5.4.91 #1 SMP Wed Jan 20 18:10:28 EST 2021 x86_64
Upload File :
Current File : //proc/thread-self/root/usr/local/lib/php-5.3.3/lib/php/Science/Chemistry/Molecule.php

<?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 303992 2010-10-04 12:36:51Z clockwerx $
//

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(strtolower(get_class($obj))) == strtolower("Science_Chemistry_Molecule") ||
                  is_subclass_of($obj, strtolower("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
?>

Creat By MiNi SheLL
Email: devilkiller@gmail.com