28(
const std::string& t,
const std::string& n,
const IInterface* p)
55 return StatusCode::FAILURE;
63 return StatusCode::FAILURE;
72 return StatusCode::FAILURE;
84 return StatusCode::FAILURE;
97 return StatusCode::FAILURE;
112 }
else if (
m_patternName ==
"SiSpacePointsSeedMaker_HeavyIon" ) {
115 }
else if (
m_patternName ==
"SiSpacePointsSeedMaker_LowMomentum") {
117 }
else if (
m_patternName ==
"SiSpacePointsSeedMaker_BeamGas" ) {
119 }
else if (
m_patternName ==
"SiSpacePointsSeedMaker_ForwardTracks" ) {
121 }
else if (
m_patternName ==
"SiSpacePointsSeedMaker_LargeD0" ) {
123 }
else if (
m_patternName ==
"SiSpacePointsSeedMaker_ITkConversionTracks") {
140 return StatusCode::FAILURE;
144 ATH_MSG_DEBUG(
"No. of cut values smaller than eta bins. Extending size..." );
149 if (pt < 20.) pt = 20.;
171 std::fill(m_usedSeedsEta.begin(), m_usedSeedsEta.end(),
173 std::fill(m_seedsWithTracksEta.begin(), m_seedsWithTracksEta.end(),
179 return StatusCode::SUCCESS;
188 MsgStream &out =
msg(MSG::INFO);
189 out <<
"::finalize() -- statistics:" <<std::endl;
192 return AlgTool::finalize();
202 out<<
"|----------------------|--------------|--------------|--------------|--------------|--------------|"
204 out<<
"| Kind of seed | PPP | PPS | PSS | SSS | ALL |"
206 out<<
"|----------------------|--------------|--------------|--------------|--------------|--------------|"
208 out<<
"| Input seeds | "
209 <<std::setw(12)<<m_totalInputSeeds[0]<<
" | "
210 <<std::setw(12)<<m_totalInputSeeds[1]<<
" | "
211 <<std::setw(12)<<m_totalInputSeeds[2]<<
" | "
212 <<std::setw(12)<<m_totalInputSeeds[3]<<
" | "
213 <<std::setw(12)<<(m_totalInputSeeds[0]+m_totalInputSeeds[1]+m_totalInputSeeds[2]+m_totalInputSeeds[3])
216 out<<
"| No track parameters | "
217 <<std::setw(12)<<m_totalNoTrackPar[0]<<
" | "
218 <<std::setw(12)<<m_totalNoTrackPar[1]<<
" | "
219 <<std::setw(12)<<m_totalNoTrackPar[2]<<
" | "
220 <<std::setw(12)<<m_totalNoTrackPar[3]<<
" | "
221 <<std::setw(12)<<(m_totalNoTrackPar[0]+m_totalNoTrackPar[1]+ m_totalNoTrackPar[2]+m_totalNoTrackPar[3])
224 out<<
"| Used seeds | "
225 <<std::setw(12)<<m_totalUsedSeeds[0]<<
" | "
226 <<std::setw(12)<<m_totalUsedSeeds[1]<<
" | "
227 <<std::setw(12)<<m_totalUsedSeeds[2]<<
" | "
228 <<std::setw(12)<<m_totalUsedSeeds[3]<<
" | "
229 <<std::setw(12)<<(m_totalUsedSeeds[0]+m_totalUsedSeeds[1]+ m_totalUsedSeeds[2]+m_totalUsedSeeds[3])
232 out<<
"| Used seeds brem | "
233 <<std::setw(12)<<m_totalBremSeeds[0]<<
" | "
234 <<std::setw(12)<<m_totalBremSeeds[1]<<
" | "
235 <<std::setw(12)<<m_totalBremSeeds[2]<<
" | "
236 <<std::setw(12)<<m_totalBremSeeds[3]<<
" | "
237 <<std::setw(12)<<(m_totalBremSeeds[0]+m_totalBremSeeds[1]+m_totalBremSeeds[2]+m_totalBremSeeds[3])
240 double tdetsize = 0.;
243 tdetsize+= m_deSize[i];
244 goodseed+= m_totalUsedSeeds[i];
245 if(m_totalUsedSeeds[i] > 0.) m_deSize[i]= m_deSize[i]/m_totalUsedSeeds[i];
247 if(goodseed > 0) tdetsize/=double(goodseed);
249 out<<
"| Det elements in road | "
250 <<std::setw(12)<<std::setprecision(4)<<m_deSize[0]<<
" | "
251 <<std::setw(12)<<std::setprecision(5)<<m_deSize[1]<<
" | "
252 <<std::setw(12)<<std::setprecision(5)<<m_deSize[2]<<
" | "
253 <<std::setw(12)<<std::setprecision(5)<<m_deSize[3]<<
" | "
254 <<std::setw(12)<<std::setprecision(5)<<tdetsize
258 out<<
"| Two clusters on DE | "
259 <<std::setw(12)<<m_twoClusters[0]<<
" | "
260 <<std::setw(12)<<m_twoClusters[1]<<
" | "
261 <<std::setw(12)<<m_twoClusters[2]<<
" | "
262 <<std::setw(12)<<m_twoClusters[3]<<
" | "
263 <<std::setw(12)<<(m_twoClusters[0]+m_twoClusters[1]+m_twoClusters[2]+m_twoClusters[3])
266 out<<
"| Wrong DE road | "
267 <<std::setw(12)<<m_wrongRoad[0]<<
" | "
268 <<std::setw(12)<<m_wrongRoad[1]<<
" | "
269 <<std::setw(12)<<m_wrongRoad[2]<<
" | "
270 <<std::setw(12)<<m_wrongRoad[3]<<
" | "
271 <<std::setw(12)<<(m_wrongRoad[0]+m_wrongRoad[1]+m_wrongRoad[2]+m_wrongRoad[3])
274 out<<
"| Wrong initialization | "
275 <<std::setw(12)<<m_wrongInit[0]<<
" | "
276 <<std::setw(12)<<m_wrongInit[1]<<
" | "
277 <<std::setw(12)<<m_wrongInit[2]<<
" | "
278 <<std::setw(12)<<m_wrongInit[3]<<
" | "
279 <<std::setw(12)<<(m_wrongInit[0]+m_wrongInit[1]+m_wrongInit[2]+m_wrongInit[3])
282 out<<
"| Can not find track | "
283 <<std::setw(12)<<m_noTrack[0]<<
" | "
284 <<std::setw(12)<<m_noTrack[1]<<
" | "
285 <<std::setw(12)<<m_noTrack[2]<<
" | "
286 <<std::setw(12)<<m_noTrack[3]<<
" | "
287 <<std::setw(12)<<(m_noTrack[0]+m_noTrack[1]+m_noTrack[2]+m_noTrack[3])
290 out<<
"| It is not new track | "
291 <<std::setw(12)<<m_notNewTrack[0]<<
" | "
292 <<std::setw(12)<<m_notNewTrack[1]<<
" | "
293 <<std::setw(12)<<m_notNewTrack[2]<<
" | "
294 <<std::setw(12)<<m_notNewTrack[3]<<
" | "
295 <<std::setw(12)<<(m_notNewTrack[0]+m_notNewTrack[1]+m_notNewTrack[2]+m_notNewTrack[3])
298 out<<
"| Attempts brem model | "
299 <<std::setw(12)<<m_bremAttempt[0]<<
" | "
300 <<std::setw(12)<<m_bremAttempt[1]<<
" | "
301 <<std::setw(12)<<m_bremAttempt[2]<<
" | "
302 <<std::setw(12)<<m_bremAttempt[3]<<
" | "
303 <<std::setw(12)<<(m_bremAttempt[0]+m_bremAttempt[1]+m_bremAttempt[2]+m_bremAttempt[3])
306 out<<
"| Output tracks | "
307 <<std::setw(12)<<m_outputTracks[0]<<
" | "
308 <<std::setw(12)<<m_outputTracks[1]<<
" | "
309 <<std::setw(12)<<m_outputTracks[2]<<
" | "
310 <<std::setw(12)<<m_outputTracks[3]<<
" | "
311 <<std::setw(12)<<(m_outputTracks[0]+m_outputTracks[1]+m_outputTracks[2]+m_outputTracks[3])
314 out<<
"| Output extra tracks | "
315 <<std::setw(12)<<m_extraTracks[0]<<
" | "
316 <<std::setw(12)<<m_extraTracks[1]<<
" | "
317 <<std::setw(12)<<m_extraTracks[2]<<
" | "
318 <<std::setw(12)<<m_extraTracks[3]<<
" | "
319 <<std::setw(12)<<(m_extraTracks[0]+m_extraTracks[1]+m_extraTracks[2]+m_extraTracks[3])
322 out<<
"| Output tracks brem | "
323 <<std::setw(12)<<m_bremTracks[0]<<
" | "
324 <<std::setw(12)<<m_bremTracks[1]<<
" | "
325 <<std::setw(12)<<m_bremTracks[2]<<
" | "
326 <<std::setw(12)<<m_bremTracks[3]<<
" | "
327 <<std::setw(12)<<(m_bremTracks[0]+m_bremTracks[1]+m_bremTracks[2]+m_bremTracks[3])
330 out<<
"|----------------------|--------------|--------------|--------------|--------------|--------------|--------------|"
332 out<<
"| Seeds with track | "
333 <<std::setw(12)<<m_seedsWithTrack[0]<<
" | "
334 <<std::setw(12)<<m_seedsWithTrack[1]<<
" | "
335 <<std::setw(12)<<m_seedsWithTrack[2]<<
" | "
336 <<std::setw(12)<<m_seedsWithTrack[3]<<
" | "
337 <<std::setw(12)<<(m_seedsWithTrack[0]+m_seedsWithTrack[1]+m_seedsWithTrack[2]+m_seedsWithTrack[3])
338 <<
" | Number seeds |"<<std::endl;
339 out<<
"|----------------------|--------------|--------------|--------------|--------------|--------------|--------------|"
342 std::vector<std::pair<int,std::string>> rapidityTablePrint;
344 rapidityTablePrint.emplace_back(0,std::string(
"| Track/Used 0.0-0.5 | "));
345 rapidityTablePrint.emplace_back(1,std::string(
"| 0.5-1.0 | "));
346 rapidityTablePrint.emplace_back(2,std::string(
"| 1.0-1.5 | "));
347 rapidityTablePrint.emplace_back(3,std::string(
"| 1.5-2.0 | "));
348 rapidityTablePrint.emplace_back(4,std::string(
"| 2.0-2.5 | "));
349 rapidityTablePrint.emplace_back(5,std::string(
"| 2.5-3.0 | "));
350 rapidityTablePrint.emplace_back(6,std::string(
"| 3.0-3.5 | "));
351 rapidityTablePrint.emplace_back(7,std::string(
"| 3.5-4.0 | "));
356 std::array<double,SiCombinatorialTrackFinderData_xk::kNSeedTypes+1> pu{};
359 double totalUsedSeedsEta = 0.;
363 if(m_usedSeedsEta[j][i]!=0.) pu[j]=m_seedsWithTracksEta[j][i]/m_usedSeedsEta[j][i];
364 totalUsedSeedsEta += m_usedSeedsEta[j][i];
368 if(totalUsedSeedsEta!=0.) {
378 out<<rapidityTablePrint.at(i).second;
379 out << std::setw(12) << std::setprecision(4) << pu[0] <<
" | "
380 << std::setw(12) << std::setprecision(4) << pu[1] <<
" | "
381 << std::setw(12) << std::setprecision(4) << pu[2] <<
" | "
382 << std::setw(12) << std::setprecision(4) << pu[3] <<
" | "
383 << std::setw(12) << std::setprecision(4) << pu[4] <<
" | "
385 <<
static_cast<int>(m_seedsWithTracksEta[0][i]) +
386 static_cast<int>(m_seedsWithTracksEta[1][i]) +
387 static_cast<int>(m_seedsWithTracksEta[2][i]) +
388 static_cast<int>(m_seedsWithTracksEta[3][i])
389 <<
" |" << std::endl;
392 out<<
"|----------------------|--------------|--------------|--------------|--------------|--------------|--------------|"
414 std::string s4;
for (
int i=0; i<n; ++i) s4.append(
" "); s4.append(
"|");
416 std::string fieldmode[9] ={
"NoField" ,
"ConstantField",
"SolenoidalField",
417 "ToroidalField" ,
"Grid3DField" ,
"RealisticField" ,
418 "UndefinedField",
"AthenaField" ,
"?????" };
433 if (mode<0 || mode>8 ) mode = 8;
435 n = 62-fieldmode[mode].size();
436 std::string s3;
for (
int i=0; i<n; ++i) s3.append(
" "); s3.append(
"|");
439 std::string s6;
for (
int i=0; i<n; ++i) s6.append(
" "); s6.append(
"|");
441 out<<
"|----------------------------------------------------------------------"
442 <<
"-------------------|"
444 out<<
"| Tool for road builder | "<<
m_roadmaker .type() <<s6<<std::endl;
445 out<<
"} Tool for track finding | "<<
m_tracksfinder.type()<<s4<<std::endl;
446 out<<
"| Use association tool ? | "
449 out<<
"| Magnetic field mode | "<<fieldmode[mode] <<s3<<std::endl;
452 out<<
"| Min pT of track (MeV) | "<<std::setw(12)<<std::setprecision(5)<<
m_pTmin
454 out<<
"| Max Xi2 for cluster | "<<std::setw(12)<<std::setprecision(5)<<
m_xi2max
456 out<<
"| Max Xi2 for outlayer | "<<std::setw(12)<<std::setprecision(5)<<
m_xi2maxNoAdd
458 out<<
"| Max Xi2 for link | "<<std::setw(12)<<std::setprecision(5)<<
m_xi2maxlink
460 out<<
"| Min number of clusters | "<<std::setw(12)<<
m_nclusmin
462 out<<
"| Min number of wclusters | "<<std::setw(12)<<
m_nwclusmin
464 out<<
"| Max number holes | "<<std::setw(12)<<
m_nholesmax
466 out<<
"| Max holes gap | "<<std::setw(12)<<
m_dholesmax
468 out<<
"|----------------------------------------------------------------------"
469 <<
"-------------------|"
481 out<<
"|---------------------------------------------------------------------|"
483 out<<
"| Number input seeds | "<<std::setw(12)<<
data.inputseeds()
485 out<<
"| Number good seeds | "<<std::setw(12)<<
data.goodseeds()
487 out<<
"| Number output tracks | "<<std::setw(12)<<
data.findtracks()
489 out<<
"|---------------------------------------------------------------------|"
502 data.xybeam()[0] = 0.;
503 data.xybeam()[1] = 0.;
506 if (beamSpotHandle.
isValid()) {
507 data.xybeam()[0] = beamSpotHandle->beamPos()[0];
508 data.xybeam()[1] = beamSpotHandle->beamPos()[1];
528 data.inputseeds() = 0;
529 data.goodseeds() = 0;
530 data.findtracks() = 0;
540 data.setCaloClusterROIEM(*calo_rois);
549 data.setCaloClusterROIHad(*calo_rois);
563 bool simpleTrack =
true;
577 data.inputseeds() = 0;
578 data.goodseeds() = 0;
579 data.findtracks() = 0;
582 data.summaryStatAll()[i][k] = 0.;
588 data.summaryStatUsedInTrack()[i][k][
r] = 0.;
608 data.clusterTrack().clear();
618 for(
int r = 0;
r != 8; ++
r) {
639 m_deSize[K] = m_deSize[K] +
data.summaryStatAll()[
kDESize][K];
668 std::list<Trk::Track*> tracks;
670 if (!
data.pix() && !
data.sct())
return tracks;
673 bool isGoodSeed{
true};
687 if (fieldCondObj ==
nullptr) {
694 std::unique_ptr<Trk::TrackParameters>
Tp =
nullptr;
697 m_seedtrack->executeSiSPSeedSegments(
data.conversionData(),
Tp.get(), isGoodSeed, Sp);
719 std::vector<const InDetDD::SiDetectorElement*> DE;
730 if(road_length == 0) {
740 if (
static_cast<int>(DE.size()) <
m_nclusmin) {
745 data.summaryStatAll()[
kDESize][K] += double(DE.size());
749 std::vector<Amg::Vector3D> Gp;
759 if(newTrack !=
nullptr) tracks.push_back(newTrack);
766 tracks =
m_tracksfinder->getTracksWithBrem(
data.combinatorialData(), *
Tp, Sp, Gp, DE,
data.clusterTrack(),
false,ctx);
772 tracks =
m_tracksfinder->getTracksWithBrem(
data.combinatorialData(), *
Tp, Sp, Gp, DE,
data.clusterTrack(),
true,ctx);
778 std::array<bool,SiCombinatorialTrackFinderData_xk::kNCombStats>
inf{0,0,0,0,0,0};
780 for (
size_t p =0; p<
inf.size(); ++p){
787 std::list<Trk::Track*>::iterator t = tracks.begin();
788 while (t!=tracks.end()) {
799 data.findtracks() += tracks.size();
801 if(!tracks.empty()) {
820 std::list<Trk::Track*> tracks;
821 if (!
data.pix() && !
data.sct())
return tracks;
830 if (fieldCondObj ==
nullptr) {
838 std::vector<const InDetDD::SiDetectorElement*> DE;
844 if (
static_cast<int>(DE.size()) <
m_nclusmin)
return tracks;
848 std::vector<const Trk::SpacePoint*> Sp;
853 tracks =
m_tracksfinder->getTracksWithBrem(
data.combinatorialData(),
Tp, Sp, Gp, DE,
data.clusterTrack(),
false,ctx);
855 tracks =
m_tracksfinder->getTracksWithBrem(
data.combinatorialData(),
Tp, Sp, Gp, DE,
data.clusterTrack(),
true,ctx);
861 std::list<Trk::Track*>::iterator t = tracks.begin();
862 while (t!=tracks.end()) {
871 data.findtracks() += tracks.size();
883 const std::vector<const Trk::SpacePoint*>& theSeed,
884 const EventContext& ctx)
const
887 if (theSeed.size() < 3)
return nullptr;
889 std::vector<const Trk::SpacePoint*> SP;
893 unsigned int middleIdx = theSeed.size() == 3 ? 1 : theSeed.size()/2;
894 SP = {theSeed[0], theSeed[middleIdx], theSeed.back()};
898 SP = {theSeed[theSeed.size() - 3], theSeed[theSeed.size() - 2], theSeed.back()};
902 unsigned int middleIdx = theSeed.size() == 3 ? 0 : theSeed.size()/2;
903 unsigned int quarterIdx = theSeed.size() == 3 ? 1 : 3*theSeed.size()/4;
904 SP = {theSeed[middleIdx], theSeed[quarterIdx], theSeed.back()};
908 SP = {theSeed[0], theSeed[theSeed.size() - 2], theSeed.back()};
912 SP = {theSeed[0], theSeed[1], theSeed[2]};
918 if (!cl)
return nullptr;
922 if (!pla)
return nullptr;
926 double p0[3],p1[3],p2[3];
927 if (!
globalPositions(*(SP[0]),*(SP[1]),*(SP[2]),p0,p1,p2))
return nullptr;
933 double x1 = p1[0]-x0;
934 double y1 = p1[1]-y0;
935 double x2 = p2[0]-x0;
936 double y2 = p2[1]-y0;
937 double z2 = p2[2]-z0;
941 double u1 = 1./sqrt(x1*x1+y1*y1) ;
943 double rn = x2*x2+y2*y2 ;
949 double u2 = (
a*x2+b*y2)*r2 ;
951 double v2 = (
a*y2-b*x2)*r2 ;
954 double A = v2/(u2-u1) ;
955 double B = 2.*(v2-
A*u2) ;
956 double C = B/sqrt(1.+
A*
A) ;
957 double T = z2*sqrt(r2)/(1.+.04*
C*
C*rn);
959 T = std::abs(
C) > 1.e-6 ? (z2*
C)/asin(
C*sqrt(rn)) : z2/sqrt(rn);
965 double Ax[3] = {
Tp(0,0),
Tp(1,0),
Tp(2,0)};
967 double Ay[3] = {
Tp(0,1),
Tp(1,1),
Tp(2,1)};
969 double D [3] = {
Tp(0,3),
Tp(1,3),
Tp(2,3)};
971 double d[3] = {x0-D[0],y0-D[1],z0-D[2]};
973 data.par()[0] = d[0]*Ax[0]+d[1]*Ax[1]+d[2]*Ax[2];
974 data.par()[1] = d[0]*Ay[0]+d[1]*Ay[1]+d[2]*Ay[2];
985 double H[3],gP[3] ={x0,y0,z0};
990 if (fabs(
H[2])>.0001) {
994 data.par()[3] = atan2(1.,T) ;
996 data.par()[5] = -
C/(300.*
H[2]) ;
1001 data.par()[2] = atan2(y2,x2);
1002 data.par()[3] = atan2(1.,T) ;
1009 data.par()[2] = atan2(y2,x2);
1010 data.par()[3] = atan2(1.,T) ;
1018 if(std::abs(
data.par()[5])*pTm > 1)
return nullptr;
1020 else if(std::abs(
data.par()[5])*
m_pTmin > 1.1)
return nullptr;
1023 data.par()[4] =
data.par()[5]/sqrt(1.+T*T);
1024 data.par()[6] = x0 ;
1025 data.par()[7] = y0 ;
1026 data.par()[8] = z0 ;
1061 else trackquality.
setIntCut(
"UseAssociationTool",0);
1063 else trackquality.
setIntCut(
"CosmicTrack" ,0);
1064 if (simpleTrack) trackquality.
setIntCut(
"SimpleTrack" ,1);
1065 else trackquality.
setIntCut(
"SimpleTrack" ,0);
1067 else trackquality.
setIntCut(
"doMultiTracksProd" ,0);
1078 return trackquality;
1086 std::vector<const InDetDD::SiDetectorElement*>& DE)
1088 std::vector<const InDetDD::SiDetectorElement*>::iterator d = DE.begin();
1089 while (d!=DE.end()) {
1090 if ((*d)->isPixel()) {
1095 }
else if (!
data.sct()) {
1114 std::multiset<const Trk::Track*> trackseed;
1115 std::multimap<const Trk::PrepRawData*,const Trk::Track*>::const_iterator iter_clusterOnTrack,iter_clusterOnTrackEnd =
data.clusterTrack().end();
1126 for (iter_clusterOnTrack =
data.clusterTrack().find(prd); iter_clusterOnTrack!=iter_clusterOnTrackEnd; ++iter_clusterOnTrack) {
1127 if ((*iter_clusterOnTrack).first!=prd)
break;
1129 trackseed.insert((*iter_clusterOnTrack).second);
1134 prd = spacePoint->clusterList().second;
1138 for (iter_clusterOnTrack =
data.clusterTrack().find(prd); iter_clusterOnTrack!=iter_clusterOnTrackEnd; ++iter_clusterOnTrack) {
1139 if ((*iter_clusterOnTrack).first!=prd)
break;
1140 trackseed.insert((*iter_clusterOnTrack).second);
1148 if(trackseed.size() < n)
return true;
1159 size_t clustersOnCurrent = 1;
1163 if(track != currentTrack) {
1164 currentTrack = track;
1165 clustersOnCurrent = 1;
1170 if(++clustersOnCurrent == n)
return false;
1173 return clustersOnCurrent!=n;
1184 if(Sp.size()!=3)
return 0;
1186 std::vector<const Trk::SpacePoint*>::const_iterator s=Sp.begin(),se=Sp.end();
1189 for(; s!=se; ++s) {
if((*s)->clusterList().second) ++n;}
1195 if(Sp.size() < 2)
return 0;
1197 Amg::Vector3D delta_sp = Sp[0]->globalPosition() - Sp[1]->globalPosition();
1198 float eta = 2*std::abs(delta_sp.eta());
1214 for (; m!=me; ++m) {
1216 if (prd)
data.clusterTrack().insert(std::make_pair(prd, Tr));
1227 std::multimap<const Trk::PrepRawData*,const Trk::Track*>::const_iterator
1228 ti,t[100],te =
data.clusterTrack().end();
1236 for (; m!=me; ++m) {
1241 t [n] =
data.clusterTrack().find(prd[n]);
1242 if (t[n]==te)
return true;
1247 if (!n)
return true;
1250 for (
int i=0; i!=n; ++i) {
1252 for (ti=t[i]; ti!=te; ++ti) {
1253 if ( (*ti).first != prd[i] )
break;
1254 int ncl = (*ti).second->measurementsOnTrack()->size();
1255 if (ncl > nclmax) nclmax = ncl;
1257 if (nclt > nclmax)
return true;
1268 double* p0,
double* p1,
double* p2)
const
1272 p0[0] =
s0.globalPosition().x();
1273 p0[1] =
s0.globalPosition().y();
1274 p0[2] =
s0.globalPosition().z();
1276 p1[0] = s1.globalPosition().x();
1277 p1[1] = s1.globalPosition().y();
1278 p1[2] = s1.globalPosition().z();
1280 p2[0] = s2.globalPosition().x();
1281 p2[1] = s2.globalPosition().y();
1282 p2[2] = s2.globalPosition().z();
1285 if (!
s0.clusterList().second && !s1.clusterList().second && !s2.clusterList().second)
return true;
1288 double dir0[3],dir1[3],dir2[3];
1295 if (s1.clusterList().second && !
globalPosition(s1,dir1,p1))
return false;
1296 if (s2.clusterList().second && !
globalPosition(s2,dir2,p2))
return false;
1320 std::pair<Amg::Vector3D,Amg::Vector3D> e0
1323 localPos = c1->localPosition();
1324 std::pair<Amg::Vector3D,Amg::Vector3D> e1
1329 double a0[3] = {e0.second.x()-e0.first.x(), e0.second.y()-e0.first.y(), e0.second.z()-e0.first.z()};
1330 double a1[3] = {e1.second.x()-e1.first.x(), e1.second.y()-e1.first.y(), e1.second.z()-e1.first.z()};
1332 double dr[3] = {e1.first .x()-e0.first.x(), e1.first .y()-e0.first.y(), e1.first .z()-e0.first.z()};
1339 double u[3] = {a1[1]*dir[2]-a1[2]*dir[1],a1[2]*dir[0]-a1[0]*dir[2],a1[0]*dir[1]-a1[1]*dir[0]};
1340 double v[3] = {
a0[1]*dir[2]-
a0[2]*dir[1],
a0[2]*dir[0]-
a0[0]*dir[2],
a0[0]*dir[1]-
a0[1]*dir[0]};
1351 double du =
a0[0]*u[0]+
a0[1]*u[1]+
a0[2]*u[2];
1354 if (du==0. )
return false;
1362 double s0 = (dr[0]*u[0]+dr[1]*u[1]+dr[2]*u[2])/du;
1367 double s1 = (dr[0]*v[0]+dr[1]*v[1]+dr[2]*v[2])/du;
1377 p[0] = e0.first.x()+
s0*
a0[0];
1378 p[1] = e0.first.y()+
s0*
a0[1];
1379 p[2] = e0.first.z()+
s0*
a0[2];
1390 if (!
data.caloClusterROIEM())
return false;
1393 double F =
data.par()[2] ;
1394 double E = -log(tan(.5*
data.par()[3])) ;
1396 double Z =
data.par()[8] ;
1406 if (!
data.caloClusterROIHad())
return false;
1408 double F =
data.par()[2] ;
1409 double E = -log(tan(.5*
data.par()[3])) ;
1411 double Z =
data.par()[8] ;
1424(
const double* p0,
const double* p1,
const double* p2,
double* d0,
double* d1,
double* d2)
1427 double x01 = p1[0]-p0[0] ;
1428 double y01 = p1[1]-p0[1] ;
1429 double x02 = p2[0]-p0[0] ;
1430 double y02 = p2[1]-p0[1] ;
1437 double d01 = x01*x01+y01*y01 ;
1438 double x1 = sqrt(d01) ;
1439 double u01 = 1./x1 ;
1440 double a = x01*u01 ;
1441 double b = y01*u01 ;
1443 double x2 =
a*x02+b*y02 ;
1445 double y2 =
a*y02-b*x02 ;
1448 double d02 = x2*x2+y2*y2 ;
1450 double u02 = x2/d02 ;
1451 double v02 = y2/d02 ;
1456 double A0 = v02 /(u02-u01) ;
1457 double B0 = 2.*(v02-A0*u02) ;
1465 double C2 = (1.-
B0*y2) ;
1466 double S2 = (A0+
B0*x2) ;
1468 double T = (p2[2]-p0[2])/sqrt(d02);
1469 double sinTheta = 1./sqrt(1.+T*T) ;
1470 double cosTheta = sinTheta*T ;
1471 double sinThetaCosAlpha = sinTheta / sqrt(1.+A0*A0) ;
1472 double Sa = sinThetaCosAlpha*
a ;
1473 double Sb = sinThetaCosAlpha*b ;
1489 d2[0] = Sa*C2-Sb*
S2;
1499 double aeta = std::abs(
eta);
1500 for(
int n =
int(
m_ptbins.size()-1); n>=0; --n) {
Scalar eta() const
pseudorapidity method
#define ATH_CHECK
Evaluate an expression and check for errors.
char data[hepevt_bytes_allocation_ATLAS]
struct TBPatternUnitContext S2
void getInitializedCache(MagField::AtlasFieldCache &cache) const
get B field cache for evaluation as a function of 2-d or 3-d position.
DataModel_detail::const_iterator< DataVector > const_iterator
Standard const_iterator.
Class to hold geometrical description of a silicon detector element.
std::pair< Amg::Vector3D, Amg::Vector3D > endsOfStrip(const Amg::Vector2D &position) const
Special method for SCT to retrieve the two ends of a "strip" Returned coordinates are in global frame...
Class to represent a position in the natural frame of a silicon sensor, for Pixel and SCT For Pixel: ...
InDet::SiTrackMakerEventData_xk holds event dependent data used by ISiTrackMaker.
bool globalPositions(const Trk::SpacePoint &s0, const Trk::SpacePoint &s1, const Trk::SpacePoint &s2, double *p0, double *p1, double *p2) const
BooleanProperty m_useassoTool
DoubleArrayProperty m_etabins
BooleanProperty m_ITKGeometry
SG::ReadHandleKey< ROIPhiRZContainer > m_caloCluster
BooleanProperty m_seedsfilter
StringProperty m_fieldmode
DoubleProperty m_xi2maxNoAdd
ToolHandle< InDet::ISiCombinatorialTrackFinder > m_tracksfinder
BooleanProperty m_multitracks
void resetCounter(std::array< std::array< T, M >, N > &a) const
helper for working with the stat arrays
static void globalDirections(const double *p0, const double *p1, const double *p2, double *d0, double *d1, double *d2)
Here, we derive the local track direction in the space-points as the tangents to the estimated trajec...
virtual std::list< Trk::Track * > getTracks(const EventContext &ctx, SiTrackMakerEventData_xk &data, const std::vector< const Trk::SpacePoint * > &Sp) const override
bool newSeed(SiTrackMakerEventData_xk &data, const std::vector< const Trk::SpacePoint * > &Sp) const
virtual void newEvent(const EventContext &ctx, SiTrackMakerEventData_xk &data, bool PIX, bool SCT) const override
double pTmin(double eta) const
DoubleProperty m_phiWidth
static MsgStream & dumpevent(SiTrackMakerEventData_xk &data, MsgStream &out)
ToolHandle< InDet::ISeedToTrackConversionTool > m_seedtrack
std::unique_ptr< Trk::TrackParameters > getAtaPlane(MagField::AtlasFieldCache &fieldCache, SiTrackMakerEventData_xk &data, bool sss, const std::vector< const Trk::SpacePoint * > &SP, const EventContext &ctx) const
Trk::TrackInfo m_trackinfo
DoubleProperty m_xi2multitracks
StringProperty m_patternName
BooleanProperty m_useTrigInDetRoadPredictorTool
BooleanProperty m_seedsegmentsWrite
IntegerProperty m_dholesmax
std::vector< statAllTypes > m_indexToEnum
BooleanProperty m_useBremModel
MsgStream & dumpStatistics(MsgStream &out) const
virtual void newTrigEvent(const EventContext &ctx, SiTrackMakerEventData_xk &data, bool PIX, bool SCT) const override
virtual StatusCode finalize() override
static void clusterTrackMap(SiTrackMakerEventData_xk &data, Trk::Track *Tr)
DoubleProperty m_etaWidth
ToolHandle< InDet::ISiDetElementsRoadMaker > m_roadmaker
DoubleProperty m_xi2maxlink
BooleanProperty m_cosmicTrack
bool globalPosition(const Trk::SpacePoint &sp, const double *dir, double *p) const
This is a refinement of the global position for strip space-points.
virtual StatusCode initialize() override
SG::ReadHandleKey< ROIPhiRZContainer > m_caloHad
IntegerProperty m_nholesmax
BooleanProperty m_useTrigTrackFollowingTool
static int rapidity(const std::vector< const Trk::SpacePoint * > &Sp)
bool isCaloCompatible(SiTrackMakerEventData_xk &data) const
static int kindSeed(const std::vector< const Trk::SpacePoint * > &Sp)
DoubleProperty m_pTminBrem
BooleanProperty m_useCaloSeeds
ToolHandle< ITrigInDetRoadPredictorTool > m_trigInDetRoadPredictorTool
Trk::MagneticFieldMode m_fieldModeEnum
IntegerProperty m_nwclusmin
ToolHandle< ITrigInDetTrackFollowingTool > m_trigInDetTrackFollowingTool
std::mutex m_counterMutex
IntegerProperty m_trackletPoints
SG::ReadCondHandleKey< AtlasFieldCacheCondObj > m_fieldCondObjInputKey
bool isHadCaloCompatible(SiTrackMakerEventData_xk &data) const
MsgStream & dumpconditions(MsgStream &out) const
InDet::TrackQualityCuts setTrackQualityCuts(bool simpleTrack) const
BooleanProperty m_useSSSfilter
virtual void endEvent(SiTrackMakerEventData_xk &data) const override
static bool isNewTrack(SiTrackMakerEventData_xk &data, Trk::Track *Tr)
static void detectorElementsSelection(SiTrackMakerEventData_xk &data, std::vector< const InDetDD::SiDetectorElement * > &DE)
IntegerProperty m_nclusmin
BooleanProperty m_useHClusSeed
MsgStream & dump(SiTrackMakerEventData_xk &data, MsgStream &out) const override
SG::ReadCondHandleKey< InDet::BeamSpotData > m_beamSpotKey
DoubleArrayProperty m_ptbins
void setIntCut(const std::string &, int)
void setDoubleCut(const std::string &, double)
Local cache for magnetic field (based on MagFieldServices/AtlasFieldSvcTLS.h)
bool solenoidOn() const
status of the magnets
void getFieldZR(const double *ATH_RESTRICT xyz, double *ATH_RESTRICT bxyz, double *ATH_RESTRICT deriv=nullptr)
get B field valaue on the z-r plane at given position works only inside the solenoid.
virtual bool isValid() override final
Can the handle be successfully dereferenced?
magnetic field properties to steer the behavior of the extrapolation
MagneticFieldMode magneticFieldMode() const
Returns the MagneticFieldMode as specified.
Class for a planaer rectangular or trapezoidal surface in the ATLAS detector.
virtual Surface::ChargedTrackParametersUniquePtr createUniqueTrackParameters(double l1, double l2, double phi, double theta, double qop, std::optional< AmgSymMatrix(5)> cov=std::nullopt) const override final
Use the Surface as a ParametersBase constructor, from local parameters - charged.
Class to handle RIO On Tracks ROT) for InDet and Muons, it inherits from the common MeasurementBase.
virtual const Trk::PrepRawData * prepRawData() const =0
returns the PrepRawData (also known as RIO) object to which this RIO_OnTrack is associated.
const Amg::Transform3D & transform() const
Returns HepGeom::Transform3D by reference.
@ BremFit
A brem fit was performed on this track.
@ SiSpacePointsSeedMaker_Cosmic
Entries allowing to distinguish different seed makers.
@ SiSpacePointsSeedMaker_LargeD0
Large d0 for displaced vertex searches.
@ SiSpacePointsSeedMaker_ForwardTracks
Entries allowing to distinguish different seed makers.
@ SiSpacePointsSeedMaker_BeamGas
@ SiSpacePointsSeedMaker_HeavyIon
@ SiSpacePointsSeedMaker_LowMomentum
@ SiSpacePointsSeedMaker_ITkConversionTracks
ITkConversion Track flag.
@ SiSPSeededFinder
Tracks from SiSPSeedFinder.
const DataVector< const MeasurementBase > * measurementsOnTrack() const
return a pointer to a vector of MeasurementBase (NOT including any that come from outliers).
Eigen::Affine3d Transform3D
Eigen::Matrix< double, 2, 1 > Vector2D
Eigen::Matrix< double, 3, 1 > Vector3D
MagneticFieldMode
MagneticFieldMode describing the field setup within a volume.
@ FastField
call the fast field access method of the FieldSvc
@ NoField
Field is set to 0., 0., 0.,.
@ FullField
Field is set to be realistic, but within a given Volume.
ParametersBase< TrackParametersDim, Charged > TrackParameters
hold the test vectors and ease the comparison