"""
     python/ui/selection_protocols.py: CCP4MG Molecular Graphics Program
     Copyright (C) 2001-2008 University of York, CCLRC
     Copyright (C) 2009-2011 University of York
     Copyright (C) 2012 STFC

     This library is free software: you can redistribute it and/or
     modify it under the terms of the GNU Lesser General Public License
     version 3, modified in accordance with the provisions of the 
     license to address the requirements of UK law.
 
     You should have received a copy of the modified GNU Lesser General 
     Public License along with this library.  If not, copies may be 
     downloaded from http://www.ccp4.ac.uk/ccp4license.php
 
     This program is distributed in the hope that it will be useful,
     but WITHOUT ANY WARRANTY; without even the implied warranty of
     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     GNU Lesser General Public License for more details.
"""
generic_selection = {
        'all'            :  [None,'/*/*/*,*/*:*'],
        'peptide'	:  [None,'/*/*/(%amino_acid%)'] ,
        'amino_acid'	:  [None,'/*/*/(%amino_acid%)'] ,
	'nucleic'	: [None,'/*/*/(%nucleic_acid%)'],
	'nucleotide'	: [None,'/*/*/(%nucleotide%)'],
	'saccharide'	: [None,'/*/*/(%saccharide%)'],
	'metal'		: [None,'/*/*/(%metal%)'],
	'solvent'	: [None,'/*/*/(%solvent%)'],
	'solute'	: [None,'/*/*/(%solute%)'],
	'catrace'	:  [None,'/*/*/(%amino_acid%)/CA:*'] ,
        'trace'	        :  [None,'/*/*/(%nucleic_acid%)/P:*'] ,
	'main'		:  [None,'/*/*/(%amino_acid%)/%main_chain%:*'] ,
	'peptide_link'	:  [None,'/*/*/(%amino_acid%)/%peptide_link%:*'] ,
	'backbone'	:  [None,'/*/*/(%nucleic_acid%)/%backbone_atoms%:*'],
	'sugar_ring'	:  [None,'/*/*/(%nucleic_acid%)/%sugar_ring_atoms%:*'],
        'CA+side'       :  ['and',[None,'amino_acid'],['not',[None,'/*/*/*.*/%not_CA_side%:*']]] ,
	'side'		:  ['and',[None,'amino_acid'],['not', [None,'main']]],
	'base'		:  ['and',[None,'/*/*/(%nucleic_acid%)'],['not', [None,'/*/*/*,*/%not_base%:*']]],
        'polar_atoms'   :  [None,'[N,O,P]'],
        'metal'         :  [None, '[%metal%]'],
        'allnotsolv'     :   ['excl',[None,'all'],['or',[None,'solvent'],[None,'solute']]],
        'helix'         : [None, 'SEC == helix'],
        'alpha-helix'   : [None, 'SEC == helix'],
        'strand'        : [None, 'SEC == strand'],
        'beta-strand'        : [None, 'SEC == strand'],
        '3turn'         : [None,'SEC == 3turn'],
        '4turn'         : [None,'SEC == 4turn'],
        '5turn'         : [None,'SEC == 5turn'],
        'beta-bulge'    : [None,'SEC == bulge'],
        'bulge'         : [None,'SEC == bulge']
        }

metal = { 'ORDER' : ['AR','CA','CD','CO','CR','CU','FE','GD','HG','IR','K','MG','MN','NA','UR','ZN'] }

solvent = {
    'ORDER' : ['HOH','H2O','WAT','SOL','TIP','DOD','D2O'] }

solute = {
    'ORDER' : ['SUL','SO4','NO3','MOH','EOH','GOL', 'ACT', 'CL', 'BR', 'PG4', 'PG5', 'PG6','1PE','2PE','7PE',
              'PE3','PE4','PE5','PE6','PE7','PGE','XPE','C10','CE1','CE9','CXE','EDO','N8E','P33','P4C','12P','15P',
              'DMS','IOD','MRD', 'BE7','MHA','BU3','PGO','BU2','PDO','BU1','1BO','TFP','DHD','PEU','TRS','TAU',
              'SBT','SAL','MPD','IOH','IPA','BU2','PIG','B3P','BTB','B3P','NHE','C8E','OTE','PE8','2OS','1PS',
              'CPS','DMX','MPO','DXG','CM5','ACA','ACN','CCN','DR6','NH4','AZI',
              'LAK','BCN','BRO','CAC','CBX','FMT','ACY','CBM','CLO','FCL','CIT','3CO','NCO','CU1',
              'CYN','CYN','MA4','BTC','TAR','MTL','DPR','SOR','SYL','DDQ','DMF','DIO','DOX','SDS',
              'EEE','EGL','FLO','TRT','FCY','FRU','GBL','GPX','HTO','HTG','B7G','16D','HEZ','IDO','ICI',
              'ICT','TLA','LDA','MRY','BEQ','C15','MG8','POL','JEF','DIA','IPH','PIN','CRY',
              'PGR','PGQ','SPD','SPK','SPM','TBU','TMA','TEP','SCN','ETF','144','UMQ','URE','CN','EPE','HEPES',
              'HEPE','MES','PEG','ETA','HED','IMD','BO3'
              ],
    'SUL' : 'Sulphate', 'ACT' : 'Acetate' }

