CMS 3D CMS Logo

List of all members | Public Member Functions | Private Member Functions | Private Attributes | Static Private Attributes
ticl::PatternRecognitionbyCA< TILES > Class Template Referencefinal

#include <PatternRecognitionbyCA.h>

Inheritance diagram for ticl::PatternRecognitionbyCA< TILES >:
ticl::PatternRecognitionAlgoBaseT< TILES >

Public Member Functions

void emptyTrackstersFromSeedsTRK (std::vector< Trackster > &tracksters, std::unordered_map< int, std::vector< int >> &seedToTracksterAssociation, const edm::ProductID &collectionID) const
 
void energyRegressionAndID (const std::vector< reco::CaloCluster > &layerClusters, std::vector< Trackster > &result)
 
void makeTracksters (const typename PatternRecognitionAlgoBaseT< TILES >::Inputs &input, std::vector< Trackster > &result, std::unordered_map< int, std::vector< int >> &seedToTracksterAssociation) override
 
 PatternRecognitionbyCA (const edm::ParameterSet &conf, const CacheBase *cache)
 
 ~PatternRecognitionbyCA () override
 
- Public Member Functions inherited from ticl::PatternRecognitionAlgoBaseT< TILES >
virtual void makeTracksters (const Inputs &input, std::vector< Trackster > &result, std::unordered_map< int, std::vector< int >> &seedToTracksterAssociation)=0
 
 PatternRecognitionAlgoBaseT (const edm::ParameterSet &conf, const CacheBase *cache)
 
virtual ~PatternRecognitionAlgoBaseT ()
 

Private Member Functions

void mergeTrackstersTRK (const std::vector< Trackster > &, const std::vector< reco::CaloCluster > &, std::vector< Trackster > &, std::unordered_map< int, std::vector< int >> &seedToTracksterAssociation) const
 

Private Attributes

bool check_missing_layers_ = false
 
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 double energy_em_over_total_threshold_
 
const float etaLimitIncreaseWindow_
 
const std::vector< int > filter_on_categories_
 
const float max_delta_time_
 
const double max_longitudinal_sigmaPCA_
 
const int max_missing_layers_in_trackster_
 
const unsigned int max_out_in_hops_
 
const int min_clusters_per_ntuplet_
 
const float min_cos_pointing_
 
const float min_cos_theta_
 
const unsigned int min_layers_per_trackster_
 
const bool oneTracksterPerTrackSeed_
 
const bool out_in_dfs_
 
const double pid_threshold_
 
const bool promoteEmptyRegionToTrackster_
 
hgcal::RecHitTools rhtools_
 
const float root_doublet_max_distance_from_seed_squared_
 
const unsigned int shower_start_max_layer_
 
const int skip_layers_
 
const std::unique_ptr< HGCGraphT< TILES > > theGraph_
 

Static Private Attributes

static const int eidNFeatures_ = 3
 

Additional Inherited Members

- Public Types inherited from ticl::PatternRecognitionAlgoBaseT< TILES >
enum  VerbosityLevel {
  None = 0, Basic, Advanced, Expert,
  Guru
}
 
- Protected Attributes inherited from ticl::PatternRecognitionAlgoBaseT< TILES >
int algo_verbosity_
 

Detailed Description

template<typename TILES>
class ticl::PatternRecognitionbyCA< TILES >

Definition at line 14 of file PatternRecognitionbyCA.h.

Constructor & Destructor Documentation

◆ PatternRecognitionbyCA()

template<typename TILES >
PatternRecognitionbyCA::PatternRecognitionbyCA ( const edm::ParameterSet conf,
const CacheBase cache 
)

Definition at line 19 of file PatternRecognitionbyCA.cc.

21  theGraph_(std::make_unique<HGCGraphT<TILES>>()),
22  oneTracksterPerTrackSeed_(conf.getParameter<bool>("oneTracksterPerTrackSeed")),
23  promoteEmptyRegionToTrackster_(conf.getParameter<bool>("promoteEmptyRegionToTrackster")),
24  out_in_dfs_(conf.getParameter<bool>("out_in_dfs")),
25  max_out_in_hops_(conf.getParameter<int>("max_out_in_hops")),
26  min_cos_theta_(conf.getParameter<double>("min_cos_theta")),
27  min_cos_pointing_(conf.getParameter<double>("min_cos_pointing")),
29  conf.getParameter<double>("root_doublet_max_distance_from_seed_squared")),
30  etaLimitIncreaseWindow_(conf.getParameter<double>("etaLimitIncreaseWindow")),
31  skip_layers_(conf.getParameter<int>("skip_layers")),
32  max_missing_layers_in_trackster_(conf.getParameter<int>("max_missing_layers_in_trackster")),
34  shower_start_max_layer_(conf.getParameter<int>("shower_start_max_layer")),
35  min_layers_per_trackster_(conf.getParameter<int>("min_layers_per_trackster")),
36  filter_on_categories_(conf.getParameter<std::vector<int>>("filter_on_categories")),
37  pid_threshold_(conf.getParameter<double>("pid_threshold")),
38  energy_em_over_total_threshold_(conf.getParameter<double>("energy_em_over_total_threshold")),
39  max_longitudinal_sigmaPCA_(conf.getParameter<double>("max_longitudinal_sigmaPCA")),
41  max_delta_time_(conf.getParameter<double>("max_delta_time")),
42  eidInputName_(conf.getParameter<std::string>("eid_input_name")),
43  eidOutputNameEnergy_(conf.getParameter<std::string>("eid_output_name_energy")),
44  eidOutputNameId_(conf.getParameter<std::string>("eid_output_name_id")),
45  eidMinClusterEnergy_(conf.getParameter<double>("eid_min_cluster_energy")),
46  eidNLayers_(conf.getParameter<int>("eid_n_layers")),
47  eidNClusters_(conf.getParameter<int>("eid_n_clusters")),
48  eidSession_(nullptr) {
49  // mount the tensorflow graph onto the session when set
50  const TrackstersCache *trackstersCache = dynamic_cast<const TrackstersCache *>(cache);
51  if (trackstersCache == nullptr || trackstersCache->eidGraphDef == nullptr) {
52  throw cms::Exception("MissingGraphDef")
53  << "PatternRecognitionbyCA received an empty graph definition from the global cache";
54  }
56 }

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

