Belle II Software  release-06-02-00
FilterID.cc
1 /**************************************************************************
2  * basf2 (Belle II Analysis Software Framework) *
3  * Author: The Belle II Collaboration *
4  * *
5  * See git log for contributors and copyright holders. *
6  * This file is licensed under LGPL-3.0, see LICENSE.md. *
7  **************************************************************************/
8 
9 #include "tracking/dataobjects/FilterID.h"
10 #include <framework/logging/Logger.h>
11 
12 #include <algorithm>
13 
14 using namespace std;
15 using namespace Belle2;
16 
17 // 2hit:
18 const string FilterID::nameDistance3D = "distance3D";
19 const string FilterID::nameDistanceXY = "distanceXY";
20 const string FilterID::nameDistanceZ = "distanceZ";
21 const string FilterID::nameSlopeRZ = "slopeRZ";
22 const string FilterID::nameNormedDistance3D = "normedDistance3D";
23 
24 
25 //2+1hit:
26 const string FilterID::nameAnglesHighOccupancy3D = "HioCangles3D"; // HioC means high occupancy
27 const string FilterID::nameAnglesHighOccupancyXY = "HioCanglesXY";
28 const string FilterID::nameAnglesHighOccupancyRZ = "HioCanglesRZ";
29 const string FilterID::nameDistanceHighOccupancy2IP = "HioCdistance2IP";
30 const string FilterID::nameDeltaSlopeHighOccupancyRZ = "HioCdeltaSlopeRZ";
31 const string FilterID::namePTHighOccupancy = "HioCpT";
32 const string FilterID::nameHelixParameterHighOccupancyFit = "HioChelixFit";
33 
34 
35 //3hit:
36 const string FilterID::nameAngles3D = "angles3D";
37 const string FilterID::nameAnglesRZ = "anglesRZ";
38 const string FilterID::nameAnglesXY = "anglesXY";
39 const string FilterID::nameDeltaSlopeRZ = "deltaSlopeRZ";
40 const string FilterID::namePT = "pT";
41 const string FilterID::nameDistance2IP = "distance2IP";
42 const string FilterID::nameHelixParameterFit = "helixParameterFit";
43 const string FilterID::nameDeltaSOverZ = "deltaSOverZ";
44 const string FilterID::nameDeltaSlopeZOverS = "deltaSlopeZOverS";
45 
46 
47 //3+1hit:
48 const string FilterID::nameDeltapTHighOccupancy = "HioCdeltaPt";
49 const string FilterID::nameDeltaDistanceHighOccupancy2IP = "HioCdeltaDistance2IP";
50 
51 
52 //4hit:
53 const string FilterID::nameDeltapT = "deltaPt";
54 const string FilterID::nameDeltaDistance2IP = "deltaDistance2IP";
55 
56 
57 //Collector FilterIDs
58 const string FilterID::nameNbFinderLost = "NbFinderLost";
59 const string FilterID::nameCellularAutomaton = "CellularAutomaton";
60 
61 
62 // trackletFilters:
63 const string FilterID::nameZiggZaggXY = "ZiggZaggXY";
64 const string FilterID::nameZiggZaggXYWithSigma = "ZiggZaggXYWithSigma";
65 const string FilterID::nameZiggZaggRZ = "ZiggZaggRZ";
66 const string FilterID::nameCirclefit = "Circlefit";
67 const string FilterID::nameHelixfit = "Helixfit";
68 const string FilterID::nameSimpleLineFit3D = "SimpleLineFit3D";
69 
70 
71 //TF-steps:
72 const string FilterID::nameHopfield = "Hopfield";
73 const string FilterID::nameGreedy = "Greedy";
74 const string FilterID::nameTcDuel = "TcDuel";
75 const string FilterID::nameTcFinderCurr = "TcFinderCurr";
76 const string FilterID::nameCalcQIbyKalman = "CalcQIbyKalman";
77 const string FilterID::nameOverlapping = "Overlapping";
79 
80 
81 // for display: silent kills
82 const string FilterID::nameSilentTcc = "SilentTcc";
83 const string FilterID::nameSilentHitFinder = "SilentHitFinder";
84 const string FilterID::nameSilentSegFinder = "SilentSegFinder";
85 
86 
87 // tests which are only for debugging and validation processes
88 const string FilterID::nameAlwaysTrue2Hit = "alwaysTrue2Hit";
89 const string FilterID::nameAlwaysFalse2Hit = "alwaysFalse2Hit";
90 const string FilterID::nameAlwaysTrue3Hit = "alwaysTrue3Hit";
91 const string FilterID::nameAlwaysFalse3Hit = "alwaysFalse3Hit";
92 const string FilterID::nameAlwaysTrue4Hit = "alwaysTrue4Hit";
93 const string FilterID::nameAlwaysFalse4Hit = "alwaysFalse4Hit";
94 const string FilterID::nameRandom2Hit = "random2Hit";
95 const string FilterID::nameRandom3Hit = "random3Hit";
96 const string FilterID::nameRandom4Hit = "random4Hit";
97 
98 
99 // other stuff
100 const string FilterID::nameOverHighestAllowedLayer = "overHighestAllowedLayer";
101 const string FilterID::nameOutOfSectorRange = "outOfSectorRange";
102 
103 
104 
105 
106 const boost::array<string, FilterID::numFilters> FilterID::nameVector = { {
107  // 2hit:
108  nameDistance3D,
109  nameDistanceXY,
110  nameDistanceZ,
111  nameSlopeRZ,
112  nameNormedDistance3D,
113 
114 
115  //2+1hit:
116  nameAnglesHighOccupancy3D,
117  nameAnglesHighOccupancyXY,
118  nameAnglesHighOccupancyRZ,
119  nameDistanceHighOccupancy2IP,
120  nameDeltaSlopeHighOccupancyRZ,
121  namePTHighOccupancy,
122  nameHelixParameterHighOccupancyFit,
123 
124 
125  //3hit:
126  nameAngles3D,
127  nameAnglesRZ,
128  nameAnglesXY,
129  nameDeltaSlopeRZ,
130  namePT,
131  nameDistance2IP,
132  nameHelixParameterFit,
133  nameDeltaSOverZ,
134  nameDeltaSlopeZOverS,
135 
136 
137  //3+1hit:
138  nameDeltapTHighOccupancy,
139  nameDeltaDistanceHighOccupancy2IP,
140 
141 
142  //4hit:
143  nameDeltapT,
144  nameDeltaDistance2IP,
145 
146 
147  //Collector FilterIDs
148  nameNbFinderLost,
149  nameCellularAutomaton,
150 
151 
152  // trackletFilters:
153  nameZiggZaggXY,
154  nameZiggZaggXYWithSigma,
155  nameZiggZaggRZ,
156  nameCirclefit,
157  nameHelixfit,
158  nameSimpleLineFit3D,
159 
160 
161  //TF-steps:
162  nameHopfield,
163  nameGreedy,
164  nameTcDuel,
165  nameTcFinderCurr,
166  nameCalcQIbyKalman,
167  nameOverlapping,
169 
170 
171  // for display: silent kills
172  nameSilentTcc,
173  nameSilentHitFinder,
174  nameSilentSegFinder,
175 
176 
177  // tests which are only for debugging and validation processes
178  nameAlwaysTrue2Hit,
179  nameAlwaysFalse2Hit,
180  nameAlwaysTrue3Hit,
181  nameAlwaysFalse3Hit,
182  nameAlwaysTrue4Hit,
183  nameAlwaysFalse4Hit,
184  nameRandom2Hit,
185  nameRandom3Hit,
186  nameRandom4Hit,
187 
188 
189  // other stuff
190  nameOverHighestAllowedLayer,
191  nameOutOfSectorRange
192  }
193 };
194 
195 
196 const boost::array<FilterID::filterTypes, FilterID::numFilters> FilterID::enumVector = {
197  {
198  // 2hit:
199  FilterID::distance3D,
200  FilterID::distanceXY,
201  FilterID::distanceZ,
202  FilterID::slopeRZ,
203  FilterID::normedDistance3D,
204 
205 
206  //2+1hit:
207  FilterID::anglesHighOccupancy3D,
208  FilterID::anglesHighOccupancyXY,
209  FilterID::anglesHighOccupancyRZ,
210  FilterID::distanceHighOccupancy2IP,
211  FilterID::deltaSlopeHighOccupancyRZ,
212  FilterID::pTHighOccupancy,
213  FilterID::helixParameterHighOccupancyFit,
214 
215 
216  //3hit:
217  FilterID::angles3D,
218  FilterID::anglesRZ,
219  FilterID::anglesXY,
220  FilterID::deltaSlopeRZ,
221  FilterID::pT,
222  FilterID::distance2IP,
223  FilterID::helixParameterFit,
224  FilterID::deltaSOverZ,
225  FilterID::deltaSlopeZOverS,
226 
227 
228  //3+1hit:
229  FilterID::deltapTHighOccupancy,
230  FilterID::deltaDistanceHighOccupancy2IP,
231 
232 
233  //4hit:
234  FilterID::deltapT,
235  FilterID::deltaDistance2IP,
236 
237 
238  //Collector FilterIDs
239  FilterID::nbFinderLost,
240  FilterID::cellularAutomaton,
241 
242 
243  // trackletFilters:
244  FilterID::ziggZaggXY,
245  FilterID::ziggZaggXYWithSigma,
246  FilterID::ziggZaggRZ,
247  FilterID::circlefit,
248  FilterID::helixfit,
249  FilterID::simpleLineFit3D,
250 
251 
252  //TF-steps:
253  FilterID::hopfield,
254  FilterID::greedy,
255  FilterID::tcDuel,
256  FilterID::tcFinderCurr,
257  FilterID::calcQIbyKalman,
258  FilterID::overlapping,
260 
261 
262  // for display: silent kills
263  FilterID::silentTcc,
264  FilterID::silentHitFinder,
265  FilterID::silentSegFinder,
266 
267 
268  // tests which are only for debugging and validation processes
269  FilterID::alwaysTrue2Hit,
270  FilterID::alwaysFalse2Hit,
271  FilterID::alwaysTrue3Hit,
272  FilterID::alwaysFalse3Hit,
273  FilterID::alwaysTrue4Hit,
274  FilterID::alwaysFalse4Hit,
275  FilterID::random2Hit,
276  FilterID::random3Hit,
277  FilterID::random4Hit,
278 
279 
280  // other stuff
281  FilterID::overHighestAllowedLayer,
282  FilterID::outOfSectorRange
283  }
284 };
285 
286 
287 
288 FilterID::filterTypes FilterID::getFilterType(const std::string& filterString)
289 {
290  // WARNING TODO FIXME: improve that function (by the way, it is not sorted like the entries from above)
291  if (filterString == nameAngles3D)
292  { return angles3D; }
293  else if (filterString == nameAnglesRZ)
294  {return anglesRZ;}
295  else if (filterString == nameAnglesXY)
296  {return anglesXY;}
297  else if (filterString == nameDistance3D)
298  {return distance3D;}
299  else if (filterString == nameDistanceXY)
300  {return distanceXY;}
301  else if (filterString == nameDistanceZ)
302  {return distanceZ;}
303  else if (filterString == nameHelixParameterFit)
304  {return helixParameterFit;}
305  else if (filterString == nameDeltaSOverZ)
306  {return deltaSOverZ;}
307  else if (filterString == nameDeltaSlopeZOverS)
308  {return deltaSlopeZOverS;}
309  else if (filterString == nameSlopeRZ)
310  {return slopeRZ;}
311  else if (filterString == nameDeltaSlopeRZ)
312  {return deltaSlopeRZ;}
313  else if (filterString == namePT)
314  {return pT;}
315  else if (filterString == nameDeltapT)
316  {return deltapT;}
317  else if (filterString == nameNormedDistance3D)
318  {return normedDistance3D;}
319  else if (filterString == nameDistance2IP)
320  {return distance2IP;}
321  else if (filterString == nameDeltaDistance2IP)
322  {return deltaDistance2IP;}
323  else if (filterString == nameAnglesHighOccupancy3D)
324  {return anglesHighOccupancy3D;}
325  else if (filterString == nameAnglesHighOccupancyXY)
326  {return anglesHighOccupancyXY;}
327  else if (filterString == nameAnglesHighOccupancyRZ)
328  {return anglesHighOccupancyRZ;}
329  else if (filterString == nameDistanceHighOccupancy2IP)
330  {return distanceHighOccupancy2IP;}
331  else if (filterString == nameDeltaSlopeHighOccupancyRZ)
332  {return deltaSlopeHighOccupancyRZ;}
333  else if (filterString == namePTHighOccupancy)
334  {return pTHighOccupancy;}
335  else if (filterString == nameHelixParameterHighOccupancyFit)
336  {return helixParameterHighOccupancyFit;}
337  else if (filterString == nameDeltapTHighOccupancy)
338  {return deltapTHighOccupancy;}
339  else if (filterString == nameDeltaDistanceHighOccupancy2IP)
340  {return deltaDistanceHighOccupancy2IP;}
341  else if (filterString == nameNbFinderLost)
342  {return nbFinderLost;}
343  else if (filterString == nameCellularAutomaton)
344  {return cellularAutomaton;}
345 
346  else if (filterString == nameHopfield)
347  {return hopfield;}
348  else if (filterString == nameGreedy)
349  {return greedy;}
350 
351  else if (filterString == nameTcDuel)
352  {return tcDuel;}
353  else if (filterString == nameTcFinderCurr)
354  {return tcFinderCurr;}
355 
356  else if (filterString == nameZiggZaggXY)
357  {return ziggZaggXY;}
358  else if (filterString == nameZiggZaggXYWithSigma)
359  {return ziggZaggXYWithSigma;}
360  else if (filterString == nameZiggZaggRZ)
361  {return ziggZaggRZ;}
362 
363  else if (filterString == nameCalcQIbyKalman)
364  {return calcQIbyKalman;}
365  else if (filterString == nameOverlapping)
366  {return overlapping;}
367  else if (filterString == nameCirclefit)
368  {return circlefit;}
369  else if (filterString == nameHelixfit)
370  {return helixfit;}
371  else if (filterString == nameSimpleLineFit3D)
372  {return simpleLineFit3D;}
373 
374  else if (filterString == nameSilentTcc)
375  {return silentTcc;}
376  else if (filterString == nameSilentHitFinder)
377  {return silentHitFinder;}
378  else if (filterString == nameSilentSegFinder)
379  {return silentSegFinder;}
380 
381  else if (filterString == nameAlwaysTrue2Hit)
382  {return alwaysTrue2Hit;}
383  else if (filterString == nameAlwaysFalse2Hit)
384  {return alwaysFalse2Hit;}
385  else if (filterString == nameAlwaysTrue3Hit)
386  {return alwaysTrue3Hit;}
387  else if (filterString == nameAlwaysFalse3Hit)
388  {return alwaysFalse3Hit;}
389  else if (filterString == nameAlwaysTrue4Hit)
390  {return alwaysTrue4Hit;}
391  else if (filterString == nameAlwaysFalse4Hit)
392  {return alwaysFalse4Hit;}
393  else if (filterString == nameRandom2Hit)
394  {return random2Hit;}
395  else if (filterString == nameRandom3Hit)
396  {return random3Hit;}
397  else if (filterString == nameRandom4Hit)
398  {return random4Hit;}
399 
400  else if (filterString == nameOverHighestAllowedLayer)
401  {return overHighestAllowedLayer;}
402  else if (filterString == nameOutOfSectorRange)
403  {return outOfSectorRange;}
404 
405  else {
406  B2WARNING(" FilterID::getFilterType. Input string is out of range, please check that...");
407  return numFilters;
408  }
409 }
410 
411 
412 
413 FilterID::filterTypes FilterID::getFilterType(int filterInt)
414 {
415  if (filterInt >= distance3D && filterInt < numFilters) {
416  return enumVector[filterInt];
417  }
418  B2WARNING(" FilterID::getFilterType. Input int is out of range, please check that...");
419  return numFilters;
420 }
421 
422 
423 
424 std::string FilterID::getFilterString(int filterType)
425 {
426  if (filterType >= distance3D && filterType < numFilters) {
427  return nameVector[filterType];
428  }
429  B2WARNING(" FilterID::getFilterString. Input int is out of range, please check that...");
430  return "";
431 }
432 
433 
435 std::string FilterID::getTypeName(FilterID::filterTypes type)
436 {
438  auto pos = std::find(enumVector.begin(), enumVector.end(), type);
439  if (pos == enumVector.end()) {
440  B2WARNING("FilterID::getTypeName(): given iD " << type <<
441  " is not a valid FilterID, return UnknownType!");
442  return std::string("UnknownType");
443  }
444  return FilterID::nameVector[type];
445 }
filterTypes
filterTyoes contains enums assigning unique values for each filter type allowing fast filter type rec...
Definition: FilterID.h:31
Abstract base class for different kinds of events.