32 FTSCATrack() : fChi2(0), fNDF(-5), fIHits(), fLevel(0) { fIHits.reserve(PndFTSCAParameters::MaxNStations); };
34 int NHits()
const {
return fIHits.size(); }
36 vector<TES> &
IHits() {
return fIHits; }
37 const vector<TES> &
IHits()
const {
return fIHits; }
41 fIHits.erase(
IHits().begin() + iH);
51 fIHits.push_back(
TES(iS, iH));
70 fIHits.insert(
IHits().begin(), hits.begin(), hits.end());
74 fNDF += 2 * hits.size();
78 float &
Chi2() {
return fChi2; }
79 const float &
Chi2()
const {
return fChi2; }
80 char &
NDF() {
return fNDF; }
81 const char &
NDF()
const {
return fNDF; }
82 char &
Level() {
return fLevel; }
83 const char &
Level()
const {
return fLevel; }
94 return (a->fIHits.size() > b->fIHits.size()) || ((a->fIHits.size() == b->fIHits.size()) && (a->fChi2 < b->fChi2));
100 for (
unsigned int iH = 0; iH < fIHits.size(); ++iH) {
101 const FTSCAHit &h = hits[fIHits[iH]];
110 for (
unsigned int iH = 0; iH < fIHits.size(); ++iH) {
138 const FTSCAHit &
Hit(
int iH,
int iT)
const {
return (*fHitsRef)[(*this)[iT].IHits()[iH]]; }
151 void SortTracksByZ();
162 for (
int i = this->size() - 1;
i > -1;
i--) {
163 for (
int j = 1; j <
i + 1; j++) {
172 float diff12 = abs((*(this->HitsRef()))[t1.
IHits()[0]].X0() - 467.84);
173 float diff22 = abs((*(this->HitsRef()))[t2.
IHits()[0]].X0() - 467.84);
179 tempTrack = (*this)[j - 1];
180 (*this)[j - 1] = (*this)[j];
181 (*this)[j] = tempTrack;
190 vector<FTSCATrack *> vptrackcandidate;
191 vptrackcandidate.resize(size());
193 for (
unsigned int iC = 0; iC < size(); ++iC) {
194 vptrackcandidate[iC] = &((*this)[iC]);
199 for (vector<FTSCATrack *>::iterator trIt = vptrackcandidate.begin(); trIt != vptrackcandidate.end(); ++trIt) {
205 #ifndef SAVE_ALL_CANDIDATES_DBG 209 tracks.push_back(*tr);
216 vector<TESV> iHits(
NHits());
217 const int NTHits = iHits.size();
219 for (
unsigned short ihit = 0; ihit < NTHits; ihit++) {
221 iHits[ihit] =
IHits()[ihit];
237 param.SetQP(outerParam.
QP());
244 fChi2 = paramS.
Chi2();
252 vector<TESV> iHits(
NHits());
253 const int NTHits = iHits.size();
255 for (
unsigned short ihit = 0; ihit < NTHits; ihit++) {
256 iHits[ihit] =
IHits()[ihit];
267 fChi2 = paramS.
Chi2();
const FTSCAHit & Hit(int iH, int iT) const
const char & Level() const
void SetChi2(const float_v &v)
const PndFTSCATrackParam Fit2Times(const FTSCAHits &hits, const FTSCATarget &target0, const PndFTSCAParam &caParam, bool dir)
void AddHitsToTheBeginning(vector< TES > &hits)
FTSCATracks(FTSCAHits *hits)
float_m FitUseParam(const PndFTSCAParam &caParam, const FTSCAHits &hits, PndFTSCATrackParamVector ¶m, const vector< TESV > &iHits, const FTSCATarget &target, bool dir, bool usePar=false, const float_m &mask=float_m(true))
int NUsedHits(const FTSCAHits &hits) const
const PndFTSCATrackParam Fit(const FTSCAHits &hits, const FTSCATarget &target, const PndFTSCAParam &caParam, bool dir=true, bool usePar=false, PndFTSCATrackParam outerParam=PndFTSCATrackParam())
const vector< TES > & IHits() const
float_m Fit(const PndFTSCAParam &caParam, const FTSCAHits &hits, PndFTSCATrackParamVector ¶m, const vector< TESV > &iHits, const FTSCATarget &target, bool dir, const float_m &active=float_m(true))
void AddHit(char iS, int iH)
void AddHit(const TES &iH)
static bool Compare(const FTSCATrack *a, const FTSCATrack *b)
void SetHitsAsUsed(FTSCAHits &hits) const
const float & Chi2() const
void SelectAndSaveTracks(FTSCATracks &tracks)