CMS 3D CMS Logo

getRunInfo.py
Go to the documentation of this file.
1 import das_client, rrClient
2 import json, datetime
3 
4 def today() :
5  return datetime.datetime.now().date()
6 
7 def daysAgo(n) :
8  date = today()
9  return date - datetime.timedelta(days=n)
10 
11 def day(string) :
12  return datetime.datetime.strptime(string, "%Y%m%d").date()
13 
14 def getRunsForDate(date, minlumis=10) :
15  '''
16  date: expected to be datetime.datetime object
17  '''
18  datestring = date.strftime('%Y%m%d')
19  querystring = "run date={date} | grep run.nlumis>{minlumis}".format(date=datestring, minlumis=minlumis)
20  return dasRunQueryToDict(querystring)
21 
22 def getRunsNewer(run, minlumis=10, source='RunRegistry') :
23  '''
24  run: run number int
25  source: Either RunRegistry or DAS
26  '''
27  if source == 'RunRegistry' :
28  return rrClient.getRunsNewer(run, minlumis)
29  elif source == 'DAS' :
30  querystring = "run | grep run.nlumis>{minlumis}, run.runnumber>{run}".format(run=run, minlumis=minlumis)
31  return dasRunQueryToDict(querystring)
32 
34  '''
35  run : int
36  Will return a list of datasets in DAS that have the run in them
37  '''
38  querystring = "dataset run={run}".format(run=run)
39 
40  datasets = []
41  for datasetDict in dasQuery(querystring, 'dataset') :
42  # cmsRun will not like unicode
43  datasets.append(datasetDict['name'].encode('ascii','replace'))
44 
45  return datasets
46 
47 def getFilesForRun(run, dataset) :
48  '''
49  run : int
50  dataset : string dataset to find files in, e.g.
51  /ExpressCosmics/Run2015A-Express-v1/FEVT
52  /ExpressPhysics/Run2015A-Express-v1/FEVT
53  '''
54  querystring = "file dataset={dataset} run={run}".format(dataset=dataset, run=run)
55 
56  files = []
57  for fileDict in dasQuery(querystring, 'file') :
58  # cmsRun will not like unicode
59  files.append(fileDict['name'].encode('ascii','replace'))
60 
61  return files
62 
63 
64 # -------------------- DAS convert tools
65 
66 def dasRunQueryToDict(querystring) :
67  runs = {}
68  for runDict in dasQuery(querystring, 'run') :
69  runNo = int(runDict['run_number'])
70  runDict['date'] = datestring
71  runs[runNo] = runDict
72  return runs
73 
74 def dasQuery(queryString, entryTitle) :
75  dasinfo = das_client.get_data('https://cmsweb.cern.ch', queryString, 0, 0, False)
76  if dasinfo['status'] != 'ok' :
77  raise Exception('DAS query failed.\nQuery: %s\nDAS Status returned: %s' % (queryString, dasinfo['status']))
78 
79  if len(dasinfo['data']) > 0 :
80  for entry in dasinfo['data'] :
81  if entryTitle in entry and len(entry[entryTitle]) > 0 :
82  yield entry[entryTitle][0]
def getFilesForRun(run, dataset)
Definition: getRunInfo.py:47
def getRunsForDate(date, minlumis=10)
Definition: getRunInfo.py:14
def dasRunQueryToDict(querystring)
Definition: getRunInfo.py:66
def encode(args, files)
def runGetDatasetsAvailable(run)
Definition: getRunInfo.py:33
def daysAgo(n)
Definition: getRunInfo.py:7
def day(string)
Definition: getRunInfo.py:11
def dasQuery(queryString, entryTitle)
Definition: getRunInfo.py:74
def getRunsNewer(run, minlumis=10, source='RunRegistry')
Definition: getRunInfo.py:22