CMS 3D CMS Logo

List of all members | Public Member Functions | Static Public Member Functions | Private Types | Private Member Functions | Private Attributes | Static Private Attributes
TrackstersMergeProducer Class Reference
Inheritance diagram for TrackstersMergeProducer:
edm::stream::EDProducer< edm::GlobalCache< TrackstersCache > >

Public Member Functions

void produce (edm::Event &, const edm::EventSetup &) override
 
 TrackstersMergeProducer (const edm::ParameterSet &ps, const CacheBase *cache)
 
 ~TrackstersMergeProducer () override
 
- Public Member Functions inherited from edm::stream::EDProducer< edm::GlobalCache< TrackstersCache > >
 EDProducer ()=default
 
bool hasAbilityToProduceInBeginLumis () const final
 
bool hasAbilityToProduceInBeginProcessBlocks () const final
 
bool hasAbilityToProduceInBeginRuns () const final
 
bool hasAbilityToProduceInEndLumis () const final
 
bool hasAbilityToProduceInEndProcessBlocks () const final
 
bool hasAbilityToProduceInEndRuns () const final
 

Static Public Member Functions

static void fillDescriptions (edm::ConfigurationDescriptions &descriptions)
 
static void globalEndJob (TrackstersCache *)
 
static std::unique_ptr< TrackstersCacheinitializeGlobalCache (const edm::ParameterSet &)
 

Private Types

typedef ticl::Trackster::IterationIndex TracksterIterIndex
 

Private Member Functions

void assignTimeToCandidates (std::vector< TICLCandidate > &resultCandidates) const
 
void dumpTrackster (const Trackster &) const
 
void energyRegressionAndID (const std::vector< reco::CaloCluster > &layerClusters, std::vector< Trackster > &result) const
 
void fillTile (TICLTracksterTiles &, const std::vector< Trackster > &, TracksterIterIndex)
 
void printTrackstersDebug (const std::vector< Trackster > &, const char *label) const
 

Private Attributes

const edm::EDGetTokenT< std::vector< reco::CaloCluster > > clusters_token_
 
const edm::EDGetTokenT< edm::ValueMap< std::pair< float, float > > > clustersTime_token_
 
const double cosangle_align_
 
const bool debug_
 
const double e_over_h_threshold_
 
const std::string eidInputName_
 
const float eidMinClusterEnergy_
 
const int eidNClusters_
 
const int eidNLayers_
 
const std::string eidOutputNameEnergy_
 
const std::string eidOutputNameId_
 
tensorflow::Session * eidSession_
 
const int eta_bin_window_
 
const edm::ESGetToken< CaloGeometry, CaloGeometryRecordgeometry_token_
 
const double halo_max_distance2_
 
const bool optimiseAcrossTracksters_
 
const int phi_bin_window_
 
const double pt_neutral_threshold_
 
const double pt_sigma_high_
 
const double pt_sigma_low_
 
const double resol_calo_offset_em_
 
const double resol_calo_offset_had_
 
const double resol_calo_scale_em_
 
const double resol_calo_scale_had_
 
hgcal::RecHitTools rhtools_
 
const edm::EDGetTokenT< std::vector< TICLSeedingRegion > > seedingTrk_token_
 
const double track_max_eta_
 
const int track_max_missing_outerhits_
 
const double track_min_eta_
 
const double track_min_pt_
 
const edm::EDGetTokenT< std::vector< reco::Track > > tracks_token_
 
const edm::EDGetTokenT< std::vector< Trackster > > trackstersem_token_
 
const edm::EDGetTokenT< std::vector< Trackster > > trackstershad_token_
 
const edm::EDGetTokenT< std::vector< Trackster > > tracksterstrk_token_
 
const edm::EDGetTokenT< std::vector< Trackster > > tracksterstrkem_token_
 

Static Private Attributes

static constexpr int eidNFeatures_ = 3
 

Additional Inherited Members

- Public Types inherited from edm::stream::EDProducer< edm::GlobalCache< TrackstersCache > >
typedef CacheContexts< T... > CacheTypes
 
typedef CacheTypes::GlobalCache GlobalCache
 
typedef AbilityChecker< T... > HasAbility
 
typedef CacheTypes::LuminosityBlockCache LuminosityBlockCache
 
typedef LuminosityBlockContextT< LuminosityBlockCache, RunCache, GlobalCacheLuminosityBlockContext
 
typedef CacheTypes::LuminosityBlockSummaryCache LuminosityBlockSummaryCache
 
typedef CacheTypes::RunCache RunCache
 
typedef RunContextT< RunCache, GlobalCacheRunContext
 
typedef CacheTypes::RunSummaryCache RunSummaryCache
 

Detailed Description

Definition at line 23 of file TrackstersMergeProducer.cc.

Member Typedef Documentation

◆ TracksterIterIndex

Definition at line 35 of file TrackstersMergeProducer.cc.

Constructor & Destructor Documentation

◆ TrackstersMergeProducer()

TrackstersMergeProducer::TrackstersMergeProducer ( const edm::ParameterSet ps,
const CacheBase cache 
)
explicit

Definition at line 84 of file TrackstersMergeProducer.cc.

85  : tracksterstrkem_token_(consumes<std::vector<Trackster>>(ps.getParameter<edm::InputTag>("tracksterstrkem"))),
86  trackstersem_token_(consumes<std::vector<Trackster>>(ps.getParameter<edm::InputTag>("trackstersem"))),
87  tracksterstrk_token_(consumes<std::vector<Trackster>>(ps.getParameter<edm::InputTag>("tracksterstrk"))),
88  trackstershad_token_(consumes<std::vector<Trackster>>(ps.getParameter<edm::InputTag>("trackstershad"))),
89  seedingTrk_token_(consumes<std::vector<TICLSeedingRegion>>(ps.getParameter<edm::InputTag>("seedingTrk"))),
90  clusters_token_(consumes<std::vector<reco::CaloCluster>>(ps.getParameter<edm::InputTag>("layer_clusters"))),
92  consumes<edm::ValueMap<std::pair<float, float>>>(ps.getParameter<edm::InputTag>("layer_clustersTime"))),
93  tracks_token_(consumes<std::vector<reco::Track>>(ps.getParameter<edm::InputTag>("tracks"))),
94  geometry_token_(esConsumes<CaloGeometry, CaloGeometryRecord>()),
95  optimiseAcrossTracksters_(ps.getParameter<bool>("optimiseAcrossTracksters")),
96  eta_bin_window_(ps.getParameter<int>("eta_bin_window")),
97  phi_bin_window_(ps.getParameter<int>("phi_bin_window")),
98  pt_sigma_high_(ps.getParameter<double>("pt_sigma_high")),
99  pt_sigma_low_(ps.getParameter<double>("pt_sigma_low")),
100  halo_max_distance2_(ps.getParameter<double>("halo_max_distance2")),
101  track_min_pt_(ps.getParameter<double>("track_min_pt")),
102  track_min_eta_(ps.getParameter<double>("track_min_eta")),
103  track_max_eta_(ps.getParameter<double>("track_max_eta")),
104  track_max_missing_outerhits_(ps.getParameter<int>("track_max_missing_outerhits")),
105  cosangle_align_(ps.getParameter<double>("cosangle_align")),
106  e_over_h_threshold_(ps.getParameter<double>("e_over_h_threshold")),
107  pt_neutral_threshold_(ps.getParameter<double>("pt_neutral_threshold")),
108  resol_calo_offset_had_(ps.getParameter<double>("resol_calo_offset_had")),
109  resol_calo_scale_had_(ps.getParameter<double>("resol_calo_scale_had")),
110  resol_calo_offset_em_(ps.getParameter<double>("resol_calo_offset_em")),
111  resol_calo_scale_em_(ps.getParameter<double>("resol_calo_scale_em")),
112  debug_(ps.getParameter<bool>("debug")),
113  eidInputName_(ps.getParameter<std::string>("eid_input_name")),
114  eidOutputNameEnergy_(ps.getParameter<std::string>("eid_output_name_energy")),
115  eidOutputNameId_(ps.getParameter<std::string>("eid_output_name_id")),
116  eidMinClusterEnergy_(ps.getParameter<double>("eid_min_cluster_energy")),
117  eidNLayers_(ps.getParameter<int>("eid_n_layers")),
118  eidNClusters_(ps.getParameter<int>("eid_n_clusters")),
119  eidSession_(nullptr) {
120  // mount the tensorflow graph onto the session when set
121  const TrackstersCache *trackstersCache = dynamic_cast<const TrackstersCache *>(cache);
122  if (trackstersCache == nullptr || trackstersCache->eidGraphDef == nullptr) {
123  throw cms::Exception("MissingGraphDef")
124  << "TrackstersMergeProducer received an empty graph definition from the global cache";
125  }
127 
128  produces<std::vector<Trackster>>();
129  produces<std::vector<TICLCandidate>>();
130 }

