53 void initField(
float l3Current,
float dipoleCurrent);
61 void debug(
int debugLevel) { mDebugLevel = debugLevel; }
67 const std::list<Track>&
findTracks(
const std::unordered_map<
int, std::list<const Cluster*>>&
clusters);
69 void findTrackCandidates();
70 void findTrackCandidatesInSt5();
71 void findTrackCandidatesInSt4();
72 void findMoreTrackCandidates();
73 std::list<Track>::iterator findTrackCandidates(
int plane1,
int plane2,
bool skipUsedPairs,
const std::list<Track>::iterator& itFirstTrack);
75 std::list<Track>::iterator followTrackInOverlapDE(
const std::list<Track>::iterator& itTrack,
int currentDE,
int plane);
76 std::list<Track>::iterator followTrackInChamber(std::list<Track>::iterator& itTrack,
77 int chamber,
int lastChamber,
bool canSkip,
78 std::unordered_map<
int, std::unordered_set<uint32_t>>& excludedClusters);
79 std::list<Track>::iterator followTrackInChamber(std::list<Track>::iterator& itTrack,
80 int plane1,
int plane2,
int lastChamber,
81 std::unordered_map<
int, std::unordered_set<uint32_t>>& excludedClusters);
82 std::list<Track>::iterator addClustersAndFollowTrack(std::list<Track>::iterator& itTrack,
const TrackParam& paramAtCluster1,
83 const TrackParam* paramAtCluster2,
int nextChamber,
int lastChamber,
84 std::unordered_map<
int, std::unordered_set<uint32_t>>& excludedClusters);
88 void removeConnectedTracks(
int stMin,
int stMax);
95 std::list<Track>::iterator addTrack(
const std::list<Track>::iterator&
pos,
const Track& track);
99 void prepareForwardTracking(std::list<Track>::iterator& itTrack,
bool runSmoother);
100 void prepareBackwardTracking(std::list<Track>::iterator& itTrack,
bool refit);
101 void setCurrentParam(
Track& track,
const TrackParam&
param,
int chamber,
bool smoothed =
false);
102 bool propagateCurrentParam(
Track& track,
int chamber);
104 bool areUsed(
const Cluster& cl1,
const Cluster& cl2,
const std::vector<std::array<uint32_t, 4>>& usedClusters);
105 void excludeClustersFromIdenticalTracks(
const std::array<uint32_t, 4>& currentClusters,
106 const std::vector<std::array<uint32_t, 8>>& usedClusters,
107 std::unordered_map<
int, std::unordered_set<uint32_t>>& excludedClusters);
108 void moveClusters(std::unordered_map<
int, std::unordered_set<uint32_t>>&
source, std::unordered_map<
int, std::unordered_set<uint32_t>>& destination);
114 uint8_t requestedStationMask()
const;
116 int getTrackIndex(
const std::list<Track>::iterator& itCurrentTrack)
const;
117 void printTracks()
const;
118 void printTrack(
const Track& track)
const;
119 void printTrackParam(
const TrackParam& trackParam)
const;
120 template <
class... Args>
121 void print(Args... args)
const;
124 int getChamberId(
int plane) {
return (plane < 8) ? plane / 2 : 4 + (plane - 8) / 4; }
127 static constexpr double SMaxNonBendingDistanceToTrack = 1.;
129 static constexpr double SMaxBendingDistanceToTrack = 1.;
130 static constexpr double SMinBendingMomentum = 0.8;
132 static constexpr double SDefaultChamberZ[10] = {-526.16, -545.24, -676.4, -695.4, -967.5,
133 -998.5, -1276.5, -1307.5, -1406.6, -1437.6};
135 static constexpr double SChamberThicknessInX0[10] = {0.065, 0.065, 0.075, 0.075, 0.035,
136 0.035, 0.035, 0.035, 0.035, 0.035};
137 static constexpr int SNDE[10] = {4, 4, 4, 4, 18, 18, 26, 26, 26, 26};
139 TrackFitter mTrackFitter{};
142 std::array<std::vector<std::pair<const int, const std::list<const Cluster*>*>>, 32> mClusters{};
144 std::list<Track> mTracks{};
146 std::chrono::time_point<std::chrono::steady_clock> mStartTime{};
148 ErrorMap mErrorMap{};
150 double mChamberResolutionX2 = 0.;
151 double mChamberResolutionY2 = 0.;
152 double mBendingVertexDispersion2 = 0.;
153 double mMaxChi2ForTracking = 0.;
154 double mMaxChi2ForImprovement = 0.;
156 double mMaxMCSAngle2[10]{};
160 std::size_t mNCandidates = 0;
161 std::size_t mNCallTryOneCluster = 0;
162 std::size_t mNCallTryOneClusterFast = 0;
164 std::chrono::duration<double> mTimeFindCandidates{};
165 std::chrono::duration<double> mTimeFindMoreCandidates{};
166 std::chrono::duration<double> mTimeFollowTracks{};
167 std::chrono::duration<double> mTimeImproveTracks{};
168 std::chrono::duration<double> mTimeCleanTracks{};
169 std::chrono::duration<double> mTimeRefineTracks{};