CMS 3D CMS Logo

List of all members | Public Member Functions | Static Public Member Functions | Private Attributes
VertexFromTrackProducer Class Reference

#include <RecoVertex/PrimaryVertexProducer/src/VertexFromTrackProducer.cc>

Inheritance diagram for VertexFromTrackProducer:
edm::global::EDProducer<> edm::global::EDProducerBase edm::ProducerBase edm::EDConsumerBase edm::ProductRegistryHelper

Public Member Functions

void produce (edm::StreamID, edm::Event &, const edm::EventSetup &) const override
 
 VertexFromTrackProducer (const edm::ParameterSet &)
 
 ~VertexFromTrackProducer () override
 
- Public Member Functions inherited from edm::global::EDProducer<>
 EDProducer ()=default
 
bool hasAbilityToProduceInBeginLumis () const final
 
bool hasAbilityToProduceInBeginRuns () const final
 
bool hasAbilityToProduceInEndLumis () const final
 
bool hasAbilityToProduceInEndRuns () const final
 
bool wantsGlobalLuminosityBlocks () const final
 
bool wantsGlobalRuns () const final
 
bool wantsStreamLuminosityBlocks () const final
 
bool wantsStreamRuns () const final
 
- Public Member Functions inherited from edm::global::EDProducerBase
 EDProducerBase ()
 
ModuleDescription const & moduleDescription () const
 
 ~EDProducerBase () override
 
- Public Member Functions inherited from edm::ProducerBase
void callWhenNewProductsRegistered (std::function< void(BranchDescription const &)> const &func)
 
std::vector< edm::ProductResolverIndex > const & indiciesForPutProducts (BranchType iBranchType) const
 
 ProducerBase ()
 
std::vector< edm::ProductResolverIndex > const & putTokenIndexToProductResolverIndex () const
 
void registerProducts (ProducerBase *, ProductRegistry *, ModuleDescription const &)
 
std::function< void(BranchDescription const &)> registrationCallback () const
 used by the fwk to register list of products More...
 
void resolvePutIndicies (BranchType iBranchType, ModuleToResolverIndicies const &iIndicies, std::string const &moduleLabel)
 
 ~ProducerBase () noexcept(false) override
 
- Public Member Functions inherited from edm::EDConsumerBase
std::vector< ConsumesInfoconsumesInfo () const
 
void convertCurrentProcessAlias (std::string const &processName)
 Convert "@currentProcess" in InputTag process names to the actual current process name. More...
 
 EDConsumerBase ()
 
 EDConsumerBase (EDConsumerBase const &)=delete
 
 EDConsumerBase (EDConsumerBase &&)=default
 
ESProxyIndex const * esGetTokenIndices (edm::Transition iTrans) const
 
ProductResolverIndexAndSkipBit indexFrom (EDGetToken, BranchType, TypeID const &) const
 
void itemsMayGet (BranchType, std::vector< ProductResolverIndexAndSkipBit > &) const
 
void itemsToGet (BranchType, std::vector< ProductResolverIndexAndSkipBit > &) const
 
std::vector< ProductResolverIndexAndSkipBit > const & itemsToGetFrom (BranchType iType) const
 
void labelsForToken (EDGetToken iToken, Labels &oLabels) const
 
void modulesWhoseProductsAreConsumed (std::vector< ModuleDescription const * > &modules, ProductRegistry const &preg, std::map< std::string, ModuleDescription const * > const &labelsToDesc, std::string const &processName) const
 
EDConsumerBase const & operator= (EDConsumerBase const &)=delete
 
EDConsumerBaseoperator= (EDConsumerBase &&)=default
 
bool registeredToConsume (ProductResolverIndex, bool, BranchType) const
 
bool registeredToConsumeMany (TypeID const &, BranchType) const
 
ProductResolverIndexAndSkipBit uncheckedIndexFrom (EDGetToken) const
 
