File indexing completed on 2024-04-06 11:58:29
0001 from __future__ import print_function
0002 from __future__ import absolute_import
0003 import sys,os,time
0004 import subprocess
0005 from .tools import loadCmsProcess
0006 from .DTWorkflow import DTWorkflow
0007 from .DTTtrigWorkflow import DTttrigWorkflow
0008 from .DTVdriftWorkflow import DTvdriftWorkflow
0009 from .DTT0WireWorkflow import DTT0WireWorkflow
0010 import logging
0011
0012 log = logging.getLogger(__name__)
0013
0014
0015 class DTCalibrationWorker(object):
0016 """ This class serves as a top level helper to perform all available
0017 workflows. Additional workflow classes should use the naming scheme
0018 DT${WORKFLOWNAME}Workflow and implement a classmethod function add_parser_options.
0019 """
0020 available_workflows = ["ttrig","vdrift","T0Wire"]
0021 def __init__(self, options):
0022 self.options = options
0023 if not self.has_crab3_env:
0024 self.setup_crab_env()
0025
0026 def run(self):
0027
0028 class_name = "DT" + self.options.workflow + "Workflow"
0029 workflow_class = eval(class_name)
0030 workflow_class_instance = workflow_class(self.options)
0031 workflow_class_instance.run()
0032 return workflow_class_instance.local_path
0033
0034 @property
0035 def has_crab3_env(self):
0036 if not "/crabclient/3" in os.environ["PATH"]:
0037 return False
0038 return True
0039
0040 def setup_crab_env(self):
0041
0042
0043 command = ['bash', '-c', 'unset module;source /cvmfs/cms.cern.ch/crab3/crab.sh && env']
0044 proc = subprocess.Popen(command, executable = '/bin/bash', stdout = subprocess.PIPE)
0045
0046 print('setting up crab')
0047 for line in proc.stdout:
0048 (key, _, value) = line.partition(b"=")
0049 os.environ[key.decode()] = value.decode().replace("\n","")
0050 for path in os.environ['PYTHONPATH'].split(':'):
0051 sys.path.append(path)
0052 proc.communicate()
0053
0054 @classmethod
0055 def add_arguments(cls, parser):
0056 workflow_parser = DTWorkflow.add_parser_options(parser)
0057 for workflow in cls.available_workflows:
0058 class_name = "DT" + workflow + "Workflow"
0059 try:
0060 workflow_class = eval( class_name )
0061 workflow_class.add_parser_options(workflow_parser)
0062 except:
0063 log.error("No class with name: %s exists but workflow exists in %s" %
0064 (class_name, DTCalibrationWorker)
0065 )
0066