NAME
    UMLS::Interface CHANGES

  Changes from version 1.07 to 1.09
    1. modified the input and output of the perl modules to pass everything
    by reference

    2. modified the .pl programs to account for this

    3. updated the synopsis code

  Changes from version 1.05 to 1.07
    1. modified test cases for getCuiDef

  Changes from version 1.03 to 1.05
    1. modified the getDefConceptList to use the sabdef source(s) rather
    than the sab source(s).

    2. added the following options to getCuiList.pl

         --term -> prints out the terms

         --st   -> prints out the CUIs that have the specified semantic type

         --sg   -> prints out the CUIs that have the specified semantic group

  Changes from version 1.01 to 1.03
    1. updated the synopsis code in the .pm modules

  Changes from version 0.101 to 1.01
    1. modified the version number - this release was specifically about
    modifying the version number because cpan doesn't realize that .101 is
    greater than .99

    2. updated documentation

  Changes from version 0.99 to 0.101
    1. revised the program to obtain the semantic group of a cui or term <-
    no input file needed now

    2. added getSemanticGroup function in Interface.pm and its corresponding
    _getSemanticGroup function in CuiFinder.pm

    3. added getSemanticGroup.t test program in t/

    4. revised getSts.t test program in t/

    5. added a getSemanticRelation.pl program in the utils/ directory along
    with its corresponding functions and test cases

  Changes from version 0.97 to 0.99
    1. added program to obtain the semantic group of a cui or a term

    2. added an --infile FILE option to getSts.pl

    3. added a reConfig function which takes in a new configuration
    parameters

  Changes from version 0.95 to 0.97
    1. I forgot to add the new configuration files for the test cases

  Changes from version 0.93 to 0.95
    1. added a getDefTermList() function to obtain the concepts using the
    SABDEF information rather than the SAB information

    2. modified the getExtendedDef() function to reflect this

    3. modified the getCuiDef() function to print out the term as well as
    the CUI when returning the definition

  Changes from version 0.91 to 0.93
    1. modified the configuration options such that if not defined in the
    configuration file they use their respective defaults.

    2. return error message if source in the configuration file does not
    exist in the current view of the UMLS.

    3. added a getDefConceptList() function to obtain the concepts using the
    SABDEF information rather than the SAB information

  Changes from version 0.89 to 0.91
    1. modified documentation

    2. added a length cache for the realtime option so once you find the
    path length in realtime, it will store that for you. This is similar to
    what I did for the depth only this only runs during realtime - other
    wise there is the index that is created so there is no point in having
    both due to space issues.

  Changes from version 0.87 to 0.89
    1. added the mysql_auto_reconnect option to the database variables

  Changes from version 0.85 to 0.87
    1. changed the IC to return log base 10 rather than the natural log
    (which is the default in perl)

    2. added a new util/ program findNumberOfCloserConcepts.pl to coincide
    with the new function findNumberOfCloserConcepts()

  Changes from version 0.83 to 0.85
    1. added a new program called getCompounds.pl which returns a list of
    compounds from the MRCONSO table given a specified set of sources in the
    configuration table

    2. added the getCompound() function in the Interface.pm module to
    support this program

  Changes from version 0.81 to 0.83
    1. modified the --icpropagation option in findShortestPath.pl and the
    findPathToRoot.pl programs. The option was not working properly.

    2. modified getChildren to include the upper level taxonomy even if it
    isn't explicitily stated in MRREL

  Changes from version 0.79 to 0.81
    1. added a forbidden CUI: C2733115|limited status concept which was
    introduced in UMLS 2010AA

  Changes from version 0.77 to 0.79
    1. added --level option to findDFS.pl which prints out the number of
    leafs and nodes above a specified depth

    2. added the mean information to findDFS.pl

    3. modified getChildren and getParent to print out the preferred term of
    a cui rather than a random associated one.

    4. added a developers-check to the t directory

  Changes from version 0.75 to 0.77
    1. added a getStString.pl program to utils/

    2. added a findShortestPathLength.pl program to utils/

    3. fixed error in the find shortest path length function

  Changes from version 0.73 to 0.75
    1. added average maximum depth to the findDFS.pl program

    2. modified the findShortestPathLength function to obtain the length
    using the index when the --realtime option is not used.

    3. added standard deviation from average depth to the findDFS.pl program

  Changes from version 0.71 to 0.73
    1. modified the shortest path - there was a problem with the directed
    paths - I was getting some undirected ones mixed in there. This should
    not have affected the length of the shortest path just the paths
    themselves.

    2. modified utils programs to return the preferred term of a concept
    rather than just any term.

    3. modified the depth() function to obtain the maximum cui depth of the
    concepts in the view when called - these are stored in a database
    currently

    4. modified the findMaximumDepth function to cache the maximum depth of
    cuis when found (storing them in the same database as mentioned above).

  Changes from version 0.69 to 0.71
    1. There are two functions that currently exist:

            getTermList()    -> returns CUIs terms that exist in the sources
                                specified in the configuration file
            getAllTermList() -> returns CUIs terms from the entire UMLS

     I added to new functions:

            getPreferredTerm() -> returns the CUIs preferred term if it exists
                                  in the sources specified in the
                                  configuration file

            getAllPreferredTerm()-> returns the CUIs preferred term

    2. For the getAssociatedTerms.pl program , there is an additional option
    called:

            --preferred

     Here are the options:


     1. --config FILE
            returns the cuis associated terms from the sources specified in
            the configuration file

     2. --preferred --config FILE
            returns the cuis preferred term from the sources specified in
            the configuration file

     3. --preferred
            returns the cuis preferred term

     4. no config and no preferred option
            returns the cuis associated terms from the entire UMLS

     5. removed added white space in the config file parameters 
        - this was causing an error sometimes

     6. made certain that the parent/children information is only
        being obtained if in the configuration file. There was a 
        problem with this using RELDEF :: include and a single 
        option such as CHD.

     7. restrict util programs to heirarchical relations - PAR/CHD and RB/RN
          - findCuiDepth
          - findDFS
          - findLeastCommonSubsumer
          - findPathToRoot

     8. modified the default source and relation output

     9. added an --infile option to getAssociatedTerms.pl

     10. modified the getMinimumCuiDepth to speed up the process

  Changes from version 0.67 to 0.69
    1. Updated configuration file reading for spaces

    2. Updated icfrequency and icpropagation files to include the total
    number of concepts - I call this N

    3. Added getFrequency() function which returns the frequency of a
    concept - after propagation

    4. Modified documentation - hope it is clearer

    5. Added a getN() function which returns the total number of concepts in
    the icpropgation or icfrequency file

    6. Updated getExtendedDefinition to include the source in which the term
    originates

    7. Updated getExtendedDefinition to allow include the defintiion of the
    concepts semantic type

    8. Allowed the definitions to come from all the sources in the MRDEF
    table when using UMLS_ALL rather than all the sources in the MRREL
    table.

    9. Added the new shortest path measure

  Changes from version 0.65 to 0.67
    1. Fixed the RELADEF parameter

    2. Added better parameter check for propagation

  Changes from version 0.63 to 0.65
    1. modified N in creating the probability of a concept for propagation

    2. modified documentation

    3. Added the RELADEF option

    4. Added the UMLS_ALL parameter for RELADEF and RELDEF

    5. put the shortest path back to what we had. The previous version
    shortest path works but it isn't as fast as we would like. We are still
    working on this.

  Changes from version 0.61 to 0.63
    1. updated the source and relation output for SABDEF/RELDEF and SAB/REl

    2. the UMLS_ROOT showing up as a child of C0282503 - that seems a bit
    odd (priority)

       we figured out why - this node seems to be part of three sources:
       MSH, NCI and HL7v2.5 (as a PAR/CHD relationship). 

       we are fixing this by creating a fake root: C0000000

    3. implement shortest path algorithm (priority)

    4. implement the lcs algorithm for the new shortest path (priority)

    5. allow SABDEF, SABREL and REL to have the UMLS_ALL option

    6. add --undirected option to shortest path

    7. require that both the SAB and REL or SABDEF and RELDEF be specified

  Changes from version 0.59 to 0.61
    1. add validOptions() check in the Interface.pm module -> I actually
    called it checkOptions since this is consistent with other functions
    that do this

    2. change the synopsis of the Finder modules so that are unique and
    describe what they do better (priority)

    3. add a check in the table file of the index to make certain that the
    program completed

    4. Get --icfrequency option up and running

    5. write the SAB and REL info on the top lines of the icpropagation
    file, and then check those relative to the config file being used

    6. perldoc should give a quick intro to what propagation is, and how we
    are doing the actual calculations of info content values

    7. Add --smooth option

    8. document how the smoothing is done in the perldoc

    9. document the --icfrequency option

    10. add check to RELA requiring REL if specified

    11. move error checking into separate module

    12. add RELA to the documentation

    13. create getExtendedRelation function using SABDEF and use that
    instead of getRelated in the getExtendedDefinition function

  Changes from version 0.57 to 0.59
    1. fixed an error that happened when trying to obtain the depth of a
    taxonomy when not in --realtime

    2. cleaned up documentation and STDERR output a bit

    3. add check to make certain that that the .t programs can only be
    called in the main directory

    4. change mkpath and rmtree to make_path() and remove_tree() in the .t
    files

    5. reorganized the Finder modules

  Changes from version 0.55 to 0.57
    1. add a more complete configuration file in the samples directory

    2. updated the documentation

    3. Added --info option to getParent.pl and getChild.pl to display the
    source information (similar to the --info option in findPathtoRoot?)

  Changes from version 0.53 to 0.55
    1. There are significant changes in the Interface.pm module but if
    everything went well you should not notice them at all. We split the
    functionality of Interface.pm into three module: CuiFinder.pm
    PathFinder.pm ICFinder.pm

        These modules is where the main code is but the 
        API is still through the Interface.pm module so 
        you should not have to access these at all.

    2. modification in the findLeatCommonSubsumer.pl out. The output would
    be as follows: the least common subsumer between C0007286 (C0007286) and
    hypertrophic arthritis, nos (C0029408) is other soft tissue disorders
    (disorder) (C0158370). Fix this to print out the term rather than the
    CUI twice.

    3. Added an addition to forbidden concepts: unapproved attribute
    (C1443286)

    4. Removed bignum from UMLS-Interface

    5. Know uses SABDEF and RELDEF for the extended definition and
    definition configuration options rather than DEF

    6. The getCuiDef.pl displays the source of definitions when using the
    --sab option

    7. The findShortestPath.pl and FindLeastCommonSubsumer.pl do not go
    through all their path finding when CUI1 and CUI2 are the same

    9. The exclude option is now working for SAB, REL and RELA

    10. Obtains the source in which a relationship exists between two
    concepts. We now have a method called: getRelationBetweenTwoCuis($cui1,
    $cui2);

    11. There are new examples of how to go about specifing the config
    option in the API code. These are in the Interface.pm module
    documentation under CONFIGURATION FILE and I think the README does a
    decent job of it now, as well.

  Changes from version 0.51 to 0.53
    Added the --debugpath FILE option to the path util/ programs and the
    UMLS-Interface. This option prints out the path information on the fly
    for debuging purposes. It works only with the --realtime function
    because otherwise an index is built. If you need the path information in
    the index you can use the --verbose option while creating the index and
    it will print it to a file.

  Changes from version 0.49 to 0.51
    1. Modified Interface.pm to accept either a propagation file or a
    frequency file when returning the information content of a CUI. I also
    modified the format these files are required.

    2. Added a README in the samples/ directory

    3. Updated documentation

    4. Added example files to the samples/ directory

  Changes from version 0.47 to 0.49
    1. Added the getExtendedDefinition function

    2. Modified the configuration file to accept what relations should be
    included in the extended defintion. The format is:

        DEF :: include TERM, CUI, PAR, CHD, SIB, SYN, RB, RN

        where TERM refers to the associated terms of a concept
              CUI refers to the CUIs definition and the rest 
              are the definition of the relations.

    3. Created a samples/ directory which contains an example of the
    configuration file

  Changes from version 0.45 to 0.47
    1. Added a t/ test case for each of the programs in the utils/ directory

    2. Added the --infile option for findPathsToRoot.pl

        The format consists of a CUI or term each on its 
        own line.

    3. Added the --infile option for findCuiDepth.pl

        The format is the same as above.

  Changes from version 0.43 to 0.45
    Modified the way that the path information was being returned. It was
    causing some problems with UMLS-Similarity

  Changes from version 0.41 to 0.43
    1. Added the terms associated to concept2 and the lcs in the
    findLeastCommonSubsumer program

    2. Added the --info option to the findPathsToRoot program

  Changes from version 0.39 to 0.41
     1. Modified the findShortestPath and findLeastCommonSubsumer 
        functions to return all of the paths and LCS's if there 
        is more than one.

  Changes from version 0.37 to 0.39
     1. Added the following options to findLeastCommonSubsumer
       a. --infile            File containing TERM or CUI pairs
       b. --depth             Outputs the depth of the lcs
       c. --propagation FILE  Outputs the IC of the lcs
     2. Added the following options to findShortestPath    
       a. --propagation FILE  Outputs the IC of the lcs
       b. --length            Outputs the length of the path
       c. --info              Outputs the source and relation
                              information between the concepts 
                              in the path

  Changes from version 0.35 to 0.37
     1. Revised the way the propagation of counts is handled

     2. Renamed everything spelt propogation to propagation

     3. Updated documentation

  Changes from version 0.33 to 0.35
    1. Added the ability to propogation counts given a propogation file.
    Currently the format of that file is: Frequency|CUI|String

        So for example:

        1|C0018563|hand

        The concept C0018563 has a frequency count of one and is associated 
        with the term hand. The string really isn't necessary but I like 
        to know what a CUI means. This input format may be changed in the 
        future to accept a file but I might also create a program in the 
        util/ directory that given a file it will create this for you. 

        To do this the propogation parameter must be set to the location
        of the propogation file.

    2. Added the getPropogationCount.pl program to the util/ directory. This
    is used to obtain the propogation count of a specified CUI.

    3. Added a getIC() function which takes in a CUI and returns its
    information content based on the propagation file

    4. I also added a getPropogationCount() function which takes in a CUI
    and returns the propogation count of a given concept

    5. Added getCuiList() program to the util directory and its associated
    function in the Interface.pm module. This allows you to get a list of
    CUIs given the sources and relations in a config file.

    6. Added a --debug option to print out function information for debuging
    purposes.

    7. Added a --propogation PROPOGATIONFILE option to findPathToRoot.pl
    which will return the propogation count of the CUIs in the path

    8. Combined the following util programs:

        a. findMaximumCuiDepth and findMinimumCuiDepth => findCuiDepth
        b. queryCui and queryCui-SAB -> getAssociatedTerms

    9. Changed the name of the following util programs a. queryTerm ->
    getAssociatedCuis b. dfs -> findDFS

    10. Added a --propogation option for findPathToRoot to return the
    propogation counts of the CUIs in the path.

  Changes from version 0.31 to 0.33
    1. fixed the error in the make tests - they would not work properly
    unless you had the UMLS-Interface environment variable set for the
    location of the configuration files even though we weren't using them.

  Changes from version 0.29 to 0.31
    1. Changed all of the table names into hex form!! This is important
    because it now means the versions aren't back compatible. Why did I do
    this - well the table names were getting long the more sources and
    relations that were added. If to many were used an error is thrown
    because there were too many characters in the table name.

       I created two utils/ programs the first is returnTableNames.pl. 
       This returns all of the table names in both hex and human readable 
       form (the original form) that were created for a specified config 
       file. The second is returnAllTableNames.pl which returns all of 
       the table names (in hex and the original form) that have been 
       created by the package. These tables are stored in a database called 
       umlsinterfaceindex. One nice thing is that this will be the only 
       database created now.

    2. The getSab() disappeared - I must have erased it - it is back!

    3. The RELA option in the config file is now up and running. So you can
    now not only specify a set of sources and relations but also RELAs - as
    long as the RELA exists in the source and relation combination. If it
    doesn't I just continue on right now - I could error out though - not
    certain which is the best thing to do right now.

    4. You can use other relations in UMLS-Interface now, like, for example,
    RO. I don't connect these though to the root so if they are not either
    connected to the root itself (like in SNOMEDCT but unlike in FMA) it
    will only connect through additional relations.

    5. The make tests have been expanded

    6. Added a --realtime option. This allows the path information to be
    obtained on the fly rather than prebuilding the umlsinterface index. You
    will notice these in the util/ programs

    7. There is a UMLS_ALL tag that can be used in the configuration file in
    replace of the source names. For example, to use the entire UMLS with
    the PAR/CHD relations, the configuration file would be as follows:

          SAB :: include UMLS_ALL
          REL :: include PAR, CHD

  Changes from version 0.27 to 0.29
    1. Added a dfs.pl program which is located in the utils/ directory. This
    program runs a dfs over a specified set of sources and relations in the
    UMLS and returns:

        1. the maximum depth
        2. paths to root
        3. sources
        4. maximum branching factor
        5. average branching factor
        6. number of leaf nodes
        7. number of nodes
        8. root

    2. Added a function in Interface.pm called getAllTerms() which returns
    all of the possible terms of a given CUI along with their source(s).
    This is for all of the strings associated with the CUI in the MRCONSO
    table so you can't specify a source for this one. If you would like to
    do that use the getTermList function instead.

       There is also a program in the utils/ directory which uses this called 
       queryCui-Sab.pl

    3. Added the functionality to store only the path information of a given
    set of cuis. To do this you need to use the --cuilist option which takes
    in a file containing CUIs. Note that each CUI needs to be on a seperate
    line.

  Changes from version 0.25 to 0.27
    1. Added a --verbose option will print out path information to a file
    rather than having this be done automatically. This will reduce the
    amount of storage space required to hold the path information for a
    given set of sources and relations.

  Changes from version 0.23 to 0.25
    1. Fixed mysql error that was occuring in UMLS-Interface

        DBD::mysql::db do failed: You have an error in your SQL syntax; 
        check the manual that corresponds to your MySQL server version 
        for the right syntax to use near '' at line 1 at 
        /usr/local/share/perl/5.10.0/UMLS/Interface.pm line 1063, <STDIN> 
        line 2.

       This was also happening on line 1066 - both should be fixed now.

    2. Updated INSTALL documentation - nothing major just some clean up

    3. Added a --forcerun option which will bypass any questions about
    whether or not you would like to set up an index on a specified set of
    relations/sources

    4. Updated the documentation of the programs in the util/ directory

  Changes from version 0.21 to 0.23
    1. Added a getRelation function which returns all the possible relations
    in the MRREL file given a specified CUI and source. There is a
    corresponding util program getRelation.pl to show how this is used. 2.
    Modified checking the existance of the UMLS tables. Before it was
    expecting the table names to be all capatalized but now they can be in
    lower case as well.

  Changes from version 0.19 to 0.21
    1. Added check to see if program files exist prior to removing them just
    in case they don't exist an error isn't going to display

    2. Had an error in getCuiDef.pl when the input was a term. This has been
    fixed.

    3. Modified the upper level taxonomy to be written to tables in its
    appropriate database.

    4. Add the program removeConfigData.pl which will remove the database
    and all of the associated files created by the program given a specified
    configuration.

  Changes from version 0.17 to 0.19
    1. Modified the documentation in the utils/ programs. The descriptions
    were just a mess

  Changes from version 0.15 to 0.17
    1. In SNOMED CT there exist concepts that are used to show why a concept
    is retired. Unfortunately, the relationship linking that reason to the
    retired concept is 'is-a'. So you have for example 'stenosis' is-a
    'non-current concept - ambiguous'. This is understandable in a plain
    English sense but doesn't fit into the hierarchical sense of an 'is-a'
    relationship. We now exclude these nodes:

    C1274012|Ambiguous concept (inactive concept) C1276325|Reason not stated
    concept (inactive concept) C1274013|Duplicate concept (inactive concept)
    C1274014|Outdated concept (inactive concept) C1274015|Erroneous concept
    (inactive concept) C1274021|Moved elsewhere (inactive concept)

    If you have a strong reason why they should still be there send us an
    email and we can probably work something else out.

    2. When using the RB/RN and PAR/CHD relations not all of the upper level
    taxonomy was being looked at to obtain the path information. This has
    been fixed.

    3. Moved the dropTemporaryTables.pl program to removeConfigData.pl and
    added the functionality to drop the files associated with the
    configuration data as well.

    4. The UMLS-Interface module was not accepting the a configuration file
    if the first one was printed out incorrectly. We fixed this.

    5. Added configuration file information printed out to STDERR containing
    source, relation and configuration file location information.

    6. Added a file option to the findShortestPath.pl program:

       --inputfile FILE

       A file containing pairs of concepts or terms in the following format:

        term1<>term2 

        or 

        cui1<>cui2

        or 

        cui1<>term2 

        or 

        term1<>cui2

  Changes from version 0.13 to 0.15
    1. Added three new functions for semantic types:

          getSt       which returns the semantic type TUI of a given CUI
          getStAbr    which returns the semantic type abbreviation 
                      given the semantic type TUI
          getStString which returns the semantic type string 
                      given the semantic type abbreviation

    2. Added a program to the utils/ directory:

           getSt.pl    which returns the semantic type of a given CUI
                      or TERM in the UMLS. This program uses the three 
                      above functions.

    3. Added the function checkConceptExists which returns true or false
    whether a concept exists in the current view of the UMLS (this is based
    on the sources and relations that are being used). This function was
    hidden but it seemed like it could be useful to others as well - it
    became useful for me anyway :)

    4. Modified the SYNOPSIS section in the Interface.pm module to include
    all or at least most of the different functions available through the
    Interface.pm module.

    5. Fixed the permissions on the configuration file directory when it is
    being created. And chmod the individual files after they were created.
    Hopefully now they will be created with read and write privlidges so you
    can see them if you install using the -MCPAN option.

    6. Modified the findPathToRoot.pl and findShortestPath.pl to include the
    term associated with the CUI in the path

    7. I forgot to add the UMLS Root to the PATH in the pathToRoot function.
    It is now added.

  Changes from version 0.11 to 0.13
    1. Speed up the getTermList() option when all of the sources are being
    used

    2. Modified documentation

    3. Added the function findMinimumDepth and findMaximumDepth which
    returns the minimum and maximum depth of a CUI respectively given the
    view of the UMLS

  Changes from version 0.09 to 0.11
    1. Modified the Changelog directory and tried to remember to add them to
    the release!

    2. Modified documenation - tried to get the misspelling and obvious
    errors removed.

    3. Removed the HTML documentation

  Changes from version 0.03 to 0.09
    1. Allowed the program to create the directory that we prompt the user
    for (the location that the config files should be stored) if it doesn't
    exist rather than requiring it be already created.

    2. Modified the location of where the utils/ programs are installed. All
    of them now get installed and they are all in the same location.

    3. Found a bug in the code that reads the configuration file. Error
    would occur if trying to exclude a source.

  Changes from version 0.01 to 0.03
    1. Removed the need for UMLSINTERFACE environment variable indicating
    the location of the UMLS. Now we prompt the user for the location that
    the config files should be stored and ask them to set a
    UMLSINTERFACE_CONFIGFILE_DIR variable.