17 This class represents a dataset.
23 varnum[
"recoz"] = [0,
r'$Z_{Reco}$',
r'$[cm]$']
24 varnum[
"recotheta"] = [1,
r'$\theta_{Reco}$',
r'$[°]$']
25 varnum[
"recophi"] = [2,
r'$\phi_{Reco}$',
r'$[°]$']
26 varnum[
"recopt"] = [3,
r'$P_{t, Reco}$',
r'$[GeV]$']
27 varnum[
"recop"] = [4,
r'$P_{Reco}$',
r'$[GeV]$']
28 varnum[
"neuroz"] = [5,
r'$Z_{Neuro}$',
r'$[cm]$']
29 varnum[
"neurotheta"] = [6,
r'$\theta_{Neuro}$',
r'$[°]$']
30 varnum[
"neurophi"] = [7,
r'$\phi_{Neuro}$',
r'$[°]$']
31 varnum[
"neuropt"] = [8,
r'$P_{Neuro}$',
r'$[GeV]$']
32 varnum[
"neurop"] = [9,
r'$P_{t, Neuro}$',
r'$[GeV]$']
33 varnum[
"neuroval"] = [10,
r'Validity',
'']
34 varnum[
"neuroqual"] = [11,
r'Quality',
'']
35 varnum[
"neurots"] = [12,
r'TSVector',
'']
36 varnum[
"neuroexp"] = [13,
r'Expert Number',
'']
37 varnum[
"neurodriftth"] = [14,
r'Driftthreshold',
'']
38 varnum[
"neuroquad"] = [15,
r'Quadrant',
'']
39 varnum[
"neurofp"] = [16,
r'Fastestpriority Eventtime',
'clocks']
40 varnum[
"neuroetf"] = [17,
r'ETF Eventtime',
'clocks']
41 varnum[
"twodphi"] = [18,
r'$\phi_{2D}$',
r'$[°]$']
42 varnum[
"twodpt"] = [19,
r'$P_{t, 2D}$',
r'$[GeV]$']
43 varnum[
"twodfot"] = [20,
r'FoundOldTrack',
'']
44 varnum[
"hwneuroz"] = [21,
r'$Z_{HWNeuro}$',
r'$[cm]$']
45 varnum[
"hwneurotheta"] = [22,
r'$\theta_{HWNeuro}$',
r'$[°]$']
46 varnum[
"hwneurophi"] = [23,
r'$\phi_{HWNeuro}$',
r'$[°]$']
47 varnum[
"hwneuropt"] = [24,
r'$P_{t, HWNeuro}$',
r'$[GeV]$']
48 varnum[
"hwneurop"] = [25,
r'$P_{HWNeuro}$',
r'$[GeV]$']
49 varnum[
"hwneuroval"] = [26,
r'Validity',
'']
50 varnum[
"hwneuroqual"] = [27,
r'Quality',
'']
51 varnum[
"hwneurots"] = [28,
r'TSVector',
'']
52 varnum[
"hwneuroexp"] = [29,
r'Expert Number',
'']
53 varnum[
"hwneurodriftth"] = [30,
r'Driftthreshold',
'']
54 varnum[
"hwneuroquad"] = [31,
r'Quadrant',
'']
55 varnum[
"hwneurofp"] = [32,
r'Fastestpriority Eventtime',
'clocks']
56 varnum[
"hwneuroetf"] = [33,
r'ETF Eventtime',
'clocks']
57 varnum[
"swneuroz"] = [34,
r'$Z_{SWNeuro}$',
r'$[cm]$']
58 varnum[
"swneurotheta"] = [35,
r'$\theta_{SWNeuro}$',
r'$[°]$']
59 varnum[
"swneurophi"] = [36,
r'$\phi_{SWNeuro}$',
r'$[°]$']
60 varnum[
"swneuropt"] = [37,
r'$P_{t, SWNeuro}$',
r'$[GeV]$']
61 varnum[
"swneurop"] = [38,
r'$P_{SWNeuro}$',
r'$[GeV]$']
62 varnum[
"swneuroval"] = [39,
r'Validity',
'']
63 varnum[
"swneuroqual"] = [40,
r'Quality',
'']
64 varnum[
"swneurots"] = [41,
r'TSVector',
'']
65 varnum[
"swneuroexp"] = [42,
r'Expert Number',
'']
66 varnum[
"swneurodriftth"] = [43,
r'Driftthreshold',
'']
67 varnum[
"swneuroquad"] = [44,
r'Quadrant',
'']
68 varnum[
"swneurofp"] = [45,
r'Fastestpriority Eventtime',
'clocks']
69 varnum[
"swneuroetf"] = [46,
r'ETF Eventtime',
'clocks']
70 varnum[
"swtwodphi"] = [47,
r'$\phi_{SW2D}$',
r'$[°]$']
71 varnum[
"swtwodpt"] = [48,
r'$P_{t, SW2D}$',
r'$[GeV]$']
72 varnum[
"swtwodfot"] = [49,
r'FoundOldTrack',
'']
73 varnum[
"neuroats"] = [50,
r'NumberOfAxials',
'']
74 varnum[
"hwneuroats"] = [51,
r'NumberOfAxials',
'']
75 varnum[
"swneuroats"] = [52,
r'NumberOfAxials',
'']
76 varnum[
"neuroetfcc"] = [53,
r'ETF Eventtime from CC',
'clocks']
77 varnum[
"neurohwtime"] = [54,
r'Reconstructed HW Eventtime',
'clocks']
78 varnum[
"hwneuroetfcc"] = [55,
r'ETF Eventtime',
'clocks']
79 varnum[
"hwneurohwtime"] = [56,
r'Reconstructed HW Eventtime',
'clocks']
84 def param(self, params):
85 for key, value
in params.items():
86 setattr(self, key, value)
89 from ROOT
import Belle2
109 self.
etfname =
"CDCTriggerNeuroETFT0"
110 self.
tsname =
"CDCTriggerNNInputSegmentHits"
149 def costotheta(self, x):
151 if isinstance(x, list):
163 return 180. / np.pi * np.arccos(x)
165 def getrecovalsold(self, evlist, fitres):
167 evlist[self.
varnum[
"recoz"][0]] = fitres.getPosition().Z()
168 evlist[self.
varnum[
"recotheta"][0]] = fitres.getMomentum().Theta()
169 evlist[self.
varnum[
"recophi"][0]] = fitres.getMomentum().Phi()
170 evlist[self.
varnum[
"recopt"][0]] = fitres.getTransverseMomentum()
171 evlist[self.
varnum[
"recop"][0]] = fitres.getMomentum().R()
174 def getrecovals(self, evlist, state):
176 evlist[self.
varnum[
"recoz"][0]] = state.getPos().Z()
177 evlist[self.
varnum[
"recotheta"][0]] = state.getMom().Theta()
178 evlist[self.
varnum[
"recophi"][0]] = state.getMom().Phi()
179 evlist[self.
varnum[
"recopt"][0]] = state.getMom().Pt()
180 evlist[self.
varnum[
"recop"][0]] = state.getMomMag()
183 def getneurovals(self, evlist, neuro, status=""):
184 from ROOT
import Belle2
189 evlist[self.
varnum[pre +
"neuroz"][0]] = neuro.getZ0()
190 evlist[self.
varnum[pre +
"neurotheta"][0]] = self.
costotheta(neuro.getCotTheta() / np.sqrt(1 + neuro.getCotTheta()**2))
191 evlist[self.
varnum[pre +
"neurophi"][0]] = neuro.getPhi0()
192 evlist[self.
varnum[pre +
"neuropt"][0]] = neuro.getPt()
193 evlist[self.
varnum[pre +
"neurop"][0]] = neuro.getPt()/np.sin(self.
costotheta(neuro.getCotTheta() /
194 np.sqrt(1 + neuro.getCotTheta()**2)))
195 evlist[self.
varnum[pre +
"neuroval"][0]] = neuro.getValidStereoBit()
196 evlist[self.
varnum[pre +
"neuroqual"][0]] = neuro.getQualityVector()
197 evlist[self.
varnum[pre +
"neurots"][0]] = int(
"".join([str(x)
for x
in neuro.getTSVector()]))
198 xx = sum([int(i != 0)
for i
in neuro.getTSVector()][::2])
201 evlist[self.
varnum[pre +
"neuroats"][0]] = xx
202 evlist[self.
varnum[pre +
"neuroexp"][0]] = neuro.getExpert()
203 evlist[self.
varnum[pre +
"neurodriftth"][0]] = int(
"".join([str(int(x))
for x
in neuro.getDriftThreshold()]))
204 evlist[self.
varnum[pre +
"neuroquad"][0]] = neuro.getQuadrant()
206 for ts
in neuro.getRelationsTo(self.
tsname):
207 if ts.priorityTime() < fpt:
208 fpt = ts.priorityTime()
209 if self.
etf.hasBinnedEventT0(Belle2.Const.CDC):
210 eft = self.
etf.getBinnedEventT0(Belle2.Const.CDC)
216 evlist[self.
varnum[pre +
"neurofp"][0]] = fpt
217 evlist[self.
varnum[pre +
"neuroetf"][0]] = eft
219 evlist[self.
varnum[pre +
"neuroetfcc"][0]] = neuro.getETF_unpacked()
220 evlist[self.
varnum[pre +
"neurohwtime"][0]] = neuro.getETF_recalced()
223 def gettwodvals(self, evlist, twod):
225 evlist[self.
varnum[
"twodphi"][0]] = twod.getPhi0()
226 evlist[self.
varnum[
"twodpt"][0]] = twod.getPt()
230 def getswtwodvals(self, evlist, twod):
232 evlist[self.
varnum[
"swtwodphi"][0]] = twod.getPhi0()
233 evlist[self.
varnum[
"swtwodpt"][0]] = twod.getPt()
238 from ROOT
import Belle2, TVector3, XYZVector
247 track = reco.getRelatedFrom(
"Tracks")
259 print(
"no track found for recotrack")
268 reps = reco.getRepresentations()
270 for irep, rep
in enumerate(reps):
271 if not reco.wasFitSuccessful(rep):
274 state = reco.getMeasuredStateOnPlaneClosestTo(XYZVector(0, 0, 0), rep)
275 rep.extrapolateToLine(state, TVector3(0, 0, -1000), TVector3(0, 0, 2000))
276 except BaseException:
287 except BaseException:
291 except BaseException:
295 except BaseException:
299 except BaseException:
307 event[-1] = self.
getneurovals(event[-1], hwneuro, status=
"hw")
308 event[-1] = self.
getneurovals(event[-1], swneuro, status=
"sw")
320 except BaseException:
324 except BaseException:
328 event[-1] = self.
getneurovals(event[-1], hwneuro, status=
"hw")
339 except BaseException:
341 event[-1] = self.
getneurovals(event[-1], swneuro, status=
"sw")
366 for i
in range(self.
maxtracks - len(event)):
378 def save(self, filename=None, netname=None, dataname=None):
380 filename = self.filename
382 netname = self.netname
389 savedict[
"varnum"] = self.
varnum
390 savedict[
"networkname"] = netname
391 savedict[
"dataname"] = dataname
392 savedict[
"version"] = nntd.version
393 f = open(filename,
'wb')
394 pickle.dump(savedict, f)
396 print(
'file ' + filename +
' has been saved. ')
398 def loadmore(self, filenames):
403 if "NNTD_EVLIMIT" in os.environ:
404 evlim = int(os.environ[
"NNTD_EVLIMIT"])
407 for i, x
in enumerate(filenames):
408 print(
"checking file: " + str(i) +
"/" + str(len(filenames)))
410 evnumber += len(pickle.load(f)[
"eventlist"])
412 print(
"total number of available events is " + str(evnumber))
413 skipev = int(evnumber/evlim)
414 print(
"Number of events more than " + str(evlim) +
" only taking every " + str(skipev) +
" event")
419 savedict = pickle.load(f)
421 if self.
version != savedict[
"version"]:
422 print(
"Error! loaded file was made with different version of nntd! exiting ... ")
425 if "dataname" in savedict:
426 self.
dataname = savedict[
"dataname"]
428 self.
eventlist += savedict[
"eventlist"][::skipev][:templim]
429 self.
varnum = savedict[
"varnum"]
430 print(
"Loaded file: " + x)
431 print(
"length of eventlist: " + str(len(self.
eventlist)))
433 print(
"stop loading, maximum event number reached")
436 print(
"all files loaded, array.size: " + str(self.
data.size) +
", array.shape: " + str(self.
data.shape))
438 def load(self, filename):
440 f = open(filename,
'rb')
441 savedict = pickle.load(f)
443 if self.
version != savedict[
"version"]:
444 print(
"Error! loaded file was made with different version of nntd! exiting ... ")
447 self.
varnum = savedict[
"varnum"]
449 self.
dataname = savedict[
"dataname"]
453 def makearray(self, evlist):
456 self.
data = np.array(evlist)