CMS 3D CMS Logo

PFDisplacedTrackerVertexProducer.cc
Go to the documentation of this file.
10 
12 public:
15 
18 
19  static void fillDescriptions(edm::ConfigurationDescriptions& descriptions);
20 
21 private:
22  void beginRun(const edm::Run&, const edm::EventSetup&) override;
23  void endRun(const edm::Run&, const edm::EventSetup&) override;
24 
26  void produce(edm::Event&, const edm::EventSetup&) override;
27 
32 
34 };
35 
38 
41  desc.add<edm::InputTag>("displacedTrackerVertexColl", {"particleFlowDisplacedVertex"});
42  desc.add<edm::InputTag>("trackColl", {"generalTracks"});
43  descriptions.add("pfDisplacedTrackerVertex", desc);
44 }
45 
46 using namespace std;
47 using namespace edm;
49  : pfTransformer_(nullptr), magneticFieldToken_(esConsumes<edm::Transition::BeginRun>()) {
50  produces<reco::PFRecTrackCollection>();
51  produces<reco::PFDisplacedTrackerVertexCollection>();
52 
54  consumes<reco::PFDisplacedVertexCollection>(iConfig.getParameter<InputTag>("displacedTrackerVertexColl"));
55 
56  pfTrackContainer_ = consumes<reco::TrackCollection>(iConfig.getParameter<InputTag>("trackColl"));
57 }
58 
60 
62  //create the empty collections
63  auto pfDisplacedTrackerVertexColl = std::make_unique<reco::PFDisplacedTrackerVertexCollection>();
64  auto pfRecTrackColl = std::make_unique<reco::PFRecTrackCollection>();
65 
66  reco::PFRecTrackRefProd pfTrackRefProd = iEvent.getRefBeforePut<reco::PFRecTrackCollection>();
67 
69  iEvent.getByToken(pfDisplacedVertexContainer_, nuclCollH);
70  const reco::PFDisplacedVertexCollection& nuclColl = *(nuclCollH.product());
71 
73  iEvent.getByToken(pfTrackContainer_, trackColl);
74 
75  int idx = 0;
76 
77  // cout << "Size of Displaced Vertices "
78  // << nuclColl.size() << endl;
79 
80  // loop on all NuclearInteraction
81  for (unsigned int icoll = 0; icoll < nuclColl.size(); icoll++) {
82  reco::PFRecTrackRefVector pfRecTkcoll;
83 
84  std::vector<reco::Track> refittedTracks = nuclColl[icoll].refittedTracks();
85 
86  // convert the secondary tracks
87  for (unsigned it = 0; it < refittedTracks.size(); it++) {
88  reco::TrackBaseRef trackBaseRef = nuclColl[icoll].originalTrack(refittedTracks[it]);
89 
90  // cout << "track base pt = " << trackBaseRef->pt() << endl;
91 
92  reco::TrackRef trackRef(trackColl, trackBaseRef.key());
93 
94  // cout << "track pt = " << trackRef->pt() << endl;
95 
96  reco::PFRecTrack pfRecTrack(trackBaseRef->charge(), reco::PFRecTrack::KF, trackBaseRef.key(), trackRef);
97 
98  // cout << pfRecTrack << endl;
99 
100  Trajectory FakeTraj;
101  bool valid = pfTransformer_->addPoints(pfRecTrack, *trackBaseRef, FakeTraj);
102  if (valid) {
103  pfRecTkcoll.push_back(reco::PFRecTrackRef(pfTrackRefProd, idx++));
104  pfRecTrackColl->push_back(pfRecTrack);
105  // cout << "after "<< pfRecTrack << endl;
106  }
107  }
108  reco::PFDisplacedVertexRef niRef(nuclCollH, icoll);
109  pfDisplacedTrackerVertexColl->push_back(reco::PFDisplacedTrackerVertex(niRef, pfRecTkcoll));
110  }
111 
112  iEvent.put(std::move(pfRecTrackColl));
113  iEvent.put(std::move(pfDisplacedTrackerVertexColl));
114 }
115 
116 // ------------ method called once each job just before starting event loop ------------
118  auto const& magneticField = &iSetup.getData(magneticFieldToken_);
121 }
122 
123 // ------------ method called once each job just after ending the event loop ------------
125  delete pfTransformer_;
126  pfTransformer_ = nullptr;
127 }
edm::EDGetTokenT< reco::TrackCollection > pfTrackContainer_
reconstructed track used as an input to particle flow
Definition: PFRecTrack.h:20
std::vector< PFDisplacedVertex > PFDisplacedVertexCollection
collection of PFDisplacedVertex objects
ESGetTokenH3DDVariant esConsumes(std::string const &Record, edm::ConsumesCollector &)
Definition: DeDxTools.cc:283
T getParameter(std::string const &) const
Definition: ParameterSet.h:307
T const & getData(const ESGetToken< T, R > &iToken) const noexcept(false)
Definition: EventSetup.h:119
void produce(edm::Event &, const edm::EventSetup &) override
Produce the PFRecTrack collection.
PFDisplacedTrackerVertexProducer(const edm::ParameterSet &)
Constructor.
edm::EDGetTokenT< reco::PFDisplacedVertexCollection > pfDisplacedVertexContainer_
void beginRun(const edm::Run &, const edm::EventSetup &) override
int charge() const
track electric charge
Definition: TrackBase.h:596
int iEvent
Definition: GenABIO.cc:224
void endRun(const edm::Run &, const edm::EventSetup &) override
Transition
Definition: Transition.h:12
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:16
PFTrackTransformer * pfTransformer_
PFTrackTransformer.
size_t key() const
Definition: RefToBase.h:226
const edm::ESGetToken< MagneticField, IdealMagneticFieldRecord > magneticFieldToken_
XYZVectorD XYZVector
spatial vector with cartesian internal representation
Definition: Vector3D.h:31
bool addPoints(reco::PFRecTrack &pftrack, const reco::Track &track, const Trajectory &traj, bool msgwarning=true) const
Add points to a PFTrack. return false if a TSOS is invalid.
void add(std::string const &label, ParameterSetDescription const &psetDescription)
HLT enums.
void push_back(value_type const &ref)
Add a Ref<C, T> to the RefVector.
Definition: RefVector.h:67
std::vector< PFRecTrack > PFRecTrackCollection
collection of PFRecTrack objects
Definition: PFRecTrackFwd.h:9
def move(src, dest)
Definition: eostools.py:511
Definition: Run.h:45
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
int icoll
Definition: AMPTWrapper.h:146