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(), std::vector<double>(SiCombinatorialTrackFinderData_xk::kNRapidityRanges, 0.));
172  std::fill(m_seedsWithTracksEta.begin(), m_seedsWithTracksEta.end(), std::vector<double>(SiCombinatorialTrackFinderData_xk::kNRapidityRanges, 0.));
173 
177  return StatusCode::SUCCESS;
178 }
179 
181 // Finalize
183 
185 {
186  MsgStream &out = msg(MSG::INFO);
187  out << "::finalize() -- statistics:" <<std::endl;
189  out<<endmsg;
190  return AlgTool::finalize();
191 }
192 
194 // Dumps relevant information into the MsgStream
196 
197 MsgStream& InDet::SiTrackMaker_xk::dumpStatistics(MsgStream &out) const
198 {
199 
200  out<<"|----------------------|--------------|--------------|--------------|--------------|--------------|"
201  <<std::endl;
202  out<<"| Kind of seed | PPP | PPS | PSS | SSS | ALL |"
203  <<std::endl;
204  out<<"|----------------------|--------------|--------------|--------------|--------------|--------------|"
205  <<std::endl;
206  out<<"| Input seeds | "
207  <<std::setw(12)<<m_totalInputSeeds[0]<<" | "
208  <<std::setw(12)<<m_totalInputSeeds[1]<<" | "
209  <<std::setw(12)<<m_totalInputSeeds[2]<<" | "
210  <<std::setw(12)<<m_totalInputSeeds[3]<<" | "
211  <<std::setw(12)<<(m_totalInputSeeds[0]+m_totalInputSeeds[1]+m_totalInputSeeds[2]+m_totalInputSeeds[3])
212  <<" |"<<std::endl;
213 
214  out<<"| No track parameters | "
215  <<std::setw(12)<<m_totalNoTrackPar[0]<<" | "
216  <<std::setw(12)<<m_totalNoTrackPar[1]<<" | "
217  <<std::setw(12)<<m_totalNoTrackPar[2]<<" | "
218  <<std::setw(12)<<m_totalNoTrackPar[3]<<" | "
219  <<std::setw(12)<<(m_totalNoTrackPar[0]+m_totalNoTrackPar[1]+ m_totalNoTrackPar[2]+m_totalNoTrackPar[3])
220  <<" |"<<std::endl;
221 
222  out<<"| Used seeds | "
223  <<std::setw(12)<<m_totalUsedSeeds[0]<<" | "
224  <<std::setw(12)<<m_totalUsedSeeds[1]<<" | "
225  <<std::setw(12)<<m_totalUsedSeeds[2]<<" | "
226  <<std::setw(12)<<m_totalUsedSeeds[3]<<" | "
227  <<std::setw(12)<<(m_totalUsedSeeds[0]+m_totalUsedSeeds[1]+ m_totalUsedSeeds[2]+m_totalUsedSeeds[3])
228  <<" |"<<std::endl;
229 
230  out<<"| Used seeds brem | "
231  <<std::setw(12)<<m_totalBremSeeds[0]<<" | "
232  <<std::setw(12)<<m_totalBremSeeds[1]<<" | "
233  <<std::setw(12)<<m_totalBremSeeds[2]<<" | "
234  <<std::setw(12)<<m_totalBremSeeds[3]<<" | "
235  <<std::setw(12)<<(m_totalBremSeeds[0]+m_totalBremSeeds[1]+m_totalBremSeeds[2]+m_totalBremSeeds[3])
236  <<" |"<<std::endl;
237 
238  double tdetsize = 0.;
239  int goodseed = 0;
241  tdetsize+= m_deSize[i];
242  goodseed+= m_totalUsedSeeds[i];
243  if(m_totalUsedSeeds[i] > 0.) m_deSize[i]= m_deSize[i]/m_totalUsedSeeds[i];
244  }
245  if(goodseed > 0) tdetsize/=double(goodseed);
246 
247  out<<"| Det elements in road | "
248  <<std::setw(12)<<std::setprecision(4)<<m_deSize[0]<<" | "
249  <<std::setw(12)<<std::setprecision(5)<<m_deSize[1]<<" | "
250  <<std::setw(12)<<std::setprecision(5)<<m_deSize[2]<<" | "
251  <<std::setw(12)<<std::setprecision(5)<<m_deSize[3]<<" | "
252  <<std::setw(12)<<std::setprecision(5)<<tdetsize
253  <<" |"<<std::endl;
254 
255 
256  out<<"| Two clusters on DE | "
257  <<std::setw(12)<<m_twoClusters[0]<<" | "
258  <<std::setw(12)<<m_twoClusters[1]<<" | "
259  <<std::setw(12)<<m_twoClusters[2]<<" | "
260  <<std::setw(12)<<m_twoClusters[3]<<" | "
261  <<std::setw(12)<<(m_twoClusters[0]+m_twoClusters[1]+m_twoClusters[2]+m_twoClusters[3])
262  <<" |"<<std::endl;
263 
264  out<<"| Wrong DE road | "
265  <<std::setw(12)<<m_wrongRoad[0]<<" | "
266  <<std::setw(12)<<m_wrongRoad[1]<<" | "
267  <<std::setw(12)<<m_wrongRoad[2]<<" | "
268  <<std::setw(12)<<m_wrongRoad[3]<<" | "
269  <<std::setw(12)<<(m_wrongRoad[0]+m_wrongRoad[1]+m_wrongRoad[2]+m_wrongRoad[3])
270  <<" |"<<std::endl;
271 
272  out<<"| Wrong initialization | "
273  <<std::setw(12)<<m_wrongInit[0]<<" | "
274  <<std::setw(12)<<m_wrongInit[1]<<" | "
275  <<std::setw(12)<<m_wrongInit[2]<<" | "
276  <<std::setw(12)<<m_wrongInit[3]<<" | "
277  <<std::setw(12)<<(m_wrongInit[0]+m_wrongInit[1]+m_wrongInit[2]+m_wrongInit[3])
278  <<" |"<<std::endl;
279 
280  out<<"| Can not find track | "
281  <<std::setw(12)<<m_noTrack[0]<<" | "
282  <<std::setw(12)<<m_noTrack[1]<<" | "
283  <<std::setw(12)<<m_noTrack[2]<<" | "
284  <<std::setw(12)<<m_noTrack[3]<<" | "
285  <<std::setw(12)<<(m_noTrack[0]+m_noTrack[1]+m_noTrack[2]+m_noTrack[3])
286  <<" |"<<std::endl;
287 
288  out<<"| It is not new track | "
289  <<std::setw(12)<<m_notNewTrack[0]<<" | "
290  <<std::setw(12)<<m_notNewTrack[1]<<" | "
291  <<std::setw(12)<<m_notNewTrack[2]<<" | "
292  <<std::setw(12)<<m_notNewTrack[3]<<" | "
293  <<std::setw(12)<<(m_notNewTrack[0]+m_notNewTrack[1]+m_notNewTrack[2]+m_notNewTrack[3])
294  <<" |"<<std::endl;
295 
296  out<<"| Attempts brem model | "
297  <<std::setw(12)<<m_bremAttempt[0]<<" | "
298  <<std::setw(12)<<m_bremAttempt[1]<<" | "
299  <<std::setw(12)<<m_bremAttempt[2]<<" | "
300  <<std::setw(12)<<m_bremAttempt[3]<<" | "
301  <<std::setw(12)<<(m_bremAttempt[0]+m_bremAttempt[1]+m_bremAttempt[2]+m_bremAttempt[3])
302  <<" |"<<std::endl;
303 
304  out<<"| Output tracks | "
305  <<std::setw(12)<<m_outputTracks[0]<<" | "
306  <<std::setw(12)<<m_outputTracks[1]<<" | "
307  <<std::setw(12)<<m_outputTracks[2]<<" | "
308  <<std::setw(12)<<m_outputTracks[3]<<" | "
309  <<std::setw(12)<<(m_outputTracks[0]+m_outputTracks[1]+m_outputTracks[2]+m_outputTracks[3])
310  <<" |"<<std::endl;
311 
312  out<<"| Output extra tracks | "
313  <<std::setw(12)<<m_extraTracks[0]<<" | "
314  <<std::setw(12)<<m_extraTracks[1]<<" | "
315  <<std::setw(12)<<m_extraTracks[2]<<" | "
316  <<std::setw(12)<<m_extraTracks[3]<<" | "
317  <<std::setw(12)<<(m_extraTracks[0]+m_extraTracks[1]+m_extraTracks[2]+m_extraTracks[3])
318  <<" |"<<std::endl;
319 
320  out<<"| Output tracks brem | "
321  <<std::setw(12)<<m_bremTracks[0]<<" | "
322  <<std::setw(12)<<m_bremTracks[1]<<" | "
323  <<std::setw(12)<<m_bremTracks[2]<<" | "
324  <<std::setw(12)<<m_bremTracks[3]<<" | "
325  <<std::setw(12)<<(m_bremTracks[0]+m_bremTracks[1]+m_bremTracks[2]+m_bremTracks[3])
326  <<" |"<<std::endl;
327 
328  out<<"|----------------------|--------------|--------------|--------------|--------------|--------------|--------------|"
329  <<std::endl;
330  out<<"| Seeds with track | "
331  <<std::setw(12)<<m_seedsWithTrack[0]<<" | "
332  <<std::setw(12)<<m_seedsWithTrack[1]<<" | "
333  <<std::setw(12)<<m_seedsWithTrack[2]<<" | "
334  <<std::setw(12)<<m_seedsWithTrack[3]<<" | "
335  <<std::setw(12)<<(m_seedsWithTrack[0]+m_seedsWithTrack[1]+m_seedsWithTrack[2]+m_seedsWithTrack[3])
336  <<" | Number seeds |"<<std::endl;
337  out<<"|----------------------|--------------|--------------|--------------|--------------|--------------|--------------|"
338  <<std::endl;
339 
340  std::vector<std::pair<int,std::string>> rapidityTablePrint;
341  //Defining the range values to be printed
342  rapidityTablePrint.emplace_back(0,std::string("| Track/Used 0.0-0.5 | "));
343  rapidityTablePrint.emplace_back(1,std::string("| 0.5-1.0 | "));
344  rapidityTablePrint.emplace_back(2,std::string("| 1.0-1.5 | "));
345  rapidityTablePrint.emplace_back(3,std::string("| 1.5-2.0 | "));
346  rapidityTablePrint.emplace_back(4,std::string("| 2.0-2.5 | "));
347  rapidityTablePrint.emplace_back(5,std::string("| 2.5-3.0 | "));
348  rapidityTablePrint.emplace_back(6,std::string("| 3.0-3.5 | "));
349  rapidityTablePrint.emplace_back(7,std::string("| 3.5-4.0 | "));
350 
351 
353 
354  std::array<double,SiCombinatorialTrackFinderData_xk::kNSeedTypes+1> pu{};
355  pu.fill(0);
356 
357  double totalUsedSeedsEta = 0.;
358 
359  for(int j = 0; j != SiCombinatorialTrackFinderData_xk::kNSeedTypes; ++j){
360 
361  if(m_usedSeedsEta[j][i]!=0.) pu[j]=m_seedsWithTracksEta[j][i]/m_usedSeedsEta[j][i];
362  totalUsedSeedsEta += m_usedSeedsEta[j][i];
363 
364  }
365 
366  if(totalUsedSeedsEta!=0.) {
367 
368  for(int j = 0; j != SiCombinatorialTrackFinderData_xk::kNSeedTypes; ++j){
369 
370  pu[SiCombinatorialTrackFinderData_xk::kNSeedTypes] += m_seedsWithTracksEta[j][i];
371 
372  }
374  }
375 
376  out<<rapidityTablePrint.at(i).second;
377  out<<std::setw(12)<<std::setprecision(4)<<pu[0]<<" | "
378  <<std::setw(12)<<std::setprecision(4)<<pu[1]<<" | "
379  <<std::setw(12)<<std::setprecision(4)<<pu[2]<<" | "
380  <<std::setw(12)<<std::setprecision(4)<<pu[3]<<" | "
381  <<std::setw(12)<<std::setprecision(4)<<pu[4]<<" | "
382  <<std::setw(12)<<static_cast<int>(m_seedsWithTracksEta[0][i])+static_cast<int>(m_seedsWithTracksEta[1][i])+static_cast<int>(m_seedsWithTracksEta[2][i])+static_cast<int>(m_seedsWithTracksEta[3][i])
383  <<" |"<<std::endl;
384  }
385 
386 
387  out<<"|----------------------|--------------|--------------|--------------|--------------|--------------|--------------|"
388  <<std::endl;
389 
390  return out;
391 
392 }
393 
395 {
396  out<<std::endl;
397  if (data.nprint()) return dumpevent(data, out);
398  return dumpconditions(out);
399 }
400 
402 // Dumps conditions information into the MsgStream
404 
405 MsgStream& InDet::SiTrackMaker_xk::dumpconditions(MsgStream& out) const
406 {
407 
408  int n = 62-m_tracksfinder.type().size();
409  std::string s4; for (int i=0; i<n; ++i) s4.append(" "); s4.append("|");
410 
411  std::string fieldmode[9] ={"NoField" ,"ConstantField","SolenoidalField",
412  "ToroidalField" ,"Grid3DField" ,"RealisticField" ,
413  "UndefinedField","AthenaField" , "?????" };
414 
416 
417  // Get AtlasFieldCache
419  const AtlasFieldCacheCondObj* fieldCondObj{*readHandle};
420  if (fieldCondObj) {
421  MagField::AtlasFieldCache fieldCache;
422  fieldCondObj->getInitializedCache(fieldCache);
423  if (!fieldCache.solenoidOn()) fieldModeEnum = Trk::NoField;
424  }
425 
426  Trk::MagneticFieldProperties fieldprop(fieldModeEnum);
427  int mode = fieldprop.magneticFieldMode();
428  if (mode<0 || mode>8 ) mode = 8;
429 
430  n = 62-fieldmode[mode].size();
431  std::string s3; for (int i=0; i<n; ++i) s3.append(" "); s3.append("|");
432 
433  n = 62-m_roadmaker.type().size();
434  std::string s6; for (int i=0; i<n; ++i) s6.append(" "); s6.append("|");
435 
436  out<<"|----------------------------------------------------------------------"
437  <<"-------------------|"
438  <<std::endl;
439  out<<"| Tool for road builder | "<<m_roadmaker .type() <<s6<<std::endl;
440  out<<"} Tool for track finding | "<<m_tracksfinder.type()<<s4<<std::endl;
441  out<<"| Use association tool ? | "
442  <<std::setw(12)<<m_useassoTool
443  << std::endl;
444  out<<"| Magnetic field mode | "<<fieldmode[mode] <<s3<<std::endl;
445  out<<"| Use seeds filter ? | "<<std::setw(12)<<m_seedsfilter
446  <<" |"<<std::endl;
447  out<<"| Min pT of track (MeV) | "<<std::setw(12)<<std::setprecision(5)<<m_pTmin
448  <<" |"<<std::endl;
449  out<<"| Max Xi2 for cluster | "<<std::setw(12)<<std::setprecision(5)<<m_xi2max
450  <<" |"<<std::endl;
451  out<<"| Max Xi2 for outlayer | "<<std::setw(12)<<std::setprecision(5)<<m_xi2maxNoAdd
452  <<" |"<<std::endl;
453  out<<"| Max Xi2 for link | "<<std::setw(12)<<std::setprecision(5)<<m_xi2maxlink
454  <<" |"<<std::endl;
455  out<<"| Min number of clusters | "<<std::setw(12)<<m_nclusmin
456  <<" |"<<std::endl;
457  out<<"| Min number of wclusters | "<<std::setw(12)<<m_nwclusmin
458  <<" |"<<std::endl;
459  out<<"| Max number holes | "<<std::setw(12)<<m_nholesmax
460  <<" |"<<std::endl;
461  out<<"| Max holes gap | "<<std::setw(12)<<m_dholesmax
462  <<" |"<<std::endl;
463  out<<"|----------------------------------------------------------------------"
464  <<"-------------------|"
465  <<std::endl;
466  return out;
467 }
468 
469 
471 // Dumps event information into the MsgStream
473 
475 {
476  out<<"|---------------------------------------------------------------------|"
477  <<std::endl;
478  out<<"| Number input seeds | "<<std::setw(12)<<data.inputseeds()
479  <<" |"<<std::endl;
480  out<<"| Number good seeds | "<<std::setw(12)<<data.goodseeds()
481  <<" |"<<std::endl;
482  out<<"| Number output tracks | "<<std::setw(12)<<data.findtracks()
483  <<" |"<<std::endl;
484  out<<"|---------------------------------------------------------------------|"
485  <<std::endl;
486  return out;
487 }
488 
490 // Initiate track finding tool for new event
492 
493 void InDet::SiTrackMaker_xk::newEvent(const EventContext& ctx, SiTrackMakerEventData_xk& data, bool PIX, bool SCT) const
494 {
495 
497  data.xybeam()[0] = 0.;
498  data.xybeam()[1] = 0.;
499  if (not m_beamSpotKey.empty()) {
501  if (beamSpotHandle.isValid()) {
502  data.xybeam()[0] = beamSpotHandle->beamPos()[0];
503  data.xybeam()[1] = beamSpotHandle->beamPos()[1];
504  }
505  }
507  data.pix() = PIX and m_usePix;
508  data.sct() = SCT and m_useSct;
509 
511  InDet::TrackQualityCuts trackquality = setTrackQualityCuts(false);
512 
514  m_tracksfinder->newEvent(ctx, data.combinatorialData(), m_trackinfo, trackquality);
515 
519  if (m_seedsfilter) data.clusterTrack().clear();
520 
523  data.inputseeds() = 0;
524  data.goodseeds() = 0;
525  data.findtracks() = 0;
526  resetCounter(data.summaryStatAll());
527  resetCounter(data.summaryStatUsedInTrack());
528 
532  if (!calo_rois.isValid()) {
533  ATH_MSG_FATAL("Failed to get EM Calo cluster collection " << m_caloCluster );
534  }
535  data.setCaloClusterROIEM(*calo_rois);
536  }
537 
539  if (!m_useSSSfilter && m_useHClusSeed) {
541  if (!calo_rois.isValid()) {
542  ATH_MSG_FATAL("Failed to get Had Calo cluster collection " << m_caloHad );
543  }
544  data.setCaloClusterROIHad(*calo_rois);
545  }
547  if (m_seedsegmentsWrite) m_seedtrack->newEvent(data.conversionData(), m_trackinfo, m_patternName);
548 }
549 
551 // Initiate track finding tool for new event
553 
554 void InDet::SiTrackMaker_xk::newTrigEvent(const EventContext& ctx, SiTrackMakerEventData_xk& data, bool PIX, bool SCT) const
555 {
556  data.pix() = PIX && m_usePix;
557  data.sct() = SCT && m_useSct;
558  bool simpleTrack = true;
559 
560  InDet::TrackQualityCuts trackquality = setTrackQualityCuts(simpleTrack);
561 
562  // New event for track finder tool
563  //
564  m_tracksfinder->newEvent(ctx, data.combinatorialData(), m_trackinfo, trackquality);
565 
566  // Erase cluster to track association
567  //
568  if (m_seedsfilter) data.clusterTrack().clear();
569 
570  // Erase statistic information
571  //
572  data.inputseeds() = 0;
573  data.goodseeds() = 0;
574  data.findtracks() = 0;
575  for(int i=0; i!=SiCombinatorialTrackFinderData_xk::kNStatAllTypes; ++i) { for(int k = 0; k!=SiCombinatorialTrackFinderData_xk::kNSeedTypes; ++k) data.summaryStatAll()[i][k] = 0.; }
576  for(int i=0; i!=SiCombinatorialTrackFinderData_xk::kNStatEtaTypes; ++i) { for(int k = 0; k!=SiCombinatorialTrackFinderData_xk::kNSeedTypes; ++k) { for(int r=0; r!=SiCombinatorialTrackFinderData_xk::kNRapidityRanges; ++r) data.summaryStatUsedInTrack()[i][k][r] = 0.; } }
577 
578  // Add possibility to write seed segment information
579  if (m_seedsegmentsWrite) m_seedtrack->newEvent(data.conversionData(), m_trackinfo, m_patternName);
580 
581 }
582 
584 // Finalize track finding tool for given event
586 
588 {
590  m_tracksfinder->endEvent(data.combinatorialData());
591 
593  data.clusterTrack().clear();
594 
595  // end event for seed to track tool
596  if (m_seedsegmentsWrite) m_seedtrack->endEvent(data.conversionData());
597 
598  // fill statistics
599  {
600  std::lock_guard<std::mutex> lock(m_counterMutex);
601 
602  for(int K = 0; K != SiCombinatorialTrackFinderData_xk::kNSeedTypes; ++K) {
603  for(int r = 0; r != 8; ++r) {
604  m_usedSeedsEta[K][r] += data.summaryStatUsedInTrack()[kUsedSeedsEta][K][r];
605  m_seedsWithTracksEta[K][r] += data.summaryStatUsedInTrack()[kSeedsWithTracksEta][K][r];
606  }
607  }
608  }
609  for (int K = 0; K != SiCombinatorialTrackFinderData_xk::kNSeedTypes; ++K) {
610  m_totalInputSeeds[K] += data.summaryStatAll()[kTotalInputSeeds][K];
611  m_totalUsedSeeds[K] = m_totalUsedSeeds[K] + data.summaryStatAll()[kTotalUsedSeeds][K];
612  m_totalNoTrackPar[K] += data.summaryStatAll()[kTotalNoTrackPar][K];
613  m_totalBremSeeds[K] += data.summaryStatAll()[kTotalBremSeeds][K];
614  m_twoClusters[K] += data.summaryStatAll()[kTwoClusters][K];
615  m_wrongRoad[K] += data.summaryStatAll()[kWrongRoad][K];
616  m_wrongInit[K] += data.summaryStatAll()[kWrongInit][K];
617  m_noTrack[K] += data.summaryStatAll()[kNoTrack][K];
618  m_notNewTrack[K] += data.summaryStatAll()[kNotNewTrack][K];
619  m_bremAttempt[K] += data.summaryStatAll()[kBremAttempt][K];
620  m_outputTracks[K] += data.summaryStatAll()[kOutputTracks][K];
621  m_extraTracks[K] += data.summaryStatAll()[kExtraTracks][K];
622  m_bremTracks[K] += data.summaryStatAll()[kBremTracks][K];
623  m_seedsWithTrack[K] += data.summaryStatAll()[kSeedsWithTracks][K];
624  m_deSize[K] = m_deSize[K] + data.summaryStatAll()[kDESize][K];
625  }
626  // Print event information
627  //
628  if (msgLevel()<=0) {
629  data.nprint() = 1;
630  dump(data, msg(MSG::DEBUG));
631  }
632 }
633 
635 // Main method for track finding using space points
637 
638 std::list<Trk::Track*> InDet::SiTrackMaker_xk::getTracks
639 (const EventContext& ctx, SiTrackMakerEventData_xk& data, const std::vector<const Trk::SpacePoint*>& Sp) const
640 {
642  ++data.inputseeds();
643 
645  int K = kindSeed(Sp);
647  int r = rapidity(Sp);
648 
650  ++data.summaryStatAll()[kTotalInputSeeds][K];
651 
653  std::list<Trk::Track*> tracks;
655  if (!data.pix() && !data.sct()) return tracks;
656 
658  bool isGoodSeed{true};
661  if (m_seedsfilter) isGoodSeed=newSeed(data, Sp);
662  if (!m_seedsegmentsWrite && !isGoodSeed) {
663  return tracks;
664  }
665 
666  // Get AtlasFieldCache
667  MagField::AtlasFieldCache fieldCache;
668 
671  const AtlasFieldCacheCondObj* fieldCondObj{*readHandle};
672  if (fieldCondObj == nullptr) {
673  ATH_MSG_ERROR("InDet::SiTrackMaker_xk::getTracks: Failed to retrieve AtlasFieldCacheCondObj with key " << m_fieldCondObjInputKey.key());
674  return tracks;
675  }
676  fieldCondObj->getInitializedCache (fieldCache);
677 
679  std::unique_ptr<Trk::TrackParameters> Tp = nullptr;
680  Tp = getAtaPlane(fieldCache, data, false, Sp, ctx);
681  if (m_seedsegmentsWrite && Tp) {
682  m_seedtrack->executeSiSPSeedSegments(data.conversionData(), Tp.get(), isGoodSeed, Sp);
683  }
684 
685  if (m_seedsegmentsWrite && !isGoodSeed) {
686  return tracks;
687  }
691  if (!Tp) {
692  ++data.summaryStatAll()[kTotalNoTrackPar][K];
693  return tracks;
694  }
695 
697  ++data.goodseeds();
698 
703 
704  std::vector<const InDetDD::SiDetectorElement*> DE;
705 
707  if (!m_cosmicTrack) m_roadmaker->detElementsRoad(ctx, fieldCache, *Tp,Trk::alongMomentum, DE, data.roadMakerData());
708  else m_roadmaker->detElementsRoad(ctx, fieldCache, *Tp,Trk::oppositeMomentum,DE, data.roadMakerData());
709  }
710  else {
711  int road_length = m_trigInDetRoadPredictorTool->getRoad(Sp, DE, ctx);
712  if(road_length == 0) return tracks;
713  }
714 
716  if (!data.pix() || !data.sct()) detectorElementsSelection(data, DE);
717 
720  if ( static_cast<int>(DE.size()) < m_nclusmin) {
721  return tracks;
722  }
723 
725  data.summaryStatAll()[kDESize][K] += double(DE.size());
726  ++data.summaryStatAll()[kTotalUsedSeeds][K];
727 
729  std::vector<Amg::Vector3D> Gp;
730 
732  ++data.summaryStatUsedInTrack()[kUsedSeedsEta][K][r];
733 
736  if (!m_useBremModel) {
738  Trk::Track* newTrack = m_trigInDetTrackFollowingTool->getTrack(Sp, DE, ctx);
739  if(newTrack != nullptr) tracks.push_back(newTrack);
740  }
741  else {
742  tracks = m_tracksfinder->getTracks(data.combinatorialData(), *Tp, Sp, Gp, DE, data.clusterTrack(),ctx);
743  }
744  } else if (!m_useCaloSeeds) {
745  ++data.summaryStatAll()[kTotalBremSeeds][K];
746  tracks = m_tracksfinder->getTracksWithBrem(data.combinatorialData(), *Tp, Sp, Gp, DE, data.clusterTrack(), false,ctx);
747  }
749  else if (isCaloCompatible(data)) {
750 
751  ++data.summaryStatAll()[kTotalBremSeeds][K];
752  tracks = m_tracksfinder->getTracksWithBrem(data.combinatorialData(), *Tp, Sp, Gp, DE, data.clusterTrack(), true,ctx);
753  } else {
754  tracks = m_tracksfinder->getTracks (data.combinatorialData(), *Tp, Sp, Gp, DE, data.clusterTrack(),ctx);
755  }
756 
758  std::array<bool,SiCombinatorialTrackFinderData_xk::kNCombStats> inf{0,0,0,0,0,0};
759  m_tracksfinder->fillStatistic(data.combinatorialData(),inf);
760  for (size_t p =0; p<inf.size(); ++p){
761  if(inf[p]) ++data.summaryStatAll()[m_indexToEnum[p]][K];
762  }
763 
766  if (m_seedsfilter) {
767  std::list<Trk::Track*>::iterator t = tracks.begin();
768  while (t!=tracks.end()) {
770  if (!isNewTrack(data, *t)) {
771  delete (*t);
772  tracks.erase(t++);
773  } else {
774  if((*t)->info().trackProperties(Trk::TrackInfo::BremFit)) ++data.summaryStatAll()[kBremTracks][K];
775  clusterTrackMap(data, *t++);
776  }
777  }
778  }
779  data.findtracks() += tracks.size();
780 
781  if(!tracks.empty()) {
782  ++data.summaryStatAll()[kSeedsWithTracks][K];
783  ++data.summaryStatUsedInTrack()[kSeedsWithTracksEta][K][r];
784  data.summaryStatAll()[kOutputTracks][K] += tracks.size();
785  data.summaryStatAll()[kExtraTracks][K] += (tracks.size()-1);
786  }
787 
788  return tracks;
789 
790 }
791 
793 // Main method for track finding using space points
795 
796 std::list<Trk::Track*> InDet::SiTrackMaker_xk::getTracks
797 (const EventContext& ctx, SiTrackMakerEventData_xk& data, const Trk::TrackParameters& Tp, const std::vector<Amg::Vector3D>& Gp) const
798 {
799  ++data.inputseeds();
800  std::list<Trk::Track*> tracks;
801  if (!data.pix() && !data.sct()) return tracks;
802 
803  ++data.goodseeds();
804 
805  // Get AtlasFieldCache
806  MagField::AtlasFieldCache fieldCache;
807 
809  const AtlasFieldCacheCondObj* fieldCondObj{*readHandle};
810  if (fieldCondObj == nullptr) {
811  ATH_MSG_ERROR("InDet::SiTrackMaker_xk::getTracks: Failed to retrieve AtlasFieldCacheCondObj with key " << m_fieldCondObjInputKey.key());
812  return tracks;
813  }
814  fieldCondObj->getInitializedCache (fieldCache);
815 
816  // Get detector elements road
817  //
818  std::vector<const InDetDD::SiDetectorElement*> DE;
819  if (!m_cosmicTrack) m_roadmaker->detElementsRoad(ctx, fieldCache, Tp,Trk::alongMomentum, DE, data.roadMakerData());
820  else m_roadmaker->detElementsRoad(ctx, fieldCache, Tp,Trk::oppositeMomentum,DE, data.roadMakerData());
821 
822  if (!data.pix() || !data.sct()) detectorElementsSelection(data, DE);
823 
824  if (static_cast<int>(DE.size()) < m_nclusmin) return tracks;
825 
826  // Find possible list of tracks with trigger track parameters or global positions
827  //
828  std::vector<const Trk::SpacePoint*> Sp;
829 
830  if (!m_useBremModel) {
831  tracks = m_tracksfinder->getTracks (data.combinatorialData(), Tp, Sp, Gp, DE, data.clusterTrack(),ctx);
832  } else if (!m_useCaloSeeds) {
833  tracks = m_tracksfinder->getTracksWithBrem(data.combinatorialData(), Tp, Sp, Gp, DE, data.clusterTrack(), false,ctx);
834  } else if (isCaloCompatible(data)) {
835  tracks = m_tracksfinder->getTracksWithBrem(data.combinatorialData(), Tp, Sp, Gp, DE, data.clusterTrack(), true,ctx);
836  } else {
837  tracks = m_tracksfinder->getTracks (data.combinatorialData(), Tp, Sp, Gp, DE, data.clusterTrack(),ctx);
838  }
839 
840  if (m_seedsfilter) {
841  std::list<Trk::Track*>::iterator t = tracks.begin();
842  while (t!=tracks.end()) {
843  if (!isNewTrack(data, *t)) {
844  delete (*t);
845  tracks.erase(t++);
846  } else {
847  clusterTrackMap(data, *t++);
848  }
849  }
850  }
851  data.findtracks() += tracks.size();
852  return tracks;
853 }
854 
856 // Space point seed parameters extimation
858 
859 std::unique_ptr<Trk::TrackParameters> InDet::SiTrackMaker_xk::getAtaPlane
860 (MagField::AtlasFieldCache& fieldCache,
862  bool sss,
863  const std::vector<const Trk::SpacePoint*>& theSeed,
864  const EventContext& ctx) const
865 {
867  if (theSeed.size() < 3) return nullptr;
868 
869  std::vector<const Trk::SpacePoint*> SP;
870 
872  if (m_trackletPoints == 1) {
873  unsigned int middleIdx = theSeed.size() == 3 ? 1 : theSeed.size()/2;
874  SP = {theSeed[0], theSeed[middleIdx], theSeed.back()};
875  }
876  // for tracklets we select last 3 spacepoints of the seed
877  else if (m_trackletPoints == 2) {
878  SP = {theSeed[theSeed.size() - 3], theSeed[theSeed.size() - 2], theSeed.back()};
879  }
881  else if (m_trackletPoints == 3) {
882  unsigned int middleIdx = theSeed.size() == 3 ? 0 : theSeed.size()/2;
883  unsigned int quarterIdx = theSeed.size() == 3 ? 1 : 3*theSeed.size()/4;
884  SP = {theSeed[middleIdx], theSeed[quarterIdx], theSeed.back()};
885  }
887  else if (m_trackletPoints == 4) {
888  SP = {theSeed[0], theSeed[theSeed.size() - 2], theSeed.back()};
889  }
891  else if (m_trackletPoints == 5) {
892  SP = {theSeed[0], theSeed[1], theSeed[2]};
893  }
894 
895 
897  const Trk::PrepRawData* cl = SP[0]->clusterList().first;
898  if (!cl) return nullptr;
900  const Trk::PlaneSurface* pla =
901  static_cast<const Trk::PlaneSurface*>(&cl->detectorElement()->surface());
902  if (!pla) return nullptr;
903 
906  double p0[3],p1[3],p2[3];
907  if (!globalPositions(*(SP[0]),*(SP[1]),*(SP[2]),p0,p1,p2)) return nullptr;
908 
910  double x0 = p0[0] ;
911  double y0 = p0[1] ;
912  double z0 = p0[2] ;
913  double x1 = p1[0]-x0;
914  double y1 = p1[1]-y0;
915  double x2 = p2[0]-x0;
916  double y2 = p2[1]-y0;
917  double z2 = p2[2]-z0;
918 
921  double u1 = 1./sqrt(x1*x1+y1*y1) ;
923  double rn = x2*x2+y2*y2 ;
924  double r2 = 1./rn ;
926  double a = x1*u1 ;
927  double b = y1*u1 ;
929  double u2 = (a*x2+b*y2)*r2 ;
931  double v2 = (a*y2-b*x2)*r2 ;
934  double A = v2/(u2-u1) ;
935  double B = 2.*(v2-A*u2) ;
936  double C = B/sqrt(1.+A*A) ;
937  double T = z2*sqrt(r2)/(1.+.04*C*C*rn);
938  if(m_ITKGeometry){
939  T = std::abs(C) > 1.e-6 ? (z2*C)/asin(C*sqrt(rn)) : z2/sqrt(rn);
940  }
941 
942  const Amg::Transform3D& Tp = pla->transform();
943 
945  double Ax[3] = {Tp(0,0),Tp(1,0),Tp(2,0)};
947  double Ay[3] = {Tp(0,1),Tp(1,1),Tp(2,1)};
949  double D [3] = {Tp(0,3),Tp(1,3),Tp(2,3)};
951  double d[3] = {x0-D[0],y0-D[1],z0-D[2]};
953  data.par()[0] = d[0]*Ax[0]+d[1]*Ax[1]+d[2]*Ax[2];
954  data.par()[1] = d[0]*Ay[0]+d[1]*Ay[1]+d[2]*Ay[2];
955 
958  if (!fieldCache.solenoidOn()) fieldModeEnum = Trk::NoField;
959 
960  Trk::MagneticFieldProperties fieldprop(fieldModeEnum);
962  if (fieldprop.magneticFieldMode() > 0) {
963 
965  double H[3],gP[3] ={x0,y0,z0};
966  fieldCache.getFieldZR(gP, H);
967 
970  if (fabs(H[2])>.0001) {
972  data.par()[2] = atan2(b+a*A,a-b*A);
974  data.par()[3] = atan2(1.,T) ;
976  data.par()[5] = -C/(300.*H[2]) ;
977  } else {
980  T = z2*sqrt(r2) ;
981  data.par()[2] = atan2(y2,x2);
982  data.par()[3] = atan2(1.,T) ;
983  data.par()[5] = m_ITKGeometry ? 0.9/m_pTmin : 1./m_pTmin ;
984  }
985  }
987  else {
988  T = z2*sqrt(r2) ;
989  data.par()[2] = atan2(y2,x2);
990  data.par()[3] = atan2(1.,T) ;
991  data.par()[5] = m_ITKGeometry ? 0.9/m_pTmin : 1./m_pTmin ;
992  }
993 
994  double pTm = pTmin(SP[0]->eta()); // all spacepoints should have approx. same eta
995 
997  if (m_ITKGeometry){
998  if(std::abs(data.par()[5])*pTm > 1) return nullptr;
999  }
1000  else if(std::abs(data.par()[5])*m_pTmin > 1.1) return nullptr;
1001 
1003  data.par()[4] = data.par()[5]/sqrt(1.+T*T);
1004  data.par()[6] = x0 ;
1005  data.par()[7] = y0 ;
1006  data.par()[8] = z0 ;
1007 
1010  if (sss && !isHadCaloCompatible(data)) return nullptr;
1011 
1014  std::unique_ptr<Trk::TrackParameters> T0 = pla->createUniqueTrackParameters(data.par()[0],
1015  data.par()[1],
1016  data.par()[2],
1017  data.par()[3],
1018  data.par()[4],
1019  std::nullopt);
1020 
1021  if(m_ITKGeometry && m_tracksfinder->pTseed(data.combinatorialData(),*T0,SP,ctx) < pTm) return nullptr;
1022  else return T0;
1023 
1024 }
1025 
1027 // Set track quality cuts
1029 
1031 {
1032  InDet::TrackQualityCuts trackquality;
1033  // Integer cuts
1034  //
1035  trackquality.setIntCut("MinNumberOfClusters" ,m_nclusmin );
1036  trackquality.setIntCut("MinNumberOfWClusters",m_nwclusmin );
1037  trackquality.setIntCut("MaxNumberOfHoles" ,m_nholesmax );
1038  trackquality.setIntCut("MaxHolesGap" ,m_dholesmax );
1039 
1040  if (m_useassoTool) trackquality.setIntCut("UseAssociationTool",1);
1041  else trackquality.setIntCut("UseAssociationTool",0);
1042  if (m_cosmicTrack) trackquality.setIntCut("CosmicTrack" ,1);
1043  else trackquality.setIntCut("CosmicTrack" ,0);
1044  if (simpleTrack) trackquality.setIntCut("SimpleTrack" ,1);
1045  else trackquality.setIntCut("SimpleTrack" ,0);
1046  if (m_multitracks) trackquality.setIntCut("doMultiTracksProd" ,1);
1047  else trackquality.setIntCut("doMultiTracksProd" ,0);
1048 
1049  // Double cuts
1050  //
1051  trackquality.setDoubleCut("pTmin" ,m_pTmin );
1052  trackquality.setDoubleCut("pTminBrem" ,m_pTminBrem );
1053  trackquality.setDoubleCut("MaxXi2forCluster" ,m_xi2max );
1054  trackquality.setDoubleCut("MaxXi2forOutlier" ,m_xi2maxNoAdd);
1055  trackquality.setDoubleCut("MaxXi2forSearch" ,m_xi2maxlink );
1056  trackquality.setDoubleCut("MaxXi2MultiTracks" ,m_xi2multitracks);
1057 
1058  return trackquality;
1059 }
1060 
1062 // Detector elements selection
1064 
1066  std::vector<const InDetDD::SiDetectorElement*>& DE)
1067 {
1069  while (d!=DE.end()) {
1070  if ((*d)->isPixel()) {
1071  if (!data.pix()) {
1072  d = DE.erase(d);
1073  continue;
1074  }
1075  } else if (!data.sct()) {
1076  d = DE.erase(d);
1077  continue;
1078  }
1079  ++d;
1080  }
1081 }
1082 
1084 // Clusters from seed comparison with clusters associated with track
1085 //
1086 // Seeds is good only if no tracks has hits in all clusters from given seed (nt!=n)
1087 // where, n - number clusters in seed
1088 // nt - number clusters with track information
1089 //
1091 
1092 bool InDet::SiTrackMaker_xk::newSeed(SiTrackMakerEventData_xk& data, const std::vector<const Trk::SpacePoint*>& Sp) const
1093 {
1094  std::multiset<const Trk::Track*> trackseed;
1095  std::multimap<const Trk::PrepRawData*,const Trk::Track*>::const_iterator iter_clusterOnTrack,iter_clusterOnTrackEnd = data.clusterTrack().end();
1096 
1098  size_t n = 0;
1099 
1100  for (const Trk::SpacePoint* spacePoint : Sp) {
1101 
1103  const Trk::PrepRawData* prd = spacePoint->clusterList().first;
1104 
1106  for (iter_clusterOnTrack = data.clusterTrack().find(prd); iter_clusterOnTrack!=iter_clusterOnTrackEnd; ++iter_clusterOnTrack) {
1107  if ((*iter_clusterOnTrack).first!=prd) break;
1109  trackseed.insert((*iter_clusterOnTrack).second);
1110  }
1112  ++n;
1114  prd = spacePoint->clusterList().second;
1116  if (!prd) continue;
1118  for (iter_clusterOnTrack = data.clusterTrack().find(prd); iter_clusterOnTrack!=iter_clusterOnTrackEnd; ++iter_clusterOnTrack) {
1119  if ((*iter_clusterOnTrack).first!=prd) break;
1120  trackseed.insert((*iter_clusterOnTrack).second);
1121  }
1123  ++n;
1124  }
1128  if(trackseed.size() < n) return true;
1130  if( m_heavyion && n==3 ) return true;
1131 
1133 
1138  const Trk::Track* currentTrack {nullptr};
1139  size_t clustersOnCurrent = 1;
1141  for(const Trk::Track* track : trackseed) {
1143  if(track != currentTrack) {
1144  currentTrack = track;
1145  clustersOnCurrent = 1;
1146  continue ;
1147  }
1150  if(++clustersOnCurrent == n) return false;
1151  }
1153  return clustersOnCurrent!=n;
1154 }
1155 
1159 
1160 
1161 int InDet::SiTrackMaker_xk::kindSeed(const std::vector<const Trk::SpacePoint*>& Sp)
1162 {
1163 
1164  if(Sp.size()!=3) return 0;//correct handling of Pixel-only ITk tracklets
1165 
1166  std::vector<const Trk::SpacePoint*>::const_iterator s=Sp.begin(),se=Sp.end();
1167 
1168  int n = 0;
1169  for(; s!=se; ++s) {if((*s)->clusterList().second) ++n;}
1170  return n;
1171 }
1172 
1173 int InDet::SiTrackMaker_xk::rapidity(const std::vector<const Trk::SpacePoint*>& Sp)
1174 {
1175  if(Sp.size() < 2) return 0;
1176 
1177  Amg::Vector3D delta_sp = Sp[0]->globalPosition() - Sp[1]->globalPosition();
1178  float eta = 2*std::abs(delta_sp.eta());
1179  int n = int(eta);
1180  if(n > 7) n = 7;
1181  return n;
1182 }
1183 
1185 // Clusters-track multimap production
1187 
1189 {
1191  m = Tr->measurementsOnTrack()->begin(),
1192  me = Tr->measurementsOnTrack()->end ();
1193 
1194  for (; m!=me; ++m) {
1195  const Trk::PrepRawData* prd = static_cast<const Trk::RIO_OnTrack*>(*m)->prepRawData();
1196  if (prd) data.clusterTrack().insert(std::make_pair(prd, Tr));
1197  }
1198 }
1199 
1201 // Test is it new track
1203 
1205 {
1206  const Trk::PrepRawData* prd [100];
1207  std::multimap<const Trk::PrepRawData*,const Trk::Track*>::const_iterator
1208  ti,t[100],te = data.clusterTrack().end();
1209 
1210  int n = 0;
1211 
1213  m = Tr->measurementsOnTrack()->begin(),
1214  me = Tr->measurementsOnTrack()->end ();
1215 
1216  for (; m!=me; ++m) {
1217 
1218  const Trk::PrepRawData* pr = static_cast<const Trk::RIO_OnTrack*>(*m)->prepRawData();
1219  if (pr) {
1220  prd[n] =pr;
1221  t [n] = data.clusterTrack().find(prd[n]);
1222  if (t[n]==te) return true;
1223  ++n;
1224  }
1225  }
1226 
1227  if (!n) return true;
1228  int nclt = n;
1229 
1230  for (int i=0; i!=n; ++i) {
1231  int nclmax = 0;
1232  for (ti=t[i]; ti!=te; ++ti) {
1233  if ( (*ti).first != prd[i] ) break;
1234  int ncl = (*ti).second->measurementsOnTrack()->size();
1235  if (ncl > nclmax) nclmax = ncl;
1236  }
1237  if (nclt > nclmax) return true;
1238  }
1239  return false;
1240 }
1241 
1243 // Calculation global position for space points
1245 
1247 (const Trk::SpacePoint& s0, const Trk::SpacePoint& s1, const Trk::SpacePoint& s2,
1248  double* p0, double* p1, double* p2) const
1249 {
1250 
1252  p0[0] = s0.globalPosition().x();
1253  p0[1] = s0.globalPosition().y();
1254  p0[2] = s0.globalPosition().z();
1255 
1256  p1[0] = s1.globalPosition().x();
1257  p1[1] = s1.globalPosition().y();
1258  p1[2] = s1.globalPosition().z();
1259 
1260  p2[0] = s2.globalPosition().x();
1261  p2[1] = s2.globalPosition().y();
1262  p2[2] = s2.globalPosition().z();
1263 
1265  if (!s0.clusterList().second && !s1.clusterList().second && !s2.clusterList().second) return true;
1266 
1268  double dir0[3],dir1[3],dir2[3];
1269 
1270  globalDirections(p0,p1,p2,dir0,dir1,dir2);
1271 
1274  if (s0.clusterList().second && !globalPosition(s0,dir0,p0)) return false;
1275  if (s1.clusterList().second && !globalPosition(s1,dir1,p1)) return false;
1276  if (s2.clusterList().second && !globalPosition(s2,dir2,p2)) return false;
1277 
1278  return true;
1279 }
1280 
1282 // Calculation global position for space points
1284 
1289 (const Trk::SpacePoint& sp, const double* dir,double* p) const
1290 {
1292  const Trk::PrepRawData* c0 = sp.clusterList().first;
1293  const Trk::PrepRawData* c1 = sp.clusterList().second;
1294 
1295  const InDetDD::SiDetectorElement* de0 = static_cast<const InDet::SiCluster*>(c0)->detectorElement();
1296  const InDetDD::SiDetectorElement* de1 = static_cast<const InDet::SiCluster*>(c1)->detectorElement();
1297 
1299  Amg::Vector2D localPos = c0->localPosition();
1300  std::pair<Amg::Vector3D,Amg::Vector3D> e0
1301  (de0->endsOfStrip(InDetDD::SiLocalPosition(localPos.y(),localPos.x(),0.)));
1302 
1303  localPos = c1->localPosition();
1304  std::pair<Amg::Vector3D,Amg::Vector3D> e1
1305  (de1->endsOfStrip(InDetDD::SiLocalPosition(localPos.y(),localPos.x(),0.)));
1306 
1309  double a0[3] = {e0.second.x()-e0.first.x(), e0.second.y()-e0.first.y(), e0.second.z()-e0.first.z()};
1310  double a1[3] = {e1.second.x()-e1.first.x(), e1.second.y()-e1.first.y(), e1.second.z()-e1.first.z()};
1312  double dr[3] = {e1.first .x()-e0.first.x(), e1.first .y()-e0.first.y(), e1.first .z()-e0.first.z()};
1313 
1315  double d0 = m_distmax/sqrt(a0[0]*a0[0]+a0[1]*a0[1]+a0[2]*a0[2]);
1316 
1319  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]};
1320  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]};
1321 
1328 
1331  double du = a0[0]*u[0]+a0[1]*u[1]+a0[2]*u[2];
1332 
1334  if (du==0. ) return false;
1335 
1342  double s0 = (dr[0]*u[0]+dr[1]*u[1]+dr[2]*u[2])/du;
1347  double s1 = (dr[0]*v[0]+dr[1]*v[1]+dr[2]*v[2])/du;
1348 
1353  if (s0 < -d0 || s0 > 1.+d0 || s1 < -d0 || s1 > 1.+d0) return false;
1354 
1357  p[0] = e0.first.x()+s0*a0[0];
1358  p[1] = e0.first.y()+s0*a0[1];
1359  p[2] = e0.first.z()+s0*a0[2];
1360 
1361  return true;
1362 }
1363 
1365 // Test is it track with calo seed compatible
1367 
1369 {
1370  if (!data.caloClusterROIEM()) return false;
1371 
1372 
1373  double F = data.par()[2] ;
1374  double E = -log(tan(.5*data.par()[3])) ;
1375  double R = sqrt(data.par()[6]*data.par()[6]+data.par()[7]*data.par()[7]);
1376  double Z = data.par()[8] ;
1377  return data.caloClusterROIEM()->hasMatchingROI(F, E, R, Z, m_phiWidth, m_etaWidth);
1378 }
1379 
1381 // Test track is compatible withi had calo seed
1383 
1385 {
1386  if (!data.caloClusterROIHad()) return false;
1387 
1388  double F = data.par()[2] ;
1389  double E = -log(tan(.5*data.par()[3])) ;
1390  double R = sqrt(data.par()[6]*data.par()[6]+data.par()[7]*data.par()[7]);
1391  double Z = data.par()[8] ;
1392 
1393  return data.caloClusterROIHad()->hasMatchingROI(F, E, R, Z, m_phiWidth, m_etaWidth);
1394 }
1395 
1397 // Calculation global direction for positions of space points
1399 
1404 (const double* p0, const double* p1, const double* p2, double* d0, double* d1, double* d2)
1405 {
1407  double x01 = p1[0]-p0[0] ;
1408  double y01 = p1[1]-p0[1] ;
1409  double x02 = p2[0]-p0[0] ;
1410  double y02 = p2[1]-p0[1] ;
1411 
1415 
1417  double d01 = x01*x01+y01*y01 ;
1418  double x1 = sqrt(d01) ;
1419  double u01 = 1./x1 ;
1420  double a = x01*u01 ;
1421  double b = y01*u01 ;
1423  double x2 = a*x02+b*y02 ;
1425  double y2 = a*y02-b*x02 ;
1426 
1428  double d02 = x2*x2+y2*y2 ;
1430  double u02 = x2/d02 ;
1431  double v02 = y2/d02 ;
1436  double A0 = v02 /(u02-u01) ;
1437  double B0 = 2.*(v02-A0*u02) ;
1438 
1444 
1445  double C2 = (1.-B0*y2) ;
1446  double S2 = (A0+B0*x2) ;
1447 
1448  double T = (p2[2]-p0[2])/sqrt(d02);
1449  double sinTheta = 1./sqrt(1.+T*T) ;
1450  double cosTheta = sinTheta*T ;
1451  double sinThetaCosAlpha = sinTheta / sqrt(1.+A0*A0) ;
1452  double Sa = sinThetaCosAlpha*a ;
1453  double Sb = sinThetaCosAlpha*b ;
1454 
1459  d0[0] = Sa -Sb*A0;
1460  d0[1]= Sb +Sa*A0;
1461  d0[2]=cosTheta;
1462 
1464  d1[0] = Sa +Sb*A0;
1465  d1[1]= Sb -Sa*A0;
1466  d1[2]=cosTheta;
1467 
1469  d2[0] = Sa*C2-Sb*S2;
1470  d2[1]= Sb*C2+Sa*S2;
1471  d2[2]=cosTheta;
1472 }
1473 
1474 
1475 
1476 double InDet::SiTrackMaker_xk::pTmin(double eta) const
1477 {
1478  if (m_ptbins.size() == 0) return m_pTmin;
1479  double aeta = std::abs(eta);
1480  for(int n = int(m_ptbins.size()-1); n>=0; --n) {
1481  if(aeta > m_etabins[n]) return m_ptbins[n];
1482  }
1483  return m_pTmin;
1484 }
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:676
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:216
InDet::SiTrackMaker_xk::dumpStatistics
MsgStream & dumpStatistics(MsgStream &out) const
Definition: SiTrackMaker_xk.cxx:197
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
python.SystemOfUnits.s
int s
Definition: SystemOfUnits.py:131
python.SystemOfUnits.m
int m
Definition: SystemOfUnits.py:91
InDet::SiTrackMaker_xk::kTotalUsedSeeds
@ kTotalUsedSeeds
Definition: SiTrackMaker_xk.h:207
InDet::SiTrackMaker_xk::dumpconditions
MsgStream & dumpconditions(MsgStream &out) const
Definition: SiTrackMaker_xk.cxx:405
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
CaloCellPos2Ntuple.int
int
Definition: CaloCellPos2Ntuple.py:24
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:70
hist_file_dump.d
d
Definition: hist_file_dump.py:137
InDet::SiTrackMaker_xk::kTotalBremSeeds
@ kTotalBremSeeds
Definition: SiTrackMaker_xk.h:209
plotBeamSpotCompare.x2
x2
Definition: plotBeamSpotCompare.py:218
extractSporadic.c1
c1
Definition: extractSporadic.py:134
InDet::SiTrackMaker_xk::dumpevent
static MsgStream & dumpevent(SiTrackMakerEventData_xk &data, MsgStream &out)
Definition: SiTrackMaker_xk.cxx:474
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:71
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:112
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:1247
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:1161
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:184
InDet::SiTrackMaker_xk::endEvent
virtual void endEvent(SiTrackMakerEventData_xk &data) const override
Definition: SiTrackMaker_xk.cxx:587
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:1065
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:1204
hotSpotInTAG.c0
c0
Definition: hotSpotInTAG.py:192
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:210
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:1030
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:1404
InDet::SiTrackMaker_xk::isHadCaloCompatible
bool isHadCaloCompatible(SiTrackMakerEventData_xk &data) const
Definition: SiTrackMaker_xk.cxx:1384
Trk::TrackInfo::SiSpacePointsSeedMaker_LowMomentum
@ SiSpacePointsSeedMaker_LowMomentum
Definition: Tracking/TrkEvent/TrkTrack/TrkTrack/TrackInfo.h:224
beamspotman.n
n
Definition: beamspotman.py:731
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:1289
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:922
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:87
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:94
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:1476
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:623
Trk::TrackInfo::SiSpacePointsSeedMaker_HeavyIon
@ SiSpacePointsSeedMaker_HeavyIon
Definition: Tracking/TrkEvent/TrkTrack/TrkTrack/TrackInfo.h:223
fill
void fill(H5::Group &out_file, size_t iterations)
Definition: test-hdf5-writer.cxx:95
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:149
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:77
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:639
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:1368
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:394
SiClusterContainer.h
a
TList * a
Definition: liststreamerinfos.cxx:10
InDet::SiTrackMaker_xk::newEvent
virtual void newEvent(const EventContext &ctx, SiTrackMakerEventData_xk &data, bool PIX, bool SCT) const override
Definition: SiTrackMaker_xk.cxx:493
Trk::TrackInfo::SiSpacePointsSeedMaker_ForwardTracks
@ SiSpacePointsSeedMaker_ForwardTracks
Entries allowing to distinguish different seed makers.
Definition: Tracking/TrkEvent/TrkTrack/TrkTrack/TrackInfo.h:241
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:1092
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:860
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:554
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:512
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:1173
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:26
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:1188
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
InDet::SiTrackMaker_xk::m_nholesmax
IntegerProperty m_nholesmax
Definition: SiTrackMaker_xk.h:163