14 #include <tracking/dataobjects/FilterID.h>
17 #include <tracking/vxdCaTracking/TwoHitFilters.h>
19 #include <tracking/vxdCaTracking/ThreeHitFilters.h>
21 #include <tracking/vxdCaTracking/FourHitFilters.h>
23 #include <framework/logging/Logger.h>
37 template<
class Po
intType>
38 class XHitFilterFactory {
42 XHitFilterFactory(
double x = 0,
double y = 0,
double z = 0,
double mField = 1.5) :
60 using TwoHitFunction =
typename std::function<double(
const PointType&,
const PointType&)>;
63 using ThreeHitFunction =
typename std::function<double(
const PointType&,
const PointType&,
const PointType&)>;
66 using FourHitFunction =
typename std::function<double(
const PointType&,
const PointType&,
const PointType&,
const PointType&)>;
83 auto prepareStuff = [ = ](
const PointType & outerHit,
const PointType & innerHit) ->
void {
84 TVector3 tOuterHit(outerHit.X(), outerHit.Y(), outerHit.Z());
85 TVector3 tInnerHit(innerHit.X(), innerHit.Y(), innerHit.Z());
91 return [ = ](
const PointType & outerHit,
const PointType & innerHit) ->
double {
92 prepareStuff(outerHit, innerHit);
98 return [ = ](
const PointType & outerHit,
const PointType & innerHit) ->
double {
99 prepareStuff(outerHit, innerHit);
105 return [ = ](
const PointType & outerHit,
const PointType & innerHit) ->
double {
106 prepareStuff(outerHit, innerHit);
112 return [ = ](
const PointType & outerHit,
const PointType & innerHit) ->
double {
113 prepareStuff(outerHit, innerHit);
119 return [ = ](
const PointType & outerHit,
const PointType & innerHit) ->
double {
120 prepareStuff(outerHit, innerHit);
126 auto prepareStuffHiOc = [ = ](
const PointType & outerHit,
const PointType & innerHit) ->
void {
127 TVector3 tOuterHit(outerHit.X(), outerHit.Y(), outerHit.Z());
128 TVector3 tInnerHit(innerHit.X(), innerHit.Y(), innerHit.Z());
135 return [ = ](
const PointType & outerHit,
const PointType & innerHit) ->
double {
136 prepareStuffHiOc(outerHit, innerHit);
142 return [ = ](
const PointType & outerHit,
const PointType & innerHit) ->
double {
143 prepareStuffHiOc(outerHit, innerHit);
149 return [ = ](
const PointType & outerHit,
const PointType & innerHit) ->
double {
150 prepareStuffHiOc(outerHit, innerHit);
156 return [ = ](
const PointType & outerHit,
const PointType & innerHit) ->
double {
157 prepareStuffHiOc(outerHit, innerHit);
163 return [ = ](
const PointType & outerHit,
const PointType & innerHit) ->
double {
164 prepareStuffHiOc(outerHit, innerHit);
170 return [ = ](
const PointType & outerHit,
const PointType & innerHit) ->
double {
171 prepareStuffHiOc(outerHit, innerHit);
177 return [ = ](
const PointType & outerHit,
const PointType & innerHit) ->
double {
178 prepareStuffHiOc(outerHit, innerHit);
185 B2ERROR(
" XHitFilterAdapter-2Hit: given name (raw/full): " << variableType <<
187 " is not known, returning dummy function with 0.0 as a result instead!");
189 return [&](
const PointType&,
const PointType&) ->
double {
return 0.0; };
207 auto prepareStuff3Hit = [ = ](
const PointType & outerHit,
const PointType & centerHit,
const PointType & innerHit) ->
void {
208 TVector3 tOuterHit(outerHit.X(), outerHit.Y(), outerHit.Z());
209 TVector3 tCenterHit(centerHit.X(), centerHit.Y(), centerHit.Z());
210 TVector3 tInnerHit(innerHit.X(), innerHit.Y(), innerHit.Z());
216 return [ = ](
const PointType & outerHit,
const PointType & centerHit,
const PointType & innerHit) ->
double {
217 prepareStuff3Hit(outerHit, centerHit, innerHit);
223 return [ = ](
const PointType & outerHit,
const PointType & centerHit,
const PointType & innerHit) ->
double {
224 prepareStuff3Hit(outerHit, centerHit, innerHit);
230 return [ = ](
const PointType & outerHit,
const PointType & centerHit,
const PointType & innerHit) ->
double {
231 prepareStuff3Hit(outerHit, centerHit, innerHit);
237 return [ = ](
const PointType & outerHit,
const PointType & centerHit,
const PointType & innerHit) ->
double {
238 prepareStuff3Hit(outerHit, centerHit, innerHit);
244 return [ = ](
const PointType & outerHit,
const PointType & centerHit,
const PointType & innerHit) ->
double {
245 prepareStuff3Hit(outerHit, centerHit, innerHit);
251 return [ = ](
const PointType & outerHit,
const PointType & centerHit,
const PointType & innerHit) ->
double {
252 prepareStuff3Hit(outerHit, centerHit, innerHit);
258 return [ = ](
const PointType & outerHit,
const PointType & centerHit,
const PointType & innerHit) ->
double {
259 prepareStuff3Hit(outerHit, centerHit, innerHit);
265 return [ = ](
const PointType & outerHit,
const PointType & centerHit,
const PointType & innerHit) ->
double {
266 prepareStuff3Hit(outerHit, centerHit, innerHit);
272 return [ = ](
const PointType & outerHit,
const PointType & centerHit,
const PointType & innerHit) ->
double {
273 prepareStuff3Hit(outerHit, centerHit, innerHit);
280 auto prepareStuff4Hit = [ = ](
const PointType & outerHit,
const PointType & centerHit,
281 const PointType & innerHit) ->
void {
282 TVector3 tOuterHit(outerHit.X(), outerHit.Y(), outerHit.Z());
283 TVector3 tCenterHit(centerHit.X(), centerHit.Y(), centerHit.Z());
284 TVector3 tInnerHit(innerHit.X(), innerHit.Y(), innerHit.Z());
290 return [ = ](
const PointType & outerHit,
const PointType & centerHit,
const PointType & innerHit) ->
double {
291 prepareStuff4Hit(outerHit, centerHit, innerHit);
297 return [ = ](
const PointType & outerHit,
const PointType & centerHit,
const PointType & innerHit) ->
double {
298 prepareStuff4Hit(outerHit, centerHit, innerHit);
304 B2ERROR(
" XHitFilterAdapter-3Hit: given name (raw/full): " << variableType <<
306 " is not known, returning dummy function with 0.0 as a result instead!");
308 return [&](
const PointType&,
const PointType&,
const PointType&) ->
double {
return 0.0; };
327 auto prepareStuff4Hit = [ = ](
const PointType & outerHit,
const PointType & outerCenterHit,
328 const PointType & innerCenterHit,
const PointType & innerHit) ->
void {
329 TVector3 tOuterHit(outerHit.X(), outerHit.Y(), outerHit.Z());
330 TVector3 tOuterCenterHit(outerCenterHit.X(), outerCenterHit.Y(), outerCenterHit.Z());
331 TVector3 tInnerCenterHit(innerCenterHit.X(), innerCenterHit.Y(), innerCenterHit.Z());
332 TVector3 tInnerHit(innerHit.X(), innerHit.Y(), innerHit.Z());
338 return [ = ](
const PointType & outerHit,
const PointType & outerCenterHit,
339 const PointType & innerCenterHit ,
const PointType & innerHit) ->
double {
340 prepareStuff4Hit(outerHit, outerCenterHit, innerCenterHit, innerHit);
346 return [ = ](
const PointType & outerHit,
const PointType & outerCenterHit,
347 const PointType & innerCenterHit ,
const PointType & innerHit) ->
double {
348 prepareStuff4Hit(outerHit, outerCenterHit, innerCenterHit, innerHit);
354 B2ERROR(
" XHitFilterAdapter-4Hit: given name (raw/full): " << variableType <<
356 " is not known, returning dummy function with 0.0 as a result instead!");
358 return [&](
const PointType&,
const PointType&,
const PointType&,
const PointType&) ->
double {
return 0.0; };