Skip to content

Example — Compare models

Category: Small (no AI) · Script: examples/small/07_compare_models.py Minimal (2 lines): examples/minimal/compare_models.py

Compare BIOMD0000000206 vs BIOMD0000000064.


How to run

pip install -e "src/praisonai-bio"
python examples/small/07_compare_models.py

Needs: Internet.


Tested output

Live capture from ./scripts/capture_example_outputs.sh.

Click to view full output
{
  "model_a": {
    "id": "BIOMD0000000206",
    "summary": "\n\n\n\n<!doctype html>\n\n\n\n\n\n\n\n\n\n\n\n\n<!-- paulirish.com/2008/conditional-stylesheets-vs-css-hacks-answer-neither/ -->\n<!--[if lt IE 7]> <html class=\"no-js ie6 oldie\" lang=\"en\"> <![endif]-->\n<!--[if IE 7]>    <html class=\"no-js ie7 oldie\" lang=\"en\"> <![endif]-->\n<!--[if IE 8]>    <html class=\"no-js ie8 oldie\" lang=\"en\"> <![endif]-->\n<!-- Consider adding an manifest.appcache: h5bp.com/d/Offline -->\n<!--[if gt IE 8]> <html class=\"no-js\" lang=\"en\"> <![endif]-->\n\n<html lang=\"en\">\n<head>\n    \n\n\n\n\n\n\n<meta charset=\"utf-8\">\n<!-- Use the .htaccess and remove these lines to avoid edge case issues.\n   More info: h5bp.com/b/378 -->\n<!-- Not yet implemented -->\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge,chrome=1\">\n<!-- Describe what this page is about -->\n<meta name=\"description\" content=\"BioModels is a repository of freely-available mathematical models of biological and biomedical systems. It hosts a vast selection of physiologically and pharmaceutically\nrelevant mechanistic models in standard formats.\"/>\n<meta name=\"keywords\" content=\"BioModels Database, biomodels, systems biology, bioinformatics, computational\n    modelling, systems modelling, model repository, model database, SBML, PharmML, COMBINE Archive, OMEX,\n    public domain\">\n<meta name=\"author\" content=\"BioModels\"/>\n<meta name=\"google\" content=\"notranslate\"/>\n<meta name=\"google-site-verification\" content=\"Lw3ylc1DHWxe6umaxo3tA-Dm-QWs5YsG1b1EXIhNmPw\"/>\n<meta name=\"ebi:masthead-color\" content=\"#254146\">\n<meta name=\"ebi:masthead-image\" content=\"//ebi.emblstatic.net/web_guidelines/EBI-Framework/v1.3/images/backgrounds/embl-ebi-background.jpg\"/>\n\n<!-- Mobile viewport optimized: j.mp/bplateviewport -->\n<meta name=\"viewport\" content=\"width=device-width,initial-scale=1\">\n\n<!-- Place favicon.ico and apple-touch-icon.png in the root directory: mathiasbynens.be/notes/touch-icons -->\n\n<link rel=\"apple-touch-icon\" sizes=\"57x57\" href=\"https://www.biomodels.org/images/biomodels/apple-icon-57x57.png\">\n<link rel=\"apple-touch-icon\" sizes=\"60x60\" href=\"https://www.biomodels.org/images/biomodels/apple-icon-60x60.png\">\n<link rel=\"apple-touch-icon\" sizes=\"72x72\" href=\"https://www.biomodels.org/images/biomodels/apple-icon-72x72.png\">\n<link rel=\"apple-touch-icon\" sizes=\"76x76\" href=\"https://www.biomodels.org/images/biomodels/apple-icon-76x76.png\">\n<link rel=\"apple-touch-icon\" sizes=\"114x114\" href=\"https://www.biomodels.org/images/biomodels/apple-icon-114x114.png\">\n<link rel=\"apple-touch-icon\" sizes=\"120x120\" href=\"https://www.biomodels.org/images/biomodels/apple-icon-120x120.png\">\n<link rel=\"apple-touch-icon\" sizes=\"144x144\" href=\"https://www.biomodels.org/images/biomodels/apple-icon-144x144.png\">\n<link rel=\"apple-touch-icon\" sizes=\"152x152\" href=\"https://www.biomodels.org/images/biomodels/apple-icon-152x152.png\">\n<link rel=\"apple-touch-icon\" sizes=\"180x180\" href=\"https://www.biomodels.org/images/biomodels/apple-icon-180x180.png\">\n<link rel=\"icon\" type=\"image/png\" sizes=\"192x192\"  href=\"https://www.biomodels.org/images/biomodels/android-icon-192x192.png\">\n<link rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"https://www.biomodels.org/images/biomodels/favicon-32x32.png\">\n<link rel=\"icon\" type=\"image/png\" sizes=\"96x96\" href=\"https://www.biomodels.org/images/biomodels/favicon-96x96.png\">\n<link rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"https://www.biomodels.org/images/biomodels/favicon-16x16.png\">\n<link rel=\"manifest\" href=\"https://www.biomodels.org/images/biomodels/manifest.json\">\n<meta name=\"msapplication-TileColor\" content=\"#ffffff\">\n<meta name=\"msapplication-TileImage\" content=\"https://www.biomodels.org/images/biomodels/ms-icon-144x144.png\">\n<meta name=\"theme-color\" content=\"#ffffff\">\n\n<!-- If you link to any other sites frequently, consider optimising performance with a DNS prefetch -->\n<link rel=\"dns-prefetch\" href=\"https://ebi.emblstatic.net/\" />\n<!-- CSS: implied media=all -->\n<!-- CSS concatenated and minified via ant build script -->\n<link rel=\"stylesheet\" type=\"text/css\"\n      href=\"https://ebi.emblstatic.net/web_guidelines/EBI-Framework/v1.3/css/ebi-global.css\"\n      media=\"none\" onload=\"if(media!=='all') media='all'\">\n<link rel=\"stylesheet\" type=\"text/css\"\n      href=\"https://ebi.emblstatic.net/web_guidelines/EBI-Icon-fonts/v1.3/fonts.css\"\n      media=\"none\" onload=\"if(media!=='all') media='all'\">\n\n<!-- you can replace this with [projectname]-colours.css. See http://frontier.ebi.ac.uk/web/style/colour\nfor details of how to do this -->\n<style>\n    /* You have the option of setting a maximum width for your page, and making sure everything is centered */\n    body {\n        margin: 2px 5px auto;\n    }\n    li.divider {\n        border-top: 1px solid #999;\n    }\n\n    #local-masthead nav ul.menu li:hover {\n        background: rgb(0,124,130);\n    }\n</style>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"/css/common.css\">\n<!-- end CSS-->\n<script src=\"https://code.jquery.com/jquery-1.11.1.min.js\"\n        integrity=\"sha256-VAvG3sHdS5LqTT+5A/aeq/bZGa/Uj04xKxY8KM/w9EE=\" crossorigin=\"anonymous\"></script>\n\n<script src=\"https://code.jquery.com/ui/1.11.4/jquery-ui.min.js\"\n        integrity=\"sha256-xNjb53/rY+WmG+4L6tTl9m6PpqknWZvRt0rO1SRnJzw=\" crossorigin=\"anonymous\"></script>\n\n<title>Login | BioModels</title>\n\n    <script type=\"text/javascript\">\r\n\n        $.appName = \"biomodels\";\n        $.serverUrl = \"https://www.biomodels.org\";\n        var helpHidden=1;\n\n        \n            var helpWidth=-1;\n            var maxWidth=-1;\n            var maxHelpWidth=800;\n            var minHelpWidth=50;\n            var stepWidth=30;\n            var syncResize=0;\n            function adjustWidth(newWidth) {\n                if (syncResize==1) {\n                    var delta= helpWidth - newWidth;\n                    var mainWidth=$(\"#mainframe\" ).width();\n                    if (maxWidth==-1) {\n                        maxWidth=mainWidth;\n                    }\n                    if (maxWidth<(mainWidth+delta)) {\n                        mainWidth=maxWidth;\n                    }\n                    else {\n                        mainWidth+=delta;\n                    }\n                    $( \"#mainframe\" ).width(mainWidth);\n                    helpWidth=newWidth;\n                }\n            }\n\n            function hideHelp() {\n                $( \"#helpPanel\" ).removeClass(\"helpHeightWorkaround\")\n                adjustWidth(0);\n                $( \"#helpPanel\" ).hide();\n                helpHidden=1;\n                helpWidth=-1;\n                $('#toggleHelp').text(\"More about this page\");\n                $('#toggleHelp').attr(\"title\", \"Access help for this page\");\n            }\n\n            function showHelp() {\n                $( \"#helpPanel\" ).addClass(\"helpHeightWorkaround\")\n                helpWidth=-1;\n                $(\"html, body\").animate({ scrollTop: 0 }, \"medium\");\n                $( \"#helpPanel\" ).width(800);\n                    $( \"#helpPanel\" ).show();\n                    adjustWidth(800);\n                    $( \"#helpPanel\" ).position({\n                        my: \"right-1 bottom\",\n                        at: \"right-1 bottom\",\n                        of: \".main-menu\"\n                    });\n                    helpHidden=0;\n                    $('#toggleHelp').text(\"Hide help\");\n                    $('#toggleHelp').attr(\"title\", \"Hide help\");\n                }\n                var isDragged=false;\n        \n        $(function() {\n        \n        \n            $(\"#helpPanel\").resizable({\n                        handles: 'n,e,s,w',\n                        maxWidth: maxHelpWidth,\n                        animate: true,\n                        resize: function( event, ui ) {\n                            if (helpWidth==-1) {\n                                helpWidth=ui.originalSize.width;\n                            }\n                            adjustWidth(ui.size.width);\n                        }\n            });\n            $( \"#helpPanel\").draggable({ cursor: \"move\",\n                                          revert: false,\n                                          containment: \"body\",\n                                          start: function() {\n                                            isDragged=true;\n                                          },\n                                          stop: function( event, ui ) {\n                                            isDragged=false;\n                                          }\n                                        });\n            $( \"#helpPanel\" ).hide();\n\n            $(\"#toolbar\").mouseleave(function() {\n                if (isDragged) {\n                    $( \"#helpPanel\" ).draggable( \"disable\" );\n                    $( \"#helpPanel\" ).draggable( \"enable\" );\n                }\n            })\n\n\n            $( \"#expand\" ).button({\n                text: false,\n                icons: {\n                    primary: \"ui-icon-circle-plus\"\n                }\n            }).click(function() {\n                 helpWidth=$(\"#helpPanel\" ).width();\n                if (maxHelpWidth<(helpWidth+stepWidth)) {\n                    helpWidth=maxHelpWidth;\n                }\n                else {\n                    helpWidth+=stepWidth;\n                }\n                var windowRight = document.body.getBoundingClientRect ().right\n                console.log(windowRight);\n                $( \"#helpPanel\" ).width(helpWidth);\n                var el= document.getElementById (\"helpPanel\");\n                var helpRight = el.getBoundingClientRect ().right\n                if (helpRight > windowRight) {\n                    var offset = helpRight - windowRight + 10\n                    $('#helpPanel').animate({\n                        'marginLeft' : \"-=\" + offset + \"px\"\n                    });\n                }\n\n            });\n            $( \"#contract\" ).button({\n                text: false,\n                icons: {\n                    primary: \"ui-icon-circle-minus\"\n                }\n            }).click(function() {\n                 helpWidth=$(\"#helpPanel\" ).width();\n                if (minHelpWidth>helpWidth-stepWidth) {\n                    helpWidth=minHelpWidth\n                }\n                else {\n                    helpWidth-=stepWidth;\n                }\n                $( \"#helpPanel\" ).width(helpWidth);\n                var addedPercentage = (helpWidth - 400) / 400\n                var basic = 99+addedPercentage;\n                $( \"#helpFrame\" ).width(basic+\"%\");\n            });\n            $( \"#close\" ).button({\n                text: false,\n                icons: {\n                    primary: \"ui-icon-circle-close\"\n                }\n            }).click(function() {\n                hideHelp();\n            });\n\n            $( \"#snap\" ).button({\n                text: false,\n                icons: {\n                    primary: \"ui-icon-arrowrefresh-1-e\"\n                }\n            }).click(function() {\n                hideHelp();\n                showHelp();\n            });\n            $( \"#outlink\" ).button({\n                text: false,\n                icons: {\n                    primary: \"ui-icon-extlink\"\n                }\n            }).click(function() {\n                hideHelp();\n                window.open('https://www.biomodels.org/user-guide/login.html','_blank');\n                    });\n                    $('#toggleHelp').click(function(event) {\n                        event.preventDefault();\n                        if (helpHidden==1) {\n                            showHelp();\n                        }\n                        else {\n                            hideHelp();\n                        }\n                    });\n        \n        });\n    \r\n</script>\r\n\n    <script src=\"/js/jummp.js\" type=\"text/javascript\"></script>\r\n\n    <script src=\"/js/notification.js\" type=\"text/javascript\"></script>\r\n\n\n    <link rel=\"stylesheet\" href=\"/css/notification.css\" />\n    <link rel=\"stylesheet\" href=\"/css/biomodels/layout.css\" />\n    <link rel=\"stylesheet\" href=\"/css/biomodels/biomodels.css\" />\n    <link rel=\"stylesheet\" href=\"/css/jqueryui/smoothness/jquery-ui-1.10.3.custom.min.css\" />\n    \n        <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">\n        <meta name=\"layout\" content=\"biomodels/main\"/>\n        \n        <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\"/>\n<meta name=\"layout\" content=\"biomodels/main\"/>\n<!-- Latest compiled and minified CSS -->\n<link rel=\"stylesheet\"\n      href=\"https://cdnjs.cloudflare.com/ajax/libs/toastr.js/2.1.4/toastr.min.css\"/>\n<link rel=\"stylesheet\"\n      href=\"https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css\">\n<style>\n    .field-icon {\n        float: right;\n        margin-left: -25px;\n        margin-top: -42px;\n        margin-right: 10px;\n        position: relative;\n        z-index: 2;\n    }\n</style>\n<script async src=\"https://cdnjs.cloudflare.com/ajax/libs/toastr.js/latest/js/toastr.min.js\"></script>\n    \n</head>\n<!-- open body tag -->\n\n<body class=\"level2 full-width\">\n\n<div id=\"mainframe\">\n    \n\n\n\n\n\n<div id=\"skip-to\">\n    <a href=\"#content\">Skip to main content</a>\n</div>\n<header id=\"masthead-black-bar\" class=\"clearfix masthead-black-bar\">\n    <!-- EBML-EBI menu items will be rendered by the script in script.js -->\n</header>\n\n<div data-sticky-container class=\"sticky-container\">\n    <!-- Suggested layout containers -->\n    <header id=\"masthead\" class=\"masthead\" data-sticky data-sticky-on=\"large\" data-top-anchor=\"content:top\"\n            data-btm-anchor=\"content:bottom\">\n\n        <!-- local-title, local search -->\n        <div class=\"masthead-inner row expanded\">\n            <div id=\"local-title\"\n                 class=\"hide-for-small-only medium-12 large-4 columns padding-top-none padding-bottom-none padding-left-none padding-right-none\">\n                <h1>\n                    <a href=\"https://www.biomodels.org/\" title=\"Back to BioModels homepage\"\n                    style=\"text-decoration: none; border-bottom-style: none\">\n                        <img src=\"https://www.biomodels.org/images/biomodels/logo_small.png\"\n                             title=\"BioModels Homepage\"/>\n                        <span class=\"hide-for-small-only\">BioModels</span></a>\n                </h1>\n            </div>\n            <!-- local-search -->\n            <div id=\"localsearch\" class=\"small-12 medium-12 large-8 columns float-right\">\n                \n\n\n\n\n\n\n<style type=\"text/css\">\n    #clearsearch {\n        display: block;\n        outline: none;\n        text-align: center;\n        padding-left: 10px;\n        padding-right: 8px;\n    }\n    .search_box_style {\n        background-color: white;\n        color: #0a0a0a;\n        cursor: pointer;\n        border: none;\n    }\n    .clearable {\n        position: relative;\n        text-align: left;\n    }\n\n    #domain_switcher {\n        float: right;\n    }\n    .example-label {\n        font-size: 0.8rem;\n    }\n</style>\n<form id=\"local-search\" name=\"local-search\"\n      action=\"/search\" method=\"post\">\n    <fieldset><div class=\"row\">\n        <div class=\"input-group margin-bottom-none margin-top-large padding-bottom-medium\">\n            <div class=\"input-group-field columns large-3 medium-3 small-12\" style=\"vertical-align: text-top\">\n                <select class=\"margin-bottom-none align-self-top\" id=\"domain_switcher\" name=\"domain_switcher\" title=\"Please choose a domain\">\n                    <option value=\"biomodels_all\">All Models</option>\n                    <option value=\"biomodels\">Individual Models</option>\n                    <option value=\"biomodels_autogen\">Autogenerated Models</option>\n                </select>\n                <br/><br/>\n                <a class=\"help-text label-floating-left secondary label\"\n                   title=\"Learn more\"\n                   data-open=\"domainSwitcherExplanationBox\">What is this box used for?</a>\n                <input type=\"text\" id=\"chosenDomain\" name=\"chosenDomain\" style=\"display: none\" value=\"biomodels\" aria-label=\"Choose a domain\"/>\n            </div>\n\n            <div class=\"input-group-field columns large-8 medium-8 small-12\">\n                <input type=\"text\" name=\"search_block_form\" id=\"local-search-box\"\n                   placeholder=\"Search...\" class=\"input-group-field search_box_style clearable\"\n                   title=\"Search\"\n                   tabindex=\"1\" style=\"width: 100%;\">\n                <p id=\"example\" class=\"example-label\">\n                    Examples:\n                    <a href=\"/search?query=*%3A*\" class=\"secondary label\" title=\"Search all\">*:*</a>\n                    <a href=\"/search?query=MAPK+cascade\" class=\"secondary label\" title=\"Search by GO term\">MAPK cascade</a>\n                    <a href=\"/search?query=homo+sapiens\" class=\"secondary label\" title=\"Search by Taxonomy term\">homo sapiens</a>\n                    <a href=\"/search?query=lung+cancer\" class=\"secondary label\" title=\"Search by Disease term\">lung cancer</a>\n                    <a title=\"Search tips/tricks\" data-open=\"searchTipsBox\"\n                       class=\"secondary label label-floating-right\">Search tips</a>\n                </p></div>\n            <div class=\"input-group-button columns large-1 medium-2 small-12\" style=\"float: left\">\n                <input id=\"btn-search-submit\" class=\"button icon icon-functional\" tabindex=\"2\"\n                       type=\"submit\" name=\"searchSubmit\" value=\"1\" />\n            </div>\n        </div>\n    </div></fieldset>\n</form>\n<script type=\"text/javascript\">\n    $(document).ready(function () {\n        let domain = \"\";\n        // biomodels is the default domain\n        let chosenDomain = domain.length > 0 ? domain : \"biomodels\";\n        $('#chosenDomain').val(chosenDomain);\n        $('#domain_switcher').val(chosenDomain);\n\n        const urlParams = new URLSearchParams(window.location.search);\n        const query = urlParams.get('query');\n\n        if (query) {\n            $(\"#local-search-box\").val(query);\n        }\n\n    });\n    $(document).on('change', '#domain_switcher', {}, function(e) {\n        e.preventDefault();\n        let domain = $(this).val();\n        $('#chosenDomain').val(domain);\n    });\n\n    /* Use event capturing (runs before other handlers) */\n    document.getElementById('local-search').addEventListener('submit', function(e) {\n        e.preventDefault();\n        e.stopImmediatePropagation();\n\n        const query = document.getElementById('local-search-box').value;\n        const domain = document.getElementById('chosenDomain').value;\n        const urlParams = new URLSearchParams(window.location.search);\n        urlParams.set('query', query);\n        urlParams.set('domain', domain);\n        const searchPattern = /^\\/search(?:\\/|$)/i;\n        let newURL;\n        if (searchPattern.test(window.location.pathname)) {\n            // Matches /search or /search/ but NOT /search-results\n            newURL = window.location.pathname + '?' + urlParams.toString();\n        } else {\n            newURL = \"https://www.biomodels.org/search?\" + urlParams.toString();\n        }\n        window.location.href = newURL;\n\n        return false;\n    }, true); // true = use capture phase\n</script>\n\n            </div>\n            <!-- local navigation bar -->\n            \n\n\n<div id=\"biomodels-toggle-bar\" class=\"hide-for-medium\">\n    <button class=\"menu-icon\" type=\"button\" id=\"biomodels-hamburger\"></button>\n    <div class=\"title-bar-title\">Menu</div>\n</div>\n<nav>\n<div id=\"biomodels-menu\">\n<div class=\"top-bar-left\">\n<ul id=\"local-nav\" class=\"main-menu dropdown menu\"\n    data-description=\"navigational\" data-dropdown-menu role=\"menubar\">\n    <li class=\"main-menu-item\"\n        role=\"menuitem\">\n        <a href=\"https://www.biomodels.org/\" title=\"Back to BioModels homepage\">\n            <i class=\"icon icon-generic\" data-icon=\"H\"></i> Home</a>\n    </li>\n    \n    <li class=\"main-menu-item\"\n        role=\"menuitem\">\n        <a><i class=\"icon icon-common\" data-icon=\"b\"></i> Browse</a>\n        <ul class=\"menu\">\n            <li><a href=\"/search?query=*%3A*\">All\n            models</a></li>\n            <li><a\n                href=\"/parameterSearch/index\">BioModels Parameters Search</a>\n            </li>\n            <li><a href=\"/covid-19\">COVID-19</a></li>\n            \n            <li><a href=\"/agedbrain\">Neurodegeneration models</a></li>\n            <li><a href=\"/path2models\">Path2Models models</a></li>\n            <li>\n                <a href=\"/pdgsmm/index\">\n                    PDGSM models\n                </a>\n            </li>\n            <li><a href=\"/reproducibility\">Reproducibility</a></li>\n        </ul>\n    </li>\n    <li class=\"main-menu-item\"\n        role=\"menuitem\">\n        <a href=\"/model/submission-guidelines-and-agreement\">\n            <i class=\"icon icon-common icon-submit\"></i>&nbsp;Submit</a>\n    </li>\n    <li class=\"main-menu-item\"role=\"menuitem\">\n        <a><i class=\"icon icon-common icon-cogs\"></i>&nbsp;Curation</a>\n        <ul class=\"menu\">\n            \n            <li><a href=\"/curation/fbc\">FBC</a></li>\n        </ul>\n    </li>\n    <li class=\"main-menu-item\"role=\"menuitem\">\n        <a><i class=\"icon icon-common icon-support\"></i> Help</a>\n        <ul class=\"menu\">\n            <li><a href=\"/faq\">FAQs</a></li>\n            <li class=\"divider\"></li>\n            <li><a href=\"https://www.biomodels.org/user-guide/manual.html\" target=\"_blank\">User Manual</a></li>\n            <li class=\"divider\"></li>\n            <li><a href=\"/curation-docs\">Curator's Zone</a></li>\n            <li class=\"divider\"></li>\n            <li><a href=\"/dev\">Developer's Zone</a></li>\n            <li class=\"divider\"></li>\n            <li><a href=\"/courses\">Courses</a></li>\n            <li><a href=\"//www.ebi.ac.uk/biomodels/tools/converters/\" target=\"_blank\">Online converters</a></li>\n        </ul>\n    </li>\n    <li class=\"main-menu-item\"role=\"menuitem\">\n        <a><i class=\"icon icon-common icon-info\"></i> About us</a>\n        <ul class=\"menu\">\n            <li><a href=\"/privacy\">Privacy Policy</a></li>\n            \n            <li><a href=\"/termsofuse\">Terms of Use</a></li>\n            <li class=\"divider\"></li>\n            <li><a href=\"/citation\">Citation</a></li>\n            <li><a href=\"/news\">News</a></li>\n            <li><a href=\"/acknowledgements\">Acknowledgements</a></li>\n            <li><a href=\"/jobs\">Jobs</a></li>\n            <li><a href=\"/jummp/curators\">Curators</a></li>\n            <li class=\"divider\"></li>\n            <li><a>Model of the Year</a>\n                <ul class=\"menu\">\n                    <li><a href='/competition/model-of-the-year-2025'>MOY2025</a></li>\n                    <li><a href='/competition/model-of-the-year-2024'>MOY2024</a></li>\n                    <li><a href='/competition/model-of-the-year-2023'>MOY2023</a></li>\n                </ul>\n            </li>\n        </ul>\n    </li>\n    <li class=\"main-menu-item\"role=\"menuitem\">\n        <a href=\"/contact\">\n            <i class=\"icon icon-common icon-contact\"></i> Contact us\n        </a>\n    </li>\n    <li style=\"border-right: none\" id=\"menuItemFeedback\" data-open=\"rate_review_form\"\n        role=\"menuitem\" class=\"main-menu-item\">\n        <!-- rate_review_form is the identifier of the modal feedback form defined in the footer.\n             This form is rendered using the feedback template of the web plugin -->\n        <a><i class=\"icon icon-common icon-comment\"></i> Feedback</a>\n    </li>\n    <!-- If you need to include functional (as opposed to purely navigational) links in your local menu,\n       add them here, and give them a class of \"functional\". Remember: you'll need a class of \"last\" for\n       whichever one will show up last... For example: -->\n</ul></div>\n<div class=\"top-bar-right\">\n<ul class=\"main-menu dropdown menu\"\n        data-description=\"navigational\" data-dropdown-menu role=\"menubar\">\n    \n    \n        <li class=\"main-menu-item functional first float-right \"\n            role=\"menuitem\">\n            <a href='/registration' class=\"icon icon-functional\"\n               data-icon=\"7\">Register</a>\n        </li>\n        <li  class=\"active main-menu-item functional first float-right \" \n            role=\"menuitem\">\n            <a href=\"https://www.biomodels.org/login/auth\">\n                <span class=\"icon icon-common icon-sign-in-alt\">&nbsp;</span>Login\n            </a>\n        </li>\n    \n</ul>\n</div></div>\n</nav>\n\n        </div><!-- /local-title -->\n    </header>\n</div>\n\n    \n\n\n\n\n\n\n\n\n\n\n\n\n\n<div id=\"content\" role=\"main\" class=\"row\">\n    <div data-sticky-container class=\"sticky-container\">\n        \n            <!-- Facets search is unavailable -->\n            \n                <div id=\"main-content\" class=\"small-12 medium-12 large-12 columns\">\n                    <div class=\"row\" style=\"padding: 5px 0px 0px 0px\">\n    <div class=\"columns small-12 medium-12 large-12\">\n        <div class='flashNotificationDiv'>\n            \n                \n                    <script type=\"text/javascript\">\r\n\n                        hideNow()\n                    \r\n</script>\r\n\n                \n            \n\n        </div>\n    </div>\n</div>\n\n                    \n                    \n        <script type=\"text/javascript\">\r\n\n    // define the variables tied to the current user for later usages in common.js\n    // Some of these variables are populated by the server-side ones\n    var currentUsername = \"\";\n    var currentEmail = \"\";\n    var currentRealName = \"\";\n    var currentOrcid = \"\";\n    var actionName = \"auth\";\n\r\n</script>\r\n\n\n        <div id=\"login\" class=\"row\">\n            <div class=\"small-12 medium-6 medium-centered large-4 large-centered columns\">\n                <form action=\"/j_spring_security_check\" method=\"post\" id=\"loginForm\" class=\"cssform\" autocomplete=\"on\">\n                    <div class=\"row column log-in-form\">\n                        <h3 class=\"text-center\">Log in to your account</h3>\n                        <label>Username\n                            <input type='text' name='j_username' id='username' placeholder=\"Username\">\n                        </label>\n                        <label>Password\n                            <input type='password' name='j_password' id='password' placeholder=\"Password\" autocomplete=\"on\"/>\n                            <span id=\"toggle-password\"\n                                  class=\"fa fa-fw fa-eye field-icon toggle-password\"></span>\n                        </label>\n                        <label for='j_previousURL'>\n                            <input type='text' name='j_previousURL' id='j_previousURL'  value=\"\"\n                                   style=\"display: none\"/></label>\n                        <label for=\"j_deviceInfo\">\n                            <input type='text' name='j_deviceInfo' id='j_deviceInfo' value=\"\"\n                                   style=\"display: none\"/>\n                        </label>\n                        <p><button type=\"button\" class=\"button expanded\" id=\"btnLogIn\">Log In</button></p>\n                        <p class=\"text-center\">\n                            <a href=\"https://www.biomodels.org/forgotpassword\">Forgot your password?</a></p>\n                        \n                        <p class=\"text-center\">\n                            <a href=\"https://www.biomodels.org/registration\">Register</a></p>\n                        \n                    </div>\n                </form>\n\n            </div>\n        </div>\n\n        <!--\n common-script.gsp is as the placeholder to define scripts where they need to use\n Grails tag-libs or server side variables.\n -->\n\n\n<script type=\"text/javascript\">\r\n\nfunction verifyCompromisedPassword(password) {\n    const URL = \"/usermanagement/verifyCompromisedPassword\";\n    fetch(URL, {\n        method: 'POST',\n        headers: {\n            'Accept': 'application/json; charset=utf-8',\n            'Content-Type': 'application/json; charset=utf-8'\n        },\n        body: JSON.stringify({'password': password})\n    }).then(response => {\n        if (!response.ok) {\n            throw new Error('Network response failed!!!');\n        }\n        return response.json();\n    }).then(data => {\n        if (data[\"result\"]) {\n            let msg = \"<h4 style='color: red'><b>Compromised Password Alert!</b></h4>\";\n            if (['editPassword', 'reset'].includes(\"auth\")) {\n                msg += \"This password is known to cybercriminals far and wide! \" +\n                \"It has been publicly exposed in one or more data breaches.\";\n            } else if (\"auth\" === 'auth') {\n                msg += \"This password has appeared in one or more data breaches which puts your account at \" +\n                \"high risk of compromise. You should change your password immediately.\"\n            }\n            showNotification(msg);\n        } else {\n            clearNotification();\n            hideNow();\n        }\n    }).catch(error => {\n        console.error('Error: ', error);\n    });\n}\n\nfunction checkCompromisedPasswordOnServerSide(username, password) {\n    const URL = \"/usermanagement/verifyCompromisedPasswordAndNotifyUser\";\n    fetch(URL, {\n        method: 'POST',\n        headers: {\n            'Accept': 'application/json; charset=utf-8',\n            'Content-Type': 'application/json; charset=utf-8'\n        },\n        body: JSON.stringify({'username': username, 'password': password})\n    }).then(response => {\n        if (!response.ok) {\n            throw new Error('Network response failed!!!');\n        }\n        return response.json();\n    }).then(data => {\n        if (data[\"compromised\"]) {\n            console.log(\"Sent the verification compromised password to the server side.\");\n        } else {\n            console.log(\"Cannot verify compromised password to the server side.\");\n        }\n    }).catch(error => {\n        console.error('Error: ', error);\n    });\n}\n\nfunction checkPasswordStrength(password) {\n    // source: https://martech.zone/javascript-password-strength/\n    // Initialize variables\n    let strength = 0;\n    let strengthLevel;\n    let tips = [];\n\n    // Check password length\n    let tip = \"Make the password longer.\";\n    if (password.length < 10) {\n        tips.push(tip);\n    } else {\n        strength += 1;\n        // tips.splice( $.inArray(tip, tips), 1);\n        tips = jQuery.grep(tips, function(value) { return value !== tip; });\n    }\n\n    // Check for mixed case\n    tip = \"Use both lowercase and uppercase letters.\";\n    if (password.match(/[a-z]/) && password.match(/[A-Z]/)) {\n        strength += 1;\n        // tips.splice( $.inArray(tip, tips), 1);\n        tips = jQuery.grep(tips, function(value) { return value !== tip; });\n    } else {\n        tips.push(tip);\n    }\n\n    // Check for numbers\n    tip = \"Include at least one number.\";\n    if (password.match(/\\d/)) {\n        strength += 1;\n        // tips.splice( $.inArray(tip, tips), 1);\n        tips = jQuery.grep(tips, function(value) { return value !== tip; });\n    } else {\n        tips.push(tip);\n    }\n\n    // Check for special characters\n    tip = \"Include at least one special character.\";\n    if (password.match(/[^a-zA-Z\\d]/)) {\n        strength += 1;\n        // tips.splice( $.inArray(tip, tips), 1);\n        tips = jQuery.grep(tips, function(value) { return value !== tip; });\n    } else {\n        tips.push(tip);\n    }\n\n    // Return results\n    if (strength < 2) {\n         strengthLevel = \"Easy to guess.\";\n    } else if (strength === 2) {\n        strengthLevel = \"Medium difficulty.\" ;\n    } else if (strength === 3) {\n        strengthLevel =  \"Difficult.\";\n    } else {\n        strengthLevel = \"Extremely difficult.\";\n    }\n    return { strength: strength, strengthLevel: strengthLevel, tips: tips };\n}\n\nfunction validateNewPassword(newPassword, newPasswordHelp, showWarning = false) {\n    const newPasswordVal = newPassword.val();\n    verifyCompromisedPassword(newPasswordVal);\n    let s = checkPasswordStrength(newPasswordVal);\n    let colourCode;\n    let retVal = false;\n    switch (s.strengthLevel) {\n        case \"Easy to guess.\":\n            colourCode = \"red\";\n            if (showWarning) {\n                toastr.error(s.strengthLevel);\n            }\n            break;\n        case \"Medium difficulty.\":\n            colourCode = \"orange\";\n            if (showWarning) {\n                toastr.warning(s.strengthLevel);\n            }\n            break;\n        case \"Difficult.\":\n            retVal = true;\n            colourCode = \"cornflowerblue\";\n            if (showWarning) {\n                toastr.info(s.strengthLevel);\n            }\n            break;\n        case \"Extremely difficult.\":\n            retVal = true;\n            colourCode = \"green\";\n            if (showWarning) {\n                toastr.success(s.strengthLevel);\n            }\n            break;\n    }\n    let msg = '<span style=\"color: ' + colourCode + '\">' + s.strengthLevel + '</span>';\n    if (s.tips.length !== 0) {\n        msg += \"<br/>\" + s.tips.join(\"<br/>\");\n    }\n    newPasswordHelp.show();\n    newPasswordHelp.html(msg);\n\n    return retVal;\n}\n\nfunction validateNewPasswordRpt(newPassword, newPasswordRpt, newPasswordRptHelp) {\n    const newPasswordRptVal = newPasswordRpt.val();\n    const newPasswordVal = newPassword.val();\n    let retVal;\n    if (newPasswordRptVal.length === 0) {\n        retVal = false;\n        newPasswordRptHelp.show();\n        newPasswordRptHelp.html(\"Please retype your new password!\");\n    } else if (newPasswordVal !== newPasswordRptVal) {\n        retVal = false;\n        newPasswordRptHelp.show();\n        newPasswordRptHelp.html(\"New password does not match!\");\n    } else {\n        retVal = true;\n        newPasswordRptHelp.hide();\n    }\n    return retVal;\n}\n\r\n</script>\r\n\n\n        <script type='text/javascript'>\n            const referrer = document.referrer;\n            const loginInput = $(\"#loginForm input\");\n            const loginForm = $(\"#loginForm\");\n            const loginUsername = $(\"#username\");\n            const loginPassword = $(\"#password\");\n            loginInput.focus(function() {\n                if ($(this).data(\"reset\") === undefined) {\n                $(this).val(\"\");\n                $(this).data(\"reset\", true);\n                }\n            });\n            loginInput.on(\"keyup\", function(event) {\n                // magic value 13 is entered\n                if (event.which === 13) {\n                    loginForm.submit();\n                    checkCompromisedPasswordOnServerSide(loginUsername.val(), loginPassword.val());\n                }\n            });\n            const loginSubmit = $(\"#btnLogIn\");\n            loginSubmit.on(\"click\", function() {\n                const deviceInfo = $(\"#j_deviceInfo\");\n                $(deviceInfo).val(localStorage.getItem(loginUsername.val()));\n                loginForm.submit();\n                checkCompromisedPasswordOnServerSide(loginUsername.val(), loginPassword.val());\n            });\n            $(document).ready(function() {\n                if (referrer.indexOf(\"biomodels/MODEL\") > 0) {\n                    const previousURL = $(\"#j_previousURL\");\n                    previousURL.val(referrer);\n                }\n            });\n            loginPassword.on(\"focus\", function() {\n                clearNotification();\n                hideNow();\n            });\n            loginPassword.on(\"blur\", function() {\n                // the function below was defined in the common-script.gsp template\n                verifyCompromisedPassword($(this).val());\n            });\n        </script>\n    <script type=\"text/javascript\">\r\n\n    $(\".toggle-password\").on(\"click\", function() {\n        $(this).toggleClass(\"fa-eye fa-eye-slash\");\n        let input = $(\"#password\");\n        if ([\"editPassword\", \"reset\"].includes(\"auth\")) {\n            input = $(\"#newPassword\");\n        }\n        if (input.attr(\"type\") === \"password\") {\n            input.attr(\"type\", \"text\");\n        } else {\n            input.attr(\"type\", \"password\");\n        }\n    });\n\r\n</script>\r\n\n\n    \n                </div>\n            \n        \n    </div>\n</div>\n\n    \n\n\n\n<footer id=\"local-footer\" class=\"local-footer\">\n    <!-- Optional local footer (insert citation / project-specific copyright / etc here -->\n    <div  id=\"footer\" class=\"row\">\n        <div>\n            <div class=\"small-12 medium-6 large-6 columns\">\n                <span style=\"font-size: small\">Build: <a href=\"//bitbucket.org/biomodels/jummp-biomodels/commits/all?search=8f9b24217\">8f9b24217</a> | Sat, 9 May 2026 12:04:37 +0100</span>\n            </div>\n            <div class=\"small-12 medium-6 large-6 columns\" style=\"text-align: right\">\n                <span style=\"font-size: small\">\n                    \n            </div>\n        </div>\n        <div class=\"clear\"></div>\n    </div>\n     <div id=\"elixir-banner\" data-color=\"grey\" data-name=\"This service\"\n          data-description=\"BioModels is an ELIXIR Deposition Database\"\n          data-more-information-link=\"//www.elixir-europe.org/platforms/data/elixir-deposition-databases\"\n          data-use-basic-styles=\"true\"></div>\n     <script defer=\"defer\"\n             src=\"https://ebi.emblstatic.net/web_guidelines/EBI-Framework/v1.3/js/elixirBanner.js\"></script>\n\n     <style>\n         .elixir-ribbon {\n             padding: 1rem 0;\n             /*background-color: rgb(79,138,156);*/\n             background-color: rgb(0, 124, 130);\n             /*background-color:#008080;*/\n             vertical-align: middle;\n         }\n\n         .elixir-ribbon,\n         .elixir-ribbon h5,\n         .elixir-ribbon a,\n         .elixir-ribbon a:active,\n         .elixir-ribbon a:visited,\n         .elixir-ribbon a:hover {\n             color: #fff;\n             text-decoration: none;\n         }\n         .elixir-ribbon a:hover {\n             opacity: .8;\n         }\n         .elixir-ribbon .readmore {\n             border-bottom: 1px dotted #fff;\n         }\n         .elixir-ribbon h5 {\n             margin: 0;\n         }\n         .elixir-ribbon .elixir-logo-kite {\n             background: 80% 58% url(\"https://ebi.emblstatic.net/web_guidelines/EBI-Framework/v1.2/images/logos/assorted/elixir_kitemark-60px.png\") no-repeat;\n             position: relative;\n             /*top: -5px;*/\n             /*margin: 0 1rem -.5rem 0;*/\n             margin-left: 1.25rem;\n             height: 60px;\n             width: 60px;\n             display: inline-block;\n             float: left;\n             background-size: 60px;\n             vertical-align: middle;\n         }\n         .elixir-ribbon .row {\n             margin: 0 !important;\n         }\n     </style>\n    <!-- End optional local footer -->\n\n    <div id=\"global-footer\" class=\"global-footer\">\n        <nav id=\"global-nav-expanded\" class=\"row global-nav-expanded\">\n            <!-- Footer will be automatically inserted by footer.js -->\n        </nav>\n        <section id=\"ebi-footer-meta\" class=\"row ebi-footer-meta\">\n            <!-- Footer meta will be automatically inserted by footer.js -->\n        </section>\n    </div>\n     <div class=\"reveal\" id=\"rate_review_form\" data-reveal>\n    <h3 id=\"messageTitle\"\n        style=\"border-bottom: 1px solid grey\">Please give your feedback</h3>\n    <button class=\"close-button\" data-close aria-label=\"Close modal\" type=\"button\">\n        <span aria-hidden=\"true\">&times;</span>\n    </button>\n    <div class=\"contact-panel\" id=\"feedback_panel\" data-toggler=\".is-active\">\n        <table class=\"responsive-table\">\n            \n        <div class=\"rating\">\n            <span id=\"star5\" class=\"star-icon\">&#9734;</span>\n            <span id=\"star4\" class=\"star-icon\">&#9734;</span>\n            <span id=\"star3\" class=\"star-icon\">&#9734;</span>\n            <span id=\"star2\" class=\"star-icon\">&#9734;</span>\n            <span id=\"star1\" class=\"star-icon\">&#9734;</span></div>\n        <input id=\"rateStar\" name=\"rateStar\" hidden required=\"true\" />\n        \n        </table>\n        <form action=\"\">\n            <div class=\"row\">\n                <label>Email (Optional)\n                    <input type=\"email\" id=\"emailAddress\" placeholder=\"Email address\">\n                </label>\n                <label>Additional comments (Optional)\n                    <textarea id=\"additionalComment\"\n                              placeholder=\"Share details of your experience with this site.\"\n                              rows=\"3\"></textarea>\n                </label>\n            </div>\n            <div class=\"contact-panel-actions\">\n                <input id=\"submitButtonRate\" type=\"submit\"\n                       class=\"button submit-button\" value=\"Submit\">\n            </div>\n        </form>\n    </div>\n</div>\n\n     \n<div class=\"reveal\" id=\"searchTipsBox\" data-reveal>\n    <h3 id=\"messageTitle\"\n        style=\"border-bottom: 1px solid grey\">Search Tips/Tricks</h3>\n    <button class=\"close-button\" data-close aria-label=\"Close modal\" type=\"button\">\n        <span aria-hidden=\"true\">&times;</span>\n    </button>\n\n    <div class=\"search-tips-panel\" id=\"searchTips_panel\" data-toggler=\".is-active\">\n        <ul>\n            <li>Search is based on exact word matches. Make sure your <strong>spelling</strong> is correct.\n            Example: the misspelled terms like <a href=\"/search?query=CelCycle\" class=\"secondary label\" title=\"Search by CelCycle term\" target=\"_blank\">CelCycle</a> (missing \"l\") will not find any results.</li>\n            <li>Search for the phrase \"Glucose\" in the name field. Example: <a href=\"/search?query=name%3AGlucose\" class=\"secondary label\" title=\"Search by Glucose term in the &#39;name&#39; field\" target=\"_blank\">name:\"Glucose\"</a></li>\n            <li>Matches all models having model elements that were annotated with Gene Ontology term cell growth. Example:\n                <a href=\"/search?query=GO%3A0016049\" class=\"secondary label\" title=\"Search by Gene Ontology term cell growth\" target=\"_blank\">GO:0016049</a></li>\n        </ul>\n        <p><a href=\"https://www.biomodels.org/user-guide/model_search.html\"\n              target=\"_blank\">Learn more about searching models</a></p>\n    </div>\n</div>\n\n     <script>\n    $(document).ready(() => {\n        const elixirRibbon = $(\"div.elixir-ribbon > div.row > div.column\");\n        if (elixirRibbon.length) {\n            elixirRibbon.removeClass(\"column\");\n            elixirRibbon.addClass(\"columns small-12 medium-6 large-6\");\n            $('<div class=\"columns small-12 medium-6 large-6\">' +\n                '<h5><a href=\"https://www.ebi.ac.uk/licencing\" target=\"_blank\">EMBL-EBI Licencing</a><br/>' +\n                '<a href=\"https://www.ebi.ac.uk/long-term-data-preservation\" target=\"_blank\">' +\n                'EMBL-EBI Data Preservation</a></h5></div>').insertAfter(elixirRibbon);\n        }\n    });\n</script>\n\n     <div class=\"reveal\" id=\"domainSwitcherExplanationBox\" data-reveal>\n    <h3 id=\"messageTitle\"\n        style=\"border-bottom: 1px solid grey\">What are BioModels domains?</h3>\n    <button class=\"close-button\" data-close aria-label=\"Close modal\" type=\"button\">\n        <span aria-hidden=\"true\">&times;</span>\n    </button>\n\n    <div class=\"explanation-panel\" id=\"domainSwitcherExplanationPanel\" data-toggler=\".is-active\">\n        <p>This drop down box allows you to filter which models appear in the search results:\n        <ul>\n            <li><strong>Autogenerated Models</strong>: large-scale or automatically-generated submissions such as <a href=\"/path2models\" target=\"_blank\">Path2Models</a> or\n            <a href=\"/pdgsmm/index\" target=\"_blank\">Patient-derived genome scale metabolic models (PDGSMM)</a> </li>\n            <li><strong>Individual Models</strong>: models described in the literature that have been submitted individually to BioModels</li>\n            <li><strong>All Models</strong>: the whole BioModels content</li>\n        </ul>\n        </p>\n        <p>The default search domain is <strong>Individual Models</strong>.</p>\n\n        <p><a href=\"https://www.biomodels.org/user-guide/model_search.html\"\n              target=\"_blank\">Learn more about searching models</a></p>\n    </div>\n</div>\n\n</footer>\n\n\n    \n        <div id=\"helpbutton\">\n            <a id=\"toggleHelp\" title=\"Access help for this page\" href=\"#\">More about this page</a>\n        </div>\n        <div id=\"helpPanel\">\n            <div id=\"toolbar\" class=\"ui-widget-header ui-corner-all\">\n                <button id=\"expand\">Increase help size</button>\n                <button id=\"contract\">Decrease help size</button>\n                <button id=\"snap\">Reset help</button>\n                <button id=\"outlink\">Open in a new tab</button>\n                <button id=\"close\">Close</button>\n            </div>\n            <iframe id='helpFrame' src='https://www.biomodels.org/user-guide/login.html#contextSpecific/800'></iframe>\n        </div>\n    \n</div>\n\n<!-- JavaScript at the bottom for fast page loading -->\n<script src=\"https://ebi.emblstatic.net/web_guidelines/EBI-Framework/v1.3/js/script.js\"></script>\n<!-- Grab Google CDN's jQuery, with a protocol relative URL; fall back to local if offline -->\n\n<!-- The Foundation theme JavaScript -->\n<script src=\"https://ebi.emblstatic.net/web_guidelines/EBI-Framework/v1.3/libraries/foundation-6/js/foundation.js\"></script>\n<script src=\"https://ebi.emblstatic.net/web_guidelines/EBI-Framework/v1.3/js/foundationExtendEBI.js\"></script>\n<script type=\"text/JavaScript\">$(document).foundation();</script>\n<script type=\"text/JavaScript\">$(document).foundationExtendEBI();</script>\n\n<!-- customised scripts -->\n<script src=\"/js/common.js\" type=\"text/javascript\"></script>\r\n\n<!-- end scripts-->\n\n\n\n</body>\n</html>\n"
  },
  "model_b": {
    "id": "BIOMD0000000064",
    "summary": "\n\n\n\n<!doctype html>\n\n\n\n\n\n\n\n\n\n\n\n\n<!-- paulirish.com/2008/conditional-stylesheets-vs-css-hacks-answer-neither/ -->\n<!--[if lt IE 7]> <html class=\"no-js ie6 oldie\" lang=\"en\"> <![endif]-->\n<!--[if IE 7]>    <html class=\"no-js ie7 oldie\" lang=\"en\"> <![endif]-->\n<!--[if IE 8]>    <html class=\"no-js ie8 oldie\" lang=\"en\"> <![endif]-->\n<!-- Consider adding an manifest.appcache: h5bp.com/d/Offline -->\n<!--[if gt IE 8]> <html class=\"no-js\" lang=\"en\"> <![endif]-->\n\n<html lang=\"en\">\n<head>\n    \n\n\n\n\n\n\n<meta charset=\"utf-8\">\n<!-- Use the .htaccess and remove these lines to avoid edge case issues.\n   More info: h5bp.com/b/378 -->\n<!-- Not yet implemented -->\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge,chrome=1\">\n<!-- Describe what this page is about -->\n<meta name=\"description\" content=\"BioModels is a repository of freely-available mathematical models of biological and biomedical systems. It hosts a vast selection of physiologically and pharmaceutically\nrelevant mechanistic models in standard formats.\"/>\n<meta name=\"keywords\" content=\"BioModels Database, biomodels, systems biology, bioinformatics, computational\n    modelling, systems modelling, model repository, model database, SBML, PharmML, COMBINE Archive, OMEX,\n    public domain\">\n<meta name=\"author\" content=\"BioModels\"/>\n<meta name=\"google\" content=\"notranslate\"/>\n<meta name=\"google-site-verification\" content=\"Lw3ylc1DHWxe6umaxo3tA-Dm-QWs5YsG1b1EXIhNmPw\"/>\n<meta name=\"ebi:masthead-color\" content=\"#254146\">\n<meta name=\"ebi:masthead-image\" content=\"//ebi.emblstatic.net/web_guidelines/EBI-Framework/v1.3/images/backgrounds/embl-ebi-background.jpg\"/>\n\n<!-- Mobile viewport optimized: j.mp/bplateviewport -->\n<meta name=\"viewport\" content=\"width=device-width,initial-scale=1\">\n\n<!-- Place favicon.ico and apple-touch-icon.png in the root directory: mathiasbynens.be/notes/touch-icons -->\n\n<link rel=\"apple-touch-icon\" sizes=\"57x57\" href=\"https://www.biomodels.org/images/biomodels/apple-icon-57x57.png\">\n<link rel=\"apple-touch-icon\" sizes=\"60x60\" href=\"https://www.biomodels.org/images/biomodels/apple-icon-60x60.png\">\n<link rel=\"apple-touch-icon\" sizes=\"72x72\" href=\"https://www.biomodels.org/images/biomodels/apple-icon-72x72.png\">\n<link rel=\"apple-touch-icon\" sizes=\"76x76\" href=\"https://www.biomodels.org/images/biomodels/apple-icon-76x76.png\">\n<link rel=\"apple-touch-icon\" sizes=\"114x114\" href=\"https://www.biomodels.org/images/biomodels/apple-icon-114x114.png\">\n<link rel=\"apple-touch-icon\" sizes=\"120x120\" href=\"https://www.biomodels.org/images/biomodels/apple-icon-120x120.png\">\n<link rel=\"apple-touch-icon\" sizes=\"144x144\" href=\"https://www.biomodels.org/images/biomodels/apple-icon-144x144.png\">\n<link rel=\"apple-touch-icon\" sizes=\"152x152\" href=\"https://www.biomodels.org/images/biomodels/apple-icon-152x152.png\">\n<link rel=\"apple-touch-icon\" sizes=\"180x180\" href=\"https://www.biomodels.org/images/biomodels/apple-icon-180x180.png\">\n<link rel=\"icon\" type=\"image/png\" sizes=\"192x192\"  href=\"https://www.biomodels.org/images/biomodels/android-icon-192x192.png\">\n<link rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"https://www.biomodels.org/images/biomodels/favicon-32x32.png\">\n<link rel=\"icon\" type=\"image/png\" sizes=\"96x96\" href=\"https://www.biomodels.org/images/biomodels/favicon-96x96.png\">\n<link rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"https://www.biomodels.org/images/biomodels/favicon-16x16.png\">\n<link rel=\"manifest\" href=\"https://www.biomodels.org/images/biomodels/manifest.json\">\n<meta name=\"msapplication-TileColor\" content=\"#ffffff\">\n<meta name=\"msapplication-TileImage\" content=\"https://www.biomodels.org/images/biomodels/ms-icon-144x144.png\">\n<meta name=\"theme-color\" content=\"#ffffff\">\n\n<!-- If you link to any other sites frequently, consider optimising performance with a DNS prefetch -->\n<link rel=\"dns-prefetch\" href=\"https://ebi.emblstatic.net/\" />\n<!-- CSS: implied media=all -->\n<!-- CSS concatenated and minified via ant build script -->\n<link rel=\"stylesheet\" type=\"text/css\"\n      href=\"https://ebi.emblstatic.net/web_guidelines/EBI-Framework/v1.3/css/ebi-global.css\"\n      media=\"none\" onload=\"if(media!=='all') media='all'\">\n<link rel=\"stylesheet\" type=\"text/css\"\n      href=\"https://ebi.emblstatic.net/web_guidelines/EBI-Icon-fonts/v1.3/fonts.css\"\n      media=\"none\" onload=\"if(media!=='all') media='all'\">\n\n<!-- you can replace this with [projectname]-colours.css. See http://frontier.ebi.ac.uk/web/style/colour\nfor details of how to do this -->\n<style>\n    /* You have the option of setting a maximum width for your page, and making sure everything is centered */\n    body {\n        margin: 2px 5px auto;\n    }\n    li.divider {\n        border-top: 1px solid #999;\n    }\n\n    #local-masthead nav ul.menu li:hover {\n        background: rgb(0,124,130);\n    }\n</style>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"/css/common.css\">\n<!-- end CSS-->\n<script src=\"https://code.jquery.com/jquery-1.11.1.min.js\"\n        integrity=\"sha256-VAvG3sHdS5LqTT+5A/aeq/bZGa/Uj04xKxY8KM/w9EE=\" crossorigin=\"anonymous\"></script>\n\n<script src=\"https://code.jquery.com/ui/1.11.4/jquery-ui.min.js\"\n        integrity=\"sha256-xNjb53/rY+WmG+4L6tTl9m6PpqknWZvRt0rO1SRnJzw=\" crossorigin=\"anonymous\"></script>\n\n<title>Login | BioModels</title>\n\n    <script type=\"text/javascript\">\r\n\n        $.appName = \"biomodels\";\n        $.serverUrl = \"https://www.biomodels.org\";\n        var helpHidden=1;\n\n        \n            var helpWidth=-1;\n            var maxWidth=-1;\n            var maxHelpWidth=800;\n            var minHelpWidth=50;\n            var stepWidth=30;\n            var syncResize=0;\n            function adjustWidth(newWidth) {\n                if (syncResize==1) {\n                    var delta= helpWidth - newWidth;\n                    var mainWidth=$(\"#mainframe\" ).width();\n                    if (maxWidth==-1) {\n                        maxWidth=mainWidth;\n                    }\n                    if (maxWidth<(mainWidth+delta)) {\n                        mainWidth=maxWidth;\n                    }\n                    else {\n                        mainWidth+=delta;\n                    }\n                    $( \"#mainframe\" ).width(mainWidth);\n                    helpWidth=newWidth;\n                }\n            }\n\n            function hideHelp() {\n                $( \"#helpPanel\" ).removeClass(\"helpHeightWorkaround\")\n                adjustWidth(0);\n                $( \"#helpPanel\" ).hide();\n                helpHidden=1;\n                helpWidth=-1;\n                $('#toggleHelp').text(\"More about this page\");\n                $('#toggleHelp').attr(\"title\", \"Access help for this page\");\n            }\n\n            function showHelp() {\n                $( \"#helpPanel\" ).addClass(\"helpHeightWorkaround\")\n                helpWidth=-1;\n                $(\"html, body\").animate({ scrollTop: 0 }, \"medium\");\n                $( \"#helpPanel\" ).width(800);\n                    $( \"#helpPanel\" ).show();\n                    adjustWidth(800);\n                    $( \"#helpPanel\" ).position({\n                        my: \"right-1 bottom\",\n                        at: \"right-1 bottom\",\n                        of: \".main-menu\"\n                    });\n                    helpHidden=0;\n                    $('#toggleHelp').text(\"Hide help\");\n                    $('#toggleHelp').attr(\"title\", \"Hide help\");\n                }\n                var isDragged=false;\n        \n        $(function() {\n        \n        \n            $(\"#helpPanel\").resizable({\n                        handles: 'n,e,s,w',\n                        maxWidth: maxHelpWidth,\n                        animate: true,\n                        resize: function( event, ui ) {\n                            if (helpWidth==-1) {\n                                helpWidth=ui.originalSize.width;\n                            }\n                            adjustWidth(ui.size.width);\n                        }\n            });\n            $( \"#helpPanel\").draggable({ cursor: \"move\",\n                                          revert: false,\n                                          containment: \"body\",\n                                          start: function() {\n                                            isDragged=true;\n                                          },\n                                          stop: function( event, ui ) {\n                                            isDragged=false;\n                                          }\n                                        });\n            $( \"#helpPanel\" ).hide();\n\n            $(\"#toolbar\").mouseleave(function() {\n                if (isDragged) {\n                    $( \"#helpPanel\" ).draggable( \"disable\" );\n                    $( \"#helpPanel\" ).draggable( \"enable\" );\n                }\n            })\n\n\n            $( \"#expand\" ).button({\n                text: false,\n                icons: {\n                    primary: \"ui-icon-circle-plus\"\n                }\n            }).click(function() {\n                 helpWidth=$(\"#helpPanel\" ).width();\n                if (maxHelpWidth<(helpWidth+stepWidth)) {\n                    helpWidth=maxHelpWidth;\n                }\n                else {\n                    helpWidth+=stepWidth;\n                }\n                var windowRight = document.body.getBoundingClientRect ().right\n                console.log(windowRight);\n                $( \"#helpPanel\" ).width(helpWidth);\n                var el= document.getElementById (\"helpPanel\");\n                var helpRight = el.getBoundingClientRect ().right\n                if (helpRight > windowRight) {\n                    var offset = helpRight - windowRight + 10\n                    $('#helpPanel').animate({\n                        'marginLeft' : \"-=\" + offset + \"px\"\n                    });\n                }\n\n            });\n            $( \"#contract\" ).button({\n                text: false,\n                icons: {\n                    primary: \"ui-icon-circle-minus\"\n                }\n            }).click(function() {\n                 helpWidth=$(\"#helpPanel\" ).width();\n                if (minHelpWidth>helpWidth-stepWidth) {\n                    helpWidth=minHelpWidth\n                }\n                else {\n                    helpWidth-=stepWidth;\n                }\n                $( \"#helpPanel\" ).width(helpWidth);\n                var addedPercentage = (helpWidth - 400) / 400\n                var basic = 99+addedPercentage;\n                $( \"#helpFrame\" ).width(basic+\"%\");\n            });\n            $( \"#close\" ).button({\n                text: false,\n                icons: {\n                    primary: \"ui-icon-circle-close\"\n                }\n            }).click(function() {\n                hideHelp();\n            });\n\n            $( \"#snap\" ).button({\n                text: false,\n                icons: {\n                    primary: \"ui-icon-arrowrefresh-1-e\"\n                }\n            }).click(function() {\n                hideHelp();\n                showHelp();\n            });\n            $( \"#outlink\" ).button({\n                text: false,\n                icons: {\n                    primary: \"ui-icon-extlink\"\n                }\n            }).click(function() {\n                hideHelp();\n                window.open('https://www.biomodels.org/user-guide/login.html','_blank');\n                    });\n                    $('#toggleHelp').click(function(event) {\n                        event.preventDefault();\n                        if (helpHidden==1) {\n                            showHelp();\n                        }\n                        else {\n                            hideHelp();\n                        }\n                    });\n        \n        });\n    \r\n</script>\r\n\n    <script src=\"/js/jummp.js\" type=\"text/javascript\"></script>\r\n\n    <script src=\"/js/notification.js\" type=\"text/javascript\"></script>\r\n\n\n    <link rel=\"stylesheet\" href=\"/css/notification.css\" />\n    <link rel=\"stylesheet\" href=\"/css/biomodels/layout.css\" />\n    <link rel=\"stylesheet\" href=\"/css/biomodels/biomodels.css\" />\n    <link rel=\"stylesheet\" href=\"/css/jqueryui/smoothness/jquery-ui-1.10.3.custom.min.css\" />\n    \n        <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">\n        <meta name=\"layout\" content=\"biomodels/main\"/>\n        \n        <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\"/>\n<meta name=\"layout\" content=\"biomodels/main\"/>\n<!-- Latest compiled and minified CSS -->\n<link rel=\"stylesheet\"\n      href=\"https://cdnjs.cloudflare.com/ajax/libs/toastr.js/2.1.4/toastr.min.css\"/>\n<link rel=\"stylesheet\"\n      href=\"https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css\">\n<style>\n    .field-icon {\n        float: right;\n        margin-left: -25px;\n        margin-top: -42px;\n        margin-right: 10px;\n        position: relative;\n        z-index: 2;\n    }\n</style>\n<script async src=\"https://cdnjs.cloudflare.com/ajax/libs/toastr.js/latest/js/toastr.min.js\"></script>\n    \n</head>\n<!-- open body tag -->\n\n<body class=\"level2 full-width\">\n\n<div id=\"mainframe\">\n    \n\n\n\n\n\n<div id=\"skip-to\">\n    <a href=\"#content\">Skip to main content</a>\n</div>\n<header id=\"masthead-black-bar\" class=\"clearfix masthead-black-bar\">\n    <!-- EBML-EBI menu items will be rendered by the script in script.js -->\n</header>\n\n<div data-sticky-container class=\"sticky-container\">\n    <!-- Suggested layout containers -->\n    <header id=\"masthead\" class=\"masthead\" data-sticky data-sticky-on=\"large\" data-top-anchor=\"content:top\"\n            data-btm-anchor=\"content:bottom\">\n\n        <!-- local-title, local search -->\n        <div class=\"masthead-inner row expanded\">\n            <div id=\"local-title\"\n                 class=\"hide-for-small-only medium-12 large-4 columns padding-top-none padding-bottom-none padding-left-none padding-right-none\">\n                <h1>\n                    <a href=\"https://www.biomodels.org/\" title=\"Back to BioModels homepage\"\n                    style=\"text-decoration: none; border-bottom-style: none\">\n                        <img src=\"https://www.biomodels.org/images/biomodels/logo_small.png\"\n                             title=\"BioModels Homepage\"/>\n                        <span class=\"hide-for-small-only\">BioModels</span></a>\n                </h1>\n            </div>\n            <!-- local-search -->\n            <div id=\"localsearch\" class=\"small-12 medium-12 large-8 columns float-right\">\n                \n\n\n\n\n\n\n<style type=\"text/css\">\n    #clearsearch {\n        display: block;\n        outline: none;\n        text-align: center;\n        padding-left: 10px;\n        padding-right: 8px;\n    }\n    .search_box_style {\n        background-color: white;\n        color: #0a0a0a;\n        cursor: pointer;\n        border: none;\n    }\n    .clearable {\n        position: relative;\n        text-align: left;\n    }\n\n    #domain_switcher {\n        float: right;\n    }\n    .example-label {\n        font-size: 0.8rem;\n    }\n</style>\n<form id=\"local-search\" name=\"local-search\"\n      action=\"/search\" method=\"post\">\n    <fieldset><div class=\"row\">\n        <div class=\"input-group margin-bottom-none margin-top-large padding-bottom-medium\">\n            <div class=\"input-group-field columns large-3 medium-3 small-12\" style=\"vertical-align: text-top\">\n                <select class=\"margin-bottom-none align-self-top\" id=\"domain_switcher\" name=\"domain_switcher\" title=\"Please choose a domain\">\n                    <option value=\"biomodels_all\">All Models</option>\n                    <option value=\"biomodels\">Individual Models</option>\n                    <option value=\"biomodels_autogen\">Autogenerated Models</option>\n                </select>\n                <br/><br/>\n                <a class=\"help-text label-floating-left secondary label\"\n                   title=\"Learn more\"\n                   data-open=\"domainSwitcherExplanationBox\">What is this box used for?</a>\n                <input type=\"text\" id=\"chosenDomain\" name=\"chosenDomain\" style=\"display: none\" value=\"biomodels\" aria-label=\"Choose a domain\"/>\n            </div>\n\n            <div class=\"input-group-field columns large-8 medium-8 small-12\">\n                <input type=\"text\" name=\"search_block_form\" id=\"local-search-box\"\n                   placeholder=\"Search...\" class=\"input-group-field search_box_style clearable\"\n                   title=\"Search\"\n                   tabindex=\"1\" style=\"width: 100%;\">\n                <p id=\"example\" class=\"example-label\">\n                    Examples:\n                    <a href=\"/search?query=*%3A*\" class=\"secondary label\" title=\"Search all\">*:*</a>\n                    <a href=\"/search?query=MAPK+cascade\" class=\"secondary label\" title=\"Search by GO term\">MAPK cascade</a>\n                    <a href=\"/search?query=homo+sapiens\" class=\"secondary label\" title=\"Search by Taxonomy term\">homo sapiens</a>\n                    <a href=\"/search?query=lung+cancer\" class=\"secondary label\" title=\"Search by Disease term\">lung cancer</a>\n                    <a title=\"Search tips/tricks\" data-open=\"searchTipsBox\"\n                       class=\"secondary label label-floating-right\">Search tips</a>\n                </p></div>\n            <div class=\"input-group-button columns large-1 medium-2 small-12\" style=\"float: left\">\n                <input id=\"btn-search-submit\" class=\"button icon icon-functional\" tabindex=\"2\"\n                       type=\"submit\" name=\"searchSubmit\" value=\"1\" />\n            </div>\n        </div>\n    </div></fieldset>\n</form>\n<script type=\"text/javascript\">\n    $(document).ready(function () {\n        let domain = \"\";\n        // biomodels is the default domain\n        let chosenDomain = domain.length > 0 ? domain : \"biomodels\";\n        $('#chosenDomain').val(chosenDomain);\n        $('#domain_switcher').val(chosenDomain);\n\n        const urlParams = new URLSearchParams(window.location.search);\n        const query = urlParams.get('query');\n\n        if (query) {\n            $(\"#local-search-box\").val(query);\n        }\n\n    });\n    $(document).on('change', '#domain_switcher', {}, function(e) {\n        e.preventDefault();\n        let domain = $(this).val();\n        $('#chosenDomain').val(domain);\n    });\n\n    /* Use event capturing (runs before other handlers) */\n    document.getElementById('local-search').addEventListener('submit', function(e) {\n        e.preventDefault();\n        e.stopImmediatePropagation();\n\n        const query = document.getElementById('local-search-box').value;\n        const domain = document.getElementById('chosenDomain').value;\n        const urlParams = new URLSearchParams(window.location.search);\n        urlParams.set('query', query);\n        urlParams.set('domain', domain);\n        const searchPattern = /^\\/search(?:\\/|$)/i;\n        let newURL;\n        if (searchPattern.test(window.location.pathname)) {\n            // Matches /search or /search/ but NOT /search-results\n            newURL = window.location.pathname + '?' + urlParams.toString();\n        } else {\n            newURL = \"https://www.biomodels.org/search?\" + urlParams.toString();\n        }\n        window.location.href = newURL;\n\n        return false;\n    }, true); // true = use capture phase\n</script>\n\n            </div>\n            <!-- local navigation bar -->\n            \n\n\n<div id=\"biomodels-toggle-bar\" class=\"hide-for-medium\">\n    <button class=\"menu-icon\" type=\"button\" id=\"biomodels-hamburger\"></button>\n    <div class=\"title-bar-title\">Menu</div>\n</div>\n<nav>\n<div id=\"biomodels-menu\">\n<div class=\"top-bar-left\">\n<ul id=\"local-nav\" class=\"main-menu dropdown menu\"\n    data-description=\"navigational\" data-dropdown-menu role=\"menubar\">\n    <li class=\"main-menu-item\"\n        role=\"menuitem\">\n        <a href=\"https://www.biomodels.org/\" title=\"Back to BioModels homepage\">\n            <i class=\"icon icon-generic\" data-icon=\"H\"></i> Home</a>\n    </li>\n    \n    <li class=\"main-menu-item\"\n        role=\"menuitem\">\n        <a><i class=\"icon icon-common\" data-icon=\"b\"></i> Browse</a>\n        <ul class=\"menu\">\n            <li><a href=\"/search?query=*%3A*\">All\n            models</a></li>\n            <li><a\n                href=\"/parameterSearch/index\">BioModels Parameters Search</a>\n            </li>\n            <li><a href=\"/covid-19\">COVID-19</a></li>\n            \n            <li><a href=\"/agedbrain\">Neurodegeneration models</a></li>\n            <li><a href=\"/path2models\">Path2Models models</a></li>\n            <li>\n                <a href=\"/pdgsmm/index\">\n                    PDGSM models\n                </a>\n            </li>\n            <li><a href=\"/reproducibility\">Reproducibility</a></li>\n        </ul>\n    </li>\n    <li class=\"main-menu-item\"\n        role=\"menuitem\">\n        <a href=\"/model/submission-guidelines-and-agreement\">\n            <i class=\"icon icon-common icon-submit\"></i>&nbsp;Submit</a>\n    </li>\n    <li class=\"main-menu-item\"role=\"menuitem\">\n        <a><i class=\"icon icon-common icon-cogs\"></i>&nbsp;Curation</a>\n        <ul class=\"menu\">\n            \n            <li><a href=\"/curation/fbc\">FBC</a></li>\n        </ul>\n    </li>\n    <li class=\"main-menu-item\"role=\"menuitem\">\n        <a><i class=\"icon icon-common icon-support\"></i> Help</a>\n        <ul class=\"menu\">\n            <li><a href=\"/faq\">FAQs</a></li>\n            <li class=\"divider\"></li>\n            <li><a href=\"https://www.biomodels.org/user-guide/manual.html\" target=\"_blank\">User Manual</a></li>\n            <li class=\"divider\"></li>\n            <li><a href=\"/curation-docs\">Curator's Zone</a></li>\n            <li class=\"divider\"></li>\n            <li><a href=\"/dev\">Developer's Zone</a></li>\n            <li class=\"divider\"></li>\n            <li><a href=\"/courses\">Courses</a></li>\n            <li><a href=\"//www.ebi.ac.uk/biomodels/tools/converters/\" target=\"_blank\">Online converters</a></li>\n        </ul>\n    </li>\n    <li class=\"main-menu-item\"role=\"menuitem\">\n        <a><i class=\"icon icon-common icon-info\"></i> About us</a>\n        <ul class=\"menu\">\n            <li><a href=\"/privacy\">Privacy Policy</a></li>\n            \n            <li><a href=\"/termsofuse\">Terms of Use</a></li>\n            <li class=\"divider\"></li>\n            <li><a href=\"/citation\">Citation</a></li>\n            <li><a href=\"/news\">News</a></li>\n            <li><a href=\"/acknowledgements\">Acknowledgements</a></li>\n            <li><a href=\"/jobs\">Jobs</a></li>\n            <li><a href=\"/jummp/curators\">Curators</a></li>\n            <li class=\"divider\"></li>\n            <li><a>Model of the Year</a>\n                <ul class=\"menu\">\n                    <li><a href='/competition/model-of-the-year-2025'>MOY2025</a></li>\n                    <li><a href='/competition/model-of-the-year-2024'>MOY2024</a></li>\n                    <li><a href='/competition/model-of-the-year-2023'>MOY2023</a></li>\n                </ul>\n            </li>\n        </ul>\n    </li>\n    <li class=\"main-menu-item\"role=\"menuitem\">\n        <a href=\"/contact\">\n            <i class=\"icon icon-common icon-contact\"></i> Contact us\n        </a>\n    </li>\n    <li style=\"border-right: none\" id=\"menuItemFeedback\" data-open=\"rate_review_form\"\n        role=\"menuitem\" class=\"main-menu-item\">\n        <!-- rate_review_form is the identifier of the modal feedback form defined in the footer.\n             This form is rendered using the feedback template of the web plugin -->\n        <a><i class=\"icon icon-common icon-comment\"></i> Feedback</a>\n    </li>\n    <!-- If you need to include functional (as opposed to purely navigational) links in your local menu,\n       add them here, and give them a class of \"functional\". Remember: you'll need a class of \"last\" for\n       whichever one will show up last... For example: -->\n</ul></div>\n<div class=\"top-bar-right\">\n<ul class=\"main-menu dropdown menu\"\n        data-description=\"navigational\" data-dropdown-menu role=\"menubar\">\n    \n    \n        <li class=\"main-menu-item functional first float-right \"\n            role=\"menuitem\">\n            <a href='/registration' class=\"icon icon-functional\"\n               data-icon=\"7\">Register</a>\n        </li>\n        <li  class=\"active main-menu-item functional first float-right \" \n            role=\"menuitem\">\n            <a href=\"https://www.biomodels.org/login/auth\">\n                <span class=\"icon icon-common icon-sign-in-alt\">&nbsp;</span>Login\n            </a>\n        </li>\n    \n</ul>\n</div></div>\n</nav>\n\n        </div><!-- /local-title -->\n    </header>\n</div>\n\n    \n\n\n\n\n\n\n\n\n\n\n\n\n\n<div id=\"content\" role=\"main\" class=\"row\">\n    <div data-sticky-container class=\"sticky-container\">\n        \n            <!-- Facets search is unavailable -->\n            \n                <div id=\"main-content\" class=\"small-12 medium-12 large-12 columns\">\n                    <div class=\"row\" style=\"padding: 5px 0px 0px 0px\">\n    <div class=\"columns small-12 medium-12 large-12\">\n        <div class='flashNotificationDiv'>\n            \n                \n                    <script type=\"text/javascript\">\r\n\n                        hideNow()\n                    \r\n</script>\r\n\n                \n            \n\n        </div>\n    </div>\n</div>\n\n                    \n                    \n        <script type=\"text/javascript\">\r\n\n    // define the variables tied to the current user for later usages in common.js\n    // Some of these variables are populated by the server-side ones\n    var currentUsername = \"\";\n    var currentEmail = \"\";\n    var currentRealName = \"\";\n    var currentOrcid = \"\";\n    var actionName = \"auth\";\n\r\n</script>\r\n\n\n        <div id=\"login\" class=\"row\">\n            <div class=\"small-12 medium-6 medium-centered large-4 large-centered columns\">\n                <form action=\"/j_spring_security_check\" method=\"post\" id=\"loginForm\" class=\"cssform\" autocomplete=\"on\">\n                    <div class=\"row column log-in-form\">\n                        <h3 class=\"text-center\">Log in to your account</h3>\n                        <label>Username\n                            <input type='text' name='j_username' id='username' placeholder=\"Username\">\n                        </label>\n                        <label>Password\n                            <input type='password' name='j_password' id='password' placeholder=\"Password\" autocomplete=\"on\"/>\n                            <span id=\"toggle-password\"\n                                  class=\"fa fa-fw fa-eye field-icon toggle-password\"></span>\n                        </label>\n                        <label for='j_previousURL'>\n                            <input type='text' name='j_previousURL' id='j_previousURL'  value=\"\"\n                                   style=\"display: none\"/></label>\n                        <label for=\"j_deviceInfo\">\n                            <input type='text' name='j_deviceInfo' id='j_deviceInfo' value=\"\"\n                                   style=\"display: none\"/>\n                        </label>\n                        <p><button type=\"button\" class=\"button expanded\" id=\"btnLogIn\">Log In</button></p>\n                        <p class=\"text-center\">\n                            <a href=\"https://www.biomodels.org/forgotpassword\">Forgot your password?</a></p>\n                        \n                        <p class=\"text-center\">\n                            <a href=\"https://www.biomodels.org/registration\">Register</a></p>\n                        \n                    </div>\n                </form>\n\n            </div>\n        </div>\n\n        <!--\n common-script.gsp is as the placeholder to define scripts where they need to use\n Grails tag-libs or server side variables.\n -->\n\n\n<script type=\"text/javascript\">\r\n\nfunction verifyCompromisedPassword(password) {\n    const URL = \"/usermanagement/verifyCompromisedPassword\";\n    fetch(URL, {\n        method: 'POST',\n        headers: {\n            'Accept': 'application/json; charset=utf-8',\n            'Content-Type': 'application/json; charset=utf-8'\n        },\n        body: JSON.stringify({'password': password})\n    }).then(response => {\n        if (!response.ok) {\n            throw new Error('Network response failed!!!');\n        }\n        return response.json();\n    }).then(data => {\n        if (data[\"result\"]) {\n            let msg = \"<h4 style='color: red'><b>Compromised Password Alert!</b></h4>\";\n            if (['editPassword', 'reset'].includes(\"auth\")) {\n                msg += \"This password is known to cybercriminals far and wide! \" +\n                \"It has been publicly exposed in one or more data breaches.\";\n            } else if (\"auth\" === 'auth') {\n                msg += \"This password has appeared in one or more data breaches which puts your account at \" +\n                \"high risk of compromise. You should change your password immediately.\"\n            }\n            showNotification(msg);\n        } else {\n            clearNotification();\n            hideNow();\n        }\n    }).catch(error => {\n        console.error('Error: ', error);\n    });\n}\n\nfunction checkCompromisedPasswordOnServerSide(username, password) {\n    const URL = \"/usermanagement/verifyCompromisedPasswordAndNotifyUser\";\n    fetch(URL, {\n        method: 'POST',\n        headers: {\n            'Accept': 'application/json; charset=utf-8',\n            'Content-Type': 'application/json; charset=utf-8'\n        },\n        body: JSON.stringify({'username': username, 'password': password})\n    }).then(response => {\n        if (!response.ok) {\n            throw new Error('Network response failed!!!');\n        }\n        return response.json();\n    }).then(data => {\n        if (data[\"compromised\"]) {\n            console.log(\"Sent the verification compromised password to the server side.\");\n        } else {\n            console.log(\"Cannot verify compromised password to the server side.\");\n        }\n    }).catch(error => {\n        console.error('Error: ', error);\n    });\n}\n\nfunction checkPasswordStrength(password) {\n    // source: https://martech.zone/javascript-password-strength/\n    // Initialize variables\n    let strength = 0;\n    let strengthLevel;\n    let tips = [];\n\n    // Check password length\n    let tip = \"Make the password longer.\";\n    if (password.length < 10) {\n        tips.push(tip);\n    } else {\n        strength += 1;\n        // tips.splice( $.inArray(tip, tips), 1);\n        tips = jQuery.grep(tips, function(value) { return value !== tip; });\n    }\n\n    // Check for mixed case\n    tip = \"Use both lowercase and uppercase letters.\";\n    if (password.match(/[a-z]/) && password.match(/[A-Z]/)) {\n        strength += 1;\n        // tips.splice( $.inArray(tip, tips), 1);\n        tips = jQuery.grep(tips, function(value) { return value !== tip; });\n    } else {\n        tips.push(tip);\n    }\n\n    // Check for numbers\n    tip = \"Include at least one number.\";\n    if (password.match(/\\d/)) {\n        strength += 1;\n        // tips.splice( $.inArray(tip, tips), 1);\n        tips = jQuery.grep(tips, function(value) { return value !== tip; });\n    } else {\n        tips.push(tip);\n    }\n\n    // Check for special characters\n    tip = \"Include at least one special character.\";\n    if (password.match(/[^a-zA-Z\\d]/)) {\n        strength += 1;\n        // tips.splice( $.inArray(tip, tips), 1);\n        tips = jQuery.grep(tips, function(value) { return value !== tip; });\n    } else {\n        tips.push(tip);\n    }\n\n    // Return results\n    if (strength < 2) {\n         strengthLevel = \"Easy to guess.\";\n    } else if (strength === 2) {\n        strengthLevel = \"Medium difficulty.\" ;\n    } else if (strength === 3) {\n        strengthLevel =  \"Difficult.\";\n    } else {\n        strengthLevel = \"Extremely difficult.\";\n    }\n    return { strength: strength, strengthLevel: strengthLevel, tips: tips };\n}\n\nfunction validateNewPassword(newPassword, newPasswordHelp, showWarning = false) {\n    const newPasswordVal = newPassword.val();\n    verifyCompromisedPassword(newPasswordVal);\n    let s = checkPasswordStrength(newPasswordVal);\n    let colourCode;\n    let retVal = false;\n    switch (s.strengthLevel) {\n        case \"Easy to guess.\":\n            colourCode = \"red\";\n            if (showWarning) {\n                toastr.error(s.strengthLevel);\n            }\n            break;\n        case \"Medium difficulty.\":\n            colourCode = \"orange\";\n            if (showWarning) {\n                toastr.warning(s.strengthLevel);\n            }\n            break;\n        case \"Difficult.\":\n            retVal = true;\n            colourCode = \"cornflowerblue\";\n            if (showWarning) {\n                toastr.info(s.strengthLevel);\n            }\n            break;\n        case \"Extremely difficult.\":\n            retVal = true;\n            colourCode = \"green\";\n            if (showWarning) {\n                toastr.success(s.strengthLevel);\n            }\n            break;\n    }\n    let msg = '<span style=\"color: ' + colourCode + '\">' + s.strengthLevel + '</span>';\n    if (s.tips.length !== 0) {\n        msg += \"<br/>\" + s.tips.join(\"<br/>\");\n    }\n    newPasswordHelp.show();\n    newPasswordHelp.html(msg);\n\n    return retVal;\n}\n\nfunction validateNewPasswordRpt(newPassword, newPasswordRpt, newPasswordRptHelp) {\n    const newPasswordRptVal = newPasswordRpt.val();\n    const newPasswordVal = newPassword.val();\n    let retVal;\n    if (newPasswordRptVal.length === 0) {\n        retVal = false;\n        newPasswordRptHelp.show();\n        newPasswordRptHelp.html(\"Please retype your new password!\");\n    } else if (newPasswordVal !== newPasswordRptVal) {\n        retVal = false;\n        newPasswordRptHelp.show();\n        newPasswordRptHelp.html(\"New password does not match!\");\n    } else {\n        retVal = true;\n        newPasswordRptHelp.hide();\n    }\n    return retVal;\n}\n\r\n</script>\r\n\n\n        <script type='text/javascript'>\n            const referrer = document.referrer;\n            const loginInput = $(\"#loginForm input\");\n            const loginForm = $(\"#loginForm\");\n            const loginUsername = $(\"#username\");\n            const loginPassword = $(\"#password\");\n            loginInput.focus(function() {\n                if ($(this).data(\"reset\") === undefined) {\n                $(this).val(\"\");\n                $(this).data(\"reset\", true);\n                }\n            });\n            loginInput.on(\"keyup\", function(event) {\n                // magic value 13 is entered\n                if (event.which === 13) {\n                    loginForm.submit();\n                    checkCompromisedPasswordOnServerSide(loginUsername.val(), loginPassword.val());\n                }\n            });\n            const loginSubmit = $(\"#btnLogIn\");\n            loginSubmit.on(\"click\", function() {\n                const deviceInfo = $(\"#j_deviceInfo\");\n                $(deviceInfo).val(localStorage.getItem(loginUsername.val()));\n                loginForm.submit();\n                checkCompromisedPasswordOnServerSide(loginUsername.val(), loginPassword.val());\n            });\n            $(document).ready(function() {\n                if (referrer.indexOf(\"biomodels/MODEL\") > 0) {\n                    const previousURL = $(\"#j_previousURL\");\n                    previousURL.val(referrer);\n                }\n            });\n            loginPassword.on(\"focus\", function() {\n                clearNotification();\n                hideNow();\n            });\n            loginPassword.on(\"blur\", function() {\n                // the function below was defined in the common-script.gsp template\n                verifyCompromisedPassword($(this).val());\n            });\n        </script>\n    <script type=\"text/javascript\">\r\n\n    $(\".toggle-password\").on(\"click\", function() {\n        $(this).toggleClass(\"fa-eye fa-eye-slash\");\n        let input = $(\"#password\");\n        if ([\"editPassword\", \"reset\"].includes(\"auth\")) {\n            input = $(\"#newPassword\");\n        }\n        if (input.attr(\"type\") === \"password\") {\n            input.attr(\"type\", \"text\");\n        } else {\n            input.attr(\"type\", \"password\");\n        }\n    });\n\r\n</script>\r\n\n\n    \n                </div>\n            \n        \n    </div>\n</div>\n\n    \n\n\n\n<footer id=\"local-footer\" class=\"local-footer\">\n    <!-- Optional local footer (insert citation / project-specific copyright / etc here -->\n    <div  id=\"footer\" class=\"row\">\n        <div>\n            <div class=\"small-12 medium-6 large-6 columns\">\n                <span style=\"font-size: small\">Build: <a href=\"//bitbucket.org/biomodels/jummp-biomodels/commits/all?search=8f9b24217\">8f9b24217</a> | Sat, 9 May 2026 12:04:37 +0100</span>\n            </div>\n            <div class=\"small-12 medium-6 large-6 columns\" style=\"text-align: right\">\n                <span style=\"font-size: small\">\n                    \n            </div>\n        </div>\n        <div class=\"clear\"></div>\n    </div>\n     <div id=\"elixir-banner\" data-color=\"grey\" data-name=\"This service\"\n          data-description=\"BioModels is an ELIXIR Deposition Database\"\n          data-more-information-link=\"//www.elixir-europe.org/platforms/data/elixir-deposition-databases\"\n          data-use-basic-styles=\"true\"></div>\n     <script defer=\"defer\"\n             src=\"https://ebi.emblstatic.net/web_guidelines/EBI-Framework/v1.3/js/elixirBanner.js\"></script>\n\n     <style>\n         .elixir-ribbon {\n             padding: 1rem 0;\n             /*background-color: rgb(79,138,156);*/\n             background-color: rgb(0, 124, 130);\n             /*background-color:#008080;*/\n             vertical-align: middle;\n         }\n\n         .elixir-ribbon,\n         .elixir-ribbon h5,\n         .elixir-ribbon a,\n         .elixir-ribbon a:active,\n         .elixir-ribbon a:visited,\n         .elixir-ribbon a:hover {\n             color: #fff;\n             text-decoration: none;\n         }\n         .elixir-ribbon a:hover {\n             opacity: .8;\n         }\n         .elixir-ribbon .readmore {\n             border-bottom: 1px dotted #fff;\n         }\n         .elixir-ribbon h5 {\n             margin: 0;\n         }\n         .elixir-ribbon .elixir-logo-kite {\n             background: 80% 58% url(\"https://ebi.emblstatic.net/web_guidelines/EBI-Framework/v1.2/images/logos/assorted/elixir_kitemark-60px.png\") no-repeat;\n             position: relative;\n             /*top: -5px;*/\n             /*margin: 0 1rem -.5rem 0;*/\n             margin-left: 1.25rem;\n             height: 60px;\n             width: 60px;\n             display: inline-block;\n             float: left;\n             background-size: 60px;\n             vertical-align: middle;\n         }\n         .elixir-ribbon .row {\n             margin: 0 !important;\n         }\n     </style>\n    <!-- End optional local footer -->\n\n    <div id=\"global-footer\" class=\"global-footer\">\n        <nav id=\"global-nav-expanded\" class=\"row global-nav-expanded\">\n            <!-- Footer will be automatically inserted by footer.js -->\n        </nav>\n        <section id=\"ebi-footer-meta\" class=\"row ebi-footer-meta\">\n            <!-- Footer meta will be automatically inserted by footer.js -->\n        </section>\n    </div>\n     <div class=\"reveal\" id=\"rate_review_form\" data-reveal>\n    <h3 id=\"messageTitle\"\n        style=\"border-bottom: 1px solid grey\">Please give your feedback</h3>\n    <button class=\"close-button\" data-close aria-label=\"Close modal\" type=\"button\">\n        <span aria-hidden=\"true\">&times;</span>\n    </button>\n    <div class=\"contact-panel\" id=\"feedback_panel\" data-toggler=\".is-active\">\n        <table class=\"responsive-table\">\n            \n        <div class=\"rating\">\n            <span id=\"star5\" class=\"star-icon\">&#9734;</span>\n            <span id=\"star4\" class=\"star-icon\">&#9734;</span>\n            <span id=\"star3\" class=\"star-icon\">&#9734;</span>\n            <span id=\"star2\" class=\"star-icon\">&#9734;</span>\n            <span id=\"star1\" class=\"star-icon\">&#9734;</span></div>\n        <input id=\"rateStar\" name=\"rateStar\" hidden required=\"true\" />\n        \n        </table>\n        <form action=\"\">\n            <div class=\"row\">\n                <label>Email (Optional)\n                    <input type=\"email\" id=\"emailAddress\" placeholder=\"Email address\">\n                </label>\n                <label>Additional comments (Optional)\n                    <textarea id=\"additionalComment\"\n                              placeholder=\"Share details of your experience with this site.\"\n                              rows=\"3\"></textarea>\n                </label>\n            </div>\n            <div class=\"contact-panel-actions\">\n                <input id=\"submitButtonRate\" type=\"submit\"\n                       class=\"button submit-button\" value=\"Submit\">\n            </div>\n        </form>\n    </div>\n</div>\n\n     \n<div class=\"reveal\" id=\"searchTipsBox\" data-reveal>\n    <h3 id=\"messageTitle\"\n        style=\"border-bottom: 1px solid grey\">Search Tips/Tricks</h3>\n    <button class=\"close-button\" data-close aria-label=\"Close modal\" type=\"button\">\n        <span aria-hidden=\"true\">&times;</span>\n    </button>\n\n    <div class=\"search-tips-panel\" id=\"searchTips_panel\" data-toggler=\".is-active\">\n        <ul>\n            <li>Search is based on exact word matches. Make sure your <strong>spelling</strong> is correct.\n            Example: the misspelled terms like <a href=\"/search?query=CelCycle\" class=\"secondary label\" title=\"Search by CelCycle term\" target=\"_blank\">CelCycle</a> (missing \"l\") will not find any results.</li>\n            <li>Search for the phrase \"Glucose\" in the name field. Example: <a href=\"/search?query=name%3AGlucose\" class=\"secondary label\" title=\"Search by Glucose term in the &#39;name&#39; field\" target=\"_blank\">name:\"Glucose\"</a></li>\n            <li>Matches all models having model elements that were annotated with Gene Ontology term cell growth. Example:\n                <a href=\"/search?query=GO%3A0016049\" class=\"secondary label\" title=\"Search by Gene Ontology term cell growth\" target=\"_blank\">GO:0016049</a></li>\n        </ul>\n        <p><a href=\"https://www.biomodels.org/user-guide/model_search.html\"\n              target=\"_blank\">Learn more about searching models</a></p>\n    </div>\n</div>\n\n     <script>\n    $(document).ready(() => {\n        const elixirRibbon = $(\"div.elixir-ribbon > div.row > div.column\");\n        if (elixirRibbon.length) {\n            elixirRibbon.removeClass(\"column\");\n            elixirRibbon.addClass(\"columns small-12 medium-6 large-6\");\n            $('<div class=\"columns small-12 medium-6 large-6\">' +\n                '<h5><a href=\"https://www.ebi.ac.uk/licencing\" target=\"_blank\">EMBL-EBI Licencing</a><br/>' +\n                '<a href=\"https://www.ebi.ac.uk/long-term-data-preservation\" target=\"_blank\">' +\n                'EMBL-EBI Data Preservation</a></h5></div>').insertAfter(elixirRibbon);\n        }\n    });\n</script>\n\n     <div class=\"reveal\" id=\"domainSwitcherExplanationBox\" data-reveal>\n    <h3 id=\"messageTitle\"\n        style=\"border-bottom: 1px solid grey\">What are BioModels domains?</h3>\n    <button class=\"close-button\" data-close aria-label=\"Close modal\" type=\"button\">\n        <span aria-hidden=\"true\">&times;</span>\n    </button>\n\n    <div class=\"explanation-panel\" id=\"domainSwitcherExplanationPanel\" data-toggler=\".is-active\">\n        <p>This drop down box allows you to filter which models appear in the search results:\n        <ul>\n            <li><strong>Autogenerated Models</strong>: large-scale or automatically-generated submissions such as <a href=\"/path2models\" target=\"_blank\">Path2Models</a> or\n            <a href=\"/pdgsmm/index\" target=\"_blank\">Patient-derived genome scale metabolic models (PDGSMM)</a> </li>\n            <li><strong>Individual Models</strong>: models described in the literature that have been submitted individually to BioModels</li>\n            <li><strong>All Models</strong>: the whole BioModels content</li>\n        </ul>\n        </p>\n        <p>The default search domain is <strong>Individual Models</strong>.</p>\n\n        <p><a href=\"https://www.biomodels.org/user-guide/model_search.html\"\n              target=\"_blank\">Learn more about searching models</a></p>\n    </div>\n</div>\n\n</footer>\n\n\n    \n        <div id=\"helpbutton\">\n            <a id=\"toggleHelp\" title=\"Access help for this page\" href=\"#\">More about this page</a>\n        </div>\n        <div id=\"helpPanel\">\n            <div id=\"toolbar\" class=\"ui-widget-header ui-corner-all\">\n                <button id=\"expand\">Increase help size</button>\n                <button id=\"contract\">Decrease help size</button>\n                <button id=\"snap\">Reset help</button>\n                <button id=\"outlink\">Open in a new tab</button>\n                <button id=\"close\">Close</button>\n            </div>\n            <iframe id='helpFrame' src='https://www.biomodels.org/user-guide/login.html#contextSpecific/800'></iframe>\n        </div>\n    \n</div>\n\n<!-- JavaScript at the bottom for fast page loading -->\n<script src=\"https://ebi.emblstatic.net/web_guidelines/EBI-Framework/v1.3/js/script.js\"></script>\n<!-- Grab Google CDN's jQuery, with a protocol relative URL; fall back to local if offline -->\n\n<!-- The Foundation theme JavaScript -->\n<script src=\"https://ebi.emblstatic.net/web_guidelines/EBI-Framework/v1.3/libraries/foundation-6/js/foundation.js\"></script>\n<script src=\"https://ebi.emblstatic.net/web_guidelines/EBI-Framework/v1.3/js/foundationExtendEBI.js\"></script>\n<script type=\"text/JavaScript\">$(document).foundation();</script>\n<script type=\"text/JavaScript\">$(document).foundationExtendEBI();</script>\n\n<!-- customised scripts -->\n<script src=\"/js/common.js\" type=\"text/javascript\"></script>\r\n\n<!-- end scripts-->\n\n\n\n</body>\n</html>\n"
  },
  "same_name": false
}

← All examples