Overview

Namespaces

  • AnalyseModule
    • Models
  • BaseModule
    • Exceptions
    • Models
    • Repository
    • Services
  • DispatchModule
    • Helpers
    • Models
    • Tools
  • PredictModule
  • SearchModule

Classes

  • AnalyseModule\AnalysePresenter
  • AnalyseModule\ConservancyPresenter
  • AnalyseModule\Models\BaseTool
  • AnalyseModule\Models\ConservancyComparator
  • BaseModule\BasePresenter
  • BaseModule\DiscoveredViewReflection
  • BaseModule\ErrorPresenter
  • BaseModule\Form
  • BaseModule\HomepagePresenter
  • BaseModule\Models\BaseModel
  • BaseModule\Models\FileModel
  • BaseModule\PesekPresenter
  • BaseModule\Repository\BaseRepository
  • BaseModule\Repository\TestRepository
  • BaseModule\RouterFactory
  • BaseModule\RssPresenter
  • BaseModule\Services\Authenticator
  • BaseModule\Services\BaseService
  • BaseModule\Services\DbService
  • DispatchModule\BaseMatch
  • DispatchModule\BaseParser
  • DispatchModule\BlastMatch
  • DispatchModule\BlatMatch
  • DispatchModule\Helpers\RnaplotHelper
  • DispatchModule\Helpers\TravelerHelper
  • DispatchModule\Models\BaseModel
  • DispatchModule\Models\BlastModel
  • DispatchModule\Models\BlastXMLParser
  • DispatchModule\Models\BlatModel
  • DispatchModule\Models\Cppredict2Model
  • DispatchModule\Models\CppredictModel
  • DispatchModule\Models\FastaModel
  • DispatchModule\Models\FileModel
  • DispatchModule\PredictParser
  • DispatchModule\ResultSet
  • DispatchModule\SearchParser
  • DispatchModule\Sequence
  • DispatchModule\Tools\AnnotationDbTool
  • DispatchModule\Tools\BaseTool
  • DispatchModule\Tools\Cppredict2Tool
  • DispatchModule\Tools\DbTool
  • DispatchModule\Tools\SimilarityTool
  • DispatchModule\Tools\TaxonomyDbTool
  • PredictModule\PredictPresenter
  • SearchModule\SearchPresenter

Interfaces

  • DispatchModule\Tools\ToolInterface

Exceptions

  • BaseModule\Exceptions\BaseException
  • BaseModule\Exceptions\NotFoundException
  • BaseModule\Exceptions\ToolException
  • Overview
  • Namespace
  • Class
  1:   2:   3:   4:   5:   6:   7:   8:   9:  10:  11:  12:  13:  14:  15:  16:  17:  18:  19:  20:  21:  22:  23:  24:  25:  26:  27:  28:  29:  30:  31:  32:  33:  34:  35:  36:  37:  38:  39:  40:  41:  42:  43:  44:  45:  46:  47:  48:  49:  50:  51:  52:  53:  54:  55:  56:  57:  58:  59:  60:  61:  62:  63:  64:  65:  66:  67:  68:  69:  70:  71:  72:  73:  74:  75:  76:  77:  78:  79:  80:  81:  82:  83:  84:  85:  86:  87:  88:  89:  90:  91:  92:  93:  94:  95:  96:  97:  98:  99: 100: 101: 102: 103: 104: 105: 106: 107: 108: 109: 110: 111: 112: 113: 114: 115: 116: 117: 118: 119: 120: 121: 122: 123: 124: 125: 126: 127: 128: 129: 130: 131: 132: 133: 134: 135: 136: 137: 138: 139: 140: 141: 142: 143: 144: 145: 146: 147: 148: 149: 150: 151: 152: 153: 154: 155: 156: 157: 158: 159: 160: 161: 162: 163: 164: 165: 166: 167: 168: 169: 170: 171: 172: 173: 174: 175: 176: 177: 178: 179: 180: 181: 182: 183: 184: 185: 186: 187: 188: 189: 190: 191: 192: 193: 194: 195: 196: 197: 198: 199: 200: 201: 202: 203: 204: 205: 206: 207: 208: 209: 210: 211: 212: 213: 214: 
<?php

namespace DispatchModule\Models;

/**
 * Blast XML Parser parses XML document generated by Blast
 *
 */
class BlastXMLParser extends \BaseModule\Models\BaseModel {

    /** 
     * Min coverage of the result and query
     * @var int
     */
    private $minCoverage;

    /** 
     * Min identity of the result and query
     * @var int
     */
    private $minIdentity;

    /** 
     * Length of the query
     * @var int
     */
    private $length;

    /**
     * Temp variable for sequence
     * @var \DispatchModule\Sequence
     */
    private $sequence;

