ATLAS Offline Software
CreateMisalignmentITk.py
Go to the documentation of this file.
1 #!/usr/bin/env python
2 
3 #Copyright (C) 2002-2023 CERN for the benefit of the ATLAS collaboration
4 
9 
10 from AthenaConfiguration.AllConfigFlags import initConfigFlags
11 from AthenaConfiguration.MainServicesConfig import MainServicesCfg
12 from InDetAlignGenAlgs.InDetAlignAlgsConfig import CreateITkMisalignAlgCfg
13 from AthenaConfiguration.DetectorConfigFlags import setupDetectorFlags
14 from InDetAlignGenTools.InDetAlignGenToolsConfig import ITkAlignDBTool
15 import sys
16 from AthenaConfiguration.ComponentFactory import CompFactory
17 
18 
19 
20 def getFlags(**kwargs):
21  flags=initConfigFlags()
22 
23  flags.Input.isMC = True
24 
25  flags.Input.Files = []
26 
27  from AthenaConfiguration.TestDefaults import defaultGeometryTags,defaultConditionsTags
28  flags.GeoModel.AtlasVersion = defaultGeometryTags.RUN4
29  flags.GeoModel.Align.Dynamic = False
30 
31  flags.ITk.Geometry.isAlignable = True
32  flags.ITk.Align.alignITkPixel = True
33  flags.ITk.Align.alignITkStrip = True
34 
35 
36 
37  flags.ITk.Geometry.AllLocal = False
38  detectors = [
39  "ITkPixel",
40  "ITkStrip",
41  "Bpipe"
42  ]
43  setupDetectorFlags(flags, custom_list=detectors, toggle_geometry=True)
44  flags.TrackingGeometry.MaterialSource = "Input"
45 
46 
47  #Define the output database file name and add it to the flags
48  if 'MisalignMode' not in kwargs.keys():
49  MisalignMode = 11 # Radial
50  else:
51  MisalignMode=int(kwargs.get('MisalignMode',11))
52  if 'Translation' not in kwargs.keys():
53  Translation = True
54  else:
55  Translation=bool(kwargs.get('Translation','True')=='True')
56  if not Translation:
57  print ("Translation not set to \"True\" - disabling generation of translations")
58  if 'Rotation' not in kwargs.keys():
59  Rotation = True
60  else:
61  Rotation=bool(kwargs.get('Rotation','True')=='True')
62  if not Rotation:
63  print ("Rotation not set to \"True\" - disabling generation of rotations")
64  if MisalignMode == 7:
65  local_translation_str = kwargs.pop('Local_Translation', '0.0,0.0,0.0')
66  local_rotation_str = kwargs.pop('Local_Rotation', '0.0,0.0,0.0')
67  Local_Translation = [float(x) for x in local_translation_str.split(',')]
68  Local_Rotation = [float(x) for x in local_rotation_str.split(',')]
69  databaseFilename = 'MisalignmentSet%s.db' % (MisalignMode)
70  flags.IOVDb.DBConnection="sqlite://;schema=%s;dbname=OFLCOND" % (databaseFilename)
71  flags.IOVDb.GlobalTag = defaultConditionsTags.RUN4_MC
72 
73 
74  # This should run serially for the moment.
75  flags.Concurrency.NumThreads = 1
76  flags.Concurrency.NumConcurrentEvents = 1
77  flags.lock()
78 
79  return flags
80 
81 def CreateMis(flags,name="CreateITkMisalignAlg",**kwargs):
82  #
83  #--------------------------------------------------------------
84  # Geometry section
85  #--------------------------------------------------------------
86  misalignmentOnTopOfExistingSet = False
87  readDBPoolFile = False
88 
89  createFreshDB = not(readDBPoolFile or misalignmentOnTopOfExistingSet)
90 
91  MisalignMode = kwargs.pop('MisalignMode',11)
92 
93  shiftInMicrons = 100
94 
95  if MisalignMode in [11, 12, 31]:
96  shiftInMicrons = 500
97 
98  outFiles = 'MisalignmentSet%s' % (MisalignMode)
99  misalignModeMap = {0:'no Misalignment',
100  1: 'misalignment by 6 parameters',
101  2: 'random misalignment',
102  3: 'IBL-stave temperature dependent bowing',
103  7: 'misalignment according to module indices',
104  11: 'R deltaR (radial expansion)', 12: 'Phi deltaR (ellipse)',13: 'Z deltaR (funnel)',
105  21: 'R deltaPhi (curl)', 22: 'Phi deltaPhi (clamshell) ',23:'Z deltaPhi (twist)',
106  31: 'R deltaZ (telescope)',32:'Phi deltaZ (skew)',33:'Z deltaZ (z-expansion)'}
107 
108 
109  local_translation_str = kwargs.pop('Local_Translation', '0.0,0.0,0.0')
110  local_rotation_str = kwargs.pop('Local_Rotation', '0.0,0.0,0.0')
111  Local_Translation = [float(x) for x in local_translation_str.split(',')]
112  Local_Rotation = [float(x) for x in local_rotation_str.split(',')]
113  acc=MainServicesCfg(flags)
114  print ("\n CreateMisalignAlg: Creation of misalignment mode %s: %s \n" % (int(MisalignMode),misalignModeMap.get(int(MisalignMode),'unknown')))
115  kwargs.setdefault("ASCIIFilenameBase",outFiles)
116  kwargs.setdefault("SQLiteTag",'MisalignmentMode_'+str(misalignModeMap.get(int(MisalignMode),'unknown')))
117  kwargs.setdefault("MisalignMode",int(MisalignMode))
118  kwargs.setdefault("Translation",bool(str(kwargs.pop('Translation','True'))=='True'))
119  kwargs.setdefault("Rotation",bool(str(kwargs.pop('Rotation','True'))=='True'))
120  kwargs.setdefault("Local_Translation",Local_Translation)
121  kwargs.setdefault("Local_Rotation",Local_Rotation)
122  kwargs.setdefault("Index", str(kwargs.pop('Index', '')))
123  kwargs.setdefault("MaxShift",shiftInMicrons)
124  kwargs.setdefault("CreateFreshDB",createFreshDB)
125  #Create and configure the AlignDB tool
126 
127  outputAlignFolder="/Indet/AlignITk" #The folder name from which initial misalignments should be read - currently may clash if this is the same is the input folder!
128 
129  writeDBPoolFile=True #Activate or deactivate writing to outFiles + '.pool.root'
130  kargsTool={}
131  kargsTool.setdefault("SCTTwoSide",True)
132  kargsTool.setdefault("DBRoot",outputAlignFolder)
133  kargsTool.setdefault("forceUserDBConfig",True)
134  if writeDBPoolFile:
135  print("Writing DB Pool File")
136  InDetCondStream=CompFactory.AthenaOutputStreamTool("CondStream_write",OutputFile = outFiles+'.pool.root')
137  InDetCondStream.PoolContainerPrefix="<type>"
138  InDetCondStream.TopLevelContainerName=""
139  InDetCondStream.SubLevelBranchName="<key>"
140  kargsTool.setdefault("CondStream",InDetCondStream)
141  dbTool = acc.popToolsAndMerge(ITkAlignDBTool(flags,**kargsTool))
142 
143  kwargs.setdefault("IDAlignDBTool",dbTool)
144 
145  cfg=CreateITkMisalignAlgCfg(flags,name=name,**kwargs)
146 
147  acc.merge(cfg)
148  if writeDBPoolFile:
149  print("To be writen DB pool File")
150 
151  return acc
152 
153 if __name__ == "__main__":
154  if(len(sys.argv[1:])):
155  kwargs=dict(arg.split('=') for arg in sys.argv[1:])
156  print(kwargs)
157  else:
158  kwargs={}
159  print("no args")
160  #Get the basic configuration flags
161  flags=getFlags(**kwargs)
162  flags.dump()
163  #Add the tools and the algorithm to the accumulator
164  acc=CreateMis(flags,**kwargs)
165  acc.printConfig()
166 
167  #run
168  sc=acc.run(10)
169  if sc.isFailure():
170  print("Failed to run the Misalignment Algorithm")
171  sys.exit(-1)
CreateMisalignmentITk.CreateMis
def CreateMis(flags, name="CreateITkMisalignAlg", **kwargs)
Definition: CreateMisalignmentITk.py:81
InDetAlignAlgsConfig.CreateITkMisalignAlgCfg
def CreateITkMisalignAlgCfg(flags, name="CreateITkMisalignAlg", **kwargs)
Definition: InDetAlignAlgsConfig.py:6
CreateMisalignmentITk.getFlags
def getFlags(**kwargs)
Definition: CreateMisalignmentITk.py:20
python.MainServicesConfig.MainServicesCfg
def MainServicesCfg(flags, LoopMgr='AthenaEventLoopMgr')
Definition: MainServicesConfig.py:312
print
void print(char *figname, TCanvas *c1)
Definition: TRTCalib_StrawStatusPlots.cxx:25
python.DetectorConfigFlags.setupDetectorFlags
def setupDetectorFlags(flags, custom_list=None, use_metadata=False, toggle_geometry=False, validate_only=False, keep_beampipe=False)
Definition: DetectorConfigFlags.py:292
python.CaloAddPedShiftConfig.int
int
Definition: CaloAddPedShiftConfig.py:45
python.AllConfigFlags.initConfigFlags
def initConfigFlags()
Definition: AllConfigFlags.py:19
InDetAlignGenToolsConfig.ITkAlignDBTool
def ITkAlignDBTool(flags, name="ITkAlignDBTool", **kwargs)
Definition: InDetAlignGenToolsConfig.py:6
if
if(febId1==febId2)
Definition: LArRodBlockPhysicsV0.cxx:567
str
Definition: BTagTrackIpAccessor.cxx:11
xAOD::bool
setBGCode setTAP setLVL2ErrorBits bool
Definition: TrigDecision_v1.cxx:60
python.LArMinBiasAlgConfig.float
float
Definition: LArMinBiasAlgConfig.py:65