References utilities::cache(), tensorflow::createSession(), ticl::TrackstersCache::eidGraphDef, eidSession_, and Exception.

◆ ~TrackstersMergeProducer()

TrackstersMergeProducer::~TrackstersMergeProducer ( )
inlineoverride

Definition at line 26 of file TrackstersMergeProducer.cc.

26 {};

Member Function Documentation

◆ assignTimeToCandidates()

void TrackstersMergeProducer::assignTimeToCandidates ( std::vector< TICLCandidate > &  resultCandidates) const
private

Definition at line 683 of file TrackstersMergeProducer.cc.

683  {
684  for (auto &cand : resultCandidates) {
685  if (cand.tracksters().size() > 1) { // For single-trackster candidates the timing is already set
686  float time = 0.f;
687  float timeErr = 0.f;
688  for (const auto &tr : cand.tracksters()) {
689  if (tr->timeError() > 0) {
690  auto invTimeESq = pow(tr->timeError(), -2);
691  time += tr->time() * invTimeESq;
692  timeErr += invTimeESq;
693  }
694  }
695  if (timeErr > 0) {
696  timeErr = 1. / timeErr;
697 
698  cand.setTime(time * timeErr);
699  cand.setTimeError(sqrt(timeErr));
700  }
701  }
702  }
703 }

References funct::pow(), mathSSE::sqrt(), and protons_cff::time.

Referenced by produce().

◆ dumpTrackster()

void TrackstersMergeProducer::dumpTrackster ( const Trackster t) const
private

Definition at line 147 of file TrackstersMergeProducer.cc.

147  {
148  auto e_over_h = (t.raw_em_pt() / ((t.raw_pt() - t.raw_em_pt()) != 0. ? (t.raw_pt() - t.raw_em_pt()) : 1.));
149  LogDebug("TrackstersMergeProducer")
150  << "\nTrackster raw_pt: " << t.raw_pt() << " raw_em_pt: " << t.raw_em_pt() << " eoh: " << e_over_h
151  << " barycenter: " << t.barycenter() << " eta,phi (baricenter): " << t.barycenter().eta() << ", "
152  << t.barycenter().phi() << " eta,phi (eigen): " << t.eigenvectors(0).eta() << ", " << t.eigenvectors(0).phi()
153  << " pt(eigen): " << std::sqrt(t.eigenvectors(0).Unit().perp2()) * t.raw_energy() << " seedID: " << t.seedID()
154  << " seedIndex: " << t.seedIndex() << " size: " << t.vertices().size() << " average usage: "
155  << (std::accumulate(std::begin(t.vertex_multiplicity()), std::end(t.vertex_multiplicity()), 0.) /
156  (float)t.vertex_multiplicity().size())
157  << " raw_energy: " << t.raw_energy() << " regressed energy: " << t.regressed_energy()
158  << " probs(ga/e/mu/np/cp/nh/am/unk): ";
159  for (auto const &p : t.id_probabilities()) {
160  LogDebug("TrackstersMergeProducer") << std::fixed << p << " ";
161  }
162  LogDebug("TrackstersMergeProducer") << " sigmas: ";
163  for (auto const &s : t.sigmas()) {
164  LogDebug("TrackstersMergeProducer") << s << " ";
165  }
166  LogDebug("TrackstersMergeProducer") << std::endl;
167 }

References mps_fire::end, alignBH_cfg::fixed, dqmMemoryStats::float, LogDebug, AlCaHLTBitMon_ParallelJobs::p, alignCSCRings::s, mathSSE::sqrt(), and submitPVValidationJobs::t.

◆ energyRegressionAndID()

void TrackstersMergeProducer::energyRegressionAndID ( const std::vector< reco::CaloCluster > &  layerClusters,
std::vector< Trackster > &  result 
) const
private

Definition at line 542 of file TrackstersMergeProducer.cc.

543  {
544  // Energy regression and particle identification strategy:
545  //
546  // 1. Set default values for regressed energy and particle id for each trackster.
547  // 2. Store indices of tracksters whose total sum of cluster energies is above the
548  // eidMinClusterEnergy_ (GeV) treshold. Inference is not applied for soft tracksters.
549  // 3. When no trackster passes the selection, return.
550  // 4. Create input and output tensors. The batch dimension is determined by the number of
551  // selected tracksters.
552  // 5. Fill input tensors with layer cluster features. Per layer, clusters are ordered descending
553  // by energy. Given that tensor data is contiguous in memory, we can use pointer arithmetic to
554  // fill values, even with batching.
555  // 6. Zero-fill features for empty clusters in each layer.
556  // 7. Batched inference.
557  // 8. Assign the regressed energy and id probabilities to each trackster.
558  //
559  // Indices used throughout this method:
560  // i -> batch element / trackster
561  // j -> layer
562  // k -> cluster
563  // l -> feature
564 
565  // set default values per trackster, determine if the cluster energy threshold is passed,
566  // and store indices of hard tracksters
567  std::vector<int> tracksterIndices;
568  for (int i = 0; i < (int)tracksters.size(); i++) {
569  // calculate the cluster energy sum (2)
570  // note: after the loop, sumClusterEnergy might be just above the threshold
571  // which is enough to decide whether to run inference for the trackster or
572  // not
573  float sumClusterEnergy = 0.;
574  for (const unsigned int &vertex : tracksters[i].vertices()) {
575  sumClusterEnergy += (float)layerClusters[vertex].energy();
576  // there might be many clusters, so try to stop early
577  if (sumClusterEnergy >= eidMinClusterEnergy_) {
578  // set default values (1)
579  tracksters[i].setRegressedEnergy(0.f);
580  tracksters[i].zeroProbabilities();
581  tracksterIndices.push_back(i);
582  break;
583  }
584  }
585  }
586 
587  // do nothing when no trackster passes the selection (3)
588  int batchSize = (int)tracksterIndices.size();
589  if (batchSize == 0) {
590  return;
591  }
592 
593  // create input and output tensors (4)
594  tensorflow::TensorShape shape({batchSize, eidNLayers_, eidNClusters_, eidNFeatures_});
595  tensorflow::Tensor input(tensorflow::DT_FLOAT, shape);
597  static constexpr int inputDimension = 4;
598 
599  std::vector<tensorflow::Tensor> outputs;
600  std::vector<std::string> outputNames;
601  if (!eidOutputNameEnergy_.empty()) {
603  }
604  if (!eidOutputNameId_.empty()) {
605  outputNames.push_back(eidOutputNameId_);
606  }
607 
608  // fill input tensor (5)
609  for (int i = 0; i < batchSize; i++) {
610  const Trackster &trackster = tracksters[tracksterIndices[i]];
611 
612  // per layer, we only consider the first eidNClusters_ clusters in terms of
613  // energy, so in order to avoid creating large / nested structures to do
614  // the sorting for an unknown number of total clusters, create a sorted
615  // list of layer cluster indices to keep track of the filled clusters
616  std::vector<int> clusterIndices(trackster.vertices().size());
617  for (int k = 0; k < (int)trackster.vertices().size(); k++) {
618  clusterIndices[k] = k;
619  }
620  sort(clusterIndices.begin(), clusterIndices.end(), [&layerClusters, &trackster](const int &a, const int &b) {
621  return layerClusters[trackster.vertices(a)].energy() > layerClusters[trackster.vertices(b)].energy();
622  });
623 
624  // keep track of the number of seen clusters per layer
625  std::vector<int> seenClusters(eidNLayers_);
626 
627  // loop through clusters by descending energy
628  for (const int &k : clusterIndices) {
629  // get features per layer and cluster and store the values directly in the input tensor
630  const reco::CaloCluster &cluster = layerClusters[trackster.vertices(k)];
631  int j = rhtools_.getLayerWithOffset(cluster.hitsAndFractions()[0].first) - 1;
632  if (j < eidNLayers_ && seenClusters[j] < eidNClusters_) {
633  // get the pointer to the first feature value for the current batch, layer and cluster
634  float *features = &input.tensor<float, inputDimension>()(i, j, seenClusters[j], 0);
635 
636  // fill features
637  *(features++) = float(cluster.energy() / float(trackster.vertex_multiplicity(k)));
638  *(features++) = float(std::abs(cluster.eta()));
639  *(features) = float(cluster.phi());
640 
641  // increment seen clusters
642  seenClusters[j]++;
643  }
644  }
645 
646  // zero-fill features of empty clusters in each layer (6)
647  for (int j = 0; j < eidNLayers_; j++) {
648  for (int k = seenClusters[j]; k < eidNClusters_; k++) {
649  float *features = &input.tensor<float, inputDimension>()(i, j, k, 0);
650  for (int l = 0; l < eidNFeatures_; l++) {
651  *(features++) = 0.f;
652  }
653  }
654  }
655  }
656 
657  // run the inference (7)
659 
660  // store regressed energy per trackster (8)
661  if (!eidOutputNameEnergy_.empty()) {
662  // get the pointer to the energy tensor, dimension is batch x 1
663  float *energy = outputs[0].flat<float>().data();
664 
665  for (const int &i : tracksterIndices) {
666  tracksters[i].setRegressedEnergy(*(energy++));
667  }
668  }
669 
670  // store id probabilities per trackster (8)
671  if (!eidOutputNameId_.empty()) {
672  // get the pointer to the id probability tensor, dimension is batch x id_probabilities.size()
673  int probsIdx = !eidOutputNameEnergy_.empty();
674  float *probs = outputs[probsIdx].flat<float>().data();
675 
676  for (const int &i : tracksterIndices) {
677  tracksters[i].setProbabilities(probs);
678  probs += tracksters[i].id_probabilities().size();
679  }
680  }
681 }

