ATLAS Offline Software
SiTrackMaker_xk.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2023 CERN for the benefit of the ATLAS collaboration
3 */
4 
6 // Implementation file for class InDet::SiTrackMaker_xk
8 // (c) ATLAS Detector software
11 // Version 1.0 21/04/2004 I.Gavrilenko
13 
15 
19 
20 #include <iomanip>
21 #include <ostream>
22 
24 // Constructor
26 
28 (const std::string& t,const std::string& n,const IInterface* p)
29  : base_class(t, n, p)
30 {
31 
32 }
33 
35 // Initialisation
37 
39 {
42  if (not m_beamSpotKey.empty()) {
44  }
45 
47  if (m_fieldmode == "NoField") m_fieldModeEnum = Trk::NoField;
48  else if (m_fieldmode == "MapSolenoid") m_fieldModeEnum = Trk::FastField;
50 
53  if ( m_roadmaker.retrieve().isFailure() ) {
54  ATH_MSG_FATAL( "Failed to retrieve tool " << m_roadmaker );
55  return StatusCode::FAILURE;
56  }
57  ATH_MSG_DEBUG( "Retrieved tool " << m_roadmaker );
58 
61  if ( m_tracksfinder.retrieve().isFailure() ) {
62  ATH_MSG_FATAL( "Failed to retrieve tool " << m_tracksfinder );
63  return StatusCode::FAILURE;
64  }
65  ATH_MSG_DEBUG( "Retrieved tool " << m_tracksfinder );
66 
70  if ( m_trigInDetTrackFollowingTool.retrieve().isFailure() ) {
71  ATH_MSG_FATAL( "Failed to retrieve tool " << m_trigInDetTrackFollowingTool );
72  return StatusCode::FAILURE;
73  }
74  ATH_MSG_DEBUG( "Retrieved tool " << m_trigInDetTrackFollowingTool );
75  } else {
77  }
78 
82  if ( m_trigInDetRoadPredictorTool.retrieve().isFailure() ) {
83  ATH_MSG_FATAL( "Failed to retrieve tool " << m_trigInDetRoadPredictorTool );
84  return StatusCode::FAILURE;
85  }
86  ATH_MSG_DEBUG( "Retrieved tool " << m_trigInDetRoadPredictorTool );
87  } else {
89  }
90 
94  if (m_seedsegmentsWrite) {
95  if (m_seedtrack.retrieve().isFailure()) {
96  ATH_MSG_FATAL( "Failed to retrieve tool " << m_seedtrack );
97  return StatusCode::FAILURE;
98  }
99  ATH_MSG_DEBUG( "Retrieved tool " << m_seedtrack );
100  } else {
101  m_seedtrack.disable();
102  }
103 
105  m_heavyion = false;
106 
107 
108  // TrackpatternRecoInfo preparation
109  //
110  if (m_patternName == "SiSpacePointsSeedMaker_Cosmic" ) {
112  } else if (m_patternName == "SiSpacePointsSeedMaker_HeavyIon" ) {
114  m_heavyion = true;
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") {
125  } else {
127  }
128 
133 
135  if (m_pTmin < 20.) m_pTmin = 20.;
136 
137  if (m_etabins.size()>0) {
138  if (m_ptbins.size() > (m_etabins.size()-1)) {
139  ATH_MSG_ERROR( "No. of cut values bigger than eta bins");
140  return StatusCode::FAILURE;
141  }
142 
143  if (m_ptbins.size() < (m_etabins.size()-1)) {
144  ATH_MSG_DEBUG( "No. of cut values smaller than eta bins. Extending size..." );
145  m_ptbins.value().resize(m_etabins.size()-1, m_ptbins.value().back());
146  }
147 
148  for (auto& pt : m_ptbins) {
149  if (pt < 20.) pt = 20.;
150  }
151  }
152 
153 
155  resetCounter(m_totalInputSeeds);
156  resetCounter(m_totalNoTrackPar);
157  resetCounter(m_totalUsedSeeds);
158  resetCounter(m_outputTracks);
159  resetCounter(m_totalBremSeeds);
160  resetCounter(m_bremTracks);
161  resetCounter(m_twoClusters);
162  resetCounter(m_wrongRoad);
163  resetCounter(m_wrongInit);
164  resetCounter(m_noTrack);
165  resetCounter(m_notNewTrack);
166  resetCounter(m_bremAttempt);
167  resetCounter(m_seedsWithTrack);
168  resetCounter(m_deSize);
169  m_usedSeedsEta.resize(SiCombinatorialTrackFinderData_xk::kNSeedTypes);
170  m_seedsWithTracksEta.resize(SiCombinatorialTrackFinderData_xk::kNSeedTypes);
171  std::fill(m_usedSeedsEta.begin(), m_usedSeedsEta.end(),
172  std::vector<double>(SiCombinatorialTrackFinderData_xk::kNRapidityRanges, 0.));
173  std::fill(m_seedsWithTracksEta.begin(), m_seedsWithTracksEta.end(),
174  std::vector<double>(SiCombinatorialTrackFinderData_xk::kNRapidityRanges, 0.));
175 
179  return StatusCode::SUCCESS;
180 }
181 
183 // Finalize
185 
187 {
188  MsgStream &out = msg(MSG::INFO);
189  out << "::finalize() -- statistics:" <<std::endl;
191  out<<endmsg;
192  return AlgTool::finalize();
193 }
194 
196 // Dumps relevant information into the MsgStream
198 
199 MsgStream& InDet::SiTrackMaker_xk::dumpStatistics(MsgStream &out) const
200 {
201 
202  out<<"|----------------------|--------------|--------------|--------------|--------------|--------------|"
203  <<std::endl;
204  out<<"| Kind of seed | PPP | PPS | PSS | SSS | ALL |"
205  <<std::endl;
206  out<<"|----------------------|--------------|--------------|--------------|--------------|--------------|"
207  <<std::endl;
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])
214  <<" |"<<std::endl;
215 
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])
222  <<" |"<<std::endl;
223 
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])
230  <<" |"<<std::endl;
231 
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])
238  <<" |"<<std::endl;
239 
240  double tdetsize = 0.;
241  int goodseed = 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];
246  }
247  if(goodseed > 0) tdetsize/=double(goodseed);
248 
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
255  <<" |"<<std::endl;
256 
257 
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])
264  <<" |"<<std::endl;
265 
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])
272  <<" |"<<std::endl;
273 
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])
280  <<" |"<<std::endl;
281 
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])
288  <<" |"<<std::endl;
289 
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])
296  <<" |"<<std::endl;
297 
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])
304  <<" |"<<std::endl;
305 
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])
312  <<" |"<<std::endl;
313 
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])
320  <<" |"<<std::endl;
321 
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])
328  <<" |"<<std::endl;
329 
330  out<<"|----------------------|--------------|--------------|--------------|--------------|--------------|--------------|"
331  <<std::endl;
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<<"|----------------------|--------------|--------------|--------------|--------------|--------------|--------------|"
340  <<std::endl;
341 
342  std::vector<std::pair<int,std::string>> rapidityTablePrint;
343  //Defining the range values to be printed
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 | "));
352 
353 
355 
356  std::array<double,SiCombinatorialTrackFinderData_xk::kNSeedTypes+1> pu{};
357  pu.fill(0);
358 
359  double totalUsedSeedsEta = 0.;
360 
361  for(int j = 0; j != SiCombinatorialTrackFinderData_xk::kNSeedTypes; ++j){
362 
363  if(m_usedSeedsEta[j][i]!=0.) pu[j]=m_seedsWithTracksEta[j][i]/m_usedSeedsEta[j][i];
364  totalUsedSeedsEta += m_usedSeedsEta[j][i];
365 
366  }
367 
368  if(totalUsedSeedsEta!=0.) {
369 
370  for(int j = 0; j != SiCombinatorialTrackFinderData_xk::kNSeedTypes; ++j){
371 
372  pu[SiCombinatorialTrackFinderData_xk::kNSeedTypes] += m_seedsWithTracksEta[j][i];
373 
374  }
376  }
377 
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] << " | "
384  << std::setw(12)
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;
390  }
391 
392  out<<"|----------------------|--------------|--------------|--------------|--------------|--------------|--------------|"
393  <<std::endl;
394 
395  return out;
396 
397 }
398 
400 {
401  out<<std::endl;
402  if (data.nprint()) return dumpevent(data, out);
403  return dumpconditions(out);
404 }
405 
407 // Dumps conditions information into the MsgStream
409 
410 MsgStream& InDet::SiTrackMaker_xk::dumpconditions(MsgStream& out) const
411 {
412 
413  int n = 62-m_tracksfinder.type().size();
414  std::string s4; for (int i=0; i<n; ++i) s4.append(" "); s4.append("|");
415 
416  std::string fieldmode[9] ={"NoField" ,"ConstantField","SolenoidalField",
417  "ToroidalField" ,"Grid3DField" ,"RealisticField" ,
418  "UndefinedField","AthenaField" , "?????" };
419 
421 
422  // Get AtlasFieldCache
424  const AtlasFieldCacheCondObj* fieldCondObj{*readHandle};
425  if (fieldCondObj) {
426  MagField::AtlasFieldCache fieldCache;
427  fieldCondObj->getInitializedCache(fieldCache);
428  if (!fieldCache.solenoidOn()) fieldModeEnum = Trk::NoField;
429  }
430 
431  Trk::MagneticFieldProperties fieldprop(fieldModeEnum);
432  int mode = fieldprop.magneticFieldMode();
433  if (mode<0 || mode>8 ) mode = 8;
434 
435  n = 62-fieldmode[mode].size();
436  std::string s3; for (int i=0; i<n; ++i) s3.append(" "); s3.append("|");
437 
438  n = 62-m_roadmaker.type().size();
439  std::string s6; for (int i=0; i<n; ++i) s6.append(" "); s6.append("|");
440 
441  out<<"|----------------------------------------------------------------------"
442  <<"-------------------|"
443  <<std::endl;
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 ? | "
447  <<std::setw(12)<<m_useassoTool
448  << std::endl;
449  out<<"| Magnetic field mode | "<<fieldmode[mode] <<s3<<std::endl;
450  out<<"| Use seeds filter ? | "<<std::setw(12)<<m_seedsfilter
451  <<" |"<<std::endl;
452  out<<"| Min pT of track (MeV) | "<<std::setw(12)<<std::setprecision(5)<<m_pTmin
453  <<" |"<<std::endl;
454  out<<"| Max Xi2 for cluster | "<<std::setw(12)<<std::setprecision(5)<<m_xi2max
455  <<" |"<<std::endl;
456  out<<"| Max Xi2 for outlayer | "<<std::setw(12)<<std::setprecision(5)<<m_xi2maxNoAdd
457  <<" |"<<std::endl;
458  out<<"| Max Xi2 for link | "<<std::setw(12)<<std::setprecision(5)<<m_xi2maxlink
459  <<" |"<<std::endl;
460  out<<"| Min number of clusters | "<<std::setw(12)<<m_nclusmin
461  <<" |"<<std::endl;
462  out<<"| Min number of wclusters | "<<std::setw(12)<<m_nwclusmin
463  <<" |"<<std::endl;
464  out<<"| Max number holes | "<<std::setw(12)<<m_nholesmax
465  <<" |"<<std::endl;
466  out<<"| Max holes gap | "<<std::setw(12)<<m_dholesmax
467  <<" |"<<std::endl;
468  out<<"|----------------------------------------------------------------------"
469  <<"-------------------|"
470  <<std::endl;
471  return out;
472 }
473 
474 
476 // Dumps event information into the MsgStream
478 
480 {
481  out<<"|---------------------------------------------------------------------|"
482  <<std::endl;
483  out<<"| Number input seeds | "<<std::setw(12)<<data.inputseeds()
484  <<" |"<<std::endl;
485  out<<"| Number good seeds | "<<std::setw(12)<<data.goodseeds()
486  <<" |"<<std::endl;
487  out<<"| Number output tracks | "<<std::setw(12)<<data.findtracks()
488  <<" |"<<std::endl;
489  out<<"|---------------------------------------------------------------------|"
490  <<std::endl;
491  return out;
492 }
493 
495 // Initiate track finding tool for new event
497 
498 void InDet::SiTrackMaker_xk::newEvent(const EventContext& ctx, SiTrackMakerEventData_xk& data, bool PIX, bool SCT) const
499 {
500 
502  data.xybeam()[0] = 0.;
503  data.xybeam()[1] = 0.;
504  if (not m_beamSpotKey.empty()) {
506  if (beamSpotHandle.isValid()) {
507  data.xybeam()[0] = beamSpotHandle->beamPos()[0];
508  data.xybeam()[1] = beamSpotHandle->beamPos()[1];
509  }
510  }
512  data.pix() = PIX and m_usePix;
513  data.sct() = SCT and m_useSct;
514 
516  InDet::TrackQualityCuts trackquality = setTrackQualityCuts(false);
517 
519  m_tracksfinder->newEvent(ctx, data.combinatorialData(), m_trackinfo, trackquality);
520 
524  if (m_seedsfilter) data.clusterTrack().clear();
525 
528  data.inputseeds() = 0;
529  data.goodseeds() = 0;
530  data.findtracks() = 0;
531  resetCounter(data.summaryStatAll());
532  resetCounter(data.summaryStatUsedInTrack());
533 
537  if (!calo_rois.isValid()) {
538  ATH_MSG_FATAL("Failed to get EM Calo cluster collection " << m_caloCluster );
539  }
540  data.setCaloClusterROIEM(*calo_rois);
541  }
542 
544  if (!m_useSSSfilter && m_useHClusSeed) {
546  if (!calo_rois.isValid()) {
547  ATH_MSG_FATAL("Failed to get Had Calo cluster collection " << m_caloHad );
548  }
549  data.setCaloClusterROIHad(*calo_rois);
550  }
552  if (m_seedsegmentsWrite) m_seedtrack->newEvent(data.conversionData(), m_trackinfo, m_patternName);
553 }
554 
556 // Initiate track finding tool for new event
558 
559 void InDet::SiTrackMaker_xk::newTrigEvent(const EventContext& ctx, SiTrackMakerEventData_xk& data, bool PIX, bool SCT) const
560 {
561  data.pix() = PIX && m_usePix;
562  data.sct() = SCT && m_useSct;
563  bool simpleTrack = true;
564 
565  InDet::TrackQualityCuts trackquality = setTrackQualityCuts(simpleTrack);
566 
567  // New event for track finder tool
568  //
569  m_tracksfinder->newEvent(ctx, data.combinatorialData(), m_trackinfo, trackquality);
570 
571  // Erase cluster to track association
572  //
573  if (m_seedsfilter) data.clusterTrack().clear();
574 
575  // Erase statistic information
576  //
577  data.inputseeds() = 0;
578  data.goodseeds() = 0;
579  data.findtracks() = 0;
582  data.summaryStatAll()[i][k] = 0.;
583  }
584  }
586  for (int k = 0; k != SiCombinatorialTrackFinderData_xk::kNSeedTypes; ++k) {
588  data.summaryStatUsedInTrack()[i][k][r] = 0.;
589  }
590  }
591  }
592 
593  // Add possibility to write seed segment information
594  if (m_seedsegmentsWrite) m_seedtrack->newEvent(data.conversionData(), m_trackinfo, m_patternName);
595 
596 }
597 
599 // Finalize track finding tool for given event
601 
603 {
605  m_tracksfinder->endEvent(data.combinatorialData());
606 
608  data.clusterTrack().clear();
609 
610  // end event for seed to track tool
611  if (m_seedsegmentsWrite) m_seedtrack->endEvent(data.conversionData());
612 
613  // fill statistics
614  {
615  std::lock_guard<std::mutex> lock(m_counterMutex);
616 
617  for(int K = 0; K != SiCombinatorialTrackFinderData_xk::kNSeedTypes; ++K) {
618  for(int r = 0; r != 8; ++r) {
619  m_usedSeedsEta[K][r] += data.summaryStatUsedInTrack()[kUsedSeedsEta][K][r];
620  m_seedsWithTracksEta[K][r] += data.summaryStatUsedInTrack()[kSeedsWithTracksEta][K][r];
621  }
622  }
623  }
624  for (int K = 0; K != SiCombinatorialTrackFinderData_xk::kNSeedTypes; ++K) {
625  m_totalInputSeeds[K] += data.summaryStatAll()[kTotalInputSeeds][K];
626  m_totalUsedSeeds[K] = m_totalUsedSeeds[K] + data.summaryStatAll()[kTotalUsedSeeds][K];
627  m_totalNoTrackPar[K] += data.summaryStatAll()[kTotalNoTrackPar][K];
628  m_totalBremSeeds[K] += data.summaryStatAll()[kTotalBremSeeds][K];
629  m_twoClusters[K] += data.summaryStatAll()[kTwoClusters][K];
630  m_wrongRoad[K] += data.summaryStatAll()[kWrongRoad][K];
631  m_wrongInit[K] += data.summaryStatAll()[kWrongInit][K];
632  m_noTrack[K] += data.summaryStatAll()[kNoTrack][K];
633  m_notNewTrack[K] += data.summaryStatAll()[kNotNewTrack][K];
634  m_bremAttempt[K] += data.summaryStatAll()[kBremAttempt][K];
635  m_outputTracks[K] += data.summaryStatAll()[kOutputTracks][K];
636  m_extraTracks[K] += data.summaryStatAll()[kExtraTracks][K];
637  m_bremTracks[K] += data.summaryStatAll()[kBremTracks][K];
638  m_seedsWithTrack[K] += data.summaryStatAll()[kSeedsWithTracks][K];
639  m_deSize[K] = m_deSize[K] + data.summaryStatAll()[kDESize][K];
640  }
641  // Print event information
642  //
643  if (msgLevel()<=0) {
644  data.nprint() = 1;
645  dump(data, msg(MSG::DEBUG));
646  }
647 }
648 
650 // Main method for track finding using space points
652 
653 std::list<Trk::Track*> InDet::SiTrackMaker_xk::getTracks
654 (const EventContext& ctx, SiTrackMakerEventData_xk& data, const std::vector<const Trk::SpacePoint*>& Sp) const
655 {
657  ++data.inputseeds();
658 
660  int K = kindSeed(Sp);
662  int r = rapidity(Sp);
663 
665  ++data.summaryStatAll()[kTotalInputSeeds][K];
666 
668  std::list<Trk::Track*> tracks;
670  if (!data.pix() && !data.sct()) return tracks;
671 
673  bool isGoodSeed{true};
676  if (m_seedsfilter) isGoodSeed=newSeed(data, Sp);
677  if (!m_seedsegmentsWrite && !isGoodSeed) {
678  return tracks;
679  }
680 
681  // Get AtlasFieldCache
682  MagField::AtlasFieldCache fieldCache;
683 
686  const AtlasFieldCacheCondObj* fieldCondObj{*readHandle};
687  if (fieldCondObj == nullptr) {
688  ATH_MSG_ERROR("InDet::SiTrackMaker_xk::getTracks: Failed to retrieve AtlasFieldCacheCondObj with key " << m_fieldCondObjInputKey.key());
689  return tracks;
690  }
691  fieldCondObj->getInitializedCache (fieldCache);
692 
694  std::unique_ptr<Trk::TrackParameters> Tp = nullptr;
695  Tp = getAtaPlane(fieldCache, data, false, Sp, ctx);
696  if (m_seedsegmentsWrite && Tp) {
697  m_seedtrack->executeSiSPSeedSegments(data.conversionData(), Tp.get(), isGoodSeed, Sp);
698  }
699 
700  if (m_seedsegmentsWrite && !isGoodSeed) {
701  return tracks;
702  }
706  if (!Tp) {
707  ++data.summaryStatAll()[kTotalNoTrackPar][K];
708  return tracks;
709  }
710 
712  ++data.goodseeds();
713 
718 
719  std::vector<const InDetDD::SiDetectorElement*> DE;
720 
722  if (!m_cosmicTrack){
723  m_roadmaker->detElementsRoad(ctx, fieldCache, *Tp, Trk::alongMomentum, DE, data.roadMakerData());
724  }
725  else{
726  m_roadmaker->detElementsRoad(ctx, fieldCache, *Tp, Trk::oppositeMomentum, DE, data.roadMakerData());
727  }
728  } else {
729  int road_length = m_trigInDetRoadPredictorTool->getRoad(Sp, DE, ctx);
730  if(road_length == 0) {
731  return tracks;
732  }
733  }
734 
736  if (!data.pix() || !data.sct()) detectorElementsSelection(data, DE);
737 
740  if ( static_cast<int>(DE.size()) < m_nclusmin) {
741  return tracks;
742  }
743 
745  data.summaryStatAll()[kDESize][K] += double(DE.size());
746  ++data.summaryStatAll()[kTotalUsedSeeds][K];
747 
749  std::vector<Amg::Vector3D> Gp;
750 
752  ++data.summaryStatUsedInTrack()[kUsedSeedsEta][K][r];
753 
756  if (!m_useBremModel) {
758  Trk::Track* newTrack = m_trigInDetTrackFollowingTool->getTrack(Sp, DE, ctx);
759  if(newTrack != nullptr) tracks.push_back(newTrack);
760  }
761  else {
762  tracks = m_tracksfinder->getTracks(data.combinatorialData(), *Tp, Sp, Gp, DE, data.clusterTrack(),ctx);
763  }
764  } else if (!m_useCaloSeeds) {
765  ++data.summaryStatAll()[kTotalBremSeeds][K];
766  tracks = m_tracksfinder->getTracksWithBrem(data.combinatorialData(), *Tp, Sp, Gp, DE, data.clusterTrack(), false,ctx);
767  }
769  else if (isCaloCompatible(data)) {
770 
771  ++data.summaryStatAll()[kTotalBremSeeds][K];
772  tracks = m_tracksfinder->getTracksWithBrem(data.combinatorialData(), *Tp, Sp, Gp, DE, data.clusterTrack(), true,ctx);
773  } else {
774  tracks = m_tracksfinder->getTracks (data.combinatorialData(), *Tp, Sp, Gp, DE, data.clusterTrack(),ctx);
775  }
776 
778  std::array<bool,SiCombinatorialTrackFinderData_xk::kNCombStats> inf{0,0,0,0,0,0};
779  m_tracksfinder->fillStatistic(data.combinatorialData(),inf);
780  for (size_t p =0; p<inf.size(); ++p){
781  if(inf[p]) ++data.summaryStatAll()[m_indexToEnum[p]][K];
782  }
783 
786  if (m_seedsfilter) {
787  std::list<Trk::Track*>::iterator t = tracks.begin();
788  while (t!=tracks.end()) {
790  if (!isNewTrack(data, *t)) {
791  delete (*t);
792  tracks.erase(t++);
793  } else {
794  if((*t)->info().trackProperties(Trk::TrackInfo::BremFit)) ++data.summaryStatAll()[kBremTracks][K];
795  clusterTrackMap(data, *t++);
796  }
797  }
798  }
799  data.findtracks() += tracks.size();
800 
801  if(!tracks.empty()) {
802  ++data.summaryStatAll()[kSeedsWithTracks][K];
803  ++data.summaryStatUsedInTrack()[kSeedsWithTracksEta][K][r];
804  data.summaryStatAll()[kOutputTracks][K] += tracks.size();
805  data.summaryStatAll()[kExtraTracks][K] += (tracks.size()-1);
806  }
807 
808  return tracks;
809 
810 }
811 
813 // Main method for track finding using space points
815 
816 std::list<Trk::Track*> InDet::SiTrackMaker_xk::getTracks
817 (const EventContext& ctx, SiTrackMakerEventData_xk& data, const Trk::TrackParameters& Tp, const std::vector<Amg::Vector3D>& Gp) const
818 {
819  ++data.inputseeds();
820  std::list<Trk::Track*> tracks;
821  if (!data.pix() && !data.sct()) return tracks;
822 
823  ++data.goodseeds();
824 
825  // Get AtlasFieldCache
826  MagField::AtlasFieldCache fieldCache;
827 
829  const AtlasFieldCacheCondObj* fieldCondObj{*readHandle};
830  if (fieldCondObj == nullptr) {
831  ATH_MSG_ERROR("InDet::SiTrackMaker_xk::getTracks: Failed to retrieve AtlasFieldCacheCondObj with key " << m_fieldCondObjInputKey.key());
832  return tracks;
833  }
834  fieldCondObj->getInitializedCache (fieldCache);
835 
836  // Get detector elements road
837  //
838  std::vector<const InDetDD::SiDetectorElement*> DE;
839  if (!m_cosmicTrack) m_roadmaker->detElementsRoad(ctx, fieldCache, Tp,Trk::alongMomentum, DE, data.roadMakerData());
840  else m_roadmaker->detElementsRoad(ctx, fieldCache, Tp,Trk::oppositeMomentum,DE, data.roadMakerData());
841 
842  if (!data.pix() || !data.sct()) detectorElementsSelection(data, DE);
843 
844  if (static_cast<int>(DE.size()) < m_nclusmin) return tracks;
845 
846  // Find possible list of tracks with trigger track parameters or global positions
847  //
848  std::vector<const Trk::SpacePoint*> Sp;
849 
850  if (!m_useBremModel) {
851  tracks = m_tracksfinder->getTracks (data.combinatorialData(), Tp, Sp, Gp, DE, data.clusterTrack(),ctx);
852  } else if (!m_useCaloSeeds) {
853  tracks = m_tracksfinder->getTracksWithBrem(data.combinatorialData(), Tp, Sp, Gp, DE, data.clusterTrack(), false,ctx);
854  } else if (isCaloCompatible(data)) {
855  tracks = m_tracksfinder->getTracksWithBrem(data.combinatorialData(), Tp, Sp, Gp, DE, data.clusterTrack(), true,ctx);
856  } else {
857  tracks = m_tracksfinder->getTracks (data.combinatorialData(), Tp, Sp, Gp, DE, data.clusterTrack(),ctx);
858  }
859 
860  if (m_seedsfilter) {
861  std::list<Trk::Track*>::iterator t = tracks.begin();
862  while (t!=tracks.end()) {
863  if (!isNewTrack(data, *t)) {
864  delete (*t);
865  tracks.erase(t++);
866  } else {
867  clusterTrackMap(data, *t++);
868  }
869  }
870  }
871  data.findtracks() += tracks.size();
872  return tracks;
873 }
874 
876 // Space point seed parameters extimation
878 
879 std::unique_ptr<Trk::TrackParameters> InDet::SiTrackMaker_xk::getAtaPlane
880 (MagField::AtlasFieldCache& fieldCache,
882  bool sss,
883  const std::vector<const Trk::SpacePoint*>& theSeed,
884  const EventContext& ctx) const
885 {
887  if (theSeed.size() < 3) return nullptr;
888 
889  std::vector<const Trk::SpacePoint*> SP;
890 
892  if (m_trackletPoints == 1) {
893  unsigned int middleIdx = theSeed.size() == 3 ? 1 : theSeed.size()/2;
894  SP = {theSeed[0], theSeed[middleIdx], theSeed.back()};
895  }
896  // for tracklets we select last 3 spacepoints of the seed
897  else if (m_trackletPoints == 2) {
898  SP = {theSeed[theSeed.size() - 3], theSeed[theSeed.size() - 2], theSeed.back()};
899  }
901  else if (m_trackletPoints == 3) {
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()};
905  }
907  else if (m_trackletPoints == 4) {
908  SP = {theSeed[0], theSeed[theSeed.size() - 2], theSeed.back()};
909  }
911  else if (m_trackletPoints == 5) {
912  SP = {theSeed[0], theSeed[1], theSeed[2]};
913  }
914 
915 
917  const Trk::PrepRawData* cl = SP[0]->clusterList().first;
918  if (!cl) return nullptr;
920  const Trk::PlaneSurface* pla =
921  static_cast<const Trk::PlaneSurface*>(&cl->detectorElement()->surface());
922  if (!pla) return nullptr;
923 
926  double p0[3],p1[3],p2[3];
927  if (!globalPositions(*(SP[0]),*(SP[1]),*(SP[2]),p0,p1,p2)) return nullptr;
928 
930  double x0 = p0[0] ;
931  double y0 = p0[1] ;
932  double z0 = p0[2] ;
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;
938 
941  double u1 = 1./sqrt(x1*x1+y1*y1) ;
943  double rn = x2*x2+y2*y2 ;
944  double r2 = 1./rn ;
946  double a = x1*u1 ;
947  double b = y1*u1 ;
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);
958  if(m_ITKGeometry){
959  T = std::abs(C) > 1.e-6 ? (z2*C)/asin(C*sqrt(rn)) : z2/sqrt(rn);
960  }
961 
962  const Amg::Transform3D& Tp = pla->transform();
963 
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];
975 
978  if (!fieldCache.solenoidOn()) fieldModeEnum = Trk::NoField;
979 
980  Trk::MagneticFieldProperties fieldprop(fieldModeEnum);
982  if (fieldprop.magneticFieldMode() > 0) {
983 
985  double H[3],gP[3] ={x0,y0,z0};
986  fieldCache.getFieldZR(gP, H);
987 
990  if (fabs(H[2])>.0001) {
992  data.par()[2] = atan2(b+a*A,a-b*A);
994  data.par()[3] = atan2(1.,T) ;
996  data.par()[5] = -C/(300.*H[2]) ;
997  } else {
1000  T = z2*sqrt(r2) ;
1001  data.par()[2] = atan2(y2,x2);
1002  data.par()[3] = atan2(1.,T) ;
1003  data.par()[5] = m_ITKGeometry ? 0.9/m_pTmin : 1./m_pTmin ;
1004  }
1005  }
1007  else {
1008  T = z2*sqrt(r2) ;
1009  data.par()[2] = atan2(y2,x2);
1010  data.par()[3] = atan2(1.,T) ;
1011  data.par()[5] = m_ITKGeometry ? 0.9/m_pTmin : 1./m_pTmin ;
1012  }
1013 
1014  double pTm = pTmin(SP[0]->eta()); // all spacepoints should have approx. same eta
1015 
1017  if (m_ITKGeometry){
1018  if(std::abs(data.par()[5])*pTm > 1) return nullptr;
1019  }
1020  else if(std::abs(data.par()[5])*m_pTmin > 1.1) return nullptr;
1021 
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 ;
1027 
1030  if (sss && !isHadCaloCompatible(data)) return nullptr;
1031 
1034  std::unique_ptr<Trk::TrackParameters> T0 = pla->createUniqueTrackParameters(data.par()[0],
1035  data.par()[1],
1036  data.par()[2],
1037  data.par()[3],
1038  data.par()[4],
1039  std::nullopt);
1040 
1041  if(m_ITKGeometry && m_tracksfinder->pTseed(data.combinatorialData(),*T0,SP,ctx) < pTm) return nullptr;
1042  else return T0;
1043 
1044 }
1045 
1047 // Set track quality cuts
1049 
1051 {
1052  InDet::TrackQualityCuts trackquality;
1053  // Integer cuts
1054  //
1055  trackquality.setIntCut("MinNumberOfClusters" ,m_nclusmin );
1056  trackquality.setIntCut("MinNumberOfWClusters",m_nwclusmin );
1057  trackquality.setIntCut("MaxNumberOfHoles" ,m_nholesmax );
1058  trackquality.setIntCut("MaxHolesGap" ,m_dholesmax );
1059 
1060  if (m_useassoTool) trackquality.setIntCut("UseAssociationTool",1);
1061  else trackquality.setIntCut("UseAssociationTool",0);
1062  if (m_cosmicTrack) trackquality.setIntCut("CosmicTrack" ,1);
1063  else trackquality.setIntCut("CosmicTrack" ,0);
1064  if (simpleTrack) trackquality.setIntCut("SimpleTrack" ,1);
1065  else trackquality.setIntCut("SimpleTrack" ,0);
1066  if (m_multitracks) trackquality.setIntCut("doMultiTracksProd" ,1);
1067  else trackquality.setIntCut("doMultiTracksProd" ,0);
1068 
1069  // Double cuts
1070  //
1071  trackquality.setDoubleCut("pTmin" ,m_pTmin );
1072  trackquality.setDoubleCut("pTminBrem" ,m_pTminBrem );
1073  trackquality.setDoubleCut("MaxXi2forCluster" ,m_xi2max );
1074  trackquality.setDoubleCut("MaxXi2forOutlier" ,m_xi2maxNoAdd);
1075  trackquality.setDoubleCut("MaxXi2forSearch" ,m_xi2maxlink );
1076  trackquality.setDoubleCut("MaxXi2MultiTracks" ,m_xi2multitracks);
1077 
1078  return trackquality;
1079 }
1080 
1082 // Detector elements selection
1084 
1086  std::vector<const InDetDD::SiDetectorElement*>& DE)
1087 {
1089  while (d!=DE.end()) {
1090  if ((*d)->isPixel()) {
1091  if (!data.pix()) {
1092  d = DE.erase(d);
1093  continue;
1094  }
1095  } else if (!data.sct()) {
1096  d = DE.erase(d);
1097  continue;
1098  }
1099  ++d;
1100  }
1101 }
1102 
1104 // Clusters from seed comparison with clusters associated with track
1105 //
1106 // Seeds is good only if no tracks has hits in all clusters from given seed (nt!=n)
1107 // where, n - number clusters in seed
1108 // nt - number clusters with track information
1109 //
1111 
1112 bool InDet::SiTrackMaker_xk::newSeed(SiTrackMakerEventData_xk& data, const std::vector<const Trk::SpacePoint*>& Sp) const
1113 {
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();
1116 
1118  size_t n = 0;
1119 
1120  for (const Trk::SpacePoint* spacePoint : Sp) {
1121 
1123  const Trk::PrepRawData* prd = spacePoint->clusterList().first;
1124 
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);
1130  }
1132  ++n;
1134  prd = spacePoint->clusterList().second;
1136  if (!prd) continue;
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);
1141  }
1143  ++n;
1144  }
1148  if(trackseed.size() < n) return true;
1150  if( m_heavyion && n==3 ) return true;
1151 
1153 
1158  const Trk::Track* currentTrack {nullptr};
1159  size_t clustersOnCurrent = 1;
1161  for(const Trk::Track* track : trackseed) {
1163  if(track != currentTrack) {
1164  currentTrack = track;
1165  clustersOnCurrent = 1;
1166  continue ;
1167  }
1170  if(++clustersOnCurrent == n) return false;
1171  }
1173  return clustersOnCurrent!=n;
1174 }
1175 
1179 
1180 
1181 int InDet::SiTrackMaker_xk::kindSeed(const std::vector<const Trk::SpacePoint*>& Sp)
1182 {
1183 
1184  if(Sp.size()!=3) return 0;//correct handling of Pixel-only ITk tracklets
1185 
1186  std::vector<const Trk::SpacePoint*>::const_iterator s=Sp.begin(),se=Sp.end();
1187 
1188  int n = 0;
1189  for(; s!=se; ++s) {if((*s)->clusterList().second) ++n;}
1190  return n;
1191 }
1192 
1193 int InDet::SiTrackMaker_xk::rapidity(const std::vector<const Trk::SpacePoint*>& Sp)
1194 {
1195  if(Sp.size() < 2) return 0;
1196 
1197  Amg::Vector3D delta_sp = Sp[0]->globalPosition() - Sp[1]->globalPosition();
1198  float eta = 2*std::abs(delta_sp.eta());
1199  int n = int(eta);
1200  if(n > 7) n = 7;
1201  return n;
1202 }
1203 
1205 // Clusters-track multimap production
1207 
1209 {
1211  m = Tr->measurementsOnTrack()->begin(),
1212  me = Tr->measurementsOnTrack()->end ();
1213 
1214  for (; m!=me; ++m) {
1215  const Trk::PrepRawData* prd = static_cast<const Trk::RIO_OnTrack*>(*m)->prepRawData();
1216  if (prd) data.clusterTrack().insert(std::make_pair(prd, Tr));
1217  }
1218 }
1219 
1221 // Test is it new track
1223 
1225 {
1226  const Trk::PrepRawData* prd [100];
1227  std::multimap<const Trk::PrepRawData*,const Trk::Track*>::const_iterator
1228  ti,t[100],te = data.clusterTrack().end();
1229 
1230  int n = 0;
1231 
1233  m = Tr->measurementsOnTrack()->begin(),
1234  me = Tr->measurementsOnTrack()->end ();
1235 
1236  for (; m!=me; ++m) {
1237 
1238  const Trk::PrepRawData* pr = static_cast<const Trk::RIO_OnTrack*>(*m)->prepRawData();
1239  if (pr) {
1240  prd[n] =pr;
1241  t [n] = data.clusterTrack().find(prd[n]);
1242  if (t[n]==te) return true;
1243  ++n;
1244  }
1245  }
1246 
1247  if (!n) return true;
1248  int nclt = n;
1249 
1250  for (int i=0; i!=n; ++i) {
1251  int nclmax = 0;
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;
1256  }
1257  if (nclt > nclmax) return true;
1258  }
1259  return false;
1260 }
1261 
1263 // Calculation global position for space points
1265 
1267 (const Trk::SpacePoint& s0, const Trk::SpacePoint& s1, const Trk::SpacePoint& s2,
1268  double* p0, double* p1, double* p2) const
1269 {
1270 
1272  p0[0] = s0.globalPosition().x();
1273  p0[1] = s0.globalPosition().y();
1274  p0[2] = s0.globalPosition().z();
1275 
1276  p1[0] = s1.globalPosition().x();
1277  p1[1] = s1.globalPosition().y();
1278  p1[2] = s1.globalPosition().z();
1279 
1280  p2[0] = s2.globalPosition().x();
1281  p2[1] = s2.globalPosition().y();
1282  p2[2] = s2.globalPosition().z();
1283 
1285  if (!s0.clusterList().second && !s1.clusterList().second && !s2.clusterList().second) return true;
1286 
1288  double dir0[3],dir1[3],dir2[3];
1289 
1290  globalDirections(p0,p1,p2,dir0,dir1,dir2);
1291 
1294  if (s0.clusterList().second && !globalPosition(s0,dir0,p0)) return false;
1295  if (s1.clusterList().second && !globalPosition(s1,dir1,p1)) return false;
1296  if (s2.clusterList().second && !globalPosition(s2,dir2,p2)) return false;
1297 
1298  return true;
1299 }
1300 
1302 // Calculation global position for space points
1304 
1309 (const Trk::SpacePoint& sp, const double* dir,double* p) const
1310 {
1312  const Trk::PrepRawData* c0 = sp.clusterList().first;
1313  const Trk::PrepRawData* c1 = sp.clusterList().second;
1314 
1315  const InDetDD::SiDetectorElement* de0 = static_cast<const InDet::SiCluster*>(c0)->detectorElement();
1316  const InDetDD::SiDetectorElement* de1 = static_cast<const InDet::SiCluster*>(c1)->detectorElement();
1317 
1319  Amg::Vector2D localPos = c0->localPosition();
1320  std::pair<Amg::Vector3D,Amg::Vector3D> e0
1321  (de0->endsOfStrip(InDetDD::SiLocalPosition(localPos.y(),localPos.x(),0.)));
1322 
1323  localPos = c1->localPosition();
1324  std::pair<Amg::Vector3D,Amg::Vector3D> e1
1325  (de1->endsOfStrip(InDetDD::SiLocalPosition(localPos.y(),localPos.x(),0.)));
1326 
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()};
1333 
1335  double d0 = m_distmax/sqrt(a0[0]*a0[0]+a0[1]*a0[1]+a0[2]*a0[2]);
1336 
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]};
1341 
1348 
1351  double du = a0[0]*u[0]+a0[1]*u[1]+a0[2]*u[2];
1352 
1354  if (du==0. ) return false;
1355 
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;
1368 
1373  if (s0 < -d0 || s0 > 1.+d0 || s1 < -d0 || s1 > 1.+d0) return false;
1374 
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];
1380 
1381  return true;
1382 }
1383 
1385 // Test is it track with calo seed compatible
1387 
1389 {
1390  if (!data.caloClusterROIEM()) return false;
1391 
1392 
1393  double F = data.par()[2] ;
1394  double E = -log(tan(.5*data.par()[3])) ;
1395  double R = sqrt(data.par()[6]*data.par()[6]+data.par()[7]*data.par()[7]);
1396  double Z = data.par()[8] ;
1397  return data.caloClusterROIEM()->hasMatchingROI(F, E, R, Z, m_phiWidth, m_etaWidth);
1398 }
1399 
1401 // Test track is compatible withi had calo seed
1403 
1405 {
1406  if (!data.caloClusterROIHad()) return false;
1407 
1408  double F = data.par()[2] ;
1409  double E = -log(tan(.5*data.par()[3])) ;
1410  double R = sqrt(data.par()[6]*data.par()[6]+data.par()[7]*data.par()[7]);
1411  double Z = data.par()[8] ;
1412 
1413  return data.caloClusterROIHad()->hasMatchingROI(F, E, R, Z, m_phiWidth, m_etaWidth);
1414 }
1415 
1417 // Calculation global direction for positions of space points
1419 
1424 (const double* p0, const double* p1, const double* p2, double* d0, double* d1, double* d2)
1425 {
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] ;
1431 
1435 
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 ;
1446 
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) ;
1458 
1464 
1465  double C2 = (1.-B0*y2) ;
1466  double S2 = (A0+B0*x2) ;
1467 
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 ;
1474 
1479  d0[0] = Sa -Sb*A0;
1480  d0[1]= Sb +Sa*A0;
1481  d0[2]=cosTheta;
1482 
1484  d1[0] = Sa +Sb*A0;
1485  d1[1]= Sb -Sa*A0;
1486  d1[2]=cosTheta;
1487 
1489  d2[0] = Sa*C2-Sb*S2;
1490  d2[1]= Sb*C2+Sa*S2;
1491  d2[2]=cosTheta;
1492 }
1493 
1494 
1495 
1496 double InDet::SiTrackMaker_xk::pTmin(double eta) const
1497 {
1498  if (m_ptbins.size() == 0) return m_pTmin;
1499  double aeta = std::abs(eta);
1500  for(int n = int(m_ptbins.size()-1); n>=0; --n) {
1501  if(aeta > m_etabins[n]) return m_ptbins[n];
1502  }
1503  return m_pTmin;
1504 }
Trk::SpacePoint::clusterList
const std::pair< const PrepRawData *, const PrepRawData * > & clusterList() const
return the pair of cluster pointers by reference
Definition: Tracking/TrkEvent/TrkSpacePoint/TrkSpacePoint/SpacePoint.h:127
xAOD::iterator
JetConstituentVector::iterator iterator
Definition: JetConstituentVector.cxx:68
Trk::SpacePoint
Definition: Tracking/TrkEvent/TrkSpacePoint/TrkSpacePoint/SpacePoint.h:35
beamspotman.r
def r
Definition: beamspotman.py:674
InDet::SiTrackMaker_xk::m_distmax
DoubleProperty m_distmax
Definition: SiTrackMaker_xk.h:161
InDet::SiTrackMaker_xk::m_useSct
BooleanProperty m_useSct
Definition: SiTrackMaker_xk.h:143
plotBeamSpotCompare.x1
x1
Definition: plotBeamSpotCompare.py:215
InDet::SiTrackMaker_xk::dumpStatistics
MsgStream & dumpStatistics(MsgStream &out) const
Definition: SiTrackMaker_xk.cxx:199
data
char data[hepevt_bytes_allocation_ATLAS]
Definition: HepEvt.cxx:11
InDet::SiTrackMaker_xk::m_nclusmin
IntegerProperty m_nclusmin
Definition: SiTrackMaker_xk.h:165
InDet::SiTrackMaker_xk::m_fieldCondObjInputKey
SG::ReadCondHandleKey< AtlasFieldCacheCondObj > m_fieldCondObjInputKey
Definition: SiTrackMaker_xk.h:132
InDet::SiTrackMaker_xk::m_xi2multitracks
DoubleProperty m_xi2multitracks
Definition: SiTrackMaker_xk.h:162
python.tests.PyTestsLib.finalize
def finalize(self)
_info( "content of StoreGate..." ) self.sg.dump()
Definition: PyTestsLib.py:50
ATH_MSG_FATAL
#define ATH_MSG_FATAL(x)
Definition: AthMsgStreamMacros.h:34
InDet::SiTrackMaker_xk::kTotalUsedSeeds
@ kTotalUsedSeeds
Definition: SiTrackMaker_xk.h:207
InDet::SiTrackMaker_xk::dumpconditions
MsgStream & dumpconditions(MsgStream &out) const
Definition: SiTrackMaker_xk.cxx:410
InDet::TrackQualityCuts::setIntCut
void setIntCut(const std::string &, int)
Definition: ISiCombinatorialTrackFinder.h:179
SG::ReadCondHandle
Definition: ReadCondHandle.h:44
Trk::MagneticFieldProperties
Definition: MagneticFieldProperties.h:31
InDet::SiTrackMaker_xk::m_xi2maxNoAdd
DoubleProperty m_xi2maxNoAdd
Definition: SiTrackMaker_xk.h:157
InDet::SiTrackMaker_xk::kTotalNoTrackPar
@ kTotalNoTrackPar
Definition: SiTrackMaker_xk.h:208
Trk::Track
The ATLAS Track class.
Definition: Tracking/TrkEvent/TrkTrack/TrkTrack/Track.h:73
AtlasFieldCacheCondObj
Definition: AtlasFieldCacheCondObj.h:19
InDet::SiTrackMaker_xk::m_nwclusmin
IntegerProperty m_nwclusmin
Definition: SiTrackMaker_xk.h:166
InDet::SiTrackMaker_xk::m_usePix
BooleanProperty m_usePix
Definition: SiTrackMaker_xk.h:142
InDet::SiTrackMaker_xk::m_seedtrack
ToolHandle< InDet::ISeedToTrackConversionTool > m_seedtrack
Definition: SiTrackMaker_xk.h:126
egammaEnergyPositionAllSamples::e1
double e1(const xAOD::CaloCluster &cluster)
return the uncorrected cluster energy in 1st sampling
MagField::AtlasFieldCache::getFieldZR
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.
Definition: AtlasFieldCache.cxx:86
Amg::Vector2D
Eigen::Matrix< double, 2, 1 > Vector2D
Definition: GeoPrimitives.h:48
Trk::oppositeMomentum
@ oppositeMomentum
Definition: PropDirection.h:21
InDet::SiTrackMaker_xk::m_heavyion
bool m_heavyion
Definition: SiTrackMaker_xk.h:177
SG::ReadHandle
Definition: StoreGate/StoreGate/ReadHandle.h:67
hist_file_dump.d
d
Definition: hist_file_dump.py:142
InDet::SiTrackMaker_xk::kTotalBremSeeds
@ kTotalBremSeeds
Definition: SiTrackMaker_xk.h:209
plotBeamSpotCompare.x2
x2
Definition: plotBeamSpotCompare.py:217
extractSporadic.c1
c1
Definition: extractSporadic.py:133
InDet::SiTrackMaker_xk::dumpevent
static MsgStream & dumpevent(SiTrackMakerEventData_xk &data, MsgStream &out)
Definition: SiTrackMaker_xk.cxx:479
InDet::SiTrackMaker_xk::kWrongInit
@ kWrongInit
Definition: SiTrackMaker_xk.h:211
InDet::SiTrackMaker_xk::m_useTrigTrackFollowingTool
BooleanProperty m_useTrigTrackFollowingTool
Definition: SiTrackMaker_xk.h:153
TRTCalib_cfilter.p1
p1
Definition: TRTCalib_cfilter.py:130
InDet::SiTrackMaker_xk::kSeedsWithTracksEta
@ kSeedsWithTracksEta
Definition: SiTrackMaker_xk.h:225
InDet::SiTrackMaker_xk::m_xi2max
DoubleProperty m_xi2max
Definition: SiTrackMaker_xk.h:156
InDet::SiTrackMaker_xk::m_seedsfilter
BooleanProperty m_seedsfilter
Definition: SiTrackMaker_xk.h:139
InDet::SiTrackMaker_xk::m_trackinfo
Trk::TrackInfo m_trackinfo
Definition: SiTrackMaker_xk.h:176
test_pyathena.pt
pt
Definition: test_pyathena.py:11
python.AthDsoLogger.out
out
Definition: AthDsoLogger.py:70
InDet::SiTrackMaker_xk::m_fieldModeEnum
Trk::MagneticFieldMode m_fieldModeEnum
Definition: SiTrackMaker_xk.h:178
dq_defect_virtual_defect_validation.d1
d1
Definition: dq_defect_virtual_defect_validation.py:79
InDet::SiTrackMaker_xk::m_useCaloSeeds
BooleanProperty m_useCaloSeeds
Definition: SiTrackMaker_xk.h:148
InDet::SiTrackMaker_xk::m_pTmin
DoubleProperty m_pTmin
Definition: SiTrackMaker_xk.h:159
InDet::SiTrackMaker_xk::m_trigInDetRoadPredictorTool
ToolHandle< ITrigInDetRoadPredictorTool > m_trigInDetRoadPredictorTool
Definition: SiTrackMaker_xk.h:125
Trk::TrackInfo::SiSpacePointsSeedMaker_LargeD0
@ SiSpacePointsSeedMaker_LargeD0
Large d0 for displaced vertex searches.
Definition: Tracking/TrkEvent/TrkTrack/TrkTrack/TrackInfo.h:259
Trk::RIO_OnTrack
Definition: RIO_OnTrack.h:70
InDet::TrackQualityCuts
Definition: ISiCombinatorialTrackFinder.h:122
Trk::alongMomentum
@ alongMomentum
Definition: PropDirection.h:20
ReadCellNoiseFromCoolCompare.s4
s4
Definition: ReadCellNoiseFromCoolCompare.py:381
python.TurnDataReader.dr
dr
Definition: TurnDataReader.py:111
python.RatesEmulationExample.lock
lock
Definition: RatesEmulationExample.py:148
read_hist_ntuple.t
t
Definition: read_hist_ntuple.py:5
InDet::SiTrackMaker_xk::globalPositions
bool globalPositions(const Trk::SpacePoint &s0, const Trk::SpacePoint &s1, const Trk::SpacePoint &s2, double *p0, double *p1, double *p2) const
Definition: SiTrackMaker_xk.cxx:1267
SG::VarHandleKey::key
const std::string & key() const
Return the StoreGate ID for the referenced object.
Definition: AthToolSupport/AsgDataHandles/Root/VarHandleKey.cxx:141
InDet::SiTrackMaker_xk::kindSeed
static int kindSeed(const std::vector< const Trk::SpacePoint * > &Sp)
Definition: SiTrackMaker_xk.cxx:1181
InDet::SiTrackMaker_xk::m_fieldmode
StringProperty m_fieldmode
Definition: SiTrackMaker_xk.h:140
SG::VarHandleKey::empty
bool empty() const
Test if the key is blank.
Definition: AthToolSupport/AsgDataHandles/Root/VarHandleKey.cxx:150
InDet::SiTrackMaker_xk::m_patternName
StringProperty m_patternName
Definition: SiTrackMaker_xk.h:141
keylayer_zslicemap.se
se
Definition: keylayer_zslicemap.py:194
InDet::SiTrackMaker_xk::m_useHClusSeed
BooleanProperty m_useHClusSeed
Definition: SiTrackMaker_xk.h:150
InDet::SiTrackMaker_xk::finalize
virtual StatusCode finalize() override
Definition: SiTrackMaker_xk.cxx:186
InDet::SiTrackMaker_xk::endEvent
virtual void endEvent(SiTrackMakerEventData_xk &data) const override
Definition: SiTrackMaker_xk.cxx:602
InDet::SiTrackMaker_xk::initialize
virtual StatusCode initialize() override
Definition: SiTrackMaker_xk.cxx:38
InDet::SiTrackMaker_xk::kUsedSeedsEta
@ kUsedSeedsEta
Definition: SiTrackMaker_xk.h:224
Trk::u
@ u
Enums for curvilinear frames.
Definition: ParamDefs.h:77
inf
TStreamerInfo * inf
Definition: liststreamerinfos.cxx:12
makeTRTBarrelCans.y1
tuple y1
Definition: makeTRTBarrelCans.py:15
InDet::SiTrackMaker_xk::kSeedsWithTracks
@ kSeedsWithTracks
Definition: SiTrackMaker_xk.h:220
InDet::SiTrackMaker_xk::detectorElementsSelection
static void detectorElementsSelection(SiTrackMakerEventData_xk &data, std::vector< const InDetDD::SiDetectorElement * > &DE)
Definition: SiTrackMaker_xk.cxx:1085
InDetDD::SiLocalPosition
Definition: SiLocalPosition.h:31
Trk::FastField
@ FastField
call the fast field access method of the FieldSvc
Definition: MagneticFieldMode.h:20
InDet::SiTrackMaker_xk::isNewTrack
static bool isNewTrack(SiTrackMakerEventData_xk &data, Trk::Track *Tr)
Definition: SiTrackMaker_xk.cxx:1224
hotSpotInTAG.c0
c0
Definition: hotSpotInTAG.py:191
InDet::SiTrackMaker_xk::m_ptbins
DoubleArrayProperty m_ptbins
Definition: SiTrackMaker_xk.h:171
TRTCalib_cfilter.p2
p2
Definition: TRTCalib_cfilter.py:131
InDet::SiTrackMaker_xk::m_useTrigInDetRoadPredictorTool
BooleanProperty m_useTrigInDetRoadPredictorTool
Definition: SiTrackMaker_xk.h:154
InDet::SiTrackMaker_xk::m_seedsegmentsWrite
BooleanProperty m_seedsegmentsWrite
Definition: SiTrackMaker_xk.h:152
A
H
#define H(x, y, z)
Definition: MD5.cxx:114
python.utils.AtlRunQueryDQUtils.p
p
Definition: AtlRunQueryDQUtils.py:209
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
InDet::SiCombinatorialTrackFinderData_xk::kNRapidityRanges
@ kNRapidityRanges
Definition: SiCombinatorialTrackFinderData_xk.h:52
InDet::SiTrackMaker_xk::setTrackQualityCuts
InDet::TrackQualityCuts setTrackQualityCuts(bool simpleTrack) const
Definition: SiTrackMaker_xk.cxx:1050
InDet::SiTrackMaker_xk::m_multitracks
BooleanProperty m_multitracks
Definition: SiTrackMaker_xk.h:146
InDet::SiTrackMaker_xk::kOutputTracks
@ kOutputTracks
Definition: SiTrackMaker_xk.h:216
lumiFormat.i
int i
Definition: lumiFormat.py:85
InDet::SiTrackMaker_xk::globalDirections
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...
Definition: SiTrackMaker_xk.cxx:1424
InDet::SiTrackMaker_xk::isHadCaloCompatible
bool isHadCaloCompatible(SiTrackMakerEventData_xk &data) const
Definition: SiTrackMaker_xk.cxx:1404
Trk::TrackInfo::SiSpacePointsSeedMaker_LowMomentum
@ SiSpacePointsSeedMaker_LowMomentum
Definition: Tracking/TrkEvent/TrkTrack/TrkTrack/TrackInfo.h:224
beamspotman.n
n
Definition: beamspotman.py:729
InDet::SiTrackMaker_xk::globalPosition
bool globalPosition(const Trk::SpacePoint &sp, const double *dir, double *p) const
This is a refinement of the global position for strip space-points.
Definition: SiTrackMaker_xk.cxx:1309
endmsg
#define endmsg
Definition: AnalysisConfig_Ntuple.cxx:63
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition: AthMsgStreamMacros.h:29
makeTRTBarrelCans.y2
tuple y2
Definition: makeTRTBarrelCans.py:18
InDet::SiTrackMaker_xk::m_phiWidth
DoubleProperty m_phiWidth
Definition: SiTrackMaker_xk.h:168
InDet::SiCombinatorialTrackFinderData_xk::kNStatEtaTypes
@ kNStatEtaTypes
Definition: SiCombinatorialTrackFinderData_xk.h:50
InDet::SiCombinatorialTrackFinderData_xk::kNStatAllTypes
@ kNStatAllTypes
Definition: SiCombinatorialTrackFinderData_xk.h:49
Amg::Transform3D
Eigen::Affine3d Transform3D
Definition: GeoPrimitives.h:46
InDet::SiTrackMaker_xk::m_roadmaker
ToolHandle< InDet::ISiDetElementsRoadMaker > m_roadmaker
Definition: SiTrackMaker_xk.h:122
InDet::SiTrackMaker_xk::m_useSSSfilter
BooleanProperty m_useSSSfilter
Definition: SiTrackMaker_xk.h:149
TileDCSDataPlotter.pr
pr
Definition: TileDCSDataPlotter.py:924
InDet::SiTrackMaker_xk::kNoTrack
@ kNoTrack
Definition: SiTrackMaker_xk.h:213
TRT::Track::d0
@ d0
Definition: InnerDetector/InDetCalibEvent/TRT_CalibData/TRT_CalibData/TrackInfo.h:62
python.BunchSpacingUtils.rn
rn
Definition: BunchSpacingUtils.py:85
InDet::SiTrackMaker_xk::m_caloCluster
SG::ReadHandleKey< ROIPhiRZContainer > m_caloCluster
Definition: SiTrackMaker_xk.h:133
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
Preparation.mode
mode
Definition: Preparation.py:107
Trk::TrackInfo::SiSpacePointsSeedMaker_Cosmic
@ SiSpacePointsSeedMaker_Cosmic
Entries allowing to distinguish different seed makers.
Definition: Tracking/TrkEvent/TrkTrack/TrkTrack/TrackInfo.h:222
InDet::SiTrackMaker_xk::m_useassoTool
BooleanProperty m_useassoTool
Definition: SiTrackMaker_xk.h:144
Trk::TrackInfo::SiSpacePointsSeedMaker_BeamGas
@ SiSpacePointsSeedMaker_BeamGas
Definition: Tracking/TrkEvent/TrkTrack/TrkTrack/TrackInfo.h:225
InDet::SiTrackMaker_xk::pTmin
double pTmin(double eta) const
Definition: SiTrackMaker_xk.cxx:1496
drawFromPickle.tan
tan
Definition: drawFromPickle.py:36
InDet::SiTrackMaker_xk::kNotNewTrack
@ kNotNewTrack
Definition: SiTrackMaker_xk.h:214
InDet::TrackQualityCuts::setDoubleCut
void setDoubleCut(const std::string &, double)
Definition: ISiCombinatorialTrackFinder.h:186
Trk::TrackInfo::BremFit
@ BremFit
A brem fit was performed on this track.
Definition: Tracking/TrkEvent/TrkTrack/TrkTrack/TrackInfo.h:78
Trk::ParametersBase
Definition: ParametersBase.h:55
InDet::SiTrackMaker_xk::kWrongRoad
@ kWrongRoad
Definition: SiTrackMaker_xk.h:212
InDet::SiTrackMaker_xk::m_caloHad
SG::ReadHandleKey< ROIPhiRZContainer > m_caloHad
Definition: SiTrackMaker_xk.h:134
SG::VarHandleKey::initialize
StatusCode initialize(bool used=true)
If this object is used as a property, then this should be called during the initialize phase.
Definition: AthToolSupport/AsgDataHandles/Root/VarHandleKey.cxx:103
xAOD::double
double
Definition: CompositeParticle_v1.cxx:159
TRT::Track::z0
@ z0
Definition: InnerDetector/InDetCalibEvent/TRT_CalibData/TRT_CalibData/TrackInfo.h:63
a0
double a0
Definition: globals.cxx:27
InDet::SiTrackMaker_xk::m_ITKGeometry
BooleanProperty m_ITKGeometry
Definition: SiTrackMaker_xk.h:151
InDet::SiTrackMaker_xk::m_dholesmax
IntegerProperty m_dholesmax
Definition: SiTrackMaker_xk.h:164
DataVector
Derived DataVector<T>.
Definition: DataVector.h:794
MagField::AtlasFieldCache::solenoidOn
bool solenoidOn() const
status of the magnets
Trk::FullField
@ FullField
Field is set to be realistic, but within a given Volume.
Definition: MagneticFieldMode.h:21
SG::ReadHandle::isValid
virtual bool isValid() override final
Can the handle be successfully dereferenced?
SiTrackMakerEventData_xk.h
SCT
Definition: SCT_ChipUtils.h:14
InDet::SiTrackMaker_xk::m_useBremModel
BooleanProperty m_useBremModel
Definition: SiTrackMaker_xk.h:147
beamspotman.dir
string dir
Definition: beamspotman.py:621
Trk::TrackInfo::SiSpacePointsSeedMaker_HeavyIon
@ SiSpacePointsSeedMaker_HeavyIon
Definition: Tracking/TrkEvent/TrkTrack/TrkTrack/TrackInfo.h:223
Trk::PrepRawData
Definition: PrepRawData.h:62
Trk::NoField
@ NoField
Field is set to 0., 0., 0.,.
Definition: MagneticFieldMode.h:18
InDetDD::SiDetectorElement::endsOfStrip
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...
Definition: SiDetectorElement.cxx:339
ReadCellNoiseFromCoolCompare.s3
s3
Definition: ReadCellNoiseFromCoolCompare.py:380
Trk::PlaneSurface::createUniqueTrackParameters
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.
Definition: PlaneSurface.cxx:143
RIO_OnTrack.h
InDet::SiTrackMaker_xk::kTwoClusters
@ kTwoClusters
Definition: SiTrackMaker_xk.h:210
VP1PartSpect::E
@ E
Definition: VP1PartSpectFlags.h:21
plotBeamSpotMon.b
b
Definition: plotBeamSpotMon.py:76
InDet::SiTrackMaker_xk::m_trackletPoints
IntegerProperty m_trackletPoints
Definition: SiTrackMaker_xk.h:167
InDet::SiTrackMaker_xk::getTracks
virtual std::list< Trk::Track * > getTracks(const EventContext &ctx, SiTrackMakerEventData_xk &data, const std::vector< const Trk::SpacePoint * > &Sp) const override
Definition: SiTrackMaker_xk.cxx:654
InDetDD::SiDetectorElement
Definition: SiDetectorElement.h:109
InDet::SiTrackMaker_xk::m_etabins
DoubleArrayProperty m_etabins
Definition: SiTrackMaker_xk.h:170
SG::CondHandleKey::initialize
StatusCode initialize(bool used=true)
InDet::SiTrackMaker_xk::isCaloCompatible
bool isCaloCompatible(SiTrackMakerEventData_xk &data) const
Definition: SiTrackMaker_xk.cxx:1388
InDet::SiTrackMaker_xk::kBremTracks
@ kBremTracks
Definition: SiTrackMaker_xk.h:218
Amg::Vector3D
Eigen::Matrix< double, 3, 1 > Vector3D
Definition: GeoPrimitives.h:47
Trk::MagneticFieldProperties::magneticFieldMode
MagneticFieldMode magneticFieldMode() const
Returns the MagneticFieldMode as specified.
Trk::RIO_OnTrack::prepRawData
virtual const Trk::PrepRawData * prepRawData() const =0
returns the PrepRawData (also known as RIO) object to which this RIO_OnTrack is associated.
InDet::SiTrackMaker_xk::m_etaWidth
DoubleProperty m_etaWidth
Definition: SiTrackMaker_xk.h:169
InDet::SiTrackMaker_xk::m_tracksfinder
ToolHandle< InDet::ISiCombinatorialTrackFinder > m_tracksfinder
Definition: SiTrackMaker_xk.h:123
ReadCellNoiseFromCoolCompare.v2
v2
Definition: ReadCellNoiseFromCoolCompare.py:364
CheckAppliedSFs.pu
pu
Definition: CheckAppliedSFs.py:311
Trk::Track::measurementsOnTrack
const DataVector< const MeasurementBase > * measurementsOnTrack() const
return a pointer to a vector of MeasurementBase (NOT including any that come from outliers).
Definition: Tracking/TrkEvent/TrkTrack/src/Track.cxx:178
python.PyAthena.v
v
Definition: PyAthena.py:154
Trk::TrackInfo::SiSPSeededFinder
@ SiSPSeededFinder
Tracks from SiSPSeedFinder.
Definition: Tracking/TrkEvent/TrkTrack/TrkTrack/TrackInfo.h:102
InDet::SiTrackMaker_xk::dump
MsgStream & dump(SiTrackMakerEventData_xk &data, MsgStream &out) const override
Definition: SiTrackMaker_xk.cxx:399
SiClusterContainer.h
a
TList * a
Definition: liststreamerinfos.cxx:10
python.CaloAddPedShiftConfig.int
int
Definition: CaloAddPedShiftConfig.py:45
InDet::SiTrackMaker_xk::newEvent
virtual void newEvent(const EventContext &ctx, SiTrackMakerEventData_xk &data, bool PIX, bool SCT) const override
Definition: SiTrackMaker_xk.cxx:498
lumiFormat.fill
fill
Definition: lumiFormat.py:104
Trk::TrackInfo::SiSpacePointsSeedMaker_ForwardTracks
@ SiSpacePointsSeedMaker_ForwardTracks
Entries allowing to distinguish different seed makers.
Definition: Tracking/TrkEvent/TrkTrack/TrkTrack/TrackInfo.h:241
python.Constants.INFO
int INFO
Definition: Control/AthenaCommon/python/Constants.py:15
Trk::PlaneSurface
Definition: PlaneSurface.h:64
InDet::SiTrackMaker_xk::kTotalInputSeeds
@ kTotalInputSeeds
Definition: SiTrackMaker_xk.h:206
InDet::SiTrackMaker_xk::newSeed
bool newSeed(SiTrackMakerEventData_xk &data, const std::vector< const Trk::SpacePoint * > &Sp) const
Definition: SiTrackMaker_xk.cxx:1112
InDet::SiTrackMaker_xk::getAtaPlane
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
Definition: SiTrackMaker_xk.cxx:880
InDet::SiTrackMaker_xk::kDESize
@ kDESize
Definition: SiTrackMaker_xk.h:219
dq_defect_virtual_defect_validation.d2
d2
Definition: dq_defect_virtual_defect_validation.py:81
InDet::SiTrackMaker_xk::m_beamSpotKey
SG::ReadCondHandleKey< InDet::BeamSpotData > m_beamSpotKey
Definition: SiTrackMaker_xk.h:131
DEBUG
#define DEBUG
Definition: page_access.h:11
F
#define F(x, y, z)
Definition: MD5.cxx:112
ReadCellNoiseFromCoolCompare.s2
s2
Definition: ReadCellNoiseFromCoolCompare.py:379
MagField::AtlasFieldCache
Local cache for magnetic field (based on MagFieldServices/AtlasFieldSvcTLS.h)
Definition: AtlasFieldCache.h:43
python.CaloCondTools.log
log
Definition: CaloCondTools.py:20
InDet::SiTrackMaker_xk::m_pTminBrem
DoubleProperty m_pTminBrem
Definition: SiTrackMaker_xk.h:160
S2
struct TBPatternUnitContext S2
InDet::SiTrackMaker_xk::newTrigEvent
virtual void newTrigEvent(const EventContext &ctx, SiTrackMakerEventData_xk &data, bool PIX, bool SCT) const override
Definition: SiTrackMaker_xk.cxx:559
python.SystemOfUnits.s
float s
Definition: SystemOfUnits.py:147
InDet::SiTrackMaker_xk::m_cosmicTrack
BooleanProperty m_cosmicTrack
Definition: SiTrackMaker_xk.h:145
InDet::SiTrackMakerEventData_xk
Definition: SiTrackMakerEventData_xk.h:43
InDet::SiTrackMaker_xk::m_counterMutex
std::mutex m_counterMutex
Definition: SiTrackMaker_xk.h:185
InDet::SiTrackMaker_xk::resetCounter
void resetCounter(std::array< std::array< T, M >, N > &a) const
helper for working with the stat arrays
Definition: SiTrackMaker_xk.h:265
xAOD::track
@ track
Definition: TrackingPrimitives.h:513
Trk::TrackInfo::setPatternRecognitionInfo
void setPatternRecognitionInfo(const TrackPatternRecoInfo &patternReco)
Method setting the pattern recognition algorithm.
egammaEnergyPositionAllSamples::e0
double e0(const xAOD::CaloCluster &cluster)
return the uncorrected cluster energy in pre-sampler
InDet::SiTrackMaker_xk::m_xi2maxlink
DoubleProperty m_xi2maxlink
Definition: SiTrackMaker_xk.h:158
Trk::MagneticFieldMode
MagneticFieldMode
Definition: MagneticFieldMode.h:17
InDet::SiTrackMaker_xk::rapidity
static int rapidity(const std::vector< const Trk::SpacePoint * > &Sp)
Definition: SiTrackMaker_xk.cxx:1193
InDet::SiTrackMaker_xk::m_indexToEnum
std::vector< statAllTypes > m_indexToEnum
Definition: SiTrackMaker_xk.h:228
InDet::SiTrackMaker_xk::m_trigInDetTrackFollowingTool
ToolHandle< ITrigInDetTrackFollowingTool > m_trigInDetTrackFollowingTool
Definition: SiTrackMaker_xk.h:124
SiTrackMaker_xk.h
Trk::Surface::transform
const Amg::Transform3D & transform() const
Returns HepGeom::Transform3D by reference.
dq_make_web_display.cl
cl
print [x.__class__ for x in toList(dqregion.getSubRegions()) ]
Definition: dq_make_web_display.py:25
InDet::SiCombinatorialTrackFinderData_xk::kNSeedTypes
@ kNSeedTypes
Definition: SiCombinatorialTrackFinderData_xk.h:51
python.AutoConfigFlags.msg
msg
Definition: AutoConfigFlags.py:7
InDet::SiTrackMaker_xk::kBremAttempt
@ kBremAttempt
Definition: SiTrackMaker_xk.h:215
InDet::SiCluster
Definition: InnerDetector/InDetRecEvent/InDetPrepRawData/InDetPrepRawData/SiCluster.h:40
InDet::SiTrackMaker_xk::SiTrackMaker_xk
SiTrackMaker_xk()=delete
InDet::SiTrackMaker_xk::clusterTrackMap
static void clusterTrackMap(SiTrackMakerEventData_xk &data, Trk::Track *Tr)
Definition: SiTrackMaker_xk.cxx:1208
Trk::TrackInfo::SiSpacePointsSeedMaker_ITkConversionTracks
@ SiSpacePointsSeedMaker_ITkConversionTracks
ITkConversion Track flag.
Definition: Tracking/TrkEvent/TrkTrack/TrkTrack/TrackInfo.h:262
InDet::SiTrackMaker_xk::kExtraTracks
@ kExtraTracks
Definition: SiTrackMaker_xk.h:217
TRTCalib_cfilter.p0
p0
Definition: TRTCalib_cfilter.py:129
fitman.k
k
Definition: fitman.py:528
python.SystemOfUnits.m
float m
Definition: SystemOfUnits.py:106
InDet::SiTrackMaker_xk::m_nholesmax
IntegerProperty m_nholesmax
Definition: SiTrackMaker_xk.h:163