◆ ~PatternRecognitionbyCA()

template<typename TILES >
PatternRecognitionbyCA::~PatternRecognitionbyCA ( )
override

Definition at line 59 of file PatternRecognitionbyCA.cc.

59 {};

Member Function Documentation

◆ emptyTrackstersFromSeedsTRK()

template<typename TILES >
void PatternRecognitionbyCA::emptyTrackstersFromSeedsTRK ( std::vector< Trackster > &  tracksters,
std::unordered_map< int, std::vector< int >> &  seedToTracksterAssociation,
const edm::ProductID collectionID 
) const

Definition at line 311 of file PatternRecognitionbyCA.cc.

314  {
315  for (auto &thisSeed : seedToTracksterAssociation) {
316  if (thisSeed.second.empty()) {
317  Trackster t;
318  t.setRegressedEnergy(0.f);
319  t.zeroProbabilities();
321  t.setSeed(collectionID, thisSeed.first);
322  tracksters.emplace_back(t);
323  thisSeed.second.emplace_back(tracksters.size() - 1);
324  }
325  }
326 }

References ticl::Trackster::charged_hadron, f, and submitPVValidationJobs::t.

◆ energyRegressionAndID()

template<typename TILES >
void PatternRecognitionbyCA::energyRegressionAndID ( const std::vector< reco::CaloCluster > &  layerClusters,
std::vector< Trackster > &  result 
)

Definition at line 329 of file PatternRecognitionbyCA.cc.

330  {
331  // Energy regression and particle identification strategy:
332  //
333  // 1. Set default values for regressed energy and particle id for each trackster.
334  // 2. Store indices of tracksters whose total sum of cluster energies is above the
335  // eidMinClusterEnergy_ (GeV) treshold. Inference is not applied for soft tracksters.
336  // 3. When no trackster passes the selection, return.
337  // 4. Create input and output tensors. The batch dimension is determined by the number of
338  // selected tracksters.
339  // 5. Fill input tensors with layer cluster features. Per layer, clusters are ordered descending
340  // by energy. Given that tensor data is contiguous in memory, we can use pointer arithmetic to
341  // fill values, even with batching.
342  // 6. Zero-fill features for empty clusters in each layer.
343  // 7. Batched inference.
344  // 8. Assign the regressed energy and id probabilities to each trackster.
345  //
346  // Indices used throughout this method:
347  // i -> batch element / trackster
348  // j -> layer
349  // k -> cluster
350  // l -> feature
351 
352  // set default values per trackster, determine if the cluster energy threshold is passed,
353  // and store indices of hard tracksters
354  std::vector<int> tracksterIndices;
355  for (int i = 0; i < (int)tracksters.size(); i++) {
356  // calculate the cluster energy sum (2)
357  // note: after the loop, sumClusterEnergy might be just above the threshold which is enough to
358  // decide whether to run inference for the trackster or not
359  float sumClusterEnergy = 0.;
360  for (const unsigned int &vertex : tracksters[i].vertices()) {
361  sumClusterEnergy += (float)layerClusters[vertex].energy();
362  // there might be many clusters, so try to stop early
363  if (sumClusterEnergy >= eidMinClusterEnergy_) {
364  // set default values (1)
365  tracksters[i].setRegressedEnergy(0.f);
366  tracksters[i].zeroProbabilities();
367  tracksterIndices.push_back(i);
368  break;
369  }
370  }
371  }
372 
373  // do nothing when no trackster passes the selection (3)
374  int batchSize = (int)tracksterIndices.size();
375  if (batchSize == 0) {
376  return;
377  }
378 
379  // create input and output tensors (4)
380  tensorflow::TensorShape shape({batchSize, eidNLayers_, eidNClusters_, eidNFeatures_});
381  tensorflow::Tensor input(tensorflow::DT_FLOAT, shape);
383 
384  std::vector<tensorflow::Tensor> outputs;
385  std::vector<std::string> outputNames;
386  if (!eidOutputNameEnergy_.empty()) {
388  }
389  if (!eidOutputNameId_.empty()) {
390  outputNames.push_back(eidOutputNameId_);
391  }
392 
393  // fill input tensor (5)
394  for (int i = 0; i < batchSize; i++) {
395  const Trackster &trackster = tracksters[tracksterIndices[i]];
396 
397  // per layer, we only consider the first eidNClusters_ clusters in terms of energy, so in order
398  // to avoid creating large / nested structures to do the sorting for an unknown number of total
399  // clusters, create a sorted list of layer cluster indices to keep track of the filled clusters
400  std::vector<int> clusterIndices(trackster.vertices().size());
401  for (int k = 0; k < (int)trackster.vertices().size(); k++) {
402  clusterIndices[k] = k;
403  }
404  sort(clusterIndices.begin(), clusterIndices.end(), [&layerClusters, &trackster](const int &a, const int &b) {
405  return layerClusters[trackster.vertices(a)].energy() > layerClusters[trackster.vertices(b)].energy();
406  });
407 
408  // keep track of the number of seen clusters per layer
409  std::vector<int> seenClusters(eidNLayers_);
410 
411  // loop through clusters by descending energy
412  for (const int &k : clusterIndices) {
413  // get features per layer and cluster and store the values directly in the input tensor
414  const reco::CaloCluster &cluster = layerClusters[trackster.vertices(k)];
415  int j = rhtools_.getLayerWithOffset(cluster.hitsAndFractions()[0].first) - 1;
416  if (j < eidNLayers_ && seenClusters[j] < eidNClusters_) {
417  // get the pointer to the first feature value for the current batch, layer and cluster
418  float *features = &input.tensor<float, 4>()(i, j, seenClusters[j], 0);
419 
420  // fill features
421  *(features++) = float(cluster.energy() / float(trackster.vertex_multiplicity(k)));
422  *(features++) = float(std::abs(cluster.eta()));
423  *(features) = float(cluster.phi());
424 
425  // increment seen clusters
426  seenClusters[j]++;
427  }
428  }
429 
430  // zero-fill features of empty clusters in each layer (6)
431  for (int j = 0; j < eidNLayers_; j++) {
432  for (int k = seenClusters[j]; k < eidNClusters_; k++) {
433  float *features = &input.tensor<float, 4>()(i, j, k, 0);
434  for (int l = 0; l < eidNFeatures_; l++) {
435  *(features++) = 0.f;
436  }
437  }
438  }
439  }
440 
441  // run the inference (7)
443 
444  // store regressed energy per trackster (8)
445  if (!eidOutputNameEnergy_.empty()) {
446  // get the pointer to the energy tensor, dimension is batch x 1
447  float *energy = outputs[0].flat<float>().data();
448 
449  for (const int &i : tracksterIndices) {
450  tracksters[i].setRegressedEnergy(*(energy++));
451  }
452  }
453 
454  // store id probabilities per trackster (8)
455  if (!eidOutputNameId_.empty()) {
456  // get the pointer to the id probability tensor, dimension is batch x id_probabilities.size()
457  int probsIdx = eidOutputNameEnergy_.empty() ? 0 : 1;
458  float *probs = outputs[probsIdx].flat<float>().data();
459 
460  for (const int &i : tracksterIndices) {
461  tracksters[i].setProbabilities(probs);
462  probs += tracksters[i].id_probabilities().size();
463  }
464  }
465 }

