Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2024-11-26 02:34:09

0001 #!/usr/bin/env python3
0002 
0003 from contentValuesLib import *
0004 
0005 class OptionParser(optparse.OptionParser):
0006   """ Option parser class """
0007   def __init__(self):
0008     optparse.OptionParser.__init__(self, usage="%prog [options] root_file ...", version="%prog 0.0.1", conflict_handler="resolve")
0009     self.add_option("--silent", "-s", action="store_true", dest="silent", default=False, help="silent mode: specify return code and exit")
0010     self.add_option("--subsystem", "-c", action="store", type="string", dest="subsystem", default=None, help="Specify test subsystem")
0011 
0012 if __name__ == "__main__":
0013   
0014   # Create option parser and get options/arguments
0015   optManager  = OptionParser()
0016   (opts, args) = optManager.parse_args()
0017   opts = opts.__dict__
0018 
0019   # Check if at least one root file defined (can be many!)
0020   if len(args) == 0:
0021     print("At least one ROOT file must be priovided, use --help for hit")
0022     sys.exit(1)
0023 
0024   # Check if all files exists and are accessible
0025   for rfile in args:
0026     try:
0027       os.stat(rfile)
0028     except:
0029       print("File [", rfile, "] not exists or is not accessible?")
0030       sys.exit(2)
0031 
0032   ss = opts['subsystem']
0033 
0034   # Lets extract values from files one-by-one, construct hashmap and check values
0035   for rfile in args:
0036 
0037     (run_number, values) = getSummaryValues(file_name = rfile, shift_type = None, translate = False, filters = None)
0038 
0039     if values == None or len(values) == 0:
0040       print("No content summary values found. Skipping file: %s" % rfile)
0041       continue
0042 
0043     messages = []
0044     for sub in SUBSYSTEMS.keys():
0045 
0046       if not ss == None and not sub == ss:
0047         continue
0048 
0049       if sub not in values:
0050         messages.append("%s: missing subsystem!" % sub)
0051         continue
0052 
0053       skeys = {}
0054       sfolders = []
0055 
0056       for folder in FOLDERS.keys():
0057 
0058         if folder not in values[sub]:
0059           messages.append("%s: missing folder EventInfo/%s" % (sub, folder))
0060           continue
0061 
0062         if len(values[sub][folder]) == 0:
0063           messages.append("%s: empty folder EventInfo/%s" % (sub, FOLDERS[folder][1]))
0064           continue
0065 
0066         sfolders.append(folder)
0067 
0068         if 'Summary' not in values[sub][folder]:
0069           messages.append("%s: missing summary value EventInfo/%s" % (sub, FOLDERS[folder][1]))
0070 
0071         for key in values[sub][folder].keys():
0072           if key == 'Summary':
0073             continue
0074           if key not in skeys:
0075             skeys[key] = []
0076           skeys[key].append(folder)
0077           
0078       for key in skeys:
0079         nfound = []
0080         for folder in sfolders:
0081           if skeys[key].count(folder) == 0: nfound.append(folder)
0082         if len(nfound) > 0:
0083           messages.append("%s: value (%s)/%s not found in (%s)" % (sub, ','.join(skeys[key]), key, ','.join(nfound)))
0084 
0085     if not opts['silent']:
0086       for message in sorted(messages):  print(message)          
0087       print("%d errors found" % len(messages))
0088 
0089     if len(messages) > 0: sys.exit(1)
0090 
0091   sys.exit(0)
0092 
0093