CMS 3D CMS Logo

PFTrackProducerFromL1Tracks.cc
Go to the documentation of this file.
6 
11 
15 
16 namespace l1tpf {
18  public:
21 
22  private:
26  int nParam_;
27  float fBz_;
29 
30  void produce(edm::Event &, const edm::EventSetup &) override;
31 
32  }; // class
33 } // namespace l1tpf
34 
36  : TrackTag_(consumes<std::vector<l1t::PFTrack::L1TTTrackType>>(iConfig.getParameter<edm::InputTag>("L1TrackTag"))),
37  BFieldTag_{esConsumes<MagneticField, IdealMagneticFieldRecord>()},
38  nParam_(iConfig.getParameter<unsigned int>("nParam")),
39  resolCalo_(iConfig.getParameter<edm::ParameterSet>("resolCalo")),
40  resolTrk_(iConfig.getParameter<edm::ParameterSet>("resolTrack")) {
41  produces<l1t::PFTrackCollection>();
42 }
43 
45  if (BFieldWatcher_.check(iSetup)) {
46  fBz_ = iSetup.getData(BFieldTag_).inTesla(GlobalPoint(0, 0, 0)).z();
47  }
48 
49  std::unique_ptr<l1t::PFTrackCollection> out(new l1t::PFTrackCollection());
50 
51  // https://github.com/skinnari/cmssw/blob/80c19f1b721325c3a02ee0482f72fb974a4c3bf7/L1Trigger/TrackFindingTracklet/test/L1TrackNtupleMaker.cc
53  iEvent.getByToken(TrackTag_, htracks);
54  const auto &tracks = *htracks;
55 
56  for (unsigned int i = 0, n = tracks.size(); i < n; ++i) {
57  const auto &tk = tracks[i];
58 
59  float pt = tk.momentum().perp();
60  float eta = tk.momentum().eta();
61  float phi = tk.momentum().phi();
62  float z0 = tk.POCA().z(); //cm
63  int charge = tk.rInv() > 0 ? +1 : -1;
64 
65  reco::Candidate::PolarLorentzVector p4p(pt, eta, phi, 0.137); // pion mass
66  reco::Particle::LorentzVector p4(p4p.X(), p4p.Y(), p4p.Z(), p4p.E());
67  reco::Particle::Point vtx(0., 0., z0);
68 
69  auto caloetaphi = l1tpf::propagateToCalo(p4, math::XYZTLorentzVector(0., 0., z0, 0.), charge, fBz_);
70 
71  float trkErr = resolTrk_(pt, std::abs(eta));
72  float caloErr = resolCalo_(pt, std::abs(eta));
73  int quality = 1;
74  out->emplace_back(charge,
75  p4,
76  vtx,
77  l1t::PFTrack::TrackRef(htracks, i),
78  nParam_,
79  caloetaphi.first,
80  caloetaphi.second,
81  trkErr,
82  caloErr,
83  quality);
84  }
85  iEvent.put(std::move(out));
86 }
edm::ESWatcher< IdealMagneticFieldRecord > BFieldWatcher_
std::pair< float, float > propagateToCalo(const math::XYZTLorentzVector &iMom, const math::XYZTLorentzVector &iVtx, double iCharge, double iBField)
Definition: L1TPFUtils.cc:7
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:16
Global3DPoint GlobalPoint
Definition: GlobalPoint.h:10
delete x;
Definition: CaloConfig.h:22
void produce(edm::Event &, const edm::EventSetup &) override
XYZTLorentzVectorD XYZTLorentzVector
Lorentz vector with cylindrical internal representation using pseudorapidity.
Definition: LorentzVector.h:29
int iEvent
Definition: GenABIO.cc:224
edm::EDGetTokenT< std::vector< l1t::PFTrack::L1TTTrackType > > TrackTag_
math::XYZPoint Point
point in the space
Definition: Particle.h:25
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
bool getData(T &iHolder) const
Definition: EventSetup.h:122
edm::ESGetToken< MagneticField, IdealMagneticFieldRecord > BFieldTag_
auto const & tracks
cannot be loose
TTTrack< Ref_Phase2TrackerDigi_ > L1TTTrackType
Definition: L1CaloTkTau.h:31
std::vector< l1t::PFTrack > PFTrackCollection
Definition: PFTrack.h:84
HLT enums.
PFTrackProducerFromL1Tracks(const edm::ParameterSet &)
string quality
math::XYZTLorentzVector LorentzVector
Lorentz vector.
Definition: Particle.h:21
def move(src, dest)
Definition: eostools.py:511
math::PtEtaPhiMLorentzVector PolarLorentzVector
Lorentz vector.
Definition: Candidate.h:38