void updateLookup (BranchType iBranchType, ProductResolverIndexHelper const &, bool iPrefetchMayGet)
 
void updateLookup (eventsetup::ESRecordsToProxyIndices const &)
 
virtual ~EDConsumerBase () noexcept(false)
 

Static Public Member Functions

static void fillDescriptions (edm::ConfigurationDescriptions &descriptions)
 
- Static Public Member Functions inherited from edm::global::EDProducerBase
static const std::string & baseType ()
 
static void fillDescriptions (ConfigurationDescriptions &descriptions)
 
static void prevalidate (ConfigurationDescriptions &descriptions)
 

Private Attributes

const edm::EDGetTokenT< reco::BeamSpotbeamSpotLabel
 
const edm::EDGetTokenT< edm::View< reco::RecoCandidate > > candidateToken
 
const bool fIsRecoCandidate
 
const bool fUseBeamSpot
 
const bool fUseTriggerFilterElectrons
 
const bool fUseTriggerFilterMuons
 
const bool fUseVertex
 
const bool fVerbose
 
const edm::EDGetTokenT< edm::View< reco::Track > > trackToken
 
const edm::EDGetTokenT< trigger::TriggerFilterObjectWithRefstriggerFilterElectronsSrc
 
const edm::EDGetTokenT< trigger::TriggerFilterObjectWithRefstriggerFilterMuonsSrc
 
const edm::EDGetTokenT< edm::View< reco::Vertex > > vertexLabel
 

Additional Inherited Members

- Public Types inherited from edm::global::EDProducerBase
typedef EDProducerBase ModuleType
 
- Public Types inherited from edm::ProducerBase
using ModuleToResolverIndicies = std::unordered_multimap< std::string, std::tuple< edm::TypeID const *, const char *, edm::ProductResolverIndex >>
 
typedef ProductRegistryHelper::TypeLabelList TypeLabelList
 
- Public Types inherited from edm::EDConsumerBase
typedef ProductLabels Labels
 
- Protected Member Functions inherited from edm::ProducerBase
ProducesCollector producesCollector ()
 
- Protected Member Functions inherited from edm::EDConsumerBase
template<typename ProductType , BranchType B = InEvent>
EDGetTokenT< ProductType > consumes (edm::InputTag const &tag)
 
EDGetToken consumes (const TypeToGet &id, edm::InputTag const &tag)
 
template<BranchType B>
EDGetToken consumes (TypeToGet const &id, edm::InputTag const &tag)
 
ConsumesCollector consumesCollector ()
 Use a ConsumesCollector to gather consumes information from helper functions. More...
 
template<typename ProductType , BranchType B = InEvent>
void consumesMany ()
 
void consumesMany (const TypeToGet &id)
 
template<BranchType B>
void consumesMany (const TypeToGet &id)
 
template<typename ESProduct , typename ESRecord , Transition Tr = Transition::Event>
auto esConsumes ()
 
template<typename ESProduct , typename ESRecord , Transition Tr = Transition::Event>
auto esConsumes (ESInputTag const &tag)
 
template<typename ProductType , BranchType B = InEvent>
EDGetTokenT< ProductType > mayConsume (edm::InputTag const &tag)
 
EDGetToken mayConsume (const TypeToGet &id, edm::InputTag const &tag)
 
template<BranchType B>
EDGetToken mayConsume (const TypeToGet &id, edm::InputTag const &tag)
 

Detailed Description

Description: produces a primary vertex extrapolating the track of a candidate on the beam axis

Implementation: <Notes on="" implementation>="">

Definition at line 46 of file VertexFromTrackProducer.h.

Constructor & Destructor Documentation

VertexFromTrackProducer::VertexFromTrackProducer ( const edm::ParameterSet conf)
explicit

Definition at line 27 of file VertexFromTrackProducer.cc.

