13 from basf2
import conditions
as b2conditions
14 from basf2
import create_path, process
15 from basf2
import B2FATAL, B2INFO, B2WARNING
19 from caf.backends
import get_input_data
24 Runs the CAF collector in a general way by passing serialised basf2 paths, input file
25 locations, and local databases from previous calibrations.
33 with open(
"collector_config.json",
"r")
as config_file:
34 config = json.load(config_file)
40 b2conditions.override_globaltags()
42 for db_type, database
in config[
"database_chain"]:
43 if db_type ==
"local":
44 B2INFO(f
"Adding Local Database {database[0]} to head of chain of local databases.")
45 b2conditions.prepend_testing_payloads(database[0])
47 B2INFO(f
"Using Global Tag {database}.")
48 b2conditions.prepend_globaltag(database)
51 collector_path = create_path()
55 pre_collector_path_name =
"pre_collector.path"
56 pickle_paths = glob.glob(
"./*.path")
59 pickle_paths =
filter(
lambda x: pre_collector_path_name
not in x, pickle_paths)
62 if os.path.exists(pre_collector_path_name):
63 collector_path.add_path(get_path_from_file(pre_collector_path_name))
65 B2INFO(
"Couldn't find any pickle files for pre-collector setup")
69 for pickle_path
in pickle_paths:
70 collector_path.add_path(get_path_from_file(pickle_path))
72 B2FATAL(
"Couldn't find any pickle files for collector path!")
75 input_data = get_input_data()
80 from caf.utils
import PathExtras
81 pe = PathExtras(collector_path)
83 root_input_mod = collector_path.modules()[pe.index(
"RootInput")]
84 root_input_mod.param(
"inputFileNames", input_data)
85 input_entry_sequences = get_entry_sequences(root_input_mod)
88 if len(input_entry_sequences) == 1
and len(input_data) > 1:
89 root_input_mod.param(
"entrySequences", len(input_data)*input_entry_sequences)
90 elif "SeqRootInput" in pe:
91 root_input_mod = collector_path.modules()[pe.index(
"SeqRootInput")]
92 root_input_mod.param(
"inputFileNames", input_data)
94 main.add_module(
"RootInput", inputFileNames=input_data)
96 if "HistoManager" not in pe:
97 main.add_module(
"HistoManager", histoFileName=
"CollectorOutput.root")
99 main.add_path(collector_path)
100 basf2.print_path(main)
102 print(basf2.statistics)
105 def get_entry_sequences(root_input_module):
107 Finds the value of entrySequences (list) from the RootInput module.
109 for module_param_info
in root_input_module.available_params():
110 if module_param_info.name ==
"entrySequences":
111 entry_sequences = module_param_info.values
114 B2WARNING((
"entrySequences ModuleParamInfo couldn't be found! "
115 "Setting to empty list but this indicates that this script is out of date!"))
117 return entry_sequences
120 if __name__ ==
"__main__":
std::map< ExpRun, std::pair< double, double > > filter(const std::map< ExpRun, std::pair< double, double >> &runs, double cut, std::map< ExpRun, std::pair< double, double >> &runsRemoved)
filter events to remove runs shorter than cut, it stores removed runs in runsRemoved