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