30  triggerFilterElectronsSrc(consumes<trigger::TriggerFilterObjectWithRefs>(
31  conf.getParameter<edm::InputTag>("triggerFilterElectronsSrc"))),
33  consumes<trigger::TriggerFilterObjectWithRefs>(conf.getParameter<edm::InputTag>("triggerFilterMuonsSrc"))),
35  beamSpotLabel(consumes<reco::BeamSpot>(conf.getParameter<edm::InputTag>("beamSpotLabel"))),
36  fIsRecoCandidate(conf.getParameter<bool>("isRecoCandidate")),
37  fUseBeamSpot(conf.getParameter<bool>("useBeamSpot")),
38  fUseVertex(conf.getParameter<bool>("useVertex")),
39  fUseTriggerFilterElectrons(conf.getParameter<bool>("useTriggerFilterElectrons")),
40  fUseTriggerFilterMuons(conf.getParameter<bool>("useTriggerFilterMuons")),
41  fVerbose(conf.getUntrackedParameter<bool>("verbose", false)) {
42  edm::LogInfo("PVDebugInfo") << "Initializing VertexFromTrackProducer"
43  << "\n";
44 
45  produces<reco::VertexCollection>();
46 }
T getParameter(std::string const &) const
T getUntrackedParameter(std::string const &, T const &) const
const edm::EDGetTokenT< reco::BeamSpot > beamSpotLabel
EDGetTokenT< ProductType > consumes(edm::InputTag const &tag)
const edm::EDGetTokenT< edm::View< reco::RecoCandidate > > candidateToken
const edm::EDGetTokenT< trigger::TriggerFilterObjectWithRefs > triggerFilterElectronsSrc
const edm::EDGetTokenT< edm::View< reco::Track > > trackToken
const edm::EDGetTokenT< trigger::TriggerFilterObjectWithRefs > triggerFilterMuonsSrc
const edm::EDGetTokenT< edm::View< reco::Vertex > > vertexLabel
VertexFromTrackProducer::~VertexFromTrackProducer ( )
override

Definition at line 48 of file VertexFromTrackProducer.cc.

48 {}

Member Function Documentation

void VertexFromTrackProducer::fillDescriptions ( edm::ConfigurationDescriptions descriptions)
static

Definition at line 192 of file VertexFromTrackProducer.cc.

References edm::ConfigurationDescriptions::add(), edm::ParameterSetDescription::add(), edm::ParameterSetDescription::addUntracked(), HLT_2018_cff::InputTag, and edm::ConfigurationDescriptions::setComment().

192  {
194 
195  desc.add<bool>("isRecoCandidate", false)
196  ->setComment(
197  "If isRecoCandidate=True \"trackLabel\" is used and assumed to be collection of candidates.\nOtherwise it is "
198  "assumed that \"trackLabel\" is collection of tracks and is used when useTriggerFilterElectrons=False and "
199  "useTriggerFilterMuons=False");
200  desc.add<edm::InputTag>("trackLabel", edm::InputTag("hltL3MuonCandidates"))
201  ->setComment("Collection of tracks or candidates");
202  desc.add<bool>("useTriggerFilterElectrons", false)
203  ->setComment("Use leading electron passing \"triggerFilterElectronsSrc\" filter to determine z vertex position");
204  desc.add<edm::InputTag>("triggerFilterElectronsSrc",
205  edm::InputTag("hltEle20CaloIdVTCaloIsoTTrkIdTTrkIsoL1JetTrackIsoFilter"))
206  ->setComment("Name of electron filter");
207  desc.add<bool>("useTriggerFilterMuons", true)
208  ->setComment("Use leading muon passing \"triggerFilterMuonsSrc\" filter to determine z vertex position");
209  desc.add<edm::InputTag>("triggerFilterMuonsSrc", edm::InputTag("hltSingleMuIsoL3IsoFiltered15"))
210  ->setComment("Name of muon filter");
211  desc.add<bool>("useBeamSpot", true)->setComment("Use beam spot for x/y vertex position");
212  desc.add<edm::InputTag>("beamSpotLabel", edm::InputTag("hltOnlineBeamSpot"))->setComment("Beamspot collection");
213  desc.add<bool>("useVertex", true)
214  ->setComment("Use vertex for x/y vertex position (beam spot is used when PV does not exit)");
215  desc.add<edm::InputTag>("vertexLabel", edm::InputTag("hltPixelVertices"))->setComment("Vertex collection");
216 
217  desc.addUntracked<bool>("verbose", false)->setComment("Switch on/off verbosity");
218  descriptions.setComment(
219  "This module produces vertex with z-coordinate determined with the highest-Pt lepton track and x/y-coordinates "
220  "taken from BeamSpot/Vertex");
221  descriptions.add("hltVertexFromTrackProducer", desc);
222 }
ParameterDescriptionBase * addUntracked(U const &iLabel, T const &value)
ParameterDescriptionBase * add(U const &iLabel, T const &value)
void setComment(std::string const &value)
void add(std::string const &label, ParameterSetDescription const &psetDescription)
void VertexFromTrackProducer::produce ( edm::StreamID  iStreamId,
edm::Event iEvent,
const edm::EventSetup iSetup 
) const
override

