Login | Register

Info | Home

BioPHP - Restriction Enzyme Class

Original code submitted by joseba
Code bellow is covered by GNU GPL v2 license.

Description

Last change: 2010/10/18 17:01 | Recent Changes | Original description
(short for \"Restriction Enzyme\") Contains code for the RestEn Class.

Code

Last change: 2010/10/18 17:01 | Recent Changes | Download | Original code
<?php
// RestEn.inc - contains definition of RestEn (restriction endonucleases) class.

/*
parse_args() parses arguments that are passed to a function as a single string in order
to mimic BioPerl\'s syntax: new SomeClass(argname1 => value1, argname2 => value2, ... ).
I am actually thinking of dropping this in favor of the more cumbersome format native
to PHP: new SomeClass( array(argname1 => value1, argname2 => value2, ... ) ).
*/
function parse_args($args)
        {
        $arguments = array();
        preg_match_all(\"/\\\'[a-zA-Z0-9]*\\\'=>\\\'[^\\\']+\\\'/\", $args, $match);
        foreach($match[0] as $assign_string)
                {
                $temp = preg_split(\"/=>/\", $assign_string);
                $argname = $temp[0];
                $argvalue = $temp[1];
                $argname = eregi_replace(\"\'\", \"\", $argname);
                $argvalue = eregi_replace(\"\'\", \"\", $argvalue);
                $arguments[$argname] = $argvalue;
                }
        return $arguments;
        }

$RestEn_DB = array(
        \'AasI\'      => array(\'GACNNNNNNGTC\', 7),
        \'AatI\'      => array(\'AGGCCT\', 3),
        \'AatII\'     => array(\'GACGTC\', 5),
        \"AauI\"      => array(\"TGTACA\", 1),
        \'AccI\'      => array(\'GTMKAC\', 2),
        \"AccII\"     => array(\"CGCG\", 2),
        \"AccIII\"    => array(\"TCCGGA\",1),
        \'Acc16I\'    => array(\'TGCGCA\', 3),
        \"Acc65I\"    => array(\"GGTACC\", 1),
        \'Acc113I\'   => array(\'AGTACT\', 3),
        \"AccB1I\"    => array(\"GGYRCC\", 1),
        \'AccB7I\'    => array(\'CCANNNNNTGG\', 7),
        \"AclI\"      => array(\"AACGTT\", 2),
        \"AcsI\"      => array(\"RAATTY\", 1),
        \'AcvI\'      => array(\'CACGTG\', 3),
        \'AcyI\'      => array(\'GRCGYC\', 2),
        \'AdeI\'      => array(\'CACNNNGTG\', 6),
        \'AfaI\'      => array(\'GTAC\', 2),
        \'AfeI\'      => array(\'AGCGCT\', 3),
        \'AflI\'      => array(\'GGWCC\', 1),
        \'AflII\'     => array(\'CTTAAG\', 1),
        \'AflIII\'    => array(\'ACRYGT\', 1),
        \'AgeI\'      => array(\'ACCGGT\', 1),
        \'AhaIII\'    => array(\'TTTAAA\', 3),
        \'AhdI\'      => array(\'GACNNNNNGTC\', 6),
        \'AhlI\'      => array(\'ACTAGT\', 1),
        \'AleI\'      => array(\'CACNNNNGTG\', 5),
        \'AluI\'      => array(\'AGCT\', 2),
        \'Alw21I\'    => array(\'GWGCWC\', 5),
        \'Alw44I\'    => array(\'GTGCAC\', 1),
        \'AlwNI\'     => array(\'CAGNNNCTG\', 6),
        \'Ama87I\'    => array(\'CYCGRG\', 1),
        \'AocI\'      => array(\'CCTNAGG\', 2),
        \'Aor51HI\'   => array(\'AGCGCT\', 3),
        \'ApaI\'      => array(\'GGGCCC\', 5),
        \'ApaBI\'     => array(\'GCANNNNNTGC\', 8),
        \'ApaLI\'     => array(\'GTGCAC\', 1),
        \'ApoI\'      => array(\'RAATTY\', 1),
        \'AscI\'      => array(\'GGCGCGCC\', 2),
        \'AseI\'      => array(\'ATTAAT\', 2),
        \'AsiAI\'     => array(\'ACCGGT\', 1),
        \'AsiSI\'     => array(\'GCGATCGC\', 5),
        \'AsnI\'      => array(\'ATTAAT\', 2),
        \'AspI\'      => array(\'GACNNNGTC\', 4),
        \'Asp700I\'   => array(\'GAANNNNTTC\', 5),
        \'Asp718I\'   => array(\'GGTACC\', 1),
        \'AspEI\'     => array(\'GACNNNNNGTC\', 6),
        \'AspHI\'     => array(\'GWGCWC\', 5),
        \'AspLEI\'    => array(\'GCGC\', 3),
        \'AspS9I\'    => array(\'GGNCC\', 1),
        \'AsuI\'      => array(\'GGNCC\', 1),
        \'AsuII\'     => array(\'TTCGAA\', 2),
        \'AsuC2I\'    => array(\'CCSGG\', 2),
        \'AsuNHI\'    => array(\'GCTAGC\', 1),
        \'AvaI\'      => array(\'CYCGRG\', 1),
        \'AvaII\'     => array(\'GGWCC\', 1),
        \'AviII\'     => array(\'TGCGCA\', 3),
        \'AvrII\'     => array(\'CCTAGG\', 1),
        \'AxyI\'      => array(\'CCTNAGG\', 2),
        \'BalI\'      => array(\'TGGCCA\', 3),
        \'BamHI\'     => array(\'GGATCC\', 1),
        \'BanI\'      => array(\'GGYRCC\', 1),
        \'BanII\'     => array(\'GRGCYC\', 5),
        \'BanIII\'    => array(\'ATCGAT\', 2),
        \'BbeI\'      => array(\'GGCGCC\', 5),
        \'BbrPI\'     => array(\'CACGTG\', 3),
        \'BbuI\'      => array(\'GCATGC\', 5),
        \'Bbv12I\'    => array(\'GWGCWC\', 5),
        \'BclI\'      => array(\'TGATCA\', 1),
        \'BcnI\'      => array(\'CCSGG\', 2),
        \'BcoI\'      => array(\'CYCGRG\', 1),
        \'BcuI\'      => array(\'ACTAGT\', 1),
        \'BetI\'      => array(\'WCCGGW\', 1),
        \'BfaI\'      => array(\'CTAG\', 1),
        \'BfmI\'      => array(\'CTRYAG\', 1),
        \'BfrI\'      => array(\'CTTAAG\', 1),
        \'BfrBI\'     => array(\'ATGCAT\', 3),
        \'BfuCI\'     => array(\'GATC\', 0),
        \'BglI\'      => array(\'GCCNNNNNGGC\', 7),
        \'BglII\'     => array(\'AGATCT\', 1),
        \'BlnI\'      => array(\'CCTAGG\', 1),
        \'BloHII\'    => array(\'CTGCAG\', 5),
        \'BlpI\'      => array(\'GCTNAGC\', 2),
        \'Bme18I\'    => array(\'GGWCC\', 1),
        \'Bme1390I\'  => array(\'CCNGG\', 2),
        \'Bme1580I\'  => array(\'GKGCMC\', 5),
        \'BmtI\'      => array(\'GCTAGC\', 5),
        \'BmyI\'      => array(\'GDGCHC\', 5),
        \'BoxI\'      => array(\'GACNNNNGTC\', 5),
        \'Bpu14I\'    => array(\'TTCGAA\', 2),
        \'Bpu1102I\'  => array(\'GCTNAGC\', 2),
        \'Bsa29I\'    => array(\'ATCGAT\', 2),
        \'BsaAI\'     => array(\'YACGTR\', 3),
        \'BsaBI\'     => array(\'GATNNNNATC\', 5),
        \'BsaHI\'     => array(\'GRCGYC\', 2),
        \'BsaJI\'     => array(\'CCNNGG\', 1),
        \'BsaOI\'     => array(\'CGRYCG\', 4),
        \'BsaWI\'     => array(\'WCCGGW\', 1),
        \'BscI\'      => array(\'ATCGAT\', 2),
        \'Bsc4I\'     => array(\'CCNNNNNNNGG\', 7),
        \'BscBI\'     => array(\'GGNNCC\', 3),
        \'BscFI\'     => array(\'GATC\', 0),
        \'Bse8I\'     => array(\'GATNNNNATC\', 5),
        \'Bse21I\'    => array(\'CCTNAGG\', 2),
        \'Bse118I\'   => array(\'RCCGGY\', 1),
        \'BseAI\'     => array(\'TCCGGA\', 1),
        \'BseBI\'     => array(\'CCWGG\', 2),
        \'BseCI\'     => array(\'ATCGAT\', 2),
        \'BseDI\'     => array(\'CCNNGG\', 1),
        \'BseJI\'     => array(\'GATNNNNATC\', 5),
        \'BseLI\'     => array(\'CCNNNNNNNGG\', 7),
        \'BsePI\'     => array(\'GCGCGC\', 1),
        \'BseSI\'     => array(\'GKGCMC\', 5),
        \'BseX3I\'    => array(\'CGGCCG\', 1),
        \'BshI\'      => array(\'GGCC\', 2),
        \'Bsh1236I\'  => array(\'CGCG\', 2),
        \'Bsh1285I\'  => array(\'CGRYCG\', 4),
        \'BshFI\'     => array(\'GGCC\', 2),
        \'BshNI\'     => array(\'GGYRCC\', 1),
        \'BshTI\'     => array(\'ACCGGT\', 1),
        \'BsiBI\'     => array(\'GATNNNNATC\', 5),
        \'BsiCI\'     => array(\'TTCGAA\', 2),
        \'BsiEI\'     => array(\'CGRYCG\', 4),
        \'BsiHKAI\'   => array(\'GWGCWC\', 5),
        \'BsiHKCI\'   => array(\'CYCGRG\', 1),
        \'BsiLI\'     => array(\'CCWGG\', 2),
        \'BsiMI\'     => array(\'TCCGGA\', 1),
        \'BsiQI\'     => array(\'TGATCA\', 1),
        \'BsiSI\'     => array(\'CCGG\', 1),
        \'BsiWI\'     => array(\'CGTACG\', 1),
        \'BsiXI\'     => array(\'ATCGAT\', 2),
        \'BsiYI\'     => array(\'CCNNNNNNNGG\', 7),
        \'BsiZI\'     => array(\'GGNCC\', 1),
        \'BslI\'      => array(\'CCNNNNNNNGG\', 7),
        \'BsoBI\'     => array(\'CYCGRG\', 1),
        \'Bsp13I\'    => array(\'TCCGGA\', 1),
        \'Bsp19I\'    => array(\'CCATGG\', 1),
        \'Bsp68I\'    => array(\'TCGCGA\', 3),
        \'Bsp106I\'   => array(\'ATCGAT\', 2),
        \'Bsp119I\'   => array(\'TTCGAA\', 2),
        \'Bsp120I\'   => array(\'GGGCCC\', 1),
        \'Bsp143I\'   => array(\'GATC\', 0),
        \'Bsp143II\'  => array(\'RGCGCY\', 5),
        \'Bsp1286I\'  => array(\'GDGCHC\', 5),
        \'Bsp1407I\'  => array(\'TGTACA\', 1),
        \'Bsp1720I\'  => array(\'GCTNAGC\', 2),
        \'BspA2I\'    => array(\'CCTAGG\', 1),
        \'BspCI\'     => array(\'CGATCG\', 4),
        \'BspDI\'     => array(\'ATCGAT\', 2),
        \'BspEI\'     => array(\'TCCGGA\', 1),
        \'BspHI\'     => array(\'TCATGA\', 1),
        \'BspLI\'     => array(\'GGNNCC\', 3),
        \'BspLU11I\'  => array(\'ACATGT\', 1),
        \'BspMII\'    => array(\'TCCGGA\', 1),
        \'BspTI\'     => array(\'CTTAAG\', 1),
        \'BspT104I\'  => array(\'TTCGAA\', 2),
        \'BspT107I\'  => array(\'GGYRCC\', 1),
        \'BspXI\'     => array(\'ATCGAT\', 2),
        \'BsrBRI\'    => array(\'GATNNNNATC\', 5),
        \'BsrFI\'     => array(\'RCCGGY\', 1),
        \'BsrGI\'     => array(\'TGTACA\', 1),
        \'BssAI\'     => array(\'RCCGGY\', 1),
        \'BssECI\'    => array(\'CCNNGG\', 1),
        \'BssHI\'     => array(\'CTCGAG\', 1),
        \'BssHII\'    => array(\'GCGCGC\', 1),
        \'BssKI\'     => array(\'CCNGG\', 0),
        \'BssNAI\'    => array(\'GTATAC\', 3),
        \'BssT1I\'    => array(\'CCWWGG\', 1),
        \'Bst98I\'    => array(\'CTTAAG\', 1),
        \'Bst1107I\'  => array(\'GTATAC\', 3),
        \'BstACI\'    => array(\'GRCGYC\', 2),
        \'BstAPI\'    => array(\'GCANNNNNTGC\', 7),
        \'BstBI\'     => array(\'TTCGAA\', 2),
        \'BstBAI\'    => array(\'YACGTR\', 3),
        \'Bst4CI\'    => array(\'ACNGT\', 3),
        \'BstC8I\'    => array(\'GCNNGC\', 3),
        \'BstDEI\'    => array(\'CTNAG\', 1),
        \'BstDSI\'    => array(\'CCRYGG\', 1),
        \'BstEII\'    => array(\'GGTNACC\', 1),
        \'BstENI\'    => array(\'CCTNNNNNAGG\', 5),
        \'BstENII\'   => array(\'GATC\', 0),
        \'BstFNI\'    => array(\'CGCG\', 2),
        \'BstH2I\'    => array(\'RGCGCY\', 5),
        \'BstHHI\'    => array(\'GCGC\', 3),
        \'BstHPI\'    => array(\'GTTAAC\', 3),
        \'BstKTI\'    => array(\'GATC\', 3),
        \'BstMAI\'    => array(\'CTGCAG\', 5),
        \'BstMCI\'    => array(\'CGRYCG\', 4),
        \'BstMWI\'    => array(\'GCNNNNNNNGC\', 7),
        \'BstNI\'     => array(\'CCWGG\', 2),
        \'BstNSI\'    => array(\'RCATGY\', 5),
        \'BstOI\'     => array(\'CCWGG\', 2),
        \'BstPI\'     => array(\'GGTNACC\', 1),
        \'BstPAI\'    => array(\'GACNNNNGTC\', 5),
        \'BstSCI\'    => array(\'CCNGG\', 0),
        \'BstSFI\'    => array(\'CTRYAG\', 1),
        \'BstSNI\'    => array(\'TACGTA\', 3),
        \'BstUI\'     => array(\'CGCG\', 2),
        \'Bst2UI\'    => array(\'CCWGG\', 2),
        \'BstXI\'     => array(\'CCANNNNNNTGG\', 8),
        \'BstX2I\'    => array(\'RGATCY\', 1),
        \'BstYI\'     => array(\'RGATCY\', 1),
        \'BstZI\'     => array(\'CGGCCG\', 1),
        \'BstZ17I\'   => array(\'GTATAC\', 3),
        \'Bsu15I\'    => array(\'ATCGAT\', 2),
        \'Bsu36I\'    => array(\'CCTNAGG\', 2),
        \'BsuRI\'     => array(\'GGCC\', 2),
        \'BsuTUI\'    => array(\'ATCGAT\', 2),
        \'BtgI\'      => array(\'CCRYGG\', 1),
        \'BthCI\'     => array(\'GCNGC\', 4),
        \'Cac8I\'     => array(\'GCNNGC\', 3),
        \'CaiI\'      => array(\'CAGNNNCTG\', 6),
        \'CauII\'     => array(\'CCSGG\', 2),
        \'CciNI\'     => array(\'GCGGCCGC\', 2),
        \'CelII\'     => array(\'GCTNAGC\', 2),
        \'CfoI\'      => array(\'GCGC\', 3),
        \'CfrI\'      => array(\'YGGCCR\', 1),
        \'Cfr9I\'     => array(\'CCCGGG\', 1),
        \'Cfr10I\'    => array(\'RCCGGY\', 1),
        \'Cfr13I\'    => array(\'GGNCC\', 1),
        \'Cfr42I\'    => array(\'CCGCGG\', 4),
        \'ChaI\'      => array(\'GATC\', 4),
        \'ClaI\'      => array(\'ATCGAT\', 2),
        \'CpoI\'      => array(\'CGGWCCG\', 2),
        \'CspI\'      => array(\'CGGWCCG\', 2),
        \'Csp6I\'     => array(\'GTAC\', 1),
        \'Csp45I\'    => array(\'TTCGAA\', 2),
        \'CspAI\'     => array(\'ACCGGT\', 1),
        \'CviAII\'    => array(\'CATG\', 1),
        \'CviJI\'     => array(\'RGCY\', 2),
        \'CviRI\'     => array(\'TGCA\', 2),
        \'CviTI\'     => array(\'RGCY\', 2),
        \'CvnI\'      => array(\'CCTNAGG\', 2),
        \'DdeI\'      => array(\'CTNAG\', 1),
        \'DpnI\'      => array(\'GATC\', 2),
        \'DpnII\'     => array(\'GATC\', 0),
        \'DraI\'      => array(\'TTTAAA\', 3),
        \'DraII\'     => array(\'RGGNCCY\', 2),
        \'DraIII\'    => array(\'CACNNNGTG\', 6),
        \'DrdI\'      => array(\'GACNNNNNNGTC\', 7),
        \'DsaI\'      => array(\'CCRYGG\', 1),
        \'DseDI\'     => array(\'GACNNNNNNGTC\', 7),
        \'EaeI\'      => array(\'YGGCCR\', 1),
        \'EagI\'      => array(\'CGGCCG\', 1),
        \'Eam1105I\'  => array(\'GACNNNNNGTC\', 6),
        \'Ecl136II\'  => array(\'GAGCTC\', 3),
        \'EclHKI\'    => array(\'GACNNNNNGTC\', 6),
        \'EclXI\'     => array(\'CGGCCG\', 1),
        \'Eco24I\'    => array(\'GRGCYC\', 5),
        \'Eco32I\'    => array(\'GATATC\', 3),
        \'Eco47I\'    => array(\'GGWCC\', 1),
        \'Eco47III\'  => array(\'AGCGCT\', 3),
        \'Eco52I\'    => array(\'CGGCCG\', 1),
        \'Eco72I\'    => array(\'CACGTG\', 3),
        \'Eco81I\'    => array(\'CCTNAGG\', 2),
        \'Eco88I\'    => array(\'CYCGRG\', 1),
        \'Eco91I\'    => array(\'GGTNACC\', 1),
        \'Eco105I\'   => array(\'TACGTA\', 3),
        \'Eco130I\'   => array(\'CCWWGG\', 1),
        \'Eco147I\'   => array(\'AGGCCT\', 3),
        \'EcoHI\'     => array(\'CCSGG\', 0),
        \'EcoICRI\'   => array(\'GAGCTC\', 3),
        \'EcoNI\'     => array(\'CCTNNNNNAGG\', 5),
        \'EcoO65I\'   => array(\'GGTNACC\', 1),
        \'EcoO109I\'  => array(\'RGGNCCY\', 2),
        \'EcoRI\'     => array(\'GAATTC\', 1),
        \'EcoRII\'    => array(\'CCWGG\', 0),
        \'EcoRV\'     => array(\'GATATC\', 3),
        \'EcoT14I\'   => array(\'CCWWGG\', 1),
        \'EcoT22I\'   => array(\'ATGCAT\', 5),
        \'EcoT38I\'   => array(\'GRGCYC\', 5),
        \'EgeI\'      => array(\'GGCGCC\', 3),
        \'EheI\'      => array(\'GGCGCC\', 3),
        \'ErhI\'      => array(\'CCWWGG\', 1),
        \'EsaBC3I\'   => array(\'TCGA\', 2),
        \'EspI\'      => array(\'GCTNAGC\', 2),
        \'FatI\'      => array(\'CATG\', 0),
        \'FauNDI\'    => array(\'CATATG\', 2),
        \'FbaI\'      => array(\'TGATCA\', 1),
        \'FblI\'      => array(\'GTMKAC\', 2),
        \'FmuI\'      => array(\'GGNCC\', 4),
        \'FnuDII\'    => array(\'CGCG\', 2),
        \'Fnu4HI\'    => array(\'GCNGC\', 2),
        \'FriOI\'     => array(\'GRGCYC\', 5),
        \'FseI\'      => array(\'GGCCGGCC\', 6),
        \'FspI\'      => array(\'TGCGCA\', 3),
        \'FspAI\'     => array(\'RTGCGCAY\', 4),
        \'Fsp4HI\'    => array(\'GCNGC\', 2),
        \'FunI\'      => array(\'AGCGCT\', 3),
        \'FunII\'     => array(\'GAATTC\', 1),
        \'HaeI\'      => array(\'WGGCCW\', 3),
        \'HaeII\'     => array(\'RGCGCY\', 5),
        \'HaeIII\'    => array(\'GGCC\', 2),
        \'HapII\'     => array(\'CCGG\', 1),
        \'HgiAI\'     => array(\'GWGCWC\', 5),
        \'HgiCI\'     => array(\'GGYRCC\', 1),
        \'HgiJII\'    => array(\'GRGCYC\', 5),
        \'HhaI\'      => array(\'GCGC\', 3),
        \'Hin1I\'     => array(\'GRCGYC\', 2),
        \'Hin6I\'     => array(\'GCGC\', 1),
        \'HinP1I\'    => array(\'GCGC\', 1),
        \'HincII\'    => array(\'GTYRAC\', 3),
        \'HindII\'    => array(\'GTYRAC\', 3),
        \'HindIII\'   => array(\'AAGCTT\', 1),
        \'HinfI\'     => array(\'GANTC\', 1),
        \'HpaI\'      => array(\'GTTAAC\', 3),
        \'HpaII\'     => array(\'CCGG\', 1),
        \'Hpy8I\'     => array(\'GTNNAC\', 3),
        \'Hpy99I\'    => array(\'CGWCG\', 5),
        \'Hpy178III\' => array(\'TCNNGA\', 2),
        \'Hpy188I\'   => array(\'TCNGA\', 3),
        \'Hpy188III\' => array(\'TCNNGA\', 2),
        \'HpyCH4I\'   => array(\'CATG\', 3),
        \'HpyCH4III\' => array(\'ACNGT\', 3),
        \'HpyCH4IV\'  => array(\'ACGT\', 1),
        \'HpyCH4V\'   => array(\'TGCA\', 2),
        \'HpyF10VI\'  => array(\'GCNNNNNNNGC\', 8),
        \'Hsp92I\'    => array(\'GRCGYC\', 2),
        \'Hsp92II\'   => array(\'CATG\', 4),
        \'HspAI\'     => array(\'GCGC\', 1),
        \'ItaI\'      => array(\'GCNGC\', 2),
        \'KasI\'      => array(\'GGCGCC\', 1),
        \'KpnI\'      => array(\'GGTACC\', 5),
        \'Kpn2I\'     => array(\'TCCGGA\', 1),
        \'KspI\'      => array(\'CCGCGG\', 4),
        \'Ksp22I\'    => array(\'TGATCA\', 1),
        \'KspAI\'     => array(\'GTTAAC\', 3),
        \'Kzo9I\'     => array(\'GATC\', 0),
        \'LpnI\'      => array(\'RGCGCY\', 3),
        \'LspI\'      => array(\'TTCGAA\', 2),
        \'MabI\'      => array(\'ACCWGGT\', 1),
        \'MaeI\'      => array(\'CTAG\', 1),
        \'MaeII\'     => array(\'ACGT\', 1),
        \'MaeIII\'    => array(\'GTNAC\', 0),
        \'MamI\'      => array(\'GATNNNNATC\', 5),
        \'MboI\'      => array(\'GATC\', 0),
        \'McrI\'      => array(\'CGRYCG\', 4),
        \'MfeI\'      => array(\'CAATTG\', 1),
        \'MflI\'      => array(\'RGATCY\', 1),
        \'MhlI\'      => array(\'GDGCHC\', 5),
        \'MlsI\'      => array(\'TGGCCA\', 3),
        \'MluI\'      => array(\'ACGCGT\', 1),
        \'MluNI\'     => array(\'TGGCCA\', 3),
        \'Mly113I\'   => array(\'GGCGCC\', 2),
        \'Mph1103I\'  => array(\'ATGCAT\', 5),
        \'MroI\'      => array(\'TCCGGA\', 1),
        \'MroNI\'     => array(\'GCCGGC\', 1),
        \'MroXI\'     => array(\'GAANNNNTTC\', 5),
        \'MscI\'      => array(\'TGGCCA\', 3),
        \'MseI\'      => array(\'TTAA\', 1),
        \'MslI\'      => array(\'CAYNNNNRTG\', 5),
        \'MspI\'      => array(\'CCGG\', 1),
        \'Msp20I\'    => array(\'TGGCCA\', 3),
        \'MspA1I\'    => array(\'CMGCKG\', 3),
        \'MspCI\'     => array(\'CTTAAG\', 1),
        \'MspR9I\'    => array(\'CCNGG\', 2),
        \'MssI\'      => array(\'GTTTAAAC\', 4),
        \'MstI\'      => array(\'TGCGCA\', 3),
        \'MunI\'      => array(\'CAATTG\', 1),
        \'MvaI\'      => array(\'CCWGG\', 2),
        \'MvnI\'      => array(\'CGCG\', 2),
        \'MwoI\'      => array(\'GCNNNNNNNGC\', 7),
        \'NaeI\'      => array(\'GCCGGC\', 3),
        \'NarI\'      => array(\'GGCGCC\', 2),
        \'NciI\'      => array(\'CCSGG\', 2),
        \'NcoI\'      => array(\'CCATGG\', 1),
        \'NdeI\'      => array(\'CATATG\', 2),
        \'NdeII\'     => array(\'GATC\', 0),
        \'NgoAIV\'    => array(\'GCCGGC\', 1),
        \'NgoMIV\'    => array(\'GCCGGC\', 1),
        \'NheI\'      => array(\'GCTAGC\', 1),
        \'NlaIII\'    => array(\'CATG\', 4),
        \'NlaIV\'     => array(\'GGNNCC\', 3),
        \'Nli3877I\'  => array(\'CYCGRG\', 5),
        \'NmuCI\'     => array(\'GTSAC\', 0),
        \'NotI\'      => array(\'GCGGCCGC\', 2),
        \'NruI\'      => array(\'TCGCGA\', 3),
        \'NruGI\'     => array(\'GACNNNNNGTC\', 6),
        \'NsbI\'      => array(\'TGCGCA\', 3),
        \'NsiI\'      => array(\'ATGCAT\', 5),
        \'NspI\'      => array(\'RCATGY\', 5),
        \'NspIII\'    => array(\'CYCGRG\', 1),
        \'NspV\'      => array(\'TTCGAA\', 2),
        \'NspBII\'    => array(\'CMGCKG\', 3),
        \'OliI\'      => array(\'CACNNNNGTG\', 5),
        \'PacI\'      => array(\'TTAATTAA\', 5),
        \'PaeI\'      => array(\'GCATGC\', 5),
        \'PaeR7I\'    => array(\'CTCGAG\', 1),
        \'PagI\'      => array(\'TCATGA\', 1),
        \'PalI\'      => array(\'GGCC\', 2),
        \'PauI\'      => array(\'GCGCGC\', 1),
        \'PceI\'      => array(\'AGGCCT\', 3),
        \'PciI\'      => array(\'ACATGT\', 1),
        \'PdiI\'      => array(\'GCCGGC\', 3),
        \'PdmI\'      => array(\'GAANNNNTTC\', 5),
        \'Pfl23II\'   => array(\'CGTACG\', 1),
        \'PflBI\'     => array(\'CCANNNNNTGG\', 7),
        \'PflFI\'     => array(\'GACNNNGTC\', 4),
        \'PflMI\'     => array(\'CCANNNNNTGG\', 7),
        \'PfoI\'      => array(\'TCCNGGA\', 1),
        \'PinAI\'     => array(\'ACCGGT\', 1),
        \'Ple19I\'    => array(\'CGATCG\', 4),
        \'PmaCI\'     => array(\'CACGTG\', 3),
        \'PmeI\'      => array(\'GTTTAAAC\', 4),
        \'PmlI\'      => array(\'CACGTG\', 3),
        \'Ppu10I\'    => array(\'ATGCAT\', 1),
        \'PpuMI\'     => array(\'RGGWCCY\', 2),
        \'PpuXI\'     => array(\'RGGWCCY\', 2),
        \'PshAI\'     => array(\'GACNNNNGTC\', 5),
        \'PshBI\'     => array(\'ATTAAT\', 2),
        \'PsiI\'      => array(\'TTATAA\', 3),
        \'Psp03I\'    => array(\'GGWCC\', 4),
        \'Psp5II\'    => array(\'RGGWCCY\', 2),
        \'Psp6I\'     => array(\'CCWGG\', 0),
        \'Psp1406I\'  => array(\'AACGTT\', 2),
        \'PspAI\'     => array(\'CCCGGG\', 1),
        \'Psp124BI\'  => array(\'GAGCTC\', 5),
        \'PspEI\'     => array(\'GGTNACC\', 1),
        \'PspGI\'     => array(\'CCWGG\', 0),
        \'PspLI\'     => array(\'CGTACG\', 1),
        \'PspN4I\'    => array(\'GGNNCC\', 3),
        \'PspOMI\'    => array(\'GGGCCC\', 1),
        \'PspPI\'     => array(\'GGNCC\', 1),
        \'PspPPI\'    => array(\'RGGWCCY\', 2),
        \'PssI\'      => array(\'RGGNCCY\', 5),
        \'PstI\'      => array(\'CTGCAG\', 5),
        \'PsuI\'      => array(\'RGATCY\', 1),
        \'PsyI\'      => array(\'GACNNNGTC\', 4),
        \'PvuI\'      => array(\'CGATCG\', 4),
        \'PvuII\'     => array(\'CAGCTG\', 3),
        \'RcaI\'      => array(\'TCATGA\', 1),
        \'RsaI\'      => array(\'GTAC\', 2),
        \'RsrII\'     => array(\'CGGWCCG\', 2),
        \'Rsr2I\'     => array(\'CGGWCCG\', 2),
        \'SacI\'      => array(\'GAGCTC\', 5),
        \'SacII\'     => array(\'CCGCGG\', 4),
        \'SalI\'      => array(\'GTCGAC\', 1),
        \'SanDI\'     => array(\'GGGWCCC\', 2),
        \'SatI\'      => array(\'GCNGC\', 2),
        \'SauI\'      => array(\'CCTNAGG\', 2),
        \'Sau96I\'    => array(\'GGNCC\', 1),
        \'Sau3AI\'    => array(\'GATC\', 0),
        \'SbfI\'      => array(\'CCTGCAGG\', 6),
        \'ScaI\'      => array(\'AGTACT\', 3),
        \'SciI\'      => array(\'CTCGAG\', 3),
        \'ScrFI\'     => array(\'CCNGG\', 2),
        \'SdaI\'      => array(\'CCTGCAGG\', 6),
        \'SduI\'      => array(\'GDGCHC\', 5),
        \'SecI\'      => array(\'CCNNGG\', 1),
        \'SelI\'      => array(\'CGCG\', 0),
        \'SexAI\'     => array(\'ACCWGGT\', 1),
        \'SfcI\'      => array(\'CTRYAG\', 1),
        \'SfeI\'      => array(\'CTRYAG\', 1),
        \'SfiI\'      => array(\'GGCCNNNNNGGCC\', 8),
        \'SfoI\'      => array(\'GGCGCC\', 3),
        \'Sfr274I\'   => array(\'CTCGAG\', 1),
        \'Sfr303I\'   => array(\'CCGCGG\', 4),
        \'SfuI\'      => array(\'TTCGAA\', 2),
        \'SgfI\'      => array(\'GCGATCGC\', 5),
        \'SgrAI\'     => array(\'CRCCGGYG\', 2),
        \'SgrBI\'     => array(\'CCGCGG\', 4),
        \'SinI\'      => array(\'GGWCC\', 1),
        \'SlaI\'      => array(\'CTCGAG\', 1),
        \'SmaI\'      => array(\'CCCGGG\', 3),
        \'SmiI\'      => array(\'ATTTAAAT\', 4),
        \'SmiMI\'     => array(\'CAYNNNNRTG\', 5),
        \'SmlI\'      => array(\'CTYRAG\', 1),
        \'SnaBI\'     => array(\'TACGTA\', 3),
        \'SpaHI\'     => array(\'GCATGC\', 5),
        \'SpeI\'      => array(\'ACTAGT\', 1),
        \'SphI\'      => array(\'GCATGC\', 5),
        \'SplI\'      => array(\'CGTACG\', 1),
        \'SrfI\'      => array(\'GCCCGGGC\', 4),
        \'Sse9I\'     => array(\'AATT\', 0),
        \'Sse232I\'   => array(\'CGCCGGCG\', 2),
        \'Sse8387I\'  => array(\'CCTGCAGG\', 6),
        \'Sse8647I\'  => array(\'AGGWCCT\', 2),
        \'SseBI\'     => array(\'AGGCCT\', 3),
        \'SspI\'      => array(\'AATATT\', 3),
        \'SspBI\'     => array(\'TGTACA\', 1),
        \'SstI\'      => array(\'GAGCTC\', 5),
        \'SstII\'     => array(\'CCGCGG\', 4),
        \'StuI\'      => array(\'AGGCCT\', 3),
        \'StyI\'      => array(\'CCWWGG\', 1),
        \'SunI\'      => array(\'CGTACG\', 1),
        \'SwaI\'      => array(\'ATTTAAAT\', 4),
        \'TaaI\'      => array(\'ACNGT\', 3),
        \'TaiI\'      => array(\'ACGT\', 4),
        \'TaqI\'      => array(\'TCGA\', 1),
        \'TasI\'      => array(\'AATT\', 0),
        \'TatI\'      => array(\'WGTACW\', 1),
        \'TauI\'      => array(\'GCSGC\', 4),
        \'TelI\'      => array(\'GACNNNGTC\', 4),
        \'TfiI\'      => array(\'GAWTC\', 1),
        \'ThaI\'      => array(\'CGCG\', 2),
        \'TliI\'      => array(\'CTCGAG\', 1),
        \'Tru1I\'     => array(\'TTAA\', 1),
        \'Tru9I\'     => array(\'TTAA\', 1),
        \'TscI\'      => array(\'ACGT\', 4),
        \'TseI\'      => array(\'GCWGC\', 1),
        \'Tsp45I\'    => array(\'GTSAC\', 0),
        \'Tsp509I\'   => array(\'AATT\', 0),
        \'Tsp4CI\'    => array(\'ACNGT\', 3),
        \'TspEI\'     => array(\'AATT\', 0),
        \'Tth111I\'   => array(\'GACNNNGTC\', 4),
        \'TthHB8I\'   => array(\'TCGA\', 1),
        \'UnbI\'      => array(\'GGNCC\', 0),
        \'Van91I\'    => array(\'CCANNNNNTGG\', 7),
        \'Vha464I\'   => array(\'CTTAAG\', 1),
        \'VneI\'      => array(\'GTGCAC\', 1),
        \'VpaK11AI\'  => array(\'GGWCC\', 0),
        \'VpaK11BI\'  => array(\'GGWCC\', 1),
        \'VspI\'      => array(\'ATTAAT\', 2),
        \'XagI\'      => array(\'CCTNNNNNAGG\', 5),
        \'XapI\'      => array(\'RAATTY\', 1),
        \'XbaI\'      => array(\'TCTAGA\', 1),
        \'XceI\'      => array(\'RCATGY\', 5),
        \'XcmI\'      => array(\'CCANNNNNNNNNTGG\', 8),
        \'XhoI\'      => array(\'CTCGAG\', 1),
        \'XhoII\'     => array(\'RGATCY\', 1),
        \'XmaI\'      => array(\'CCCGGG\', 1),
        \'XmaIII\'    => array(\'CGGCCG\', 1),
        \'XmaCI\'     => array(\'CCCGGG\', 1),
        \'XmaJI\'     => array(\'CCTAGG\', 1),
        \'XmiI\'      => array(\'GTMKAC\', 2),
        \'XmnI\'      => array(\'GAANNNNTTC\', 5),
        \'XspI\'      => array(\'CTAG\', 1),
        \'ZhoI\'      => array(\'ATCGAT\', 2),
        \'ZraI\'      => array(\'GACGTC\', 3),
        \'Zsp2I\'     => array(\'ATGCAT\', 5)
        );

class RestEn
{ // OPENS RestEn Class
var $name;
var $pattern;
var $cutpos;
var $length;

// CutSeq() cuts a DNA sequence into fragments using the restriction enzyme object.
function CutSeq($seq, $options = \"N\")
        { // OPENS function CutSeq
        if ($options == \"N\")
                { // OPENS if ($options == \"N\")
                // patpos() returns: ( \"PAT1\" => (0, 12), \"PAT2\" => (7, 29, 53) )
                $patpos_r = $seq->patpos($this->pattern, \"I\");
                $frag = array();
                foreach($patpos_r as $patkey => $pos_r)
                        {
                        $ctr = 0;
                        foreach($pos_r as $currindex)
                                {
                                $ctr++;
                                if ($ctr == 1)
                                        {
                                        // 1st fragment is everything to the left of the 1st occurrence of pattern
                                        $frag[] = substr($seq->sequence, 0, $currindex + $this->cutpos);
                                        $previndex = $currindex;
                                        continue;
                                        }
                                if (($currindex - $previndex) >= $this->cutpos)
                                        {
                                        $newcount = $currindex - $previndex;
                                        $frag[] = substr($seq->sequence, $previndex + $this->cutpos, $newcount);
                                        $previndex = $currindex;
                                        }
                                else continue;
                                }
                        // The last (right-most) fragment.
                        $frag[] = substr($seq->sequence, $previndex + $this->cutpos);
                        }
                return $frag;
                } // CLOSES if ($options == \"N\")
        elseif ($options == \"O\")
                { // OPENS elseif ($options == \"O\")
                $pos_r = $seq->patposo($this->pattern, \"I\", $this->cutpos);
                $ctr = 0;
                foreach($pos_r as $currindex)
                        {
                        $ctr++;
                        if ($ctr == 1)
                                {
                                $frag[] = substr($seq->sequence, 0, $currindex + $this->cutpos);
                                $previndex = $currindex;
                                continue;
                                }
                        if (($currindex - $previndex) >= $this->cutpos)
                                {
                                $newcount = $currindex - $previndex;
                                $frag[] = substr($seq->sequence, $previndex + $this->cutpos, $newcount);
                                $previndex = $currindex;
                                }
                        else continue;
                        }
                // The last (right-most) fragment.
                $frag[] = substr($seq->sequence, $previndex + $this->cutpos);
                return $frag;
                } // CLOSES elseif ($options == \"O\")
        } // CLOSES function CutSeq

/*
RestEn() is the constructor method for the RestEn class.  It creates a new
RestEn object and initializes its properties accordingly.

RestEn() behavior:
If passed with make = \'custom\', object will be added to RestEn_DB.
If not, the function will attemp to retrieve data from RestEn_DB.
If unsuccessful in retrieving data, it will return an error flag.
*/
function RestEn($args)
        {
        global $RestEn_DB;

        $arguments = parse_args($args);

        if ($arguments[\"make\"] == \"custom\")
                {
                $this->name = $arguments[\"name\"];
                $this->pattern = $arguments[\"pattern\"];
                $this->cutpos = $arguments[\"cutpos\"];
                $this->length = strlen($this->pattern);

                $inner = array();
                $inner[] = $arguments[\"pattern\"];
                $inner[] = $arguments[\"cutpos\"];
                $RestEn_DB[$this->name] = $inner;
                }
        else
                {
                // Look for given endonuclease in the RestEn_DB array.

                $this->name = $arguments[\"name\"];
                $temp = $this->GetPattern($this->name);
                if ($temp == FALSE)
                        die(\"Cannot find entry in restriction endonuclease database.\");
                else
                        {
                        $this->pattern = $temp;
                        $this->cutpos = $this->GetCutPos($this->name);
                        $this->length = strlen($this->pattern);
                        }
                }
        }

// GetPattern() returns the pattern associated with a given restriction endonuclease.
function GetPattern($RestEn_Name)
        {
        global $RestEn_DB;
        return $RestEn_DB[$RestEn_Name][0];
        }

// GetCutPos() returns the cutting position of the restriction enzyme object.
function GetCutPos($RestEn_Name)
        {
        global $RestEn_DB;
        return $RestEn_DB[$RestEn_Name][1];
        }

// GetLength() returns the length of the cutting pattern of the restriction enzyme object.
function GetLength($RestEn_Name = \"\")
        {
        global $RestEn_DB;

        if ($RestEn_Name == \"\") return strlen($this->pattern);
        else return strlen($RestEn_DB[$RestEn_Name][0]);
        }

// FindRestEn() is a flexible method for searching the Restriction Enzyme database
// for entries meeting complex criteria.  It returns an array of RestEn objects.
function FindRestEn($pattern = \"\", $cutpos = \"\", $plen = \"\")
        { // OPENS function FindRestEn().
        global $RestEn_DB;

        // 5 Cases: pattern only, cutpos only, patternlength only
        //          pattern and cutpos, cutpos and patternlength
        $RestEn_List = array();

        // Case 1: Pattern only
        if (($pattern != \"\") and ($cutpos == \"\") and ($plen == \"\"))
                {
                foreach($RestEn_DB as $key => $value)
                        if ($value[0] == $pattern)
                        $RestEn_List[] = $key;
                return $RestEn_List;
                }

        // Case 2: Cutpos only
        if (($pattern == \"\") and ($cutpos != \"\") and ($plen == \"\"))
                { // OPENS if (($pattern == \"\") and ($cutpos != \"\") and ($plen == \"\"))
                $firstchar = substr($cutpos, 0, 1);
                $first2chars = substr($cutpos, 0, 2);
                if (gettype($cutpos) == \"string\")
                        { // OPENS if (gettype($cutpos) == \"string\")
                        if (preg_match(\"/^<\\d+$/\", $cutpos))
                                {
                                foreach($RestEn_DB as $key => $value)
                                 if ($value[1] < (int) substr($cutpos,1))
                                         $RestEn_List[] = $key;
                                return $RestEn_List;
                                }
                        elseif (preg_match(\"/^>\\d+$/\", $cutpos))
                                {
                                foreach($RestEn_DB as $key => $value)
                                        if ($value[1] > (int) substr($cutpos,1))
                                                $RestEn_List[] = $key;
                                return $RestEn_List;
                                }
                        elseif (preg_match(\"/^>=\\d+$/\", $cutpos))
                                {
                                foreach($RestEn_DB as $key => $value)
                                        if ($value[1] >= (int) substr($cutpos,2))
                                                $RestEn_List[] = $key;
                                return $RestEn_List;
                                }
                        elseif (preg_match(\"/^<=\\d+$/\", $cutpos))
                                {
                                foreach($RestEn_DB as $key => $value)
                                        if ($value[1] <= (int) substr($cutpos,2))
                                                $RestEn_List[] = $key;
                                return $RestEn_List;
                                }
                        elseif (preg_match(\"/^=\\d+$/\", $cutpos))
                                {
                                foreach($RestEn_DB as $key => $value)
                                        if ($value[1] == substr($cutpos,1))
                                                $RestEn_List[] = $key;
                                return $RestEn_List;
                                }
                        else die(\"Malformed cutpos parameter.\");
                        } // CLOSES if (gettype($cutpos) == \"string\")
                elseif (gettype($cutpos) == \"integer\")
                        {
                        foreach($RestEn_DB as $key => $value)
                                if ($value[1] == $cutpos)
                                        $RestEn_List[] = $key;
                        return $RestEn_List;
                        }
                } // CLOSES if (($pattern == \"\") and ($cutpos != \"\") and ($plen == \"\"))

        // Case 3: Patternlength only
        if (($pattern == \"\") and ($cutpos == \"\") and ($plen != \"\"))
                {
                foreach($RestEn_DB as $key => $value)
                        if (strlen($value[0]) == $plen)
                                $RestEn_List[] = $key;
                return $RestEn_List;
                }

        // Case 4: Pattern and cutpos only
        if (($pattern != \"\") and ($cutpos != \"\") and ($plen == \"\"))
                {
                foreach($RestEn_DB as $key => $value)
                        if (($value[0] == $pattern) and ($value[1] == $cutpos))
                                $RestEn_List[] = $key;
                return $RestEn_List;
                }

        // Case 5: Cutpos and plen only.
        if (($pattern == \"\") and ($cutpos != \"\") and ($plen != \"\"))
                {
                foreach($RestEn_DB as $key => $value)
                        if (($value[1] == $cutpos) and (strlen($value[0]) == $plen))
                                $RestEn_List[] = $key;
                return $RestEn_List;
                }

        die(\"Invalid combination of function parameters.\");
        } // CLOSES function FindRestEn().
} // CLOSES RestEn Class
?>