CMS 3D CMS Logo

TrackingNtuple.cc
Go to the documentation of this file.
1 // -*- C++ -*-
2 //
3 // Package: NtupleDump/TrackingNtuple
4 // Class: TrackingNtuple
5 //
13 //
14 // Original Author: Giuseppe Cerati
15 // Created: Tue, 25 Aug 2015 13:22:49 GMT
16 //
17 //
18 
19 // system include files
20 #include <memory>
21 
22 // user include files
25 
35 
38 
42 
46 
53 
56 
63 
68 
71 
82 
85 
87 #include "HepPDT/ParticleID.hh"
88 
90 
92 
93 #include <set>
94 #include <map>
95 #include <unordered_set>
96 #include <unordered_map>
97 #include <tuple>
98 #include <utility>
99 
100 #include "TTree.h"
101 
102 /*
103 todo:
104 add refitted hit position after track/seed fit
105 add local angle, path length!
106 */
107 
108 namespace {
109  // This pattern is copied from QuickTrackAssociatorByHitsImpl. If
110  // further needs arises, it wouldn't hurt to abstract it somehow.
111  using TrackingParticleRefKeyToIndex = std::unordered_map<reco::RecoToSimCollection::index_type, size_t>;
112  using TrackingVertexRefKeyToIndex = TrackingParticleRefKeyToIndex;
113  using SimHitFullKey = std::pair<TrackPSimHitRef::key_type, edm::ProductID>;
114  using SimHitRefKeyToIndex = std::map<SimHitFullKey, size_t>;
115  using TrackingParticleRefKeyToCount = TrackingParticleRefKeyToIndex;
116 
117  std::string subdetstring(int subdet) {
118  switch (subdet) {
120  return "- TIB";
122  return "- TOB";
124  return "- TEC";
126  return "- TID";
128  return "- PixBar";
130  return "- PixFwd";
131  default:
132  return "UNKNOWN TRACKER HIT TYPE";
133  }
134  }
135 
136  struct ProductIDSetPrinter {
137  ProductIDSetPrinter(const std::set<edm::ProductID>& set) : set_(set) {}
138 
139  void print(std::ostream& os) const {
140  for (const auto& item : set_) {
141  os << item << " ";
142  }
143  }
144 
145  const std::set<edm::ProductID>& set_;
146  };
147  std::ostream& operator<<(std::ostream& os, const ProductIDSetPrinter& o) {
148  o.print(os);
149  return os;
150  }
151  template <typename T>
152  struct ProductIDMapPrinter {
153  ProductIDMapPrinter(const std::map<edm::ProductID, T>& map) : map_(map) {}
154 
155  void print(std::ostream& os) const {
156  for (const auto& item : map_) {
157  os << item.first << " ";
158  }
159  }
160 
161  const std::map<edm::ProductID, T>& map_;
162  };
163  template <typename T>
164  auto make_ProductIDMapPrinter(const std::map<edm::ProductID, T>& map) {
165  return ProductIDMapPrinter<T>(map);
166  }
167  template <typename T>
168  std::ostream& operator<<(std::ostream& os, const ProductIDMapPrinter<T>& o) {
169  o.print(os);
170  return os;
171  }
172 
173  template <typename T>
174  struct VectorPrinter {
175  VectorPrinter(const std::vector<T>& vec) : vec_(vec) {}
176 
177  void print(std::ostream& os) const {
178  for (const auto& item : vec_) {
179  os << item << " ";
180  }
181  }
182 
183  const std::vector<T>& vec_;
184  };
185  template <typename T>
186  auto make_VectorPrinter(const std::vector<T>& vec) {
187  return VectorPrinter<T>(vec);
188  }
189  template <typename T>
190  std::ostream& operator<<(std::ostream& os, const VectorPrinter<T>& o) {
191  o.print(os);
192  return os;
193  }
194 
195  void checkProductID(const std::set<edm::ProductID>& set, const edm::ProductID& id, const char* name) {
196  if (set.find(id) == set.end())
197  throw cms::Exception("Configuration")
198  << "Got " << name << " with a hit with ProductID " << id
199  << " which does not match to the set of ProductID's for the hits: " << ProductIDSetPrinter(set)
200  << ". Usually this is caused by a wrong hit collection in the configuration.";
201  }
202 
203  template <typename SimLink, typename Func>
204  void forEachMatchedSimLink(const edm::DetSet<SimLink>& digiSimLinks, uint32_t channel, Func func) {
205  for (const auto& link : digiSimLinks) {
206  if (link.channel() == channel) {
207  func(link);
208  }
209  }
210  }
211 
213  template <typename... Args>
214  void call_nop(Args&&... args) {}
215 
216  template <typename... Types>
217  class CombineDetId {
218  public:
219  CombineDetId() {}
220 
223  unsigned int operator[](size_t i) const { return std::get<0>(content_)[i]; }
224 
225  template <typename... Args>
226  void book(Args&&... args) {
227  impl([&](auto& vec) { vec.book(std::forward<Args>(args)...); });
228  }
229 
230  template <typename... Args>
231  void push_back(Args&&... args) {
232  impl([&](auto& vec) { vec.push_back(std::forward<Args>(args)...); });
233  }
234 
235  template <typename... Args>
236  void resize(Args&&... args) {
237  impl([&](auto& vec) { vec.resize(std::forward<Args>(args)...); });
238  }
239 
240  template <typename... Args>
241  void set(Args&&... args) {
242  impl([&](auto& vec) { vec.set(std::forward<Args>(args)...); });
243  }
244 
245  void clear() {
246  impl([&](auto& vec) { vec.clear(); });
247  }
248 
249  private:
250  // Trick to not repeate std::index_sequence_for in each of the methods above
251  template <typename F>
252  void impl(F&& func) {
253  impl2(std::index_sequence_for<Types...>{}, std::forward<F>(func));
254  }
255 
256  // Trick to exploit parameter pack expansion in function call
257  // arguments to call a member function for each tuple element
258  // (with the same signature). The comma operator is needed to
259  // return a value from the expression as an argument for the
260  // call_nop.
261  template <std::size_t... Is, typename F>
262  void impl2(std::index_sequence<Is...>, F&& func) {
263  call_nop((func(std::get<Is>(content_)), 0)...);
264  }
265 
266  std::tuple<Types...> content_;
267  };
268 
269  std::map<unsigned int, double> chargeFraction(const SiPixelCluster& cluster,
270  const DetId& detId,
271  const edm::DetSetVector<PixelDigiSimLink>& digiSimLink) {
272  std::map<unsigned int, double> simTrackIdToAdc;
273 
274  auto idetset = digiSimLink.find(detId);
275  if (idetset == digiSimLink.end())
276  return simTrackIdToAdc;
277 
278  double adcSum = 0;
280  for (int iPix = 0; iPix != cluster.size(); ++iPix) {
281  const SiPixelCluster::Pixel& pixel = cluster.pixel(iPix);
282  adcSum += pixel.adc;
283  uint32_t channel = PixelChannelIdentifier::pixelToChannel(pixel.x, pixel.y);
284  forEachMatchedSimLink(*idetset, channel, [&](const PixelDigiSimLink& simLink) {
285  double& adc = simTrackIdToAdc[simLink.SimTrackId()];
286  adc += pixel.adc * simLink.fraction();
287  });
288  }
289 
290  for (auto& pair : simTrackIdToAdc) {
291  if (adcSum == 0.)
292  pair.second = 0.;
293  else
294  pair.second /= adcSum;
295  }
296 
297  return simTrackIdToAdc;
298  }
299 
300  std::map<unsigned int, double> chargeFraction(const SiStripCluster& cluster,
301  const DetId& detId,
302  const edm::DetSetVector<StripDigiSimLink>& digiSimLink) {
303  std::map<unsigned int, double> simTrackIdToAdc;
304 
305  auto idetset = digiSimLink.find(detId);
306  if (idetset == digiSimLink.end())
307  return simTrackIdToAdc;
308 
309  double adcSum = 0;
311  int first = cluster.firstStrip();
312  for (size_t i = 0; i < cluster.amplitudes().size(); ++i) {
313  adcSum += cluster.amplitudes()[i];
314  forEachMatchedSimLink(*idetset, first + i, [&](const StripDigiSimLink& simLink) {
315  double& adc = simTrackIdToAdc[simLink.SimTrackId()];
316  adc += cluster.amplitudes()[i] * simLink.fraction();
317  });
318 
319  for (const auto& pair : simTrackIdToAdc) {
320  simTrackIdToAdc[pair.first] = (adcSum != 0. ? pair.second / adcSum : 0.);
321  }
322  }
323  return simTrackIdToAdc;
324  }
325 
326  std::map<unsigned int, double> chargeFraction(const Phase2TrackerCluster1D& cluster,
327  const DetId& detId,
328  const edm::DetSetVector<StripDigiSimLink>& digiSimLink) {
329  std::map<unsigned int, double> simTrackIdToAdc;
330  throw cms::Exception("LogicError") << "Not possible to use StripDigiSimLink with Phase2TrackerCluster1D! ";
331  return simTrackIdToAdc;
332  }
333 
334  //In the OT, there is no measurement of the charge, so no ADC value.
335  //Only in the SSA chip (so in PSs) you have one "threshold" flag that tells you if the charge of at least one strip in the cluster exceeded 1.2 MIPs.
336  std::map<unsigned int, double> chargeFraction(const Phase2TrackerCluster1D& cluster,
337  const DetId& detId,
338  const edm::DetSetVector<PixelDigiSimLink>& digiSimLink) {
339  std::map<unsigned int, double> simTrackIdToAdc;
340  return simTrackIdToAdc;
341  }
342 
343  struct TrackTPMatch {
344  int key = -1;
345  int countClusters = 0;
346  };
347 
348  TrackTPMatch findBestMatchingTrackingParticle(const reco::Track& track,
349  const ClusterTPAssociation& clusterToTPMap,
350  const TrackingParticleRefKeyToIndex& tpKeyToIndex) {
351  struct Count {
352  int clusters = 0;
353  size_t innermostHit = std::numeric_limits<size_t>::max();
354  };
355 
356  std::vector<OmniClusterRef> clusters =
357  track_associator::hitsToClusterRefs(track.recHitsBegin(), track.recHitsEnd());
358 
359  std::unordered_map<int, Count> count;
360  for (size_t iCluster = 0, end = clusters.size(); iCluster < end; ++iCluster) {
361  const auto& clusterRef = clusters[iCluster];
362 
363  auto range = clusterToTPMap.equal_range(clusterRef);
364  for (auto ip = range.first; ip != range.second; ++ip) {
365  const auto tpKey = ip->second.key();
366  if (tpKeyToIndex.find(tpKey) == tpKeyToIndex.end()) // filter out TPs not given as an input
367  continue;
368 
369  auto& elem = count[tpKey];
370  ++elem.clusters;
371  elem.innermostHit = std::min(elem.innermostHit, iCluster);
372  }
373  }
374 
375  // In case there are many matches with the same number of clusters,
376  // select the one with innermost hit
377  TrackTPMatch best;
378  int bestCount = 2; // require >= 3 cluster for the best match
379  size_t bestInnermostHit = std::numeric_limits<size_t>::max();
380  for (auto& keyCount : count) {
381  if (keyCount.second.clusters > bestCount ||
382  (keyCount.second.clusters == bestCount && keyCount.second.innermostHit < bestInnermostHit)) {
383  best.key = keyCount.first;
384  best.countClusters = bestCount = keyCount.second.clusters;
385  bestInnermostHit = keyCount.second.innermostHit;
386  }
387  }
388 
389  LogTrace("TrackingNtuple") << "findBestMatchingTrackingParticle key " << best.key;
390 
391  return best;
392  }
393 
394  TrackTPMatch findMatchingTrackingParticleFromFirstHit(const reco::Track& track,
395  const ClusterTPAssociation& clusterToTPMap,
396  const TrackingParticleRefKeyToIndex& tpKeyToIndex) {
397  TrackTPMatch best;
398 
399  std::vector<OmniClusterRef> clusters =
400  track_associator::hitsToClusterRefs(track.recHitsBegin(), track.recHitsEnd());
401  if (clusters.empty()) {
402  return best;
403  }
404 
405  auto operateCluster = [&](const auto& clusterRef, const auto& func) {
406  auto range = clusterToTPMap.equal_range(clusterRef);
407  for (auto ip = range.first; ip != range.second; ++ip) {
408  const auto tpKey = ip->second.key();
409  if (tpKeyToIndex.find(tpKey) == tpKeyToIndex.end()) // filter out TPs not given as an input
410  continue;
411  func(tpKey);
412  }
413  };
414 
415  std::vector<unsigned int>
416  validTPs; // first cluster can be associated to multiple TPs, use vector as set as this should be small
417  auto iCluster = clusters.begin();
418  operateCluster(*iCluster, [&](unsigned int tpKey) { validTPs.push_back(tpKey); });
419  if (validTPs.empty()) {
420  return best;
421  }
422  ++iCluster;
423  ++best.countClusters;
424 
425  std::vector<bool> foundTPs(validTPs.size(), false);
426  for (auto iEnd = clusters.end(); iCluster != iEnd; ++iCluster) {
427  const auto& clusterRef = *iCluster;
428 
429  // find out to which first-cluster TPs this cluster is matched to
430  operateCluster(clusterRef, [&](unsigned int tpKey) {
431  auto found = std::find(cbegin(validTPs), cend(validTPs), tpKey);
432  if (found != cend(validTPs)) {
433  foundTPs[std::distance(cbegin(validTPs), found)] = true;
434  }
435  });
436 
437  // remove the non-found TPs
438  auto iTP = validTPs.size();
439  do {
440  --iTP;
441 
442  if (!foundTPs[iTP]) {
443  validTPs.erase(validTPs.begin() + iTP);
444  foundTPs.erase(foundTPs.begin() + iTP);
445  }
446  } while (iTP > 0);
447  if (!validTPs.empty()) {
448  // for multiple TPs the "first one" is a bit arbitrary, but
449  // I hope it is rare that a track would have many
450  // consecutive hits matched to two TPs
451  best.key = validTPs[0];
452  } else {
453  break;
454  }
455 
456  std::fill(begin(foundTPs), end(foundTPs), false);
457  ++best.countClusters;
458  }
459 
460  // Reqquire >= 3 clusters for a match
461  return best.countClusters >= 3 ? best : TrackTPMatch();
462  }
463 } // namespace
464 
465 //
466 // class declaration
467 //
468 
469 class TrackingNtuple : public edm::one::EDAnalyzer<edm::one::SharedResources> {
470 public:
471  explicit TrackingNtuple(const edm::ParameterSet&);
472  ~TrackingNtuple() override;
473 
474  static void fillDescriptions(edm::ConfigurationDescriptions& descriptions);
475 
476 private:
477  void analyze(const edm::Event&, const edm::EventSetup&) override;
478 
479  void clearVariables();
480 
481  enum class HitType { Pixel = 0, Strip = 1, Glued = 2, Invalid = 3, Phase2OT = 4, Unknown = 99 };
482 
483  // This gives the "best" classification of a reco hit
484  // In case of reco hit mathing to multiple sim, smaller number is
485  // considered better
486  // To be kept in synch with class HitSimType in ntuple.py
487  enum class HitSimType { Signal = 0, ITPileup = 1, OOTPileup = 2, Noise = 3, Unknown = 99 };
488 
489  using MVACollection = std::vector<float>;
490  using QualityMaskCollection = std::vector<unsigned char>;
491 
492  struct TPHitIndex {
493  TPHitIndex(unsigned int tp = 0, unsigned int simHit = 0, float to = 0, unsigned int id = 0)
494  : tpKey(tp), simHitIdx(simHit), tof(to), detId(id) {}
495  unsigned int tpKey;
496  unsigned int simHitIdx;
497  float tof;
498  unsigned int detId;
499  };
500  static bool tpHitIndexListLess(const TPHitIndex& i, const TPHitIndex& j) { return (i.tpKey < j.tpKey); }
501  static bool tpHitIndexListLessSort(const TPHitIndex& i, const TPHitIndex& j) {
502  if (i.tpKey == j.tpKey) {
503  if (edm::isNotFinite(i.tof) && edm::isNotFinite(j.tof)) {
504  return i.detId < j.detId;
505  }
506  return i.tof < j.tof; // works as intended if either one is NaN
507  }
508  return i.tpKey < j.tpKey;
509  }
510 
511  void fillBeamSpot(const reco::BeamSpot& bs);
512  void fillPixelHits(const edm::Event& iEvent,
513  const ClusterTPAssociation& clusterToTPMap,
514  const TrackingParticleRefKeyToIndex& tpKeyToIndex,
516  const edm::DetSetVector<PixelDigiSimLink>& digiSimLink,
517  const TransientTrackingRecHitBuilder& theTTRHBuilder,
518  const TrackerTopology& tTopo,
519  const SimHitRefKeyToIndex& simHitRefKeyToIndex,
520  std::set<edm::ProductID>& hitProductIds);
521 
523  const ClusterTPAssociation& clusterToTPMap,
524  const TrackingParticleRefKeyToIndex& tpKeyToIndex,
526  const edm::DetSetVector<StripDigiSimLink>& digiSimLink,
527  const TransientTrackingRecHitBuilder& theTTRHBuilder,
528  const TrackerTopology& tTopo,
529  const SimHitRefKeyToIndex& simHitRefKeyToIndex,
530  std::set<edm::ProductID>& hitProductIds);
531 
533  const TransientTrackingRecHitBuilder& theTTRHBuilder,
534  const TrackerTopology& tTopo,
535  std::vector<std::pair<int, int>>& monoStereoClusterList);
536 
538  const TransientTrackingRecHitBuilder& theTTRHBuilder,
539  const TrackerTopology& tTopo,
540  std::vector<std::pair<int, int>>& monoStereoClusterList);
541 
542  void fillPhase2OTHits(const edm::Event& iEvent,
543  const ClusterTPAssociation& clusterToTPMap,
544  const TrackingParticleRefKeyToIndex& tpKeyToIndex,
546  const edm::DetSetVector<PixelDigiSimLink>& digiSimLink,
547  const TransientTrackingRecHitBuilder& theTTRHBuilder,
548  const TrackerTopology& tTopo,
549  const SimHitRefKeyToIndex& simHitRefKeyToIndex,
550  std::set<edm::ProductID>& hitProductIds);
551 
552  void fillSeeds(const edm::Event& iEvent,
553  const TrackingParticleRefVector& tpCollection,
554  const TrackingParticleRefKeyToIndex& tpKeyToIndex,
555  const reco::BeamSpot& bs,
556  const reco::TrackToTrackingParticleAssociator& associatorByHits,
557  const ClusterTPAssociation& clusterToTPMap,
558  const TransientTrackingRecHitBuilder& theTTRHBuilder,
559  const MagneticField& theMF,
560  const TrackerTopology& tTopo,
561  std::vector<std::pair<int, int>>& monoStereoClusterList,
562  const std::set<edm::ProductID>& hitProductIds,
563  std::map<edm::ProductID, size_t>& seedToCollIndex);
564 
566  const TrackingParticleRefVector& tpCollection,
567  const TrackingParticleRefKeyToIndex& tpKeyToIndex,
568  const TrackingParticleRefKeyToCount& tpKeyToClusterCount,
569  const MagneticField& mf,
570  const reco::BeamSpot& bs,
572  const reco::TrackToTrackingParticleAssociator& associatorByHits,
573  const ClusterTPAssociation& clusterToTPMap,
574  const TransientTrackingRecHitBuilder& theTTRHBuilder,
575  const TrackerTopology& tTopo,
576  const std::set<edm::ProductID>& hitProductIds,
577  const std::map<edm::ProductID, size_t>& seedToCollIndex,
578  const std::vector<const MVACollection*>& mvaColls,
579  const std::vector<const QualityMaskCollection*>& qualColls);
580 
581  void fillSimHits(const TrackerGeometry& tracker,
582  const TrackingParticleRefKeyToIndex& tpKeyToIndex,
584  const TrackerTopology& tTopo,
585  SimHitRefKeyToIndex& simHitRefKeyToIndex,
586  std::vector<TPHitIndex>& tpHitList);
587 
589  const edm::EventSetup& iSetup,
591  const reco::BeamSpot& bs,
592  const TrackingParticleRefVector& tpCollection,
593  const TrackingVertexRefKeyToIndex& tvKeyToIndex,
594  const reco::TrackToTrackingParticleAssociator& associatorByHits,
595  const std::vector<TPHitIndex>& tpHitList,
596  const TrackingParticleRefKeyToCount& tpKeyToClusterCount);
597 
599  const reco::SimToRecoCollection& simRecColl,
600  const TrackingParticleRefKeyToIndex& tpKeyToIndex,
601  const unsigned int seedOffset);
602 
604 
605  void fillTrackingVertices(const TrackingVertexRefVector& trackingVertices,
606  const TrackingParticleRefKeyToIndex& tpKeyToIndex);
607 
608  struct SimHitData {
609  std::vector<int> matchingSimHit;
610  std::vector<float> chargeFraction;
611  std::vector<int> bunchCrossing;
612  std::vector<int> event;
614  };
615 
616  template <typename SimLink>
617  SimHitData matchCluster(const OmniClusterRef& cluster,
618  DetId hitId,
619  int clusterKey,
621  const ClusterTPAssociation& clusterToTPMap,
622  const TrackingParticleRefKeyToIndex& tpKeyToIndex,
625  const SimHitRefKeyToIndex& simHitRefKeyToIndex,
626  HitType hitType);
627 
628  // ----------member data ---------------------------
634 
635  std::vector<edm::EDGetTokenT<edm::View<reco::Track>>> seedTokens_;
636  std::vector<edm::EDGetTokenT<std::vector<SeedStopInfo>>> seedStopInfoTokens_;
638  std::vector<std::tuple<edm::EDGetTokenT<MVACollection>, edm::EDGetTokenT<QualityMaskCollection>>>
660  const bool includeSeeds_;
661  const bool includeAllHits_;
662  const bool includeMVA_;
664 
666 
667  TTree* t;
668 
669  // DetId branches
670 #define BOOK(name) tree->Branch((prefix + "_" + #name).c_str(), &name);
671  class DetIdCommon {
672  public:
674 
675  unsigned int operator[](size_t i) const { return detId[i]; }
676 
677  void book(const std::string& prefix, TTree* tree) {
678  BOOK(detId);
679  BOOK(subdet);
680  BOOK(layer);
681  BOOK(side);
682  BOOK(module);
683  }
684 
685  void push_back(const TrackerTopology& tTopo, const DetId& id) {
686  detId.push_back(id.rawId());
687  subdet.push_back(id.subdetId());
688  layer.push_back(tTopo.layer(id));
689  module.push_back(tTopo.module(id));
690 
691  unsigned short s = 0;
692  switch (id.subdetId()) {
694  s = tTopo.tibSide(id);
695  break;
697  s = tTopo.tobSide(id);
698  break;
699  default:
700  s = tTopo.side(id);
701  }
702  side.push_back(s);
703  }
704 
705  void resize(size_t size) {
706  detId.resize(size);
707  subdet.resize(size);
708  layer.resize(size);
709  side.resize(size);
710  module.resize(size);
711  }
712 
713  void set(size_t index, const TrackerTopology& tTopo, const DetId& id) {
714  detId[index] = id.rawId();
715  subdet[index] = id.subdetId();
716  layer[index] = tTopo.layer(id);
717  side[index] = tTopo.side(id);
718  module[index] = tTopo.module(id);
719  }
720 
721  void clear() {
722  detId.clear();
723  subdet.clear();
724  layer.clear();
725  side.clear();
726  module.clear();
727  }
728 
729  private:
730  std::vector<unsigned int> detId;
731  std::vector<unsigned short> subdet;
732  std::vector<unsigned short> layer; // or disk/wheel
733  std::vector<unsigned short> side;
734  std::vector<unsigned short> module;
735  };
736 
738  public:
740 
741  void book(const std::string& prefix, TTree* tree) {
742  BOOK(ladder);
743  BOOK(blade);
744  BOOK(panel);
745  }
746 
747  void push_back(const TrackerTopology& tTopo, const DetId& id) {
748  const bool isBarrel = id.subdetId() == PixelSubdetector::PixelBarrel;
749  ladder.push_back(isBarrel ? tTopo.pxbLadder(id) : 0);
750  blade.push_back(isBarrel ? 0 : tTopo.pxfBlade(id));
751  panel.push_back(isBarrel ? 0 : tTopo.pxfPanel(id));
752  }
753 
754  void clear() {
755  ladder.clear();
756  blade.clear();
757  panel.clear();
758  }
759 
760  private:
761  std::vector<unsigned short> ladder;
762  std::vector<unsigned short> blade;
763  std::vector<unsigned short> panel;
764  };
765 
767  public:
769 
770  void book(const std::string& prefix, TTree* tree) {
771  BOOK(order);
772  BOOK(ring);
773  BOOK(rod);
774  }
775 
776  void push_back(const TrackerTopology& tTopo, const DetId& id) {
777  const auto parsed = parse(tTopo, id);
778  order.push_back(parsed.order);
779  ring.push_back(parsed.ring);
780  rod.push_back(parsed.rod);
781  }
782 
783  void resize(size_t size) {
784  order.resize(size);
785  ring.resize(size);
786  rod.resize(size);
787  }
788 
789  void set(size_t index, const TrackerTopology& tTopo, const DetId& id) {
790  const auto parsed = parse(tTopo, id);
791  order[index] = parsed.order;
792  ring[index] = parsed.ring;
793  rod[index] = parsed.rod;
794  }
795 
796  void clear() {
797  order.clear();
798  ring.clear();
799  rod.clear();
800  }
801 
802  private:
803  struct Parsed {
804  // use int here instead of short to avoid compilation errors due
805  // to narrowing conversion (less boilerplate than explicit static_casts)
806  unsigned int order = 0;
807  unsigned int ring = 0;
808  unsigned int rod = 0;
809  };
810  Parsed parse(const TrackerTopology& tTopo, const DetId& id) const {
811  switch (id.subdetId()) {
813  return Parsed{tTopo.tibOrder(id), 0, 0};
815  return Parsed{tTopo.tidOrder(id), tTopo.tidRing(id), 0};
817  return Parsed{0, 0, tTopo.tobRod(id)};
819  return Parsed{tTopo.tecOrder(id), tTopo.tecRing(id), 0};
820  default:
821  return Parsed{};
822  };
823  }
824 
825  std::vector<unsigned short> order;
826  std::vector<unsigned short> ring;
827  std::vector<unsigned short> rod;
828  };
829 
831  public:
833 
834  void book(const std::string& prefix, TTree* tree) {
835  BOOK(string);
836  BOOK(petalNumber);
837  BOOK(isStereo);
838  BOOK(isRPhi);
839  BOOK(isGlued);
840  }
841 
842  void push_back(const TrackerTopology& tTopo, const DetId& id) {
843  const auto parsed = parse(tTopo, id);
844  string.push_back(parsed.string);
845  petalNumber.push_back(parsed.petalNumber);
846  isStereo.push_back(tTopo.isStereo(id));
847  isRPhi.push_back(tTopo.isRPhi(id));
848  isGlued.push_back(parsed.glued);
849  }
850 
851  void resize(size_t size) {
852  string.resize(size);
853  petalNumber.resize(size);
854  isStereo.resize(size);
855  isRPhi.resize(size);
856  isGlued.resize(size);
857  }
858 
859  void set(size_t index, const TrackerTopology& tTopo, const DetId& id) {
860  const auto parsed = parse(tTopo, id);
861  string[index] = parsed.string;
862  petalNumber[index] = parsed.petalNumber;
863  isStereo[index] = tTopo.isStereo(id);
864  isRPhi[index] = tTopo.isRPhi(id);
865  isGlued[index] = parsed.glued;
866  }
867 
868  void clear() {
869  string.clear();
870  isStereo.clear();
871  isRPhi.clear();
872  isGlued.clear();
873  petalNumber.clear();
874  }
875 
876  private:
877  struct Parsed {
878  // use int here instead of short to avoid compilation errors due
879  // to narrowing conversion (less boilerplate than explicit static_casts)
880  unsigned int string = 0;
881  unsigned int petalNumber = 0;
882  bool glued = false;
883  };
884  Parsed parse(const TrackerTopology& tTopo, const DetId& id) const {
885  switch (id.subdetId()) {
887  return Parsed{tTopo.tibString(id), 0, tTopo.tibIsDoubleSide(id)};
889  return Parsed{0, 0, tTopo.tidIsDoubleSide(id)};
891  return Parsed{0, 0, tTopo.tobIsDoubleSide(id)};
893  return Parsed{0, tTopo.tecPetalNumber(id), tTopo.tecIsDoubleSide(id)};
894  default:
895  return Parsed{};
896  }
897  }
898 
899  std::vector<unsigned short> string;
900  std::vector<unsigned short> petalNumber;
901  std::vector<unsigned short> isStereo;
902  std::vector<unsigned short> isRPhi;
903  std::vector<unsigned short> isGlued;
904  };
905 
907  public:
909 
910  void book(const std::string& prefix, TTree* tree) {
911  BOOK(isLower);
912  BOOK(isUpper);
913  BOOK(isStack);
914  }
915 
916  void push_back(const TrackerTopology& tTopo, const DetId& id) {
917  isLower.push_back(tTopo.isLower(id));
918  isUpper.push_back(tTopo.isUpper(id));
919  isStack.push_back(tTopo.stack(id) ==
920  0); // equivalent to *IsDoubleSide() but without the hardcoded layer+ring requirements
921  }
922 
923  void clear() {
924  isLower.clear();
925  isUpper.clear();
926  isStack.clear();
927  }
928 
929  private:
930  std::vector<unsigned short> isLower;
931  std::vector<unsigned short> isUpper;
932  std::vector<unsigned short> isStack;
933  };
934 #undef BOOK
935 
936  using DetIdPixel = CombineDetId<DetIdCommon, DetIdPixelOnly>;
937  using DetIdStrip = CombineDetId<DetIdCommon, DetIdOTCommon, DetIdStripOnly>;
938  using DetIdPhase2OT = CombineDetId<DetIdCommon, DetIdOTCommon, DetIdPhase2OTOnly>;
939  using DetIdAll = CombineDetId<DetIdCommon, DetIdPixelOnly, DetIdOTCommon, DetIdStripOnly>;
940  using DetIdAllPhase2 = CombineDetId<DetIdCommon, DetIdPixelOnly, DetIdOTCommon, DetIdPhase2OTOnly>;
941 
942  // event
946 
948  // tracks
949  // (first) index runs through tracks
950  std::vector<float> trk_px;
951  std::vector<float> trk_py;
952  std::vector<float> trk_pz;
953  std::vector<float> trk_pt;
954  std::vector<float> trk_inner_px;
955  std::vector<float> trk_inner_py;
956  std::vector<float> trk_inner_pz;
957  std::vector<float> trk_inner_pt;
958  std::vector<float> trk_outer_px;
959  std::vector<float> trk_outer_py;
960  std::vector<float> trk_outer_pz;
961  std::vector<float> trk_outer_pt;
962  std::vector<float> trk_eta;
963  std::vector<float> trk_lambda;
964  std::vector<float> trk_cotTheta;
965  std::vector<float> trk_phi;
966  std::vector<float> trk_dxy;
967  std::vector<float> trk_dz;
968  std::vector<float> trk_dxyPV;
969  std::vector<float> trk_dzPV;
970  std::vector<float> trk_dxyClosestPV;
971  std::vector<float> trk_dzClosestPV;
972  std::vector<float> trk_ptErr;
973  std::vector<float> trk_etaErr;
974  std::vector<float> trk_lambdaErr;
975  std::vector<float> trk_phiErr;
976  std::vector<float> trk_dxyErr;
977  std::vector<float> trk_dzErr;
978  std::vector<float> trk_refpoint_x;
979  std::vector<float> trk_refpoint_y;
980  std::vector<float> trk_refpoint_z;
981  std::vector<float> trk_nChi2;
982  std::vector<float> trk_nChi2_1Dmod;
983  std::vector<float> trk_ndof;
984  std::vector<std::vector<float>> trk_mvas;
985  std::vector<std::vector<unsigned short>> trk_qualityMasks;
986  std::vector<int> trk_q;
987  std::vector<unsigned int> trk_nValid;
988  std::vector<unsigned int> trk_nLost;
989  std::vector<unsigned int> trk_nInactive;
990  std::vector<unsigned int> trk_nPixel;
991  std::vector<unsigned int> trk_nStrip;
992  std::vector<unsigned int> trk_nOuterLost;
993  std::vector<unsigned int> trk_nInnerLost;
994  std::vector<unsigned int> trk_nOuterInactive;
995  std::vector<unsigned int> trk_nInnerInactive;
996  std::vector<unsigned int> trk_nPixelLay;
997  std::vector<unsigned int> trk_nStripLay;
998  std::vector<unsigned int> trk_n3DLay;
999  std::vector<unsigned int> trk_nLostLay;
1000  std::vector<unsigned int> trk_nCluster;
1001  std::vector<unsigned int> trk_algo;
1002  std::vector<unsigned int> trk_originalAlgo;
1003  std::vector<decltype(reco::TrackBase().algoMaskUL())> trk_algoMask;
1004  std::vector<unsigned short> trk_stopReason;
1005  std::vector<short> trk_isHP;
1006  std::vector<int> trk_seedIdx;
1007  std::vector<int> trk_vtxIdx;
1008  std::vector<short> trk_isTrue;
1009  std::vector<int> trk_bestSimTrkIdx;
1010  std::vector<float> trk_bestSimTrkShareFrac;
1013  std::vector<float> trk_bestSimTrkNChi2;
1019  std::vector<std::vector<float>> trk_simTrkShareFrac; // second index runs through matched TrackingParticles
1020  std::vector<std::vector<float>> trk_simTrkNChi2; // second index runs through matched TrackingParticles
1021  std::vector<std::vector<int>> trk_simTrkIdx; // second index runs through matched TrackingParticles
1022  std::vector<std::vector<int>> trk_hitIdx; // second index runs through hits
1023  std::vector<std::vector<int>> trk_hitType; // second index runs through hits
1025  // sim tracks
1026  // (first) index runs through TrackingParticles
1027  std::vector<int> sim_event;
1028  std::vector<int> sim_bunchCrossing;
1029  std::vector<int> sim_pdgId;
1030  std::vector<std::vector<int>> sim_genPdgIds;
1031  std::vector<int> sim_isFromBHadron;
1032  std::vector<float> sim_px;
1033  std::vector<float> sim_py;
1034  std::vector<float> sim_pz;
1035  std::vector<float> sim_pt;
1036  std::vector<float> sim_eta;
1037  std::vector<float> sim_phi;
1038  std::vector<float> sim_pca_pt;
1039  std::vector<float> sim_pca_eta;
1040  std::vector<float> sim_pca_lambda;
1041  std::vector<float> sim_pca_cotTheta;
1042  std::vector<float> sim_pca_phi;
1043  std::vector<float> sim_pca_dxy;
1044  std::vector<float> sim_pca_dz;
1045  std::vector<int> sim_q;
1046  // numbers of sim hits/layers
1047  std::vector<unsigned int> sim_nValid;
1048  std::vector<unsigned int> sim_nPixel;
1049  std::vector<unsigned int> sim_nStrip;
1050  std::vector<unsigned int> sim_nLay;
1051  std::vector<unsigned int> sim_nPixelLay;
1052  std::vector<unsigned int> sim_n3DLay;
1053  // number of sim hits as calculated in TrackingTruthAccumulator
1054  std::vector<unsigned int> sim_nTrackerHits;
1055  // number of clusters associated to TP
1056  std::vector<unsigned int> sim_nRecoClusters;
1057  // links to other objects
1058  std::vector<std::vector<int>> sim_trkIdx; // second index runs through matched tracks
1059  std::vector<std::vector<float>> sim_trkShareFrac; // second index runs through matched tracks
1060  std::vector<std::vector<int>> sim_seedIdx; // second index runs through matched seeds
1061  std::vector<int> sim_parentVtxIdx;
1062  std::vector<std::vector<int>> sim_decayVtxIdx; // second index runs through decay vertices
1063  std::vector<std::vector<int>> sim_simHitIdx; // second index runs through SimHits
1065  // pixel hits
1066  // (first) index runs through hits
1067  std::vector<short> pix_isBarrel;
1069  std::vector<std::vector<int>> pix_trkIdx; // second index runs through tracks containing this hit
1070  std::vector<std::vector<int>> pix_seeIdx; // second index runs through seeds containing this hit
1071  std::vector<std::vector<int>> pix_simHitIdx; // second index runs through SimHits inducing this hit
1072  std::vector<std::vector<float>> pix_chargeFraction; // second index runs through SimHits inducing this hit
1073  std::vector<unsigned short> pix_simType;
1074  std::vector<float> pix_x;
1075  std::vector<float> pix_y;
1076  std::vector<float> pix_z;
1077  std::vector<float> pix_xx;
1078  std::vector<float> pix_xy;
1079  std::vector<float> pix_yy;
1080  std::vector<float> pix_yz;
1081  std::vector<float> pix_zz;
1082  std::vector<float> pix_zx;
1083  std::vector<float>
1084  pix_radL; //http://cmslxr.fnal.gov/lxr/source/DataFormats/GeometrySurface/interface/MediumProperties.h
1085  std::vector<float> pix_bbxi;
1087  // strip hits
1088  // (first) index runs through hits
1089  std::vector<short> str_isBarrel;
1091  std::vector<std::vector<int>> str_trkIdx; // second index runs through tracks containing this hit
1092  std::vector<std::vector<int>> str_seeIdx; // second index runs through seeds containing this hit
1093  std::vector<std::vector<int>> str_simHitIdx; // second index runs through SimHits inducing this hit
1094  std::vector<std::vector<float>> str_chargeFraction; // second index runs through SimHits inducing this hit
1095  std::vector<unsigned short> str_simType;
1096  std::vector<float> str_x;
1097  std::vector<float> str_y;
1098  std::vector<float> str_z;
1099  std::vector<float> str_xx;
1100  std::vector<float> str_xy;
1101  std::vector<float> str_yy;
1102  std::vector<float> str_yz;
1103  std::vector<float> str_zz;
1104  std::vector<float> str_zx;
1105  std::vector<float>
1106  str_radL; //http://cmslxr.fnal.gov/lxr/source/DataFormats/GeometrySurface/interface/MediumProperties.h
1107  std::vector<float> str_bbxi;
1109  // strip matched hits
1110  // (first) index runs through hits
1111  std::vector<short> glu_isBarrel;
1113  std::vector<int> glu_monoIdx;
1114  std::vector<int> glu_stereoIdx;
1115  std::vector<std::vector<int>> glu_seeIdx; // second index runs through seeds containing this hit
1116  std::vector<float> glu_x;
1117  std::vector<float> glu_y;
1118  std::vector<float> glu_z;
1119  std::vector<float> glu_xx;
1120  std::vector<float> glu_xy;
1121  std::vector<float> glu_yy;
1122  std::vector<float> glu_yz;
1123  std::vector<float> glu_zz;
1124  std::vector<float> glu_zx;
1125  std::vector<float>
1126  glu_radL; //http://cmslxr.fnal.gov/lxr/source/DataFormats/GeometrySurface/interface/MediumProperties.h
1127  std::vector<float> glu_bbxi;
1129  // phase2 Outer Tracker hits
1130  // (first) index runs through hits
1131  std::vector<short> ph2_isBarrel;
1133  std::vector<std::vector<int>> ph2_trkIdx; // second index runs through tracks containing this hit
1134  std::vector<std::vector<int>> ph2_seeIdx; // second index runs through seeds containing this hit
1135  std::vector<std::vector<int>> ph2_simHitIdx; // second index runs through SimHits inducing this hit
1136  //std::vector<std::vector<float> > ph2_chargeFraction; // Not supported at the moment for Phase2
1137  std::vector<unsigned short> ph2_simType;
1138  std::vector<float> ph2_x;
1139  std::vector<float> ph2_y;
1140  std::vector<float> ph2_z;
1141  std::vector<float> ph2_xx;
1142  std::vector<float> ph2_xy;
1143  std::vector<float> ph2_yy;
1144  std::vector<float> ph2_yz;
1145  std::vector<float> ph2_zz;
1146  std::vector<float> ph2_zx;
1147  std::vector<float>
1148  ph2_radL; //http://cmslxr.fnal.gov/lxr/source/DataFormats/GeometrySurface/interface/MediumProperties.h
1149  std::vector<float> ph2_bbxi;
1150 
1152  // invalid (missing/inactive/etc) hits
1153  // (first) index runs through hits
1154  std::vector<short> inv_isBarrel;
1157  std::vector<unsigned short> inv_type;
1159  // sim hits
1160  // (first) index runs through hits
1163  std::vector<float> simhit_x;
1164  std::vector<float> simhit_y;
1165  std::vector<float> simhit_z;
1166  std::vector<int> simhit_particle;
1167  std::vector<short> simhit_process;
1168  std::vector<float> simhit_eloss;
1169  std::vector<float> simhit_tof;
1170  //std::vector<unsigned int> simhit_simTrackId; // can be useful for debugging, but not much of general interest
1171  std::vector<int> simhit_simTrkIdx;
1172  std::vector<std::vector<int>> simhit_hitIdx; // second index runs through induced reco hits
1173  std::vector<std::vector<int>> simhit_hitType; // second index runs through induced reco hits
1175  // beam spot
1176  float bsp_x;
1177  float bsp_y;
1178  float bsp_z;
1179  float bsp_sigmax;
1180  float bsp_sigmay;
1181  float bsp_sigmaz;
1183  // seeds
1184  // (first) index runs through seeds
1185  std::vector<short> see_fitok;
1186  std::vector<float> see_px;
1187  std::vector<float> see_py;
1188  std::vector<float> see_pz;
1189  std::vector<float> see_pt;
1190  std::vector<float> see_eta;
1191  std::vector<float> see_phi;
1192  std::vector<float> see_dxy;
1193  std::vector<float> see_dz;
1194  std::vector<float> see_ptErr;
1195  std::vector<float> see_etaErr;
1196  std::vector<float> see_phiErr;
1197  std::vector<float> see_dxyErr;
1198  std::vector<float> see_dzErr;
1199  std::vector<float> see_chi2;
1200  std::vector<float> see_statePt;
1201  std::vector<float> see_stateTrajX;
1202  std::vector<float> see_stateTrajY;
1203  std::vector<float> see_stateTrajPx;
1204  std::vector<float> see_stateTrajPy;
1205  std::vector<float> see_stateTrajPz;
1206  std::vector<int> see_q;
1207  std::vector<unsigned int> see_nValid;
1208  std::vector<unsigned int> see_nPixel;
1209  std::vector<unsigned int> see_nGlued;
1210  std::vector<unsigned int> see_nStrip;
1211  std::vector<unsigned int> see_nPhase2OT;
1212  std::vector<unsigned int> see_nCluster;
1213  std::vector<unsigned int> see_algo;
1214  std::vector<unsigned short> see_stopReason;
1215  std::vector<unsigned short> see_nCands;
1216  std::vector<int> see_trkIdx;
1217  std::vector<short> see_isTrue;
1218  std::vector<int> see_bestSimTrkIdx;
1219  std::vector<float> see_bestSimTrkShareFrac;
1222  std::vector<std::vector<float>> see_simTrkShareFrac; // second index runs through matched TrackingParticles
1223  std::vector<std::vector<int>> see_simTrkIdx; // second index runs through matched TrackingParticles
1224  std::vector<std::vector<int>> see_hitIdx; // second index runs through hits
1225  std::vector<std::vector<int>> see_hitType; // second index runs through hits
1226  //seed algo offset, index runs through iterations
1227  std::vector<unsigned int> see_offset;
1228 
1230  // Vertices
1231  // (first) index runs through vertices
1232  std::vector<float> vtx_x;
1233  std::vector<float> vtx_y;
1234  std::vector<float> vtx_z;
1235  std::vector<float> vtx_xErr;
1236  std::vector<float> vtx_yErr;
1237  std::vector<float> vtx_zErr;
1238  std::vector<float> vtx_ndof;
1239  std::vector<float> vtx_chi2;
1240  std::vector<short> vtx_fake;
1241  std::vector<short> vtx_valid;
1242  std::vector<std::vector<int>> vtx_trkIdx; // second index runs through tracks used in the vertex fit
1243 
1245  // Tracking vertices
1246  // (first) index runs through TrackingVertices
1247  std::vector<int> simvtx_event;
1248  std::vector<int> simvtx_bunchCrossing;
1249  std::vector<unsigned int> simvtx_processType; // only from first SimVertex of TrackingVertex
1250  std::vector<float> simvtx_x;
1251  std::vector<float> simvtx_y;
1252  std::vector<float> simvtx_z;
1253  std::vector<std::vector<int>> simvtx_sourceSimIdx; // second index runs through source TrackingParticles
1254  std::vector<std::vector<int>> simvtx_daughterSimIdx; // second index runs through daughter TrackingParticles
1255  std::vector<int> simpv_idx;
1256 };
1257 
1258 //
1259 // constructors and destructor
1260 //
1262  : mfToken_(esConsumes()),
1263  ttrhToken_(esConsumes(edm::ESInputTag("", iConfig.getUntrackedParameter<std::string>("TTRHBuilder")))),
1264  tTopoToken_(esConsumes()),
1265  tGeomToken_(esConsumes()),
1266  paramsDefineToken_(
1267  esConsumes(edm::ESInputTag("", iConfig.getUntrackedParameter<std::string>("parametersDefiner")))),
1268  trackToken_(consumes<edm::View<reco::Track>>(iConfig.getUntrackedParameter<edm::InputTag>("tracks"))),
1269  clusterTPMapToken_(consumes<ClusterTPAssociation>(iConfig.getUntrackedParameter<edm::InputTag>("clusterTPMap"))),
1270  simHitTPMapToken_(consumes<SimHitTPAssociationProducer::SimHitTPAssociationList>(
1271  iConfig.getUntrackedParameter<edm::InputTag>("simHitTPMap"))),
1272  trackAssociatorToken_(consumes<reco::TrackToTrackingParticleAssociator>(
1273  iConfig.getUntrackedParameter<edm::InputTag>("trackAssociator"))),
1274  pixelSimLinkToken_(consumes<edm::DetSetVector<PixelDigiSimLink>>(
1275  iConfig.getUntrackedParameter<edm::InputTag>("pixelDigiSimLink"))),
1276  stripSimLinkToken_(consumes<edm::DetSetVector<StripDigiSimLink>>(
1277  iConfig.getUntrackedParameter<edm::InputTag>("stripDigiSimLink"))),
1278  siphase2OTSimLinksToken_(consumes<edm::DetSetVector<PixelDigiSimLink>>(
1279  iConfig.getUntrackedParameter<edm::InputTag>("phase2OTSimLink"))),
1280  includeStripHits_(!iConfig.getUntrackedParameter<edm::InputTag>("stripDigiSimLink").label().empty()),
1281  includePhase2OTHits_(!iConfig.getUntrackedParameter<edm::InputTag>("phase2OTSimLink").label().empty()),
1282  beamSpotToken_(consumes<reco::BeamSpot>(iConfig.getUntrackedParameter<edm::InputTag>("beamSpot"))),
1283  pixelRecHitToken_(
1284  consumes<SiPixelRecHitCollection>(iConfig.getUntrackedParameter<edm::InputTag>("pixelRecHits"))),
1285  stripRphiRecHitToken_(
1286  consumes<SiStripRecHit2DCollection>(iConfig.getUntrackedParameter<edm::InputTag>("stripRphiRecHits"))),
1287  stripStereoRecHitToken_(
1288  consumes<SiStripRecHit2DCollection>(iConfig.getUntrackedParameter<edm::InputTag>("stripStereoRecHits"))),
1289  stripMatchedRecHitToken_(consumes<SiStripMatchedRecHit2DCollection>(
1290  iConfig.getUntrackedParameter<edm::InputTag>("stripMatchedRecHits"))),
1291  phase2OTRecHitToken_(consumes<Phase2TrackerRecHit1DCollectionNew>(
1292  iConfig.getUntrackedParameter<edm::InputTag>("phase2OTRecHits"))),
1293  vertexToken_(consumes<reco::VertexCollection>(iConfig.getUntrackedParameter<edm::InputTag>("vertices"))),
1294  trackingVertexToken_(
1295  consumes<TrackingVertexCollection>(iConfig.getUntrackedParameter<edm::InputTag>("trackingVertices"))),
1296  tpNLayersToken_(consumes<edm::ValueMap<unsigned int>>(
1297  iConfig.getUntrackedParameter<edm::InputTag>("trackingParticleNlayers"))),
1298  tpNPixelLayersToken_(consumes<edm::ValueMap<unsigned int>>(
1299  iConfig.getUntrackedParameter<edm::InputTag>("trackingParticleNpixellayers"))),
1300  tpNStripStereoLayersToken_(consumes<edm::ValueMap<unsigned int>>(
1301  iConfig.getUntrackedParameter<edm::InputTag>("trackingParticleNstripstereolayers"))),
1302  includeSeeds_(iConfig.getUntrackedParameter<bool>("includeSeeds")),
1303  includeAllHits_(iConfig.getUntrackedParameter<bool>("includeAllHits")),
1304  includeMVA_(iConfig.getUntrackedParameter<bool>("includeMVA")),
1305  includeTrackingParticles_(iConfig.getUntrackedParameter<bool>("includeTrackingParticles")) {
1306  if (includeSeeds_) {
1307  seedTokens_ =
1308  edm::vector_transform(iConfig.getUntrackedParameter<std::vector<edm::InputTag>>("seedTracks"),
1309  [&](const edm::InputTag& tag) { return consumes<edm::View<reco::Track>>(tag); });
1311  edm::vector_transform(iConfig.getUntrackedParameter<std::vector<edm::InputTag>>("trackCandidates"),
1312  [&](const edm::InputTag& tag) { return consumes<std::vector<SeedStopInfo>>(tag); });
1313  if (seedTokens_.size() != seedStopInfoTokens_.size()) {
1314  throw cms::Exception("Configuration") << "Got " << seedTokens_.size() << " seed collections, but "
1315  << seedStopInfoTokens_.size() << " track candidate collections";
1316  }
1317  }
1318 
1319  if (includeAllHits_) {
1321  throw cms::Exception("Configuration")
1322  << "Both stripDigiSimLink and phase2OTSimLink are set, please set only either one (this information is used "
1323  "to infer if you're running phase0/1 or phase2 detector)";
1324  }
1326  throw cms::Exception("Configuration")
1327  << "Neither stripDigiSimLink or phase2OTSimLink are set, please set either one.";
1328  }
1329  }
1330 
1331  const bool tpRef = iConfig.getUntrackedParameter<bool>("trackingParticlesRef");
1332  const auto tpTag = iConfig.getUntrackedParameter<edm::InputTag>("trackingParticles");
1333  if (tpRef) {
1334  trackingParticleRefToken_ = consumes<TrackingParticleRefVector>(tpTag);
1335  } else {
1336  trackingParticleToken_ = consumes<TrackingParticleCollection>(tpTag);
1337  }
1338 
1339  tracer_.depth(-2); // as in SimTracker/TrackHistory/src/TrackClassifier.cc
1340 
1341  if (includeMVA_) {
1343  iConfig.getUntrackedParameter<std::vector<std::string>>("trackMVAs"), [&](const std::string& tag) {
1344  return std::make_tuple(consumes<MVACollection>(edm::InputTag(tag, "MVAValues")),
1345  consumes<QualityMaskCollection>(edm::InputTag(tag, "QualityMasks")));
1346  });
1347  }
1348 
1349  usesResource(TFileService::kSharedResource);
1351  t = fs->make<TTree>("tree", "tree");
1352 
1353  t->Branch("event", &ev_event);
1354  t->Branch("lumi", &ev_lumi);
1355  t->Branch("run", &ev_run);
1356 
1357  //tracks
1358  t->Branch("trk_px", &trk_px);
1359  t->Branch("trk_py", &trk_py);
1360  t->Branch("trk_pz", &trk_pz);
1361  t->Branch("trk_pt", &trk_pt);
1362  t->Branch("trk_inner_px", &trk_inner_px);
1363  t->Branch("trk_inner_py", &trk_inner_py);
1364  t->Branch("trk_inner_pz", &trk_inner_pz);
1365  t->Branch("trk_inner_pt", &trk_inner_pt);
1366  t->Branch("trk_outer_px", &trk_outer_px);
1367  t->Branch("trk_outer_py", &trk_outer_py);
1368  t->Branch("trk_outer_pz", &trk_outer_pz);
1369  t->Branch("trk_outer_pt", &trk_outer_pt);
1370  t->Branch("trk_eta", &trk_eta);
1371  t->Branch("trk_lambda", &trk_lambda);
1372  t->Branch("trk_cotTheta", &trk_cotTheta);
1373  t->Branch("trk_phi", &trk_phi);
1374  t->Branch("trk_dxy", &trk_dxy);
1375  t->Branch("trk_dz", &trk_dz);
1376  t->Branch("trk_dxyPV", &trk_dxyPV);
1377  t->Branch("trk_dzPV", &trk_dzPV);
1378  t->Branch("trk_dxyClosestPV", &trk_dxyClosestPV);
1379  t->Branch("trk_dzClosestPV", &trk_dzClosestPV);
1380  t->Branch("trk_ptErr", &trk_ptErr);
1381  t->Branch("trk_etaErr", &trk_etaErr);
1382  t->Branch("trk_lambdaErr", &trk_lambdaErr);
1383  t->Branch("trk_phiErr", &trk_phiErr);
1384  t->Branch("trk_dxyErr", &trk_dxyErr);
1385  t->Branch("trk_dzErr", &trk_dzErr);
1386  t->Branch("trk_refpoint_x", &trk_refpoint_x);
1387  t->Branch("trk_refpoint_y", &trk_refpoint_y);
1388  t->Branch("trk_refpoint_z", &trk_refpoint_z);
1389  t->Branch("trk_nChi2", &trk_nChi2);
1390  t->Branch("trk_nChi2_1Dmod", &trk_nChi2_1Dmod);
1391  t->Branch("trk_ndof", &trk_ndof);
1392  if (includeMVA_) {
1393  trk_mvas.resize(mvaQualityCollectionTokens_.size());
1395  if (!trk_mvas.empty()) {
1396  t->Branch("trk_mva", &(trk_mvas[0]));
1397  t->Branch("trk_qualityMask", &(trk_qualityMasks[0]));
1398  for (size_t i = 1; i < trk_mvas.size(); ++i) {
1399  t->Branch(("trk_mva" + std::to_string(i + 1)).c_str(), &(trk_mvas[i]));
1400  t->Branch(("trk_qualityMask" + std::to_string(i + 1)).c_str(), &(trk_qualityMasks[i]));
1401  }
1402  }
1403  }
1404  t->Branch("trk_q", &trk_q);
1405  t->Branch("trk_nValid", &trk_nValid);
1406  t->Branch("trk_nLost", &trk_nLost);
1407  t->Branch("trk_nInactive", &trk_nInactive);
1408  t->Branch("trk_nPixel", &trk_nPixel);
1409  t->Branch("trk_nStrip", &trk_nStrip);
1410  t->Branch("trk_nOuterLost", &trk_nOuterLost);
1411  t->Branch("trk_nInnerLost", &trk_nInnerLost);
1412  t->Branch("trk_nOuterInactive", &trk_nOuterInactive);
1413  t->Branch("trk_nInnerInactive", &trk_nInnerInactive);
1414  t->Branch("trk_nPixelLay", &trk_nPixelLay);
1415  t->Branch("trk_nStripLay", &trk_nStripLay);
1416  t->Branch("trk_n3DLay", &trk_n3DLay);
1417  t->Branch("trk_nLostLay", &trk_nLostLay);
1418  t->Branch("trk_nCluster", &trk_nCluster);
1419  t->Branch("trk_algo", &trk_algo);
1420  t->Branch("trk_originalAlgo", &trk_originalAlgo);
1421  t->Branch("trk_algoMask", &trk_algoMask);
1422  t->Branch("trk_stopReason", &trk_stopReason);
1423  t->Branch("trk_isHP", &trk_isHP);
1424  if (includeSeeds_) {
1425  t->Branch("trk_seedIdx", &trk_seedIdx);
1426  }
1427  t->Branch("trk_vtxIdx", &trk_vtxIdx);
1429  t->Branch("trk_simTrkIdx", &trk_simTrkIdx);
1430  t->Branch("trk_simTrkShareFrac", &trk_simTrkShareFrac);
1431  t->Branch("trk_simTrkNChi2", &trk_simTrkNChi2);
1432  t->Branch("trk_bestSimTrkIdx", &trk_bestSimTrkIdx);
1433  t->Branch("trk_bestFromFirstHitSimTrkIdx", &trk_bestFromFirstHitSimTrkIdx);
1434  } else {
1435  t->Branch("trk_isTrue", &trk_isTrue);
1436  }
1437  t->Branch("trk_bestSimTrkShareFrac", &trk_bestSimTrkShareFrac);
1438  t->Branch("trk_bestSimTrkShareFracSimDenom", &trk_bestSimTrkShareFracSimDenom);
1439  t->Branch("trk_bestSimTrkShareFracSimClusterDenom", &trk_bestSimTrkShareFracSimClusterDenom);
1440  t->Branch("trk_bestSimTrkNChi2", &trk_bestSimTrkNChi2);
1441  t->Branch("trk_bestFromFirstHitSimTrkShareFrac", &trk_bestFromFirstHitSimTrkShareFrac);
1442  t->Branch("trk_bestFromFirstHitSimTrkShareFracSimDenom", &trk_bestFromFirstHitSimTrkShareFracSimDenom);
1443  t->Branch("trk_bestFromFirstHitSimTrkShareFracSimClusterDenom", &trk_bestFromFirstHitSimTrkShareFracSimClusterDenom);
1444  t->Branch("trk_bestFromFirstHitSimTrkNChi2", &trk_bestFromFirstHitSimTrkNChi2);
1445  if (includeAllHits_) {
1446  t->Branch("trk_hitIdx", &trk_hitIdx);
1447  t->Branch("trk_hitType", &trk_hitType);
1448  }
1450  //sim tracks
1451  t->Branch("sim_event", &sim_event);
1452  t->Branch("sim_bunchCrossing", &sim_bunchCrossing);
1453  t->Branch("sim_pdgId", &sim_pdgId);
1454  t->Branch("sim_genPdgIds", &sim_genPdgIds);
1455  t->Branch("sim_isFromBHadron", &sim_isFromBHadron);
1456  t->Branch("sim_px", &sim_px);
1457  t->Branch("sim_py", &sim_py);
1458  t->Branch("sim_pz", &sim_pz);
1459  t->Branch("sim_pt", &sim_pt);
1460  t->Branch("sim_eta", &sim_eta);
1461  t->Branch("sim_phi", &sim_phi);
1462  t->Branch("sim_pca_pt", &sim_pca_pt);
1463  t->Branch("sim_pca_eta", &sim_pca_eta);
1464  t->Branch("sim_pca_lambda", &sim_pca_lambda);
1465  t->Branch("sim_pca_cotTheta", &sim_pca_cotTheta);
1466  t->Branch("sim_pca_phi", &sim_pca_phi);
1467  t->Branch("sim_pca_dxy", &sim_pca_dxy);
1468  t->Branch("sim_pca_dz", &sim_pca_dz);
1469  t->Branch("sim_q", &sim_q);
1470  t->Branch("sim_nValid", &sim_nValid);
1471  t->Branch("sim_nPixel", &sim_nPixel);
1472  t->Branch("sim_nStrip", &sim_nStrip);
1473  t->Branch("sim_nLay", &sim_nLay);
1474  t->Branch("sim_nPixelLay", &sim_nPixelLay);
1475  t->Branch("sim_n3DLay", &sim_n3DLay);
1476  t->Branch("sim_nTrackerHits", &sim_nTrackerHits);
1477  t->Branch("sim_nRecoClusters", &sim_nRecoClusters);
1478  t->Branch("sim_trkIdx", &sim_trkIdx);
1479  t->Branch("sim_trkShareFrac", &sim_trkShareFrac);
1480  if (includeSeeds_) {
1481  t->Branch("sim_seedIdx", &sim_seedIdx);
1482  }
1483  t->Branch("sim_parentVtxIdx", &sim_parentVtxIdx);
1484  t->Branch("sim_decayVtxIdx", &sim_decayVtxIdx);
1485  if (includeAllHits_) {
1486  t->Branch("sim_simHitIdx", &sim_simHitIdx);
1487  }
1488  }
1489  if (includeAllHits_) {
1490  //pixels
1491  t->Branch("pix_isBarrel", &pix_isBarrel);
1492  pix_detId.book("pix", t);
1493  t->Branch("pix_trkIdx", &pix_trkIdx);
1494  if (includeSeeds_) {
1495  t->Branch("pix_seeIdx", &pix_seeIdx);
1496  }
1498  t->Branch("pix_simHitIdx", &pix_simHitIdx);
1499  t->Branch("pix_chargeFraction", &pix_chargeFraction);
1500  t->Branch("pix_simType", &pix_simType);
1501  }
1502  t->Branch("pix_x", &pix_x);
1503  t->Branch("pix_y", &pix_y);
1504  t->Branch("pix_z", &pix_z);
1505  t->Branch("pix_xx", &pix_xx);
1506  t->Branch("pix_xy", &pix_xy);
1507  t->Branch("pix_yy", &pix_yy);
1508  t->Branch("pix_yz", &pix_yz);
1509  t->Branch("pix_zz", &pix_zz);
1510  t->Branch("pix_zx", &pix_zx);
1511  t->Branch("pix_radL", &pix_radL);
1512  t->Branch("pix_bbxi", &pix_bbxi);
1513  t->Branch("pix_bbxi", &pix_bbxi);
1514  //strips
1515  if (includeStripHits_) {
1516  t->Branch("str_isBarrel", &str_isBarrel);
1517  str_detId.book("str", t);
1518  t->Branch("str_trkIdx", &str_trkIdx);
1519  if (includeSeeds_) {
1520  t->Branch("str_seeIdx", &str_seeIdx);
1521  }
1523  t->Branch("str_simHitIdx", &str_simHitIdx);
1524  t->Branch("str_chargeFraction", &str_chargeFraction);
1525  t->Branch("str_simType", &str_simType);
1526  }
1527  t->Branch("str_x", &str_x);
1528  t->Branch("str_y", &str_y);
1529  t->Branch("str_z", &str_z);
1530  t->Branch("str_xx", &str_xx);
1531  t->Branch("str_xy", &str_xy);
1532  t->Branch("str_yy", &str_yy);
1533  t->Branch("str_yz", &str_yz);
1534  t->Branch("str_zz", &str_zz);
1535  t->Branch("str_zx", &str_zx);
1536  t->Branch("str_radL", &str_radL);
1537  t->Branch("str_bbxi", &str_bbxi);
1538  //matched hits
1539  t->Branch("glu_isBarrel", &glu_isBarrel);
1540  glu_detId.book("glu", t);
1541  t->Branch("glu_monoIdx", &glu_monoIdx);
1542  t->Branch("glu_stereoIdx", &glu_stereoIdx);
1543  if (includeSeeds_) {
1544  t->Branch("glu_seeIdx", &glu_seeIdx);
1545  }
1546  t->Branch("glu_x", &glu_x);
1547  t->Branch("glu_y", &glu_y);
1548  t->Branch("glu_z", &glu_z);
1549  t->Branch("glu_xx", &glu_xx);
1550  t->Branch("glu_xy", &glu_xy);
1551  t->Branch("glu_yy", &glu_yy);
1552  t->Branch("glu_yz", &glu_yz);
1553  t->Branch("glu_zz", &glu_zz);
1554  t->Branch("glu_zx", &glu_zx);
1555  t->Branch("glu_radL", &glu_radL);
1556  t->Branch("glu_bbxi", &glu_bbxi);
1557  }
1558  //phase2 OT
1559  if (includePhase2OTHits_) {
1560  t->Branch("ph2_isBarrel", &ph2_isBarrel);
1561  ph2_detId.book("ph2", t);
1562  t->Branch("ph2_trkIdx", &ph2_trkIdx);
1563  if (includeSeeds_) {
1564  t->Branch("ph2_seeIdx", &ph2_seeIdx);
1565  }
1567  t->Branch("ph2_simHitIdx", &ph2_simHitIdx);
1568  t->Branch("ph2_simType", &ph2_simType);
1569  }
1570  t->Branch("ph2_x", &ph2_x);
1571  t->Branch("ph2_y", &ph2_y);
1572  t->Branch("ph2_z", &ph2_z);
1573  t->Branch("ph2_xx", &ph2_xx);
1574  t->Branch("ph2_xy", &ph2_xy);
1575  t->Branch("ph2_yy", &ph2_yy);
1576  t->Branch("ph2_yz", &ph2_yz);
1577  t->Branch("ph2_zz", &ph2_zz);
1578  t->Branch("ph2_zx", &ph2_zx);
1579  t->Branch("ph2_radL", &ph2_radL);
1580  t->Branch("ph2_bbxi", &ph2_bbxi);
1581  t->Branch("ph2_bbxi", &ph2_bbxi);
1582  }
1583  //invalid hits
1584  t->Branch("inv_isBarrel", &inv_isBarrel);
1585  if (includeStripHits_)
1586  inv_detId.book("inv", t);
1587  else
1588  inv_detId_phase2.book("inv", t);
1589  t->Branch("inv_type", &inv_type);
1590  //simhits
1592  if (includeStripHits_)
1593  simhit_detId.book("simhit", t);
1594  else
1595  simhit_detId_phase2.book("simhit", t);
1596  t->Branch("simhit_x", &simhit_x);
1597  t->Branch("simhit_y", &simhit_y);
1598  t->Branch("simhit_z", &simhit_z);
1599  t->Branch("simhit_particle", &simhit_particle);
1600  t->Branch("simhit_process", &simhit_process);
1601  t->Branch("simhit_eloss", &simhit_eloss);
1602  t->Branch("simhit_tof", &simhit_tof);
1603  t->Branch("simhit_simTrkIdx", &simhit_simTrkIdx);
1604  t->Branch("simhit_hitIdx", &simhit_hitIdx);
1605  t->Branch("simhit_hitType", &simhit_hitType);
1606  }
1607  }
1608  //beam spot
1609  t->Branch("bsp_x", &bsp_x, "bsp_x/F");
1610  t->Branch("bsp_y", &bsp_y, "bsp_y/F");
1611  t->Branch("bsp_z", &bsp_z, "bsp_z/F");
1612  t->Branch("bsp_sigmax", &bsp_sigmax, "bsp_sigmax/F");
1613  t->Branch("bsp_sigmay", &bsp_sigmay, "bsp_sigmay/F");
1614  t->Branch("bsp_sigmaz", &bsp_sigmaz, "bsp_sigmaz/F");
1615  if (includeSeeds_) {
1616  //seeds
1617  t->Branch("see_fitok", &see_fitok);
1618  t->Branch("see_px", &see_px);
1619  t->Branch("see_py", &see_py);
1620  t->Branch("see_pz", &see_pz);
1621  t->Branch("see_pt", &see_pt);
1622  t->Branch("see_eta", &see_eta);
1623  t->Branch("see_phi", &see_phi);
1624  t->Branch("see_dxy", &see_dxy);
1625  t->Branch("see_dz", &see_dz);
1626  t->Branch("see_ptErr", &see_ptErr);
1627  t->Branch("see_etaErr", &see_etaErr);
1628  t->Branch("see_phiErr", &see_phiErr);
1629  t->Branch("see_dxyErr", &see_dxyErr);
1630  t->Branch("see_dzErr", &see_dzErr);
1631  t->Branch("see_chi2", &see_chi2);
1632  t->Branch("see_statePt", &see_statePt);
1633  t->Branch("see_stateTrajX", &see_stateTrajX);
1634  t->Branch("see_stateTrajY", &see_stateTrajY);
1635  t->Branch("see_stateTrajPx", &see_stateTrajPx);
1636  t->Branch("see_stateTrajPy", &see_stateTrajPy);
1637  t->Branch("see_stateTrajPz", &see_stateTrajPz);
1638  t->Branch("see_q", &see_q);
1639  t->Branch("see_nValid", &see_nValid);
1640  t->Branch("see_nPixel", &see_nPixel);
1641  t->Branch("see_nGlued", &see_nGlued);
1642  t->Branch("see_nStrip", &see_nStrip);
1643  t->Branch("see_nPhase2OT", &see_nPhase2OT);
1644  t->Branch("see_nCluster", &see_nCluster);
1645  t->Branch("see_algo", &see_algo);
1646  t->Branch("see_stopReason", &see_stopReason);
1647  t->Branch("see_nCands", &see_nCands);
1648  t->Branch("see_trkIdx", &see_trkIdx);
1650  t->Branch("see_simTrkIdx", &see_simTrkIdx);
1651  t->Branch("see_simTrkShareFrac", &see_simTrkShareFrac);
1652  t->Branch("see_bestSimTrkIdx", &see_bestSimTrkIdx);
1653  t->Branch("see_bestFromFirstHitSimTrkIdx", &see_bestFromFirstHitSimTrkIdx);
1654  } else {
1655  t->Branch("see_isTrue", &see_isTrue);
1656  }
1657  t->Branch("see_bestSimTrkShareFrac", &see_bestSimTrkShareFrac);
1658  t->Branch("see_bestFromFirstHitSimTrkShareFrac", &see_bestFromFirstHitSimTrkShareFrac);
1659  if (includeAllHits_) {
1660  t->Branch("see_hitIdx", &see_hitIdx);
1661  t->Branch("see_hitType", &see_hitType);
1662  }
1663  //seed algo offset
1664  t->Branch("see_offset", &see_offset);
1665  }
1666 
1667  //vertices
1668  t->Branch("vtx_x", &vtx_x);
1669  t->Branch("vtx_y", &vtx_y);
1670  t->Branch("vtx_z", &vtx_z);
1671  t->Branch("vtx_xErr", &vtx_xErr);
1672  t->Branch("vtx_yErr", &vtx_yErr);
1673  t->Branch("vtx_zErr", &vtx_zErr);
1674  t->Branch("vtx_ndof", &vtx_ndof);
1675  t->Branch("vtx_chi2", &vtx_chi2);
1676  t->Branch("vtx_fake", &vtx_fake);
1677  t->Branch("vtx_valid", &vtx_valid);
1678  t->Branch("vtx_trkIdx", &vtx_trkIdx);
1679 
1680  // tracking vertices
1681  t->Branch("simvtx_event", &simvtx_event);
1682  t->Branch("simvtx_bunchCrossing", &simvtx_bunchCrossing);
1683  t->Branch("simvtx_processType", &simvtx_processType);
1684  t->Branch("simvtx_x", &simvtx_x);
1685  t->Branch("simvtx_y", &simvtx_y);
1686  t->Branch("simvtx_z", &simvtx_z);
1687  t->Branch("simvtx_sourceSimIdx", &simvtx_sourceSimIdx);
1688  t->Branch("simvtx_daughterSimIdx", &simvtx_daughterSimIdx);
1689 
1690  t->Branch("simpv_idx", &simpv_idx);
1691 
1692  //t->Branch("" , &);
1693 }
1694 
1696  // do anything here that needs to be done at desctruction time
1697  // (e.g. close files, deallocate resources etc.)
1698 }
1699 
1700 //
1701 // member functions
1702 //
1704  ev_run = 0;
1705  ev_lumi = 0;
1706  ev_event = 0;
1707 
1708  //tracks
1709  trk_px.clear();
1710  trk_py.clear();
1711  trk_pz.clear();
1712  trk_pt.clear();
1713  trk_inner_px.clear();
1714  trk_inner_py.clear();
1715  trk_inner_pz.clear();
1716  trk_inner_pt.clear();
1717  trk_outer_px.clear();
1718  trk_outer_py.clear();
1719  trk_outer_pz.clear();
1720  trk_outer_pt.clear();
1721  trk_eta.clear();
1722  trk_lambda.clear();
1723  trk_cotTheta.clear();
1724  trk_phi.clear();
1725  trk_dxy.clear();
1726  trk_dz.clear();
1727  trk_dxyPV.clear();
1728  trk_dzPV.clear();
1729  trk_dxyClosestPV.clear();
1730  trk_dzClosestPV.clear();
1731  trk_ptErr.clear();
1732  trk_etaErr.clear();
1733  trk_lambdaErr.clear();
1734  trk_phiErr.clear();
1735  trk_dxyErr.clear();
1736  trk_dzErr.clear();
1737  trk_refpoint_x.clear();
1738  trk_refpoint_y.clear();
1739  trk_refpoint_z.clear();
1740  trk_nChi2.clear();
1741  trk_nChi2_1Dmod.clear();
1742  trk_ndof.clear();
1743  for (auto& mva : trk_mvas) {
1744  mva.clear();
1745  }
1746  for (auto& mask : trk_qualityMasks) {
1747  mask.clear();
1748  }
1749  trk_q.clear();
1750  trk_nValid.clear();
1751  trk_nLost.clear();
1752  trk_nInactive.clear();
1753  trk_nPixel.clear();
1754  trk_nStrip.clear();
1755  trk_nOuterLost.clear();
1756  trk_nInnerLost.clear();
1757  trk_nOuterInactive.clear();
1758  trk_nInnerInactive.clear();
1759  trk_nPixelLay.clear();
1760  trk_nStripLay.clear();
1761  trk_n3DLay.clear();
1762  trk_nLostLay.clear();
1763  trk_nCluster.clear();
1764  trk_algo.clear();
1765  trk_originalAlgo.clear();
1766  trk_algoMask.clear();
1767  trk_stopReason.clear();
1768  trk_isHP.clear();
1769  trk_seedIdx.clear();
1770  trk_vtxIdx.clear();
1771  trk_isTrue.clear();
1772  trk_bestSimTrkIdx.clear();
1773  trk_bestSimTrkShareFrac.clear();
1776  trk_bestSimTrkNChi2.clear();
1782  trk_simTrkIdx.clear();
1783  trk_simTrkShareFrac.clear();
1784  trk_simTrkNChi2.clear();
1785  trk_hitIdx.clear();
1786  trk_hitType.clear();
1787  //sim tracks
1788  sim_event.clear();
1789  sim_bunchCrossing.clear();
1790  sim_pdgId.clear();
1791  sim_genPdgIds.clear();
1792  sim_isFromBHadron.clear();
1793  sim_px.clear();
1794  sim_py.clear();
1795  sim_pz.clear();
1796  sim_pt.clear();
1797  sim_eta.clear();
1798  sim_phi.clear();
1799  sim_pca_pt.clear();
1800  sim_pca_eta.clear();
1801  sim_pca_lambda.clear();
1802  sim_pca_cotTheta.clear();
1803  sim_pca_phi.clear();
1804  sim_pca_dxy.clear();
1805  sim_pca_dz.clear();
1806  sim_q.clear();
1807  sim_nValid.clear();
1808  sim_nPixel.clear();
1809  sim_nStrip.clear();
1810  sim_nLay.clear();
1811  sim_nPixelLay.clear();
1812  sim_n3DLay.clear();
1813  sim_nTrackerHits.clear();
1814  sim_nRecoClusters.clear();
1815  sim_trkIdx.clear();
1816  sim_seedIdx.clear();
1817  sim_trkShareFrac.clear();
1818  sim_parentVtxIdx.clear();
1819  sim_decayVtxIdx.clear();
1820  sim_simHitIdx.clear();
1821  //pixels
1822  pix_isBarrel.clear();
1823  pix_detId.clear();
1824  pix_trkIdx.clear();
1825  pix_seeIdx.clear();
1826  pix_simHitIdx.clear();
1827  pix_chargeFraction.clear();
1828  pix_simType.clear();
1829  pix_x.clear();
1830  pix_y.clear();
1831  pix_z.clear();
1832  pix_xx.clear();
1833  pix_xy.clear();
1834  pix_yy.clear();
1835  pix_yz.clear();
1836  pix_zz.clear();
1837  pix_zx.clear();
1838  pix_radL.clear();
1839  pix_bbxi.clear();
1840  //strips
1841  str_isBarrel.clear();
1842  str_detId.clear();
1843  str_trkIdx.clear();
1844  str_seeIdx.clear();
1845  str_simHitIdx.clear();
1846  str_chargeFraction.clear();
1847  str_simType.clear();
1848  str_x.clear();
1849  str_y.clear();
1850  str_z.clear();
1851  str_xx.clear();
1852  str_xy.clear();
1853  str_yy.clear();
1854  str_yz.clear();
1855  str_zz.clear();
1856  str_zx.clear();
1857  str_radL.clear();
1858  str_bbxi.clear();
1859  //matched hits
1860  glu_isBarrel.clear();
1861  glu_detId.clear();
1862  glu_monoIdx.clear();
1863  glu_stereoIdx.clear();
1864  glu_seeIdx.clear();
1865  glu_x.clear();
1866  glu_y.clear();
1867  glu_z.clear();
1868  glu_xx.clear();
1869  glu_xy.clear();
1870  glu_yy.clear();
1871  glu_yz.clear();
1872  glu_zz.clear();
1873  glu_zx.clear();
1874  glu_radL.clear();
1875  glu_bbxi.clear();
1876  //phase2 OT
1877  ph2_isBarrel.clear();
1878  ph2_detId.clear();
1879  ph2_trkIdx.clear();
1880  ph2_seeIdx.clear();
1881  ph2_simHitIdx.clear();
1882  ph2_simType.clear();
1883  ph2_x.clear();
1884  ph2_y.clear();
1885  ph2_z.clear();
1886  ph2_xx.clear();
1887  ph2_xy.clear();
1888  ph2_yy.clear();
1889  ph2_yz.clear();
1890  ph2_zz.clear();
1891  ph2_zx.clear();
1892  ph2_radL.clear();
1893  ph2_bbxi.clear();
1894  //invalid hits
1895  inv_isBarrel.clear();
1896  inv_detId.clear();
1897  inv_detId_phase2.clear();
1898  inv_type.clear();
1899  // simhits
1900  simhit_detId.clear();
1901  simhit_detId_phase2.clear();
1902  simhit_x.clear();
1903  simhit_y.clear();
1904  simhit_z.clear();
1905  simhit_particle.clear();
1906  simhit_process.clear();
1907  simhit_eloss.clear();
1908  simhit_tof.clear();
1909  //simhit_simTrackId.clear();
1910  simhit_simTrkIdx.clear();
1911  simhit_hitIdx.clear();
1912  simhit_hitType.clear();
1913  //beamspot
1914  bsp_x = -9999.;
1915  bsp_y = -9999.;
1916  bsp_z = -9999.;
1917  bsp_sigmax = -9999.;
1918  bsp_sigmay = -9999.;
1919  bsp_sigmaz = -9999.;
1920  //seeds
1921  see_fitok.clear();
1922  see_px.clear();
1923  see_py.clear();
1924  see_pz.clear();
1925  see_pt.clear();
1926  see_eta.clear();
1927  see_phi.clear();
1928  see_dxy.clear();
1929  see_dz.clear();
1930  see_ptErr.clear();
1931  see_etaErr.clear();
1932  see_phiErr.clear();
1933  see_dxyErr.clear();
1934  see_dzErr.clear();
1935  see_chi2.clear();
1936  see_statePt.clear();
1937  see_stateTrajX.clear();
1938  see_stateTrajY.clear();
1939  see_stateTrajPx.clear();
1940  see_stateTrajPy.clear();
1941  see_stateTrajPz.clear();
1942  see_q.clear();
1943  see_nValid.clear();
1944  see_nPixel.clear();
1945  see_nGlued.clear();
1946  see_nStrip.clear();
1947  see_nPhase2OT.clear();
1948  see_nCluster.clear();
1949  see_algo.clear();
1950  see_stopReason.clear();
1951  see_nCands.clear();
1952  see_trkIdx.clear();
1953  see_isTrue.clear();
1954  see_bestSimTrkIdx.clear();
1955  see_bestSimTrkShareFrac.clear();
1958  see_simTrkIdx.clear();
1959  see_simTrkShareFrac.clear();
1960  see_hitIdx.clear();
1961  see_hitType.clear();
1962  //seed algo offset
1963  see_offset.clear();
1964 
1965  // vertices
1966  vtx_x.clear();
1967  vtx_y.clear();
1968  vtx_z.clear();
1969  vtx_xErr.clear();
1970  vtx_yErr.clear();
1971  vtx_zErr.clear();
1972  vtx_ndof.clear();
1973  vtx_chi2.clear();
1974  vtx_fake.clear();
1975  vtx_valid.clear();
1976  vtx_trkIdx.clear();
1977 
1978  // Tracking vertices
1979  simvtx_event.clear();
1980  simvtx_bunchCrossing.clear();
1981  simvtx_processType.clear();
1982  simvtx_x.clear();
1983  simvtx_y.clear();
1984  simvtx_z.clear();
1985  simvtx_sourceSimIdx.clear();
1986  simvtx_daughterSimIdx.clear();
1987  simpv_idx.clear();
1988 }
1989 
1990 // ------------ method called for each event ------------
1992  using namespace edm;
1993  using namespace reco;
1994  using namespace std;
1995 
1996  const auto& mf = iSetup.getData(mfToken_);
1997  const auto& theTTRHBuilder = &iSetup.getData(ttrhToken_);
1998  const TrackerTopology& tTopo = iSetup.getData(tTopoToken_);
1999  const TrackerGeometry& tracker = iSetup.getData(tGeomToken_);
2000 
2002  iEvent.getByToken(trackAssociatorToken_, theAssociator);
2003  const reco::TrackToTrackingParticleAssociator& associatorByHits = *theAssociator;
2004 
2005  LogDebug("TrackingNtuple") << "Analyzing new event";
2006 
2007  //initialize tree variables
2008  clearVariables();
2009 
2010  // FIXME: we really need to move to edm::View for reading the
2011  // TrackingParticles... Unfortunately it has non-trivial
2012  // consequences on the associator/association interfaces etc.
2014  const TrackingParticleRefVector* tmpTPptr = nullptr;
2016  edm::Handle<TrackingParticleRefVector> TPCollectionHRefVector;
2017 
2019  iEvent.getByToken(trackingParticleToken_, TPCollectionH);
2020  for (size_t i = 0, size = TPCollectionH->size(); i < size; ++i) {
2021  tmpTP.push_back(TrackingParticleRef(TPCollectionH, i));
2022  }
2023  tmpTPptr = &tmpTP;
2024  } else {
2025  iEvent.getByToken(trackingParticleRefToken_, TPCollectionHRefVector);
2026  tmpTPptr = TPCollectionHRefVector.product();
2027  }
2028  const TrackingParticleRefVector& tpCollection = *tmpTPptr;
2029 
2030  // Fill mapping from Ref::key() to index
2031  TrackingParticleRefKeyToIndex tpKeyToIndex;
2032  for (size_t i = 0; i < tpCollection.size(); ++i) {
2033  tpKeyToIndex[tpCollection[i].key()] = i;
2034  }
2035 
2036  // tracking vertices
2038  iEvent.getByToken(trackingVertexToken_, htv);
2039  const TrackingVertexCollection& tvs = *htv;
2040 
2041  // Fill mapping from Ref::key() to index
2042  TrackingVertexRefVector tvRefs;
2043  TrackingVertexRefKeyToIndex tvKeyToIndex;
2044  for (size_t i = 0; i < tvs.size(); ++i) {
2045  const TrackingVertex& v = tvs[i];
2046  if (v.eventId().bunchCrossing() != 0) // Ignore OOTPU; would be better to not to hardcode?
2047  continue;
2048  tvKeyToIndex[i] = tvRefs.size();
2049  tvRefs.push_back(TrackingVertexRef(htv, i));
2050  }
2051 
2052  //get association maps, etc.
2053  Handle<ClusterTPAssociation> pCluster2TPListH;
2054  iEvent.getByToken(clusterTPMapToken_, pCluster2TPListH);
2055  const ClusterTPAssociation& clusterToTPMap = *pCluster2TPListH;
2057  iEvent.getByToken(simHitTPMapToken_, simHitsTPAssoc);
2058 
2059  // TP -> cluster count
2060  TrackingParticleRefKeyToCount tpKeyToClusterCount;
2061  for (const auto& clusterTP : clusterToTPMap) {
2062  tpKeyToClusterCount[clusterTP.second.key()] += 1;
2063  }
2064 
2065  // SimHit key -> index mapping
2066  SimHitRefKeyToIndex simHitRefKeyToIndex;
2067 
2068  //make a list to link TrackingParticles to its simhits
2069  std::vector<TPHitIndex> tpHitList;
2070 
2071  // Count the number of reco cluster per TP
2072 
2073  std::set<edm::ProductID> hitProductIds;
2074  std::map<edm::ProductID, size_t> seedCollToOffset;
2075 
2076  ev_run = iEvent.id().run();
2077  ev_lumi = iEvent.id().luminosityBlock();
2078  ev_event = iEvent.id().event();
2079 
2080  // Digi->Sim links for pixels and strips
2081  edm::Handle<edm::DetSetVector<PixelDigiSimLink>> pixelDigiSimLinksHandle;
2082  iEvent.getByToken(pixelSimLinkToken_, pixelDigiSimLinksHandle);
2083  const auto& pixelDigiSimLinks = *pixelDigiSimLinksHandle;
2084 
2085  edm::Handle<edm::DetSetVector<StripDigiSimLink>> stripDigiSimLinksHandle;
2086  iEvent.getByToken(stripSimLinkToken_, stripDigiSimLinksHandle);
2087 
2088  // Phase2 OT DigiSimLink
2089  edm::Handle<edm::DetSetVector<PixelDigiSimLink>> siphase2OTSimLinksHandle;
2090  iEvent.getByToken(siphase2OTSimLinksToken_, siphase2OTSimLinksHandle);
2091 
2092  //beamspot
2093  Handle<reco::BeamSpot> recoBeamSpotHandle;
2094  iEvent.getByToken(beamSpotToken_, recoBeamSpotHandle);
2095  BeamSpot const& bs = *recoBeamSpotHandle;
2096  fillBeamSpot(bs);
2097 
2098  //prapare list to link matched hits to collection
2099  vector<pair<int, int>> monoStereoClusterList;
2100  if (includeAllHits_) {
2101  // simhits, only if TPs are saved as well
2103  fillSimHits(tracker, tpKeyToIndex, *simHitsTPAssoc, tTopo, simHitRefKeyToIndex, tpHitList);
2104  }
2105 
2106  //pixel hits
2108  clusterToTPMap,
2109  tpKeyToIndex,
2110  *simHitsTPAssoc,
2111  pixelDigiSimLinks,
2112  *theTTRHBuilder,
2113  tTopo,
2114  simHitRefKeyToIndex,
2115  hitProductIds);
2116 
2117  //strip hits
2118  if (includeStripHits_) {
2119  LogDebug("TrackingNtuple") << "foundStripSimLink";
2120  const auto& stripDigiSimLinks = *stripDigiSimLinksHandle;
2122  clusterToTPMap,
2123  tpKeyToIndex,
2124  *simHitsTPAssoc,
2125  stripDigiSimLinks,
2126  *theTTRHBuilder,
2127  tTopo,
2128  simHitRefKeyToIndex,
2129  hitProductIds);
2130 
2131  //matched hits
2132  fillStripMatchedHits(iEvent, *theTTRHBuilder, tTopo, monoStereoClusterList);
2133  }
2134 
2135  if (includePhase2OTHits_) {
2136  LogDebug("TrackingNtuple") << "foundPhase2OTSimLinks";
2137  const auto& phase2OTSimLinks = *siphase2OTSimLinksHandle;
2139  clusterToTPMap,
2140  tpKeyToIndex,
2141  *simHitsTPAssoc,
2142  phase2OTSimLinks,
2143  *theTTRHBuilder,
2144  tTopo,
2145  simHitRefKeyToIndex,
2146  hitProductIds);
2147  }
2148  }
2149 
2150  //seeds
2151  if (includeSeeds_) {
2152  fillSeeds(iEvent,
2153  tpCollection,
2154  tpKeyToIndex,
2155  bs,
2156  associatorByHits,
2157  clusterToTPMap,
2158  *theTTRHBuilder,
2159  mf,
2160  tTopo,
2161  monoStereoClusterList,
2162  hitProductIds,
2163  seedCollToOffset);
2164  }
2165 
2166  //tracks
2167  edm::Handle<edm::View<reco::Track>> tracksHandle;
2168  iEvent.getByToken(trackToken_, tracksHandle);
2169  const edm::View<reco::Track>& tracks = *tracksHandle;
2170  // The associator interfaces really need to be fixed...
2172  for (edm::View<Track>::size_type i = 0; i < tracks.size(); ++i) {
2173  trackRefs.push_back(tracks.refAt(i));
2174  }
2175  std::vector<const MVACollection*> mvaColls;
2176  std::vector<const QualityMaskCollection*> qualColls;
2177  if (includeMVA_) {
2180 
2181  for (const auto& tokenTpl : mvaQualityCollectionTokens_) {
2182  iEvent.getByToken(std::get<0>(tokenTpl), hmva);
2183  iEvent.getByToken(std::get<1>(tokenTpl), hqual);
2184 
2185  mvaColls.push_back(hmva.product());
2186  qualColls.push_back(hqual.product());
2187  if (mvaColls.back()->size() != tracks.size()) {
2188  throw cms::Exception("Configuration")
2189  << "Inconsistency in track collection and MVA sizes. Track collection has " << tracks.size()
2190  << " tracks, whereas the MVA " << (mvaColls.size() - 1) << " has " << mvaColls.back()->size()
2191  << " entries. Double-check your configuration.";
2192  }
2193  if (qualColls.back()->size() != tracks.size()) {
2194  throw cms::Exception("Configuration")
2195  << "Inconsistency in track collection and quality mask sizes. Track collection has " << tracks.size()
2196  << " tracks, whereas the quality mask " << (qualColls.size() - 1) << " has " << qualColls.back()->size()
2197  << " entries. Double-check your configuration.";
2198  }
2199  }
2200  }
2201 
2203  iEvent.getByToken(vertexToken_, vertices);
2204 
2205  fillTracks(trackRefs,
2206  tpCollection,
2207  tpKeyToIndex,
2208  tpKeyToClusterCount,
2209  mf,
2210  bs,
2211  *vertices,
2212  associatorByHits,
2213  clusterToTPMap,
2214  *theTTRHBuilder,
2215  tTopo,
2216  hitProductIds,
2217  seedCollToOffset,
2218  mvaColls,
2219  qualColls);
2220 
2221  //tracking particles
2222  //sort association maps with simHits
2223  std::sort(tpHitList.begin(), tpHitList.end(), tpHitIndexListLessSort);
2225  iEvent, iSetup, trackRefs, bs, tpCollection, tvKeyToIndex, associatorByHits, tpHitList, tpKeyToClusterCount);
2226 
2227  // vertices
2228  fillVertices(*vertices, trackRefs);
2229 
2230  // tracking vertices
2231  fillTrackingVertices(tvRefs, tpKeyToIndex);
2232 
2233  t->Fill();
2234 }
2235 
2237  bsp_x = bs.x0();
2238  bsp_y = bs.y0();
2239  bsp_z = bs.x0();
2240  bsp_sigmax = bs.BeamWidthX();
2241  bsp_sigmay = bs.BeamWidthY();
2242  bsp_sigmaz = bs.sigmaZ();
2243 }
2244 
2245 namespace {
2246  template <typename SimLink>
2247  struct GetCluster;
2248  template <>
2249  struct GetCluster<PixelDigiSimLink> {
2250  static const SiPixelCluster& call(const OmniClusterRef& cluster) { return cluster.pixelCluster(); }
2251  };
2252  template <>
2253  struct GetCluster<StripDigiSimLink> {
2254  static const SiStripCluster& call(const OmniClusterRef& cluster) { return cluster.stripCluster(); }
2255  };
2256 } // namespace
2257 
2258 template <typename SimLink>
2260  const OmniClusterRef& cluster,
2261  DetId hitId,
2262  int clusterKey,
2264  const ClusterTPAssociation& clusterToTPMap,
2265  const TrackingParticleRefKeyToIndex& tpKeyToIndex,
2268  const SimHitRefKeyToIndex& simHitRefKeyToIndex,
2269  HitType hitType) {
2270  SimHitData ret;
2271 
2272  std::map<unsigned int, double> simTrackIdToChargeFraction;
2273  if (hitType == HitType::Phase2OT)
2274  simTrackIdToChargeFraction = chargeFraction(cluster.phase2OTCluster(), hitId, digiSimLinks);
2275  else
2276  simTrackIdToChargeFraction = chargeFraction(GetCluster<SimLink>::call(cluster), hitId, digiSimLinks);
2277 
2278  ret.type = HitSimType::Noise;
2279  auto range = clusterToTPMap.equal_range(cluster);
2280  if (range.first != range.second) {
2281  for (auto ip = range.first; ip != range.second; ++ip) {
2282  const TrackingParticleRef& trackingParticle = ip->second;
2283 
2284  // Find out if the cluster is from signal/ITPU/OOTPU
2285  const auto event = trackingParticle->eventId().event();
2286  const auto bx = trackingParticle->eventId().bunchCrossing();
2288  if (bx == 0) {
2289  type = (event == 0 ? HitSimType::Signal : HitSimType::ITPileup);
2290  }
2291  ret.type = static_cast<HitSimType>(std::min(static_cast<int>(ret.type), static_cast<int>(type)));
2292 
2293  // Limit to only input TrackingParticles (usually signal+ITPU)
2294  auto tpIndex = tpKeyToIndex.find(trackingParticle.key());
2295  if (tpIndex == tpKeyToIndex.end())
2296  continue;
2297 
2298  //now get the corresponding sim hit
2299  std::pair<TrackingParticleRef, TrackPSimHitRef> simHitTPpairWithDummyTP(trackingParticle, TrackPSimHitRef());
2300  //SimHit is dummy: for simHitTPAssociationListGreater sorting only the TP is needed
2301  auto range = std::equal_range(simHitsTPAssoc.begin(),
2302  simHitsTPAssoc.end(),
2303  simHitTPpairWithDummyTP,
2305  bool foundSimHit = false;
2306  bool foundElectron = false;
2307  for (auto ip = range.first; ip != range.second; ++ip) {
2308  TrackPSimHitRef TPhit = ip->second;
2309  DetId dId = DetId(TPhit->detUnitId());
2310  if (dId.rawId() == hitId.rawId()) {
2311  // skip electron SimHits for non-electron TPs also here
2312  if (std::abs(TPhit->particleType()) == 11 && std::abs(trackingParticle->pdgId()) != 11) {
2313  foundElectron = true;
2314  continue;
2315  }
2316 
2317  foundSimHit = true;
2318  auto simHitKey = TPhit.key();
2319  auto simHitID = TPhit.id();
2320 
2321  auto simHitIndex = simHitRefKeyToIndex.at(std::make_pair(simHitKey, simHitID));
2322  ret.matchingSimHit.push_back(simHitIndex);
2323 
2324  double chargeFraction = 0.;
2325  for (const SimTrack& simtrk : trackingParticle->g4Tracks()) {
2326  auto found = simTrackIdToChargeFraction.find(simtrk.trackId());
2327  if (found != simTrackIdToChargeFraction.end()) {
2328  chargeFraction += found->second;
2329  }
2330  }
2331  ret.chargeFraction.push_back(chargeFraction);
2332 
2333  // only for debug prints
2334  ret.bunchCrossing.push_back(bx);
2335  ret.event.push_back(event);
2336 
2337  simhit_hitIdx[simHitIndex].push_back(clusterKey);
2338  simhit_hitType[simHitIndex].push_back(static_cast<int>(hitType));
2339  }
2340  }
2341  if (!foundSimHit) {
2342  // In case we didn't find a simhit because of filtered-out
2343  // electron SimHit, just ignore the missing SimHit.
2344  if (foundElectron)
2345  continue;
2346 
2347  auto ex = cms::Exception("LogicError")
2348  << "Did not find SimHit for reco hit DetId " << hitId.rawId() << " for TP " << trackingParticle.key()
2349  << " bx:event " << bx << ":" << event << ".\nFound SimHits from detectors ";
2350  for (auto ip = range.first; ip != range.second; ++ip) {
2351  TrackPSimHitRef TPhit = ip->second;
2352  DetId dId = DetId(TPhit->detUnitId());
2353  ex << dId.rawId() << " ";
2354  }
2355  if (trackingParticle->eventId().event() != 0) {
2356  ex << "\nSince this is a TrackingParticle from pileup, check that you're running the pileup mixing in "
2357  "playback mode.";
2358  }
2359  throw ex;
2360  }
2361  }
2362  }
2363 
2364  return ret;
2365 }
2366 
2368  const TrackingParticleRefKeyToIndex& tpKeyToIndex,
2370  const TrackerTopology& tTopo,
2371  SimHitRefKeyToIndex& simHitRefKeyToIndex,
2372  std::vector<TPHitIndex>& tpHitList) {
2373  for (const auto& assoc : simHitsTPAssoc) {
2374  auto tpKey = assoc.first.key();
2375 
2376  // SimHitTPAssociationList can contain more TrackingParticles than
2377  // what are given to this EDAnalyzer, so we can filter those out here.
2378  auto found = tpKeyToIndex.find(tpKey);
2379  if (found == tpKeyToIndex.end())
2380  continue;
2381  const auto tpIndex = found->second;
2382 
2383  // skip non-tracker simhits (mostly muons)
2384  const auto& simhit = *(assoc.second);
2385  auto detId = DetId(simhit.detUnitId());
2386  if (detId.det() != DetId::Tracker)
2387  continue;
2388 
2389  // Skip electron SimHits for non-electron TrackingParticles to
2390  // filter out delta rays. The delta ray hits just confuse. If we
2391  // need them later, let's add them as a separate "collection" of
2392  // hits of a TP
2393  const TrackingParticle& tp = *(assoc.first);
2394  if (std::abs(simhit.particleType()) == 11 && std::abs(tp.pdgId()) != 11)
2395  continue;
2396 
2397  auto simHitKey = std::make_pair(assoc.second.key(), assoc.second.id());
2398 
2399  if (simHitRefKeyToIndex.find(simHitKey) != simHitRefKeyToIndex.end()) {
2400  for (const auto& assoc2 : simHitsTPAssoc) {
2401  if (std::make_pair(assoc2.second.key(), assoc2.second.id()) == simHitKey) {
2402 #ifdef EDM_ML_DEBUG
2403  auto range1 = std::equal_range(simHitsTPAssoc.begin(),
2404  simHitsTPAssoc.end(),
2405  std::make_pair(assoc.first, TrackPSimHitRef()),
2407  auto range2 = std::equal_range(simHitsTPAssoc.begin(),
2408  simHitsTPAssoc.end(),
2409  std::make_pair(assoc2.first, TrackPSimHitRef()),
2411 
2412  LogTrace("TrackingNtuple") << "Earlier TP " << assoc2.first.key() << " SimTrack Ids";
2413  for (const auto& simTrack : assoc2.first->g4Tracks()) {
2414  edm::LogPrint("TrackingNtuple") << " SimTrack " << simTrack.trackId() << " BX:event "
2415  << simTrack.eventId().bunchCrossing() << ":" << simTrack.eventId().event();
2416  }
2417  for (auto iHit = range2.first; iHit != range2.second; ++iHit) {
2418  LogTrace("TrackingNtuple") << " SimHit " << iHit->second.key() << " " << iHit->second.id() << " tof "
2419  << iHit->second->tof() << " trackId " << iHit->second->trackId() << " BX:event "
2420  << iHit->second->eventId().bunchCrossing() << ":"
2421  << iHit->second->eventId().event();
2422  }
2423  LogTrace("TrackingNtuple") << "Current TP " << assoc.first.key() << " SimTrack Ids";
2424  for (const auto& simTrack : assoc.first->g4Tracks()) {
2425  edm::LogPrint("TrackingNtuple") << " SimTrack " << simTrack.trackId() << " BX:event "
2426  << simTrack.eventId().bunchCrossing() << ":" << simTrack.eventId().event();
2427  }
2428  for (auto iHit = range1.first; iHit != range1.second; ++iHit) {
2429  LogTrace("TrackingNtuple") << " SimHit " << iHit->second.key() << " " << iHit->second.id() << " tof "
2430  << iHit->second->tof() << " trackId " << iHit->second->trackId() << " BX:event "
2431  << iHit->second->eventId().bunchCrossing() << ":"
2432  << iHit->second->eventId().event();
2433  }
2434 #endif
2435 
2436  throw cms::Exception("LogicError")
2437  << "Got second time the SimHit " << simHitKey.first << " of " << simHitKey.second
2438  << ", first time with TrackingParticle " << assoc2.first.key() << ", now with " << tpKey;
2439  }
2440  }
2441  throw cms::Exception("LogicError") << "Got second time the SimHit " << simHitKey.first << " of "
2442  << simHitKey.second << ", now with TrackingParticle " << tpKey
2443  << ", but I didn't find the first occurrance!";
2444  }
2445 
2446  auto det = tracker.idToDetUnit(detId);
2447  if (!det)
2448  throw cms::Exception("LogicError") << "Did not find a det unit for DetId " << simhit.detUnitId()
2449  << " from tracker geometry";
2450 
2451  const auto pos = det->surface().toGlobal(simhit.localPosition());
2452  const float tof = simhit.timeOfFlight();
2453 
2454  const auto simHitIndex = simhit_x.size();
2455  simHitRefKeyToIndex[simHitKey] = simHitIndex;
2456 
2457  if (includeStripHits_)
2458  simhit_detId.push_back(tTopo, detId);
2459  else
2460  simhit_detId_phase2.push_back(tTopo, detId);
2461  simhit_x.push_back(pos.x());
2462  simhit_y.push_back(pos.y());
2463  simhit_z.push_back(pos.z());
2464  simhit_particle.push_back(simhit.particleType());
2465  simhit_process.push_back(simhit.processType());
2466  simhit_eloss.push_back(simhit.energyLoss());
2467  simhit_tof.push_back(tof);
2468  //simhit_simTrackId.push_back(simhit.trackId());
2469 
2470  simhit_simTrkIdx.push_back(tpIndex);
2471 
2472  simhit_hitIdx.emplace_back(); // filled in matchCluster
2473  simhit_hitType.emplace_back(); // filled in matchCluster
2474 
2475  tpHitList.emplace_back(tpKey, simHitIndex, tof, simhit.detUnitId());
2476  }
2477 }
2478 
2480  const ClusterTPAssociation& clusterToTPMap,
2481  const TrackingParticleRefKeyToIndex& tpKeyToIndex,
2483  const edm::DetSetVector<PixelDigiSimLink>& digiSimLink,
2484  const TransientTrackingRecHitBuilder& theTTRHBuilder,
2485  const TrackerTopology& tTopo,
2486  const SimHitRefKeyToIndex& simHitRefKeyToIndex,
2487  std::set<edm::ProductID>& hitProductIds) {
2489  iEvent.getByToken(pixelRecHitToken_, pixelHits);
2490  for (auto it = pixelHits->begin(); it != pixelHits->end(); it++) {
2491  const DetId hitId = it->detId();
2492  for (auto hit = it->begin(); hit != it->end(); hit++) {
2493  TransientTrackingRecHit::RecHitPointer ttrh = theTTRHBuilder.build(&*hit);
2494 
2495  hitProductIds.insert(hit->cluster().id());
2496 
2497  const int key = hit->cluster().key();
2498  const int lay = tTopo.layer(hitId);
2499 
2500  pix_isBarrel.push_back(hitId.subdetId() == 1);
2501  pix_detId.push_back(tTopo, hitId);
2502  pix_trkIdx.emplace_back(); // filled in fillTracks
2503  pix_seeIdx.emplace_back(); // filled in fillSeeds
2504  pix_x.push_back(ttrh->globalPosition().x());
2505  pix_y.push_back(ttrh->globalPosition().y());
2506  pix_z.push_back(ttrh->globalPosition().z());
2507  pix_xx.push_back(ttrh->globalPositionError().cxx());
2508  pix_xy.push_back(ttrh->globalPositionError().cyx());
2509  pix_yy.push_back(ttrh->globalPositionError().cyy());
2510  pix_yz.push_back(ttrh->globalPositionError().czy());
2511  pix_zz.push_back(ttrh->globalPositionError().czz());
2512  pix_zx.push_back(ttrh->globalPositionError().czx());
2513  pix_radL.push_back(ttrh->surface()->mediumProperties().radLen());
2514  pix_bbxi.push_back(ttrh->surface()->mediumProperties().xi());
2515 
2516  LogTrace("TrackingNtuple") << "pixHit cluster=" << key << " subdId=" << hitId.subdetId() << " lay=" << lay
2517  << " rawId=" << hitId.rawId() << " pos =" << ttrh->globalPosition();
2519  SimHitData simHitData = matchCluster(hit->firstClusterRef(),
2520  hitId,
2521  key,
2522  ttrh,
2523  clusterToTPMap,
2524  tpKeyToIndex,
2525  simHitsTPAssoc,
2526  digiSimLink,
2527  simHitRefKeyToIndex,
2528  HitType::Pixel);
2529  pix_simHitIdx.push_back(simHitData.matchingSimHit);
2530  pix_simType.push_back(static_cast<int>(simHitData.type));
2531  pix_chargeFraction.push_back(simHitData.chargeFraction);
2532  LogTrace("TrackingNtuple") << " nMatchingSimHit=" << simHitData.matchingSimHit.size();
2533  if (!simHitData.matchingSimHit.empty()) {
2534  const auto simHitIdx = simHitData.matchingSimHit[0];
2535  LogTrace("TrackingNtuple") << " firstMatchingSimHit=" << simHitIdx << " simHitPos="
2536  << GlobalPoint(simhit_x[simHitIdx], simhit_y[simHitIdx], simhit_z[simHitIdx])
2537  << " energyLoss=" << simhit_eloss[simHitIdx]
2538  << " particleType=" << simhit_particle[simHitIdx]
2539  << " processType=" << simhit_process[simHitIdx]
2540  << " bunchCrossing=" << simHitData.bunchCrossing[0]
2541  << " event=" << simHitData.event[0];
2542  }
2543  }
2544  }
2545  }
2546 }
2547 
2549  const ClusterTPAssociation& clusterToTPMap,
2550  const TrackingParticleRefKeyToIndex& tpKeyToIndex,
2552  const edm::DetSetVector<StripDigiSimLink>& digiSimLink,
2553  const TransientTrackingRecHitBuilder& theTTRHBuilder,
2554  const TrackerTopology& tTopo,
2555  const SimHitRefKeyToIndex& simHitRefKeyToIndex,
2556  std::set<edm::ProductID>& hitProductIds) {
2557  //index strip hit branches by cluster index
2559  iEvent.getByToken(stripRphiRecHitToken_, rphiHits);
2561  iEvent.getByToken(stripStereoRecHitToken_, stereoHits);
2562  int totalStripHits = rphiHits->dataSize() + stereoHits->dataSize();
2563  str_isBarrel.resize(totalStripHits);
2564  str_detId.resize(totalStripHits);
2565  str_trkIdx.resize(totalStripHits); // filled in fillTracks
2566  str_seeIdx.resize(totalStripHits); // filled in fillSeeds
2567  str_simHitIdx.resize(totalStripHits);
2568  str_simType.resize(totalStripHits);
2569  str_chargeFraction.resize(totalStripHits);
2570  str_x.resize(totalStripHits);
2571  str_y.resize(totalStripHits);
2572  str_z.resize(totalStripHits);
2573  str_xx.resize(totalStripHits);
2574  str_xy.resize(totalStripHits);
2575  str_yy.resize(totalStripHits);
2576  str_yz.resize(totalStripHits);
2577  str_zz.resize(totalStripHits);
2578  str_zx.resize(totalStripHits);
2579  str_radL.resize(totalStripHits);
2580  str_bbxi.resize(totalStripHits);
2581 
2582  auto fill = [&](const SiStripRecHit2DCollection& hits, const char* name) {
2583  for (const auto& detset : hits) {
2584  const DetId hitId = detset.detId();
2585  for (const auto& hit : detset) {
2586  TransientTrackingRecHit::RecHitPointer ttrh = theTTRHBuilder.build(&hit);
2587 
2588  hitProductIds.insert(hit.cluster().id());
2589 
2590  const int key = hit.cluster().key();
2591  const int lay = tTopo.layer(hitId);
2593  str_detId.set(key, tTopo, hitId);
2594  str_x[key] = ttrh->globalPosition().x();
2595  str_y[key] = ttrh->globalPosition().y();
2596  str_z[key] = ttrh->globalPosition().z();
2597  str_xx[key] = ttrh->globalPositionError().cxx();
2598  str_xy[key] = ttrh->globalPositionError().cyx();
2599  str_yy[key] = ttrh->globalPositionError().cyy();
2600  str_yz[key] = ttrh->globalPositionError().czy();
2601  str_zz[key] = ttrh->globalPositionError().czz();
2602  str_zx[key] = ttrh->globalPositionError().czx();
2603  str_radL[key] = ttrh->surface()->mediumProperties().radLen();
2604  str_bbxi[key] = ttrh->surface()->mediumProperties().xi();
2605  LogTrace("TrackingNtuple") << name << " cluster=" << key << " subdId=" << hitId.subdetId() << " lay=" << lay
2606  << " rawId=" << hitId.rawId() << " pos =" << ttrh->globalPosition();
2607 
2609  SimHitData simHitData = matchCluster(hit.firstClusterRef(),
2610  hitId,
2611  key,
2612  ttrh,
2613  clusterToTPMap,
2614  tpKeyToIndex,
2615  simHitsTPAssoc,
2616  digiSimLink,
2617  simHitRefKeyToIndex,
2618  HitType::Strip);
2619  str_simHitIdx[key] = simHitData.matchingSimHit;
2620  str_simType[key] = static_cast<int>(simHitData.type);
2621  str_chargeFraction[key] = simHitData.chargeFraction;
2622  LogTrace("TrackingNtuple") << " nMatchingSimHit=" << simHitData.matchingSimHit.size();
2623  if (!simHitData.matchingSimHit.empty()) {
2624  const auto simHitIdx = simHitData.matchingSimHit[0];
2625  LogTrace("TrackingNtuple") << " firstMatchingSimHit=" << simHitIdx << " simHitPos="
2626  << GlobalPoint(simhit_x[simHitIdx], simhit_y[simHitIdx], simhit_z[simHitIdx])
2627  << " simHitPos="
2628  << GlobalPoint(simhit_x[simHitIdx], simhit_y[simHitIdx], simhit_z[simHitIdx])
2629  << " energyLoss=" << simhit_eloss[simHitIdx]
2630  << " particleType=" << simhit_particle[simHitIdx]
2631  << " processType=" << simhit_process[simHitIdx]
2632  << " bunchCrossing=" << simHitData.bunchCrossing[0]
2633  << " event=" << simHitData.event[0];
2634  }
2635  }
2636  }
2637  }
2638  };
2639 
2640  fill(*rphiHits, "stripRPhiHit");
2641  fill(*stereoHits, "stripStereoHit");
2642 }
2643 
2645  const TransientTrackingRecHitBuilder& theTTRHBuilder,
2646  const TrackerTopology& tTopo,
2647  std::vector<std::pair<int, int>>& monoStereoClusterList) {
2648  TransientTrackingRecHit::RecHitPointer ttrh = theTTRHBuilder.build(&hit);
2649  const auto hitId = hit.geographicalId();
2650  const int lay = tTopo.layer(hitId);
2651  monoStereoClusterList.emplace_back(hit.monoHit().cluster().key(), hit.stereoHit().cluster().key());
2652  glu_isBarrel.push_back((hitId.subdetId() == StripSubdetector::TIB || hitId.subdetId() == StripSubdetector::TOB));
2653  glu_detId.push_back(tTopo, hitId);
2654  glu_monoIdx.push_back(hit.monoHit().cluster().key());
2655  glu_stereoIdx.push_back(hit.stereoHit().cluster().key());
2656  glu_seeIdx.emplace_back(); // filled in fillSeeds
2657  glu_x.push_back(ttrh->globalPosition().x());
2658  glu_y.push_back(ttrh->globalPosition().y());
2659  glu_z.push_back(ttrh->globalPosition().z());
2660  glu_xx.push_back(ttrh->globalPositionError().cxx());
2661  glu_xy.push_back(ttrh->globalPositionError().cyx());
2662  glu_yy.push_back(ttrh->globalPositionError().cyy());
2663  glu_yz.push_back(ttrh->globalPositionError().czy());
2664  glu_zz.push_back(ttrh->globalPositionError().czz());
2665  glu_zx.push_back(ttrh->globalPositionError().czx());
2666  glu_radL.push_back(ttrh->surface()->mediumProperties().radLen());
2667  glu_bbxi.push_back(ttrh->surface()->mediumProperties().xi());
2668  LogTrace("TrackingNtuple") << "stripMatchedHit"
2669  << " cluster0=" << hit.stereoHit().cluster().key()
2670  << " cluster1=" << hit.monoHit().cluster().key() << " subdId=" << hitId.subdetId()
2671  << " lay=" << lay << " rawId=" << hitId.rawId() << " pos =" << ttrh->globalPosition();
2672  return glu_isBarrel.size() - 1;
2673 }
2674 
2676  const TransientTrackingRecHitBuilder& theTTRHBuilder,
2677  const TrackerTopology& tTopo,
2678  std::vector<std::pair<int, int>>& monoStereoClusterList) {
2680  iEvent.getByToken(stripMatchedRecHitToken_, matchedHits);
2681  for (auto it = matchedHits->begin(); it != matchedHits->end(); it++) {
2682  for (auto hit = it->begin(); hit != it->end(); hit++) {
2683  addStripMatchedHit(*hit, theTTRHBuilder, tTopo, monoStereoClusterList);
2684  }
2685  }
2686 }
2687 
2689  const ClusterTPAssociation& clusterToTPMap,
2690  const TrackingParticleRefKeyToIndex& tpKeyToIndex,
2692  const edm::DetSetVector<PixelDigiSimLink>& digiSimLink,
2693  const TransientTrackingRecHitBuilder& theTTRHBuilder,
2694  const TrackerTopology& tTopo,
2695  const SimHitRefKeyToIndex& simHitRefKeyToIndex,
2696  std::set<edm::ProductID>& hitProductIds) {
2698  iEvent.getByToken(phase2OTRecHitToken_, phase2OTHits);
2699  for (auto it = phase2OTHits->begin(); it != phase2OTHits->end(); it++) {
2700  const DetId hitId = it->detId();
2701  for (auto hit = it->begin(); hit != it->end(); hit++) {
2702  TransientTrackingRecHit::RecHitPointer ttrh = theTTRHBuilder.build(&*hit);
2703 
2704  hitProductIds.insert(hit->cluster().id());
2705 
2706  const int key = hit->cluster().key();
2707  const int lay = tTopo.layer(hitId);
2708 
2709  ph2_isBarrel.push_back(hitId.subdetId() == 1);
2710  ph2_detId.push_back(tTopo, hitId);
2711  ph2_trkIdx.emplace_back(); // filled in fillTracks
2712  ph2_seeIdx.emplace_back(); // filled in fillSeeds
2713  ph2_x.push_back(ttrh->globalPosition().x());
2714  ph2_y.push_back(ttrh->globalPosition().y());
2715  ph2_z.push_back(ttrh->globalPosition().z());
2716  ph2_xx.push_back(ttrh->globalPositionError().cxx());
2717  ph2_xy.push_back(ttrh->globalPositionError().cyx());
2718  ph2_yy.push_back(ttrh->globalPositionError().cyy());
2719  ph2_yz.push_back(ttrh->globalPositionError().czy());
2720  ph2_zz.push_back(ttrh->globalPositionError().czz());
2721  ph2_zx.push_back(ttrh->globalPositionError().czx());
2722  ph2_radL.push_back(ttrh->surface()->mediumProperties().radLen());
2723  ph2_bbxi.push_back(ttrh->surface()->mediumProperties().xi());
2724 
2725  LogTrace("TrackingNtuple") << "phase2 OT cluster=" << key << " subdId=" << hitId.subdetId() << " lay=" << lay
2726  << " rawId=" << hitId.rawId() << " pos =" << ttrh->globalPosition();
2727 
2729  SimHitData simHitData = matchCluster(hit->firstClusterRef(),
2730  hitId,
2731  key,
2732  ttrh,
2733  clusterToTPMap,
2734  tpKeyToIndex,
2735  simHitsTPAssoc,
2736  digiSimLink,
2737  simHitRefKeyToIndex,
2739  ph2_simHitIdx.push_back(simHitData.matchingSimHit);
2740  ph2_simType.push_back(static_cast<int>(simHitData.type));
2741  LogTrace("TrackingNtuple") << " nMatchingSimHit=" << simHitData.matchingSimHit.size();
2742  if (!simHitData.matchingSimHit.empty()) {
2743  const auto simHitIdx = simHitData.matchingSimHit[0];
2744  LogTrace("TrackingNtuple") << " firstMatchingSimHit=" << simHitIdx << " simHitPos="
2745  << GlobalPoint(simhit_x[simHitIdx], simhit_y[simHitIdx], simhit_z[simHitIdx])
2746  << " energyLoss=" << simhit_eloss[simHitIdx]
2747  << " particleType=" << simhit_particle[simHitIdx]
2748  << " processType=" << simhit_process[simHitIdx]
2749  << " bunchCrossing=" << simHitData.bunchCrossing[0]
2750  << " event=" << simHitData.event[0];
2751  }
2752  }
2753  }
2754  }
2755 }
2756 
2758  const TrackingParticleRefVector& tpCollection,
2759  const TrackingParticleRefKeyToIndex& tpKeyToIndex,
2760  const reco::BeamSpot& bs,
2761  const reco::TrackToTrackingParticleAssociator& associatorByHits,
2762  const ClusterTPAssociation& clusterToTPMap,
2763  const TransientTrackingRecHitBuilder& theTTRHBuilder,
2764  const MagneticField& theMF,
2765  const TrackerTopology& tTopo,
2766  std::vector<std::pair<int, int>>& monoStereoClusterList,
2767  const std::set<edm::ProductID>& hitProductIds,
2768  std::map<edm::ProductID, size_t>& seedCollToOffset) {
2769  TSCBLBuilderNoMaterial tscblBuilder;
2770  for (size_t iColl = 0; iColl < seedTokens_.size(); ++iColl) {
2771  const auto& seedToken = seedTokens_[iColl];
2772 
2773  edm::Handle<edm::View<reco::Track>> seedTracksHandle;
2774  iEvent.getByToken(seedToken, seedTracksHandle);
2775  const auto& seedTracks = *seedTracksHandle;
2776 
2777  if (seedTracks.empty())
2778  continue;
2779 
2781  labelsForToken(seedToken, labels);
2782 
2783  const auto& seedStopInfoToken = seedStopInfoTokens_[iColl];
2784  edm::Handle<std::vector<SeedStopInfo>> seedStopInfoHandle;
2785  iEvent.getByToken(seedStopInfoToken, seedStopInfoHandle);
2786  const auto& seedStopInfos = *seedStopInfoHandle;
2787  if (seedTracks.size() != seedStopInfos.size()) {
2789  labelsForToken(seedStopInfoToken, labels2);
2790 
2791  throw cms::Exception("LogicError") << "Got " << seedTracks.size() << " seeds, but " << seedStopInfos.size()
2792  << " seed stopping infos for collections " << labels.module << ", "
2793  << labels2.module;
2794  }
2795 
2796  // The associator interfaces really need to be fixed...
2797  edm::RefToBaseVector<reco::Track> seedTrackRefs;
2798  for (edm::View<reco::Track>::size_type i = 0; i < seedTracks.size(); ++i) {
2799  seedTrackRefs.push_back(seedTracks.refAt(i));
2800  }
2801  reco::RecoToSimCollection recSimColl = associatorByHits.associateRecoToSim(seedTrackRefs, tpCollection);
2802  reco::SimToRecoCollection simRecColl = associatorByHits.associateSimToReco(seedTrackRefs, tpCollection);
2803 
2804  TString label = labels.module;
2805  //format label to match algoName
2806  label.ReplaceAll("seedTracks", "");
2807  label.ReplaceAll("Seeds", "");
2808  label.ReplaceAll("muonSeeded", "muonSeededStep");
2809  int algo = reco::TrackBase::algoByName(label.Data());
2810 
2811  edm::ProductID id = seedTracks[0].seedRef().id();
2812  const auto offset = see_fitok.size();
2813  auto inserted = seedCollToOffset.emplace(id, offset);
2814  if (!inserted.second)
2815  throw cms::Exception("Configuration")
2816  << "Trying to add seeds with ProductID " << id << " for a second time from collection " << labels.module
2817  << ", seed algo " << label << ". Typically this is caused by a configuration problem.";
2818  see_offset.push_back(offset);
2819 
2820  LogTrace("TrackingNtuple") << "NEW SEED LABEL: " << label << " size: " << seedTracks.size() << " algo=" << algo
2821  << " ProductID " << id;
2822 
2823  for (size_t iSeed = 0; iSeed < seedTrackRefs.size(); ++iSeed) {
2824  const auto& seedTrackRef = seedTrackRefs[iSeed];
2825  const auto& seedTrack = *seedTrackRef;
2826  const auto& seedRef = seedTrack.seedRef();
2827  const auto& seed = *seedRef;
2828 
2829  const auto seedStopInfo = seedStopInfos[iSeed];
2830 
2831  if (seedRef.id() != id)
2832  throw cms::Exception("LogicError")
2833  << "All tracks in 'TracksFromSeeds' collection should point to seeds in the same collection. Now the "
2834  "element 0 had ProductID "
2835  << id << " while the element " << seedTrackRef.key() << " had " << seedTrackRef.id()
2836  << ". The source collection is " << labels.module << ".";
2837 
2838  std::vector<int> tpIdx;
2839  std::vector<float> sharedFraction;
2840  auto foundTPs = recSimColl.find(seedTrackRef);
2841  if (foundTPs != recSimColl.end()) {
2842  for (const auto& tpQuality : foundTPs->val) {
2843  tpIdx.push_back(tpKeyToIndex.at(tpQuality.first.key()));
2844  sharedFraction.push_back(tpQuality.second);
2845  }
2846  }
2847 
2848  // Search for a best-matching TrackingParticle for a seed
2849  const int nHits = seedTrack.numberOfValidHits();
2851  seedTrack.recHitsBegin(),
2852  seedTrack.recHitsEnd()); // TODO: this function is called 3 times per track, try to reduce
2853  const int nClusters = clusters.size();
2854  const auto bestKeyCount = findBestMatchingTrackingParticle(seedTrack, clusterToTPMap, tpKeyToIndex);
2855  const float bestShareFrac =
2856  nClusters > 0 ? static_cast<float>(bestKeyCount.countClusters) / static_cast<float>(nClusters) : 0;
2857  // Another way starting from the first hit of the seed
2858  const auto bestFirstHitKeyCount =
2859  findMatchingTrackingParticleFromFirstHit(seedTrack, clusterToTPMap, tpKeyToIndex);
2860  const float bestFirstHitShareFrac =
2861  nClusters > 0 ? static_cast<float>(bestFirstHitKeyCount.countClusters) / static_cast<float>(nClusters) : 0;
2862 
2863  const bool seedFitOk = !trackFromSeedFitFailed(seedTrack);
2864  const int charge = seedTrack.charge();
2865  const float pt = seedFitOk ? seedTrack.pt() : 0;
2866  const float eta = seedFitOk ? seedTrack.eta() : 0;
2867  const float phi = seedFitOk ? seedTrack.phi() : 0;
2868 
2869  const auto seedIndex = see_fitok.size();
2870 
2871  see_fitok.push_back(seedFitOk);
2872 
2873  see_px.push_back(seedFitOk ? seedTrack.px() : 0);
2874  see_py.push_back(seedFitOk ? seedTrack.py() : 0);
2875  see_pz.push_back(seedFitOk ? seedTrack.pz() : 0);
2876  see_pt.push_back(pt);
2877  see_eta.push_back(eta);
2878  see_phi.push_back(phi);
2879  see_q.push_back(charge);
2880  see_nValid.push_back(nHits);
2881 
2882  see_dxy.push_back(seedFitOk ? seedTrack.dxy(bs.position()) : 0);
2883  see_dz.push_back(seedFitOk ? seedTrack.dz(bs.position()) : 0);
2884  see_ptErr.push_back(seedFitOk ? seedTrack.ptError() : 0);
2885  see_etaErr.push_back(seedFitOk ? seedTrack.etaError() : 0);
2886  see_phiErr.push_back(seedFitOk ? seedTrack.phiError() : 0);
2887  see_dxyErr.push_back(seedFitOk ? seedTrack.dxyError() : 0);
2888  see_dzErr.push_back(seedFitOk ? seedTrack.dzError() : 0);
2889  see_algo.push_back(algo);
2890  see_stopReason.push_back(seedStopInfo.stopReasonUC());
2891  see_nCands.push_back(seedStopInfo.candidatesPerSeed());
2892 
2893  const auto& state = seedTrack.seedRef()->startingState();
2894  const auto& pos = state.parameters().position();
2895  const auto& mom = state.parameters().momentum();
2896  see_statePt.push_back(state.pt());
2897  see_stateTrajX.push_back(pos.x());
2898  see_stateTrajY.push_back(pos.y());
2899  see_stateTrajPx.push_back(mom.x());
2900  see_stateTrajPy.push_back(mom.y());
2901  see_stateTrajPz.push_back(mom.z());
2902 
2903  see_trkIdx.push_back(-1); // to be set correctly in fillTracks
2905  see_simTrkIdx.push_back(tpIdx);
2906  see_simTrkShareFrac.push_back(sharedFraction);
2907  see_bestSimTrkIdx.push_back(bestKeyCount.key >= 0 ? tpKeyToIndex.at(bestKeyCount.key) : -1);
2909  bestFirstHitKeyCount.key >= 0 ? tpKeyToIndex.at(bestFirstHitKeyCount.key) : -1);
2910  } else {
2911  see_isTrue.push_back(!tpIdx.empty());
2912  }
2913  see_bestSimTrkShareFrac.push_back(bestShareFrac);
2914  see_bestFromFirstHitSimTrkShareFrac.push_back(bestFirstHitShareFrac);
2915 
2917  /*
2918  TransientTrackingRecHit::RecHitPointer lastRecHit = theTTRHBuilder.build(&*(seed.recHits().second-1));
2919  TrajectoryStateOnSurface state = trajectoryStateTransform::transientState( itSeed->startingState(), lastRecHit->surface(), &theMF);
2920  float pt = state.globalParameters().momentum().perp();
2921  float eta = state.globalParameters().momentum().eta();
2922  float phi = state.globalParameters().momentum().phi();
2923  see_px .push_back( state.globalParameters().momentum().x() );
2924  see_py .push_back( state.globalParameters().momentum().y() );
2925  see_pz .push_back( state.globalParameters().momentum().z() );
2926  */
2927 
2928  std::vector<int> hitIdx;
2929  std::vector<int> hitType;
2930 
2931  for (auto const& hit : seed.recHits()) {
2933  int subid = recHit->geographicalId().subdetId();
2934  if (subid == (int)PixelSubdetector::PixelBarrel || subid == (int)PixelSubdetector::PixelEndcap) {
2935  const BaseTrackerRecHit* bhit = dynamic_cast<const BaseTrackerRecHit*>(&*recHit);
2936  const auto& clusterRef = bhit->firstClusterRef();
2937  const auto clusterKey = clusterRef.cluster_pixel().key();
2938  if (includeAllHits_) {
2939  checkProductID(hitProductIds, clusterRef.id(), "seed");
2940  pix_seeIdx[clusterKey].push_back(seedIndex);
2941  }
2942  hitIdx.push_back(clusterKey);
2943  hitType.push_back(static_cast<int>(HitType::Pixel));
2944  } else if (subid == (int)StripSubdetector::TOB || subid == (int)StripSubdetector::TID ||
2945  subid == (int)StripSubdetector::TIB || subid == (int)StripSubdetector::TEC) {
2947  const SiStripMatchedRecHit2D* matchedHit = dynamic_cast<const SiStripMatchedRecHit2D*>(&*recHit);
2948  if (includeAllHits_) {
2949  checkProductID(hitProductIds, matchedHit->monoClusterRef().id(), "seed");
2950  checkProductID(hitProductIds, matchedHit->stereoClusterRef().id(), "seed");
2951  }
2952  int monoIdx = matchedHit->monoClusterRef().key();
2953  int stereoIdx = matchedHit->stereoClusterRef().key();
2954 
2955  std::vector<std::pair<int, int>>::iterator pos =
2956  find(monoStereoClusterList.begin(), monoStereoClusterList.end(), std::make_pair(monoIdx, stereoIdx));
2957  size_t gluedIndex = -1;
2958  if (pos != monoStereoClusterList.end()) {
2959  gluedIndex = std::distance(monoStereoClusterList.begin(), pos);
2960  } else {
2961  // We can encounter glued hits not in the input
2962  // SiStripMatchedRecHit2DCollection, e.g. via muon
2963  // outside-in seeds (or anything taking hits from
2964  // MeasurementTrackerEvent). So let's add them here.
2965  gluedIndex = addStripMatchedHit(*matchedHit, theTTRHBuilder, tTopo, monoStereoClusterList);
2966  }
2967 
2968  if (includeAllHits_)
2969  glu_seeIdx[gluedIndex].push_back(seedIndex);
2970  hitIdx.push_back(gluedIndex);
2971  hitType.push_back(static_cast<int>(HitType::Glued));
2972  } else {
2973  const BaseTrackerRecHit* bhit = dynamic_cast<const BaseTrackerRecHit*>(&*recHit);
2974  const auto& clusterRef = bhit->firstClusterRef();
2975  unsigned int clusterKey;
2976  if (clusterRef.isPhase2()) {
2977  clusterKey = clusterRef.cluster_phase2OT().key();
2978  } else {
2979  clusterKey = clusterRef.cluster_strip().key();
2980  }
2981 
2982  if (includeAllHits_) {
2983  checkProductID(hitProductIds, clusterRef.id(), "seed");
2984  if (clusterRef.isPhase2()) {
2985  ph2_seeIdx[clusterKey].push_back(seedIndex);
2986  } else {
2987  str_seeIdx[clusterKey].push_back(seedIndex);
2988  }
2989  }
2990 
2991  hitIdx.push_back(clusterKey);
2992  if (clusterRef.isPhase2()) {
2993  hitType.push_back(static_cast<int>(HitType::Phase2OT));
2994  } else {
2995  hitType.push_back(static_cast<int>(HitType::Strip));
2996  }
2997  }
2998  } else {
2999  LogTrace("TrackingNtuple") << " not pixel and not Strip detector";
3000  }
3001  }
3002  see_hitIdx.push_back(hitIdx);
3003  see_hitType.push_back(hitType);
3004  see_nPixel.push_back(std::count(hitType.begin(), hitType.end(), static_cast<int>(HitType::Pixel)));
3005  see_nGlued.push_back(std::count(hitType.begin(), hitType.end(), static_cast<int>(HitType::Glued)));
3006  see_nStrip.push_back(std::count(hitType.begin(), hitType.end(), static_cast<int>(HitType::Strip)));
3007  see_nPhase2OT.push_back(std::count(hitType.begin(), hitType.end(), static_cast<int>(HitType::Phase2OT)));
3008  see_nCluster.push_back(nClusters);
3009  //the part below is not strictly needed
3010  float chi2 = -1;
3011  if (nHits == 2) {
3012  TransientTrackingRecHit::RecHitPointer recHit0 = theTTRHBuilder.build(&*(seed.recHits().begin()));
3013  TransientTrackingRecHit::RecHitPointer recHit1 = theTTRHBuilder.build(&*(seed.recHits().begin() + 1));
3014  std::vector<GlobalPoint> gp(2);
3015  std::vector<GlobalError> ge(2);
3016  gp[0] = recHit0->globalPosition();
3017  ge[0] = recHit0->globalPositionError();
3018  gp[1] = recHit1->globalPosition();
3019  ge[1] = recHit1->globalPositionError();
3020  LogTrace("TrackingNtuple")
3021  << "seed " << seedTrackRef.key() << " pt=" << pt << " eta=" << eta << " phi=" << phi << " q=" << charge
3022  << " - PAIR - ids: " << recHit0->geographicalId().rawId() << " " << recHit1->geographicalId().rawId()
3023  << " hitpos: " << gp[0] << " " << gp[1] << " trans0: "
3024  << (recHit0->transientHits().size() > 1 ? recHit0->transientHits()[0]->globalPosition()
3025  : GlobalPoint(0, 0, 0))
3026  << " "
3027  << (recHit0->transientHits().size() > 1 ? recHit0->transientHits()[1]->globalPosition()
3028  : GlobalPoint(0, 0, 0))
3029  << " trans1: "
3030  << (recHit1->transientHits().size() > 1 ? recHit1->transientHits()[0]->globalPosition()
3031  : GlobalPoint(0, 0, 0))
3032  << " "
3033  << (recHit1->transientHits().size() > 1 ? recHit1->transientHits()[1]->globalPosition()
3034  : GlobalPoint(0, 0, 0))
3035  << " eta,phi: " << gp[0].eta() << "," << gp[0].phi();
3036  } else if (nHits == 3) {
3037  TransientTrackingRecHit::RecHitPointer recHit0 = theTTRHBuilder.build(&*(seed.recHits().begin()));
3038  TransientTrackingRecHit::RecHitPointer recHit1 = theTTRHBuilder.build(&*(seed.recHits().begin() + 1));
3039  TransientTrackingRecHit::RecHitPointer recHit2 = theTTRHBuilder.build(&*(seed.recHits().begin() + 2));
3041  declareDynArray(GlobalError, 4, ge);
3042  declareDynArray(bool, 4, bl);
3043  gp[0] = recHit0->globalPosition();
3044  ge[0] = recHit0->globalPositionError();
3045  int subid0 = recHit0->geographicalId().subdetId();
3046  bl[0] = (subid0 == StripSubdetector::TIB || subid0 == StripSubdetector::TOB ||
3047  subid0 == (int)PixelSubdetector::PixelBarrel);
3048  gp[1] = recHit1->globalPosition();
3049  ge[1] = recHit1->globalPositionError();
3050  int subid1 = recHit1->geographicalId().subdetId();
3051  bl[1] = (subid1 == StripSubdetector::TIB || subid1 == StripSubdetector::TOB ||
3052  subid1 == (int)PixelSubdetector::PixelBarrel);
3053  gp[2] = recHit2->globalPosition();
3054  ge[2] = recHit2->globalPositionError();
3055  int subid2 = recHit2->geographicalId().subdetId();
3056  bl[2] = (subid2 == StripSubdetector::TIB || subid2 == StripSubdetector::TOB ||
3057  subid2 == (int)PixelSubdetector::PixelBarrel);
3058  RZLine rzLine(gp, ge, bl);
3059  float seed_chi2 = rzLine.chi2();
3060  //float seed_pt = state.globalParameters().momentum().perp();
3061  float seed_pt = pt;
3062  LogTrace("TrackingNtuple")
3063  << "seed " << seedTrackRef.key() << " pt=" << pt << " eta=" << eta << " phi=" << phi << " q=" << charge
3064  << " - TRIPLET - ids: " << recHit0->geographicalId().rawId() << " " << recHit1->geographicalId().rawId()
3065  << " " << recHit2->geographicalId().rawId() << " hitpos: " << gp[0] << " " << gp[1] << " " << gp[2]
3066  << " trans0: "
3067  << (recHit0->transientHits().size() > 1 ? recHit0->transientHits()[0]->globalPosition()
3068  : GlobalPoint(0, 0, 0))
3069  << " "
3070  << (recHit0->transientHits().size() > 1 ? recHit0->transientHits()[1]->globalPosition()
3071  : GlobalPoint(0, 0, 0))
3072  << " trans1: "
3073  << (recHit1->transientHits().size() > 1 ? recHit1->transientHits()[0]->globalPosition()
3074  : GlobalPoint(0, 0, 0))
3075  << " "
3076  << (recHit1->transientHits().size() > 1 ? recHit1->transientHits()[1]->globalPosition()
3077  : GlobalPoint(0, 0, 0))
3078  << " trans2: "
3079  << (recHit2->transientHits().size() > 1 ? recHit2->transientHits()[0]->globalPosition()
3080  : GlobalPoint(0, 0, 0))
3081  << " "
3082  << (recHit2->transientHits().size() > 1 ? recHit2->transientHits()[1]->globalPosition()
3083  : GlobalPoint(0, 0, 0))
3084  << " local: "
3085  << recHit2->localPosition()
3086  //<< " tsos pos, mom: " << state.globalPosition()<<" "<<state.globalMomentum()
3087  << " eta,phi: " << gp[0].eta() << "," << gp[0].phi() << " pt,chi2: " << seed_pt << "," << seed_chi2;
3088  chi2 = seed_chi2;
3089  }
3090  see_chi2.push_back(chi2);
3091  }
3092 
3093  fillTrackingParticlesForSeeds(tpCollection, simRecColl, tpKeyToIndex, offset);
3094  }
3095 }
3096 
3098  const TrackingParticleRefVector& tpCollection,
3099  const TrackingParticleRefKeyToIndex& tpKeyToIndex,
3100  const TrackingParticleRefKeyToCount& tpKeyToClusterCount,
3101  const MagneticField& mf,
3102  const reco::BeamSpot& bs,
3104  const reco::TrackToTrackingParticleAssociator& associatorByHits,
3105  const ClusterTPAssociation& clusterToTPMap,
3106  const TransientTrackingRecHitBuilder& theTTRHBuilder,
3107  const TrackerTopology& tTopo,
3108  const std::set<edm::ProductID>& hitProductIds,
3109  const std::map<edm::ProductID, size_t>& seedCollToOffset,
3110  const std::vector<const MVACollection*>& mvaColls,
3111  const std::vector<const QualityMaskCollection*>& qualColls) {
3112  reco::RecoToSimCollection recSimColl = associatorByHits.associateRecoToSim(tracks, tpCollection);
3115  LogTrace("TrackingNtuple") << "NEW TRACK LABEL: " << labels.module;
3116 
3117  auto pvPosition = vertices[0].position();
3118 
3119  for (size_t iTrack = 0; iTrack < tracks.size(); ++iTrack) {
3120  const auto& itTrack = tracks[iTrack];
3121  int charge = itTrack->charge();
3122  float pt = itTrack->pt();
3123  float eta = itTrack->eta();
3124  const double lambda = itTrack->lambda();
3125  float chi2 = itTrack->normalizedChi2();
3126  float ndof = itTrack->ndof();
3127  float phi = itTrack->phi();
3128  int nHits = itTrack->numberOfValidHits();
3129  const reco::HitPattern& hp = itTrack->hitPattern();
3130 
3131  const auto& tkParam = itTrack->parameters();
3132  auto tkCov = itTrack->covariance();
3133  tkCov.Invert();
3134 
3135  // Standard track-TP matching
3136  int nSimHits = 0;
3137  bool isSimMatched = false;
3138  std::vector<int> tpIdx;
3139  std::vector<float> sharedFraction;
3140  std::vector<float> tpChi2;
3141  auto foundTPs = recSimColl.find(itTrack);
3142  if (foundTPs != recSimColl.end()) {
3143  if (!foundTPs->val.empty()) {
3144  nSimHits = foundTPs->val[0].first->numberOfTrackerHits();
3145  isSimMatched = true;
3146  }
3147  for (const auto& tpQuality : foundTPs->val) {
3148  tpIdx.push_back(tpKeyToIndex.at(tpQuality.first.key()));
3149  sharedFraction.push_back(tpQuality.second);
3150  tpChi2.push_back(track_associator::trackAssociationChi2(tkParam, tkCov, *(tpCollection[tpIdx.back()]), mf, bs));
3151  }
3152  }
3153 
3154  // Search for a best-matching TrackingParticle for a track
3156  itTrack->recHitsBegin(),
3157  itTrack->recHitsEnd()); // TODO: this function is called 3 times per track, try to reduce
3158  const int nClusters = clusters.size();
3159 
3160  const auto bestKeyCount = findBestMatchingTrackingParticle(*itTrack, clusterToTPMap, tpKeyToIndex);
3161  const float bestShareFrac = static_cast<float>(bestKeyCount.countClusters) / static_cast<float>(nClusters);
3162  float bestShareFracSimDenom = 0;
3163  float bestShareFracSimClusterDenom = 0;
3164  float bestChi2 = -1;
3165  if (bestKeyCount.key >= 0) {
3166  bestShareFracSimDenom =
3167  static_cast<float>(bestKeyCount.countClusters) /
3168  static_cast<float>(tpCollection[tpKeyToIndex.at(bestKeyCount.key)]->numberOfTrackerHits());
3169  bestShareFracSimClusterDenom =
3170  static_cast<float>(bestKeyCount.countClusters) / static_cast<float>(tpKeyToClusterCount.at(bestKeyCount.key));
3172  tkParam, tkCov, *(tpCollection[tpKeyToIndex.at(bestKeyCount.key)]), mf, bs);
3173  }
3174  // Another way starting from the first hit of the track
3175  const auto bestFirstHitKeyCount = findMatchingTrackingParticleFromFirstHit(*itTrack, clusterToTPMap, tpKeyToIndex);
3176  const float bestFirstHitShareFrac =
3177  static_cast<float>(bestFirstHitKeyCount.countClusters) / static_cast<float>(nClusters);
3178  float bestFirstHitShareFracSimDenom = 0;
3179  float bestFirstHitShareFracSimClusterDenom = 0;
3180  float bestFirstHitChi2 = -1;
3181  if (bestFirstHitKeyCount.key >= 0) {
3182  bestFirstHitShareFracSimDenom =
3183  static_cast<float>(bestFirstHitKeyCount.countClusters) /
3184  static_cast<float>(tpCollection[tpKeyToIndex.at(bestFirstHitKeyCount.key)]->numberOfTrackerHits());
3185  bestFirstHitShareFracSimClusterDenom = static_cast<float>(bestFirstHitKeyCount.countClusters) /
3186  static_cast<float>(tpKeyToClusterCount.at(bestFirstHitKeyCount.key));
3187  bestFirstHitChi2 = track_associator::trackAssociationChi2(
3188  tkParam, tkCov, *(tpCollection[tpKeyToIndex.at(bestFirstHitKeyCount.key)]), mf, bs);
3189  }
3190 
3191  float chi2_1Dmod = chi2;
3192  int count1dhits = 0;
3193  for (auto iHit = itTrack->recHitsBegin(), iEnd = itTrack->recHitsEnd(); iHit != iEnd; ++iHit) {
3194  const TrackingRecHit& hit = **iHit;
3195  if (hit.isValid() && typeid(hit) == typeid(SiStripRecHit1D))
3196  ++count1dhits;
3197  }
3198  if (count1dhits > 0) {
3199  chi2_1Dmod = (chi2 + count1dhits) / (ndof + count1dhits);
3200  }
3201 
3202  Point bestPV = getBestVertex(*itTrack, vertices);
3203 
3204  trk_px.push_back(itTrack->px());
3205  trk_py.push_back(itTrack->py());
3206  trk_pz.push_back(itTrack->pz());
3207  trk_pt.push_back(pt);
3208  trk_inner_px.push_back(itTrack->innerMomentum().x());
3209  trk_inner_py.push_back(itTrack->innerMomentum().y());
3210  trk_inner_pz.push_back(itTrack->innerMomentum().z());
3211  trk_inner_pt.push_back(itTrack->innerMomentum().rho());
3212  trk_outer_px.push_back(itTrack->outerMomentum().x());
3213  trk_outer_py.push_back(itTrack->outerMomentum().y());
3214  trk_outer_pz.push_back(itTrack->outerMomentum().z());
3215  trk_outer_pt.push_back(itTrack->outerMomentum().rho());
3216  trk_eta.push_back(eta);
3217  trk_lambda.push_back(lambda);
3218  trk_cotTheta.push_back(1 / tan(M_PI * 0.5 - lambda));
3219  trk_phi.push_back(phi);
3220  trk_dxy.push_back(itTrack->dxy(bs.position()));
3221  trk_dz.push_back(itTrack->dz(bs.position()));
3222  trk_dxyPV.push_back(itTrack->dxy(pvPosition));
3223  trk_dzPV.push_back(itTrack->dz(pvPosition));
3224  trk_dxyClosestPV.push_back(itTrack->dxy(bestPV));
3225  trk_dzClosestPV.push_back(itTrack->dz(bestPV));
3226  trk_ptErr.push_back(itTrack->ptError());
3227  trk_etaErr.push_back(itTrack->etaError());
3228  trk_lambdaErr.push_back(itTrack->lambdaError());
3229  trk_phiErr.push_back(itTrack->phiError());
3230  trk_dxyErr.push_back(itTrack->dxyError());
3231  trk_dzErr.push_back(itTrack->dzError());
3232  trk_refpoint_x.push_back(itTrack->vx());
3233  trk_refpoint_y.push_back(itTrack->vy());
3234  trk_refpoint_z.push_back(itTrack->vz());
3235  trk_nChi2.push_back(chi2);
3236  trk_nChi2_1Dmod.push_back(chi2_1Dmod);
3237  trk_ndof.push_back(ndof);
3238  trk_q.push_back(charge);
3239  trk_nValid.push_back(hp.numberOfValidHits());
3240  trk_nLost.push_back(hp.numberOfLostHits(reco::HitPattern::TRACK_HITS));
3241  trk_nInactive.push_back(hp.trackerLayersTotallyOffOrBad(reco::HitPattern::TRACK_HITS));
3242  trk_nPixel.push_back(hp.numberOfValidPixelHits());
3243  trk_nStrip.push_back(hp.numberOfValidStripHits());
3244  trk_nOuterLost.push_back(hp.numberOfLostTrackerHits(reco::HitPattern::MISSING_OUTER_HITS));
3245  trk_nInnerLost.push_back(hp.numberOfLostTrackerHits(reco::HitPattern::MISSING_INNER_HITS));
3246  trk_nOuterInactive.push_back(hp.trackerLayersTotallyOffOrBad(reco::HitPattern::MISSING_OUTER_HITS));
3247  trk_nInnerInactive.push_back(hp.trackerLayersTotallyOffOrBad(reco::HitPattern::MISSING_INNER_HITS));
3248  trk_nPixelLay.push_back(hp.pixelLayersWithMeasurement());
3249  trk_nStripLay.push_back(hp.stripLayersWithMeasurement());
3250  trk_n3DLay.push_back(hp.numberOfValidStripLayersWithMonoAndStereo() + hp.pixelLayersWithMeasurement());
3251  trk_nLostLay.push_back(hp.trackerLayersWithoutMeasurement(reco::HitPattern::TRACK_HITS));
3252  trk_nCluster.push_back(nClusters);
3253  trk_algo.push_back(itTrack->algo());
3254  trk_originalAlgo.push_back(itTrack->originalAlgo());
3255  trk_algoMask.push_back(itTrack->algoMaskUL());
3256  trk_stopReason.push_back(itTrack->stopReason());
3257  trk_isHP.push_back(itTrack->quality(reco::TrackBase::highPurity));
3258  if (includeMVA_) {
3259  for (size_t i = 0; i < trk_mvas.size(); ++i) {
3260  trk_mvas[i].push_back((*(mvaColls[i]))[iTrack]);
3261  trk_qualityMasks[i].push_back((*(qualColls[i]))[iTrack]);
3262  }
3263  }
3264  if (includeSeeds_) {
3265  auto offset = seedCollToOffset.find(itTrack->seedRef().id());
3266  if (offset == seedCollToOffset.end()) {
3267  throw cms::Exception("Configuration")
3268  << "Track algo '" << reco::TrackBase::algoName(itTrack->algo()) << "' originalAlgo '"
3269  << reco::TrackBase::algoName(itTrack->originalAlgo()) << "' refers to seed collection "
3270  << itTrack->seedRef().id()
3271  << ", but that seed collection is not given as an input. The following collections were given as an input "
3272  << make_ProductIDMapPrinter(seedCollToOffset);
3273  }
3274 
3275  const auto seedIndex = offset->second + itTrack->seedRef().key();
3276  trk_seedIdx.push_back(seedIndex);
3277  if (see_trkIdx[seedIndex] != -1) {
3278  throw cms::Exception("LogicError") << "Track index has already been set for seed " << seedIndex << " to "
3279  << see_trkIdx[seedIndex] << "; was trying to set it to " << iTrack;
3280  }
3281  see_trkIdx[seedIndex] = iTrack;
3282  }
3283  trk_vtxIdx.push_back(-1); // to be set correctly in fillVertices
3285  trk_simTrkIdx.push_back(tpIdx);
3286  trk_simTrkShareFrac.push_back(sharedFraction);
3287  trk_simTrkNChi2.push_back(tpChi2);
3288  trk_bestSimTrkIdx.push_back(bestKeyCount.key >= 0 ? tpKeyToIndex.at(bestKeyCount.key) : -1);
3289  trk_bestFromFirstHitSimTrkIdx.push_back(bestFirstHitKeyCount.key >= 0 ? tpKeyToIndex.at(bestFirstHitKeyCount.key)
3290  : -1);
3291  } else {
3292  trk_isTrue.push_back(!tpIdx.empty());
3293  }
3294  trk_bestSimTrkShareFrac.push_back(bestShareFrac);
3295  trk_bestSimTrkShareFracSimDenom.push_back(bestShareFracSimDenom);
3296  trk_bestSimTrkShareFracSimClusterDenom.push_back(bestShareFracSimClusterDenom);
3297  trk_bestSimTrkNChi2.push_back(bestChi2);
3298  trk_bestFromFirstHitSimTrkShareFrac.push_back(bestFirstHitShareFrac);
3299  trk_bestFromFirstHitSimTrkShareFracSimDenom.push_back(bestFirstHitShareFracSimDenom);
3300  trk_bestFromFirstHitSimTrkShareFracSimClusterDenom.push_back(bestFirstHitShareFracSimClusterDenom);
3301  trk_bestFromFirstHitSimTrkNChi2.push_back(bestFirstHitChi2);
3302 
3303  LogTrace("TrackingNtuple") << "Track #" << itTrack.key() << " with q=" << charge << ", pT=" << pt
3304  << " GeV, eta: " << eta << ", phi: " << phi << ", chi2=" << chi2 << ", Nhits=" << nHits
3305  << ", algo=" << itTrack->algoName(itTrack->algo()).c_str()
3306  << " hp=" << itTrack->quality(reco::TrackBase::highPurity)
3307  << " seed#=" << itTrack->seedRef().key() << " simMatch=" << isSimMatched
3308  << " nSimHits=" << nSimHits
3309  << " sharedFraction=" << (sharedFraction.empty() ? -1 : sharedFraction[0])
3310  << " tpIdx=" << (tpIdx.empty() ? -1 : tpIdx[0]);
3311  std::vector<int> hitIdx;
3312  std::vector<int> hitType;
3313 
3314  for (auto i = itTrack->recHitsBegin(); i != itTrack->recHitsEnd(); i++) {
3315  TransientTrackingRecHit::RecHitPointer hit = theTTRHBuilder.build(&**i);
3316  DetId hitId = hit->geographicalId();
3317  LogTrace("TrackingNtuple") << "hit #" << std::distance(itTrack->recHitsBegin(), i)
3318  << " subdet=" << hitId.subdetId();
3319  if (hitId.det() != DetId::Tracker)
3320  continue;
3321 
3322  LogTrace("TrackingNtuple") << " " << subdetstring(hitId.subdetId()) << " " << tTopo.layer(hitId);
3323 
3324  if (hit->isValid()) {
3325  //ugly... but works
3326  const BaseTrackerRecHit* bhit = dynamic_cast<const BaseTrackerRecHit*>(&*hit);
3327  const auto& clusterRef = bhit->firstClusterRef();
3328  unsigned int clusterKey;
3329  if (clusterRef.isPixel()) {
3330  clusterKey = clusterRef.cluster_pixel().key();
3331  } else if (clusterRef.isPhase2()) {
3332  clusterKey = clusterRef.cluster_phase2OT().key();
3333  } else {
3334  clusterKey = clusterRef.cluster_strip().key();
3335  }
3336 
3337  LogTrace("TrackingNtuple") << " id: " << hitId.rawId() << " - globalPos =" << hit->globalPosition()
3338  << " cluster=" << clusterKey << " clusterRef ID=" << clusterRef.id()
3339  << " eta,phi: " << hit->globalPosition().eta() << "," << hit->globalPosition().phi();
3340  if (includeAllHits_) {
3341  checkProductID(hitProductIds, clusterRef.id(), "track");
3342  if (clusterRef.isPixel()) {
3343  pix_trkIdx[clusterKey].push_back(iTrack);
3344  } else if (clusterRef.isPhase2()) {
3345  ph2_trkIdx[clusterKey].push_back(iTrack);
3346  } else {
3347  str_trkIdx[clusterKey].push_back(iTrack);
3348  }
3349  }
3350 
3351  hitIdx.push_back(clusterKey);
3352  if (clusterRef.isPixel()) {
3353  hitType.push_back(static_cast<int>(HitType::Pixel));
3354  } else if (clusterRef.isPhase2()) {
3355  hitType.push_back(static_cast<int>(HitType::Phase2OT));
3356  } else {
3357  hitType.push_back(static_cast<int>(HitType::Strip));
3358  }
3359  } else {
3360  LogTrace("TrackingNtuple") << " - invalid hit";
3361 
3362  hitIdx.push_back(inv_isBarrel.size());
3363  hitType.push_back(static_cast<int>(HitType::Invalid));
3364 
3365  inv_isBarrel.push_back(hitId.subdetId() == 1);
3366  if (includeStripHits_)
3367  inv_detId.push_back(tTopo, hitId);
3368  else
3369  inv_detId_phase2.push_back(tTopo, hitId);
3370  inv_type.push_back(hit->getType());
3371  }
3372  }
3373 
3374  trk_hitIdx.push_back(hitIdx);
3375  trk_hitType.push_back(hitType);
3376  }
3377 }
3378 
3380  const edm::EventSetup& iSetup,
3382  const reco::BeamSpot& bs,
3383  const TrackingParticleRefVector& tpCollection,
3384  const TrackingVertexRefKeyToIndex& tvKeyToIndex,
3385  const reco::TrackToTrackingParticleAssociator& associatorByHits,
3386  const std::vector<TPHitIndex>& tpHitList,
3387  const TrackingParticleRefKeyToCount& tpKeyToClusterCount) {
3389 
3390  // Number of 3D layers for TPs
3392  iEvent.getByToken(tpNLayersToken_, tpNLayersH);
3393  const auto& nLayers_tPCeff = *tpNLayersH;
3394 
3395  iEvent.getByToken(tpNPixelLayersToken_, tpNLayersH);
3396  const auto& nPixelLayers_tPCeff = *tpNLayersH;
3397 
3398  iEvent.getByToken(tpNStripStereoLayersToken_, tpNLayersH);
3399  const auto& nStripMonoAndStereoLayers_tPCeff = *tpNLayersH;
3400 
3401  reco::SimToRecoCollection simRecColl = associatorByHits.associateSimToReco(tracks, tpCollection);
3402 
3403  for (const TrackingParticleRef& tp : tpCollection) {
3404  LogTrace("TrackingNtuple") << "tracking particle pt=" << tp->pt() << " eta=" << tp->eta() << " phi=" << tp->phi();
3405  bool isRecoMatched = false;
3406  std::vector<int> tkIdx;
3407  std::vector<float> sharedFraction;
3408  auto foundTracks = simRecColl.find(tp);
3409  if (foundTracks != simRecColl.end()) {
3410  isRecoMatched = true;
3411  for (const auto& trackQuality : foundTracks->val) {
3412  sharedFraction.push_back(trackQuality.second);
3413  tkIdx.push_back(trackQuality.first.key());
3414  }
3415  }
3416 
3417  sim_genPdgIds.emplace_back();
3418  for (const auto& genRef : tp->genParticles()) {
3419  if (genRef.isNonnull())
3420  sim_genPdgIds.back().push_back(genRef->pdgId());
3421  }
3422 
3423  bool isFromBHadron = false;
3424  // Logic is similar to SimTracker/TrackHistory
3425  if (tracer_.evaluate(tp)) { // ignore TP if history can not be traced
3426  // following is from TrackClassifier::processesAtGenerator()
3427  HistoryBase::RecoGenParticleTrail const& recoGenParticleTrail = tracer_.recoGenParticleTrail();
3428  for (const auto& particle : recoGenParticleTrail) {
3429  HepPDT::ParticleID particleID(particle->pdgId());
3430  if (particleID.hasBottom()) {
3431  isFromBHadron = true;
3432  break;
3433  }
3434  }
3435  }
3436 
3437  LogTrace("TrackingNtuple") << "matched to tracks = " << make_VectorPrinter(tkIdx)
3438  << " isRecoMatched=" << isRecoMatched;
3439  sim_event.push_back(tp->eventId().event());
3440  sim_bunchCrossing.push_back(tp->eventId().bunchCrossing());
3441  sim_pdgId.push_back(tp->pdgId());
3442  sim_isFromBHadron.push_back(isFromBHadron);
3443  sim_px.push_back(tp->px());
3444  sim_py.push_back(tp->py());
3445  sim_pz.push_back(tp->pz());
3446  sim_pt.push_back(tp->pt());
3447  sim_eta.push_back(tp->eta());
3448  sim_phi.push_back(tp->phi());
3449  sim_q.push_back(tp->charge());
3450  sim_trkIdx.push_back(tkIdx);
3451  sim_trkShareFrac.push_back(sharedFraction);
3452  sim_parentVtxIdx.push_back(tvKeyToIndex.at(tp->parentVertex().key()));
3453  std::vector<int> decayIdx;
3454  for (const auto& v : tp->decayVertices())
3455  decayIdx.push_back(tvKeyToIndex.at(v.key()));
3456  sim_decayVtxIdx.push_back(decayIdx);
3457 
3458  //Calcualte the impact parameters w.r.t. PCA
3459  TrackingParticle::Vector momentum = parametersDefiner->momentum(iEvent, iSetup, tp);
3461  auto dxySim = TrackingParticleIP::dxy(vertex, momentum, bs.position());
3462  auto dzSim = TrackingParticleIP::dz(vertex, momentum, bs.position());
3463  const double lambdaSim = M_PI / 2 - momentum.theta();
3464  sim_pca_pt.push_back(std::sqrt(momentum.perp2()));
3465  sim_pca_eta.push_back(momentum.Eta());
3466  sim_pca_lambda.push_back(lambdaSim);
3467  sim_pca_cotTheta.push_back(1 / tan(M_PI * 0.5 - lambdaSim));
3468  sim_pca_phi.push_back(momentum.phi());
3469  sim_pca_dxy.push_back(dxySim);
3470  sim_pca_dz.push_back(dzSim);
3471 
3472  std::vector<int> hitIdx;
3473  int nPixel = 0, nStrip = 0;
3474  auto rangeHit = std::equal_range(tpHitList.begin(), tpHitList.end(), TPHitIndex(tp.key()), tpHitIndexListLess);
3475  for (auto ip = rangeHit.first; ip != rangeHit.second; ++ip) {
3476  auto type = HitType::Unknown;
3477  if (!simhit_hitType[ip->simHitIdx].empty())
3478  type = static_cast<HitType>(simhit_hitType[ip->simHitIdx][0]);
3479  LogTrace("TrackingNtuple") << "simhit=" << ip->simHitIdx << " type=" << static_cast<int>(type);
3480  hitIdx.push_back(ip->simHitIdx);
3481  const auto detid = DetId(includeStripHits_ ? simhit_detId[ip->simHitIdx] : simhit_detId_phase2[ip->simHitIdx]);
3482  if (detid.det() != DetId::Tracker) {
3483  throw cms::Exception("LogicError") << "Encountered SimHit for TP " << tp.key() << " with DetId "
3484  << detid.rawId() << " whose det() is not Tracker but " << detid.det();
3485  }
3486  const auto subdet = detid.subdetId();
3487  switch (subdet) {
3490  ++nPixel;
3491  break;
3492  case StripSubdetector::TIB:
3493  case StripSubdetector::TID:
3494  case StripSubdetector::TOB:
3495  case StripSubdetector::TEC:
3496  ++nStrip;
3497  break;
3498  default:
3499  throw cms::Exception("LogicError") << "Encountered SimHit for TP " << tp.key() << " with DetId "
3500  << detid.rawId() << " whose subdet is not recognized, is " << subdet;
3501  };
3502  }
3503  sim_nValid.push_back(hitIdx.size());
3504  sim_nPixel.push_back(nPixel);
3505  sim_nStrip.push_back(nStrip);
3506 
3507  const auto nSimLayers = nLayers_tPCeff[tp];
3508  const auto nSimPixelLayers = nPixelLayers_tPCeff[tp];
3509  const auto nSimStripMonoAndStereoLayers = nStripMonoAndStereoLayers_tPCeff[tp];
3510  sim_nLay.push_back(nSimLayers);
3511  sim_nPixelLay.push_back(nSimPixelLayers);
3512  sim_n3DLay.push_back(nSimPixelLayers + nSimStripMonoAndStereoLayers);
3513 
3514  sim_nTrackerHits.push_back(tp->numberOfTrackerHits());
3515  auto found = tpKeyToClusterCount.find(tp.key());
3516  sim_nRecoClusters.push_back(found != cend(tpKeyToClusterCount) ? found->second : 0);
3517 
3518  sim_simHitIdx.push_back(hitIdx);
3519  }
3520 }
3521 
3522 // called from fillSeeds
3524  const reco::SimToRecoCollection& simRecColl,
3525  const TrackingParticleRefKeyToIndex& tpKeyToIndex,
3526  const unsigned int seedOffset) {
3527  if (sim_seedIdx.empty()) // first call
3528  sim_seedIdx.resize(tpCollection.size());
3529 
3530  for (const auto& keyVal : simRecColl) {
3531  const auto& tpRef = keyVal.key;
3532  auto found = tpKeyToIndex.find(tpRef.key());
3533  if (found == tpKeyToIndex.end())
3534  throw cms::Exception("Assert") << __FILE__ << ":" << __LINE__ << " fillTrackingParticlesForSeeds: tpRef.key() "
3535  << tpRef.key() << " not found from tpKeyToIndex. tpKeyToIndex size "
3536  << tpKeyToIndex.size();
3537  const auto tpIndex = found->second;
3538  for (const auto& pair : keyVal.val) {
3539  const auto& seedRef = pair.first->seedRef();
3540  sim_seedIdx[tpIndex].push_back(seedOffset + seedRef.key());
3541  }
3542  }
3543 }
3544 
3547  for (size_t iVertex = 0, size = vertices.size(); iVertex < size; ++iVertex) {
3548  const reco::Vertex& vertex = vertices[iVertex];
3549  vtx_x.push_back(vertex.x());
3550  vtx_y.push_back(vertex.y());
3551  vtx_z.push_back(vertex.z());
3552  vtx_xErr.push_back(vertex.xError());
3553  vtx_yErr.push_back(vertex.yError());
3554  vtx_zErr.push_back(vertex.zError());
3555  vtx_chi2.push_back(vertex.chi2());
3556  vtx_ndof.push_back(vertex.ndof());
3557  vtx_fake.push_back(vertex.isFake());
3558  vtx_valid.push_back(vertex.isValid());
3559 
3560  std::vector<int> trkIdx;
3561  for (auto iTrack = vertex.tracks_begin(); iTrack != vertex.tracks_end(); ++iTrack) {
3562  // Ignore link if vertex was fit from a track collection different from the input
3563  if (iTrack->id() != tracks.id())
3564  continue;
3565 
3566  trkIdx.push_back(iTrack->key());
3567 
3568  if (trk_vtxIdx[iTrack->key()] != -1) {
3569  throw cms::Exception("LogicError") << "Vertex index has already been set for track " << iTrack->key() << " to "
3570  << trk_vtxIdx[iTrack->key()] << "; was trying to set it to " << iVertex;
3571  }
3572  trk_vtxIdx[iTrack->key()] = iVertex;
3573  }
3574  vtx_trkIdx.push_back(trkIdx);
3575  }
3576 }
3577 
3579  const TrackingParticleRefKeyToIndex& tpKeyToIndex) {
3580  int current_event = -1;
3581  for (const auto& ref : trackingVertices) {
3582  const TrackingVertex v = *ref;
3583  if (v.eventId().event() != current_event) {
3584  // next PV
3585  current_event = v.eventId().event();
3586  simpv_idx.push_back(simvtx_x.size());
3587  }
3588 
3589  unsigned int processType = std::numeric_limits<unsigned int>::max();
3590  if (!v.g4Vertices().empty()) {
3591  processType = v.g4Vertices()[0].processType();
3592  }
3593 
3594  simvtx_event.push_back(v.eventId().event());
3595  simvtx_bunchCrossing.push_back(v.eventId().bunchCrossing());
3596  simvtx_processType.push_back(processType);
3597 
3598  simvtx_x.push_back(v.position().x());
3599  simvtx_y.push_back(v.position().y());
3600  simvtx_z.push_back(v.position().z());
3601 
3602  auto fill = [&](const TrackingParticleRefVector& tps, std::vector<int>& idx) {
3603  for (const auto& tpRef : tps) {
3604  auto found = tpKeyToIndex.find(tpRef.key());
3605  if (found != tpKeyToIndex.end()) {
3606  idx.push_back(found->second);
3607  }
3608  }
3609  };
3610 
3611  std::vector<int> sourceIdx;
3612  std::vector<int> daughterIdx;
3613  fill(v.sourceTracks(), sourceIdx);
3614  fill(v.daughterTracks(), daughterIdx);
3615 
3616  simvtx_sourceSimIdx.push_back(sourceIdx);
3617  simvtx_daughterSimIdx.push_back(daughterIdx);
3618  }
3619 }
3620 
3621 // ------------ method fills 'descriptions' with the allowed parameters for the module ------------
3623  //The following says we do not know what parameters are allowed so do no validation
3624  // Please change this to state exactly what you do use, even if it is no parameters
3626  desc.addUntracked<std::vector<edm::InputTag>>(
3627  "seedTracks",
3628  std::vector<edm::InputTag>{edm::InputTag("seedTracksinitialStepSeeds"),
3629  edm::InputTag("seedTracksdetachedTripletStepSeeds"),
3630  edm::InputTag("seedTrackspixelPairStepSeeds"),
3631  edm::InputTag("seedTrackslowPtTripletStepSeeds"),
3632  edm::InputTag("seedTracksmixedTripletStepSeeds"),
3633  edm::InputTag("seedTrackspixelLessStepSeeds"),
3634  edm::InputTag("seedTrackstobTecStepSeeds"),
3635  edm::InputTag("seedTracksjetCoreRegionalStepSeeds"),
3636  edm::InputTag("seedTracksmuonSeededSeedsInOut"),
3637  edm::InputTag("seedTracksmuonSeededSeedsOutIn")});
3638  desc.addUntracked<std::vector<edm::InputTag>>(
3639  "trackCandidates",
3640  std::vector<edm::InputTag>{edm::InputTag("initialStepTrackCandidates"),
3641  edm::InputTag("detachedTripletStepTrackCandidates"),
3642  edm::InputTag("pixelPairStepTrackCandidates"),
3643  edm::InputTag("lowPtTripletStepTrackCandidates"),
3644  edm::InputTag("mixedTripletStepTrackCandidates"),
3645  edm::InputTag("pixelLessStepTrackCandidates"),
3646  edm::InputTag("tobTecStepTrackCandidates"),
3647  edm::InputTag("jetCoreRegionalStepTrackCandidates"),
3648  edm::InputTag("muonSeededTrackCandidatesInOut"),
3649  edm::InputTag("muonSeededTrackCandidatesOutIn")});
3650  desc.addUntracked<edm::InputTag>("tracks", edm::InputTag("generalTracks"));
3651  desc.addUntracked<std::vector<std::string>>("trackMVAs", std::vector<std::string>{{"generalTracks"}});
3652  desc.addUntracked<edm::InputTag>("trackingParticles", edm::InputTag("mix", "MergedTrackTruth"));
3653  desc.addUntracked<bool>("trackingParticlesRef", false);
3654  desc.addUntracked<edm::InputTag>("clusterTPMap", edm::InputTag("tpClusterProducer"));
3655  desc.addUntracked<edm::InputTag>("simHitTPMap", edm::InputTag("simHitTPAssocProducer"));
3656  desc.addUntracked<edm::InputTag>("trackAssociator", edm::InputTag("quickTrackAssociatorByHits"));
3657  desc.addUntracked<edm::InputTag>("pixelDigiSimLink", edm::InputTag("simSiPixelDigis"));
3658  desc.addUntracked<edm::InputTag>("stripDigiSimLink", edm::InputTag("simSiStripDigis"));
3659  desc.addUntracked<edm::InputTag>("phase2OTSimLink", edm::InputTag(""));
3660  desc.addUntracked<edm::InputTag>("beamSpot", edm::InputTag("offlineBeamSpot"));
3661  desc.addUntracked<edm::InputTag>("pixelRecHits", edm::InputTag("siPixelRecHits"));
3662  desc.addUntracked<edm::InputTag>("stripRphiRecHits", edm::InputTag("siStripMatchedRecHits", "rphiRecHit"));
3663  desc.addUntracked<edm::InputTag>("stripStereoRecHits", edm::InputTag("siStripMatchedRecHits", "stereoRecHit"));
3664  desc.addUntracked<edm::InputTag>("stripMatchedRecHits", edm::InputTag("siStripMatchedRecHits", "matchedRecHit"));
3665  desc.addUntracked<edm::InputTag>("phase2OTRecHits", edm::InputTag("siPhase2RecHits"));
3666  desc.addUntracked<edm::InputTag>("vertices", edm::InputTag("offlinePrimaryVertices"));
3667  desc.addUntracked<edm::InputTag>("trackingVertices", edm::InputTag("mix", "MergedTrackTruth"));
3668  desc.addUntracked<edm::InputTag>("trackingParticleNlayers",
3669  edm::InputTag("trackingParticleNumberOfLayersProducer", "trackerLayers"));
3670  desc.addUntracked<edm::InputTag>("trackingParticleNpixellayers",
3671  edm::InputTag("trackingParticleNumberOfLayersProducer", "pixelLayers"));
3672  desc.addUntracked<edm::InputTag>("trackingParticleNstripstereolayers",
3673  edm::InputTag("trackingParticleNumberOfLayersProducer", "stripStereoLayers"));
3674  desc.addUntracked<std::string>("TTRHBuilder", "WithTrackAngle");
3675  desc.addUntracked<std::string>("parametersDefiner", "LhcParametersDefinerForTP");
3676  desc.addUntracked<bool>("includeSeeds", false);
3677  desc.addUntracked<bool>("includeAllHits", false);
3678  desc.addUntracked<bool>("includeMVA", true);
3679  desc.addUntracked<bool>("includeTrackingParticles", true);
3680  descriptions.add("trackingNtuple", desc);
3681 }
3682 
3683 //define this as a plug-in
TrackingNtuple::DetIdCommon::module
std::vector< unsigned short > module
Definition: TrackingNtuple.cc:734
runTheMatrix.ret
ret
prodAgent to be discontinued
Definition: runTheMatrix.py:542
TrackingNtuple::sim_px
std::vector< float > sim_px
Definition: TrackingNtuple.cc:1032
TrackingNtuple::DetIdOTCommon::ring
std::vector< unsigned short > ring
Definition: TrackingNtuple.cc:826
TrackingNtuple::HitType::Unknown
TrackingNtuple::fillPixelHits
void fillPixelHits(const edm::Event &iEvent, const ClusterTPAssociation &clusterToTPMap, const TrackingParticleRefKeyToIndex &tpKeyToIndex, const SimHitTPAssociationProducer::SimHitTPAssociationList &simHitsTPAssoc, const edm::DetSetVector< PixelDigiSimLink > &digiSimLink, const TransientTrackingRecHitBuilder &theTTRHBuilder, const TrackerTopology &tTopo, const SimHitRefKeyToIndex &simHitRefKeyToIndex, std::set< edm::ProductID > &hitProductIds)
Definition: TrackingNtuple.cc:2479
TrackerTopology::tobIsDoubleSide
bool tobIsDoubleSide(const DetId &id) const
Definition: TrackerTopology.h:245
TrackerTopology::tibOrder
unsigned int tibOrder(const DetId &id) const
Definition: TrackerTopology.h:209
SummaryClient_cfi.labels
labels
Definition: SummaryClient_cfi.py:61
TrackingNtuple::trackAssociatorToken_
edm::EDGetTokenT< reco::TrackToTrackingParticleAssociator > trackAssociatorToken_
Definition: TrackingNtuple.cc:644
writedatasetfile.args
args
Definition: writedatasetfile.py:18
edm::DetSetVector
Definition: DetSetVector.h:61
TrackingNtuple::HitSimType::Noise
TrackingNtuple::vtx_chi2
std::vector< float > vtx_chi2
Definition: TrackingNtuple.cc:1239
TSCBLBuilderNoMaterial.h
heavyionUCCDQM_cfi.nClusters
nClusters
Definition: heavyionUCCDQM_cfi.py:9
TrackingNtuple::pix_simHitIdx
std::vector< std::vector< int > > pix_simHitIdx
Definition: TrackingNtuple.cc:1071
reco::HitPattern::MISSING_OUTER_HITS
Definition: HitPattern.h:155
TrackingNtuple::sim_simHitIdx
std::vector< std::vector< int > > sim_simHitIdx
Definition: TrackingNtuple.cc:1063
edm::RunNumber_t
unsigned int RunNumber_t
Definition: RunLumiEventNumber.h:14
FastTimerService_cff.range
range
Definition: FastTimerService_cff.py:34
TrackingNtuple::see_hitIdx
std::vector< std::vector< int > > see_hitIdx
Definition: TrackingNtuple.cc:1224
TrackingNtuple::TPHitIndex::simHitIdx
unsigned int simHitIdx
Definition: TrackingNtuple.cc:496
TrackerTopology::side
unsigned int side(const DetId &id) const
Definition: TrackerTopology.cc:28
TrackingNtuple::vtx_xErr
std::vector< float > vtx_xErr
Definition: TrackingNtuple.cc:1235
TrackingNtuple::str_yz
std::vector< float > str_yz
Definition: TrackingNtuple.cc:1102
TrackingNtuple::t
TTree * t
Definition: TrackingNtuple.cc:667
TrackingNtuple::DetIdOTCommon::Parsed::ring
unsigned int ring
Definition: TrackingNtuple.cc:807
TrackingNtuple::trk_refpoint_z
std::vector< float > trk_refpoint_z
Definition: TrackingNtuple.cc:980
cscDigiValidation_cfi.simTrack
simTrack
Definition: cscDigiValidation_cfi.py:29
TrackingNtuple::see_eta
std::vector< float > see_eta
Definition: TrackingNtuple.cc:1190
electrons_cff.bool
bool
Definition: electrons_cff.py:366
EDAnalyzer.h
TrackingNtuple::ev_lumi
edm::LuminosityBlockNumber_t ev_lumi
Definition: TrackingNtuple.cc:944
edm::AssociationMap::find
const_iterator find(const key_type &k) const
find element with specified reference key
Definition: AssociationMap.h:173
mps_fire.i
i
Definition: mps_fire.py:428
trackHitsToClusterRefs.h
TrackingNtuple::trk_seedIdx
std::vector< int > trk_seedIdx
Definition: TrackingNtuple.cc:1006
TrackingNtuple::HitType::Phase2OT
TrackingNtuple::DetIdPixelOnly::push_back
void push_back(const TrackerTopology &tTopo, const DetId &id)
Definition: TrackingNtuple.cc:747
TrackingNtuple::sim_trkShareFrac
std::vector< std::vector< float > > sim_trkShareFrac
Definition: TrackingNtuple.cc:1059
TrackingNtuple::matchCluster
SimHitData matchCluster(const OmniClusterRef &cluster, DetId hitId, int clusterKey, const TransientTrackingRecHit::RecHitPointer &ttrh, const ClusterTPAssociation &clusterToTPMap, const TrackingParticleRefKeyToIndex &tpKeyToIndex, const SimHitTPAssociationProducer::SimHitTPAssociationList &simHitsTPAssoc, const edm::DetSetVector< SimLink > &digiSimLinks, const SimHitRefKeyToIndex &simHitRefKeyToIndex, HitType hitType)
Definition: TrackingNtuple.cc:2259
HLT_FULL_cff.track
track
Definition: HLT_FULL_cff.py:11713
TrackingNtuple::trackToken_
edm::EDGetTokenT< edm::View< reco::Track > > trackToken_
Definition: TrackingNtuple.cc:637
TrackingNtuple::str_seeIdx
std::vector< std::vector< int > > str_seeIdx
Definition: TrackingNtuple.cc:1092
TrackingNtuple::tpHitIndexListLessSort
static bool tpHitIndexListLessSort(const TPHitIndex &i, const TPHitIndex &j)
Definition: TrackingNtuple.cc:501
StandaloneTrackMonitor_cfi.trackQuality
trackQuality
Definition: StandaloneTrackMonitor_cfi.py:11
TrackingNtuple::glu_yy
std::vector< float > glu_yy
Definition: TrackingNtuple.cc:1121
MessageLogger.h
TrackingNtuple::trk_nChi2_1Dmod
std::vector< float > trk_nChi2_1Dmod
Definition: TrackingNtuple.cc:982
TrackingNtuple::trk_inner_pz
std::vector< float > trk_inner_pz
Definition: TrackingNtuple.cc:956
TrackingNtuple::trk_qualityMasks
std::vector< std::vector< unsigned short > > trk_qualityMasks
Definition: TrackingNtuple.cc:985
TrackingNtuple::trk_originalAlgo
std::vector< unsigned int > trk_originalAlgo
Definition: TrackingNtuple.cc:1002
TrackingNtuple::includeTrackingParticles_
const bool includeTrackingParticles_
Definition: TrackingNtuple.cc:663
TrackingNtuple::str_radL
std::vector< float > str_radL
Definition: TrackingNtuple.cc:1106
TrackingNtuple::see_stateTrajPy
std::vector< float > see_stateTrajPy
Definition: TrackingNtuple.cc:1204
TrackingNtuple::trk_dzPV
std::vector< float > trk_dzPV
Definition: TrackingNtuple.cc:969
TrackingNtuple::trk_isHP
std::vector< short > trk_isHP
Definition: TrackingNtuple.cc:1005
PixelSubdetector::PixelEndcap
Definition: PixelSubdetector.h:11
TrackerGeometry.h
hit::id
unsigned int id
Definition: SiStripHitEffFromCalibTree.cc:92
PixelSubdetector::PixelBarrel
Definition: PixelSubdetector.h:11
edm::Handle::product
T const * product() const
Definition: Handle.h:70
TrackingNtuple::clearVariables
void clearVariables()
Definition: TrackingNtuple.cc:1703
TrackingNtuple::see_nPixel
std::vector< unsigned int > see_nPixel
Definition: TrackingNtuple.cc:1208
SimHitTPAssociationProducer
Definition: SimHitTPAssociationProducer.h:15
MainPageGenerator.link
link
Definition: MainPageGenerator.py:271
hfClusterShapes_cfi.hits
hits
Definition: hfClusterShapes_cfi.py:5
TrackingNtuple::DetIdPixelOnly::book
void book(const std::string &prefix, TTree *tree)
Definition: TrackingNtuple.cc:741
TrackingNtuple::ev_event
edm::EventNumber_t ev_event
Definition: TrackingNtuple.cc:945
Phase2TrackerCluster1D
Definition: Phase2TrackerCluster1D.h:10
TrackingNtuple::str_y
std::vector< float > str_y
Definition: TrackingNtuple.cc:1097
TrackingNtuple::trackingVertexToken_
edm::EDGetTokenT< TrackingVertexCollection > trackingVertexToken_
Definition: TrackingNtuple.cc:656
ESHandle.h
align::BeamSpot
Definition: StructureType.h:95
TrackingNtuple::glu_seeIdx
std::vector< std::vector< int > > glu_seeIdx
Definition: TrackingNtuple.cc:1115
TrackingNtuple::trk_n3DLay
std::vector< unsigned int > trk_n3DLay
Definition: TrackingNtuple.cc:998
edm::DetSetVector::end
iterator end()
Return the off-the-end iterator.
Definition: DetSetVector.h:325
TrackingNtuple::see_stateTrajX
std::vector< float > see_stateTrajX
Definition: TrackingNtuple.cc:1201
TrackingNtuple::trk_nPixel
std::vector< unsigned int > trk_nPixel
Definition: TrackingNtuple.cc:990
TrackingNtuple::glu_xx
std::vector< float > glu_xx
Definition: TrackingNtuple.cc:1119
ESInputTag
sistrip::View
View
Definition: ConstantsForView.h:26
TrackerTopology::isLower
bool isLower(const DetId &id) const
Definition: TrackerTopology.cc:195
TrackingNtuple::trk_nOuterInactive
std::vector< unsigned int > trk_nOuterInactive
Definition: TrackingNtuple.cc:994
TrackingNtuple::trk_dz
std::vector< float > trk_dz
Definition: TrackingNtuple.cc:967
edm::isNotFinite
constexpr bool isNotFinite(T x)
Definition: isFinite.h:9
TrackingNtuple::see_stateTrajPz
std::vector< float > see_stateTrajPz
Definition: TrackingNtuple.cc:1205
TrackingNtuple::str_isBarrel
std::vector< short > str_isBarrel
Definition: TrackingNtuple.cc:1089
TrackingNtuple::trk_dzErr
std::vector< float > trk_dzErr
Definition: TrackingNtuple.cc:977
edm::DetSet
Definition: DetSet.h:23
TrackingNtuple::ph2_z
std::vector< float > ph2_z
Definition: TrackingNtuple.cc:1140
DiDispStaMuonMonitor_cfi.pt
pt
Definition: DiDispStaMuonMonitor_cfi.py:39
SiStripMatchedRecHit2DCollection.h
TrackingNtuple::see_simTrkIdx
std::vector< std::vector< int > > see_simTrkIdx
Definition: TrackingNtuple.cc:1223
TrackingNtuple::tracer_
HistoryBase tracer_
Definition: TrackingNtuple.cc:665
TrackingNtuple::trk_etaErr
std::vector< float > trk_etaErr
Definition: TrackingNtuple.cc:973
TrackingNtuple::trk_isTrue
std::vector< short > trk_isTrue
Definition: TrackingNtuple.cc:1008
TrackingNtuple::ttrhToken_
const edm::ESGetToken< TransientTrackingRecHitBuilder, TransientRecHitRecord > ttrhToken_
Definition: TrackingNtuple.cc:630
min
T min(T a, T b)
Definition: MathUtil.h:58
TrackingNtuple::includeAllHits_
const bool includeAllHits_
Definition: TrackingNtuple.cc:661
TrackingNtuple::trk_bestSimTrkNChi2
std::vector< float > trk_bestSimTrkNChi2
Definition: TrackingNtuple.cc:1013
edm::EDGetTokenT
Definition: EDGetToken.h:33
TrackingNtuple::trk_bestSimTrkIdx
std::vector< int > trk_bestSimTrkIdx
Definition: TrackingNtuple.cc:1009
edm
HLT enums.
Definition: AlignableModifier.h:19
TrackingNtuple::includeMVA_
const bool includeMVA_
Definition: TrackingNtuple.cc:662
TrackingNtuple::trk_bestFromFirstHitSimTrkShareFracSimDenom
std::vector< float > trk_bestFromFirstHitSimTrkShareFracSimDenom
Definition: TrackingNtuple.cc:1016
gpuClustering::adc
uint16_t *__restrict__ uint16_t const *__restrict__ adc
Definition: gpuClusterChargeCut.h:20
TrackerTopology
Definition: TrackerTopology.h:16
TrackingNtuple::DetIdStripOnly::parse
Parsed parse(const TrackerTopology &tTopo, const DetId &id) const
Definition: TrackingNtuple.cc:884
TrackingNtuple::see_px
std::vector< float > see_px
Definition: TrackingNtuple.cc:1186
tree
Definition: tree.py:1
edm::ProductLabels::module
char const * module
Definition: ProductLabels.h:5
reco::TrackToTrackingParticleAssociator::associateRecoToSim
reco::RecoToSimCollection associateRecoToSim(const edm::Handle< edm::View< reco::Track >> &tCH, const edm::Handle< TrackingParticleCollection > &tPCH) const
Definition: TrackToTrackingParticleAssociator.h:64
TrackingNtuple::paramsDefineToken_
const edm::ESGetToken< ParametersDefinerForTP, TrackAssociatorRecord > paramsDefineToken_
Definition: TrackingNtuple.cc:633
TrackerTopology::tecIsDoubleSide
bool tecIsDoubleSide(const DetId &id) const
Definition: TrackerTopology.h:246
TransientRecHitRecord.h
DetId::det
constexpr Detector det() const
get the detector field from this detid
Definition: DetId.h:46
TrackingNtuple::see_dxy
std::vector< float > see_dxy
Definition: TrackingNtuple.cc:1192
TrackerTopology::tidIsDoubleSide
bool tidIsDoubleSide(const DetId &id) const
Definition: TrackerTopology.h:250
TrackerTopology::pxbLadder
unsigned int pxbLadder(const DetId &id) const
Definition: TrackerTopology.h:155
TrackingNtuple::HitSimType
HitSimType
Definition: TrackingNtuple.cc:487
reco::VertexCollection
std::vector< Vertex > VertexCollection
collection of Vertex objects
Definition: VertexFwd.h:9
TrackingNtuple::trk_nOuterLost
std::vector< unsigned int > trk_nOuterLost
Definition: TrackingNtuple.cc:992
TrackingNtuple::bsp_sigmax
float bsp_sigmax
Definition: TrackingNtuple.cc:1179
pos
Definition: PixelAliasList.h:18
edm::LogPrint
Log< level::Warning, true > LogPrint
Definition: MessageLogger.h:130
TrackingNtuple::pixelSimLinkToken_
edm::EDGetTokenT< edm::DetSetVector< PixelDigiSimLink > > pixelSimLinkToken_
Definition: TrackingNtuple.cc:645
TrackingNtuple::ph2_xy
std::vector< float > ph2_xy
Definition: TrackingNtuple.cc:1142
HLT_FULL_cff.InputTag
InputTag
Definition: HLT_FULL_cff.py:89285
reco::TrackToTrackingParticleAssociator
Definition: TrackToTrackingParticleAssociator.h:51
ClusterTPAssociation
Definition: ClusterTPAssociation.h:21
l1GtPatternGenerator_cfi.bx
bx
Definition: l1GtPatternGenerator_cfi.py:18
edm::ParameterSetDescription
Definition: ParameterSetDescription.h:52
TrackingNtuple::DetIdStripOnly::string
std::vector< unsigned short > string
Definition: TrackingNtuple.cc:899
getBestVertex.h
TrackingNtuple::~TrackingNtuple
~TrackingNtuple() override
Definition: TrackingNtuple.cc:1695
TrackingNtuple::see_hitType
std::vector< std::vector< int > > see_hitType
Definition: TrackingNtuple.cc:1225
TrackingNtuple::simhit_detId
DetIdAll simhit_detId
Definition: TrackingNtuple.cc:1161
TrackingNtuple::simhit_process
std::vector< short > simhit_process
Definition: TrackingNtuple.cc:1167
TrackingNtuple::DetIdOTCommon::resize
void resize(size_t size)
Definition: TrackingNtuple.cc:783
track_associator::trackAssociationChi2
double trackAssociationChi2(const reco::TrackBase::ParameterVector &rParameters, const reco::TrackBase::CovarianceMatrix &recoTrackCovMatrix, const Basic3DVector< double > &momAtVtx, const Basic3DVector< double > &vert, int charge, const MagneticField &magfield, const reco::BeamSpot &bs)
basic method where chi2 is computed
Definition: trackAssociationChi2.cc:9
to
TrackingNtuple::DetIdCommon::push_back
void push_back(const TrackerTopology &tTopo, const DetId &id)
Definition: TrackingNtuple.cc:685
muonClassificationByHits_cfi.pixel
pixel
Definition: muonClassificationByHits_cfi.py:9
TrackingNtuple::vertexToken_
edm::EDGetTokenT< reco::VertexCollection > vertexToken_
Definition: TrackingNtuple.cc:655
edm::EDGetTokenT::isUninitialized
constexpr bool isUninitialized() const noexcept
Definition: EDGetToken.h:99
TrackingVertexCollection
std::vector< TrackingVertex > TrackingVertexCollection
Definition: TrackingVertexContainer.h:8
TrackingNtuple::trk_nPixelLay
std::vector< unsigned int > trk_nPixelLay
Definition: TrackingNtuple.cc:996
TrackingNtuple::see_trkIdx
std::vector< int > see_trkIdx
Definition: TrackingNtuple.cc:1216
TrackingNtuple::tpNLayersToken_
edm::EDGetTokenT< edm::ValueMap< unsigned int > > tpNLayersToken_
Definition: TrackingNtuple.cc:657
TrackingNtuple::SimHitData
Definition: TrackingNtuple.cc:608
TrackingNtuple::inv_detId
DetIdAll inv_detId
Definition: TrackingNtuple.cc:1155
TrackerTopology::layer
unsigned int layer(const DetId &id) const
Definition: TrackerTopology.cc:47
TrackingNtuple::str_trkIdx
std::vector< std::vector< int > > str_trkIdx
Definition: TrackingNtuple.cc:1091
TrackingNtuple::trk_nCluster
std::vector< unsigned int > trk_nCluster
Definition: TrackingNtuple.cc:1000
PixelChannelIdentifier.h
edmNew::DetSetVector::begin
const_iterator begin(bool update=false) const
Definition: DetSetVectorNew.h:530
TrackingNtuple::see_bestFromFirstHitSimTrkShareFrac
std::vector< float > see_bestFromFirstHitSimTrkShareFrac
Definition: TrackingNtuple.cc:1221
HistoryBase::recoGenParticleTrail
const RecoGenParticleTrail & recoGenParticleTrail() const
Return all reco::GenParticle in the history.
Definition: HistoryBase.h:64
TrackingVertex.h
TrackingNtuple::trk_refpoint_y
std::vector< float > trk_refpoint_y
Definition: TrackingNtuple.cc:979
TrackerTopology::stack
uint32_t stack(const DetId &id) const
Definition: TrackerTopology.cc:104
TrackingNtuple::simpv_idx
std::vector< int > simpv_idx
Definition: TrackingNtuple.cc:1255
HistoryBase::RecoGenParticleTrail
std::vector< const reco::GenParticle * > RecoGenParticleTrail
reco::GenParticle trail type.
Definition: HistoryBase.h:18
edm::ParameterSet::getUntrackedParameter
T getUntrackedParameter(std::string const &, T const &) const
TrackingParticle::Vector
math::XYZVectorD Vector
point in the space
Definition: TrackingParticle.h:37
TrackingNtuple::see_nGlued
std::vector< unsigned int > see_nGlued
Definition: TrackingNtuple.cc:1209
TrackingNtuple::sim_parentVtxIdx
std::vector< int > sim_parentVtxIdx
Definition: TrackingNtuple.cc:1061
edm::RefVector< TrackingParticleCollection >
SiPixelCluster
Pixel cluster – collection of neighboring pixels above threshold.
Definition: SiPixelCluster.h:28
TrackingNtuple::trk_px
std::vector< float > trk_px
Definition: TrackingNtuple.cc:950
TrackingNtuple::trk_bestFromFirstHitSimTrkShareFrac
std::vector< float > trk_bestFromFirstHitSimTrkShareFrac
Definition: TrackingNtuple.cc:1015
TrackingNtuple::pix_isBarrel
std::vector< short > pix_isBarrel
Definition: TrackingNtuple.cc:1067
reco
fixed size matrix
Definition: AlignmentAlgorithmBase.h:45
TrackingNtuple::trk_inner_pt
std::vector< float > trk_inner_pt
Definition: TrackingNtuple.cc:957
edm::one::EDAnalyzer
Definition: EDAnalyzer.h:30
TrackingNtuple::pix_yz
std::vector< float > pix_yz
Definition: TrackingNtuple.cc:1080
TrackingRecHit::RecHitPointer
std::shared_ptr< TrackingRecHit const > RecHitPointer
Definition: TrackingRecHit.h:24
TrackerTopology::module
unsigned int module(const DetId &id) const
Definition: TrackerTopology.cc:66
Signal
findQualityFiles.v
v
Definition: findQualityFiles.py:179
hltPixelTracks_cff.chi2
chi2
Definition: hltPixelTracks_cff.py:25
beam_dqm_sourceclient-live_cfg.mva
mva
Definition: beam_dqm_sourceclient-live_cfg.py:126
TransientTrackingRecHitBuilder::build
virtual RecHitPointer build(const TrackingRecHit *p) const =0
build a tracking rechit from an existing rechit
TrackingNtuple::DetIdPixelOnly::ladder
std::vector< unsigned short > ladder
Definition: TrackingNtuple.cc:761
spr::find
void find(edm::Handle< EcalRecHitCollection > &hits, DetId thisDet, std::vector< EcalRecHitCollection::const_iterator > &hit, bool debug=false)
Definition: FindCaloHit.cc:19
TrackingNtuple::DetIdCommon::DetIdCommon
DetIdCommon()
Definition: TrackingNtuple.cc:673
TrackingNtuple::trk_outer_pz
std::vector< float > trk_outer_pz
Definition: TrackingNtuple.cc:960
TrackingNtuple::str_xy
std::vector< float > str_xy
Definition: TrackingNtuple.cc:1100
newFWLiteAna.found
found
Definition: newFWLiteAna.py:118
edm::Handle< reco::TrackToTrackingParticleAssociator >
edm::LuminosityBlockNumber_t
unsigned int LuminosityBlockNumber_t
Definition: RunLumiEventNumber.h:13
TrackingNtuple::simhit_z
std::vector< float > simhit_z
Definition: TrackingNtuple.cc:1165
OmniClusterRef
Definition: OmniClusterRef.h:12
TrackingNtuple::ph2_zz
std::vector< float > ph2_zz
Definition: TrackingNtuple.cc:1145
TrackingNtuple::ph2_yy
std::vector< float > ph2_yy
Definition: TrackingNtuple.cc:1143
TrackToTrackingParticleAssociator
SiPixelCluster::Pixel
Definition: SiPixelCluster.h:30
TrackingNtuple::sim_nStrip
std::vector< unsigned int > sim_nStrip
Definition: TrackingNtuple.cc:1049
TrackingNtuple::see_dzErr
std::vector< float > see_dzErr
Definition: TrackingNtuple.cc:1198
TrackingNtuple::sim_isFromBHadron
std::vector< int > sim_isFromBHadron
Definition: TrackingNtuple.cc:1031
rpcPointValidation_cfi.recHit
recHit
Definition: rpcPointValidation_cfi.py:7
TrackingNtuple::trk_nInnerLost
std::vector< unsigned int > trk_nInnerLost
Definition: TrackingNtuple.cc:993
TrackerTopology::tidRing
unsigned int tidRing(const DetId &id) const
Definition: TrackerTopology.h:218
EcalTangentSkim_cfg.o
o
Definition: EcalTangentSkim_cfg.py:42
RZLine::chi2
float chi2() const
Definition: RZLine.h:94
TrackerTopology::tobRod
unsigned int tobRod(const DetId &id) const
Definition: TrackerTopology.h:195
TkTransientTrackingRecHitBuilder.h
TrackingNtuple::sim_nRecoClusters
std::vector< unsigned int > sim_nRecoClusters
Definition: TrackingNtuple.cc:1056
edm::Ref< TrackingParticleCollection >
TrackingNtuple::glu_zx
std::vector< float > glu_zx
Definition: TrackingNtuple.cc:1124
TrackingNtuple::glu_detId
DetIdStrip glu_detId
Definition: TrackingNtuple.cc:1112
OmniClusterRef::cluster_phase2OT
Phase2Cluster1DRef cluster_phase2OT() const
Definition: OmniClusterRef.h:48
heavyIonCSV_trainingSettings.idx
idx
Definition: heavyIonCSV_trainingSettings.py:5
TrackingNtuple::pix_zx
std::vector< float > pix_zx
Definition: TrackingNtuple.cc:1082
TrackerTopology::tibSide
unsigned int tibSide(const DetId &id) const
Definition: TrackerTopology.h:186
F
static uInt32 F(BLOWFISH_CTX *ctx, uInt32 x)
Definition: blowfish.cc:163
TrackingNtuple::fillSeeds
void fillSeeds(const edm::Event &iEvent, const TrackingParticleRefVector &tpCollection, const TrackingParticleRefKeyToIndex &tpKeyToIndex, const reco::BeamSpot &bs, const reco::TrackToTrackingParticleAssociator &associatorByHits, const ClusterTPAssociation &clusterToTPMap, const TransientTrackingRecHitBuilder &theTTRHBuilder, const MagneticField &theMF, const TrackerTopology &tTopo, std::vector< std::pair< int, int >> &monoStereoClusterList, const std::set< edm::ProductID > &hitProductIds, std::map< edm::ProductID, size_t > &seedToCollIndex)
Definition: TrackingNtuple.cc:2757
SiStripCluster::firstStrip
uint16_t firstStrip() const
Definition: SiStripCluster.h:46
TrackingNtuple::fillTracks
void fillTracks(const edm::RefToBaseVector< reco::Track > &tracks, const TrackingParticleRefVector &tpCollection, const TrackingParticleRefKeyToIndex &tpKeyToIndex, const TrackingParticleRefKeyToCount &tpKeyToClusterCount, const MagneticField &mf, const reco::BeamSpot &bs, const reco::VertexCollection &vertices, const reco::TrackToTrackingParticleAssociator &associatorByHits, const ClusterTPAssociation &clusterToTPMap, const TransientTrackingRecHitBuilder &theTTRHBuilder, const TrackerTopology &tTopo, const std::set< edm::ProductID > &hitProductIds, const std::map< edm::ProductID, size_t > &seedToCollIndex, const std::vector< const MVACollection * > &mvaColls, const std::vector< const QualityMaskCollection * > &qualColls)
Definition: TrackingNtuple.cc:3097
TrackingNtuple::fillSimHits
void fillSimHits(const TrackerGeometry &tracker, const TrackingParticleRefKeyToIndex &tpKeyToIndex, const SimHitTPAssociationProducer::SimHitTPAssociationList &simHitsTPAssoc, const TrackerTopology &tTopo, SimHitRefKeyToIndex &simHitRefKeyToIndex, std::vector< TPHitIndex > &tpHitList)
Definition: TrackingNtuple.cc:2367
trackingPlots.assoc
assoc
Definition: trackingPlots.py:184
TrackerTopology::pxfPanel
unsigned int pxfPanel(const DetId &id) const
Definition: TrackerTopology.h:450
ndof
Definition: HIMultiTrackSelector.h:49
TrackingNtuple::DetIdCommon::detId
std::vector< unsigned int > detId
Definition: TrackingNtuple.cc:730
TrackingNtuple::TPHitIndex::TPHitIndex
TPHitIndex(unsigned int tp=0, unsigned int simHit=0, float to=0, unsigned int id=0)
Definition: TrackingNtuple.cc:493
MuonAssociatorByHits_cfi.tpTag
tpTag
Definition: MuonAssociatorByHits_cfi.py:152
fileCollector.seed
seed
Definition: fileCollector.py:127
TrackingNtuple::DetIdPhase2OTOnly
Definition: TrackingNtuple.cc:906
TrackingNtuple::str_chargeFraction
std::vector< std::vector< float > > str_chargeFraction
Definition: TrackingNtuple.cc:1094
TrackingNtuple::fillTrackingParticles
void fillTrackingParticles(const edm::Event &iEvent, const edm::EventSetup &iSetup, const edm::RefToBaseVector< reco::Track > &tracks, const reco::BeamSpot &bs, const TrackingParticleRefVector &tpCollection, const TrackingVertexRefKeyToIndex &tvKeyToIndex, const reco::TrackToTrackingParticleAssociator &associatorByHits, const std::vector< TPHitIndex > &tpHitList, const TrackingParticleRefKeyToCount &tpKeyToClusterCount)
Definition: TrackingNtuple.cc:3379
DetId
Definition: DetId.h:17
cmsdt::algo
algo
Definition: constants.h:165
TrackingNtuple::str_z
std::vector< float > str_z
Definition: TrackingNtuple.cc:1098
TrackingNtuple::glu_zz
std::vector< float > glu_zz
Definition: TrackingNtuple.cc:1123
edm::AssociationMap::end
const_iterator end() const
last iterator over the map (read only)
Definition: AssociationMap.h:171
TrackingNtuple::DetIdPixel
CombineDetId< DetIdCommon, DetIdPixelOnly > DetIdPixel
Definition: TrackingNtuple.cc:936
MakerMacros.h
TrackerTopology.h
alignCSCRings.s
s
Definition: alignCSCRings.py:92
cms::cuda::bs
bs
Definition: HistoContainer.h:127
TrackingNtuple::sim_decayVtxIdx
std::vector< std::vector< int > > sim_decayVtxIdx
Definition: TrackingNtuple.cc:1062
TrackingNtuple::bsp_sigmay
float bsp_sigmay
Definition: TrackingNtuple.cc:1180
reco::HitPattern
Definition: HitPattern.h:147
track_associator::hitsToClusterRefs
std::vector< OmniClusterRef > hitsToClusterRefs(iter begin, iter end)
Definition: trackHitsToClusterRefs.h:21
TrackingNtuple::sim_q
std::vector< int > sim_q
Definition: TrackingNtuple.cc:1045
TrackingNtuple::HitType::Pixel
TTClusterAssociation_cfi.digiSimLinks
digiSimLinks
Definition: TTClusterAssociation_cfi.py:8
TrackingNtuple::trk_algo
std::vector< unsigned int > trk_algo
Definition: TrackingNtuple.cc:1001
EgammaObjectsElectrons_cfi.particleID
particleID
Definition: EgammaObjectsElectrons_cfi.py:4
TrackingParticleIP::dxy
auto dxy(const T_Vertex &vertex, const T_Momentum &momentum, const T_Point &point)
Definition: TrackingParticleIP.h:11
TrackingNtuple::trk_phi
std::vector< float > trk_phi
Definition: TrackingNtuple.cc:965
TrackerTopologyRcd.h
TrackingNtuple::ph2_simType
std::vector< unsigned short > ph2_simType
Definition: TrackingNtuple.cc:1137
Track.h
trackingPlots.hp
hp
Definition: trackingPlots.py:1230
TrackingNtuple::DetIdCommon::operator[]
unsigned int operator[](size_t i) const
Definition: TrackingNtuple.cc:675
TrackFwd.h
TrackingNtuple::trk_bestFromFirstHitSimTrkShareFracSimClusterDenom
std::vector< float > trk_bestFromFirstHitSimTrkShareFracSimClusterDenom
Definition: TrackingNtuple.cc:1017
DEFINE_FWK_MODULE
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:16
TrackingVertexContainer.h
edm::ConfigurationDescriptions::add
void add(std::string const &label, ParameterSetDescription const &psetDescription)
Definition: ConfigurationDescriptions.cc:57
edm::RefToBaseVector::push_back
void push_back(const RefToBase< T > &)
Definition: RefToBaseVector.h:217
TrackingNtuple::trk_algoMask
std::vector< decltype(reco::TrackBase().algoMaskUL())> trk_algoMask
Definition: TrackingNtuple.cc:1003
TrackingNtuple::SimHitData::type
HitSimType type
Definition: TrackingNtuple.cc:613
PixelChannelIdentifier::pixelToChannel
static int pixelToChannel(int row, int col)
Definition: PixelChannelIdentifier.h:65
TrackingNtuple::see_pt
std::vector< float > see_pt
Definition: TrackingNtuple.cc:1189
nHits
const caConstants::TupleMultiplicity *__restrict__ const HitsOnGPU *__restrict__ double *__restrict__ float *__restrict__ double *__restrict__ uint32_t nHits
Definition: BrokenLineFitOnGPU.h:27
TrackingNtuple::trk_dxyClosestPV
std::vector< float > trk_dxyClosestPV
Definition: TrackingNtuple.cc:970
TrackingNtuple::see_pz
std::vector< float > see_pz
Definition: TrackingNtuple.cc:1188
TrackingNtuple::DetIdStrip
CombineDetId< DetIdCommon, DetIdOTCommon, DetIdStripOnly > DetIdStrip
Definition: TrackingNtuple.cc:937
GlobalPosition_Frontier_DevDB_cff.tag
tag
Definition: GlobalPosition_Frontier_DevDB_cff.py:11
TrackingNtuple::inv_detId_phase2
DetIdAllPhase2 inv_detId_phase2
Definition: TrackingNtuple.cc:1156
BaseTrackerRecHit
Definition: BaseTrackerRecHit.h:15
TrackerTopology::isStereo
bool isStereo(const DetId &id) const
Definition: TrackerTopology.cc:158
TrackingNtuple::see_nValid
std::vector< unsigned int > see_nValid
Definition: TrackingNtuple.cc:1207
TrackingNtuple::simhit_tof
std::vector< float > simhit_tof
Definition: TrackingNtuple.cc:1169
TrackingNtuple::pix_x
std::vector< float > pix_x
Definition: TrackingNtuple.cc:1074
TrackingNtuple::HitType::Glued
Service.h
PVValHelper::eta
Definition: PVValidationHelpers.h:70
OmniClusterRef::stripCluster
SiStripCluster const & stripCluster() const
Definition: OmniClusterRef.h:55
rpcPointValidation_cfi.simHit
simHit
Definition: rpcPointValidation_cfi.py:24
TrackingNtuple::DetIdStripOnly
Definition: TrackingNtuple.cc:830
TrackingNtuple::inv_type
std::vector< unsigned short > inv_type
Definition: TrackingNtuple.cc:1157
TrackingNtuple::see_etaErr
std::vector< float > see_etaErr
Definition: TrackingNtuple.cc:1195
TrackingNtuple::pix_zz
std::vector< float > pix_zz
Definition: TrackingNtuple.cc:1081
mathSSE::sqrt
T sqrt(T t)
Definition: SSEVec.h:19
TrackingNtuple::ph2_yz
std::vector< float > ph2_yz
Definition: TrackingNtuple.cc:1144
PerigeeConversions.h
TrackingParticle
Monte Carlo truth information used for tracking validation.
Definition: TrackingParticle.h:29
TrackingNtuple::fillPhase2OTHits
void fillPhase2OTHits(const edm::Event &iEvent, const ClusterTPAssociation &clusterToTPMap, const TrackingParticleRefKeyToIndex &tpKeyToIndex, const SimHitTPAssociationProducer::SimHitTPAssociationList &simHitsTPAssoc, const edm::DetSetVector< PixelDigiSimLink > &digiSimLink, const TransientTrackingRecHitBuilder &theTTRHBuilder, const TrackerTopology &tTopo, const SimHitRefKeyToIndex &simHitRefKeyToIndex, std::set< edm::ProductID > &hitProductIds)
Definition: TrackingNtuple.cc:2688
mps_fire.end
end
Definition: mps_fire.py:242
TrackingNtuple::trk_simTrkIdx
std::vector< std::vector< int > > trk_simTrkIdx
Definition: TrackingNtuple.cc:1021
reco::BeamSpot
Definition: BeamSpot.h:21
TrackingNtuple::DetIdOTCommon::push_back
void push_back(const TrackerTopology &tTopo, const DetId &id)
Definition: TrackingNtuple.cc:776
TrackingNtuple::SimHitData::bunchCrossing
std::vector< int > bunchCrossing
Definition: TrackingNtuple.cc:611
reco::Track
Definition: Track.h:27
ProductID.h
IdealMagneticFieldRecord.h
TrackingNtuple::sim_pca_eta
std::vector< float > sim_pca_eta
Definition: TrackingNtuple.cc:1039
TrackingNtuple::str_simHitIdx
std::vector< std::vector< int > > str_simHitIdx
Definition: TrackingNtuple.cc:1093
TrackingVertexRef
edm::Ref< TrackingVertexCollection > TrackingVertexRef
Definition: TrackingVertexContainer.h:9
TrackingNtuple::sim_nPixelLay
std::vector< unsigned int > sim_nPixelLay
Definition: TrackingNtuple.cc:1051
declareDynArray
#define declareDynArray(T, n, x)
Definition: DynArray.h:91
TrackingNtuple::see_dz
std::vector< float > see_dz
Definition: TrackingNtuple.cc:1193
TrackingNtuple::see_bestSimTrkShareFrac
std::vector< float > see_bestSimTrkShareFrac
Definition: TrackingNtuple.cc:1219
TrackingNtuple::bsp_x
float bsp_x
Definition: TrackingNtuple.cc:1176
TrackingNtuple::DetIdOTCommon::set
void set(size_t index, const TrackerTopology &tTopo, const DetId &id)
Definition: TrackingNtuple.cc:789
TrackingNtuple::trk_simTrkNChi2
std::vector< std::vector< float > > trk_simTrkNChi2
Definition: TrackingNtuple.cc:1020
TrackingNtuple::DetIdStripOnly::resize
void resize(size_t size)
Definition: TrackingNtuple.cc:851
submitPVResolutionJobs.count
count
Definition: submitPVResolutionJobs.py:352
TrackingNtuple::sim_pca_cotTheta
std::vector< float > sim_pca_cotTheta
Definition: TrackingNtuple.cc:1041
StripSubdetector::TIB
static constexpr auto TIB
Definition: StripSubdetector.h:16
TrackingNtuple::simvtx_daughterSimIdx
std::vector< std::vector< int > > simvtx_daughterSimIdx
Definition: TrackingNtuple.cc:1254
TrackingNtuple::sim_trkIdx
std::vector< std::vector< int > > sim_trkIdx
Definition: TrackingNtuple.cc:1058
reco::TrackBase::algoName
std::string algoName() const
Definition: TrackBase.h:550
edm::EventNumber_t
unsigned long long EventNumber_t
Definition: RunLumiEventNumber.h:12
TrackingNtuple::trk_lambdaErr
std::vector< float > trk_lambdaErr
Definition: TrackingNtuple.cc:974
TrackingNtuple::ph2_isBarrel
std::vector< short > ph2_isBarrel
Definition: TrackingNtuple.cc:1131
TrackingNtuple::sim_pca_lambda
std::vector< float > sim_pca_lambda
Definition: TrackingNtuple.cc:1040
TrackingNtuple::pix_xy
std::vector< float > pix_xy
Definition: TrackingNtuple.cc:1078
TrackingNtuple::DetIdStripOnly::petalNumber
std::vector< unsigned short > petalNumber
Definition: TrackingNtuple.cc:900
TrackingNtuple::DetIdPixelOnly::blade
std::vector< unsigned short > blade
Definition: TrackingNtuple.cc:762
GlobalPoint
Global3DPoint GlobalPoint
Definition: GlobalPoint.h:10
TrackingNtuple::pix_simType
std::vector< unsigned short > pix_simType
Definition: TrackingNtuple.cc:1073
TrackingNtuple::QualityMaskCollection
std::vector< unsigned char > QualityMaskCollection
Definition: TrackingNtuple.cc:490
TrackingNtuple::DetIdOTCommon::order
std::vector< unsigned short > order
Definition: TrackingNtuple.cc:825
TrackingNtuple::simhit_x
std::vector< float > simhit_x
Definition: TrackingNtuple.cc:1163
TrackingNtuple::trk_simTrkShareFrac
std::vector< std::vector< float > > trk_simTrkShareFrac
Definition: TrackingNtuple.cc:1019
TrackingNtuple::vtx_valid
std::vector< short > vtx_valid
Definition: TrackingNtuple.cc:1241
TrackingNtuple::ph2_radL
std::vector< float > ph2_radL
Definition: TrackingNtuple.cc:1148
TrackingNtuple::ev_run
edm::RunNumber_t ev_run
Definition: TrackingNtuple.cc:943
Point3DBase< float, GlobalTag >
TrackingNtuple::DetIdStripOnly::push_back
void push_back(const TrackerTopology &tTopo, const DetId &id)
Definition: TrackingNtuple.cc:842
TrackingNtuple::sim_pca_pt
std::vector< float > sim_pca_pt
Definition: TrackingNtuple.cc:1038
TrackingNtuple::DetIdOTCommon::rod
std::vector< unsigned short > rod
Definition: TrackingNtuple.cc:827
TrajectorySeed.h
TrackingNtuple::tpHitIndexListLess
static bool tpHitIndexListLess(const TPHitIndex &i, const TPHitIndex &j)
Definition: TrackingNtuple.cc:500
TrackingNtuple::ph2_detId
DetIdPhase2OT ph2_detId
Definition: TrackingNtuple.cc:1132
TrackingNtuple::DetIdAll
CombineDetId< DetIdCommon, DetIdPixelOnly, DetIdOTCommon, DetIdStripOnly > DetIdAll
Definition: TrackingNtuple.cc:939
TrackingNtuple::mvaQualityCollectionTokens_
std::vector< std::tuple< edm::EDGetTokenT< MVACollection >, edm::EDGetTokenT< QualityMaskCollection > > > mvaQualityCollectionTokens_
Definition: TrackingNtuple.cc:639
TrackingNtuple::trk_nInnerInactive
std::vector< unsigned int > trk_nInnerInactive
Definition: TrackingNtuple.cc:995
TrackingNtuple::simhit_y
std::vector< float > simhit_y
Definition: TrackingNtuple.cc:1164
cmsswSequenceInfo.tp
tp
Definition: cmsswSequenceInfo.py:17
first
auto first
Definition: CAHitNtupletGeneratorKernelsImpl.h:112
TrackingNtuple::DetIdPhase2OTOnly::DetIdPhase2OTOnly
DetIdPhase2OTOnly()
Definition: TrackingNtuple.cc:908
TrackingNtuple::see_bestSimTrkIdx
std::vector< int > see_bestSimTrkIdx
Definition: TrackingNtuple.cc:1218
TrackingNtuple::analyze
void analyze(const edm::Event &, const edm::EventSetup &) override
Definition: TrackingNtuple.cc:1991
TrackingNtuple::DetIdOTCommon::book
void book(const std::string &prefix, TTree *tree)
Definition: TrackingNtuple.cc:770
edmNew::DetSetVector::dataSize
size_type dataSize() const
Definition: DetSetVectorNew.h:552
TrackingNtuple::see_statePt
std::vector< float > see_statePt
Definition: TrackingNtuple.cc:1200
DetId::subdetId
constexpr int subdetId() const
get the contents of the subdetector field (not cast into any detector's numbering enum)
Definition: DetId.h:48
TrackingNtuple::DetIdStripOnly::isRPhi
std::vector< unsigned short > isRPhi
Definition: TrackingNtuple.cc:902
TrackingNtuple::trk_lambda
std::vector< float > trk_lambda
Definition: TrackingNtuple.cc:963
edm::ConfigurationDescriptions
Definition: ConfigurationDescriptions.h:28
TrackingNtuple::glu_isBarrel
std::vector< short > glu_isBarrel
Definition: TrackingNtuple.cc:1111
AlCaHLTBitMon_QueryRunRegistry.string
string
Definition: AlCaHLTBitMon_QueryRunRegistry.py:256
edm::vector_transform
auto vector_transform(std::vector< InputType > const &input, Function predicate) -> std::vector< typename std::remove_cv< typename std::remove_reference< decltype(predicate(input.front()))>::type >::type >
Definition: transform.h:11
Vertex.h
TrackingNtuple::trk_pz
std::vector< float > trk_pz
Definition: TrackingNtuple.cc:952
TrackingNtuple::sim_nLay
std::vector< unsigned int > sim_nLay
Definition: TrackingNtuple.cc:1050
TrackingNtuple::str_simType
std::vector< unsigned short > str_simType
Definition: TrackingNtuple.cc:1095
ParametersDefinerForTPESProducer.h
TrackingNtuple::ph2_xx
std::vector< float > ph2_xx
Definition: TrackingNtuple.cc:1141
TFileService.h
TrackingNtuple::trk_mvas
std::vector< std::vector< float > > trk_mvas
Definition: TrackingNtuple.cc:984
bsc_activity_cfg.clusters
clusters
Definition: bsc_activity_cfg.py:36
TrackingNtuple::beamSpotToken_
edm::EDGetTokenT< reco::BeamSpot > beamSpotToken_
Definition: TrackingNtuple.cc:649
PbPb_ZMuSkimMuonDPG_cff.tracker
tracker
Definition: PbPb_ZMuSkimMuonDPG_cff.py:60
ALCARECOTkAlJpsiMuMu_cff.charge
charge
Definition: ALCARECOTkAlJpsiMuMu_cff.py:47
TrackingNtuple::DetIdOTCommon::DetIdOTCommon
DetIdOTCommon()
Definition: TrackingNtuple.cc:768
PixelPluginsPhase0_cfi.isBarrel
isBarrel
Definition: PixelPluginsPhase0_cfi.py:17
TrackingNtuple::SimHitData::chargeFraction
std::vector< float > chargeFraction
Definition: TrackingNtuple.cc:610
trackFromSeedFitFailed
bool trackFromSeedFitFailed(const reco::Track &track)
Definition: trackFromSeedFitFailed.h:6
HistoryBase.h
runTauDisplay.gp
gp
Definition: runTauDisplay.py:431
TrackingNtuple::stripSimLinkToken_
edm::EDGetTokenT< edm::DetSetVector< StripDigiSimLink > > stripSimLinkToken_
Definition: TrackingNtuple.cc:646
TrackingNtuple::pix_y
std::vector< float > pix_y
Definition: TrackingNtuple.cc:1075
edm::View
Definition: CaloClusterFwd.h:14
ntuplemaker.fill
fill
Definition: ntuplemaker.py:304
TrackingNtuple::trk_vtxIdx
std::vector< int > trk_vtxIdx
Definition: TrackingNtuple.cc:1007
TrackerDigiGeometryRecord.h
Point
Structure Point Contains parameters of Gaussian fits to DMRs.
Definition: DMRtrends.cc:57
TrackerTopology::tibString
unsigned int tibString(const DetId &id) const
Definition: TrackerTopology.h:419
SiPixelRecHitCollection.h
Phase2TrackerRecHit1D.h
TrackingNtuple::DetIdCommon::clear
void clear()
Definition: TrackingNtuple.cc:721
TrackToTrackingParticleAssociator.h
trackerHitRTTI::isMatched
bool isMatched(TrackingRecHit const &hit)
Definition: trackerHitRTTI.h:33
TrackingNtuple::trk_nChi2
std::vector< float > trk_nChi2
Definition: TrackingNtuple.cc:981
BOOK
#define BOOK(name)
Definition: TrackingNtuple.cc:670
TrackingNtuple::see_simTrkShareFrac
std::vector< std::vector< float > > see_simTrkShareFrac
Definition: TrackingNtuple.cc:1222
bphysicsOniaDQM_cfi.vertex
vertex
Definition: bphysicsOniaDQM_cfi.py:7
TrackingNtuple::stripMatchedRecHitToken_
edm::EDGetTokenT< SiStripMatchedRecHit2DCollection > stripMatchedRecHitToken_
Definition: TrackingNtuple.cc:653
TrackingNtuple::str_zx
std::vector< float > str_zx
Definition: TrackingNtuple.cc:1104
LogDebug
#define LogDebug(id)
Definition: MessageLogger.h:233
trackFromSeedFitFailed.h
TrackingNtuple::trk_inner_py
std::vector< float > trk_inner_py
Definition: TrackingNtuple.cc:955
edm::ParameterSet
Definition: ParameterSet.h:47
TrackingNtuple::see_nPhase2OT
std::vector< unsigned int > see_nPhase2OT
Definition: TrackingNtuple.cc:1211
TrackingNtuple::sim_genPdgIds
std::vector< std::vector< int > > sim_genPdgIds
Definition: TrackingNtuple.cc:1030
DetId::Tracker
Definition: DetId.h:25
clear
void clear(HadCaloObj &c)
Definition: data.h:124
TrackingNtuple::TPHitIndex::tpKey
unsigned int tpKey
Definition: TrackingNtuple.cc:495
TrackerTopology::tidOrder
unsigned int tidOrder(const DetId &id) const
Definition: TrackerTopology.h:212
TrackingNtuple::DetIdCommon::subdet
std::vector< unsigned short > subdet
Definition: TrackingNtuple.cc:731
TrackingNtuple::DetIdOTCommon::parse
Parsed parse(const TrackerTopology &tTopo, const DetId &id) const
Definition: TrackingNtuple.cc:810
TrackingNtuple::see_nCluster
std::vector< unsigned int > see_nCluster
Definition: TrackingNtuple.cc:1212
Event.h
TrackingNtuple::sim_nValid
std::vector< unsigned int > sim_nValid
Definition: TrackingNtuple.cc:1047
TrackingNtuple::seedTokens_
std::vector< edm::EDGetTokenT< edm::View< reco::Track > > > seedTokens_
Definition: TrackingNtuple.cc:635
operator<<
std::ostream & operator<<(std::ostream &out, const ALILine &li)
Definition: ALILine.cc:167
TrackingNtuple::trackingParticleToken_
edm::EDGetTokenT< TrackingParticleCollection > trackingParticleToken_
Definition: TrackingNtuple.cc:640
tracks
const uint32_t *__restrict__ const HitContainer *__restrict__ TkSoA *__restrict__ tracks
Definition: CAHitNtupletGeneratorKernelsImpl.h:159
TrackingNtuple::simHitTPMapToken_
edm::EDGetTokenT< SimHitTPAssociationProducer::SimHitTPAssociationList > simHitTPMapToken_
Definition: TrackingNtuple.cc:643
TrackingNtuple::HitSimType::ITPileup
TrackingNtuple::ph2_simHitIdx
std::vector< std::vector< int > > ph2_simHitIdx
Definition: TrackingNtuple.cc:1135
TrackerTopology::tecPetalNumber
unsigned int tecPetalNumber(const DetId &id) const
Definition: TrackerTopology.h:221
TrackingNtuple::sim_bunchCrossing
std::vector< int > sim_bunchCrossing
Definition: TrackingNtuple.cc:1028
print
void print(TMatrixD &m, const char *label=nullptr, bool mathematicaFormat=false)
Definition: Utilities.cc:46
SiStripPI::max
Definition: SiStripPayloadInspectorHelper.h:169
TrackingNtuple::DetIdStripOnly::Parsed
Definition: TrackingNtuple.cc:877
TrackingNtuple::pix_yy
std::vector< float > pix_yy
Definition: TrackingNtuple.cc:1079
TrackingNtuple::DetIdPhase2OTOnly::clear
void clear()
Definition: TrackingNtuple.cc:923
SiStripMatchedRecHit2D::stereoClusterRef
OmniClusterRef const & stereoClusterRef() const
Definition: SiStripMatchedRecHit2D.h:34
edm::AssociationMap< edm::OneToManyWithQualityGeneric< TrackingParticleCollection, edm::View< reco::Track >, double > >
type
type
Definition: SiPixelVCal_PayloadInspector.cc:37
TrackingNtuple::glu_x
std::vector< float > glu_x
Definition: TrackingNtuple.cc:1116
TrackingNtuple::fillTrackingVertices
void fillTrackingVertices(const TrackingVertexRefVector &trackingVertices, const TrackingParticleRefKeyToIndex &tpKeyToIndex)
Definition: TrackingNtuple.cc:3578
TrackingVertex
Definition: TrackingVertex.h:22
TrackingNtuple::trk_q
std::vector< int > trk_q
Definition: TrackingNtuple.cc:986
TrackingNtuple::sim_event
std::vector< int > sim_event
Definition: TrackingNtuple.cc:1027
trackingNtuple_cff.seedTracks
seedTracks
Definition: trackingNtuple_cff.py:76
jetUpdater_cfi.sort
sort
Definition: jetUpdater_cfi.py:29
TrackingNtuple::DetIdCommon::resize
void resize(size_t size)
Definition: TrackingNtuple.cc:705
TrackerTopology::isRPhi
bool isRPhi(const DetId &id) const
Definition: TrackerTopology.cc:177
TrackingNtuple::stripStereoRecHitToken_
edm::EDGetTokenT< SiStripRecHit2DCollection > stripStereoRecHitToken_
Definition: TrackingNtuple.cc:652
TrackingNtuple::see_py
std::vector< float > see_py
Definition: TrackingNtuple.cc:1187
TrackingNtuple::see_nStrip
std::vector< unsigned int > see_nStrip
Definition: TrackingNtuple.cc:1210
RZLine.h
TrackingNtuple::see_stopReason
std::vector< unsigned short > see_stopReason
Definition: TrackingNtuple.cc:1214
TrackingNtuple::DetIdStripOnly::Parsed::petalNumber
unsigned int petalNumber
Definition: TrackingNtuple.cc:881
TrackingNtuple::HitSimType::Signal
funct::tan
Tan< T >::type tan(const T &t)
Definition: Tan.h:22
edm::DetSetVector::find
iterator find(det_id_type id)
Definition: DetSetVector.h:264
OmniClusterRef::phase2OTCluster
Phase2TrackerCluster1D const & phase2OTCluster() const
Definition: OmniClusterRef.h:56
TrackingNtuple::glu_yz
std::vector< float > glu_yz
Definition: TrackingNtuple.cc:1122
TrackingNtuple::glu_z
std::vector< float > glu_z
Definition: TrackingNtuple.cc:1118
edm::Service< TFileService >
createfilelist.int
int
Definition: createfilelist.py:10
SiStripCluster::size
uint8_t size() const
Definition: SiStripCluster.h:63
iEvent
int iEvent
Definition: GenABIO.cc:224
TrackingNtuple::ph2_seeIdx
std::vector< std::vector< int > > ph2_seeIdx
Definition: TrackingNtuple.cc:1134
HistoryBase
Base class to all the history types.
Definition: HistoryBase.h:12
TrackingNtuple::trk_bestFromFirstHitSimTrkNChi2
std::vector< float > trk_bestFromFirstHitSimTrkNChi2
Definition: TrackingNtuple.cc:1018
reco::TrackBase
Definition: TrackBase.h:62
TrackerTopology::tecRing
unsigned int tecRing(const DetId &id) const
ring id
Definition: TrackerTopology.h:217
TrackingNtuple::sim_pz
std::vector< float > sim_pz
Definition: TrackingNtuple.cc:1034
TrackingNtuple::tGeomToken_
const edm::ESGetToken< TrackerGeometry, TrackerDigiGeometryRecord > tGeomToken_
Definition: TrackingNtuple.cc:632
SiStripRecHit2DCollection.h
TrackingNtuple::simvtx_sourceSimIdx
std::vector< std::vector< int > > simvtx_sourceSimIdx
Definition: TrackingNtuple.cc:1253
TrackingNtuple::SimHitData::matchingSimHit
std::vector< int > matchingSimHit
Definition: TrackingNtuple.cc:609
M_PI
#define M_PI
Definition: BXVectorInputProducer.cc:49
TrackingNtuple::DetIdOTCommon::Parsed::rod
unsigned int rod
Definition: TrackingNtuple.cc:808
TrackingNtuple::sim_eta
std::vector< float > sim_eta
Definition: TrackingNtuple.cc:1036
trackerHitRTTI::vector
Definition: trackerHitRTTI.h:21
TrackingNtuple::trk_nLost
std::vector< unsigned int > trk_nLost
Definition: TrackingNtuple.cc:988
ClusterTPAssociation::equal_range
range equal_range(const OmniClusterRef &key) const
Definition: ClusterTPAssociation.h:65
TrackingNtuple::vtx_fake
std::vector< short > vtx_fake
Definition: TrackingNtuple.cc:1240
TrackingNtuple::trk_outer_py
std::vector< float > trk_outer_py
Definition: TrackingNtuple.cc:959
MuonTrackValidator_cfi.parametersDefiner
parametersDefiner
Definition: MuonTrackValidator_cfi.py:26
OmniClusterRef::pixelCluster
SiPixelCluster const & pixelCluster() const
Definition: OmniClusterRef.h:54
TrackingNtuple::DetIdPixelOnly
Definition: TrackingNtuple.cc:737
GlobalErrorBase< double, ErrorMatrixTag >
TrackingNtuple::DetIdPhase2OT
CombineDetId< DetIdCommon, DetIdOTCommon, DetIdPhase2OTOnly > DetIdPhase2OT
Definition: TrackingNtuple.cc:938
TrackingNtuple::see_isTrue
std::vector< short > see_isTrue
Definition: TrackingNtuple.cc:1217
TrackingNtuple::simhit_eloss
std::vector< float > simhit_eloss
Definition: TrackingNtuple.cc:1168
TrackingNtuple::DetIdPhase2OTOnly::isUpper
std::vector< unsigned short > isUpper
Definition: TrackingNtuple.cc:931
BaseTrackerRecHit::firstClusterRef
virtual OmniClusterRef const & firstClusterRef() const =0
MagneticField.h
TrackingNtuple::trk_hitIdx
std::vector< std::vector< int > > trk_hitIdx
Definition: TrackingNtuple.cc:1022
B2GTnPMonitor_cfi.item
item
Definition: B2GTnPMonitor_cfi.py:147
edm::EventSetup
Definition: EventSetup.h:58
TrackingNtuple::simvtx_x
std::vector< float > simvtx_x
Definition: TrackingNtuple.cc:1250
TrackingNtuple::simhit_detId_phase2
DetIdAllPhase2 simhit_detId_phase2
Definition: TrackingNtuple.cc:1162
TrackingNtuple::trk_dxy
std::vector< float > trk_dxy
Definition: TrackingNtuple.cc:966
TrackingNtuple::pix_xx
std::vector< float > pix_xx
Definition: TrackingNtuple.cc:1077
SiPixelCluster::size
int size() const
Definition: SiPixelCluster.h:126
TrackingNtuple::glu_stereoIdx
std::vector< int > glu_stereoIdx
Definition: TrackingNtuple.cc:1114
TrackingNtuple::str_zz
std::vector< float > str_zz
Definition: TrackingNtuple.cc:1103
SiPixelCluster::pixel
Pixel pixel(int i) const
Definition: SiPixelCluster.h:162
TrackAssociatorRecord.h
TrackingNtuple::addStripMatchedHit
size_t addStripMatchedHit(const SiStripMatchedRecHit2D &hit, const TransientTrackingRecHitBuilder &theTTRHBuilder, const TrackerTopology &tTopo, std::vector< std::pair< int, int >> &monoStereoClusterList)
Definition: TrackingNtuple.cc:2644
TrackingNtuple::trk_py
std::vector< float > trk_py
Definition: TrackingNtuple.cc:951
TrackingNtuple::vtx_zErr
std::vector< float > vtx_zErr
Definition: TrackingNtuple.cc:1237
SiStripRecHit1D
Definition: SiStripRecHit1D.h:8
TrackingNtuple::trk_bestFromFirstHitSimTrkIdx
std::vector< int > trk_bestFromFirstHitSimTrkIdx
Definition: TrackingNtuple.cc:1014
SiStripCluster::amplitudes
SiStripCluster const & amplitudes() const
Definition: SiStripCluster.h:68
TrackCollections2monitor_cff.func
func
Definition: TrackCollections2monitor_cff.py:359
TrackingNtuple::simvtx_event
std::vector< int > simvtx_event
Definition: TrackingNtuple.cc:1247
TrackingNtuple::fillStripRphiStereoHits
void fillStripRphiStereoHits(const edm::Event &iEvent, const ClusterTPAssociation &clusterToTPMap, const TrackingParticleRefKeyToIndex &tpKeyToIndex, const SimHitTPAssociationProducer::SimHitTPAssociationList &simHitsTPAssoc, const edm::DetSetVector< StripDigiSimLink > &digiSimLink, const TransientTrackingRecHitBuilder &theTTRHBuilder, const TrackerTopology &tTopo, const SimHitRefKeyToIndex &simHitRefKeyToIndex, std::set< edm::ProductID > &hitProductIds)
Definition: TrackingNtuple.cc:2548
edm::RefVector::push_back
void push_back(value_type const &ref)
Add a Ref<C, T> to the RefVector.
Definition: RefVector.h:67
edm::RefToBaseVector< reco::Track >
SiStripMatchedRecHit2D::monoClusterRef
OmniClusterRef const & monoClusterRef() const
Definition: SiStripMatchedRecHit2D.h:35
TrackingNtuple::DetIdStripOnly::set
void set(size_t index, const TrackerTopology &tTopo, const DetId &id)
Definition: TrackingNtuple.cc:859
TrajectorySeedCollection.h
TrackingNtuple::str_bbxi
std::vector< float > str_bbxi
Definition: TrackingNtuple.cc:1107
TrackingNtuple::bsp_z
float bsp_z
Definition: TrackingNtuple.cc:1178
edm::ESGetToken< MagneticField, IdealMagneticFieldRecord >
TrackingNtuple::DetIdAllPhase2
CombineDetId< DetIdCommon, DetIdPixelOnly, DetIdOTCommon, DetIdPhase2OTOnly > DetIdAllPhase2
Definition: TrackingNtuple.cc:940
TrackingNtuple::trk_nInactive
std::vector< unsigned int > trk_nInactive
Definition: TrackingNtuple.cc:989
TrackingNtuple::ph2_x
std::vector< float > ph2_x
Definition: TrackingNtuple.cc:1138
TrackingNtuple::tpNPixelLayersToken_
edm::EDGetTokenT< edm::ValueMap< unsigned int > > tpNPixelLayersToken_
Definition: TrackingNtuple.cc:658
TrackingNtuple::DetIdStripOnly::book
void book(const std::string &prefix, TTree *tree)
Definition: TrackingNtuple.cc:834
DynArray.h
TrackingNtuple::str_detId
DetIdStrip str_detId
Definition: TrackingNtuple.cc:1090
TrackingNtuple::includeSeeds_
const bool includeSeeds_
Definition: TrackingNtuple.cc:660
reco::HitPattern::TRACK_HITS
Definition: HitPattern.h:155
TrackingNtuple::trk_bestSimTrkShareFracSimClusterDenom
std::vector< float > trk_bestSimTrkShareFracSimClusterDenom
Definition: TrackingNtuple.cc:1012
TrackingNtuple::trk_nStripLay
std::vector< unsigned int > trk_nStripLay
Definition: TrackingNtuple.cc:997
edm::EventSetup::getData
bool getData(T &iHolder) const
Definition: EventSetup.h:127
TrackingNtuple::trk_ndof
std::vector< float > trk_ndof
Definition: TrackingNtuple.cc:983
TrackingNtuple::trk_outer_pt
std::vector< float > trk_outer_pt
Definition: TrackingNtuple.cc:961
TrackingNtuple::sim_nTrackerHits
std::vector< unsigned int > sim_nTrackerHits
Definition: TrackingNtuple.cc:1054
TrackingRecHit
Definition: TrackingRecHit.h:21
SiStripRecHit1D.h
TrackingNtuple::glu_bbxi
std::vector< float > glu_bbxi
Definition: TrackingNtuple.cc:1127
SimHitTPAssociationProducer.h
TrackingNtuple::trk_bestSimTrkShareFrac
std::vector< float > trk_bestSimTrkShareFrac
Definition: TrackingNtuple.cc:1010
TrackingNtuple::glu_monoIdx
std::vector< int > glu_monoIdx
Definition: TrackingNtuple.cc:1113
TrackingNtuple::vtx_ndof
std::vector< float > vtx_ndof
Definition: TrackingNtuple.cc:1238
Types
Definition: Types.py:1
edm::EDConsumerBase::labelsForToken
void labelsForToken(EDGetToken iToken, Labels &oLabels) const
Definition: EDConsumerBase.cc:338
TrackingNtuple::simvtx_z
std::vector< float > simvtx_z
Definition: TrackingNtuple.cc:1252
VertexFwd.h
TrackingNtuple::trk_cotTheta
std::vector< float > trk_cotTheta
Definition: TrackingNtuple.cc:964
TrackingNtuple::includePhase2OTHits_
bool includePhase2OTHits_
Definition: TrackingNtuple.cc:648
DDAxes::phi
TrackingNtuple::trk_refpoint_x
std::vector< float > trk_refpoint_x
Definition: TrackingNtuple.cc:978
TrackingNtuple::vtx_y
std::vector< float > vtx_y
Definition: TrackingNtuple.cc:1233
TrackingNtuple::stripRphiRecHitToken_
edm::EDGetTokenT< SiStripRecHit2DCollection > stripRphiRecHitToken_
Definition: TrackingNtuple.cc:651
TrackingNtuple::trk_stopReason
std::vector< unsigned short > trk_stopReason
Definition: TrackingNtuple.cc:1004
TrackingNtuple::clusterTPMapToken_
edm::EDGetTokenT< ClusterTPAssociation > clusterTPMapToken_
Definition: TrackingNtuple.cc:642
SimHitTPAssociationProducer::SimHitTPAssociationList
std::vector< SimHitTPPair > SimHitTPAssociationList
Definition: SimHitTPAssociationProducer.h:18
TrackingNtuple::trk_nLostLay
std::vector< unsigned int > trk_nLostLay
Definition: TrackingNtuple.cc:999
RZLine
Definition: RZLine.h:12
TrackingNtuple::DetIdOTCommon
Definition: TrackingNtuple.cc:766
edmNew::DetSetVector
Definition: DetSetNew.h:13
TrackingNtuple::DetIdPhase2OTOnly::book
void book(const std::string &prefix, TTree *tree)
Definition: TrackingNtuple.cc:910
TrackingNtuple::mfToken_
const edm::ESGetToken< MagneticField, IdealMagneticFieldRecord > mfToken_
Definition: TrackingNtuple.cc:629
edm::Ref::id
ProductID id() const
Accessor for product ID.
Definition: Ref.h:244
edm::RefToBaseVector::size
size_type size() const
Definition: RefToBaseVector.h:160
submitPVResolutionJobs.desc
string desc
Definition: submitPVResolutionJobs.py:251
TrackingNtuple::ph2_bbxi
std::vector< float > ph2_bbxi
Definition: TrackingNtuple.cc:1149
OmniClusterRef::id
edm::ProductID id() const
Definition: OmniClusterRef.h:69
impl
Definition: trackAlgoPriorityOrder.h:18
std
Definition: JetResolutionObject.h:76
DetId::rawId
constexpr uint32_t rawId() const
get the raw id
Definition: DetId.h:57
TrackingNtuple::fillBeamSpot
void fillBeamSpot(const reco::BeamSpot &bs)
Definition: TrackingNtuple.cc:2236
TrackingNtuple::trk_outer_px
std::vector< float > trk_outer_px
Definition: TrackingNtuple.cc:958
StripSubdetector::TEC
static constexpr auto TEC
Definition: StripSubdetector.h:19
TrackerTopology::isUpper
bool isUpper(const DetId &id) const
Definition: TrackerTopology.cc:214
TrackingNtuple::DetIdStripOnly::isStereo
std::vector< unsigned short > isStereo
Definition: TrackingNtuple.cc:901
TrackingNtuple::pix_detId
DetIdPixel pix_detId
Definition: TrackingNtuple.cc:1068
TrackingNtuple::pix_trkIdx
std::vector< std::vector< int > > pix_trkIdx
Definition: TrackingNtuple.cc:1069
RunInfoPI::state
state
Definition: RunInfoPayloadInspectoHelper.h:16
isFinite.h
TrackerTopology::tibIsDoubleSide
bool tibIsDoubleSide(const DetId &id) const
Definition: TrackerTopology.h:249
TrackingNtuple::pixelRecHitToken_
edm::EDGetTokenT< SiPixelRecHitCollection > pixelRecHitToken_
Definition: TrackingNtuple.cc:650
TrackingNtuple::inv_isBarrel
std::vector< short > inv_isBarrel
Definition: TrackingNtuple.cc:1154
TrackingNtuple::glu_xy
std::vector< float > glu_xy
Definition: TrackingNtuple.cc:1120
TrackingNtuple::sim_nPixel
std::vector< unsigned int > sim_nPixel
Definition: TrackingNtuple.cc:1048
TrackingNtuple::ph2_zx
std::vector< float > ph2_zx
Definition: TrackingNtuple.cc:1146
SiStripMatchedRecHit2D
Definition: SiStripMatchedRecHit2D.h:8
TrackingNtuple::TPHitIndex
Definition: TrackingNtuple.cc:492
TrackingNtuple::phase2OTRecHitToken_
edm::EDGetTokenT< Phase2TrackerRecHit1DCollectionNew > phase2OTRecHitToken_
Definition: TrackingNtuple.cc:654
TrackingNtuple::SimHitData::event
std::vector< int > event
Definition: TrackingNtuple.cc:612
SeedStopInfo.h
SimTrack
Definition: SimTrack.h:9
Frameworkfwd.h
TrackingNtuple::see_algo
std::vector< unsigned int > see_algo
Definition: TrackingNtuple.cc:1213
triggerObjects_cff.id
id
Definition: triggerObjects_cff.py:29
TrackingNtuple::trk_dxyErr
std::vector< float > trk_dxyErr
Definition: TrackingNtuple.cc:976
TSCBLBuilderNoMaterial
Definition: TSCBLBuilderNoMaterial.h:13
TrackingNtuple::trk_pt
std::vector< float > trk_pt
Definition: TrackingNtuple.cc:953
transform.h
TrackingNtuple::trk_eta
std::vector< float > trk_eta
Definition: TrackingNtuple.cc:962
TrackingNtuple::DetIdStripOnly::clear
void clear()
Definition: TrackingNtuple.cc:868
edmNew::DetSetVector::end
const_iterator end(bool update=false) const
Definition: DetSetVectorNew.h:535
TrackingNtuple::see_stateTrajPx
std::vector< float > see_stateTrajPx
Definition: TrackingNtuple.cc:1203
TrackingNtuple::vtx_trkIdx
std::vector< std::vector< int > > vtx_trkIdx
Definition: TrackingNtuple.cc:1242
relativeConstraints.empty
bool empty
Definition: relativeConstraints.py:46
TrackingNtuple::DetIdStripOnly::isGlued
std::vector< unsigned short > isGlued
Definition: TrackingNtuple.cc:903
Exception
Definition: hltDiff.cc:245
TFileService::kSharedResource
static const std::string kSharedResource
Definition: TFileService.h:76
reco::HitPattern::MISSING_INNER_HITS
Definition: HitPattern.h:155
TrackingNtuple::see_nCands
std::vector< unsigned short > see_nCands
Definition: TrackingNtuple.cc:1215
TrackingNtuple::sim_pca_dxy
std::vector< float > sim_pca_dxy
Definition: TrackingNtuple.cc:1043
TrackingNtuple::see_stateTrajY
std::vector< float > see_stateTrajY
Definition: TrackingNtuple.cc:1202
TrackingNtuple::TPHitIndex::detId
unsigned int detId
Definition: TrackingNtuple.cc:498
TrackingNtuple::simhit_hitIdx
std::vector< std::vector< int > > simhit_hitIdx
Definition: TrackingNtuple.cc:1172
TrackingNtuple::simhit_particle
std::vector< int > simhit_particle
Definition: TrackingNtuple.cc:1166
TrackingNtuple::bsp_y
float bsp_y
Definition: TrackingNtuple.cc:1177
TrackerTopology::tecOrder
unsigned int tecOrder(const DetId &id) const
Definition: TrackerTopology.h:206
TrackingNtuple::glu_radL
std::vector< float > glu_radL
Definition: TrackingNtuple.cc:1126
TrackingNtuple::trk_nValid
std::vector< unsigned int > trk_nValid
Definition: TrackingNtuple.cc:987
TrackingNtuple::HitSimType::Unknown
TrackingNtuple::fillDescriptions
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
Definition: TrackingNtuple.cc:3622
StripSubdetector::TOB
static constexpr auto TOB
Definition: StripSubdetector.h:18
TrackingNtuple::trk_hitType
std::vector< std::vector< int > > trk_hitType
Definition: TrackingNtuple.cc:1023
TrackingNtuple::DetIdCommon::set
void set(size_t index, const TrackerTopology &tTopo, const DetId &id)
Definition: TrackingNtuple.cc:713
TrackPSimHitRef
edm::Ref< edm::PSimHitContainer > TrackPSimHitRef
Definition: PSimHitContainer.h:14
TrackingNtuple::HitType
HitType
Definition: TrackingNtuple.cc:481
TrackingNtuple::str_xx
std::vector< float > str_xx
Definition: TrackingNtuple.cc:1099
TrackingNtuple::see_phi
std::vector< float > see_phi
Definition: TrackingNtuple.cc:1191
Skims_PA_cff.name
name
Definition: Skims_PA_cff.py:17
TrackingNtuple
Definition: TrackingNtuple.cc:469
TrackingNtuple::DetIdStripOnly::Parsed::glued
bool glued
Definition: TrackingNtuple.cc:882
TrackingNtuple::siphase2OTSimLinksToken_
edm::EDGetTokenT< edm::DetSetVector< PixelDigiSimLink > > siphase2OTSimLinksToken_
Definition: TrackingNtuple.cc:647
TrackingNtuple::DetIdOTCommon::Parsed
Definition: TrackingNtuple.cc:803
TrajectoryStateTransform.h
TrackingNtuple::DetIdCommon::layer
std::vector< unsigned short > layer
Definition: TrackingNtuple.cc:732
TrackingNtuple::tpNStripStereoLayersToken_
edm::EDGetTokenT< edm::ValueMap< unsigned int > > tpNStripStereoLayersToken_
Definition: TrackingNtuple.cc:659
TrackingNtuple::see_q
std::vector< int > see_q
Definition: TrackingNtuple.cc:1206
reco::TrackToTrackingParticleAssociator::associateSimToReco
reco::SimToRecoCollection associateSimToReco(const edm::Handle< edm::View< reco::Track >> &tCH, const edm::Handle< TrackingParticleCollection > &tPCH) const
Definition: TrackToTrackingParticleAssociator.h:71
TrackingNtuple::glu_y
std::vector< float > glu_y
Definition: TrackingNtuple.cc:1117
TrackingNtuple::see_dxyErr
std::vector< float > see_dxyErr
Definition: TrackingNtuple.cc:1197
TrackingNtuple::fillVertices
void fillVertices(const reco::VertexCollection &vertices, const edm::RefToBaseVector< reco::Track > &tracks)
Definition: TrackingNtuple.cc:3545
AlignmentPI::index
index
Definition: AlignmentPayloadInspectorHelper.h:46
TrackingNtuple::DetIdCommon::side
std::vector< unsigned short > side
Definition: TrackingNtuple.cc:733
TrackingNtuple::HitType::Invalid
TrackingNtuple::sim_pt
std::vector< float > sim_pt
Definition: TrackingNtuple.cc:1035
TrackingNtuple::trk_ptErr
std::vector< float > trk_ptErr
Definition: TrackingNtuple.cc:972
TrackingNtuple::pix_radL
std::vector< float > pix_radL
Definition: TrackingNtuple.cc:1084
TrackingNtuple::pix_bbxi
std::vector< float > pix_bbxi
Definition: TrackingNtuple.cc:1085
TrackingNtuple::DetIdPhase2OTOnly::isStack
std::vector< unsigned short > isStack
Definition: TrackingNtuple.cc:932
TrackingNtuple::DetIdPixelOnly::clear
void clear()
Definition: TrackingNtuple.cc:754
edm::Ref::key
key_type key() const
Accessor for product key.
Definition: Ref.h:250
TrackingNtuple::trk_dxyPV
std::vector< float > trk_dxyPV
Definition: TrackingNtuple.cc:968
TrackingNtuple::DetIdOTCommon::Parsed::order
unsigned int order
Definition: TrackingNtuple.cc:806
TrackingNtuple::vtx_z
std::vector< float > vtx_z
Definition: TrackingNtuple.cc:1234
TrackerTopology::pxfBlade
unsigned int pxfBlade(const DetId &id) const
Definition: TrackerTopology.h:447
TrackingNtuple::fillStripMatchedHits
void fillStripMatchedHits(const edm::Event &iEvent, const TransientTrackingRecHitBuilder &theTTRHBuilder, const TrackerTopology &tTopo, std::vector< std::pair< int, int >> &monoStereoClusterList)
Definition: TrackingNtuple.cc:2675
TrackingNtuple::sim_seedIdx
std::vector< std::vector< int > > sim_seedIdx
Definition: TrackingNtuple.cc:1060
TransientTrackingRecHitBuilder.h
TrackingNtuple::sim_pca_dz
std::vector< float > sim_pca_dz
Definition: TrackingNtuple.cc:1044
TrackingNtuple::see_fitok
std::vector< short > see_fitok
Definition: TrackingNtuple.cc:1185
TrackingNtuple::trk_nStrip
std::vector< unsigned int > trk_nStrip
Definition: TrackingNtuple.cc:991
TrackingNtuple::str_x
std::vector< float > str_x
Definition: TrackingNtuple.cc:1096
TrackingNtuple::see_offset
std::vector< unsigned int > see_offset
Definition: TrackingNtuple.cc:1227
TrackingNtuple::sim_n3DLay
std::vector< unsigned int > sim_n3DLay
Definition: TrackingNtuple.cc:1052
cms::Exception
Definition: Exception.h:70
reco::TrackBase::algoByName
static TrackAlgorithm algoByName(const std::string &name)
Definition: TrackBase.cc:137
TrackingNtuple::str_yy
std::vector< float > str_yy
Definition: TrackingNtuple.cc:1101
TrackingNtuple::pix_z
std::vector< float > pix_z
Definition: TrackingNtuple.cc:1076
funct::abs
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
TrackingNtuple::DetIdCommon
Definition: TrackingNtuple.cc:671
TrackingNtuple::DetIdOTCommon::clear
void clear()
Definition: TrackingNtuple.cc:796
genParticles_cff.map
map
Definition: genParticles_cff.py:11
LogTrace
#define LogTrace(id)
Definition: MessageLogger.h:234
SimHitTPAssociationList
TrackAssociatorByHitsImpl::SimHitTPAssociationList SimHitTPAssociationList
Definition: TrackAssociatorByHitsProducer.cc:46
operator[]
T operator[](int i) const
Definition: extBasic3DVector.h:222
ParameterSet.h
trackAssociationChi2.h
TrackingNtuple::trk_inner_px
std::vector< float > trk_inner_px
Definition: TrackingNtuple.cc:954
TrackingParticleRef
edm::Ref< TrackingParticleCollection > TrackingParticleRef
Definition: TrackingParticleFwd.h:12
TrackingNtuple::DetIdCommon::book
void book(const std::string &prefix, TTree *tree)
Definition: TrackingNtuple.cc:677
dqmiolumiharvest.j
j
Definition: dqmiolumiharvest.py:66
TrackingNtuple::sim_pca_phi
std::vector< float > sim_pca_phi
Definition: TrackingNtuple.cc:1042
TrackingNtuple::ph2_trkIdx
std::vector< std::vector< int > > ph2_trkIdx
Definition: TrackingNtuple.cc:1133
TrackingNtuple::trk_bestSimTrkShareFracSimDenom
std::vector< float > trk_bestSimTrkShareFracSimDenom
Definition: TrackingNtuple.cc:1011
TrackingNtuple::simvtx_processType
std::vector< unsigned int > simvtx_processType
Definition: TrackingNtuple.cc:1249
TrackingNtuple::DetIdPhase2OTOnly::isLower
std::vector< unsigned short > isLower
Definition: TrackingNtuple.cc:930
event
Definition: event.py:1
DeDxTools::esConsumes
ESGetTokenH3DDVariant esConsumes(std::string const &Reccord, edm::ConsumesCollector &)
Definition: DeDxTools.cc:283
TrackingNtuple::trackingParticleRefToken_
edm::EDGetTokenT< TrackingParticleRefVector > trackingParticleRefToken_
Definition: TrackingNtuple.cc:641
TrackingNtuple::fillTrackingParticlesForSeeds
void fillTrackingParticlesForSeeds(const TrackingParticleRefVector &tpCollection, const reco::SimToRecoCollection &simRecColl, const TrackingParticleRefKeyToIndex &tpKeyToIndex, const unsigned int seedOffset)
Definition: TrackingNtuple.cc:3523
hltrates_dqm_sourceclient-live_cfg.offset
offset
Definition: hltrates_dqm_sourceclient-live_cfg.py:82
edm::Event
Definition: Event.h:73
TrackingNtuple::see_phiErr
std::vector< float > see_phiErr
Definition: TrackingNtuple.cc:1196
TrackingParticle::Point
math::XYZPointD Point
point in the space
Definition: TrackingParticle.h:36
TrackingNtuple::TPHitIndex::tof
float tof
Definition: TrackingNtuple.cc:497
TrackingParticleIP.h
edm::RefVector::size
size_type size() const
Size of the RefVector.
Definition: RefVector.h:102
HLT_FULL_cff.distance
distance
Definition: HLT_FULL_cff.py:7733
crabWrapper.key
key
Definition: crabWrapper.py:19
MagneticField
Definition: MagneticField.h:19
TrackingNtuple::MVACollection
std::vector< float > MVACollection
Definition: TrackingNtuple.cc:489
TransientTrackingRecHitBuilder
Definition: TransientTrackingRecHitBuilder.h:6
SiStripCluster
Definition: SiStripCluster.h:8
OmniClusterRef::key
unsigned int key() const
Definition: OmniClusterRef.h:70
HistoryBase::evaluate
bool evaluate(TrackingParticleRef tpr)
Evaluate track history using a TrackingParticleRef.
Definition: HistoryBase.h:96
TrackingNtuple::sim_pdgId
std::vector< int > sim_pdgId
Definition: TrackingNtuple.cc:1029
TrackingNtuple::tTopoToken_
const edm::ESGetToken< TrackerTopology, TrackerTopologyRcd > tTopoToken_
Definition: TrackingNtuple.cc:631
LHEGenericFilter_cfi.ParticleID
ParticleID
Definition: LHEGenericFilter_cfi.py:6
TrackingNtuple::seedStopInfoTokens_
std::vector< edm::EDGetTokenT< std::vector< SeedStopInfo > > > seedStopInfoTokens_
Definition: TrackingNtuple.cc:636
TrackingNtuple::see_ptErr
std::vector< float > see_ptErr
Definition: TrackingNtuple.cc:1194
TrackingNtuple::simhit_hitType
std::vector< std::vector< int > > simhit_hitType
Definition: TrackingNtuple.cc:1173
edm::InputTag
Definition: InputTag.h:15
TrackingNtuple::includeStripHits_
bool includeStripHits_
Definition: TrackingNtuple.cc:648
label
const char * label
Definition: PFTauDecayModeTools.cc:11
TrackingNtuple::HitSimType::OOTPileup
OmniClusterRef::cluster_pixel
ClusterPixelRef cluster_pixel() const
Definition: OmniClusterRef.h:40
HistoryBase::depth
void depth(int d)
Set the depth of the history.
Definition: HistoryBase.h:49
TrackingNtuple::pix_chargeFraction
std::vector< std::vector< float > > pix_chargeFraction
Definition: TrackingNtuple.cc:1072
TrackingNtuple::simvtx_y
std::vector< float > simvtx_y
Definition: TrackingNtuple.cc:1251
edm::ProductID
Definition: ProductID.h:27
reco::Vertex
Definition: Vertex.h:35
TrackingNtuple::DetIdPixelOnly::DetIdPixelOnly
DetIdPixelOnly()
Definition: TrackingNtuple.cc:739
StripSubdetector::TID
static constexpr auto TID
Definition: StripSubdetector.h:17
TrackerTopology::tobSide
unsigned int tobSide(const DetId &id) const
Definition: TrackerTopology.h:180
hcallasereventfilter2012_cfi.prefix
prefix
Definition: hcallasereventfilter2012_cfi.py:10
TrackingNtuple::TrackingNtuple
TrackingNtuple(const edm::ParameterSet &)
Definition: TrackingNtuple.cc:1261
TrackingNtuple::ph2_y
std::vector< float > ph2_y
Definition: TrackingNtuple.cc:1139
TrackingNtuple::DetIdPhase2OTOnly::push_back
void push_back(const TrackerTopology &tTopo, const DetId &id)
Definition: TrackingNtuple.cc:916
TrackingNtuple::sim_phi
std::vector< float > sim_phi
Definition: TrackingNtuple.cc:1037
hit
Definition: SiStripHitEffFromCalibTree.cc:88
TrackingNtuple::HitType::Strip
TrackingNtuple::sim_py
std::vector< float > sim_py
Definition: TrackingNtuple.cc:1033
TFileService::make
T * make(const Args &... args) const
make new ROOT object
Definition: TFileService.h:64
edm::View::size_type
unsigned int size_type
Definition: View.h:90
TrackingNtuple::bsp_sigmaz
float bsp_sigmaz
Definition: TrackingNtuple.cc:1181
TrackingNtuple::vtx_x
std::vector< float > vtx_x
Definition: TrackingNtuple.cc:1232
ClusterTPAssociation.h
TrackingNtuple::simhit_simTrkIdx
std::vector< int > simhit_simTrkIdx
Definition: TrackingNtuple.cc:1171
getBestVertex
Point getBestVertex(reco::Track const &trk, reco::VertexCollection const &vertices, const size_t minNtracks=2)
Definition: getBestVertex.h:8
edm::ProductLabels
Definition: ProductLabels.h:4
TrackingNtuple::simvtx_bunchCrossing
std::vector< int > simvtx_bunchCrossing
Definition: TrackingNtuple.cc:1248
TrackingNtuple::trk_phiErr
std::vector< float > trk_phiErr
Definition: TrackingNtuple.cc:975
TrackingNtuple::see_bestFromFirstHitSimTrkIdx
std::vector< int > see_bestFromFirstHitSimTrkIdx
Definition: TrackingNtuple.cc:1220
ParametersDefinerForTP
Definition: ParametersDefinerForTP.h:19
findQualityFiles.size
size
Write out results.
Definition: findQualityFiles.py:443
pwdgSkimBPark_cfi.vertices
vertices
Definition: pwdgSkimBPark_cfi.py:7
TrackingNtuple::DetIdStripOnly::DetIdStripOnly
DetIdStripOnly()
Definition: TrackingNtuple.cc:832
TrackingParticleIP::dz
auto dz(const T_Vertex &vertex, const T_Momentum &momentum, const T_Point &point)
Definition: TrackingParticleIP.h:16
TrackingNtuple::DetIdPixelOnly::panel
std::vector< unsigned short > panel
Definition: TrackingNtuple.cc:763
TrackerGeometry
Definition: TrackerGeometry.h:14
TrackingNtuple::pix_seeIdx
std::vector< std::vector< int > > pix_seeIdx
Definition: TrackingNtuple.cc:1070
SimHitTPAssociationProducer::simHitTPAssociationListGreater
static bool simHitTPAssociationListGreater(SimHitTPPair i, SimHitTPPair j)
Definition: SimHitTPAssociationProducer.h:23
TrackingNtuple::see_chi2
std::vector< float > see_chi2
Definition: TrackingNtuple.cc:1199
TrackingNtuple::trk_dzClosestPV
std::vector< float > trk_dzClosestPV
Definition: TrackingNtuple.cc:971
reco::TrackBase::highPurity
Definition: TrackBase.h:154
TrackingNtuple::vtx_yErr
std::vector< float > vtx_yErr
Definition: TrackingNtuple.cc:1236