CMS 3D CMS Logo

EvtPlaneProducer.cc
Go to the documentation of this file.
1 // -*- C++ -*-
2 //
3 // Package: EvtPlaneProducer
4 // Class: EvtPlaneProducer
5 //
13 //
14 // Original Author: Sergey Petrushanko
15 // Created: Fri Jul 11 10:05:00 2008
16 //
17 //
18 
19 // system include files
20 #include <memory>
21 #include <iostream>
22 #include <ctime>
23 #include <cmath>
24 #include <cstdlib>
25 
26 // user include files
31 
35 
40 
43 
47 
58 
63 
69 
70 using namespace std;
71 using namespace hi;
72 
73 //
74 // class decleration
75 //
76 
77 namespace hi {
78  class GenPlane {
79  public:
80  GenPlane(string name, double etaminval1, double etamaxval1, double etaminval2, double etamaxval2, int orderval) {
81  epname = name;
82  etamin1 = etaminval1;
83  etamax1 = etamaxval1;
84  etamin2 = etaminval2;
85  etamax2 = etamaxval2;
86  sumsin = 0;
87  sumcos = 0;
88  sumsinNoWgt = 0;
89  sumcosNoWgt = 0;
90 
91  mult = 0;
92  order = (double)orderval;
93  }
94  ~GenPlane() { ; }
95  void addParticle(double w, double PtOrEt, double s, double c, double eta) {
96  if ((eta >= etamin1 && eta < etamax1) || (etamin2 != etamax2 && eta >= etamin2 && eta < etamax2)) {
97  sumsin += w * s;
98  sumcos += w * c;
99  sumsinNoWgt += s;
100  sumcosNoWgt += c;
101 
102  sumw += fabs(w);
103  sumw2 += w * w;
104  sumPtOrEt += PtOrEt;
105  sumPtOrEt2 += PtOrEt * PtOrEt;
106  ++mult;
107  }
108  }
109 
110  double getAngle(double &ang,
111  double &sv,
112  double &cv,
113  double &svNoWgt,
114  double &cvNoWgt,
115  double &w,
116  double &w2,
117  double &PtOrEt,
118  double &PtOrEt2,
119  uint &epmult) {
120  ang = -10;
121  sv = sumsin;
122  cv = sumcos;
123  svNoWgt = sumsinNoWgt;
124  cvNoWgt = sumcosNoWgt;
125  w = sumw;
126  w2 = sumw2;
127  PtOrEt = sumPtOrEt;
128  PtOrEt2 = sumPtOrEt2;
129  epmult = mult;
130  double q = sv * sv + cv * cv;
131  if (q > 0)
132  ang = atan2(sv, cv) / order;
133  return ang;
134  }
135  void reset() {
136  sumsin = 0;
137  sumcos = 0;
138  sumsinNoWgt = 0;
139  sumcosNoWgt = 0;
140  sumw = 0;
141  sumw2 = 0;
142  mult = 0;
143  sumPtOrEt = 0;
144  sumPtOrEt2 = 0;
145  }
146 
147  private:
148  string epname;
149  double etamin1;
150  double etamax1;
151 
152  double etamin2;
153  double etamax2;
154  double sumsin;
155  double sumcos;
156  double sumsinNoWgt;
157  double sumcosNoWgt;
159  double sumw;
160  double sumw2;
161  double sumPtOrEt;
162  double sumPtOrEt2;
163  double order;
164  };
165 } // namespace hi
166 
168 public:
169  explicit EvtPlaneProducer(const edm::ParameterSet &);
170  ~EvtPlaneProducer() override;
171 
172 private:
174 
175  void produce(edm::Event &, const edm::EventSetup &) override;
176 
177  // ----------member data ---------------------------
179 
182 
185 
189 
194 
198 
207 
212 
215 
216  bool loadDB_;
217  double minet_;
218  double maxet_;
219  double minpt_;
220  double maxpt_;
222  double flatminvtx_;
223  double flatdelvtx_;
224  double dzdzerror_;
225  double d0d0error_;
226  double pterror_;
228  double dzerr_;
230  double chi2_;
234  double nCentBins_;
235  double caloCentRef_;
238  int cutEra_;
241 
244 
245  void fillHF(const TrackStructure &track, double vz, int bin) {
246  double minet = minet_;
247  double maxet = maxet_;
248  for (int i = 0; i < NumEPNames; i++) {
249  if (EPDet[i] != HF)
250  continue;
251  if (minet_ < 0)
252  minet = minTransverse[i];
253  if (maxet_ < 0)
254  maxet = maxTransverse[i];
255  if (track.et < minet)
256  continue;
257  if (track.et > maxet)
258  continue;
259  if (not passEta(track.eta, i))
260  continue;
261  double w = track.et;
262  if (loadDB_)
263  w = track.et * flat[i]->etScale(vz, bin);
264  if (EPOrder[i] == 1) {
265  if (MomConsWeight[i][0] == 'y' && loadDB_) {
266  w = flat[i]->getW(track.et, vz, bin);
267  }
268  }
269  rp[i]->addParticle(w, track.et, sin(EPOrder[i] * track.phi), cos(EPOrder[i] * track.phi), track.eta);
270  }
271  };
272 
273  void fillCastor(const TrackStructure &track, double vz, int bin) {
274  double minet = minet_;
275  double maxet = maxet_;
276  for (int i = 0; i < NumEPNames; i++) {
277  if (EPDet[i] == Castor) {
278  if (minet_ < 0)
279  minet = minTransverse[i];
280  if (maxet_ < 0)
281  maxet = maxTransverse[i];
282  if (track.et < minet)
283  continue;
284  if (track.et > maxet)
285  continue;
286  if (not passEta(track.eta, i))
287  continue;
288  double w = track.et;
289  if (EPOrder[i] == 1) {
290  if (MomConsWeight[i][0] == 'y' && loadDB_) {
291  w = flat[i]->getW(track.et, vz, bin);
292  }
293  }
294  rp[i]->addParticle(w, track.et, sin(EPOrder[i] * track.phi), cos(EPOrder[i] * track.phi), track.eta);
295  }
296  }
297  }
298 
299  bool passEta(float eta, int i) {
300  if (EPEtaMin2[i] == EPEtaMax2[i]) {
301  if (eta < EPEtaMin1[i])
302  return false;
303  if (eta > EPEtaMax1[i])
304  return false;
305  } else {
306  if (eta < EPEtaMin1[i])
307  return false;
308  if (eta > EPEtaMax2[i])
309  return false;
310  if (eta > EPEtaMax1[i] && eta < EPEtaMin2[i])
311  return false;
312  }
313  return true;
314  }
315 
316  void fillTracker(const TrackStructure &track, double vz, int bin) {
317  double minpt = minpt_;
318  double maxpt = maxpt_;
319  for (int i = 0; i < NumEPNames; i++) {
320  if (EPDet[i] == Tracker) {
321  if (minpt_ < 0)
322  minpt = minTransverse[i];
323  if (maxpt_ < 0)
324  maxpt = maxTransverse[i];
325  if (track.pt < minpt)
326  continue;
327  if (track.pt > maxpt)
328  continue;
329  if (not passEta(track.eta, i))
330  continue;
331  double w = track.pt;
332  if (w > 2.5)
333  w = 2.0; //v2 starts decreasing above ~2.5 GeV/c
334  if (EPOrder[i] == 1) {
335  if (MomConsWeight[i][0] == 'y' && loadDB_) {
336  w = flat[i]->getW(track.pt, vz, bin);
337  }
338  }
339  rp[i]->addParticle(w, track.pt, sin(EPOrder[i] * track.phi), cos(EPOrder[i] * track.phi), track.eta);
340  }
341  }
342  };
343 };
344 
346  : centralityVariable_(iConfig.getParameter<std::string>("centralityVariable")),
347  centralityBinTag_(iConfig.getParameter<edm::InputTag>("centralityBinTag")),
348  vertexTag_(iConfig.getParameter<edm::InputTag>("vertexTag")),
349  caloTag_(iConfig.getParameter<edm::InputTag>("caloTag")),
350  castorTag_(iConfig.getParameter<edm::InputTag>("castorTag")),
351  trackTag_(iConfig.getParameter<edm::InputTag>("trackTag")),
352  losttrackTag_(iConfig.getParameter<edm::InputTag>("lostTag")),
353  chi2MapTag_(iConfig.getParameter<edm::InputTag>("chi2MapTag")),
354  chi2MapLostTag_(iConfig.getParameter<edm::InputTag>("chi2MapLostTag")),
355  loadDB_(iConfig.getParameter<bool>("loadDB")),
356  minet_(iConfig.getParameter<double>("minet")),
357  maxet_(iConfig.getParameter<double>("maxet")),
358  minpt_(iConfig.getParameter<double>("minpt")),
359  maxpt_(iConfig.getParameter<double>("maxpt")),
360  flatnvtxbins_(iConfig.getParameter<int>("flatnvtxbins")),
361  flatminvtx_(iConfig.getParameter<double>("flatminvtx")),
362  flatdelvtx_(iConfig.getParameter<double>("flatdelvtx")),
363  dzdzerror_(iConfig.getParameter<double>("dzdzerror")),
364  d0d0error_(iConfig.getParameter<double>("d0d0error")),
365  pterror_(iConfig.getParameter<double>("pterror")),
366  chi2perlayer_(iConfig.getParameter<double>("chi2perlayer")),
367  dzdzerror_pix_(iConfig.getParameter<double>("dzdzerror_pix")),
368  chi2_(iConfig.getParameter<double>("chi2")),
369  nhitsValid_(iConfig.getParameter<int>("nhitsValid")),
370  FlatOrder_(iConfig.getParameter<int>("FlatOrder")),
371  NumFlatBins_(iConfig.getParameter<int>("NumFlatBins")),
372  caloCentRef_(iConfig.getParameter<double>("caloCentRef")),
373  caloCentRefWidth_(iConfig.getParameter<double>("caloCentRefWidth")),
374  CentBinCompression_(iConfig.getParameter<int>("CentBinCompression")),
375  cutEra_(iConfig.getParameter<int>("cutEra"))
376 
377 {
378  if (cutEra_ > 3)
379  throw edm::Exception(edm::errors::Configuration) << "wrong range in cutEra parameter";
380  cuts_ = EPCuts(
382  nCentBins_ = 200.;
383 
384  if (iConfig.exists("nonDefaultGlauberModel")) {
385  centralityMC_ = iConfig.getParameter<std::string>("nonDefaultGlauberModel");
386  }
388  if (loadDB_) {
390  }
391 
392  centralityBinToken_ = consumes<int>(centralityBinTag_);
393 
394  vertexToken_ = consumes<std::vector<reco::Vertex>>(vertexTag_);
395 
396  bStrack_packedPFCandidates_ = (trackTag_.label().find("packedPFCandidates") != std::string::npos);
397  bScalo_particleFlow_ = (caloTag_.label().find("particleFlow") != std::string::npos);
399  packedToken_ = consumes<pat::PackedCandidateCollection>(trackTag_);
400  lostToken_ = consumes<pat::PackedCandidateCollection>(losttrackTag_);
401  chi2MapToken_ = consumes<edm::ValueMap<float>>(chi2MapTag_);
402  chi2MapLostToken_ = consumes<edm::ValueMap<float>>(chi2MapLostTag_);
403 
404  } else {
405  if (bScalo_particleFlow_) {
406  caloTokenPF_ = consumes<reco::PFCandidateCollection>(caloTag_);
407  } else {
408  caloToken_ = consumes<CaloTowerCollection>(caloTag_);
409  }
410  castorToken_ = consumes<std::vector<reco::CastorTower>>(castorTag_);
411  trackToken_ = consumes<reco::TrackCollection>(trackTag_);
412  }
413 
414  produces<reco::EvtPlaneCollection>();
415  for (int i = 0; i < NumEPNames; i++) {
417  }
418  for (int i = 0; i < NumEPNames; i++) {
419  flat[i] = new HiEvtPlaneFlatten();
421  }
422 }
423 
425  // do anything here that needs to be done at desctruction time
426  // (e.g. close files, deallocate resources etc.)
427  for (int i = 0; i < NumEPNames; i++) {
428  delete flat[i];
429  }
430 }
431 
432 //
433 // member functions
434 //
435 
436 // ------------ method called to produce the data ------------
438  using namespace edm;
439  using namespace std;
440  using namespace reco;
441  if (hiWatcher_.check(iSetup)) {
442  //
443  //Get Size of Centrality Table
444  //
445  auto const &centDB = iSetup.getData(centralityToken_);
446  nCentBins_ = centDB.m_table.size();
447  for (int i = 0; i < NumEPNames; i++) {
448  if (caloCentRef_ > 0) {
449  int minbin = (caloCentRef_ - caloCentRefWidth_ / 2.) * nCentBins_ / 100.;
450  int maxbin = (caloCentRef_ + caloCentRefWidth_ / 2.) * nCentBins_ / 100.;
451  minbin /= CentBinCompression_;
452  maxbin /= CentBinCompression_;
453  if (minbin > 0 && maxbin >= minbin) {
454  if (EPDet[i] == HF || EPDet[i] == Castor)
455  flat[i]->setCaloCentRefBins(minbin, maxbin);
456  }
457  }
458  }
459  }
460  //
461  //Get flattening parameter file.
462  //
463  if (loadDB_ && hirpWatcher_.check(iSetup)) {
465  if (!db.IsSuccess()) {
466  loadDB_ = kFALSE;
467  }
468  }
469  //
470  //Get Centrality
471  //
472  int bin = 0;
473  int cbin = 0;
474  if (loadDB_) {
475  cbin = iEvent.get(centralityBinToken_);
476  bin = cbin / CentBinCompression_;
477  }
478  //
479  //Get Vertex
480  //
481  //best vertex
482  const reco::Vertex &vtx = iEvent.get(vertexToken_)[0];
483  double bestvz = vtx.z();
484  double bestvx = vtx.x();
485  double bestvy = vtx.y();
486  double bestvzError = vtx.zError();
487  math::XYZPoint bestvtx(bestvx, bestvy, bestvz);
488  math::Error<3>::type vtx_cov = vtx.covariance();
489 
490  for (int i = 0; i < NumEPNames; i++)
491  rp[i]->reset();
496  for (int idx = 1; idx < 3; idx++) {
497  if (idx == 1) {
498  iEvent.getByToken(packedToken_, cands);
499  iEvent.getByToken(chi2MapToken_, chi2Map);
500  }
501  if (idx == 2) {
502  iEvent.getByToken(lostToken_, cands);
503  iEvent.getByToken(chi2MapLostToken_, chi2Map);
504  }
505  for (unsigned int i = 0, n = cands->size(); i < n; ++i) {
506  track_ = {};
507  track_.centbin = cbin;
508  const pat::PackedCandidate &pf = (*cands)[i];
509  track_.et = pf.et();
510  track_.eta = pf.eta();
511  track_.phi = pf.phi();
512  track_.pdgid = pf.pdgId();
513  if ((idx == 1) and cuts_.isGoodHF(track_)) {
514  fillHF(track_, bestvz, bin);
515  }
516  if (!pf.hasTrackDetails())
517  continue;
518  const reco::Track &trk = pf.pseudoTrack();
519  track_.highPurity = pf.trackHighPurity();
520  track_.charge = trk.charge();
521  if (!track_.highPurity || track_.charge == 0)
522  continue;
524  track_.eta = trk.eta();
525  track_.phi = trk.phi();
526  track_.pt = trk.pt();
527  track_.ptError = trk.ptError();
529  track_.algos = trk.algo();
530  track_.dz = std::abs(trk.dz(bestvtx));
531  track_.dxy = std::abs(trk.dxy(bestvtx));
532  track_.dzError = std::hypot(trk.dzError(), bestvzError);
533  track_.dxyError = trk.dxyError(bestvtx, vtx_cov);
536  const reco::HitPattern &hit_pattern = trk.hitPattern();
539  if (cuts_.isGoodTrack(track_)) {
540  fillTracker(track_, bestvz, bin);
541  }
542  }
543  }
544  } else {
545  //calorimetry part
546  if (bScalo_particleFlow_) {
547  iEvent.getByToken(caloTokenPF_, calocands);
548  for (unsigned int i = 0, n = calocands->size(); i < n; ++i) {
549  track_ = {};
550  track_.centbin = cbin;
551  const reco::PFCandidate &pf = (*calocands)[i];
552  track_.et = pf.et();
553  track_.eta = pf.eta();
554  track_.phi = pf.phi();
555  track_.pdgid = pf.pdgId();
556  if (cuts_.isGoodHF(track_)) {
557  fillHF(track_, bestvz, bin);
558  }
559  }
560  } else {
561  iEvent.getByToken(caloToken_, caloCollection_);
562  for (const auto &tower : *caloCollection_) {
563  track_.eta = tower.eta();
564  track_.phi = tower.phi();
565  track_.et = tower.emEt() + tower.hadEt();
566  track_.pdgid = 1;
567  if (cuts_.isGoodHF(track_))
568  fillHF(track_, bestvz, bin);
569  }
570  }
571 
572  //Castor part
574  for (const auto &tower : *castorCollection_) {
575  track_.eta = tower.eta();
576  track_.phi = tower.phi();
577  track_.et = tower.et();
578  track_.pdgid = 1;
580  fillCastor(track_, bestvz, bin);
581  }
582  //Tracking part
583  iEvent.getByToken(trackToken_, trackCollection_);
584  for (const auto &trk : *trackCollection_) {
586  track_.charge = trk.charge();
587  if (!track_.highPurity || track_.charge == 0)
588  continue;
589  track_.centbin = cbin;
590  track_.collection = 0;
591  track_.eta = trk.eta();
592  track_.phi = trk.phi();
593  track_.pt = trk.pt();
594  track_.ptError = trk.ptError();
595  track_.numberOfValidHits = trk.numberOfValidHits();
596  track_.algos = trk.algo();
597  track_.dz = std::abs(trk.dz(bestvtx));
598  track_.dxy = std::abs(trk.dxy(bestvtx));
599  track_.dzError = std::hypot(trk.dzError(), bestvzError);
600  track_.dxyError = trk.dxyError(bestvtx, vtx_cov);
603  track_.normalizedChi2 = trk.normalizedChi2();
604  track_.chi2layer = track_.normalizedChi2 / trk.hitPattern().trackerLayersWithMeasurement();
605  if (cuts_.isGoodTrack(track_))
606  fillTracker(track_, bestvz, bin);
607  }
608  }
609 
610  auto evtplaneOutput = std::make_unique<EvtPlaneCollection>();
611 
612  double ang = -10;
613  double sv = 0;
614  double cv = 0;
615  double svNoWgt = 0;
616  double cvNoWgt = 0;
617 
618  double wv = 0;
619  double wv2 = 0;
620  double pe = 0;
621  double pe2 = 0;
622  uint epmult = 0;
623 
624  for (int i = 0; i < NumEPNames; i++) {
625  rp[i]->getAngle(ang, sv, cv, svNoWgt, cvNoWgt, wv, wv2, pe, pe2, epmult);
626  evtplaneOutput->push_back(EvtPlane(i, 0, ang, sv, cv, wv, wv2, pe, pe2, epmult));
627  evtplaneOutput->back().addLevel(3, 0., svNoWgt, cvNoWgt);
628  }
629 
630  iEvent.put(std::move(evtplaneOutput));
631 }
632 
633 //define this as a plug-in
edm::InputTag centralityBinTag_
edm::EDGetTokenT< reco::TrackCollection > trackToken_
ESGetTokenH3DDVariant esConsumes(std::string const &Record, edm::ConsumesCollector &)
Definition: DeDxTools.cc:283
T getParameter(std::string const &) const
Definition: ParameterSet.h:307
edm::Handle< CaloTowerCollection > caloCollection_
MPlex< T, D1, D2, N > hypot(const MPlex< T, D1, D2, N > &a, const MPlex< T, D1, D2, N > &b)
Definition: Matriplex.h:436
T const & getData(const ESGetToken< T, R > &iToken) const noexcept(false)
Definition: EventSetup.h:119
common ppss p3p6s2 common epss epspn46 common const1 w2
Definition: inclppp.h:1
edm::Handle< reco::TrackCollection > trackCollection_
edm::InputTag caloTag_
double ptError() const
error on Pt (set to 1000 TeV if charge==0 for safety)
Definition: TrackBase.h:754
unsigned short numberOfValidHits() const
number of valid hits found
Definition: TrackBase.h:798
std::string centralityMC_
T w() const
const std::array< std::string, NumEPNames > MomConsWeight
int trackerLayersWithMeasurement() const
Definition: HitPattern.cc:535
Sin< T >::type sin(const T &t)
Definition: Sin.h:22
bool exists(std::string const &parameterName) const
checks if a parameter exists
void setCaloCentRefBins(const int caloCentRefMinBin, const int caloCentRefMaxBin)
bool passEta(float eta, int i)
ErrorD< N >::type type
Definition: Error.h:32
double getW(double pt, double vtx, int centbin) const
edm::ESGetToken< CentralityTable, HeavyIonRcd > centralityToken_
cv
Definition: cuy.py:363
const std::array< double, NumEPNames > EPEtaMin2
std::string const & label() const
Definition: InputTag.h:36
const std::array< double, NumEPNames > EPEtaMax1
edm::EDGetTokenT< pat::PackedCandidateCollection > packedToken_
edm::ESWatcher< HeavyIonRcd > hiWatcher_
void fillHF(const TrackStructure &track, double vz, int bin)
void produce(edm::Event &, const edm::EventSetup &) override
float chi2layer
Definition: EPCuts.h:29
edm::EDGetTokenT< pat::PackedCandidateCollection > lostToken_
double pt() const
track transverse momentum
Definition: TrackBase.h:637
TrackStructure track_
int charge() const
track electric charge
Definition: TrackBase.h:596
const std::array< double, NumEPNames > maxTransverse
double dz() const
dz parameter (= dsz/cos(lambda)). This is the track z0 w.r.t (0,0,0) only if the refPoint is close to...
Definition: TrackBase.h:622
int iEvent
Definition: GenABIO.cc:224
bool isGoodTrack(const TrackStructure &track) const
Definition: EPCuts.h:64
float dxyError
Definition: EPCuts.h:22
double dxyError() const
error on dxy
Definition: TrackBase.h:769
GenPlane * rp[NumEPNames]
Definition: EPCuts.h:4
double dzError() const
error on dz
Definition: TrackBase.h:778
edm::EDGetTokenT< std::vector< reco::Vertex > > vertexToken_
Cos< T >::type cos(const T &t)
Definition: Cos.h:22
void fillTracker(const TrackStructure &track, double vz, int bin)
HiEvtPlaneFlatten * flat[NumEPNames]
edm::Ref< pat::PackedCandidateCollection > PackedCandidateRef
void addParticle(double w, double PtOrEt, double s, double c, double eta)
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
double phi() const
azimuthal angle of momentum vector
Definition: TrackBase.h:649
const std::array< int, NumEPNames > EPDet
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:16
edm::EDGetTokenT< int > centralityBinToken_
GenPlane(string name, double etaminval1, double etamaxval1, double etaminval2, double etamaxval2, int orderval)
bool isGoodHF(const TrackStructure &track) const
Definition: EPCuts.h:54
edm::InputTag vertexTag_
int numberOfValidHits
Definition: EPCuts.h:30
edm::InputTag chi2MapLostTag_
EvtPlaneProducer(const edm::ParameterSet &)
edm::ESGetToken< RPFlatParams, HeavyIonRPRcd > flatparmsToken_
edm::InputTag chi2MapTag_
edm::Handle< std::vector< reco::CastorTower > > castorCollection_
const std::array< double, NumEPNames > minTransverse
const std::array< double, NumEPNames > EPEtaMin1
void init(int order, int nbins, int nvtxbins=10, double minvtx=-25, double delvtx=5, std::string tag="", int vord=2)
std::string centralityVariable_
double etScale(double vtx, int centbin) const
void fillCastor(const TrackStructure &track, double vz, int bin)
double eta() const
pseudorapidity of momentum vector
Definition: TrackBase.h:652
TrackAlgorithm algo() const
Definition: TrackBase.h:547
const HitPattern & hitPattern() const
Access the hit pattern, indicating in which Tracker layers the track has hits.
Definition: TrackBase.h:504
XYZPointD XYZPoint
point in space with cartesian internal representation
Definition: Point3D.h:12
float normalizedChi2
Definition: EPCuts.h:27
bool check(const edm::EventSetup &iSetup)
Definition: ESWatcher.h:57
~EvtPlaneProducer() override
const std::array< double, NumEPNames > EPEtaMax2
Particle reconstructed by the particle flow algorithm.
Definition: PFCandidate.h:41
fixed size matrix
HLT enums.
edm::EDGetTokenT< reco::PFCandidateCollection > caloTokenPF_
edm::ESWatcher< HeavyIonRPRcd > hirpWatcher_
const std::array< int, NumEPNames > EPOrder
const std::array< std::string, NumEPNames > EPNames
edm::EDGetTokenT< edm::ValueMap< float > > chi2MapLostToken_
edm::EDGetTokenT< CaloTowerCollection > caloToken_
static const int NumEPNames
edm::EDGetTokenT< std::vector< reco::CastorTower > > castorToken_
bool isGoodCastor(const TrackStructure &track) const
Definition: EPCuts.h:62
double getAngle(double &ang, double &sv, double &cv, double &svNoWgt, double &cvNoWgt, double &w, double &w2, double &PtOrEt, double &PtOrEt2, uint &epmult)
void reset(double vett[256])
Definition: TPedValues.cc:11
edm::InputTag castorTag_
def move(src, dest)
Definition: eostools.py:511
edm::Handle< std::vector< reco::Vertex > > vertex_
double dxy() const
dxy parameter. (This is the transverse impact parameter w.r.t. to (0,0,0) ONLY if refPoint is close t...
Definition: TrackBase.h:608
edm::EDGetTokenT< edm::ValueMap< float > > chi2MapToken_
edm::InputTag trackTag_
edm::InputTag losttrackTag_