Belle II Software development
SimpleRelationFilter.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#include <tracking/vxdHoughTracking/filters/relations/SimpleRelationFilter.h>
9#include <tracking/trackFindingCDC/filters/base/Filter.icc.h>
10#include <tracking/trackFindingCDC/utilities/StringManipulation.h>
11#include <framework/core/ModuleParamList.templateDetails.h>
12
13#include <cmath>
14
15using namespace Belle2;
16using namespace TrackFindingCDC;
17using namespace vxdHoughTracking;
18
19void SimpleRelationFilter::exposeParameters(ModuleParamList* moduleParamList, const std::string& prefix)
20{
21 moduleParamList->addParameter(TrackFindingCDC::prefixed(prefix, "simpleThetaCutDeltaL0"), m_SimpleThetaCutDeltaL0,
22 "Simple cut in theta for the overlay region of different ladders in the same layer.",
24 moduleParamList->addParameter(TrackFindingCDC::prefixed(prefix, "simpleThetaCutDeltaL1"), m_SimpleThetaCutDeltaL1,
25 "Simple cut in theta for relations between hits with Delta_Layer = +-1.", m_SimpleThetaCutDeltaL1);
26 moduleParamList->addParameter(TrackFindingCDC::prefixed(prefix, "simpleThetaCutDeltaL2"), m_SimpleThetaCutDeltaL2,
27 "Simple cut in theta for relations between hits with Delta_Layer = +-2.", m_SimpleThetaCutDeltaL2);
28}
29
30TrackFindingCDC::Weight
31SimpleRelationFilter::operator()(const std::pair<const VXDHoughState*, const VXDHoughState*>& relation)
32{
33 const VXDHoughState::DataCache& currentVXDHoughState = relation.first->getDataCache();
34 const VXDHoughState::DataCache& nextVXDHoughState = relation.second->getDataCache();
35
36 const double absThetaDiff = std::abs(currentVXDHoughState.theta - nextVXDHoughState.theta);
37
38 // if the connection is possible in u, it should also be possible in v, but as there could in principle be a chance that the hits
39 // are on different sensors (X.X.1 -> X.(X+-1).2 or X.X.2 -> X.(X+-1).1) check for a similar theta value instead of v
40 if (currentVXDHoughState.layer == nextVXDHoughState.layer) {
41 if (absThetaDiff > m_SimpleThetaCutDeltaL0) {
42 return NAN;
43 }
44 // The hits are on the same layer but neighbouring ladders and in the overlap region they are in close proximity in phi.
45 // And since they passed the condition above, they are also in close proximity in theta.
46 // Thus they are close in phi and should be accepted.
47 return 1.0;
48 }
49
50 const ushort absLayerDiff = std::abs(currentVXDHoughState.layer - nextVXDHoughState.layer);
51 if ((absLayerDiff == 1 and absThetaDiff < m_SimpleThetaCutDeltaL1) or
52 (absLayerDiff == 2 and absThetaDiff < m_SimpleThetaCutDeltaL2)) {
53 return 1.0;
54 }
55
56 return NAN;
57
58}
The Module parameter list class.
double m_SimpleThetaCutDeltaL1
Filter relations in theta between hit states where the layer difference is +-1.
double m_SimpleThetaCutDeltaL2
Filter relations in theta between hit states where the layer difference is +-2.
TrackFindingCDC::Weight operator()(const std::pair< const VXDHoughState *, const VXDHoughState * > &relation) override
Return the weight based on azimuthal-angle separation.
void exposeParameters(ModuleParamList *moduleParamList, const std::string &prefix) override
Expose the parameters.
double m_SimpleThetaCutDeltaL0
Cut on relations in theta for overlay region on same layer but different ladder.
void addParameter(const std::string &name, T &paramVariable, const std::string &description, const T &defaultValue)
Adds a new parameter to the module list.
Abstract base class for different kinds of events.
Cache containing the most important information of this state which will often be needed.
unsigned short layer
Geometrical Layer this state is based on.