6 Create a full set of consistent geometry payloads for nominal geometry, phase 2
7 geometry, and early phase 3 gometry from XML files.
9 Optionally one can give a list of payload names to keep only a subset of payloads
20 interested = sys.argv[1:]
23 shutil.rmtree(
"localdb", ignore_errors=
True)
27 phase3.add_module(
"EventInfoSetter")
28 phase3.add_module(
"Gearbox")
29 phase3.add_module(
"Geometry", createPayloads=
True, payloadIov=[0, 0, -1, -1])
34 phase2_detectors =
"BeamPipe PXD SVD ServiceGapsMaterial MICROTPC PINDIODE BEAMABORT HE3TUBE CLAWS FANGS PLUME QCSMONITOR".split()
35 phase2 = basf2.create_path()
36 phase2.add_module(
"EventInfoSetter")
37 phase2.add_module(
"Gearbox")
38 phase2.add_module(
"Geometry", createPayloads=
True, payloadIov=[1002, 0, 1002, -1],
39 excludedComponents=[
"BeamPipe",
"PXD",
"SVD",
"VXDService",
"ServiceGapsMaterial"],
40 additionalComponents=[e +
"-phase2" for e
in phase2_detectors])
45 early3.add_module(
"EventInfoSetter")
46 early3.add_module(
"Gearbox")
47 early3.add_module(
"Geometry", createPayloads=
True, payloadIov=[1003, 0, 1003, -1],
48 excludedComponents=[
'PXD',
"ServiceGapsMaterial"],
49 additionalComponents=[
'PXD-earlyPhase3',
'ServiceGapsMaterial-earlyPhase3'])
55 phase2 = [
"GeoConfiguration",
"PXDGeometryPar",
"SVDGeometryPar",
"BeamPipeGeo",
"ServiceGapsMaterialsPar"]
58 early3 = [
"PXDGeometryPar"]
60 line_match = re.compile(
r"^dbstore/(.*?) (\d+) ([0-9\-,]*)$")
62 with open(
"localdb/database.txt")
as dbfile:
64 match = line_match.search(line)
65 name, revision, iov = match.groups()
66 revision = int(revision)
68 if interested
and name
not in interested:
71 iov = tuple(int(e)
for e
in iov.split(
','))
74 keep.add((name, str(revision)))
75 database_content.append(f
'dbstore/{name} {revision} 0,0,0,-1\n')
76 if name
not in early3:
77 database_content.append(f
'dbstore/{name} {revision} 1003,0,1003,-1\n')
82 elif iov[0] == 1002
and name
not in phase2:
84 elif iov[0] == 1003
and name
not in early3:
88 keep.add((name, str(revision)))
89 database_content.append(line)
92 database_content.sort()
93 with open(
"localdb/database.txt",
"w")
as dbfile:
94 dbfile.writelines(database_content)
97 for filename
in os.scandir(
'localdb/'):
98 match = re.match(
r"dbstore_(.*?)_rev_(\d*).root", filename.name)
101 if match
and match.groups()
not in keep:
102 print(f
"Removing {filename.name}: not needed")
103 os.unlink(filename.path)
105 print(f
"Normalizing {filename.name} as '{match.group(1)}'")
106 subprocess.call([
"b2file-normalize",
"-i",
"-n", match.group(1), filename.path])