Science_Chemistry
[ class tree: Science_Chemistry ] [ index: Science_Chemistry ] [ all elements ]

Source for file Molecule_XYZ.php

Documentation is available at Molecule_XYZ.php

  1. <?php
  2. //
  3. // +----------------------------------------------------------------------+
  4. // | PHP Version 4                                                        |
  5. // +----------------------------------------------------------------------+
  6. // | Copyright (c) 1997-2003 The PHP Group                                |
  7. // +----------------------------------------------------------------------+
  8. // | This source file is subject to version 2.0 of the PHP license,       |
  9. // | that is bundled with this package in the file LICENSE, and is        |
  10. // | available at through the world-wide-web at                           |
  11. // | http://www.php.net/license/2_02.txt.                                 |
  12. // | If you did not receive a copy of the PHP license and are unable to   |
  13. // | obtain it through the world-wide-web, please send a note to          |
  14. // | license@php.net so we can mail you a copy immediately.               |
  15. // +----------------------------------------------------------------------+
  16. // | Authors: Jesus M. Castagnetto <jmcastagnetto@php.net>                |
  17. // +----------------------------------------------------------------------+
  18. //
  19. // $Id$
  20. //
  21.  
  22. require_once "Science/Chemistry.php";
  23. require_once "Science/Chemistry/Molecule.php";
  24.  
  25. /**
  26.  * Base class representing a Molecule from a XYZ format file
  27.  *
  28.  * @author  Jesus M. Castagnetto <jmcastagnetto@php.net>
  29.  * @version 1.0
  30.  * @access  public
  31.  * @package Science_Chemistry
  32.  */
  33.  
  34.     /**
  35.      * Energy of the molecule. Optional value in XYZ file format.
  36.      *
  37.      * @var float 
  38.      * @access public
  39.      */
  40.     var $energy = 0.0;
  41.  
  42.     /**
  43.      * Constructor for the class, accepts 2 optional parameters:
  44.      * the data and its source. Possible values for $src: "file", "string"
  45.      *
  46.      * @param   optional    string $xyzdata
  47.      * @param   optional    string  $src   one of "file" or "string"
  48.      * @return  object Science_Chemistry_Molecule_XYZ 
  49.      * @access  public
  50.      * @see     parseXYZ()
  51.      */
  52.     function Science_Chemistry_Molecule_XYZ($xyzdata=""$src="file"{
  53.         if (!empty($xyzdata))
  54.             if (!$this->parseXYZ($xyzdata$src))
  55.                 return null;
  56.     }
  57.  
  58.     /**
  59.      * method that does the parsing of the XYZ data itself
  60.      *
  61.      * @param   string  $xyzdata 
  62.      * @param   string  $src 
  63.      * @return  boolean 
  64.      * @access  public
  65.      * @see     Science_Chemistry_Molecule_XYZ()
  66.      */
  67.     function parseXYZ($xyzdata$src{
  68.         if ($src == "file"{
  69.             $line file($xyzdata);
  70.         elseif ($src == "string"{
  71.             $line explode("\n"$xyzdata);
  72.         else {
  73.             return false;
  74.         }
  75.         unset($this->atoms);
  76.         // first line is number of atoms
  77.         $this->num_atoms = trim($line[0]);
  78.         // second line is molecule name and energy
  79.         preg_match("/^([[:alnum:].]+)[[:space:]]+([[:digit:].-]+)/",trim($line[1]),$re);
  80.         $this->name = trim($re[1]);
  81.         $this->energy = trim($re[2]);
  82.         for ($i=2; $i<count($line)$i++{
  83.             if (!preg_match("/^#/",$line[$i]&& !preg_match("/^$/"$line[$i])) {
  84.                 $this->atoms[$this->parseAtom($line[$i]);
  85.             }
  86.         }
  87.     }
  88.  
  89.     /**
  90.      * Parses an XYZ atom record
  91.      *
  92.      * @param   string  $line 
  93.      * @return  object  Science_Chemistry_Atom 
  94.      * @access   public
  95.      * @see     parseXYZ()
  96.      */
  97.     function parseAtom($line{
  98.         list($element$x$y$zpreg_split("/[\t ]+/",trim($line));
  99.         return new Science_Chemistry_Atom($elementarray($x$y$z));
  100.     }
  101.  
  102.     /**
  103.      * Generates a string representation of the XYZ molecule
  104.      * Overrides parent Science_Chemistry_Molecule::toString() method
  105.      *
  106.      * @return  string 
  107.      * @access  public
  108.      */
  109.     function toString({
  110.         if (!$this->atoms)
  111.             return false;
  112.         $out[$this->num_atoms;
  113.         $out[$this->name."\t".sprintf("%15f",$this->energy);
  114.         reset($this->atoms);
  115.         for ($i=0; $i<$this->num_atoms$i++)
  116.             $out[$this->atoms[$i]->toString();
  117.         return implode("\n",$out)."\n";
  118.     }
  119.  
  120. // end of class Science_Chemistry_Molecule_XYZ
  121.  
  122. // vim: expandtab: ts=4: sw=4
  123. ?>

Documentation generated on Mon, 11 Mar 2019 15:48:16 -0400 by phpDocumentor 1.4.4. PEAR Logo Copyright © PHP Group 2004.