5 from ROOT
import Belle2
8 from runIPVXD_CAF
import get_calibration
9 import millepede_calibration
as mpc
11 cal = get_calibration(dict(), [tag
for tag
in basf2.conditions.globaltags])
12 collector_file =
'CollectorOutput.root'
13 collector_file = mpc.collect(cal,
17 mpc.calibrate(cal, [collector_file])
19 algo = cal.algorithms[0].algorithm
23 payloads = list(algo.getPayloads())
25 for payload
in payloads:
26 if payload.name ==
'VXDAlignment':
33 "correction & errors",
34 algo.result().getNoDeterminedParameters(),
36 algo.result().getNoDeterminedParameters())
39 param = np.zeros(1, dtype=int)
40 value = np.zeros(1, dtype=float)
41 correction = np.zeros(1, dtype=float)
42 error = np.zeros(1, dtype=float)
43 layer = np.zeros(1, dtype=int)
44 ladder = np.zeros(1, dtype=int)
45 sensor = np.zeros(1, dtype=int)
46 segment = np.zeros(1, dtype=int)
47 x = np.zeros(1, dtype=float)
48 y = np.zeros(1, dtype=float)
49 z = np.zeros(1, dtype=float)
50 eigenweight = np.zeros(1, dtype=float)
53 vxdtree = ROOT.TTree(
'vxd',
'VXD data')
54 vxdtree.Branch(
'layer', layer,
'layer/I')
55 vxdtree.Branch(
'ladder', ladder,
'ladder/I')
56 vxdtree.Branch(
'sensor', sensor,
'sensor/I')
57 vxdtree.Branch(
'segment', segment,
'segment/I')
58 vxdtree.Branch(
'param', param,
'param/I')
59 vxdtree.Branch(
'value', value,
'value/D')
60 vxdtree.Branch(
'correction', correction,
'correction/D')
61 vxdtree.Branch(
'error', error,
'error/D')
62 vxdtree.Branch(
'x', x,
'x/D')
63 vxdtree.Branch(
'y', y,
'y/D')
64 vxdtree.Branch(
'z', z,
'z/D')
65 vxdtree.Branch(
'eigenweight', eigenweight,
'eigenweight/D')
73 for ipar
in range(0, algo.result().getNoParameters()):
74 if not algo.result().isParameterDetermined(ipar):
80 param[0] = label.getParameterId()
81 correction[0] = algo.result().getParameterCorrection(ipar)
82 error[0] = algo.result().getParameterError(ipar)
85 sid = label.getElementId()
86 pid = label.getParameterId()
87 ew = algo.result().getEigenVectorElement(0, ipar)
90 value[0] = vxd.get(sid, pid)
93 corrections.set(sid, pid, correction[0])
94 errors.set(sid, pid, error[0])
95 eigenweights.set(sid, pid, ew)
108 profile.SetBinContent(ibin, value[0])
109 profile.SetBinError(ibin, error[0])
113 if algo.result().getNoEigenPairs():
114 maxEigenValue = algo.result().getEigenNumber(algo.result().getNoEigenPairs() - 1)
115 minEigenValue = algo.result().getEigenNumber(0)
116 condition = maxEigenValue / minEigenValue
119 print(
"Condition number of the matrix: ", condition)
121 diagfile = ROOT.TFile(
'MillepedeJobDiagnostics.root',
'recreate')
125 corrections.Write(
'corrections')
126 errors.Write(
'errors')
127 eigenweights.Write(
'eigenweights')
128 vxdtree.Write(
'vxdtree')
129 profile.Write(
'profile')