print '[INFO] drawing all from old plot data' else: print '[INFO] found no old nor new data, do nothing' exit(0) finecorrections=None driftcorrections=None if not options.withoutCorrection: rruns=runlsfromDB.keys() session.transaction().start(True) schema=session.nominalSchema() if options.correctionv3: cterms=lumiCorrections.nonlinearV3() else:#default cterms=lumiCorrections.nonlinearV2() finecorrections=lumiCorrections.correctionsForRangeV2(schema,rruns,cterms)#constant+nonlinear corrections driftcorrections=lumiCorrections.driftcorrectionsForRange(schema,rruns,cterms) session.transaction().commit() session.transaction().start(True) if not options.hltpath: lumibyls=lumiCalcAPI.lumiForRange(session.nominalSchema(),runlsfromDB,amodetag=options.amodetag,egev=options.beamenergy,beamstatus=pbeammode,norm=normfactor,finecorrections=finecorrections,driftcorrections=driftcorrections,usecorrectionv2=True) else: referenceLabel='Recorded' hltname=options.hltpath hltpat=None if hltname=='*' or hltname=='all': hltname=None elif 1 in [c in hltname for c in '*?[]']: #is a fnmatch pattern hltpat=hltname hltname=None lumibyls=lumiCalcAPI.effectiveLumiForRange(session.nominalSchema(),runlsfromDB,hltpathname=hltname,hltpathpattern=hltpat,amodetag=options.amodetag,egev=options.beamenergy,beamstatus=pbeammode,norm=normfactor,finecorrections=finecorrections,driftcorrections=driftcorrections,usecorrectionv2=True)
def getSpecificLumi(schema,fillnum,inputdir,xingMinLum=0.0,norm='pp7TeV',withcorrection=True,amodetag='PROTPHYS',bxAlgo='OCC1'): ''' specific lumi in 1e-30 (ub-1s-1) unit lumidetail occlumi in 1e-27 1309_lumi_401_CMS.txt time(in seconds since January 1,2011,00:00:00 UTC) stab(fraction of time spent in stable beams for this time bin) l(lumi in Hz/ub) dl(point-to-point error on lumi in Hz/ub) sl(specific lumi in Hz/ub) dsl(error on specific lumi) 20800119.0 1 -0.889948 0.00475996848729 0.249009 0.005583287562 -0.68359 6.24140208607 0.0 0.0 0.0 0.0 0.0 0.0 0.0383576 0.00430892097862 0.0479095 0.00430892097862 66.6447 4.41269758764 0.0 0.0 0.0 result [(time,beamstatusfrac,lumi,lumierror,speclumi,speclumierror)] ''' t=lumiTime.lumiTime() fillbypos={}#{bxidx:[[ts,beamstatusfrac,lumi,lumierror,spec1,specerror],[]]} runtimesInFill=getFillFromDB(schema,fillnum)#{runnum:starttimestr} runlist=runtimesInFill.keys() if not runlist: return fillbypos irunlsdict=dict(zip(runlist,[None]*len(runlist))) #print irunlsdict finecorrections=None driftcorrections=None if withcorrection : cterms=lumiCorrections.nonlinearV2() finecorrections=lumiCorrections.correctionsForRangeV2(schema,runlist,cterms)#constant+nonlinear corrections driftcorrections=lumiCorrections.driftcorrectionsForRange(schema,runlist,cterms) lumidetails=lumiCalcAPI.instCalibratedLumiForRange(schema,irunlsdict,beamstatus=None,amodetag=amodetag,withBXInfo=True,withBeamIntensity=True,bxAlgo=bxAlgo,xingMinLum=xingMinLum,norm=norm,finecorrections=finecorrections,driftcorrections=driftcorrections,usecorrectionv2=True) session.transaction().commit() # #output: {run:[lumilsnum(0),cmslsnum(1),timestamp(2),beamstatus(3),beamenergy(4),calibratedlumi(5),calibratedlumierr(6),startorbit(7),numorbit(8),(bxvalues,bxerrs)(9),(bxidx,b1intensities,b2intensities)(10)]}} # totalstablebeamls=0 orderedrunlist=sorted(lumidetails) for run in orderedrunlist: perrundata=lumidetails[run] for perlsdata in perrundata: beamstatus=perlsdata[3] if beamstatus=='STABLE BEAMS': totalstablebeamls+=1 #print 'totalstablebeamls in fill ',totalstablebeamls if totalstablebeamls<10:#less than 10 LS in a fill has 'stable beam', it's no a good fill print 'fill ',fillnum,' , having less than 10 stable beam lS, is not good, skip' return fillbypos for run in orderedrunlist: perrundata=lumidetails[run] for perlsdata in perrundata: beamstatusfrac=0.0 tsdatetime=perlsdata[2] ts=calendar.timegm(tsdatetime.utctimetuple()) beamstatus=perlsdata[3] if beamstatus=='STABLE BEAMS': beamstatusfrac=1.0 (bxidxlist,bxvaluelist,bxerrolist)=perlsdata[9] maxlumi=0.0 if len(bxvaluelist)!=0: maxlumi=max(bxvaluelist) avginstlumi=0.0 if len(bxvaluelist)!=0: avginstlumi=sum(bxvaluelist) (intbxidxlist,b1intensities,b2intensities)=perlsdata[10]#contains only non-zero bx for bxidx in bxidxlist: idx=bxidxlist.index(bxidx) bxvalue=bxvaluelist[idx] bxerror=bxerrolist[idx] if bxvalue<max(xingMinLum,maxlumi*0.2): continue bintensityPos=-1 try: bintensityPos=intbxidxlist.index(bxidx) except ValueError: pass if bintensityPos<=0: fillbypos.setdefault(bxidx,[]).append([ts,beamstatusfrac,bxvalue,bxerror,0.0,0.0]) continue b1intensity=b1intensities[bintensityPos] b2intensity=b2intensities[bintensityPos] speclumi=calculateSpecificLumi(bxvalue,bxerror,b1intensity,0.0,b2intensity,0.0) fillbypos.setdefault(bxidx,[]).append([ts,beamstatusfrac,bxvalue,bxerror,speclumi[0],speclumi[1]]) return fillbypos