CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
lumiDBFiller.py
Go to the documentation of this file.
1 #! /usr/bin/python
2 
3 import string, os, time,re
4 import commands
5 lumiauthpath=''
6 lumilogpath=''
7 loaderconf=''
8 
9 #def isCollisionRun(run,authpath=''):
10 # itIs = False
11 # itIsAlso = False
12 # isInAfill = False
13 # command = 'dumpRunInfo.py -c oracle://cms_omds_lb/cms_runinfo -P '+authpath+' -r '+run+' --collision-only l1key | wc'
14 # statusAndOutput = commands.getstatusoutput(command)
15 # if statusAndOutput[1].split(' ')[2] == '2': itIs = True
16 # command = 'dumpRunInfo.py -c oracle://cms_omds_lb/cms_runinfo -P '+authpath+' -r '+run+' --collision-only hltkey | wc'
17 # statusAndOutput = commands.getstatusoutput(command)
18 # if statusAndOutput[1].split(' ')[2] == '2': itIsAlso = True
19 # command = 'dumpRunInfo.py -c oracle://cms_omds_lb/cms_runinfo -P '+authpath+' -r '+run+' fill'
20 # statusAndOutput = commands.getstatusoutput(command)
21 # fillnum=statusAndOutput[1].split('\n')[1].split(' ')[1]
22 # if fillnum and fillnum != '0':
23 # isInAfill=True
24 # return itIs and itIsAlso and isInAfill
25 
26 def getRunnumberFromFileName(lumifilename):
27  runnumber=int(lumifilename.split('_')[4])
28  return runnumber
29 
30 def getRunsToBeUploaded(connectionString, dropbox, authpath='',minrun=180250):
31  #print 'authpath ',authpath
32  # get the last analyzed run
33  command = 'lumiData2.py -c ' +connectionString+' -P '+authpath+' listrun'
34  if minrun:
35  command+=' --minrun '+str(minrun)
36  statusAndOutput = commands.getstatusoutput(command)
37  rlist= eval(statusAndOutput[1])
38  if rlist:
39  lastAnalyzedRunNumber = rlist[-1]
40  print 'Last run in DB: ', lastAnalyzedRunNumber
41  else:
42  print 'No qualified run found in DB'
43  lastAnalyzedRunNumber=int(minrun)
44  # check if there are new runs to be uploaded
45  #command = 'ls -ltr '+dropbox
46  p=re.compile('^CMS_LUMI_RAW_\d\d\d\d\d\d\d\d_\d\d\d\d\d\d\d\d\d_\d\d\d\d_\d.root$')
47  files=filter(os.path.isfile,[os.path.join(dropbox,x) for x in os.listdir(dropbox) if p.match(x)])
48  files.sort(key=lambda x: os.path.getmtime(os.path.join(dropbox,x)))
49  #print 'sorted files ',files
50  #print files
51  #print qualifiedfiles
52  lastRaw=files[-1]
53  lastRecordedRun = getRunnumberFromFileName(lastRaw)
54  print 'Last lumi file produced by HF: ', lastRaw +', Run: ', lastRecordedRun
55 
56  # if yes, fill a list with the runs yet to be uploaded
57  runsToBeAnalyzed = {}
58  if lastRecordedRun != lastAnalyzedRunNumber:
59  for file in files:
60  if len(file.split('_'))!=7: continue
61  thisrun=getRunnumberFromFileName(file)
62  #print 'this run ',thisrun,lastAnalyzedRunNumber
63  #if thisrun>lastAnalyzedRunNumber and isCollisionRun(str(thisrun),authpath):
64  if thisrun>lastAnalyzedRunNumber :
65  runsToBeAnalyzed[str(thisrun)] = file
66  return runsToBeAnalyzed
67 
68 import os, sys
69 from RecoLuminosity.LumiDB import argparse
70 def main():
71  parser = argparse.ArgumentParser(prog=os.path.basename(sys.argv[0]),description="Lumi Data scan")
72  parser.add_argument('-c',dest='connect',action='store',required=True,help='connect string to lumiDB')
73  parser.add_argument('-d',dest='dropbox',action='store',required=True,help='location of the lumi root files')
74  parser.add_argument('-P',dest='authpath',action='store',required=False,help='auth path')
75  parser.add_argument('-L',dest='logpath',action='store',required=False,help='log path')
76  parser.add_argument('-f',dest='loaderconf',action='store',required=True,help='path to loder config file')
77  parser.add_argument('--minrun',dest='minrun',action='store',required=False,help='minimum run to serch')
78  args=parser.parse_args()
79  if args.authpath:
80  lumiauthpath=args.authpath
81  if args.logpath:
82  lumilogpath=args.logpath
83  loaderconf=args.loaderconf
84  runsToBeAnalyzed = getRunsToBeUploaded(args.connect,args.dropbox,lumiauthpath,minrun=args.minrun)
85 
86  runCounter=0
87  rs=runsToBeAnalyzed.keys()
88  rs.sort()
89  for run in rs:
90  runCounter+=1
91  if runCounter==1: print 'List of processed runs: '
92  print 'Run: ', run, ' file: ', runsToBeAnalyzed[run]
93  logFile=open(os.path.join(lumilogpath,'loadDB_run'+run+'.log'),'w',0)
94 
95  # filling the DB
96  command = '$LOCALRT/test/$SCRAM_ARCH/cmmdLoadLumiDB -r '+run+' -L "file:'+runsToBeAnalyzed[run]+'"'+' -f '+loaderconf+' --debug'
97  statusAndOutput = commands.getstatusoutput(command)
98  logFile.write(command+'\n')
99  logFile.write(statusAndOutput[1])
100  if not statusAndOutput[0] == 0:
101  print 'ERROR while loading info onto DB for run ' + run
102  print statusAndOutput[1]
103 
104  # selectstring='"{'+run+':[]}"'
105  # command = 'lumiValidate.py -c '+args.connect+' -P '+ lumiauthpath+' -runls '+selectstring+' update'
106  # statusAndOutput = commands.getstatusoutput(command)
107  # logFile.write(command+'\n')
108  # logFile.write(statusAndOutput[1])
109  # logFile.close()
110  # if not statusAndOutput[0] == 0:
111  # print 'ERROR while applying validation flag to run '+ run
112  # print statusAndOutput[1]
113  if runCounter == 0: print 'No runs to be analyzed'
114 
115 if __name__=='__main__':
116  main()
def getRunsToBeUploaded
Definition: lumiDBFiller.py:30
def getRunnumberFromFileName
Definition: lumiDBFiller.py:26