CMS 3D CMS Logo

TICLCandidateProducer.cc
Go to the documentation of this file.
1 // Author: Felice Pantaleo, Wahid Redjeb, Aurora Perego (CERN) - felice.pantaleo@cern.ch, wahid.redjeb@cern.ch, aurora.perego@cern.ch
2 // Date: 12/2023
3 #include <memory> // unique_ptr
17 
30 
34 
36 
39 
47 
50 
54 
55 #include "TrackstersPCA.h"
56 
57 using namespace ticl;
58 
60 public:
61  explicit TICLCandidateProducer(const edm::ParameterSet &ps);
62  ~TICLCandidateProducer() override{};
63  void produce(edm::Event &, const edm::EventSetup &) override;
64  static void fillDescriptions(edm::ConfigurationDescriptions &descriptions);
65 
66  void beginRun(edm::Run const &iEvent, edm::EventSetup const &es) override;
67 
68 private:
69  void dumpCandidate(const TICLCandidate &) const;
70 
71  template <typename F>
72  void assignTimeToCandidates(std::vector<TICLCandidate> &resultCandidates,
73  edm::Handle<std::vector<reco::Track>> track_h,
74  edm::Handle<MtdHostCollection> inputTiming_h,
76  F func) const;
77 
78  std::unique_ptr<TICLInterpretationAlgoBase<reco::Track>> generalInterpretationAlgo_;
79  std::vector<edm::EDGetTokenT<std::vector<Trackster>>> egamma_tracksters_tokens_;
80  std::vector<edm::EDGetTokenT<std::vector<std::vector<unsigned>>>> egamma_tracksterlinks_tokens_;
81 
82  std::vector<edm::EDGetTokenT<std::vector<Trackster>>> general_tracksters_tokens_;
83  std::vector<edm::EDGetTokenT<std::vector<std::vector<unsigned>>>> general_tracksterlinks_tokens_;
84 
87 
88  std::vector<edm::EDGetTokenT<std::vector<float>>> original_masks_tokens_;
89 
93 
95  const bool useMTDTiming_;
96  const bool useTimingAverage_;
99 
105 
106  std::once_flag initializeGeometry_;
109  const float tkEnergyCut_ = 2.0f;
114  static constexpr float c_light_ = CLHEP::c_light * CLHEP::ns / CLHEP::cm;
115 };
116 
118  : clusters_token_(consumes<std::vector<reco::CaloCluster>>(ps.getParameter<edm::InputTag>("layer_clusters"))),
119  clustersTime_token_(
120  consumes<edm::ValueMap<std::pair<float, float>>>(ps.getParameter<edm::InputTag>("layer_clustersTime"))),
121  tracks_token_(consumes<std::vector<reco::Track>>(ps.getParameter<edm::InputTag>("tracks"))),
122  trajTrackAssToken_(consumes<TrajTrackAssociationCollection>(ps.getParameter<edm::InputTag>("trjtrkAss"))),
123  inputTimingToken_(consumes<MtdHostCollection>(ps.getParameter<edm::InputTag>("timingSoA"))),
124  muons_token_(consumes<std::vector<reco::Muon>>(ps.getParameter<edm::InputTag>("muons"))),
125  useMTDTiming_(ps.getParameter<bool>("useMTDTiming")),
126  useTimingAverage_(ps.getParameter<bool>("useTimingAverage")),
127  timingQualityThreshold_(ps.getParameter<double>("timingQualityThreshold")),
128  geometry_token_(esConsumes<CaloGeometry, CaloGeometryRecord, edm::Transition::BeginRun>()),
129  bfield_token_(esConsumes<MagneticField, IdealMagneticFieldRecord, edm::Transition::BeginRun>()),
130  detector_(ps.getParameter<std::string>("detector")),
131  propName_(ps.getParameter<std::string>("propagator")),
132  propagator_token_(
134  bsToken_(consumes<reco::BeamSpot>(ps.getParameter<edm::InputTag>("beamspot"))),
135  cutTk_(ps.getParameter<std::string>("cutTk")) {
136  // These are the CLUE3DEM Tracksters put in the event by the TracksterLinksProducer with the superclustering algorithm
137  for (auto const &tag : ps.getParameter<std::vector<edm::InputTag>>("egamma_tracksters_collections")) {
138  egamma_tracksters_tokens_.emplace_back(consumes<std::vector<Trackster>>(tag));
139  }
140 
141  // These are the links put in the event by the TracksterLinksProducer with the superclustering algorithm
142  for (auto const &tag : ps.getParameter<std::vector<edm::InputTag>>("egamma_tracksterlinks_collections")) {
143  egamma_tracksterlinks_tokens_.emplace_back(consumes<std::vector<std::vector<unsigned int>>>(tag));
144  }
145 
146  //make sure that the number of tracksters collections and tracksterlinks collections is the same
148 
149  // Loop over the edm::VInputTag and append the token to general_tracksters_tokens_
150  // These, instead, are the tracksters already merged by the TrackstersLinksProducer
151  for (auto const &tag : ps.getParameter<std::vector<edm::InputTag>>("general_tracksters_collections")) {
152  general_tracksters_tokens_.emplace_back(consumes<std::vector<Trackster>>(tag));
153  }
154 
155  for (auto const &tag : ps.getParameter<std::vector<edm::InputTag>>("general_tracksterlinks_collections")) {
156  general_tracksterlinks_tokens_.emplace_back(consumes<std::vector<std::vector<unsigned int>>>(tag));
157  }
158 
159  //make sure that the number of tracksters collections and tracksterlinks collections is the same
161 
162  //Loop over the edm::VInputTag of masks and append the token to original_masks_tokens_
163  for (auto const &tag : ps.getParameter<std::vector<edm::InputTag>>("original_masks")) {
164  original_masks_tokens_.emplace_back(consumes<std::vector<float>>(tag));
165  }
166 
167  std::string detectorName_ = (detector_ == "HFNose") ? "HGCalHFNoseSensitive" : "HGCalEESensitive";
168  hdc_token_ =
169  esConsumes<HGCalDDDConstants, IdealGeometryRecord, edm::Transition::BeginRun>(edm::ESInputTag("", detectorName_));
170  if (useMTDTiming_) {
171  inputTimingToken_ = consumes<MtdHostCollection>(ps.getParameter<edm::InputTag>("timingSoA"));
172  }
173 
174  produces<std::vector<TICLCandidate>>();
175 
176  // New trackster collection after linking
177  produces<std::vector<Trackster>>();
178 
179  auto interpretationPSet = ps.getParameter<edm::ParameterSet>("interpretationDescPSet");
180  auto algoType = interpretationPSet.getParameter<std::string>("type");
182  TICLGeneralInterpretationPluginFactory::get()->create(algoType, interpretationPSet, consumesCollector());
183 }
184 
187  hgcons_ = hdc.product();
188 
191 
195 };
196 
197 void filterTracks(edm::Handle<std::vector<reco::Track>> tkH,
198  const edm::Handle<std::vector<reco::Muon>> &muons_h,
200  const float tkEnergyCut_,
201  std::vector<bool> &maskTracks) {
202  auto const &tracks = *tkH;
203  for (unsigned i = 0; i < tracks.size(); ++i) {
204  const auto &tk = tracks[i];
205  reco::TrackRef trackref = reco::TrackRef(tkH, i);
206 
207  // veto tracks associated to muons
208  int muId = PFMuonAlgo::muAssocToTrack(trackref, *muons_h);
209  const reco::MuonRef muonref = reco::MuonRef(muons_h, muId);
210 
211  if (!cutTk_((tk)) or (muId != -1 and PFMuonAlgo::isMuon(muonref) and not(*muons_h)[muId].isTrackerMuon())) {
212  maskTracks[i] = false;
213  continue;
214  }
215 
216  // don't consider tracks below 2 GeV for linking
217  if (std::sqrt(tk.p() * tk.p() + ticl::mpion2) < tkEnergyCut_) {
218  maskTracks[i] = false;
219  continue;
220  }
221 
222  // record tracks that can be used to make a ticlcandidate
223  maskTracks[i] = true;
224  }
225 }
226 
228  auto resultTracksters = std::make_unique<std::vector<Trackster>>();
229  auto resultTrackstersMerged = std::make_unique<std::vector<Trackster>>();
230  auto linkedResultTracksters = std::make_unique<std::vector<std::vector<unsigned int>>>();
231 
232  const auto &layerClusters = evt.get(clusters_token_);
233  const auto &layerClustersTimes = evt.get(clustersTime_token_);
235  evt.getByToken(muons_token_, muons_h);
236 
238  evt.getByToken(tracks_token_, tracks_h);
239  const auto &tracks = *tracks_h;
240 
241  const auto &trjtrks = evt.get(trajTrackAssToken_);
242 
243  edm::Handle<MtdHostCollection> inputTiming_h;
244  if (useMTDTiming_) {
245  evt.getByToken(inputTimingToken_, inputTiming_h);
246  }
247 
248  const auto &bs = evt.get(bsToken_);
249 
250  auto const bFieldProd = bfield_.product();
252 
253  // loop over the original_masks_tokens_ and get the original masks collections and multiply them
254  // to get the global mask
255  std::vector<float> original_global_mask(layerClusters.size(), 1.f);
256  for (unsigned int i = 0; i < original_masks_tokens_.size(); ++i) {
257  const auto &tmp_mask = evt.get(original_masks_tokens_[i]);
258  for (unsigned int j = 0; j < tmp_mask.size(); ++j) {
259  original_global_mask[j] *= tmp_mask[j];
260  }
261  }
262 
263  auto resultMask = std::make_unique<std::vector<float>>(original_global_mask);
264 
265  std::vector<edm::Handle<std::vector<Trackster>>> general_tracksters_h(general_tracksters_tokens_.size());
266  MultiVectorManager<Trackster> generalTrackstersManager;
267  for (unsigned int i = 0; i < general_tracksters_tokens_.size(); ++i) {
268  evt.getByToken(general_tracksters_tokens_[i], general_tracksters_h[i]);
269  //Fill MultiVectorManager
270  generalTrackstersManager.addVector(*general_tracksters_h[i]);
271  }
272  //now get the general_tracksterlinks_tokens_
273  std::vector<edm::Handle<std::vector<std::vector<unsigned>>>> general_tracksterlinks_h(
275  std::vector<std::vector<unsigned>> generalTracksterLinksGlobalId;
276  for (unsigned int i = 0; i < general_tracksterlinks_tokens_.size(); ++i) {
277  evt.getByToken(general_tracksterlinks_tokens_[i], general_tracksterlinks_h[i]);
278  for (unsigned int j = 0; j < general_tracksterlinks_h[i]->size(); ++j) {
279  generalTracksterLinksGlobalId.emplace_back();
280  auto &links_vector = generalTracksterLinksGlobalId.back();
281  links_vector.resize((*general_tracksterlinks_h[i])[j].size());
282  for (unsigned int k = 0; k < links_vector.size(); ++k) {
283  links_vector[k] = generalTrackstersManager.getGlobalIndex(i, (*general_tracksterlinks_h[i])[j][k]);
284  }
285  }
286  }
287 
288  std::vector<bool> maskTracks;
289  maskTracks.resize(tracks.size());
290  filterTracks(tracks_h, muons_h, cutTk_, tkEnergyCut_, maskTracks);
291 
293  es,
295  layerClustersTimes,
296  generalTrackstersManager,
297  generalTracksterLinksGlobalId,
298  tracks_h,
299  maskTracks);
300 
301  auto resultCandidates = std::make_unique<std::vector<TICLCandidate>>();
302  std::vector<int> trackstersInTrackIndices(tracks.size(), -1);
303 
304  //TODO
305  //egammaInterpretationAlg_->makecandidates(inputGSF, inputTiming, *resultTrackstersMerged, trackstersInGSFTrackIndices)
306  // mask generalTracks associated to GSFTrack linked in egammaInterpretationAlgo_
307 
308  generalInterpretationAlgo_->makeCandidates(input, inputTiming_h, *resultTracksters, trackstersInTrackIndices);
309 
311  *resultTracksters, layerClusters, layerClustersTimes, rhtools_.getPositionLayer(rhtools_.lastLayerEE()).z(), true);
312 
313  std::vector<bool> maskTracksters(resultTracksters->size(), true);
314  edm::OrphanHandle<std::vector<Trackster>> resultTracksters_h = evt.put(std::move(resultTracksters));
315  //create ChargedCandidates
316  for (size_t iTrack = 0; iTrack < tracks.size(); iTrack++) {
317  if (maskTracks[iTrack]) {
318  auto const tracksterId = trackstersInTrackIndices[iTrack];
319  auto trackPtr = edm::Ptr<reco::Track>(tracks_h, iTrack);
320  if (tracksterId != -1 and !maskTracksters.empty()) {
321  auto tracksterPtr = edm::Ptr<Trackster>(resultTracksters_h, tracksterId);
322  TICLCandidate chargedCandidate(trackPtr, tracksterPtr);
323  resultCandidates->push_back(chargedCandidate);
324  maskTracksters[tracksterId] = false;
325  } else {
326  //charged candidates track only
327  edm::Ptr<Trackster> tracksterPtr;
328  TICLCandidate chargedCandidate(trackPtr, tracksterPtr);
329  auto trackRef = edm::Ref<reco::TrackCollection>(tracks_h, iTrack);
330  const int muId = PFMuonAlgo::muAssocToTrack(trackRef, *muons_h);
331  const reco::MuonRef muonRef = reco::MuonRef(muons_h, muId);
332  if (muonRef.isNonnull() and muonRef->isGlobalMuon()) {
333  // create muon candidate
334  chargedCandidate.setPdgId(13 * trackPtr.get()->charge());
335  }
336  resultCandidates->push_back(chargedCandidate);
337  }
338  }
339  }
340 
341  //Neutral Candidate
342  for (size_t iTrackster = 0; iTrackster < maskTracksters.size(); iTrackster++) {
343  if (maskTracksters[iTrackster]) {
344  edm::Ptr<Trackster> tracksterPtr(resultTracksters_h, iTrackster);
345  edm::Ptr<reco::Track> trackPtr;
346  TICLCandidate neutralCandidate(trackPtr, tracksterPtr);
347  resultCandidates->push_back(neutralCandidate);
348  }
349  }
350 
351  auto getPathLength =
352  [&](const reco::Track track, float zVal, const Trajectory &traj, TrajectoryStateClosestToBeamLine &tscbl) {
353  TrajectoryStateOnSurface stateForProjectionToBeamLineOnSurface =
354  traj.closestMeasurement(GlobalPoint(bs.x0(), bs.y0(), bs.z0())).updatedState();
355 
356  if (!stateForProjectionToBeamLineOnSurface.isValid()) {
357  edm::LogError("CannotPropagateToBeamLine")
358  << "the state on the closest measurement is not valid. skipping track.";
359  return 0.f;
360  }
361  const FreeTrajectoryState &stateForProjectionToBeamLine = *stateForProjectionToBeamLineOnSurface.freeState();
362 
363  TSCBLBuilderWithPropagator tscblBuilder(*propagator);
364  tscbl = tscblBuilder(stateForProjectionToBeamLine, bs);
365 
366  if (tscbl.isValid()) {
367  auto const &tscblPCA = tscbl.trackStateAtPCA();
368  auto const &innSurface = traj.direction() == alongMomentum ? traj.firstMeasurement().updatedState().surface()
369  : traj.lastMeasurement().updatedState().surface();
370  auto const &extSurface = traj.direction() == alongMomentum ? traj.lastMeasurement().updatedState().surface()
371  : traj.firstMeasurement().updatedState().surface();
372  float pathlength = propagator->propagateWithPath(tscblPCA, innSurface).second;
373 
374  if (pathlength) {
375  const auto &fts_inn = trajectoryStateTransform::innerFreeState((track), bFieldProd);
376  const auto &t_inn_out = propagator->propagateWithPath(fts_inn, extSurface);
377 
378  if (t_inn_out.first.isValid()) {
379  pathlength += t_inn_out.second;
380 
381  std::pair<float, float> rMinMax = hgcons_->rangeR(zVal, true);
382 
383  int iSide = int(track.eta() > 0);
384  float zSide = (iSide == 0) ? (-1. * zVal) : zVal;
385  const auto &disk = std::make_unique<GeomDet>(
386  Disk::build(Disk::PositionType(0, 0, zSide),
388  SimpleDiskBounds(rMinMax.first, rMinMax.second, zSide - 0.5, zSide + 0.5))
389  .get());
390  const auto &fts_out = trajectoryStateTransform::outerFreeState((track), bFieldProd);
391  const auto &tsos = propagator->propagateWithPath(fts_out, disk->surface());
392 
393  if (tsos.first.isValid()) {
394  pathlength += tsos.second;
395  return pathlength;
396  }
397  }
398  }
399  }
400  return 0.f;
401  };
402 
403  assignTimeToCandidates(*resultCandidates, tracks_h, inputTiming_h, trjtrks, getPathLength);
404 
405  evt.put(std::move(resultCandidates));
406 }
407 
408 template <typename F>
409 void TICLCandidateProducer::assignTimeToCandidates(std::vector<TICLCandidate> &resultCandidates,
410  edm::Handle<std::vector<reco::Track>> track_h,
411  edm::Handle<MtdHostCollection> inputTiming_h,
413  F func) const {
414  for (auto &cand : resultCandidates) {
415  float beta = 1;
416  float time = 0.f;
417  float invTimeErr = 0.f;
418  float timeErr = -1.f;
419 
420  for (const auto &tr : cand.tracksters()) {
421  if (tr->timeError() > 0) {
422  const auto invTimeESq = pow(tr->timeError(), -2);
423  const auto x = tr->barycenter().X();
424  const auto y = tr->barycenter().Y();
425  const auto z = tr->barycenter().Z();
426  auto path = std::sqrt(x * x + y * y + z * z);
427  if (cand.trackPtr().get() != nullptr) {
428  const auto &trackIndex = cand.trackPtr().get() - (edm::Ptr<reco::Track>(track_h, 0)).get();
429  if (useMTDTiming_) {
430  auto const &inputTimingView = (*inputTiming_h).const_view();
431  if (inputTimingView.timeErr()[trackIndex] > 0) {
432  const auto xMtd = inputTimingView.posInMTD_x()[trackIndex];
433  const auto yMtd = inputTimingView.posInMTD_y()[trackIndex];
434  const auto zMtd = inputTimingView.posInMTD_z()[trackIndex];
435 
436  beta = inputTimingView.beta()[trackIndex];
437  path = std::sqrt((x - xMtd) * (x - xMtd) + (y - yMtd) * (y - yMtd) + (z - zMtd) * (z - zMtd)) +
438  inputTimingView.pathLength()[trackIndex];
439  }
440  } else {
441  const auto &trackIndex = cand.trackPtr().get() - (edm::Ptr<reco::Track>(track_h, 0)).get();
442  for (const auto &trj : trjtrks) {
443  if (trj.val != edm::Ref<std::vector<reco::Track>>(track_h, trackIndex))
444  continue;
445  const Trajectory &traj = *trj.key;
447 
448  float pathLength = func(*(cand.trackPtr().get()), z, traj, tscbl);
449  if (pathLength) {
450  path = pathLength;
451  break;
452  }
453  }
454  }
455  }
456  time += (tr->time() - path / (beta * c_light_)) * invTimeESq;
457  invTimeErr += invTimeESq;
458  }
459  }
460  if (invTimeErr > 0) {
461  time = time / invTimeErr;
462  // FIXME_ set a liminf of 0.02 ns on the ts error (based on residuals)
463  timeErr = sqrt(1.f / invTimeErr) > 0.02 ? sqrt(1.f / invTimeErr) : 0.02;
464  cand.setTime(time, timeErr);
465  }
466 
467  if (useMTDTiming_ and cand.charge()) {
468  // Check MTD timing availability
469  auto const &inputTimingView = (*inputTiming_h).const_view();
470  const auto &trackIndex = cand.trackPtr().get() - (edm::Ptr<reco::Track>(track_h, 0)).get();
471  const bool assocQuality = inputTimingView.MVAquality()[trackIndex] > timingQualityThreshold_;
472  if (assocQuality) {
473  const auto timeHGC = cand.time();
474  const auto timeEHGC = cand.timeError();
475  const auto timeMTD = inputTimingView.time0()[trackIndex];
476  const auto timeEMTD = inputTimingView.time0Err()[trackIndex];
477 
478  if (useTimingAverage_ && (timeEMTD > 0 && timeEHGC > 0)) {
479  // Compute weighted average between HGCAL and MTD timing
480  const auto invTimeESqHGC = pow(timeEHGC, -2);
481  const auto invTimeESqMTD = pow(timeEMTD, -2);
482  timeErr = 1.f / (invTimeESqHGC + invTimeESqMTD);
483  time = (timeHGC * invTimeESqHGC + timeMTD * invTimeESqMTD) * timeErr;
484  timeErr = sqrt(timeErr);
485  } else if (timeEMTD > 0) {
486  time = timeMTD;
487  timeErr = timeEMTD;
488  }
489  }
490  cand.setTime(time, timeErr);
491  cand.setMTDTime(inputTimingView.time()[trackIndex], inputTimingView.timeErr()[trackIndex]);
492  }
493  }
494 }
495 
498  edm::ParameterSetDescription interpretationDesc;
499  interpretationDesc.addNode(edm::PluginDescription<TICLGeneralInterpretationPluginFactory>("type", "General", true));
500  desc.add<edm::ParameterSetDescription>("interpretationDescPSet", interpretationDesc);
501  desc.add<std::vector<edm::InputTag>>("egamma_tracksters_collections", {edm::InputTag("ticlTracksterLinks")});
502  desc.add<std::vector<edm::InputTag>>("egamma_tracksterlinks_collections", {edm::InputTag("ticlTracksterLinks")});
503  desc.add<std::vector<edm::InputTag>>("general_tracksters_collections", {edm::InputTag("ticlTracksterLinks")});
504  desc.add<std::vector<edm::InputTag>>("general_tracksterlinks_collections", {edm::InputTag("ticlTracksterLinks")});
505  desc.add<std::vector<edm::InputTag>>("original_masks",
506  {edm::InputTag("hgcalMergeLayerClusters", "InitialLayerClustersMask")});
507  desc.add<edm::InputTag>("layer_clusters", edm::InputTag("hgcalMergeLayerClusters"));
508  desc.add<edm::InputTag>("layer_clustersTime", edm::InputTag("hgcalMergeLayerClusters", "timeLayerCluster"));
509  desc.add<edm::InputTag>("tracks", edm::InputTag("generalTracks"));
510  desc.add<edm::InputTag>("trjtrkAss", edm::InputTag("generalTracks"));
511  desc.add<edm::InputTag>("timingSoA", edm::InputTag("mtdSoA"));
512  desc.add<edm::InputTag>("muons", edm::InputTag("muons1stStep"));
513  desc.add<std::string>("detector", "HGCAL");
514  desc.add<std::string>("propagator", "PropagatorWithMaterial");
515  desc.add<edm::InputTag>("beamspot", edm::InputTag("offlineBeamSpot"));
516  desc.add<bool>("useMTDTiming", true);
517  desc.add<bool>("useTimingAverage", true);
518  desc.add<double>("timingQualityThreshold", 0.5);
519  desc.add<std::string>("cutTk",
520  "1.48 < abs(eta) < 3.0 && pt > 1. && quality(\"highPurity\") && "
521  "hitPattern().numberOfLostHits(\"MISSING_OUTER_HITS\") < 5");
522  descriptions.add("ticlCandidateProducer", desc);
523 }
524 
size
Write out results.
static DiskPointer build(Args &&... args)
Definition: BoundDisk.h:38
static int muAssocToTrack(const reco::TrackRef &trackref, const reco::MuonCollection &muons)
Definition: PFMuonAlgo.cc:479
TICLCandidateProducer(const edm::ParameterSet &ps)
ESGetTokenH3DDVariant esConsumes(std::string const &Record, edm::ConsumesCollector &)
Definition: DeDxTools.cc:283
T getParameter(std::string const &) const
Definition: ParameterSet.h:307
OrphanHandle< PROD > put(std::unique_ptr< PROD > product)
Put a new product.
Definition: Event.h:133
bool get(ProductID const &oid, Handle< PROD > &result) const
Definition: Event.h:344
void beginRun(edm::Run const &iEvent, edm::EventSetup const &es) override
const StringCutObjectSelector< reco::Track > cutTk_
static bool isMuon(const reco::PFBlockElement &elt)
Definition: PFMuonAlgo.cc:48
const edm::EDGetTokenT< edm::ValueMap< std::pair< float, float > > > clustersTime_token_
Global3DPoint GlobalPoint
Definition: GlobalPoint.h:10
ParameterDescriptionNode * addNode(ParameterDescriptionNode const &node)
bool isNonnull() const
Checks for non-null.
Definition: Ref.h:238
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:528
const edm::ESGetToken< MagneticField, IdealMagneticFieldRecord > bfield_token_
const edm::EDGetTokenT< reco::BeamSpot > bsToken_
Log< level::Error, false > LogError
assert(be >=bs)
const edm::EDGetTokenT< std::vector< reco::Track > > tracks_token_
static std::string const input
Definition: EdmProvDump.cc:50
edm::ESHandle< Propagator > propagator_
const edm::ESGetToken< Propagator, TrackingComponentsRecord > propagator_token_
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
int iEvent
Definition: GenABIO.cc:224
T const * product() const
Definition: ESHandle.h:86
Definition: Muon.py:1
T sqrt(T t)
Definition: SSEVec.h:23
The Signals That Services Can Subscribe To This is based on ActivityRegistry and is current per Services can connect to the signals distributed by the ActivityRegistry in order to monitor the activity of the application Each possible callback has some defined which we here list in angle e< void, edm::EventID const &, edm::Timestamp const & > We also list in braces which AR_WATCH_USING_METHOD_ is used for those or
Definition: Activities.doc:12
Transition
Definition: Transition.h:12
double f[11][100]
edm::Ref< MuonCollection > MuonRef
presistent reference to a Muon
Definition: MuonFwd.h:13
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:16
edm::ESGetToken< HGCalDDDConstants, IdealGeometryRecord > hdc_token_
void produce(edm::Event &, const edm::EventSetup &) override
ESHandle< T > getHandle(const ESGetToken< T, R > &iToken) const
Definition: EventSetup.h:130
std::vector< edm::EDGetTokenT< std::vector< Trackster > > > general_tracksters_tokens_
std::pair< double, double > rangeR(double z, bool reco) const
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
std::vector< edm::EDGetTokenT< std::vector< Trackster > > > egamma_tracksters_tokens_
edm::Ref< TrackCollection > TrackRef
persistent reference to a Track
Definition: TrackFwd.h:20
void add(std::string const &label, ParameterSetDescription const &psetDescription)
GlobalPoint getPositionLayer(int layer, bool nose=false) const
Definition: RecHitTools.cc:152
void setGeometry(CaloGeometry const &)
Definition: RecHitTools.cc:79
fixed size matrix
const edm::EDGetTokenT< std::vector< reco::CaloCluster > > clusters_token_
const HGCalDDDConstants * hgcons_
HLT enums.
constexpr float mpion2
Definition: Common.h:41
static constexpr float c_light_
std::vector< edm::EDGetTokenT< std::vector< std::vector< unsigned > > > > general_tracksterlinks_tokens_
Definition: Common.h:10
FreeTrajectoryState const * freeState(bool withErrors=true) const
const edm::ESGetToken< CaloGeometry, CaloGeometryRecord > geometry_token_
void assignPCAtoTracksters(std::vector< Trackster > &, const std::vector< reco::CaloCluster > &, const edm::ValueMap< std::pair< float, float >> &, double, bool computeLocalTime=false, bool energyWeight=true)
edm::EDGetTokenT< MtdHostCollection > inputTimingToken_
std::vector< edm::EDGetTokenT< std::vector< float > > > original_masks_tokens_
std::unique_ptr< TICLInterpretationAlgoBase< reco::Track > > generalInterpretationAlgo_
FreeTrajectoryState innerFreeState(const reco::Track &tk, const MagneticField *field, bool withErr=true)
#define get
static uInt32 F(BLOWFISH_CTX *ctx, uInt32 x)
Definition: blowfish.cc:163
void assignTimeToCandidates(std::vector< TICLCandidate > &resultCandidates, edm::Handle< std::vector< reco::Track >> track_h, edm::Handle< MtdHostCollection > inputTiming_h, TrajTrackAssociationCollection trjtrks, F func) const
edm::ESHandle< MagneticField > bfield_
FreeTrajectoryState outerFreeState(const reco::Track &tk, const MagneticField *field, bool withErr=true)
void setPdgId(int pdgId) final
std::vector< edm::EDGetTokenT< std::vector< std::vector< unsigned > > > > egamma_tracksterlinks_tokens_
void filterTracks(edm::Handle< std::vector< reco::Track >> tkH, const edm::Handle< std::vector< reco::Muon >> &muons_h, const StringCutObjectSelector< reco::Track > cutTk_, const float tkEnergyCut_, std::vector< bool > &maskTracks)
Power< A, B >::type pow(const A &a, const B &b)
Definition: Power.h:29
const edm::EDGetTokenT< std::vector< reco::Muon > > muons_token_
def move(src, dest)
Definition: eostools.py:511
unsigned int lastLayerEE(bool nose=false) const
Definition: RecHitTools.h:76
Definition: Run.h:45
const edm::EDGetTokenT< TrajTrackAssociationCollection > trajTrackAssToken_