Belle II Software  release-06-02-00
setups.py
1 #!/usr/bin/env python3
2 # -*- coding: utf-8 -*-
3 
4 
11 
12 import basf2 as b2
13 from ROOT import Belle2
14 from alignment import MillepedeCalibration
15 
16 # Default configurations
17 components = []
18 tracks = ['CosmicRecoTracks']
19 particles = ['mu+:bbmu']
20 vertices = []
21 primary_vertices = ['Z0:mumu']
22 gearbox_file = ''
23 geometry_components = []
24 do_reconstruction = False
25 do_cosmics_reconstruction = False
26 do_analysis = False
27 magnet_off = False
28 
29 dirty_data = False
30 
31 
32 def get_path(
33  gearboxFile=None,
34  geometryComponents=None,
35  doReconstruction=None,
36  doAnalysis=None,
37  magnetOff=None,
38  doCosmicsReconstruction=None):
39  if gearboxFile is None:
40  gearboxFile = gearbox_file
41  if geometryComponents is None:
42  geometryComponents = geometry_components
43  if doReconstruction is None:
44  doReconstruction = do_reconstruction
45  if doAnalysis is None:
46  doAnalysis = do_analysis
47  if magnetOff is None:
48  magnetOff = magnet_off
49  if do_cosmics_reconstruction is None:
50  doCosmicsReconstruction = do_cosmics_reconstruction
51 
52  import modularAnalysis as ana
53  import reconstruction as reco
54 
55  path = b2.create_path()
56  path.add_module('Progress')
57 
58  path.add_module('Gearbox', fileName=gearboxFile) if gearboxFile else path.add_module('Gearbox')
59 
60  if geometryComponents:
61  path.add_module('Geometry', components=geometryComponents, excludedComponents=['MagneticField'] if magnetOff else [])
62  else:
63  path.add_module('Geometry', excludedComponents=['MagneticField'] if magnetOff else [])
64 
65  if doReconstruction:
66  if geometryComponents:
67  reco.add_reconstruction(path, pruneTracks=False, components=geometryComponents)
68  else:
69  reco.add_reconstruction(path, pruneTracks=False)
70 
71  if doCosmicsReconstruction:
72  import pxd
73  import svd
74 
75  if not geometryComponents or 'PXD' in geometryComponents:
77  if not geometryComponents or 'SVD' in geometryComponents:
79 
80  if geometryComponents:
81  reco.add_cosmics_reconstruction(
82  path,
83  pruneTracks=False,
84  components=geometryComponents,
85  merge_tracks=True)
86  else:
87  reco.add_cosmics_reconstruction(
88  path,
89  pruneTracks=False,
90  merge_tracks=True)
91 
92  if 'SetupGenfitExtrapolation' not in path:
93  path.add_module('SetupGenfitExtrapolation', noiseBetheBloch=False, noiseCoulomb=False, noiseBrems=False)
94 
95  if doAnalysis:
96  ana.fillParticleList('mu+:bbmu', 'muonID > 0.1 and useLabFrame(p) > 0.5', True, path)
97  ana.fillParticleList('mu+:qed', 'muonID > 0.1 and useLabFrame(p) > 2.', True, path)
98  ana.reconstructDecay('Z0:mumu -> mu-:qed mu+:qed', '', writeOut=True, path=path)
99  ana.vertexRaveDaughtersUpdate('Z0:mumu', 0.0, path=path, constraint='ipprofile')
100 
101  return path
102 
103 
104 def setup_none():
105  millepede = MillepedeCalibration()
106  return millepede
107 
108 
109 def setup_default():
110  millepede = MillepedeCalibration(components,
111  tracks=tracks,
112  particles=particles,
113  vertices=vertices,
114  primary_vertices=primary_vertices,
115  path=get_path())
116 
117  if dirty_data:
118  millepede.set_command('chiscut', None)
119  millepede.set_command('outlierdownweighting', None)
120  millepede.set_command('dwfractioncut', None)
121 
122  millepede.algo.invertSign()
123 
124  return millepede
125 
126 
127 def setup_Global():
128  millepede = setup_default()
129  millepede.set_command('Fortranfiles')
130  millepede.set_command('constraints.txt')
131  return millepede
132 
133 
134 def setup_BeamVertex():
135  millepede = setup_default()
136  millepede.set_components(['BeamSpot'])
137  return millepede
138 
139 
140 def setup_VXDHalfShells():
141  millepede = setup_default()
142  millepede.set_components(['VXDAlignment'])
143  millepede.fixSVDPat()
144  for layer in range(1, 7):
145  for ladder in range(1, 17):
146  # Fix also all ladders
147  millepede.fixVXDid(layer, ladder, 0)
148  for sensor in range(1, 6):
149  # Fix all sensors
150  millepede.fixVXDid(layer, ladder, sensor)
151  return millepede
152 
153 
154 def setup_VXDFullHierarchy():
155  millepede = setup_default()
156  millepede.set_components(['VXDAlignment'])
157  millepede.set_command('Fortranfiles')
158  millepede.set_command('constraints.txt')
159  return millepede
160 
161 
162 def setup_VXDSensors():
163  millepede = setup_default()
164  millepede.set_components(['VXDAlignment'])
165  millepede.fixSVDPat()
166  millepede.fixSVDMat()
167  millepede.fixPXDYing()
168  millepede.fixPXDYang()
169  for layer in range(1, 7):
170  for ladder in range(1, 17):
171  # Fix also all ladders
172  millepede.fixVXDid(layer, ladder, 0)
173  for sensor in range(1, 6):
174  # Fix all sensors
175  # millepede.fixVXDid(layer, ladder, sensor)
176  pass
177  millepede.fixVXDid(1, 1, 1)
178  return millepede
179 
180 
181 def setup_CDCLayers():
182  millepede = setup_default()
183  millepede.set_components(['CDCAlignment', 'CDCLayerAlignment'])
184  millepede.fixCDCLayerX(49)
185  millepede.fixCDCLayerY(49)
186  millepede.fixCDCLayerRot(49)
187  millepede.fixCDCLayerX(55)
188  millepede.fixCDCLayerY(55)
189  millepede.fixCDCLayerRot(55)
190  return millepede
191 
192 
193 def setup_CDCTimeWalks():
194  millepede = setup_default()
195  millepede.set_components(['CDCTimeWalks'])
196  millepede.fixCDCTimeWalk(1)
197  return millepede
198 
199 
200 def setup_BKLMAlignment():
201  millepede = setup_default()
202  millepede.set_components(['BKLMAlignment'])
203  millepede.fixGlobalParam(Belle2.BKLMAlignment.getGlobalUniqueID(), Belle2.BKLMElementID(0, 3, 15).getID(), 1)
204  millepede.fixGlobalParam(Belle2.BKLMAlignment.getGlobalUniqueID(), Belle2.BKLMElementID(0, 3, 15).getID(), 2)
205 
206  for sector in range(1, 9):
207  for layer in range(1, 16):
208  for forward in [0, 1]:
209  millepede.fixBKLMModule(forward, sector, layer, [1, 2, 3, 4, 5, 6])
210  return millepede
211 
212 
213 def setup_EKLMAlignment():
214  millepede = setup_default()
215  millepede.set_components(['EKLMAlignment'])
216  millepede.fixEKLMModule(1, 12, 2, 1, 1, [1, 2, 6])
217  return millepede
218 
219 
220 def setup_CDCLayers_GCR_Karim():
221  geometry = '/alignment/examples/GCR_Summer2017.xml'
222  recotracks = ['RecoTracks']
223  global do_cosmics_reconstruction
224  do_cosmics_reconstruction = True
225 
226  # Inherit settings
227  millepede = setup_CDCLayers()
228  millepede.algo.invertSign(False)
229 
230  millepede.set_param(recotracks, 'tracks')
231  millepede.set_param(geometry, 'fileName', 'Gearbox')
232  millepede.set_param(1.e-20, 'minPValue')
233 
234  return millepede
static unsigned short getGlobalUniqueID()
Get global unique identifier.
Definition: BKLMAlignment.h:63
int getID(const std::vector< double > &breaks, double t)
get id of the time point t
Definition: calibTools.h:60
def add_pxd_reconstruction(path, clusterName=None, digitsName=None, usePXDClusterShapes=False)
Definition: __init__.py:101
def add_svd_reconstruction(path, isROIsimulation=False, createRecoDigits=False, applyMasking=False)
Definition: __init__.py:16