References a, funct::abs(), b, data, HCALHighEnergyHPDFilter_cfi::energy, reco::CaloCluster::energy(), reco::CaloCluster::eta(), f, postprocess-scan-build::features, dqmMemoryStats::float, 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(), tensorflow::run(), bphysicsOniaDQM_cfi::vertex, ticl::Trackster::vertex_multiplicity(), pwdgSkimBPark_cfi::vertices, and ticl::Trackster::vertices().

◆ makeTracksters()

template<typename TILES >
void PatternRecognitionbyCA::makeTracksters ( const typename PatternRecognitionAlgoBaseT< TILES >::Inputs input,
std::vector< Trackster > &  result,
std::unordered_map< int, std::vector< int >> &  seedToTracksterAssociation 
)
override

Definition at line 62 of file PatternRecognitionbyCA.cc.

65  {
66  // Protect from events with no seeding regions
67  if (input.regions.empty())
68  return;
69 
71  edm::EventSetup const &es = input.es;
74 
76  theGraph_->clear();
78  LogDebug("HGCPatternRecoByCA") << "Making Tracksters with CA" << std::endl;
79  }
80 
81  int type = input.tiles[0].typeT();
84 
85  bool isRegionalIter = (input.regions[0].index != -1);
86  std::vector<HGCDoublet::HGCntuplet> foundNtuplets;
87  std::vector<int> seedIndices;
88  std::vector<uint8_t> layer_cluster_usage(input.layerClusters.size(), 0);
89  theGraph_->makeAndConnectDoublets(input.tiles,
90  input.regions,
91  nEtaBin,
92  nPhiBin,
93  input.layerClusters,
94  input.mask,
95  input.layerClustersTime,
96  1,
97  1,
102  skip_layers_,
105 
106  theGraph_->findNtuplets(foundNtuplets, seedIndices, min_clusters_per_ntuplet_, out_in_dfs_, max_out_in_hops_);
107  //#ifdef FP_DEBUG
108  const auto &doublets = theGraph_->getAllDoublets();
109  int tracksterId = -1;
110 
111  // container for holding tracksters before selection
112  std::vector<Trackster> tmpTracksters;
113  tmpTracksters.reserve(foundNtuplets.size());
114 
115  for (auto const &ntuplet : foundNtuplets) {
116  tracksterId++;
117 
118  std::set<unsigned int> effective_cluster_idx;
119 
120  for (auto const &doublet : ntuplet) {
121  auto innerCluster = doublets[doublet].innerClusterId();
122  auto outerCluster = doublets[doublet].outerClusterId();
123 
124  effective_cluster_idx.insert(innerCluster);
125  effective_cluster_idx.insert(outerCluster);
126 
128  LogDebug("HGCPatternRecoByCA") << " New doublet " << doublet << " for trackster: " << result.size()
129  << " InnerCl " << innerCluster << " " << input.layerClusters[innerCluster].x()
130  << " " << input.layerClusters[innerCluster].y() << " "
131  << input.layerClusters[innerCluster].z() << " OuterCl " << outerCluster << " "
132  << input.layerClusters[outerCluster].x() << " "
133  << input.layerClusters[outerCluster].y() << " "
134  << input.layerClusters[outerCluster].z() << " " << tracksterId << std::endl;
135  }
136  }
137  unsigned showerMinLayerId = 99999;
138  std::vector<unsigned int> uniqueLayerIds;
139  uniqueLayerIds.reserve(effective_cluster_idx.size());
140  std::vector<std::pair<unsigned int, unsigned int>> lcIdAndLayer;
141  lcIdAndLayer.reserve(effective_cluster_idx.size());
142  for (auto const i : effective_cluster_idx) {
143  auto const &haf = input.layerClusters[i].hitsAndFractions();
144  auto layerId = rhtools_.getLayerWithOffset(haf[0].first);
145  showerMinLayerId = std::min(layerId, showerMinLayerId);
146  uniqueLayerIds.push_back(layerId);
147  lcIdAndLayer.emplace_back(i, layerId);
148  }
149  std::sort(uniqueLayerIds.begin(), uniqueLayerIds.end());
150  uniqueLayerIds.erase(std::unique(uniqueLayerIds.begin(), uniqueLayerIds.end()), uniqueLayerIds.end());
151  unsigned int numberOfLayersInTrackster = uniqueLayerIds.size();
152  if (check_missing_layers_) {
153  int numberOfMissingLayers = 0;
154  unsigned int j = showerMinLayerId;
155  unsigned int indexInVec = 0;
156  for (const auto &layer : uniqueLayerIds) {
157  if (layer != j) {
158  numberOfMissingLayers++;
159  j++;
160  if (numberOfMissingLayers > max_missing_layers_in_trackster_) {
161  numberOfLayersInTrackster = indexInVec;
162  for (auto &llpair : lcIdAndLayer) {
163  if (llpair.second >= layer) {
164  effective_cluster_idx.erase(llpair.first);
165  }
166  }
167  break;
168  }
169  }
170  indexInVec++;
171  j++;
172  }
173  }
174 
175  if ((numberOfLayersInTrackster >= min_layers_per_trackster_) and (showerMinLayerId <= shower_start_max_layer_)) {
176  // Put back indices, in the form of a Trackster, into the results vector
177  Trackster tmp;
178  tmp.vertices().reserve(effective_cluster_idx.size());
179  tmp.vertex_multiplicity().resize(effective_cluster_idx.size(), 1);
180  //regions and seedIndices can have different size
181  //if a seeding region does not lead to any trackster
182  tmp.setSeed(input.regions[0].collectionID, seedIndices[tracksterId]);
183 
184  std::copy(std::begin(effective_cluster_idx), std::end(effective_cluster_idx), std::back_inserter(tmp.vertices()));
185  tmpTracksters.push_back(tmp);
186  }
187  }
188  ticl::assignPCAtoTracksters(tmpTracksters,
189  input.layerClusters,
190  input.layerClustersTime,
192 
193  // run energy regression and ID
194  energyRegressionAndID(input.layerClusters, tmpTracksters);
195  // Filter results based on PID criteria or EM/Total energy ratio.
196  // We want to **keep** tracksters whose cumulative
197  // probability summed up over the selected categories
198  // is greater than the chosen threshold. Therefore
199  // the filtering function should **discard** all
200  // tracksters **below** the threshold.
201  auto filter_on_pids = [&](Trackster &t) -> bool {
202  auto cumulative_prob = 0.;
203  for (auto index : filter_on_categories_) {
204  cumulative_prob += t.id_probabilities(index);
205  }
206  return (cumulative_prob <= pid_threshold_) &&
207  (t.raw_em_energy() < energy_em_over_total_threshold_ * t.raw_energy());
208  };
209 
210  std::vector<unsigned int> selectedTrackstersIds;
211  for (unsigned i = 0; i < tmpTracksters.size(); ++i) {
212  if (!filter_on_pids(tmpTracksters[i]) and tmpTracksters[i].sigmasPCA()[0] < max_longitudinal_sigmaPCA_) {
213  selectedTrackstersIds.push_back(i);
214  }
215  }
216 
217  result.reserve(selectedTrackstersIds.size());
218 
219  for (unsigned i = 0; i < selectedTrackstersIds.size(); ++i) {
220  const auto &t = tmpTracksters[selectedTrackstersIds[i]];
221  for (auto const lcId : t.vertices()) {
222  layer_cluster_usage[lcId]++;
224  LogDebug("HGCPatternRecoByCA") << "LayerID: " << lcId << " count: " << (int)layer_cluster_usage[lcId]
225  << std::endl;
226  }
227  if (isRegionalIter) {
228  seedToTracksterAssociation[t.seedIndex()].push_back(i);
229  }
230  result.push_back(t);
231  }
232 
233  for (auto &trackster : result) {
234  assert(trackster.vertices().size() <= trackster.vertex_multiplicity().size());
235  for (size_t i = 0; i < trackster.vertices().size(); ++i) {
236  trackster.vertex_multiplicity()[i] = layer_cluster_usage[trackster.vertices(i)];
238  LogDebug("HGCPatternRecoByCA") << "LayerID: " << trackster.vertices(i)
239  << " count: " << (int)trackster.vertex_multiplicity(i) << std::endl;
240  }
241  }
242  // Now decide if the tracksters from the track-based iterations have to be merged
244  std::vector<Trackster> tmp;
245  mergeTrackstersTRK(result, input.layerClusters, tmp, seedToTracksterAssociation);
246  tmp.swap(result);
247  }
248 
250  result, input.layerClusters, input.layerClustersTime, rhtools_.getPositionLayer(rhtools_.lastLayerEE(type)).z());
251 
252  // run energy regression and ID
253  energyRegressionAndID(input.layerClusters, result);
254 
255  // now adding dummy tracksters from seeds not connected to any shower in the result collection
256  // these are marked as charged hadrons with probability 1.
258  emptyTrackstersFromSeedsTRK(result, seedToTracksterAssociation, input.regions[0].collectionID);
259  }
260 
262  for (auto &trackster : result) {
263  LogDebug("HGCPatternRecoByCA") << "Trackster characteristics: " << std::endl;
264  LogDebug("HGCPatternRecoByCA") << "Size: " << trackster.vertices().size() << std::endl;
265  auto counter = 0;
266  for (auto const &p : trackster.id_probabilities()) {
267  LogDebug("HGCPatternRecoByCA") << counter++ << ": " << p << std::endl;
268  }
269  }
270  }
271  theGraph_->clear();
272 }