References a, funct::abs(), b, data, eidInputName_, eidMinClusterEnergy_, eidNClusters_, eidNFeatures_, eidNLayers_, eidOutputNameEnergy_, eidOutputNameId_, eidSession_, HCALHighEnergyHPDFilter_cfi::energy, reco::CaloCluster::energy(), reco::CaloCluster::eta(), f, postprocess-scan-build::features, dqmMemoryStats::float, hgcal::RecHitTools::getLayerWithOffset(), reco::CaloCluster::hitsAndFractions(), mps_fire::i, input, createfilelist::int, dqmiolumiharvest::j, dqmdumpme::k, cmsLHEtoEOSManager::l, HLTEgPhaseIITestSequence_cff::layerClusters, jets_cff::outputNames, PatBasicFWLiteJetAnalyzer_Selector_cfg::outputs, reco::CaloCluster::phi(), rhtools_, tensorflow::run(), jetUpdater_cfi::sort, bphysicsOniaDQM_cfi::vertex, ticl::Trackster::vertex_multiplicity(), pwdgSkimBPark_cfi::vertices, and ticl::Trackster::vertices().

Referenced by produce().

◆ fillDescriptions()

void TrackstersMergeProducer::fillDescriptions ( edm::ConfigurationDescriptions descriptions)
static

Definition at line 751 of file TrackstersMergeProducer.cc.

751  {
753  desc.add<edm::InputTag>("tracksterstrkem", edm::InputTag("ticlTrackstersTrkEM"));
754  desc.add<edm::InputTag>("trackstersem", edm::InputTag("ticlTrackstersEM"));
755  desc.add<edm::InputTag>("tracksterstrk", edm::InputTag("ticlTrackstersTrk"));
756  desc.add<edm::InputTag>("trackstershad", edm::InputTag("ticlTrackstersHAD"));
757  desc.add<edm::InputTag>("seedingTrk", edm::InputTag("ticlSeedingTrk"));
758  desc.add<edm::InputTag>("layer_clusters", edm::InputTag("hgcalLayerClusters"));
759  desc.add<edm::InputTag>("layer_clustersTime", edm::InputTag("hgcalLayerClusters", "timeLayerCluster"));
760  desc.add<edm::InputTag>("tracks", edm::InputTag("generalTracks"));
761  desc.add<bool>("optimiseAcrossTracksters", true);
762  desc.add<int>("eta_bin_window", 1);
763  desc.add<int>("phi_bin_window", 1);
764  desc.add<double>("pt_sigma_high", 2.);
765  desc.add<double>("pt_sigma_low", 2.);
766  desc.add<double>("halo_max_distance2", 4.);
767  desc.add<double>("track_min_pt", 1.);
768  desc.add<double>("track_min_eta", 1.48);
769  desc.add<double>("track_max_eta", 3.);
770  desc.add<int>("track_max_missing_outerhits", 5);
771  desc.add<double>("cosangle_align", 0.9945);
772  desc.add<double>("e_over_h_threshold", 1.);
773  desc.add<double>("pt_neutral_threshold", 2.);
774  desc.add<double>("resol_calo_offset_had", 1.5);
775  desc.add<double>("resol_calo_scale_had", 0.15);
776  desc.add<double>("resol_calo_offset_em", 1.5);
777  desc.add<double>("resol_calo_scale_em", 0.15);
778  desc.add<bool>("debug", true);
779  desc.add<std::string>("eid_graph_path", "RecoHGCal/TICL/data/tf_models/energy_id_v0.pb");
780  desc.add<std::string>("eid_input_name", "input");
781  desc.add<std::string>("eid_output_name_energy", "output/regressed_energy");
782  desc.add<std::string>("eid_output_name_id", "output/id_probabilities");
783  desc.add<double>("eid_min_cluster_energy", 1.);
784  desc.add<int>("eid_n_layers", 50);
785  desc.add<int>("eid_n_clusters", 10);
786  descriptions.add("trackstersMergeProducer", desc);
787 }

References edm::ConfigurationDescriptions::add(), submitPVResolutionJobs::desc, HLT_FULL_cff::InputTag, and AlCaHLTBitMon_QueryRunRegistry::string.

◆ fillTile()

void TrackstersMergeProducer::fillTile ( TICLTracksterTiles tracksterTile,
const std::vector< Trackster > &  tracksters,
TracksterIterIndex  tracksterIteration 
)
private

Definition at line 132 of file TrackstersMergeProducer.cc.

134  {
135  int tracksterId = 0;
136  for (auto const &t : tracksters) {
137  tracksterTile.fill(tracksterIteration, t.barycenter().eta(), t.barycenter().phi(), tracksterId);
138  LogDebug("TrackstersMergeProducer") << "Adding tracksterId: " << tracksterId << " into bin [eta,phi]: [ "
139  << tracksterTile[tracksterIteration].etaBin(t.barycenter().eta()) << ", "
140  << tracksterTile[tracksterIteration].phiBin(t.barycenter().phi())
141  << "] for iteration: " << tracksterIteration << std::endl;
142 
143  tracksterId++;
144  }
145 }

References TICLGenericTile< T >::fill(), LogDebug, BeamMonitor_cff::phiBin, and submitPVValidationJobs::t.

Referenced by produce().

◆ globalEndJob()

void TrackstersMergeProducer::globalEndJob ( TrackstersCache cache)
static

Definition at line 719 of file TrackstersMergeProducer.cc.

719  {
720  delete cache->eidGraphDef;
721  cache->eidGraphDef = nullptr;
722 }

References utilities::cache().

◆ initializeGlobalCache()

std::unique_ptr< TrackstersCache > TrackstersMergeProducer::initializeGlobalCache ( const edm::ParameterSet params)
static

Definition at line 705 of file TrackstersMergeProducer.cc.

705  {
706  // this method is supposed to create, initialize and return a TrackstersCache instance
707  std::unique_ptr<TrackstersCache> cache = std::make_unique<TrackstersCache>(params);
708 
709  // load the graph def and save it
710  std::string graphPath = params.getParameter<std::string>("eid_graph_path");
711  if (!graphPath.empty()) {
712  graphPath = edm::FileInPath(graphPath).fullPath();
713  cache->eidGraphDef = tensorflow::loadGraphDef(graphPath);
714  }
715 
716  return cache;
717 }

References utilities::cache(), edm::FileInPath::fullPath(), tensorflow::loadGraphDef(), CalibrationSummaryClient_cfi::params, and AlCaHLTBitMon_QueryRunRegistry::string.

◆ printTrackstersDebug()

void TrackstersMergeProducer::printTrackstersDebug ( const std::vector< Trackster > &  tracksters,
const char *  label 
) const
private

Definition at line 724 of file TrackstersMergeProducer.cc.

724  {
725  if (!debug_)
726  return;
727 
728  int counter = 0;
729  for (auto const &t : tracksters) {
730  LogDebug("TrackstersMergeProducer")
731  << counter++ << " TrackstersMergeProducer (" << label << ") obj barycenter: " << t.barycenter()
732  << " eta,phi (baricenter): " << t.barycenter().eta() << ", " << t.barycenter().phi()
733  << " eta,phi (eigen): " << t.eigenvectors(0).eta() << ", " << t.eigenvectors(0).phi()
734  << " pt(eigen): " << std::sqrt(t.eigenvectors(0).Unit().perp2()) * t.raw_energy() << " seedID: " << t.seedID()
735  << " seedIndex: " << t.seedIndex() << " size: " << t.vertices().size() << " average usage: "
736  << (std::accumulate(std::begin(t.vertex_multiplicity()), std::end(t.vertex_multiplicity()), 0.) /
737  (float)t.vertex_multiplicity().size())
738  << " raw_energy: " << t.raw_energy() << " regressed energy: " << t.regressed_energy()
739  << " probs(ga/e/mu/np/cp/nh/am/unk): ";
740  for (auto const &p : t.id_probabilities()) {
741  LogDebug("TrackstersMergeProducer") << std::fixed << p << " ";
742  }
743  LogDebug("TrackstersMergeProducer") << " sigmas: ";
744  for (auto const &s : t.sigmas()) {
745  LogDebug("TrackstersMergeProducer") << s << " ";
746  }
747  LogDebug("TrackstersMergeProducer") << std::endl;
748  }
749 }

