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 }
579 
581 // Finalize track finding tool for given event
583 
585 {
587  m_tracksfinder->endEvent(data.combinatorialData());
588 
590  data.clusterTrack().clear();
591 
592  // end event for seed to track tool
593  if (m_seedsegmentsWrite) m_seedtrack->endEvent(data.conversionData());
594 
595  // fill statistics
596  {
597  std::lock_guard<std::mutex> lock(m_counterMutex);
598 
599  for(int K = 0; K != SiCombinatorialTrackFinderData_xk::kNSeedTypes; ++K) {
600  for(int r = 0; r != 8; ++r) {
601  m_usedSeedsEta[K][r] += data.summaryStatUsedInTrack()[kUsedSeedsEta][K][r];
602  m_seedsWithTracksEta[K][r] += data.summaryStatUsedInTrack()[kSeedsWithTracksEta][K][r];
603  }
604  }
605  }
606  for (int K = 0; K != SiCombinatorialTrackFinderData_xk::kNSeedTypes; ++K) {
607  m_totalInputSeeds[K] += data.summaryStatAll()[kTotalInputSeeds][K];
608  m_totalUsedSeeds[K] = m_totalUsedSeeds[K] + data.summaryStatAll()[kTotalUsedSeeds][K];
609  m_totalNoTrackPar[K] += data.summaryStatAll()[kTotalNoTrackPar][K];
610  m_totalBremSeeds[K] += data.summaryStatAll()[kTotalBremSeeds][K];
611  m_twoClusters[K] += data.summaryStatAll()[kTwoClusters][K];
612  m_wrongRoad[K] += data.summaryStatAll()[kWrongRoad][K];
613  m_wrongInit[K] += data.summaryStatAll()[kWrongInit][K];
614  m_noTrack[K] += data.summaryStatAll()[kNoTrack][K];
615  m_notNewTrack[K] += data.summaryStatAll()[kNotNewTrack][K];
616  m_bremAttempt[K] += data.summaryStatAll()[kBremAttempt][K];
617  m_outputTracks[K] += data.summaryStatAll()[kOutputTracks][K];
618  m_extraTracks[K] += data.summaryStatAll()[kExtraTracks][K];
619  m_bremTracks[K] += data.summaryStatAll()[kBremTracks][K];
620  m_seedsWithTrack[K] += data.summaryStatAll()[kSeedsWithTracks][K];
621  m_deSize[K] = m_deSize[K] + data.summaryStatAll()[kDESize][K];
622  }
623  // Print event information
624  //
625  if (msgLevel()<=0) {
626  data.nprint() = 1;
627  dump(data, msg(MSG::DEBUG));
628  }
629 }
630 
632 // Main method for track finding using space points
634 
635 std::list<Trk::Track*> InDet::SiTrackMaker_xk::getTracks
636 (const EventContext& ctx, SiTrackMakerEventData_xk& data, const std::vector<const Trk::SpacePoint*>& Sp) const
637 {
639  ++data.inputseeds();
640 
642  int K = kindSeed(Sp);
644  int r = rapidity(Sp);
645 
647  ++data.summaryStatAll()[kTotalInputSeeds][K];
648 
650  std::list<Trk::Track*> tracks;
652  if (!data.pix() && !data.sct()) return tracks;
653 
655  bool isGoodSeed{true};
658  if (m_seedsfilter) isGoodSeed=newSeed(data, Sp);
659  if (!m_seedsegmentsWrite && !isGoodSeed) {
660  return tracks;
661  }
662 
663  // Get AtlasFieldCache
664  MagField::AtlasFieldCache fieldCache;
665 
668  const AtlasFieldCacheCondObj* fieldCondObj{*readHandle};
669  if (fieldCondObj == nullptr) {
670  ATH_MSG_ERROR("InDet::SiTrackMaker_xk::getTracks: Failed to retrieve AtlasFieldCacheCondObj with key " << m_fieldCondObjInputKey.key());
671  return tracks;
672  }
673  fieldCondObj->getInitializedCache (fieldCache);
674 
676  std::unique_ptr<Trk::TrackParameters> Tp = nullptr;
677  Tp = getAtaPlane(fieldCache, data, false, Sp, ctx);
678  if (m_seedsegmentsWrite && Tp) {
679  m_seedtrack->executeSiSPSeedSegments(data.conversionData(), Tp.get(), isGoodSeed, Sp);
680  }
681 
682  if (m_seedsegmentsWrite && !isGoodSeed) {
683  return tracks;
684  }
688  if (!Tp) {
689  ++data.summaryStatAll()[kTotalNoTrackPar][K];
690  return tracks;
691  }
692 
694  ++data.goodseeds();
695 
700 
701  std::vector<const InDetDD::SiDetectorElement*> DE;
702 
704  if (!m_cosmicTrack) m_roadmaker->detElementsRoad(ctx, fieldCache, *Tp,Trk::alongMomentum, DE, data.roadMakerData());
705  else m_roadmaker->detElementsRoad(ctx, fieldCache, *Tp,Trk::oppositeMomentum,DE, data.roadMakerData());
706  }
707  else {
708  int road_length = m_trigInDetRoadPredictorTool->getRoad(Sp, DE, ctx);
709  if(road_length == 0) return tracks;
710  }
711 
713  if (!data.pix() || !data.sct()) detectorElementsSelection(data, DE);
714 
717  if ( static_cast<int>(DE.size()) < m_nclusmin) {
718  return tracks;
719  }
720 
722  data.summaryStatAll()[kDESize][K] += double(DE.size());
723  ++data.summaryStatAll()[kTotalUsedSeeds][K];
724 
726  std::vector<Amg::Vector3D> Gp;
727 
729  ++data.summaryStatUsedInTrack()[kUsedSeedsEta][K][r];
730 
733  if (!m_useBremModel) {
735  Trk::Track* newTrack = m_trigInDetTrackFollowingTool->getTrack(Sp, DE, ctx);
736  if(newTrack != nullptr) tracks.push_back(newTrack);
737  }
738  else {
739  tracks = m_tracksfinder->getTracks(data.combinatorialData(), *Tp, Sp, Gp, DE, data.clusterTrack(),ctx);
740  }
741  } else if (!m_useCaloSeeds) {
742  ++data.summaryStatAll()[kTotalBremSeeds][K];
743  tracks = m_tracksfinder->getTracksWithBrem(data.combinatorialData(), *Tp, Sp, Gp, DE, data.clusterTrack(), false,ctx);
744  }
746  else if (isCaloCompatible(data)) {
747 
748  ++data.summaryStatAll()[kTotalBremSeeds][K];
749  tracks = m_tracksfinder->getTracksWithBrem(data.combinatorialData(), *Tp, Sp, Gp, DE, data.clusterTrack(), true,ctx);
750  } else {
751  tracks = m_tracksfinder->getTracks (data.combinatorialData(), *Tp, Sp, Gp, DE, data.clusterTrack(),ctx);
752  }
753 
755  std::array<bool,SiCombinatorialTrackFinderData_xk::kNCombStats> inf{0,0,0,0,0,0};
756  m_tracksfinder->fillStatistic(data.combinatorialData(),inf);
757  for (size_t p =0; p<inf.size(); ++p){
758  if(inf[p]) ++data.summaryStatAll()[m_indexToEnum[p]][K];
759  }
760 
763  if (m_seedsfilter) {
764  std::list<Trk::Track*>::iterator t = tracks.begin();
765  while (t!=tracks.end()) {
767  if (!isNewTrack(data, *t)) {
768  delete (*t);
769  tracks.erase(t++);
770  } else {
771  if((*t)->info().trackProperties(Trk::TrackInfo::BremFit)) ++data.summaryStatAll()[kBremTracks][K];
772  clusterTrackMap(data, *t++);
773  }
774  }
775  }
776  data.findtracks() += tracks.size();
777 
778  if(!tracks.empty()) {
779  ++data.summaryStatAll()[kSeedsWithTracks][K];
780  ++data.summaryStatUsedInTrack()[kSeedsWithTracksEta][K][r];
781  data.summaryStatAll()[kOutputTracks][K] += tracks.size();
782  data.summaryStatAll()[kExtraTracks][K] += (tracks.size()-1);
783  }
784 
785  return tracks;
786 
787 }
788 
790 // Main method for track finding using space points
792 
793 std::list<Trk::Track*> InDet::SiTrackMaker_xk::getTracks
794 (const EventContext& ctx, SiTrackMakerEventData_xk& data, const Trk::TrackParameters& Tp, const std::vector<Amg::Vector3D>& Gp) const
795 {
796  ++data.inputseeds();
797  std::list<Trk::Track*> tracks;
798  if (!data.pix() && !data.sct()) return tracks;
799 
800  ++data.goodseeds();
801 
802  // Get AtlasFieldCache
803  MagField::AtlasFieldCache fieldCache;
804 
806  const AtlasFieldCacheCondObj* fieldCondObj{*readHandle};
807  if (fieldCondObj == nullptr) {
808  ATH_MSG_ERROR("InDet::SiTrackMaker_xk::getTracks: Failed to retrieve AtlasFieldCacheCondObj with key " << m_fieldCondObjInputKey.key());
809  return tracks;
810  }
811  fieldCondObj->getInitializedCache (fieldCache);
812 
813  // Get detector elements road
814  //
815  std::vector<const InDetDD::SiDetectorElement*> DE;
816  if (!m_cosmicTrack) m_roadmaker->detElementsRoad(ctx, fieldCache, Tp,Trk::alongMomentum, DE, data.roadMakerData());
817  else m_roadmaker->detElementsRoad(ctx, fieldCache, Tp,Trk::oppositeMomentum,DE, data.roadMakerData());
818 
819  if (!data.pix() || !data.sct()) detectorElementsSelection(data, DE);
820 
821  if (static_cast<int>(DE.size()) < m_nclusmin) return tracks;
822 
823  // Find possible list of tracks with trigger track parameters or global positions
824  //
825  std::vector<const Trk::SpacePoint*> Sp;
826 
827  if (!m_useBremModel) {
828  tracks = m_tracksfinder->getTracks (data.combinatorialData(), Tp, Sp, Gp, DE, data.clusterTrack(),ctx);
829  } else if (!m_useCaloSeeds) {
830  tracks = m_tracksfinder->getTracksWithBrem(data.combinatorialData(), Tp, Sp, Gp, DE, data.clusterTrack(), false,ctx);
831  } else if (isCaloCompatible(data)) {
832  tracks = m_tracksfinder->getTracksWithBrem(data.combinatorialData(), Tp, Sp, Gp, DE, data.clusterTrack(), true,ctx);
833  } else {
834  tracks = m_tracksfinder->getTracks (data.combinatorialData(), Tp, Sp, Gp, DE, data.clusterTrack(),ctx);
835  }
836 
837  if (m_seedsfilter) {
838  std::list<Trk::Track*>::iterator t = tracks.begin();
839  while (t!=tracks.end()) {
840  if (!isNewTrack(data, *t)) {
841  delete (*t);
842  tracks.erase(t++);
843  } else {
844  clusterTrackMap(data, *t++);
845  }
846  }
847  }
848  data.findtracks() += tracks.size();
849  return tracks;
850 }
851 
853 // Space point seed parameters extimation
855 
856 std::unique_ptr<Trk::TrackParameters> InDet::SiTrackMaker_xk::getAtaPlane
857 (MagField::AtlasFieldCache& fieldCache,
859  bool sss,
860  const std::vector<const Trk::SpacePoint*>& theSeed,
861  const EventContext& ctx) const
862 {
864  if (theSeed.size() < 3) return nullptr;
865 
867 
868  unsigned int middleIdx = theSeed.size() == 3 ? 1 : theSeed.size()/2;
869  const std::vector<const Trk::SpacePoint*> SP = {theSeed.at(0), theSeed.at(middleIdx), theSeed.back()};
870 
872  const Trk::PrepRawData* cl = SP[0]->clusterList().first;
873  if (!cl) return nullptr;
875  const Trk::PlaneSurface* pla =
876  static_cast<const Trk::PlaneSurface*>(&cl->detectorElement()->surface());
877  if (!pla) return nullptr;
878 
881  double p0[3],p1[3],p2[3];
882  if (!globalPositions(*(SP[0]),*(SP[1]),*(SP[2]),p0,p1,p2)) return nullptr;
883 
885  double x0 = p0[0] ;
886  double y0 = p0[1] ;
887  double z0 = p0[2] ;
888  double x1 = p1[0]-x0;
889  double y1 = p1[1]-y0;
890  double x2 = p2[0]-x0;
891  double y2 = p2[1]-y0;
892  double z2 = p2[2]-z0;
893 
896  double u1 = 1./sqrt(x1*x1+y1*y1) ;
898  double rn = x2*x2+y2*y2 ;
899  double r2 = 1./rn ;
901  double a = x1*u1 ;
902  double b = y1*u1 ;
904  double u2 = (a*x2+b*y2)*r2 ;
906  double v2 = (a*y2-b*x2)*r2 ;
909  double A = v2/(u2-u1) ;
910  double B = 2.*(v2-A*u2) ;
911  double C = B/sqrt(1.+A*A) ;
912  double T = z2*sqrt(r2)/(1.+.04*C*C*rn);
913  if(m_ITKGeometry){
914  T = std::abs(C) > 1.e-6 ? (z2*C)/asin(C*sqrt(rn)) : z2/sqrt(rn);
915  }
916 
917  const Amg::Transform3D& Tp = pla->transform();
918 
920  double Ax[3] = {Tp(0,0),Tp(1,0),Tp(2,0)};
922  double Ay[3] = {Tp(0,1),Tp(1,1),Tp(2,1)};
924  double D [3] = {Tp(0,3),Tp(1,3),Tp(2,3)};
926  double d[3] = {x0-D[0],y0-D[1],z0-D[2]};
928  data.par()[0] = d[0]*Ax[0]+d[1]*Ax[1]+d[2]*Ax[2];
929  data.par()[1] = d[0]*Ay[0]+d[1]*Ay[1]+d[2]*Ay[2];
930 
933  if (!fieldCache.solenoidOn()) fieldModeEnum = Trk::NoField;
934 
935  Trk::MagneticFieldProperties fieldprop(fieldModeEnum);
937  if (fieldprop.magneticFieldMode() > 0) {
938 
940  double H[3],gP[3] ={x0,y0,z0};
941  fieldCache.getFieldZR(gP, H);
942 
945  if (fabs(H[2])>.0001) {
947  data.par()[2] = atan2(b+a*A,a-b*A);
949  data.par()[3] = atan2(1.,T) ;
951  data.par()[5] = -C/(300.*H[2]) ;
952  } else {
955  T = z2*sqrt(r2) ;
956  data.par()[2] = atan2(y2,x2);
957  data.par()[3] = atan2(1.,T) ;
958  data.par()[5] = m_ITKGeometry ? 0.9/m_pTmin : 1./m_pTmin ;
959  }
960  }
962  else {
963  T = z2*sqrt(r2) ;
964  data.par()[2] = atan2(y2,x2);
965  data.par()[3] = atan2(1.,T) ;
966  data.par()[5] = m_ITKGeometry ? 0.9/m_pTmin : 1./m_pTmin ;
967  }
968 
969  double pTm = pTmin(SP[0]->eta()); // all spacepoints should have approx. same eta
970 
972  if (m_ITKGeometry){
973  if(std::abs(data.par()[5])*pTm > 1) return nullptr;
974  }
975  else if(std::abs(data.par()[5])*m_pTmin > 1.1) return nullptr;
976 
978  data.par()[4] = data.par()[5]/sqrt(1.+T*T);
979  data.par()[6] = x0 ;
980  data.par()[7] = y0 ;
981  data.par()[8] = z0 ;
982 
985  if (sss && !isHadCaloCompatible(data)) return nullptr;
986 
989  std::unique_ptr<Trk::TrackParameters> T0 = pla->createUniqueTrackParameters(data.par()[0],
990  data.par()[1],
991  data.par()[2],
992  data.par()[3],
993  data.par()[4],
994  std::nullopt);
995 
996  if(m_ITKGeometry && m_tracksfinder->pTseed(data.combinatorialData(),*T0,SP,ctx) < pTm) return nullptr;
997  else return T0;
998 
999 }
1000 
1002 // Set track quality cuts
1004 
1006 {
1007  InDet::TrackQualityCuts trackquality;
1008  // Integer cuts
1009  //
1010  trackquality.setIntCut("MinNumberOfClusters" ,m_nclusmin );
1011  trackquality.setIntCut("MinNumberOfWClusters",m_nwclusmin );
1012  trackquality.setIntCut("MaxNumberOfHoles" ,m_nholesmax );
1013  trackquality.setIntCut("MaxHolesGap" ,m_dholesmax );
1014 
1015  if (m_useassoTool) trackquality.setIntCut("UseAssociationTool",1);
1016  else trackquality.setIntCut("UseAssociationTool",0);
1017  if (m_cosmicTrack) trackquality.setIntCut("CosmicTrack" ,1);
1018  else trackquality.setIntCut("CosmicTrack" ,0);
1019  if (simpleTrack) trackquality.setIntCut("SimpleTrack" ,1);
1020  else trackquality.setIntCut("SimpleTrack" ,0);
1021  if (m_multitracks) trackquality.setIntCut("doMultiTracksProd" ,1);
1022  else trackquality.setIntCut("doMultiTracksProd" ,0);
1023 
1024  // Double cuts
1025  //
1026  trackquality.setDoubleCut("pTmin" ,m_pTmin );
1027  trackquality.setDoubleCut("pTminBrem" ,m_pTminBrem );
1028  trackquality.setDoubleCut("MaxXi2forCluster" ,m_xi2max );
1029  trackquality.setDoubleCut("MaxXi2forOutlier" ,m_xi2maxNoAdd);
1030  trackquality.setDoubleCut("MaxXi2forSearch" ,m_xi2maxlink );
1031  trackquality.setDoubleCut("MaxXi2MultiTracks" ,m_xi2multitracks);
1032 
1033  return trackquality;
1034 }
1035 
1037 // Detector elements selection
1039 
1041  std::vector<const InDetDD::SiDetectorElement*>& DE)
1042 {
1044  while (d!=DE.end()) {
1045  if ((*d)->isPixel()) {
1046  if (!data.pix()) {
1047  d = DE.erase(d);
1048  continue;
1049  }
1050  } else if (!data.sct()) {
1051  d = DE.erase(d);
1052  continue;
1053  }
1054  ++d;
1055  }
1056 }
1057 
1059 // Clusters from seed comparison with clusters associated with track
1060 //
1061 // Seeds is good only if no tracks has hits in all clusters from given seed (nt!=n)
1062 // where, n - number clusters in seed
1063 // nt - number clusters with track information
1064 //
1066 
1067 bool InDet::SiTrackMaker_xk::newSeed(SiTrackMakerEventData_xk& data, const std::vector<const Trk::SpacePoint*>& Sp) const
1068 {
1069  std::multiset<const Trk::Track*> trackseed;
1070  std::multimap<const Trk::PrepRawData*,const Trk::Track*>::const_iterator iter_clusterOnTrack,iter_clusterOnTrackEnd = data.clusterTrack().end();
1071 
1073  size_t n = 0;
1074 
1075  for (const Trk::SpacePoint* spacePoint : Sp) {
1076 
1078  const Trk::PrepRawData* prd = spacePoint->clusterList().first;
1079 
1081  for (iter_clusterOnTrack = data.clusterTrack().find(prd); iter_clusterOnTrack!=iter_clusterOnTrackEnd; ++iter_clusterOnTrack) {
1082  if ((*iter_clusterOnTrack).first!=prd) break;
1084  trackseed.insert((*iter_clusterOnTrack).second);
1085  }
1087  ++n;
1089  prd = spacePoint->clusterList().second;
1091  if (!prd) continue;
1093  for (iter_clusterOnTrack = data.clusterTrack().find(prd); iter_clusterOnTrack!=iter_clusterOnTrackEnd; ++iter_clusterOnTrack) {
1094  if ((*iter_clusterOnTrack).first!=prd) break;
1095  trackseed.insert((*iter_clusterOnTrack).second);
1096  }
1098  ++n;
1099  }
1103  if(trackseed.size() < n) return true;
1105  if( m_heavyion && n==3 ) return true;
1106 
1108 
1113  const Trk::Track* currentTrack {nullptr};
1114  size_t clustersOnCurrent = 1;
1116  for(const Trk::Track* track : trackseed) {
1118  if(track != currentTrack) {
1119  currentTrack = track;
1120  clustersOnCurrent = 1;
1121  continue ;
1122  }
1125  if(++clustersOnCurrent == n) return false;
1126  }
1128  return clustersOnCurrent!=n;
1129 }
1130 
1134 
1135 
1136 int InDet::SiTrackMaker_xk::kindSeed(const std::vector<const Trk::SpacePoint*>& Sp)
1137 {
1138 
1139  if(Sp.size()!=3) return 0;//correct handling of Pixel-only ITk tracklets
1140 
1141  std::vector<const Trk::SpacePoint*>::const_iterator s=Sp.begin(),se=Sp.end();
1142 
1143  int n = 0;
1144  for(; s!=se; ++s) {if((*s)->clusterList().second) ++n;}
1145  return n;
1146 }
1147 
1148 int InDet::SiTrackMaker_xk::rapidity(const std::vector<const Trk::SpacePoint*>& Sp)
1149 {
1150  if(Sp.size() < 2) return 0;
1151 
1152  Amg::Vector3D delta_sp = Sp[0]->globalPosition() - Sp[1]->globalPosition();
1153  float eta = 2*std::abs(delta_sp.eta());
1154  int n = int(eta);
1155  if(n > 7) n = 7;
1156  return n;
1157 }
1158 
1160 // Clusters-track multimap production
1162 
1164 {
1166  m = Tr->measurementsOnTrack()->begin(),
1167  me = Tr->measurementsOnTrack()->end ();
1168 
1169  for (; m!=me; ++m) {
1170  const Trk::PrepRawData* prd = static_cast<const Trk::RIO_OnTrack*>(*m)->prepRawData();
1171  if (prd) data.clusterTrack().insert(std::make_pair(prd, Tr));
1172  }
1173 }
1174 
1176 // Test is it new track
1178 
1180 {
1181  const Trk::PrepRawData* prd [100];
1182  std::multimap<const Trk::PrepRawData*,const Trk::Track*>::const_iterator
1183  ti,t[100],te = data.clusterTrack().end();
1184 
1185  int n = 0;
1186 
1188  m = Tr->measurementsOnTrack()->begin(),
1189  me = Tr->measurementsOnTrack()->end ();
1190 
1191  for (; m!=me; ++m) {
1192 
1193  const Trk::PrepRawData* pr = static_cast<const Trk::RIO_OnTrack*>(*m)->prepRawData();
1194  if (pr) {
1195  prd[n] =pr;
1196  t [n] = data.clusterTrack().find(prd[n]);
1197  if (t[n]==te) return true;
1198  ++n;
1199  }
1200  }
1201 
1202  if (!n) return true;
1203  int nclt = n;
1204 
1205  for (int i=0; i!=n; ++i) {
1206  int nclmax = 0;
1207  for (ti=t[i]; ti!=te; ++ti) {
1208  if ( (*ti).first != prd[i] ) break;
1209  int ncl = (*ti).second->measurementsOnTrack()->size();
1210  if (ncl > nclmax) nclmax = ncl;
1211  }
1212  if (nclt > nclmax) return true;
1213  }
1214  return false;
1215 }
1216 
1218 // Calculation global position for space points
1220 
1222 (const Trk::SpacePoint& s0, const Trk::SpacePoint& s1, const Trk::SpacePoint& s2,
1223  double* p0, double* p1, double* p2) const
1224 {
1225 
1227  p0[0] = s0.globalPosition().x();
1228  p0[1] = s0.globalPosition().y();
1229  p0[2] = s0.globalPosition().z();
1230 
1231  p1[0] = s1.globalPosition().x();
1232  p1[1] = s1.globalPosition().y();
1233  p1[2] = s1.globalPosition().z();
1234 
1235  p2[0] = s2.globalPosition().x();
1236  p2[1] = s2.globalPosition().y();
1237  p2[2] = s2.globalPosition().z();
1238 
1240  if (!s0.clusterList().second && !s1.clusterList().second && !s2.clusterList().second) return true;
1241 
1243  double dir0[3],dir1[3],dir2[3];
1244 
1245  globalDirections(p0,p1,p2,dir0,dir1,dir2);
1246 
1249  if (s0.clusterList().second && !globalPosition(s0,dir0,p0)) return false;
1250  if (s1.clusterList().second && !globalPosition(s1,dir1,p1)) return false;
1251  if (s2.clusterList().second && !globalPosition(s2,dir2,p2)) return false;
1252 
1253  return true;
1254 }
1255 
1257 // Calculation global position for space points
1259 
1264 (const Trk::SpacePoint& sp, const double* dir,double* p) const
1265 {
1267  const Trk::PrepRawData* c0 = sp.clusterList().first;
1268  const Trk::PrepRawData* c1 = sp.clusterList().second;
1269 
1270  const InDetDD::SiDetectorElement* de0 = static_cast<const InDet::SiCluster*>(c0)->detectorElement();
1271  const InDetDD::SiDetectorElement* de1 = static_cast<const InDet::SiCluster*>(c1)->detectorElement();
1272 
1274  Amg::Vector2D localPos = c0->localPosition();
1275  std::pair<Amg::Vector3D,Amg::Vector3D> e0
1276  (de0->endsOfStrip(InDetDD::SiLocalPosition(localPos.y(),localPos.x(),0.)));
1277 
1278  localPos = c1->localPosition();
1279  std::pair<Amg::Vector3D,Amg::Vector3D> e1
1280  (de1->endsOfStrip(InDetDD::SiLocalPosition(localPos.y(),localPos.x(),0.)));
1281 
1284  double a0[3] = {e0.second.x()-e0.first.x(), e0.second.y()-e0.first.y(), e0.second.z()-e0.first.z()};
1285  double a1[3] = {e1.second.x()-e1.first.x(), e1.second.y()-e1.first.y(), e1.second.z()-e1.first.z()};
1287  double dr[3] = {e1.first .x()-e0.first.x(), e1.first .y()-e0.first.y(), e1.first .z()-e0.first.z()};
1288 
1290  double d0 = m_distmax/sqrt(a0[0]*a0[0]+a0[1]*a0[1]+a0[2]*a0[2]);
1291 
1294  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]};
1295  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]};
1296 
1303 
1306  double du = a0[0]*u[0]+a0[1]*u[1]+a0[2]*u[2];
1307 
1309  if (du==0. ) return false;
1310 
1317  double s0 = (dr[0]*u[0]+dr[1]*u[1]+dr[2]*u[2])/du;
1322  double s1 = (dr[0]*v[0]+dr[1]*v[1]+dr[2]*v[2])/du;
1323 
1328  if (s0 < -d0 || s0 > 1.+d0 || s1 < -d0 || s1 > 1.+d0) return false;
1329 
1332  p[0] = e0.first.x()+s0*a0[0];
1333  p[1] = e0.first.y()+s0*a0[1];
1334  p[2] = e0.first.z()+s0*a0[2];
1335 
1336  return true;
1337 }
1338 
1340 // Test is it track with calo seed compatible
1342 
1344 {
1345  if (!data.caloClusterROIEM()) return false;
1346 
1347 
1348  double F = data.par()[2] ;
1349  double E = -log(tan(.5*data.par()[3])) ;
1350  double R = sqrt(data.par()[6]*data.par()[6]+data.par()[7]*data.par()[7]);
1351  double Z = data.par()[8] ;
1352  return data.caloClusterROIEM()->hasMatchingROI(F, E, R, Z, m_phiWidth, m_etaWidth);
1353 }
1354 
1356 // Test track is compatible withi had calo seed
1358 
1360 {
1361  if (!data.caloClusterROIHad()) return false;
1362 
1363  double F = data.par()[2] ;
1364  double E = -log(tan(.5*data.par()[3])) ;
1365  double R = sqrt(data.par()[6]*data.par()[6]+data.par()[7]*data.par()[7]);
1366  double Z = data.par()[8] ;
1367 
1368  return data.caloClusterROIHad()->hasMatchingROI(F, E, R, Z, m_phiWidth, m_etaWidth);
1369 }
1370 
1372 // Calculation global direction for positions of space points
1374 
1379 (const double* p0, const double* p1, const double* p2, double* d0, double* d1, double* d2)
1380 {
1382  double x01 = p1[0]-p0[0] ;
1383  double y01 = p1[1]-p0[1] ;
1384  double x02 = p2[0]-p0[0] ;
1385  double y02 = p2[1]-p0[1] ;
1386 
1390 
1392  double d01 = x01*x01+y01*y01 ;
1393  double x1 = sqrt(d01) ;
1394  double u01 = 1./x1 ;
1395  double a = x01*u01 ;
1396  double b = y01*u01 ;
1398  double x2 = a*x02+b*y02 ;
1400  double y2 = a*y02-b*x02 ;
1401 
1403  double d02 = x2*x2+y2*y2 ;
1405  double u02 = x2/d02 ;
1406  double v02 = y2/d02 ;
1411  double A0 = v02 /(u02-u01) ;
1412  double B0 = 2.*(v02-A0*u02) ;
1413 
1419 
1420  double C2 = (1.-B0*y2) ;
1421  double S2 = (A0+B0*x2) ;
1422 
1423  double T = (p2[2]-p0[2])/sqrt(d02);
1424  double sinTheta = 1./sqrt(1.+T*T) ;
1425  double cosTheta = sinTheta*T ;
1426  double sinThetaCosAlpha = sinTheta / sqrt(1.+A0*A0) ;
1427  double Sa = sinThetaCosAlpha*a ;
1428  double Sb = sinThetaCosAlpha*b ;
1429 
1434  d0[0] = Sa -Sb*A0;
1435  d0[1]= Sb +Sa*A0;
1436  d0[2]=cosTheta;
1437 
1439  d1[0] = Sa +Sb*A0;
1440  d1[1]= Sb -Sa*A0;
1441  d1[2]=cosTheta;
1442 
1444  d2[0] = Sa*C2-Sb*S2;
1445  d2[1]= Sb*C2+Sa*S2;
1446  d2[2]=cosTheta;
1447 }
1448 
1449 
1450 
1452 {
1453  if (m_ptbins.size() == 0) return m_pTmin;
1454  double aeta = std::abs(eta);
1455  for(int n = int(m_ptbins.size()-1); n>=0; --n) {
1456  if(aeta > m_etabins[n]) return m_ptbins[n];
1457  }
1458  return m_pTmin;
1459 }
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:160
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:164
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:161
python.tests.PyTestsLib.finalize
def finalize(self)
_info( "content of StoreGate..." ) self.sg.dump()
Definition: PyTestsLib.py:53
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
python.PerfMonSerializer.p
def p
Definition: PerfMonSerializer.py:743
InDet::SiTrackMaker_xk::kTotalUsedSeeds
@ kTotalUsedSeeds
Definition: SiTrackMaker_xk.h:205
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:156
InDet::SiTrackMaker_xk::kTotalNoTrackPar
@ kTotalNoTrackPar
Definition: SiTrackMaker_xk.h:206
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:165
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
eta
Scalar eta() const
pseudorapidity method
Definition: AmgMatrixBasePlugin.h:79
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:175
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:207
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:209
InDet::SiTrackMaker_xk::m_useTrigTrackFollowingTool
BooleanProperty m_useTrigTrackFollowingTool
Definition: SiTrackMaker_xk.h:153
InDet::SiTrackMaker_xk::kSeedsWithTracksEta
@ kSeedsWithTracksEta
Definition: SiTrackMaker_xk.h:223
InDet::SiTrackMaker_xk::m_xi2max
DoubleProperty m_xi2max
Definition: SiTrackMaker_xk.h:155
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:174
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:176
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:158
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:1222
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:1136
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:584
InDet::SiTrackMaker_xk::initialize
virtual StatusCode initialize() override
Definition: SiTrackMaker_xk.cxx:38
InDet::SiTrackMaker_xk::kUsedSeedsEta
@ kUsedSeedsEta
Definition: SiTrackMaker_xk.h:222
Trk::u
@ u
Enums for curvilinear frames.
Definition: ParamDefs.h:83
inf
TStreamerInfo * inf
Definition: liststreamerinfos.cxx:12
makeTRTBarrelCans.y1
tuple y1
Definition: makeTRTBarrelCans.py:15
InDet::SiTrackMaker_xk::kSeedsWithTracks
@ kSeedsWithTracks
Definition: SiTrackMaker_xk.h:218
InDet::SiTrackMaker_xk::detectorElementsSelection
static void detectorElementsSelection(SiTrackMakerEventData_xk &data, std::vector< const InDetDD::SiDetectorElement * > &DE)
Definition: SiTrackMaker_xk.cxx:1040
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:1179
hotSpotInTAG.c0
c0
Definition: hotSpotInTAG.py:192
InDet::SiTrackMaker_xk::m_ptbins
DoubleArrayProperty m_ptbins
Definition: SiTrackMaker_xk.h:169
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
H
#define H(x, y, z)
Definition: MD5.cxx:114
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:1005
InDet::SiTrackMaker_xk::m_multitracks
BooleanProperty m_multitracks
Definition: SiTrackMaker_xk.h:146
InDet::SiTrackMaker_xk::kOutputTracks
@ kOutputTracks
Definition: SiTrackMaker_xk.h:214
lumiFormat.i
int i
Definition: lumiFormat.py:92
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:1379
InDet::SiTrackMaker_xk::isHadCaloCompatible
bool isHadCaloCompatible(SiTrackMakerEventData_xk &data) const
Definition: SiTrackMaker_xk.cxx:1359
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:1264
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:166
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:211
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:95
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:1451
drawFromPickle.tan
tan
Definition: drawFromPickle.py:36
InDet::SiTrackMaker_xk::kNotNewTrack
@ kNotNewTrack
Definition: SiTrackMaker_xk.h:212
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:210
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:163
DataVector
Derived DataVector<T>.
Definition: DataVector.h:581
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
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:208
VP1PartSpect::E
@ E
Definition: VP1PartSpectFlags.h:21
plotBeamSpotMon.b
b
Definition: plotBeamSpotMon.py:77
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:636
InDetDD::SiDetectorElement
Definition: SiDetectorElement.h:109
InDet::SiTrackMaker_xk::m_etabins
DoubleArrayProperty m_etabins
Definition: SiTrackMaker_xk.h:168
SG::CondHandleKey::initialize
StatusCode initialize(bool used=true)
InDet::SiTrackMaker_xk::isCaloCompatible
bool isCaloCompatible(SiTrackMakerEventData_xk &data) const
Definition: SiTrackMaker_xk.cxx:1343
InDet::SiTrackMaker_xk::kBremTracks
@ kBremTracks
Definition: SiTrackMaker_xk.h:216
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:167
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:157
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
lumiFormat.fill
fill
Definition: lumiFormat.py:111
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:204
InDet::SiTrackMaker_xk::newSeed
bool newSeed(SiTrackMakerEventData_xk &data, const std::vector< const Trk::SpacePoint * > &Sp) const
Definition: SiTrackMaker_xk.cxx:1067
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:857
InDet::SiTrackMaker_xk::kDESize
@ kDESize
Definition: SiTrackMaker_xk.h:217
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:159
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:183
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:263
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:157
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:1148
InDet::SiTrackMaker_xk::m_indexToEnum
std::vector< statAllTypes > m_indexToEnum
Definition: SiTrackMaker_xk.h:226
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:213
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:1163
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:215
fitman.k
k
Definition: fitman.py:528
InDet::SiTrackMaker_xk::m_nholesmax
IntegerProperty m_nholesmax
Definition: SiTrackMaker_xk.h:162