main_chain = {
    'ORDER' : ['N','CA','C','O','H','HA' ] }

peptide_link = {
    'ORDER' : ['N','C','O','H' ] }

backbone_atoms = {
    'ORDER' : ['C3*','O3*','H3*','C4*','C5*','1H5*','O5*','2H5*','H5T','P','O1P','O2P',"C3'","O3'","H3'","C4'","C5'","1H5'","O5'","2H5'",'H7','P','OP1','OP2',"HO5'","HO3'" ] }

not_base = {
    'ORDER' : ['C3*','O3*','H3*','C5*','1H5*','O5*','2H5*','H5T','P','O1P','O2P',"C3'","O3'","H3'","C5'","1H5'","O5'","2H5'","H7",'P','OP1','OP2',"HO5'","HO3'" ] }

sugar_ring_atoms = {
    'ORDER' : ['C1*','H1*','C2*','2H2*','1H2*','C3*','O3*','H3*','C4*','H4*', \
               'C5*','1H5*','2H5*','O5*','H5T','O4*','O2*',
               "C1'","H1'","C2'","2H2'","1H2'","C3'","O3'","H3'","C4'","H4'", \
               "C5'","1H5'","2H5'","O5'","H5T'","O4'","O2'"] }

not_CA_side = {
    'ORDER' : ['N','C','O','H','HA' ] }

saccharide = {
    'ORDER' :  ['GLC','MAN','NAG','RAM','RIB','RIP','XYS','SUC','RER','BGC','LAT','LBT','BNG','BOG','AGC','GCD','IDT','BMA','GLO','DMU','LMT','TRE'], \
    'GLC' : 'Glucose',
    'MAN' : 'Mannose',
    'NAG' : 'N-acetyl-Glucosamine',
    'RAM' : 'Rhamnose',
    'RIB' : 'Ribose',
    'RIP' : 'Ribose(pyranose form)',
    'XYS' : 'Xylose', 
    'SUC' : 'Sucrose',
    'RER' : 'Vancosamine',
    'BGC' : 'Beta D-glucose',
    'LAT' : 'Lactose',
    'LBT' : 'Lactose',
    'BNG' : 'B-NONYLGLUCOSIDE',
    'BOG' : 'B-OCTYLGLUCOSIDE',
    'AGC' : 'ALPHA-D-GLUCOSE',
    'GCD' : '4,5-DEHYDRO-D-GLUCURONIC ACID',
    'IDT' : '4,5-DEHYDRO-L-IDURONIC ACID',
    'BMA' : 'BETA-D-MANNOSE',
    'GLO' : 'D-GLUCOSE IN LINEAR FORM',
    'DMU' : 'DECYL-BETA-D-MALTOPYRANOSIDE',
    'LMT' : 'DODECYL-BETA-D-MALTOSIDE',
    'TRE' : 'TREHALOSE',
    }