References debug_, mps_fire::end, alignBH_cfg::fixed, dqmMemoryStats::float, label, LogDebug, AlCaHLTBitMon_ParallelJobs::p, alignCSCRings::s, mathSSE::sqrt(), and submitPVValidationJobs::t.

Referenced by produce().

◆ produce()

void TrackstersMergeProducer::produce ( edm::Event evt,
const edm::EventSetup es 
)
override

Definition at line 169 of file TrackstersMergeProducer.cc.

169  {
172  auto resultTrackstersMerged = std::make_unique<std::vector<Trackster>>();
173  auto resultCandidates = std::make_unique<std::vector<TICLCandidate>>();
174 
175  TICLTracksterTiles tracksterTile;
176  std::vector<bool> usedTrackstersMerged;
177  std::vector<int> indexInMergedCollTRKEM;
178  std::vector<int> indexInMergedCollEM;
179  std::vector<int> indexInMergedCollTRK;
180  std::vector<int> indexInMergedCollHAD;
181  std::vector<bool> usedSeeds;
182 
183  // associating seed to the index of the trackster in the merged collection and the iteration that found it
184  std::map<int, std::vector<std::pair<int, TracksterIterIndex>>> seedToTracksterAssociator;
186  evt.getByToken(tracks_token_, track_h);
187  const auto &tracks = *track_h;
188 
190  evt.getByToken(clusters_token_, cluster_h);
191  const auto &layerClusters = *cluster_h;
192 
194  evt.getByToken(clustersTime_token_, clustersTime_h);
195  const auto &layerClustersTimes = *clustersTime_h;
196 
197  edm::Handle<std::vector<Trackster>> trackstersem_h;
198  evt.getByToken(trackstersem_token_, trackstersem_h);
199  const auto &trackstersEM = *trackstersem_h;
200 
201  edm::Handle<std::vector<Trackster>> tracksterstrkem_h;
202  evt.getByToken(tracksterstrkem_token_, tracksterstrkem_h);
203  const auto &trackstersTRKEM = *tracksterstrkem_h;
204 
205  edm::Handle<std::vector<Trackster>> tracksterstrk_h;
206  evt.getByToken(tracksterstrk_token_, tracksterstrk_h);
207  const auto &trackstersTRK = *tracksterstrk_h;
208 
209  edm::Handle<std::vector<Trackster>> trackstershad_h;
210  evt.getByToken(trackstershad_token_, trackstershad_h);
211  const auto &trackstersHAD = *trackstershad_h;
212 
214  evt.getByToken(seedingTrk_token_, seedingTrk_h);
215  const auto &seedingTrk = *seedingTrk_h;
216  usedSeeds.resize(tracks.size(), false);
217 
218  fillTile(tracksterTile, trackstersTRKEM, TracksterIterIndex::TRKEM);
219  fillTile(tracksterTile, trackstersEM, TracksterIterIndex::EM);
220  fillTile(tracksterTile, trackstersTRK, TracksterIterIndex::TRKHAD);
221  fillTile(tracksterTile, trackstersHAD, TracksterIterIndex::HAD);
222 
223  auto totalNumberOfTracksters =
224  trackstersTRKEM.size() + trackstersTRK.size() + trackstersEM.size() + trackstersHAD.size();
225  resultTrackstersMerged->reserve(totalNumberOfTracksters);
226  usedTrackstersMerged.resize(totalNumberOfTracksters, false);
227  indexInMergedCollTRKEM.reserve(trackstersTRKEM.size());
228  indexInMergedCollEM.reserve(trackstersEM.size());
229  indexInMergedCollTRK.reserve(trackstersTRK.size());
230  indexInMergedCollHAD.reserve(trackstersHAD.size());
231 
232  if (debug_) {
233  printTrackstersDebug(trackstersTRKEM, "tracksterTRKEM");
234  printTrackstersDebug(trackstersEM, "tracksterEM");
235  printTrackstersDebug(trackstersTRK, "tracksterTRK");
236  printTrackstersDebug(trackstersHAD, "tracksterHAD");
237  }
238 
239  for (auto const &t : trackstersTRKEM) {
240  indexInMergedCollTRKEM.push_back(resultTrackstersMerged->size());
241  seedToTracksterAssociator[t.seedIndex()].emplace_back(resultTrackstersMerged->size(), TracksterIterIndex::TRKEM);
242  resultTrackstersMerged->push_back(t);
243  }
244 
245  for (auto const &t : trackstersEM) {
246  indexInMergedCollEM.push_back(resultTrackstersMerged->size());
247  resultTrackstersMerged->push_back(t);
248  }
249 
250  for (auto const &t : trackstersTRK) {
251  indexInMergedCollTRK.push_back(resultTrackstersMerged->size());
252  seedToTracksterAssociator[t.seedIndex()].emplace_back(resultTrackstersMerged->size(), TracksterIterIndex::TRKHAD);
253  resultTrackstersMerged->push_back(t);
254  }
255 
256  for (auto const &t : trackstersHAD) {
257  indexInMergedCollHAD.push_back(resultTrackstersMerged->size());
258  resultTrackstersMerged->push_back(t);
259  }
260 
261  assignPCAtoTracksters(*resultTrackstersMerged,
263  layerClustersTimes,
265  energyRegressionAndID(layerClusters, *resultTrackstersMerged);
266 
267  printTrackstersDebug(*resultTrackstersMerged, "TrackstersMergeProducer");
268 
269  auto trackstersMergedHandle = evt.put(std::move(resultTrackstersMerged));
270 
271  // TICL Candidate creation
272  // We start from neutrals first
273 
274  // Photons
275  for (unsigned i = 0; i < trackstersEM.size(); ++i) {
276  auto mergedIdx = indexInMergedCollEM[i];
277  usedTrackstersMerged[mergedIdx] = true;
278  const auto &t = trackstersEM[i]; //trackster
279  TICLCandidate tmpCandidate;
280  tmpCandidate.addTrackster(edm::Ptr<ticl::Trackster>(trackstersMergedHandle, mergedIdx));
281  tmpCandidate.setCharge(0);
282  tmpCandidate.setPdgId(22);
283  tmpCandidate.setRawEnergy(t.raw_energy());
284  math::XYZTLorentzVector p4(t.raw_energy() * t.barycenter().unit().x(),
285  t.raw_energy() * t.barycenter().unit().y(),
286  t.raw_energy() * t.barycenter().unit().z(),
287  t.raw_energy());
288  tmpCandidate.setP4(p4);
289  resultCandidates->push_back(tmpCandidate);
290  }
291 
292  // Neutral Hadrons
293  constexpr double mpion = 0.13957;
294  constexpr float mpion2 = mpion * mpion;
295  for (unsigned i = 0; i < trackstersHAD.size(); ++i) {
296  auto mergedIdx = indexInMergedCollHAD[i];
297  usedTrackstersMerged[mergedIdx] = true;
298  const auto &t = trackstersHAD[i]; //trackster
299  TICLCandidate tmpCandidate;
300  tmpCandidate.addTrackster(edm::Ptr<ticl::Trackster>(trackstersMergedHandle, mergedIdx));
301  tmpCandidate.setCharge(0);
302  tmpCandidate.setPdgId(130);
303  tmpCandidate.setRawEnergy(t.raw_energy());
304  float momentum = std::sqrt(t.raw_energy() * t.raw_energy() - mpion2);
305  math::XYZTLorentzVector p4(momentum * t.barycenter().unit().x(),
306  momentum * t.barycenter().unit().y(),
307  momentum * t.barycenter().unit().z(),
308  t.raw_energy());
309  tmpCandidate.setP4(p4);
310  resultCandidates->push_back(tmpCandidate);
311  }
312 
313  // Charged Particles
314  for (unsigned i = 0; i < trackstersTRKEM.size(); ++i) {
315  auto mergedIdx = indexInMergedCollTRKEM[i];
316  if (!usedTrackstersMerged[mergedIdx]) {
317  const auto &t = trackstersTRKEM[i]; //trackster
318  auto trackIdx = t.seedIndex();
319  auto const &track = tracks[trackIdx];
320  if (!usedSeeds[trackIdx] and t.raw_energy() > 0) {
321  usedSeeds[trackIdx] = true;
322  usedTrackstersMerged[mergedIdx] = true;
323 
324  std::vector<int> trackstersTRKwithSameSeed;
325  std::vector<int> trackstersTRKEMwithSameSeed;
326 
327  for (const auto &tracksterIterationPair : seedToTracksterAssociator[trackIdx]) {
328  if (tracksterIterationPair.first != mergedIdx and !usedTrackstersMerged[tracksterIterationPair.first] and
329  trackstersMergedHandle->at(tracksterIterationPair.first).raw_energy() > 0.) {
330  if (tracksterIterationPair.second == TracksterIterIndex::TRKEM) {
331  trackstersTRKEMwithSameSeed.push_back(tracksterIterationPair.first);
332  } else if (tracksterIterationPair.second == TracksterIterIndex::TRKHAD) {
333  trackstersTRKwithSameSeed.push_back(tracksterIterationPair.first);
334  }
335  }
336  }
337 
338  float tracksterTotalRawPt = t.raw_pt();
339  std::vector<int> haloTrackstersTRKIdx;
340  bool foundCompatibleTRK = false;
341 
342  for (auto otherTracksterIdx : trackstersTRKwithSameSeed) {
343  usedTrackstersMerged[otherTracksterIdx] = true;
344  tracksterTotalRawPt += trackstersMergedHandle->at(otherTracksterIdx).raw_pt();
345 
346  // Check the X,Y,Z barycenter and merge if they are very close (halo)
347  if ((t.barycenter() - trackstersMergedHandle->at(otherTracksterIdx).barycenter()).mag2() <
349  haloTrackstersTRKIdx.push_back(otherTracksterIdx);
350 
351  } else {
352  foundCompatibleTRK = true;
353  }
354  }
355 
356  //check if there is 1-to-1 relationship
357  if (trackstersTRKEMwithSameSeed.empty()) {
358  if (foundCompatibleTRK) {
359  TICLCandidate tmpCandidate;
360  tmpCandidate.addTrackster(edm::Ptr<ticl::Trackster>(trackstersMergedHandle, mergedIdx));
361  double raw_energy = t.raw_energy();
362 
363  tmpCandidate.setCharge(track.charge());
364  tmpCandidate.setTrackPtr(edm::Ptr<reco::Track>(track_h, trackIdx));
365  tmpCandidate.setPdgId(211 * track.charge());
366  for (auto otherTracksterIdx : trackstersTRKwithSameSeed) {
367  tmpCandidate.addTrackster(edm::Ptr<ticl::Trackster>(trackstersMergedHandle, otherTracksterIdx));
368  raw_energy += trackstersMergedHandle->at(otherTracksterIdx).raw_energy();
369  }
370  tmpCandidate.setRawEnergy(raw_energy);
371  math::XYZTLorentzVector p4(raw_energy * track.momentum().unit().x(),
372  raw_energy * track.momentum().unit().y(),
373  raw_energy * track.momentum().unit().z(),
374  raw_energy);
375  tmpCandidate.setP4(p4);
376  resultCandidates->push_back(tmpCandidate);
377 
378  } else {
379  TICLCandidate tmpCandidate;
380  tmpCandidate.addTrackster(edm::Ptr<ticl::Trackster>(trackstersMergedHandle, mergedIdx));
381  double raw_energy = t.raw_energy();
382  tmpCandidate.setCharge(track.charge());
383  tmpCandidate.setTrackPtr(edm::Ptr<reco::Track>(track_h, trackIdx));
384  for (auto otherTracksterIdx : trackstersTRKwithSameSeed) {
385  tmpCandidate.addTrackster(edm::Ptr<ticl::Trackster>(trackstersMergedHandle, otherTracksterIdx));
386  raw_energy += trackstersMergedHandle->at(otherTracksterIdx).raw_energy();
387  }
388  tmpCandidate.setPdgId(11 * track.charge());
389 
390  tmpCandidate.setRawEnergy(raw_energy);
391  math::XYZTLorentzVector p4(raw_energy * track.momentum().unit().x(),
392  raw_energy * track.momentum().unit().y(),
393  raw_energy * track.momentum().unit().z(),
394  raw_energy);
395  tmpCandidate.setP4(p4);
396  resultCandidates->push_back(tmpCandidate);
397  }
398 
399  } else {
400  // if 1-to-many find closest trackster in momentum
401  int closestTrackster = mergedIdx;
402  float minPtDiff = std::abs(t.raw_pt() - track.pt());
403  for (auto otherTracksterIdx : trackstersTRKEMwithSameSeed) {
404  auto thisPt = tracksterTotalRawPt + trackstersMergedHandle->at(otherTracksterIdx).raw_pt() - t.raw_pt();
405  closestTrackster = std::abs(thisPt - track.pt()) < minPtDiff ? otherTracksterIdx : closestTrackster;
406  }
407  usedTrackstersMerged[closestTrackster] = true;
408 
409  if (foundCompatibleTRK) {
410  TICLCandidate tmpCandidate;
411  tmpCandidate.addTrackster(edm::Ptr<ticl::Trackster>(trackstersMergedHandle, closestTrackster));
412  double raw_energy = trackstersMergedHandle->at(closestTrackster).raw_energy();
413 
414  tmpCandidate.setCharge(track.charge());
415  tmpCandidate.setTrackPtr(edm::Ptr<reco::Track>(track_h, trackIdx));
416  tmpCandidate.setPdgId(211 * track.charge());
417  for (auto otherTracksterIdx : trackstersTRKwithSameSeed) {
418  tmpCandidate.addTrackster(edm::Ptr<ticl::Trackster>(trackstersMergedHandle, otherTracksterIdx));
419  raw_energy += trackstersMergedHandle->at(otherTracksterIdx).raw_energy();
420  }
421  tmpCandidate.setRawEnergy(raw_energy);
422  float momentum = std::sqrt(raw_energy * raw_energy - mpion2);
423  math::XYZTLorentzVector p4(momentum * track.momentum().unit().x(),
424  momentum * track.momentum().unit().y(),
425  momentum * track.momentum().unit().z(),
426  raw_energy);
427  tmpCandidate.setP4(p4);
428  resultCandidates->push_back(tmpCandidate);
429 
430  } else {
431  TICLCandidate tmpCandidate;
432  tmpCandidate.addTrackster(edm::Ptr<ticl::Trackster>(trackstersMergedHandle, closestTrackster));
433  double raw_energy = trackstersMergedHandle->at(closestTrackster).raw_energy();
434 
435  tmpCandidate.setCharge(track.charge());
436  tmpCandidate.setTrackPtr(edm::Ptr<reco::Track>(track_h, trackIdx));
437  for (auto otherTracksterIdx : trackstersTRKwithSameSeed) {
438  tmpCandidate.addTrackster(edm::Ptr<ticl::Trackster>(trackstersMergedHandle, otherTracksterIdx));
439  raw_energy += trackstersMergedHandle->at(otherTracksterIdx).raw_energy();
440  }
441  tmpCandidate.setPdgId(11 * track.charge());
442  tmpCandidate.setRawEnergy(raw_energy);
443  math::XYZTLorentzVector p4(raw_energy * track.momentum().unit().x(),
444  raw_energy * track.momentum().unit().y(),
445  raw_energy * track.momentum().unit().z(),
446  raw_energy);
447  tmpCandidate.setP4(p4);
448  resultCandidates->push_back(tmpCandidate);
449  }
450  // Promote all other TRKEM tracksters as photons with their energy.
451  for (auto otherTracksterIdx : trackstersTRKEMwithSameSeed) {
452  auto tmpIndex = (otherTracksterIdx != closestTrackster) ? otherTracksterIdx : mergedIdx;
453  TICLCandidate photonCandidate;
454  const auto &otherTrackster = trackstersMergedHandle->at(tmpIndex);
455  auto gammaEnergy = otherTrackster.raw_energy();
456  photonCandidate.setCharge(0);
457  photonCandidate.setPdgId(22);
458  photonCandidate.setRawEnergy(gammaEnergy);
459  math::XYZTLorentzVector gammaP4(gammaEnergy * otherTrackster.barycenter().unit().x(),
460  gammaEnergy * otherTrackster.barycenter().unit().y(),
461  gammaEnergy * otherTrackster.barycenter().unit().z(),
462  gammaEnergy);
463  photonCandidate.setP4(gammaP4);
464  photonCandidate.addTrackster(edm::Ptr<ticl::Trackster>(trackstersMergedHandle, tmpIndex));
465  resultCandidates->push_back(photonCandidate);
466  }
467  }
468  }
469  }
470  } //end of loop over trackstersTRKEM
471 
472  for (unsigned i = 0; i < trackstersTRK.size(); ++i) {
473  auto mergedIdx = indexInMergedCollTRK[i];
474  const auto &t = trackstersTRK[i]; //trackster
475 
476  if (!usedTrackstersMerged[mergedIdx] and t.raw_energy() > 0) {
477  auto trackIdx = t.seedIndex();
478  auto const &track = tracks[trackIdx];
479  if (!usedSeeds[trackIdx]) {
480  usedSeeds[trackIdx] = true;
481  usedTrackstersMerged[mergedIdx] = true;
482  TICLCandidate tmpCandidate;
483  tmpCandidate.addTrackster(edm::Ptr<ticl::Trackster>(trackstersMergedHandle, mergedIdx));
484  tmpCandidate.setCharge(track.charge());
485  tmpCandidate.setTrackPtr(edm::Ptr<reco::Track>(track_h, trackIdx));
486  tmpCandidate.setPdgId(211 * track.charge());
487  tmpCandidate.setRawEnergy(t.raw_energy());
488  float momentum = std::sqrt(t.raw_energy() * t.raw_energy() - mpion2);
489  math::XYZTLorentzVector p4(momentum * track.momentum().unit().x(),
490  momentum * track.momentum().unit().y(),
491  momentum * track.momentum().unit().z(),
492  t.raw_energy());
493  tmpCandidate.setP4(p4);
494  resultCandidates->push_back(tmpCandidate);
495  }
496  }
497  }
498  // For all seeds that have 0-energy tracksters whose track is not marked as used, create a charged hadron with the track information.
499  for (auto const &s : seedingTrk) {
500  if (usedSeeds[s.index] == false) {
501  auto const &track = tracks[s.index];
502  // emit a charged hadron
503  TICLCandidate tmpCandidate;
504  tmpCandidate.setCharge(track.charge());
505  tmpCandidate.setTrackPtr(edm::Ptr<reco::Track>(track_h, s.index));
506  tmpCandidate.setPdgId(211 * track.charge());
507  float energy = std::sqrt(track.p() * track.p() + mpion2);
508  tmpCandidate.setRawEnergy(energy);
509  math::PtEtaPhiMLorentzVector p4Polar(track.pt(), track.eta(), track.phi(), mpion);
510  tmpCandidate.setP4(p4Polar);
511  resultCandidates->push_back(tmpCandidate);
512  usedSeeds[s.index] = true;
513  }
514  }
515 
516  // for all general tracks (high purity, pt > 1), check if they have been used: if not, promote them as charged hadrons
517  for (unsigned i = 0; i < tracks.size(); ++i) {
518  auto const &track = tracks[i];
519  if (track.pt() > track_min_pt_ and track.quality(reco::TrackBase::highPurity) and
520  track.missingOuterHits() < track_max_missing_outerhits_ and std::abs(track.outerEta()) > track_min_eta_ and
521  std::abs(track.outerEta()) < track_max_eta_ and usedSeeds[i] == false) {
522  // emit a charged hadron
523  TICLCandidate tmpCandidate;
524  tmpCandidate.setCharge(track.charge());
525  tmpCandidate.setTrackPtr(edm::Ptr<reco::Track>(track_h, i));
526  tmpCandidate.setPdgId(211 * track.charge());
527  float energy = std::sqrt(track.p() * track.p() + mpion2);
528  tmpCandidate.setRawEnergy(energy);
529  math::PtEtaPhiMLorentzVector p4Polar(track.pt(), track.eta(), track.phi(), mpion);
530  tmpCandidate.setP4(p4Polar);
531  resultCandidates->push_back(tmpCandidate);
532  usedSeeds[i] = true;
533  }
534  }
535 
536  // Compute timing
537  assignTimeToCandidates(*resultCandidates);
538 
539  evt.put(std::move(resultCandidates));
540 }

References funct::abs(), TICLCandidate::addTrackster(), ticl::assignPCAtoTracksters(), assignTimeToCandidates(), clusters_token_, clustersTime_token_, debug_, HCALHighEnergyHPDFilter_cfi::energy, energyRegressionAndID(), fillTile(), relativeConstraints::geom, geometry_token_, edm::Event::getByToken(), edm::EventSetup::getHandle(), hgcal::RecHitTools::getPositionLayer(), halo_max_distance2_, reco::TrackBase::highPurity, mps_fire::i, hgcal::RecHitTools::lastLayerEE(), HLTEgPhaseIITestSequence_cff::layerClusters, mag2(), eostools::move(), p4, printTrackstersDebug(), edm::Event::put(), rhtools_, alignCSCRings::s, HLTEgPhaseIITestSequence_cff::seedingTrk, seedingTrk_token_, reco::LeafCandidate::setCharge(), hgcal::RecHitTools::setGeometry(), reco::LeafCandidate::setP4(), reco::LeafCandidate::setPdgId(), TICLCandidate::setRawEnergy(), TICLCandidate::setTrackPtr(), mathSSE::sqrt(), submitPVValidationJobs::t, HLT_FULL_cff::track, track_max_eta_, track_max_missing_outerhits_, track_min_eta_, track_min_pt_, tracks, tracks_token_, trackstersem_token_, trackstershad_token_, tracksterstrk_token_, tracksterstrkem_token_, and z.

Member Data Documentation

◆ clusters_token_

const edm::EDGetTokenT<std::vector<reco::CaloCluster> > TrackstersMergeProducer::clusters_token_
private

Definition at line 49 of file TrackstersMergeProducer.cc.

Referenced by produce().

◆ clustersTime_token_

const edm::EDGetTokenT<edm::ValueMap<std::pair<float, float> > > TrackstersMergeProducer::clustersTime_token_
private

Definition at line 50 of file TrackstersMergeProducer.cc.

Referenced by produce().

◆ cosangle_align_

const double TrackstersMergeProducer::cosangle_align_
private

Definition at line 63 of file TrackstersMergeProducer.cc.

◆ debug_

const bool TrackstersMergeProducer::debug_
private

Definition at line 70 of file TrackstersMergeProducer.cc.

Referenced by printTrackstersDebug(), and produce().

◆ e_over_h_threshold_

const double TrackstersMergeProducer::e_over_h_threshold_
private

Definition at line 64 of file TrackstersMergeProducer.cc.

◆ eidInputName_

const std::string TrackstersMergeProducer::eidInputName_
private

Definition at line 71 of file TrackstersMergeProducer.cc.

Referenced by energyRegressionAndID().

◆ eidMinClusterEnergy_

const float TrackstersMergeProducer::eidMinClusterEnergy_
private

Definition at line 74 of file TrackstersMergeProducer.cc.

Referenced by energyRegressionAndID().

◆ eidNClusters_

const int TrackstersMergeProducer::eidNClusters_
private

Definition at line 76 of file TrackstersMergeProducer.cc.

Referenced by energyRegressionAndID().

◆ eidNFeatures_

constexpr int TrackstersMergeProducer::eidNFeatures_ = 3
staticconstexprprivate

Definition at line 81 of file TrackstersMergeProducer.cc.

Referenced by energyRegressionAndID().

◆ eidNLayers_

const int TrackstersMergeProducer::eidNLayers_
private

Definition at line 75 of file TrackstersMergeProducer.cc.

Referenced by energyRegressionAndID().

◆ eidOutputNameEnergy_

const std::string TrackstersMergeProducer::eidOutputNameEnergy_
private

Definition at line 72 of file TrackstersMergeProducer.cc.

Referenced by energyRegressionAndID().

◆ eidOutputNameId_

const std::string TrackstersMergeProducer::eidOutputNameId_
private

Definition at line 73 of file TrackstersMergeProducer.cc.

Referenced by energyRegressionAndID().

◆ eidSession_

tensorflow::Session* TrackstersMergeProducer::eidSession_
private

Definition at line 78 of file TrackstersMergeProducer.cc.

Referenced by energyRegressionAndID(), and TrackstersMergeProducer().

◆ eta_bin_window_

const int TrackstersMergeProducer::eta_bin_window_
private

Definition at line 54 of file TrackstersMergeProducer.cc.

◆ geometry_token_

const edm::ESGetToken<CaloGeometry, CaloGeometryRecord> TrackstersMergeProducer::geometry_token_
private

Definition at line 52 of file TrackstersMergeProducer.cc.

Referenced by produce().

◆ halo_max_distance2_

const double TrackstersMergeProducer::halo_max_distance2_
private

Definition at line 58 of file TrackstersMergeProducer.cc.

Referenced by produce().

◆ optimiseAcrossTracksters_

const bool TrackstersMergeProducer::optimiseAcrossTracksters_
private

Definition at line 53 of file TrackstersMergeProducer.cc.

◆ phi_bin_window_

const int TrackstersMergeProducer::phi_bin_window_
private

Definition at line 55 of file TrackstersMergeProducer.cc.

◆ pt_neutral_threshold_

const double TrackstersMergeProducer::pt_neutral_threshold_
private

Definition at line 65 of file TrackstersMergeProducer.cc.

◆ pt_sigma_high_

const double TrackstersMergeProducer::pt_sigma_high_
private

Definition at line 56 of file TrackstersMergeProducer.cc.

◆ pt_sigma_low_

const double TrackstersMergeProducer::pt_sigma_low_
private

Definition at line 57 of file TrackstersMergeProducer.cc.

◆ resol_calo_offset_em_

const double TrackstersMergeProducer::resol_calo_offset_em_
private

Definition at line 68 of file TrackstersMergeProducer.cc.

◆ resol_calo_offset_had_

const double TrackstersMergeProducer::resol_calo_offset_had_
private

Definition at line 66 of file TrackstersMergeProducer.cc.

◆ resol_calo_scale_em_

const double TrackstersMergeProducer::resol_calo_scale_em_
private

Definition at line 69 of file TrackstersMergeProducer.cc.

◆ resol_calo_scale_had_

const double TrackstersMergeProducer::resol_calo_scale_had_
private

Definition at line 67 of file TrackstersMergeProducer.cc.

◆ rhtools_

hgcal::RecHitTools TrackstersMergeProducer::rhtools_
private

Definition at line 79 of file TrackstersMergeProducer.cc.

Referenced by energyRegressionAndID(), and produce().

◆ seedingTrk_token_

const edm::EDGetTokenT<std::vector<TICLSeedingRegion> > TrackstersMergeProducer::seedingTrk_token_
private

Definition at line 48 of file TrackstersMergeProducer.cc.

Referenced by produce().

◆ track_max_eta_

const double TrackstersMergeProducer::track_max_eta_
private

Definition at line 61 of file TrackstersMergeProducer.cc.

Referenced by produce().

◆ track_max_missing_outerhits_

const int TrackstersMergeProducer::track_max_missing_outerhits_
private

Definition at line 62 of file TrackstersMergeProducer.cc.

Referenced by produce().

◆ track_min_eta_

const double TrackstersMergeProducer::track_min_eta_
private

Definition at line 60 of file TrackstersMergeProducer.cc.

Referenced by produce().

◆ track_min_pt_

const double TrackstersMergeProducer::track_min_pt_
private

Definition at line 59 of file TrackstersMergeProducer.cc.

Referenced by produce().

◆ tracks_token_

const edm::EDGetTokenT<std::vector<reco::Track> > TrackstersMergeProducer::tracks_token_
private

Definition at line 51 of file TrackstersMergeProducer.cc.

Referenced by produce().

◆ trackstersem_token_

const edm::EDGetTokenT<std::vector<Trackster> > TrackstersMergeProducer::trackstersem_token_
private

Definition at line 45 of file TrackstersMergeProducer.cc.

Referenced by produce().

◆ trackstershad_token_

const edm::EDGetTokenT<std::vector<Trackster> > TrackstersMergeProducer::trackstershad_token_
private

Definition at line 47 of file TrackstersMergeProducer.cc.

Referenced by produce().

◆ tracksterstrk_token_

const edm::EDGetTokenT<std::vector<Trackster> > TrackstersMergeProducer::tracksterstrk_token_
private

Definition at line 46 of file TrackstersMergeProducer.cc.

Referenced by produce().

◆ tracksterstrkem_token_

const edm::EDGetTokenT<std::vector<Trackster> > TrackstersMergeProducer::tracksterstrkem_token_
private

Definition at line 44 of file TrackstersMergeProducer.cc.

Referenced by produce().

reco::CaloCluster::phi
double phi() const
azimuthal angle of cluster centroid
Definition: CaloCluster.h:184
reco::LeafCandidate::setPdgId
void setPdgId(int pdgId) final
Definition: LeafCandidate.h:178
tensorflow::createSession
Session * createSession(SessionOptions &sessionOptions)
Definition: TensorFlow.cc:85
TrackstersMergeProducer::track_min_pt_
const double track_min_pt_
Definition: TrackstersMergeProducer.cc:59
TICLCandidate::setTrackPtr
void setTrackPtr(const edm::Ptr< reco::Track > &trackPtr)
Definition: TICLCandidate.h:37
counter
Definition: counter.py:1
alignBH_cfg.fixed
fixed
Definition: alignBH_cfg.py:54
mps_fire.i
i
Definition: mps_fire.py:428
HLT_FULL_cff.track
track
Definition: HLT_FULL_cff.py:11713
input
static const std::string input
Definition: EdmProvDump.cc:48
dqmMemoryStats.float
float
Definition: dqmMemoryStats.py:127
f
double f[11][100]
Definition: MuScleFitUtils.cc:78
TrackstersMergeProducer::halo_max_distance2_
const double halo_max_distance2_
Definition: TrackstersMergeProducer.cc:58
CalibrationSummaryClient_cfi.params
params
Definition: CalibrationSummaryClient_cfi.py:14
BeamMonitor_cff.phiBin
phiBin
Definition: BeamMonitor_cff.py:75
postprocess-scan-build.features
features
Definition: postprocess-scan-build.py:8
TICLGenericTile
Definition: TICLLayerTile.h:72
TrackstersMergeProducer::eta_bin_window_
const int eta_bin_window_
Definition: TrackstersMergeProducer.cc:54
TrackstersMergeProducer::printTrackstersDebug
void printTrackstersDebug(const std::vector< Trackster > &, const char *label) const
Definition: TrackstersMergeProducer.cc:724
AlCaHLTBitMon_ParallelJobs.p
p
Definition: AlCaHLTBitMon_ParallelJobs.py:153
PatBasicFWLiteJetAnalyzer_Selector_cfg.outputs
outputs
Definition: PatBasicFWLiteJetAnalyzer_Selector_cfg.py:48
TrackstersMergeProducer::assignTimeToCandidates
void assignTimeToCandidates(std::vector< TICLCandidate > &resultCandidates) const
Definition: TrackstersMergeProducer.cc:683
HLT_FULL_cff.InputTag
InputTag
Definition: HLT_FULL_cff.py:89281
HLTEgPhaseIITestSequence_cff.seedingTrk
seedingTrk
Definition: HLTEgPhaseIITestSequence_cff.py:2288
edm::ParameterSetDescription
Definition: ParameterSetDescription.h:52
TrackstersMergeProducer::seedingTrk_token_
const edm::EDGetTokenT< std::vector< TICLSeedingRegion > > seedingTrk_token_
Definition: TrackstersMergeProducer.cc:48
protons_cff.time
time
Definition: protons_cff.py:39
TrackstersMergeProducer::eidMinClusterEnergy_
const float eidMinClusterEnergy_
Definition: TrackstersMergeProducer.cc:74
TrackstersMergeProducer::eidOutputNameId_
const std::string eidOutputNameId_
Definition: TrackstersMergeProducer.cc:73
TrackstersMergeProducer::fillTile
void fillTile(TICLTracksterTiles &, const std::vector< Trackster > &, TracksterIterIndex)
Definition: TrackstersMergeProducer.cc:132
TrackstersMergeProducer::trackstersem_token_
const edm::EDGetTokenT< std::vector< Trackster > > trackstersem_token_
Definition: TrackstersMergeProducer.cc:45
TrackstersMergeProducer::track_min_eta_
const double track_min_eta_
Definition: TrackstersMergeProducer.cc:60
TrackstersMergeProducer::geometry_token_
const edm::ESGetToken< CaloGeometry, CaloGeometryRecord > geometry_token_
Definition: TrackstersMergeProducer.cc:52
TrackstersMergeProducer::pt_neutral_threshold_
const double pt_neutral_threshold_
Definition: TrackstersMergeProducer.cc:65
edm::Handle
Definition: AssociativeIterator.h:50
TrackstersMergeProducer::tracksterstrk_token_
const edm::EDGetTokenT< std::vector< Trackster > > tracksterstrk_token_
Definition: TrackstersMergeProducer.cc:46
ticl::assignPCAtoTracksters
void assignPCAtoTracksters(std::vector< Trackster > &, const std::vector< reco::CaloCluster > &, const edm::ValueMap< std::pair< float, float >> &, double, bool energyWeight=true)
Definition: TrackstersPCA.cc:12
TrackstersMergeProducer::clusters_token_
const edm::EDGetTokenT< std::vector< reco::CaloCluster > > clusters_token_
Definition: TrackstersMergeProducer.cc:49
TrackstersMergeProducer::energyRegressionAndID
void energyRegressionAndID(const std::vector< reco::CaloCluster > &layerClusters, std::vector< Trackster > &result) const
Definition: TrackstersMergeProducer.cc:542
TrackstersMergeProducer::resol_calo_scale_had_
const double resol_calo_scale_had_
Definition: TrackstersMergeProducer.cc:67
edm::FileInPath
Definition: FileInPath.h:64
TrackstersMergeProducer::eidNFeatures_
static constexpr int eidNFeatures_
Definition: TrackstersMergeProducer.cc:81
alignCSCRings.s
s
Definition: alignCSCRings.py:92
TICLCandidate::setRawEnergy
void setRawEnergy(float rawEnergy)
Definition: TICLCandidate.h:40
edm::ConfigurationDescriptions::add
void add(std::string const &label, ParameterSetDescription const &psetDescription)
Definition: ConfigurationDescriptions.cc:57
ticl::TrackstersCache
Definition: GlobalCache.h:19
TrackstersMergeProducer::rhtools_
hgcal::RecHitTools rhtools_
Definition: TrackstersMergeProducer.cc:79
reco::CaloCluster
Definition: CaloCluster.h:31
mathSSE::sqrt
T sqrt(T t)
Definition: SSEVec.h:19
TrackstersMergeProducer::tracksterstrkem_token_
const edm::EDGetTokenT< std::vector< Trackster > > tracksterstrkem_token_
Definition: TrackstersMergeProducer.cc:44
ticl::Trackster::vertex_multiplicity
std::vector< uint8_t > & vertex_multiplicity()
Definition: Trackster.h:57
TrackstersMergeProducer::e_over_h_threshold_
const double e_over_h_threshold_
Definition: TrackstersMergeProducer.cc:64
mps_fire.end
end
Definition: mps_fire.py:242
DDAxes::z
edm::ESHandle< CaloGeometry >
TrackstersMergeProducer::phi_bin_window_
const int phi_bin_window_
Definition: TrackstersMergeProducer.cc:55
TrackstersMergeProducer::pt_sigma_low_
const double pt_sigma_low_
Definition: TrackstersMergeProducer.cc:57
relativeConstraints.geom
geom
Definition: relativeConstraints.py:72
HCALHighEnergyHPDFilter_cfi.energy
energy
Definition: HCALHighEnergyHPDFilter_cfi.py:5
edm::Event::getByToken
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:535
dqmdumpme.k
k
Definition: dqmdumpme.py:60
HLTEgPhaseIITestSequence_cff.layerClusters
layerClusters
Definition: HLTEgPhaseIITestSequence_cff.py:2506
b
double b
Definition: hdecay.h:118
TrackstersMergeProducer::tracks_token_
const edm::EDGetTokenT< std::vector< reco::Track > > tracks_token_
Definition: TrackstersMergeProducer.cc:51
TrackstersMergeProducer::eidNLayers_
const int eidNLayers_
Definition: TrackstersMergeProducer.cc:75
utilities.cache
def cache(function)
Definition: utilities.py:3
AlCaHLTBitMon_QueryRunRegistry.string
string
Definition: AlCaHLTBitMon_QueryRunRegistry.py:256
TrackstersMergeProducer::eidInputName_
const std::string eidInputName_
Definition: TrackstersMergeProducer.cc:71
bphysicsOniaDQM_cfi.vertex
vertex
Definition: bphysicsOniaDQM_cfi.py:7
LogDebug
#define LogDebug(id)
Definition: MessageLogger.h:233
a
double a
Definition: hdecay.h:119
reco::CaloCluster::eta
double eta() const
pseudorapidity of cluster centroid
Definition: CaloCluster.h:181
tracks
const uint32_t *__restrict__ const HitContainer *__restrict__ TkSoA *__restrict__ tracks
Definition: CAHitNtupletGeneratorKernelsImpl.h:159
reco::CaloCluster::hitsAndFractions
const std::vector< std::pair< DetId, float > > & hitsAndFractions() const
Definition: CaloCluster.h:210
jetUpdater_cfi.sort
sort
Definition: jetUpdater_cfi.py:29
hgcal::RecHitTools::getLayerWithOffset
unsigned int getLayerWithOffset(const DetId &) const
Definition: RecHitTools.cc:352
hgcal::RecHitTools::lastLayerEE
unsigned int lastLayerEE(bool nose=false) const
Definition: RecHitTools.h:64
TrackstersMergeProducer::resol_calo_offset_em_
const double resol_calo_offset_em_
Definition: TrackstersMergeProducer.cc:68
tensorflow::NamedTensorList
std::vector< NamedTensor > NamedTensorList
Definition: TensorFlow.h:30
cand
Definition: decayParser.h:32
TrackstersMergeProducer::eidOutputNameEnergy_
const std::string eidOutputNameEnergy_
Definition: TrackstersMergeProducer.cc:72
createfilelist.int
int
Definition: createfilelist.py:10
TrackstersMergeProducer::clustersTime_token_
const edm::EDGetTokenT< edm::ValueMap< std::pair< float, float > > > clustersTime_token_
Definition: TrackstersMergeProducer.cc:50
p4
double p4[4]
Definition: TauolaWrapper.h:92
edm::Event::put
OrphanHandle< PROD > put(std::unique_ptr< PROD > product)
Put a new product.
Definition: Event.h:133
mag2
T mag2() const
The vector magnitude squared. Equivalent to vec.dot(vec)
Definition: Basic3DVectorLD.h:124
edm::EventSetup::getHandle
ESHandle< T > getHandle(const ESGetToken< T, R > &iToken) const
Definition: EventSetup.h:155
TrackstersMergeProducer::optimiseAcrossTracksters_
const bool optimiseAcrossTracksters_
Definition: TrackstersMergeProducer.cc:53
TICLCandidate
Definition: TICLCandidate.h:13
hgcal::RecHitTools::getPositionLayer
GlobalPoint getPositionLayer(int layer, bool nose=false) const
Definition: RecHitTools.cc:138
ticl::TrackstersCache::eidGraphDef
std::atomic< tensorflow::GraphDef * > eidGraphDef
Definition: GlobalCache.h:25
TrackstersMergeProducer::trackstershad_token_
const edm::EDGetTokenT< std::vector< Trackster > > trackstershad_token_
Definition: TrackstersMergeProducer.cc:47
cmsLHEtoEOSManager.l
l
Definition: cmsLHEtoEOSManager.py:204
edm::Ptr
Definition: AssociationVector.h:31
tensorflow::loadGraphDef
GraphDef * loadGraphDef(const std::string &pbFile)
Definition: TensorFlow.cc:68
reco::LeafCandidate::setP4
void setP4(const LorentzVector &p4) final
set 4-momentum
Definition: LeafCandidate.h:158
submitPVResolutionJobs.desc
string desc
Definition: submitPVResolutionJobs.py:251
TICLCandidate::addTrackster
void addTrackster(const edm::Ptr< ticl::Trackster > &trackster)
Definition: TICLCandidate.h:45
TrackstersMergeProducer::track_max_missing_outerhits_
const int track_max_missing_outerhits_
Definition: TrackstersMergeProducer.cc:62
eostools.move
def move(src, dest)
Definition: eostools.py:511
TrackstersMergeProducer::resol_calo_scale_em_
const double resol_calo_scale_em_
Definition: TrackstersMergeProducer.cc:69
hgcal::RecHitTools::setGeometry
void setGeometry(CaloGeometry const &)
Definition: RecHitTools.cc:68
math::XYZTLorentzVector
XYZTLorentzVectorD XYZTLorentzVector
Lorentz vector with cylindrical internal representation using pseudorapidity.
Definition: LorentzVector.h:29
edm::ValueMap
Definition: ValueMap.h:107
ticl::Trackster::vertices
std::vector< unsigned int > & vertices()
Definition: Trackster.h:56
Exception
Definition: hltDiff.cc:245
reco::LeafCandidate::setCharge
void setCharge(Charge q) final
set electric charge
Definition: LeafCandidate.h:108
tensorflow::run
void run(Session *session, const NamedTensorList &inputs, const std::vector< std::string > &outputNames, std::vector< Tensor > *outputs, const thread::ThreadPoolOptions &threadPoolOptions)
Definition: TensorFlow.cc:213
edm::ParameterSet::getParameter
T getParameter(std::string const &) const
Definition: ParameterSet.h:303
data
char data[epos_bytes_allocation]
Definition: EPOS_Wrapper.h:79
TrackstersMergeProducer::debug_
const bool debug_
Definition: TrackstersMergeProducer.cc:70
funct::pow
Power< A, B >::type pow(const A &a, const B &b)
Definition: Power.h:29
math::PtEtaPhiMLorentzVector
PtEtaPhiMLorentzVectorD PtEtaPhiMLorentzVector
Lorentz vector with cartesian internal representation.
Definition: LorentzVector.h:25
funct::abs
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
TrackstersMergeProducer::pt_sigma_high_
const double pt_sigma_high_
Definition: TrackstersMergeProducer.cc:56
TrackstersMergeProducer::track_max_eta_
const double track_max_eta_
Definition: TrackstersMergeProducer.cc:61
TrackstersMergeProducer::resol_calo_offset_had_
const double resol_calo_offset_had_
Definition: TrackstersMergeProducer.cc:66
dqmiolumiharvest.j
j
Definition: dqmiolumiharvest.py:66
submitPVValidationJobs.t
string t
Definition: submitPVValidationJobs.py:644
TrackstersMergeProducer::eidNClusters_
const int eidNClusters_
Definition: TrackstersMergeProducer.cc:76
reco::CaloCluster::energy
double energy() const
cluster energy
Definition: CaloCluster.h:149
TrackstersMergeProducer::cosangle_align_
const double cosangle_align_
Definition: TrackstersMergeProducer.cc:63
edm::InputTag
Definition: InputTag.h:15
label
const char * label
Definition: PFTauDecayModeTools.cc:11
edm::FileInPath::fullPath
std::string fullPath() const
Definition: FileInPath.cc:161
TrackstersMergeProducer::eidSession_
tensorflow::Session * eidSession_
Definition: TrackstersMergeProducer.cc:78
ticl::Trackster
Definition: Trackster.h:19
jets_cff.outputNames
outputNames
Definition: jets_cff.py:328
TICLGenericTile::fill
void fill(int index, double eta, double phi, unsigned int objectId)
Definition: TICLLayerTile.h:78
pwdgSkimBPark_cfi.vertices
vertices
Definition: pwdgSkimBPark_cfi.py:7
reco::TrackBase::highPurity
Definition: TrackBase.h:154