Belle II Software  release-05-01-25
runIPVXD_CAF.py
1 #!/usr/bin/env python3
2 # -*- coding: utf-8 -*-
3 import basf2
4 from ROOT import Belle2
5 
6 import generators as gen
7 import simulation as sim
8 import rawdata as raw
9 import reconstruction as reco
10 import modularAnalysis as ana
11 import vertex as vtx
12 
15 
16 import os
17 
18 import millepede_calibration as mpc
19 from caf.framework import CAF
20 from caf import backends
21 
22 
23 def generate_test_data(filename):
24  main = basf2.create_path()
25 
26  main.add_module("EventInfoSetter", evtNumList=[200])
27  # add_beamparameters(main, "Y4S")
28  main.add_module('Gearbox')
29  main.add_module('Geometry')
30 
31  gen.add_kkmc_generator(main, 'mu-mu+')
32 
33  sim.add_simulation(main)
34 
35  main.add_module("RootOutput", outputFileName=filename)
36  main.add_module("Progress")
37 
38  basf2.process(main)
39  print(basf2.statistics)
40  return os.path.abspath(filename)
41 
42 
43 def diMuonCollection(name="diMuonCollection", add_unpackers=True):
44  path = basf2.create_path()
45 
46  path.add_module('Progress')
47  # Remove all non-raw data to run the full reco again
48  path.add_module('RootInput') # , branchNames=input_branches, entrySequences=['0:5000'])
49  path.add_module('Gearbox')
50  path.add_module('Geometry')
51 
52  if add_unpackers:
53  raw.add_unpackers(path)
54 
55  reco.add_reconstruction(path, pruneTracks=False)
56 
57  tmp = basf2.create_path()
58  for m in path.modules():
59  if m.name() == "PXDPostErrorChecker":
60  m.param('CriticalErrorMask', 0)
61  if m.name() in ["PXDUnpacker", "CDCHitBasedT0Extraction", "TFCDC_WireHitPreparer"]:
62  m.set_log_level(basf2.LogLevel.ERROR)
63  if m.name() == "SVDSpacePointCreator":
64  m.param("MinClusterTime", -999)
65  tmp.add_module(m)
66  path = tmp
67  path.add_module('DAFRecoFitter')
68 
69  ana.fillParticleList('mu+:mu_dimuon', 'abs(formula(z0)) < 0.5 and abs(d0) < 0.5 and nTracks == 2', writeOut=True, path=path)
70  ana.reconstructDecay('Z0:mumu -> mu-:mu_dimuon mu+:mu_dimuon', '', writeOut=True, path=path)
71  vtx.raveFit('Z0:mumu', 0.001, daughtersUpdate=True, silence_warning=True, path=path)
72 
73  return mpc.make_collection(name, path=path, primaryVertices=['Z0:mumu'])
74 
75 
76 def get_calibration(files, tags):
77 
78  cal = mpc.create(
79  name='alignment',
80  dbobjects=['VXDAlignment', 'BeamSpot'],
81  collections=[
82  diMuonCollection(name="dimuon_skim", add_unpackers=False)
83  ],
84  constraints=[
86  ],
88  commands=[
89  'method diagonalization 3 0.1',
90  'scaleerrors 1. 1.',
91  ('printcounts', None)
92 
93  ],
94 
95  tags=tags,
96  files=files,
97 
98  timedep=[([], [(0, 0, 0)])],
99  params=dict(minPValue=0.001, externalIterations=0))
100 
101  return cal
102 
103 
104 if __name__ == '__main__':
105  input_files = [os.path.abspath(file) for file in Belle2.Environment.Instance().getInputFilesOverride()]
106 
107  if not len(input_files):
108  outfile = Belle2.Environment.Instance().getOutputFileOverride()
109  if not outfile:
110  outfile = 'cafBeamSpotVXDHalfShells_TestData.root'
111  print("No input file provided. This will now generate test data into {} and run over it.".format(outfile))
112  print("It will take couple of minutes.")
113  print("You can set this file as input next time using -i option of basf2")
114 
115  input_files = [generate_test_data(outfile)]
116 
117  cal = get_calibration(
118  files={'dimuon_skim': input_files},
119  tags=[tag for tag in basf2.conditions.default_globaltags])
120 
121  cal.max_iterations = 0
122 
123  cal_fw = CAF()
124  cal_fw.add_calibration(cal)
125  cal_fw.backend = backends.Local(1)
126 
127  cal_fw.run()
alignment.parameters.vxd_sensors
def vxd_sensors(layers=None, rigid=True, surface=True, surface2=True, surface3=True, surface4=True, parameters=None)
Definition: parameters.py:146
generate_test_data
Definition: generate_test_data.py:1
basf2.process
def process(path, max_event=0)
Definition: __init__.py:25
alignment.constraints.VXDHierarchyConstraints
Definition: constraints.py:115
alignment.constraints
Definition: constraints.py:1
alignment.parameters.vxd_ladders
def vxd_ladders(layers=None, parameters=None)
Definition: parameters.py:126
Belle2::Environment::Instance
static Environment & Instance()
Static method to get a reference to the Environment instance.
Definition: Environment.cc:31
alignment.parameters
Definition: parameters.py:1
backends.Local
Definition: backends.py:878