00001
00002 import sys, imp
00003 import os
00004 import commands
00005
00006 from optparse import OptionParser
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 parser = OptionParser(usage="Example: ./PDRates.py --runNumber 146644 --PD Mu --perLS")
00021 parser.add_option("--runNumber", dest="RunNumber", help="run number", type="int", metavar="RunNumber")
00022 parser.add_option("--PD",dest="PrimaryDataset",help="PD name",metavar="PrimaryDataset")
00023 parser.add_option("--perLS",action="store_true",default=False,dest="perLS",help="plot the rate vs the LS number",metavar="perLS")
00024 parser.add_option("--logy",action="store_true",default=False,dest="logy",help="log scale for the y axis",metavar="logy")
00025 parser.add_option("--saveplot",action="store_true",default=False,dest="saveplot",help="save the plot as a tmp.eps",metavar="saveplot")
00026 (options, args) = parser.parse_args()
00027
00028
00029 def PrimaryDatasets(Run):
00030
00031
00032 dbs_cmd = """ dbs search --query='find primds.name
00033 where run=%d and dataset like */RAW' """ % (Run)
00034 rows = commands.getoutput(dbs_cmd)
00035 lines = rows.split("\n")
00036 j=0
00037 print "\nThe primary datasets for this run are: \n"
00038 for Line in lines:
00039 j=j+1
00040 if j <=4:
00041 continue
00042 print Line
00043 line=Line.split()
00044 Datasets.append(line[0])
00045 print " "
00046
00047
00048
00049 def RateInPD(Run,PrimaryDataset,lsMin,lsMax,printLS=False):
00050 dbs_cmd = """ dbs search --query='find file,lumi,file.numevents, file.size
00051 where run=%d and dataset like /%s/*/RAW
00052 and lumi >= %d and lumi <= %d
00053 and file.status=VALID '""" % (Run, PrimaryDataset,lsMin, lsMax)
00054 rows = commands.getoutput(dbs_cmd)
00055 lines = rows.split("\n")
00056 j=0
00057 LumiSections = []
00058 Files = []
00059 Evts = 0
00060 Size = 0
00061 LSinFile = {}
00062 NumberOfLSInFile = {}
00063 for Line in lines:
00064 j=j+1
00065 if j <=4:
00066 continue
00067 line=Line.split()
00068 LS = line[1]
00069 file = line[0]
00070 Nevts = int(line[2])
00071 size = int(line[3])
00072 LSinFile[LS] = file
00073 if LumiSections.count(LS) == 0:
00074 LumiSections.append(LS)
00075 if Files.count(file) == 0:
00076 Files.append(file)
00077 Evts += Nevts
00078 Size += size
00079 NumberOfLSInFile[file] =1
00080 else:
00081 NumberOfLSInFile[file] = NumberOfLSInFile[file]+1
00082 RatePerLS[LS] = Nevts
00083
00084 Number_of_LS = len(LumiSections)
00085 LS_Length = 23.3
00086 if Run < 125100:
00087 LS_Length = 93.3
00088 rate = Evts / (Number_of_LS * LS_Length)
00089 if Evts > 0:
00090 size_per_event = (Size / Evts) / 1000.
00091 else:
00092 size_per_event=-1
00093 print "Rate in \t",PrimaryDataset,"\t is : \t",rate," Hz", " \t size is : \t",size_per_event, "kB / event "
00094
00095 lsmin=9999999
00096 lsmax=-1
00097 for (LS,file) in LSinFile.iteritems():
00098 nls = NumberOfLSInFile[file]
00099 RatePerLS[LS] = RatePerLS[LS] / nls
00100 RatePerLS[LS] = RatePerLS[LS] / LS_Length
00101 if int(LS) > lsmax:
00102 lsmax=int(LS)
00103 if int(LS) < lsmin:
00104 lsmin=int(LS)
00105 if printLS:
00106 print "lsmin lsmax",lsmin,lsmax
00107 for ls in range(lsmin,lsmax):
00108 if not `ls` in RatePerLS.keys():
00109 RatePerLS[LS] = 0
00110 print "Missing LS ",ls
00111
00112
00113 if __name__ == "__main__":
00114
00115 if not options.RunNumber:
00116 print "wrong usage"
00117 exit(2)
00118
00119 lsMin = -1
00120 lsMax = 999999
00121
00122
00123
00124
00125
00126
00127
00128
00129 print "\nRun Number: ",options.RunNumber
00130 if options.PrimaryDataset:
00131 Run = options.RunNumber
00132 PrimaryDataset = options.PrimaryDataset
00133 RatePerLS = {}
00134 if not options.perLS:
00135 RateInPD(Run,PrimaryDataset,lsMin, lsMax, False)
00136 if options.perLS:
00137 average = 0
00138 nLS_within_range = 0
00139 RateInPD(Run,PrimaryDataset,lsMin, lsMax, True)
00140 RatesTmp = open("rates_tmp.txt","w")
00141
00142 for (LS, rate) in RatePerLS.iteritems():
00143 RatesTmp.write(LS+"\t"+`rate`+"\n")
00144
00145
00146
00147
00148
00149
00150
00151 RatesTmp.close()
00152
00153 TempFile = open("tmp.gnuplot.txt","w")
00154 if options.logy:
00155 TempFile.write("set logscale y \n")
00156 if options.saveplot:
00157 TempFile.write("set term postscript eps enhanced \n")
00158 TempFile.write("set output \"tmp.eps\" \n")
00159 st_title = " \"Rates in PrimaryDataset " + PrimaryDataset+ " in Run " + `Run`+ "\" "
00160 TempFile.write("set title " + st_title + "\n")
00161 TempFile.write(" set pointsize 2. \n")
00162 TempFile.write(" set nokey \n")
00163 TempFile.write(" set xlabel \"LS number\" \n")
00164 TempFile.write(" set ylabel \"Rate (Hz)\" \n")
00165 TempFile.write(" plot \"rates_tmp.txt\" using 1:2 title 'Rate per LS' \n")
00166 if not options.saveplot:
00167 TempFile.write(" pause -1")
00168 else:
00169 print "The plot is saved under tmp.eps"
00170 TempFile.close()
00171
00172 os.system("gnuplot tmp.gnuplot.txt")
00173
00174
00175 else:
00176 Run = options.RunNumber
00177 Datasets = []
00178 PrimaryDatasets(Run)
00179 for PrimaryDataset in Datasets:
00180 RatePerLS = {}
00181 RateInPD(Run,PrimaryDataset,lsMin,lsMax)
00182
00183
00184