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