metal = {
    'ORDER' :  ["LI", "BE", "NA", "MG", "AL", " K", "CA", "SC", "TI", " V",
  "MN", "FE", "CO", "NI", "CU", "ZN", "GA", "RB", "SR", " Y",
  "ZR", "NB", "MO", "TC", "RU", "RH", "PD", "AG", "CD", "IN",
  "SN", "SB", "CS", "BA", "LA", "CE", "PR", "ND", "PM", "SM",
  "EU", "GD", "TB", "DY", "HO", "ER", "TM", "YB", "LU", "HF",
  "TA", " W", "RE", "OS", "IR", "PT", "AU", "HG", "TL", "PB",
  "BI", "PO", "FR", "RA", "AC", "TH", "PA", " U", "NP", "PU",
  "AM", "CM", "BK", "CF", "ES", "FM", "MD", "NO", "LR", "RF",
  "DB", "SG", "BH", "HS", "MT", "UN", "UU", "UB", "UQ", "UH",
  "UO", 'YT3', 'ZN2', 'FE2', '3NI', 'Y1', 'MN3' ],
    'LI' : 'Lithium',
    'BE' : 'Beryllium',
    "NA" : 'Sodium',
    "MG" : 'Magnesium',
    "AL" : 'Aluminium',
    " K" : 'Potassium',
    "CA" : 'Calcium',
    "SC" : 'Scandium',
    "TI" : 'Titanium',
    " V" : 'Vanadium',
    "MN" : 'Manganese',
    "FE" : 'Iron',
    "CO" : 'Cobolt',
    "NI" : 'Nickel',
    "CU" : 'Copprt',
    "ZN" : 'Zinc',
    "GA" : 'Gallium',
    "RB" : 'Rubidium',
    "SR" : 'Strontium',
    " Y" : 'Yttrium',
    "ZR" : 'Zirconium',
    "NB" : 'Niobium',
    "MO" : 'Molybdenum',
    "TC" : 'Technetium',
    "RU" : 'Ruthenium',
    "RH" : 'Rhodium',
    "PD" : 'Palladium',
    "AG" : 'Silver',
    "CD" : 'Cadmium',
    "IN" : 'Indium',
    "SN" : 'Tin',
    "SB" : 'Antimony',
    "CS" : 'Caesium',
    "BA" : 'Barium',
    "LA" : 'Lanthanum',
    "CE" : 'Cerium',
    "PR" : 'Praseodymium',
    "ND" : 'Neodymium',
    "PM" : 'Promethium',
    "SM" : 'Samarium',
    "EU" : 'Europium',
    "GD" : 'Gadolinium',
    "TB" : 'Terbium',
    "DY" : 'Dysprosium',
    "HO" : 'Holmium',
    "ER" : 'Erbium',
    "TM" : 'Thulium',
    "YB" : 'Ytterbium',
    "LU" : 'Lutetium',
    "HF" : 'Hafnium',
    "TA" : 'Tantalum',
    " W" : 'Tungsten',
    "RE" : 'Rhenium',
    "OS" : 'Osmium',
    "IR" : 'Iridium',
    "PT" : 'Platinum',
    "AU" : 'Gold',
    "HG" : 'Mercury',
    "TL" : 'Thallium',
    "PB" : 'Lead',
    "BI" : 'Bismuth',
    "PO" : 'Polonium',
    "FR" : 'Francium',
    "RA" : 'Radium',
    "AC" : 'Actinium',
    "TH" : 'Thorium',
    "PA" : 'Proactinium',
    " U" : 'Uranium',
    "NP" : 'Neptunium',
    "PU" : 'Plutonium',
    "AM" : 'Americium',
    "CM" : 'Curium',
    "BK" : 'Berkelium',
    "CF" : 'Californium',
    "ES" : 'Einsteinium',
    "FM" : 'Fermium',
    "MD" : 'Mendelevium',
    "NO" : 'Nobelium',
    "LR" : 'Lawrencium',
    "RF" : 'Rutherfordium',
    "DB" : 'Dubnium',
    "SG" : 'Seaborgium',
    "BH" : 'Bohrium',
    "HS" : 'Hassium',
    "MT" : 'Meitnerium',
    "UN" : 'Ununnilium',
    "UU" : 'Unununium',
    "UB" : 'Ununbium',
    "UQ" : 'Ununquadium',
    "UH" : 'Ununheptium',
    "UO" : 'Ununoctium',
    'YT3' : 'YTTRIUM (III) ION',
    'ZN2' : 'ZINC ION ON 3-FOLD CRYSTAL AXIS',
    'FE2' : 'FE (II) ION',
    '3NI' : 'NICKEL (III) ION',
    'Y1' : 'YTTRIUM ION',
    'MN3' : 'MANGANESE (III) ION',
    }

amino_acid = {
    'ORDER' :  [ 'GLY', 'ALA', 'VAL', 'PRO', 'SER', 'THR' , \
                'LEU', 'ILE', 'CYS', 'ASP', 'GLU', 'ASN', 'GLN', \
                'ARG', 'LYS',  'MET', 'MSE', 'HIS', 'PHE', 'TYR', 'TRP','HCS','ALO','PDD','UNK'], \
    'GLY' : 'Glycine',
    'ALA' : 'Alanine',
    'VAL' : 'Valine',
    'PRO' : 'Proline',
    'SER' : 'Serine',
    'THR' : 'Threonine',
    'LEU' : 'Leucine',
    'ILE' : 'Isoleucine',
    'CYS' : 'Cysteine',
    'ASP' : 'Aspartic acid',
    'GLU' : 'Glutamic acid',
    'ASN' : 'Asparagine',
    'GLN' : 'Glutamine',
    'ARG' : 'Arginine',
    'LYS' : 'Lysine',
    'MET' : 'Methionine',
    'MSE' : 'Se-Methionine',
    'HIS' : 'Histidine',
    'PHE' : 'Phenylalanine',
    'TYR' : 'Tyrosine',
    'TRP' : 'Tryptophan',
    'HCS' : 'Homocysteine',
    'ALO' : 'Allo-Threonine',
    'PDD' : "N-(5'-PHOSPHOPYRIDOXYL)-D-ALANINE",
    'NIY' : 'Meta-Nitro-Tyrosine',
    'SAH' : 'S-Adenosyl-L-Homocysteine',
    'UNK' : 'Unknown'
    }


