def __init__(self): """ """ mon = CRMonitor() mon.message(self, "INFO: Initializing ROOT Style.") self.root_style_class = CRTStyle() # create fallbacks self.fill_colors = dict() self.pretty_names = dict() self.stacking_order = [] self.decorator_modules = [] self.main_settings = None # directory names self.DIR_FILESERVICE = "outputFileService/" self.DIR_LOGS = "outputLogs/" self.DIR_CONFS = "outputConfs/" self.DIR_PLOTS = "outputPlots/" self.DIR_JOBINFO = ".jobInfo/" # max num procs import multiprocessing as mp self.max_num_processes = mp.cpu_count() # postfixes for canvas saving self.canvas_postfixes = ['.root']
class CRCentralHistoDispatch(object): """ """ __metaclass__ = CRSingleton class ParseError(Exception): pass def __init__(self): super(CRCentralHistoDispatch, self).__init__() self.open_root_files = {} self.service_files = {} self.message = CRMonitor().get_message_signal() def __del__(self): for tuple in self.open_root_files.items(): tuple[1].Close() del self.open_root_files # TODO: give main_settings at constrction. def build_worker(self, worker_request, processes, main_settings): """ """ self.main_settings = main_settings # make dict of service files for proc in processes: self.service_files[proc.name] = proc.service_filename worker_request.samples = self.check_samples(worker_request.samples) # make worker worker = worker_request.class_ref(main_settings) worker.worker_request = worker_request worker.settings_group = worker_request.settings_group # loop over histogram lists worker_members = getmembers(worker_request) for member in worker_members: # if wrappers have to be build if member[0][:5] == "HIST_": var_name = member[0][5:] histo_token_list = member[1] # loop over histograms wrappers = self.get_histo_wrappers( histo_token_list, worker_request.samples ) setattr(worker, var_name, wrappers) # if wrappers are delivered if member[0][:6] == "READY_": var_name = member[0][6:] wrappers = member[1] setattr(worker, var_name, wrappers) # add decorators for dec_name in worker_request.decorators: if dec_name == "None": continue decorator = root_style.import_decorator(dec_name) if decorator: worker = decorator(worker) else: self.message.emit(self, "WARNING I cannot find a decorator named '"+dec_name+"'") return worker def fill_input_streams(self, in_streams, processes, main_settings): """ """ self.main_settings = main_settings # make dict of service files for proc in processes: self.service_files[proc.name] = proc.service_filename for in_stream in in_streams: in_stream.samples = self.check_samples(in_stream.samples) wrappers = self.get_histo_wrappers( in_stream.histos, in_stream.samples ) in_stream.histo_wrappers = wrappers def check_samples(self, samples): """ """ if samples == ["None"] or samples == [''] or samples == ['All']: samples = self.service_files.keys() else: for sample in samples[:]: if not self.service_files.has_key(sample): samples.remove(sample) return samples def parse_histo_token(self, token): """ Returns 'filepath, [in_file_folders,histoname]', where filename maybe None. """ filename = None if token.count(":"): # special file mode filename, token = token.split(":") #filename = root_style.DIR_PLOTS + "/" + filename if token.count("/"): token = token.split("/") else: token = [token] return filename, token def get_root_file(self, filename): """ """ if self.open_root_files.has_key(filename): file = self.open_root_files[filename] else: file = TFile.Open(filename) self.open_root_files[filename] = file return file def get_histo(self, filename, in_file_path): """ """ file = self.get_root_file(filename) # browse to histogram obj = file for name in in_file_path: obj_key = obj.GetKey(name) if not obj_key: self.message.emit(self, "WARNING I cannot find '" + name + "' in root file '" + filename + "'" ) return None obj = obj_key.ReadObj() histo = obj if hasattr(histo, "Sumw2"): histo.Sumw2() return histo def get_histo_wrappers(self, histo_token_list, samples): """ """ wrappers = [] for histo_token in histo_token_list: # parse histo_token filename, in_file_path = self.parse_histo_token( histo_token ) if filename: # if special file stated histo = self.get_histo(filename, in_file_path) if histo: wrappers.append(CRHistoWrapper(histo)) else: # walk over service files otherwise for sample in samples: filename = self.service_files[sample] histo = self.get_histo(filename, in_file_path) if not histo: continue wrapper = CRHistoWrapper( histo, sample, in_file_path[0] ) self.collect_histogram_info(wrapper) wrappers.append(wrapper) return wrappers def collect_histogram_info(self, wrapper): """ Takes infos from main_settings object and puts into histogram wrappers. """ qset = self.main_settings old_group = qset.group() qset.endGroup() qset.beginGroup(wrapper.sample) # no lumi, no histogram wrapper.lumi, parse_ok = qset.value("lumi", 0.).toDouble() if wrapper.lumi == 0. or not parse_ok: raise self.ParseError,\ "Parsing of lumi value failed for " + wrapper.sample # data or not? wrapper.is_data = qset.value("isData", False).toBool() # mc to be overlayed? wrapper.is_overlay_mc = qset.value("isOverlayMc", False).toBool() # legend entry (if not given, takes wrapper.sample) legend_entry = str(qset.value("legend", wrapper.sample).toString()) wrapper.legend = legend_entry qset.endGroup() # wrapper.sample qset.beginGroup(old_group)
def __init__(self): super(CRCentralHistoDispatch, self).__init__() self.open_root_files = {} self.service_files = {} self.message = CRMonitor().get_message_signal()
def __init__(self): super(CRPostProcTool, self).__init__() crm = CRMonitor() crm.connect_post_processing_tool(self)