gnCompare.cpp Source File

Main Page Namespace List Class Hierarchy Alphabetical List Compound List File List Compound Members File Members

# gnCompare.cpp

Go to the documentation of this file.

    00001 /////////////////////////////////////////////////////////////////////////////
    00002 // File:            gnCompare.cpp
    00003 // Purpose:         Coparator for all Sequences
    00004 // Description:     Compares sequences
    00005 // Changes:
    00006 // Version:         libGenome 0.5.1
    00007 // Author:          Aaron Darling
    00008 // Modified by:
    00009 // Copyright:       (c) Aaron Darling
    00010 // Licenses:        See COPYING file for details
    00011 /////////////////////////////////////////////////////////////////////////////
    00012 #include "gn/gnCompare.h"
    00013
    00014 //      public:
    00015
    00016 const gnCompare *gnCompare::ProteinSeqCompare(){
    00017         const static gnCompare* t_comp = new gnCompare(ProteinSeqCompareType);
    00018         return t_comp;
    00019 }
    00020 const gnCompare *gnCompare::DNASeqCompare(){
    00021         const static gnCompare* t_comp = new gnCompare(DNASeqCompareType);
    00022         return t_comp;
    00023 }
    00024 const gnCompare *gnCompare::RNASeqCompare(){
    00025         const static gnCompare* t_comp = new gnCompare(RNASeqCompareType);
    00026         return t_comp;
    00027 }
    00028
    00029 gnCompare::gnCompare( const gnCompareType c_type ){
    00030         for( gnSeqC i = 0; i < GNSEQC_MAX; ++i ){
    00031                 m_pairArray[i] = new gnSeqC[1];
    00032                 m_pairArray[i][0] = 0;
    00033                 m_containArray[i] = new gnSeqC[1];
    00034                 m_containArray[i][0] = 0;
    00035         }
    00036         switch(c_type){
    00037                 case ProteinSeqCompareType:
    00038                         CreateProteinComparator();
    00039                         break;
    00040                 case DNASeqCompareType:
    00041                         CreateDNAComparator();
    00042                         break;
    00043                 case RNASeqCompareType:
    00044                         CreateRNAComparator();
    00045                         break;
    00046         }
    00047 }
    00048
    00049 boolean gnCompare::Contains( gnSeqC ch, gnSeqC ch2, boolean case_sensitive) const
    00050 {
    00051         if(!case_sensitive){
    00052                 ch = toupper(ch);
    00053                 ch2 = toupper(ch2);
    00054         }
    00055         if(strchr(m_containArray[ch], ch2) == 0)
    00056                 return false;
    00057         return true;
    00058 }
    00059
    00060 boolean gnCompare::Contains( const gnSeqC* seq, const gnSeqC* seq2, const uint32 len, boolean case_sensitive ) const{
    00061         for( uint32 i=0; i < len ; ++i )
    00062                 if(!Contains(seq[i], seq2[i], case_sensitive))
    00063                         return false;
    00064         return true;
    00065 }
    00066
    00067 boolean gnCompare::Contains( const string &seq, const string &seq2, boolean case_sensitive) const
    00068 {
    00069         gnSeqI shorter_len = seq.length() < seq2.length() ? seq.length() : seq2.length();
    00070         return Contains( (gnSeqC*)seq.data(), (gnSeqC*)seq2.data(), shorter_len, case_sensitive );
    00071 }
    00072 //      public:
    00073 gnCompare::gnCompare()
    00074 {
    00075         for( gnSeqC i = 0; i < GNSEQC_MAX; ++i ){
    00076                 m_pairArray[i] = new gnSeqC[1];
    00077                 m_pairArray[i][0] = 0;
    00078                 m_containArray[i] = new gnSeqC[1];
    00079                 m_containArray[i][0] = 0;
    00080         }
    00081 }
    00082
    00083 gnCompare::gnCompare( const gnCompare &sf )
    00084 {
    00085         m_name = sf.m_name;
    00086         for( gnSeqC i = 0; i < GNSEQC_MAX; ++i ){
    00087                 m_pairArray[i] = new gnSeqC[strlen(sf.m_pairArray[i])+1];
    00088                 strcpy(m_pairArray[i], sf.m_pairArray[i]);
    00089                 m_containArray[i] = new gnSeqC[strlen(sf.m_containArray[i])+1];
    00090                 strcpy(m_containArray[i], sf.m_containArray[i]);
    00091         }
    00092 }
    00093 gnCompare::~gnCompare()
    00094 {
    00095         for( gnSeqC i = 0; i < GNSEQC_MAX; ++i ){
    00096                 delete[] m_pairArray[i];
    00097                 delete[] m_containArray[i];
    00098         }
    00099 }
    00100
    00101
    00102 void gnCompare::AddArrayEntry( gnSeqC *array[GNSEQC_MAX], const gnSeqC ch, const gnSeqC ch2){
    00103         uint32 curlen = strlen(array[ch]);
    00104         gnSeqC* tmp = new gnSeqC[curlen + 2];
    00105         strcpy(tmp, array[ch]);
    00106         tmp[curlen] = ch2;
    00107         tmp[curlen+1] = 0;
    00108         delete[] array[ch];
    00109         array[ch] = tmp;
    00110 }
    00111
    00112 void gnCompare::DelArrayEntry( gnSeqC *array[GNSEQC_MAX], const gnSeqC ch, const gnSeqC ch2){
    00113         //check that the pair exists
    00114         gnSeqC* loc = strchr(m_containArray[ch], ch2);
    00115         uint32 count = 0;
    00116         while(loc != NULL){
    00117                 count++;
    00118                 loc = strchr(loc+1, ch2);
    00119         }
    00120         if(count == 0)
    00121                 return;
    00122
    00123         uint32 curlen = strlen(array[ch]);
    00124         gnSeqC* tmp = new gnSeqC[curlen - count];
    00125         uint32 tmppos = 0;
    00126         for(uint32 i=0; i < curlen; i++)
    00127                 if(m_containArray[ch][i] != ch2)
    00128                         tmp[tmppos++] = m_containArray[ch][i];
    00129         tmp[tmppos] = 0;
    00130         delete[] array[ch];
    00131         array[ch] = tmp;
    00132 }
    00133
    00134
    00135 void gnCompare::CreateProteinComparator()
    00136 {
    00137         SetName( "Protein Comparator" );
    00138         SetSingle( 'A' );
    00139         SetSingle( 'R' );
    00140         SetSingle( 'N' );
    00141         SetSingle( 'D' );
    00142         SetSingle( 'C' );
    00143         SetSingle( 'Q' );
    00144         SetSingle( 'E' );
    00145         SetSingle( 'G' );
    00146         SetSingle( 'H' );
    00147         SetSingle( 'I' );
    00148         SetSingle( 'L' );
    00149         SetSingle( 'K' );
    00150         SetSingle( 'M' );
    00151         SetSingle( 'F' );
    00152         SetSingle( 'P' );
    00153         SetSingle( 'S' );
    00154         SetSingle( 'T' );
    00155         SetSingle( 'W' );
    00156         SetSingle( 'Y' );
    00157         SetSingle( 'V' );
    00158         SetSingle( '.' );
    00159
    00160         SetSingle( 'a' );
    00161         SetSingle( 'r' );
    00162         SetSingle( 'n' );
    00163         SetSingle( 'd' );
    00164         SetSingle( 'c' );
    00165         SetSingle( 'q' );
    00166         SetSingle( 'e' );
    00167         SetSingle( 'g' );
    00168         SetSingle( 'h' );
    00169         SetSingle( 'i' );
    00170         SetSingle( 'l' );
    00171         SetSingle( 'k' );
    00172         SetSingle( 'm' );
    00173         SetSingle( 'f' );
    00174         SetSingle( 'p' );
    00175         SetSingle( 's' );
    00176         SetSingle( 't' );
    00177         SetSingle( 'w' );
    00178         SetSingle( 'y' );
    00179         SetSingle( 'v' );
    00180 }
    00181
    00182 void gnCompare::CreateDNAComparator()
    00183 {
    00184         SetName( "Full DNA Comparator" );
    00185
    00186         SetSingle( 'a' );
    00187         SetSingle( 'c' );
    00188         SetSingle( 'g' );
    00189         SetSingle( 't' );
    00190         SetSingle( 'r' );
    00191         SetSingle( 'k' );
    00192         SetSingle( 's' );
    00193         SetSingle( 'm' );
    00194         SetSingle( 'y' );
    00195         SetSingle( 'w' );
    00196         SetSingle( 'b' );
    00197         SetSingle( 'v' );
    00198         SetSingle( 'd' );
    00199         SetSingle( 'h' );
    00200         SetSingle( 'n' );
    00201         SetSingle( 'x' );
    00202
    00203         SetSingle( 'A' );
    00204         SetSingle( 'C' );
    00205         SetSingle( 'G' );
    00206         SetSingle( 'T' );
    00207         SetSingle( 'R' );
    00208         SetSingle( 'K' );
    00209         SetSingle( 'S' );
    00210         SetSingle( 'M' );
    00211         SetSingle( 'Y' );
    00212         SetSingle( 'W' );
    00213         SetSingle( 'B' );
    00214         SetSingle( 'V' );
    00215         SetSingle( 'D' );
    00216         SetSingle( 'H' );
    00217         SetSingle( 'N' );
    00218         SetSingle( 'X' );
    00219
    00220         SetPair( 'g', 'r' );
    00221         SetPair( 'g', 'k' );
    00222         SetPair( 'g', 's' );
    00223         SetPair( 'g', 'd' );
    00224         SetPair( 'g', 'v' );
    00225         SetPair( 'g', 'b' );
    00226         SetPair( 'g', 'x' );
    00227         SetPair( 'G', 'R' );
    00228         SetPair( 'G', 'K' );
    00229         SetPair( 'G', 'S' );
    00230         SetPair( 'G', 'D' );
    00231         SetPair( 'G', 'V' );
    00232         SetPair( 'G', 'B' );
    00233         SetPair( 'G', 'X' );
    00234         SetPair( 'a', 'r' );
    00235         SetPair( 'a', 'w' );
    00236         SetPair( 'a', 'm' );
    00237         SetPair( 'a', 'd' );
    00238         SetPair( 'a', 'v' );
    00239         SetPair( 'a', 'h' );
    00240         SetPair( 'a', 'x' );
    00241         SetPair( 'A', 'R' );
    00242         SetPair( 'A', 'W' );
    00243         SetPair( 'A', 'M' );
    00244         SetPair( 'A', 'D' );
    00245         SetPair( 'A', 'V' );
    00246         SetPair( 'A', 'H' );
    00247         SetPair( 'A', 'B' );
    00248         SetPair( 'A', 'X' );
    00249         SetPair( 'c', 's' );
    00250         SetPair( 'c', 'm' );
    00251         SetPair( 'c', 'y' );
    00252         SetPair( 'c', 'v' );
    00253         SetPair( 'c', 'b' );
    00254         SetPair( 'c', 'h' );
    00255         SetPair( 'c', 'x' );
    00256         SetPair( 'C', 'S' );
    00257         SetPair( 'C', 'M' );
    00258         SetPair( 'C', 'Y' );
    00259         SetPair( 'C', 'V' );
    00260         SetPair( 'C', 'B' );
    00261         SetPair( 'C', 'H' );
    00262         SetPair( 'C', 'X' );
    00263         SetPair( 't', 'k' );
    00264         SetPair( 't', 'w' );
    00265         SetPair( 't', 'y' );
    00266         SetPair( 't', 'd' );
    00267         SetPair( 't', 'b' );
    00268         SetPair( 't', 'h' );
    00269         SetPair( 't', 'x' );
    00270         SetPair( 'T', 'K' );
    00271         SetPair( 'T', 'W' );
    00272         SetPair( 'T', 'Y' );
    00273         SetPair( 'T', 'D' );
    00274         SetPair( 'T', 'B' );
    00275         SetPair( 'T', 'H' );
    00276         SetPair( 'T', 'X' );
    00277
    00278         SetPair( 'r', 'x' );
    00279         SetPair( 'y', 'x' );
    00280         SetPair( 'w', 'x' );
    00281         SetPair( 's', 'x' );
    00282         SetPair( 'k', 'x' );
    00283         SetPair( 'm', 'x' );
    00284         SetPair( 'b', 'x' );
    00285         SetPair( 'd', 'x' );
    00286         SetPair( 'h', 'x' );
    00287         SetPair( 'v', 'x' );
    00288         SetPair( 'n', 'x' );
    00289
    00290         SetPair( 'R', 'X' );
    00291         SetPair( 'Y', 'X' );
    00292         SetPair( 'W', 'X' );
    00293         SetPair( 'S', 'X' );
    00294         SetPair( 'K', 'X' );
    00295         SetPair( 'M', 'X' );
    00296         SetPair( 'B', 'X' );
    00297         SetPair( 'D', 'X' );
    00298         SetPair( 'H', 'X' );
    00299         SetPair( 'V', 'X' );
    00300         SetPair( 'N', 'X' );
    00301
    00302         SetPair( 'k', 'd' );
    00303         SetPair( 'k', 'b' );
    00304         SetPair( 'r', 'd' );
    00305         SetPair( 'r', 'v' );
    00306         SetPair( 's', 'v' );
    00307         SetPair( 's', 'b' );
    00308         SetPair( 'm', 'v' );
    00309         SetPair( 'm', 'h' );
    00310         SetPair( 'w', 'd' );
    00311         SetPair( 'w', 'h' );
    00312         SetPair( 'y', 'b' );
    00313         SetPair( 'y', 'h' );
    00314
    00315         SetPair( 'K', 'D' );
    00316         SetPair( 'K', 'B' );
    00317         SetPair( 'R', 'D' );
    00318         SetPair( 'R', 'V' );
    00319         SetPair( 'S', 'V' );
    00320         SetPair( 'S', 'B' );
    00321         SetPair( 'M', 'V' );
    00322         SetPair( 'M', 'H' );
    00323         SetPair( 'W', 'D' );
    00324         SetPair( 'W', 'H' );
    00325         SetPair( 'Y', 'B' );
    00326         SetPair( 'Y', 'H' );
    00327 //set the containment properties
    00328         SetContained( 'g', 'r' );
    00329         SetContained( 'g', 'k' );
    00330         SetContained( 'g', 's' );
    00331         SetContained( 'g', 'd' );
    00332         SetContained( 'g', 'v' );
    00333         SetContained( 'g', 'b' );
    00334         SetContained( 'g', 'x' );
    00335         SetContained( 'G', 'R' );
    00336         SetContained( 'G', 'K' );
    00337         SetContained( 'G', 'S' );
    00338         SetContained( 'G', 'D' );
    00339         SetContained( 'G', 'V' );
    00340         SetContained( 'G', 'B' );
    00341         SetContained( 'G', 'X' );
    00342         SetContained( 'a', 'r' );
    00343         SetContained( 'a', 'w' );
    00344         SetContained( 'a', 'm' );
    00345         SetContained( 'a', 'd' );
    00346         SetContained( 'a', 'v' );
    00347         SetContained( 'a', 'h' );
    00348         SetContained( 'a', 'x' );
    00349         SetContained( 'A', 'R' );
    00350         SetContained( 'A', 'W' );
    00351         SetContained( 'A', 'M' );
    00352         SetContained( 'A', 'D' );
    00353         SetContained( 'A', 'V' );
    00354         SetContained( 'A', 'H' );
    00355         SetContained( 'A', 'B' );
    00356         SetContained( 'A', 'X' );
    00357         SetContained( 'c', 's' );
    00358         SetContained( 'c', 'm' );
    00359         SetContained( 'c', 'y' );
    00360         SetContained( 'c', 'v' );
    00361         SetContained( 'c', 'b' );
    00362         SetContained( 'c', 'h' );
    00363         SetContained( 'c', 'x' );
    00364         SetContained( 'C', 'S' );
    00365         SetContained( 'C', 'M' );
    00366         SetContained( 'C', 'Y' );
    00367         SetContained( 'C', 'V' );
    00368         SetContained( 'C', 'B' );
    00369         SetContained( 'C', 'H' );
    00370         SetContained( 'C', 'X' );
    00371         SetContained( 't', 'k' );
    00372         SetContained( 't', 'w' );
    00373         SetContained( 't', 'y' );
    00374         SetContained( 't', 'd' );
    00375         SetContained( 't', 'b' );
    00376         SetContained( 't', 'h' );
    00377         SetContained( 't', 'x' );
    00378         SetContained( 'T', 'K' );
    00379         SetContained( 'T', 'W' );
    00380         SetContained( 'T', 'Y' );
    00381         SetContained( 'T', 'D' );
    00382         SetContained( 'T', 'B' );
    00383         SetContained( 'T', 'H' );
    00384         SetContained( 'T', 'X' );
    00385
    00386         SetContained( 'r', 'x' );
    00387         SetContained( 'y', 'x' );
    00388         SetContained( 'w', 'x' );
    00389         SetContained( 's', 'x' );
    00390         SetContained( 'k', 'x' );
    00391         SetContained( 'm', 'x' );
    00392         SetContained( 'b', 'x' );
    00393         SetContained( 'd', 'x' );
    00394         SetContained( 'h', 'x' );
    00395         SetContained( 'v', 'x' );
    00396         SetContained( 'n', 'x' );
    00397
    00398         SetContained( 'R', 'X' );
    00399         SetContained( 'Y', 'X' );
    00400         SetContained( 'W', 'X' );
    00401         SetContained( 'S', 'X' );
    00402         SetContained( 'K', 'X' );
    00403         SetContained( 'M', 'X' );
    00404         SetContained( 'B', 'X' );
    00405         SetContained( 'D', 'X' );
    00406         SetContained( 'H', 'X' );
    00407         SetContained( 'V', 'X' );
    00408         SetContained( 'N', 'X' );
    00409
    00410         SetContained( 'k', 'd' );
    00411         SetContained( 'k', 'b' );
    00412         SetContained( 'r', 'd' );
    00413         SetContained( 'r', 'v' );
    00414         SetContained( 's', 'v' );
    00415         SetContained( 's', 'b' );
    00416         SetContained( 'm', 'v' );
    00417         SetContained( 'm', 'h' );
    00418         SetContained( 'w', 'd' );
    00419         SetContained( 'w', 'h' );
    00420         SetContained( 'y', 'b' );
    00421         SetContained( 'y', 'h' );
    00422
    00423         SetContained( 'K', 'D' );
    00424         SetContained( 'K', 'B' );
    00425         SetContained( 'R', 'D' );
    00426         SetContained( 'R', 'V' );
    00427         SetContained( 'S', 'V' );
    00428         SetContained( 'S', 'B' );
    00429         SetContained( 'M', 'V' );
    00430         SetContained( 'M', 'H' );
    00431         SetContained( 'W', 'D' );
    00432         SetContained( 'W', 'H' );
    00433         SetContained( 'Y', 'B' );
    00434         SetContained( 'Y', 'H' );
    00435
    00436 }
    00437
    00438 void gnCompare::CreateRNAComparator()
    00439 {
    00440         SetName( "Full RNA Comparator" );
    00441
    00442         SetSingle( 'a' );
    00443         SetSingle( 'c' );
    00444         SetSingle( 'g' );
    00445         SetSingle( 'u' );
    00446         SetSingle( 'r' );
    00447         SetSingle( 'k' );
    00448         SetSingle( 's' );
    00449         SetSingle( 'm' );
    00450         SetSingle( 'y' );
    00451         SetSingle( 'w' );
    00452         SetSingle( 'b' );
    00453         SetSingle( 'v' );
    00454         SetSingle( 'd' );
    00455         SetSingle( 'h' );
    00456         SetSingle( 'n' );
    00457         SetSingle( 'x' );
    00458
    00459         SetSingle( 'A' );
    00460         SetSingle( 'C' );
    00461         SetSingle( 'G' );
    00462         SetSingle( 'U' );
    00463         SetSingle( 'R' );
    00464         SetSingle( 'K' );
    00465         SetSingle( 'S' );
    00466         SetSingle( 'M' );
    00467         SetSingle( 'Y' );
    00468         SetSingle( 'W' );
    00469         SetSingle( 'B' );
    00470         SetSingle( 'V' );
    00471         SetSingle( 'D' );
    00472         SetSingle( 'H' );
    00473         SetSingle( 'N' );
    00474         SetSingle( 'X' );
    00475
    00476         SetPair( 'g', 'r' );
    00477         SetPair( 'g', 'k' );
    00478         SetPair( 'g', 's' );
    00479         SetPair( 'g', 'd' );
    00480         SetPair( 'g', 'v' );
    00481         SetPair( 'g', 'b' );
    00482         SetPair( 'g', 'x' );
    00483         SetPair( 'G', 'R' );
    00484         SetPair( 'G', 'K' );
    00485         SetPair( 'G', 'S' );
    00486         SetPair( 'G', 'D' );
    00487         SetPair( 'G', 'V' );
    00488         SetPair( 'G', 'B' );
    00489         SetPair( 'G', 'X' );
    00490         SetPair( 'a', 'r' );
    00491         SetPair( 'a', 'w' );
    00492         SetPair( 'a', 'm' );
    00493         SetPair( 'a', 'd' );
    00494         SetPair( 'a', 'v' );
    00495         SetPair( 'a', 'h' );
    00496         SetPair( 'a', 'x' );
    00497         SetPair( 'A', 'R' );
    00498         SetPair( 'A', 'W' );
    00499         SetPair( 'A', 'M' );
    00500         SetPair( 'A', 'D' );
    00501         SetPair( 'A', 'V' );
    00502         SetPair( 'A', 'H' );
    00503         SetPair( 'A', 'B' );
    00504         SetPair( 'A', 'X' );
    00505         SetPair( 'c', 's' );
    00506         SetPair( 'c', 'm' );
    00507         SetPair( 'c', 'y' );
    00508         SetPair( 'c', 'v' );
    00509         SetPair( 'c', 'b' );
    00510         SetPair( 'c', 'h' );
    00511         SetPair( 'c', 'x' );
    00512         SetPair( 'C', 'S' );
    00513         SetPair( 'C', 'M' );
    00514         SetPair( 'C', 'Y' );
    00515         SetPair( 'C', 'V' );
    00516         SetPair( 'C', 'B' );
    00517         SetPair( 'C', 'H' );
    00518         SetPair( 'C', 'X' );
    00519         SetPair( 'u', 'k' );
    00520         SetPair( 'u', 'w' );
    00521         SetPair( 'u', 'y' );
    00522         SetPair( 'u', 'd' );
    00523         SetPair( 'u', 'b' );
    00524         SetPair( 'u', 'h' );
    00525         SetPair( 'u', 'x' );
    00526         SetPair( 'U', 'K' );
    00527         SetPair( 'U', 'W' );
    00528         SetPair( 'U', 'Y' );
    00529         SetPair( 'U', 'D' );
    00530         SetPair( 'U', 'B' );
    00531         SetPair( 'U', 'H' );
    00532         SetPair( 'U', 'X' );
    00533
    00534         SetPair( 'r', 'x' );
    00535         SetPair( 'y', 'x' );
    00536         SetPair( 'w', 'x' );
    00537         SetPair( 's', 'x' );
    00538         SetPair( 'k', 'x' );
    00539         SetPair( 'm', 'x' );
    00540         SetPair( 'b', 'x' );
    00541         SetPair( 'd', 'x' );
    00542         SetPair( 'h', 'x' );
    00543         SetPair( 'v', 'x' );
    00544         SetPair( 'n', 'x' );
    00545
    00546         SetPair( 'R', 'X' );
    00547         SetPair( 'Y', 'X' );
    00548         SetPair( 'W', 'X' );
    00549         SetPair( 'S', 'X' );
    00550         SetPair( 'K', 'X' );
    00551         SetPair( 'M', 'X' );
    00552         SetPair( 'B', 'X' );
    00553         SetPair( 'D', 'X' );
    00554         SetPair( 'H', 'X' );
    00555         SetPair( 'V', 'X' );
    00556         SetPair( 'N', 'X' );
    00557
    00558         SetPair( 'k', 'd' );
    00559         SetPair( 'k', 'b' );
    00560         SetPair( 'r', 'd' );
    00561         SetPair( 'r', 'v' );
    00562         SetPair( 's', 'v' );
    00563         SetPair( 's', 'b' );
    00564         SetPair( 'm', 'v' );
    00565         SetPair( 'm', 'h' );
    00566         SetPair( 'w', 'd' );
    00567         SetPair( 'w', 'h' );
    00568         SetPair( 'y', 'b' );
    00569         SetPair( 'y', 'h' );
    00570
    00571         SetPair( 'K', 'D' );
    00572         SetPair( 'K', 'B' );
    00573         SetPair( 'R', 'D' );
    00574         SetPair( 'R', 'V' );
    00575         SetPair( 'S', 'V' );
    00576         SetPair( 'S', 'B' );
    00577         SetPair( 'M', 'V' );
    00578         SetPair( 'M', 'H' );
    00579         SetPair( 'W', 'D' );
    00580         SetPair( 'W', 'H' );
    00581         SetPair( 'Y', 'B' );
    00582         SetPair( 'Y', 'H' );
    00583 //set the containment properties
    00584         SetContained( 'g', 'r' );
    00585         SetContained( 'g', 'k' );
    00586         SetContained( 'g', 's' );
    00587         SetContained( 'g', 'd' );
    00588         SetContained( 'g', 'v' );
    00589         SetContained( 'g', 'b' );
    00590         SetContained( 'g', 'x' );
    00591         SetContained( 'G', 'R' );
    00592         SetContained( 'G', 'K' );
    00593         SetContained( 'G', 'S' );
    00594         SetContained( 'G', 'D' );
    00595         SetContained( 'G', 'V' );
    00596         SetContained( 'G', 'B' );
    00597         SetContained( 'G', 'X' );
    00598         SetContained( 'a', 'r' );
    00599         SetContained( 'a', 'w' );
    00600         SetContained( 'a', 'm' );
    00601         SetContained( 'a', 'd' );
    00602         SetContained( 'a', 'v' );
    00603         SetContained( 'a', 'h' );
    00604         SetContained( 'a', 'x' );
    00605         SetContained( 'A', 'R' );
    00606         SetContained( 'A', 'W' );
    00607         SetContained( 'A', 'M' );
    00608         SetContained( 'A', 'D' );
    00609         SetContained( 'A', 'V' );
    00610         SetContained( 'A', 'H' );
    00611         SetContained( 'A', 'B' );
    00612         SetContained( 'A', 'X' );
    00613         SetContained( 'c', 's' );
    00614         SetContained( 'c', 'm' );
    00615         SetContained( 'c', 'y' );
    00616         SetContained( 'c', 'v' );
    00617         SetContained( 'c', 'b' );
    00618         SetContained( 'c', 'h' );
    00619         SetContained( 'c', 'x' );
    00620         SetContained( 'C', 'S' );
    00621         SetContained( 'C', 'M' );
    00622         SetContained( 'C', 'Y' );
    00623         SetContained( 'C', 'V' );
    00624         SetContained( 'C', 'B' );
    00625         SetContained( 'C', 'H' );
    00626         SetContained( 'C', 'X' );
    00627         SetContained( 'u', 'k' );
    00628         SetContained( 'u', 'w' );
    00629         SetContained( 'u', 'y' );
    00630         SetContained( 'u', 'd' );
    00631         SetContained( 'u', 'b' );
    00632         SetContained( 'u', 'h' );
    00633         SetContained( 'u', 'x' );
    00634         SetContained( 'U', 'K' );
    00635         SetContained( 'U', 'W' );
    00636         SetContained( 'U', 'Y' );
    00637         SetContained( 'U', 'D' );
    00638         SetContained( 'U', 'B' );
    00639         SetContained( 'U', 'H' );
    00640         SetContained( 'U', 'X' );
    00641
    00642         SetContained( 'r', 'x' );
    00643         SetContained( 'y', 'x' );
    00644         SetContained( 'w', 'x' );
    00645         SetContained( 's', 'x' );
    00646         SetContained( 'k', 'x' );
    00647         SetContained( 'm', 'x' );
    00648         SetContained( 'b', 'x' );
    00649         SetContained( 'd', 'x' );
    00650         SetContained( 'h', 'x' );
    00651         SetContained( 'v', 'x' );
    00652         SetContained( 'n', 'x' );
    00653
    00654         SetContained( 'R', 'X' );
    00655         SetContained( 'Y', 'X' );
    00656         SetContained( 'W', 'X' );
    00657         SetContained( 'S', 'X' );
    00658         SetContained( 'K', 'X' );
    00659         SetContained( 'M', 'X' );
    00660         SetContained( 'B', 'X' );
    00661         SetContained( 'D', 'X' );
    00662         SetContained( 'H', 'X' );
    00663         SetContained( 'V', 'X' );
    00664         SetContained( 'N', 'X' );
    00665
    00666         SetContained( 'k', 'd' );
    00667         SetContained( 'k', 'b' );
    00668         SetContained( 'r', 'd' );
    00669         SetContained( 'r', 'v' );
    00670         SetContained( 's', 'v' );
    00671         SetContained( 's', 'b' );
    00672         SetContained( 'm', 'v' );
    00673         SetContained( 'm', 'h' );
    00674         SetContained( 'w', 'd' );
    00675         SetContained( 'w', 'h' );
    00676         SetContained( 'y', 'b' );
    00677         SetContained( 'y', 'h' );
    00678
    00679         SetContained( 'K', 'D' );
    00680         SetContained( 'K', 'B' );
    00681         SetContained( 'R', 'D' );
    00682         SetContained( 'R', 'V' );
    00683         SetContained( 'S', 'V' );
    00684         SetContained( 'S', 'B' );
    00685         SetContained( 'M', 'V' );
    00686         SetContained( 'M', 'H' );
    00687         SetContained( 'W', 'D' );
    00688         SetContained( 'W', 'H' );
    00689         SetContained( 'Y', 'B' );
    00690         SetContained( 'Y', 'H' );
    00691 }