    /**
     * Temp variable for match
     * @var \DispatchModule\BlastMatch
     */
    private $match;

    /**
     * Returned result set
     * @var \DispatchModule\ResultSet
     */
    private $result;

    /**
     * String node 
     * @var String
     */
    private $text;

    /**
     * Input XML file for parsing
     * @var FileModel
     */
    private $file;

    /**
     * Constructor - creates FileModel instance
     *
     * @param string $fileName name of the file
     */
    public function __construct($fileName) {
        $this->file = new \BaseModule\Models\FileModel($fileName);
    }

    /**
     * Get XML file name (including rel. path)
     * @return String
     */
    public function getFileName() {
        return $this->file->getFile();
    }

    /**
     * Removes file
     */
    public function deleteFile() {
        $this->file->deleteFile();
    }

    /**
     * Sets minimal required coverage
     * @param integer $minMatch
     */
    public function setMinCoverage($minCoverage) {
        $this->minCoverage = $minCoverage;
    }

    /**
     * Sets minimal required identity

     * @param integer $minMatch

     */
    public function setMinIdentity($minIdentity) {
        $this->minIdentity = $minIdentity;
    }

    /**
     * Parses Blast XML and return the result set
     * @return \DispatchModule\ResultSet Result set of sequences
     */
    public function execute() {
        $this->result = new \DispatchModule\ResultSet();
        $parser = xml_parser_create();
        xml_set_element_handler($parser, array($this, "tagStart"), array($this, "tagEnd"));
        xml_set_character_data_handler($parser, array($this, "chars"));
        if (!($file = @fopen($this->file->getFile(), "r"))) {
            return new \DispatchModule\ResultSet();
        } else {
            while ($d = fread($file, 4096)) {
                if (!xml_parse($parser, $d, feof($file))) {
                    return new \DispatchModule\ResultSet();
                }
            }
        }
        $this->result->sortByScore();
        return $this->result;
    }


    /**
     * XML node start
     * @param parser $parser
     * @param string $elementName
     * @param array $attributes
     */
    public function tagStart($parser, $elementName, $attributes) {
        $this->text = "";
        switch ($elementName) {
            case "HIT":
                $this->sequence = new \DispatchModule\Sequence;
                break;
            case "HSP":
                $this->match = new \DispatchModule\BlastMatch;
                break;
        }
    }

    /**
     * XML node end
     * @param parser $parser
     * @param string $elementName
     */
    public function tagEnd($parser, $elementName) {
        switch ($elementName) {
            case "BLASTOUTPUT_QUERY-LEN":
                $this->length = $this->text;
                break;
            case "HIT":
                if (!empty($this->sequence->matches)) {
                    $this->result->addSequence($this->sequence);
                }
                break;
            case "HIT_DEF":
        $splitted = explode(".", explode(" ", $this->text)[0]);
                $this->sequence->accession = $splitted[0];
        $this->sequence->startPosition = $splitted[1];
        $this->sequence->stopPosition = $splitted[2];
                $this->sequence->regionLength = $this->sequence->stopPosition - $this->sequence->startPosition + 1;
                break;
            case "HSP":
                if ($this->match->getCoverage() >= $this->minCoverage && $this->match->getIdentity() >= $this->minIdentity) {
                    $this->sequence->matches[] = $this->match;
                }
                break;
            case "HSP_QSEQ":
                $this->match->subsequence = str_replace("T", "U", $this->text);
                break;
            case "HSP_QUERY-FROM":
                $this->match->queryStartPosition = $this->text;
                $this->match->setCoverage(($this->match->queryStopPosition + 1 - $this->text) / $this->length);
                break;
            case "HSP_QUERY-TO":
                $this->match->queryStopPosition = $this->text;
                $this->match->setCoverage(($this->text + 1 - $this->match->queryStartPosition) / $this->length);
                break;
            case "HSP_HIT-FROM":
                $this->match->dbStartPosition = $this->sequence->startPosition + $this->text - 1;
                break;
            case "HSP_HIT-TO":
                $this->match->dbStopPosition = $this->sequence->startPosition + $this->text - 1;
                break;
            case "HSP_EVALUE":
                $this->match->setEValue($this->text);
                break;
            case "HSP_BIT-SCORE":
                $this->match->setBitScore($this->text);
                break;
            case "HSP_SCORE":
                $this->match->setScore($this->text);
                break;
            case "HSP_MIDLINE":
                $match = substr_count($this->text, "|");
                $length = strlen($this->text);
                $matchRatio = $match / $length;
                $this->match->setIdentity($matchRatio);
                break;
        }
    }

    /**
     * Processing of the element
     * @param parser $parser
     * @param string $data
     */
    public function chars($parser, $data) {
        $this->text .= $data;
    }

}
API documentation generated by ApiGen