References cms::cuda::assert(), ticl::assignPCAtoTracksters(), filterCSVwithJSON::copy, HLT_FULL_cff::doublets, mps_fire::end, dqmdumpme::first, relativeConstraints::geom, edm::EventSetup::get(), get, mps_fire::i, input, createfilelist::int, dqmiolumiharvest::j, LogDebug, min(), ticl::TileConstants::nEtaBins, ticl::TileConstantsHFNose::nEtaBins, ticl::TileConstants::nPhiBins, ticl::TileConstantsHFNose::nPhiBins, AlCaHLTBitMon_ParallelJobs::p, mps_fire::result, submitPVValidationJobs::t, createJobs::tmp, and tier0::unique().

◆ mergeTrackstersTRK()

template<typename TILES >
void PatternRecognitionbyCA::mergeTrackstersTRK ( const std::vector< Trackster > &  input,
const std::vector< reco::CaloCluster > &  layerClusters,
std::vector< Trackster > &  output,
std::unordered_map< int, std::vector< int >> &  seedToTracksterAssociation 
) const
private

Definition at line 275 of file PatternRecognitionbyCA.cc.

279  {
280  output.reserve(input.size());
281  for (auto &thisSeed : seedToTracksterAssociation) {
282  auto &tracksters = thisSeed.second;
283  if (!tracksters.empty()) {
284  auto numberOfTrackstersInSeed = tracksters.size();
285  output.emplace_back(input[tracksters[0]]);
286  auto &outTrackster = output.back();
287  tracksters[0] = output.size() - 1;
288  auto updated_size = outTrackster.vertices().size();
289  for (unsigned int j = 1; j < numberOfTrackstersInSeed; ++j) {
290  auto &thisTrackster = input[tracksters[j]];
291  updated_size += thisTrackster.vertices().size();
293  LogDebug("HGCPatternRecoByCA") << "Updated size: " << updated_size << std::endl;
294  }
295  outTrackster.vertices().reserve(updated_size);
296  outTrackster.vertex_multiplicity().reserve(updated_size);
297  std::copy(std::begin(thisTrackster.vertices()),
298  std::end(thisTrackster.vertices()),
299  std::back_inserter(outTrackster.vertices()));
300  std::copy(std::begin(thisTrackster.vertex_multiplicity()),
301  std::end(thisTrackster.vertex_multiplicity()),
302  std::back_inserter(outTrackster.vertex_multiplicity()));
303  }
304  tracksters.resize(1);
305  }
306  }
307  output.shrink_to_fit();
308 }

