File indexing completed on 2024-04-06 12:10:44
0001
0002 '''
0003 GetBadEvents.py
0004 v1.0
0005 Jeff Temple
0006 Oct. 19, 2012
0007 '''
0008 from __future__ import print_function
0009
0010 import sys,os,string
0011 from optparse import OptionParser
0012
0013 def GetBadCrabEvents(crabdir=None,prefix=None,verbose=False):
0014 ''' Searches the res/*stdout files in the specified crab output directory "crabdir". For each file, each line is read, and parsed as run:LS:event. If "prefix" is set, any lines not starting with "prefix" are skipped. The list of events "badlist" is returned at the end of the function.'''
0015
0016 badlist=[]
0017 if not os.path.isdir(crabdir):
0018 print("<GetBadEvents> Sorry, directory '%s' does not exist!"%crabdir)
0019 return badlist
0020 newdir=os.path.join(crabdir,'res')
0021 if not os.path.isdir(newdir):
0022 print("<GetBadEvents> Sorry, subdirectory '%s' does not exist!"%newdir)
0023 return badlist
0024
0025 allfiles=sorted(os.listdir(newdir))
0026 for f in allfiles:
0027 if not f.endswith(".stdout"):
0028 continue
0029
0030 temp=open(os.path.join(newdir,f),'r').readlines()
0031 for line in temp:
0032 if prefix!=None and not line.startswith(prefix):
0033 continue
0034 if prefix!=None:
0035 thisline=string.strip(string.split(line,prefix)[1])
0036 else:
0037 thisline=string.strip(line)
0038 try:
0039
0040 myevt=string.split(thisline,":")
0041 run=string.atoi(myevt[0])
0042 ls=string.atoi(myevt[1])
0043 evt=string.atoi(myevt[2])
0044
0045
0046
0047 except:
0048 print("<GetBadEvents> Error! Cannot understand string '%s'"%thisline)
0049 continue
0050 if thisline not in badlist:
0051 badlist.append(thisline)
0052 else:
0053 if verbose:
0054 print("<GetBadEvents> Warning! Event %s already in list!"%thisline)
0055
0056 return badlist
0057
0058
0059
0060
0061 if __name__=="__main__":
0062 parser=OptionParser()
0063 parser.add_option("-v","--verbose",
0064 dest="verbose",
0065 action="store_true",
0066 default=False,
0067 help="If specified, extra debug information is printed.")
0068 parser.add_option("-p","--prefix",
0069 default=None,
0070 dest="prefix",
0071 help="If prefix specified, only lines beginning with specified prefix are parsed as Run:LS:Event")
0072 parser.add_option("-o","--outfile",
0073 dest="outfile",
0074 default="badevents.txt",
0075 help="Specify name of output file. Default is badevents.txt")
0076 parser.add_option("-n","--nocrab",
0077 dest="nocrab",
0078 default=False,
0079 action="store_true",
0080 help="If specified, combines all command-line input files into a single output, instead of assuming a CRAB output directory and parsing subdirs for *.stdout files. Default is False (meaning that a CRAB structure is assumed).")
0081 (opts,args)=parser.parse_args()
0082
0083 allbadevents=[]
0084 if (opts.nocrab==False):
0085 for dir in args:
0086 badlist=GetBadCrabEvents(crabdir=dir,
0087 prefix=opts.prefix,
0088 verbose=opts.verbose)
0089 print("Total bad events with prefix '%s' in directory '%s' is %i"%(opts.prefix,dir,len(badlist)))
0090
0091 for b in badlist:
0092 if b not in allbadevents:
0093 allbadevents.append(b)
0094
0095 else:
0096 for infile in args:
0097 if not os.path.isfile(infile):
0098 print("Sorry, input file '%s' does not exist"%infile)
0099 continue
0100 print("Reading input file '%s'"%infile)
0101 events=open(infile,'r').readlines()
0102 for e in events:
0103 temp=string.strip(e)
0104 if temp not in allbadevents:
0105 allbadevents.append(temp)
0106
0107 print("Total bad events found = ",len(allbadevents))
0108 outfile=open(opts.outfile,'w')
0109 print("Sorting list of %i bad events"%len(allbadevents))
0110 allbadevents.sort()
0111 for b in allbadevents:
0112 outfile.write("%s\n"%b)
0113 outfile.close()
0114