atom_pdb.php

来自「视频监控网络部分的协议ddns,的模块的实现代码,请大家大胆指正.」· PHP 代码 · 共 225 行

PHP
225
字号
<?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: Atom_PDB.php,v 1.5 2003/05/13 01:18:17 jmcastagnetto Exp $//require_once "Science/Chemistry/Atom.php" ;/** * Represents a PDB atom record * and contains a reference to the PDB residue to which it belongs * * @author  Jesus M. Castagnetto <jmcastagnetto@php.net> * @version 1.0 * @access  public * @package Science_Chemistry */class Science_Chemistry_Atom_PDB extends Science_Chemistry_Atom {    /**     * PDB Atom record type, one of ATOM or HETATM     *     * @var     string     * @access  private     * @see     getField()     */    var $rec_name;    /**     * PDB Atom serial number     *     * @var     integer     * @access   private     * @see     getField()     */    var $ser_num;    /**     * PDB Atom name     *     * @var     string     * @access  private     * @see     getField()     */    var $atom_name;    /**     * PDB Atom alternative location     *     * @var     string     * @access  private     * @see     getField()     */    var $alt_loc;    /**     * PDB Atom's Residue name     *     * @var     string     * @access  private     * @see     getField()     */    var $res_name;    /**     * PDB Atom's Residue chain ID     *     * @var     string     * @access  private     * @see     getField()     */    var $chain_id;    /**     * PDB Atom's Residue sequential numnber     *     * @var     string     * @access  private     * @see     getField()     */    var $res_seq_num;    /**     * PDB Atom insert code     *     * @var     string     * @access  private     * @see     getField()     */    var $ins_code;    /**     * PDB Atom occupancy     *     * @var     float     * @access  private     * @see     getField()     */    var $occupancy;    /**     * PDB Atom temperature factor     *     * @var     float     * @access  private     * @see     getField()     */    var $temp_factor;    /**     * PDB Atom segment identifier     *     * @var     string     * @access  private     * @see     getField()     */    var $segment_id;    /**     * PDB Atom electronic charge     *     * @var     float     * @access  private     * @see     getField()     */    var $charge;    /**     * If the atom object has been initialized     *     * @var     boolean     * @access  public     * @see     initAtom()     */    var $VALID = false;    /**     * Reference to the containing Residue object     *     * @var     object  Residue_PDB     * @access  public     */    var $parent_residue;        function Science_Chemistry_Atom_PDB($atomrec, $residue="") {        // reference to containing residue        if (!empty($residue))            $this->parent_residue =& $residue;        // process PDB atom record        // no error checking, assumes correct and standard record        $this->VALID = true;        $this->rec_name = trim(substr($atomrec,0,6));        $this->ser_num = (int) trim(substr($atomrec,6,5));        $this->atom_name = trim(substr($atomrec,12,4));        $this->alt_loc = trim(substr($atomrec,16,1));        $this->res_name = trim(substr($atomrec,17,3));        $this->chain_id = trim(substr($atomrec,21,1));        $this->res_seq_num = (int) trim(substr($atomrec,22,4));        $this->ins_code = trim(substr($atomrec,26,1));        $this->occupancy = (float) trim(substr($atomrec,54,6));        $this->temp_factor = (float) trim(substr($atomrec,60,6));        $this->segment_id = trim(substr($atomrec,72,4));        $this->charge = (float)trim(substr($atomrec,78,2));        $x = (double) trim(substr($atomrec,30,8));        $y = (double) trim(substr($atomrec,38,8));        $z = (double) trim(substr($atomrec,46,8));        $this->xyz = new Science_Chemistry_Coordinates(array($x, $y, $z));        $element = trim(substr($atomrec,76,2));        // if no element is present, use the atom_name        $this->element = (preg_match('/^[A-Z]{1,2}/', $element)) ? $element : $this->atom_name;    }    function getField($field) {        // mapping needed so we follow both the PEAR        // variable naming convention, and the PDB        // standard field naming convention        $map = array (                    "RecName"       => "rec_name",                    "SerNum"        => "ser_num",                    "AtomName"      => "atom_name",                    "AltLoc"        => "alt_loc",                    "ResName"       => "res_name",                    "ChainID"       => "chain_id",                    "ResSeqNum"     => "res_seq_num",                    "InsCode"       => "ins_code",                    "Ocuppancy"     => "ocuppancy",                    "TempFactor"    => "temp_factor",                    "SegmentID"     => "segment_id",                    "Charge"        => "charge",                    "Element"       => "element"                );        // for coordinates index mapping        $cmap = array ("X"=>0, "Y"=>1, "Z"=>2);        if (in_array($field, array_keys($map))) {            $internal_name = $map[$field];            return $this->$internal_name;        } elseif (in_array(strtoupper($field), array_keys($cmap))) {            $index = $cmap[strtoupper($field)];            return $this->xyz->coords[$index];        } else {            return null;        }    }}// vim: expandtab: ts=4: sw=4?>

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?