{"action":"created","comment":{"url":"https://api.github.com/repos/zhanglab/psamm/pulls/comments/111823007","pull_request_review_id":33092191,"id":111823007,"diff_hunk":"@@ -0,0 +1,521 @@\n+\n+Model Curation\n+==============\n+\n+This tutorial will go over how to utilize the curation functions in PSAMM\n+to correct common errors and ensure that metabolic reconstructions are\n+accurate representations of the metabolism of an organism.\n+\n+.. contents::\n+   :depth: 1\n+   :local:\n+\n+\n+\n+Materials\n+---------\n+\n+For information on how to install `PSAMM` and the associated requirements, as well\n+how to download the materials required for this tutorial you can reference the\n+Installation and Materials section of the tutorial.\n+\n+For this part of the tutorial we will be using a modified version of the E. coli\n+core metabolic models that has been used in the other sections of the tutorial.\n+This model has been modified to add in a new pathways for the utilization of\n+mannitol as a carbon source. To access this model and the other files needed you\n+will need to go into the tutorial-part-2 folder located in the psamm-tutorial folder.\n+\n+.. code-block:: shell\n+\n+    (psamm-env) $ cd <PATH>/tutorial-part-2/\n+\n+Once in this folder you should see two directories. One is the E_coli_yaml folder which\n+contains the version of the model we will use. The other is called additional_files, which\n+contains some files we will use during the tutorial.\n+\n+\n+Common Errors in Metabolic Reconstructions\n+------------------------------------------\n+\n+Many types of errors can be introduced into metabolic models. Some errors\n+can be introduced during manual editing of model files while others can result\n+from inconsistent representations of the biology of the system. Various features\n+in PSAMM are designed ot help identify and fix these problems to ensure that\n+the reconstruction does not contain these kinds of errors.\n+\n+Some errors cannot be easily identified without extensive manual inspection of\n+the model data files. These PSAMM functions are designed to help identify these\n+errors and make the correction process easier.\n+\n+PSAMM Warnings\n+--------------\n+\n+The most basic way to identify possible errors in a model will be through\n+reading the warning messages printed out by PSAMM when any functions are run\n+on a model. These warning messages can be an easy way to identify if something\n+in the reconstruction is not set up the way that was intended. The following\n+are examples of the types of warnings that PSAMM will provide and what kinds of\n+errors they might indicate.\n+\n+The first type of warning that PSAMM can provide is a waning that there is a\n+compound that is in a reaction but is not defined in the compound information\n+of the model. While PSAMM doesn't necessarily know if this is an error,\n+these warning can help identify compound ids in the reconstruction that\n+may have typos in them or that need to be defined in the compounds data\n+for the reconstruction. For example in the warning below it would appear that\n+the compound id for ATP had been mistyped and included two extra t's in it.\n+These types of errors can make reactions in a model inconsistent and may lead\n+to incorrect conclusions from the model if they are not corrected.\n+\n+.. code-block:: shell\n+\n+    WARNING: The compound cpd_atttp was not defined in the list of compounds\n+\n+The second type of warning will similarly help identify if there was an error\n+introduced in one of the reconstruction's reactions. This warning will indicate\n+that there is a compound present in the reconstruction that has a compartment that\n+is not defined elsewhere in the model. In the example below a compound was added in\n+a reaction as being in the compartment 'X'. Since this compartment was not used in the\n+model the reaction involving this instance of the compound would become flux inconsistent.\n+\n+.. code-block:: shell\n+\n+    WARNING: The compartment X was not defined in the list of compartments.\n+\n+The third and fourth types of warnings can be useful in identify that the exchange file\n+is set up correctly for the reconstruction. These two kinds of errors will help identify if\n+there are compounds that are present in the extracellular compartment but do not have a corresponding\n+exchange reaction in the boundary conditions. This can be problematic for some models that require certain\n+sinks for overproduced compounds in the boundary. The other kind of warning will indicate if there are\n+compounds in the exchange reactions that cannot be utilized by any reactions in the model. This could\n+indicate that a transport reaction is missing from the model or that the compound could be removed\n+from the exchange file.\n+\n+.. code-block:: shell\n+\n+    WARNING: The compound cpd_chitob was in the extracellular compartment but not defined in the medium\n+    WARNING: The compound cpd_etoh was defined in the medium but is not in the extracellular compartment\n+\n+Reaction Consistency in PSAMM\n+-----------------------------\n+\n+The previous examples of warning messages produced by PSAMM can be helpful as a first step in identifying\n+possible errors in a model but there are various other types of errors that may be present in models that\n+specific PSAMM functions can help identify. The first kind of errors are ones related to the balancing of\n+reactions in model. It is important that metabolic models be balanced in terms of elements, charge, and\n+stoichiometry. PSAMM has three functions available to identify reactions that are not balanced\n+in these properties which can help correct them and lead to more accurate and true representations of\n+metabolism.\n+\n+Stoichiometric Checking\n+~~~~~~~~~~~~~~~~~~~~~~~\n+\n+PSAMM's masscheck tool can be used to check if the reactions in the model are\n+stoichiometrically consistent and the compounds that are causing the imbalance.\n+This can be useful when curating the model\n+because it can assist in easily identify missing compounds in reactions.\n+A common problem that can be identified using this tool is a loss of\n+hydrogen atoms during a metabolic reaction. This can occur due to modeling\n+choices or incomplete reaction equations but is generally easy to identify\n+using masscheck.\n+\n+To report on the compounds that are not balanced use the following masscheck\n+command:\n+\n+.. code-block:: shell\n+\n+    (psamm-env) $ psamm-model masscheck\n+\n+This command will produce an output like the following:\n+\n+.. code-block:: shell\n+\n+    ...\n+    accoa_c\t1.0\tAcetyl-CoA\n+    acald_e\t1.0\tAcetaldehyde\n+    acald_c\t1.0\tAcetaldehyde\n+    h_e\t0.0\tH\n+    h_c\t0.0\tH\n+    INFO: Consistent compounds: 73/75\n+\n+The ``masscheck`` command will first try to assign a positive mass to all of\n+the compounds in the model while balancing the masses such that the left-hand\n+side and right-hand side add up in every model reaction. All the compound\n+masses are reported, and the compounds that have been assigned a zero value for\n+the mass are the ones causing imbalances.\n+\n+In certain cases a metabolic model can contain compounds that represent electrons,\n+photons, or some other artificial compound. These compounds can cause problems with\n+the stoichiometric balance of a reaction because of their unique functions. In order\n+to deal with this an additional property can be added to the compound entry that\n+will designate it as a compound with zero mass. This designation will tell PSAMM\n+to consider these compounds to have no mass during the stoichiometric checking which\n+will prevent them from causing imbalances in the reactions. An example of how to add\n+that property to a compound entry can be seen below:\n+\n+.. code-block:: yaml\n+\n+    - id: phot\n+      name: Photon\n+      zeromass: yes\n+\n+To report on the specific reactions that may be causing the imbalance, the\n+following command can be used:\n+\n+.. code-block:: shell\n+\n+    (psamm-env) $ psamm-model masscheck --type=reaction\n+    ...\n+    FRUKIN\t1.0\t|Fructose[c]| + |ATP[c]| => |D-Fructose-6-phosphate[c]| + |ADP[c]| + |H[c]|\n+    INFO: Consistent reactions: 100/101\n+\n+This check is performed similarly to the compound check. In addition, mass\n+residual values are introduced for each metabolic reaction in the network.\n+These mass residuals are then minimized and any reactions that result in a\n+non-zero mass residual value after minimization are reported as being\n+stoichiometrically inconsistent. A non-zero residual value after minimization\n+tells you that the reaction in question may be unbalanced and missing\n+some mass from it.\n+\n+Sometimes the residue minimization problem may have multiple solutions. In\n+these cases the residue value may be reallocated among a few connected\n+reactions. In this example the unbalanced reaction is the MANNIDEH reaction:\n+\n+.. code-block:: shell\n+\n+    MANNIDEH    |manni[c]| + |nad_c[c]| => |fru_c[c]| + |nadh_c[c]|\n+\n+In this reaction equation the right hand side is missing a proton. However\n+minimization problem can result in the residue being placed on either the\n+`fru_c` or the `nadh_c` compounds in an attempt to balance the reaction.\n+Because `nadh_c` occurs in thirteen other reactions in the network, the\n+program has already determined that that compound is stoichiometrically\n+consistent. On the other hand `fru_c` only occurs one other time. Since\n+this compound is less connected the minimization problem will assign the\n+non-zero residual to this compound. This process results in the FRUKIN reaction\n+which contains this compound as being identified as being stoichiometrically\n+inconsistent.\n+\n+In these cases you will need to manually check the reaction and then use\n+the ``--checked`` option for the ``masscheck`` command to force the non-zero\n+residual to be placed on a different reaction. This will rerun the consistency\n+check and force the residual to be placed on a different reaction. To do this\n+we would run the following command.\n+\n+.. code-block:: shell\n+\n+    (psamm-env) $ psamm-model masscheck --type=reaction --checked FRUKIN\n+\n+Now, the output should report the `MANNIDEH` reaction and it can be seen that\n+the reaction equation of `MANNIDEH` is specified incorrectly. It appears that a\n+hydrogen compound was left out of the reaction for `MANNIDEH`. This would be an\n+easy problem to correct by simply adding in a hydrogen compound to correct the\n+lost atom in the equation.\n+\n+The stoichiometric consistency checking allows for the easy identification of\n+stoichiometrically inconsistent compounds while providing a more targeted subset\n+of reactions to check to fix the problem. This allows you to quickly identify\n+problematic reactions rather than having to manually go through the whole\n+reaction database in an attempt to find the problem.\n+\n+In some cases there are reactions that are going to be inherently unbalanced\n+and might cause problems with using these methods. If you know that this is the\n+case for a specific reaction they can specify that the reaction be excluded\n+from the mass check so that the rest of the network can be analyzed. To do this\n+the ``--exclude`` option can be used. For example if you wanted to exclude the\n+reaction `FRUKIN` from the mass check they could use the following command:\n+\n+.. code-block:: shell\n+\n+    (psamm-env) $ psamm-model masscheck --exclude FRUKIN\n+\n+This exclude option can be helpful in removing inherently unbalanced reactions\n+like macromolecule synthesis reations or incomplete reactions that would be\n+identified as being stoichiometrically inconsistent. It is also possible to\n+create a file that lists multiple reactions to exclude. Put each reaction\n+identifier on a separate line in the file and refer to the file be prefixing\n+the file name with a ``@``:\n+\n+.. code-block:: shell\n+\n+    (psamm-env) $ psamm-model masscheck --exclude @excluded_reactions.txt\n+\n+Before we fix the model with the correction to the `MANNIDEH` reaction, let us\n+first check the model for formula inconsistencies to show how this can also be\n+used in conjunction with mass checking and other methods to correct model\n+inconsistencies.\n+\n+Formula Consistency Checking\n+~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n+\n+Formula checking will check that each reaction in the model is balanced\n+with respect to the chemical formulas of each compound. To check the model\n+for formula consistencies run the formula check command:\n+\n+.. code-block:: shell\n+\n+    (psamm-env) $ psamm-model formulacheck\n+\n+The output should appear as follows:\n+\n+.. code-block:: shell\n+\n+    INFO: Model: Ecoli_core_model\n+    INFO: Model Git version: 9812080\n+    MANNIDEH\tC27H40N7O20P2\tC27H39N7O20P2\t\tH\n+    Biomass_Ecoli_core_w_GAM\tC1088.0232H1471.1810N446.7617O1236.7018P240.5298S3.7478\tC1045.4677H1395.2089N441.3089O1189.0281P236.8511S3.7478\t\tC42.5555H75.9721N5.4528O47.6737P3.6787\n+    INFO: Unbalanced reactions: 2/80\n+    INFO: Unchecked reactions due to missing formula: 0/80\n+\n+In this case two reactions are identified in the model as being unbalanced.\n+The biomass objective function, `Biomass_Ecoli_core_w_GAM`, and the\n+reaction that was previously identified through masscheck as being\n+unbalanced, `MANNIDEH`. In the case of the objective function this is\n+imbalanced due to the formulation of the objective function. The reaction\n+functions as a sink for the compounds required for growth and only outputs\n+depleted energy compounds. This leads to it being inherently formula\n+imbalanced but it is a necessary feature of the model. The other reaction\n+is `MANNIDEH`. It can be seen that the total number of atoms on each side\n+does not match up. PSAMM also outputs what atoms would be needed to balance\n+the reaction on both sides. In this case there is a missing hydrogen atom\n+on the right side of the equation. This can be easily rectified by adding\n+in the missing hydrogen. To do this correction in this tutorial, you\n+can copy a fixed version of the mannitol pathway from the additional files\n+folder using the following command:\n+\n+.. code-block:: shell\n+\n+    (psamm-env) $ cp ../additional_files/mannitol_pathway_v2.yaml mannitol_pathway.yaml\n+\n+Once that problem with the new reaction is fixed the model will pass both the\n+formula check and mass check.\n+\n+Charge Consistency Checking\n+~~~~~~~~~~~~~~~~~~~~~~~~~~~\n+\n+The charge consistency function is similar to the formula consistency function\n+but instead of using the chemical formulas for the compounds, PSAMM\n+will use the assigned\n+charges that are designated in the compounds file and check that these\n+charges are balanced on both sides of the reaction.\n+\n+To run a charge consistency check on the model use the chargecheck command:\n+\n+.. code-block:: shell\n+\n+    (psamm-env) $ psamm-model chargecheck\n+\n+This `E. coli` SBML model does not contain charge information for the\n+compounds. A sample output is provided below to show what the results would\n+look like for a charge imbalanced model. The output from the charge check will\n+display any reactions that are charge imbalanced and show what the imbalance is\n+and then show the reaction equation. This can be used to quickly check for any\n+missed inconsistencies and identify reactions and compounds that should be\n+looked at more closely to confirm their correctness.\n+\n+.. code-block:: shell\n+\n+    ...\n+    rxn12510\t1.0\t|ATP[c]| + |Pantothenate[c]| => |4-phosphopantothenate[c]| + |H+[c]| + |ADP[c]|\n+    rxn12825\t4.0\t|hemeO[c]| + |H2O[c]| => |Heme[c]| + (4) |H+[c]|\n+    rxn13643\t1.0\t|ADP-glucose[c]| => |Glycogen[c]| + |H+[c]| + |ADP[c]|\n+    rxn13710\t6.0\t(5) |D-Glucose[c]| + (4) |ATP[c]| => |Glycogen[c]| + (4) |H+[c]| + (4) |Phosphate[c]| + (4) |H2O[c]| + |ADP[c]|\n+    INFO: Unbalanced reactions: 94/1093\n+    INFO: Unchecked reactions due to missing charge: 0/1093\n+\n+Flux Consistency Checking\n+~~~~~~~~~~~~~~~~~~~~~~~~~\n+\n+The flux consistency checking function can be used to identify reactions that\n+cannot carry flux in the model. This tool can be used as a curation tool as\n+well as an analysis tool. In this tutorial it will be highlighted for the\n+curation aspects and later its use in flux analysis will be demonstrated.\n+\n+To run a flux consistency check on the model use the ``fluxcheck`` command:\n+\n+.. code-block:: shell\n+\n+    (psamm-env) $ psamm-model fluxcheck --unrestricted\n+\n+The unrestricted option with the command will tell PSAMM to\n+remove any limits on the exchange reactions. This will tell you which\n+reactions in the model can carry flux if the model is given all compounds in\n+the media freely. This can be helpful for identifying which reactions may not\n+be linked to other parts of the metabolism and can be helpful in identifying\n+gaps in the model. In this case it can be seen that no reactions were identified\n+as being inconsistent.\n+\n+In some situations there are pathways that might be\n+modeled but not necessarily connected to the other aspects of metabolism.\n+A common occurrence of this is with vitamin biosynthesis pathways that are\n+not incorporated into the biomass in the model. ``fluxcheck`` will identify\n+these as being flux inconsistent but the modeler will need to identify if this\n+is due to incomplete information on the pathways or if it is due to some\n+error in the formulation of the reactions.\n+\n+PSAMM will tell you how many exchange reactions cannot be used as well\n+as how many internal model reactions cannot carry flux. PSAMM will also\n+list the reactions and the equations for the reactions to make curation of\n+these reactions easier.\n+\n+Above the ``fluxcheck`` command was used with the --unrestricted option which\n+allowed the exchange reactions to all be active. This command can also be\n+used to see what reactions cannot carry flux when specific media are\n+supplied. To run this command on the network with the media that is\n+specified in the media file run the following command:\n+\n+.. code-block:: shell\n+\n+    (psamm-env) $ psamm-model fluxcheck\n+    INFO: Model: Ecoli_core_model\n+    INFO: Model Git version: 9812080\n+    INFO: Using flux bounds to determine consistency.\n+    ...\n+    EX_fru_e\t|D-Fructose[e]| <=>\n+    EX_fum_e\t|Fumarate[e]| <=>\n+    EX_glc_e\t|D-Glucose[e]| <=>\n+    EX_gln_L_e\t|L-Glutamine[e]| <=>\n+    EX_mal_L_e\t|L-Malate[e]| <=>\n+    FRUpts2\t|D-Fructose[e]| + |Phosphoenolpyruvate[c]| => |D-Fructose-6-phosphate[c]| + |Pyruvate[c]|\n+    FUMt2_2\t(2) |H[e]| + |Fumarate[e]| => (2) |H[c]| + |Fumarate[c]|\n+    GLCpts\t|Phosphoenolpyruvate[c]| + |D-Glucose[e]| => |Pyruvate[c]| + |D-Glucose-6-phosphate[c]|\n+    GLNabc\t|ATP[c]| + |L-Glutamine[e]| + |H2O[c]| => |L-Glutamine[c]| + |ADP[c]| + |H[c]| + |Phosphate[c]|\n+    MALt2_2\t|L-Malate[e]| + (2) |H[e]| => |L-Malate[c]| + (2) |H[c]|\n+    INFO: Model has 5/80 inconsistent internal reactions (0 disabled by user)\n+    INFO: Model has 5/21 inconsistent exchange reactions (0 disabled by user)\n+\n+In this case it can be seen that there are various exchange reactions\n+blocked as well as various internal reactions related to other carbon\n+metabolic pathways. The current model should only be supplying mannitol\n+as a carbon source and this would mean that these other carbon pathways\n+would be blocked in this condition. In this way, you can use the ``fluxcheck``\n+command to see what reactions are specific to certain metabolic pathways and\n+environmental conditions.\n+\n+\n+\n+Gap Identification in PSAMM\n+---------------------------\n+\n+In addition to inconsistencies found within individual reactions there can also be\n+global inconsistencies for the reactions within a metabolic network. These include\n+metabolites that can be produced but not consumed, ones that can be consumed by reactions\n+but are not produced, and reactions that cannot carry flux in a model. PSAMM includes various\n+functions for the identification of these features in a network including the functions ``gapcheck`` and\n+``fluxcheck``. Additionally the functions ``gapfill`` and ``fastgapfill`` can be used to help\n+fill these gaps that are present through the introduction of additional reactions into the network.\n+\n+Gapcheck in PSAMM\n+~~~~~~~~~~~~~~~~~\n+\n+The ``gapcheck`` function in psamm can be used to identify dead end metabolites in a metabolic network.","path":"docs/tutorial/curation.rst","position":411,"original_position":411,"commit_id":"f2cfc71cfd1732c8d7c136c7cf737d4d75e92e7d","original_commit_id":"f2cfc71cfd1732c8d7c136c7cf737d4d75e92e7d","user":{"login":"jonls","id":420734,"avatar_url":"https://avatars0.githubusercontent.com/u/420734?v=3","gravatar_id":"","url":"https://api.github.com/users/jonls","html_url":"https://github.com/jonls","followers_url":"https://api.github.com/users/jonls/followers","following_url":"https://api.github.com/users/jonls/following{/other_user}","gists_url":"https://api.github.com/users/jonls/gists{/gist_id}","starred_url":"https://api.github.com/users/jonls/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jonls/subscriptions","organizations_url":"https://api.github.com/users/jonls/orgs","repos_url":"https://api.github.com/users/jonls/repos","events_url":"https://api.github.com/users/jonls/events{/privacy}","received_events_url":"https://api.github.com/users/jonls/received_events","type":"User","site_admin":false},"body":"\"PSAMM\"","created_at":"2017-04-17T21:12:14Z","updated_at":"2017-04-17T21:19:49Z","html_url":"https://github.com/zhanglab/psamm/pull/233#discussion_r111823007","pull_request_url":"https://api.github.com/repos/zhanglab/psamm/pulls/233","_links":{"self":{"href":"https://api.github.com/repos/zhanglab/psamm/pulls/comments/111823007"},"html":{"href":"https://github.com/zhanglab/psamm/pull/233#discussion_r111823007"},"pull_request":{"href":"https://api.github.com/repos/zhanglab/psamm/pulls/233"}}},"pull_request":{"url":"https://api.github.com/repos/zhanglab/psamm/pulls/233","id":116190970,"html_url":"https://github.com/zhanglab/psamm/pull/233","diff_url":"https://github.com/zhanglab/psamm/pull/233.diff","patch_url":"https://github.com/zhanglab/psamm/pull/233.patch","issue_url":"https://api.github.com/repos/zhanglab/psamm/issues/233","number":233,"state":"open","locked":false,"title":"03 2017 tutorial update","user":{"login":"keitht547","id":10120913,"avatar_url":"https://avatars2.githubusercontent.com/u/10120913?v=3","gravatar_id":"","url":"https://api.github.com/users/keitht547","html_url":"https://github.com/keitht547","followers_url":"https://api.github.com/users/keitht547/followers","following_url":"https://api.github.com/users/keitht547/following{/other_user}","gists_url":"https://api.github.com/users/keitht547/gists{/gist_id}","starred_url":"https://api.github.com/users/keitht547/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/keitht547/subscriptions","organizations_url":"https://api.github.com/users/keitht547/orgs","repos_url":"https://api.github.com/users/keitht547/repos","events_url":"https://api.github.com/users/keitht547/events{/privacy}","received_events_url":"https://api.github.com/users/keitht547/received_events","type":"User","site_admin":false},"body":"Update to tutorial materials. Updating commands and terms to newest PSAMM conventions. Expanding topics covered. Splitting tutorial into 4 individual sections covering different topics. ","created_at":"2017-04-17T19:54:01Z","updated_at":"2017-04-17T21:19:49Z","closed_at":null,"merged_at":null,"merge_commit_sha":"e3556148117af35c06b03d2e385084b9764e79f7","assignee":null,"assignees":[],"milestone":null,"commits_url":"https://api.github.com/repos/zhanglab/psamm/pulls/233/commits","review_comments_url":"https://api.github.com/repos/zhanglab/psamm/pulls/233/comments","review_comment_url":"https://api.github.com/repos/zhanglab/psamm/pulls/comments{/number}","comments_url":"https://api.github.com/repos/zhanglab/psamm/issues/233/comments","statuses_url":"https://api.github.com/repos/zhanglab/psamm/statuses/f2cfc71cfd1732c8d7c136c7cf737d4d75e92e7d","head":{"label":"zhanglab:03-2017-tutorial-update","ref":"03-2017-tutorial-update","sha":"f2cfc71cfd1732c8d7c136c7cf737d4d75e92e7d","user":{"login":"zhanglab","id":5798413,"avatar_url":"https://avatars3.githubusercontent.com/u/5798413?v=3","gravatar_id":"","url":"https://api.github.com/users/zhanglab","html_url":"https://github.com/zhanglab","followers_url":"https://api.github.com/users/zhanglab/followers","following_url":"https://api.github.com/users/zhanglab/following{/other_user}","gists_url":"https://api.github.com/users/zhanglab/gists{/gist_id}","starred_url":"https://api.github.com/users/zhanglab/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/zhanglab/subscriptions","organizations_url":"https://api.github.com/users/zhanglab/orgs","repos_url":"https://api.github.com/users/zhanglab/repos","events_url":"https://api.github.com/users/zhanglab/events{/privacy}","received_events_url":"https://api.github.com/users/zhanglab/received_events","type":"Organization","site_admin":false},"repo":{"id":14426802,"name":"psamm","full_name":"zhanglab/psamm","owner":{"login":"zhanglab","id":5798413,"avatar_url":"https://avatars3.githubusercontent.com/u/5798413?v=3","gravatar_id":"","url":"https://api.github.com/users/zhanglab","html_url":"https://github.com/zhanglab","followers_url":"https://api.github.com/users/zhanglab/followers","following_url":"https://api.github.com/users/zhanglab/following{/other_user}","gists_url":"https://api.github.com/users/zhanglab/gists{/gist_id}","starred_url":"https://api.github.com/users/zhanglab/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/zhanglab/subscriptions","organizations_url":"https://api.github.com/users/zhanglab/orgs","repos_url":"https://api.github.com/users/zhanglab/repos","events_url":"https://api.github.com/users/zhanglab/events{/privacy}","received_events_url":"https://api.github.com/users/zhanglab/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/zhanglab/psamm","description":"Curation and analysis of metabolic models","fork":false,"url":"https://api.github.com/repos/zhanglab/psamm","forks_url":"https://api.github.com/repos/zhanglab/psamm/forks","keys_url":"https://api.github.com/repos/zhanglab/psamm/keys{/key_id}","collaborators_url":"https://api.github.com/repos/zhanglab/psamm/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/zhanglab/psamm/teams","hooks_url":"https://api.github.com/repos/zhanglab/psamm/hooks","issue_events_url":"https://api.github.com/repos/zhanglab/psamm/issues/events{/number}","events_url":"https://api.github.com/repos/zhanglab/psamm/events","assignees_url":"https://api.github.com/repos/zhanglab/psamm/assignees{/user}","branches_url":"https://api.github.com/repos/zhanglab/psamm/branches{/branch}","tags_url":"https://api.github.com/repos/zhanglab/psamm/tags","blobs_url":"https://api.github.com/repos/zhanglab/psamm/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/zhanglab/psamm/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/zhanglab/psamm/git/refs{/sha}","trees_url":"https://api.github.com/repos/zhanglab/psamm/git/trees{/sha}","statuses_url":"https://api.github.com/repos/zhanglab/psamm/statuses/{sha}","languages_url":"https://api.github.com/repos/zhanglab/psamm/languages","stargazers_url":"https://api.github.com/repos/zhanglab/psamm/stargazers","contributors_url":"https://api.github.com/repos/zhanglab/psamm/contributors","subscribers_url":"https://api.github.com/repos/zhanglab/psamm/subscribers","subscription_url":"https://api.github.com/repos/zhanglab/psamm/subscription","commits_url":"https://api.github.com/repos/zhanglab/psamm/commits{/sha}","git_commits_url":"https://api.github.com/repos/zhanglab/psamm/git/commits{/sha}","comments_url":"https://api.github.com/repos/zhanglab/psamm/comments{/number}","issue_comment_url":"https://api.github.com/repos/zhanglab/psamm/issues/comments{/number}","contents_url":"https://api.github.com/repos/zhanglab/psamm/contents/{+path}","compare_url":"https://api.github.com/repos/zhanglab/psamm/compare/{base}...{head}","merges_url":"https://api.github.com/repos/zhanglab/psamm/merges","archive_url":"https://api.github.com/repos/zhanglab/psamm/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/zhanglab/psamm/downloads","issues_url":"https://api.github.com/repos/zhanglab/psamm/issues{/number}","pulls_url":"https://api.github.com/repos/zhanglab/psamm/pulls{/number}","milestones_url":"https://api.github.com/repos/zhanglab/psamm/milestones{/number}","notifications_url":"https://api.github.com/repos/zhanglab/psamm/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/zhanglab/psamm/labels{/name}","releases_url":"https://api.github.com/repos/zhanglab/psamm/releases{/id}","deployments_url":"https://api.github.com/repos/zhanglab/psamm/deployments","created_at":"2013-11-15T14:49:43Z","updated_at":"2017-03-31T21:40:32Z","pushed_at":"2017-04-17T19:56:14Z","git_url":"git://github.com/zhanglab/psamm.git","ssh_url":"git@github.com:zhanglab/psamm.git","clone_url":"https://github.com/zhanglab/psamm.git","svn_url":"https://github.com/zhanglab/psamm","homepage":"https://zhanglab.github.io/psamm/","size":1885,"stargazers_count":15,"watchers_count":15,"language":"Python","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":true,"forks_count":10,"mirror_url":null,"open_issues_count":16,"forks":10,"open_issues":16,"watchers":15,"default_branch":"master"}},"base":{"label":"zhanglab:develop","ref":"develop","sha":"578dd1f4e1c58fd996e542420fbf64bf8a73e469","user":{"login":"zhanglab","id":5798413,"avatar_url":"https://avatars3.githubusercontent.com/u/5798413?v=3","gravatar_id":"","url":"https://api.github.com/users/zhanglab","html_url":"https://github.com/zhanglab","followers_url":"https://api.github.com/users/zhanglab/followers","following_url":"https://api.github.com/users/zhanglab/following{/other_user}","gists_url":"https://api.github.com/users/zhanglab/gists{/gist_id}","starred_url":"https://api.github.com/users/zhanglab/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/zhanglab/subscriptions","organizations_url":"https://api.github.com/users/zhanglab/orgs","repos_url":"https://api.github.com/users/zhanglab/repos","events_url":"https://api.github.com/users/zhanglab/events{/privacy}","received_events_url":"https://api.github.com/users/zhanglab/received_events","type":"Organization","site_admin":false},"repo":{"id":14426802,"name":"psamm","full_name":"zhanglab/psamm","owner":{"login":"zhanglab","id":5798413,"avatar_url":"https://avatars3.githubusercontent.com/u/5798413?v=3","gravatar_id":"","url":"https://api.github.com/users/zhanglab","html_url":"https://github.com/zhanglab","followers_url":"https://api.github.com/users/zhanglab/followers","following_url":"https://api.github.com/users/zhanglab/following{/other_user}","gists_url":"https://api.github.com/users/zhanglab/gists{/gist_id}","starred_url":"https://api.github.com/users/zhanglab/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/zhanglab/subscriptions","organizations_url":"https://api.github.com/users/zhanglab/orgs","repos_url":"https://api.github.com/users/zhanglab/repos","events_url":"https://api.github.com/users/zhanglab/events{/privacy}","received_events_url":"https://api.github.com/users/zhanglab/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/zhanglab/psamm","description":"Curation and analysis of metabolic models","fork":false,"url":"https://api.github.com/repos/zhanglab/psamm","forks_url":"https://api.github.com/repos/zhanglab/psamm/forks","keys_url":"https://api.github.com/repos/zhanglab/psamm/keys{/key_id}","collaborators_url":"https://api.github.com/repos/zhanglab/psamm/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/zhanglab/psamm/teams","hooks_url":"https://api.github.com/repos/zhanglab/psamm/hooks","issue_events_url":"https://api.github.com/repos/zhanglab/psamm/issues/events{/number}","events_url":"https://api.github.com/repos/zhanglab/psamm/events","assignees_url":"https://api.github.com/repos/zhanglab/psamm/assignees{/user}","branches_url":"https://api.github.com/repos/zhanglab/psamm/branches{/branch}","tags_url":"https://api.github.com/repos/zhanglab/psamm/tags","blobs_url":"https://api.github.com/repos/zhanglab/psamm/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/zhanglab/psamm/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/zhanglab/psamm/git/refs{/sha}","trees_url":"https://api.github.com/repos/zhanglab/psamm/git/trees{/sha}","statuses_url":"https://api.github.com/repos/zhanglab/psamm/statuses/{sha}","languages_url":"https://api.github.com/repos/zhanglab/psamm/languages","stargazers_url":"https://api.github.com/repos/zhanglab/psamm/stargazers","contributors_url":"https://api.github.com/repos/zhanglab/psamm/contributors","subscribers_url":"https://api.github.com/repos/zhanglab/psamm/subscribers","subscription_url":"https://api.github.com/repos/zhanglab/psamm/subscription","commits_url":"https://api.github.com/repos/zhanglab/psamm/commits{/sha}","git_commits_url":"https://api.github.com/repos/zhanglab/psamm/git/commits{/sha}","comments_url":"https://api.github.com/repos/zhanglab/psamm/comments{/number}","issue_comment_url":"https://api.github.com/repos/zhanglab/psamm/issues/comments{/number}","contents_url":"https://api.github.com/repos/zhanglab/psamm/contents/{+path}","compare_url":"https://api.github.com/repos/zhanglab/psamm/compare/{base}...{head}","merges_url":"https://api.github.com/repos/zhanglab/psamm/merges","archive_url":"https://api.github.com/repos/zhanglab/psamm/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/zhanglab/psamm/downloads","issues_url":"https://api.github.com/repos/zhanglab/psamm/issues{/number}","pulls_url":"https://api.github.com/repos/zhanglab/psamm/pulls{/number}","milestones_url":"https://api.github.com/repos/zhanglab/psamm/milestones{/number}","notifications_url":"https://api.github.com/repos/zhanglab/psamm/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/zhanglab/psamm/labels{/name}","releases_url":"https://api.github.com/repos/zhanglab/psamm/releases{/id}","deployments_url":"https://api.github.com/repos/zhanglab/psamm/deployments","created_at":"2013-11-15T14:49:43Z","updated_at":"2017-03-31T21:40:32Z","pushed_at":"2017-04-17T19:56:14Z","git_url":"git://github.com/zhanglab/psamm.git","ssh_url":"git@github.com:zhanglab/psamm.git","clone_url":"https://github.com/zhanglab/psamm.git","svn_url":"https://github.com/zhanglab/psamm","homepage":"https://zhanglab.github.io/psamm/","size":1885,"stargazers_count":15,"watchers_count":15,"language":"Python","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":true,"forks_count":10,"mirror_url":null,"open_issues_count":16,"forks":10,"open_issues":16,"watchers":15,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/zhanglab/psamm/pulls/233"},"html":{"href":"https://github.com/zhanglab/psamm/pull/233"},"issue":{"href":"https://api.github.com/repos/zhanglab/psamm/issues/233"},"comments":{"href":"https://api.github.com/repos/zhanglab/psamm/issues/233/comments"},"review_comments":{"href":"https://api.github.com/repos/zhanglab/psamm/pulls/233/comments"},"review_comment":{"href":"https://api.github.com/repos/zhanglab/psamm/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/zhanglab/psamm/pulls/233/commits"},"statuses":{"href":"https://api.github.com/repos/zhanglab/psamm/statuses/f2cfc71cfd1732c8d7c136c7cf737d4d75e92e7d"}}}}
{"actor":{"display_login":"jonls"}}