CMS 3D CMS Logo

GoodSeedProducer.cc
Go to the documentation of this file.
1 // -*- C++ -*-
2 //
3 // Package: PFTracking
4 // Class: GoodSeedProducer
5 //
6 // Original Author: Michele Pioppi
7 // March 2010. F. Beaudette. Produce PreId information
8 
12 
30 
32 
33 #include <fstream>
34 #include <string>
35 #include "TMath.h"
36 #include "Math/VectorUtil.h"
37 
38 using namespace edm;
39 using namespace std;
40 using namespace reco;
41 
43  : pfTransformer_(nullptr), conf_(iConfig), resMapEtaECAL_(nullptr), resMapPhiECAL_(nullptr) {
44  LogInfo("GoodSeedProducer") << "Electron PreIdentification started ";
45 
46  //now do what ever initialization is needed
47  std::vector<edm::InputTag> tags = iConfig.getParameter<vector<InputTag>>("TkColList");
48  for (unsigned int i = 0; i < tags.size(); ++i) {
49  trajContainers_.push_back(consumes<vector<Trajectory>>(tags[i]));
50  tracksContainers_.push_back(consumes<reco::TrackCollection>(tags[i]));
51  }
52 
53  minPt_ = iConfig.getParameter<double>("MinPt");
54  maxPt_ = iConfig.getParameter<double>("MaxPt");
55  maxEta_ = iConfig.getParameter<double>("MaxEta");
56 
57  HcalIsolWindow_ = iConfig.getParameter<double>("HcalWindow");
58  EcalStripSumE_minClusEnergy_ = iConfig.getParameter<double>("EcalStripSumE_minClusEnergy");
59  EcalStripSumE_deltaEta_ = iConfig.getParameter<double>("EcalStripSumE_deltaEta");
60  EcalStripSumE_deltaPhiOverQ_minValue_ = iConfig.getParameter<double>("EcalStripSumE_deltaPhiOverQ_minValue");
61  EcalStripSumE_deltaPhiOverQ_maxValue_ = iConfig.getParameter<double>("EcalStripSumE_deltaPhiOverQ_maxValue");
62  minEoverP_ = iConfig.getParameter<double>("EOverPLead_minValue");
63  maxHoverP_ = iConfig.getParameter<double>("HOverPLead_maxValue");
64 
65  pfCLusTagECLabel_ = consumes<reco::PFClusterCollection>(iConfig.getParameter<InputTag>("PFEcalClusterLabel"));
66 
67  pfCLusTagHCLabel_ = consumes<reco::PFClusterCollection>(iConfig.getParameter<InputTag>("PFHcalClusterLabel"));
68 
69  pfCLusTagPSLabel_ = consumes<reco::PFClusterCollection>(iConfig.getParameter<InputTag>("PFPSClusterLabel"));
70 
71  preidgsf_ = iConfig.getParameter<string>("PreGsfLabel");
72  preidckf_ = iConfig.getParameter<string>("PreCkfLabel");
73  preidname_ = iConfig.getParameter<string>("PreIdLabel");
74 
75  fitterName_ = iConfig.getParameter<string>("Fitter");
76  smootherName_ = iConfig.getParameter<string>("Smoother");
77 
78  nHitsInSeed_ = iConfig.getParameter<int>("NHitsInSeed");
79 
80  clusThreshold_ = iConfig.getParameter<double>("ClusterThreshold");
81 
82  minEp_ = iConfig.getParameter<double>("MinEOverP");
83  maxEp_ = iConfig.getParameter<double>("MaxEOverP");
84 
85  //collection to produce
86  produceCkfseed_ = iConfig.getUntrackedParameter<bool>("ProduceCkfSeed", false);
87 
88  // to disable the electron part (for HI collisions for examples)
89  disablePreId_ = iConfig.getUntrackedParameter<bool>("DisablePreId", false);
90 
91  producePreId_ = iConfig.getUntrackedParameter<bool>("ProducePreId", true);
92  // if no electron, cannot produce the preid
93  if (disablePreId_)
94  producePreId_ = false;
95  PtThresholdSavePredId_ = iConfig.getUntrackedParameter<double>("PtThresholdSavePreId", 1.);
96 
97  LogDebug("GoodSeedProducer") << "Seeds for GSF will be produced ";
98 
99  // no disablePreId_ switch here. The collection will be empty if it is true
100  produces<ElectronSeedCollection>(preidgsf_);
101 
102  if (produceCkfseed_) {
103  LogDebug("GoodSeedProducer") << "Seeds for CKF will be produced ";
104  produces<TrajectorySeedCollection>(preidckf_);
105  }
106 
107  if (producePreId_) {
108  LogDebug("GoodSeedProducer") << "PreId debugging information will be produced ";
109 
110  produces<PreIdCollection>(preidname_);
111  if (tracksContainers_.size() == 1) // do not make a value map if more than one input track collection
112  produces<edm::ValueMap<reco::PreIdRef>>(preidname_);
113  }
114 
115  useQuality_ = iConfig.getParameter<bool>("UseQuality");
116  trackQuality_ = TrackBase::qualityByName(iConfig.getParameter<std::string>("TrackQuality"));
117 
118  useTmva_ = iConfig.getUntrackedParameter<bool>("UseTMVA", false);
119 
120  Min_dr_ = iConfig.getParameter<double>("Min_dr");
121 
122  trackerRecHitBuilderName_ = iConfig.getParameter<std::string>("TTRHBuilder");
123 }
124 
125 //
126 // member functions
127 //
128 
129 // ------------ method called to produce the data ------------
131  LogDebug("GoodSeedProducer") << "START event: " << iEvent.id().event() << " in run " << iEvent.id().run();
132  //Create empty output collections
133  auto output_preid = std::make_unique<ElectronSeedCollection>();
134  auto output_nopre = std::make_unique<TrajectorySeedCollection>();
135  auto output_preidinfo = std::make_unique<PreIdCollection>();
136  auto preIdMap_p = std::make_unique<edm::ValueMap<reco::PreIdRef>>();
137  edm::ValueMap<reco::PreIdRef>::Filler mapFiller(*preIdMap_p);
138 
139  //Tracking Tools
140  if (!disablePreId_) {
143  iSetup.get<TrajectoryFitter::Record>().get(fitterName_, aFitter);
144  iSetup.get<TrajectoryFitter::Record>().get(smootherName_, aSmoother);
145  smoother_.reset(aSmoother->clone());
146  fitter_ = aFitter->clone();
147  edm::ESHandle<TransientTrackingRecHitBuilder> theTrackerRecHitBuilder;
148  iSetup.get<TransientRecHitRecord>().get(trackerRecHitBuilderName_, theTrackerRecHitBuilder);
149  hitCloner = static_cast<TkTransientTrackingRecHitBuilder const*>(theTrackerRecHitBuilder.product())->cloner();
150  fitter_->setHitCloner(&hitCloner);
151  smoother_->setHitCloner(&hitCloner);
152  }
153 
154  // clear temporary maps
155  refMap_.clear();
156 
157  //Magnetic Field
159  iSetup.get<IdealMagneticFieldRecord>().get(magneticField);
160 
161  //Handle input collections
162  //ECAL clusters
163  Handle<PFClusterCollection> theECPfClustCollection;
164  iEvent.getByToken(pfCLusTagECLabel_, theECPfClustCollection);
165 
166  vector<PFCluster const*> basClus;
167  for (auto const& klus : *theECPfClustCollection.product()) {
168  if (klus.correctedEnergy() > clusThreshold_)
169  basClus.push_back(&klus);
170  }
171 
172  //HCAL clusters
173  Handle<PFClusterCollection> theHCPfClustCollection;
174  iEvent.getByToken(pfCLusTagHCLabel_, theHCPfClustCollection);
175 
176  //PS clusters
177  Handle<PFClusterCollection> thePSPfClustCollection;
178  iEvent.getByToken(pfCLusTagPSLabel_, thePSPfClustCollection);
179 
180  //Vector of track collections
181  for (unsigned int istr = 0; istr < tracksContainers_.size(); ++istr) {
182  //Track collection
183  Handle<TrackCollection> tkRefCollection;
184  iEvent.getByToken(tracksContainers_[istr], tkRefCollection);
185  const TrackCollection& Tk = *(tkRefCollection.product());
186 
187  LogDebug("GoodSeedProducer") << "Number of tracks in collection "
188  << "tracksContainers_[" << istr << "] to be analyzed " << Tk.size();
189 
190  //loop over the track collection
191  for (unsigned int i = 0; i < Tk.size(); ++i) {
192  if (useQuality_ && (!(Tk[i].quality(trackQuality_))))
193  continue;
194 
195  reco::PreId myPreId;
196  bool GoodPreId = false;
197 
198  TrackRef trackRef(tkRefCollection, i);
199  math::XYZVectorF tkmom(Tk[i].momentum());
200  auto tketa = tkmom.eta();
201  auto tkpt = std::sqrt(tkmom.perp2());
202  auto const& Seed = (*trackRef->seedRef());
203  if (!disablePreId_) {
204  int ipteta = getBin(Tk[i].eta(), Tk[i].pt());
205  int ibin = ipteta * 9;
206 
207  // FIXME the original code was buggy should be outerMomentum...
208  float oPTOB = 1.f / std::sqrt(Tk[i].innerMomentum().mag2());
209  // float chikfred=Tk[i].normalizedChi2();
210  float nchi = Tk[i].normalizedChi2();
211 
212  int nhitpi = Tk[i].found();
213  float EP = 0;
214 
215  // set track info
216  myPreId.setTrack(trackRef);
217  //CLUSTERS - TRACK matching
218 
219  auto pfmass = 0.0005;
220  auto pfoutenergy = sqrt((pfmass * pfmass) + Tk[i].outerMomentum().Mag2());
221 
223  Tk[i].outerMomentum().x(), Tk[i].outerMomentum().y(), Tk[i].outerMomentum().z(), pfoutenergy);
225  XYZTLorentzVector(Tk[i].outerPosition().x(), Tk[i].outerPosition().y(), Tk[i].outerPosition().z(), 0.);
226 
227  BaseParticlePropagator theOutParticle(RawParticle(mom, pos, Tk[i].charge()), 0, 0, B_.z());
228 
229  theOutParticle.propagateToEcalEntrance(false);
230 
231  float toteta = 1000.f;
232  float totphi = 1000.f;
233  float dr = 1000.f;
234  float EE = 0.f;
235  float feta = 0.f;
236  GlobalPoint ElecTrkEcalPos(0, 0, 0);
237 
238  PFClusterRef clusterRef;
239  math::XYZPoint meanShowerSaved;
240  if (theOutParticle.getSuccess() != 0) {
241  ElecTrkEcalPos = GlobalPoint(theOutParticle.particle().vertex().x(),
242  theOutParticle.particle().vertex().y(),
243  theOutParticle.particle().vertex().z());
244 
245  constexpr float psLim = 2.50746495928f; // std::sinh(1.65f);
246  bool isBelowPS = (ElecTrkEcalPos.z() * ElecTrkEcalPos.z()) > (psLim * psLim) * ElecTrkEcalPos.perp2();
247  // bool isBelowPS=(std::abs(ElecTrkEcalPos.eta())>1.65f);
248 
249  unsigned clusCounter = 0;
250  float max_ee = 0;
251  for (auto aClus : basClus) {
252  float tmp_ep = float(aClus->correctedEnergy()) * oPTOB;
253  if ((tmp_ep < minEp_) | (tmp_ep > maxEp_)) {
254  ++clusCounter;
255  continue;
256  }
257 
258  double ecalShowerDepth = PFCluster::getDepthCorrection(aClus->correctedEnergy(), isBelowPS, false);
259  auto mom = theOutParticle.particle().momentum().Vect();
260  auto meanShower = ElecTrkEcalPos + GlobalVector(mom.x(), mom.y(), mom.z()).unit() * ecalShowerDepth;
261 
262  float etarec = meanShower.eta();
263  float phirec = meanShower.phi();
264 
265  float tmp_phi = std::abs(aClus->positionREP().phi() - phirec);
266  if (tmp_phi > float(TMath::Pi()))
267  tmp_phi -= float(TMath::TwoPi());
268 
269  float tmp_dr = std::sqrt(std::pow(tmp_phi, 2.f) + std::pow(aClus->positionREP().eta() - etarec, 2.f));
270 
271  if (tmp_dr < dr) {
272  dr = tmp_dr;
273  if (dr < Min_dr_) { // find the most closest and energetic ECAL cluster
274  if (aClus->correctedEnergy() > max_ee) {
275  toteta = aClus->positionREP().eta() - etarec;
276  totphi = tmp_phi;
277  EP = tmp_ep;
278  EE = aClus->correctedEnergy();
279  feta = aClus->positionREP().eta();
280  clusterRef = PFClusterRef(theECPfClustCollection, clusCounter);
281  meanShowerSaved = meanShower;
282  }
283  }
284  }
285  ++clusCounter;
286  }
287  }
288  float trk_ecalDeta_ = fabs(toteta);
289  float trk_ecalDphi_ = fabs(totphi);
290 
291  //Resolution maps
292  auto ecaletares = resMapEtaECAL_->GetBinContent(resMapEtaECAL_->FindBin(feta, EE));
293  auto ecalphires = resMapPhiECAL_->GetBinContent(resMapPhiECAL_->FindBin(feta, EE));
294 
295  //geomatrical compatibility
296  float chieta = (toteta != 1000.f) ? toteta / ecaletares : toteta;
297  float chiphi = (totphi != 1000.f) ? totphi / ecalphires : totphi;
298  float chichi = sqrt(chieta * chieta + chiphi * chiphi);
299 
300  //Matching criteria
301  float eta_cut = thr[ibin + 0];
302  float phi_cut = thr[ibin + 1];
303  float ep_cutmin = thr[ibin + 2];
304  bool GoodMatching =
305  ((trk_ecalDeta_ < eta_cut) && (trk_ecalDphi_ < phi_cut) && (EP > ep_cutmin) && (nhitpi > 10));
306 
307  bool EcalMatching = GoodMatching;
308 
309  if (tkpt > maxPt_)
310  GoodMatching = true;
311  if (tkpt < minPt_)
312  GoodMatching = false;
313 
314  math::XYZPoint myPoint(ElecTrkEcalPos.x(), ElecTrkEcalPos.y(), ElecTrkEcalPos.z());
316  clusterRef, myPoint, meanShowerSaved, std::abs(toteta), std::abs(totphi), chieta, chiphi, chichi, EP);
317  myPreId.setECALMatching(EcalMatching);
318 
319  bool GoodRange = ((std::abs(tketa) < maxEta_) & (tkpt > minPt_));
320  //KF FILTERING FOR UNMATCHED EVENTS
321  int hit1max = int(thr[ibin + 3]);
322  float chiredmin = thr[ibin + 4];
323  bool GoodKFFiltering = ((nchi > chiredmin) | (nhitpi < hit1max));
324 
325  myPreId.setTrackFiltering(GoodKFFiltering);
326 
327  bool GoodTkId = false;
328 
329  if ((!GoodMatching) && (GoodKFFiltering) && (GoodRange)) {
330  chired = 1000;
331  chiRatio = 1000;
332  dpt = 0;
333  nhit = nhitpi;
334  chikfred = nchi;
335  trk_ecalDeta = trk_ecalDeta_;
336  trk_ecalDphi = trk_ecalDphi_;
337 
339  for (auto const& hit : Tk[i].recHits())
340  tmp.push_back(hit->cloneSH());
341  auto const& theTrack = Tk[i];
342  GlobalVector gv(theTrack.innerMomentum().x(), theTrack.innerMomentum().y(), theTrack.innerMomentum().z());
343  GlobalPoint gp(theTrack.innerPosition().x(), theTrack.innerPosition().y(), theTrack.innerPosition().z());
344  GlobalTrajectoryParameters gtps(gp, gv, theTrack.charge(), &*magneticField);
345  TrajectoryStateOnSurface tsos(gtps, theTrack.innerStateCovariance(), *tmp[0]->surface());
346  Trajectory&& FitTjs = fitter_->fitOne(Seed, tmp, tsos);
347 
348  if (FitTjs.isValid()) {
349  Trajectory&& SmooTjs = smoother_->trajectory(FitTjs);
350  if (SmooTjs.isValid()) {
351  //Track refitted with electron hypothesis
352 
353  float pt_out = SmooTjs.firstMeasurement().updatedState().globalMomentum().perp();
354  float pt_in = SmooTjs.lastMeasurement().updatedState().globalMomentum().perp();
355  dpt = (pt_in > 0) ? fabs(pt_out - pt_in) / pt_in : 0.;
356  // the following is simply the number of degrees of freedom
357  chiRatio = SmooTjs.chiSquared() / Tk[i].chi2();
359  }
360  }
361 
362  //TMVA Analysis
363  if (useTmva_) {
364  eta = tketa;
365  pt = tkpt;
366  eP = EP;
368 
369  float Ytmva = globalCache()->gbr[ipteta]->GetClassifier(vars);
370 
371  float BDTcut = thr[ibin + 5];
372  if (Ytmva > BDTcut)
373  GoodTkId = true;
374  myPreId.setMVA(GoodTkId, Ytmva);
376  } else {
377  float chiratiocut = thr[ibin + 6];
378  float gschicut = thr[ibin + 7];
379  float gsptmin = thr[ibin + 8];
380 
381  GoodTkId = ((dpt > gsptmin) & (chired < gschicut) & (chiRatio < chiratiocut));
382  }
383  }
384 
385  GoodPreId = GoodTkId | GoodMatching;
386 
387  myPreId.setFinalDecision(GoodPreId);
388 
389 #ifdef EDM_ML_DEBUG
390  if (GoodPreId)
391  LogDebug("GoodSeedProducer") << "Track (pt= " << Tk[i].pt() << "GeV/c, eta= " << Tk[i].eta()
392  << ") preidentified for agreement between track and ECAL cluster";
393  if (GoodPreId && (!GoodMatching))
394  LogDebug("GoodSeedProducer") << "Track (pt= " << Tk[i].pt() << "GeV/c, eta= " << Tk[i].eta()
395  << ") preidentified only for track properties";
396 #endif
397 
398  } // end of !disablePreId_
399 
400  if (GoodPreId) {
401  //NEW SEED with n hits
402  ElectronSeed NewSeed(Seed);
403  NewSeed.setCtfTrack(trackRef);
404  output_preid->push_back(NewSeed);
405  } else {
406  if (produceCkfseed_) {
407  output_nopre->push_back(Seed);
408  }
409  }
410  if (producePreId_ && myPreId.pt() > PtThresholdSavePredId_) {
411  // save the index of the PreId object as to be able to create a Ref later
412  refMap_[trackRef] = output_preidinfo->size();
413  output_preidinfo->push_back(myPreId);
414  }
415  } //end loop on track collection
416  } //end loop on the vector of track collections
417 
418  // no disablePreId_ switch, it is simpler to have an empty collection rather than no collection
419  iEvent.put(std::move(output_preid), preidgsf_);
420  if (produceCkfseed_)
421  iEvent.put(std::move(output_nopre), preidckf_);
422  if (producePreId_) {
423  const edm::OrphanHandle<reco::PreIdCollection> preIdRefProd = iEvent.put(std::move(output_preidinfo), preidname_);
424  // now make the Value Map, but only if one input collection
425  if (tracksContainers_.size() == 1) {
426  Handle<TrackCollection> tkRefCollection;
427  iEvent.getByToken(tracksContainers_[0], tkRefCollection);
428  fillPreIdRefValueMap(tkRefCollection, preIdRefProd, mapFiller);
429  mapFiller.fill();
430  iEvent.put(std::move(preIdMap_p), preidname_);
431  }
432  }
433  // clear temporary maps
434  refMap_.clear();
435 }
436 
437 // intialize the cross-thread cache to hold gbr trees and resolution maps
438 namespace goodseedhelpers {
439  HeavyObjectCache::HeavyObjectCache(const edm::ParameterSet& conf) {
440  // mvas
441  const bool useTmva = conf.getUntrackedParameter<bool>("UseTMVA", false);
442 
443  if (useTmva) {
444  std::array<edm::FileInPath, kMaxWeights> weights = {{edm::FileInPath(conf.getParameter<string>("Weights1")),
445  edm::FileInPath(conf.getParameter<string>("Weights2")),
446  edm::FileInPath(conf.getParameter<string>("Weights3")),
447  edm::FileInPath(conf.getParameter<string>("Weights4")),
448  edm::FileInPath(conf.getParameter<string>("Weights5")),
449  edm::FileInPath(conf.getParameter<string>("Weights6")),
450  edm::FileInPath(conf.getParameter<string>("Weights7")),
451  edm::FileInPath(conf.getParameter<string>("Weights8")),
452  edm::FileInPath(conf.getParameter<string>("Weights9"))}};
453 
454  for (UInt_t j = 0; j < gbr.size(); ++j) {
455  gbr[j] = createGBRForest(weights[j]);
456  }
457  }
458  }
459 } // namespace goodseedhelpers
460 
461 // ------------ method called once each job just before starting event loop ------------
463  //Magnetic Field
465  es.get<IdealMagneticFieldRecord>().get(magneticField);
466  B_ = magneticField->inTesla(GlobalPoint(0, 0, 0));
467 
469  pfTransformer_->OnlyProp();
470 
471  //Resolution maps
472  FileInPath ecalEtaMap(conf_.getParameter<string>("EtaMap"));
473  FileInPath ecalPhiMap(conf_.getParameter<string>("PhiMap"));
474  resMapEtaECAL_.reset(new PFResolutionMap("ECAL_eta", ecalEtaMap.fullPath().c_str()));
475  resMapPhiECAL_.reset(new PFResolutionMap("ECAL_phi", ecalPhiMap.fullPath().c_str()));
476 
477  //read threshold
478  FileInPath parFile(conf_.getParameter<string>("ThresholdFile"));
479  ifstream ifs(parFile.fullPath().c_str());
480  for (int iy = 0; iy < 81; ++iy)
481  ifs >> thr[iy];
482 }
483 
484 int GoodSeedProducer::getBin(float eta, float pt) {
485  int ie = 0;
486  int ip = 0;
487  if (fabs(eta) < 0.8)
488  ie = 0;
489  else {
490  if (fabs(eta) < 1.479)
491  ie = 1;
492  else
493  ie = 2;
494  }
495  if (pt < 6)
496  ip = 0;
497  else {
498  if (pt < 12)
499  ip = 1;
500  else
501  ip = 2;
502  }
503  int iep = ie * 3 + ip;
504  LogDebug("GoodSeedProducer") << "Track pt =" << pt << " eta=" << eta << " bin=" << iep;
505  return iep;
506 }
507 
509  const edm::OrphanHandle<reco::PreIdCollection>& preidhandle,
511  std::vector<reco::PreIdRef> values;
512 
513  unsigned ntracks = tracks->size();
514  for (unsigned itrack = 0; itrack < ntracks; ++itrack) {
515  reco::TrackRef theTrackRef(tracks, itrack);
516  std::map<reco::TrackRef, unsigned>::const_iterator itcheck = refMap_.find(theTrackRef);
517  if (itcheck == refMap_.end()) {
518  // the track has been early discarded
519  values.push_back(reco::PreIdRef());
520  } else {
521  edm::Ref<reco::PreIdCollection> preIdRef(preidhandle, itcheck->second);
522  values.push_back(preIdRef);
523  // std::cout << " Checking Refs " << (theTrackRef==preIdRef->trackRef()) << std::endl;
524  }
525  }
526  filler.insert(tracks, values.begin(), values.end());
527 }
528 
#define LogDebug(id)
int nHitsInSeed_
Number of hits in the seed;.
RunNumber_t run() const
Definition: EventID.h:38
const double TwoPi
const double Pi
T getParameter(std::string const &) const
EventNumber_t event() const
Definition: EventID.h:40
T getUntrackedParameter(std::string const &, T const &) const
OrphanHandle< PROD > put(std::unique_ptr< PROD > product)
Put a new product.
Definition: Event.h:131
void setECALMatchingProperties(PFClusterRef clusterRef, const math::XYZPoint &ecalpos, const math::XYZPoint &meanShower, float deta, float dphi, float chieta, float chiphi, float chi2, float eop)
Definition: PreId.h:33
T perp() const
Definition: PV3DBase.h:69
std::string preidckf_
Name of the Seed(Ckf) Collection.
edm::EDGetTokenT< reco::PFClusterCollection > pfCLusTagPSLabel_
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:525
float eP
VARIABLES NEEDED FOR TMVA.
std::unique_ptr< TrajectorySmoother > smoother_
Smoother.
#define nullptr
void insert(const H &h, I begin, I end)
Definition: ValueMap.h:53
Global3DPoint GlobalPoint
Definition: GlobalPoint.h:10
std::unique_ptr< PFResolutionMap > resMapEtaECAL_
std::vector< Track > TrackCollection
collection of Tracks
Definition: TrackFwd.h:14
T y() const
Definition: PV3DBase.h:60
double EcalStripSumE_minClusEnergy_
float thr[150]
vector of thresholds for different bins of eta and pt
T perp2() const
Definition: PV3DBase.h:68
GoodSeedProducer(const edm::ParameterSet &, const goodseedhelpers::HeavyObjectCache *)
TkClonerImpl hitCloner
void setCtfTrack(const CtfTrackRef &)
Set additional info.
Definition: ElectronSeed.cc:39
virtual TrajectorySmoother * clone() const =0
void setTrack(reco::TrackRef trackref)
Definition: PreId.h:31
virtual std::unique_ptr< TrajectoryFitter > clone() const =0
int getBin(float, float)
Find the bin in pt and eta.
int iEvent
Definition: GenABIO.cc:224
std::unique_ptr< TrajectoryFitter > fitter_
Fitter.
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:16
edm::ParameterSet conf_
void setMVA(bool accepted, float mva, unsigned n=0)
Definition: PreId.h:63
double EcalStripSumE_deltaEta_
double EcalStripSumE_deltaPhiOverQ_minValue_
double EcalStripSumE_deltaPhiOverQ_maxValue_
void setTrackFiltering(bool accepted, unsigned n=0)
Definition: PreId.h:62
void produce(edm::Event &, const edm::EventSetup &) override
T sqrt(T t)
Definition: SSEVec.h:19
edm::Ref< PFClusterCollection > PFClusterRef
persistent reference to PFCluster objects
Definition: PFClusterFwd.h:15
math::XYZVector B_
B field.
std::string preidname_
Name of the preid Collection (FB)
TrajectoryMeasurement const & lastMeasurement() const
Definition: Trajectory.h:150
T z() const
Definition: PV3DBase.h:61
T mag2() const
The vector magnitude squared. Equivalent to vec.dot(vec)
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
bool useQuality_
TRACK QUALITY.
void fillPreIdRefValueMap(edm::Handle< reco::TrackCollection > tkhandle, const edm::OrphanHandle< reco::PreIdCollection > &, edm::ValueMap< reco::PreIdRef >::Filler &filler)
double f[11][100]
std::vector< edm::EDGetTokenT< reco::TrackCollection > > tracksContainers_
double minPt_
Minimum transverse momentum and maximum pseudorapidity.
std::string fitterName_
bool disablePreId_
switch to disable the pre-id
ROOT::Math::DisplacementVector3D< ROOT::Math::Cartesian3D< float > > XYZVectorF
spatial vector with cartesian internal representation
Definition: Vector3D.h:16
void beginRun(const edm::Run &run, const edm::EventSetup &) override
reco::TrackBase::TrackQuality trackQuality_
double clusThreshold_
Cut on the energy of the clusters.
virtual GlobalVector inTesla(const GlobalPoint &gp) const =0
Field value ad specified global point, in Tesla.
bool propagateToEcalEntrance(bool first=true)
bool produceCkfseed_
Produce the Seed for Ckf tracks?
bool isValid() const
Definition: Trajectory.h:257
TrajectoryMeasurement const & firstMeasurement() const
Definition: Trajectory.h:166
float pt() const
Definition: PreId.h:80
T const * product() const
Definition: Handle.h:69
bool useTmva_
USE OF TMVA.
std::unique_ptr< PFResolutionMap > resMapPhiECAL_
XYZPointD XYZPoint
point in space with cartesian internal representation
Definition: Point3D.h:12
std::map< reco::TrackRef, unsigned > refMap_
Map used to create the TrackRef, PreIdRef value map.
float chiSquared() const
Definition: Trajectory.h:241
TrackingRecHit::ConstRecHitContainer ConstRecHitContainer
Definition: Trajectory.h:41
void setTrackProperties(float newchi2, float chi2ratio, float dpt)
Definition: PreId.h:53
edm::EventID id() const
Definition: EventBase.h:59
fixed size matrix
HLT enums.
void setECALMatching(bool accepted, unsigned n=0)
Definition: PreId.h:60
GlobalVector globalMomentum() const
T get() const
Definition: EventSetup.h:73
bool producePreId_
Produce the pre-id debugging collection.
std::unique_ptr< PFTrackTransformer > pfTransformer_
PFTrackTransformer.
std::string fullPath() const
Definition: FileInPath.cc:163
std::string trackerRecHitBuilderName_
std::string smootherName_
TrajectoryStateOnSurface const & updatedState() const
edm::EDGetTokenT< reco::PFClusterCollection > pfCLusTagHCLabel_
vars
Definition: DeepTauId.cc:158
tmp
align.sh
Definition: createJobs.py:716
Resolution Map (resolution as a function of eta and E)
T x() const
Definition: PV3DBase.h:59
std::string preidgsf_
Name of the Seed(Gsf) Collection.
T const * product() const
Definition: ESHandle.h:86
edm::EDGetTokenT< reco::PFClusterCollection > pfCLusTagECLabel_
double minEp_
Min and MAx allowed values forEoverP.
Power< A, B >::type pow(const A &a, const B &b)
Definition: Power.h:30
def move(src, dest)
Definition: eostools.py:511
std::vector< edm::EDGetTokenT< std::vector< Trajectory > > > trajContainers_
#define constexpr
std::unique_ptr< const GBRForest > createGBRForest(const std::string &weightsFile)
Definition: Run.h:45
double PtThresholdSavePredId_
Threshold to save Pre Idinfo.
Global3DVector GlobalVector
Definition: GlobalVector.h:10
void setFinalDecision(bool accepted, unsigned n=0)
Definition: PreId.h:59
math::XYZTLorentzVector XYZTLorentzVector
Definition: RawParticle.h:25
Basic3DVector unit() const