Definition at line 55 of file VertexFromTrackProducer.cc.

References pwdgSkimBPark_cfi::beamSpot, beamSpotLabel, candidateToken, reco::TrackBase::dz(), fIsRecoCandidate, fUseBeamSpot, fUseTriggerFilterElectrons, fUseTriggerFilterMuons, fUseVertex, fVerbose, edm::Event::getByToken(), trigger::TriggerRefsCollections::getObjects(), mps_fire::i, edm::HandleBase::isValid(), HiEvtPlane_cfi::maxpt, eostools::move(), reco::BeamSpot::position(), reco::Vertex::position(), DiDispStaMuonMonitor_cfi::pt, edm::Event::put(), mps_fire::result, HLT_2018_cff::track, trackToken, trigger::TriggerElectron, triggerFilterElectronsSrc, triggerFilterMuonsSrc, trigger::TriggerMuon, findQualityFiles::v, bphysicsOniaDQM_cfi::vertex, vertexLabel, reco::TrackBase::vz(), reco::Vertex::xError(), reco::Vertex::yError(), and reco::Vertex::zError().

57  {
58  using namespace edm;
59 
60  std::unique_ptr<reco::VertexCollection> result(new reco::VertexCollection);
62 
63  math::XYZPoint vertexPoint;
64  bool vertexAvailable = false;
65 
66  // get the BeamSpot
67  edm::Handle<reco::BeamSpot> recoBeamSpotHandle;
68  iEvent.getByToken(beamSpotLabel, recoBeamSpotHandle);
69  if (recoBeamSpotHandle.isValid()) {
70  reco::BeamSpot beamSpot = *recoBeamSpotHandle;
71  vertexPoint = beamSpot.position();
72  } else {
73  edm::LogError("UnusableBeamSpot") << "No beam spot found in Event";
74  }
75 
76  if (fUseVertex) {
77  // get the Vertex
78  edm::Handle<edm::View<reco::Vertex> > recoVertexHandle;
79  iEvent.getByToken(vertexLabel, recoVertexHandle);
80  if ((recoVertexHandle.isValid()) && (!recoVertexHandle->empty())) {
81  reco::Vertex vertex = recoVertexHandle->at(0);
82  vertexPoint = vertex.position();
83  vertexAvailable = true;
84  } else {
85  edm::LogInfo("UnusableVertex") << "No vertex found in Event, beam spot used instaed"
86  << "\n";
87  }
88  }
89 
90  const reco::Track* track = nullptr;
91  if (fIsRecoCandidate) {
93  iEvent.getByToken(candidateToken, candidateHandle);
94  if ((candidateHandle.isValid()) && (!candidateHandle->empty())) {
95  double maxpt = 0.;
96  unsigned i_maxpt = 0;
97  for (unsigned i = 0; i < candidateHandle->size(); ++i) {
98  double pt = candidateHandle->ptrAt(i)->pt();
99  if (pt > maxpt) {
100  i_maxpt = i;
101  maxpt = pt;
102  }
103  }
104  track = dynamic_cast<const reco::Track*>(candidateHandle->ptrAt(i_maxpt)->bestTrack());
105  }
106  } else if (fUseTriggerFilterElectrons) {
108  iEvent.getByToken(triggerFilterElectronsSrc, triggerfilter);
109  std::vector<reco::ElectronRef> recocandidates;
110  triggerfilter->getObjects(trigger::TriggerElectron, recocandidates);
111  if ((!recocandidates.empty())) {
112  double maxpt = 0.;
113  unsigned i_maxpt = 0;
114  for (unsigned i = 0; i < recocandidates.size(); ++i) {
115  double pt = recocandidates.at(i)->pt();
116  if (pt > maxpt) {
117  i_maxpt = i;
118  maxpt = pt;
119  }
120  track = dynamic_cast<const reco::Track*>(recocandidates.at(i_maxpt)->bestTrack());
121  }
122  }
123  } else if (fUseTriggerFilterMuons) {
125  iEvent.getByToken(triggerFilterMuonsSrc, triggerfilter);
126  std::vector<reco::RecoChargedCandidateRef> recocandidates;
127  triggerfilter->getObjects(trigger::TriggerMuon, recocandidates);
128  if ((!recocandidates.empty())) {
129  double maxpt = 0.;
130  unsigned i_maxpt = 0;
131  for (unsigned i = 0; i < recocandidates.size(); ++i) {
132  double pt = recocandidates.at(i)->pt();
133  if (pt > maxpt) {
134  i_maxpt = i;
135  maxpt = pt;
136  }
137  track = dynamic_cast<const reco::Track*>(recocandidates.at(i_maxpt)->bestTrack());
138  }
139  }
140  } else {
142  iEvent.getByToken(trackToken, trackHandle);
143  if ((trackHandle.isValid()) && (!trackHandle->empty())) {
144  double maxpt = 0.;
145  unsigned i_maxpt = 0;
146  for (unsigned i = 0; i < trackHandle->size(); ++i) {
147  double pt = trackHandle->ptrAt(i)->pt();
148  if (pt > maxpt) {
149  i_maxpt = i;
150  maxpt = pt;
151  }
152  }
153  track = dynamic_cast<const reco::Track*>(&*trackHandle->ptrAt(i_maxpt));
154  }
155  }
156 
157  if (track) {
158  if (fUseBeamSpot || (fUseVertex && vertexAvailable)) {
159  vertexPoint.SetZ(vertexPoint.z() + track->dz(vertexPoint));
160  } else {
161  vertexPoint.SetZ(track->vz());
162  }
163  }
164  math::Error<3>::type noErrors;
165  reco::Vertex v(vertexPoint, noErrors);
166  vColl.push_back(v);
167 
168  // provide beamspot or primary vertex if no candidate found
169  //if(vColl.size()==0)
170  //{
171  // math::Error<3>::type noErrors;
172  // reco::Vertex v(vertexPoint, noErrors);
173  // vColl.push_back(v);
174  //}
175 
176  if (fVerbose) {
177  int ivtx = 0;
178  edm::LogInfo("PVDebugInfo") << "Vertices by VertexFromTrackProducer: \n";
179  for (reco::VertexCollection::const_iterator v = vColl.begin(); v != vColl.end(); ++v) {
180  edm::LogInfo("PVDebugInfo") << "\t"
181  << "recvtx " << ivtx++ << " x " << std::setw(6) << v->position().x() << " dx "
182  << std::setw(6) << v->xError() << " y " << std::setw(6) << v->position().y() << " dy "
183  << std::setw(6) << v->yError() << " z " << std::setw(6) << v->position().z() << " dz "
184  << std::setw(6) << v->zError() << " \n ";
185  }
186  }
187 
188  *result = vColl;
189  iEvent.put(std::move(result));
190 }
OrphanHandle< PROD > put(std::unique_ptr< PROD > product)
Put a new product.
Definition: Event.h:131
void getObjects(Vids &ids, VRphoton &refs) const
various physics-level getters:
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:525
std::vector< Vertex > VertexCollection
collection of Vertex objects
Definition: VertexFwd.h:9
ErrorD< N >::type type
Definition: Error.h:32
const Point & position() const
position
Definition: Vertex.h:113
const edm::EDGetTokenT< reco::BeamSpot > beamSpotLabel
const edm::EDGetTokenT< edm::View< reco::RecoCandidate > > candidateToken
const edm::EDGetTokenT< trigger::TriggerFilterObjectWithRefs > triggerFilterElectronsSrc
bool isValid() const
Definition: HandleBase.h:70
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:596
double vz() const
z coordinate of the reference point on track
Definition: TrackBase.h:626
XYZPointD XYZPoint
point in space with cartesian internal representation
Definition: Point3D.h:12
const edm::EDGetTokenT< edm::View< reco::Track > > trackToken
HLT enums.
const edm::EDGetTokenT< trigger::TriggerFilterObjectWithRefs > triggerFilterMuonsSrc
const Point & position() const
position
Definition: BeamSpot.h:59
def move(src, dest)
Definition: eostools.py:511
const edm::EDGetTokenT< edm::View< reco::Vertex > > vertexLabel

