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