References filterCSVwithJSON::copy, mps_fire::end, input, dqmiolumiharvest::j, LogDebug, and convertSQLitetoXML_cfg::output.

Member Data Documentation

◆ check_missing_layers_

template<typename TILES >
bool ticl::PatternRecognitionbyCA< TILES >::check_missing_layers_ = false
private

Definition at line 44 of file PatternRecognitionbyCA.h.

◆ eidInputName_

template<typename TILES >
const std::string ticl::PatternRecognitionbyCA< TILES >::eidInputName_
private

Definition at line 53 of file PatternRecognitionbyCA.h.

◆ eidMinClusterEnergy_

template<typename TILES >
const float ticl::PatternRecognitionbyCA< TILES >::eidMinClusterEnergy_
private

Definition at line 56 of file PatternRecognitionbyCA.h.

◆ eidNClusters_

template<typename TILES >
const int ticl::PatternRecognitionbyCA< TILES >::eidNClusters_
private

Definition at line 58 of file PatternRecognitionbyCA.h.

◆ eidNFeatures_

template<typename TILES >
const int ticl::PatternRecognitionbyCA< TILES >::eidNFeatures_ = 3
staticprivate

Definition at line 63 of file PatternRecognitionbyCA.h.

◆ eidNLayers_

template<typename TILES >
const int ticl::PatternRecognitionbyCA< TILES >::eidNLayers_
private

Definition at line 57 of file PatternRecognitionbyCA.h.

◆ eidOutputNameEnergy_

template<typename TILES >
const std::string ticl::PatternRecognitionbyCA< TILES >::eidOutputNameEnergy_
private

Definition at line 54 of file PatternRecognitionbyCA.h.

◆ eidOutputNameId_

