@@ -30,13 +30,18 @@ FastTracker::FastTracker()
3030 applyZacceptance = false ;
3131 covMatFactor = 0 .99f ;
3232 verboseLevel = 0 ;
33+
34+ // last fast-tracked track properties
3335 covMatOK = 0 ;
3436 covMatNotOK = 0 ;
37+ nIntercepts = 0 ;
38+ nSiliconPoints = 0 ;
39+ nGasPoints = 0 ;
3540}
3641
37- void FastTracker::AddLayer (TString name, float r, float z, float x0, float xrho, float resRPhi, float resZ, float eff)
42+ void FastTracker::AddLayer (TString name, float r, float z, float x0, float xrho, float resRPhi, float resZ, float eff, int type )
3843{
39- DetLayer newLayer{name.Data (), r, z, x0, xrho, resRPhi, resZ, eff};
44+ DetLayer newLayer{name.Data (), r, z, x0, xrho, resRPhi, resZ, eff, type };
4045 layers.push_back (newLayer);
4146}
4247
@@ -66,18 +71,18 @@ void FastTracker::AddSiliconALICE3v4()
6671 float resZOT = 0.0005 ; // 5 mum
6772 float eff = 1.00 ;
6873
69- layers.push_back (DetLayer{" bpipe0" , 0.48 , 250 , 0.00042 , 2.772e-02 , 0 .0f , 0 .0f , 0 .0f }); // 150 mum Be
70- layers.push_back (DetLayer{" ddd0" , 0.5 , 250 , x0IT, xrhoIB, resRPhiIT, resZIT, eff});
71- layers.push_back (DetLayer{" ddd1" , 1.2 , 250 , x0IT, xrhoIB, resRPhiIT, resZIT, eff});
72- layers.push_back (DetLayer{" ddd2" , 2.5 , 250 , x0IT, xrhoIB, resRPhiIT, resZIT, eff});
73- layers.push_back (DetLayer{" bpipe1" , 5.7 , 250 , 0.0014 , 9.24e-02 , 0 .0f , 0 .0f , 0 .0f }); // 500 mum Be
74- layers.push_back (DetLayer{" ddd3" , 7 ., 250 , x0OT, xrhoOB, resRPhiOT, resZOT, eff});
75- layers.push_back (DetLayer{" ddd4" , 10 ., 250 , x0OT, xrhoOB, resRPhiOT, resZOT, eff});
76- layers.push_back (DetLayer{" ddd5" , 13 ., 250 , x0OT, xrhoOB, resRPhiOT, resZOT, eff});
77- layers.push_back (DetLayer{" ddd6" , 16 ., 250 , x0OT, xrhoOB, resRPhiOT, resZOT, eff});
78- layers.push_back (DetLayer{" ddd7" , 25 ., 250 , x0OT, xrhoOB, resRPhiOT, resZOT, eff});
79- layers.push_back (DetLayer{" ddd8" , 40 ., 250 , x0OT, xrhoOB, resRPhiOT, resZOT, eff});
80- layers.push_back (DetLayer{" ddd9" , 45 ., 250 , x0OT, xrhoOB, resRPhiOT, resZOT, eff});
74+ layers.push_back (DetLayer{" bpipe0" , 0.48 , 250 , 0.00042 , 2.772e-02 , 0 .0f , 0 .0f , 0 .0f , 0 }); // 150 mum Be
75+ layers.push_back (DetLayer{" ddd0" , 0.5 , 250 , x0IT, xrhoIB, resRPhiIT, resZIT, eff, 1 });
76+ layers.push_back (DetLayer{" ddd1" , 1.2 , 250 , x0IT, xrhoIB, resRPhiIT, resZIT, eff, 1 });
77+ layers.push_back (DetLayer{" ddd2" , 2.5 , 250 , x0IT, xrhoIB, resRPhiIT, resZIT, eff, 1 });
78+ layers.push_back (DetLayer{" bpipe1" , 5.7 , 250 , 0.0014 , 9.24e-02 , 0 .0f , 0 .0f , 0 .0f , 0 }); // 500 mum Be
79+ layers.push_back (DetLayer{" ddd3" , 7 ., 250 , x0OT, xrhoOB, resRPhiOT, resZOT, eff, 1 });
80+ layers.push_back (DetLayer{" ddd4" , 10 ., 250 , x0OT, xrhoOB, resRPhiOT, resZOT, eff, 1 });
81+ layers.push_back (DetLayer{" ddd5" , 13 ., 250 , x0OT, xrhoOB, resRPhiOT, resZOT, eff, 1 });
82+ layers.push_back (DetLayer{" ddd6" , 16 ., 250 , x0OT, xrhoOB, resRPhiOT, resZOT, eff, 1 });
83+ layers.push_back (DetLayer{" ddd7" , 25 ., 250 , x0OT, xrhoOB, resRPhiOT, resZOT, eff, 1 });
84+ layers.push_back (DetLayer{" ddd8" , 40 ., 250 , x0OT, xrhoOB, resRPhiOT, resZOT, eff, 1 });
85+ layers.push_back (DetLayer{" ddd9" , 45 ., 250 , x0OT, xrhoOB, resRPhiOT, resZOT, eff, 1 });
8186}
8287
8388void FastTracker::AddSiliconALICE3v1 ()
@@ -94,19 +99,19 @@ void FastTracker::AddSiliconALICE3v1()
9499 float resZOT = 0.00100 ; // 5 mum
95100 float eff = 1.00 ;
96101
97- layers.push_back (DetLayer{" bpipe0" , 0.48 , 250 , 0.00042 , 2.772e-02 , 0 .0f , 0 .0f , 0 .0f }); // 150 mum Be
98- layers.push_back (DetLayer{" B00" , 0.5 , 250 , x0IT, xrhoIB, resRPhiIT, resZIT, eff});
99- layers.push_back (DetLayer{" B01" , 1.2 , 250 , x0IT, xrhoIB, resRPhiIT, resZIT, eff});
100- layers.push_back (DetLayer{" B02" , 2.5 , 250 , x0IT, xrhoIB, resRPhiIT, resZIT, eff});
101- layers.push_back (DetLayer{" bpipe1" , 3.7 , 250 , 0.0014 , 9.24e-02 , 0 .0f , 0 .0f , 0 .0f }); // 500 mum Be
102- layers.push_back (DetLayer{" B03" , 3.75 , 250 , x0OT, xrhoOB, resRPhiOT, resZOT, eff});
103- layers.push_back (DetLayer{" B04" , 7 ., 250 , x0OT, xrhoOB, resRPhiOT, resZOT, eff});
104- layers.push_back (DetLayer{" B05" , 12 ., 250 , x0OT, xrhoOB, resRPhiOT, resZOT, eff});
105- layers.push_back (DetLayer{" B06" , 20 ., 250 , x0OT, xrhoOB, resRPhiOT, resZOT, eff});
106- layers.push_back (DetLayer{" B07" , 30 ., 250 , x0OT, xrhoOB, resRPhiOT, resZOT, eff});
107- layers.push_back (DetLayer{" B08" , 45 ., 250 , x0OT, xrhoOB, resRPhiOT, resZOT, eff});
108- layers.push_back (DetLayer{" B09" , 60 ., 250 , x0OT, xrhoOB, resRPhiOT, resZOT, eff});
109- layers.push_back (DetLayer{" B10" , 80 ., 250 , x0OT, xrhoOB, resRPhiOT, resZOT, eff});
102+ layers.push_back (DetLayer{" bpipe0" , 0.48 , 250 , 0.00042 , 2.772e-02 , 0 .0f , 0 .0f , 0 .0f , 1 }); // 150 mum Be
103+ layers.push_back (DetLayer{" B00" , 0.5 , 250 , x0IT, xrhoIB, resRPhiIT, resZIT, eff, 1 });
104+ layers.push_back (DetLayer{" B01" , 1.2 , 250 , x0IT, xrhoIB, resRPhiIT, resZIT, eff, 1 });
105+ layers.push_back (DetLayer{" B02" , 2.5 , 250 , x0IT, xrhoIB, resRPhiIT, resZIT, eff, 1 });
106+ layers.push_back (DetLayer{" bpipe1" , 3.7 , 250 , 0.0014 , 9.24e-02 , 0 .0f , 0 .0f , 0 .0f , 1 }); // 500 mum Be
107+ layers.push_back (DetLayer{" B03" , 3.75 , 250 , x0OT, xrhoOB, resRPhiOT, resZOT, eff, 1 });
108+ layers.push_back (DetLayer{" B04" , 7 ., 250 , x0OT, xrhoOB, resRPhiOT, resZOT, eff, 1 });
109+ layers.push_back (DetLayer{" B05" , 12 ., 250 , x0OT, xrhoOB, resRPhiOT, resZOT, eff, 1 });
110+ layers.push_back (DetLayer{" B06" , 20 ., 250 , x0OT, xrhoOB, resRPhiOT, resZOT, eff, 1 });
111+ layers.push_back (DetLayer{" B07" , 30 ., 250 , x0OT, xrhoOB, resRPhiOT, resZOT, eff, 1 });
112+ layers.push_back (DetLayer{" B08" , 45 ., 250 , x0OT, xrhoOB, resRPhiOT, resZOT, eff, 1 });
113+ layers.push_back (DetLayer{" B09" , 60 ., 250 , x0OT, xrhoOB, resRPhiOT, resZOT, eff, 1 });
114+ layers.push_back (DetLayer{" B10" , 80 ., 250 , x0OT, xrhoOB, resRPhiOT, resZOT, eff, 1 });
110115}
111116
112117void FastTracker::AddTPC (float phiResMean, float zResMean)
@@ -139,7 +144,7 @@ void FastTracker::AddTPC(float phiResMean, float zResMean)
139144
140145 // add boundaries between ITS and TPC
141146 for (int i = 0 ; i < kNPassiveBound ; i++) {
142- AddLayer (Form (" tpc_boundary%d" , i), rBoundary[i], zLength, radLBoundary[i], xrhoBoundary[i]); // dummy errors
147+ AddLayer (Form (" tpc_boundary%d" , i), rBoundary[i], zLength, radLBoundary[i], xrhoBoundary[i], 0 ); // dummy errors
143148 }
144149 for (Int_t k = 0 ; k < tpcRows; k++) {
145150 Float_t rowRadius = 0 ;
@@ -150,7 +155,7 @@ void FastTracker::AddTPC(float phiResMean, float zResMean)
150155 else if (k >= (innerRows + middleRows) && k < tpcRows)
151156 rowRadius = row128Radius + (k - innerRows - middleRows + 1 ) * tpcOuterRadialPitch;
152157
153- AddLayer (Form (" tpc_%d" , k), rowRadius, zLength, radLPerRow, 0 , phiResMean, zResMean, 1 .0f );
158+ AddLayer (Form (" tpc_%d" , k), rowRadius, zLength, radLPerRow, 0 , phiResMean, zResMean, 1 .0f , 2 );
154159 }
155160}
156161
@@ -159,7 +164,9 @@ void FastTracker::AddTPC(float phiResMean, float zResMean)
159164int FastTracker::FastTrack (o2::track::TrackParCov inputTrack, o2::track::TrackParCov& outputTrack)
160165{
161166 hits.clear ();
162- int nIntercepts = 0 ;
167+ nIntercepts = 0 ;
168+ nSiliconPoints = 0 ;
169+ nGasPoints = 0 ;
163170 std::array<float , 3 > posIni; // provision for != PV
164171 inputTrack.getXYZGlo (posIni);
165172 float initialRadius = std::hypot (posIni[0 ], posIni[1 ]);
@@ -172,7 +179,7 @@ int FastTracker::FastTrack(o2::track::TrackParCov inputTrack, o2::track::TrackPa
172179 // check if layer is doable
173180 if (layers[il].r < initialRadius)
174181 continue ; // this layer should not be attempted, but go ahead
175- if (layers[il].eff < 1e-5 )
182+ if (layers[il].type == 0 )
176183 continue ; // inert layer, skip
177184
178185 // check if layer is reached
@@ -240,6 +247,9 @@ int FastTracker::FastTrack(o2::track::TrackParCov inputTrack, o2::track::TrackPa
240247 // +-~-<*>-~-+-~-<*>-~-+-~-<*>-~-+-~-<*>-~-+-~-<*>-~-+
241248 // Inward pass to calculate covariances
242249 for (int il = lastLayerReached; il >= firstLayerReached; il--) {
250+ if (layers[il].type == 0 )
251+ continue ; // inert layer, skip
252+
243253 float targetX = 1e+3 ;
244254 inputTrack.getXatLabR (layers[il].r , targetX, magneticField);
245255 if (targetX > 999 )
@@ -271,9 +281,14 @@ int FastTracker::FastTrack(o2::track::TrackParCov inputTrack, o2::track::TrackPa
271281 static_cast <float >(xyz1[2 ])};
272282 const o2::track::TrackParametrization<float >::dim3_t hitpointcov = {layers[il].resRPhi * layers[il].resRPhi , 0 .f , layers[il].resZ * layers[il].resZ };
273283 outputTrack.update (hitpoint, hitpointcov);
284+ outputTrack.checkCovariance ();
285+
286+ if (layers[il].type == 1 )
287+ nSiliconPoints++; // count silicon hits
288+ if (layers[il].type == 2 )
289+ nGasPoints++; // count TPC/gas hits
274290
275291 hits.push_back (thisHit);
276- outputTrack.checkCovariance ();
277292 }
278293
279294 // backpropagate to original radius
0 commit comments