CMS 3D CMS Logo

CTPPSProtonProducer.cc
Go to the documentation of this file.
1 /****************************************************************************
2  * Authors:
3  * Jan Kašpar
4  * Laurent Forthomme
5  ****************************************************************************/
6 
14 
16 
20 
23 
25 
28 
31 
34 
35 //----------------------------------------------------------------------------------------------------
36 
38 public:
39  explicit CTPPSProtonProducer(const edm::ParameterSet &);
40  ~CTPPSProtonProducer() override = default;
41 
42  static void fillDescriptions(edm::ConfigurationDescriptions &descriptions);
43 
44 private:
45  void produce(edm::Event &, const edm::EventSetup &) override;
46 
48 
50 
53 
54  unsigned int verbosity_;
55 
58 
61 
63 
64  struct AssociationCuts {
66  double x_cut_mean, x_cut_value;
73 
74  double ti_tr_min;
75  double ti_tr_max;
76 
77  void load(const edm::ParameterSet &ps) {
78  x_cut_apply = ps.getParameter<bool>("x_cut_apply");
79  x_cut_mean = ps.getParameter<double>("x_cut_mean");
80  x_cut_value = ps.getParameter<double>("x_cut_value");
81 
82  y_cut_apply = ps.getParameter<bool>("y_cut_apply");
83  y_cut_mean = ps.getParameter<double>("y_cut_mean");
84  y_cut_value = ps.getParameter<double>("y_cut_value");
85 
86  xi_cut_apply = ps.getParameter<bool>("xi_cut_apply");
87  xi_cut_mean = ps.getParameter<double>("xi_cut_mean");
88  xi_cut_value = ps.getParameter<double>("xi_cut_value");
89 
90  th_y_cut_apply = ps.getParameter<bool>("th_y_cut_apply");
91  th_y_cut_mean = ps.getParameter<double>("th_y_cut_mean");
92  th_y_cut_value = ps.getParameter<double>("th_y_cut_value");
93 
94  ti_tr_min = ps.getParameter<double>("ti_tr_min");
95  ti_tr_max = ps.getParameter<double>("ti_tr_max");
96  }
97 
100 
101  desc.add<bool>("x_cut_apply", false)->setComment("whether to apply track-association cut in x");
102  desc.add<double>("x_cut_mean", 0E-6)->setComment("mean of track-association cut in x, mm");
103  desc.add<double>("x_cut_value", 800E-6)->setComment("threshold of track-association cut in x, mm");
104 
105  desc.add<bool>("y_cut_apply", false)->setComment("whether to apply track-association cut in y");
106  desc.add<double>("y_cut_mean", 0E-6)->setComment("mean of track-association cut in y, mm");
107  desc.add<double>("y_cut_value", 600E-6)->setComment("threshold of track-association cut in y, mm");
108 
109  desc.add<bool>("xi_cut_apply", true)->setComment("whether to apply track-association cut in xi");
110  desc.add<double>("xi_cut_mean", 0.)->setComment("mean of track-association cut in xi");
111  desc.add<double>("xi_cut_value", 0.013)->setComment("threshold of track-association cut in xi");
112 
113  desc.add<bool>("th_y_cut_apply", true)->setComment("whether to apply track-association cut in th_y");
114  desc.add<double>("th_y_cut_mean", 0E-6)->setComment("mean of track-association cut in th_y, rad");
115  desc.add<double>("th_y_cut_value", 20E-6)->setComment("threshold of track-association cut in th_y, rad");
116 
117  desc.add<double>("ti_tr_min", -1.)->setComment("minimum value for timing-tracking association cut");
118  desc.add<double>("ti_tr_max", +1.)->setComment("maximum value for timing-tracking association cut");
119 
120  return desc;
121  }
122  };
123 
124  std::map<unsigned int, AssociationCuts> association_cuts_; // map: arm -> AssociationCuts
125 
126  unsigned int max_n_timing_tracks_;
128 
130 
131  bool opticsValid_;
133 
137 };
138 
139 //----------------------------------------------------------------------------------------------------
140 
142  : tracksToken_(consumes<CTPPSLocalTrackLiteCollection>(iConfig.getParameter<edm::InputTag>("tagLocalTrackLite"))),
143 
144  pixelDiscardBXShiftedTracks_(iConfig.getParameter<bool>("pixelDiscardBXShiftedTracks")),
145 
146  lhcInfoLabel_(iConfig.getParameter<std::string>("lhcInfoLabel")),
147  opticsLabel_(iConfig.getParameter<std::string>("opticsLabel")),
148  verbosity_(iConfig.getUntrackedParameter<unsigned int>("verbosity", 0)),
149  doSingleRPReconstruction_(iConfig.getParameter<bool>("doSingleRPReconstruction")),
150  doMultiRPReconstruction_(iConfig.getParameter<bool>("doMultiRPReconstruction")),
151  singleRPReconstructionLabel_(iConfig.getParameter<std::string>("singleRPReconstructionLabel")),
152  multiRPReconstructionLabel_(iConfig.getParameter<std::string>("multiRPReconstructionLabel")),
153 
154  localAngleXMin_(iConfig.getParameter<double>("localAngleXMin")),
155  localAngleXMax_(iConfig.getParameter<double>("localAngleXMax")),
156  localAngleYMin_(iConfig.getParameter<double>("localAngleYMin")),
157  localAngleYMax_(iConfig.getParameter<double>("localAngleYMax")),
158 
159  max_n_timing_tracks_(iConfig.getParameter<unsigned int>("max_n_timing_tracks")),
160  default_time_(iConfig.getParameter<double>("default_time")),
161 
162  algorithm_(iConfig.getParameter<bool>("fitVtxY"),
163  iConfig.getParameter<bool>("useImprovedInitialEstimate"),
164  iConfig.getParameter<std::string>("multiRPAlgorithm"),
165  verbosity_),
166  opticsValid_(false),
167  lhcInfoToken_(esConsumes<LHCInfo, LHCInfoRcd>(edm::ESInputTag("", lhcInfoLabel_))),
169  edm::ESInputTag("", opticsLabel_))),
170  geometryToken_(esConsumes<CTPPSGeometry, VeryForwardRealGeometryRecord>()) {
171  for (const std::string &sector : {"45", "56"}) {
172  const unsigned int arm = (sector == "45") ? 0 : 1;
173  association_cuts_[arm].load(iConfig.getParameterSet("association_cuts_" + sector));
174  }
175 
177  produces<reco::ForwardProtonCollection>(singleRPReconstructionLabel_);
178 
180  produces<reco::ForwardProtonCollection>(multiRPReconstructionLabel_);
181 }
182 
183 //----------------------------------------------------------------------------------------------------
184 
187 
188  desc.add<edm::InputTag>("tagLocalTrackLite", edm::InputTag("ctppsLocalTrackLiteProducer"))
189  ->setComment("specification of the input lite-track collection");
190 
191  desc.add<bool>("pixelDiscardBXShiftedTracks", false)
192  ->setComment("whether to discard pixel tracks built from BX-shifted planes");
193 
194  desc.add<std::string>("lhcInfoLabel", "")->setComment("label of the LHCInfo record");
195  desc.add<std::string>("opticsLabel", "")->setComment("label of the optics record");
196 
197  desc.addUntracked<unsigned int>("verbosity", 0)->setComment("verbosity level");
198 
199  desc.add<bool>("doSingleRPReconstruction", true)
200  ->setComment("flag whether to apply single-RP reconstruction strategy");
201 
202  desc.add<bool>("doMultiRPReconstruction", true)->setComment("flag whether to apply multi-RP reconstruction strategy");
203 
204  desc.add<std::string>("singleRPReconstructionLabel", "singleRP")
205  ->setComment("output label for single-RP reconstruction products");
206 
207  desc.add<std::string>("multiRPReconstructionLabel", "multiRP")
208  ->setComment("output label for multi-RP reconstruction products");
209 
210  desc.add<double>("localAngleXMin", -0.03)->setComment("minimal accepted value of local horizontal angle (rad)");
211  desc.add<double>("localAngleXMax", +0.03)->setComment("maximal accepted value of local horizontal angle (rad)");
212  desc.add<double>("localAngleYMin", -0.04)->setComment("minimal accepted value of local vertical angle (rad)");
213  desc.add<double>("localAngleYMax", +0.04)->setComment("maximal accepted value of local vertical angle (rad)");
214 
215  for (const std::string &sector : {"45", "56"}) {
216  desc.add<edm::ParameterSetDescription>("association_cuts_" + sector, AssociationCuts::getDefaultParameters())
217  ->setComment("track-association cuts for sector " + sector);
218  }
219 
220  std::vector<edm::ParameterSet> config;
221 
222  desc.add<unsigned int>("max_n_timing_tracks", 5)->setComment("maximum number of timing tracks per RP");
223 
224  desc.add<double>("default_time", 0.)->setComment("proton time to be used when no timing information available");
225 
226  desc.add<bool>("fitVtxY", true)
227  ->setComment("for multi-RP reconstruction, flag whether y* should be free fit parameter");
228 
229  desc.add<bool>("useImprovedInitialEstimate", true)
230  ->setComment(
231  "for multi-RP reconstruction, flag whether a quadratic estimate of the initial point should be used");
232 
233  desc.add<std::string>("multiRPAlgorithm", "chi2")
234  ->setComment("algorithm for multi-RP reco, options include chi2, newton, anal-iter");
235 
236  descriptions.add("ctppsProtons", desc);
237 }
238 
239 //----------------------------------------------------------------------------------------------------
240 
242  // get input
244  iEvent.getByToken(tracksToken_, hTracks);
245 
246  // book output
247  std::unique_ptr<reco::ForwardProtonCollection> pOutSingleRP(new reco::ForwardProtonCollection);
248  std::unique_ptr<reco::ForwardProtonCollection> pOutMultiRP(new reco::ForwardProtonCollection);
249 
250  // continue only if there is something to process
251  // NB: this avoids loading (possibly non-existing) conditions in workflows without proton data
252  if (!hTracks->empty()) {
253  // get conditions
255 
258 
260 
261  // re-initialise algorithm upon crossing-angle change
262  if (opticsWatcher_.check(iSetup)) {
263  if (hOpticalFunctions->empty()) {
264  edm::LogInfo("CTPPSProtonProducer") << "No optical functions available, reconstruction disabled.";
266  opticsValid_ = false;
267  } else {
268  algorithm_.init(*hOpticalFunctions);
269  opticsValid_ = true;
270  }
271  }
272 
273  // do reconstruction only if optics is valid
274  if (opticsValid_) {
275  // prepare log
276  std::ostringstream ssLog;
277  if (verbosity_)
278  ssLog << "* input tracks:" << std::endl;
279 
280  // select tracks with small local angles, split them by LHC sector and tracker/timing RPs
281  std::map<unsigned int, std::vector<unsigned int>> trackingSelection, timingSelection;
282 
283  for (unsigned int idx = 0; idx < hTracks->size(); ++idx) {
284  const auto &tr = hTracks->at(idx);
285 
286  if (tr.tx() < localAngleXMin_ || tr.tx() > localAngleXMax_ || tr.ty() < localAngleYMin_ ||
287  tr.ty() > localAngleYMax_)
288  continue;
289 
291  if (tr.pixelTrackRecoInfo() == CTPPSpixelLocalTrackReconstructionInfo::allShiftedPlanes ||
292  tr.pixelTrackRecoInfo() == CTPPSpixelLocalTrackReconstructionInfo::mixedPlanes)
293  continue;
294  }
295 
296  const CTPPSDetId rpId(tr.rpId());
297 
298  if (verbosity_)
299  ssLog << "\t"
300  << "[" << idx << "] " << tr.rpId() << " (" << (rpId.arm() * 100 + rpId.station() * 10 + rpId.rp())
301  << "): "
302  << "x=" << tr.x() << " +- " << tr.xUnc() << " mm, "
303  << "y=" << tr.y() << " +- " << tr.yUnc() << " mm" << std::endl;
304 
305  const bool trackerRP =
306  (rpId.subdetId() == CTPPSDetId::sdTrackingStrip || rpId.subdetId() == CTPPSDetId::sdTrackingPixel);
307 
308  if (trackerRP)
309  trackingSelection[rpId.arm()].push_back(idx);
310  else
311  timingSelection[rpId.arm()].push_back(idx);
312  }
313 
314  // process each arm
315  for (const auto &arm_it : trackingSelection) {
316  const auto &indices = arm_it.second;
317 
318  const auto &ac = association_cuts_[arm_it.first];
319 
320  // do single-RP reco if needed
321  std::map<unsigned int, reco::ForwardProton> singleRPResultsIndexed;
322  if (doSingleRPReconstruction_ || ac.xi_cut_apply || ac.th_y_cut_apply) {
323  for (const auto &idx : indices) {
324  if (verbosity_)
325  ssLog << std::endl << "* reconstruction from track " << idx << std::endl;
326 
327  singleRPResultsIndexed[idx] =
328  algorithm_.reconstructFromSingleRP(CTPPSLocalTrackLiteRef(hTracks, idx), *hLHCInfo, ssLog);
329  }
330  }
331 
332  // check that exactly two tracking RPs are involved
333  // - 1 is insufficient for multi-RP reconstruction
334  // - PPS did not use more than 2 tracking RPs per arm -> algorithms are tuned to this
335  std::set<unsigned int> rpIds;
336  for (const auto &idx : indices)
337  rpIds.insert(hTracks->at(idx).rpId());
338 
339  // do multi-RP reco if chosen
340  if (doMultiRPReconstruction_ && rpIds.size() == 2) {
341  // find matching track pairs from different tracking RPs, ordered: i=near, j=far RP
342  std::vector<std::pair<unsigned int, unsigned int>> idx_pairs;
343  std::map<unsigned int, unsigned int> idx_pair_multiplicity;
344  for (const auto &i : indices) {
345  for (const auto &j : indices) {
346  const auto &tr_i = hTracks->at(i);
347  const auto &tr_j = hTracks->at(j);
348 
349  const double z_i = hGeometry->rpTranslation(tr_i.rpId()).z();
350  const double z_j = hGeometry->rpTranslation(tr_j.rpId()).z();
351 
352  const auto &pr_i = singleRPResultsIndexed[i];
353  const auto &pr_j = singleRPResultsIndexed[j];
354 
355  if (tr_i.rpId() == tr_j.rpId())
356  continue;
357 
358  if (std::abs(z_i) >= std::abs(z_j))
359  continue;
360 
361  bool matching = true;
362 
363  if (ac.x_cut_apply && std::abs(tr_i.x() - tr_j.x() - ac.x_cut_mean) > ac.x_cut_value)
364  matching = false;
365  else if (ac.y_cut_apply && std::abs(tr_i.y() - tr_j.y() - ac.y_cut_mean) > ac.y_cut_value)
366  matching = false;
367  else if (ac.xi_cut_apply && std::abs(pr_i.xi() - pr_j.xi() - ac.xi_cut_mean) > ac.xi_cut_value)
368  matching = false;
369  else if (ac.th_y_cut_apply &&
370  std::abs(pr_i.thetaY() - pr_j.thetaY() - ac.th_y_cut_mean) > ac.th_y_cut_value)
371  matching = false;
372 
373  if (!matching)
374  continue;
375 
376  idx_pairs.emplace_back(i, j);
377  idx_pair_multiplicity[i]++;
378  idx_pair_multiplicity[j]++;
379  }
380  }
381 
382  // evaluate track multiplicity in each timing RP
383  std::map<unsigned int, unsigned int> timing_RP_track_multiplicity;
384  for (const auto &ti : timingSelection[arm_it.first]) {
385  const auto &tr = hTracks->at(ti);
386  timing_RP_track_multiplicity[tr.rpId()]++;
387  }
388 
389  // associate tracking-RP pairs with timing-RP tracks
390  std::map<unsigned int, std::vector<unsigned int>> matched_timing_track_indices;
391  std::map<unsigned int, unsigned int> matched_timing_track_multiplicity;
392  for (unsigned int pr_idx = 0; pr_idx < idx_pairs.size(); ++pr_idx) {
393  const auto &i = idx_pairs[pr_idx].first;
394  const auto &j = idx_pairs[pr_idx].second;
395 
396  // skip non-unique associations
397  if (idx_pair_multiplicity[i] > 1 || idx_pair_multiplicity[j] > 1)
398  continue;
399 
400  const auto &tr_i = hTracks->at(i);
401  const auto &tr_j = hTracks->at(j);
402 
403  const double z_i = hGeometry->rpTranslation(tr_i.rpId()).z();
404  const double z_j = hGeometry->rpTranslation(tr_j.rpId()).z();
405 
406  for (const auto &ti : timingSelection[arm_it.first]) {
407  const auto &tr_ti = hTracks->at(ti);
408 
409  // skip if timing RP saturated (high track multiplicity)
410  if (timing_RP_track_multiplicity[tr_ti.rpId()] > max_n_timing_tracks_)
411  continue;
412 
413  // interpolation from tracking RPs
414  const double z_ti =
415  -hGeometry->rpTranslation(tr_ti.rpId()).z(); // the minus sign fixes a bug in the diamond geometry
416  const double f_i = (z_ti - z_j) / (z_i - z_j), f_j = (z_i - z_ti) / (z_i - z_j);
417  const double x_inter = f_i * tr_i.x() + f_j * tr_j.x();
418  const double x_inter_unc_sq =
419  f_i * f_i * tr_i.xUnc() * tr_i.xUnc() + f_j * f_j * tr_j.xUnc() * tr_j.xUnc();
420 
421  const double de_x = tr_ti.x() - x_inter;
422  const double de_x_unc = sqrt(tr_ti.xUnc() * tr_ti.xUnc() + x_inter_unc_sq);
423  const double r = (de_x_unc > 0.) ? de_x / de_x_unc : 1E100;
424 
425  const bool matching = (ac.ti_tr_min < r && r < ac.ti_tr_max);
426 
427  if (verbosity_)
428  ssLog << "ti=" << ti << ", i=" << i << ", j=" << j << " | z_ti=" << z_ti << ", z_i=" << z_i
429  << ", z_j=" << z_j << " | x_ti=" << tr_ti.x() << ", x_inter=" << x_inter << ", de_x=" << de_x
430  << ", de_x_unc=" << de_x_unc << ", matching=" << matching << std::endl;
431 
432  if (!matching)
433  continue;
434 
435  matched_timing_track_indices[pr_idx].push_back(ti);
436  matched_timing_track_multiplicity[ti]++;
437  }
438  }
439 
440  // process associated tracks
441  for (unsigned int pr_idx = 0; pr_idx < idx_pairs.size(); ++pr_idx) {
442  const auto &i = idx_pairs[pr_idx].first;
443  const auto &j = idx_pairs[pr_idx].second;
444 
445  // skip non-unique associations of tracking-RP tracks
446  if (idx_pair_multiplicity[i] > 1 || idx_pair_multiplicity[j] > 1)
447  continue;
448 
449  if (verbosity_)
450  ssLog << std::endl
451  << "* reconstruction from tracking-RP tracks: " << i << ", " << j << " and timing-RP tracks: ";
452 
453  // buffer contributing tracks
454  CTPPSLocalTrackLiteRefVector sel_tracks;
455  sel_tracks.push_back(CTPPSLocalTrackLiteRef(hTracks, i));
456  sel_tracks.push_back(CTPPSLocalTrackLiteRef(hTracks, j));
457 
458  CTPPSLocalTrackLiteRefVector sel_track_for_kin_reco = sel_tracks;
459 
460  // process timing-RP data
461  double sw = 0., swt = 0.;
462  for (const auto &ti : matched_timing_track_indices[pr_idx]) {
463  // skip non-unique associations of timing-RP tracks
464  if (matched_timing_track_multiplicity[ti] > 1)
465  continue;
466 
467  sel_tracks.push_back(CTPPSLocalTrackLiteRef(hTracks, ti));
468 
469  if (verbosity_)
470  ssLog << ti << ", ";
471 
472  const auto &tr = hTracks->at(ti);
473  const double t_unc = tr.timeUnc();
474  const double w = (t_unc > 0.) ? 1. / t_unc / t_unc : 1.;
475  sw += w;
476  swt += w * tr.time();
477  }
478 
479  float time = default_time_, time_unc = 0.;
480  if (sw > 0.) {
481  time = swt / sw;
482  time_unc = 1. / sqrt(sw);
483  }
484 
485  if (verbosity_)
486  ssLog << std::endl << " time = " << time << " +- " << time_unc << std::endl;
487 
488  // process tracking-RP data
489  reco::ForwardProton proton = algorithm_.reconstructFromMultiRP(sel_track_for_kin_reco, *hLHCInfo, ssLog);
490 
491  // save combined output
492  proton.setContributingLocalTracks(sel_tracks);
493  proton.setTime(time);
494  proton.setTimeError(time_unc);
495 
496  pOutMultiRP->emplace_back(proton);
497  }
498  }
499 
500  // save single-RP results (un-indexed)
501  for (const auto &p : singleRPResultsIndexed)
502  pOutSingleRP->emplace_back(std::move(p.second));
503  }
504 
505  // dump log
506  if (verbosity_)
507  edm::LogInfo("CTPPSProtonProducer") << ssLog.str();
508  }
509  }
510 
511  // save output
513  iEvent.put(std::move(pOutSingleRP), singleRPReconstructionLabel_);
514 
516  iEvent.put(std::move(pOutMultiRP), multiRPReconstructionLabel_);
517 }
518 
519 //----------------------------------------------------------------------------------------------------
520 
edm::ESWatcher::check
bool check(const edm::EventSetup &iSetup)
Definition: ESWatcher.h:52
VeryForwardRealGeometryRecord
Event setup record containing the real (actual) geometry information.
Definition: VeryForwardRealGeometryRecord.h:22
bTagCombinedSVVariables_cff.indices
indices
Definition: bTagCombinedSVVariables_cff.py:67
CTPPSLocalTrackLiteCollection
std::vector< CTPPSLocalTrackLite > CTPPSLocalTrackLiteCollection
Collection of CTPPSLocalTrackLite objects.
Definition: CTPPSLocalTrackLiteFwd.h:18
CTPPSGeometry::rpTranslation
Vector rpTranslation(unsigned int id) const
Definition: CTPPSGeometry.cc:201
CTPPSProtonProducer::default_time_
double default_time_
Definition: CTPPSProtonProducer.cc:130
electrons_cff.bool
bool
Definition: electrons_cff.py:393
mps_fire.i
i
Definition: mps_fire.py:428
CTPPSGeometry
The manager class for TOTEM RP geometry.
Definition: CTPPSGeometry.h:29
CTPPSProtonProducer::association_cuts_
std::map< unsigned int, AssociationCuts > association_cuts_
Definition: CTPPSProtonProducer.cc:127
funct::false
false
Definition: Factorize.h:29
CTPPSProtonProducer::AssociationCuts::load
void load(const edm::ParameterSet &ps)
Definition: CTPPSProtonProducer.cc:80
CTPPSProtonProducer::tracksToken_
edm::EDGetTokenT< CTPPSLocalTrackLiteCollection > tracksToken_
Definition: CTPPSProtonProducer.cc:50
CTPPSProtonProducer::doMultiRPReconstruction_
bool doMultiRPReconstruction_
Definition: CTPPSProtonProducer.cc:60
edm::ESWatcher< CTPPSInterpolatedOpticsRcd >
ESInputTag
CTPPSProtonProducer::localAngleYMin_
double localAngleYMin_
Definition: CTPPSProtonProducer.cc:65
edm::EDGetTokenT< CTPPSLocalTrackLiteCollection >
edm
HLT enums.
Definition: AlignableModifier.h:19
CTPPSProtonProducer::AssociationCuts::th_y_cut_mean
double th_y_cut_mean
Definition: CTPPSProtonProducer.cc:75
AlCaHLTBitMon_ParallelJobs.p
p
Definition: AlCaHLTBitMon_ParallelJobs.py:153
CTPPSProtonProducer::lhcInfoLabel_
std::string lhcInfoLabel_
Definition: CTPPSProtonProducer.cc:54
HLT_FULL_cff.InputTag
InputTag
Definition: HLT_FULL_cff.py:89287
CTPPSProtonProducer::opticsWatcher_
edm::ESWatcher< CTPPSInterpolatedOpticsRcd > opticsWatcher_
Definition: CTPPSProtonProducer.cc:135
edm::ParameterSetDescription
Definition: ParameterSetDescription.h:52
CTPPSProtonProducer::AssociationCuts::y_cut_value
double y_cut_value
Definition: CTPPSProtonProducer.cc:71
LHCInfo.h
CTPPSProtonProducer::algorithm_
ProtonReconstructionAlgorithm algorithm_
Definition: CTPPSProtonProducer.cc:132
reco::ForwardProton
Definition: ForwardProton.h:21
LHCInfo
Definition: LHCInfo.h:12
CTPPSProtonProducer::~CTPPSProtonProducer
~CTPPSProtonProducer() override=default
EDProducer.h
ProtonReconstructionAlgorithm::init
void init(const LHCInterpolatedOpticalFunctionsSetCollection &opticalFunctions)
Definition: ProtonReconstructionAlgorithm.cc:53
CTPPSProtonProducer::AssociationCuts::getDefaultParameters
static edm::ParameterSetDescription getDefaultParameters()
Definition: CTPPSProtonProducer.cc:101
CTPPSProtonProducer::opticsLabel_
std::string opticsLabel_
Definition: CTPPSProtonProducer.cc:55
CTPPSLocalTrackLite.h
CTPPSLocalTrackLiteRef
edm::Ref< CTPPSLocalTrackLiteCollection > CTPPSLocalTrackLiteRef
Persistent reference to a CTPPSLocalTrackLite.
Definition: CTPPSLocalTrackLiteFwd.h:22
edm::RefVector< CTPPSLocalTrackLiteCollection >
edm::LogInfo
Log< level::Info, false > LogInfo
Definition: MessageLogger.h:125
year_2016_postTS2_cff.rpId
rpId
Definition: year_2016_postTS2_cff.py:23
CTPPSProtonProducer::AssociationCuts::xi_cut_mean
double xi_cut_mean
Definition: CTPPSProtonProducer.cc:73
CTPPSProtonProducer::AssociationCuts::ti_tr_min
double ti_tr_min
Definition: CTPPSProtonProducer.cc:77
ProtonReconstructionAlgorithm::reconstructFromMultiRP
reco::ForwardProton reconstructFromMultiRP(const CTPPSLocalTrackLiteRefVector &tracks, const LHCInfo &lhcInfo, std::ostream &os) const
run proton reconstruction using multiple-RP strategy
Definition: ProtonReconstructionAlgorithm.cc:170
TtSemiLepJetCombMVATrainer_cfi.matching
matching
Definition: TtSemiLepJetCombMVATrainer_cfi.py:13
edm::Handle
Definition: AssociativeIterator.h:50
year_2016_cff.rpIds
rpIds
Definition: year_2016_cff.py:19
ESGetToken.h
CTPPSProtonProducer::opticalFunctionsToken_
edm::ESGetToken< LHCInterpolatedOpticalFunctionsSetCollection, CTPPSInterpolatedOpticsRcd > opticalFunctionsToken_
Definition: CTPPSProtonProducer.cc:138
ProtonReconstructionAlgorithm::reconstructFromSingleRP
reco::ForwardProton reconstructFromSingleRP(const CTPPSLocalTrackLiteRef &track, const LHCInfo &lhcInfo, std::ostream &os) const
run proton reconstruction using single-RP strategy
Definition: ProtonReconstructionAlgorithm.cc:404
heavyIonCSV_trainingSettings.idx
idx
Definition: heavyIonCSV_trainingSettings.py:5
LHCInterpolatedOpticalFunctionsSetCollection
Definition: LHCInterpolatedOpticalFunctionsSetCollection.h:10
CTPPSDetId::sdTrackingStrip
Definition: CTPPSDetId.h:44
CTPPSGeometry.h
MakerMacros.h
CTPPSProtonProducer::CTPPSProtonProducer
CTPPSProtonProducer(const edm::ParameterSet &)
Definition: CTPPSProtonProducer.cc:141
CTPPSProtonProducer::produce
void produce(edm::Event &, const edm::EventSetup &) override
Definition: CTPPSProtonProducer.cc:241
DEFINE_FWK_MODULE
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:16
CTPPSProtonProducer::AssociationCuts::xi_cut_value
double xi_cut_value
Definition: CTPPSProtonProducer.cc:73
edm::ConfigurationDescriptions::add
void add(std::string const &label, ParameterSetDescription const &psetDescription)
Definition: ConfigurationDescriptions.cc:57
ProtonReconstructionAlgorithm
Definition: ProtonReconstructionAlgorithm.h:25
w
const double w
Definition: UKUtility.cc:23
submitPVResolutionJobs.config
config
parse the configuration file
Definition: submitPVResolutionJobs.py:281
mathSSE::sqrt
T sqrt(T t)
Definition: SSEVec.h:19
DDAxes::z
CTPPSProtonProducer::AssociationCuts::x_cut_mean
double x_cut_mean
Definition: CTPPSProtonProducer.cc:69
edm::ESHandle< LHCInfo >
LHCInterpolatedOpticalFunctionsSetCollection.h
CTPPSProtonProducer::verbosity_
unsigned int verbosity_
Definition: CTPPSProtonProducer.cc:57
CTPPSProtonProducer::fillDescriptions
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
Definition: CTPPSProtonProducer.cc:185
ForwardProtonFwd.h
CTPPSProtonProducer::geometryToken_
edm::ESGetToken< CTPPSGeometry, VeryForwardRealGeometryRecord > geometryToken_
Definition: CTPPSProtonProducer.cc:139
LHCInfoRcd
Definition: LHCInfoRcd.h:24
CTPPSProtonProducer::pixelDiscardBXShiftedTracks_
bool pixelDiscardBXShiftedTracks_
Definition: CTPPSProtonProducer.cc:52
CTPPSDetId::sdTrackingPixel
Definition: CTPPSDetId.h:44
CTPPSProtonProducer::doSingleRPReconstruction_
bool doSingleRPReconstruction_
Definition: CTPPSProtonProducer.cc:59
edm::ConfigurationDescriptions
Definition: ConfigurationDescriptions.h:28
AlCaHLTBitMon_QueryRunRegistry.string
string
Definition: AlCaHLTBitMon_QueryRunRegistry.py:256
CTPPSpixelLocalTrackReconstructionInfo::mixedPlanes
reco::ForwardProtonCollection
std::vector< ForwardProton > ForwardProtonCollection
Collection of ForwardProton objects.
Definition: ForwardProtonFwd.h:25
edm::ParameterSet
Definition: ParameterSet.h:47
CTPPSProtonProducer::AssociationCuts::y_cut_mean
double y_cut_mean
Definition: CTPPSProtonProducer.cc:71
CTPPSProtonProducer::AssociationCuts::ti_tr_max
double ti_tr_max
Definition: CTPPSProtonProducer.cc:78
CTPPSProtonProducer::AssociationCuts::x_cut_apply
bool x_cut_apply
Definition: CTPPSProtonProducer.cc:68
Event.h
reco::ForwardProton::setTime
void setTime(float time)
Definition: ForwardProton.h:117
ForwardProton.h
CTPPSDetId
Base class for CTPPS detector IDs.
Definition: CTPPSDetId.h:31
CTPPSpixelLocalTrackReconstructionInfo::allShiftedPlanes
createfilelist.int
int
Definition: createfilelist.py:10
iEvent
int iEvent
Definition: GenABIO.cc:224
CTPPSInterpolatedOpticsRcd.h
edm::EventSetup::getHandle
ESHandle< T > getHandle(const ESGetToken< T, R > &iToken) const
Definition: EventSetup.h:148
CTPPSProtonProducer::opticsValid_
bool opticsValid_
Definition: CTPPSProtonProducer.cc:134
edm::stream::EDProducer
Definition: EDProducer.h:38
edm::EventSetup
Definition: EventSetup.h:57
edm::RefVector::push_back
void push_back(value_type const &ref)
Add a Ref<C, T> to the RefVector.
Definition: RefVector.h:67
CTPPSProtonProducer::AssociationCuts
Definition: CTPPSProtonProducer.cc:67
VeryForwardRealGeometryRecord.h
edm::ESGetToken< LHCInfo, LHCInfoRcd >
CTPPSProtonProducer
Definition: CTPPSProtonProducer.cc:37
alignCSCRings.r
r
Definition: alignCSCRings.py:93
submitPVResolutionJobs.desc
string desc
Definition: submitPVResolutionJobs.py:251
ESInputTag.h
eostools.move
def move(src, dest)
Definition: eostools.py:511
std
Definition: JetResolutionObject.h:76
CTPPSProtonProducer::AssociationCuts::th_y_cut_apply
bool th_y_cut_apply
Definition: CTPPSProtonProducer.cc:74
Frameworkfwd.h
ESWatcher.h
CTPPSProtonProducer::lhcInfoToken_
edm::ESGetToken< LHCInfo, LHCInfoRcd > lhcInfoToken_
Definition: CTPPSProtonProducer.cc:137
alignCSCRings.de_x
de_x
Definition: alignCSCRings.py:85
CTPPSLocalTrackLiteFwd.h
edm::ParameterSet::getParameter
T getParameter(std::string const &) const
Definition: ParameterSet.h:303
CTPPSDetId.h
CTPPSProtonProducer::AssociationCuts::th_y_cut_value
double th_y_cut_value
Definition: CTPPSProtonProducer.cc:75
reco::ForwardProton::setContributingLocalTracks
void setContributingLocalTracks(const CTPPSLocalTrackLiteRefVector &v)
store the list of RP tracks that contributed to this global track
Definition: ForwardProton.h:134
funct::abs
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
CTPPSProtonProducer::localAngleXMax_
double localAngleXMax_
Definition: CTPPSProtonProducer.cc:65
ParameterSet.h
LHCInfoRcd.h
dqmiolumiharvest.j
j
Definition: dqmiolumiharvest.py:66
ProtonReconstructionAlgorithm::release
void release()
Definition: ProtonReconstructionAlgorithm.cc:118
ntuplemaker.time
time
Definition: ntuplemaker.py:310
edm::Event
Definition: Event.h:73
CTPPSProtonProducer::AssociationCuts::x_cut_value
double x_cut_value
Definition: CTPPSProtonProducer.cc:69
CTPPSProtonProducer::singleRPReconstructionLabel_
std::string singleRPReconstructionLabel_
Definition: CTPPSProtonProducer.cc:62
CTPPSProtonProducer::max_n_timing_tracks_
unsigned int max_n_timing_tracks_
Definition: CTPPSProtonProducer.cc:129
ProtonReconstructionAlgorithm.h
reco::ForwardProton::setTimeError
void setTimeError(float time_err)
Definition: ForwardProton.h:121
CTPPSProtonProducer::localAngleYMax_
double localAngleYMax_
Definition: CTPPSProtonProducer.cc:65
CTPPSProtonProducer::AssociationCuts::y_cut_apply
bool y_cut_apply
Definition: CTPPSProtonProducer.cc:70
CTPPSProtonProducer::multiRPReconstructionLabel_
std::string multiRPReconstructionLabel_
Definition: CTPPSProtonProducer.cc:63
edm::InputTag
Definition: InputTag.h:15
edm::ParameterSet::getParameterSet
ParameterSet const & getParameterSet(std::string const &) const
Definition: ParameterSet.cc:2128
CTPPSProtonProducer::AssociationCuts::xi_cut_apply
bool xi_cut_apply
Definition: CTPPSProtonProducer.cc:72
CTPPSProtonProducer::localAngleXMin_
double localAngleXMin_
Definition: CTPPSProtonProducer.cc:65
CTPPSInterpolatedOpticsRcd
Definition: CTPPSInterpolatedOpticsRcd.h:13