amino_acid_groups = { \
     'Small' : [ 'GLY', 'ALA', 'VAL', 'PRO', 'SER', 'THR' ], \
     'Large' : [ 'MET', 'MSE', 'HIS', 'PHE', 'TYR', 'TRP' ], 
     'Hydrophobic': [ 'ALA', 'VAL', 'PRO', 'LEU', 'ILE', 'MET', \
                      'PHE','TRP' ],
     'Hydrophilic' : ['ASP','GLU','TYR','ASN','GLN','THR','SER', \
                        'CYS','HIS','LYS','ARG' ], 
     'Acidic': [ 'ASP','GLU' ],
     'Basic' : [ 'HIS','LYS','ARG']
    }

nucleic_acid = {
     'ORDER' : ['DA','DC','DG','DT','A', 'G', 'I' , 'U', 'T', 'C','YG','PSU'], \
    'DA' : 'DEOXYADENOSINE-MONOPHOSPHATE', #DNA
    'DC' : 'DEOXYCYTIDINE-MONOPHOSPHATE', #DNA
    'DOC' : 'DEOXYCYTIDINE-MONOPHOSPHATE', #DNA
    'DG' : 'DEOXYGUANOSINE-MONOPHOSPHATE', #DNA
    'DT' : 'DEOXYTHYMIDINE-MONOPHOSPHATE', #DNA
    'A' : 'ADENOSINE-MONOPHOSPHATE', #RNA
    'C' : 'CYTIDINE-MONOPHOSPHATE', #RNA
    'G' : 'GUANOSINE-MONOPHOSPHATE', #RNA
    'I' : 'INOSINIC ACID', #RNA
    'T' : 'THYMIDINE-MONOPHOSPHATE', #RNA
    'U' : 'URIDINE-MONOPHOSPHATE', #RNA
    'YG': 'Wybutosine', #RNA
    'PSU' :  'Pseudouridine' #RNA
    }

nucleotide = {
     'ORDER' : ['Ad','Cd','Gd','Td''ADE','CYT','GUA','INO', 'THY','URA'], \
    'Ad' : 'Adenine', #? Are these correct?
    'Cd' : 'Cytosine', #? Are these correct?
    'Gd' : 'Guanine', #? Are these correct?
    'Td' : 'Thymine', #? Are these correct?
    'ADE' : 'Adenine', #non-poly
    'CYT' : 'Cytosine', #non-poly
    'GUA' : 'Guanine', #non-poly
    'INO' : 'Inosine', #non-poly
    'THY' : 'Thymine', #non-poly
    'URA' : 'Uracil', #non-poly
}

nucleic_acid_groups = { \
     'Pyrimidines': [ 'DC','DT','U', 'T', 'C', 'PSU'  ] , \
    'Purines': [ 'DA','DG','A', 'G', 'I' ,  ]  \
    }


#element = {
#    'ORDER' : [ 'C', 'N','O','H','S','P','CA'],
#    'C' : 'carbon' ,
#    'N' : 'nitrogen' ,
#    'O' : 'oxygen' ,
#    'H' : 'hydrogen' ,
#    'S' : 'sulphur' ,
#    'P' : 'phosporus',
#    'CA' : 'calcium'
#    }
element = {
    'ORDER' : [ ' C', ' N',' O'],
    ' C' : ' C' ,
    ' N' : ' N' ,
    ' O' : ' O' ,
    }

element_groups = { }

amino_acid_code = { 'GLY' : 'G',
		    'PRO' : 'P',
		    'ALA' : 'A',
		    'VAL' : 'V',
		    'LEU' : 'L',
		    'ILE' : 'I',
		    'MET' : 'M',
		    'CYS' : 'C',
		    'PHE' : 'F',
		    'TYR' : 'Y',
		    'TRP' : 'W',
		    'HIS' : 'H',
		    'LYS' : 'K',
                    'GLN' : 'Q',
                    'ASN' : 'N',
		    'ARG' : 'R',
		    'GLU' : 'E',
		    'ASP' : 'D',
		    'SER' : 'S',
		    'THR' : 'T' }