Member Data Documentation

const edm::EDGetTokenT<reco::BeamSpot> VertexFromTrackProducer::beamSpotLabel
private

Definition at line 62 of file VertexFromTrackProducer.h.

Referenced by produce().

const edm::EDGetTokenT<edm::View<reco::RecoCandidate> > VertexFromTrackProducer::candidateToken
private

Definition at line 58 of file VertexFromTrackProducer.h.

Referenced by produce().

const bool VertexFromTrackProducer::fIsRecoCandidate
private

Definition at line 65 of file VertexFromTrackProducer.h.

Referenced by produce().

const bool VertexFromTrackProducer::fUseBeamSpot
private

Definition at line 66 of file VertexFromTrackProducer.h.

Referenced by produce().

const bool VertexFromTrackProducer::fUseTriggerFilterElectrons
private

Definition at line 68 of file VertexFromTrackProducer.h.

Referenced by produce().

const bool VertexFromTrackProducer::fUseTriggerFilterMuons
private

Definition at line 68 of file VertexFromTrackProducer.h.

Referenced by produce().

const bool VertexFromTrackProducer::fUseVertex
private

Definition at line 67 of file VertexFromTrackProducer.h.

Referenced by produce().

const bool VertexFromTrackProducer::fVerbose
private

Definition at line 69 of file VertexFromTrackProducer.h.

Referenced by produce().

const edm::EDGetTokenT<edm::View<reco::Track> > VertexFromTrackProducer::trackToken
private

Definition at line 57 of file VertexFromTrackProducer.h.

Referenced by produce().

const edm::EDGetTokenT<trigger::TriggerFilterObjectWithRefs> VertexFromTrackProducer::triggerFilterElectronsSrc
private

Definition at line 59 of file VertexFromTrackProducer.h.

Referenced by produce().

const edm::EDGetTokenT<trigger::TriggerFilterObjectWithRefs> VertexFromTrackProducer::triggerFilterMuonsSrc
private

Definition at line 60 of file VertexFromTrackProducer.h.

Referenced by produce().

const edm::EDGetTokenT<edm::View<reco::Vertex> > VertexFromTrackProducer::vertexLabel
private

Definition at line 61 of file VertexFromTrackProducer.h.

Referenced by produce().