template<typename TILES >
const std::string ticl::PatternRecognitionbyCA< TILES >::eidOutputNameId_
private

Definition at line 55 of file PatternRecognitionbyCA.h.

◆ eidSession_

template<typename TILES >
tensorflow::Session* ticl::PatternRecognitionbyCA< TILES >::eidSession_
private

◆ energy_em_over_total_threshold_

template<typename TILES >
const double ticl::PatternRecognitionbyCA< TILES >::energy_em_over_total_threshold_
private

Definition at line 49 of file PatternRecognitionbyCA.h.

◆ etaLimitIncreaseWindow_

template<typename TILES >
const float ticl::PatternRecognitionbyCA< TILES >::etaLimitIncreaseWindow_
private

Definition at line 41 of file PatternRecognitionbyCA.h.

◆ filter_on_categories_

template<typename TILES >
const std::vector<int> ticl::PatternRecognitionbyCA< TILES >::filter_on_categories_
private

Definition at line 47 of file PatternRecognitionbyCA.h.

◆ max_delta_time_

template<typename TILES >
const float ticl::PatternRecognitionbyCA< TILES >::max_delta_time_
private

Definition at line 52 of file PatternRecognitionbyCA.h.

◆ max_longitudinal_sigmaPCA_

template<typename TILES >
const double ticl::PatternRecognitionbyCA< TILES >::max_longitudinal_sigmaPCA_
private

Definition at line 50 of file PatternRecognitionbyCA.h.

◆ max_missing_layers_in_trackster_

template<typename TILES >
const int ticl::PatternRecognitionbyCA< TILES >::max_missing_layers_in_trackster_
private

Definition at line 43 of file PatternRecognitionbyCA.h.

◆ max_out_in_hops_

template<typename TILES >
const unsigned int ticl::PatternRecognitionbyCA< TILES >::max_out_in_hops_
private

Definition at line 37 of file PatternRecognitionbyCA.h.

◆ min_clusters_per_ntuplet_

template<typename TILES >
const int ticl::PatternRecognitionbyCA< TILES >::min_clusters_per_ntuplet_
private

Definition at line 51 of file PatternRecognitionbyCA.h.

◆ min_cos_pointing_

template<typename TILES >
const float ticl::PatternRecognitionbyCA< TILES >::min_cos_pointing_
private

Definition at line 39 of file PatternRecognitionbyCA.h.

◆ min_cos_theta_

template<typename TILES >
const float ticl::PatternRecognitionbyCA< TILES >::min_cos_theta_
private

Definition at line 38 of file PatternRecognitionbyCA.h.

◆ min_layers_per_trackster_

template<typename TILES >
const unsigned int ticl::PatternRecognitionbyCA< TILES >::min_layers_per_trackster_
private

Definition at line 46 of file PatternRecognitionbyCA.h.

◆ oneTracksterPerTrackSeed_

template<typename TILES >
const bool ticl::PatternRecognitionbyCA< TILES >::oneTracksterPerTrackSeed_
private

Definition at line 34 of file PatternRecognitionbyCA.h.

◆ out_in_dfs_

template<typename TILES >
const bool ticl::PatternRecognitionbyCA< TILES >::out_in_dfs_
private

Definition at line 36 of file PatternRecognitionbyCA.h.

◆ pid_threshold_

template<typename TILES >
const double ticl::PatternRecognitionbyCA< TILES >::pid_threshold_
private

Definition at line 48 of file PatternRecognitionbyCA.h.

◆ promoteEmptyRegionToTrackster_

template<typename TILES >
const bool ticl::PatternRecognitionbyCA< TILES >::promoteEmptyRegionToTrackster_
private

Definition at line 35 of file PatternRecognitionbyCA.h.

◆ rhtools_

template<typename TILES >
hgcal::RecHitTools ticl::PatternRecognitionbyCA< TILES >::rhtools_
private

Definition at line 60 of file PatternRecognitionbyCA.h.

◆ root_doublet_max_distance_from_seed_squared_

template<typename TILES >
const float ticl::PatternRecognitionbyCA< TILES >::root_doublet_max_distance_from_seed_squared_
private

Definition at line 40 of file PatternRecognitionbyCA.h.

◆ shower_start_max_layer_

template<typename TILES >
const unsigned int ticl::PatternRecognitionbyCA< TILES >::shower_start_max_layer_
private

Definition at line 45 of file PatternRecognitionbyCA.h.

◆ skip_layers_

template<typename TILES >
const int ticl::PatternRecognitionbyCA< TILES >::skip_layers_
private

Definition at line 42 of file PatternRecognitionbyCA.h.

◆ theGraph_

template<typename TILES >
const std::unique_ptr<HGCGraphT<TILES> > ticl::PatternRecognitionbyCA< TILES >::theGraph_
private

Definition at line 33 of file PatternRecognitionbyCA.h.

