File indexing completed on 2023-03-17 10:42:22
0001 from __future__ import print_function
0002 import os,sys,imp
0003 import subprocess
0004 import logging
0005 import fnmatch
0006 import signal
0007
0008 log = logging.getLogger(__name__)
0009
0010 def replaceTemplate(template,**opts):
0011 result = open(template).read()
0012 for item in opts:
0013 old = '@@%s@@'%item
0014 new = str(opts[item])
0015 print("Replacing",old,"to",new)
0016 result = result.replace(old,new)
0017
0018 return result
0019
0020 def getDatasetStr(datasetpath):
0021 datasetstr = datasetpath
0022 datasetstr.strip()
0023 if datasetstr[0] == '/': datasetstr = datasetstr[1:]
0024 datasetstr = datasetstr.replace('/','_')
0025
0026 return datasetstr
0027
0028 def listFilesLocal(paths, extension = '.root'):
0029 file_paths = []
0030 for path in paths:
0031 if not os.path.exists( path ):
0032 log.error( "Specified input path '%s' does not exist!" % path )
0033 continue
0034 if path.endswith( extension ):
0035 file_paths.append( path )
0036 for root, dirnames, filenames in os.walk( path ):
0037 for filename in fnmatch.filter( filenames, '*' + extension ):
0038 file_paths.append( os.path.join( root, filename ) )
0039 return file_paths
0040
0041 def haddLocal(localdir,result_file,extension = 'root'):
0042 if not os.path.exists( localdir ):
0043 raise ValueError("localdir for hadd operation does not exist" )
0044
0045 files = listFilesLocal([localdir],extension)
0046 process = subprocess.Popen( ['hadd','-f', result_file] + files,
0047 stdout=subprocess.PIPE,
0048 stderr=subprocess.STDOUT)
0049 stdout = process.communicate()[0]
0050 return process.returncode
0051
0052 def loadCmsProcessFile(psetName):
0053 pset = imp.load_source("psetmodule",psetName)
0054 return pset.process
0055
0056 def loadCmsProcess(psetPath):
0057 module = __import__(psetPath)
0058 process = sys.modules[psetPath].process
0059
0060 import copy
0061
0062
0063 processNew = copy.copy(process)
0064 return processNew
0065
0066 def prependPaths(process,seqname):
0067 for path in process.paths:
0068 getattr(process,path)._seq = getattr(process,seqname)*getattr(process,path)._seq
0069
0070 def stdinWait(text, default, time, timeoutDisplay = None, **kwargs):
0071
0072 signal.signal(signal.SIGALRM, interrupt)
0073 signal.alarm(time)
0074 global timeout
0075 try:
0076 inp = raw_input(text)
0077 signal.alarm(0)
0078 timeout = False
0079 except (KeyboardInterrupt):
0080 printInterrupt = kwargs.get("printInterrupt", True)
0081 if printInterrupt:
0082 print("Keyboard interrupt")
0083 timeout = True
0084 inp = default
0085 except:
0086 timeout = True
0087 if not timeoutDisplay is None:
0088 print(timeoutDisplay)
0089 signal.alarm(0)
0090 inp = default
0091 return inp
0092
0093 def interrupt(signum, frame):
0094 raise Exception("")
0095
0096 def getTerminalSize():
0097
0098
0099 env = os.environ
0100 def ioctl_GWINSZ(fd):
0101 try:
0102 import fcntl, termios, struct, os
0103 cr = struct.unpack('hh', fcntl.ioctl(fd, termios.TIOCGWINSZ,
0104 '1234'))
0105 except:
0106 return
0107 return cr
0108 cr = ioctl_GWINSZ(0) or ioctl_GWINSZ(1) or ioctl_GWINSZ(2)
0109 if not cr:
0110 try:
0111 fd = os.open(os.ctermid(), os.O_RDONLY)
0112 cr = ioctl_GWINSZ(fd)
0113 os.close(fd)
0114 except:
0115 pass
0116 if not cr:
0117 cr = (env.get('LINES', 25), env.get('COLUMNS', 80))
0118
0119
0120
0121
0122
0123
0124 return int(cr[1]), int(cr[0])