00001
00002
00003
00004
00005
00006
00007
00008
00009 import os,os.path,sys
00010 import coral
00011 from RecoLuminosity.LumiDB import argparse,sessionManager,lumiCalcAPI
00012 MINFILL=1800
00013 MAXFILL=9999
00014 allfillname='allfills.txt'
00015
00016 def tofiles(allfills,runsperfill,runtimes,outdir):
00017 f=open(os.path.join(outdir,allfillname),'w')
00018 for fill in allfills:
00019 print >>f,'%d'%(fill)
00020 f.close()
00021 for fill,runs in runsperfill.items():
00022 filename='fill_'+str(fill)+'.txt'
00023 if len(runs)!=0:
00024 f=open(os.path.join(outdir,filename),'w')
00025 for run in runs:
00026 print >>f,'%d,%s'%(run,runtimes[run])
00027 f.close()
00028 if __name__ == '__main__':
00029 parser = argparse.ArgumentParser(prog=os.path.basename(sys.argv[0]),description = "Dump Fill",formatter_class=argparse.ArgumentDefaultsHelpFormatter)
00030
00031 parser.add_argument('-c',dest='connect',action='store',required=False,help='connect string to lumiDB,optional',default='frontier://LumiCalc/CMS_LUMI_PROD')
00032 parser.add_argument('-P',dest='authpath',action='store',help='path to authentication file,optional')
00033 parser.add_argument('-o',dest='outputdir',action='store',required=False,help='output dir',default='.')
00034 parser.add_argument('--amodetag',dest='amodetag',action='store',required=False,help='amodetag',default='PROTPHYS')
00035 parser.add_argument('-f','--fill',
00036 dest='fillnum',
00037 action='store',
00038 required=False,
00039 help='specific fill',default=None)
00040 parser.add_argument('--minfill',dest='minfill',
00041 type=int,
00042 action='store',
00043 required=False,
00044 default=MINFILL,
00045 help='min fill')
00046 parser.add_argument('--maxfill',dest='maxfill',
00047 type=int,
00048 action='store',
00049 required=False,
00050 default=MAXFILL,
00051 help='maximum fillnumber '
00052 )
00053 parser.add_argument('-siteconfpath',dest='siteconfpath',action='store',help='specific path to site-local-config.xml file, optional. If path undefined, fallback to cern proxy&server')
00054 parser.add_argument('--debug',dest='debug',action='store_true',help='debug')
00055 options=parser.parse_args()
00056 if options.authpath:
00057 os.environ['CORAL_AUTH_PATH'] = options.authpath
00058 svc=sessionManager.sessionManager(options.connect,authpath=options.authpath,debugON=options.debug)
00059 session=svc.openSession(isReadOnly=True,cpp2sqltype=[('unsigned int','NUMBER(10)'),('unsigned long long','NUMBER(20)')])
00060
00061 session.transaction().start(True)
00062 allfills=lumiCalcAPI.fillInRange(session.nominalSchema(),fillmin=options.minfill,fillmax=options.maxfill,amodetag=options.amodetag)
00063 if len(allfills)==0:
00064 print 'no qualified fills found, do nothing... '
00065 exit(-1)
00066 allfills.sort()
00067 runsperfill={}
00068 runtimes={}
00069 irunlsdict={}
00070 if options.fillnum:
00071 if int(options.fillnum) in allfills:
00072 runsperfill=lumiCalcAPI.fillrunMap(session.nominalSchema(),fillnum=int(options.fillnum))
00073 allruns=runsperfill[ int(options.fillnum) ]
00074 allls=[None]*len(allruns)
00075 irunlsdict=dict(zip(allruns,allls))
00076 runresults=lumiCalcAPI.runsummary(session.nominalSchema(),irunlsdict)
00077 for r in runresults:
00078 runtimes[r[0]]=r[7]
00079 else:
00080 for fill in allfills:
00081 runtimes={}
00082 runsperfill=lumiCalcAPI.fillrunMap(session.nominalSchema(),fillnum=fill)
00083 runs=runsperfill.values()
00084 allruns=[item for sublist in runs for item in sublist]
00085 allls=[None]*len(allruns)
00086 irunlsdict=dict(zip(allruns,allls))
00087 runresults=lumiCalcAPI.runsummary(session.nominalSchema(),irunlsdict)
00088 for r in runresults:
00089 runtimes[r[0]]=r[7]
00090 tofiles(allfills,runsperfill,runtimes,options.outputdir)
00091 session.transaction().commit()
00092
00093