12Create a full set of consistent geometry payloads for nominal geometry, Run 0 (phase 2)
13geometry, and Run 1 (early phase 3) geometry from XML files.
15Optionally one can give a list of payload names to keep only a subset of payloads
27interested = sys.argv[1:]
30shutil.rmtree(
"localdb", ignore_errors=
True)
34phase3.add_module(
"EventInfoSetter")
35phase3.add_module(
"Gearbox")
36phase3.add_module(
"Geometry", createPayloads=
True, payloadIov=[0, 0, 0, -1], additionalComponents=[
'FarBeamLine'])
41postLS1.add_module(
"EventInfoSetter")
42postLS1.add_module(
"Gearbox")
43postLS1.add_module(
"Geometry", createPayloads=
True, payloadIov=[1004, 0, 1004, -1], additionalComponents=[
'FarBeamLine'])
48phase2_detectors =
"BeamPipe PXD SVD ServiceGapsMaterial MICROTPC PINDIODE BEAMABORT HE3TUBE CLAWS FANGS PLUME QCSMONITOR".split()
49phase2 = basf2.create_path()
50phase2.add_module(
"EventInfoSetter")
51phase2.add_module(
"Gearbox")
52phase2.add_module(
"Geometry", createPayloads=
True, payloadIov=[1002, 0, 1002, -1],
53 excludedComponents=[
"BeamPipe",
"PXD",
"SVD",
"VXDService",
"ServiceGapsMaterial"],
54 additionalComponents=[e +
"-phase2" for e
in phase2_detectors])
61run1.add_module(
"EventInfoSetter")
62run1.add_module(
"Gearbox")
73 'ServiceGapsMaterial',
77 additionalComponents=[
79 'ServiceGapsMaterial-Run1',
88phase2_comp_list = [
"GeoConfiguration",
"PXDGeometryPar",
"SVDGeometryPar",
"BeamPipeGeo",
"ServiceGapsMaterialsPar"]
98 "ServiceGapsMaterialsPar"]
100line_match = re.compile(
r"^dbstore/(.*?) ([0-9a-f]+) ([0-9\-,]*)$")
102with open(
"localdb/database.txt")
as dbfile:
104 match = line_match.search(line)
105 name, revision, iov = match.groups()
107 if interested
and name
not in interested:
110 iov = tuple(int(e)
for e
in iov.split(
','))
112 if name
in phase2_comp_list:
113 keep.add((name, str(revision)))
114 database_content.append(f
'dbstore/{name} {revision} 0,0,0,-1\n')
115 if name
not in run1_comp_list:
116 database_content.append(f
'dbstore/{name} {revision} 1003,0,1003,-1\n')
121 elif iov[0] == 1002
and name
not in phase2_comp_list:
123 elif iov[0] == 1003
and name
not in run1_comp_list:
127 keep.add((name, str(revision)))
128 database_content.append(line)
131database_content.sort()
132with open(
"localdb/database.txt",
"w")
as dbfile:
133 dbfile.writelines(database_content)
136for filename
in os.scandir(
'localdb/'):
137 match = re.match(
r"dbstore_(.*?)_rev_(\d*).root", filename.name)
140 if match
and match.groups()
not in keep:
141 print(f
"Removing {filename.name}: not needed")
142 os.unlink(filename.path)
144 print(f
"Normalizing {filename.name} as '{match.group(1)}'")
145 subprocess.call([
"b2file-normalize",
"-i",
"-n", match.group(1), filename.path])
safe_process(*args, **kwargs)