135 #ifndef STAR_StFtpcConfMapper
136 #define STAR_StFtpcConfMapper
138 #include "StFtpcTrackingParams.hh"
139 #include "StFtpcTracker.hh"
140 #include "StFtpcConfMapPoint.hh"
141 #include "StFtpcTrack.hh"
142 #include "StMessMgr.h"
144 #include "TObjArray.h"
145 #include "TBenchmark.h"
157 Int_t mNumRowSegment;
158 Int_t mNumPhiSegment;
159 Int_t mNumEtaSegment;
169 Bool_t mVertexConstraint;
170 Int_t mTrackletLength[2];
171 Int_t mRowScopeTracklet[2];
172 Int_t mRowScopeTrack[2];
178 Double_t mMaxAngleTracklet[2];
179 Double_t mMaxAngleTrack[2];
180 Double_t mMaxCircleDist[2];
181 Double_t mMaxLengthDist[2];
184 Int_t mMainVertexTracks;
186 Int_t mMergedTracklets;
188 Int_t mExtendedTracks;
190 Int_t mDiffHitsStill;
192 Int_t mClustersUnused;
196 void SetEtaMin(Double_t f) { mEtaMin = f; }
197 void SetEtaMax(Double_t f) { mEtaMax = f; }
198 void CalcEtaMinMax();
200 void SetTrackletLength(Int_t f) { mTrackletLength[0] = mTrackletLength[1] = f; }
201 void SetRowScopeTrack(Int_t f) { mRowScopeTrack[0] = mRowScopeTrack[1] = f; }
202 void SetRowScopeTracklet(Int_t f) { mRowScopeTracklet[0] = mRowScopeTracklet[1] = f; }
203 void SetPhiScope(Int_t f) { mPhiScope[0] = mPhiScope[1] = f; }
204 void SetEtaScope(Int_t f) { mEtaScope[0] = mEtaScope[1] = f; }
205 void SetMinPoints(Int_t f) { mMinPoints[0] = mMinPoints[1] = f; }
206 void SetMaxAngleTrack(Double_t f) { mMaxAngleTrack[0] = mMaxAngleTrack[1] = f; }
207 void SetMaxAngleTracklet(Double_t f) { mMaxAngleTracklet[0] = mMaxAngleTracklet[1] = f; }
208 void SetMaxCircleDistTrack(Double_t f) { mMaxCircleDist[0] = mMaxCircleDist[1] = f; }
209 void SetMaxLengthDistTrack(Double_t f) { mMaxLengthDist[0] = mMaxLengthDist[1] = f; }
211 void SetTrackletLength(Int_t f, Int_t g) { mTrackletLength[1] = f; mTrackletLength[0] = g; }
212 void SetRowScopeTrack(Int_t f, Int_t g) { mRowScopeTrack[1] = f; mRowScopeTrack[0] = g; }
213 void SetRowScopeTracklet(Int_t f, Int_t g) { mRowScopeTracklet[1] = f; mRowScopeTracklet[0] = g; }
214 void SetPhiScope(Int_t f, Int_t g) { mPhiScope[1] = f; mPhiScope[0] = g; }
215 void SetEtaScope(Int_t f, Int_t g) { mEtaScope[1] = f; mEtaScope[0] = g; }
216 void SetMinPoints(Int_t f, Int_t g) { mMinPoints[1] = f; mMinPoints[0] = g; }
217 void SetMaxAngleTrack(Double_t f, Double_t g) { mMaxAngleTrack[1] = f; mMaxAngleTrack[0] = g; }
218 void SetMaxAngleTracklet(Double_t f, Double_t g) { mMaxAngleTracklet[1] = f; mMaxAngleTracklet[0] = g; }
219 void SetMaxCircleDistTrack(Double_t f, Double_t g) { mMaxCircleDist[1] = f; mMaxCircleDist[0] = g; }
220 void SetMaxLengthDistTrack(Double_t f, Double_t g) { mMaxLengthDist[1] = f; mMaxLengthDist[0] = g; }
222 void SetTrackletLength(Int_t f, Bool_t vertex_constraint) { mTrackletLength[(Int_t)vertex_constraint] = f; }
223 void SetRowScopeTrack(Int_t f, Bool_t vertex_constraint) { mRowScopeTrack[(Int_t)vertex_constraint] = f; }
224 void SetRowScopeTracklet(Int_t f, Bool_t vertex_constraint) { mRowScopeTracklet[(Int_t)vertex_constraint] = f; }
225 void SetPhiScope(Int_t f, Bool_t vertex_constraint) { mPhiScope[(Int_t)vertex_constraint] = f; }
226 void SetEtaScope(Int_t f, Bool_t vertex_constraint) { mEtaScope[(Int_t)vertex_constraint] = f; }
227 void SetMinPoints(Int_t f, Bool_t vertex_constraint) { mMinPoints[(Int_t)vertex_constraint] = f; }
228 void SetMaxAngleTrack(Double_t f, Bool_t vertex_constraint) { mMaxAngleTrack[(Int_t)vertex_constraint] = f; }
229 void SetMaxAngleTracklet(Double_t f, Bool_t vertex_constraint) { mMaxAngleTracklet[(Int_t)vertex_constraint] = f; }
230 void SetMaxCircleDistTrack(Double_t f, Bool_t vertex_constraint) { mMaxCircleDist[(Int_t)vertex_constraint] = f; }
231 void SetMaxLengthDistTrack(Double_t f, Bool_t vertex_constraint) { mMaxLengthDist[(Int_t)vertex_constraint] = f; }
239 Bool_t bench = (Bool_t)kFALSE,
240 Int_t phi_segments = 100,
241 Int_t eta_segments = 200);
244 Bool_t bench = (Bool_t)kFALSE,
245 Int_t phi_segments = 100,
246 Int_t eta_segments = 200);
250 void SetLaser(Bool_t f) { mLaser = f; }
252 void Settings(TString method);
253 void Settings(Int_t method_id);
254 void Settings(Int_t trackletlength1, Int_t trackletlength2,
255 Int_t tracklength1, Int_t tracklength2,
256 Int_t rowscopetracklet1, Int_t rowscopetracklet2,
257 Int_t rowscopetrack1, Int_t rowscopetrack2,
258 Int_t phiscope1, Int_t phiscope2,
259 Int_t etascope1, Int_t etascope2);
261 void Cuts(TString method);
262 void Cuts(Int_t method_id);
263 void Cuts(Double_t maxangletracklet1, Double_t maxangletracklet2, Double_t maxangletrack1, Double_t maxangletrack2,
264 Double_t maxcircletrack1, Double_t maxcircletrack2, Double_t maxlengthtrack1, Double_t maxlengthtrack2);
266 void SetVertexConstraint(Bool_t f) { mVertexConstraint = f; }
269 Bool_t GetLaser() {
return mLaser; }
271 Double_t GetEtaMin() {
return mEtaMin; }
272 Double_t GetEtaMax() {
return mEtaMax; }
274 Int_t GetNumMainVertexTracks() {
return mMainVertexTracks; }
275 Int_t GetNumMergedTracks() {
return mMergedTracks; }
276 Int_t GetNumMergedTracklets() {
return mMergedTracklets; }
277 Int_t GetNumMergedSplits() {
return mMergedSplits; }
278 Int_t GetNumExtendedTracks() {
return mExtendedTracks; }
279 Int_t GetNumDiffHits() {
return mDiffHits; }
280 Int_t GetNumLengthFitNaN() {
return mLengthFitNaN; }
281 Int_t GetNumClustersUnused() {
return mClustersUnused; }
282 Int_t GetNumBadClusters() {
return mBadClusters; }
288 Int_t GetRowSegm(Int_t segm);
289 Int_t GetPhiSegm(Int_t segm);
290 Int_t GetEtaSegm(Int_t segm);
291 Int_t GetSegm(Int_t row_segm, Int_t phi_segm, Int_t eta_segm);
292 Int_t GetRow(Int_t segm);
293 Double_t GetPhi(Int_t segm);
294 Double_t GetEta(Int_t segm);
309 Bool_t
const TestExpression(Int_t sub_row_segm, Int_t end_row, Bool_t backward = (Bool_t)kTRUE);
310 void LoopUpdate(Int_t *sub_row_segm, Bool_t backward);
312 Double_t
const TrackletAngle(
StFtpcTrack *track, Int_t n = 0);
315 void StraightLineFit(
StFtpcTrack *track, Double_t *a, Int_t n = 0);
319 void HandleSplitTracks(Double_t max_dist, Double_t ratio_min, Double_t ratio_max);
320 void HandleSplitTracks();
322 void AdjustTrackNumbers(Int_t first_split = 0);
325 void MainVertexTracking();
327 void NonVertexTracking();
328 void TwoCycleTracking();
329 void LaserTracking();
330 void NoFieldTracking();