8#include <tracking/trackFindingCDC/findlets/minimal/AxialTrackCreatorHitLegendre.h>
10#include <tracking/trackFindingCDC/legendre/quadtree/OffOriginExtension.h>
12#include <tracking/trackFindingCDC/eventdata/tracks/CDCTrack.h>
13#include <tracking/trackFindingCDC/eventdata/hits/CDCWireHit.h>
15#include <tracking/trackFindingCDC/utilities/StringManipulation.h>
17#include <framework/core/ModuleParamList.templateDetails.h>
20using namespace TrackFindingCDC;
29 if (pass == EPass::NonCurlers) {
32 XYSpans xySpans({{0, maxTheta}, { -0.02, 0.14}});
35 return std::make_unique<AxialHitQuadTreeProcessor>(maxLevel, seedLevel, xySpans, precisionFunction);
37 }
else if (pass == EPass::NonCurlersWithIncreasingThreshold) {
40 XYSpans xySpans({{0, maxTheta}, { -0.02, 0.14}});
43 return std::make_unique<AxialHitQuadTreeProcessor>(maxLevel, seedLevel, xySpans, precisionFunction);
45 }
else if (pass == EPass::FullRange) {
48 XYSpans xySpans({{0, maxTheta}, {0.00, 0.30}});
51 return std::make_unique<AxialHitQuadTreeProcessor>(maxLevel, seedLevel, xySpans, precisionFunction);
53 }
else if (pass == EPass::Straight) {
56 XYSpans xySpans({{0, maxTheta}, { -0.02, 0.02}});
58 PrecisionFunction precisionFunction = [
this](
double curv __attribute__((unused))) {
return m_param_precision ;};
60 return std::make_unique<AxialHitQuadTreeProcessor>(maxLevel, seedLevel, xySpans, precisionFunction);
63 B2FATAL(
"Invalid pass");
76 return "Generates axial tracks from hits using several increasingly relaxed legendre space search over phi0 and curvature.";
80 const std::string& prefix)
82 moduleParamList->
addParameter(prefixed(prefix,
"minNHits"),
84 "Parameter to define minimal threshold of number of hits.",
86 if (
m_pass == EPass::Straight) {
87 moduleParamList->
addParameter(prefixed(prefix,
"precision"),
89 "Parameter to define precision of quadtree search.",
100 std::vector<CDCTrack>& tracks)
104 std::vector<const CDCWireHit*> unusedAxialWireHits;
105 for (
const CDCWireHit* wireHit : axialWireHits) {
106 (*wireHit)->setMaskedFlag(
false);
107 if ((*wireHit)->hasTakenFlag())
continue;
108 unusedAxialWireHits.push_back(wireHit);
113 qtProcessor->seed(unusedAxialWireHits);
117 std::unique_ptr<BaseCandidateReceiver> receiver;
118 if (not(
m_pass == EPass::Straight)) {
119 receiver = std::make_unique<OffOriginExtension>(unusedAxialWireHits);
121 receiver = std::make_unique<BaseCandidateReceiver>(unusedAxialWireHits);
127 const std::vector<CDCTrack>& newTracks = receiver->getTracks();
128 tracks.insert(tracks.end(), newTracks.begin(), newTracks.end());
135 const double rCDC = 113.;
138 const double curlCurv = 2. / rCDC;
141 qtProcessor.
fill(candidateReceiver, 50, curlCurv);
144 qtProcessor.
fill(candidateReceiver, 70, 2 * curlCurv);
147 int minNHits =
m_pass == EPass::FullRange ? 30 : 50;
148 double maxCurv =
m_pass == EPass::FullRange ? 0.15 : 0.07;
150 qtProcessor.
fill(candidateReceiver, minNHits, maxCurv);
154 if (
m_pass != EPass::NonCurlers) {
156 if (maxCurv > 0.15) maxCurv = 0.15;
The Module parameter list class.
A QuadTreeProcessor for TrackHits.
void apply(const std::vector< const CDCWireHit * > &axialWireHits, std::vector< CDCTrack > &tracks) final
Execute one pass over a quad tree.
EPass m_pass
The pass key for lookup of the parameters for this pass.
const double m_param_stepScale
Parameter to define multiplier for hits threshold for the next quadtree iteration.
void initialize() final
Initialisation before the event processing starts.
int m_param_minNHits
Parameter to define minimal threshold of hit.
AxialTrackCreatorHitLegendre()
Constructor.
std::string getDescription() final
Short description of the findlet.
AxialHitQuadTreeProcessor::CandidateReceiver CandidateReceiver
lambda function used for postprocessing
void executeRelaxation(const CandidateReceiver &candidateReceiver, AxialHitQuadTreeProcessor &qtProcessor)
Performs quadtree search.
std::unique_ptr< AxialHitQuadTreeProcessor > constructQTProcessor(EPass pass)
Method to create QTProcessor that performs the search.
void exposeParameters(ModuleParamList *moduleParamList, const std::string &prefix) final
Expose the parameters to a module.
double m_param_precision
Parameter to define precision of quadtree search in case of straight pass.
EPass
Pass keys for the different sets of predefined parameters for a pass if legendre search Note: Naming ...
Class representing a hit wire in the central drift chamber.
void initialize() override
Receive and dispatch signal before the start of the event processing.
static double getOriginCurvPrecision(double curv)
Function which estimates desired curvature resolution of quadtree node in the given pt region paramet...
static double getNonOriginCurvPrecision(double curv)
Function which estimates desired curvature resolution of quadtree node in the given pt region paramet...
static constexpr int getLookupGridLevel()
Returns desired deepness of the trigonometrical lookup table. Used as template parameter for the Trig...
std::function< double(double)> PrecisionFunction
Function type which is used for resolution calculations (resolution=f(curvature)) Takes a curvature v...
std::pair< XSpan, YSpan > XYSpans
This pair of spans describes the span of a node.
void fill(const CandidateReceiver &candidateReceiver, int nHitsThreshold)
Start filling the already created tree.
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.