NSL
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends
TrackerLayerChargeInRange.h
Go to the documentation of this file.
1 #ifndef NSL_SELECTIONS_TRACKER_TRACKERLAYERCHARGEINRANGE_H
2 #define NSL_SELECTIONS_TRACKER_TRACKERLAYERCHARGEINRANGE_H
3 
4 // our headers
5 #include "NSL/Selection.h"
6 
7 namespace NSL {
8 namespace Selections {
9 
10 namespace TrackerLayer {
11 
12 class ChargeInRange : public Selection {
13 public:
14  ChargeInRange(unsigned int layer, float min, float max, NAIA::TrTrack::ChargeRecoType recoType);
15 };
16 } // namespace TrackerLayer
17 
18 namespace { // hidden
19 namespace tl_base = ::NSL::Selections::TrackerLayer;
20 }
21 
22 namespace PG {
23 namespace TrackerLayer {
24 
25 namespace { // hidden
26 std::pair<float, float> chargeLimits(unsigned int charge, unsigned int layer) {
27 
28  if (layer == 1) {
29  switch (charge) {
30  case 1:
31  case 2:
32  return {static_cast<float>(charge) - 0.4f, static_cast<float>(charge) + 0.9f};
33  default:
34  return {0.0f, static_cast<float>(charge) + 0.8f};
35  }
36  }
37  else if (layer == 9) {
38  switch (charge) {
39  case 1:
40  case 2:
41  return {static_cast<float>(charge) - 0.4f, static_cast<float>(charge) + 0.9f};
42  default:
43  return {static_cast<float>(charge) - 0.5f, static_cast<float>(charge) + 1.0f};
44  }
45  }
46  else return {0,0};
47 }
48 } // namespace
49 
51 public:
52  explicit ChargeInRange(unsigned int layer, unsigned int charge, NAIA::TrTrack::ChargeRecoType recoType)
53  : tl_base::ChargeInRange(layer, chargeLimits(charge, layer).first, chargeLimits(charge, layer).second, recoType) {}
54 };
55 
56 } // namespace TrackerLayer
57 } // namespace PG
58 
59 namespace Common {
60 namespace TrackerLayer {
61 
62 namespace { // hidden
63 std::pair<float, float> chargeLimits(unsigned int charge, unsigned int layer) {
64 
65  if (layer == 1) {
66  switch (charge) {
67  case 1:
68  case 2:
69  return {static_cast<float>(charge) - 0.4f, static_cast<float>(charge) + 0.9f};
70  case 9:
71  case 11:
72  case 13:
73  case 10:
74  case 12:
75  case 14:
76  case 16:
77  return {static_cast<float>(charge) - 0.0585f * pow(charge, 1.15f) - 0.35f,
78  static_cast<float>(charge) + 0.0334f * pow(charge, 1.15f) + 0.20f};
79  default:
80  return {static_cast<float>(charge) - 0.46f - (charge - 3.0f) * 0.1f,
81  static_cast<float>(charge) + ((charge < 5.0f) ? 0.65f : 0.65f + (charge - 5.0f) * 0.03f)};
82  }
83  }
84  if (layer == 9) {
85  switch (charge) {
86  case 1:
87  case 2:
88  return {static_cast<float>(charge) - 0.4f, static_cast<float>(charge) + 0.9f};
89  case 9:
90  case 11:
91  case 13:
92  case 10:
93  case 12:
94  case 14:
95  case 16:
96  return {static_cast<float>(charge) - 0.0284f * pow(charge, 1.15f) - 0.17f,
97  static_cast<float>(charge) + 0.0585f * pow(charge, 1.15f) + 0.35f};
98  default:
99  return {static_cast<float>(charge) - 0.5f, static_cast<float>(charge) + 1.5f + (charge - 3.0f) * 0.06f};
100  }
101  }
102  else return {0,0};
103 }
104 } // namespace
105 
107 public:
108  explicit ChargeInRange(unsigned int layer, unsigned int charge, NAIA::TrTrack::ChargeRecoType recoType)
109  : tl_base::ChargeInRange(layer, chargeLimits(charge, layer).first, chargeLimits(charge, layer).second, recoType) {}
110 };
111 } // namespace TrackerLayer
112 } // namespace Common
113 
114 } // namespace Selections
115 } // namespace NSL
116 
117 #endif
ChargeInRange(unsigned int layer, unsigned int charge, NAIA::TrTrack::ChargeRecoType recoType)
ChargeInRange(unsigned int layer, unsigned int charge, NAIA::TrTrack::ChargeRecoType recoType)
ChargeInRange(unsigned int layer, float min, float max, NAIA::TrTrack::ChargeRecoType recoType)