10#include <tracking/trackingUtilities/findlets/base/Findlet.h>
12#include <tracking/trackingUtilities/numerics/EForwardBackward.h>
13#include <tracking/ckf/general/utilities/SearchDirection.h>
15#include <tracking/ckf/cdc/entities/CDCCKFState.h>
16#include <tracking/ckf/cdc/entities/CDCCKFPath.h>
18#include <cdc/topology/CDCWire.h>
19#include <cdc/topology/CDCWireTopology.h>
21#include <tracking/trackingUtilities/utilities/StringManipulation.h>
22#include <framework/core/ModuleParamList.h>
23#include <tracking/trackingUtilities/numerics/Angle.h>
35 const TrackingUtilities::CDCWireHit* const > {
84 moduleParamList->
addParameter(TrackingUtilities::prefixed(prefix,
"maximalLayerJump"),
86 moduleParamList->
addParameter(TrackingUtilities::prefixed(prefix,
"maximalLayerJumpBackwardSeed"),
88 moduleParamList->
addParameter(TrackingUtilities::prefixed(prefix,
"maximalDeltaPhi"),
90 moduleParamList->
addParameter(TrackingUtilities::prefixed(prefix,
"hitFindingDirection"),
93 moduleParamList->
addParameter(TrackingUtilities::prefixed(prefix,
"firstActiveCDCLayer"),
111 B2FATAL(
"CDCCKFStateCreator: No valid direction specified. Please use forward/backward.");
117 const std::vector<const TrackingUtilities::CDCWireHit*>& wireHits)
override
124 const size_t nHits = wireHits.size();
126 for (
auto hitPtr : wireHits) {
130 if (hitPtr->getAutomatonCell().hasBackgroundFlag() || hitPtr->getAutomatonCell().hasTakenFlag()) {
139 const auto& lastState = path.back();
141 double lastICLayer = -1;
142 if (lastState.isSeed()) {
147 const auto& wires = wireTopology.getWires();
148 const float maxForwardZ = wires.back().getForwardZ();
149 const float maxBackwardZ = wires.back().getBackwardZ();
152 const float seedPosZ = seedPos.
z();
154 if (seedPosZ < maxForwardZ && seedPosZ > maxBackwardZ) {
159 seedMomZOne = seedMomZOne / seedMomZOne.
z();
164 float minDist = 99999;
165 for (
const auto& wire : wires) {
166 const float maxZ = seedPosZ > 0 ? wire.getForwardZ() : wire.getBackwardZ();
169 const auto distance = wire.getDistance(extrapolatedPos);
170 if (distance < minDist) {
172 lastICLayer = wire.getICLayer();
175 B2DEBUG(29, lastICLayer <<
" (d=" << minDist <<
")");
179 lastPhi = lastState.getWireHit()->getRefPos2D().phi();
180 lastICLayer = lastState.getWireHit()->getWire().getICLayer();
184 std::vector<const TrackingUtilities::CDCWireHit*> wireHitsOnPath;
185 for (
auto const& state : path) {
186 if (! state.isSeed()) {
187 wireHitsOnPath.push_back(state.getWireHit());
190 std::sort(wireHitsOnPath.begin(), wireHitsOnPath.end());
192 size_t nHits = wireHits.size();
193 for (
size_t i = 0; i < nHits; i++) {
206 if (! lastState.isSeed()) {
215 if (std::binary_search(wireHitsOnPath.begin(), wireHitsOnPath.end(), wireHit)) {
219 nextStates.emplace_back(wireHit);
Create CKF states, based on the current path. Perform some basic selection at this stage (based on ph...
TrackingUtilities::Findlet< CDCCKFState, const CDCCKFState, const TrackingUtilities::CDCWireHit *const > Super
Parent class.
TrackingUtilities::EForwardBackward m_param_writeOutDirection
Direction parameter converted from the string parameters.
void setMaximalLayerJump(int maximalLayerJump)
Set maximal layer jump for state creation.
double m_maximalDeltaPhi
Maximal distance in phi between the path last hit/seed and the candidate hit.
int m_maximalLayerJump_backwardSeed
Maximum allowed step over layers (if outside->in CKF) for first step after seed (e....
int m_maximalLayerJump
Maximum allowed step over layers.
bool doForward
Direction parameter converted to boolean for convenience.
std::vector< CDCCKFWireHitCache > m_wireHitCache
Cache to store frequently used information.
void setMaximalDeltaPhi(double maximalDeltaPhi)
Set maximal delta phi for state creation.
void setMaximalLayerJumpBackwardSeed(int maximalLayerJumpBackwardSeed)
Set maximal layer jump for backward seed tracks.
void beginEvent() override
Clear the wireHit cache.
void apply(std::vector< CDCCKFState > &nextStates, const CDCCKFPath &path, const std::vector< const TrackingUtilities::CDCWireHit * > &wireHits) override
Main method of the findlet. Select + create states (output parameter nextStates) suitable for the inp...
void exposeParameters(ModuleParamList *moduleParamList, const std::string &prefix) override
Expose the parameters of the sub findlets.
std::string m_param_writeOutDirectionAsString
Parameter for the direction in which the tracks are built.
void setHitFindingDirection(const std::string &hitFindingDirection)
Set hit finding direction.
int m_firstActiveCDCLayer
First active inner CDC layer (0 for default Belle II, 14 if SL0 and SL1 deactivated)
static CDCWireTopology & getInstance()
Getter for the singleton instance of the wire topology.
The Module parameter list class.
Class representing a hit wire in the central drift chamber.
void beginEvent() override
Receive and dispatch signal for the start of a new event.
Interface for a minimal algorithm part that wants to expose some parameters to a module.
A three dimensional vector.
double z() const
Getter for the z coordinate.
void addParameter(const std::string &name, T ¶mVariable, const std::string &description, const T &defaultValue)
Adds a new parameter to the module list.
std::vector< CDCCKFState > CDCCKFPath
Shortcut for the collection of CDC CKF-algorithm states.
TrackingUtilities::EForwardBackward fromString(const std::string &directionString)
Helper function to turn a direction string into a valid forward backward information.
Abstract base class for different kinds of events.
Store basic wire info for faster access.
double phi
azimuthal coordinate
static double normalised(const double angle)
Normalise an angle to lie in the range from [-pi, pi].