 |
Belle II Software
release-05-01-25
|
10 #include <tracking/trackFindingCDC/filters/facet/FeasibleRLFacetFilter.h>
12 #include <tracking/trackFindingCDC/eventdata/hits/CDCFacet.h>
13 #include <tracking/trackFindingCDC/eventdata/hits/CDCRLWireHitTriple.h>
15 #include <tracking/trackFindingCDC/numerics/Modulo.h>
17 #include <tracking/trackFindingCDC/utilities/StringManipulation.h>
19 #include <framework/core/ModuleParamList.templateDetails.h>
22 using namespace TrackFindingCDC;
25 : m_param_hardRLCut(hardRLCut)
30 const std::string& prefix)
33 moduleParamList->
addParameter(prefixed(prefix,
"hardRLCut"),
35 "Switch to disallow the boarderline possible hit and "
36 "right left passage information.",
53 const short absOClockDelta = std::abs(oClockDelta);
56 if (cellExtend + absOClockDelta > 6) {
65 const short stableTwist = -sign(shape.
getOClockDelta()) * middleRLInfo;
66 const bool startToMiddleIsCrossing = startRLInfo != middleRLInfo;
67 const bool middleToEndIsCrossing = middleRLInfo != endRLInfo;
69 const bool bothAreCrossing = startToMiddleIsCrossing and middleToEndIsCrossing;
72 const bool shortArmIsCrossing = startToMiddleIsLong ? middleToEndIsCrossing : startToMiddleIsCrossing;
74 const bool onlyOneShortArm = isOdd(cellExtend);
75 const bool shortArmsAreCrossing = bothAreCrossing or (onlyOneShortArm and shortArmIsCrossing);
76 const bool noneAreCrossing = not startToMiddleIsCrossing and not middleToEndIsCrossing;
78 const bool orthoHard = stableTwist > 0 and shortArmsAreCrossing;
79 const bool ortho = stableTwist > 0 and not noneAreCrossing;
80 const bool meta = stableTwist > 0 or noneAreCrossing;
81 const bool para = not bothAreCrossing;
84 if (oClockDelta == 0) {
90 switch (absOClockDelta) {
106 switch (absOClockDelta) {
126 switch (absOClockDelta) {
bool isFeasible(const CDCRLWireHitTriple &rlWireHitTriple) const
Check if the hit triplet is a feasible combination for shape and rl passage information.
Shape getShape() const
Getter for the shape of this tiple if all three oriented wire hits are neighbors. Else ILLSHAPE.
short getStartToMiddleCellDistance() const
Getter for the start to middle cell distance.
ERightLeft getEndRLInfo() const
Getter for the right left passage information of the third oriented wire hit.
void exposeParameters(ModuleParamList *moduleParamList, const std::string &prefix) final
Expose the set of parameters of the filter to the module parameter list.
ERightLeft getMiddleRLInfo() const
Getter for the right left passage information of the second oriented wire hit.
Weight operator()(const CDCFacet &facet) final
Main filter method returning the weight of the facet.
ERightLeft getStartRLInfo() const
Getter for the right left passage information of the first oriented wire hit.
Class representing a triple of neighboring wire hits.
bool m_param_hardRLCut
Switch for hard selection.
Type for the different shapes of a triple of neighboring wire hits.
void addParameter(const std::string &name, T ¶mVariable, const std::string &description, const T &defaultValue)
Adds a new parameter to the module list.
Abstract base class for different kinds of events.
FeasibleRLFacetFilter(bool hardRLCut=true)
Constructor taking a flag if boarderline feasable cases should be excluded.
virtual void exposeParameters(ModuleParamList *moduleParamList, const std::string &prefix)
Expose the set of parameters of the filter to the module parameter list.
short getOClockDelta() const
Getter for the o'clock direction difference from start to middle compared to middle to end.
ERightLeft
Enumeration to represent the distinct possibilities of the right left passage.
Class representing a triple of neighboring oriented wire with additional trajectory information.
The Module parameter list class.
short getCellExtend() const
Getter for the sum of cell distances from start to middle and middle to end.
short getMiddleToEndCellDistance() const
Getter for the middle to end cell distance.