CMS 3D CMS Logo

VertexFromTrackProducer.cc
Go to the documentation of this file.
2 
6 
8 
13 
14 //using namespace reco;
15 
16 //
17 // constants, enums and typedefs
18 //
19 
20 //
21 // static data member definitions
22 //
23 
24 //
25 // constructors and destructor
26 //
28  : trackToken(consumes<edm::View<reco::Track> >(conf.getParameter<edm::InputTag>("trackLabel"))),
29  candidateToken(consumes<edm::View<reco::RecoCandidate> >(conf.getParameter<edm::InputTag>("trackLabel"))),
30  triggerFilterElectronsSrc(consumes<trigger::TriggerFilterObjectWithRefs>(
31  conf.getParameter<edm::InputTag>("triggerFilterElectronsSrc"))),
33  consumes<trigger::TriggerFilterObjectWithRefs>(conf.getParameter<edm::InputTag>("triggerFilterMuonsSrc"))),
34  vertexLabel(consumes<edm::View<reco::Vertex> >(conf.getParameter<edm::InputTag>("vertexLabel"))),
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 }
47 
49 
50 //
51 // member functions
52 //
53 
54 // ------------ method called to produce the data ------------
57  const edm::EventSetup& iSetup) const {
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 }
191 
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 }
edm::StreamID
Definition: StreamID.h:30
VertexFromTrackProducer::produce
void produce(edm::StreamID, edm::Event &, const edm::EventSetup &) const override
Definition: VertexFromTrackProducer.cc:55
Handle.h
VertexFromTrackProducer::vertexLabel
const edm::EDGetTokenT< edm::View< reco::Vertex > > vertexLabel
Definition: VertexFromTrackProducer.h:61
DQMOfflineHeavyIons_cff.vertexLabel
vertexLabel
Definition: DQMOfflineHeavyIons_cff.py:115
electrons_cff.bool
bool
Definition: electrons_cff.py:372
mps_fire.i
i
Definition: mps_fire.py:355
edm::ParameterSetDescription::add
ParameterDescriptionBase * add(U const &iLabel, T const &value)
Definition: ParameterSetDescription.h:95
pwdgSkimBPark_cfi.beamSpot
beamSpot
Definition: pwdgSkimBPark_cfi.py:5
trigger::TriggerElectron
Definition: TriggerTypeDefs.h:78
MessageLogger.h
funct::false
false
Definition: Factorize.h:34
ESHandle.h
align::BeamSpot
Definition: StructureType.h:89
sistrip::View
View
Definition: ConstantsForView.h:26
DiDispStaMuonMonitor_cfi.pt
pt
Definition: DiDispStaMuonMonitor_cfi.py:39
edm
HLT enums.
Definition: AlignableModifier.h:19
reco::VertexCollection
std::vector< Vertex > VertexCollection
collection of Vertex objects
Definition: VertexFwd.h:9
edm::LogInfo
Definition: MessageLogger.h:254
edm::ParameterSetDescription
Definition: ParameterSetDescription.h:52
HLT_2018_cff.triggerFilterMuonsSrc
triggerFilterMuonsSrc
Definition: HLT_2018_cff.py:25061
VertexFromTrackProducer::candidateToken
const edm::EDGetTokenT< edm::View< reco::RecoCandidate > > candidateToken
Definition: VertexFromTrackProducer.h:58
reco
fixed size matrix
Definition: AlignmentAlgorithmBase.h:45
findQualityFiles.v
v
Definition: findQualityFiles.py:179
edm::Handle< reco::BeamSpot >
trigger::TriggerRefsCollections::getObjects
void getObjects(Vids &ids, VRphoton &refs) const
various physics-level getters:
Definition: TriggerRefsCollections.h:593
VertexFromTrackProducer::fUseTriggerFilterElectrons
const bool fUseTriggerFilterElectrons
Definition: VertexFromTrackProducer.h:68
MakerMacros.h
VertexFromTrackProducer::beamSpotLabel
const edm::EDGetTokenT< reco::BeamSpot > beamSpotLabel
Definition: VertexFromTrackProducer.h:62
edm::ConfigurationDescriptions::add
void add(std::string const &label, ParameterSetDescription const &psetDescription)
Definition: ConfigurationDescriptions.cc:57
VertexFromTrackProducer::~VertexFromTrackProducer
~VertexFromTrackProducer() override
Definition: VertexFromTrackProducer.cc:48
reco::BeamSpot
Definition: BeamSpot.h:21
trigger::TriggerMuon
Definition: TriggerTypeDefs.h:79
reco::Track
Definition: Track.h:27
PrimaryVertexMonitor_cff.beamSpotLabel
beamSpotLabel
Definition: PrimaryVertexMonitor_cff.py:9
HLT_2018_cff.triggerFilterElectronsSrc
triggerFilterElectronsSrc
Definition: HLT_2018_cff.py:25060
edm::ConfigurationDescriptions
Definition: ConfigurationDescriptions.h:28
Error.h
edm::ParameterSetDescription::addUntracked
ParameterDescriptionBase * addUntracked(U const &iLabel, T const &value)
Definition: ParameterSetDescription.h:100
bphysicsOniaDQM_cfi.vertex
vertex
Definition: bphysicsOniaDQM_cfi.py:7
HLT_2018_cff.InputTag
InputTag
Definition: HLT_2018_cff.py:79016
edm::ParameterSet
Definition: ParameterSet.h:36
math::XYZPoint
XYZPointD XYZPoint
point in space with cartesian internal representation
Definition: Point3D.h:12
edm::LogError
Definition: MessageLogger.h:183
VertexFromTrackProducer::fIsRecoCandidate
const bool fIsRecoCandidate
Definition: VertexFromTrackProducer.h:65
VertexFromTrackProducer::triggerFilterElectronsSrc
const edm::EDGetTokenT< trigger::TriggerFilterObjectWithRefs > triggerFilterElectronsSrc
Definition: VertexFromTrackProducer.h:59
VertexFromTrackProducer::fUseBeamSpot
const bool fUseBeamSpot
Definition: VertexFromTrackProducer.h:66
edm::ConfigurationDescriptions::setComment
void setComment(std::string const &value)
Definition: ConfigurationDescriptions.cc:48
iEvent
int iEvent
Definition: GenABIO.cc:224
VertexFromTrackProducer::fUseVertex
const bool fUseVertex
Definition: VertexFromTrackProducer.h:67
VertexFromTrackProducer.h
edm::EventSetup
Definition: EventSetup.h:57
VertexFromTrackProducer::fUseTriggerFilterMuons
const bool fUseTriggerFilterMuons
Definition: VertexFromTrackProducer.h:68
Electron.h
eostools.move
def move(src, dest)
Definition: eostools.py:511
HltBtagValidation_cff.Vertex
Vertex
Definition: HltBtagValidation_cff.py:32
HiEvtPlane_cfi.maxpt
maxpt
Definition: HiEvtPlane_cfi.py:20
RecoChargedCandidate.h
math::Error::type
ErrorD< N >::type type
Definition: Error.h:32
Point3D.h
VertexFromTrackProducer::VertexFromTrackProducer
VertexFromTrackProducer(const edm::ParameterSet &)
Definition: VertexFromTrackProducer.cc:27
trigger
Definition: HLTPrescaleTableCond.h:8
HLT_2018_cff.track
track
Definition: HLT_2018_cff.py:10352
mps_fire.result
result
Definition: mps_fire.py:303
edm::HandleBase::isValid
bool isValid() const
Definition: HandleBase.h:70
edm::Event
Definition: Event.h:73
VertexFromTrackProducer::fillDescriptions
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
Definition: VertexFromTrackProducer.cc:192
VertexFromTrackProducer::trackToken
const edm::EDGetTokenT< edm::View< reco::Track > > trackToken
Definition: VertexFromTrackProducer.h:57
edm::InputTag
Definition: InputTag.h:15
reco::Vertex
Definition: Vertex.h:35
VertexFromTrackProducer::fVerbose
const bool fVerbose
Definition: VertexFromTrackProducer.h:69
VertexFromTrackProducer::triggerFilterMuonsSrc
const edm::EDGetTokenT< trigger::TriggerFilterObjectWithRefs > triggerFilterMuonsSrc
Definition: VertexFromTrackProducer.h:60