5 from basf2
import conditions
as b2conditions
6 from basf2
import create_path, process
7 from basf2
import B2FATAL, B2INFO, B2WARNING
11 from caf.backends
import get_input_data
16 Runs the CAF collector in a general way by passing serialised basf2 paths, input file
17 locations, and local databases from previous calibrations.
25 with open(
"collector_config.json",
"r")
as config_file:
26 config = json.load(config_file)
32 b2conditions.override_globaltags()
34 for db_type, database
in config[
"database_chain"]:
35 if db_type ==
"local":
36 B2INFO(f
"Adding Local Database {database[0]} to head of chain of local databases.")
37 b2conditions.prepend_testing_payloads(database[0])
39 B2INFO(f
"Using Global Tag {database}.")
40 b2conditions.prepend_globaltag(database)
43 collector_path = create_path()
47 pre_collector_path_name =
"pre_collector.path"
48 pickle_paths = glob.glob(
"./*.path")
51 pickle_paths =
filter(
lambda x: pre_collector_path_name
not in x, pickle_paths)
54 if os.path.exists(pre_collector_path_name):
55 collector_path.add_path(get_path_from_file(pre_collector_path_name))
57 B2INFO(
"Couldn't find any pickle files for pre-collector setup")
61 for pickle_path
in pickle_paths:
62 collector_path.add_path(get_path_from_file(pickle_path))
64 B2FATAL(
"Couldn't find any pickle files for collector path!")
67 input_data = get_input_data()
72 from caf.utils
import PathExtras
73 pe = PathExtras(collector_path)
75 root_input_mod = collector_path.modules()[pe.index(
"RootInput")]
76 root_input_mod.param(
"inputFileNames", input_data)
77 input_entry_sequences = get_entry_sequences(root_input_mod)
80 if len(input_entry_sequences) == 1
and len(input_data) > 1:
81 root_input_mod.param(
"entrySequences", len(input_data)*input_entry_sequences)
82 elif "SeqRootInput" in pe:
83 root_input_mod = collector_path.modules()[pe.index(
"SeqRootInput")]
84 root_input_mod.param(
"inputFileNames", input_data)
86 main.add_module(
"RootInput", inputFileNames=input_data)
88 if "HistoManager" not in pe:
89 main.add_module(
"HistoManager", histoFileName=
"CollectorOutput.root")
91 main.add_path(collector_path)
92 basf2.print_path(main)
94 print(basf2.statistics)
97 def get_entry_sequences(root_input_module):
99 Finds the value of entrySequences (list) from the RootInput module.
101 for module_param_info
in root_input_module.available_params():
102 if module_param_info.name ==
"entrySequences":
103 entry_sequences = module_param_info.values
106 B2WARNING((
"entrySequences ModuleParamInfo couldn't be found! "
107 "Setting to empty list but this indicates that this script is out of date!"))
109 return entry_sequences
112 if __name__ ==
"__main__":