{"action":"created","comment":{"url":"https://api.github.com/repos/cms-gem-daq-project/gem-plotting-tools/pulls/comments/224980389","pull_request_review_id":164485664,"id":224980389,"node_id":"MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDIyNDk4MDM4OQ==","diff_hunk":"@@ -0,0 +1,236 @@\n+#!/usr/bin/env python\n+\n+r\"\"\"\n+``anaDACScan`` -- analyzes DAC scan data\n+========================================\n+\n+Synopsis\n+--------\n+\n+**anaDACScan.py** [*OPTIONS*]\n+\n+Description\n+-----------\n+\n+This script reads in calibration information and DAC scan data, performs a fit for each VFAT, computes the DAC value corresponding to the nominal current or voltage for each VFAT, and reports the results.\n+\n+\n+Arguments\n+---------\n+\n+.. program:: anaDACScan.py\n+\n+.. option:: infilename\n+\n+    Name of the input file root.\n+\n+.. option:: --assignXErrors  \n+\n+    Use the dacValX_Err values stored in the input file\n+\n+.. option:: --calFileList\n+  \n+    Provide a file containing a list of calFiles in the following format. Example:: \n+\n+    OH1 calFileOH1\n+    OH2 calFileOH2\n+    OH3 calFileOH3\n+    etc\n+\n+.. option:: --outfilename\n+\n+    Name of the output root file. Default is DACFitData.root.\n+\n+Example\n+-------\n+\n+.. code-block:: bash\n+\n+    anaDACScan.py /afs/cern.ch/user/d/dorney/public/v3Hack/dacScanV3.root  --calFileList calibration.txt --assignXErrors\n+\n+\n+Environment\n+-----------\n+\n+\n+Internals\n+---------\n+\n+\n+\"\"\"\n+\n+if __name__ == '__main__':\n+\n+    import ROOT as r\n+    \n+    from gempython.gemplotting.utils.anautilities import parseCalFile\n+    from gempython.utils.nesteddict import nesteddict\n+    from gempython.gemplotting.utils.anautilities import make3x8Canvas\n+    \n+    from gempython.gemplotting.mapping.chamberInfo import chamber_config\n+\n+    import os\n+    \n+    import argparse\n+    \n+    parser = argparse.ArgumentParser(description='Arguments to supply to anaDACScan.py')\n+\n+    parser.add_argument('infilename', type=str, help=\"Filename from which input information is read\", metavar='infilename')\n+    parser.add_argument(\"--calFileList\", type=str, help=\"File specifying which calFile to use for each OH. Format: OH1 filenameOH1 <newline> OH2 filenameOH2 <newline> etc\", metavar=\"calFileList\")\n+    parser.add_argument('-o','--outfilename', dest='outfilename', type=str, default=\"DACFitData.root\", help=\"Filename to which output information is written\", metavar='outfilename')\n+    parser.add_argument('--assignXErrors', dest='assignXErrors', action='store_true', help=\"Whether to assign errors for the X variable (which is actually plotted on the y-axis)\")\n+\n+    args = parser.parse_args()\n+\n+    print(\"Analyzing: '%s'\"%args.infilename)\n+\n+    # Set default histogram behavior\n+    r.TH1.SetDefaultSumw2(False)\n+    r.gROOT.SetBatch(True)\n+    r.gStyle.SetOptStat(1111111)\n+\n+    dacScanFile = r.TFile(args.infilename)\n+\n+    import numpy as np\n+    import root_numpy as rp\n+    \n+    list_bNames = ['link']\n+    ohArray = rp.tree2array(tree=dacScanFile.dacScanTree, branches=list_bNames)\n+    ohArray = np.unique(ohArray['link'])\n+    \n+    dataPath = os.getenv(\"DATA_PATH\") \n+    \n+    if len(args.infilename.split('/')) > 1 and len(args.infilename.split('/')[len(args.infilename.split('/')) - 2].split('.')) == 5:\n+        scandate = args.infilename.split('/')[len(args.infilename.split('/')) - 2]\n+    else:    \n+        scandate = 'noscandate'\n+\n+    for oh in ohArray:\n+        os.system(\"mkdir -p \"+ dataPath+\"/\"+chamber_config[oh]+\"/dacScans/\"+scandate)\n+            \n+    # Determine which DAC was scanned and against which ADC\n+    nameX = \"\"\n+    nameY = \"\"\n+    for event in dacScanFile.dacScanTree:\n+        nameX = str(event.nameX.data())\n+        nameY = str(event.nameY.data())\n+        break # all entries will be the same\n+\n+    if nameY not in ['ADC0', 'ADC1']:\n+        print(\"Error: unexpected value of nameY: '%s'\"%nameY)\n+        exit(1)\n+\n+    calInfo = {}\n+\n+    if args.calFileList != None:\n+        for line in open(args.calFileList):\n+            line = line.strip(' ').strip('\\n')\n+            first = line.split(' ')[0].strip(' ')\n+            second = line.split(' ')[1].strip(' ')\n+            tuple_calInfo = parseCalFile(second)\n+            calInfo[int(first)] = {'slope' : tuple_calInfo[0], 'intercept' : tuple_calInfo[1]}\n+\n+    #for each OH, check if calibration files were provided, if not search for the calFile in the $DATA_PATH, if it is not there, then skip that OH for the rest of the script\n+    for oh in ohArray:\n+        if oh not in calInfo.keys():\n+            calDacCalFile = \"{0}/{1}/calFile_calDac_{1}.txt\".format(dataPath,chamber_config[oh])\n+            calDacCalFileExists = os.path.isfile(calDacCalFile)\n+            if not calDacCalFileExists:\n+                print(\"Skipping OH{0}, detector {1}, missing CFG_CAL_DAC Calibration file:\\n\\t{2}\".format(\n+                    oh,\n+                    chamber_config[oh],\n+                    calDacCalFile))\n+                ohArray = np.delete(ohArray,(oh))\n+\n+\n+    if len(ohArray) == 0:\n+        print('No OHs with a calFile, exiting.')\n+        exit(1)\n+           \n+    # Initialize nested dictionaries\n+    dict_dacScanResults = nesteddict()\n+    dict_dacScanFuncs = nesteddict()\n+\n+    # Initialize a TGraphErrors for each vfat\n+    for oh in ohArray:\n+        for vfat in range(0,24):\n+             dict_dacScanResults[oh][vfat] = r.TGraphErrors()\n+             #the reversal of x and y is intended - we want to plot the nameX variable on the y-axis and the nameY variable on the x-axis\n+             dict_dacScanResults[oh][vfat].GetXaxis().SetTitle(nameY)\n+             dict_dacScanResults[oh][vfat].GetYaxis().SetTitle(nameX)","path":"anaDACScan.py","position":160,"original_position":160,"commit_id":"5a370ce05b38b16b92136630b9b58d3879179d58","original_commit_id":"5a370ce05b38b16b92136630b9b58d3879179d58","user":{"login":"bdorney","id":6432141,"node_id":"MDQ6VXNlcjY0MzIxNDE=","avatar_url":"https://avatars0.githubusercontent.com/u/6432141?v=4","gravatar_id":"","url":"https://api.github.com/users/bdorney","html_url":"https://github.com/bdorney","followers_url":"https://api.github.com/users/bdorney/followers","following_url":"https://api.github.com/users/bdorney/following{/other_user}","gists_url":"https://api.github.com/users/bdorney/gists{/gist_id}","starred_url":"https://api.github.com/users/bdorney/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/bdorney/subscriptions","organizations_url":"https://api.github.com/users/bdorney/orgs","repos_url":"https://api.github.com/users/bdorney/repos","events_url":"https://api.github.com/users/bdorney/events{/privacy}","received_events_url":"https://api.github.com/users/bdorney/received_events","type":"User","site_admin":false},"body":"It would also be good to have the actual DAC scan plotted e.g. `ADCX vs <reg>`.  Looking at the raw data helps to understand if the further results should be considered valid.","created_at":"2018-10-14T05:52:19Z","updated_at":"2018-10-14T05:52:19Z","html_url":"https://github.com/cms-gem-daq-project/gem-plotting-tools/pull/158#discussion_r224980389","pull_request_url":"https://api.github.com/repos/cms-gem-daq-project/gem-plotting-tools/pulls/158","author_association":"CONTRIBUTOR","_links":{"self":{"href":"https://api.github.com/repos/cms-gem-daq-project/gem-plotting-tools/pulls/comments/224980389"},"html":{"href":"https://github.com/cms-gem-daq-project/gem-plotting-tools/pull/158#discussion_r224980389"},"pull_request":{"href":"https://api.github.com/repos/cms-gem-daq-project/gem-plotting-tools/pulls/158"}}},"pull_request":{"url":"https://api.github.com/repos/cms-gem-daq-project/gem-plotting-tools/pulls/158","id":222495623,"node_id":"MDExOlB1bGxSZXF1ZXN0MjIyNDk1NjIz","html_url":"https://github.com/cms-gem-daq-project/gem-plotting-tools/pull/158","diff_url":"https://github.com/cms-gem-daq-project/gem-plotting-tools/pull/158.diff","patch_url":"https://github.com/cms-gem-daq-project/gem-plotting-tools/pull/158.patch","issue_url":"https://api.github.com/repos/cms-gem-daq-project/gem-plotting-tools/issues/158","number":158,"state":"open","locked":false,"title":"[WIP] add DAC scan analysis","user":{"login":"AndrewLevin","id":3329216,"node_id":"MDQ6VXNlcjMzMjkyMTY=","avatar_url":"https://avatars0.githubusercontent.com/u/3329216?v=4","gravatar_id":"","url":"https://api.github.com/users/AndrewLevin","html_url":"https://github.com/AndrewLevin","followers_url":"https://api.github.com/users/AndrewLevin/followers","following_url":"https://api.github.com/users/AndrewLevin/following{/other_user}","gists_url":"https://api.github.com/users/AndrewLevin/gists{/gist_id}","starred_url":"https://api.github.com/users/AndrewLevin/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/AndrewLevin/subscriptions","organizations_url":"https://api.github.com/users/AndrewLevin/orgs","repos_url":"https://api.github.com/users/AndrewLevin/repos","events_url":"https://api.github.com/users/AndrewLevin/events{/privacy}","received_events_url":"https://api.github.com/users/AndrewLevin/received_events","type":"User","site_admin":false},"body":"This script analyzes DAC scans. It reads an input file containing DAC and ADC values, performs calibration, performs a fit, and reports the DAC values which should produce the nominal voltage or current as specific in the VFAT3 manual. 3 by 8 plots of the calibrated data and the fit are also produced.\r\n\r\n## Description\r\nPseudo-code, from @bdorney, copied here for convenience from  https://github.com/cms-gem-daq-project/gem-plotting-tools/issues/155:\r\n\r\n```\r\nif __name__ == '__main__':\r\n   setup an argparse.ArgumentParser instance\r\n   get arguments from a user\r\n   \r\n   # Determine which links present suggest using root_numpy, something like:\r\n   import root_numpy as rp\r\n   import numpy as np\r\n   bNames = ['link']\r\n   ohArray = rp.tree2array(tree=calTree, branches=bNames)\r\n   ohArray = np.unique(ohArray) # now ohArray will have one entry for each unmasked optohybrid\r\n\r\n   # Determine which DAC was scanned and against which ADC\r\n   nameX = \"\"\r\n   nameY = \"\"\r\n   for event in calTree:\r\n      nameX = event.nameX\r\n      nameY = event.nameY\r\n      break # all entries will be the same\r\n\r\n   # Get ADC0 or ADC1 calibration\r\n   # nameY will either be ADC0 or ADC1, you'll need to load calibration for each link\r\n   # use parseCalFile(...) from gem-plotting-tools/utils/anautilities.py\r\n   # Note this calibration is unique to each (vfat,ohN) pairing\r\n   # In future this is where a DB query based on vfatID would take place \r\n\r\n   # Make output plots, suggest TGraphErrors objects\r\n   # I would suggest you use a nesteddict object (gempython/utils/nesteddict.py) to index these by [oh][vfat]\r\n   for link in ohArray:\r\n      for vfat in range(0,24):\r\n           dict_dacScanResults[link][vfat] = r.TGraphErrors(...) # declare TGraphErrors\r\n           You can get number of points in TGraphErrors by looking at maxVfat3DACSize of amc_user_functions_xhal.py (from cmsgemos PR#206)\r\n\r\n   # Loop over events in the tree and fill plots\r\n   for event in calTree:\r\n       assign (dacValX, dacValY, dacValY_Err) to the tgraph for a given (vfat,oh) pair\r\n       Here you need to use the ADCX (for X = 0,1) calibration to convert dacValY & dacValY_Err to physical units\r\n       You also need to identify if nameX corresponds to a bias voltage DAC or a bias current DAC, see VFAT3 manual Table 25: GBL CFG CTR 4 : Monitoring settings\r\n       Note nameX is the register that was scanned during the DAC scan, but we want plots that are Y=nameX (reg scanned) and X=nameY (ADC value), see below \r\n \r\n   # Fit the TGraphErrors Objects\r\n   for oh in ohArray\r\n      for vfat in range(0,24):\r\n          dict_dacScanResults[oh][vfat].Fit(...) # linear fitting may not be suitable, polynomial may be required, investigation needed.  Possible try several fits and choose one with best norm chi2\r\n   \r\n    # Determine DAC values to achieve recommended bias voltage and current settings\r\n    See Table 9, Nominal Current column, and the VFAT3a specific note under table 9\r\n    See Table 10, Nominal Voltage column\r\n    Here for each (vfat,oh) you should use the fit function to do a look-up on the nominal value to get the DAC value that will achieve this, e.g.\r\n    dacVal = myTF1.Eval(nominal voltage)\r\n    This then should be printed to terminal as a table, an output file (in either tab-delimited or TTree format) and then as a TGraph object with DAC value vs. VFAT position\r\n\r\n    # Make plots\r\n    Make our standard 3x8 grid plot of the DAC scan results, see make3x8Canvas(...), one such grid plot should be made for each entry in ohArray\r\n    Store plots in an output TFile (use TDirectories to organize logically)\r\n    \r\n    Exit\r\n```\r\n\r\nHelp output:\r\n```\r\n[amlevin@gem904qc8daq gem-plotting-tools]$ ./anaDACScan.py -h\r\nusage: anaDACScan.py [-h] [--calFileList calFileList] [-o outfilename]\r\n                     [--assignXErrors]\r\n                     infilename\r\n\r\nArguments to supply to anaDACScan.py\r\n\r\npositional arguments:\r\n  infilename            Filename from which input information is read\r\n\r\noptional arguments:\r\n  -h, --help            show this help message and exit\r\n  --calFileList calFileList\r\n                        File specifying which calFile to use for each OH.\r\n                        Format: OH1 filenameOH1 <newline> OH2 filenameOH2\r\n                        <newline> etc\r\n  -o outfilename, --outfilename outfilename\r\n                        Filename to which output information is written\r\n  --assignXErrors       Whether to assign errors for the X variable (which is\r\n                        actually plotted on the y-axis)\r\n```\r\n\r\ncalFileList example:\r\n```\r\n1 /home/amlevin/gem-plotting-tools/calibration_OH1.txt\r\n```\r\n\r\nExample execution:\r\n```\r\n[amlevin@gem904qc8daq gem-plotting-tools]$ python anaDACScan.py /afs/cern.ch/user/d/dorney/public/v3Hack/dacScanV3.root calibration.txt  --assignXErrors --calFileList calibration.txt\r\nAnalyzing: '/afs/cern.ch/user/d/dorney/public/v3Hack/dacScanV3.root'\r\n...\r\n...\r\nROOT fitting output\r\n...\r\n...\r\n| OH | vfatN | dacVal |\r\n| -- | ----- | ------ |\r\n| 1 | 0  | 1.0 | \r\n| 1 | 1  | 1.0 | \r\n| 1 | 2  | 1.0 | \r\n| 1 | 3  | 1.0 | \r\n| 1 | 4  | 0.0 | \r\n| 1 | 5  | 153.8 | \r\n| 1 | 6  | 152.8 | \r\n| 1 | 7  | 148.8 | \r\n| 1 | 8  | 1.0 | \r\n| 1 | 9  | 1.0 | \r\n| 1 | 10  | 1.0 | \r\n| 1 | 11  | 1.0 | \r\n| 1 | 12  | 155.8 | \r\n| 1 | 13  | 0.0 | \r\n| 1 | 14  | 152.8 | \r\n| 1 | 15  | 1.0 | \r\n| 1 | 16  | 1.0 | \r\n| 1 | 17  | 1.0 | \r\n| 1 | 18  | 1.0 | \r\n| 1 | 19  | 1.0 | \r\n| 1 | 20  | 158.8 | \r\n| 1 | 21  | 155.8 | \r\n| 1 | 22  | 78.9 | \r\n| 1 | 23  | 156.8 | \r\nInfo in <TCanvas::Print>: png file SummaryOH1.png has been created\r\n```\r\n\r\n### Types of changes\r\n<!--- What types of changes does your code introduce? Put an `x` in all the boxes that apply: -->\r\n- [ ] Bug fix (non-breaking change which fixes an issue)\r\n- [x] New feature (non-breaking change which adds functionality)\r\n- [ ] Breaking change (fix or feature that would cause existing functionality to change)\r\n\r\n## Motivation and Context\r\nThis script was requested in https://github.com/cms-gem-daq-project/gem-plotting-tools/issues/155\r\n\r\n## How Has This Been Tested?\r\nI have tested that the script runs on an input file provided by @bdorney: `/afs/cern.ch/user/d/dorney/public/v3Hack/dacScanV3.root`\r\n\r\n### Screenshots (if appropriate):\r\n\r\n## Checklist:\r\n<!--- Go over all the following points, and put an `x` in all the boxes that apply. -->\r\n<!--- If you're unsure about any of these, don't hesitate to ask. We're here to help! -->\r\n- [x] My code follows the code style of this project.\r\n- [ ] My change requires a change to the documentation.\r\n- [ ] I have updated the documentation accordingly.\r\n- [ ] I have added tests to cover my changes.\r\n- [ ] All new and existing tests passed.\r\n\r\n<!--- Template thanks to https://www.talater.com/open-source-templates/#/page/99 -->\r\n","created_at":"2018-10-12T15:00:10Z","updated_at":"2018-10-14T05:52:19Z","closed_at":null,"merged_at":null,"merge_commit_sha":"61cc2efdbeaa5b4a3bc3a729464e84ca769dc8f1","assignee":{"login":"AndrewLevin","id":3329216,"node_id":"MDQ6VXNlcjMzMjkyMTY=","avatar_url":"https://avatars0.githubusercontent.com/u/3329216?v=4","gravatar_id":"","url":"https://api.github.com/users/AndrewLevin","html_url":"https://github.com/AndrewLevin","followers_url":"https://api.github.com/users/AndrewLevin/followers","following_url":"https://api.github.com/users/AndrewLevin/following{/other_user}","gists_url":"https://api.github.com/users/AndrewLevin/gists{/gist_id}","starred_url":"https://api.github.com/users/AndrewLevin/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/AndrewLevin/subscriptions","organizations_url":"https://api.github.com/users/AndrewLevin/orgs","repos_url":"https://api.github.com/users/AndrewLevin/repos","events_url":"https://api.github.com/users/AndrewLevin/events{/privacy}","received_events_url":"https://api.github.com/users/AndrewLevin/received_events","type":"User","site_admin":false},"assignees":[{"login":"AndrewLevin","id":3329216,"node_id":"MDQ6VXNlcjMzMjkyMTY=","avatar_url":"https://avatars0.githubusercontent.com/u/3329216?v=4","gravatar_id":"","url":"https://api.github.com/users/AndrewLevin","html_url":"https://github.com/AndrewLevin","followers_url":"https://api.github.com/users/AndrewLevin/followers","following_url":"https://api.github.com/users/AndrewLevin/following{/other_user}","gists_url":"https://api.github.com/users/AndrewLevin/gists{/gist_id}","starred_url":"https://api.github.com/users/AndrewLevin/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/AndrewLevin/subscriptions","organizations_url":"https://api.github.com/users/AndrewLevin/orgs","repos_url":"https://api.github.com/users/AndrewLevin/repos","events_url":"https://api.github.com/users/AndrewLevin/events{/privacy}","received_events_url":"https://api.github.com/users/AndrewLevin/received_events","type":"User","site_admin":false}],"requested_reviewers":[],"requested_teams":[],"labels":[],"milestone":null,"commits_url":"https://api.github.com/repos/cms-gem-daq-project/gem-plotting-tools/pulls/158/commits","review_comments_url":"https://api.github.com/repos/cms-gem-daq-project/gem-plotting-tools/pulls/158/comments","review_comment_url":"https://api.github.com/repos/cms-gem-daq-project/gem-plotting-tools/pulls/comments{/number}","comments_url":"https://api.github.com/repos/cms-gem-daq-project/gem-plotting-tools/issues/158/comments","statuses_url":"https://api.github.com/repos/cms-gem-daq-project/gem-plotting-tools/statuses/5a370ce05b38b16b92136630b9b58d3879179d58","head":{"label":"AndrewLevin:for_issue_155","ref":"for_issue_155","sha":"5a370ce05b38b16b92136630b9b58d3879179d58","user":{"login":"AndrewLevin","id":3329216,"node_id":"MDQ6VXNlcjMzMjkyMTY=","avatar_url":"https://avatars0.githubusercontent.com/u/3329216?v=4","gravatar_id":"","url":"https://api.github.com/users/AndrewLevin","html_url":"https://github.com/AndrewLevin","followers_url":"https://api.github.com/users/AndrewLevin/followers","following_url":"https://api.github.com/users/AndrewLevin/following{/other_user}","gists_url":"https://api.github.com/users/AndrewLevin/gists{/gist_id}","starred_url":"https://api.github.com/users/AndrewLevin/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/AndrewLevin/subscriptions","organizations_url":"https://api.github.com/users/AndrewLevin/orgs","repos_url":"https://api.github.com/users/AndrewLevin/repos","events_url":"https://api.github.com/users/AndrewLevin/events{/privacy}","received_events_url":"https://api.github.com/users/AndrewLevin/received_events","type":"User","site_admin":false},"repo":{"id":140579944,"node_id":"MDEwOlJlcG9zaXRvcnkxNDA1Nzk5NDQ=","name":"gem-plotting-tools","full_name":"AndrewLevin/gem-plotting-tools","private":false,"owner":{"login":"AndrewLevin","id":3329216,"node_id":"MDQ6VXNlcjMzMjkyMTY=","avatar_url":"https://avatars0.githubusercontent.com/u/3329216?v=4","gravatar_id":"","url":"https://api.github.com/users/AndrewLevin","html_url":"https://github.com/AndrewLevin","followers_url":"https://api.github.com/users/AndrewLevin/followers","following_url":"https://api.github.com/users/AndrewLevin/following{/other_user}","gists_url":"https://api.github.com/users/AndrewLevin/gists{/gist_id}","starred_url":"https://api.github.com/users/AndrewLevin/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/AndrewLevin/subscriptions","organizations_url":"https://api.github.com/users/AndrewLevin/orgs","repos_url":"https://api.github.com/users/AndrewLevin/repos","events_url":"https://api.github.com/users/AndrewLevin/events{/privacy}","received_events_url":"https://api.github.com/users/AndrewLevin/received_events","type":"User","site_admin":false},"html_url":"https://github.com/AndrewLevin/gem-plotting-tools","description":"Repository for GEM commissioning plotting tools","fork":true,"url":"https://api.github.com/repos/AndrewLevin/gem-plotting-tools","forks_url":"https://api.github.com/repos/AndrewLevin/gem-plotting-tools/forks","keys_url":"https://api.github.com/repos/AndrewLevin/gem-plotting-tools/keys{/key_id}","collaborators_url":"https://api.github.com/repos/AndrewLevin/gem-plotting-tools/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/AndrewLevin/gem-plotting-tools/teams","hooks_url":"https://api.github.com/repos/AndrewLevin/gem-plotting-tools/hooks","issue_events_url":"https://api.github.com/repos/AndrewLevin/gem-plotting-tools/issues/events{/number}","events_url":"https://api.github.com/repos/AndrewLevin/gem-plotting-tools/events","assignees_url":"https://api.github.com/repos/AndrewLevin/gem-plotting-tools/assignees{/user}","branches_url":"https://api.github.com/repos/AndrewLevin/gem-plotting-tools/branches{/branch}","tags_url":"https://api.github.com/repos/AndrewLevin/gem-plotting-tools/tags","blobs_url":"https://api.github.com/repos/AndrewLevin/gem-plotting-tools/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/AndrewLevin/gem-plotting-tools/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/AndrewLevin/gem-plotting-tools/git/refs{/sha}","trees_url":"https://api.github.com/repos/AndrewLevin/gem-plotting-tools/git/trees{/sha}","statuses_url":"https://api.github.com/repos/AndrewLevin/gem-plotting-tools/statuses/{sha}","languages_url":"https://api.github.com/repos/AndrewLevin/gem-plotting-tools/languages","stargazers_url":"https://api.github.com/repos/AndrewLevin/gem-plotting-tools/stargazers","contributors_url":"https://api.github.com/repos/AndrewLevin/gem-plotting-tools/contributors","subscribers_url":"https://api.github.com/repos/AndrewLevin/gem-plotting-tools/subscribers","subscription_url":"https://api.github.com/repos/AndrewLevin/gem-plotting-tools/subscription","commits_url":"https://api.github.com/repos/AndrewLevin/gem-plotting-tools/commits{/sha}","git_commits_url":"https://api.github.com/repos/AndrewLevin/gem-plotting-tools/git/commits{/sha}","comments_url":"https://api.github.com/repos/AndrewLevin/gem-plotting-tools/comments{/number}","issue_comment_url":"https://api.github.com/repos/AndrewLevin/gem-plotting-tools/issues/comments{/number}","contents_url":"https://api.github.com/repos/AndrewLevin/gem-plotting-tools/contents/{+path}","compare_url":"https://api.github.com/repos/AndrewLevin/gem-plotting-tools/compare/{base}...{head}","merges_url":"https://api.github.com/repos/AndrewLevin/gem-plotting-tools/merges","archive_url":"https://api.github.com/repos/AndrewLevin/gem-plotting-tools/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/AndrewLevin/gem-plotting-tools/downloads","issues_url":"https://api.github.com/repos/AndrewLevin/gem-plotting-tools/issues{/number}","pulls_url":"https://api.github.com/repos/AndrewLevin/gem-plotting-tools/pulls{/number}","milestones_url":"https://api.github.com/repos/AndrewLevin/gem-plotting-tools/milestones{/number}","notifications_url":"https://api.github.com/repos/AndrewLevin/gem-plotting-tools/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/AndrewLevin/gem-plotting-tools/labels{/name}","releases_url":"https://api.github.com/repos/AndrewLevin/gem-plotting-tools/releases{/id}","deployments_url":"https://api.github.com/repos/AndrewLevin/gem-plotting-tools/deployments","created_at":"2018-07-11T13:35:16Z","updated_at":"2018-10-13T14:27:07Z","pushed_at":"2018-10-13T15:27:26Z","git_url":"git://github.com/AndrewLevin/gem-plotting-tools.git","ssh_url":"git@github.com:AndrewLevin/gem-plotting-tools.git","clone_url":"https://github.com/AndrewLevin/gem-plotting-tools.git","svn_url":"https://github.com/AndrewLevin/gem-plotting-tools","homepage":null,"size":958,"stargazers_count":0,"watchers_count":0,"language":"Python","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"archived":false,"open_issues_count":0,"license":{"key":"gpl-3.0","name":"GNU General Public License v3.0","spdx_id":"GPL-3.0","url":"https://api.github.com/licenses/gpl-3.0","node_id":"MDc6TGljZW5zZTk="},"forks":0,"open_issues":0,"watchers":0,"default_branch":"develop"}},"base":{"label":"cms-gem-daq-project:develop","ref":"develop","sha":"afdb9977447cbf46fc8c97d9b572a917503efd24","user":{"login":"cms-gem-daq-project","id":9051054,"node_id":"MDEyOk9yZ2FuaXphdGlvbjkwNTEwNTQ=","avatar_url":"https://avatars0.githubusercontent.com/u/9051054?v=4","gravatar_id":"","url":"https://api.github.com/users/cms-gem-daq-project","html_url":"https://github.com/cms-gem-daq-project","followers_url":"https://api.github.com/users/cms-gem-daq-project/followers","following_url":"https://api.github.com/users/cms-gem-daq-project/following{/other_user}","gists_url":"https://api.github.com/users/cms-gem-daq-project/gists{/gist_id}","starred_url":"https://api.github.com/users/cms-gem-daq-project/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cms-gem-daq-project/subscriptions","organizations_url":"https://api.github.com/users/cms-gem-daq-project/orgs","repos_url":"https://api.github.com/users/cms-gem-daq-project/repos","events_url":"https://api.github.com/users/cms-gem-daq-project/events{/privacy}","received_events_url":"https://api.github.com/users/cms-gem-daq-project/received_events","type":"Organization","site_admin":false},"repo":{"id":92520679,"node_id":"MDEwOlJlcG9zaXRvcnk5MjUyMDY3OQ==","name":"gem-plotting-tools","full_name":"cms-gem-daq-project/gem-plotting-tools","private":false,"owner":{"login":"cms-gem-daq-project","id":9051054,"node_id":"MDEyOk9yZ2FuaXphdGlvbjkwNTEwNTQ=","avatar_url":"https://avatars0.githubusercontent.com/u/9051054?v=4","gravatar_id":"","url":"https://api.github.com/users/cms-gem-daq-project","html_url":"https://github.com/cms-gem-daq-project","followers_url":"https://api.github.com/users/cms-gem-daq-project/followers","following_url":"https://api.github.com/users/cms-gem-daq-project/following{/other_user}","gists_url":"https://api.github.com/users/cms-gem-daq-project/gists{/gist_id}","starred_url":"https://api.github.com/users/cms-gem-daq-project/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cms-gem-daq-project/subscriptions","organizations_url":"https://api.github.com/users/cms-gem-daq-project/orgs","repos_url":"https://api.github.com/users/cms-gem-daq-project/repos","events_url":"https://api.github.com/users/cms-gem-daq-project/events{/privacy}","received_events_url":"https://api.github.com/users/cms-gem-daq-project/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/cms-gem-daq-project/gem-plotting-tools","description":"Repository for GEM commissioning plotting tools","fork":false,"url":"https://api.github.com/repos/cms-gem-daq-project/gem-plotting-tools","forks_url":"https://api.github.com/repos/cms-gem-daq-project/gem-plotting-tools/forks","keys_url":"https://api.github.com/repos/cms-gem-daq-project/gem-plotting-tools/keys{/key_id}","collaborators_url":"https://api.github.com/repos/cms-gem-daq-project/gem-plotting-tools/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/cms-gem-daq-project/gem-plotting-tools/teams","hooks_url":"https://api.github.com/repos/cms-gem-daq-project/gem-plotting-tools/hooks","issue_events_url":"https://api.github.com/repos/cms-gem-daq-project/gem-plotting-tools/issues/events{/number}","events_url":"https://api.github.com/repos/cms-gem-daq-project/gem-plotting-tools/events","assignees_url":"https://api.github.com/repos/cms-gem-daq-project/gem-plotting-tools/assignees{/user}","branches_url":"https://api.github.com/repos/cms-gem-daq-project/gem-plotting-tools/branches{/branch}","tags_url":"https://api.github.com/repos/cms-gem-daq-project/gem-plotting-tools/tags","blobs_url":"https://api.github.com/repos/cms-gem-daq-project/gem-plotting-tools/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/cms-gem-daq-project/gem-plotting-tools/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/cms-gem-daq-project/gem-plotting-tools/git/refs{/sha}","trees_url":"https://api.github.com/repos/cms-gem-daq-project/gem-plotting-tools/git/trees{/sha}","statuses_url":"https://api.github.com/repos/cms-gem-daq-project/gem-plotting-tools/statuses/{sha}","languages_url":"https://api.github.com/repos/cms-gem-daq-project/gem-plotting-tools/languages","stargazers_url":"https://api.github.com/repos/cms-gem-daq-project/gem-plotting-tools/stargazers","contributors_url":"https://api.github.com/repos/cms-gem-daq-project/gem-plotting-tools/contributors","subscribers_url":"https://api.github.com/repos/cms-gem-daq-project/gem-plotting-tools/subscribers","subscription_url":"https://api.github.com/repos/cms-gem-daq-project/gem-plotting-tools/subscription","commits_url":"https://api.github.com/repos/cms-gem-daq-project/gem-plotting-tools/commits{/sha}","git_commits_url":"https://api.github.com/repos/cms-gem-daq-project/gem-plotting-tools/git/commits{/sha}","comments_url":"https://api.github.com/repos/cms-gem-daq-project/gem-plotting-tools/comments{/number}","issue_comment_url":"https://api.github.com/repos/cms-gem-daq-project/gem-plotting-tools/issues/comments{/number}","contents_url":"https://api.github.com/repos/cms-gem-daq-project/gem-plotting-tools/contents/{+path}","compare_url":"https://api.github.com/repos/cms-gem-daq-project/gem-plotting-tools/compare/{base}...{head}","merges_url":"https://api.github.com/repos/cms-gem-daq-project/gem-plotting-tools/merges","archive_url":"https://api.github.com/repos/cms-gem-daq-project/gem-plotting-tools/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/cms-gem-daq-project/gem-plotting-tools/downloads","issues_url":"https://api.github.com/repos/cms-gem-daq-project/gem-plotting-tools/issues{/number}","pulls_url":"https://api.github.com/repos/cms-gem-daq-project/gem-plotting-tools/pulls{/number}","milestones_url":"https://api.github.com/repos/cms-gem-daq-project/gem-plotting-tools/milestones{/number}","notifications_url":"https://api.github.com/repos/cms-gem-daq-project/gem-plotting-tools/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/cms-gem-daq-project/gem-plotting-tools/labels{/name}","releases_url":"https://api.github.com/repos/cms-gem-daq-project/gem-plotting-tools/releases{/id}","deployments_url":"https://api.github.com/repos/cms-gem-daq-project/gem-plotting-tools/deployments","created_at":"2017-05-26T14:50:06Z","updated_at":"2018-10-12T16:27:48Z","pushed_at":"2018-10-13T15:27:27Z","git_url":"git://github.com/cms-gem-daq-project/gem-plotting-tools.git","ssh_url":"git@github.com:cms-gem-daq-project/gem-plotting-tools.git","clone_url":"https://github.com/cms-gem-daq-project/gem-plotting-tools.git","svn_url":"https://github.com/cms-gem-daq-project/gem-plotting-tools","homepage":null,"size":961,"stargazers_count":1,"watchers_count":1,"language":"Python","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":13,"mirror_url":null,"archived":false,"open_issues_count":19,"license":{"key":"gpl-3.0","name":"GNU General Public License v3.0","spdx_id":"GPL-3.0","url":"https://api.github.com/licenses/gpl-3.0","node_id":"MDc6TGljZW5zZTk="},"forks":13,"open_issues":19,"watchers":1,"default_branch":"develop"}},"_links":{"self":{"href":"https://api.github.com/repos/cms-gem-daq-project/gem-plotting-tools/pulls/158"},"html":{"href":"https://github.com/cms-gem-daq-project/gem-plotting-tools/pull/158"},"issue":{"href":"https://api.github.com/repos/cms-gem-daq-project/gem-plotting-tools/issues/158"},"comments":{"href":"https://api.github.com/repos/cms-gem-daq-project/gem-plotting-tools/issues/158/comments"},"review_comments":{"href":"https://api.github.com/repos/cms-gem-daq-project/gem-plotting-tools/pulls/158/comments"},"review_comment":{"href":"https://api.github.com/repos/cms-gem-daq-project/gem-plotting-tools/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/cms-gem-daq-project/gem-plotting-tools/pulls/158/commits"},"statuses":{"href":"https://api.github.com/repos/cms-gem-daq-project/gem-plotting-tools/statuses/5a370ce05b38b16b92136630b9b58d3879179d58"}},"author_association":"NONE"}}
{"actor":{"display_login":"bdorney"}}