64def CreateMis(flags,name="CreateITkMisalignAlg",**kwargs):
65
66
67
68
69 misalignmentOnTopOfExistingSet = False
70 readDBPoolFile = False
71
72 createFreshDB = not(readDBPoolFile or misalignmentOnTopOfExistingSet)
73
74 MisalignMode = kwargs.pop('MisalignMode',11)
75
76 shiftInMicrons = 100
77
78 if MisalignMode in [11, 12, 31]:
79 shiftInMicrons = 500
80
81 outFiles = 'MisalignmentSet%s' % (MisalignMode)
82 misalignModeMap = {0:'no Misalignment',
83 1: 'misalignment by 6 parameters',
84 2: 'random misalignment',
85 3: 'IBL-stave temperature dependent bowing',
86 7: 'misalignment according to module indices',
87 41: 'ITk endcap beam-pipe z shift',
88 42: 'ITk pixel barrel layer bowing',
89 43: 'ITk barrel radial expansion',
90 11: 'R deltaR (radial expansion)', 12: 'Phi deltaR (ellipse)',13: 'Z deltaR (funnel)',
91 21: 'R deltaPhi (curl)', 22: 'Phi deltaPhi (clamshell) ',23:'Z deltaPhi (twist)',
92 31: 'R deltaZ (telescope)',32:'Phi deltaZ (skew)',33:'Z deltaZ (z-expansion)'}
93
94
95 local_translation_str = kwargs.pop('Local_Translation', '0.0,0.0,0.0')
96 local_rotation_str = kwargs.pop('Local_Rotation', '0.0,0.0,0.0')
97 Local_Translation = [float(x) for x in local_translation_str.split(',')]
98 Local_Rotation = [float(x) for x in local_rotation_str.split(',')]
99 translation_scale_str = kwargs.pop('Translation_Scale', '0.1,0.1,0.1')
100 rotation_scale_str = kwargs.pop('Rotation_Scale', '0.1,0.1,0.1')
101 Translation_Scale = [float(x) for x in translation_scale_str.split(',')]
102 Rotation_Scale = [float(x) for x in rotation_scale_str.split(',')]
103 acc=MainServicesCfg(flags)
104 print ("\n CreateMisalignAlg: Creation of misalignment mode %s: %s \n" % (int(MisalignMode),misalignModeMap.get(int(MisalignMode),'unknown')))
105 kwargs.setdefault("ASCIIFilenameBase",outFiles)
106 kwargs.setdefault("SQLiteTag",'MisalignmentMode_'+str(misalignModeMap.get(int(MisalignMode),'unknown')))
107 kwargs.setdefault("MisalignMode",int(MisalignMode))
108 kwargs.setdefault("TargetLayer", int(kwargs.pop('TargetLayer', 0)))
109 kwargs.setdefault("TargetLayerMax", int(kwargs.pop('TargetLayerMax', -999)))
110 kwargs.setdefault("IBLBowingTshift", float(kwargs.pop('IBLBowingTshift', 0.0)))
111 kwargs.setdefault("EndcapShiftConvention", kwargs.pop('EndcapShiftConvention', 'outward'))
112 kwargs.setdefault("RadialShift", float(kwargs.pop('RadialShift', 0.0)))
113 kwargs.setdefault("RadialShiftConvention", kwargs.pop('RadialShiftConvention', 'outward'))
114 kwargs.setdefault("RadialSubdetector", kwargs.pop('RadialSubdetector', 'Pixel'))
115 kwargs.setdefault("Translation_Scale",Translation_Scale)
116 kwargs.setdefault("Rotation_Scale",Rotation_Scale)
117 kwargs.setdefault("Local_Translation",Local_Translation)
118 kwargs.setdefault("Local_Rotation",Local_Rotation)
119 kwargs.setdefault("Index", str(kwargs.pop('Index', '')))
120 kwargs.setdefault("MaxShift",shiftInMicrons)
121 kwargs.setdefault("CreateFreshDB",createFreshDB)
122
123
124 outputAlignFolder="/Indet/AlignITk"
125
126 writeDBPoolFile=True
127 kargsTool={}
128 kargsTool.setdefault("SCTTwoSide",True)
129 kargsTool.setdefault("DBRoot",outputAlignFolder)
130 kargsTool.setdefault("forceUserDBConfig",True)
131 if writeDBPoolFile:
132 print(
"Writing DB Pool File")
133 InDetCondStream=CompFactory.AthenaOutputStreamTool("CondStream_write",OutputFile = outFiles+'.pool.root')
134 InDetCondStream.PoolContainerPrefix="<type>"
135 InDetCondStream.TopLevelContainerName=""
136 InDetCondStream.SubLevelBranchName="<key>"
137 kargsTool.setdefault("CondStream",InDetCondStream)
138 dbTool = acc.popToolsAndMerge(ITkAlignDBTool(flags,**kargsTool))
139
140 kwargs.setdefault("IDAlignDBTool",dbTool)
141
142 cfg=CreateITkMisalignAlgCfg(flags,name=name,**kwargs)
143
144 acc.merge(cfg)
145 if writeDBPoolFile:
146 print(
"To be writen DB pool File")
147
148 return acc
149
void print(char *figname, TCanvas *c1)