13from modularAnalysis
import setAnalysisConfigParams
17from ctypes
import cdll
20def setupBelleDatabaseServer():
22 Sets the Belle DB server to the one recommended in /sw/belle/local/var/belle_postgres_server.
24 If the user does
not have the access rights to the above file, the can01 server
is set by default.
26 belleDBServerFile = '/sw/belle/local/var/belle_postgres_server'
27 belleDBServer =
'can01'
30 with open(belleDBServerFile)
as f:
31 belleDBServer = (f.read()).strip()
35 os.environ[
'PGUSER'] =
'g0db'
36 os.environ[
'BELLE_POSTGRES_SERVER'] = belleDBServer
39def convertBelleMdstToBelleIIMdst(inputBelleMDSTFile, applySkim=True,
40 saveResultExtraInfo=False,
41 useBelleDBServer=None,
42 convertBeamParameters=True,
43 generatorLevelReconstruction=False,
44 generatorLevelMCMatching=False,
45 path=None, entrySequences=None,
46 matchType2E9oE25Threshold=-1.1,
47 enableNisKsFinder=True,
48 HadronA=True, HadronB=True,
49 enableRecTrg=False, enableEvtcls=True,
50 SmearTrack=2, enableLocalDB=True,
53 Loads Belle MDST file and converts
in each event the Belle MDST dataobjects to Belle II MDST
54 data objects
and loads them to the StoreArray.
57 inputBelleMDSTFile (str): Name of the file(s) to be loaded.
58 applySkim (bool): Apply skim conditions
in B2BIIFixMdst.
59 saveResultExtraInfo (bool): Save B2BIIFixMdst module
return value
as EventExtraInfo.
60 useBelleDBServer (str):
None to use the recommended BelleDB server.
61 convertBeamParameters (bool): Convert beam parameters
or use information stored
in Belle II database.
62 generatorLevelReconstruction (bool): Enables to bypass skims
and corrections applied
in B2BIIFixMdst.
63 generatorLevelMCMatching (bool): Enables to switch MCTruth matching to generator-level particles.
64 This
is recommended
for analyses
with gammas
in the final state.
65 path (basf2.Path): Path to add modules
in.
66 entrySequences (list(str)): The number sequences (e.g. 23:42,101) defining
67 the entries which are processed
for each inputFileName.
68 matchType2E9oE25Threshold (float): Clusters
with a E9/E25 value above this threshold are classified
as neutral
69 even
if tracks are matched to their connected region (matchType == 2
in basf).
70 enableNisKsFinder (bool): Enables to convert nisKsFinder information.
71 HadronA (bool): Enables to switch on HadronA skim
in B2BIIFixMdst module.
72 HadronB (bool): Enables to switch on HadronB skim
in B2BIIFixMdst module.
73 enableRecTrg (bool): Enables to convert RecTrg_summary3 table.
74 enableEvtcls (bool): Enables to convert Evtcls
and Evtcls_hadronic tables.
75 SmearTrack (float): Smear the MC tracks to match real data.
76 Apart
from the recommended default value of 2 it can also be set to 1.
77 Details about the difference between those two options can be found
78 `here <https://belle.kek.jp/secured/wiki/doku.php?id=physics:charm:tracksmearing>`_.
79 Set to 0 to skip smearing (automatically set to 0 internally
for real data).
80 enableLocalDB (bool): Enables to use local payloads.
81 convertNbar (bool): Enables conversion of anti-n0:mdst.
87 '/sw/belle/local/neurobayes/lib/libNeuroBayesCore_shared.so')
91 if useBelleDBServer
is None:
92 setupBelleDatabaseServer()
94 os.environ[
'BELLE_POSTGRES_SERVER'] = useBelleDBServer
96 b2.B2INFO(
'Belle DB server is set to: ' + os.environ[
'BELLE_POSTGRES_SERVER'])
98 setAnalysisConfigParams({
'mcMatchingVersion':
'Belle'}, path)
102 if enableLocalDB
is True:
103 b2.conditions.metadata_providers = [
"/sw/belle/b2bii/database/conditions/b2bii.sqlite"]
104 b2.conditions.payload_locations = [
"/sw/belle/b2bii/database/conditions/"]
107 "B2BII is accessing the payloads from the conditions database.\n"
108 "The recommended procedure is to use the offline database and it is significantly\n"
109 "faster than using the global database.\n"
110 "If you need the payloads which are not included in the current offline database,\n"
111 "please contact b2bii librarian.")
113 input = b2.register_module(
'B2BIIMdstInput')
114 if inputBelleMDSTFile
is not None:
115 input.param(
'inputFileNames', parse_process_url(inputBelleMDSTFile))
116 if entrySequences
is not None:
117 input.param(
'entrySequences', entrySequences)
120 path.add_module(input)
124 from ROOT
import Belle2
129 XYZVector(0, 0, 1.5 * Belle2.Unit.T)))
132 if (
not generatorLevelReconstruction):
134 fix = b2.register_module(
'B2BIIFixMdst')
137 fix.param(
'SaveResultExtraInfo', saveResultExtraInfo)
139 fix.param(
'HadronA', HadronA)
140 fix.param(
'HadronB', HadronB)
141 fix.param(
'Smear_trk', SmearTrack)
142 if (HadronA
is not True and HadronB
is True):
144 'The Hadron A skim is turned off.'
145 'However, its requirements are still applied since the HadronB(J) skim, which includes them, is turned on.')
149 emptypath = b2.create_path()
151 fix.if_value(
'<=0', emptypath)
153 b2.B2INFO(
'applySkim is set to be False.'
154 'No bad events marked by fixmdst will be discarded.'
155 'Corrections will still be applied.')
157 b2.B2INFO(
'Perform generator level reconstruction, no corrections or skims in fix_mdst will be applied.')
159 convert = b2.register_module(
'B2BIIConvertMdst')
160 convert.param(
'convertBeamParameters', convertBeamParameters)
161 if (generatorLevelMCMatching):
162 convert.param(
'mcMatchingMode',
'GeneratorLevel')
163 convert.param(
"matchType2E9oE25Threshold", matchType2E9oE25Threshold)
164 convert.param(
"nisKsInfo", enableNisKsFinder)
165 convert.param(
"RecTrg", enableRecTrg)
166 convert.param(
"convertEvtcls", enableEvtcls)
167 convert.param(
"convertNbar", convertNbar)
170 path.add_module(convert)
172 b2.conditions.append_globaltag(
'BellePID')
173 path.add_module(
'BelleNbarMVA', particleList=
'anti-n0:mdst', identifier=
'nbarMVA')
176def parse_process_url(url):
178 Handle process_url style requests.
179 If url is a list just
return it without looking at it. If the url starts
180 with http(s)://
return the list of files provided by that url, otherwise
181 check
if a file
with the name given
as url exists
and return this
as a list
182 with one item. If
not such file exists
return an empty list
184 >>> parse_process_url([
"foo",
"bar"])
186 >>> parse_process_url(
"/dev/null")
188 >>> parse_process_url(
"missing_file.mdst")
190 >>> parse_process_url(
"http://bweb3.cc.kek.jp/mdst.php?ex=55&rs=1&re=5&skm=HadronBorJ&dt=on_resonance&bl=caseB") \
192 [
'/group/belle/bdata_b/dstprod/dat/e000055/HadronBJ/0127/on_resonance/00/HadronBJ-e000055r000003-b20090127_0910.mdst',
193 '/group/belle/bdata_b/dstprod/dat/e000055/HadronBJ/0127/on_resonance/00/HadronBJ-e000055r000004-b20090127_0910.mdst',
194 '/group/belle/bdata_b/dstprod/dat/e000055/HadronBJ/0127/on_resonance/00/HadronBJ-e000055r000005-b20090127_0910.mdst']
196 Some files are missing
and thus marked
with "### LOST ###", make sure we don
't pick them up
197 >>> parse_process_url("http://bweb3.cc.kek.jp/mdst.php?ex=65&rs=1&re=30&skm=ypipi")
200 If the URL cannot be found an error
is raised
and an empty list
is returned.
201 Also
for other http errors
or non existing urls
203 >>> parse_process_url(
"http://httpbin.org/status/404")
205 >>> parse_process_url(
"http://httpbin.org/status/500")
207 >>> parse_process_url(
"http://nosuchurl")
211 if isinstance(url, list)
or isinstance(url, tuple):
214 if not url.startswith(
"http://")
and not url.startswith(
"https://"):
215 if os.path.exists(url):
219 f
"Could not parse url '{url}': no such file or directory")
223 process_event = re.compile(br
"^\s*process_event\s+(.*)\s+0$", re.MULTILINE)
226 request = requests.get(url)
227 request.raise_for_status()
228 return [e.decode(
"ASCII")
229 for e
in process_event.findall(request.content)]
230 except (requests.ConnectionError, requests.HTTPError)
as e:
232 f
"Failed to connect to '{url}': {str(e)}")
Describe one component of the Geometry.
static DBStore & Instance()
Instance of a singleton DBStore.