30 const std::vector<THitI>& hits = t.
StsHits;
31 const int nHits = t.
StsHits.size();
33 const signed short int step = -2 *
static_cast<int>(dir) + 1;
34 const int iFirstHit = (dir) ? nHits - 1 : 0;
35 const int iLastHit = (dir) ? 0 : nHits - 1;
54 x0 = (*vStsHitPointsUnused)[ihp].X();
55 y0 = (*vStsHitPointsUnused)[ihp].Y();
67 x1 = (*vStsHitPointsUnused)[ihp].X();
68 y1 = (*vStsHitPointsUnused)[ihp].Y();
79 x2 = (*vStsHitPointsUnused)[ihp].X();
80 y2 = (*vStsHitPointsUnused)[ihp].Y();
88 fvec dzi = 1. / (z1 - z0);
94 T.tx = (x1 - x0) * dzi;
95 T.ty = (y1 - y0) * dzi;
107 T.C30 = T.C31 = T.C32 = 0;
108 T.C40 = T.C41 = T.C42 = T.C43 = 0;
109 T.C22 = T.C33 = vINF;
122 fld.Set(fB2, fz2, fB1, fz1, fB0, fz0);
124 int ista_prev = ista1;
127 for (
int i = iFirstHit + step; step *
i <= step * iLastHit;
i += step) {
136 if ((step * ista <= step * (
NMvdStations + (step + 1) / 2 - 1))
137 && (step * ista_prev >= step * (
NMvdStations + (step + 1) / 2 - 1 - step)))
144 L1HitPoint& point = (*vStsHitPointsUnused)[ihp];
175 fld.Set(fB2, fz2, fB1, fz1, fB0, fz0);
184 for (
int i = 0;
i < 1;
i++) {
201 std::vector<THitI> newHits;
204 const signed short int step = -2 *
static_cast<int>(dir) + 1;
205 const int iFirstHit = (dir) ? 2 : t.
StsHits.size() - 3;
217 const L1Station& sta0 = vStations[ista0];
218 const L1Station& sta1 = vStations[ista1];
219 const L1Station& sta2 = vStations[ista2];
225 x0 = (*vStsHitPointsUnused)[ihp].X();
226 y0 = (*vStsHitPointsUnused)[ihp].Y();
238 x1 = (*vStsHitPointsUnused)[ihp].X();
239 y1 = (*vStsHitPointsUnused)[ihp].Y();
251 x2 = (*vStsHitPointsUnused)[ihp].X();
252 y2 = (*vStsHitPointsUnused)[ihp].Y();
272 fld.Set(fB2, fz2, fB1, fz1, fB0, fz0);
274 int ista = ista2 + 2 * step;
279 for (; (ista <
NStations) && (ista >= 0); ista += step) {
288 const fscal iz = 1 / T.z[0];
295 L1StsHit& hit = (*vStsHitsUnused)[ih];
303 L1HitPoint& point = (*vStsHitPointsUnused)[ih];
304 xh = point.
X(), yh = point.
Y(), zh = point.
Z();
314 fscal y_minus_new = y[0] - dym_est;
315 if (yh < y_minus_new)
321 fscal dx = xh - x[0];
322 fscal dy = yh - y[0];
323 fscal d2 = dx * dx + dy * dy;
328 if (dx * dx > dxm_est2)
337 newHits.push_back(
RealIHit[iHit_best]);
340 L1StsHit& hit = (*vStsHitsUnused)[iHit_best];
343 L1HitPoint& point = (*vStsHitPointsUnused)[iHit_best];
344 x = point.
X(), y = point.
Y();
374 fld.Set(fB2, fz2, fB1, fz1, fB0, fz0);
379 const unsigned int NOldHits = t.
StsHits.size();
380 const unsigned int NNewHits = newHits.size();
381 t.
StsHits.resize(NNewHits + NOldHits);
382 for (
int i = NOldHits - 1;
i >= 0;
i--) {
385 for (
unsigned int i = 0, ii = NNewHits - 1;
i < NNewHits;
i++, ii--) {
389 const unsigned int NOldHits = t.
StsHits.size();
390 t.
StsHits.resize(newHits.size() + NOldHits);
391 for (
unsigned int i = 0;
i < newHits.size();
i++) {
void L1AddPipeMaterial(L1TrackPar &T, fvec qp0, fvec w=1, fvec mass2=0.1395679f *0.1395679f)
void L1AddMaterial(L1TrackPar &T, fvec radThick, fvec qp0, fvec w=1, fvec mass2=0.1395679f *0.1395679f)
void L1Filter(L1TrackPar &T, L1UMeasurementInfo &info, fvec u, fvec w=1., fvec *du2=0)
friend F32vec4 fabs(const F32vec4 &a)
void StripsToCoor(const fscal &u, const fscal &v, fscal &x, fscal &y, const L1Station &sta) const
convert strip positions to coordinates
vector< L1StsHit > vStsHits
L1Station vStations[MaxNStations] _fvecalignment
vector< L1Strip > vStsStripsB
unsigned char GetFStation(unsigned char flag)
– Flags routines –
vector< unsigned char > vSFlagB
THitI StsHitsUnusedStartIndex[MaxNStations+1]
bool GetFUsed(unsigned char flag)
vector< unsigned char > vSFlag
fscal BranchExtender(L1Branch &t)
Find additional hits for existing track return chi2.
void BranchFitterFast(const L1Branch &t, L1TrackPar &T, const bool dir, const fvec qp0=0., const bool initParams=true)
Fit track t - track with hits T - track params dir - 0 - forward, 1 - backward qp0 - momentum for ext...
fvec Pick_gather
parameters which are different for different iterations. Set in the begin of CAL1TrackFinder
vector< L1Strip > vStsStrips
vector< int > vStsHits2Unus
int FIRSTCASTATION
================================= DATA PART =================================
void BranchFitter(const L1Branch &t, L1TrackPar &T, const bool dir, const fvec qp0=0., const bool initParams=true)
Fit track. more precise than FitterFast.
void FindMoreHits(L1Branch &t, L1TrackPar &T, const bool dir, const fvec qp0=0.0)
Find additional hits for existing track t - track with hits T - track params dir - 0 - forward,...
L1Grid vGrid[MaxNStations]
void GetHitCoor(const L1StsHit &_h, fscal &_x, fscal &_y, fscal &_z, const L1Station &sta)
--— Hit-point-strips conversion routines ---—
void GetFieldValue(const fvec &x, const fvec &y, L1FieldValue &B) const
bool GetNext(THitI &i)
look up the next hit in the requested area.
L1XYMeasurementInfo XYInfo
L1UMeasurementInfo backInfo
L1MaterialInfo materialInfo
L1UMeasurementInfo frontInfo
RVec< PromoteType< T > > sqrt(const RVec< T > &v)
std::vector< THitI > StsHits
contain strips positions and coordinates of hit