reco::CaloCluster::phi
double phi() const
azimuthal angle of cluster centroid
Definition: CaloCluster.h:184
tensorflow::createSession
Session * createSession(SessionOptions &sessionOptions)
Definition: TensorFlow.cc:85
counter
Definition: counter.py:1
ticl::TileConstantsHFNose::nEtaBins
static constexpr int nEtaBins
Definition: Common.h:23
ticl::PatternRecognitionbyCA::eidOutputNameEnergy_
const std::string eidOutputNameEnergy_
Definition: PatternRecognitionbyCA.h:54
mps_fire.i
i
Definition: mps_fire.py:428
ticl::TileConstants::nEtaBins
static constexpr int nEtaBins
Definition: Common.h:12
input
static const std::string input
Definition: EdmProvDump.cc:48
dqmMemoryStats.float
float
Definition: dqmMemoryStats.py:127
ticl::PatternRecognitionbyCA::shower_start_max_layer_
const unsigned int shower_start_max_layer_
Definition: PatternRecognitionbyCA.h:45
ticl::PatternRecognitionbyCA::rhtools_
hgcal::RecHitTools rhtools_
Definition: PatternRecognitionbyCA.h:60
ticl::PatternRecognitionbyCA::oneTracksterPerTrackSeed_
const bool oneTracksterPerTrackSeed_
Definition: PatternRecognitionbyCA.h:34
filterCSVwithJSON.copy
copy
Definition: filterCSVwithJSON.py:36
f
double f[11][100]
Definition: MuScleFitUtils.cc:78
detailsBasic3DVector::z
float float float z
Definition: extBasic3DVector.h:14
convertSQLitetoXML_cfg.output
output
Definition: convertSQLitetoXML_cfg.py:72
ticl::TileConstantsHFNose::nPhiBins
static constexpr int nPhiBins
Definition: Common.h:24
min
T min(T a, T b)
Definition: MathUtil.h:58
ticl::PatternRecognitionbyCA::skip_layers_
const int skip_layers_
Definition: PatternRecognitionbyCA.h:42
ticl::PatternRecognitionbyCA::eidNLayers_
const int eidNLayers_
Definition: PatternRecognitionbyCA.h:57
postprocess-scan-build.features
features
Definition: postprocess-scan-build.py:8
CaloGeometryRecord
Definition: CaloGeometryRecord.h:30
ticl::Trackster::ParticleType::charged_hadron
AlCaHLTBitMon_ParallelJobs.p
p
Definition: AlCaHLTBitMon_ParallelJobs.py:153
PatBasicFWLiteJetAnalyzer_Selector_cfg.outputs
outputs
Definition: PatBasicFWLiteJetAnalyzer_Selector_cfg.py:48
cms::cuda::assert
assert(be >=bs)
ticl::PatternRecognitionbyCA::max_out_in_hops_
const unsigned int max_out_in_hops_
Definition: PatternRecognitionbyCA.h:37
ticl::PatternRecognitionbyCA::max_longitudinal_sigmaPCA_
const double max_longitudinal_sigmaPCA_
Definition: PatternRecognitionbyCA.h:50
ticl::PatternRecognitionbyCA::max_missing_layers_in_trackster_
const int max_missing_layers_in_trackster_
Definition: PatternRecognitionbyCA.h:43
ticl::TileConstants::nPhiBins
static constexpr int nPhiBins
Definition: Common.h:13
HLT_FULL_cff.doublets
doublets
Definition: HLT_FULL_cff.py:9931
createJobs.tmp
tmp
align.sh
Definition: createJobs.py:716
dqmdumpme.first
first
Definition: dqmdumpme.py:55
ticl::PatternRecognitionbyCA::out_in_dfs_
const bool out_in_dfs_
Definition: PatternRecognitionbyCA.h:36
ticl::PatternRecognitionbyCA::filter_on_categories_
const std::vector< int > filter_on_categories_
Definition: PatternRecognitionbyCA.h:47
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
ticl::PatternRecognitionAlgoBaseT
Definition: PatternRecognitionAlgoBase.h:24
edm::EventSetup::get
T get() const
Definition: EventSetup.h:80
ticl::PatternRecognitionbyCA::eidSession_
tensorflow::Session * eidSession_
Definition: PatternRecognitionbyCA.h:61
ticl::TrackstersCache
Definition: GlobalCache.h:19
reco::CaloCluster
Definition: CaloCluster.h:31
ticl::Trackster::vertex_multiplicity
std::vector< uint8_t > & vertex_multiplicity()
Definition: Trackster.h:54
mps_fire.end
end
Definition: mps_fire.py:242
edm::ESHandle< CaloGeometry >
relativeConstraints.geom
geom
Definition: relativeConstraints.py:72
HCALHighEnergyHPDFilter_cfi.energy
energy
Definition: HCALHighEnergyHPDFilter_cfi.py:5
ticl::PatternRecognitionbyCA::theGraph_
const std::unique_ptr< HGCGraphT< TILES > > theGraph_
Definition: PatternRecognitionbyCA.h:33
ticl::PatternRecognitionbyCA::min_cos_pointing_
const float min_cos_pointing_
Definition: PatternRecognitionbyCA.h:39
dqmdumpme.k
k
Definition: dqmdumpme.py:60
HLTEgPhaseIITestSequence_cff.layerClusters
layerClusters
Definition: HLTEgPhaseIITestSequence_cff.py:2506
ticl::PatternRecognitionbyCA::emptyTrackstersFromSeedsTRK
void emptyTrackstersFromSeedsTRK(std::vector< Trackster > &tracksters, std::unordered_map< int, std::vector< int >> &seedToTracksterAssociation, const edm::ProductID &collectionID) const
Definition: PatternRecognitionbyCA.cc:311
b
double b
Definition: hdecay.h:118
utilities.cache
def cache(function)
Definition: utilities.py:3
AlCaHLTBitMon_QueryRunRegistry.string
string
Definition: AlCaHLTBitMon_QueryRunRegistry.py:256
ticl::PatternRecognitionbyCA::min_clusters_per_ntuplet_
const int min_clusters_per_ntuplet_
Definition: PatternRecognitionbyCA.h:51
bphysicsOniaDQM_cfi.vertex
vertex
Definition: bphysicsOniaDQM_cfi.py:7
LogDebug
#define LogDebug(id)
Definition: MessageLogger.h:223
a
double a
Definition: hdecay.h:119
reco::CaloCluster::eta
double eta() const
pseudorapidity of cluster centroid
Definition: CaloCluster.h:181
ticl::PatternRecognitionbyCA::check_missing_layers_
bool check_missing_layers_
Definition: PatternRecognitionbyCA.h:44
reco::CaloCluster::hitsAndFractions
const std::vector< std::pair< DetId, float > > & hitsAndFractions() const
Definition: CaloCluster.h:210
type
type
Definition: SiPixelVCal_PayloadInspector.cc:37
ticl::PatternRecognitionbyCA::eidOutputNameId_
const std::string eidOutputNameId_
Definition: PatternRecognitionbyCA.h:55
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
tensorflow::NamedTensorList
std::vector< NamedTensor > NamedTensorList
Definition: TensorFlow.h:30
createfilelist.int
int
Definition: createfilelist.py:10
ticl::PatternRecognitionbyCA::etaLimitIncreaseWindow_
const float etaLimitIncreaseWindow_
Definition: PatternRecognitionbyCA.h:41
edm::EventSetup
Definition: EventSetup.h:57
ticl::PatternRecognitionbyCA::root_doublet_max_distance_from_seed_squared_
const float root_doublet_max_distance_from_seed_squared_
Definition: PatternRecognitionbyCA.h:40
hgcal::RecHitTools::getPositionLayer
GlobalPoint getPositionLayer(int layer, bool nose=false) const
Definition: RecHitTools.cc:138
get
#define get
ticl::TrackstersCache::eidGraphDef
std::atomic< tensorflow::GraphDef * > eidGraphDef
Definition: GlobalCache.h:25
hgcal::RecHitTools::lastLayer
unsigned int lastLayer(bool nose=false) const
Definition: RecHitTools.h:68
cmsLHEtoEOSManager.l
l
Definition: cmsLHEtoEOSManager.py:204
ticl::PatternRecognitionbyCA::eidNFeatures_
static const int eidNFeatures_
Definition: PatternRecognitionbyCA.h:63
tier0.unique
def unique(seq, keepstr=True)
Definition: tier0.py:24
hgcal::RecHitTools::setGeometry
void setGeometry(CaloGeometry const &)
Definition: RecHitTools.cc:68
ticl::Trackster::vertices
std::vector< unsigned int > & vertices()
Definition: Trackster.h:53
Exception
Definition: hltDiff.cc:246
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:211
ticl::PatternRecognitionbyCA::min_layers_per_trackster_
const unsigned int min_layers_per_trackster_
Definition: PatternRecognitionbyCA.h:46
edm::ParameterSet::getParameter
T getParameter(std::string const &) const
Definition: ParameterSet.h:303
ticl::PatternRecognitionbyCA::min_cos_theta_
const float min_cos_theta_
Definition: PatternRecognitionbyCA.h:38
ticl::PatternRecognitionbyCA::energy_em_over_total_threshold_
const double energy_em_over_total_threshold_
Definition: PatternRecognitionbyCA.h:49
ticl::PatternRecognitionbyCA::promoteEmptyRegionToTrackster_
const bool promoteEmptyRegionToTrackster_
Definition: PatternRecognitionbyCA.h:35
data
char data[epos_bytes_allocation]
Definition: EPOS_Wrapper.h:79
AlignmentPI::index
index
Definition: AlignmentPayloadInspectorHelper.h:46
ticl::PatternRecognitionbyCA::energyRegressionAndID
void energyRegressionAndID(const std::vector< reco::CaloCluster > &layerClusters, std::vector< Trackster > &result)
Definition: PatternRecognitionbyCA.cc:329
HGCGraphT
Definition: HGCGraph.h:15
mps_fire.result
result
Definition: mps_fire.py:311
funct::abs
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
ticl::PatternRecognitionbyCA::eidInputName_
const std::string eidInputName_
Definition: PatternRecognitionbyCA.h:53
ticl::PatternRecognitionbyCA::pid_threshold_
const double pid_threshold_
Definition: PatternRecognitionbyCA.h:48
dqmiolumiharvest.j
j
Definition: dqmiolumiharvest.py:66
ticl::PatternRecognitionbyCA::eidNClusters_
const int eidNClusters_
Definition: PatternRecognitionbyCA.h:58
ticl::PatternRecognitionbyCA::mergeTrackstersTRK
void mergeTrackstersTRK(const std::vector< Trackster > &, const std::vector< reco::CaloCluster > &, std::vector< Trackster > &, std::unordered_map< int, std::vector< int >> &seedToTracksterAssociation) const
Definition: PatternRecognitionbyCA.cc:275
submitPVValidationJobs.t
string t
Definition: submitPVValidationJobs.py:644
reco::CaloCluster::energy
double energy() const
cluster energy
Definition: CaloCluster.h:149
ticl::PatternRecognitionbyCA::max_delta_time_
const float max_delta_time_
Definition: PatternRecognitionbyCA.h:52
ticl::Trackster
Definition: Trackster.h:19
jets_cff.outputNames
outputNames
Definition: jets_cff.py:323
pwdgSkimBPark_cfi.vertices
vertices
Definition: pwdgSkimBPark_cfi.py:7
ticl::PatternRecognitionbyCA::eidMinClusterEnergy_
const float eidMinClusterEnergy_
Definition: PatternRecognitionbyCA.h:56