#
#@BEGIN LICENSE
#
# PSI4: an ab initio quantum chemistry software package
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# 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 General Public License for more details.
#
# You should have received a copy of the GNU General Public License along
# with this program; if not, write to the Free Software Foundation, Inc.,
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
#
#@END LICENSE
#

import struct


def getrec(reclabelarray, verbose=False):
    """Reads binary files JOBARC and JAINDX and returns contents
    of each record in *reclabelarray*.

    """
    knownlabels = {
        "AU_LENGT": 'DOUBLE',
        "CHARGE_E": 'DOUBLE',
        "AMU     ": 'DOUBLE',
        "NUC_MAGN": 'DOUBLE',
        "MASS_ELE": 'DOUBLE',
        "MASS_PRO": 'DOUBLE',
        "HBAR    ": 'DOUBLE',
        "AU_MASSP": 'DOUBLE',
        "SP_LIGHT": 'DOUBLE',
        "AU_EV   ": 'DOUBLE',
        "AVOGADRO": 'DOUBLE',
        "AU_ENERG": 'DOUBLE',
        "AU_CM-1 ": 'DOUBLE',
        "CM-1_KCA": 'DOUBLE',
        "CM-1_KJ ": 'DOUBLE',
        "AU_DIPOL": 'DOUBLE',
        "AU_VELOC": 'DOUBLE',
        "AU_TIME ": 'DOUBLE',
        "EL_GFACT": 'DOUBLE',
        "EA_IRREP": 'INTEGER',
        "UHFRHF  ": 'INTEGER',
        "IFLAGS  ": 'INTEGER',
        "IFLAGS2 ": 'INTEGER',
        "OCCUPYA ": 'INTEGER',
        "NUMDROPA": 'INTEGER',
        "JODAFLAG": 'INTEGER',
        "TITLE   ": 'CHARACTER',
        "NCNSTRNT": 'INTEGER',
        "ICNSTRNT": 'INTEGER',
        "VCNSTRNT": 'DOUBLE',
        "NMPROTON": 'INTEGER',
        "NREALATM": 'INTEGER',
        "COORDINT": 'DOUBLE',
        "VARNAINT": 'DOUBLE',
        "COORD000": 'DOUBLE',
        "ROTCONST": 'DOUBLE',
        "ORIENT2 ": 'DOUBLE',  # input orientation into interial frame
        "LINEAR  ": 'INTEGER',
        "NATOMS  ": 'INTEGER',
        "COORD   ": 'DOUBLE',
        "ORIENTMT": 'DOUBLE',  # input orientation from ZMAT (mostly useful for Cartesians) to Cfour standard orientation
        "ATOMMASS": 'DOUBLE',
        "ORIENT3 ": 'DOUBLE',
        "FULLPTGP": 'CHARACTER',
        "FULLORDR": 'INTEGER',
        "FULLNIRR": 'INTEGER',
        "FULLNORB": 'INTEGER',
        "FULLSYOP": 'DOUBLE',
        "FULLPERM": 'INTEGER',
        "FULLMEMB": 'INTEGER',
        "FULLPOPV": 'INTEGER',
        "FULLCLSS": 'INTEGER',
        "FULLSTGP": 'CHARACTER',
        "ZMAT2MOL": 'INTEGER',
        "COMPPTGP": 'CHARACTER',
        "COMPORDR": 'INTEGER',
        "COMPNIRR": 'INTEGER',
        "COMPNORB": 'INTEGER',
        "COMPSYOP": 'DOUBLE',
        "COMPPERM": 'INTEGER',
        "COMPMEMB": 'INTEGER',
        "COMPPOPV": 'INTEGER',
        "COMPCLSS": 'INTEGER',
        "COMPSTGP": 'CHARACTER',
        "BMATRIX ": 'DOUBLE',
        "NUCREP  ": 'DOUBLE',
        "TIEDCORD": 'INTEGER',
        "MPVMZMAT": 'INTEGER',
        "ATOMCHRG": 'INTEGER',
        "NTOTSHEL": 'INTEGER',
        "NTOTPRIM": 'INTEGER',
        "BASISEXP": 'DOUBLE',
        "BASISCNT": 'DOUBLE',
        "SHELLSIZ": 'INTEGER',
        "SHELLPRM": 'INTEGER',
        "SHELLANG": 'INTEGER',
        "SHELLLOC": 'INTEGER',
        "SHOFFSET": 'INTEGER',
        "SHELLORB": 'INTEGER',
        "PROFFSET": 'INTEGER',
        "PRIMORBT": 'INTEGER',
        "FULSHLNM": 'INTEGER',
        "FULSHLTP": 'INTEGER',
        "FULSHLSZ": 'INTEGER',
        "FULSHLAT": 'INTEGER',
        "JODAOUT ": 'INTEGER',
        "NUMIIII ": 'INTEGER',
        "NUMIJIJ ": 'INTEGER',
        "NUMIIJJ ": 'INTEGER',
        "NUMIJKL ": 'INTEGER',
        "NBASTOT ": 'INTEGER',
        "NAOBASFN": 'INTEGER',
        "NUMBASIR": 'INTEGER',
        "FAOBASIR": 'DOUBLE',
        "AO2SO   ": 'DOUBLE',
        "FULLSOAO": 'DOUBLE',
        "FULLAOSO": 'DOUBLE',
        "AO2SOINV": 'DOUBLE',
        "CART3CMP": 'DOUBLE',
        "CART2CMP": 'DOUBLE',
        "CMP3CART": 'DOUBLE',
        "CMP2CART": 'DOUBLE',
        "ANGMOMBF": 'INTEGER',
        "NBASATOM": 'INTEGER',
        "NAOBFORB": 'INTEGER',
        "MAP2ZMAT": 'INTEGER',
        "CENTERBF": 'INTEGER',
        "CNTERBF0": 'INTEGER',
        "ANMOMBF0": 'INTEGER',
        "CMP2ZMAT": 'DOUBLE',
        "ZMAT2CMP": 'DOUBLE',
        "OVERLAP ": 'DOUBLE',
        "ONEHAMIL": 'DOUBLE',
        "AOOVRLAP": 'DOUBLE',
        "SHALFMAT": 'DOUBLE',
        "SCFEVCA0": 'DOUBLE',
        "RPPBMAT ": 'DOUBLE',
        "OCCUPYA0": 'INTEGER',
        "SYMPOPOA": 'INTEGER',
        "SYMPOPVA": 'INTEGER',
        "SCFEVLA0": 'DOUBLE',
        "SCFDENSA": 'DOUBLE',
        "FOCKA   ": 'DOUBLE',
        "SMHALF  ": 'DOUBLE',
        "EVECOAOA": 'DOUBLE',
        "ONEHMOA ": 'DOUBLE',
        "NOCCORB ": 'INTEGER',
        "NVRTORB ": 'INTEGER',
        "SCFENEG ": 'DOUBLE',
        "TOTENERG": 'DOUBLE',
        "IRREPALP": 'INTEGER',
        "OMEGA_A ": 'DOUBLE',
        "EVECAOXA": 'DOUBLE',
        "EVALORDR": 'DOUBLE',
        "EVECAO_A": 'DOUBLE',
        "EVCSYMAF": 'CHARACTER',
        "EVCSYMAC": 'CHARACTER',
        "TESTVECT": 'DOUBLE',
        "MODROPA ": 'INTEGER',
        "VRHARMON": 'DOUBLE',
        "NEWRECRD": 'INTEGER',
        "VRCORIOL": 'DOUBLE',
        "VRQUADRA": 'DOUBLE',
        "VRANHARM": 'DOUBLE',
        "REFINERT": 'DOUBLE',
        "DIDQ    ": 'DOUBLE',
        "REFCOORD": 'DOUBLE',
        "REFDIPOL": 'DOUBLE',
        "REFGRADI": 'DOUBLE',
        "REFDIPDR": 'DOUBLE',
        "REFNORMC": 'DOUBLE',
        "REFD2EZ ": 'DOUBLE',
        "REFFREQS": 'DOUBLE',
        "REFORIEN": 'DOUBLE',
        "NUSECORD": 'INTEGER',
        "NZMATANH": 'INTEGER',
        "ISELECTQ": 'INTEGER',
        "NEXTGEOM": 'DOUBLE',
        "NEXTGEO1": 'DOUBLE',
        "FCMDISPL": 'DOUBLE',
        "GRDDISPL": 'DOUBLE',
        "DPMDISPL": 'DOUBLE',
        "DIPDISPL": 'DOUBLE',
        "NMRDISPL": 'DOUBLE',
        "SRTDISPL": 'DOUBLE',
        "CHIDISPL": 'DOUBLE',
        "POLDISPL": 'DOUBLE',
        "EFGDISPL": 'DOUBLE',
        "THEDISPL": 'DOUBLE',
        "JFCDISPL": 'DOUBLE',
        "JSDDISPL": 'DOUBLE',
        "JSODISPL": 'DOUBLE',
        "JDSODISP": 'DOUBLE',
        "CUBCOUNT": 'INTEGER',
        "FCMMAPER": 'DOUBLE',
        "QPLSMINS": 'INTEGER',
        "CUBCOORD": 'INTEGER',
        "PASS1   ": 'INTEGER',
        "REFFORDR": 'INTEGER',
        "REFFSYOP": 'DOUBLE',
        "REFFPERM": 'INTEGER',
        "REFNUMIC": 'INTEGER',
        "REFAMAT ": 'DOUBLE',
        "REFTTEN ": 'DOUBLE',
        "REFLINER": 'INTEGER',
        "DIPOLMOM": 'DOUBLE',
        "POLARTEN": 'DOUBLE',
        "CHITENSO": 'DOUBLE',
        "EFGTENSO": 'DOUBLE',
        "IRREPPOP": 'INTEGER',
        "REORDERA": 'INTEGER',
        "IRREPBET": 'INTEGER',
        "SCFEVLB0": 'DOUBLE',
        "SCFEVCB0": 'DOUBLE',
        "IRREPCOU": 'INTEGER',
        "IDROPA  ": 'INTEGER',
        "OCCSCF  ": 'INTEGER',
        "VRTSCF  ": 'INTEGER',
        "SCFEVECA": 'DOUBLE',
        "NCOMPA  ": 'INTEGER',
        "NBASCOMP": 'INTEGER',
        "SCFEVALA": 'DOUBLE',
        "SCFEVALB": 'DOUBLE',
        "SVAVA0  ": 'INTEGER',
        "SVAVA0X ": 'INTEGER',
        "SVAVA0I ": 'INTEGER',
        "SVBVB0  ": 'INTEGER',
        "SVBVB0X ": 'INTEGER',
        "SVBVB0I ": 'INTEGER',
        "SOAOA0  ": 'INTEGER',
        "SOAOA0X ": 'INTEGER',
        "SOAOA0I ": 'INTEGER',
        "SOBOB0  ": 'INTEGER',
        "SOBOB0X ": 'INTEGER',
        "SOBOB0I ": 'INTEGER',
        "SVAVA1  ": 'INTEGER',
        "SVAVA1X ": 'INTEGER',
        "SVAVA1I ": 'INTEGER',
        "SVBVB1  ": 'INTEGER',
        "SVBVB1X ": 'INTEGER',
        "SVBVB1I ": 'INTEGER',
        "SOAOA1  ": 'INTEGER',
        "SOAOA1X ": 'INTEGER',
        "SOAOA1I ": 'INTEGER',
        "SOBOB1  ": 'INTEGER',
        "SOBOB1X ": 'INTEGER',
        "SOBOB1I ": 'INTEGER',
        "SVAOA2  ": 'INTEGER',
        "SVAOA2X ": 'INTEGER',
        "SVAOA2I ": 'INTEGER',
        "SVBOB2  ": 'INTEGER',
        "SVBOB2X ": 'INTEGER',
        "SVBOB2I ": 'INTEGER',
        "SOBVA2  ": 'INTEGER',
        "SOBVA2X ": 'INTEGER',
        "SOBVA2I ": 'INTEGER',
        "SVBOA2  ": 'INTEGER',
        "SVBOA2X ": 'INTEGER',
        "SVBOA2I ": 'INTEGER',
        "SVAVB2  ": 'INTEGER',
        "SVAVB2X ": 'INTEGER',
        "SVAVB2I ": 'INTEGER',
        "SOAOB2  ": 'INTEGER',
        "SOAOB2X ": 'INTEGER',
        "SOAOB2I ": 'INTEGER',
        "SOAVA2  ": 'INTEGER',
        "SOAVA2X ": 'INTEGER',
        "SOAVA2I ": 'INTEGER',
        "SOBVB2  ": 'INTEGER',
        "SOBVB2X ": 'INTEGER',
        "SOBVB2I ": 'INTEGER',
        "SOAVB2  ": 'INTEGER',
        "SOAVB2X ": 'INTEGER',
        "SOAVB2I ": 'INTEGER',
        "SVAVA2  ": 'INTEGER',
        "SVAVA2X ": 'INTEGER',
        "SVAVA2I ": 'INTEGER',
        "SVBVB2  ": 'INTEGER',
        "SVBVB2X ": 'INTEGER',
        "SVBVB2I ": 'INTEGER',
        "SOAOA2  ": 'INTEGER',
        "SOAOA2X ": 'INTEGER',
        "SOAOA2I ": 'INTEGER',
        "SOBOB2  ": 'INTEGER',
        "SOBOB2X ": 'INTEGER',
        "SOBOB2I ": 'INTEGER',
        "SYMPOPOB": 'INTEGER',
        "SYMPOPVB": 'INTEGER',
        "T2NORM  ": 'DOUBLE',
        "MOIOVEC ": 'INTEGER',
        "MOIOWRD ": 'INTEGER',
        "MOIOSIZ ": 'INTEGER',
        "MOIODIS ": 'INTEGER',
        "MOIOFIL ": 'INTEGER',
        "ISYMTYP ": 'INTEGER',
        "TOTRECMO": 'INTEGER',
        "TOTWRDMO": 'INTEGER',
        "RELDENSA": 'DOUBLE',
        "IINTERMA": 'DOUBLE',
        "OCCNUM_A": 'DOUBLE',
        "SCRATCH ": 'DOUBLE',
        "SETUP2  ": 'INTEGER',
        "MOLHES2 ": 'INTEGER',
        "GRAD2   ": 'INTEGER',
        "COORDMAS": 'INTEGER',
        "NUCMULT ": 'INTEGER',
        "SYMCOORD": 'DOUBLE',
        "SYMCOOR2": 'DOUBLE',
        "SYMCOOR3": 'DOUBLE',
        "SYMMLENG": 'INTEGER',
        "SKIP    ": 'INTEGER',
        "NSYMPERT": 'INTEGER',
        "NPERTB  ": 'INTEGER',
        "TRANSINV": 'INTEGER',
        "IBADNUMB": 'INTEGER',
        "IBADINDX": 'INTEGER',
        "IBADIRRP": 'INTEGER',
        "IBADPERT": 'INTEGER',
        "IBADSPIN": 'INTEGER',
        "TREATPER": 'INTEGER',
        "MAXAODSZ": 'INTEGER',
        "PERTINFO": 'INTEGER',
        "GRADIENT": 'DOUBLE',
        "HESSIANM": 'DOUBLE',
        "GRDZORDR": 'DOUBLE',
        "D2EZORDR": 'DOUBLE',
        "REALCORD": 'DOUBLE',
        "DUMSTRIP": 'INTEGER',
        "BMATRIXC": 'DOUBLE',
        "REALATOM": 'INTEGER',
        "NORMCORD": 'DOUBLE',
        "DIPDERIV": 'DOUBLE',
        "I4CDCALC": 'DOUBLE',
        "FREQUENC": 'DOUBLE',
        "RATMMASS": 'DOUBLE',
        "RATMPOSN": 'INTEGER',
        "DEGENERT": 'INTEGER',
        "REFSHILD": 'DOUBLE',
        "CORIZETA": 'DOUBLE',
        "NMPOINTX": 'INTEGER',
        "REFD3EDX": 'DOUBLE',
        "BPPTOB  ": 'DOUBLE',
        "BPTOB   ": 'DOUBLE',
        "BSRTOB  ": 'DOUBLE',
        "BARTOB  ": 'DOUBLE',
        "VRTOTAL ": 'DOUBLE',
        "D2DIPOLE": 'DOUBLE',
        "D3DIPOLE": 'DOUBLE',
        "D1DIPOLE": 'DOUBLE',
        "REFNORM2": 'DOUBLE',
        "NUSECOR2": 'INTEGER',
        "FCMDISP2": 'DOUBLE',
        "RGTDISPL": 'DOUBLE',
        "CUBCOOR1": 'INTEGER',
        "CUBCOOR2": 'INTEGER',
        "REFFPEM2": 'INTEGER',
        "RGTTENSO": 'DOUBLE',
        "REFFPER2": 'INTEGER',
        "REFD4EDX": 'DOUBLE',
        "ZPE_ANHA": 'DOUBLE',
        "OPENSLOT": 'INTEGER',

        "BOLTZMAN": 'DOUBLE',
        "MRCCOCC ": 'INTEGER',
        "ABELPTGP": 'CHARACTER',
        "ABELORDR": 'INTEGER',
        "ABELNIRR": 'INTEGER',
        "ABELNORB": 'INTEGER',
        "ABELSYOP": 'DOUBLE',
        "ABELPERM": 'INTEGER',
        "ABELMEMB": 'INTEGER',
        "ABELPOPV": 'INTEGER',
        "ABELCLSS": 'INTEGER',
        "ABELSTGP": 'CHARACTER',
        "REALCHRG": 'INTEGER',      # atom/mol? charge taking into acct edp
        "NSOSCF  ": 'INTEGER',      # whether is spin orbital calc?
        "SCFVCFLA": 'DOUBLE',       # scf vector expanded from sph to cart basis for symm anal - determin orb sym
        "EFG_SYM1": 'INTEGER',       # symmetry property of components of electric field gradient  integrals
        "EFG_SYM2": 'INTEGER',       # symm prop of comp of EFG

        "DCTDISPL": 'DOUBLE',
        "DANGERUS": 'INTEGER',   #?
        "FULLCHAR": 'CHARACTER', #?
        "FULLDEGN": 'CHARACTER', #?
        "FULLLABL": 'CHARACTER', #?
        "FULLNIRX": 'CHARACTER', #?
        "COMPCHAR": 'CHARACTER', #?
        "COMPDEGN": 'CHARACTER', #?
        "COMPLABL": 'CHARACTER', #?
        "COMPNIRX": 'CHARACTER', #?
        "ROTVECX ": 'CHARACTER', #?
        "ROTVECY ": 'CHARACTER', #?
        "ROTVECZ ": 'CHARACTER', #?
        "COMPNSYQ": 'CHARACTER', #?
        "COMPSYQT": 'CHARACTER', #?
        "COMPSYMQ": 'CHARACTER', #?
        "TRAVECX ": 'CHARACTER', #?
        "TRAVECY ": 'CHARACTER', #?
        "TRAVECZ ": 'CHARACTER', #?
        "NVIBSYM ": 'CHARACTER', #?
        "NUMVIBRT": 'CHARACTER', #?
        "SBGRPSYM": 'CHARACTER', #?
        "ORDERREF": 'CHARACTER', #?
        "OPERSREF": 'CHARACTER', #?
        "NVIBSYMF": 'CHARACTER', #?
        "FULLNSYQ": 'CHARACTER', #?
        "FULLSYQT": 'CHARACTER', #?
        "FULLSYMQ": 'CHARACTER', #?
        "INVPSMAT": 'CHARACTER', #?
        "FDCOORDS": 'CHARACTER', #?
        "FDCALCTP": 'CHARACTER', #?
        "NUMPOINT": 'CHARACTER', #?
        "NPTIRREP": 'CHARACTER', #?
        "GRDPOINT": 'CHARACTER', #?
        "DIPPOINT": 'CHARACTER', #?
        "ENGPOINT": 'CHARACTER', #?
        "PASS1FIN": 'CHARACTER', #?
        "REFENERG": 'CHARACTER', #?
        "NEXTCALC": 'CHARACTER', #?
        "PRINSPIN": 'CHARACTER', #?
        "PRINFROM": 'CHARACTER', #?
        "PRININTO": 'CHARACTER', #?
        "NEXTGEOF": 'CHARACTER', #?
        "ZPE_HARM": 'DOUBLE', #?
        "NDROPPED": 'INTEGER',
        "REFCPTGP": 'INTEGER', #?
        "REFFPTGP": 'INTEGER', #?
        }

    with open('JAINDX', mode='rb') as file:  # b is important -> binary
        fileContent = file.read()
        fileLength = len(fileContent)

    if fileLength == 16012:
        srcints = 4
        srcrecs = 4
    elif fileLength == 16020:
        srcints = 4
        srcrecs = 8
    elif fileLength == 24016:
        srcints = 8
        srcrecs = 4
    elif fileLength == 24024:
        srcints = 8
        srcrecs = 8

    # fixed number of slots for options
    nopt = 1000

    type2len = {
        'DOUBLE': 8,
        'INTEGER': srcints,
        'CHARACTER': 1,
        }

    intlen2format = {
        4: 'i',
        8: 'l',
        }

    type2format = {
        'DOUBLE': 'd',
        'INTEGER': intlen2format[type2len['INTEGER']],
        'CHARACTER': 'c',
        }

    if verbose:
        print '\n<<<  JAINDX  >>>\n'

    posf = srcrecs
    istr = intlen2format[srcrecs]
    jastart = struct.unpack(istr, fileContent[:posf])
    if verbose:
        print '%10s%10d%10d' % ('start', 0, posf)

    poss = posf
    posf = poss + 8 * nopt
    istr = '8s' * nopt
    jaindx = struct.unpack(istr, fileContent[poss:posf])
    if verbose:
        print '%10s%10d%10d' % ('jaindx', poss, posf)

    poss = posf
    posf = poss + srcints * nopt
    istr = intlen2format[srcints] * nopt
    jaindx2 = struct.unpack(istr, fileContent[poss:posf])
    if verbose:
        print '%10s%10d%10d' % ('jaindx2', poss, posf)

    poss = posf
    posf = poss + srcints * nopt
    istr = intlen2format[srcints] * nopt
    jaindx3 = struct.unpack(istr, fileContent[poss:posf])
    if verbose:
        print '%10s%10d%10d' % ('jaindx3', poss, posf)

    poss = posf
    posf = poss + srcints
    istr = intlen2format[srcints]
    jamid = struct.unpack(istr, fileContent[poss:posf])
    if verbose:
        print '%10s%10d%10d' % ('mid', poss, posf)

    poss = posf
    posf = poss + srcrecs
    istr = intlen2format[srcrecs]
    jaend = struct.unpack(istr, fileContent[poss:posf])
    if verbose:
        print '%10s%10d%10d' % ('end', poss, posf)

    nrecs = jaindx.index('OPENSLOT')  # number of active records

    if verbose:
        print '\n'
        print '%20s%10d' % ('File Length:', fileLength)
        print '%20s%10d' % ('srcints Int Length:', srcints)
        print '%20s%10d' % ('srcrecs Int Length:', srcrecs)
        print '%20s%10d' % ('First Rec:', jastart[0])
        print '%20s%10d' % ('Second Rec:', jamid[0])
        print '%20s%10d' % ('Last Rec:', jaend[0])
        print '%20s%10d' % ('Full Records:', nrecs)
        print '\n'

        print '\n<<<  JOBARC  >>>\n'

    with open('JOBARC', mode='rb') as file:  # b is important -> binary
        fileContent = file.read()

    returnRecords = {}
    poss = 0
    for item in range(nrecs):
        posf = poss + type2len[knownlabels[jaindx[item]]] * jaindx3[item]
        istr = type2format[knownlabels[jaindx[item]]] * jaindx3[item]
        if knownlabels[jaindx[item]] == 'CHARACTER':
            bound = type2len[knownlabels[jaindx[item]]] * jaindx3[item] * 8
            posf = poss + bound
            istr = str(bound) + 's'
        jobarc = struct.unpack(istr, fileContent[poss:posf])

        if verbose:
            #print item, istr, poss, posf, '\t', jaindx[item], jaindx2[item], jaindx3[item], jobarc
            if jaindx3[item] < 120:
                print jaindx[item], jaindx2[item], jaindx3[item], jobarc

        poss = posf
        if jaindx[item] in reclabelarray:
            returnRecords[jaindx[item]] = jobarc

    return returnRecords

#if __name__ == "__main__":
#    want = ['NATOMS  ', 'AU_LENGT', 'COORD   ', 'HBAR    ', 'ATOMCHRG']
##    got = get_jajo_record(want)
#    got = getrec(want)
#    for item in got.keys():
#        print item, got[item]
