9 from AthenaConfiguration.TestDefaults
import defaultConditionsTags, defaultGeometryTags, defaultTestFiles
12 from argparse
import ArgumentParser
13 parser = ArgumentParser(description=
'Script for the ITk Alignment')
16 parser.add_argument(
"-a",
'--accumulate', action=
"store_true", help=
'Run accumulation step')
17 parser.add_argument(
"-s",
'--solve', action=
"store_true", help=
'Run solve step')
18 parser.add_argument(
"-d",
'--dryRun', action=
"store_true", help=
'Only configure, print and dont execute')
19 parser.add_argument(
"-b",
'--baseDir', default =
"./", help=
'Base dir where output is placed')
22 parser.add_argument(
"-i",
"--input", default = defaultTestFiles.RDO_RUN4, nargs =
"+", help=
'Input file(s)')
23 parser.add_argument(
"--maxEvents", default = -1, type = int, help=
'Number of maximal processed events')
24 parser.add_argument(
"-t",
"--inputTracksCollection", default =
"CombinedITkTracks", type = str, help=
'Name of the track collection to use')
25 parser.add_argument(
"--inputTFiles", default =
"AlignmentTFile.root", type = str, help=
'ROOT file produced in MatrixTool in the accumulation step')
27 parser.add_argument(
"--alignmentConstants", default = [], nargs =
"+", help=
'Local alignment constants to use')
30 parser.add_argument(
"--alignITk", action=
"store_true", help=
'Align whole ITk')
31 parser.add_argument(
"--alignITkPixel", action=
"store_true", help=
'Align ITkPixel')
32 parser.add_argument(
"--alignITkStrip", action=
"store_true", help=
'Align ITkStrip')
35 parser.add_argument(
"--globalTag", default = defaultConditionsTags.RUN4_MC, help=
'Global tag')
36 parser.add_argument(
"--atlasVersion", default = defaultGeometryTags.RUN4, help=
'Global tag')
38 parser.add_argument(
"--isBFieldOff", action=
"store_true", help=
'Check if Bfield is off')
39 parser.add_argument(
"--isCosmics", action=
"store_true", help=
'Check if cosmics run')
40 parser.add_argument(
"--isHeavyIon", action=
"store_true", help=
'Check if heavy ion run')
43 parser.add_argument(
"--localgeo", action=
"store_true", help=
'Use local geometry XML files')
46 parser.add_argument(
"--localDB", default =
"", help=
'Use local DB file rather than from conditions tag')
49 return parser.parse_args()
54 from AthenaConfiguration.AllConfigFlags
import initConfigFlags
58 from InDetConfig.ConfigurationHelpers
import OnlyTrackingPreInclude
62 flags.ITk.Align.accumulate = kwargs[
"accumulate"]
63 flags.ITk.Align.baseDir = os.path.abspath(kwargs[
"baseDir"])
65 flags.ITk.Align.alignITk = kwargs[
"alignITk"]
or (
not kwargs[
"alignITk"]
and not kwargs[
"alignITkPixel"]
and not kwargs[
"alignITkStrip"])
66 flags.ITk.Align.alignITkPixel = kwargs[
"alignITkPixel"]
or flags.ITk.Align.alignITk
67 flags.ITk.Align.alignITkStrip = kwargs[
"alignITkStrip"]
or flags.ITk.Align.alignITk
69 flags.ITk.Align.writeSilicon =
False
71 flags.ITk.Align.inputTFiles = kwargs[
"inputTFiles"]
73 flags.Input.Files = kwargs[
"input"]
74 flags.Exec.MaxEvents = kwargs[
"maxEvents"]
if not kwargs[
"solve"]
else 1
75 flags.IOVDb.GlobalTag = kwargs[
"globalTag"]
77 flags.addFlag(
"ConstrainedTrackProvider.InputTracksCollection", kwargs[
"inputTracksCollection"])
79 flags.GeoModel.Align.Dynamic =
False
80 flags.GeoModel.AtlasVersion = kwargs[
"atlasVersion"]
82 if not flags.Input.isMC
and kwargs[
"isCosmics"]:
83 from AthenaConfiguration.Enums
import BeamType
85 flags.Beam.NumberOfCollisions = 0
86 flags.Beam.Type = BeamType.Cosmics
87 flags.Beam.Energy = 0.
88 flags.Beam.BunchSpacing = 50
90 if kwargs[
"isHeavyIon"]:
91 flags.Beam.BunchSpacing = 50
92 flags.Reco.EnableHI =
True
93 flags.HeavyIon.doGlobal =
True
96 flags.Beam.BunchSpacing = 25
98 if not kwargs[
"isBFieldOff"]:
99 flags.BField.solenoidOn =
True
100 flags.BField.barrelToroidOn =
True
101 flags.BField.endcapToroidOn =
True
104 flags.BField.solenoidOn =
False
105 flags.BField.barrelToroidOn =
False
106 flags.BField.endcapToroidOn =
False
109 if kwargs[
"localgeo"]:
110 flags.ITk.Geometry.AllLocal =
True
114 tag=
"InDetSi_MisalignmentMode_random misalignment"
116 if kwargs[
"localDB"]:
117 flags.ITk.Align.useLocalDatabase =
True
118 DBFile = kwargs[
"localDB"]
119 flags.IOVDb.DBConnection =
"sqlite://;schema="+DBFile+
";dbname="+DBName
120 flags.ITk.Geometry.alignmentFolder =
"/Indet/AlignITk"
122 if flags.ITk.Align.alignITkPixel:
123 flags.ITk.Geometry.pixelAlignable =
True
124 if flags.ITk.Align.alignITkStrip:
125 flags.ITk.Geometry.stripAlignable =
True
129 from RecJobTransforms.RecoSteering
import RecoSteering
132 if flags.ITk.Align.useLocalDatabase:
133 from IOVDbSvc.IOVDbSvcConfig
import addFolders, getSqliteContent
134 print(
"Adding Align Folder "+flags.ITk.Geometry.alignmentFolder+
" from local "+DBName+
" Database in file "+DBFile)
135 cfg.merge(
addFolders(flags,flags.ITk.Geometry.alignmentFolder,db=DBName,detDb=DBFile,tag=tag, className=
"AlignableTransformContainer"))
137 from MuonConfig.MuonGeometryConfig
import MuonIdHelperSvcCfg
141 if kwargs[
"accumulate"]
and not kwargs[
"solve"]:
142 os.makedirs(f
"{flags.ITk.Align.baseDir}/Accumulate", exist_ok =
True)
143 os.chdir(
"Accumulate")
144 from InDetAlignConfig.AccumulateITkConfig
import ITkAccumulateCfg
148 elif kwargs[
"solve"]
and not kwargs[
"accumulate"]:
149 os.makedirs(f
"{flags.ITk.Align.baseDir}/Solve", exist_ok =
True)
151 from InDetAlignConfig.SolveITkConfig
import ITkSolveCfg
155 raise Exception(
"You can run either the acculumation step or the solve step, but not both or neither at the same time!")